harperdb 4.7.6 → 4.7.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  "use strict";var QX=Object.create;var _m=Object.defineProperty;var XX=Object.getOwnPropertyDescriptor;var ZX=Object.getOwnPropertyNames;var e5=Object.getPrototypeOf,t5=Object.prototype.hasOwnProperty;var a=(e,t)=>_m(e,"name",{value:t,configurable:!0});var se=(e,t)=>()=>(e&&(t=e(e=0)),t);var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ye=(e,t)=>{for(var r in t)_m(e,r,{get:t[r],enumerable:!0})},cU=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of ZX(t))!t5.call(e,s)&&s!==r&&_m(e,s,{get:()=>t[s],enumerable:!(n=XX(t,s))||n.enumerable});return e};var b=(e,t,r)=>(r=e!=null?QX(e5(e)):{},cU(t||!e||!e.__esModule?_m(r,"default",{value:e,enumerable:!0}):r,e)),D=e=>cU(_m({},"__esModule",{value:!0}),e);var yt=M((KCe,dU)=>{var{join:r5,dirname:lU}=require("node:path"),{existsSync:n5,readFileSync:s5}=require("node:fs");function i5(){let t=__dirname,r,n=0;for(;!n5(r=r5(t,"package.json"));)if(t===(t=lU(t))||n++>10)throw new Error("Could not find package root");return r}a(i5,"findPackageJson");var uU=i5(),o5=JSON.parse(s5(uU,"utf8")),a5=lU(uU);dU.exports={packageJson:o5,PACKAGE_ROOT:a5}});var __=M((WCe,fU)=>{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}=yt(),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 w=new Set;e.sync(h.map(I=>`${I}/**/*.ts`),{cwd:p}).forEach(I=>{let H=0,X=0;try{w.add(I),H=o(n(p,I)).mtimeMs-5e3,X=o(n(p,E,I.replace(/.ts$/,".js"))).mtimeMs}catch{}H>X&&(S=!0)}),e.sync(h.map(I=>`${I}/**/*.js`),{cwd:n(p,E)}).forEach(I=>{if(!w.has(I.replace(/.js$/,".ts")))try{u(n(p,E,I))}catch{}})}else S=!0;if(S){console.log("Compiling TypeScript...");let w=f("npx",["tsc"],{cwd:p});if(w.stdout?.length&&console.log(w.stdout.toString()),w.stderr?.length&&console.log(w.stderr.toString()),y){let I=n(t(),"harperdb-tsc.pid"),H=!1;if(i(I))try{process.kill(+c(I,"utf8"),0),H=!0}catch{}if(!H){console.log("Starting background TypeScript compilation...");let X=m("npx",["tsc","--watch"],{detached:!0,cwd:p,stdio:"ignore"});X.on("error",q=>{console.error("Error trying to compile TypeScript",q)}),X.pid&&l(I,String(X.pid),"utf-8"),X.unref()}}}}let _=fU.constructor,R=_._findPath;_._findPath=function(S,y,w){if(S.startsWith(".")&&!w&&y.length===1&&y[0].startsWith(p)&&!y[0].includes("node_modules")){let I=r(p,y[0]),H;I.startsWith(E)?H=n(p,r(E,I)):H=n(p,E,I),(S.endsWith(".js")||S.endsWith(".ts"))&&(S=S.slice(0,-3));let X=n(H,S),q=X+".js";if(i(q))return q;if(s(X).includes(".")&&i(X))return X}return R(S,y,w)}}});var j={};ye(j,{AUTH_AUDIT_STATUS:()=>oi,AUTH_AUDIT_TYPES:()=>Ka,BACKUP_DIR_NAME:()=>oA,BOOT_PROPS_FILE_NAME:()=>P5,BOOT_PROP_PARAMS:()=>hU,CLUSTERING_FLAG:()=>cA,CLUSTERING_PROCESSES:()=>_5,CLUSTER_MESSAGE_TYPE_ENUM:()=>aA,CLUSTER_OPERATIONS:()=>Y5,CONFIG_PARAMS:()=>x,CONFIG_PARAM_MAP:()=>EU,DATABASES_DIR_NAME:()=>tl,DATABASES_PARAM_CONFIG:()=>J5,DEFAULT_DATABASE_NAME:()=>S5,ESCAPED_FORWARD_SLASH_REGEX:()=>C5,FORWARD_SLASH_REGEX:()=>w5,FUNC_VAL:()=>a8,GEO_CONVERSION_ENUM:()=>j5,HDB_COMPONENT_CONFIG_FILE:()=>u5,HDB_CONFIG_FILE:()=>c5,HDB_DEFAULT_CONFIG_FILE:()=>l5,HDB_FILE_PERMISSIONS:()=>D5,HDB_HOME_DIR_NAME:()=>O5,HDB_PID_FILE:()=>g5,HDB_PROCESS_SERVICES:()=>E5,HDB_PROC_NAME:()=>d5,HDB_RESTART_SCRIPT:()=>f5,HDB_ROOT_DIR_NAME:()=>rA,HDB_SETTINGS_NAMES:()=>Tm,HDB_SUPPORT_ADDRESS:()=>pU,INFO_TABLE_HASH_ATTRIBUTE:()=>F5,INSERT_MAX_CHARACTER_SIZE:()=>x5,INSTALL_PROMPTS:()=>U5,ITC_EVENT_TYPES:()=>b_,JOB_STATUS_ENUM:()=>q5,JOB_TYPE_ENUM:()=>Q5,JWT_ENUM:()=>ym,LAUNCH_SERVICE_SCRIPTS:()=>y5,LEGACY_CONFIG_PARAMS:()=>z5,LEGACY_DATABASES_DIR_NAME:()=>T_,LICENSE_FILE_NAME:()=>G5,LICENSE_KEY_DIR_NAME:()=>iA,LICENSE_VALUES:()=>X5,LOG_LEVELS:()=>gm,LOG_NAMES:()=>T5,METADATA_PROPERTY:()=>t8,NODE_ERROR_CODES:()=>e8,OPERATIONS_ENUM:()=>V,PERMS_CRUD_ENUM:()=>i8,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>s8,PRE_4_0_0_VERSION:()=>c8,PROCESS_DESCRIPTORS:()=>h5,PROCESS_NAME_ENV_PROP:()=>M5,RAM_ALLOCATION_ENUM:()=>Z5,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>R_,REG_KEY_FILE_NAME:()=>H5,RESTART_TIMEOUT_MS:()=>L5,ROLE_TYPES_ENUM:()=>R5,S3_BUCKET_AUTH_KEYS:()=>V5,SEARCH_NOT_FOUND_MESSAGE:()=>A5,SEARCH_WILDCARDS:()=>o8,SERVICE_ACTIONS_ENUM:()=>W5,SUPPORT_HELP_MSG:()=>b5,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>k5,SYSTEM_SCHEMA_NAME:()=>Sm,SYSTEM_TABLE_NAMES:()=>Bu,THREAD_TYPES:()=>uA,TIME_STAMP_NAMES:()=>n8,TIME_STAMP_NAMES_ENUM:()=>r8,TRANSACTIONS_DIR_NAME:()=>v5,UNICODE_FORWARD_SLASH:()=>N5,UNICODE_PERIOD:()=>I5,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>B5,VALID_S3_FILE_TYPES:()=>$5,VALID_SQL_OPS_ENUM:()=>K5,VALUE_SEARCH_COMPARATORS:()=>y_,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>lA});var g_,S_,c5,l5,rA,u5,d5,f5,mU,tA,nA,sA,m5,p5,h5,E5,_5,g5,S5,T5,gm,y5,R5,pU,b5,A5,I5,w5,N5,C5,Sm,O5,iA,P5,L5,D5,tl,T_,v5,oA,M5,hU,U5,x5,B5,Bu,F5,k5,H5,G5,q5,V,$5,V5,K5,Y5,W5,j5,Tm,z5,x,EU,J5,Q5,aA,X5,Z5,e8,t8,cA,_U,gU,r8,n8,s8,y_,lA,i8,o8,a8,R_,ym,b_,uA,c8,oi,Ka,G=se(()=>{g_=require("node:path"),S_=b(yt()),c5="harperdb-config.yaml",l5="defaultConfig.yaml",rA="hdb",u5="config.yaml",d5="harperdb.js",f5="restartHdb.js",mU="HarperDB",tA="Custom Functions",nA="Clustering Hub",sA="Clustering Leaf",m5="Clustering Ingest Service",p5="Clustering Reply Service",h5={HDB:mU,CLUSTERING_HUB:nA,CLUSTERING_LEAF:sA,CLUSTERING_INGEST_SERVICE:m5,CLUSTERING_REPLY_SERVICE:p5,CUSTOM_FUNCTIONS:tA,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"},E5={harperdb:mU,"clustering hub":nA,"clustering leaf":sA,"custom functions":tA,custom_functions:tA,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},_5={CLUSTERING_HUB_PROC_DESCRIPTOR:nA,CLUSTERING_LEAF_PROC_DESCRIPTOR:sA},g5="hdb.pid",S5="data",T5={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},gm={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},y5={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,g_.join)(S_.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,g_.join)(S_.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,g_.join)(S_.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},R5={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},pU="support@harperdb.io",b5=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${pU}`,A5="None of the specified records were found.",I5="U+002E",w5=/\//g,N5="U+002F",C5=/U\+002F/g,Sm="system",O5=".harperdb",iA="keys",P5="hdb_boot_properties.file",L5=6e4,D5=448,tl="database",T_="schema",v5="transactions",oA="backup",M5="PROCESS_NAME",hU={SETTINGS_PATH_KEY:"settings_path"},U5={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"},x5=250,B5={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Bu={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"},F5="info_id",k5={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"},H5="060493.ks",G5=".license",q5={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",GET_SSH_KEY:"get_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"},$5={CSV:".csv",JSON:".json"},V5={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},K5={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Y5={[V.INSERT]:V.INSERT,[V.UPDATE]:V.UPDATE,[V.UPSERT]:V.UPSERT,[V.DELETE]:V.DELETE},W5={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"},Tm={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"},z5={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"},x={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",THREADS_HEAPSNAPSHOTNEARLIMIT:"threads_heapSnapshotNearLimit",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_COLORS:"logging_colors",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_MAXTRANSACTIONOPENTIME:"storage_maxTransactionOpenTime",STORAGE_DEBUGLONGTRANSACTIONS:"storage_debugLongTransactions",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_BLOBCLEANUPSPEED:"storage_blobCleanupSpeed",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"},EU={settings_path:hU.SETTINGS_PATH_KEY,hdb_root_key:x.ROOTPATH,hdb_root:x.ROOTPATH,rootpath:x.ROOTPATH,server_port_key:x.OPERATIONSAPI_NETWORK_PORT,server_port:x.OPERATIONSAPI_NETWORK_PORT,cert_key:x.TLS_CERTIFICATE,certificate:x.TLS_CERTIFICATE,private_key_key:x.TLS_PRIVATEKEY,private_key:x.TLS_PRIVATEKEY,http_secure_enabled_key:x.OPERATIONSAPI_NETWORK_HTTPS,https_on:x.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:x.OPERATIONSAPI_NETWORK_CORS,cors_on:x.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:x.LOGGING_LEVEL,log_level:x.LOGGING_LEVEL,log_path_key:x.LOGGING_ROOT,log_path:x.LOGGING_ROOT,clustering_node_name_key:x.CLUSTERING_NODENAME,node_name:x.CLUSTERING_NODENAME,clustering_enabled_key:x.CLUSTERING_ENABLED,clustering:x.CLUSTERING_ENABLED,max_http_threads:x.THREADS_COUNT,max_hdb_processes:x.THREADS_COUNT,server_timeout_key:x.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:x.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:x.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:x.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:x.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:x.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:x.LOGGING_AUDITLOG,disable_transaction_log:x.LOGGING_AUDITLOG,operation_token_timeout_key:x.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:x.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:x.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:x.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:x.HTTP_PORT,custom_functions_port:x.HTTP_PORT,custom_functions_directory_key:x.COMPONENTSROOT,custom_functions_directory:x.COMPONENTSROOT,max_custom_function_processes:x.THREADS_COUNT,logging_console:x.LOGGING_CONSOLE,log_to_file:x.LOGGING_FILE,log_to_stdstreams:x.LOGGING_STDSTREAMS,local_studio_on:x.LOCALSTUDIO_ENABLED,clustering_port:x.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:x.CLUSTERING_USER,customfunctions_network_port:x.HTTP_PORT,customfunctions_tls_certificate:x.TLS_CERTIFICATE,customfunctions_network_cors:x.HTTP_CORS,customfunctions_network_corsaccesslist:x.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:x.HTTP_HEADERSTIMEOUT,customfunctions_network_https:x.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:x.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:x.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:x.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:x.HTTP_TIMEOUT,customfunctions_tls:x.TLS,http_threads:x.THREADS_COUNT,threads:x.THREADS_COUNT,threads_count:x.THREADS_COUNT,customfunctions_processes:x.THREADS_COUNT,customfunctions_root:x.COMPONENTSROOT,operationsapi_root:x.ROOTPATH};for(let e in x){let t=x[e];EU[t.toLowerCase()]=t}J5={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},Q5={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"},aA={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"},X5={VERSION_DEFAULT:"2.2.0"},Z5={DEVELOPMENT:8192,DEFAULT:512},e8={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},t8=Symbol("metadata"),cA="__clustering__",_U="__createdtime__",gU="__updatedtime__",r8={CREATED_TIME:_U,UPDATED_TIME:gU},n8=[_U,gU],s8=15984864e5,y_={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},lA={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},i8={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},o8=["*","%"],a8="func_val",R_={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},ym={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},b_={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"},uA={HTTP:"http"},c8="3.x.x",oi={SUCCESS:"success",FAILURE:"failure"},Ka={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var rl=M((jCe,yU)=>{"use strict";var SU=require("minimist");yU.exports=l8;function l8(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=TU(process.env),n=TU(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(l8,"assignCMDENVVariables");function TU(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(TU,"objKeysToLowerCase")});var ai=M(rs=>{"use strict";global.Resource=rs.Resource=void 0;global.tables=rs.tables={};global.databases=rs.databases={};global.getUser=rs.getUser=void 0;global.authenticateUser=rs.authenticateUser=void 0;global.server=rs.server={};global.contentTypes=rs.contentTypes=null;global.threads=rs.threads=[];global.logger={};global.RequestTarget=rs.RequestTarget=void 0;global.operation=rs.operation=void 0;rs._assignPackageExport=(e,t)=>{global[e]=rs[e]=t}});var dA=M(hn=>{"use strict";var u8={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
2
2
  `),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
3
3
  `)},d8="certificate.pem",f8="privateKey.pem",m8="caCertificate.pem",p8="natsCertificate.pem",h8="natsCaCertificate.pem",Ot={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},E8={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"]},_8={[Ot.SERVER]:2,[Ot.DEFAULT]:1},g8={[Ot["OPERATIONS-API"]]:3,[Ot.SERVER]:2,[Ot.DEFAULT]:1},S8={[Ot["OPERATIONS-API"]]:3,[Ot.SERVER]:2,[Ot.DEFAULT]:1},T8={[Ot["OPERATIONS-CA"]]:3,[Ot.CA]:2,[Ot["DEFAULT-CA"]]:1},y8={[Ot["OPERATIONS-CA"]]:3,[Ot.CA]:2,[Ot["DEFAULT-CA"]]:1},R8={[Ot.CA]:2,[Ot["DEFAULT-CA"]]:1};hn.CERTIFICATE_PEM_NAME=d8;hn.PRIVATEKEY_PEM_NAME=f8;hn.CA_PEM_NAME=m8;hn.CERT_NAME=Ot;hn.CERT_CONFIG_NAME_MAP=E8;hn.CERT_PREFERENCE_APP=_8;hn.CERT_PREFERENCE_OPS=g8;hn.CERT_PREFERENCE_REP=S8;hn.CA_CERT_PREFERENCE_REP=T8;hn.CA_CERT_PREFERENCE_OPS=y8;hn.CA_CERT_PREFERENCE_APP=R8;hn.CERTIFICATE_VALUES=u8;hn.NATS_CERTIFICATE_PEM_NAME=p8;hn.NATS_CA_PEM_NAME=h8});var ft=M((XCe,RU)=>{"use strict";var vn=require("validate.js");vn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||vn.validators.type.checks[t](e)?null:` must be a '${t}' value`};vn.validators.type.checks={Object:a(function(e){return vn.isObject(e)&&!vn.isArray(e)},"Object"),Array:vn.isArray,Integer:vn.isInteger,Number:vn.isNumber,String:vn.isString,Date:vn.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};vn.validators.hasValidFileExt=function(e,t){return vn.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};RU.exports={validateObject:b8,validateObjectAsync:A8,validateBySchema:I8};function b8(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=vn(e,t,{format:"flat"});return r?new Error(r):null}a(b8,"validateObject");async function A8(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await vn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(A8,"validateObjectAsync");function I8(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(I8,"validateBySchema")});var mA=M((tOe,CU)=>{"use strict";var wU=require("fs-extra"),Re=require("joi"),w8=require("os"),{boolean:Ye,string:Et,number:pr,array:Ya}=Re.types(),{totalmem:bU}=require("os"),nl=require("path"),N8=Q(),fA=ae(),eOe=dA(),AU=(G(),D(j)),C8=ft(),IU="log",O8="components",P8="Invalid logging.rotation.maxSize unit. Available units are G, M or K",L8="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",D8="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",v8="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",M8="rootPath config parameter is undefined",Mn=Re.alternatives([pr.min(0),Et]).optional().empty(null),A_=Re.alternatives([Ya.items(Et,{host:Et.required(),port:Mn},{hostname:Et.required(),port:Mn}).empty(null),Ya.items(Et)]),Vi,NU=!1;CU.exports={configValidator:U8,routesValidator:G8,routeConstraints:A_};function U8(e,t=!1){if(NU=t,Vi=e.rootPath,fA.isEmpty(Vi))throw M8;let r=Ye.optional(),n=pr.min(0).max(1e3).empty(null).default(H8),s=Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Rm),i=Et.optional().empty(null),o=Et.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=Re.string().empty(null).default(Rm),l=Re.custom(B8).empty(null).default(Rm),u=e.clustering?.enabled,d=Re.object({certificate:i,certificateAuthority:i,privateKey:i}),f;return u===!0?f=Re.object({enabled:r,hubServer:Re.object({cluster:Re.object({name:Re.required().empty(null),network:Re.object({port:Mn,routes:A_}).required()}).required(),leafNodes:Re.object({network:Re.object({port:Mn}).required()}).required(),network:Re.object({port:Mn}).required()}).required(),leafServer:Re.object({network:Re.object({port:Mn,routes:A_}).required(),streams:Re.object({maxAge:pr.min(120).allow(null).optional(),maxBytes:pr.min(1).allow(null).optional(),maxMsgs:pr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:Re.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:Ye.optional(),databaseLevel:Ye.optional(),tls:Re.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ye.required(),verify:Ye.optional()}),user:Et.optional().empty(null)}).optional():f=Re.object({enabled:r,tls:Re.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ye.optional()})}).optional(),Re.object({authentication:Re.alternatives(Re.object({authorizeLocal:Ye,cacheTTL:pr.required(),cookie:Re.object({domains:Ya.items(Et).optional(),expires:Et.optional()}),enableSessions:Ye,hashFunction:Et.valid("md5","sha256","argon2id").optional().empty(null)}),Ye).optional(),analytics:Re.object({aggregatePeriod:pr,replicate:Ye.optional()}),replication:Re.object({hostname:Re.alternatives(Et,pr).optional().empty(null),url:Et.optional().empty(null),port:Mn,securePort:Mn,routes:Ya.optional().empty(null),databases:Re.alternatives(Et,Ya),enableRootCAs:Ye.optional(),copyTablesToCatchUp:Ye.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:Re.object({enabled:r}).required(),logging:Re.object({auditAuthEvents:Re.object({logFailed:Ye,logSuccessful:Ye}),file:Ye.required(),level:Re.valid("notify","fatal","error","warn","info","debug","trace"),rotation:Re.object({enabled:Ye.optional(),compress:Ye.optional(),interval:Et.custom(k8).optional().empty(null),maxSize:Et.custom(F8).optional().empty(null),path:Et.optional().empty(null).default(Rm)}).required(),root:s,stdStreams:Ye.required(),auditLog:Ye.required()}).required(),operationsApi:Re.object({network:Re.object({cors:Ye.optional(),corsAccessList:Ya.optional(),headersTimeout:pr.min(1).optional(),keepAliveTimeout:pr.min(1).optional(),port:Mn,domainSocket:Re.optional().empty("hdb/operations-server").default(Rm),securePort:Mn,timeout:pr.min(1).optional()}).optional(),tls:Re.alternatives([Re.array().items(d),d])}).required(),rootPath:Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:Re.object({network:Re.object({port:Mn,securePort:Mn,mtls:Re.alternatives([Ye.optional(),Re.object({user:Et.optional(),certificateAuthority:i,required:Ye.optional()})])}).required(),webSocket:Ye.optional(),requireAuthentication:Ye.optional()}),http:Re.object({compressionThreshold:pr.optional(),cors:Ye.optional(),corsAccessList:Ya.optional(),headersTimeout:pr.min(1).optional(),port:Mn,securePort:Mn,maxHeaderSize:pr.optional(),mtls:Re.alternatives([Ye.optional(),Re.object({user:Et.optional(),certificateAuthority:i,required:Ye.optional()})]),threadRange:Re.alternatives([Ya.optional(),Et.optional()])}).required(),threads:Re.alternatives(n.optional(),Re.object({count:n.optional(),debug:Re.alternatives(Ye.optional(),Re.object({startingPort:pr.min(1).optional(),host:Et.optional(),waitForDebugger:Ye.optional()})),maxHeapMemory:pr.min(0).optional()})),storage:Re.object({writeAsync:Ye.required(),overlappingSync:Ye.optional(),caching:Ye.optional(),compression:Re.alternatives([Ye.optional(),Re.object({dictionary:Et.optional(),threshold:pr.optional()})]),compactOnStart:Ye.optional(),compactOnStartKeepBackup:Ye.optional(),noReadAhead:Ye.optional(),path:l,prefetchWrites:Ye.optional(),maxFreeSpaceToLoad:pr.optional(),maxFreeSpaceToRetain:pr.optional()}).required(),ignoreScripts:Ye.optional(),tls:Re.alternatives([Re.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(U8,"configValidator");function x8(e){return NU||wU.existsSync(e)?null:`Specified path ${e} does not exist.`}a(x8,"doesPathExist");function B8(e,t){Re.assert(e,Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=x8(e);if(r)return t.message(r)}a(B8,"validatePath");function F8(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(P8);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(D8):e}a(F8,"validateRotationMaxSize");function k8(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(L8);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(v8):e}a(k8,"validateRotationInterval");function H8(e,t){let r=t.state.path.join("."),n=w8.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||bU();return i=Math.round(Math.min(i,bU())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),N8.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(H8,"setDefaultThreads");function Rm(e,t){let r=t.state.path.join(".");if(!fA.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(fA.isEmpty(Vi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return nl.join(Vi,O8);case"logging.root":return nl.join(Vi,IU);case"clustering.leafServer.streams.path":return nl.join(Vi,"clustering","leaf");case"storage.path":let n=nl.join(Vi,AU.LEGACY_DATABASES_DIR_NAME);return wU.existsSync(n)?n:nl.join(Vi,AU.DATABASES_DIR_NAME);case"logging.rotation.path":return nl.join(Vi,IU);case"operationsApi.network.domainSocket":return r==null?null:nl.join(Vi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Rm,"setDefaultRoot");function G8(e){let t=Re.object({routes:A_});return C8.validateBySchema({routes:e},t)}a(G8,"routesValidator")});var Jt=M((nOe,PU)=>{"use strict";var q8="__dbis__",$8="__txns__",V8="__environment_name__",K8="__dbi_defintion__",Y8={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"},W8=["__createdtime__","__updatedtime__"],j8="\uFFFF",OU={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},z8=Object.values(OU);PU.exports={AUDIT_STORE_NAME:$8,INTERNAL_DBIS_NAME:q8,DBI_DEFINITION_NAME:K8,SEARCH_TYPES:Y8,TIMESTAMP_NAMES:W8,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:V8,TRANSACTIONS_DBI_NAMES_ENUM:OU,TRANSACTIONS_DBIS:z8,OVERFLOW_MARKER:j8}});var Jr=M((sOe,kU)=>{"use strict";var LU=(G(),D(j)),DU=Jt(),vU={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"),UU={500:MU("There was an error processing your request."),400:"Invalid request"},J8=UU[vU.INTERNAL_SERVER_ERROR],Q8={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")},X8={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},Z8={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"},eZ={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"},tZ={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${LU.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 ${LU.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"},xU={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"},rZ={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."},nZ={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")},sZ={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"},iZ={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},oZ={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")},BU={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")},FU={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")},aZ={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"},cZ={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},lZ={...xU,...Z8,...Q8,...rZ,...nZ,...sZ,...iZ,...oZ,...tZ,...BU,...FU,...aZ,...cZ,...X8};kU.exports={CHECK_LOGS_WRAPPER:MU,HDB_ERROR_MSGS:lZ,DEFAULT_ERROR_MSGS:UU,DEFAULT_ERROR_RESP:J8,HTTP_STATUS_CODES:vU,LMDB_ERRORS_ENUM:eZ,AUTHENTICATION_ERROR_MSGS:xU,VALIDATION_ERROR_MSGS:BU,ITC_ERRORS:FU}});var Ee=M((oOe,qU)=>{"use strict";var Fu=Jr(),uZ=(G(),D(j)),I_=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,HU),this.statusCode=n||Fu.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Fu.DEFAULT_ERROR_MSGS[n]?Fu.DEFAULT_ERROR_MSGS[n]:Fu.DEFAULT_ERROR_MSGS[Fu.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&&Q()[s](i)}},pA=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}},hA=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function HU(e,t,r,n=uZ.LOG_LEVELS.ERROR,s=null,i=!1){if(GU(e))return e;let o=new I_(e,t,r,n,s);return i&&delete o.stack,o}a(HU,"handleHDBError");function ku(e){this.message=e}a(ku,"Violation");ku.prototype=Object.create(Error.prototype);ku.prototype.constructor=ku;ku.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var EA=class extends ku{static{a(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function GU(e){return e.__proto__.constructor.name===I_.name}a(GU,"isHDBError");qU.exports={isHDBError:GU,handleHDBError:HU,ClientError:pA,ServerError:hA,AccessViolation:EA,Violation:ku,hdbErrors:Fu}});var bm={};ye(bm,{server:()=>Ue});var $U,Ue,Hr=se(()=>{$U=b(ai()),Ue={};(0,$U._assignPackageExport)("server",Ue)});var KU={};ye(KU,{getBackupDirPath:()=>w_});function w_(e){return VU.join(e,oA)}var VU,_A=se(()=>{VU=b(require("node:path"));G();a(w_,"getBackupDirPath")});var ir=M(C_=>{var N_=Q();for(let e of["trace","debug","info","warn","error","fatal","notify"])N_.logsAtLevel(e)&&(C_[e]=N_[e]);C_.loggerWithTag=e=>N_.loggerWithTag(e,!0);C_.setLogLevel=N_.setLogLevel});var QU={};ye(QU,{ConfigEnvVarError:()=>Hu,applyRuntimeEnvConfig:()=>SZ});function SA(){let{loggerWithTag:e}=ir();return e("env-config")}function O_(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&Object.prototype.toString.call(e)==="[object Object]"}function Am(e,t=""){let r={};for(let n in e){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let s=e[n],i=t?`${t}.${n}`:n;O_(s)?Object.assign(r,Am(s,i)):r[i]=s}return r}function Im(e,t){let r=t.split("."),n=e;for(let s of r){if(n==null)return;n=n[s]}return n}function wm(e,t,r){let n=t.split("."),s=e;for(let i=0;i<n.length-1;i++){let o=n[i];O_(s[o])||(s[o]={}),s=s[o]}s[n[n.length-1]]=r}function TA(e,t){let r=t.split("."),n=e;for(let s=0;s<r.length-1;s++){let i=r[s];if(!O_(n[i]))return;n=n[i]}delete n[r[r.length-1]]}function dZ(e){let t=a(n=>n===null||typeof n!="object"?JSON.stringify(n):Array.isArray(n)?"["+n.map(t).join(",")+"]":"{"+Object.keys(n).sort().map(o=>JSON.stringify(o)+":"+t(n[o])).join(",")+"}","sortedStringify"),r=t(e);return zU.createHash("sha256").update(r).digest("hex")}function fZ(e,t){if(!e||e.trim()==="")return null;try{let r=JSON.parse(e.trim());if(!O_(r))throw new Hu(`${t} must be a JSON object, got: ${typeof r}`,t);return r}catch(r){throw r instanceof Hu?r:new Hu(`Invalid JSON syntax in ${t}: ${r.message}`,t,r)}}function mZ(e){let t=gA.join(w_(e),JU);if(!Wa.existsSync(t))return{version:"1.0",sources:{},originalValues:{},snapshots:{}};try{let r=Wa.readJsonSync(t);return r.originalValues||(r.originalValues={}),r}catch(r){return SA().warn(`Failed to load config state file, starting fresh: ${r.message}`),{version:"1.0",sources:{},originalValues:{},snapshots:{}}}}function pZ(e,t){let r=w_(e),n=gA.join(r,JU);Wa.ensureDirSync(r),Wa.writeJsonSync(n,t,{spaces:2})}function hZ(e,t){let r=[];for(let[n,s]of Object.entries(t.sources)){if(s!=="HARPER_DEFAULT_CONFIG"&&s!=="HARPER_SET_CONFIG")continue;let i=t.snapshots[s];if(!i)continue;let o=Im(e,n),c=Im(i.config,n);JSON.stringify(o)!==JSON.stringify(c)&&r.push(n)}return r}function YU(e,t,r,n,s={}){let{respectSources:i=[],storeOriginals:o=!1}=s,c=Am(r);for(let[l,u]of Object.entries(c)){let d=t.sources[l],f=Im(e,l);d&&i.includes(d)||(o&&!d&&f!==void 0&&f!==null&&(l in t.originalValues||(t.originalValues[l]=f)),wm(e,l,u),t.sources[l]=n)}}function EZ(e,t,r,n,s){let i=Object.keys(Am(r)),o=Object.keys(Am(n)),c=i.filter(l=>!o.includes(l));for(let l of c)t.sources[l]===s&&((s==="HARPER_DEFAULT_CONFIG"||s==="HARPER_SET_CONFIG")&&l in t.originalValues?(wm(e,l,t.originalValues[l]),delete t.originalValues[l]):TA(e,l),delete t.sources[l])}function _Z(e,t,r){let n=Object.keys(t.sources).filter(s=>t.sources[s]===r);for(let s of n)TA(e,s),delete t.sources[s]}function gZ(e,t,r){let n={};for(let s in t.sources)if(t.sources[s]===r){let i=Im(e,s);i!==void 0&&wm(n,s,i)}return n}function WU(e,t,r,n,s={}){let i=process.env[r];if(!i)return;let o=SA(),c=fZ(i,r);if(!c)return;let l=dZ(c),u=t.snapshots[n];if(n==="HARPER_SET_CONFIG")YU(e,t,c,n,{respectSources:[],storeOriginals:!0});else if(n==="HARPER_DEFAULT_CONFIG")if(s.isInstall)YU(e,t,c,n,{respectSources:["HARPER_SET_CONFIG","user"],storeOriginals:!0});else{let m=Am(c);for(let[p,h]of Object.entries(m)){let E=t.sources[p],_=Im(e,p);if(!(E&&E!=="HARPER_DEFAULT_CONFIG")){if(!E&&_!=null){p in t.originalValues||(t.originalValues[p]=_);continue}wm(e,p,h),t.sources[p]=n}}}u&&u.hash!==l&&EZ(e,t,u.config,c,n);let d=gZ(e,t,n);t.snapshots[n]={hash:l,config:d};let f=s.isInstall?"installation":"runtime";o.debug?.(`Applied ${r} at ${f}`)}function jU(e,t,r,n){if(!t.snapshots[n])return;let s=SA();if(n==="HARPER_DEFAULT_CONFIG"||n==="HARPER_SET_CONFIG"){let i=Object.keys(t.sources).filter(o=>t.sources[o]===n);for(let o of i)o in t.originalValues?(wm(e,o,t.originalValues[o]),delete t.originalValues[o]):TA(e,o),delete t.sources[o]}else _Z(e,t,n);delete t.snapshots[n],s.debug?.(`${r} removed, cleaned up values`)}function SZ(e,t,r={}){let n=process.env.HARPER_DEFAULT_CONFIG,s=process.env.HARPER_SET_CONFIG,i=mZ(t);if(!n&&!s&&Object.keys(i.snapshots).length===0)return e;if(!r.isInstall){let o=hZ(e,i);for(let c of o)i.sources[c]="user"}return WU(e,i,"HARPER_DEFAULT_CONFIG","HARPER_DEFAULT_CONFIG",r),n||jU(e,i,"HARPER_DEFAULT_CONFIG","HARPER_DEFAULT_CONFIG"),WU(e,i,"HARPER_SET_CONFIG","HARPER_SET_CONFIG",r),s||jU(e,i,"HARPER_SET_CONFIG","HARPER_SET_CONFIG"),pZ(t,i),e}var Wa,gA,zU,JU,Hu,XU=se(()=>{Wa=b(require("fs-extra")),gA=b(require("node:path")),zU=b(require("node:crypto"));_A();JU=".harper-config-state.json";a(SA,"getLogger");Hu=class extends Error{static{a(this,"ConfigEnvVarError")}envVarName;originalError;constructor(t,r,n){super(t),this.name="ConfigEnvVarError",this.envVarName=r,this.originalError=n}};a(O_,"isPlainObject");a(Am,"flattenObject");a(Im,"getNestedValue");a(wm,"setNestedValue");a(TA,"deleteNestedValue");a(dZ,"hashConfig");a(fZ,"parseConfigEnvVar");a(mZ,"loadConfigState");a(pZ,"saveConfigState");a(hZ,"detectConfigDrift");a(YU,"applyConfigLayer");a(EZ,"handleDeletions");a(_Z,"removeValuesWithSource");a(gZ,"buildSnapshot");a(WU,"processEnvVar");a(jU,"cleanupRemovedEnvVar");a(SZ,"applyRuntimeEnvConfig")});var _t=M(or=>{"use strict";var Ds=(G(),D(j)),wr=ae(),Pt=Q(),{configValidator:TZ,routesValidator:ZU}=mA(),Qr=require("fs-extra"),D_=require("yaml"),ss=require("path"),yZ=require("is-number"),tx=require("properties-reader"),RZ=require("lodash"),{handleHDBError:bZ}=Ee(),{HTTP_STATUS_CODES:AZ,HDB_ERROR_MSGS:Gu}=Jr(),{server:IZ}=(Hr(),D(bm)),{PACKAGE_ROOT:rx}=yt(),{getBackupDirPath:wZ}=(_A(),D(KU)),{DATABASES_PARAM_CONFIG:Nm,CONFIG_PARAMS:ns,CONFIG_PARAM_MAP:ci}=Ds,NZ="Unable to get config value because config is uninitialized",CZ="Config successfully initialized",OZ="Error backing up config file",PZ="Empty parameter sent to getConfigValue",nx=ss.join(rx,"config","yaml",Ds.HDB_DEFAULT_CONFIG_FILE),LZ=ss.join(rx,"config","yaml","defaultNatsConfig.yaml"),DZ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",ex={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"},P_,kt,L_;or.createConfigFile=vZ;or.getDefaultConfig=MZ;or.getConfigValue=ix;or.initConfig=v_;or.flattenConfig=qu;or.updateConfigValue=ox;or.updateConfigObject=xZ;or.getConfiguration=kZ;or.setConfiguration=HZ;or.readConfigFile=AA;or.getClusteringRoutes=GZ;or.initOldConfig=cx;or.getConfigFromFile=qZ;or.getConfigFilePath=sl;or.addConfig=$Z;or.deleteConfigFromFile=VZ;or.getConfigObj=KZ;or.resolvePath=yA;or.getFlatConfigObj=YZ;function yA(e){if(e?.startsWith("~/"))return ss.join(wr.getHomeDir(),e.slice(1));let t=fe();try{return ss.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}a(yA,"resolvePath");function vZ(e,t=!1){let r=ja(nx);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=D_.parseDocument(Qr.readFileSync(LZ,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}P_=qu(r.toJSON());let n;for(let c in e){let l=ci[c.toLowerCase()];if(l===ns.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=RA(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){Pt.error(f)}}}n&&sx(r,n),bA(r,t),ax(r,null,{isInstall:!0});let s=r.toJSON();kt=qu(s);let i=r.getIn(["rootPath"]),o=ss.join(i,Ds.HDB_CONFIG_FILE);if(Qr.createFileSync(o),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);Qr.writeFileSync(o,String(r)),Pt.trace(`Config file written to ${o}`)}a(vZ,"createConfigFile");function sx(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!wr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Nm.TABLES))for(let i in n[s][Nm.TABLES])for(let o in n[s][Nm.TABLES][i]){let c=n[s][Nm.TABLES][i][o],l=[ns.DATABASES,s,Nm.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=[ns.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Pt.error("Error parsing schemas CLI/env config arguments",n)}}a(sx,"setSchemasConfig");function MZ(e){if(P_===void 0){let r=ja(nx);P_=qu(r.toJSON())}let t=ci[e.toLowerCase()];if(t!==void 0)return P_[t.toLowerCase()]}a(MZ,"getDefaultConfig");function ix(e){if(e==null){Pt.info(PZ);return}if(kt===void 0){Pt.trace(NZ);return}let t=ci[e.toLowerCase()];if(t!==void 0)return kt[t.toLowerCase()]}a(ix,"getConfigValue");function sl(e=wr.getPropsFilePath()){let t=wr.getEnvCliRootPath();if(t)return yA(ss.join(t,Ds.HDB_CONFIG_FILE));let r=tx(e);return yA(r.get(Ds.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(sl,"getConfigFilePath");function v_(e=!1){if(kt===void 0||e){let t;if(!wr.noBootFile()){t=wr.getPropsFilePath();try{Qr.accessSync(t,Qr.constants.F_OK|Qr.constants.R_OK)}catch(i){throw Pt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=sl(t),n;if(r.includes("config/settings.js"))try{cx(r);return}catch(i){if(i.code!==Ds.NODE_ERROR_CODES.ENOENT)throw i}try{n=ja(r)}catch(i){if(i.code===Ds.NODE_ERROR_CODES.ENOENT){Pt.trace(`HarperDB config file not found at ${r}.
4
- This can occur during early stages of install where the config file has not yet been created`);return}else throw Pt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}UZ(n,r),ax(n,r),bA(n);let s=n.toJSON();if(IZ.config=s,kt=qu(s),kt.logging_rotation_rotate)for(let i in ex)kt[i]&&Pt.error(`Config ${ex[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Pt.trace(CZ)}}a(v_,"initConfig");function UZ(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ss.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ss.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(Pt.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);Qr.writeFileSync(t,String(e))}}a(UZ,"checkForUpdatedConfig");function bA(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 Gu.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 Gu.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=TZ(r,t);if(n.error)throw Gu.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(bA,"validateConfig");function xZ(e,t){kt===void 0&&(kt={});let r=ci[e.toLowerCase()];if(r===void 0){Pt.trace(`Unable to update config object because config param '${e}' does not exist`);return}kt[r.toLowerCase()]=t}a(xZ,"updateConfigObject");function ox(e,t,r=void 0,n=!1,s=!1,i=!1){kt===void 0&&v_();let o=ix(ci.hdb_root),c=ss.join(o,Ds.HDB_CONFIG_FILE),l=ja(c),u;if(r&&kt){let m=!1;for(let p in r)if(r[p]!=kt[p.toLowerCase()]){m=!0;break}if(!m){Pt.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===ns.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=ci[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=RA(m,t);l.setIn([...p],h)}else for(let m in r){let p=ci[m.toLowerCase()];if(p===ns.HTTP_SECUREPORT&&r[m]===kt[ns.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===ns.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===kt[ns.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===ns.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=Ds.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let _=RA(p,r[m]);p==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],_)}catch(R){Pt.error(R)}}}u&&sx(l,u),bA(l);let d=l.getIn(["rootPath"]),f=ss.join(d,Ds.HDB_CONFIG_FILE);if(n===!0&&BZ(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);Qr.writeFileSync(f,String(l)),s&&(kt=qu(l.toJSON())),Pt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(ox,"updateConfigValue");function BZ(e,t){try{let r=ss.join(wZ(t),`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${Ds.HDB_CONFIG_FILE}.bak`);Qr.copySync(e,r),Pt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Pt.error(OZ),Pt.error(r)}}a(BZ,"backupConfigFile");var FZ=["databases"];function qu(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}),L_=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])&&!FZ.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;!ns[l.toUpperCase()]&&ci[l]&&(s[ci[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(qu,"flattenConfig");function RA(e,t){if(e===ns.CLUSTERING_NODENAME||e===ns.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(yZ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||wr.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 wr.autoCast(t)}a(RA,"castConfigValue");function kZ(){let e=wr.getPropsFilePath(),t=sl(e);return ja(t).toJSON()}a(kZ,"getConfiguration");async function HZ(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return ox(void 0,void 0,s,!0),DZ}catch(i){throw typeof i=="string"||i instanceof String?bZ(i,i,AZ.BAD_REQUEST,void 0,void 0,!0):i}}a(HZ,"setConfiguration");function AA(){let e=wr.getPropsFilePath();try{Qr.accessSync(e,Qr.constants.F_OK|Qr.constants.R_OK)}catch(n){if(!wr.noBootFile())throw Pt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=sl(e);return ja(t).toJSON()}a(AA,"readConfigFile");function ja(e){return D_.parseDocument(Qr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ja,"parseYamlDoc");function ax(e,t,r={}){let n=process.env.HARPER_DEFAULT_CONFIG,s=process.env.HARPER_SET_CONFIG;if(!n&&!s)return;let{applyRuntimeEnvConfig:i}=(XU(),D(QU)),o=e.getIn(["rootPath"]);if(!o){Pt.warn("Cannot apply runtime env config: rootPath not found in config");return}let c=e.toJSON();try{i(c,o,r);let l=D_.parseDocument(D_.stringify(c),{simpleKeys:!0});Object.assign(e,l)}catch(l){throw Pt.error(`Failed to apply runtime env config: ${l.message}`),l}if(t)try{if(e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml: ${e.errors}`);Qr.writeFileSync(t,String(e)),Pt.debug("Config file updated with runtime env var values")}catch(l){throw Pt.error(`Failed to write config file after applying runtime env vars: ${l.message}`),l}}a(ax,"applyRuntimeEnvVarConfig");function GZ(){let e=AA(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=wr.isEmptyOrZeroLength(t)?[]:t;let r=ZU(t);if(r)throw Gu.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=wr.isEmptyOrZeroLength(n)?[]:n;let s=ZU(n);if(s)throw Gu.CONFIG_VALIDATION(s.message);if(!wr.isEmptyOrZeroLength(n)&&!wr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!wr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Gu.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(GZ,"getClusteringRoutes");function cx(e){let t=tx(e);kt={};for(let r in ci){let n=t.get(r.toUpperCase());if(wr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ci[r].toLowerCase();s===ns.LOGGING_ROOT?kt[s]=ss.dirname(n):kt[s]=n}return kt}a(cx,"initOldConfig");function qZ(e){let t=AA();return RZ.get(t,e.replaceAll("_","."))}a(qZ,"getConfigFromFile");async function $Z(e,t){let r=ja(sl());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 Qr.writeFile(sl(),String(r))}a($Z,"addConfig");function VZ(e){let t=sl(wr.getPropsFilePath()),r=ja(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ss.join(n,Ds.HDB_CONFIG_FILE);Qr.writeFileSync(s,String(r))}a(VZ,"deleteConfigFromFile");function KZ(){return L_||(v_(),L_)}a(KZ,"getConfigObj");function YZ(){return kt||v_(),kt}a(YZ,"getFlatConfigObj")});var fe=M((fx,mx)=>{"use strict";var IA=require("fs-extra"),il=require("path"),lx=require("os"),WZ=require("properties-reader"),Om=Q(),Cm=ae(),Ge=(G(),D(j)),M_=_t(),jZ="Error initializing environment manager",U_="BOOT_PROPS_FILE_PATH",ux=!1,zZ={[Ge.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Uo={};Object.assign(fx,mx.exports={BOOT_PROPS_FILE_PATH:U_,getHdbBasePath:JZ,setHdbBasePath:QZ,get:dx,initSync:ZZ,setProperty:tt,initTestEnvironment:e9});function JZ(){return Uo[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(JZ,"getHdbBasePath");function QZ(e){Uo[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(QZ,"setHdbBasePath");function dx(e){let t=M_.getConfigValue(e);return t===void 0?Uo[e]:t}a(dx,"get");function tt(e,t){zZ[e]&&(Uo[e]=t),M_.updateConfigObject(e,t)}a(tt,"setProperty");function XZ(){let e;try{e=Cm.getPropsFilePath(),IA.accessSync(e,IA.constants.F_OK|IA.constants.R_OK),ux=!0;let t=WZ(e);return Uo[Ge.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Ge.HDB_SETTINGS_NAMES.INSTALL_USER),Uo[Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Uo[U_]=e,!0}catch{return Om.trace(`Environment manager found no properties file at ${e}`),!1}}a(XZ,"doesPropFileExist");function ZZ(e=!1){try{(ux||XZ()||Cm.noBootFile()||e)&&(M_.initConfig(e),Uo[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=M_.getConfigValue(Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Om.error(jZ),Om.error(t),console.error(t),process.exit(1)}}a(ZZ,"initSync");function e9(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=il.join(__dirname,"../../","unitTests");Uo[U_]=il.join(l,"hdb_boot_properties.file"),tt(Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,il.join(l,"settings.test")),tt(Ge.HDB_SETTINGS_NAMES.INSTALL_USER,lx.userInfo()?lx.userInfo().username:void 0),tt(Ge.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),tt(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY,il.join(l,"envDir","log")),tt(Ge.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),tt(Ge.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),tt(Ge.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),tt(Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,il.join(l,"envDir")),tt(Ge.CONFIG_PARAMS.STORAGE_PATH,il.join(l,"envDir")),s&&(tt(Ge.CONFIG_PARAMS.HTTP_SECUREPORT,dx(Ge.CONFIG_PARAMS.HTTP_PORT)),tt(Ge.CONFIG_PARAMS.HTTP_PORT,null)),tt(Ge.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),tt(Ge.CONFIG_PARAMS.HTTP_PORT,9926),tt(Ge.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),tt(Ge.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),tt(Ge.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Cm.isEmpty(i)?!1:i),tt(Ge.CONFIG_PARAMS.HTTP_CORS,Cm.isEmpty(i)?!1:i),tt(Ge.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),tt(Ge.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),tt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),tt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),tt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,il.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),tt(Ge.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Cm.isEmpty(c)?!1:c),o&&(tt("CORS_ACCESSLIST",o),tt(Ge.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(tt(Ge.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),tt(Ge.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(tt(Ge.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),tt(Ge.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(tt(Ge.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),tt(Ge.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${U_}. Please check your boot props and settings files`;Om.fatal(r),Om.error(t)}}a(e9,"initTestEnvironment")});var Rt=M((hOe,Tx)=>{"use strict";var Mm=(G(),D(j)),t9=ae(),Un=fe(),Um=require("path"),r9=require("minimist"),px=require("fs-extra"),hx=require("lodash");Un.initSync();var{CONFIG_PARAMS:za,DATABASES_PARAM_CONFIG:Pm,SYSTEM_SCHEMA_NAME:x_}=Mm,Lm,Dm,vm;function Ex(){if(Lm!==void 0)return Lm;if(Un.getHdbBasePath()!==void 0)return Lm=Un.get(za.STORAGE_PATH)||Um.join(Un.getHdbBasePath(),Mm.DATABASES_DIR_NAME),Lm}a(Ex,"getBaseSchemaPath");function _x(){if(Dm!==void 0)return Dm;if(Un.getHdbBasePath()!==void 0)return Dm=Sx(x_),Dm}a(_x,"getSystemSchemaPath");function gx(){if(vm!==void 0)return vm;if(Un.getHdbBasePath()!==void 0)return vm=Un.get(Mm.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Um.join(Un.getHdbBasePath(),Mm.TRANSACTIONS_DIR_NAME),vm}a(gx,"getTransactionAuditStoreBasePath");function n9(e,t){let r=Un.get(za.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Um.join(gx(),e.toString())}a(n9,"getTransactionAuditStorePath");function Sx(e,t){e=e.toString(),t=t&&t.toString();let r=Un.get(Mm.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Um.join(Ex(),e)}a(Sx,"getSchemaPath");function s9(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,r9(process.argv));let n=r[za.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!t9.isObject(n))throw o;i=n}for(let o of i){let c=o[x_];if(!c)continue;let l=Un.get(za.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Pm.PATH];if(u)return hx.set(l,[x_,Pm.TABLES,t,Pm.PATH],u),Un.setProperty(za.DATABASES,l),u;let d=c?.[Pm.PATH];if(d)return hx.set(l,[x_,Pm.PATH],d),Un.setProperty(za.DATABASES,l),d}}let s=r[za.STORAGE_PATH.toUpperCase()];if(s){if(!px.pathExistsSync(s))throw new Error(s+" does not exist");let i=Um.join(s,e);return px.mkdirsSync(i),Un.setProperty(za.STORAGE_PATH,s),i}return _x()}a(s9,"initSystemSchemaPaths");function i9(){Lm=void 0,Dm=void 0,vm=void 0}a(i9,"resetPaths");Tx.exports={getBaseSchemaPath:Ex,getSystemSchemaPath:_x,getTransactionAuditStorePath:n9,getTransactionAuditStoreBasePath:gx,getSchemaPath:Sx,initSystemSchemaPaths:s9,resetPaths:i9}});var xn=M((SOe,Ix)=>{"use strict";var o9=Jr().LMDB_ERRORS_ENUM,_Oe=require("lmdb"),a9=Jt(),gOe=require("buffer").Buffer,{OVERFLOW_MARKER:yx,MAX_SEARCH_KEY_LENGTH:B_}=a9,Rx=["number","string","symbol","boolean","bigint"];function c9(e){if(e=e?.primaryStore||e,!e)throw new Error(o9.ENV_REQUIRED)}a(c9,"validateEnv");function l9(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(l9,"stringifyData");function u9(e){return e instanceof Date?e.valueOf():e}a(u9,"convertKeyValueToWrite");function d9(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(Rx.includes(typeof e))return e.length>B_?[e.slice(0,B_)+yx]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(Rx.includes(typeof i))i.length>B_?r.push(i.slice(0,B_)+yx):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(d9,"getIndexedValues");var F_=0,bx=0;function Ax(){bx=Date.now()-performance.now()}a(Ax,"adjustStartTime");Ax();var f9=6e4;setInterval(Ax,f9).unref();function m9(){let e=performance.now()+bx;return e>F_?(F_=e,e):(F_+=488e-6,F_)}a(m9,"getNextMonotonicTime");Ix.exports={validateEnv:c9,stringifyData:l9,convertKeyValueToWrite:u9,getNextMonotonicTime:m9,getIndexedValues:d9}});var xm=M((yOe,wx)=>{"use strict";var p9=(G(),D(j)).OPERATIONS_ENUM,wA=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=p9.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};wx.exports=wA});var Bm=M((AOe,Px)=>{"use strict";var bOe=xm(),k_=(G(),D(j)),NA=ae(),Nx=Q(),h9=require("uuid"),{handleHDBError:H_,hdbErrors:E9}=Ee(),{HDB_ERROR_MSGS:G_,HTTP_STATUS_CODES:q_}=E9;Px.exports=Cx;function Cx(e,t,r){for(let s=0;s<t.length;s++)Ox(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];_9(i,r,e.operation)}}a(Cx,"processRows");Cx.validateAttribute=Ox;function Ox(e){if(Buffer.byteLength(String(e))>k_.INSERT_MAX_CHARACTER_SIZE)throw H_(new Error,G_.ATTR_NAME_LENGTH_ERR(e),q_.BAD_REQUEST,void 0,void 0,!0);if(NA.isEmptyOrZeroLength(e)||NA.isEmpty(e.trim()))throw H_(new Error,G_.ATTR_NAME_NULLISH_ERR,q_.BAD_REQUEST,void 0,void 0,!0)}a(Ox,"validateAttribute");function _9(e,t,r){if(!e.hasOwnProperty(t)||NA.isEmptyOrZeroLength(e[t])){if(r===k_.OPERATIONS_ENUM.INSERT||r===k_.OPERATIONS_ENUM.UPSERT){e[t]=h9.v4();return}throw Nx.error("Update transaction aborted due to record with no hash value:",e),H_(new Error,G_.RECORD_MISSING_HASH_ERR,q_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>k_.INSERT_MAX_CHARACTER_SIZE)throw Nx.error(e),H_(new Error,G_.HASH_VAL_LENGTH_ERR,q_.BAD_REQUEST,void 0,void 0,!0)}a(_9,"validateHash")});function xx(e){PA=e}function T9(){S9=setInterval(function(){for(let e of CA)if(e.timeout<=0){let t=e.getContext()?.url;Mx.error(`Transaction was open too long and has been committed, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`,...e.startedFrom?[`was started from ${e.startedFrom.resourceName}.${e.startedFrom.method}`]:[],...OA?["starting stack trace",e.stackTraces]:[]),e.commit(),e.timeout=$_}else e.timeout-=$_},$_).unref()}var LA,vx,Mx,Y_,Ux,Lx,CA,g9,OA,xo,Fm,Dx,PA,$_,V_,Bo,K_,S9,km=se(()=>{LA=b(xn()),vx=b(Ee()),Mx=b(Q()),Y_=b(fe());G();Ux=b(ae()),Lx=100,CA=new Set,g9=(0,Ux.convertToMS)(Y_.get(x.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,OA=Y_.get(x.STORAGE_DEBUGLONGTRANSACTIONS),xo={CLOSED:0,OPEN:1,LINGERING:2};a(xx,"replicationConfirmation");$_=Y_.get(x.STORAGE_MAXTRANSACTIONOPENTIME)??3e4,V_=class extends Error{static{a(this,"StartedTransaction")}},Bo=class e{static{a(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;timeout;validated=0;timestamp=0;overloadChecked;open=xo.OPEN;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.timeout=$_,this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===xo.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,OA&&(this.stackTraces=[new V_]),this.readTxn.openTimer&&(this.readTxn.openTimer=0),CA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,OA&&this.stackTraces.push(new V_),this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(CA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Fm&&!this.overloadChecked&&performance.now()-Dx>g9)throw new vx.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===xo.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===xo.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,LA.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 _=this.writes[E];if(!_)continue;let R=_[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?xo.LINGERING:xo.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)<Lx>>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 Fm||(Fm=s,Dx=performance.now(),Fm.then(()=>{Fm=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];PA&&p&&i.push(PA(m,p.store.getEntry(p.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,this.timestamp=0,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+Lx/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=xo.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},K_=class extends Bo{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,LA.getNextMonotonicTime)())}getReadTxn(){}};a(T9,"startMonitoringTxns");T9()});var Bx,is,DA,$u=se(()=>{Bx=require("events"),is=class extends Bx.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext=null;queue;hasDataListeners;drainCloseListener;currentDrainResolver=null;[Symbol.asyncIterator](){let t=new DA;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)}},DA=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,value:void 0}}}});function bt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===xo.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 Bo;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 Fx,Ja=se(()=>{Fx=b(ai());km();a(bt,"transaction");(0,Fx._assignPackageExport)("transaction",bt);bt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};bt.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 MA={};ye(MA,{add:()=>W_,applyReverse:()=>kx,getRecordAtTime:()=>vA,rebuildUpdateBefore:()=>j_});function W_(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 j_(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,W_(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function kx(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=y9[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=Hx}}function vA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=At(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":kx(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===Hx&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=At(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 y9,Hx,z_=se(()=>{Ki();a(W_,"add");W_.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)};y9={add:W_};a(j_,"rebuildUpdateBefore");a(kx,"applyReverse");Hx={};a(vA,"getRecordAtTime")});var Wx={};ye(Wx,{parse:()=>BA,streamAsJSON:()=>Gm,stringify:()=>ol});function Gm(e){return new UA({value:e})}function Gx(e){return console.error(e),JSON.stringify(Hm(e))}function qx(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function ol(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===Kx)return Yx(e);if(t.resolution)return t.resolution.then(()=>ol(e));throw t}}function Yx(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+=Yx(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+ol(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function BA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),A9.test(e)?R9.parse(e):JSON.parse(e)):null}var $x,xA,Vx,R9,b9,Kx,Hm,UA,A9,FA=se(()=>{$x=require("stream"),xA=b(Q()),Vx=b(require("json-bigint-fixes")),R9=(0,Vx.default)({useNativeBigInt:!0}),b9=1e4,Kx={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw Kx};({errorToString:Hm}=xA);a(Gm,"streamAsJSON");UA=class extends $x.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=>(xA.warn("Error serializing in stream",c),o={done:!1,value:{error:Hm(c)}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:Hm(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),Gx)}catch(s){yield Gx(s)}else yield ol(t)}else yield ol(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);qx(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(Hm(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>b9?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 qx(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(Hm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(Gx,"handleError");a(qx,"when");a(ol,"stringify");a(Yx,"jsStringify");A9=/[[,:]\s*-?\d{16,}/;a(BA,"parse")});var n0={};ye(n0,{asyncSerialization:()=>$A,contentTypes:()=>qA,findBestSerializer:()=>Q_,getDeserializer:()=>Go,hasAsyncSerialization:()=>VA,registerContentHandlers:()=>Vm,serialize:()=>Km,serializeMessage:()=>Ho,toCsvStream:()=>J_});function I9(e){try{return e?.[0]===123?GA(e):e}catch{return e}}function Vm(e){e.register(w9,{serializers:[{regex:/^application\/json$/,serializer:Gm},{regex:/^application\/cbor$/,serializer:a(function(t){return new al.EncoderStream($m).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?cl.Readable.from((0,Yi.encodeIter)(t,$m)):(0,Yi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),J_(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,al.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=En.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 Jx.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(En.keys()).join(", "),406);n=En.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function Km(e,t,r){let n=zx&&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}),HA.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,ko.createBrotliCompress)({params:{[ko.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?ko.constants.BROTLI_MODE_TEXT:ko.constants.BROTLI_MODE_GENERIC,[ko.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>zx?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,ko.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function Ho(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;Fo=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=qm(e);return Fo?.length>0?(Fo.length===1?Fo[0]:Promise.all(Fo)).then(()=>Ho(e,t,!0)):n}finally{Fo=void 0}}function $A(e){if(Fo)Fo.push(e);else throw new Error("Unable to serialize asynchronously")}function VA(){return!!Fo}function N9(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 O9(e){return C9.includes(e)}function P9(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 Go(e="",t=!1){let r=P9(e),n=r.type&&En.get(r.type)?.deserialize||L9(r);return t?s=>N9(s).then(n):n}function L9(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!O9(e.parameters.charset)&&HA.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 D9(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 J_(e,t){let r=cl.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 Zx.Transform(n,s);return r.pipe(i)}var Yi,al,ko,Jx,cl,Qx,kA,Xx,HA,Zx,e0,t0,qm,GA,$m,En,qA,jx,r0,w9,zx,Fo,C9,qo=se(()=>{FA();Yi=require("msgpackr"),al=require("cbor-x"),ko=require("zlib"),Jx=b(Ee()),cl=b(require("stream"));Hr();Qx=b(ai()),kA=b(fe());G();Xx=b(require("yaml")),HA=b(ir());os();Zx=require("json2csv"),e0=b(require("fastify-plugin")),t0=kA.default.get(x.SERIALIZATION_BIGINT)!==!1,qm=t0?ol:JSON.stringify,GA=t0?BA:JSON.parse,$m={useRecords:!1,useToJSON:!0},En=new Map,qA=En;Ue.contentTypes=qA;(0,Qx._assignPackageExport)("contentTypes",qA);En.set("application/json",{serializeStream:Gm,serialize:qm,deserialize(e){return GA(e)},q:.8});jx=new al.Encoder($m);En.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new al.EncoderStream($m).end(e)},serialize:jx.encode,deserialize:jx.decode,q:1});En.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?cl.Readable.from((0,Yi.encodeIter)(e,$m)):(0,Yi.pack)(e)},serialize:Yi.pack,deserialize:Yi.unpack,q:.9});En.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),J_(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]),J_(e,e?.getColumns?.())},q:.1});En.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return cl.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});En.set("text/yaml",{serialize(e){return Xx.stringify(e,{aliasDuplicateObjects:!1})},q:.7});En.set("text/event-stream",{serializeStream:a(function(e){return cl.Readable.from(D9(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+`
4
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw Pt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}UZ(n,r),ax(n,r),bA(n);let s=n.toJSON();if(IZ.config=s,kt=qu(s),kt.logging_rotation_rotate)for(let i in ex)kt[i]&&Pt.error(`Config ${ex[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Pt.trace(CZ)}}a(v_,"initConfig");function UZ(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ss.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ss.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(Pt.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);Qr.writeFileSync(t,String(e))}}a(UZ,"checkForUpdatedConfig");function bA(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 Gu.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 Gu.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=TZ(r,t);if(n.error)throw Gu.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(bA,"validateConfig");function xZ(e,t){kt===void 0&&(kt={});let r=ci[e.toLowerCase()];if(r===void 0){Pt.trace(`Unable to update config object because config param '${e}' does not exist`);return}kt[r.toLowerCase()]=t}a(xZ,"updateConfigObject");function ox(e,t,r=void 0,n=!1,s=!1,i=!1){kt===void 0&&v_();let o=ix(ci.hdb_root),c=ss.join(o,Ds.HDB_CONFIG_FILE),l=ja(c),u;if(r&&kt){let m=!1;for(let p in r)if(r[p]!=kt[p.toLowerCase()]){m=!0;break}if(!m){Pt.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===ns.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=ci[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=RA(m,t);l.setIn([...p],h)}else for(let m in r){let p=ci[m.toLowerCase()];if(p===ns.HTTP_SECUREPORT&&r[m]===kt[ns.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===ns.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===kt[ns.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===ns.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=Ds.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let _=RA(p,r[m]);p==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],_)}catch(R){Pt.error(R)}}}u&&sx(l,u),bA(l);let d=l.getIn(["rootPath"]),f=ss.join(d,Ds.HDB_CONFIG_FILE);if(n===!0&&BZ(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);Qr.writeFileSync(f,String(l)),s&&(kt=qu(l.toJSON())),Pt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(ox,"updateConfigValue");function BZ(e,t){try{let r=ss.join(wZ(t),`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${Ds.HDB_CONFIG_FILE}.bak`);Qr.copySync(e,r),Pt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Pt.error(OZ),Pt.error(r)}}a(BZ,"backupConfigFile");var FZ=["databases"];function qu(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}),L_=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])&&!FZ.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;!ns[l.toUpperCase()]&&ci[l]&&(s[ci[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(qu,"flattenConfig");function RA(e,t){if(e===ns.CLUSTERING_NODENAME||e===ns.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(yZ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||wr.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 wr.autoCast(t)}a(RA,"castConfigValue");function kZ(){let e=wr.getPropsFilePath(),t=sl(e);return ja(t).toJSON()}a(kZ,"getConfiguration");async function HZ(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return ox(void 0,void 0,s,!0),DZ}catch(i){throw typeof i=="string"||i instanceof String?bZ(i,i,AZ.BAD_REQUEST,void 0,void 0,!0):i}}a(HZ,"setConfiguration");function AA(){let e=wr.getPropsFilePath();try{Qr.accessSync(e,Qr.constants.F_OK|Qr.constants.R_OK)}catch(n){if(!wr.noBootFile())throw Pt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=sl(e);return ja(t).toJSON()}a(AA,"readConfigFile");function ja(e){return D_.parseDocument(Qr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ja,"parseYamlDoc");function ax(e,t,r={}){let n=process.env.HARPER_DEFAULT_CONFIG,s=process.env.HARPER_SET_CONFIG;if(!n&&!s)return;let{applyRuntimeEnvConfig:i}=(XU(),D(QU)),o=e.getIn(["rootPath"]);if(!o){Pt.warn("Cannot apply runtime env config: rootPath not found in config");return}let c=e.toJSON();try{i(c,o,r);let l=D_.parseDocument(D_.stringify(c),{simpleKeys:!0});Object.assign(e,l)}catch(l){throw Pt.error(`Failed to apply runtime env config: ${l.message}`),l}if(t)try{if(e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml: ${e.errors}`);Qr.writeFileSync(t,String(e)),Pt.debug("Config file updated with runtime env var values")}catch(l){throw Pt.error(`Failed to write config file after applying runtime env vars: ${l.message}`),l}}a(ax,"applyRuntimeEnvVarConfig");function GZ(){let e=AA(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=wr.isEmptyOrZeroLength(t)?[]:t;let r=ZU(t);if(r)throw Gu.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=wr.isEmptyOrZeroLength(n)?[]:n;let s=ZU(n);if(s)throw Gu.CONFIG_VALIDATION(s.message);if(!wr.isEmptyOrZeroLength(n)&&!wr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!wr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Gu.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(GZ,"getClusteringRoutes");function cx(e){let t=tx(e);kt={};for(let r in ci){let n=t.get(r.toUpperCase());if(wr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ci[r].toLowerCase();s===ns.LOGGING_ROOT?kt[s]=ss.dirname(n):kt[s]=n}return kt}a(cx,"initOldConfig");function qZ(e){let t=AA();return RZ.get(t,e.replaceAll("_","."))}a(qZ,"getConfigFromFile");async function $Z(e,t){let r=ja(sl());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 Qr.writeFile(sl(),String(r))}a($Z,"addConfig");function VZ(e){let t=sl(wr.getPropsFilePath()),r=ja(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ss.join(n,Ds.HDB_CONFIG_FILE);Qr.writeFileSync(s,String(r))}a(VZ,"deleteConfigFromFile");function KZ(){return L_||(v_(),L_)}a(KZ,"getConfigObj");function YZ(){return kt||v_(),kt}a(YZ,"getFlatConfigObj")});var fe=M((fx,mx)=>{"use strict";var IA=require("fs-extra"),il=require("path"),lx=require("os"),WZ=require("properties-reader"),Om=Q(),Cm=ae(),Ge=(G(),D(j)),M_=_t(),jZ="Error initializing environment manager",U_="BOOT_PROPS_FILE_PATH",ux=!1,zZ={[Ge.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},xo={};Object.assign(fx,mx.exports={BOOT_PROPS_FILE_PATH:U_,getHdbBasePath:JZ,setHdbBasePath:QZ,get:dx,initSync:ZZ,setProperty:tt,initTestEnvironment:e9});function JZ(){return xo[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(JZ,"getHdbBasePath");function QZ(e){xo[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(QZ,"setHdbBasePath");function dx(e){let t=M_.getConfigValue(e);return t===void 0?xo[e]:t}a(dx,"get");function tt(e,t){zZ[e]&&(xo[e]=t),M_.updateConfigObject(e,t)}a(tt,"setProperty");function XZ(){let e;try{e=Cm.getPropsFilePath(),IA.accessSync(e,IA.constants.F_OK|IA.constants.R_OK),ux=!0;let t=WZ(e);return xo[Ge.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Ge.HDB_SETTINGS_NAMES.INSTALL_USER),xo[Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),xo[U_]=e,!0}catch{return Om.trace(`Environment manager found no properties file at ${e}`),!1}}a(XZ,"doesPropFileExist");function ZZ(e=!1){try{(ux||XZ()||Cm.noBootFile()||e)&&(M_.initConfig(e),xo[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=M_.getConfigValue(Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Om.error(jZ),Om.error(t),console.error(t),process.exit(1)}}a(ZZ,"initSync");function e9(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=il.join(__dirname,"../../","unitTests");xo[U_]=il.join(l,"hdb_boot_properties.file"),tt(Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,il.join(l,"settings.test")),tt(Ge.HDB_SETTINGS_NAMES.INSTALL_USER,lx.userInfo()?lx.userInfo().username:void 0),tt(Ge.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),tt(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY,il.join(l,"envDir","log")),tt(Ge.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),tt(Ge.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),tt(Ge.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),tt(Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,il.join(l,"envDir")),tt(Ge.CONFIG_PARAMS.STORAGE_PATH,il.join(l,"envDir")),s&&(tt(Ge.CONFIG_PARAMS.HTTP_SECUREPORT,dx(Ge.CONFIG_PARAMS.HTTP_PORT)),tt(Ge.CONFIG_PARAMS.HTTP_PORT,null)),tt(Ge.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),tt(Ge.CONFIG_PARAMS.HTTP_PORT,9926),tt(Ge.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),tt(Ge.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),tt(Ge.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Cm.isEmpty(i)?!1:i),tt(Ge.CONFIG_PARAMS.HTTP_CORS,Cm.isEmpty(i)?!1:i),tt(Ge.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),tt(Ge.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),tt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),tt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),tt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,il.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),tt(Ge.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Cm.isEmpty(c)?!1:c),o&&(tt("CORS_ACCESSLIST",o),tt(Ge.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(tt(Ge.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),tt(Ge.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(tt(Ge.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),tt(Ge.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(tt(Ge.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),tt(Ge.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${U_}. Please check your boot props and settings files`;Om.fatal(r),Om.error(t)}}a(e9,"initTestEnvironment")});var Rt=M((hOe,Tx)=>{"use strict";var Mm=(G(),D(j)),t9=ae(),Un=fe(),Um=require("path"),r9=require("minimist"),px=require("fs-extra"),hx=require("lodash");Un.initSync();var{CONFIG_PARAMS:za,DATABASES_PARAM_CONFIG:Pm,SYSTEM_SCHEMA_NAME:x_}=Mm,Lm,Dm,vm;function Ex(){if(Lm!==void 0)return Lm;if(Un.getHdbBasePath()!==void 0)return Lm=Un.get(za.STORAGE_PATH)||Um.join(Un.getHdbBasePath(),Mm.DATABASES_DIR_NAME),Lm}a(Ex,"getBaseSchemaPath");function _x(){if(Dm!==void 0)return Dm;if(Un.getHdbBasePath()!==void 0)return Dm=Sx(x_),Dm}a(_x,"getSystemSchemaPath");function gx(){if(vm!==void 0)return vm;if(Un.getHdbBasePath()!==void 0)return vm=Un.get(Mm.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Um.join(Un.getHdbBasePath(),Mm.TRANSACTIONS_DIR_NAME),vm}a(gx,"getTransactionAuditStoreBasePath");function n9(e,t){let r=Un.get(za.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Um.join(gx(),e.toString())}a(n9,"getTransactionAuditStorePath");function Sx(e,t){e=e.toString(),t=t&&t.toString();let r=Un.get(Mm.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Um.join(Ex(),e)}a(Sx,"getSchemaPath");function s9(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,r9(process.argv));let n=r[za.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!t9.isObject(n))throw o;i=n}for(let o of i){let c=o[x_];if(!c)continue;let l=Un.get(za.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Pm.PATH];if(u)return hx.set(l,[x_,Pm.TABLES,t,Pm.PATH],u),Un.setProperty(za.DATABASES,l),u;let d=c?.[Pm.PATH];if(d)return hx.set(l,[x_,Pm.PATH],d),Un.setProperty(za.DATABASES,l),d}}let s=r[za.STORAGE_PATH.toUpperCase()];if(s){if(!px.pathExistsSync(s))throw new Error(s+" does not exist");let i=Um.join(s,e);return px.mkdirsSync(i),Un.setProperty(za.STORAGE_PATH,s),i}return _x()}a(s9,"initSystemSchemaPaths");function i9(){Lm=void 0,Dm=void 0,vm=void 0}a(i9,"resetPaths");Tx.exports={getBaseSchemaPath:Ex,getSystemSchemaPath:_x,getTransactionAuditStorePath:n9,getTransactionAuditStoreBasePath:gx,getSchemaPath:Sx,initSystemSchemaPaths:s9,resetPaths:i9}});var xn=M((SOe,Ix)=>{"use strict";var o9=Jr().LMDB_ERRORS_ENUM,_Oe=require("lmdb"),a9=Jt(),gOe=require("buffer").Buffer,{OVERFLOW_MARKER:yx,MAX_SEARCH_KEY_LENGTH:B_}=a9,Rx=["number","string","symbol","boolean","bigint"];function c9(e){if(e=e?.primaryStore||e,!e)throw new Error(o9.ENV_REQUIRED)}a(c9,"validateEnv");function l9(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(l9,"stringifyData");function u9(e){return e instanceof Date?e.valueOf():e}a(u9,"convertKeyValueToWrite");function d9(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(Rx.includes(typeof e))return e.length>B_?[e.slice(0,B_)+yx]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(Rx.includes(typeof i))i.length>B_?r.push(i.slice(0,B_)+yx):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(d9,"getIndexedValues");var F_=0,bx=0;function Ax(){bx=Date.now()-performance.now()}a(Ax,"adjustStartTime");Ax();var f9=6e4;setInterval(Ax,f9).unref();function m9(){let e=performance.now()+bx;return e>F_?(F_=e,e):(F_+=488e-6,F_)}a(m9,"getNextMonotonicTime");Ix.exports={validateEnv:c9,stringifyData:l9,convertKeyValueToWrite:u9,getNextMonotonicTime:m9,getIndexedValues:d9}});var xm=M((yOe,wx)=>{"use strict";var p9=(G(),D(j)).OPERATIONS_ENUM,wA=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=p9.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};wx.exports=wA});var Bm=M((AOe,Px)=>{"use strict";var bOe=xm(),k_=(G(),D(j)),NA=ae(),Nx=Q(),h9=require("uuid"),{handleHDBError:H_,hdbErrors:E9}=Ee(),{HDB_ERROR_MSGS:G_,HTTP_STATUS_CODES:q_}=E9;Px.exports=Cx;function Cx(e,t,r){for(let s=0;s<t.length;s++)Ox(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];_9(i,r,e.operation)}}a(Cx,"processRows");Cx.validateAttribute=Ox;function Ox(e){if(Buffer.byteLength(String(e))>k_.INSERT_MAX_CHARACTER_SIZE)throw H_(new Error,G_.ATTR_NAME_LENGTH_ERR(e),q_.BAD_REQUEST,void 0,void 0,!0);if(NA.isEmptyOrZeroLength(e)||NA.isEmpty(e.trim()))throw H_(new Error,G_.ATTR_NAME_NULLISH_ERR,q_.BAD_REQUEST,void 0,void 0,!0)}a(Ox,"validateAttribute");function _9(e,t,r){if(!e.hasOwnProperty(t)||NA.isEmptyOrZeroLength(e[t])){if(r===k_.OPERATIONS_ENUM.INSERT||r===k_.OPERATIONS_ENUM.UPSERT){e[t]=h9.v4();return}throw Nx.error("Update transaction aborted due to record with no hash value:",e),H_(new Error,G_.RECORD_MISSING_HASH_ERR,q_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>k_.INSERT_MAX_CHARACTER_SIZE)throw Nx.error(e),H_(new Error,G_.HASH_VAL_LENGTH_ERR,q_.BAD_REQUEST,void 0,void 0,!0)}a(_9,"validateHash")});function xx(e){PA=e}function T9(){S9=setInterval(function(){for(let e of CA)if(e.timeout<=0){let t=e.getContext()?.url;Mx.error(`Transaction was open too long and has been committed, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`,...e.startedFrom?[`was started from ${e.startedFrom.resourceName}.${e.startedFrom.method}`]:[],...OA?["starting stack trace",e.stackTraces]:[]),e.commit(),e.timeout=$_}else e.timeout-=$_},$_).unref()}var LA,vx,Mx,Y_,Ux,Lx,CA,g9,OA,Bo,Fm,Dx,PA,$_,V_,Fo,K_,S9,km=se(()=>{LA=b(xn()),vx=b(Ee()),Mx=b(Q()),Y_=b(fe());G();Ux=b(ae()),Lx=100,CA=new Set,g9=(0,Ux.convertToMS)(Y_.get(x.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,OA=Y_.get(x.STORAGE_DEBUGLONGTRANSACTIONS),Bo={CLOSED:0,OPEN:1,LINGERING:2};a(xx,"replicationConfirmation");$_=Y_.get(x.STORAGE_MAXTRANSACTIONOPENTIME)??3e4,V_=class extends Error{static{a(this,"StartedTransaction")}},Fo=class e{static{a(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;timeout;validated=0;timestamp=0;overloadChecked;open=Bo.OPEN;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.timeout=$_,this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===Bo.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,OA&&(this.stackTraces=[new V_]),this.readTxn.openTimer&&(this.readTxn.openTimer=0),CA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,OA&&this.stackTraces.push(new V_),this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(CA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Fm&&!this.overloadChecked&&performance.now()-Dx>g9)throw new vx.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===Bo.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===Bo.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,LA.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 _=this.writes[E];if(!_)continue;let R=_[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?Bo.LINGERING:Bo.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)<Lx>>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 Fm||(Fm=s,Dx=performance.now(),Fm.then(()=>{Fm=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];PA&&p&&i.push(PA(m,p.store.getEntry(p.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,this.timestamp=0,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+Lx/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=Bo.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},K_=class extends Fo{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,LA.getNextMonotonicTime)())}getReadTxn(){}};a(T9,"startMonitoringTxns");T9()});var Bx,is,DA,$u=se(()=>{Bx=require("events"),is=class extends Bx.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext=null;queue;hasDataListeners;drainCloseListener;currentDrainResolver=null;[Symbol.asyncIterator](){let t=new DA;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)}},DA=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,value:void 0}}}});function bt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===Bo.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 Fo;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 Fx,Ja=se(()=>{Fx=b(ai());km();a(bt,"transaction");(0,Fx._assignPackageExport)("transaction",bt);bt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};bt.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 MA={};ye(MA,{add:()=>W_,applyReverse:()=>kx,getRecordAtTime:()=>vA,rebuildUpdateBefore:()=>j_});function W_(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 j_(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,W_(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function kx(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=y9[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=Hx}}function vA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=At(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":kx(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===Hx&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=At(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 y9,Hx,z_=se(()=>{Ki();a(W_,"add");W_.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)};y9={add:W_};a(j_,"rebuildUpdateBefore");a(kx,"applyReverse");Hx={};a(vA,"getRecordAtTime")});var Wx={};ye(Wx,{parse:()=>BA,streamAsJSON:()=>Gm,stringify:()=>ol});function Gm(e){return new UA({value:e})}function Gx(e){return console.error(e),JSON.stringify(Hm(e))}function qx(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function ol(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===Kx)return Yx(e);if(t.resolution)return t.resolution.then(()=>ol(e));throw t}}function Yx(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+=Yx(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+ol(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function BA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),A9.test(e)?R9.parse(e):JSON.parse(e)):null}var $x,xA,Vx,R9,b9,Kx,Hm,UA,A9,FA=se(()=>{$x=require("stream"),xA=b(Q()),Vx=b(require("json-bigint-fixes")),R9=(0,Vx.default)({useNativeBigInt:!0}),b9=1e4,Kx={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw Kx};({errorToString:Hm}=xA);a(Gm,"streamAsJSON");UA=class extends $x.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=>(xA.warn("Error serializing in stream",c),o={done:!1,value:{error:Hm(c)}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:Hm(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),Gx)}catch(s){yield Gx(s)}else yield ol(t)}else yield ol(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);qx(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(Hm(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>b9?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 qx(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(Hm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(Gx,"handleError");a(qx,"when");a(ol,"stringify");a(Yx,"jsStringify");A9=/[[,:]\s*-?\d{16,}/;a(BA,"parse")});var n0={};ye(n0,{asyncSerialization:()=>$A,contentTypes:()=>qA,findBestSerializer:()=>Q_,getDeserializer:()=>qo,hasAsyncSerialization:()=>VA,registerContentHandlers:()=>Vm,serialize:()=>Km,serializeMessage:()=>Go,toCsvStream:()=>J_});function I9(e){try{return e?.[0]===123?GA(e):e}catch{return e}}function Vm(e){e.register(w9,{serializers:[{regex:/^application\/json$/,serializer:Gm},{regex:/^application\/cbor$/,serializer:a(function(t){return new al.EncoderStream($m).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?cl.Readable.from((0,Yi.encodeIter)(t,$m)):(0,Yi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),J_(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,al.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=En.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 Jx.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(En.keys()).join(", "),406);n=En.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function Km(e,t,r){let n=zx&&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}),HA.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,Ho.createBrotliCompress)({params:{[Ho.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Ho.constants.BROTLI_MODE_TEXT:Ho.constants.BROTLI_MODE_GENERIC,[Ho.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>zx?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Ho.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function Go(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;ko=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=qm(e);return ko?.length>0?(ko.length===1?ko[0]:Promise.all(ko)).then(()=>Go(e,t,!0)):n}finally{ko=void 0}}function $A(e){if(ko)ko.push(e);else throw new Error("Unable to serialize asynchronously")}function VA(){return!!ko}function N9(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 O9(e){return C9.includes(e)}function P9(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 qo(e="",t=!1){let r=P9(e),n=r.type&&En.get(r.type)?.deserialize||L9(r);return t?s=>N9(s).then(n):n}function L9(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!O9(e.parameters.charset)&&HA.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 D9(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 J_(e,t){let r=cl.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 Zx.Transform(n,s);return r.pipe(i)}var Yi,al,Ho,Jx,cl,Qx,kA,Xx,HA,Zx,e0,t0,qm,GA,$m,En,qA,jx,r0,w9,zx,ko,C9,$o=se(()=>{FA();Yi=require("msgpackr"),al=require("cbor-x"),Ho=require("zlib"),Jx=b(Ee()),cl=b(require("stream"));Hr();Qx=b(ai()),kA=b(fe());G();Xx=b(require("yaml")),HA=b(ir());os();Zx=require("json2csv"),e0=b(require("fastify-plugin")),t0=kA.default.get(x.SERIALIZATION_BIGINT)!==!1,qm=t0?ol:JSON.stringify,GA=t0?BA:JSON.parse,$m={useRecords:!1,useToJSON:!0},En=new Map,qA=En;Ue.contentTypes=qA;(0,Qx._assignPackageExport)("contentTypes",qA);En.set("application/json",{serializeStream:Gm,serialize:qm,deserialize(e){return GA(e)},q:.8});jx=new al.Encoder($m);En.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new al.EncoderStream($m).end(e)},serialize:jx.encode,deserialize:jx.decode,q:1});En.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?cl.Readable.from((0,Yi.encodeIter)(e,$m)):(0,Yi.pack)(e)},serialize:Yi.pack,deserialize:Yi.unpack,q:.9});En.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),J_(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]),J_(e,e?.getColumns?.())},q:.1});En.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return cl.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});En.set("text/yaml",{serialize(e){return Xx.stringify(e,{aliasDuplicateObjects:!1})},q:.7});En.set("text/event-stream",{serializeStream:a(function(e){return cl.Readable.from(D9(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+`
5
5
  `),e.data){let r=e.data;typeof r=="object"&&(r=qm(r)),t+="data: "+r+`
6
6
  `}return e.id&&(t+="id: "+e.id+`
7
7
  `),e.retry&&(t+="retry: "+e.retry+`
@@ -10,15 +10,15 @@
10
10
 
11
11
  `:`data: ${e}
12
12
 
13
- `},"serialize"),compressible:!1,q:.8});En.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()}});r0={type:"application/json",serializeStream:Gm,serialize:qm,deserialize:I9,q:.5};En.set("*/*",r0);En.set("",r0);a(I9,"tryJSONParse");a(Vm,"registerContentHandlers");w9=(0,e0.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");zx=kA.default.get(x.HTTP_COMPRESSIONTHRESHOLD);a(Km,"serialize");a(Ho,"serializeMessage");a($A,"asyncSerialization");a(VA,"hasAsyncSerialization");a(N9,"streamToBuffer");C9=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(O9,"isBufferEncoding");a(P9,"parseContentType");a(Go,"getDeserializer");a(L9,"deserializerUnknownType");a(D9,"transformIterable");a(J_,"toCsvStream")});var ig={};ye(ig,{Blob:()=>vs,blobsWereEncoded:()=>ul,cleanupOrphans:()=>Y9,databasePaths:()=>YA,decodeBlobsWithWrites:()=>sg,decodeFromDatabase:()=>Vo,decodeWithBlobCallback:()=>zm,deleteBlob:()=>tg,deleteBlobsInObject:()=>Xa,deleteRootBlobPathsForDB:()=>zA,encodeBlobsAsBuffers:()=>$9,encodeBlobsWithFilePath:()=>ng,findBlobsInObject:()=>ll,getFileId:()=>rg,getFilePathForBlob:()=>m0,getRootBlobPathsForDB:()=>ju,isSaving:()=>B9,saveBlob:()=>jm,setDeletionDelay:()=>x9,startPreCommitBlobsForRecord:()=>JA});function d0(){}function tg(e){let t=m0(e);t&&setTimeout(()=>{(0,je.unlink)(t,r=>{r&&Lt.default.debug?.("Error trying to remove blob file",r)})},f0)}function x9(e){f0=e}function jm(e,t=!1){let r=Gr.get(e);if(!r)r={storageIndex:0,fileId:null,store:Bn},Gr.set(e,r);else{if(r.fileId)return r;r.store=Bn}return r.deleteOnFailure=t,k9(r),r.source?KA(e,r.source,r):r.contentBuffer?F9(e,r):KA(e,Qa.Readable.from(e.stream()),r),r}function KA(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,je.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(M9),p=(0,eg.createDeflate)(),(0,Qa.pipeline)(t,p,f,E)):(m||f.write(v9),(0,Qa.pipeline)(t,f,E));function h(_){let R=BigInt(_),S=new Uint8Array(Nr),y=new DataView(S.buffer);return R|=BigInt(o?jA:u0)<<48n,y.setBigInt64(0,R),S}a(h,"createHeader");function E(_){let R=f.fd;if(_){if(i.unlock(d,0),R&&((0,je.close)(R),f.fd=null),r.deleteOnFailure)(0,je.unlink)(n,S=>{S&&Lt.default.debug?.("Error while deleting aborted blob file",S)});else try{if((0,je.statSync)(n).size===0){let S=Buffer.from(_.toString());(0,je.writeFile)(n,Buffer.concat([h(BigInt(S.length)+0xff000000000000n),S]),y=>{y&&Lt.default.debug?.("Error write error message to blob file",y)})}}catch(S){Lt.default.debug?.("Error checking blob file after abort",S)}u(_)}else{if(!m){m=!0;let S=p?p.bytesWritten:f.bytesWritten-Nr;e.size=S,(0,je.write)(R,h(S),0,Nr,0,E);return}i.unlock(d,0),c?(0,je.fdatasync)(R,S=>{S&&u(S),l(),(0,je.close)(R),f.fd=null}):(l(),(0,je.close)(R),f.fd=null)}}a(E,"finished")}),e}function rg(e){return Gr.get(e)?.fileId}function B9(e){return Gr.get(e)?.saving}function m0(e){let t=Gr.get(e);return t?.fileId&&Wu(t)}function ju(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=YA.get(e);if(!t){if(!e.databaseName)return Lt.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,Wm.get)(x.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,ji.join)(n,e.databaseName)):t=[(0,ji.join)((0,Wm.getHdbBasePath)(),"blobs",e.databaseName)],YA.set(e,t)}return t}async function zA(e){let t=ju(e);t&&await Promise.all(t.map(r=>p0(r)))}async function p0(e){if((0,je.existsSync)(e)){for(let t of await(0,Fn.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await p0((0,ji.join)(e,t.name));else try{await(0,Fn.unlink)((0,ji.join)(e,t.name))}catch(r){Lt.default.warn?.("Error deleting file",r)}try{await(0,Fn.rmdir)(e)}catch(t){Lt.default.warn?.("Error deleting directory",t)}}}function Wu({storageIndex:e,fileId:t,store:r}){let n=ju(r);return(0,ji.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 F9(e,t){let r=t.contentBuffer,n=r.length;if(!(n<l0))return e.size=n,KA(e,Qa.Readable.from([r]),t)}function k9(e){let t=ju(e.store),r=H9(),n=t?.length>1?G9(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=Wu(e),o=(0,ji.dirname)(i);(0,je.existsSync)(o)||(0,WA.ensureDirSync)(o),e.filePath=i}function H9(){let e=a0.get(Bn);if(!e){let t=0,r=ju(Bn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let o=0;if((0,je.existsSync)(n))for(let c of(0,je.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,ji.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)),a0.set(Bn,e)}return Number(Atomics.add(e,0,1n))}function G9(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(Z_);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,q9(e)),e.frequencyTable[t%Z_]}async function q9(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,WA.ensureDirSync)(s),o=await(0,Fn.statfs)(s)}let c=o.bavail*o.bsize;return Math.pow(c,.8)})),r=new Array(Z_),n=t.map(s=>1/s);for(let s=0;s<Z_;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 ng(e,t,r){Vu=t,Bn=r,ul=!1;try{return e()}finally{Vu=void 0,Bn=void 0}}function $9(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 sg(e,t,r){try{Xr=[],$o=r,Bn=t,e()}catch(s){throw $o=void 0,Xr=void 0,s}$o=void 0;let n=Xr.length<2?Xr[0]:Promise.all(Xr);return Xr=void 0,n}function zm(e,t,r){Bn=r;try{return $o=t,e()}finally{$o=void 0}}function Vo(e,t){return Bn=t,e()}function Xa(e){ll(e,t=>{tg(t)})}function ll(e,t){if(e instanceof vs)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&ll(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&ll(e[r],t)}}function JA(e,t){let r;for(let n in e){let s=e[n];if(s instanceof Yu&&s.saveBeforeCommit){Bn=t;let i=jm(s,!0).saving??Promise.resolve();r=r?Promise.all(r,i):i}}return r}function K9(){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,t){let r,n,s=0;for(let d in e){let f=e[d];if(r=f.primaryStore.rootStore,n=f.auditStore,n)break}let i=new Set,o=ju(r);if(o)for(let d of o)await c(d);return await l(),Lt.default.warn?.(`Cleaned Orphan Blobs from ${t??"database"}, deleted ${s} blobs)`),s;async function c(d){try{if(!(0,je.existsSync)(d))return;for(let f of await(0,Fn.readdir)(d,{withFileTypes:!0})){let m=(0,ji.join)(d,f.name);if(f.isDirectory())await c(m);else if(i.size%1e6===0&&Lt.default.info?.("Finding all blobs for orphan check, paths accumulated",i.size),i.add(m),i.size%2e3===0){let p=(0,c0.getHeapStatistics)();p.used_heap_size>p.heap_size_limit*(.8-i.size/16e6)&&await l()}}}catch(f){Lt.default.error?.("Error searching path for blobs",d,f)}}a(c,"searchPath");async function l(){let d=0,f=Math.floor(((0,Wm.get)(x.STORAGE_BLOBCLEANUPSPEED)??1e4)/1e3+1);for(let m in e){Lt.default.warn?.("Checking for references to potential orphaned blobs in table",m);let p=e[m];for(let h of p.primaryStore.getRange({versions:!0,snapshot:!1,lazy:!0}))try{h.metadataFlags&Zr&&h.value&&u(h.value),d++%f===0?await(0,Ku.setTimeout)(1):await(0,Ku.setImmediate)()}catch(E){Lt.default.error?.("Error searching table",m," for references to potential orphaned blobs failed",E)}}Lt.default.warn?.("Checking for references to potential orphaned blobs in the audit log");for(let{value:m}of n.getRange({start:1,snapshot:!1,lazy:!0}))try{let p=At(m),h=n.tableStores[p.tableId],E=h?.getEntry(p.recordId);(!E||E.version!==p.version||!E.value)&&u(p.getValue(h)),d++%f===0?await(0,Ku.setTimeout)(1):await(0,Ku.setImmediate)()}catch(p){Lt.default.error?.("Error searching audit log for references to potential orphaned blobs failed",p)}Lt.default.warn?.("Deleting",i.size,"orphaned blobs"),s+=i.size;for(let m of i)try{await(0,Fn.unlink)(m)}catch(p){Lt.default.warn?.("Error deleting file",p)}Lt.default.warn?.("Finished deleting",i.size,"orphaned blobs"),i.clear()}a(l,"removePathsThatAreNotReferenced");function u(d){ll(d,f=>{if(f instanceof Yu){let m=Gr.get(f);if(m.fileId!=null){let p=Wu(m);i.has(p)&&i.delete(p)}}})}a(u,"checkObjectForReferences")}var Wi,Fn,je,eg,Qa,WA,Wm,ji,Lt,c0,Ku,l0,Nr,u0,jA,s0,v9,M9,i0,Gr,$o,vs,Vu,Xr,Bn,ul,Ym,X_,U9,o0,Yu,f0,YA,a0,Z_,V9,os=se(()=>{Wi=require("msgpackr"),Fn=require("node:fs/promises"),je=require("node:fs"),eg=require("node:zlib"),Qa=require("node:stream"),WA=require("fs-extra"),Wm=b(fe());G();ji=require("path"),Lt=b(ir());qo();Ki();c0=require("node:v8"),Ku=require("node:timers/promises"),l0=8192,Nr=8,u0=0,jA=1,s0=255,v9=new Uint8Array([0,u0,255,255,255,255,255,255]),M9=new Uint8Array([0,jA,255,255,255,255,255,255]),i0=0xffffffffffff,Gr=new WeakMap,vs=global.Blob||K9(),ul=!1,Ym=new Uint8Array(8),X_=new DataView(Ym.buffer),U9=6e4;a(d0,"InstanceOfBlobWithNoConstructor");d0.prototype=vs.prototype;o0=!1,Yu=class e extends d0{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=Gr.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):(VA()&&$A(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=Gr.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=Wu(t),o,c=a(async()=>{let l,u=Nr;try{if(l=await(0,Fn.readFile)(i),l.length>=Nr){l.copy(Ym,0,0,Nr);let f=X_.getBigUint64(0);if(Number(f>>48n)===s0)throw new Error("Error in blob: "+l.subarray(Nr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<i0&&(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]===jA?new Promise((f,m)=>{(0,eg.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=Gr.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=Wu(t),o,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,_=a((R,S)=>{(0,je.open)(i,"r",(y,w)=>{if(y){if(y.code==="ENOENT"&&f!==!1&&(Lt.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),_(R,S)},20).unref();S(y),p.#e?.forEach(I=>I(y))}else o=w,R(w)})},"openFile");return new Promise(_)},pull:a(E=>{let _=0,R=100;return new Promise(a(function S(y,w){function I(X){(0,je.close)(o),clearTimeout(d),u&&u.close(),w(X),p.#e?.forEach(q=>q(X))}a(I,"onError");let H=Buffer.allocUnsafe(262144);(0,je.read)(o,H,0,H.length,c,(X,q,k)=>{if(l+=q,X)return I(X);if(c===0){if(q<Nr){R-- >0&&f!==!1?(h(),Lt.default.debug?.("File was empty, waiting for data to be written",i,R),setTimeout(()=>S(y,w),20).unref()):(Lt.default.debug?.("File was empty, throwing error",i,R),I(new Error(`Blob ${t.fileId} was empty`)));return}k.copy(Ym,0,0,Nr);let z=X_.getBigUint64(0);if(Number(z>>48n)===s0)return I(new Error("Error in blob: "+k.subarray(Nr,q)));if(_=Number(z&0xffffffffffffn),_<i0&&p.size!==_&&(p.size=_,p.#t))for(let Y of p.#t)Y(_);k=k.subarray(Nr,q),l-=Nr}else if(q===0){let z=Buffer.allocUnsafe(8);return(0,je.read)(o,z,0,Nr,0,Y=>{if(Y)return I(Y);if(Ym.set(z),_=Number(X_.getBigUint64(0)&0xffffffffffffn),_>l){h()?u?d=setTimeout(()=>{I(new Error(`File read timed out reading from ${i}`))},U9).unref():(u=(0,je.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(y,w))}),S(y,w)):m?I(new Error("Blob is incomplete")):(m=!0,S(y,w));return}(0,je.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,w);s&&l>=s&&(l>s&&(k=k.subarray(0,s-c)),l=_=s),n&&n>c&&(k=k.subarray(n-c))}c+=q;try{E.enqueue(k)}catch(z){return Lt.default.debug?.("Error enqueuing chunk",z),y()}l===_&&((0,je.close)(o),E.close()),y()})},"readMore"))},"pull"),cancel(){(0,je.close)(o),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,_=t.fileId+":blob";f=!E.attemptLock(_,0,()=>{f=!1}),f||E.unlock(_,0)}return f}}slice(t,r,n){let s=Gr.get(this),i=new e(n&&{type:n});if(s?.fileId){let o={...s,start:t,end:r};Gr.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)};Gr.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 o0||(o0=!0,Lt.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 Gr.get(this)?.saving??Promise.resolve()}},f0=500;a(tg,"deleteBlob");a(x9,"setDeletionDelay");global.createBlob=function(e,t){let r=new Yu(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(Gr.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Qa.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Qa.Readable.from(e);else throw new Error("Invalid source type");return r};a(jm,"saveBlob");a(KA,"writeBlobWithStream");a(rg,"getFileId");a(B9,"isSaving");a(m0,"getFilePathForBlob");YA=new Map;a(ju,"getRootBlobPathsForDB");a(zA,"deleteRootBlobPathsForDB");a(p0,"rimrafSteadily");a(Wu,"getFilePath");a(F9,"writeBlobWithBuffer");a(k9,"generateFilePath");a0=new Map;a(H9,"getNextFileId");Z_=128;a(G9,"getNextStorageIndex");a(q9,"createFrequencyTableForStoragePaths");a(ng,"encodeBlobsWithFilePath");a($9,"encodeBlobsAsBuffers");a(sg,"decodeBlobsWithWrites");a(zm,"decodeWithBlobCallback");a(Vo,"decodeFromDatabase");a(Xa,"deleteBlobsInObject");a(ll,"findBlobsInObject");a(JA,"startPreCommitBlobsForRecord");V9=new Wi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Wi.addExtension)({Class:vs,type:11,unpack:a(function(e){let t=V9.unpack(e),r=new Yu;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(Gr.set(r,{storageIndex:t[1],fileId:t[2],store:Bn}),$o)return $o(r)??r;if(!Bn)throw new Error("No store specified, cannot load blob from storage")}else Gr.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=Gr.get(e);if(Vu!==void 0&&(ul=!0,t?.recordId!==void 0&&t.recordId!==Vu))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<l0)return r.size=t.contentBuffer.length,(0,Wi.pack)([r,t.contentBuffer])}if(Vu!==void 0){if(t=jm(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Vu,(0,Wi.pack)([r,t.storageIndex,t.fileId])}if(t){if($o)return $o(e),(0,Wi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,je.readFileSync)(Wu(t));if(n.length>=Nr&&(n.copy(Ym,0,0,Nr),Number(X_.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(K9,"polyfillBlob");a(Y9,"cleanupOrphans")});var S0={};ye(S0,{onStorageReclamation:()=>Jm,runReclamationHandlers:()=>eI,setAvailableSpaceRatioGetter:()=>j9});function Jm(e,t,r){(r||(0,ag.getWorkerIndex)()===(0,ag.getWorkerCount)()-1)&&(og.has(e)||og.set(e,[]),og.get(e).push({priority:0,handler:t}),ZA||(ZA=setTimeout(eI,E0).unref()))}async function eI(){for(let[e,t]of og)try{let r=await g0(e),n=W9/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&&(XA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){XA.default.error?.("Error running storage reclamation handlers",r)}ZA=setTimeout(eI,E0).unref()}function j9(e){g0=e??_0}var QA,ag,XA,cg,h0,og,W9,E0,ZA,_0,g0,lg=se(()=>{QA=require("node:fs/promises"),ag=b(st()),XA=b(ir());G();cg=b(fe()),h0=b(ae());cg.default.initSync();og=new Map,W9=cg.default.get(x.STORAGE_RECLAMATION_THRESHOLD)??.4,E0=(0,h0.convertToMS)(cg.default.get(x.STORAGE_RECLAMATION_INTERVAL))||36e5;a(Jm,"onStorageReclamation");_0=a(async e=>{if(QA.statfs){let t=await(0,QA.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"),g0=_0;a(eI,"runReclamationHandlers");a(j9,"setAvailableSpaceRatioGetter")});var D0={};ye(D0,{ACTION_32_BIT:()=>pg,ACTION_64_BIT:()=>X9,AUDIT_STORE_OPTIONS:()=>Zm,Decoder:()=>fl,HAS_BLOBS:()=>Zr,HAS_CURRENT_RESIDENCY_ID:()=>ml,HAS_EXPIRATION_EXTENDED_TYPE:()=>rp,HAS_ORIGINATING_OPERATION:()=>tp,HAS_PREVIOUS_RESIDENCY_ID:()=>pl,REMOTE_SEQUENCE_UPDATE:()=>hg,createAuditEntry:()=>hl,getLastRemoved:()=>J9,openAuditStore:()=>fg,readAuditEntry:()=>At,removeAuditEntry:()=>mg,setAuditRetention:()=>Q9,transactionKeyEncoder:()=>C0});function fg(e){let t=e.auditStore=e.openDB(tI.AUDIT_STORE_NAME,{create:!1,...Zm});t||(t=e.auditStore=e.openDB(tI.AUDIT_STORE_NAME,Zm),y0(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=nI;Jm(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()-rI/(1+i*i)})){try{m=mg(t,h,E)}catch(_){zu.warn("Error removing audit entry",_)}if(p=h,await new Promise(setImmediate),++f>=z9){o=10;break}}await m}finally{f===0?o=Math.min(o<<1,rI/10):(y0(t,p),o>100&&(o=o>>1)),d(void 0),c()}},o).unref()});return u}if(a(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,Xm.getWorkerIndex)()===(0,Xm.getWorkerCount)()-1&&c(),(0,Xm.getWorkerIndex)()===0&&!T0)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(T0=!0,zu.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 mg(e,t,r){let n=Z9(r),s;if(n&Zr){s=At(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)&&Vo(()=>Xa(s.getValue(i)),i.rootStore)}}if((n&15)===sI){s=s||At(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 y0(e,t){iI[0]=t,e.put(Symbol.for("last-removed"),O0)}function J9(e){let t=e.get(Symbol.for("last-removed"));if(t)return O0.set(t),iI[0]}function Q9(e,t=nI){rI=e,nI=t}function hl(e,t,r,n,s,i,o,c,l,u,d,f,m){let p=P0[o];if(!p)throw new Error(`Invalid audit entry type ${o}`);let h=1;if(n&&(n>1?Za.setFloat64(0,n):Ms.set(oI),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}R(s),R(t),_(r),Za.setFloat64(h,e),h+=8,l&ml&&R(u),l&pl&&R(d),l&rp&&(Za.setFloat64(h,f),h+=8),l&tp&&R(L0[m]),i?_(i):Ms[h++]=0,l?Za.setUint32(n?8:0,p|l|3221225472):Ms[n?8:0]=p;let E=Ms.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function _(S){let y=h;h+=1,h=(0,dl.writeKey)(S,Ms,h);let w=h-y-1;w>127?w>16383?(zu.error("Key or username was too large for audit entry",S),h=y+1,Ms[y]=0):(Ms.copyWithin(y+2,y+1,h),Za.setUint16(y,w|32768),h++):Ms[y]=w}function R(S){S<128?Ms[h++]=S:S<16384?(Za.setUint16(h,S|32768),h+=2):S<1056964608?(Za.setUint32(h,S|3221225472),h+=4):(Ms[h]=255,Za.setUint32(h+1,S),h+=5)}}function Z9(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 fl(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function At(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new fl(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&ml&&(m=n.readInt()),i&pl&&(p=n.readInt()),i&rp&&(h=n.readFloat64()),i&tp){let y=n.readInt();E=L0[y]}l=n.readInt();let _=n.position,R=n.position+=l,S;return{type:P0[i&7],tableId:c,nodeId:o,get recordId(){return(0,dl.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return R>_?(0,dl.readKey)(e,_,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,w,I){if(i&ug||i&Qm&&!w)return S||(S=Vo(()=>y.decoder.decode(e.subarray(n.position,r)),y.rootStore)),S;if(i&Qm&&I)return vA(y.getEntry(this.recordId),I,y)},getBinaryValue(){return i&(ug|Qm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return zu.error("Reading audit entry error",n,e),{}}}var dl,dg,tI,Xm,N0,zu,Ms,Za,C0,Zm,rI,z9,iI,O0,nI,T0,ug,Qm,R0,sI,b0,A0,I0,w0,pg,X9,hg,ml,pl,tp,rp,Zr,P0,L0,fl,Ki=se(()=>{dl=require("ordered-binary"),dg=b(fe()),tI=b(Jt());G();Xm=b(st()),N0=b(ae());El();zu=b(Q());z_();os();lg();(0,dg.initSync)();Ms=Buffer.alloc(2816),Za=new DataView(Ms.buffer,Ms.byteOffset,2816),C0={writeKey(e,t,r){return e===ep?(t.set(ep,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,dl.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,dl.readKey)(e,t,r)}},Zm={encoding:"binary",keyEncoder:C0},rI=(0,N0.convertToMS)((0,dg.get)(x.LOGGING_AUDITRETENTION))||86400*3,z9=1e3,iI=new Float64Array(1),O0=new Uint8Array(iI.buffer),nI=1e4,T0=!1;a(fg,"openAuditStore");a(mg,"removeAuditEntry");a(y0,"updateLastRemoved");a(J9,"getLastRemoved");a(Q9,"setAuditRetention");ug=16,Qm=32,R0=1,sI=2,b0=3,A0=4,I0=5,w0=6,pg=14,X9=15,hg=11,ml=512,pl=1024,tp=2048,rp=4096,Zr=8192,P0={put:R0|ug,[R0]:"put",delete:sI,[sI]:"delete",message:b0|ug,[b0]:"message",invalidate:A0|Qm,[A0]:"invalidate",patch:I0|Qm,[I0]:"patch",relocate:w0,[w0]:"relocate"},L0={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(hl,"createAuditEntry");a(Z9,"readAction");a(At,"readAuditEntry");fl=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 Eg(){return aI||(aI=ze({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),aI}function t7(e){return e=e.replace(e7,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 r7(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 lI(e){let t=v0.default.createHash("shake128",{outputLength:4}),r;return(0,M0.isIPv6)(e)?r=t7(e):r=e.toLowerCase(),r7(Uint8Array.from(t.update(r).digest()))}var v0,M0,cI,aI,e7,uI=se(()=>{Oe();v0=b(require("crypto")),M0=require("node:net"),cI=new Map;a(Eg,"getAnalyticsHostnameTable");e7=/(\d{1,3}\.){3}\d{1,3}$/;a(t7,"normalizeIPv6");a(r7,"nodeHashToNumber");a(lI,"stableNodeId")});var Ko,dI=se(()=>{Ko={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 H0={};ye(H0,{captureProfile:()=>mI,userCodeFolders:()=>_g});async function mI(e){let r=k0/1e6,n=new Map,s=new Map,i=new Map,o=0,c=0;try{let u=fI.time.stop(!0),d=u.stringTable.strings;for(let f of u.function)s.set(f.id,d[f.filename]);for(let f of u.location)n.set(f.id,f.line[0]);for(let f of u.sample)l(f);We(c*r,"cpu-usage","harper"),We(o*r,"cpu-usage","user");for(let[f,m]of i)if(m>100){let p=n.get(f),h=s.get(p.functionId)+":"+p.line;We(m*r,"cpu-usage",h)}}catch(u){F0.error?.("analytics profiler error:",u)}finally{e&&setTimeout(()=>{let u=((0,np.get)(x.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;mI(u)},e).unref()}function l(u){let d=!1;for(let f of u.locationId){let m=s.get(n.get(f).functionId);if(_g.some(p=>m.startsWith(p))){let p=u.value[0];o+=p,d||i.set(f,(i.get(f)??0)+p);return}if(m.startsWith(x0.PACKAGE_ROOT)){let p=u.value[0];c+=p,d||(i.set(f,(i.get(f)??0)+p),d=!0)}}}a(l,"getUserHitCount")}var np,x0,B0,fI,F0,U0,_g,k0,G0=se(()=>{as();np=b(fe());G();x0=b(yt()),B0=require("node:fs"),fI=require("@datadog/pprof"),F0=b(Q()),U0=(0,np.getHdbBasePath)(),_g=U0?[U0]:[];process.env.RUN_HDB_APP&&_g.push((0,B0.realpathSync)(process.env.RUN_HDB_APP));k0=5e4;(async()=>{if(_g.length===0)return;fI.time.start({intervalMicros:k0});let e=((0,np.get)(x.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;setTimeout(()=>{mI(e)},e).unref()})();a(mI,"captureProfile")});var Tg={};ye(Tg,{addAnalyticsListener:()=>ap,analyticsDelay:()=>_I,calculateCPUUtilization:()=>iB,diffResourceUsage:()=>oB,onAnalyticsAggregate:()=>TI,recordAction:()=>We,recordActionBinary:()=>tn,recordHostname:()=>gI,setAnalyticsEnabled:()=>i7});function i7(e){eB=e,clearTimeout(ip),ip=null}function o7(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 a7(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},Sg.set(e,o)}function We(e,t,r,n,s){if(!eB)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Sg.get(i);o?o7(e,o):a7(i,e,t,r,n,s),ip||c7()}function tn(e,t,r,n,s){We(!!e,t,r,n,s)}function ap(e){rB.push(e)}function c7(){pI||=performance.now(),ip=setTimeout(async()=>{ip=null;let e=performance.now()-pI;pI=0;let t=[],r={time:Date.now(),period:e,threadId:_l.threadId,metrics:t};for(let[s,i]of Sg){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 sB){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 aB()}let n=process.memoryUsage();t.push({metric:"memory",threadId:_l.threadId,byThread:!0,...n});for(let s of rB)s(t);Sg=new Map,_l.parentPort?_l.parentPort.postMessage({type:tB,report:r}):uB({report:r})},_I).unref()}async function gI(){let e=Ue.hostname;en.trace?.("recordHostname server.hostname:",e);let t=lI(e);en.trace?.("recordHostname nodeId:",t);let r=Eg();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 Ju(e,t){let r=Ue.hostname,n=cI.get(r);n?en.trace?.("storeMetric cached nodeId:",n):(n=lI(r),en.trace?.("storeMetric new nodeId:",n),cI.set(r,n));let s={id:[(0,EI.getNextMonotonicTime)(),n],...t};en.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function iB(e,t){let r=e.userCPUTime+e.systemCPUTime;return en.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function oB(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 l7(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={metric:Ko.TABLE_SIZE,database:t,table:s,size:c};en.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),Ju(e,l),n+=c}return n}function q0(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=Z0.statSync(s.primaryStore.env.path).size,c=l7(e,r,n),l=o-c,u={metric:Ko.DATABASE_SIZE,database:r,size:o,used:c,free:l,audit:i};Ju(e,u),en.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){en.warn?.("Error getting DB size metrics",s)}}function $0(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:Ko.STORAGE_VOLUME,database:r,...i};Ju(e,o),en.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){en.warn?.("Error getting DB volume metrics",s)}}async function u7(e,t=6e4){let r=SI(),n=cB(),s=new Promise(y=>{let w=performance.now();setImmediate(()=>{let I=performance.now();I-w>5e3&&en.warn?.("Unusually high event queue latency on the main thread of "+Math.round(I-w)+"ms"),w=performance.now()}),n.primaryStore.prefetch([1],()=>{let I=performance.now();I-w>5e3&&en.warn?.("Unusually high task queue latency on the main thread of "+Math.round(I-w)+"ms"),y(I-w)})}),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:w}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!w)continue;if(o){if(y>o+t)break}else o=y;d=y;let{metrics:I,threadId:H}=w;for(let X of I||[]){let{path:q,method:k,type:z,metric:Y,count:ce,total:de,distribution:te,threads:Se,...Ne}=X;ce||(ce=1);let Ke=Y+(q?"-"+q:"");k!==void 0&&(Ke+="-"+k),z!==void 0&&(Ke+="-"+z);let $e=c.get(Ke);if($e){if($e.threads){let nr=$e.threads[H];if(nr)$e=nr;else{$e.threads[H]={...Ne};continue}}$e.count||($e.count=1);let Ir=$e.count;for(let nr in Ne){let zr=Ne[nr];typeof zr=="number"&&($e[nr]=($e[nr]*Ir+zr*ce)/(Ir+ce))}$e.count+=ce,de>=0&&($e.total+=de,$e.ratio=$e.total/$e.count)}else $e={period:t,...X},delete $e.distribution,c.set(Ke,$e),$e.byThread&&($e.threads=[],$e.threads[H]={...Ne},u.push($e));if(te){te=te.map(nr=>typeof nr=="number"?{value:nr,count:1}:nr);let Ir=l.get(Ke);Ir?Ir.push(...te):l.set(Ke,te)}}await aB()}for(let y of u){let{path:w,method:I,type:H,metric:X,count:q,total:k,distribution:z,threads:Y,...ce}=y;Y=Y.filter(de=>de);for(let de in ce){if(typeof y[de]!="number")continue;let te=0;for(let Se of Y){let Ne=Se[de];typeof Ne=="number"&&(te+=Ne)}y[de]=te}y.count=Y.length,delete y.threads,delete y.byThread}for(let[y,w]of l){let I=c.get(y);w.sort((nr,zr)=>nr.value>zr.value?1:-1);let H=I.count-1,X=[],q=0,k=0,z;for(let nr of sB){let zr=H*nr;for(;q<zr;)z=w[k++],q+=z.count,k===1&&q--;let xr=w[k>1?k-2:0];z||(z=w[0]),X.push(z.value-(z.value-xr.value)*(q-zr)/z.count)}let[Y,ce,de,te,Se,Ne,Ke,$e,Ir]=X;Object.assign(I,{p1:Y,p10:ce,p25:de,median:te,p75:Se,p90:Ne,p95:Ke,p99:$e,p999:Ir})}let f;for(let[,y]of c)y.time=d,Ju(n,y),f=!0;if(f)for(let y of nB)y(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let y={metric:Ko.MAIN_THREAD_UTILIZATION,idle:p-V0,active:h-K0,taskQueueLatency:await s,time:m,...process.memoryUsage()};Ju(n,y)}V0=p,K0=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 _=oB(gg,E);en.trace?.(`diffed resourceUsage: ${JSON.stringify(_)}`),_.time=m,_.period=gg.time?m-gg.time:t,_.cpuUtilization=iB(_,_.period);let R={metric:Ko.RESOURCE_USAGE,..._};Ju(n,R),gg=E;let S=lt();q0(n,S),q0(n,{system:S.system}),$0(n,S),$0(n,{system:S.system})}async function Y0(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function SI(){return W0||(W0=ze({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function cB(){return j0||(j0=ze({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function m7(){lB=!0;let e=(0,op.get)(x.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await u7(_I,e),await Y0(SI(),d7),await Y0(cB(),f7)},Math.min(e/2,2147483647)).unref()}function uB(e,t){let r=e.report;r.threadId=t?.threadId||_l.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(z0+=n.mean*n.count);r.totalBytesProcessed=z0,t&&(r.metrics.push({metric:Ko.UTILIZATION,...t.performance.eventLoopUtilization(J0.get(t))}),J0.set(t,t.performance.eventLoopUtilization())),r.id=(0,EI.getNextMonotonicTime)(),SI().primaryStore.put(r.id,r),lB||m7(),p7&&(dB=E7(r))}async function E7(e){if(await dB,!ec){let r=(0,sp.dirname)(n7());try{ec=await(0,hI.open)((0,sp.join)(r,"analytics.log"),"r+")}catch{ec=await(0,hI.open)((0,sp.join)(r,"analytics.log"),"w+")}}let t=(await ec.stat()).size;if(t>h7){let r=Buffer.alloc(t);await ec.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ec.write(r,{position:0}),await ec.truncate(r.length),t=r.length}await ec.write(JSON.stringify(e)+`
14
- `,t)}function TI(e){e&&nB.push(e)}var _l,Q0,X0,sp,hI,EI,op,Z0,n7,s7,en,Sg,eB,ip,pI,_I,tB,rB,nB,sB,V0,K0,gg,aB,d7,f7,W0,j0,lB,z0,J0,p7,dB,ec,h7,as=se(()=>{_l=require("worker_threads"),Q0=b(st());Oe();X0=b(Q()),sp=require("path"),hI=require("fs/promises"),EI=b(xn()),op=b(fe());G();Hr();Z0=b(require("node:fs"));uI();dI();({getLogFilePath:n7,forComponent:s7}=X0.default);setTimeout(()=>{Promise.resolve().then(()=>G0())},1e3);en=s7("analytics").conditional;(0,op.initSync)();Sg=new Map,eB=(0,op.get)(x.ANALYTICS_AGGREGATEPERIOD)>-1;a(i7,"setAnalyticsEnabled");a(o7,"recordExistingAction");a(a7,"recordNewAction");a(We,"recordAction");Ue.recordAnalytics=We;a(tn,"recordActionBinary");pI=0,_I=1e3,tB="analytics-report",rB=[],nB=[];a(ap,"addAnalyticsListener");sB=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(c7,"sendAnalytics");a(gI,"recordHostname");a(Ju,"storeMetric");a(iB,"calculateCPUUtilization");a(oB,"diffResourceUsage");a(l7,"storeTableSizeMetrics");a(q0,"storeDBSizeMetrics");a($0,"storeVolumeMetrics");a(u7,"aggregation");V0=0,K0=0,gg={userCPUTime:0,systemCPUTime:0},aB=a(()=>new Promise(setImmediate),"rest");a(Y0,"cleanup");d7=36e5,f7=31536e6;a(SI,"getRawAnalyticsTable");a(cB,"getAnalyticsTable");(0,Q0.setChildListenerByType)(tB,uB);a(m7,"startScheduledTasks");z0=0,J0=new Map,p7=!1;a(uB,"recordAnalytics");h7=1e6;a(E7,"logAnalytics");a(TI,"onAnalyticsAggregate")});var EB={};ye(EB,{ENTRY:()=>g7,HAS_EXPIRATION:()=>Ag,HAS_RESIDENCY_ID:()=>II,HAS_STRUCTURE_UPDATE:()=>Ig,LAST_TIMESTAMP_PLACEHOLDER:()=>ep,LOCAL_TIMESTAMP:()=>_7,METADATA:()=>Xu,NEW_TIMESTAMP_PLACEHOLDER:()=>mB,NO_TIMESTAMP:()=>Rg,PENDING_LOCAL_TIME:()=>wI,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>oI,RecordEncoder:()=>AI,TIMESTAMP_ASSIGN_LAST:()=>T7,TIMESTAMP_ASSIGN_NEW:()=>pB,TIMESTAMP_ASSIGN_PREVIOUS:()=>hB,TIMESTAMP_PLACEHOLDER:()=>yg,TIMESTAMP_RECORD_PREVIOUS:()=>yI,entryMap:()=>tc,handleLocalTimeForGets:()=>wg,lastMetadata:()=>ut,recordUpdater:()=>NI,removeEntry:()=>Tl});function b7(){return lp[0]=lp[0]^64,S7.getFloat64(0)}function wg(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[Xu],l.localTime=ut.localTime,l.residencyId=ut.residencyId,l.size=ut.size,ut.expiresAt>=0&&(l.expiresAt=ut.expiresAt),ut=null),l.value&&tc.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&&(tc.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[Xu],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,Sl.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Sl.length;u++){let d=Sl[u].deref();(!d||d.isDone||d.isCommitted)&&Sl.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){l==null?gl=Rg:f?gl=i?.localTime?yI|hB:Rg:gl=l?i?.localTime?yI|16384:pB|16384:Rg;let p=u?.expiresAt;if(p>=0&&(c|=Ag),cp=c,RI=p,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:gl>0},E,_=0;try{let R=i?.residencyId,S=u?.residencyId;S&&(bI=S,cp|=II,_|=ml),R!==S&&(_|=pl,R||(R=0)),c&Ag&&(_|=rp),u?.originatingOperation&&(_|=tp),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&d!=="message"&&i.metadataFlags&Zr&&(!i.localTime||!r.getBinaryFast(i.localTime))&&Xa(i.value);let y;if(s!==void 0&&(y=ng(()=>e.put(n,s,h),n,e.rootStore),ul&&(_|=Zr)),l){let w=u?.user?.username;if(m&&(ng(()=>e.encoder.encode(m),n,e.rootStore),ul&&(_|=Zr)),e.encoder.hasStructureUpdate&&(_|=Ig,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let I=i?.localTime,H=r.get(I);if(H){let X=At(H).previousLocalTime;return y=r.put(I,hl(o,t,n,X,u?.nodeId??server.replication.getThisNodeId(r)??0,w,d,Qu,_,S,R,p),{ifVersion:E}),y}}y=r.put(s===void 0?mB:ep,hl(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,w,d,Qu,_,S,R,p,u?.originatingOperation),{instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&y7.has(d)&&We(Qu?.length??1,"db-write",u.tableToTrack,null),y}catch(R){throw R.message+=" id: "+n+" options: "+h,R}}}function Tl(e,t,r){if(t)return t.value&&t.metadataFlags&Zr&&!e.auditStore?.getBinaryFast(t.localTime)&&Xa(t.value),e.remove(t.key,r)}var fB,bg,yg,ep,oI,mB,_7,Xu,g7,lp,S7,Rg,pB,T7,hB,yI,Ag,II,wI,Ig,y7,tc,R7,Qu,gl,cp,RI,bI,ut,AI,Sl,El=se(()=>{fB=require("msgpackr");Ki();bg=b(Q());os();os();as();yg=new Uint8Array([1,1,1,1,4,64,0,0]),ep=new Uint8Array([1,1,1,1,1,0,0,0]),oI=new Uint8Array([1,1,1,1,3,64,0,0]),mB=new Uint8Array([1,1,1,1,0,64,0,0]),_7=Symbol("local-timestamp"),Xu=Symbol("metadata"),g7=Symbol("entry"),lp=new Uint8Array(8),S7=new DataView(lp.buffer,0,8),Rg=0,pB=0,T7=1,hB=3,yI=4,Ag=16,II=32,wI=1,Ig=256,y7=new Set(["put","patch","delete","message","publish"]),tc=new WeakMap,gl=0,cp=-1,RI=-1,bI=0,ut=null,AI=class extends fB.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{a(this,"RecordObject")}getUpdatedTime(){return tc.get(this)?.version}getExpiresAt(){return tc.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,o){if(gl||cp>=0){let c=0,l=gl;l&&(c+=8,gl=0);let u=cp,d=RI,f=bI;u>=0&&(c+=4,cp=-1,d>=0&&(c+=8,RI=-1),f&&(c+=4,bI=0));let m=R7=n.call(this,i,o|2048|c);Qu=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(yg[4]=l,yg[5]=l>>8,m.set(yg,p),p+=8),ul&&(u|=Zr),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|pg<<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 Qu=n.call(this,i,o),Qu};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(lp,0,c),c+=8;else for(let m=0;m<8;m++)lp[m]=t[c++];l=b7(),i=t[c]}let u,d;i<32&&(i===pg?(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&Ag&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&II&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Vo(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return ut={localTime:l,[Xu]:o,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:Vo(()=>super.decode(t,r),this.rootStore)}catch(c){return bg.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(b7,"getTimestamp");a(wg,"handleLocalTimeForGets");Sl=[];setInterval(()=>{for(let e=0;e<Sl.length;e++){let t=Sl[e].deref();!t||t.isDone||t.isCommitted?Sl.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(bg.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):bg.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(Tl,"removeEntry")});function PI(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?PI(f.conditions,f.operator,r,n,s,i,o,c):rd(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?(w,I)=>y.some(H=>H(w,I)):(w,I)=>y.every(H=>H(w,I))}let _=(h.attribute||h[0])===r.primaryKey,R=dp(h,r,i,c,_,p);return m&&E<f.length-1&&p&&(p=D7(r.primaryStore,h.estimated_count,p)),R}).filter(Boolean)}a(d,"mapConditionsToFilters")}function rd(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],w=Ji(n.attributes,y);if(w.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=w.definition?.tableClass||w.elements?.definition?.tableClass,H=new Map,X=rd({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,I,s,H);if(w.relationship.to){i[c[0]]=H;let q=!!Ji(I.attributes,w.relationship.to)?.elements;X=C7(X,w,I.primaryStore,q,H)}if(w.relationship.from){let q=a(k=>(k?.key!==void 0&&(k=k.key),rd({attribute:w.relationship.from,value:k},t,r,n,s,H)),"searchEntry");w.elements?(i[c[0]]=H,X=O7(X,w,I.primaryStore,H,q)):X=X.flatMap(q)}return X}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 _;switch(LI[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]=zi.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,_=!0;break;default:throw new rn.ClientError(`Unknown query comparator "${u}"`)}let R;if(typeof m=="string"&&m.length>Us.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,Us.MAX_SEARCH_KEY_LENGTH)+Us.OVERFLOW_MARKER,E=!1,R=dp(e,n,null,i,d)),typeof p=="string"&&p.length>Us.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,Us.MAX_SEARCH_KEY_LENGTH)+Us.OVERFLOW_MARKER,h=!0,R=R??dp(e,n,null,i,d)),r){let y=m;m=p,p=y,y=!E,E=!h,h=y}if(!f||f.isIndexing||_||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&&_)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??dp(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:w,value:I}){return this?.isSync?I&&R(I)?w:rc.SKIP:new Promise((H,X)=>setImmediate(()=>{try{H(I&&R(I)?w:rc.SKIP)}catch(q){X(q)}}))}:w=>w.value==null&&!(w.metadataFlags&(kn|yl))?rc.SKIP:(o?._freezeRecords&&Object.freeze(w.value),w));return y.hasEntries=!0,y}else return f?f.customIndex?f.customIndex.search(e,o).map(y=>{if(typeof y=="object"&&y){let{key:w,...I}=y,H=n.primaryStore.getEntry(w);return o?._freezeRecords&&Object.freeze(H?.value),{...I,...H}}return y}):f.getRange(S).map(R?function({key:y,value:w}){let I;return typeof y=="string"&&y.length>Us.MAX_SEARCH_KEY_LENGTH?I=n.primaryStore.get(w):I={[c]:y},this.isSync?R(I)?w:rc.SKIP:new Promise((H,X)=>setImmediate(()=>{try{H(R(I)?w:rc.SKIP)}catch(q){X(q)}}))}:({value:y})=>y):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:y,value:w}){return this.isSync?w&&R(w)?y:rc.SKIP:new Promise((I,H)=>setImmediate(()=>{try{I(w&&R(w)?y:rc.SKIP)}catch(X){H(X)}}))})}function Ji(e,t){if(Array.isArray(t))if(t.length>1){let r=Ji(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?Ji(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 C7(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 O7(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 dp(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=Ji(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=dp({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 _,R=a((y,w)=>{let I,H;return E?E.returnDirect?(I=E(y,r,w),H=ut):(H=E(y,r,w,!0),Array.isArray(H)?(I=H.map(X=>X.value),H=null):I=H?.value):I=y[d],{subObject:I,subEntry:H}},"getSubObject"),S=a((y,w)=>{if(E&&h.idFilter){if(!_)if(h.idFilter.idSet?.size===1){for(let k of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:k};_=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else _=u(E.from??t.primaryKey,h.idFilter,!1,!0);let q=_(y);return _.idFilter&&(S.idFilter=_.idFilter),q}let{subObject:I,subEntry:H}=R(y,w);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(z=>z[m.primaryKey]):k}}),I.some(h)):h(I,H):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),LI[o]||o){case Us.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,zi.compareKeys)(d,l[0])>=0&&(0,zi.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,zi.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,zi.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,zi.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,zi.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,zi.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&&Cg(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,_=3;function R(S){let y=S[d],w;if(typeof y!="object"||!y||p?w=f(y):Array.isArray(y)?w=y.some(f):y instanceof Date&&(w=f(y.getTime())),m&&(_++,!w&&!R.idFilter&&++E/_*i>h)){let I=rd(e,r.transaction.getReadTxn(),!1,t),H;R.to?H=I.flatMap(q=>t.primaryStore.get(q)[R.to]):H=I.map(nd);let X=new Set(H);R.idFilter=q=>X.has(nd(q)),R.idFilter.idSet=X}return w}return a(R,"recordFilter"),s&&(R.idFilter=f),R}a(u,"attributeComparator")}function Cg(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/Yo(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=LI[n]||n,n===Us.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=Ji(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=Cg(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*Yo(e.indices[i.relationship.from])/(Yo(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=Yo(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=w7*Yo(e.primaryStore)+1;else if(n==="between")r.estimated_count=I7*Yo(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=Yo(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=A7*Yo(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function Og(e,t){if(e)if(Wo=e,Zu.lastIndex=0,P7.test(e))try{if(t&&(t.conditions=[]),li=t??new td,up(li,""),qr!==Wo.length&&Qt("Unable to parse query, unexpected end of query"),li.parseErrorMessage&&(li.parseError=new CI(t.parseErrorMessage),!t))throw li.parseError;return li}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${qr} in '${Wo}'`,li.parseErrorMessage&&(r.message+=", "+li.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Qt(e){let t=`${e} at position ${qr}`;li.parseErrorMessage=li.parseErrorMessage?li.parseErrorMessage+", "+t:t}function up(e,t){let r=Zu,n,s,i,o,c,l=decodeURIComponent,u;for(;n=r.exec(Wo);){qr=r.lastIndex;let[,d,f]=n;o?(d&&Qt(`expected operator, but encountered '${d}'`),o=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Qt(`invalid FIQL operator ${d}`),l=_B):(l=decodeURIComponent,i="equals",d||Qt("attribute must be specified before equality comparator"),s=ed(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=N7[f],l=OI[i]?_B:decodeURIComponent,d||Qt(`attribute must be specified before comparator ${f}`),s=ed(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Qt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Qt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Qt("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&gB(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else Ng(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?Qt("conditions/comparisons are not allowed in a property list"):e.push(ed(d)),s=void 0;break;case"(":Zu.lastIndex=qr;let p=up(d?[]:new td,")");switch(d){case"":Ng(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:Qt("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":Qt("group by is not implemented yet");case"sort":e.sort=SB(p);break;default:Qt(`unknown query function call ${d}`)}Wo[qr]===","?r.lastIndex=++qr:o=!0,s=null;break;case"{":e.conditions&&Qt("property sets are not allowed in a queries"),d||Qt("property sets must have a defined parent property name"),Zu.lastIndex=qr,m=up([],"}"),m.name=d,e.push(m),Wo[qr]===","?r.lastIndex=++qr:o=!0;break;case"[":if(Zu.lastIndex=qr,d?(m=up(new td,"]"),m.name=d):m=up(e.conditions?new td:[],"]"),e.conditions)if(Ng(e,u),Wo[qr]==="="){l=decodeURIComponent,i="equals",s=ed(d),r.lastIndex=++qr;break}else e.conditions.push(m),s=null;else e.push(m);Wo[qr]===","?r.lastIndex=++qr: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"&&gB(h,d),Ng(e,u),e.conditions.push(h)}else d&&Qt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(ed(d));return e}else Qt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Qt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?L7:Zu,r.lastIndex=qr),qr===Wo.length)return e}t&&Qt(`expected '${t}', but encountered end of string`)}function Ng(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Qt("Can not mix operators within a condition grouping"):e.operator=t)}function ed(e){return e.indexOf(".")>-1?e.split(".").map(ed):decodeURIComponent(e)}function _B(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 gB(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 SB(e){let t=TB(e[0]);return e.length>1&&(t.next=SB(e.slice(1))),t}function TB(e){if(Array.isArray(e)){let t=TB(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}}Qt(`Unknown sort type ${e}`)}function nd(e){return Array.isArray(e)?e.join("\0"):e}function Yo(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function D7(e,t,r){return t*r/Yo(e)}var rn,Us,zi,rc,A7,I7,w7,N7,OI,LI,CI,P7,Zu,L7,qr,li,Wo,td,Pg=se(()=>{rn=b(Ee()),Us=b(Jt()),zi=require("ordered-binary"),rc=require("lmdb");Lg();El();A7=.3,I7=.1,w7=.05,N7={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},OI={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(PI,"executeConditions");a(rd,"searchByIndex");a(Ji,"findAttribute");a(C7,"joinTo");a(O7,"joinFrom");LI={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(dp,"filterByType");a(Cg,"estimateCondition");CI=class extends rn.Violation{static{a(this,"SyntaxViolation")}},P7=/[()[\]|!<>.]|(=\w*=)/,Zu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,L7=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(Og,"parseQuery");a(Qt,"recordError");a(up,"parseBlock");a(Ng,"assignOperator");a(ed,"decodeProperty");a(_B,"typedDecoding");a(gB,"wildcardDecoding");a(SB,"toSortObject");a(TB,"toSortEntry");td=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(nd,"flattenKey");a(Yo,"estimatedEntryCount");a(D7,"intersectionEstimate")});var yB,xs,Dg=se(()=>{yB=b(ai());Qi();xs=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,yB._assignPackageExport)("Resource",Xt)});var NB={};ye(NB,{MultiPartId:()=>vg,Resource:()=>Xt,contextStorage:()=>id,snakeCase:()=>M7,transformForSelect:()=>od});function M7(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function RB(e,t){if(Rl=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(Rl=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new vg;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){Rl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return Rl=!0,null;e[e.length-1]==="/"&&(Rl=!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 Bo?o=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new sd.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 _=this.parsePath(c,o,l);_?.id!==void 0?(_.query&&(l?l=Object.assign(_.query,l):l=_.query),u=_.isCollection,c=_.id):c=_,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 xs,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new xs,l.id=c,c==null&&(t.method==="get"&&wB.default.warn?.(`Using an argument with a value of ${c} for ${t.method}, is deprecated`,new Error("Invalid id")),u=!0);l||(l=new xs,l.id=c),u&&(l.isCollection=!0);let f;o||(o=id.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=>id.run(o,()=>h(E)),"runAction")),o?.transaction){let E=this.getResource(c,o,f);return E.then?E.then(p):p(E)}else return bt(o,()=>{o.transaction.startedFrom={resourceName:this.name,method:t.method};let E=this.getResource(c,o,f);return E.then?E.then(p):p(E)},f);function h(E){if(o.authorize&&(o.authorize=!1,m!==!1)){let _=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(_?.then)return _.then(R=>{if(!R)throw new sd.AccessViolation(o.user);return typeof d?.then=="function"?d.then(S=>e(E,l,o,S)):e(E,l,o,d)});if(!_)throw new sd.AccessViolation(o.user)}return typeof d?.then=="function"?d.then(_=>e(E,l,o,_)):e(E,l,o,d)}a(h,"authorizeActionOnResource")}}function cs(e,t){let r=new sd.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 DI(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 od(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):DI(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(DI(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(DI(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]=od(c.select||c,d)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var bB,AB,sd,IB,wB,id,v7,Xt,Rl,vg,Qi=se(()=>{bB=require("crypto");km();$u();AB=b(ai()),sd=b(Ee());Ja();Pg();IB=require("async_hooks");Dg();wB=b(ir()),id=new IB.AsyncLocalStorage,v7={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Xt=class{static{a(this,"Resource")}#e;#t;#n;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=od(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0,method:"get"});static put=Hn(function(t,r,n,s){if(Array.isArray(s)&&t.#n&&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):cs(t,"put")},{hasContent:!0,type:"update",method:"put"});static patch=Hn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):cs(t,"patch")},{hasContent:!0,type:"update",method:"patch"});static delete=Hn(function(t,r,n,s){return t.delete?t.delete(r):cs(t,"delete")},{hasContent:!1,type:"delete",method:"delete"});static getNewId(){return(0,bB.randomUUID)()}static create(t,r,n){let s;return this.loadAsInstance===!1?typeof t=="object"&&t&&!n?(n=r,r=t,s=new xs,s.isCollection=!0):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),n?n.getContext&&(n=n.getContext()):n=id.getStore()??{},bt(n,async()=>{n.transaction.startedFrom??={resourceName:this.name,method:"create"};let i=new this(s,n),o=await i.create?i.create(s,r):cs(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):cs(t,"delete")},{hasContent:!1,type:"update",method:"invalidate"});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",method:"post"});static update=Hn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update",method:"update"});static connect=Hn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):cs(t,"connect")},{hasContent:!0,type:"read",method:"connect"});static subscribe=Hn(function(t,r,n,s){return t.subscribe?t.subscribe(r):cs(t,"subscribe")},{type:"read",method:"subscribe"});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):cs(t,"publish")},{hasContent:!0,type:"create",method:"publish"});static search=Hn(function(t,r,n){let s=t.search?t.search(r):cs(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let o=od(i,t.constructor);return s.map(o)}return s},{type:"read",method:"search"});static query=Hn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):cs(t,"search")},{hasContent:!0,type:"read",method:"query"});static copy=Hn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):cs(t,"copy")},{hasContent:!0,type:"create",method:"copy"});static move=Hn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):cs(t,"move")},{hasContent:!0,type:"delete",method:"move"});async post(t,r){if(this.constructor.loadAsInstance===!1){if(t.isCollection&&this.create)return r=await this.create(t,r),r?.[this.constructor.primaryKey]}else if(this.#n)return(await this.constructor.create(this.#e,t,this.#t)).#e;cs(this,"post")}static isCollection(t){return t&&t.#n}get isCollection(){return this.#n}static coerceId(t){return t}static parseQuery(t,r){return Og(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1),c=r?.headers&&v7[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:RB(t,this),isCollection:Rl}}let i=RB(t,this);return Rl?{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.#n=!0),s}subscribe(t){return new is}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new is}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,AB._assignPackageExport)("Resource",Xt);a(M7,"snakeCase");a(RB,"pathToId");vg=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(Hn,"transactional");a(cs,"missingMethod");a(DI,"selectFromObject");a(od,"transformForSelect")});var bl,vI=se(()=>{bl=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 MI={};ye(MI,{Resources:()=>ad,keyArrayToString:()=>cd,resetResources:()=>U7,resources:()=>Bs});function U7(){return Bs=new ad,Ue.resources=Bs,Bs}function cd(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var CB,OB,ad,Bs,nc=se(()=>{Ja();vI();CB=b(Q()),OB=b(Ee());Hr();ad=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 OB.ServerError(`Conflicting paths for ${t}`);CB.default.error(c),i.Resource=new bl(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 bt(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(cd,"keyArrayToString")});function BI(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=LB,x7(e.primaryStore,e.auditStore)):(c=PB,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{DB(PB[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=cd(t);let d=new xI(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 DB(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),vB(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=At(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=cd(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,UI.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,UI.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 x7(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=LB[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{DB(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function vB(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function MB(e){return e.nextTransaction||(BI({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),vB(e)),e.nextTransaction}var UI,PB,LB,xI,FI=se(()=>{UI=b(Q());$u();nc();Ki();PB=Object.create(null),LB=Object.create(null);a(BI,"addSubscription");xI=class extends is{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(DB,"notifyFromTransactionData");a(x7,"listenToCommits");a(vB,"nextTransaction");a(MB,"whenNextTransaction")});var xB=M((KPe,UB)=>{"use strict";var kI=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};UB.exports=kI});var FB=M((WPe,BB)=>{"use strict";var HI=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};BB.exports=HI});var fp=M(HB=>{"use strict";var kB=fe(),B7=(G(),D(j)),{RecordEncoder:F7}=(El(),D(EB));kB.initSync();var k7=kB.get(B7.CONFIG_PARAMS.STORAGE_CACHING)!==!1,GI=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=k7&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:F7})}};HB.OpenDBIObject=GI});var mp=M((QPe,GB)=>{"use strict";var ls=fe(),Fs=(G(),D(j));ls.initSync();var Mg=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=ls.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||ls.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||ls.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",ls.get(Fs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=ls.get(Fs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),ls.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=ls.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),ls.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=ls.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),ls.get(Fs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=ls.get(Fs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=ls.get(Fs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};GB.exports=Mg;Mg.MAX_DBS=1e4});var gt=M((ZPe,QB)=>{"use strict";var $I=require("lmdb"),ui=require("fs-extra"),us=require("path"),Ug=xn(),VB=Q(),Gn=Jr().LMDB_ERRORS_ENUM,xg=FB(),{OpenDBIObject:VI}=fp(),KB=mp(),sc=Jt(),qB=(G(),D(j)),{table:H7,resetDatabases:G7}=(Oe(),D(mt)),$B=fe(),di=sc.INTERNAL_DBIS_NAME,YB=sc.DBI_DEFINITION_NAME,q7="data.mdb",$7="lock.mdb",pp=".mdb",V7="-lock",qI=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ks(t,r),this.key_type=this.dbi[sc.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[sc.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new $I.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Bg(e,t){if(e===void 0)throw new Error(Gn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Gn.ENV_NAME_REQUIRED)}a(Bg,"pathEnvNameValidation");async function KI(e,t,r=!0){try{await ui.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Gn.INVALID_BASE_PATH):n}try{let n=us.join(e,t+pp);return await ui.access(n,ui.constants.R_OK|ui.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await ui.access(us.join(e,t,q7),ui.constants.R_OK|ui.constants.F_OK),us.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Gn.INVALID_ENVIRONMENT)}else throw new Error(Gn.INVALID_ENVIRONMENT);throw n}}a(KI,"validateEnvironmentPath");function Fg(e,t){if(Ug.validateEnv(e),t===void 0)throw new Error(Gn.DBI_NAME_REQUIRED)}a(Fg,"validateEnvDBIName");async function K7(e,t,r=!1,n=!1){Bg(e,t);let s=us.basename(e);t=t.toString();let i=$B.get(qB.CONFIG_PARAMS.DATABASES);i||$B.setProperty(qB.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await KI(e,t,n),WB(e,t,r)}catch(o){if(o.message===Gn.INVALID_ENVIRONMENT){let c=us.join(e,t);await ui.mkdirp(n?c:e);let l=new KB(n?c:c+pp,!1),u=$I.open(l);u.dbis=Object.create(null);let d=new VI(!1);u.openDB(di,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=YI(e,t,r);return u[sc.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw o}}a(K7,"createEnvironment");async function Y7(e,t,r,n=!0){Bg(e,t),t=t.toString();let s=us.join(e,t);return H7({table:t,database:us.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(Y7,"copyEnvironment");async function WB(e,t,r=!1){Bg(e,t),t=t.toString();let n=YI(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 KI(e,t),i=us.join(e,t+pp),o=s!=i,c=new KB(s,o),l=$I.open(c);l.dbis=Object.create(null);let u=zB(l);for(let d=0;d<u.length;d++)ks(l,u[d]);return l[sc.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(WB,"openEnvironment");async function W7(e,t,r=!1){Bg(e,t),t=t.toString();let n=us.join(e,t+pp),s=await KI(e,t);if(global.lmdb_map!==void 0){let i=YI(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await jB(o),delete global.lmdb_map[i]}}await ui.remove(s),await ui.remove(s===n?s+V7:us.join(us.dirname(s),$7))}a(W7,"deleteEnvironment");async function jB(e){Ug.validateEnv(e);let t=e[sc.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(jB,"closeEnvironment");function YI(e,t,r=!1){let s=`${us.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(YI,"getCachedEnvironmentName");function j7(e){Ug.validateEnv(e);let t=Object.create(null),r=ks(e,di);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==di)try{t[n]=Object.assign(new xg,s)}catch{VB.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(j7,"listDBIDefinitions");function zB(e){Ug.validateEnv(e);let t=[],r=ks(e,di);for(let{key:n}of r.getRange({start:!1}))n!==di&&t.push(n);return t}a(zB,"listDBIs");function z7(e,t){let n=ks(e,di).getEntry(t),s=new xg;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{VB.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(z7,"getDBIDefinition");function JB(e,t,r,n=!r){if(Fg(e,t),t=t.toString(),t===di)throw new Error(Gn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ks(e,t)}catch(s){if(s.message===Gn.DBI_DOES_NOT_EXIST){let i=new VI(r,n===!0),o=e.openDB(t,i),c=new xg(r===!0,n);return o[YB]=c,ks(e,di).putSync(t,c),e.dbis[t]=o,o}throw s}}a(JB,"createDBI");function ks(e,t){if(Fg(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==di?r=z7(e,t):r=new xg,r===void 0)throw new Error(Gn.DBI_DOES_NOT_EXIST);let n;try{let s=new VI(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(Gn.DBI_DOES_NOT_EXIST):s}return n[YB]=r,e.dbis[t]=n,n}a(ks,"openDBI");function J7(e,t){Fg(e,t),t=t.toString();let r=ks(e,t),n=r.getStats();return r[sc.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(J7,"statDBI");async function Q7(e,t){try{let r=us.join(e,t+pp);return(await ui.stat(r)).size}catch{throw new Error(Gn.INVALID_ENVIRONMENT)}}a(Q7,"environmentDataSize");function X7(e,t){if(Fg(e,t),t=t.toString(),t===di)throw new Error(Gn.CANNOT_DROP_INTERNAL_DBIS_NAME);ks(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ks(e,di).removeSync(t)}a(X7,"dropDBI");function Z7(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===Gn.DBI_DOES_NOT_EXIST)JB(e,i,i!==t,i===t),n=!0;else throw o}}n&&G7()}a(Z7,"initializeDBIs");QB.exports={openDBI:ks,openEnvironment:WB,createEnvironment:K7,listDBIs:zB,listDBIDefinitions:j7,createDBI:JB,dropDBI:X7,statDBI:J7,deleteEnvironment:W7,initializeDBIs:Z7,TransactionCursor:qI,environmentDataSize:Q7,copyEnvironment:Y7,closeEnvironment:jB}});var eF=M((tLe,ZB)=>{"use strict";var WI=gt(),eee=Q(),XB=Jr().LMDB_ERRORS_ENUM;ZB.exports=tee;async function tee(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 WI.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==XB.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await WI.closeEnvironment(global.lmdb_map[n]),await WI.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==XB.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){eee.error(t)}}a(tee,"cleanLMDBMap")});var Zi=M((nLe,rF)=>{"use strict";var tF=ae(),ree=(G(),D(j)),ld=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Xi=require("joi"),ic={schema_format:{pattern:ld,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},nee=Xi.alternatives(Xi.string().min(1).max(ic.schema_length.maximum).pattern(ld).messages({"string.pattern.base":"{:#label} "+ic.schema_format.message}),Xi.number(),Xi.array()).required(),see=Xi.alternatives(Xi.string().min(1).max(ic.schema_length.maximum).pattern(ld).messages({"string.pattern.base":"{:#label} "+ic.schema_format.message}),Xi.number()),iee=Xi.alternatives(Xi.string().min(1).max(ic.schema_length.maximum).pattern(ld).messages({"string.pattern.base":"{:#label} "+ic.schema_format.message}),Xi.number()).required();function oee(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>ic.schema_length.maximum?`'${property_name}' maximum of 250 characters`:ld.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}a(oee,"checkValidTable");function aee(e,t){return tF.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(aee,"validateSchemaExists");function cee(e,t){let r=t.state.ancestors[0].schema;return tF.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(cee,"validateTableExists");function lee(e,t){return e.toLowerCase()===ree.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(lee,"validateSchemaName");rF.exports={commonValidators:ic,schemaRegex:ld,hdbSchemaTable:nee,validateSchemaExists:aee,validateTableExists:cee,validateSchemaName:lee,checkValidTable:oee,hdbDatabase:see,hdbTable:iee}});var zI=M((iLe,sF)=>{var{hdbTable:uee,hdbDatabase:nF}=Zi(),dee=ft(),jI=require("joi"),fee={undefined:"undefined",null:"null"},mee=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||fee[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"customRecordsVal"),pee=jI.object({database:nF,schema:nF,table:uee,records:jI.array().items(jI.object().custom(mee)).required()});sF.exports=function(e){return dee.validateBySchema(e,pee)}});var oF=M((aLe,iF)=>{"use strict";var JI=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")}};iF.exports=JI});var cF=M((lLe,aF)=>{"use strict";var QI=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};aF.exports=QI});var uF=M((dLe,lF)=>{"use strict";var XI=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}};lF.exports=XI});var fF=M((mLe,dF)=>{"use strict";var ZI=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};dF.exports=ZI});var Il=M((gLe,hF)=>{"use strict";var hee=gt(),Eee=cF(),_ee=uF(),gee=fF(),eo=xn(),hp=Jr().LMDB_ERRORS_ENUM,See=Jt(),jo=(G(),D(j)),Tee=ae(),yee=require("uuid"),hLe=require("lmdb"),{handleHDBError:Ree,hdbErrors:bee}=Ee(),{OVERFLOW_MARKER:ELe,MAX_SEARCH_KEY_LENGTH:_Le}=See,mF=fe();mF.initSync();var kg=mF.get(jo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),ew=jo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Al=jo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Aee(e,t,r,n,s=eo.getNextMonotonicTime()){sw(e,t,r,n),tw(e,t,r);let i=new Eee,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];pF(u,!0,s);let d=Iee(e,t,r,u),f=u[t];o.push(d),c.push(f)}return rw(o,c,n,i,s)}a(Aee,"insertRecords");function Iee(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][jo.FUNC_VAL],n[o]=c)}let l=eo.getIndexedValues(c),u=e.dbis[o];if(l){kg&&u.prefetch(l.map(d=>({key:d,value:s})),Hg);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}kg&&e.dbis[t].prefetch([s],Hg),e.dbis[t].put(s,n,n[Al])})}a(Iee,"insertRecord");function wee(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(wee,"removeSkippedRecords");function pF(e,t,r){let n=r>0;(n||!Number.isInteger(e[Al]))&&(e[Al]=r||(r=eo.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[ew]))&&(e[ew]=r||eo.getNextMonotonicTime()):delete e[ew]}a(pF,"setTimestamps");function tw(e,t,r){r.indexOf(jo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(jo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(jo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(jo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),hee.initializeDBIs(e,t,r)}a(tw,"initializeTransaction");async function Nee(e,t,r,n,s=eo.getNextMonotonicTime()){sw(e,t,r,n),tw(e,t,r);let i=new _ee,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=nw(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),o.push(u);continue}c.push(m),l.push(f)}return rw(c,l,n,i,s,o)}a(Nee,"updateRecords");async function Cee(e,t,r,n,s=eo.getNextMonotonicTime()){try{sw(e,t,r,n)}catch(l){throw Ree(l,l.message,bee.HTTP_STATUS_CODES.BAD_REQUEST)}tw(e,t,r);let i=new gee,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;Tee.isEmpty(u[t])?(d=yee.v4(),u[t]=d):d=u[t];let f=nw(e,t,u,d,i,!1,s);o.push(f),c.push(d)}return rw(o,c,n,i,s)}a(Cee,"upsertRecords");async function rw(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||eo.getNextMonotonicTime(),wee(r,i),n}a(rw,"finalizeWrite");function nw(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(pF(r,!d,o),Number.isInteger(r[Al])&&u[Al]>r[Al])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],_=e.dbis[h];if(_===void 0)continue;let R=u[h];if(typeof E=="function"){let y=E([[u]]);Array.isArray(y)&&(E=y[0][jo.FUNC_VAL],r[h]=E)}if(E===R)continue;let S=eo.getIndexedValues(R);if(S){kg&&_.prefetch(S.map(y=>({key:y,value:n})),Hg);for(let y=0,w=S.length;y<w;y++)_.remove(S[y],n)}if(S=eo.getIndexedValues(E),S){kg&&_.prefetch(S.map(y=>({key:y,value:n})),Hg);for(let y=0,w=S.length;y<w;y++)_.put(S[y],n)}}let p={...u,...r};c.put(n,p,p[Al])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:nw(e,t,r,n,s,i,o))}a(nw,"updateUpsertRecord");function Oee(e,t,r){if(eo.validateEnv(e),t===void 0)throw new Error(hp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(hp.WRITE_ATTRIBUTES_REQUIRED):new Error(hp.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Oee,"validateBasic");function sw(e,t,r,n){if(Oee(e,t,r),!Array.isArray(n))throw n===void 0?new Error(hp.RECORDS_REQUIRED):new Error(hp.RECORDS_MUST_BE_ARRAY)}a(sw,"validateWrite");function Hg(){}a(Hg,"noop");hF.exports={insertRecords:Aee,updateRecords:Nee,upsertRecords:Cee}});var to=M((TLe,Pee)=>{Pee.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 _F=M((yLe,EF)=>{"use strict";var Lee=require("uuid"),iw=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}`}};EF.exports=iw});var Gg=M((bLe,gF)=>{"use strict";var Dee=_F(),ow=class extends Dee{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}};gF.exports=ow});var TF=M((ILe,SF)=>{"use strict";SF.exports=Mee;var vee="inserted";function Mee(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===vee?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(Mee,"returnObject")});var qg=M((CLe,RF)=>{"use strict";var Uee=(G(),D(j)),aw=gt(),xee=Il(),{getSystemSchemaPath:Bee,getSchemaPath:Fee}=Rt(),NLe=to(),{validateBySchema:kee}=ft(),Ep=require("joi"),Hee=Gg(),Gee=TF(),{handleHDBError:qee,hdbErrors:$ee,ClientError:Vee}=Ee(),yF=ae(),{HTTP_STATUS_CODES:Kee}=$ee,Yee="inserted";RF.exports=Wee;async function Wee(e){let t=kee(e,Ep.object({database:Ep.string(),schema:Ep.string(),table:Ep.string().required(),attribute:Ep.string().required()}));if(t)throw new Vee(t.message);let r=!e.skip_table_check&&yF.checkGlobalSchemaTable(e.schema,e.table);if(r)throw qee(new Error,r,Kee.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=yF.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 Hee(e.schema,e.table,e.attribute,e.id);try{let i=await aw.openEnvironment(Fee(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}`);aw.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await aw.openEnvironment(Bee(),Uee.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await xee.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return Gee(Yee,c,{records:[s]},l)}catch(i){throw i}}a(Wee,"lmdbCreateAttribute")});var _p=M((LLe,AF)=>{"use strict";var zo=ae(),bF=Q(),PLe=zI(),{getDatabases:jee}=(Oe(),D(mt)),{ClientError:wl}=Ee();AF.exports=zee;function zee(e){if(zo.isEmpty(e))throw new wl("invalid update parameters defined.");if(zo.isEmptyOrZeroLength(e.schema))throw new wl("invalid schema specified.");if(zo.isEmptyOrZeroLength(e.table))throw new wl("invalid table specified.");if(!Array.isArray(e.records))throw new wl("records must be an array");let t=jee()[e.schema]?.[e.table];if(zo.isEmpty(t))throw new wl(`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&&zo.isEmptyOrZeroLength(o[r]))throw bF.error("a valid hash attribute must be provided with update record:",o),new wl("a valid hash attribute must be provided with update record, check log for more info");if(!zo.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw bF.error(`a valid hash value must be provided with ${e.operation} record:`,o),new wl(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!zo.isEmpty(o[r])&&o[r]!==""&&n.has(zo.autoCast(o[r]))&&(o.skip=!0),n.add(zo.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(zee,"insertUpdateValidate")});var $g=M((vLe,wF)=>{"use strict";var IF=ae(),Jee=(G(),D(j)),Qee=Q(),Xee=qg(),Zee=Gg(),ete=Jo(),{SchemaEventMsg:tte}=ds(),rte="already exists in";wF.exports=nte;async function nte(e,t,r){if(IF.isEmptyOrZeroLength(r))return r;let n=[];IF.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 ste(e,t.schema,t.name,i)})),s}a(nte,"lmdbCheckForNewAttributes");async function ste(e,t,r,n){let s=new Zee(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await ite(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(rte))Qee.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(ste,"createNewAttribute");async function ite(e){let t;return t=await Xee(e),ete.signalSchemaChange(new tte(process.pid,Jee.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(ite,"createAttribute")});var ud=M((ULe,NF)=>{"use strict";var cw=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}};NF.exports=cw});var OF=M((BLe,CF)=>{"use strict";var ote=ud(),ate=(G(),D(j)).OPERATIONS_ENUM,lw=class extends ote{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(ate.INSERT,r,n,s,i),this.records=t}};CF.exports=lw});var LF=M((kLe,PF)=>{"use strict";var cte=ud(),lte=(G(),D(j)).OPERATIONS_ENUM,uw=class extends cte{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(lte.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};PF.exports=uw});var vF=M((GLe,DF)=>{"use strict";var ute=ud(),dte=(G(),D(j)).OPERATIONS_ENUM,dw=class extends ute{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(dte.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};DF.exports=dw});var UF=M(($Le,MF)=>{"use strict";var fte=ud(),mte=(G(),D(j)).OPERATIONS_ENUM,fw=class extends fte{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(mte.DELETE,n,s,t,i),this.original_records=r}};MF.exports=fw});var gp=M((YLe,kF)=>{"use strict";var KLe=require("path"),xF=gt(),pte=OF(),hte=LF(),Ete=vF(),_te=UF(),dd=Jt(),BF=ae(),{CONFIG_PARAMS:gte}=(G(),D(j)),FF=fe();FF.initSync();var Vg=(G(),D(j)).OPERATIONS_ENUM,{getTransactionAuditStorePath:Ste}=Rt();kF.exports=Tte;async function Tte(e,t){if(FF.get(gte.LOGGING_AUDITLOG)===!1)return;let r=Ste(e.schema,e.table),n=await xF.openEnvironment(r,e.table,!0),s=yte(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){xF.initializeDBIs(n,dd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,dd.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[dd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[dd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),BF.isEmpty(s.user_name)||n.dbis[dd.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[dd.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(Tte,"writeTransaction");function yte(e,t){let r=BF.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Vg.INSERT)return new pte(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vg.UPDATE)return new hte(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vg.UPSERT)return new Ete(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vg.DELETE)return new _te(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(yte,"createTransactionObject")});var mw=M((zLe,HF)=>{"use strict";var Rte=_p(),jLe=xm(),Sp=(G(),D(j)),bte=Bm(),Ate=Il().insertRecords,Ite=gt(),wte=Q(),Nte=$g(),{getSchemaPath:Cte}=Rt(),Ote=gp();HF.exports=Pte;async function Pte(e){try{let{schemaTable:t,attributes:r}=Rte(e);bte(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 Nte(e.hdb_auth_header,t,r),s=Cte(e.schema,e.table),i=await Ite.openEnvironment(s,e.table),o=await Ate(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Ote(e,o)}catch(c){wte.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(Pte,"lmdbCreateRecords")});var $F=M((QLe,qF)=>{"use strict";var GF=(G(),D(j)),Lte=mw(),Dte=xm(),vte=require("fs-extra"),{getSchemaPath:Mte}=Rt();qF.exports=Ute;async function Ute(e){let t=[{name:e.schema,createddate:Date.now()}],r=new Dte(GF.SYSTEM_SCHEMA_NAME,GF.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Lte(r),await vte.mkdirp(Mte(e.schema))}a(Ute,"lmdbCreateSchema")});var KF=M((ZLe,VF)=>{"use strict";var pw=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}};VF.exports=pw});var zF=M((sDe,jF)=>{"use strict";var YF=gt(),hw=xn(),Ew=Jr().LMDB_ERRORS_ENUM,xte=Jt(),WF=Q(),tDe=ae(),Bte=require("lmdb"),Fte=KF(),kte=(G(),D(j)),{OVERFLOW_MARKER:rDe,MAX_SEARCH_KEY_LENGTH:nDe}=xte,Hte=kte.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Gte(e,t,r,n){if(hw.validateEnv(e),t===void 0)throw new Error(Ew.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ew.IDS_REQUIRED):new Error(Ew.IDS_MUST_BE_ITERABLE);try{let s=YF.listDBIs(e);YF.initializeDBIs(e,t,s);let i=new Fte,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[Hte]>n){i.skipped.push(o);continue}let E=e.dbis[t].ifVersion(o,Bte.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let _=0;_<s.length;_++){let R=s[_];if(!h.hasOwnProperty(R)||R===t)continue;let S=e.dbis[R],y=h[R];if(y!=null)try{let w=hw.getIndexedValues(y);if(w)for(let I=0,H=w.length;I<H;I++)S.remove(w[I],o)}catch{WF.warn(`cannot delete from attribute: ${R}, ${y}:${o}`)}}});c.push(E),l.push(o),i.original_records.push(h)}catch(h){WF.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=hw.getNextMonotonicTime(),i}catch(s){throw s}}a(Gte,"deleteRecords");jF.exports={deleteRecords:Gte}});var Tp=M((oDe,QF)=>{"use strict";var fd=ae(),qte=zF(),$te=gt(),{getSchemaPath:Vte}=Rt(),Kte=gp(),Yte=Q();QF.exports=Wte;async function Wte(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(fd.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(fd.isEmptyOrZeroLength(e.hash_values)&&!fd.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];fd.isEmpty(l)||e.hash_values.push(l)}}if(fd.isEmptyOrZeroLength(e.hash_values))return JF([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(fd.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=Vte(e.schema,e.table),i=await $te.openEnvironment(s,e.table),o=await qte.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Kte(e,o)}catch(c){Yte.error(`unable to write transaction due to ${c.message}`)}return JF(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(Wte,"lmdbDeleteRecords");function JF(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(JF,"createDeleteResponse")});var gw=M((lDe,XF)=>{"use strict";var jte=(G(),D(j)),cDe=xn();function _w(e,t){let r=Object.create(null);if(t.length===1&&jte.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(_w,"parseRow");function zte(e,t,r,n){let s=_w(r,e);n.push(s)}a(zte,"searchAll");function Jte(e,t,r,n){let s=_w(r,e);n[t]=s}a(Jte,"searchAllToMap");function Qte(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Qte,"iterateDBI");function Nl(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(Nl,"pushResults");function Xte(e,t,r,n,s,i){t.toString().endsWith(e)&&Nl(t,r,n,s,i)}a(Xte,"endsWith");function Zte(e,t,r,n,s,i){t.toString().includes(e)&&Nl(t,r,n,s,i)}a(Zte,"contains");function ere(e,t,r,n,s,i){t>e&&Nl(t,r,n,s,i)}a(ere,"greaterThanCompare");function tre(e,t,r,n,s,i){t>=e&&Nl(t,r,n,s,i)}a(tre,"greaterThanEqualCompare");function rre(e,t,r,n,s,i){t<e&&Nl(t,r,n,s,i)}a(rre,"lessThanCompare");function nre(e,t,r,n,s,i){t<=e&&Nl(t,r,n,s,i)}a(nre,"lessThanEqualCompare");XF.exports={parseRow:_w,searchAll:zte,searchAllToMap:Jte,iterateDBI:Qte,endsWith:Xte,contains:Zte,greaterThanCompare:ere,greaterThanEqualCompare:tre,lessThanCompare:rre,lessThanEqualCompare:nre,pushResults:Nl}});var md=M((pDe,ik)=>{"use strict";var oc=gt(),dDe=Q(),fs=xn(),Kg=Jt(),ar=Jr().LMDB_ERRORS_ENUM,fDe=ae(),sre=(G(),D(j)),Yg=gw(),{parseRow:ire}=Yg,mDe=require("lmdb"),{OVERFLOW_MARKER:ZF,MAX_SEARCH_KEY_LENGTH:ore}=Kg;function ek(e,t,r,n=!1,s=void 0,i=void 0){return Cl(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(ek,"iterateFullIndex");function yp(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return Cl(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(yp,"iterateRangeBetween");function Cl(e,t,r,n){let s=e.database||e,i=oc.openDBI(s,r);i[Kg.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&oc.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(Cl,"setupTransaction");function tk(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(ZF)){if(!s)if(r)s=oc.openDBI(e,r);else{let l=oc.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=oc.openDBI(e,l[u]),!s[Kg.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(tk,"getOverflowCheck");function are(e,t,r,n=!1,s=void 0,i=void 0){if(fs.validateEnv(e),t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);return Cl(e,t,t,(o,c,l)=>(Wg(r),r=Rp(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>ire(u.value,r))))}a(are,"searchAll");function cre(e,t,r,n=!1,s=void 0,i=void 0){if(fs.validateEnv(e),t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);Wg(r),r=Rp(e.database||e,r);let o=new Map;for(let{key:c,value:l}of ek(e,t,t,n,s,i))o.set(c,Yg.parseRow(l,r));return o}a(cre,"searchAllToMap");function lre(e,t,r=!1,n=void 0,s=void 0){if(fs.validateEnv(e),t===void 0)throw new Error(ar.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=ek(e,void 0,t,r,n,s),c=o.transaction,l=tk(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(lre,"iterateDBI");function ure(e,t){if(fs.validateEnv(e),t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);return oc.statDBI(e,t).entryCount}a(ure,"countAll");function dre(e,t,r,n,s=!1,i=void 0,o=void 0){return ac(e,r,n),Cl(e,t,r,(c,l,u,d)=>(n=fs.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(dre,"equals");function fre(e,t,r){return ac(e,t,r),oc.openDBI(e,t).getValuesCount(r)}a(fre,"count");function mre(e,t,r,n,s=!1,i=void 0,o=void 0){return ac(e,r,n),Cl(e,null,r,(c,l)=>{n=fs.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(mre,"startsWith");function pre(e,t,r,n,s=!1,i=void 0,o=void 0){return rk(e,t,r,n,s,i,o,!0)}a(pre,"endsWith");function rk(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ac(e,r,n),Cl(e,null,r,(l,u,d,f)=>{let m=tk(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(ZF)?u.getValues(p,{transaction:l}).map(E=>{let _=m(p,E);if(c?_.endsWith(n):_.includes(n))return{key:_,value:E}}).filter(E=>E):(c?h.endsWith(n):h.includes(n))?u[Kg.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(rk,"contains");function hre(e,t,r,n,s=!1,i=void 0,o=void 0){ac(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),yp(e,t,r,n,l,s,i,o,!0,!1)}a(hre,"greaterThan");function Ere(e,t,r,n,s=!1,i=void 0,o=void 0){ac(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),yp(e,t,r,n,l,s,i,o,!1,!1)}a(Ere,"greaterThanEqual");function _re(e,t,r,n,s=!1,i=void 0,o=void 0){ac(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),yp(e,t,r,l,n,s,i,o,!1,!0)}a(_re,"lessThan");function gre(e,t,r,n,s=!1,i=void 0,o=void 0){ac(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),yp(e,t,r,l,n,s,i,o,!1,!1)}a(gre,"lessThanEqual");function Sre(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(fs.validateEnv(e),r===void 0)throw new Error(ar.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ar.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ar.END_VALUE_REQUIRED);if(n=fs.convertKeyValueToWrite(n),s=fs.convertKeyValueToWrite(s),n>s)throw new Error(ar.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return yp(e,t,r,n,s,i,o,c)}a(Sre,"between");function Tre(e,t,r,n){fs.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);if(Wg(r),r=Rp(s,r),n===void 0)throw new Error(ar.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Yg.parseRow(c,r)),o}a(Tre,"searchByHash");function yre(e,t,r){fs.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ar.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(yre,"checkHashExists");function Rre(e,t,r,n,s=[]){return sk(e,t,r,n,s),nk(e,t,r,n,s).map(i=>i[1])}a(Rre,"batchSearchByHash");function bre(e,t,r,n,s=[]){sk(e,t,r,n,s);let i=new Map;for(let[o,c]of nk(e,t,r,n,s))i.set(o,c);return i}a(bre,"batchSearchByHashToMap");function nk(e,t,r,n,s=[]){return Cl(e,t,t,(i,o,c)=>{r=Rp(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,Yg.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(nk,"batchHashSearch");function sk(e,t,r,n,s){if(fs.validateEnv(e),t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);if(Wg(r),n==null)throw new Error(ar.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ar.IDS_MUST_BE_ITERABLE)}a(sk,"initializeBatchSearchByHash");function Wg(e){if(!Array.isArray(e))throw e===void 0?new Error(ar.FETCH_ATTRIBUTES_REQUIRED):new Error(ar.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Wg,"validateFetchAttributes");function ac(e,t,r){if(fs.validateEnv(e),t===void 0)throw new Error(ar.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ar.SEARCH_VALUE_REQUIRED);if(r?.length>ore)throw new Error(ar.SEARCH_VALUE_TOO_LARGE)}a(ac,"validateComparisonFunctions");function Rp(e,t){return t.length===1&&sre.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=oc.listDBIs(e)),t}a(Rp,"setGetWholeRowAttributes");ik.exports={searchAll:are,searchAllToMap:cre,count:fre,countAll:ure,equals:dre,startsWith:mre,endsWith:pre,contains:rk,searchByHash:Tre,setGetWholeRowAttributes:Rp,batchSearchByHash:Rre,batchSearchByHashToMap:bre,checkHashExists:yre,iterateDBI:lre,greaterThan:hre,greaterThanEqual:Ere,lessThan:_re,lessThanEqual:gre,between:Sre}});var pd=M((EDe,uk)=>{var ok=require("lodash"),ak=ft(),Je=require("joi"),Are=ae(),{hdbSchemaTable:bp,checkValidTable:ck,hdbTable:lk,hdbDatabase:jg}=Zi(),{handleHDBError:Ire,hdbErrors:wre}=Ee(),{getDatabases:Nre}=(Oe(),D(mt)),{HTTP_STATUS_CODES:Cre}=wre,Ore=Je.object({database:jg,schema:jg,table:lk,attribute:bp,value:Je.any().required(),get_attributes:Je.array().min(1).items(Je.alternatives(bp,Je.object())).optional(),desc:Je.bool(),limit:Je.number().integer().min(1),offset:Je.number().integer().min(0)}),Pre=Je.object({database:jg,schema:jg,table:lk,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(bp,Je.object())).optional(),sort:Je.object({attribute:Je.alternatives(bp,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(bp,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()});uk.exports=function(e,t){let r=null;switch(t){case"value":r=ak.validateBySchema(e,Ore);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(ck("database",e.schema)),i(ck("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=ak.validateBySchema(e,Pre);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Are.checkGlobalSchemaTable(e.schema,e.table);if(s)return Ire(new Error,s,Cre.NOT_FOUND);let o=Nre()[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=ok.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!ok.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 Sw=M((gDe,dk)=>{"use strict";var Lre=gt(),Dre=pd(),{getSchemaPath:vre}=Rt();dk.exports=Mre;function Mre(e){let t=Dre(e,"hashes");if(t)throw t;let r=vre(e.schema,e.table);return Lre.openEnvironment(r,e.table)}a(Mre,"initialize")});var Tw=M((TDe,fk)=>{"use strict";var Ure=md(),xre=Sw();fk.exports=Bre;async function Bre(e){let t=await xre(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Ure.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Bre,"lmdbGetDataByHash")});var hd=M((RDe,mk)=>{"use strict";var yw=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};mk.exports=yw});var hk=M((IDe,pk)=>{"use strict";var ADe=hd(),Fre=md(),kre=Sw();pk.exports=Hre;async function Hre(e){let t=await kre(e),r=global.hdb_schema[e.schema][e.table];return Fre.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Hre,"lmdbSearchByHash")});var fi=M((NDe,Ek)=>{"use strict";var Rw=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}};Ek.exports=Rw});var zg=M((ODe,Rk)=>{"use strict";var _n=md(),Gre=gt(),qre=ae(),Qe=Jt(),Ol=(G(),D(j)),$re=to(),_k=Jr().LMDB_ERRORS_ENUM,{getSchemaPath:Vre}=Rt(),Qo=Ol.SEARCH_WILDCARDS;async function Kre(e,t,r){let n;e.schema===Ol.SYSTEM_SCHEMA_NAME?n=$re[e.table]:n=global.hdb_schema[e.schema][e.table];let s=yk(e,n.hash_attribute,r,t);return Sk(e,s,n.hash_attribute,r)}a(Kre,"prepSearch");async function Sk(e,t,r,n){let s=Vre(e.schema,e.table),i=await Gre.openEnvironment(s,e.table),o=Tk(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(Yre(e,r)===!1){let d=e.attribute;if(d===r)return n?gk(o,()=>!0):o.map(m=>({[r]:m.key}));let f=a(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?gk(o,f):o.map(f)}let u=e.attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?_n.batchSearchByHashToMap(c,r,e.get_attributes,u):_n.batchSearchByHash(c,r,e.get_attributes,u)}a(Sk,"executeSearch");function Tk(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=_n.equals(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.CONTAINS:s=_n.contains(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.ENDS_WITH:case Qe.SEARCH_TYPES._ENDS_WITH:s=_n.endsWith(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.STARTS_WITH:case Qe.SEARCH_TYPES._STARTS_WITH:s=_n.startsWith(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return _n.batchSearchByHash(e,t.attribute,t.get_attributes,[t.value]);case Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return _n.batchSearchByHashToMap(e,t.attribute,t.get_attributes,[t.value]);case Qe.SEARCH_TYPES.SEARCH_ALL:return _n.searchAll(e,n,t.get_attributes,o,c,l);case Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return _n.searchAllToMap(e,n,t.get_attributes,o,c,l);case Qe.SEARCH_TYPES.BETWEEN:s=_n.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=_n.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=_n.greaterThanEqual(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.LESS_THAN:case Qe.SEARCH_TYPES._LESS_THAN:s=_n.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=_n.lessThanEqual(e,i,t.attribute,t.value,o,c,l);break;default:return Object.create(null)}return s}a(Tk,"searchByType");function gk(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(gk,"createMapFromIterable");function Yre(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(Yre,"checkToFetchMore");function yk(e,t,r,n){if(qre.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),Qo.indexOf(s)>-1)return r===!0?Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Qe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Qo[0])<0&&s.indexOf(Qo[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(Qo.indexOf(i)>=0&&Qo.indexOf(o)>=0)return e.value=e.value.slice(1,-1),Qe.SEARCH_TYPES.CONTAINS;if(Qo.indexOf(i)>=0)return e.value=e.value.substr(1),Qe.SEARCH_TYPES.ENDS_WITH;if(Qo.indexOf(o)>=0)return e.value=e.value.slice(0,-1),Qe.SEARCH_TYPES.STARTS_WITH;if(s.includes(Qo[0])||s.includes(Qo[1]))return Qe.SEARCH_TYPES.EQUALS;throw new Error(_k.UNKNOWN_SEARCH_TYPE)}else switch(n){case Ol.VALUE_SEARCH_COMPARATORS.BETWEEN:return Qe.SEARCH_TYPES.BETWEEN;case Ol.VALUE_SEARCH_COMPARATORS.GREATER:return Qe.SEARCH_TYPES.GREATER_THAN;case Ol.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Qe.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ol.VALUE_SEARCH_COMPARATORS.LESS:return Qe.SEARCH_TYPES.LESS_THAN;case Ol.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Qe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(_k.UNKNOWN_SEARCH_TYPE)}}a(yk,"createSearchTypeFromSearchObject");Rk.exports={executeSearch:Sk,createSearchTypeFromSearchObject:yk,prepSearch:Kre,searchByType:Tk}});var Ak=M((DDe,bk)=>{"use strict";var LDe=fi(),Wre=pd(),jre=ae(),zre=(G(),D(j)),Jre=zg();bk.exports=Qre;function Qre(e,t){if(!jre.isEmpty(t)&&zre.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Wre(e,"value");if(n)throw n;return Jre.prepSearch(e,t,!0)}a(Qre,"lmdbGetDataByValue")});var Ap=M((UDe,Ik)=>{"use strict";var MDe=fi(),Xre=pd(),Zre=ae(),ene=(G(),D(j)),tne=zg();Ik.exports=rne;async function rne(e,t){if(!Zre.isEmpty(t)&&ene.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Xre(e,"value");if(n)throw n;return tne.prepSearch(e,t,!1)}a(rne,"lmdbSearchByValue")});var Nk=M((FDe,wk)=>{"use strict";var BDe=Jt(),bw=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}},Aw=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},Iw=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};wk.exports={SearchByConditionsObject:bw,SearchCondition:Aw,SortAttribute:Iw}});var Dk=M(($De,Lk)=>{"use strict";var{SearchByConditionsObject:HDe,SearchCondition:GDe}=Nk(),nne=fi(),sne=pd(),ww=md(),Jg=Jt(),{Resource:qDe}=(Qi(),D(NB)),Pk=zg(),ine=gw(),one=require("lodash"),{getSchemaPath:ane}=Rt(),Ck=gt(),{handleHDBError:cne,hdbErrors:lne}=Ee(),{HTTP_STATUS_CODES:une}=lne,dne=1e8;Lk.exports=fne;async function fne(e){let t=sne(e,"conditions");if(t)throw cne(t,t.message,une.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=ane(e.schema,e.table),n=await Ck.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)Ck.openDBI(n,u.attribute);let i=one.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===Jg.SEARCH_TYPES.EQUALS?u.estimated_count=ww.count(n,u.attribute,u.value):d===Jg.SEARCH_TYPES.CONTAINS||d===Jg.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=dne}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await Ok(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(Pk.filterByType),f=d.length,m=ww.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=>ine.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await Ok(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=ww.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(fne,"lmdbSearchByConditions");async function Ok(e,t,r,n){let s=new nne(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.comparator;return s.attribute=r.attribute,i===Jg.SEARCH_TYPES.BETWEEN?(s.value=r.value[0],s.end_value=r.value[1]):s.value=r.value,Pk.searchByType(e,s,i,n).map(o=>o.value)}a(Ok,"executeConditionSearch")});var Ip=M((KDe,vk)=>{"use strict";var mne=(G(),D(j)).OPERATIONS_ENUM,Nw=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=mne.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};vk.exports=Nw});var Cw=M((WDe,Gk)=>{"use strict";var Bk=fi(),Fk=Ip(),kk=Ap(),Hk=Tp(),qn=(G(),D(j)),Mk=ae(),Uk=gt(),{getTransactionAuditStorePath:pne,getSchemaPath:hne}=Rt(),xk=Q();Gk.exports=Ene;async function Ene(e){try{if(Mk.isEmpty(global.hdb_schema[e.schema])||Mk.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await _ne(e),await gne(e);let t=hne(e.schema,e.table);try{await Uk.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")xk.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=pne(e.schema,e.table);await Uk.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")xk.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Ene,"lmdbDropTable");async function _ne(e){let t=new Bk(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await kk(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 Fk(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await Hk(s)}a(_ne,"deleteAttributesFromSystem");async function gne(e){let t=new Bk(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await kk(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 Fk(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await Hk(s)}catch(i){throw i}}a(gne,"dropTableFromSystem")});var $k=M((zDe,qk)=>{"use strict";var Sne=require("fs-extra"),Tne=fi(),yne=hd(),Rne=Ip(),bne=Cw(),Ane=Tp(),Ine=Tw(),wne=Ap(),Xo=(G(),D(j)),{getSchemaPath:Nne}=Rt(),{handleHDBError:Cne,hdbErrors:One}=Ee(),{HDB_ERROR_MSGS:Pne,HTTP_STATUS_CODES:Lne}=One;qk.exports=Dne;async function Dne(e){let t;try{t=await vne(e.schema);let r=new Tne(Xo.SYSTEM_SCHEMA_NAME,Xo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Xo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Xo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await wne(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await bne(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new Rne(Xo.SYSTEM_SCHEMA_NAME,Xo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Ane(s);let i=Nne(t);await Sne.remove(i)}catch(r){throw r}}a(Dne,"lmdbDropSchema");async function vne(e){let t=new yne(Xo.SYSTEM_SCHEMA_NAME,Xo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Xo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await Ine(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw Cne(new Error,Pne.SCHEMA_NOT_FOUND(e),Lne.NOT_FOUND,void 0,void 0,!0);return n}a(vne,"validateDropSchema")});var wp=M((QDe,Vk)=>{"use strict";var Ow=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};Vk.exports=Ow});var Lw=M((eve,Kk)=>{"use strict";var Mne=require("fs-extra"),Qg=gt(),{getTransactionAuditStorePath:Une}=Rt(),Pw=Jt(),ZDe=wp();Kk.exports=xne;async function xne(e){let t;try{let r=Une(e.schema,e.table);await Mne.mkdirp(r),t=await Qg.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{Qg.createDBI(t,Pw.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Qg.createDBI(t,Pw.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Qg.createDBI(t,Pw.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(xne,"createTransactionsAuditEnvironment")});var jk=M((nve,Wk)=>{"use strict";var Dw=(G(),D(j)),Yk=gt(),Bne=Il(),{getSystemSchemaPath:Fne,getSchemaPath:kne}=Rt(),rve=to(),Hne=qg(),vw=Gg(),Gne=Q(),qne=Lw();Wk.exports=$ne;async function $ne(e,t){let r=kne(t.schema,t.table),n=new vw(t.schema,t.table,Dw.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new vw(t.schema,t.table,Dw.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new vw(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Yk.createEnvironment(r,t.table),e!==void 0){let o=await Yk.openEnvironment(Fne(),Dw.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Bne.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 Mw(n),await Mw(s),await Mw(i)}await qne(t)}catch(o){throw o}}a($ne,"lmdbCreateTable");async function Mw(e){try{await Hne(e)}catch(t){Gne.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Mw,"createAttribute")});var Jk=M((ive,zk)=>{"use strict";var Vne=_p(),Kne=Bm(),Yne=$g(),Np=(G(),D(j)),Wne=Il().updateRecords,jne=gt(),{getSchemaPath:zne}=Rt(),Jne=gp(),Qne=Q();zk.exports=Xne;async function Xne(e){try{let{schemaTable:t,attributes:r}=Vne(e);Kne(e,r,t.hash_attribute),e.schema!==Np.SYSTEM_SCHEMA_NAME&&(r.includes(Np.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Np.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Np.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Np.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Yne(e.hdb_auth_header,t,r),s=zne(e.schema,e.table),i=await jne.openEnvironment(s,e.table),o=await Wne(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Jne(e,o)}catch(c){Qne.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(Xne,"lmdbUpdateRecords")});var Xk=M((ave,Qk)=>{"use strict";var Zne=(G(),D(j)).OPERATIONS_ENUM,Uw=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Zne.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Qk.exports=Uw});var eH=M((uve,Zk)=>{"use strict";var lve=Xk(),ese=_p(),tse=Bm(),rse=$g(),Cp=(G(),D(j)),nse=Il().upsertRecords,sse=gt(),{getSchemaPath:ise}=Rt(),ose=gp(),ase=Q(),{handleHDBError:cse,hdbErrors:lse}=Ee();Zk.exports=use;async function use(e){let t;try{t=ese(e)}catch(l){throw cse(l,l.message,lse.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;tse(e,n,r.hash_attribute),e.schema!==Cp.SYSTEM_SCHEMA_NAME&&(n.includes(Cp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Cp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Cp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Cp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await rse(e.hdb_auth_header,r,n),i=ise(e.schema,e.table),o=await sse.openEnvironment(i,e.table),c=await nse(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await ose(e,c)}catch(l){ase.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(use,"lmdbUpsertRecords")});var rH=M((fve,tH)=>{"use strict";var xw=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};tH.exports=xw});var sH=M((pve,nH)=>{"use strict";var Bw=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}};nH.exports=Bw});var aH=M((_ve,oH)=>{"use strict";var Fw=gt(),{getTransactionAuditStorePath:dse}=Rt(),Eve=rH(),Op=Jt(),fse=ae(),iH=sH(),mse=require("util").promisify,pse=mse(setTimeout),hse=1e4,Ese=100;oH.exports=_se;async function _se(e){let t=dse(e.schema,e.table),r=await Fw.openEnvironment(t,e.table,!0),n=Fw.listDBIs(r);Fw.initializeDBIs(r,Op.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new iH;do s=await gse(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 pse(Ese);while(s.transactions_deleted>0);return i}a(_se,"deleteAuditLogsBefore");async function gse(e,t){let r=new iH;try{let n=e.dbis[Op.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[Op.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];fse.isEmpty(c)||(s=e.dbis[Op.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Op.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>hse)break}return await s,r}catch(n){throw n}}a(gse,"deleteTransactions")});var lH=M((Sve,cH)=>{"use strict";var kw=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};cH.exports=kw});var dH=M((Rve,uH)=>{"use strict";var Sse=fi(),Tse=Ip(),yve=lH(),ro=(G(),D(j)),yse=ae(),Hw=gt(),Rse=to(),bse=Ap(),Ase=Tp(),{getSchemaPath:Ise}=Rt();uH.exports=wse;async function wse(e,t=!0){let r;e.schema===ro.SYSTEM_SCHEMA_NAME?r=Rse[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await Cse(e),s=Ise(e.schema,e.table),i=await Hw.openEnvironment(s,e.table);return t===!0&&await Nse(e,i,r.hash_attribute),Hw.dropDBI(i,e.attribute),n}a(wse,"lmdbDropAttribute");async function Nse(e,t,r){let n=Hw.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(Nse,"removeAttributeFromAllObjects");async function Cse(e){let t=new Sse(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await bse(t)).filter(o=>o[ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(yse.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[ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Tse(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Ase(i)}a(Cse,"dropAttributeFromSystem")});var _H=M((Ive,EH)=>{"use strict";var Gw=gt(),Ed=Jt(),Ave=xn(),qw=(G(),D(j)),fH=ae(),{getTransactionAuditStorePath:Ose}=Rt(),Pse=md(),Xg=ud(),Lse=Q();EH.exports=Dse;async function Dse(e){let t=Ose(e.schema,e.table),r=await Gw.openEnvironment(t,e.table,!0),n=Gw.listDBIs(r);Gw.initializeDBIs(r,Ed.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case qw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return mH(r,e.search_values);case qw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,Mse(r,e.search_values,s);case qw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return vse(r,e.search_values);default:return mH(r)}}a(Dse,"readAuditLog");function mH(e,t=[0,Date.now()]){fH.isEmpty(t[0])&&(t[0]=0),fH.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Ed.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 Xg,s))}a(mH,"searchTransactionsByTimestamp");function vse(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[Ed.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,hH(e,i))}return Object.fromEntries(r)}a(vse,"searchTransactionsByUsername");function Mse(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=Pse.equals(e,Ed.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ed.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=hH(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);pH(l,"records",r,d,o),pH(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(Mse,"searchTransactionsByHashValues");function pH(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 Xg(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new Xg(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(pH,"loopRecords");function hH(e,t){let r=[];try{let n=e.dbis[Ed.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 Xg,i);r.push(o)}}catch(i){Lse.warn(i)}return r}catch(n){throw n}}a(hH,"batchSearchTransactions")});var SH=M((Ove,gH)=>{"use strict";var{getSchemaPath:Nve}=Rt(),Cve=gt(),{database:Use}=(Oe(),D(mt));gH.exports={writeTransaction:xse};async function xse(e,t,r){return Use({database:e,table:t}).transaction(r)}a(xse,"writeTransaction")});var bH=M((Lve,RH)=>{"use strict";var{getSchemaPath:TH}=Rt(),yH=gt();RH.exports={flush:Bse,resetReadTxn:Fse};async function Bse(e,t){return(await yH.openEnvironment(TH(e,t),t.toString())).flushed}a(Bse,"flush");async function Fse(e,t){try{(await yH.openEnvironment(TH(e,t),t.toString())).resetReadTxn()}catch{}}a(Fse,"resetReadTxn")});var NH=M((vve,wH)=>{"use strict";var{Readable:kse}=require("stream"),{getDatabases:Hse}=(Oe(),D(mt)),{readSync:Gse,openSync:qse,createReadStream:AH}=require("fs"),{open:$se}=require("lmdb"),{OpenDBIObject:IH}=fp(),Vse=mp(),{AUDIT_STORE_OPTIONS:Kse}=(Ki(),D(D0)),{INTERNAL_DBIS_NAME:Yse,AUDIT_STORE_NAME:Wse}=Jt();wH.exports=zse;var $w=32768,jse=100;async function zse(e){let t=e.database||e.schema||"data",r=Hse()[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=$se({noSync:!0,maxDbs:Vse.MAX_DBS}),m,p=f.openDB(Yse,new IH(!1)),h=d.useReadTransaction(),E=0,_=a(async function(S,y){y.encoding="binary",y.encoder=void 0;let w=f.openDB(S,y),I=d.openDB(S,y);for(let{key:H,version:X,value:q}of I.getRange({start:null,transaction:h,versions:I.useVersions}))m=w.put(H,q,X),E++%jse===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(w=>S.startsWith?.(w+"/"))){p.put(S,y);let[,w]=S.split("/"),I=!w,H=new IH(!I,I);await _(S,H)}e.include_audit&&await _(Wse,{...Kse}),await m;let R=AH(f.path);return R.headers=l(),R.on("close",()=>{h.done(),f.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=qse(o.path);return o.transaction(()=>{let u=Buffer.alloc($w);Gse(c,u,0,$w),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let f=AH(null,{fd:c,start:$w}),m=new kse.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(zse,"getBackup")});var PH=M((Uve,OH)=>{"use strict";var Jse=Q(),{handleHDBError:Qse}=Ee(),Xse=oF(),Zse=qg(),eie=mw(),tie=$F(),rie=Tp(),nie=Tw(),sie=hk(),iie=Ak(),oie=Ap(),aie=Dk(),cie=$k(),lie=jk(),uie=Jk(),die=eH(),fie=aH(),mie=Cw(),pie=dH(),hie=_H(),Eie=SH(),CH=bH(),_ie=NH(),Vw=class extends Xse{static{a(this,"LMDBBridge")}async searchByConditions(t){return aie(t)}async getDataByHash(t){return await nie(t)}async searchByHash(t){return await sie(t)}async getDataByValue(t,r){return await iie(t,r)}async searchByValue(t){return await oie(t)}async createSchema(t){return await tie(t)}async dropSchema(t){return await cie(t)}async createTable(t,r){return await lie(t,r)}async dropTable(t){return await mie(t)}async createAttribute(t){return await Zse(t)}async createRecords(t){return await eie(t)}async updateRecords(t){return await uie(t)}async upsertRecords(t){try{return await die(t)}catch(r){throw Qse(r,null,null,Jse.ERR,r)}}async deleteRecords(t){return await rie(t)}async dropAttribute(t){return await pie(t)}async deleteAuditLogsBefore(t){return await fie(t)}async readAuditLog(t){return await hie(t)}writeTransaction(t,r,n){return Eie.writeTransaction(t,r,n)}flush(t,r){return CH.flush(t,r)}resetReadTxn(t,r){return CH.resetReadTxn(t,r)}getBackup(t){return _ie(t)}};OH.exports=Vw});function $n(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function Lp(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 ms.ClientError(`${u} must be a string, attempt to assign ${m}`);$n(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 ms.ClientError(`${u} must be a string, attempt to assign ${m}`);$n(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 ms.ClientError(`${u} must be a number, attempt to assign ${p}`);$n(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 ms.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);$n(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 ms.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);$n(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 ms.ClientError(`${u} must be a number, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Boolean":d=a(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new ms.ClientError(`${u} must be a boolean, attempt to assign ${m}`);$n(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 ms.ClientError(`${u} must be a Date, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Bytes":d=a(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new ms.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Blob":d=a(function(m){if(!(m instanceof vs||m==null&&l.nullable!==!1))throw new ms.ClientError(`${u} must be a Blob, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Any":case void 0:d=a(function(m){$n(this)[u]=m},"set");break;default:d=a(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new ms.ClientError(`${u} must be an object, attempt to assign ${m}`);$n(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=Kw(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 ms.ClientError("Can not add a property to a sealed table schema");$n(this)[l]=u}),o("deleteProperty",function(l){$n(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?vH:DH);break}c=l}while(c&&c!==DH&&c!==vH)}function MH(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(LH[t])return LH[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=Kw(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function gie(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 Kw(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends Ll{static{a(this,"TrackedObject")}},Lp(r,t)),new r(e)):new Ll(e);case Array:let n=new eS(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=Kw(o,t?.elements)),n[s]=o}return n;default:return e}}function tS(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=tS(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 Dl(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=Dl(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=MA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Dl(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)Sie.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function Zg(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Pl]||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(Zg(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(Zg(s))return!0}else return!0}else return!0}}return!1}var ms,LH,DH,vH,Ll,Sie,Pl,eS,Pp,Yw=se(()=>{ms=b(Ee());z_();os();a($n,"getChanges");a(Lp,"assignTrackedAccessors");LH=Object.prototype,DH=new Proxy({},{get:MH}),vH=new Proxy({},{get:MH,set:gie});a(MH,"getProxiedProperty");a(gie,"setProxiedProperty");a(Kw,"trackObject");Ll=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}};Lp(Ll,{},!0);a(tS,"collapseData");Sie=Object.prototype.hasOwnProperty;a(Dl,"updateAndFreeze");a(Zg,"hasChanges");Pl=Symbol.for("has-array-changes"),eS=class extends Array{static{a(this,"TrackedArray")}#e;[Pl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Pl]=!0,super.splice(...t)}push(...t){return this[Pl]=!0,super.push(...t)}pop(){return this[Pl]=!0,super.pop()}unshift(...t){return this[Pl]=!0,super.unshift(...t)}shift(){return this[Pl]=!0,super.shift()}};eS.prototype.constructor=Array;Pp=class{static{a(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var qH={};ye(qH,{ResourceBridge:()=>zw});function Jw({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 UH(e,t){let r=no(e),n=Jw(e,r);if(!r)throw new mi.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;bt(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&&tS(d)}catch(f){d={message:(0,GH.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 no(e){let t=e.database||e.schema||yie,r=lt()[t];if(!r)throw(0,mi.handleHDBError)(new Error,Tie.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function xH(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*BH(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 FH,rS,mi,kH,Ww,jw,HH,GH,Tie,yie,Rie,bie,zw,$H=se(()=>{FH=b(PH()),rS=b(pd()),mi=b(Ee());Oe();kH=b(_p());G();Ww=b(Jo()),jw=b(ds()),HH=b(ae());Ja();Yw();GH=b(Q()),{HDB_ERROR_MSGS:Tie}=mi.hdbErrors,yie="data",Rie=1e4,bie=10,zw=class extends FH.default{static{a(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=no(t);if(!r)throw new mi.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,rS.default)(t,"conditions");if(s)throw(0,mi.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:Jw(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 mi.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}]}ze({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await no(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=no(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 no(t).dropTable()}createSchema(t){return _d({database:t.schema,table:null}),Ww.signalSchemaChange(new jw.SchemaEventMsg(process.pid,V.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Qw(t.schema),Ww.signalSchemaChange(new jw.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,kH.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),bt(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=tS(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),bt(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 xH(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=lt()[t.schema][t.table];if(!r.createdTimeProperty)throw new mi.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:y_.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,HH.asyncSetTimeout)(bie),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%Rie===0&&await u();return l.length>0&&await u(),s?xH(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,rS.default)(t,"hashes");if(r)throw r;return UH(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of UH(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&lA[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,rS.default)(t,"value");if(n)throw n;let s=no(t);if(!s)throw new mi.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===y_.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:Jw(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=no(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){no({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return no(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=no(t),n={};switch(t.search_type){case R_.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 R_.USERNAME:{let s=t.search_values;for await(let i of BH(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return BH(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(Jw,"getSelect");a(UH,"getRecords");a(no,"getTable");a(xH,"createDeleteResponse");a(BH,"groupRecordsInHistory")});var ps=M((Yve,VH)=>{"use strict";var{ResourceBridge:Aie}=($H(),D(qH)),Iie=fe();Iie.initSync();var nS;function wie(){return nS||(nS=new Aie,nS)}a(wie,"getBridge");VH.exports=wie()});var pi=M((jve,WH)=>{var Nie=to(),{promisify:Cie}=require("util"),{getDatabases:YH}=(Oe(),D(mt));WH.exports={setSchemaDataToGlobal:KH,getTableSchema:Oie,getSystemSchema:Pie,setSchemaDataToGlobalAsync:Cie(KH)};function KH(e){global.hdb_schema=YH(),e&&e()}a(KH,"setSchemaDataToGlobal");function Oie(e,t,r){let n=YH()[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(Oie,"getTableSchema");function Pie(){return Nie}a(Pie,"getSystemSchema")});var Vn=M((Jve,QH)=>{"use strict";var iS=zI(),nn=ae(),Lie=require("util"),oS=ps(),Die=pi(),jH=Q(),{handleHDBError:vl,hdbErrors:vie}=Ee(),{HTTP_STATUS_CODES:Ml}=vie,Mie=Lie.promisify(Die.getTableSchema),Uie="updated",zH="inserted",JH="upserted";QH.exports={insert:Bie,update:Fie,upsert:kie,validation:xie,flush:Hie};async function xie(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 Mie(e.schema,e.table),r=iS(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 jH.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 jH.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(xie,"validation");async function Bie(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=iS(e);if(t)throw vl(new Error,t.message,Ml.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw vl(new Error,r,Ml.BAD_REQUEST);let n=await oS.createRecords(e);return sS(zH,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(Bie,"insertData");async function Fie(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=iS(e);if(t)throw vl(new Error,t.message,Ml.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw vl(new Error,r,Ml.BAD_REQUEST);let n=await oS.updateRecords(e);return nn.isEmpty(n.existing_rows)?sS(Uie,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):sS(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Fie,"updateData");async function kie(e){if(e.operation!=="upsert")throw vl(new Error,"invalid operation, must be upsert",Ml.INTERNAL_SERVER_ERROR);let t=iS(e);if(t)throw vl(new Error,t.message,Ml.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw vl(new Error,r,Ml.BAD_REQUEST);let n=await oS.upsertRecords(e);return sS(JH,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(kie,"upsertData");function sS(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===zH?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===JH?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(sS,"returnObject");function Hie(e){return nn.transformReq(e),oS.flush(e.schema,e.table)}a(Hie,"flush")});var Zw=M((Xve,eG)=>{var Gie=ft(),Xw=require("joi"),{hdbTable:qie,hdbDatabase:XH}=Zi(),ZH={schema:XH,database:XH,table:qie},$ie={date:Xw.date().iso().required()},Vie={timestamp:Xw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};eG.exports=function(e,t){let r=t==="timestamp"?{...ZH,...Vie}:{...ZH,...$ie},n=Xw.object(r);return Gie.validateBySchema(e,n)}});var nG=M((Zve,rG)=>{var Kie=ft(),eN=require("joi"),{hdbTable:Yie,hdbDatabase:tG}=Zi(),Wie=eN.object({schema:tG,database:tG,table:Yie,hash_values:eN.array().required(),ids:eN.array()});rG.exports=function(e){return Kie.validateBySchema(e,Wie)}});var sN=M((eMe,sG)=>{"use strict";var tN=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}},rN=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}},nN=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};sG.exports={InsertObject:tN,NoSQLSeachObject:rN,DeleteResponseObject:nN}});var Bl=M((rMe,lG)=>{"use strict";var oG=Zw(),jie=nG(),Ul=ae(),iG=require("moment"),aG=Q(),{promisify:zie,callbackify:Jie}=require("util"),xl=(G(),D(j)),Qie=pi(),iN=zie(Qie.getTableSchema),oN=ps(),{DeleteResponseObject:Xie}=sN(),{handleHDBError:cc,hdbErrors:Zie}=Ee(),{HDB_ERROR_MSGS:aS,HTTP_STATUS_CODES:lc}=Zie,eoe="records successfully deleted",toe=Jie(cG);lG.exports={delete:toe,deleteRecord:cG,deleteFilesBefore:roe,deleteAuditLogsBefore:noe};async function roe(e){let t=oG(e,"date");if(t)throw cc(t,t.message,lc.BAD_REQUEST,void 0,void 0,!0);if(Ul.transformReq(e),!iG(e.date,iG.ISO_8601).isValid())throw cc(new Error,aS.INVALID_DATE,lc.BAD_REQUEST,xl.LOG_LEVELS.ERROR,aS.INVALID_DATE,!0);let n=Ul.checkSchemaTableExist(e.schema,e.table);if(n)throw cc(new Error,n,lc.NOT_FOUND,xl.LOG_LEVELS.ERROR,n,!0);let s=await oN.deleteRecordsBefore(e);if(await iN(e.schema,e.table),aG.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(roe,"deleteFilesBefore");async function noe(e){let t=oG(e,"timestamp");if(t)throw cc(t,t.message,lc.BAD_REQUEST,void 0,void 0,!0);if(Ul.transformReq(e),isNaN(e.timestamp))throw cc(new Error,aS.INVALID_VALUE("Timestamp"),lc.BAD_REQUEST,xl.LOG_LEVELS.ERROR,aS.INVALID_VALUE("Timestamp"),!0);let r=Ul.checkSchemaTableExist(e.schema,e.table);if(r)throw cc(new Error,r,lc.NOT_FOUND,xl.LOG_LEVELS.ERROR,r,!0);let n=await oN.deleteAuditLogsBefore(e);return await iN(e.schema,e.table),aG.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(noe,"deleteAuditLogsBefore");async function cG(e){e.ids&&(e.hash_values=e.ids);let t=jie(e);if(t)throw cc(t,t.message,lc.BAD_REQUEST,void 0,void 0,!0);Ul.transformReq(e);let r=Ul.checkSchemaTableExist(e.schema,e.table);if(r)throw cc(new Error,r,lc.NOT_FOUND,xl.LOG_LEVELS.ERROR,r,!0);try{await iN(e.schema,e.table);let n=await oN.deleteRecords(e);return Ul.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${eoe}`),n}catch(n){if(n.message===xl.SEARCH_NOT_FOUND_MESSAGE){let s=new Xie;return s.message=xl.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(cG,"deleteRecord")});var dN={};ye(dN,{HASH_FUNCTION:()=>$r,hash:()=>lN,validate:()=>uN});function aN(e=vp){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Dp.randomBytes(e)).map(r=>t[r%t.length]).join("")}function lN(e,t=$r[dG?.toUpperCase()]??$r.SHA256){return cN[t](e)}function uN(e,t,r=$r[dG?.toUpperCase()]??$r.SHA256){return e?soe[r](e,t):!1}var Dp,gd,uG,dG,vp,fG,$r,cN,soe,fN=se(()=>{Dp=b(require("node:crypto")),gd=b(require("argon2")),uG=b(fe());G();dG=(0,uG.get)(x.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),vp=16,fG=9,$r={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};a(aN,"generateSalt");cN={[$r.MD5]:(e,t=void 0)=>{t=t??aN(fG);let r=Dp.createHash($r.MD5).update(e+t).digest("hex");return t+r},[$r.SHA256]:(e,t=void 0)=>{t=t??aN(vp);let r=Dp.createHash($r.SHA256).update(e+t).digest("hex");return t+r},[$r.ARGON2ID]:async e=>{let t=aN(vp),r=await gd.hash(e,{type:gd.argon2id,salt:Buffer.from(t)});return t+r}},soe={[$r.MD5]:(e,t)=>{let r=e.slice(0,fG);return e===cN[$r.MD5](t,r)},[$r.SHA256]:(e,t)=>{let r=e.slice(0,vp);return e===cN[$r.SHA256](t,r)},[$r.ARGON2ID]:async(e,t)=>await gd.verify(e.slice(vp),t)};a(lN,"hash");a(uN,"validate")});var pG=M((oMe,mG)=>{var mN=ft(),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 ioe(e){return gn.password.presence=!0,gn.username.presence=!0,gn.role.presence=!0,gn.active.presence=!0,mN.validateObject(e,gn)}a(ioe,"addUserValidation");function ooe(e){return gn.password.presence=!1,gn.username.presence=!0,gn.role.presence=!1,gn.active.presence=!1,mN.validateObject(e,gn)}a(ooe,"alterUserValidation");function aoe(e){return gn.password.presence=!1,gn.username.presence=!0,gn.role.presence=!1,gn.active.presence=!1,mN.validateObject(e,gn)}a(aoe,"dropUserValidation");mG.exports={addUserValidation:ioe,alterUserValidation:ooe,dropUserValidation:aoe}});var NG=M((lMe,wG)=>{"use strict";var pN=require("recursive-iterator"),coe=require("alasql"),hN=require("clone"),hG=ae(),{handleHDBError:EG,hdbErrors:loe}=Ee(),{HDB_ERROR_MSGS:_G,HTTP_STATUS_CODES:gG}=loe,{getDatabases:uoe}=(Oe(),D(mt)),doe=["DISTINCT_ARRAY"],SG=Symbol("validateTables"),EN=Symbol("validateTable"),cMe=Symbol("getAllColumns"),TG=Symbol("validateAllColumns"),cS=Symbol("findColumn"),yG=Symbol("validateOrderBy"),Mp=Symbol("validateSegment"),_N=Symbol("validateColumn"),RG=Symbol("setColumnsForTable"),bG=Symbol("checkColumnsForAsterisk"),AG=Symbol("validateGroupBy"),IG=Symbol("hasColumns"),gN=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[SG](),this[bG](),this[TG]()}[SG](){if(this[IG]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[EN](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[EN](t.table)})}}[IG](){let t=!1,r=new pN(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[EN](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=uoe();if(!r[t.databaseid])throw EG(new Error,_G.SCHEMA_NOT_FOUND(t.databaseid),gG.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw EG(new Error,_G.TABLE_NOT_FOUND(t.databaseid,t.tableid),gG.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=hN(s);i.table=hN(t),this.attributes.push(i)})}[cS](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)}[bG](){let t=new pN(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[RG](r.tableid)}[RG](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new coe.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[TG](){this[Mp](this.statement.columns,!1),this[Mp](this.statement.joins,!1),this[Mp](this.statement.where,!1),this[AG](this.statement.group,!1),this[Mp](this.statement.order,!0)}[Mp](t,r){if(!t)return;let n=new pN(t),s=[];for(let{node:i,path:o}of n)!hG.isEmpty(i)&&!hG.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[yG](i):s.push(this[_N](i)));return s}[AG](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&doe.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=hN(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[cS](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[cS](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`}[yG](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[_N](t)}[_N](t){let r=this[cS](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]}};wG.exports=gN});var LG=M((dMe,PG)=>{"use strict";var CG=require("lodash"),Up=require("mathjs"),foe=require("jsonata"),OG=ae();PG.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?CG.uniqWith(e,CG.isEqual):e,"distinct_array"),searchJSON:moe,mad:xp.bind(null,Up.mad),mean:xp.bind(null,Up.mean),mode:xp.bind(null,Up.mode),prod:xp.bind(null,Up.prod),median:xp.bind(null,Up.median)};function xp(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(xp,"aggregateFunction");function moe(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(OG.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),OG.isEmpty(this.__ala__.res[r])){let n=foe(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(moe,"searchJSON")});var vG=M((mMe,DG)=>{"use strict";var hr=require("moment"),SN="YYYY-MM-DDTHH:mm:ss.SSSZZ";hr.suppressDeprecationWarnings=!0;DG.exports={current_date:a(()=>hr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>hr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return hr(e).utc().format("YYYY");case"month":return hr(e).utc().format("MM");case"day":return hr(e).utc().format("DD");case"hour":return hr(e).utc().format("HH");case"minute":return hr(e).utc().format("mm");case"second":return hr(e).utc().format("ss");case"millisecond":return hr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>hr(e).utc().format(SN),"date"),date_format:a((e,t)=>hr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>hr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>hr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=hr(e).utc(),s=hr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>hr().utc().valueOf(),"now"),get_server_time:a(()=>hr().format(SN),"get_server_time"),offset_utc:a((e,t)=>hr(e).utc().utcOffset(t).format(SN),"offset_utc")}});var BG=M((hMe,xG)=>{"use strict";var poe=require("@turf/area"),hoe=require("@turf/length"),Eoe=require("@turf/circle"),_oe=require("@turf/difference"),goe=require("@turf/distance"),Soe=require("@turf/boolean-contains"),Toe=require("@turf/boolean-equal"),yoe=require("@turf/boolean-disjoint"),Roe=require("@turf/helpers"),MG=(G(),D(j)),Ze=ae(),Zo=Q();xG.exports={geoArea:boe,geoLength:Aoe,geoCircle:Ioe,geoDifference:woe,geoDistance:UG,geoNear:Noe,geoContains:Coe,geoEqual:Ooe,geoCrosses:Poe,geoConvert:Loe};function boe(e){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return poe.default(e)}catch(t){return Zo.trace(t,e),NaN}}a(boe,"geoArea");function Aoe(e,t){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return hoe.default(e,{units:t||"kilometers"})}catch(r){return Zo.trace(r,e),NaN}}a(Aoe,"geoLength");function Ioe(e,t,r){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return Eoe.default(e,t,{units:r||"kilometers"})}catch(n){return Zo.trace(n,e,t),NaN}}a(Ioe,"geoCircle");function woe(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 _oe(e,t)}catch(r){return Zo.trace(r,e,t),NaN}}a(woe,"geoDifference");function UG(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 goe.default(e,t,{units:r||"kilometers"})}catch(n){return Zo.trace(n,e,t),NaN}}a(UG,"geoDistance");function Noe(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 UG(e,t,n)<=r}catch(s){return Zo.trace(s,e,t),!1}}a(Noe,"geoNear");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 Soe.default(e,t)}catch(r){return Zo.trace(r,e,t),!1}}a(Coe,"geoContains");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 Toe.default(e,t)}catch(r){return Zo.trace(r,e,t),!1}}a(Ooe,"geoEqual");function Poe(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!yoe.default(e,t)}catch(r){return Zo.trace(r,e,t),!1}}a(Poe,"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(MG.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(MG.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ze.autoCastJSON(e)),Roe[t](e,r)}a(Loe,"geoConvert")});var lS=M((_Me,FG)=>{var Fl=LG(),hs=vG(),so=BG();FG.exports=e=>{e.aggr.mad=e.aggr.MAD=Fl.mad,e.aggr.mean=e.aggr.MEAN=Fl.mean,e.aggr.mode=e.aggr.MODE=Fl.mode,e.aggr.prod=e.aggr.PROD=Fl.prod,e.aggr.median=e.aggr.MEDIAN=Fl.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Fl.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Fl.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=hs.current_date,e.fn.current_time=e.fn.CURRENT_TIME=hs.current_time,e.fn.extract=e.fn.EXTRACT=hs.extract,e.fn.date=e.fn.DATE=hs.date,e.fn.date_format=e.fn.DATE_FORMAT=hs.date_format,e.fn.date_add=e.fn.DATE_ADD=hs.date_add,e.fn.date_sub=e.fn.DATE_SUB=hs.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=hs.date_diff,e.fn.now=e.fn.NOW=hs.now,e.fn.offset_utc=e.fn.OFFSET_UTC=hs.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=hs.get_server_time,e.fn.getdate=e.fn.GETDATE=hs.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=hs.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=so.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=so.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=so.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=so.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=so.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=so.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=so.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=so.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=so.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=so.geoNear}});var qG=M((gMe,GG)=>{"use strict";var Bp=require("lodash"),Kn=require("alasql");Kn.options.cache=!1;var Doe=lS(),kG=require("clone"),uS=require("recursive-iterator"),Ve=Q(),it=ae(),Sd=ps(),voe=(G(),D(j)),{hdbErrors:Moe}=Ee(),{getDatabases:HG}=(Oe(),D(mt)),Uoe="IS NULL",hi="There was a problem performing this search. Please check the logs and try again.";Doe(Kn);var TN=class{static{a(this,"SQLSearch")}constructor(t,r){if(it.isEmpty(t))throw Ve.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 Ve.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ve.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ve.error(n),new Error(hi)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ve.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ve.error(n),new Error(hi)}if(Object.keys(this.data).length===0)return Ve.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ve.error("Error thrown from processJoins in SQLSearch class method search."),Ve.error(n),new Error(hi)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ve.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ve.error(n),new Error(hi)}try{return t=await this._finalSQL(),t}catch(n){throw Ve.error("Error thrown from finalSQL in SQLSearch class method search."),Ve.error(n),new Error(hi)}}_getColumns(){let t=new uS(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(kG(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Bp.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=HG()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(it.isEmpty(this.statement.where)){Ve.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new uS(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){Ve.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new uS(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(voe.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&&Bp.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 Ve.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ve.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(kG(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(Uoe)>-1&&this.tables.forEach(s=>{let i={columnid:HG()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Bp.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 Sd.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 Ve.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ve.error(d),new Error(hi)}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 Sd.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 Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ve.error(d),new Error(hi)}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 Sd.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,_]of h)this.data[i].__mergedData[E]?this._updateMergedAttribute(i,E,s.attribute,_[s.attribute]):(this.data[i].__mergedData[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,_[s.attribute]),this._setMergedHashAttribute(i,E))}}catch(d){throw Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ve.error(d),new Error(hi)}else try{c.attribute=s.attribute,c.value="*";let d=await Sd.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 Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ve.error(d),new Error(hi)}}}_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 Ve.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ve.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(_=>{E[_.key]!==null&&E[_.key]!==void 0&&_.keys.add(E[_.key])})}o.forEach(p=>{let h=Object.keys(this.data[`${p.schema}_${p.table}`].__mergedData),E=Bp.difference(h,[...p.keys].map(_=>_.toString()));for(let _=0,R=E.length;_<R;_++){let S=E[_];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 uS(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=Bp.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 Ve.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ve.error(i),new Error(hi)}}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 Sd.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],_=p[E]===void 0?null:p[E];this.data[n].__mergedData[m].push(_)}}}}catch(r){throw Ve.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ve.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();Ve.trace(`Final SQL: ${s}`),n=await Kn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ve.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ve.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 Ve.error(Moe.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ve.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 Sd.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 Ve.error("There was an error when processing this SQL operation. Check your logs"),Ve.error(o),new Error(hi)}}return Object.values(Object.values(this.data)[0].__mergedData)}};GG.exports=TN});var Sn=M((TMe,$G)=>{"use strict";$G.exports={searchByConditions:xoe,searchByHash:Boe,searchByValue:Foe,search:koe};var yN=ps(),{transformReq:RN}=ae();async function xoe(e){return RN(e),yN.searchByConditions(e)}a(xoe,"searchByConditions");async function Boe(e){RN(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of yN.searchByHash(e))r&&t.push(r);return t}a(Boe,"searchByHash");async function Foe(e){RN(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of yN.searchByValue(e))t.push(r);return t}a(Foe,"searchByValue");function koe(e,t){try{let r=NG(),n=qG(),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(koe,"search")});var io=M((RMe,WG)=>{"use strict";var Fp=require("crypto"),Hoe=fe(),{CONFIG_PARAMS:Goe}=(G(),D(j)),KG="aes-256-cbc",qoe=32,$oe=16,bN=64,YG=32,Voe=bN+YG,VG=new Map;WG.exports={encrypt:Koe,decrypt:Yoe,createNatsTableStreamName:Woe};function Koe(e){let t=Fp.randomBytes(qoe),r=Fp.randomBytes($oe),n=Fp.createCipheriv(KG,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(Koe,"encrypt");function Yoe(e){let t=e.substr(0,bN),r=e.substr(bN,YG),n=e.substr(Voe,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Fp.createDecipheriv(KG,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Yoe,"decrypt");function Woe(e,t){let r=Hoe.get(Goe.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=VG.get(r);return n||(n=Fp.createHash("md5").update(r).digest("hex"),VG.set(r,n)),n}a(Woe,"createNatsTableStreamName")});var Dt=M((IMe,zG)=>{"use strict";var{platform:AMe}=require("os"),joe="nats-server.zip",AN="nats-server",zoe=process.platform==="win32"?`${AN}.exe`:AN,Joe=/^[^\s.,*>]+$/,jG="__request__",Qoe=a(e=>`${e}.${jG}`,"REQUEST_SUBJECT"),Xoe={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Zoe={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},eae={HUB:"hub.pid",LEAF:"leaf.pid"},tae={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},rae={SUCCESS:"success",ERROR:"error"},nae={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},sae={TXN:"txn",MSGID:"msgid"},Td={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},iae={[Td.ERR]:1,[Td.WRN]:2,[Td.INF]:3,[Td.DBG]:4,[Td.TRC]:5},oae={debug:"-D",trace:"-DVV"};zG.exports={NATS_SERVER_ZIP:joe,NATS_SERVER_NAME:AN,NATS_BINARY_NAME:zoe,PID_FILES:eae,NATS_CONFIG_FILES:Zoe,SERVER_SUFFIX:tae,NATS_TERM_CONSTRAINTS_RX:Joe,REQUEST_SUFFIX:jG,UPDATE_REMOTE_RESPONSE_STATUSES:rae,CLUSTER_STATUS_STATUSES:nae,REQUEST_SUBJECT:Qoe,SUBJECT_PREFIXES:sae,MSG_HEADERS:Xoe,LOG_LEVELS:Td,LOG_LEVEL_FLAGS:oae,LOG_LEVEL_HIERARCHY:iae}});var gi={};ye(gi,{ACTIVE_BOOLEAN:()=>rq,ALTERUSER_NOTHING_TO_UPDATE:()=>ZG,EMPTY_PASSWORD:()=>eq,EMPTY_ROLE:()=>tq,USERNAME_REQUIRED:()=>XG,addUser:()=>DN,alterUser:()=>vN,dropUser:()=>MN,findAndValidateUser:()=>Rd,getClusterUser:()=>gae,getSuperUser:()=>Gp,getUsersWithRolesCache:()=>_ae,listUsers:()=>mS,listUsersExternal:()=>xN,setUsersWithRolesCache:()=>_i,userInfo:()=>UN});async function DN(e){let t=iq.cleanAttributes(e,oq),r=sq.addUserValidation(t);if(r)throw new Ei(r.message);let n=await Hp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new Ei(yd.ROLE_NAME_NOT_FOUND(t.role),ea.NOT_FOUND);if(n.length>1)throw new Ei(yd.DUP_ROLES_FOUND(t.role),ea.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=PN.encrypt(t.password)),t.password=await kp.hash(t.password,dS),t.hash_function=dS,t.role=n[0].id;let s=await nq.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(ON.debug(s),await _i(),s.skipped_hashes.length===1)throw new Ei(yd.USER_ALREADY_EXISTS(t.username),ea.CONFLICT);return CN.signalUserChange(new LN(process.pid)),`${t.username} successfully added`}async function vN(e){let t=iq.cleanAttributes(e,oq);if(oo.isEmptyOrZeroLength(t.username))throw new Error(XG);if(oo.isEmptyOrZeroLength(t.password)&&oo.isEmptyOrZeroLength(t.role)&&oo.isEmptyOrZeroLength(t.active))throw new Error(ZG);if(!oo.isEmpty(t.password)&&oo.isEmptyOrZeroLength(t.password.trim()))throw new Error(eq);if(!oo.isEmpty(t.active)&&!oo.isBoolean(t.active))throw new Error(rq);if(!oo.isEmpty(t.password)&&!oo.isEmptyOrZeroLength(t.password.trim())&&(hae(t.username)&&(t.hash=PN.encrypt(t.password)),t.password=await kp.hash(t.password,dS),t.hash_function=dS),t.role==="")throw new Error(tq);if(t.role){let n=await Hp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Ei(yd.ALTER_USER_ROLE_NOT_FOUND(t.role),ea.NOT_FOUND);if(n.length>1)throw new Ei(yd.DUP_ROLES_FOUND(t.role),ea.CONFLICT);t.role=n[0].id}let r=await nq.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await _i(),CN.signalUserChange(new LN(process.pid)),r}function hae(e){let t=!1,r=ao.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}async function MN(e){let t=sq.dropUserValidation(e);if(t)throw new Ei(t.message);if(ao.get(e.username)===void 0)throw new Ei(yd.USER_NOT_EXIST(e.username),ea.NOT_FOUND);let r=await pae({table:"hdb_user",schema:"system",hash_values:[e.username]});return ON.debug(r),await _i(),CN.signalUserChange(new LN(process.pid)),`${e.username} successfully deleted`}async function UN(e){if(!e||!e.hdb_user)return"There was no user info in the body";let t=NN.cloneDeep(e.hdb_user),r=await Hp.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}async function xN(){let e=await mS();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}async function mS(){let e=await Hp.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=NN.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Hp.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=NN.cloneDeep(s),s.role=t[s.role],Eae(s.role),n.set(s.username,s);return n}function Eae(e){if(!e){ON.error("invalid user role found.");return}e.permission.system||(e.permission.system={tables:{}}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(dae)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}async function _i(e=void 0){e?ao=e:ao=await mS()}async function _ae(){return ao||await _i(),ao}async function Rd(e,t,r=!0){ao||await _i();let n=ao.get(e);if(!n){if(!r)return{username:e};throw new Ei(IN.GENERIC_AUTH_FAIL,ea.UNAUTHORIZED)}if(n&&!n.active)throw new Ei(IN.USER_INACTIVE,ea.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(QG.get(t)===n.password)return s;{let i=kp.validate(n.password,t,n.hash_function||kp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)QG.set(t,n.password);else throw new Ei(IN.GENERIC_AUTH_FAIL,ea.UNAUTHORIZED)}}return s}async function Gp(){ao||await _i();for(let[,e]of ao)if(e.role.role==="super_user")return e}async function gae(){let e=await mS(),t=lae.getConfigFromFile(wN.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(r==null||r?.role?.role!==wN.ROLE_TYPES_ENUM.CLUSTER_USER)return;let n=PN.decrypt(r.hash);return r.decrypt_hash=n,r.uri_encoded_d_hash=encodeURIComponent(n),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+JG.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+JG.SERVER_SUFFIX.ADMIN,r}var XG,ZG,eq,tq,rq,nq,aae,kp,sq,Hp,CN,oo,iq,ON,cae,PN,wN,JG,lae,uae,dae,fae,Ei,ea,IN,yd,LN,NN,fS,mae,oq,QG,pae,dS,ao,aq,Yn=se(()=>{"use strict";XG="username is required",ZG="nothing to update, must supply active, role or password to update",eq="password cannot be an empty string",tq="If role is specified, it cannot be empty.",rq="active must be true or false",nq=Vn(),aae=Bl(),kp=(fN(),D(dN)),sq=pG(),Hp=Sn(),CN=Jo(),oo=ae(),iq=require("validate.js"),ON=Q(),{promisify:cae}=require("util"),PN=io(),wN=(G(),D(j)),JG=Dt(),lae=_t(),uae=fe(),dae=to(),{hdbErrors:fae,ClientError:Ei}=Ee(),{HTTP_STATUS_CODES:ea,AUTHENTICATION_ERROR_MSGS:IN,HDB_ERROR_MSGS:yd}=fae,{UserEventMsg:LN}=ds(),NN=require("lodash"),{server:fS}=(Hr(),D(bm)),mae=Q();fS.getUser=(e,t)=>Rd(e,t,t!=null);fS.authenticateUser=(e,t)=>Rd(e,t);oq={username:!0,active:!0,role:!0,password:!0},QG=new Map,pae=cae(aae.delete),dS=uae.get(wN.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??kp.HASH_FUNCTION.SHA256;a(DN,"addUser");a(vN,"alterUser");a(hae,"isClusterUser");a(MN,"dropUser");a(UN,"userInfo");a(xN,"listUsersExternal");a(mS,"listUsers");a(Eae,"appendSystemTablesToRole");a(_i,"setUsersWithRolesCache");a(_ae,"getUsersWithRolesCache");a(Rd,"findAndValidateUser");a(Gp,"getSuperUser");a(gae,"getClusterUser");aq=[];fS.invalidateUser=function(e){for(let t of aq)try{t(e)}catch(r){mae.error("Error invalidating user",r)}};fS.onInvalidatedUser=function(e){aq.push(e)}});var Pe,bd=se(()=>{Pe={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var Ad,BN=se(()=>{bd();Ad=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!==Pe.ERROR&&(this.error=void 0)}markHealthy(t){this.updateStatus(Pe.HEALTHY,t||"Component is healthy")}markError(t,r){this.status=Pe.ERROR,this.error=t,this.message=r||(typeof t=="string"?t:t.message),this.lastChecked=new Date}markWarning(t){this.updateStatus(Pe.WARNING,t)}markLoading(t){this.updateStatus(Pe.LOADING,t||"Component is loading")}isHealthy(){return this.status===Pe.HEALTHY}hasError(){return this.status===Pe.ERROR}isLoading(){return this.status===Pe.LOADING}hasWarning(){return this.status===Pe.WARNING}getSummary(){let t=this.status.toUpperCase(),r=this.message?`: ${this.message}`:"";return`${t}${r}`}}});var kl,uc,FN,Id,kN,wd,HN,pS=se(()=>{kl=b(Jr()),uc=class extends Error{static{a(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=kl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},FN=class extends uc{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}.`,kl.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},Id=class extends uc{static{a(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,kl.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},kN=class extends uc{static{a(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,kl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},wd=class extends uc{static{a(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,kl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},HN=class extends uc{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,kl.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 cq,Hl,lq,dc,qp,Nd,Sae,hS,GN=se(()=>{cq=b(ds()),Hl=b(st());G();lq=b(ir());bd();pS();dc=(0,lq.loggerWithTag)("componentStatus.crossThread"),qp=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,Hl.onMessageByType)(b_.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;dc.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&&(dc.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,Hl.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,_=a(()=>{let y=this.awaitingResponses.get(r);y&&y.length>=o&&!E&&(E=!0,S(),dc.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),dc.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,_),(0,cq.sendItcEvent)({type:b_.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{_()}).catch(y=>{E=!0,S(),this.responseCheckers.delete(r),h(new Id("sendItcEvent",y))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,Hl.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 _=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${_}`,{...E,workerIndex:p.workerIndex})}return dc.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof Id?dc.error?.(`ITC failure during component status collection: ${r.message}`):dc.warn?.("Failed to collect component status from all threads:",r),dc.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,Hl.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)}},Nd=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):"",_=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=_;else if(E&&E.startsWith("worker-")){let R=parseInt(E.substring(7));isNaN(R)||(n.workers[R]=_)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==Pe.HEALTHY&&p.message&&(!i||_>s)&&(s=_,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=[Pe.ERROR,Pe.WARNING,Pe.LOADING,Pe.UNKNOWN,Pe.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return Pe.UNKNOWN}},Sae=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),hS=new qp(Sae)});var fc,ES=se(()=>{BN();bd();GN();pS();fc=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 wd(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Pe).includes(r))throw new wd(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Pe).join(", ")}`);this.statusMap.set(t,new Ad(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,Pe.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,Pe.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,Pe.WARNING,r)}initializeLoading(t,r){this.setStatus(t,Pe.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,Pe.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,Pe.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={[Pe.HEALTHY]:0,[Pe.ERROR]:0,[Pe.WARNING]:0,[Pe.LOADING]:0,[Pe.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await hS.collect(t);return Nd.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:Pe.UNKNOWN,message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}};let o=n.some(f=>f.status===Pe.ERROR),c=n.some(f=>f.status===Pe.LOADING),l=o?Pe.ERROR:c?Pe.LOADING:Pe.HEALTHY,u="All components loaded successfully",d={};if(o||c){u=n.filter(m=>m.status===Pe.ERROR||m.status===Pe.LOADING).map(m=>`${m.key}: ${m.latestMessage||m.status}`).join("; ");for(let m of n)m.status!==Pe.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 Er,_S=se(()=>{ES();Er=new fc});function dq(e){let t=uq.get(e);return t||(t=new qN(e),uq.set(e,t)),t}function fq(){Er.reset()}var qN,uq,co,mq,pq=se(()=>{_S();bd();qN=class{static{a(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return Er.setStatus(this.componentName,Pe.HEALTHY,t),this}warning(t){return Er.setStatus(this.componentName,Pe.WARNING,t),this}error(t,r){return Er.setStatus(this.componentName,Pe.ERROR,t,r),this}loading(t){return Er.setStatus(this.componentName,Pe.LOADING,t||"Loading..."),this}unknown(t){return Er.setStatus(this.componentName,Pe.UNKNOWN,t),this}get(){return Er.getStatus(this.componentName)}},uq=new Map;a(dq,"statusForComponent");co={loading(e,t){Er.initializeLoading(e,t)},loaded(e,t){Er.markLoaded(e,t)},failed(e,t,r){Er.markFailed(e,t,r)}};a(fq,"reset");mq=Pe});var $p={};ye($p,{AggregationError:()=>kN,COMPONENT_STATUS_LEVELS:()=>Pe,ComponentStatus:()=>Ad,ComponentStatusError:()=>uc,ComponentStatusOperationError:()=>wd,ComponentStatusRegistry:()=>fc,CrossThreadCollectionError:()=>HN,CrossThreadStatusCollector:()=>qp,CrossThreadTimeoutError:()=>FN,ITCError:()=>Id,StatusAggregator:()=>Nd,componentStatusRegistry:()=>Er,crossThreadCollector:()=>hS,query:()=>Tae});var Tae,hq=se(()=>{_S();ES();BN();ES();GN();_S();pS();bd();Tae={get(e){return Er.getStatus(e)},all(){return Er.getAllStatuses()},byStatus(e){return Er.getComponentsByStatus(e)},summary(){return Er.getStatusSummary()},async allThreads(){return fc.getAggregatedFromAllThreads(Er)}}});var $N={};ye($N,{STATUS:()=>mq,internal:()=>$p,lifecycle:()=>co,reset:()=>fq,statusForComponent:()=>dq});var Vp=se(()=>{pq();hq()});var Yp=M((oUe,gq)=>{"use strict";var Es=Q(),Tn=(G(),D(j)),yae=eF(),Rae=(Yn(),D(gi)),{validateEvent:VN}=ds(),Kp=ps(),bae=require("process"),{resetDatabases:Aae}=(Oe(),D(mt)),Iae={[Tn.ITC_EVENT_TYPES.SCHEMA]:wae,[Tn.ITC_EVENT_TYPES.USER]:_q,[Tn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:Cae};async function wae(e){let t=VN(e);if(t){Es.error(t);return}Es.trace("ITC schemaHandler received schema event:",e),await yae(e.message),await Nae(e.message)}a(wae,"schemaHandler");async function Nae(e){try{Kp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Kp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Kp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=Aae();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Es.error(t)}}a(Nae,"syncSchemaMetadata");var Eq=[];async function _q(e){try{try{Kp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Kp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Es.warn(r)}let t=VN(e);if(t){Es.error(t);return}Es.trace(`ITC userHandler ${Tn.HDB_ITC_CLIENT_PREFIX}${bae.pid} received user event:`,e),await Rae.setUsersWithRolesCache();for(let r of Eq)r()}catch(t){Es.error(t)}}a(_q,"userHandler");_q.addListener=function(e){Eq.push(e)};async function Cae(e){try{let t=VN(e);if(t){Es.error(t);return}Es.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Vp(),D($N)),{getWorkerIndex:n}=st(),{sendItcEvent:s}=ds(),i=r.componentStatusRegistry.getAllStatuses(),o=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:Tn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:o,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?Es.trace(`Sent component status response directly to thread ${u}`):(u===void 0?Es.debug("No originator threadId, falling back to broadcast"):Es.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){Es.error("Error handling component status request:",t)}}a(Cae,"componentStatusRequestHandler");gq.exports=Iae});var ds=M((fUe,Tq)=>{"use strict";var cUe=Q(),KN=ae(),Oae=(G(),D(j)),{ITC_ERRORS:Wp}=Jr(),{parentPort:lUe,threadId:Pae,isMainThread:Lae,workerData:uUe}=require("worker_threads"),{onMessageFromWorkers:Dae,broadcast:dUe,broadcastWithAcknowledgement:vae}=st();Tq.exports={sendItcEvent:Mae,validateEvent:Sq,SchemaEventMsg:Uae,UserEventMsg:xae};var gS;Dae(async(e,t)=>{gS=gS||Yp(),Sq(e),gS[e.type]&&await gS[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Mae(e){return!Lae&&e.message&&(e.message.originator=Pae),vae(e)}a(Mae,"sendItcEvent");function Sq(e){if(typeof e!="object")return Wp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||KN.isEmpty(e.type))return Wp.MISSING_TYPE;if(!e.hasOwnProperty("message")||KN.isEmpty(e.message))return Wp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||KN.isEmpty(e.message.originator))return Wp.MISSING_ORIGIN;if(Oae.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Wp.INVALID_EVENT(e.type)}a(Sq,"validateEvent");function Uae(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(Uae,"SchemaEventMsg");function xae(e){this.originator=e}a(xae,"UserEventMsg")});var Jo=M((hUe,Aq)=>{"use strict";var yq=(G(),D(j)),pUe=ae(),SS=Q(),Rq=xB(),Cd,{sendItcEvent:bq}=ds();function Bae(e){try{SS.debug("signalSchemaChange called with message:",e),Cd=Cd||Yp();let t=new Rq(yq.ITC_EVENT_TYPES.SCHEMA,e);return Cd.schema(t),bq(t)}catch(t){SS.error(t)}}a(Bae,"signalSchemaChange");function Fae(e){try{SS.trace("signalUserChange called with message:",e),Cd=Cd||Yp();let t=new Rq(yq.ITC_EVENT_TYPES.USER,e);return Cd.user(t),bq(t)}catch(t){SS.error(t)}}a(Fae,"signalUserChange");Aq.exports={signalSchemaChange:Bae,signalUserChange:Fae}});function jp(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 Iq(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Hs(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 Hs,zp=se(()=>{Hs=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(jp,"appendHeader");a(Iq,"mergeHeaders")});function TS(e,t,r=Hae){let n;return function(...i){return n?n.length*YN>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();YN=(YN*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var Cq,kae,Hae,wq,Gae,WN,Nq,YN,jN=se(()=>{Cq=b(ir()),kae=3e3,Hae=2e4,wq=0,Gae=3e4,WN=3e3,Nq=performance.now()+WN,YN=0;a(TS,"throttle");setInterval(()=>{let e=performance.now();e-Nq-WN>kae&&wq+Gae<e&&(Cq.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"),wq=e),Nq=e},WN).unref()});var kq={};ye(kq,{EVICTED:()=>yl,INVALIDATED:()=>kn,coerceType:()=>RS,makeTable:()=>bS});function bS(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:_,trackDeletes:R}=e;E??=0;let{attributes:S}=e;S||(S=[]);let y=NI(i,n,l),w,I,H={},X=Promise.resolve(),q,k,z;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(q=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(k=K),K.expiresAt&&(z=K),K.isPrimaryKey&&(H=K);let Y,ce=[],de=[],te=1,Se=2,Ne={},Ke={},$e=864e5,Ir=0,nr,zr,xr,Lu=!1,Qc,Bt,si,Ga=ql.get(x.REPLICATION_DATABASES);if(Array.isArray(Ga)){for(let K of Ga)if(K.name===c&&K.replicateTo>=0){si=K.replicateTo;break}}let l_=i.getRange({start:!1,end:!1}).constructor,um=10,u_=6;_&&hm(),Jm(i.env.path,K=>{if(I)return $a(K)});class dm extends Ll{static{a(this,"Updatable")}getUpdatedTime(){return tc.get(this.getRecord())?.version}getExpiresAt(){return tc.get(this.getRecord())?.expiresAt}addTo(g,T){if(typeof T=="number"||typeof T=="bigint")this.set(g,new Pp(T));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(g,T){return this.addTo(g,-T)}}class ve extends Xt{#e;#t;#n;#r;#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=_;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(g,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)g.intermediateSource=!0,this.sources.unshift(g);else{if(this.sources.some(v=>!v.intermediateSource)){if(this.sources.some(v=>v.name===g.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(g)}I=I||g.get&&(!g.get.reliesOnPrototype||g.prototype.get),w=w||g.load;let C=a(v=>{let A=this.sources;if(A=A.filter(U=>U.intermediateSource&&U[v]&&(!U[v].reliesOnPrototype||U.prototype[v])),A.length>0)if(A.length===1){let U=A[0];return(N,L,$)=>{if(N?.source!==U)return U[v](L,$,N)}}else return(U,N,L)=>{let $=[];for(let W of A){if(U?.source===W)break;$.push(W[v](N,L,U))}return Promise.all($)}},"getApplyToIntermediateSource"),P=this.sources[this.sources.length-1];P.intermediateSource&&(P={});let O=a(v=>{if(P[v]&&(!P[v].reliesOnPrototype||P.prototype[v]))return(A,U,N)=>{if(!A?.source)return P[v](U,N,A)}},"getApplyToCanonicalSource");Ne={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},Ke={put:C("put"),patch:C("patch"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")};let B=P.shouldRevalidateEvents;return(async()=>{let v=!1,A,U=a(async(N,L)=>{let $=N.value,W=N.table?Me[c][N.table]:ve;if(c===Sm&&(N.table===Bu.ROLE_TABLE_NAME||N.table===Bu.USER_TABLE_NAME)&&(v=!0),N.id===void 0&&(N.id=$[W.primaryKey],N.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(N));N.source=g;let J={residencyId:Xc(N.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:N.nodeId,async:!0},F=N.id,he=await W.getResource(F,L,J);switch(N.finished&&await N.finished,N.type){case"put":return B?he._writeInvalidate(F,$,J):he._writeUpdate(F,$,!0,J);case"patch":return B?he._writeInvalidate(F,$,J):he._writeUpdate(F,$,!1,J);case"delete":return he._writeDelete(F,J);case"publish":case"message":return he._writePublish(F,$,J);case"invalidate":return he._writeInvalidate(F,$,J);case"relocate":return he._writeRelocate(F,J);default:Fe.default.error?.("Unknown operation",N.type,N.id)}},"writeUpdate");try{let N=g.subscribe;N&&R==null&&(R=!0);let L={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},$=g.subscribeOnThisThread?g.subscribeOnThisThread((0,Gl.getWorkerIndex)(),L):(0,Gl.getWorkerIndex)()===0,W=N&&$&&await g.subscribe?.(L);if(W){let J;for await(let F of W)try{if(!(F.type==="transaction"?F.writes[0]:F)){Fe.default.error?.("Bad subscription event",F);continue}if(F.source=g,F.type==="end_txn"){J?.resolve();let _e;if(F.localTime&&A!==F.localTime&&F.remoteNodeIds?.length>0&&(_e=a(()=>{let re=[Symbol.for("seq"),F.remoteNodeIds[0]],oe=d.get(re),ge=oe?.nodes;ge||(ge=[]);for(let ie of F.remoteNodeIds.slice(1)){let Ce=ge.find(Be=>Be.id===ie);ge=ge.filter(Be=>Be.id!==ie||Be===Ce),Ce||(Ce={id:ie,seqId:0},ge.push(Ce)),Ce.seqId=Math.max(oe?.seqId??1,F.localTime),ie===J?.nodeId&&(Ce.lastTxnTime=F.timestamp)}let me=Math.max(oe?.seqId??1,F.localTime);Fe.default.trace?.("Received txn",c,me,new Date(me),F.localTime,new Date(F.localTime),F.remoteNodeIds),d.put(re,{seqId:me,nodes:ge})},"updateRecordedSequenceId"),A=F.localTime),F.onCommit){let re=J?J.committed.then(F.onCommit):F.onCommit();_e&&(re?.then?re.then(_e):_e())}else _e&&_e();continue}if(J)if(F.beginTxn)J.resolve();else{J.writePromises.push(U(F,J));continue}!F.timestamp&&F.version&&(F.timestamp=F.version);let ue=bt(F,()=>{if(F.type==="transaction"){let _e=[];for(let re of F.writes)try{_e.push(U(re,F))}catch(oe){throw oe.message+=" writing "+JSON.stringify(re)+" of event "+JSON.stringify(F),oe}return Promise.all(_e)}else if(F.type==="define_schema"){let _e=this.attributes.slice(0),re=!1;for(let oe of F.attributes)_e.find(ge=>ge.name===oe.name)||(_e.push(oe),re=!0);re&&(ze({table:s,database:c,attributes:_e,origin:"cluster"}),Qp.signalSchemaChange(new Xp.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return F.beginTxn?(J=F,J.writePromises=[U(F,F)],new Promise(_e=>{J.resolve=()=>_e(Promise.all(J.writePromises))})):U(F,F)});J&&(J.committed=ue),v&&ue&&!ue?.waitingForUserChange&&(ue.then(()=>Qp.signalUserChange(new Xp.UserEventMsg(process.pid))),ue.waitingForUserChange=!0),F.onCommit&&(ue?ue.then(F.onCommit):F.onCommit())}catch(he){Fe.default.error?.("error in subscription handler",he)}}}catch(N){Fe.default.error?.(N)}})(),this}static get isCaching(){return I}static get shouldRevalidateEvents(){return this.prototype.get!==ve.prototype.get}static getResource(g,T,C){let P=super.getResource(g,T,C);if(this.loadAsInstance===!1&&(T._freezeRecords=!0),g!=null&&this.loadAsInstance!==!1){qi(g);try{if(P.getRecord?.())return P;if(typeof g=="object"&&g&&!Array.isArray(g))throw new Error(`Invalid id ${JSON.stringify(g)}`);let O=!C?.async||i.cache?.get?.(g),B=Br(T),v=B.getReadTxn();if(v?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Mo(g,T,{transaction:v,ensureLoaded:C?.ensureLoaded},O,A=>{if(A?ve._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(g,A,T,P);if(U)return B?.disregardReadTxn(),P.#i=!0,T.loadedFromSource=!0,Gs(U,N=>(ve._updateResource(P,N),P))}return P})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(g)),O}}return P}static _updateResource(g,T){g.#r=T,g.#e=T?.value??null,g.#n=T?.version}ensureLoaded(){let g=pn(this.getId(),this.#r,this.getContext());if(g)return this.#i=!0,this.getContext().loadedFromSource=!0,Gs(g,T=>{this.#r=T,this.#e=T.value,this.#n=T.version})}static getNewId(){let g=H?.type;if(g==="String"||g==="ID")return super.getNewId();if(!Bt){let O=i.getEntry(Symbol.for("id_allocation")),B=O?.value,v;if(B&&B.nodeName===server.hostname&&(!Zae(i)||B.pid===process.pid)){let A=B.start,U=B.end;v=A;for(let N of i.getKeys({start:U,end:A,limit:1,reverse:!0}))v=N}else B=P(O?.version??null),v=B.start;Bt=new BigInt64Array([BigInt(v)+1n]),Bt=new BigInt64Array(i.getUserSharedBuffer("id",Bt.buffer)),Bt.maxSafeId=B.end}let T=Number(Atomics.add(Bt,0,1n)),C=g==="Int"?512:1048576;if(T+C>=Bt.maxSafeId){let O=a(B=>{Bt.maxSafeId=T+(g==="Int"?1023:4194303);let v=(g==="Int"?Math.pow(2,31):Math.pow(2,49))-1,A=B?void 0:i.useReadTransaction(),U=Number(Bt[0]);for(let $ of i.getKeys({start:U+1,end:v,limit:1,transaction:A}))v=$;A?.done();let{value:N,version:L}=i.getEntry(Symbol.for("id_allocation"));if(Bt.maxSafeId<v){if(N.end>Bt.maxSafeId-100)return;Fe.default.info?.("New id allocation",T,Bt.maxSafeId,L),i.put(Symbol.for("id_allocation"),{start:N.start,end:Bt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),L)}else{Fe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Bt.maxSafeId}, but id of ${v} detected`);let $=P(L);$.alreadyUpdated||Atomics.store(Bt,0,BigInt($.start+1)),Bt.maxSafeId=$.end}},"updateEnd");T+C===Bt.maxSafeId?setImmediate(O):T+100>=Bt.maxSafeId&&(Fe.default.warn?.(`Synchronous id allocation required on table ${s}${g=="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 B=(g==="Int"?Math.pow(2,31):Math.pow(2,49))-1,v=B/4,A,U,N=!1,L,$;do{L=Math.floor(Math.random()*B),$={start:L,end:L+(g==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},A=0;for(let W of i.getKeys({start:L,limit:1,reverse:!0}))A=W;U=B;for(let W of i.getKeys({start:L+1,end:B,limit:1}))U=W;v*=.875,v<1e3&&!N&&(N=!0,Fe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${g==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,L,A,U,v))}while(!(v<U-L&&(v<L-A||A===0)));return i.transactionSync(()=>{let W=i.getEntry(Symbol.for("id_allocation"));return(W?.version??null)==O?(Fe.default.info?.("Allocated new id range",$),i.put(Symbol.for("id_allocation"),$,Date.now()),$):(Fe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...W.value})})}}static setTTLExpiration(g){if(typeof g=="number")h=g*1e3,E||(E=0);else if(g&&typeof g=="object")h=g.expiration*1e3,E=(g.eviction||0)*1e3,$e=g.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");$e=$e||(h+E)/4,$a()}static getResidencyRecord(g){return d.get([Symbol.for("residency_by_id"),g])}static setResidency(g){ve.getResidency=g&&((T,C)=>{try{return g(T,C)}catch(P){throw P.message+=` in residency function for table ${s}`,P}})}static setResidencyById(g){ve.getResidencyById=g&&(T=>{try{return g(T)}catch(C){throw C.message+=` in residency function for table ${s}`,C}})}static getResidency(g,T){if(ve.getResidencyById)return ve.getResidencyById(g[t]);let C=si;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),B=Math.floor(O.length*Math.random());P.push(...O.slice(B,B+C));let v=B+C-O.length;v>0&&P.push(...O.slice(0,v))}return P}}static enableAuditing(){_||(_=!0,hm(),ve.audit=!0)}static coerceId(g){return g===""?null:RS(g,H)}static async dropTable(){delete Me[c][s];for(let g of i.getRange({versions:!0,snapshot:!1,lazy:!0}))g.metadataFlags&Zr&&g.value&&Xa(g.value);if(c===o){for(let g of S)d.remove(ve.tableName+"/"+g.name),r[g.name]?.drop();d.remove(ve.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),JN.default.unlinkSync(i.env.path);Qp.signalSchemaChange(new Xp.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(g){let T=this.constructor;if(typeof g=="string"&&T.loadAsInstance!==!1)return this.getProperty(g);if(fm(g))return this.search(g);if(g&&g.id===void 0&&!g.toString()){let C={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?ve.getRecordCount().then(P=>(C.recordCount=P.recordCount,C.estimatedRecordRange=P.estimatedRange,C)):C}if(g!==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 B=Ps(g);qi(B);let v=!0;return g.checkPermission&&(v=this.allowRead(C.user,g)),Gs(Gs(v,A=>{if(!A)throw new dt.AccessViolation(C.user);let U=!0;return Mo(B,C,{transaction:O,ensureLoaded:U},!1,N=>{if(C.onlyIfCached){if(!N?.value)throw new dt.ServerError("Entry is not cached",504)}else if(U){let L=pn(B,N,C);if(L)return P?.disregardReadTxn(),C.loadedFromSource=!0,L.then($=>$?.value)}return N?.value})}),A=>{let U=g?.select;return U&&A!=null?od(U,this.constructor)(A):A})}if(g?.property)return this.getProperty(g.property);if(this.doesExist()||g?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(g,T){let C=Dn(g,T);if(C?.read){if(C.isSuperUser)return!0;let P=C.attribute_permissions,O=T?.select;if(P?.length>0||Lu&&O){if(T||(T={}),O){let B=Array.isArray(O)?O:[O],v=P?.length>0&&zN(P,"read");T.select=B.map(A=>{let U=A.name||A;if(!v||v[U]){let N=xr[U]?.definition?.tableClass;if(N){if(A.name||(A={name:A}),!A.checkPermission&&T.checkPermission&&(A.checkPermission=T.checkPermission),!N.prototype.allowRead.call(null,g,A))return!1;if(!A.select)return A.name}return A}}).filter(Boolean)}else T.select=P.filter(B=>B.read&&!xr[B.attribute_name]).map(B=>B.attribute_name);return T}else return!0}}allowUpdate(g,T,C){let P=Dn(g,C);if(P?.update){let O=P.attribute_permissions;if(O?.length>0){let B=zN(O,"update");for(let v in T)if(!B[v])return!1;for(let v of O){let A=v.attribute_name;!v.update&&!(A in T)&&(T[A]=this.getProperty(A))}}return qa(this.getContext())}}allowCreate(g,T,C){if(this.isCollection){let P=Dn(g,C);if(P?.insert){let O=P.attribute_permissions;if(O?.length>0){let B=zN(O,"insert");for(let v in T)if(!B[v])return!1;return qa(this.getContext())}else return qa(this.getContext())}}else return this.allowUpdate(g,{})}allowDelete(g,T){return Dn(g,T)?.delete&&qa(this.getContext())}update(g,T){let C,P=typeof T=="boolean"||T===void 0&&(g==null||typeof g=="object"&&!(g instanceof URLSearchParams)),O=!1;P?(O=T,T=g,C=this.getId()):C=Ps(g);let B=this.getContext();if(!Br(B))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(g==null)throw new TypeError("Can not put a record without a target");return g.checkPermission&&(A=this.allowUpdate(B.user,T,g)),Gs(A,U=>{if(!U)throw new dt.AccessViolation(B.user);return Gs(i.get(Ps(g)),N=>{let L=new dm(N);return L._setChanges(T),this._writeUpdate(C,L.getChanges(),!1),L})})}return this._writeUpdate(C,this.#t,O),this}addTo(g,T){if(typeof T=="number"||typeof T=="bigint")this.#s===Pq?this.set(g,(+this.getProperty(g)||0)+T):(this.#s||this.update(),this.set(g,new Pp(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(g,T){if(typeof T=="number")return this.addTo(g,-T);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#r}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(g){this.#t=g}setRecord(g){this.#e=g}invalidate(g){let T=!0,C=this.getContext();return g?.checkPermission&&(T=this.allowDelete(C.user,g,C)),Gs(T,P=>{if(!P)throw new dt.AccessViolation(C.user);this._writeInvalidate(g?Ps(g):this.getId())})}_writeInvalidate(g,T,C){let P=this.getContext();qi(g),Br(this.getContext()).addWrite({key:g,store:i,invalidated:!0,entry:this.#r,before:Ne.invalidate?.bind(this,P,g),beforeIntermediate:Uu(T,Ke.invalidate?.bind(this,P,g)),commit:a((B,v)=>{if(!(Fr(B,v,C?.nodeId)<=0)){T??=null;for(let A in r)T||(T={}),T[A]===void 0&&(T[A]=this.getProperty(A));Fe.default.trace?.(`Invalidating entry in ${s} id: ${g}, timestamp: ${new Date(B).toISOString()}`),y(g,T,v,B,kn,_,{user:P?.user,residencyId:C?.residencyId,nodeId:C?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(g,T){let C=this.getContext();qi(g),Br(this.getContext()).addWrite({key:g,store:i,invalidated:!0,entry:this.#r,before:Ne.relocate?.bind(this,C,g),beforeIntermediate:Ke.relocate?.bind(this,C,g),commit:a((O,B)=>{if(Fr(O,B,T?.nodeId)<=0)return;let v=ve.getResidencyRecord(T.residencyId),A=0,U=null,N=B?.value;if(v&&!v.includes(server.hostname)){for(let L in r)U||(U={}),U[L]=N[L];A=kn}else U=N;Fe.default.trace?.(`Relocating entry id: ${g}, timestamp: ${new Date(O).toISOString()}`),y(g,U,B,O,A,_,{user:C.user,residencyId:T.residencyId,nodeId:T.nodeId,expiresAt:T.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(g,T){if(this.getResidencyById)return!1;let C={previousResidency:this.getResidencyRecord(g.residencyId),isRelocation:!0},P=Va(this.getResidency(T.value,C)),O;if(P){if(!P.includes(server.hostname))return!1;O=Xc(P)}let B=0;Fe.default.debug?.("Performing a relocate of an entry",g.key,T.value,P);let v=y(g.key,T.value,g,g.version,B,!0,{residencyId:O,expiresAt:T.expiresAt},"relocate",!1,null);return!0}static evict(g,T,C){let P=this.Source,O;if(!((I||_)&&(!T||(O=i.getEntry(g),!O||!T)||O.version!==C))){if(I){if(i.hasLock(g,O.version))return;let B;for(let v in r)B||(B={}),B[v]=T[v];if(B)return y(g,B,O,C,yl,null,null,null,!0)}return i.ifVersion(g,C,()=>{Du(g,T,null)}),Tl(i,O??i.getEntry(g),C)}}lock(){throw new Error("Not yet implemented")}static operation(g,T){return g.table||=s,g.schema||=c,global.operation(g,T)}put(g,T){if(T===void 0||T instanceof URLSearchParams)this.update(g,!0);else{let C=!0;if(g==null)throw new TypeError("Can not put a record without a target");let P=this.getContext();return g.checkPermission&&(C=this.allowUpdate(P.user,T,g)),Gs(C,O=>{if(!O)throw new dt.AccessViolation(P.user);if(Array.isArray(T))for(let B of T){let v=B[t];this._writeUpdate(v,B,!0)}else{let B=Ps(g);this._writeUpdate(B,T,!0)}})}}create(g,T){let C=!0,P=this.getContext();if(!T&&!(g instanceof URLSearchParams)&&(T=g,g=void 0),!T||typeof T!="object"||Array.isArray(T))throw new TypeError("Can not create a record without an object");return g?.checkPermission&&(C=this.allowCreate(P.user,T,g)),Gs(C,O=>{if(!O)throw new dt.AccessViolation(P.user);let B=Ps(g)??T[t];if(B===void 0)B=this.constructor.getNewId(),T[t]=B;else if(i.get(B))throw new dt.ClientError("Record already exists",409);return this._writeUpdate(B,T,!0),T})}patch(g,T){if(T===void 0||T instanceof URLSearchParams)this.update(g,!1);else{let C=this.update(g,T);if(C?.then)return C.then(()=>{})}}_writeUpdate(g,T,C,P){let O=this.getContext(),B=Br(O);qi(g);let v=this.#r??i.getEntry(g);this.#s=C?Pq:zae;let A=a(N=>C?N.put?()=>N.put(O,g,T):null:N.patch?()=>N.patch(O,g,T):N.put?()=>N.put(O,g,Dl(this)):null,"writeToSources"),U={key:g,store:i,entry:v,nodeName:O?.nodeName,validate:a(N=>{T||(T=this.#t),C||T&&Zg(this.#t===T?this:T)?O?.source||(B.checkOverloaded(),this.validate(T,!C),k&&(T[k.name]=k.type==="Date"?new Date(N):k.type==="String"?new Date(N).toISOString():N),C&&(t&&T[t]!==g&&(T[t]=g),q&&(v?.value?T[q.name]=v?.value[q.name]:T[q.name]=q.type==="Date"?new Date(N):q.type==="String"?new Date(N).toISOString():N),T=Dl(T))):B.removeWrite(U)},"validate"),before:A(Ne),beforeIntermediate:Uu(T,A(Ke)),commit:a((N,L,$)=>{if($){if(O&&L?.version>(O.lastModified||0)&&(O.lastModified=L.version),this.#r=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.#n=N;let W=L?.value,J;this.#s=0;let F=!1,he=Fr(N,L,P?.nodeId),ue,_e=C?"put":"patch",re;P?.residencyId!=null&&(re=P.residencyId);let oe=O?.expiresAt??(h?h+Date.now():-1);if(he<=0){if(_){let ie=L.localTime,Ce=L.version;Fe.default.trace?.("Applying CRDT update to record with id: ",g,"txn time",new Date(N),"applying later update from:",new Date(Ce),"local recorded time",new Date(ie));let Be=[];for(;ie>N||Ce>=N&&ie>0;){let He=l.get(ie);if(!He)break;let Te=At(He);if(Ce=Te.version,Ce>=N){if(Ce===N){if(he=Fr(N,{version:Ce,localTime:ie},P?.nodeId),he===0)return me(!1);if(he>0){ie=Te.previousLocalTime;continue}}if(Te.type==="patch")Be.push(Te),ue=T;else if(Te.type==="put"||Te.type==="delete")return me(!1)}ie=Te.previousLocalTime}ie||Fe.default.debug?.("No further audit history, applying incremental updates based on available history",g,"existing version preserved",L),Be.sort((He,Te)=>He.version-Te.version);for(let He of Be){let Te=He.getValue(i);if(Fe.default.debug?.("Rebuilding update with future patch:",new Date(He.version),Te,He),J=j_(J??T,Te,C),!J)return me(!1)}}else{if(C)return me(!1);J=j_(J??T,W,C),Fe.default.debug?.("Rebuilding update without audit:",J)}Fe.default.trace?.("Rebuilt record to save:",J," is full update:",C)}let ge;if(C&&!J?ge=T:this.constructor.loadAsInstance===!1?ge=Dl(W,J??T):(this.#e=W,ge=Dl(this,J??T)),this.#e=ge,ge&&ge.getRecord)throw new Error("Can not assign a record to a record, check for circular references");if(re==null){v?.residencyId&&(O.previousResidency=ve.getResidencyRecord(v.residencyId));let ie=Va(ve.getResidency(ge,O));if(ie&&!ie.includes(server.hostname))if(ue??=ge,F=!0,ve.getResidencyById)ge=void 0;else{ge=null;for(let Ce in r)ge||(ge={}),ge[Ce]=ue[Ce]}re=Xc(ie)}C||(ue=T),Fe.default.trace?.(`Saving record with id: ${g}, timestamp: ${new Date(N).toISOString()}${oe?", expires at: "+new Date(oe).toISOString():""}${L?", replaces entry from: "+new Date(L.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(ge).slice(0,100)}catch{return""}})()),Du(g,W,ge),me(!0),O.expiresAt&&$a();function me(ie){y(g,ie?ge:void 0,ie?L:{...L,value:void 0},N,F?kn:0,_,{omitLocalRecord:F,user:O?.user,residencyId:re,expiresAt:oe,nodeId:P?.nodeId,originatingOperation:O?.originatingOperation,tableToTrack:c==="system"?null:s},_e,!1,ie?ue:ue??T)}a(me,"writeCommit")},"commit")};B.addWrite(U)}async delete(g){if(fm(g)){g.select=["$id"];for await(let T of this.search(g))this._writeDelete(T.$id);return!0}if(g){let T=!0,C=this.getContext();return g.checkPermission&&(T=this.allowDelete(C.user,g,C)),Gs(T,P=>{if(!P)throw new dt.AccessViolation(C.user);let O=Ps(g);return this._writeDelete(O),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(g,T){let C=Br(this.getContext());qi(g);let P=this.getContext();return C.addWrite({key:g,store:i,entry:this.#r,nodeName:P?.nodeName,before:Ne.delete?.bind(this,P,g),beforeIntermediate:Ke.delete?.bind(this,P,g),commit:a((O,B,v)=>{let A=B?.value;v&&(P&&B?.version>(P.lastModified||0)&&(P.lastModified=B.version),ve._updateResource(this,B)),!(Fr(O,B,T?.nodeId)<=0)&&(Du(this.getId(),A),Fe.default.trace?.(`Deleting record with id: ${g}, txn timestamp: ${new Date(O).toISOString()}`),_||R?(y(g,null,B,O,0,_,{user:P?.user,nodeId:T?.nodeId,tableToTrack:s},"delete"),_||$a()):Tl(i,B))},"commit")}),!0}search(g){let T=this.getContext(),C=Br(T);if(!g)throw new Error("No query provided");if(g.parseError)throw g.parseError;if(g.checkPermission&&!this.allowRead(T.user,g))throw new dt.AccessViolation(T.user);T&&(T.lastModified=Kae);let P=g.conditions;P?P.length===void 0&&(P=P[Symbol.iterator]?Array.from(P):[P]):P=Array.isArray(g)?g:g[Symbol.iterator]?Array.from(g):[];let O=g.id??this.getId();O&&(P=[{attribute:null,comparator:Array.isArray(O)?"prefix":"starts_with",value:O}].concat(P));let B,v={};function A(oe,ge){let me;switch(ge){case"and":case void 0:if(oe.length<1)throw new Error('An "and" operator requires at least one condition');me=!0;break;case"or":if(oe.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ge)}for(let ie of oe){if(ie.conditions){ie.conditions=A(ie.conditions,ie.operator);continue}let Ce=ie[0]??ie.attribute,Be=Ce==null?H:Ji(S,Ce);if(Be)(Be.type||OI[ie.comparator])&&(ie[1]===void 0?ie.value=N(ie.value,Be):ie[1]=N(ie[1],Be));else if(Ce!=null&&!g.allowConditionsOnDynamicAttributes)throw(0,dt.handleHDBError)(new Error,`${Ce} is not a defined attribute`,404);if(ie.chainedConditions)if(ie.chainedConditions.length===1&&(!ie.operator||ie.operator=="and")){let He=ie.chainedConditions[0],Te,pt;if(He.comparator==="gt"||He.comparator==="greater_than"||He.comparator==="ge"||He.comparator==="greater_than_equal"?(Te=ie,pt=He):(Te=He,pt=ie),Te.comparator!=="lt"&&Te.comparator!=="less_than"&&Te.comparator!=="le"&&Te.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Nt=pt.comparator==="ge"||pt.comparator==="greater_than_equal",Ft=Te.comparator==="le"||Te.comparator==="less_than_equal";ie.comparator=(Nt?"ge":"gt")+(Ft?"le":"lt"),ie.value=[pt.value,Te.value]}else throw new Error("Multiple chained conditions are not currently supported")}return oe}a(A,"prepareConditions");function U(oe,ge){if(g.enforceExecutionOrder)return oe;for(let me of oe)me.conditions&&(me.conditions=U(me.conditions,me.operator));return oe.length>1&&ge!=="or"?qae(oe,Cg(ve)):oe}a(U,"orderConditions");function N(oe,ge){return Array.isArray(oe)?oe.map(me=>RS(me,ge)):RS(oe,ge)}a(N,"coerceTypedValues");let L=g.operator;(P.length>0||L)&&(P=A(P,L));let $=typeof g.sort=="object"&&g.sort,W;if($&&L!=="or"){let oe=$.attribute;if(oe==null)throw new dt.ClientError("Sort requires an attribute");if(B=P.find(ge=>nd(ge.attribute)===nd(oe)),!B){let ge=Ji(S,oe);if(!ge)throw(0,dt.handleHDBError)(new Error,`${Array.isArray(oe)?oe.join("."):oe} is not a defined attribute`,404);if(ge.indexed)B={...$,comparator:"sort"},P.push(B);else if(P.length===0&&!g.allowFullScan)throw(0,dt.handleHDBError)(new Error,`${Array.isArray(oe)?oe.join("."):oe} is not indexed and not combined with any other conditions`,404)}B&&(B.descending=!!$.descending)}P=U(P,L),$&&(B&&P[0]===B?$.next&&(W={dbOrderedAttribute:$.attribute,attribute:$.next.attribute,descending:$.next.descending,next:$.next.next}):(B&&P.splice(P.indexOf(B),1),W=$));let J=g.select;if(P.length===0&&(P=[{attribute:t,comparator:"greater_than",value:!0}]),g.explain)return{conditions:P,operator:L,postOrdering:W,selectApplied:!!J};let F=C.useReadTxn(),he=PI(P,L,ve,F,g,T,(oe,ge)=>pm(oe,J,T,F,ge),v),ue=g.ensureLoaded!==!1,_e=ve.transformEntryForSelect(J,T,F,v,ue,!0),re=ve.transformToOrderedSelect(he,J,W,T,F,_e);return(g.offset||g.limit!==void 0)&&(re=re.slice(g.offset,g.limit!==void 0?(g.offset||0)+g.limit:void 0)),re.onDone=()=>{re.onDone=null,C.doneReadTxn()},re.selectApplied=!0,re.getColumns=()=>{if(J){let oe=[];for(let ge of J)ge==="*"?oe.push(...S.map(me=>me.name)):oe.push(ge.name||ge);return oe}return S.filter(oe=>!oe.computed&&!oe.relationship).map(oe=>oe.name)},re}static transformToOrderedSelect(g,T,C,P,O,B){let v=new l_;if(C){g=pm(g,T,P,O,null);let A;v.iterate=function(){let N,L=g[Symbol.asyncIterator]?g[Symbol.asyncIterator]():g[Symbol.iterator](),$,W=C.dbOrderedAttribute,J,F,he=!0;function ue(re){let oe=re.next&&ue(re.next),ge=re.descending;return P.sort=re,(me,ie)=>{let Ce=vu(me,re.attribute,P),Be=vu(ie,re.attribute,P),He=ge?(0,$l.compareKeys)(Be,Ce):(0,$l.compareKeys)(Ce,Be);return He===0?oe?.(me,ie)||0:He}}a(ue,"createComparator");let _e=ue(C);return{async next(){let re;if(N)if(re=N.next(),re.done){if($)return v.onDone&&v.onDone(),re}else return{value:await B.call(this,re.value)};A=[],J&&A.push(J);do if(re=await L.next(),re.done){if($=!0,A.length)break;return v.onDone&&v.onDone(),re}else{let oe=re.value;if(oe?.then&&(oe=await oe),W){let ge=vu(oe,W,P);if(he)he=!1,F=ge;else if(ge!==F){F=ge,J=oe;break}}A.push(oe)}while(!0);return C.isGrouped,A.sort(_e),N=A[Symbol.iterator](),re=N.next(),re.done?(v.onDone&&v.onDone(),re):{value:await B.call(this,re.value)}},return(){return v.onDone&&v.onDone(),L.return()},throw(){return v.onDone&&v.onDone(),L.throw()}}};let U=a(N=>{if(typeof T=="object"&&Array.isArray(N.attribute))for(let L=0;L<T.length;L++){let $=T[L],W;if($.name===N.attribute[0]){for(W=$.sort||($.sort={});W.next;)W=W.next;W.attribute=N.attribute.slice(1),W.descending=N.descending}else $===N.attribute[0]&&(T[L]=W={name:$,sort:{attribute:N.attribute.slice(1),descending:N.descending}})}N.next&&U(N.next)},"applySortingOnSelect");U(C)}else v.iterate=(g[Symbol.asyncIterator]||g[Symbol.iterator]).bind(g),v=v.map(function(A){try{let U=B.call(this,A);return typeof U?.catch=="function"?U.catch(N=>{throw N.partialObject={[t]:A.key},N}):U}catch(U){throw U.partialObject={[t]:A.key},U}});return v}static transformEntryForSelect(g,T,C,P,O,B){let v;O&&I&&!(typeof g=="string"?[g]:g)?.every(N=>{let L;return typeof N=="object"?L=N.name:L=N,r[L]||L===t})&&(v=!0);let A,U=a(function(N){let L;if(T?.transaction?.stale&&(T.transaction.stale=!1),N!=null){if(L=N.deref?N.deref():N.value,!L&&(N.key===void 0||N.deref)||N.metadataFlags&kn){if(N.metadataFlags&kn&&T.replicateFrom===!1&&B&&N.residencyId)return pc.SKIP;if(N=Mo(N.key??N,T,{transaction:C,lazy:g?.length<4,ensureLoaded:O},this?.isSync,$=>$),N?.then)return N.then(U.bind(this));L=N?.value}if(v&&N?.metadataFlags&(kn|yl)||N?.expiresAt!=null&&N?.expiresAt<Date.now()){if(T.onlyIfCached)return{[t]:N.key,message:"This entry has expired"};let $=pn(N.key??N,N,T);if($?.then)return $.then(U)}}if(L==null)return B?pc.SKIP:L;if(g&&!(g[0]==="*"&&g.length===1)){let $,W=a((F,he)=>{let ue;typeof F=="object"?ue=F.name:ue=F;let _e=xr?.[ue],re;if(_e){let oe=P?.[ue];if(oe)if(oe.hasMappings){let me=_e.from?L[_e.from]:nd(N.key);re=oe.get(me),re||(re=[])}else re=oe.fromRecord?.(L);else re=_e(L,T,N,!0);let ge=a(me=>{if(_e.directReturn)return he(me,ue);if(me&&typeof me=="object"){let ie=_e.definition?.tableClass||ve;A||(A={});let Ce=A[ue]||(A[ue]=ie.transformEntryForSelect(ue===F?null:F.select||(Array.isArray(F)?F:null),T,C,oe,O));if(Array.isArray(me)){let Be=[],He=ie.transformToOrderedSelect(me,F.select,typeof F.sort=="object"&&F.sort,T,C,Ce)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Te=a(Nt=>{for(;!Nt.done;){if(Nt?.then)return Nt.then(Te);Be.push(Nt.value),Nt=He.next()}he(Be,ue)},"nextValue"),pt=Te(He.next());pt&&($||($=[]),$.push(pt));return}else if(me=Ce.call(this,me),me?.then){$||($=[]),$.push(me.then(Be=>he(Be,ue)));return}}he(me,ue)},"handleResolvedValue");re?.then?($||($=[]),$.push(re.then(ge))):ge(re);return}else re=L[ue],re&&typeof re=="object"&&ue!==F&&(re=ve.transformEntryForSelect(F.select||F,T,C,null)({value:re}));he(re,ue)},"selectAttribute"),J;if(typeof g=="string")W(g,F=>{J=F});else if(Array.isArray(g))if(g.asArray)J=[],g.forEach((F,he)=>{F==="*"?g[he]=L:W(F,ue=>J[he]=ue)});else{J={};let F=g.forceNulls;for(let he of g)if(he==="*")for(let ue in L)J[ue]=L[ue];else W(he,(ue,_e)=>{ue===void 0&&F&&(ue=null),J[_e]=ue})}else throw new dt.ClientError("Invalid select"+g);return $?Promise.all($).then(()=>J):J}return L},"transform");return U}async subscribe(g){if(!l)throw new Error("Can not subscribe to a table without an audit log");_||ze({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),g||(g={});let T=!g.rawEvents,C=[],P=BI(ve,this.getId()??null,function(v,A,U,N){try{let L=A.getValue?.(i,T),$=A.type;if(!L&&$==="patch"&&T){let J=i.getEntry(v);J?.version===A.version?L=J.value:L=A.getValue?.(i,!0,U),$="put"}let W={id:v,localTime:U,value:L,version:A.version,type:$,beginTxn:N};C?C.push(W):(c!=="system"&&We(A.size??1,"db-message",s,null),this.send(W))}catch(L){Fe.default.error?.(L)}},g.startTime||0,g),O=(async()=>{this.isCollection&&(P.includeDescendants=!0,g.onlyChildren&&(P.onlyChildren=!0)),g.supportsTransactions&&(P.supportsTransactions=!0);let v=this.getId(),A=g.previousCount;A>1e3&&(A=1e3);let U=g.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:N,value:L}of l.getRange({start:U,exclusiveStart:!0,snapshot:!1})){let $=At(L);if($.tableId!==n)continue;let W=$.recordId;if(v==null||Mq(v,W)){let J=$.getValue(i,T,N);if(B({id:W,localTime:N,value:J,version:$.version,type:$.type,size:$.size}),P.queue?.length>Dq&&await P.waitForDrain()===!1)return}P.startTime=N}}else if(A){let N=[];for(let{key:L,value:$}of l.getRange({start:"z",end:!1,reverse:!0}))try{let W=At($);if(W.tableId!==n)continue;let J=W.recordId;if(v==null||Mq(v,J)){let F=W.getValue(i,T,L);if(N.push({id:J,localTime:L,value:F,version:W.version,type:W.type}),--A<=0)break}}catch(W){Fe.default.error("Error getting history entry",L,W)}for(let L=N.length;L>0;)B(N[--L]);N[0]&&(P.startTime=N[0].localTime)}else if(!g.omitCurrent){for(let{key:N,value:L,version:$,localTime:W,size:J}of i.getRange({start:v??!1,end:v==null?void 0:[v,$l.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(L&&(B({id:N,localTime:W,value:L,version:$,type:"put",size:J}),P.queue?.length>Dq&&await P.waitForDrain()===!1))return}}else{A&&!U&&(U=0);let N=this.#r?.localTime;if(N===wI&&(i.cache?.delete(v),this.#r=i.getEntry(v),Fe.default.trace?.("re-retrieved record",N,this.#r?.localTime),N=this.#r?.localTime),Fe.default.trace?.("Subscription from",U,"from",v,N),U<N){let L=[],$=N;do{let W=l.get($);if(W){g.omitCurrent=!0;let J=At(W),F=J.getValue(i,T,$);T&&(J.type="put"),L.push({id:v,value:F,localTime:$,...J}),$=J.previousLocalTime}else break;A&&A--}while($>U&&A!==0);for(let W=L.length;W>0;)B(L[--W]);P.startTime=N}!g.omitCurrent&&this.doesExist()&&B({id:v,localTime:N,value:this.#e,version:this.#n,type:"put"})}for(let N of C)B(N);C=null})();function B(v){c!=="system"&&We(v.size??1,"db-message",s,null),P.send(v)}return a(B,"send"),g.listener&&P.on("data",g.listener),P}static subscribeOnThisThread(g,T){return g===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(g,T,C){if(T===void 0||T instanceof URLSearchParams)this._writePublish(this.getId(),g,T);else{let P=!0,O=this.getContext();return g.checkPermission&&(P=this.allowCreate(O.user,g,O)),Gs(P,B=>{if(!B)throw new dt.AccessViolation(O.user);let v=Ps(g);this._writePublish(v,T,C)})}}_writePublish(g,T,C){let P=Br(this.getContext());g??=null,g!==null&&qi(g);let O=this.getContext();P.addWrite({key:g,store:i,entry:this.#r,nodeName:O?.nodeName,validate:a(()=>{O?.source||(P.checkOverloaded(),this.validate(T))},"validate"),before:Ne.publish?.bind(this,O,g,T),beforeIntermediate:Uu(T,Ke.publish?.bind(this,O,g,T)),commit:a((B,v,A)=>{v===void 0&&R&&!_&&$a(),Fe.default.trace?.(`Publishing message to id: ${g}, timestamp: ${new Date(B).toISOString()}`),y(g,v?.value??null,v,v?.version||B,0,!0,{user:O?.user,residencyId:C?.residencyId,expiresAt:O?.expiresAt,nodeId:C?.nodeId,tableToTrack:s},"message",!1,T)},"commit")})}validate(g,T){let C,P=a((O,B,v)=>{if(B.type&&O!=null)if(T&&O.__op__&&(O=O.value),B.properties){typeof O!="object"&&(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be an object${B.type?" ("+B.type+")":""}`);let A=B.properties;for(let U=0,N=A.length;U<N;U++){let L=A[U];if(L.relationship||L.computed){g.hasOwnProperty(L.name)&&(C||(C=[])).push(`Computed property ${v}.${L.name} may not be directly assigned a value`);continue}let $=P(O[L.name],L,v+"."+L.name);$&&(O[L.name]=$)}if(B.sealed&&O!=null&&typeof O=="object")for(let U in O)A.find(N=>N.name===U)||(C||(C=[])).push(`Property ${U} is not allowed within object in property ${v}`)}else switch(B.type){case"Int":(typeof O!="number"||O>>0!==O)&&(C||(C=[])).push(`Value ${qs(O)} in property ${v} 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 ${qs(O)} in property ${v} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(A=>typeof A=="string")||(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be a string`);break;case"Boolean":typeof O!="boolean"&&(C||(C=[])).push(`Value ${qs(O)} in property ${v} 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 ${qs(O)} in property ${v} 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 ${qs(O)} in property ${v} must be a bigint`)}break;case"Bytes":if(!(O instanceof Uint8Array)){if(typeof O=="string")return Buffer.from(O);(C||(C=[])).push(`Value ${qs(O)} in property ${v} 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 ${qs(O)} in property ${v} must be a Blob`)}break;case"array":if(Array.isArray(O)){if(B.elements)for(let A=0,U=O.length;A<U;A++){let N=O[A],L=P(N,B.elements,v+"[*]");L&&(O[A]=L)}}else(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be an Array`);break}B.nullable===!1&&O==null&&(C||(C=[])).push(`Property ${v} is required (and not does not allow null values)`)},"validateValue");for(let O=0,B=S.length;O<B;O++){let v=S[O];if(v.relationship||v.computed){Object.hasOwn(g,v.name)&&(C||(C=[])).push(`Computed property ${v.name} may not be directly assigned a value`);continue}if(!T||v.name in g){let A=P(g[v.name],v,v.name);A!==void 0&&(g[v.name]=A)}}if(f)for(let O in g)S.find(B=>B.name===O)||(C||(C=[])).push(`Property ${O} is not allowed`);if(C)throw new dt.ClientError(C.join(". "))}getUpdatedTime(){return this.#n}wasLoadedFromSource(){return I?!!this.#i:void 0}static async addAttributes(g){let T=S.slice(0);for(let C of g){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");$ae(C.name),T.push(C)}return ze({table:s,database:c,schemaDefined:u,attributes:T}),ve.indexingOperation}static async removeAttributes(g){let T=S.filter(C=>!g.includes(C.name));return ze({table:s,database:c,schemaDefined:u,attributes:T}),ve.indexingOperation}static getSize(){let g=i.getStats();return(g.treeBranchPageCount+g.treeLeafPageCount+g.overflowPages)*g.pageSize}static getAuditSize(){let g=l?.getStats();return g&&(g.treeBranchPageCount+g.treeLeafPageCount+g.overflowPages)*g.pageSize}static getStorageStats(){let g=i.env.path,T=JN.default.statfsSync?.(g)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(g){let T=i.getStats().entryCount,C=1e3/2,P=performance.now(),O=Math.floor(T/2),B=g?.exactCount,v=0,A=0,U;for(let{value:N}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(N!=null&&v++,A++,await mc(),!B&&A<O&&performance.now()-P>C){U=A;break}if(U){let N=v;v=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:U,snapshot:!1}))re!=null&&v++,await mc();let L=U*2,$=(v+N)/L,W=Math.pow((v-N+1)/U/2,2)+$*(1-$)/L,J=Math.max(Math.sqrt(W)*T,1),F=Math.round($*T),he=Math.max(F-1.96*J,v+N),ue=Math.min(F+1.96*J,T),_e=Math.pow(10,Math.round(Math.log10(J)));return _e>F&&(_e=_e/10),v=Math.round(F/_e)*_e,{recordCount:v,estimatedRange:[Math.round(he),Math.round(ue)]}}return{recordCount:v}}static updatedAttributes(){xr=this.propertyResolvers={$id:a((g,T,C)=>({value:C.key}),"$id"),$updatedtime:a((g,T,C)=>C.version,"$updatedtime"),$updatedTime:a((g,T,C)=>C.version,"$updatedTime"),$expiresAt:a((g,T,C)=>C.expiresAt,"$expiresAt"),$record:a((g,T,C)=>C?{value:g}:g,"$record"),$distance:a((g,T,C)=>C&&(C.distance??T?.vectorDistances?.get(C)),"$distance")};for(let g of this.attributes){g.isPrimaryKey&&(H=g),g.resolve=null;let T=g.relationship,C=g.computed;if(T)if(g.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)"),Lu=!0,T.to)g.elements?.definition?(xr[g.name]=g.resolve=(P,O,B,v)=>{let A=P[T.from?T.from:t],U=g.elements.definition.tableClass;return v?rd({attribute:T.to,value:A},Br(O).getReadTxn(),!1,U,!1).map(N=>N&&N.key!==void 0?N:U.primaryStore.getEntry(N,{transaction:Br(O).getReadTxn()})).asArray:U.search([{attribute:T.to,value:A}],O).asArray},g.set=()=>{},g.resolve.definition=g.elements.definition,g.resolve.to=T.to,T.from&&(g.resolve.from=T.from)):console.error(`The one-to-many/many-to-many relationship property "${g.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(T.from){let P=g.definition||g.elements?.definition;P?(xr[g.name]=g.resolve=(O,B,v,A)=>{let U=O[T.from];if(U===void 0)return;if(g.elements){let L,$=U?.map(W=>{let J=P.tableClass.primaryStore[A?"getEntry":"get"](W,{transaction:Br(B).getReadTxn()});return J?.then&&(L=!0),ve.loadAsInstance===!1&&Object.freeze(A?J?.value:J),J});return T.filterMissing?L?Promise.all($).then(W=>W.filter(Uq)):$.filter(Uq):L?Promise.all($):$}let N=P.tableClass.primaryStore[A?"getEntry":"get"](U,{transaction:Br(B).getReadTxn()});return ve.loadAsInstance===!1&&Object.freeze(A?N?.value:N),N},g.set=(O,B)=>{if(Array.isArray(B)){let v=B.map(A=>A.getId?.()||A[P.tableClass.primaryKey]);O[T.from]=v}else{let v=B.getId?.()||B[P.tableClass.primaryKey];O[T.from]=v}},g.resolve.definition=g.definition||g.elements?.definition,g.resolve.from=T.from):console.error(`The relationship property "${g.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${g.name}" in table "${s}" must use either "from" or "to" arguments`);else if(C)typeof C.from=="function"&&this.setComputedAttribute(g.name,C.from),xr[g.name]=g.resolve=(P,O,B)=>{let v=typeof C.from=="string"?P[C.from]:P,A=this.userResolvers[g.name];if(A)return A(v,O,B);Fe.default.warn(`Computed attribute "${g.name}" does not have a function assigned to it. Please use setComputedAttribute('${g.name}', resolver) to assign a resolver function.`),this.userResolvers[g.name]=()=>{}},g.resolve.directReturn=!0;else if(r[g.name]?.customIndex?.propertyResolver){let P=r[g.name].customIndex;xr[g.name]=(O,B,v)=>{let A=O[g.name];return P.propertyResolver(A,B,v)},xr[g.name].directReturn=!0}}Lp(this,this),Lp(dm,this,!0);for(let g of S){let T=g.name;g.resolve&&(Object.defineProperty(i.encoder.structPrototype,T,{get(){return g.resolve(this,id.getStore())},set(C){return g.set(this,C)},configurable:!0,enumerable:g.enumerable}),g.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(g,T){let C=Ji(S,g);if(!C){console.error(`The attribute "${g}" does not exist in the table "${s}"`);return}if(!C.computed){console.error(`The attribute "${g}" is not defined as computed in the table "${s}"`);return}this.userResolvers[g]=T}static async deleteHistory(g=0,T=!1){let C;for(let{key:P,value:O}of l.getRange({start:0,end:g}))await mc(),At(O).tableId===n&&(C=mg(l,P,O));if(T)for(let P of i.getRange({start:0,versions:!0})){let{key:O,value:B,localTime:v}=P;await mc(),B===null&&v<g&&(C=Tl(i,P))}await C}static async*getHistory(g=0,T=1/0){for(let{key:C,value:P}of l.getRange({start:g||1,end:T})){await mc();let O=At(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(g){let T=[];if(g==null)throw new Error("An id is required");let C=i.getEntry(g);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 mc();let B=l.get(P);if(B){let v=At(B);T.push({id:v.recordId,localTime:P,version:v.version,type:v.type,value:v.getValue(i,!0,P),user:v.user}),P=v.previousLocalTime}else break}while(O<1e3&&P);return T.reverse()}static cleanup(){Y?.remove()}}let d_=TS(async(K,g,T)=>{for(let C of ve.sources)if(C.get&&(!C.get.reliesOnPrototype||C.prototype.get)){if(C.available?.(T)===!1)continue;g.source=C;let P=await C.get(K,g);if(P)return P}},()=>{throw new dt.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});ve.updatedAttributes();let zb=ve.prototype;return h&&ve.setTTLExpiration(h/1e3),z&&f_(),ve;function Du(K,g,T){let C;for(let P in r){let O=r[P],B=O.isIndexing,v=xr[P],A=T&&(v?v(T):T[P]),U=g&&(v?v(g):g[P]);if(A===U&&!B)continue;if(O.customIndex){O.customIndex.index(K,A,U);continue}C=!0;let N=O.indexNulls,L=(0,Jp.getIndexedValues)(A,N),$=(0,Jp.getIndexedValues)(U,N);if($?.length>0){let W=new Set($);if(L=L?L.filter(J=>{if(W.has(J))W.delete(J);else return!0}):[],$=Array.from(W),($.length>0||L.length>0)&&Oq){let J=$.concat(L).map(F=>({key:F,value:K}));O.prefetch(J,vq)}for(let J=0,F=$.length;J<F;J++)O.remove($[J],K)}else L?.length>0&&Oq&&O.prefetch(L.map(W=>({key:W,value:K})),vq);if(L)for(let W=0,J=L.length;W<J;W++)O.put(L[W],K)}return C}a(Du,"updateIndices");function qi(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>Lq)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,$l.writeKey)(K,Jae,0)>Lq)throw new Error("Primary key size is too large: "+K.length);return!0}a(qi,"checkValidId");function Ps(K){return typeof K=="object"&&K?K.id:K}a(Ps,"requestTargetToId");function fm(K){return typeof K=="object"&&K&&K.isCollection}a(fm,"isSearchTarget");function mm(K){}a(mm,"isRequestTarget");function Mo(K,g,T,C,P){if(ve.getResidencyById&&T.ensureLoaded&&g?.replicateFrom!==!1){let B=Va(ve.getResidencyById(K));if(B&&!B.includes(server.hostname)&&w)return w({key:K,residency:B}).then(P)}let O=a(()=>{if(g?.transaction?.stale&&(g.transaction.stale=!1),T.transaction?.isDone)return P(null,K);let B=i.getEntry(K,T);return(c!=="system"||s==="hdb_analytics")&&(Fq.default.trace?.("Recording db-read action for",`${c}.${s}`),We(B?.size??1,"db-read",s,null)),g?._freezeRecords&&Object.freeze(B?.value),B?.residencyId&&B.metadataFlags&kn&&w&&T.ensureLoaded&&g?.replicateFrom!==!1?w(B).then(v=>P(v,K),v=>(Fe.default.error?.("Error loading remote record",K,B,T,v),P(null,K))):(B&&g&&(B?.version>(g.lastModified||0)&&(g.lastModified=B.version),B?.localTime&&!g.lastRefreshed&&(g.lastRefreshed=B.localTime)),P(B,K))},"whenPrefetched");return C?O():te>0?(te--,O()):new Promise((B,v)=>{te===0?(te--,i.prefetch([K],()=>{A(),U()})):(ce.push(K),de.push(U),ce.length>u_&&(te--,A()));function A(){if(ce.length>0){let N=de;i.prefetch(ce,()=>{te===-1?A():te++;for(let L of N)L()}),ce=[],de=[],Se>2&&Se--}else te=Se,Se<um&&Se++}a(A,"prefetch");function U(){try{B(O())}catch(N){v(N)}}a(U,"load")})}a(Mo,"loadLocalRecord");function Dn(K,g){let T=g?.checkPermission;if(typeof T!="object"){if(!K?.role)return;T=K.role.permission}if(T.super_user)return Qae;let C=T[c],P,O=C?.tables;if(O)return O[s];if(c==="data"&&(P=T[s])&&!P.tables)return P}a(Dn,"getTablePermissions");function pn(K,g,T,C){if(I){let P=!1;if(T.noCache?P=!0:(g?(!g.value||g.metadataFlags&(kn|yl)||g.expiresAt!=null&&g.expiresAt<Date.now())&&(P=!0):P=!0,tn(!P,"cache-hit",s)),P){let O=Mu(K,g,T).then(B=>(B?.value&&B?.value.getRecord?.()&&Fe.default.error?.("Can not assign a record that is already a resource"),T&&(B?.version>(T.lastModified||0)&&(T.lastModified=B.version),T.lastRefreshed=Date.now()),B));if(T?.onlyIfCached||g?.value&&C?.allowStaleWhileRevalidate?.(g,K)){if(O.catch(B=>Fe.default.warn?.(B)),T?.onlyIfCached&&!C.doesExist())throw new dt.ServerError("Entry is not cached",504);return}else return O}}else if(g?.value&&g.expiresAt!=null&&g.expiresAt<Date.now())return ve.evict(g.key,g.value,g.version),g.value=null,{then(P){return P(g)}}}a(pn,"ensureLoadedFromSource");function Br(K){let g=K?.transaction;if(g){if(!g.lmdbDb)return g.lmdbDb=i,g;do{if(g.lmdbDb?.path===i.path)return g;let T=g.next;if(!T)return g=g.next=new Bo,g.lmdbDb=i,g;g=T}while(!0)}else return new K_}a(Br,"txnForContext");function vu(K,g,T){if(!K)return;let C=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof g=="object"){let O=xr,B=C;for(let v=0,A=g.length;v<A;v++){let U=g[v],N=O?.[U];B=N&&B?N(B,T,K):B?.[U],K=null,O=N?.definition?.tableClass?.propertyResolvers}return B}let P=xr[g];return P?P(C,T,K):C[g]}a(vu,"getAttributeValue");function pm(K,g,T,C,P){let O=P?.length,B={transaction:C,lazy:O>0||typeof g=="string"||g?.length<4,alwaysPrefetch:!0},v;function A(U,N){let L=U?.value;if(!L)return pc.SKIP;for(let $=0;$<O;$++)if(!v?.includes($)&&!P[$](L,U))return pc.SKIP;return N!==void 0&&(U.key=N),U}if(a(A,"processEntry"),O>0||!K.hasEntries){let U=K.map(N=>{if(v=null,typeof N=="object"&&N?.key!==void 0)return O>0?A(N):N;if(N==null)return pc.SKIP;for(let L=0;L<O;L++){let W=P[L].idFilter;if(W){if(!W(N))return pc.SKIP;v||(v=[]),v.push(L)}}return Mo(N,T,B,!1,A)});return Array.isArray(K)&&(U=U.filter(N=>N!==pc.SKIP)),U.hasEntries=!0,U}return K}a(pm,"transformToEntries");function Fr(K,g,T=server.replication?.getThisNodeId(l)){if(K<=g?.version){if(g?.version===K&&T!==void 0){let C=server.replication?.exportIdMapping(l),P=g.localTime,O=P&&l.get(P);if(O){let B,v,A=At(O);for(let U in C)C[U]===T&&(B=U),C[U]===A.nodeId&&(v=U);if(B>v)return 1;if(B===v)return 0}}return-1}return 1}a(Fr,"precedesExistingVersion");async function Mu(K,g,T){let C=g?.metadataFlags,P=g?.version,O,B;if(!i.attemptLock(K,P,()=>{clearTimeout(B);let N=i.getEntry(K);!N||!N.value||N.metadataFlags&(kn|yl)?O(Mu(K,i.getEntry(K),T)):O(N)}))return new Promise(N=>{O=N,B=setTimeout(()=>{i.unlock(K,P)},jae)});let v=g?.value,A={requestContext:T,replacingRecord:v,replacingEntry:g,replacingVersion:P,noCacheStore:!1,source:null,resourceCache:T?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},U=T?.responseHeaders;return new Promise((N,L)=>{let $;Gs(bt(A,async W=>{let J=performance.now(),F,he,ue;try{F=await d_(K,A,g),ue=C&kn;let re=A.lastModified||ue&&P;re||(re=(0,Jp.getNextMonotonicTime)()),he=ue||re>P||!v;let oe=performance.now()-J;if(We(oe,"cache-resolution",s,null,"success"),U&&jp(U,"Server-Timing",`cache-resolve;dur=${oe.toFixed(2)}`,!0),W.timestamp=re,h&&A.expiresAt==null&&(A.expiresAt=Date.now()+h),F){if(typeof F!="object")throw new Error("Only objects can be cached and stored in tables");if(F.status>0&&F.headers)if(F.status>=300)if(F.status===304)F=v,re=P;else throw new dt.ServerError(F.body||"Error from source",F.status);else F=F.body;typeof F.toJSON=="function"&&(F=F.toJSON()),t&&F[t]!==K&&(F[t]=K)}$=!0,N({key:K,version:re,value:F})}catch(re){re.message+=` while resolving record ${K} for ${s}`,v&&((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))?(N({key:K,version:P,value:v}),Fe.default.trace?.(re.message,"(returned stale record)")):L(re);let oe=performance.now()-J;We(oe,"cache-resolution",s,null,"fail"),U&&jp(U,"Server-Timing",`cache-resolve;dur=${oe.toFixed(2)}`,!0),A.transaction.abort();return}if(T?.noCacheStore||A.noCacheStore){A.transaction.abort();return}Br(A).addWrite({key:K,store:i,entry:g,nodeName:"source",before:Uu(F),commit:a((re,oe)=>{if(oe?.version!==P)return;let ge=Du(K,v,F);if(F){Ke.put?.(A,K,F),oe&&(T.previousResidency=ve.getResidencyRecord(oe.residencyId));let me,ie=!1,Ce,Be=Va(ve.getResidency(F,T));if(Be){if(!Be.includes(server.hostname))if(me=F,ie=!0,ve.getResidencyById)F=void 0;else{F=null;for(let He in r)F||(F={}),F[He]=me[He]}Ce=Xc(Be)}Fe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),y(K,F,oe,re,ie?kn:0,_&&(he||ie)||null,{user:A?.user,expiresAt:A.expiresAt,residencyId:Ce,tableToTrack:s},"put",!!ue,me)}else oe&&(Ke.delete?.(A,K),Fe.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),_||R?y(K,null,oe,re,0,_&&he||null,{user:A?.user,tableToTrack:s},"delete",!!ue):Tl(i,oe,P))},"commit")})}),()=>{i.unlock(K,P)},W=>{i.unlock(K,P),$&&Fe.default.error?.("Error committing cache update",W)})})}a(Mu,"getFromSource");function qa(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(qa,"checkContextPermissions");function $a(K){let g=!1;if(K&&(K-Ir>1&&(g=!0),Ir=K),!($e===nr&&!g)&&(nr=$e,(0,Gl.getWorkerIndex)()===(0,Gl.getWorkerCount)()-1))return zr&&clearTimeout(zr),$e?new Promise(T=>{let C=new Date;C.setMonth(0),C.setDate(1),C.setHours(0),C.setMinutes(0),C.setSeconds(0);let P=$e/(1+Ir),O=g?Date.now():Math.ceil((Date.now()-C.getTime())/P)*P+C.getTime(),B=a(v=>{Fe.default.trace?.(`Scheduled next cleanup scan at ${new Date(v)}`),zr=setTimeout(()=>X=X.then(async()=>{if(B(Math.max(v+$e,Date.now())),i.rootStore.status!=="open"){clearTimeout(zr);return}let A=50,U=new Array(A),N=0,L=Math.pow(Ir,8)*(ql.get(x.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),$=E/Math.pow(Math.max(Ir,1),4);Fe.default.debug?.(`Starting cleanup scan for ${s}, evict threshold ${L}, adjusted eviction ${$}ms`);function W(J,F,he,ue){let _e=J+$-Date.now();if(_e<0)return!0;if(Ir){let re=i.lastSize;return he&Zr&&ll(ue,oe=>{oe.size&&(re+=oe.size)}),Fe.default.trace?.(`shouldEvict adjusted ${_e} ${re}, ${_e*(J-F)/re} < ${L}`),_e*(J-F)/re<L}return!1}a(W,"shouldEvict");try{let J=0;for(let F of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:he,value:ue,version:_e,expiresAt:re,metadataFlags:oe}=F,ge;ue===null&&!_&&_e+Wae<Date.now()?ge=Tl(i,F,_e):re!=null&&W(re,_e,oe,ue)&&(ge=ve.evict(he,ue,_e),J++),ge&&(await U[N],U[N]=ge.catch(me=>{Fe.default.error?.("Cleanup error",me)}),++N>=A&&(N=0)),await mc()}Fe.default.debug?.(`Finished cleanup scan for ${s}, evicted ${J} entries`)}catch(J){Fe.default.warn?.(`Error in cleanup scan for ${s}:`,J)}T(void 0),Ir=0}),Math.min(v-Date.now(),2147483647)).unref()},"startNextTimer");B(O)}):void 0}a($a,"scheduleCleanup");function hm(){Y=l?.addDeleteRemovalCallback(n,i,(K,g)=>{i.remove(K,g)})}a(hm,"addDeleteRemoval");function f_(){(0,Gl.getWorkerIndex)()===0&&setInterval(async()=>{if(!Qc){Qc=!0;try{let K=z.name,g=r[K];if(!g)throw new Error(`expiresAt attribute ${z} must be indexed`);for(let T of g.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let C of g.getValues(T)){let P=i.getEntry(C);P?.value?P.value[K]<Date.now()&&ve.evict(C,P.value,P.version):i.ifVersion(C,P?.version,()=>g.remove(T,C))}await mc()}}catch(K){Fe.default.error?.("Error in evicting old records",K)}finally{Qc=!1}}},Yae).unref()}a(f_,"runRecordExpirationEviction");function Va(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 g=server.shards?.get?.(K);if(g)return Fe.default.trace?.(`Shard ${K} mapped to ${g.map(T=>T.name).join(", ")}`),g.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(Va,"residencyFromFunction");function Xc(K){if(K){let g=K.join(","),T=d.get([Symbol.for("residency_by_set"),g]);return T||(d.put([Symbol.for("residency_by_set"),g],T=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),T],K),T)}}a(Xc,"getResidencyId");function Uu(K,g){let T=JA(K,i.rootStore);if(T){let C=g;return C?async()=>{await C(),await T}:()=>T}return g}a(Uu,"preCommitBlobsForRecordBefore")}function zN(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 vq(){}function RS(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 yS(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return yS(+e);case"Float":return e==="null"?null:yS(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return(0,Od.autoCastBooleanStrict)(e);case"Date":if(isNaN(e)){if(e==="null")return null;Xae.test(e)||(e+="Z");let n=new Date(e);return yS(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,Od.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function yS(e){if(isNaN(e))throw new SyntaxError;return e}function Mq(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 Uq(e){return e!=null}function qs(e){try{return JSON.stringify(e)}catch{return e}}function Zae(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var pc,Jp,xq,Bq,ql,dt,Qp,Xp,Fe,$l,Gl,Od,JN,Fq,qae,$ae,Vae,Kae,Yae,Wae,Oq,jae,Pq,zae,kn,yl,Jae,Lq,Dq,Qae,BUe,Xae,mc,Lg=se(()=>{G();pc=require("lmdb"),Jp=b(xn()),xq=b(require("lodash")),Bq=b(Bm());Qi();km();ql=b(fe());FI();dt=b(Ee()),Qp=b(Jo()),Xp=b(ds());Oe();Pg();Fe=b(ir());Yw();Ja();$l=require("ordered-binary"),Gl=b(st());Ki();Od=b(ae());El();as();z_();zp();JN=b(require("node:fs"));os();lg();Fq=b(Q());jN();({sortBy:qae}=xq.default),{validateAttribute:$ae}=Bq.default,Vae=new Uint8Array(9);Vae[8]=192;Kae=1/0,Yae=6e4,Wae=864e5;ql.initSync();Oq=ql.get(x.STORAGE_PREFETCHWRITES),jae=1e4,Pq=1,zae=2,kn=1,yl=8,Jae=Buffer.allocUnsafeSlow(8192),Lq=1978,Dq=100,Qae={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},BUe=(0,Od.convertToMS)(ql.get(x.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(bS,"makeTable");a(zN,"attributesAsObject");a(vq,"noop");Xae=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(RS,"coerceType");a(yS,"rejectNaN");a(Mq,"isDescendantId");mc=a(()=>new Promise(setImmediate),"rest");a(Gs,"when");a(Uq,"exists");a(qs,"stringify");a(Zae,"hasOtherProcesses")});function AS(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 IS(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 Hq=se(()=>{a(AS,"euclideanDistance");a(IS,"cosineDistance")});var Gq,qq,Ld,lo,Pd,ece,tce,wS,$q=se(()=>{Hq();Gq=require("msgpackr"),qq=b(ir()),Ld=b(Ee()),lo=(0,qq.loggerWithTag)("HNSW"),Pd=Symbol.for("entryPoint"),ece=Symbol.for("key"),tce=10,wS=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=Gq.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?AS:IS,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"?[ece,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(Pd);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f==null){let E=Math.floor(-Math.log(Math.random())*this.mL),_={vector:r,level:E,primaryKey:t};for(let R=0;R<=E;R++)_[R]=[];if(this.indexStore.put(i,_),typeof i!="number")throw new Error("Invalid nodeId: "+i);lo.debug?.("setting entry point to",i),this.indexStore.put(Pd,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),tce),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(Pd,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 _=this.searchLayer(r,l,f,this.efConstruction,E);_=_.slice(0,this.M<<1),_.length===0&&E===0&&lo.info?.("should not have zero connections for",l);let R=h[E];for(let S=0;S<_.length;S++){let{id:y,distance:w,node:I}=_[S];if(y===i)continue;let H=[];if(this.optimizeRouting){let k=!1,z=I[E],Y=1+this.optimizeRouting*(1+.5*S/this.M);for(let ce=0;ce<z?.length;ce++){let{id:de,distance:te}=z[ce],Se=1+this.optimizeRouting*(1+.5*ce/this.M);for(let Ne=0;Ne<R.length;Ne++){let{id:Ke,distance:$e}=R[Ne];if(Ke===de){w*Y>$e+te?k=!0:te*Se>w+$e&&(H.push({fromId:Ke,toId:y}),H.push({fromId:y,toId:Ke}));break}}if(k)break}if(k)continue}else if(S>=(E>0?this.M:this.M<<1))continue;R.push({id:y,distance:w});for(let{fromId:k,toId:z}of H){let Y=d(k);Y||(Y=d(k,this.indexStore.get(k)));for(let ce=0;ce<Y[E].length;ce++)if(Y[E][ce].id===z){Object.isFrozen(Y[E])&&(Y[E]=Y[E].slice()),Y[E].splice(ce,1);break}}let X=c[E],q=X?.find(({id:k})=>k===y);if(q){let k=X?.indexOf(q);X.copied||(X=[...X],X.copied=!0,c[E]=X),X.splice(k,1)}else this.addConnection(y,d(y,I),i,E,w,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(Pd);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);lo.debug?.("setting entry point to",l),this.indexStore.put(Pd,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));if(h)for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:_})=>_!==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(Pd);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 _={id:p,distance:E,node:h};l.push(_),u.push(_)}}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 Ld.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new Ld.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=IS;else if(s==="euclidean")c=AS;else{if(s)throw new Ld.ClientError("Unknown distance function");c=this.distance}if(!t)throw new Ld.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new Ld.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.debug?.("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"?AS:IS);let c=o(s.target,t);return i.set(n,c),c}return t}}});var QN,Vq=se(()=>{$q();QN={HNSW:wS}});var mt={};ye(mt,{NON_REPLICATING_SYSTEM_TABLES:()=>NS,database:()=>_d,databaseEnvs:()=>ta,databases:()=>Me,dropDatabase:()=>Qw,dropTableMeta:()=>ace,getDatabases:()=>lt,getDefaultCompression:()=>MS,getTables:()=>nce,onRemovedDB:()=>ih,onUpdatedTable:()=>Vl,readMetaDb:()=>Zp,resetDatabases:()=>xd,table:()=>ze,tables:()=>yn});function sh(e,t){let r=DS.OpenDBIObject??DS.default.OpenDBIObject;return new r(e,t)}function nce(){return LS||lt(),yn||{}}function lt(){if(LS)return Me;LS=!0,Md=new Map;let e=(0,Zt.getHdbBasePath)()&&(0,Ht.join)((0,Zt.getHdbBasePath)(),tl),t=(0,Zt.get)(x.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Zt.get)(x.STORAGE_PATH)||e&&((0,_s.existsSync)(e)?e:(0,Ht.join)((0,Zt.getHdbBasePath)(),T_)),!!e){if((0,_s.existsSync)(e))for(let r of(0,_s.readdirSync)(e,{withFileTypes:!0})){let n=(0,Ht.basename)(r.name,".mdb");r.isFile()&&(0,Ht.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Zp((0,Ht.join)(e,r.name),null,n)}if((0,_s.existsSync)((0,vd.getBaseSchemaPath)())){for(let r of(0,_s.readdirSync)((0,vd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Ht.join)((0,vd.getBaseSchemaPath)(),r.name),s=(0,Ht.join)((0,vd.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,_s.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Ht.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Ht.join)(s,i.name);Zp((0,Ht.join)(n,i.name),(0,Ht.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,_s.existsSync)(s))for(let o of(0,_s.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,Ht.extname)(o.name).toLowerCase()===".mdb"&&Zp((0,Ht.join)(s,o.name),(0,Ht.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,Ht.join)(c.path,(0,Ht.basename)(o+".mdb"));(0,_s.existsSync)(l)&&Zp(l,o,r,null,!0)}}for(let r in Me){let n=Md.get(r);if(n){let s=Me[r];r.includes("delete")&&Cr.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Cr.trace(`delete table class ${i}`),delete s[i])}else if(delete Me[r],r==="data"){for(let s in yn)delete yn[s];delete yn[vS]}}if((0,Zt.get)(x.ANALYTICS_REPLICATE)===!1?NS.includes("hdb_analytics")||NS.push("hdb_analytics"):(Me.system?.hdb_analytics?.enableAuditing(),Me.system?.hdb_analytics_hostname?.enableAuditing()),Me.system)for(let r of NS)Me.system[r]&&(Me.system[r].replicate=!1);return Md=null,Me}}function xd(){LS=!1;for(let[,e]of ta)e.needsDeletion=!0;lt();for(let[e,t]of ta)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),ta.delete(e);let r=Me[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete Me[t.databaseName],th.forEach(i=>i(t.databaseName));break}}return Me}function Zp(e,t,r=eC,n,s){let i=new XN.default(e,!1);try{let o=ta.get(e);o?o.needsDeletion=!1:(o=(0,Ud.open)(i),ta.set(e,o));let c=new sh(!1),l=o.dbisDb||(o.dbisDb=o.openDB(CS.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,_s.existsSync)(n)&&(i.path=n,u=(0,Ud.open)(i),u.isLegacy=!0):u=fg(o));let d=zq(r),f=d[vS],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,_]=p.toString().split("/");_===""?_=h.name:_||(_=E,E=t,h.name||(h.name=_,h.indexed=!h.is_hash_attribute)),f?.add(E);let R=m.get(E);R||m.set(E,R={attributes:[]}),(_==null||h.is_hash_attribute)&&(R.primary=h),_!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:_}=h;if(!_){for(let te of E)if(te.is_hash_attribute||te.isPrimaryKey){_=te;break}if(!_){Cr.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let R=d[p],S={},y=[],w,I,H=typeof _.audit=="boolean"?_.audit:(0,Zt.get)(x.LOGGING_AUDITLOG),X=_.trackDeletes,q=_.expiration,k=_.eviction,z=_.sealed,Y=_.splitSegments,ce=_.replicate;if(R)S=R.indices,y=R.attributes,R.schemaVersion++;else{w=_.tableId,w?w>=(l.get(Dd)||0)&&(l.putSync(Dd,w+1),Cr.info(`Updating next table id (it was out of sync) to ${w+1} for ${p}`)):(_.tableId=w=l.get(Dd),w||(w=1),Cr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(Dd,w+1),l.putSync(_.key,_));let te=new sh(!_.is_hash_attribute,_.is_hash_attribute);if(te.compression=_.compression,te.compression){let Se=(0,Zt.get)(x.STORAGE_COMPRESSION_THRESHOLD)||jq;te.compression.threshold=Se}I=wg(o.openDB(_.key,te),o),o.databaseName=r,I.tableId=w}let de;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 Ne=Qq(te.key,o,te);S[te.name]=Ne,S[te.name].indexNulls=te.indexNulls}let Se=y.find(Ne=>Ne.name===te.name);Se?y.splice(y.indexOf(Se),1,te):y.push(te),de=!0}}catch(Se){Cr.error("Error trying to update attribute",te,y,S,Se)}}for(let te of y)if(!E.find(Ne=>Ne.name===te.name)){if(te.is_hash_attribute){Cr.error("Unable to remove existing primary key attribute",te);continue}te.indexed&&(y.splice(y.indexOf(te),1),de=!0)}if(R)de&&(R.schemaVersion++,R.updatedAttributes());else{R=Jq(d,p,bS({primaryStore:I,auditStore:u,audit:H,sealed:z,splitSegments:Y,replicate:ce,expirationMS:q&&q*1e3,evictionMS:k&&k*1e3,trackDeletes:X,tableName:p,tableId:w,primaryKey:_.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:_.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let te of eh)te(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function zq(e){let t=Me[e];if(t||(e==="data"?t=Me[e]=yn:e==="system"?Object.defineProperty(Me,"system",{value:t=Object.create(null),configurable:!0}):t=Me[e]=Object.create(null)),Md&&!Md.has(e)){let r=new Set;t[vS]=r,Md.set(e,r)}return t}function Jq(e,t,r){return e[t]=r,r}function _d({database:e,table:t}){e||(e=eC),lt();let r=zq(e),n=(0,Ht.join)((0,Zt.getHdbBasePath)(),tl),s=(0,Zt.get)(x.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,Zt.get)(x.STORAGE_PATH)||((0,_s.existsSync)(n)?n:(0,Ht.join)((0,Zt.getHdbBasePath)(),T_));let o=(0,Ht.join)(n,(i?t:e)+".mdb"),c=ta.get(o);if(!c||c.status==="closed"){let l=new XN.default(o,!1);c=(0,Ud.open)(l),ta.set(o,c)}return c.auditStore||(c.auditStore=fg(c)),c}async function Qw(e){if(!Me[e])throw new Error("Schema does not exist");let t=Me[e],r;for(let n in t)r=t[n].primaryStore.rootStore,ta.delete(r.path),r.status==="open"&&(await r.close(),await rh.remove(r.path));if(r||(r=_d({database:e,table:null}),r.status==="open"&&(await r.close(),await rh.remove(r.path))),e==="data"){for(let n in yn)delete yn[n];delete yn[vS]}delete Me[e],th.forEach(n=>n(e)),await zA(r)}function Qq(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&QN[r.indexed.type]?.useObjectStore,s=new sh(!n,n),i=t.openDB(e,s);if(r.indexed.type){let o=QN[r.indexed.type];o?i.customIndex=new o(i,r.indexed):Cr.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function ze(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=eC);let h=_d({database:r,table:t}),E=Me[r];Cr.trace(`Defining ${t} in ${r}`);let _=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 w=new sh(!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,H;if(_){if(R=_.primaryKey,_.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=_.splitSegments),_.attributes.splice(0,_.attributes.length,...o)}else{let Y=h.auditStore;S=o.find(Se=>Se.isPrimaryKey)||{},R=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=MS(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,Zt.get)(x.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]),Cr.trace(`${t} table loading, opening primary store`);let ce=new sh(!1,!0);ce.compression=S.compression;let de=t+"/";if(y=h.dbisDb=h.openDB(CS.INTERNAL_DBIS_NAME,w),z(),y.get(de))return H&&H(),xd(),ze(e);let te=wg(h.openDB(de,ce),h);h.databaseName=r,te.tableId=y.get(Dd),Cr.trace(`Assigning new table id ${te.tableId} for ${t}`),te.tableId||(te.tableId=1),y.put(Dd,te.tableId+1),S.tableId=te.tableId,_=Jq(E,t,bS({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})),_.schemaVersion=1,I=!0,y.put(de,S)}let X=_.indices;y=y||(h.dbisDb=h.openDB(CS.INTERNAL_DBIS_NAME,w)),_.dbisDB=y;let q=[];for(let{key:Y,value:ce}of y.getRange({start:!0})){let[de,te]=Y.toString().split("/");if(te===""&&(te=ce.name),te){if(de!==t)continue}else continue;let Se=o.find(Ke=>Ke.name===te),Ne=!Se?.indexed&&ce.indexed&&!ce.isPrimaryKey;if((!Se||Ne)&&(z(),I=!0,Se||y.remove(Y),Ne)){let Ke=_.indices[de];Ke&&q.push(Ke)}}let k=[];try{for(let Y of o||[]){if((Y.relationship||Y.computed)&&(I=!0,Y.relationship))continue;let ce=t+"/"+(Y.name||"");Object.defineProperty(Y,"key",{value:ce,configurable:!0});let de=y.get(ce);if(Y.isPrimaryKey){if(de=de||y.get(ce=t+"/")||{},c!==void 0&&c!==_.audit||l!==void 0&&l!==_.sealed||d!==void 0&&d!==_.replicate||(+n||void 0)!==(+de.expiration||void 0)||(+s||void 0)!==(+de.eviction||void 0)||Y.type!==de.type){let Se={...de};typeof c=="boolean"&&(c&&_.enableAuditing(c),Se.audit=c),n&&(Se.expiration=+n),s&&(Se.eviction=+s),l!==void 0&&(Se.sealed=l),d!==void 0&&(Se.replicate=d),Y.type&&(Se.type=Y.type),I=!0,z(),y.put(ce,Se)}continue}de?.attribute&&!de.name&&(de.indexed=!0);let te=!de||de.type!==Y.type||JSON.stringify(de.indexed)!==JSON.stringify(Y.indexed)||de.nullable!==Y.nullable||de.version!==Y.version||de.enumerable!==Y.enumerable||JSON.stringify(de.properties)!==JSON.stringify(Y.properties)||JSON.stringify(de.elements)!==JSON.stringify(Y.elements);if(Y.indexed){let Se=Qq(ce,h,Y);(te||de.indexingPID&&de.indexingPID!==process.pid||de.restartNumber<nh.workerData?.restartNumber)&&(I=!0,z(),de=y.get(ce),(te||de.indexingPID&&de.indexingPID!==process.pid||de.restartNumber<nh.workerData?.restartNumber)&&(I=!0,Y.indexNulls===void 0&&(Y.indexNulls=!0),_.primaryStore.getStats().entryCount>0&&(Y.lastIndexedKey=de?.lastIndexedKey??void 0,Y.indexingPID=process.pid,Se.isIndexing=!0,Object.defineProperty(Y,"dbi",{value:Se}),k.push(Y))),y.put(ce,Y)),de?.indexNulls&&Y.indexNulls===void 0&&(Y.indexNulls=!0),Se.indexNulls=Y.indexNulls,X[Y.name]=Se}else te&&(I=!0,z(),y.put(ce,Y))}}finally{H&&H()}if(I&&(_.schemaVersion++,_.updatedAttributes()),Cr.trace(`${t} table loading, running index`),k.length>0||q.length>0?_.indexingOperation=oce(_,k,q):I&&OS.signalSchemaChange(new PS.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=p,I)for(let Y of eh)Y(_,p!=="cluster");return(n||s||i)&&_.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Cr.trace(`${t} table loaded`),_;function z(){H||h.transactionSync(()=>({then(Y){H=Y}}))}a(z,"startTxn")}async function oce(e,t,r){try{Cr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await OS.signalSchemaChange(new PS.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,Ud.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],_=E.name,R=E.dbi;try{let S=E.resolve,y=m&&(S?S(m):m[_]);if(R.customIndex){R.customIndex.index(f,y);continue}let w=(0,Kq.getIndexedValues)(y,R.indexNulls);if(w)for(let I=0,H=w.length;I<H;I++)R.put(w[I],f)}catch(S){o[_]||(o[_]=!0,Cr.error(`Error indexing attribute ${_}`,S))}}}),s.then(()=>d--,h=>{d--,Cr.error(h)}),nh.workerData&&nh.workerData.restartNumber!==Wq.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>sce?await s:d>ice&&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 OS.signalSchemaChange(new PS.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Cr.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Cr.error("Error in indexing",n)}}function ace({table:e,database:t}){let r=_d({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 Vl(e){return eh.push(e),{remove(){let t=eh.indexOf(e);t>-1&&eh.splice(t,1)}}}function ih(e){return th.push(e),{remove(){let t=th.indexOf(e);t>-1&&th.splice(t,1)}}}function MS(){let e=(0,Zt.get)(x.STORAGE_COMPRESSION),t=(0,Zt.get)(x.STORAGE_COMPRESSION_DICTIONARY),r=(0,Zt.get)(x.STORAGE_COMPRESSION_THRESHOLD)||jq,n={startingOffset:32};return t&&(n.dictionary=rh.readFileSync(t)),r&&(n.threshold=r),e&&n}var Zt,CS,Ud,Ht,_s,vd,XN,rh,ZN,Kq,OS,PS,nh,Yq,Wq,DS,rce,Cr,eC,vS,jq,NS,yn,Me,Dd,eh,th,LS,ta,Md,sce,ice,Oe=se(()=>{Zt=b(fe()),CS=b(Jt()),Ud=require("lmdb"),Ht=require("path"),_s=require("fs"),vd=b(Rt());Lg();XN=b(mp());G();rh=b(require("fs-extra")),ZN=b(ai()),Kq=b(xn()),OS=b(Jo()),PS=b(ds()),nh=require("worker_threads"),Yq=b(Q()),Wq=b(st());Ki();El();os();Vq();DS=b(fp()),{forComponent:rce}=Yq.default;a(sh,"OpenDBIObject");Cr=rce("storage"),eC="data",vS=Symbol("defined-tables"),jq=((0,Zt.get)(x.STORAGE_PAGESIZE)||4096)-60;(0,Zt.initSync)();NS=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"],yn=Object.create(null),Me=Object.create(null);(0,ZN._assignPackageExport)("databases",Me);(0,ZN._assignPackageExport)("tables",yn);Dd=Symbol.for("next-table-id"),eh=[],th=[],ta=new Map;a(nce,"getTables");a(lt,"getDatabases");a(xd,"resetDatabases");a(Zp,"readMetaDb");a(zq,"ensureDB");a(Jq,"setTable");a(_d,"database");a(Qw,"dropDatabase");a(Qq,"openIndex");a(ze,"table");sce=1e3,ice=10;a(oce,"runIndexing");a(ace,"dropTableMeta");a(Vl,"onUpdatedTable");a(ih,"onRemovedDB");a(MS,"getDefaultCompression")});var nC={};ye(nC,{loadGQLSchema:()=>uce,start:()=>rC,startOnMainThread:()=>lce});function rC({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 H=function(q){if(q.kind==="NonNullType"){let Y=H(q.type);return Y.nullable=!1,Y}if(q.kind==="ListType")return{type:"array",elements:H(q.type)};let z={type:q.name?.value};return Object.defineProperty(z,"location",{value:q.loc.startToken}),z};a(H,"getProperty");let S=R.name.value,y=[],w={table:null,database:null,properties:y};m.set(S,w),i.allTypes.set(S,w);for(let q of R.directives){if(q.name.value==="table"){for(let z of q.arguments)w[z.name.value]=z.value.value;w.schema&&(w.database=w.schema),w.table||(w.table=S),w.audit&&(w.audit=w.audit!=="false"),w.attributes=w.properties,p.push(w)}if(q.name.value==="sealed"&&(w.sealed=!0),q.name.value==="splitSegments"&&(w.splitSegments=!0),q.name.value==="replicate"&&(w.replicate=!0),q.name.value==="export"){w.export=!0;for(let z of q.arguments)typeof w.export!="object"&&(w.export={}),w.export[z.name.value]=z.value.value}}let I=!1,X={};for(let q of R.fields){let k=H(q.type);k.name=q.name.value,y.push(k),X[k.name]=void 0;for(let z of q.directives){let Y=z.name.value;if(Y==="primaryKey")I?console.warn("Can not define two attributes as a primary key at",z.loc):(k.isPrimaryKey=!0,I=!0);else if(Y==="indexed"){let ce={};for(let de of z.arguments||[])ce[de.name.value]=de.value.value;k.indexed=ce}else if(Y==="computed"){for(let ce of z.arguments||[])if(ce.name.value==="from"){let de=ce.value.value;k.computed={from:_(de,ce,X)},k.version==null&&(k.version=de)}else ce.name.value==="version"&&(k.version=ce.value.value);k.computed=k.computed||!0}else if(Y==="relationship"){let ce={};for(let de of z.arguments)ce[de.name.value]=de.value.value;k.relationship=ce}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 ce=k.authorizedRoles=[];for(let de of z.arguments)de.name.value==="role"&&ce.push(de.value.value)}else server.knownGraphQLDirectives.includes(Y)&&console.warn(`@${Y} is an unknown directive, at`,z.loc)}}w.type=S,S==="Query"&&(h=w)}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):cce.includes(R.type)||(0,Zq.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,tC.dirname)(n),R.tableClass):i.set((0,tC.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function _(R,S,y){return new Xq.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(_,"createComputedFrom")}}var tC,Xq,Zq,cce,lce,uce,e$=se(()=>{tC=require("path"),Xq=require("node:vm");Oe();Zq=b(st());nc();cce=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives||(server.knownGraphQLDirectives=[]);server.knownGraphQLDirectives.push("table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow","enumerable");a(rC,"start");lce=rC,uce=a(e=>rC({ensureTable:ze}).handleFile(e,null,null,new ad),"loadGQLSchema")});var iC={};ye(iC,{start:()=>Sce});function dce(e){if(e.kind!==qe.Kind.OPERATION_DEFINITION&&e.kind!==qe.Kind.FRAGMENT_DEFINITION)throw new Vr(`Unexpected non-executable definition type ${e.kind}.`)}function t$(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 sC(e){return parseInt(e.value,10)}function n$(e){return parseFloat(e.value)}function s$(e,t,r){let n=r.get(e.name.value);return i$(n)?o$(n,t):{attribute:t,value:n}}function i$(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function o$(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],i$(n)?o$(n,t):{attribute:t,value:n}))}function fce(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case qe.Kind.NULL:return{attribute:t,value:null};case qe.Kind.INT:return{attribute:t,value:sC(e.value)};case qe.Kind.FLOAT:return{attribute:t,value:n$(e.value)};case qe.Kind.BOOLEAN:case qe.Kind.STRING:return{attribute:t,value:e.value.value};case qe.Kind.VARIABLE:return s$(e.value,t,r);case qe.Kind.OBJECT:return a$(e.value,t,r);case qe.Kind.LIST:case qe.Kind.ENUM:default:throw new Vr(`Value type, ${e.value.kind}, is not supported.`)}}function a$(e,t,r){return e.fields.flatMap(n=>fce(n,t,r))}function mce(e,t){switch(e.value.kind){case qe.Kind.NULL:return{attribute:e.name.value,value:null};case qe.Kind.INT:return{attribute:e.name.value,value:sC(e.value)};case qe.Kind.FLOAT:return{attribute:e.name.value,value:n$(e.value)};case qe.Kind.BOOLEAN:case qe.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case qe.Kind.VARIABLE:return s$(e.value,e.name.value,t);case qe.Kind.OBJECT:return a$(e.value,[e.name.value],t);case qe.Kind.LIST:case qe.Kind.ENUM:default:throw new Vr(`Argument type, ${e.value.kind}, is not supported.`)}}function pce(e,t){return e.flatMap(r=>mce(r,t))}function US(e,t){return e.selections.flatMap(r=>{switch(r.kind){case qe.Kind.FIELD:return r;case qe.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Vr(`Fragment \`${n}\` not found.`);return US(s.selectionSet,t)}case qe.Kind.INLINE_FRAGMENT:return US(r.selectionSet,t)}})}function c$(e,t){return US(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:c$(r.selectionSet,t)}:r.name.value)}async function hce(e,t,r,n){let s=Bs.getMatch(e.name.value,"graphql");if(s===void 0)throw new Vr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:c$(e.selectionSet,r),conditions:pce(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 l$(e){switch(e.kind){case qe.Kind.NULL:return null;case qe.Kind.INT:return sC(e);case qe.Kind.FLOAT:return parseFloat(e.value);case qe.Kind.STRING:case qe.Kind.BOOLEAN:return e.value;case qe.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:l$(r.value),...t}),{});case qe.Kind.LIST:case qe.Kind.ENUM:default:throw new Vr(`Value type, ${e.kind}, is not supported.`)}}function Ece(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=l$(n.defaultValue)),n.type.kind===qe.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Vr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function _ce(e,t,r,n){if(e.operation===qe.OperationTypeNode.SUBSCRIPTION)throw new Vr("Subscriptions are not supported.");if(e.operation===qe.OperationTypeNode.MUTATION)throw new Vr("Mutations are not supported yet.");let s=Ece(e.variableDefinitions,t),i=await Promise.all(US(e.selectionSet,r).map(c=>hce(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function r$({query:e,variables:t={},operationName:r},n){let s=qe.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(dce(u),u.kind===qe.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Vr("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 Vr(`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 Vr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Vr(`Operation \`${r}\` not found.`);let l=await _ce(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function gce(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 t$(r),r$(r,e)}case"POST":{let r=await Go(e.headers.get("content-type"),!0)(e._nodeRequest);return t$(r),r$(r,e)}default:throw new uo("Method Not Allowed",405,{Allow:"GET, POST"})}}function Sce(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await gce(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 qe.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Vr)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 qe.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Vr)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 qe,Vr,uo,u$=se(()=>{qe=b(require("graphql"));qo();nc();a(dce,"assertExecutableDefinitionNode");a(t$,"assertRequestParams");a(sC,"processIntValueNode");a(n$,"processFloatValueNode");a(s$,"processVariableNode");a(i$,"isObject");a(o$,"transformObjectIntoQueryCondition");a(fce,"processObjectFieldNode");a(a$,"processObjectValueNode");a(mce,"processArgumentNode");a(pce,"buildConditionsQuery");a(US,"fillInFragments");a(c$,"buildSelectQuery");a(hce,"processFieldNode");a(l$,"processConstValueNode");a(Ece,"resolveVariables");a(_ce,"executeOperation");a(r$,"resolver");Vr=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(gce,"graphqlQueryingHandler");a(Sce,"start")});var E$=M((ixe,h$)=>{var Bd=require("validate.js"),f$=ft(),Fd=(G(),D(j)),{handleHDBError:Tce,hdbErrors:yce}=Ee(),{HDB_ERROR_MSGS:cr,HTTP_STATUS_CODES:Rce}=yce,oC=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),bce={STRUCTURE_USER:"structure_user"},d$=Object.values(Fd.ROLE_TYPES_ENUM),Ace="attribute_permissions",Ice="attribute_name",{PERMS_CRUD_ENUM:kd}=Fd,wce=[Ace,...Object.values(kd)],m$=[kd.READ,kd.INSERT,kd.UPDATE],Nce=[Ice,...m$];function Cce(e){let t=oC();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,p$(e,t)}a(Cce,"addRoleValidation");function Oce(e){let t=oC();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,p$(e,t)}a(Oce,"alterRoleValidation");function Pce(e){let t=oC();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,f$.validateObject(e,t)}a(Pce,"dropRoleValidation");var Lce=["operation","role","id","permission","hdb_user","access"];function p$(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Lce.includes(n[o])||s.push(n[o]);s.length>0&&_r(cr.INVALID_ROLE_JSON_KEYS(s),r);let i=f$.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{_r(o,r)}),e.permission){let o=Dce(e);o&&_r(o,r),d$.forEach(c=>{e.permission[c]&&!Bd.isBoolean(e.permission[c])&&_r(cr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(d$.indexOf(o)<0){if(o===bce.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]||_r(cr.SCHEMA_NOT_FOUND(f),r)}continue}_r(cr.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){_r(cr.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]){_r(cr.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(d=>{wce.includes(d)||_r(cr.INVALID_PERM_KEY(d),r,o,l)}),Object.values(kd).forEach(d=>{Bd.isDefined(u[d])?Bd.isBoolean(u[d])||_r(cr.TABLE_PERM_NOT_BOOLEAN(d),r,o,l):_r(cr.TABLE_PERM_MISSING(d),r,o,l)}),u.attribute_permissions===void 0){_r(cr.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){_r(cr.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=>{!Nce.includes(E)&&E!==kd.DELETE&&_r(cr.INVALID_ATTR_PERM_KEY(E),r,o,l)}),!Bd.isDefined(p.attribute_name)){_r(cr.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=p.attribute_name;if(!d.includes(h)){_r(cr.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}m$.forEach(E=>{Bd.isDefined(p[E])?Bd.isBoolean(p[E])||_r(cr.ATTR_PERM_NOT_BOOLEAN(E,h),r,o,l):_r(cr.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}`;_r(cr.MISMATCHED_TABLE_ATTR_PERMS(m),r,o,l)}}}}return vce(r)}a(p$,"customValidate");h$.exports={addRoleValidation:Cce,alterRoleValidation:Oce,dropRoleValidation:Pce};function Dce(e){let{operation:t,permission:r}=e;if(t===Fd.OPERATIONS_ENUM.ADD_ROLE||t===Fd.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 cr.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Fd.ROLE_TYPES_ENUM.SUPER_USER:Fd.ROLE_TYPES_ENUM.CLUSTER_USER;return cr.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(Dce,"validateNoSUPerms");function vce(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:cr.ROLE_PERMS_ERROR,...e};return Tce(new Error,n,Rce.BAD_REQUEST)}else return null}a(vce,"generateRolePermResponse");function _r(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(_r,"addPermError")});var ah=M((cxe,T$)=>{"use strict";var _$=Vn(),g$=Sn(),Mce=Bl(),cC=E$(),lC=Jo(),axe=require("uuid").v4,Uce=require("util"),xS=(G(),D(j)),xce=ae(),uC=g$.searchByValue,Bce=g$.searchByHash,Fce=Uce.promisify(Mce.delete),kce=fi(),Hce=hd(),{hdbErrors:Gce,handleHDBError:Kl}=Ee(),{HDB_ERROR_MSGS:S$,HTTP_STATUS_CODES:oh}=Gce,{UserEventMsg:dC}=ds();T$.exports={addRole:qce,alterRole:$ce,dropRole:Vce,listRoles:Kce};function aC(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(aC,"scrubRoleDetails");async function qce(e){let t=cC.addRoleValidation(e);if(t)throw t;e=aC(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await uC(r)||[])}catch(i){throw Kl(i)}if(n&&n.length>0)throw Kl(new Error,S$.ROLE_ALREADY_EXISTS(e.role),oh.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 _$.insert(s),lC.signalUserChange(new dC(process.pid)),e=aC(e),e}a(qce,"addRole");async function $ce(e){let t=cC.alterRoleValidation(e);if(t)throw t;e=aC(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await _$.update(r)}catch(s){throw Kl(s)}if(n&&n?.message==="updated 0 of 1 records")throw Kl(new Error,"Invalid role id",oh.BAD_REQUEST,void 0,void 0,!0);return await lC.signalUserChange(new dC(process.pid)),e}a($ce,"alterRole");async function Vce(e){let t=cC.dropRoleValidation(e);if(t)throw Kl(new Error,t,oh.BAD_REQUEST,void 0,void 0,!0);let r=new Hce(xS.SYSTEM_SCHEMA_NAME,xS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Bce(r));if(n.length===0)throw Kl(new Error,S$.ROLE_NOT_FOUND,oh.NOT_FOUND,void 0,void 0,!0);let s=new kce(xS.SYSTEM_SCHEMA_NAME,xS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await uC(s)),o=!1;if(xce.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Kl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,oh.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Fce(c),lC.signalUserChange(new dC(process.pid)),`${n[0].role} successfully deleted`}a(Vce,"dropRole");async function Kce(){return uC({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}a(Kce,"listRoles")});var fC={};ye(fC,{start:()=>b$,startOnMainThread:()=>jce});function b$({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,y$.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(Yce.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 Wce(i)}}}async function Wce(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,R$.isEqual)(i,e)?void 0:(e.id=r.id,(0,BS.alterRole)(e))}return(0,BS.addRole)(e)}var BS,y$,R$,Yce,jce,A$=se(()=>{Oe();BS=b(ah()),y$=require("yaml"),R$=require("lodash"),Yce=["super_user","cluster_user","structure_user"];a(b$,"start");a(Wce,"ensureRole");jce=b$});async function FS(e){let t=(0,N$.pathToFileURL)(e).toString();if(zce)return ch||(ch=Jce(Xce)),(await(await ch).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Jce(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ch=new Compartment({console,Math,Date,fetch:Qce,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,w$.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Xt,s.tables=yn,s.databases=Me}};let n=await(0,I$.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),ch}function Qce(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 Xce(){return{Resource:Xt,tables:yn}}var I$,w$,N$,zce,ch,mC=se(()=>{Qi();Oe();I$=require("fs/promises"),w$=require("path"),N$=require("url"),zce=!1;a(FS,"secureImport");a(Jce,"getCompartment");a(Qce,"secureOnlyFetch");a(Xce,"getGlobalVars")});var pC={};ye(pC,{ResourceLoadError:()=>kS,handleApplication:()=>Zce,suppressHandleApplicationWarning:()=>ele});function O$(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Zce(e){e.handleEntry(a(async function(r){if(r.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${r.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(r.eventType!=="add"){e.requestRestart();return}try{let n=await FS(r.absolutePath),s=(0,C$.dirname)(r.urlPath).replace(/\\/g,"/").replace(/^\/$/,"");O$(n.default)&&(e.resources.set(s,n.default),e.logger.debug(`Registered root resource: ${s}`)),P$(e,n,s)}catch(n){throw new kS(r.absolutePath,n)}},"handleResourceEntry"))}function P$(e,t,r){for(let n in t){let s=t[n],i=`${r}/${n}`;O$(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&P$(e,s,i)}}var C$,kS,ele,L$=se(()=>{mC();C$=require("path");a(O$,"isResource");kS=class extends Error{static{a(this,"ResourceLoadError")}filePath;cause;constructor(t,r){super(`Failed to load resource module ${t}${r?`: ${r.message}`:""}`),this.name="ResourceLoadError",this.filePath=t,this.cause=r}};a(Zce,"handleApplication");a(P$,"recurseForResources");ele=!0});var EC={};ye(EC,{start:()=>tle});function tle({resources:e}){e.set("login",hC),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var hC,D$=se(()=>{Qi();a(tle,"start");hC=class extends Xt{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 GS(e,t){let r={openapi:rle,info:{title:"HarperDB HTTP REST interface",version:F$.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)HS[l.type]?o[l.name]=new gC(HS[l.type],l.type):l.properties?(o[l.name]=new H$(l.type),s(l)):l.elements?.properties&&(o[l.name]=new ole(l.elements.type),s(l.elements)),l.nullable===!1&&c.push(l.name);r.components.schemas[i.type]=new B$(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:z,elements:Y,relationship:ce,definition:de,nullable:te}of l){let Se=de??Y?.definition;Se&&s(Se),te===!1&&h.push(z),ce?k==="array"?m[z]={type:"array",items:{$ref:$s+Y.type}}:m[z]={$ref:$s+k}:Se?k==="array"?m[z]={type:"array",items:{$ref:$s+Se.type}}:m[z]={$ref:$s+Se.type}:k==="array"?Y.type==="Any"?m[z]={type:"array",items:{format:Y.type}}:m[z]={type:"array",items:new gC(HS[Y.type],Y.type)}:k==="Any"?m[z]={format:k}:m[z]=new gC(HS[k],k),p.push(new SC(z,"query",m[z]))}let E=Object.keys(m),_=new SC(f,"path",{type:"string",format:"ID"});_.required=!0,_.description="primary key of record";let R=new SC("property","path",{enum:E});R.required=!0,r.components.schemas[c]=new B$(m,!u,h);let S=d.post!==Resource.prototype.post||d.update,y=typeof d.put=="function",w=typeof d.get=="function",I=typeof d.delete=="function",H=typeof d.patch=="function",X=`/${o}/`;r.paths[X]||(r.paths[X]={}),S&&(r.paths[X].post=new nle(c,n,{200:new Hd({$ref:$s+c},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),r.paths[X].options=new v$(p,n,{200:new M$},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),w&&(r.paths[X].get=new _C(p,n,{200:new Hd({type:"array",items:{$ref:$s+c}})},"search for records by the specified property name and value pairs")),I&&(r.paths[X].delete=new x$(p,n,"delete all the records that match the provided query",{204:new U$}));let q="/"+o+"/{"+f+"}";if(r.paths[q]||(r.paths[q]={}),r.paths[q].options=new v$(p,n,{200:new M$},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),w&&(r.paths[q].get=new _C([_],n,{200:new Hd({$ref:$s+c})},"retrieve a record by its primary key")),y&&(r.paths[q].put=new sle([_],n,c,{200:new Hd({$ref:$s+c})},"create or update the record with the URL path that maps to the record's primary key")),H&&(r.paths[q].patch=new ile([_],n,c,{200:new Hd({$ref:$s+c})},"patch the record with the URL path that maps to the record's primary key")),I&&(r.paths[q].delete=new x$([_],n,"delete a record with the given primary key",{204:new U$})),w&&R.schema.enum.length>0){let k=`/${o}/{${f}}.{property}`;r.paths[k]||(r.paths[k]={}),r.paths[k].get=new _C([_,R],n,{200:new Hd({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 nle(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:$s+e}}}},this.security=t,this.responses=r}function _C(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function v$(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function M$(){this.description=k$,this.headers={},this.content={}}function Hd(e,t){this.description=k$,this.content={"application/json":{schema:e}},this.headers=t}function U$(){this.description="successfully processed request, no content returned to client"}function sle(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:$s+r}}}},this.responses=n}function ile(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:$s+r}}}},this.responses=n}function x$(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function B$(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function gC(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function H$(e){this.$ref=`#/components/schemas/${e}`}function ole(e){this.type="array",this.items=new H$(e)}function SC(e,t,r){this.name=e,this.in=t,this.schema=r}var F$,rle,HS,$s,k$,TC=se(()=>{F$=b(yt()),rle="3.0.3",HS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},$s="#/components/schemas/",k$="successful operation";a(GS,"generateJsonApi");a(nle,"Post");a(_C,"Get");a(v$,"Options");a(M$,"ResponseOptions200");a(Hd,"Response200");a(U$,"Response204");a(sle,"Put");a(ile,"Patch");a(x$,"Delete");a(B$,"ResourceSchema");a(gC,"Type");a(H$,"Ref");a(ole,"ArrayRef");a(SC,"Parameter")});var q$={};ye(q$,{Request:()=>hc,createReuseportFd:()=>qS});var G$,hc,yC,RC,qS,lh=se(()=>{G$=require("os"),hc=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 RC(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 yC(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)}},yC=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)}},RC=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,G$.platform)()!="win32"&&(qS=require("node-unix-socket").createReuseportFd)});var VS={};ye(VS,{parseHeaderValue:()=>AC,start:()=>lle});async function cle(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&Og(e);let i=new Hs;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==$$){let _=$S.getMatch(o,n?"sse":"rest");if(!_)return t(e);e.handlerPath=_.path,c=new xs(_.relativeURL),c.async=!0,l=_.Resource}if(l?.isCaching){let _=r["cache-control"];if(_){let R=AC(_);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 _=AC(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.name));e.replicateTo=_.length===1&&+_[0]>=0?+_[0]:_[0]==="*"?void 0:_}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await bt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Go(r["content-type"],!0)(e.body,e.headers)}catch(_){throw new Gd.ClientError(_,400)}if(e.authorize=!0,o===$$&&s==="GET"){if(e?.user?.role?.permission?.super_user)return GS($S,`${e.protocol}://${e.hostname}`);throw new Gd.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 Gd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Gd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,bC.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let _=Iq(f.headers,i);return f.headers!==_&&(f.headers=_),f.data!==void 0&&(f.body=Km(f.data,e,f)),f}else if(isFinite(p)){ale[0]=p;let _=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&&_==R?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",_),bC.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=Km(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(o){o.statusCode?o.statusCode===500?Si.warn(o):Si.info(o):Si.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=Km(o.contentType?o:Y$(o),e,c),c}}function lle(e){bC=e,e.includeExpensiveRecordCountEstimates&&(hc.prototype.includeExpensiveRecordCountEstimates=!0),!V$&&(V$=!0,$S=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return cle(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{uh++;let s=new is;K$||(K$=!0,ap(l=>{uh>0&&l.push({metric:"ws-connections",connections:uh,byThread:!0})}));let i;t.on("error",l=>{i=!0,Si.warn(l)});let o;t.on("message",a(function(u){o||(o=Go(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=o(u);We(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{uh--,tn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=$S.getMatch(l,"ws");if(tn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,We(h=>({count:h.count,total:uh}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new xs(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await bt(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await Ho(p.value,r);t.send(h),We(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?Si.warn(l):Si.info(l):Si.error(l),t.close(ule[l.statusCode]||1011,Y$(l))}t.close()},e))}function AC(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 Si,Gd,Y$,sn,ale,bC,$$,V$,$S,K$,uh,ule,W$=se(()=>{qo();as();Si=b(Q()),Gd=b(Ee());Pg();$u();Ja();zp();TC();lh();Dg();({errorToString:Y$}=Si),sn=new Uint8Array(8),ale=new Float64Array(sn.buffer,0,1),bC={},$$="openapi";a(cle,"http");uh=0;a(lle,"start");ule={401:3e3,403:3003};a(AC,"parseHeaderValue")});var IC=M((Mxe,z$)=>{var{recordAction:KS,recordActionBinary:j$}=(as(),D(Tg)),dle=require("fastify-plugin"),fle=200;z$.exports=dle(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),KS(o,"duration",u,f,d),j$(s.raw.statusCode<400,"success",u,f,d),j$(1,"response_"+s.raw.statusCode,u,f,d);let m=fle;i?.pipe?(i.on("data",_=>{m+=_.length}),i.on("end",()=>{KS(performance.now()-c,"transfer",u,f,d),KS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,KS(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 Q$=M((Uxe,J$)=>{var mle=ft(),ple={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};J$.exports=function(e){return mle.validateObject(e,ple)}});var YS=M((xxe,X$)=>{"use strict";var hle=(G(),D(j)).OPERATIONS_ENUM,wC=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=hle.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};X$.exports=wC});var mh={};ye(mh,{createTokens:()=>CC,getJWTRSAKeys:()=>QS,refreshOperationToken:()=>OC,validateOperationToken:()=>PC,validateRefreshToken:()=>XS});async function QS(){if(WS)return WS;try{let e=dh.default.join(fh.default.getHdbBasePath(),iA),t=await jS.default.readFile(dh.default.join(e,ym.JWT_PASSPHRASE_NAME),"utf8"),r=await jS.default.readFile(dh.default.join(e,ym.JWT_PRIVATE_KEY_NAME),"utf8");return WS={publicKey:await jS.default.readFile(dh.default.join(e,ym.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},WS}catch(e){throw JS.default.error(e),new Ti.ClientError($d.NO_ENCRYPTION_KEYS,qd.INTERNAL_SERVER_ERROR)}}async function CC(e){let t=(0,NC.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 Ti.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 Rd(e.username,e.password,f)}catch(f){throw JS.default.error(f),new Ti.ClientError($d.INVALID_CREDENTIALS,qd.UNAUTHORIZED)}if(!r)throw new Ti.ClientError($d.INVALID_CREDENTIALS,qd.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 QS(),c=await Vd.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??nV,algorithm:zS,subject:Kd.OPERATION}),l=await Vd.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:Ele,algorithm:zS,subject:Kd.REFRESH}),u=lN(l,$r.SHA256);if((await(0,Z$.update)(new eV.default(Sm,Bu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new Ti.ClientError($d.REFRESH_TOKEN_SAVE_FAILED,qd.INTERNAL_SERVER_ERROR);return tV.default.signalUserChange(new rV.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function OC(e){let t=(0,NC.validateBySchema)(e,fo.default.object({refresh_token:fo.default.string().required()}).required());if(t)throw new Ti.ClientError(t.message);let{refresh_token:r}=e;await XS(r);let n=await QS(),s=await Vd.default.decode(r);return{operation_token:await Vd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:nV,algorithm:zS,subject:Kd.OPERATION})}}async function PC(e){return sV(e,Kd.OPERATION)}async function XS(e){return sV(e,Kd.REFRESH)}async function sV(e,t){try{let r=await QS(),n=await Vd.default.verify(e,r.publicKey,{algorithms:zS,subject:t});if(n.role)throw new Error("Invalid token");let s=await Rd(n.username,void 0,!1);if(t===Kd.REFRESH&&!uN(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw JS.default.warn(r),r?.name==="TokenExpiredError"?new Ti.ClientError($d.TOKEN_EXPIRED,qd.FORBIDDEN):new Ti.ClientError($d.INVALID_TOKEN,qd.UNAUTHORIZED)}}var Vd,jS,dh,fo,NC,Ti,JS,Z$,eV,tV,rV,fh,qd,$d,nV,Ele,zS,Kd,WS,Yd=se(()=>{Vd=b(require("jsonwebtoken")),jS=b(require("fs-extra")),dh=b(require("node:path")),fo=b(require("joi")),NC=b(ft());G();Ti=b(Ee()),JS=b(Q());fN();Yn();Z$=b(Vn()),eV=b(YS()),tV=b(Jo()),rV=b(ds()),fh=b(fe()),{HTTP_STATUS_CODES:qd,AUTHENTICATION_ERROR_MSGS:$d}=Ti.hdbErrors;fh.default.initSync();nV=fh.default.get(x.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Ele=fh.default.get(x.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",zS="RS256",Kd={OPERATION:"operation",REFRESH:"refresh"};a(QS,"getJWTRSAKeys");a(CC,"createTokens");a(OC,"refreshOperationToken");a(PC,"validateOperationToken");a(XS,"validateRefreshToken");a(sV,"validateToken")});var LC=M((qxe,aV)=>{"use strict";var _le=Q$(),Wd=require("passport"),gle=require("passport-local").Strategy,Sle=require("passport-http").BasicStrategy,Tle=require("util"),yle=(Yn(),D(gi)),oV=Tle.callbackify(yle.findAndValidateUser),Gxe=Jr(),Rle=(G(),D(j)),iV=(Yd(),D(mh)),{AccessViolation:ble}=Ee();Wd.use(new gle(function(e,t,r){oV(e,t,r)}));Wd.use(new Sle(function(e,t,r){oV(e,t,r)}));Wd.serializeUser(function(e,t){t(null,e)});Wd.deserializeUser(function(e,t){t(null,e)});function Ale(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(new ble)}switch(a(i,"handleResponse"),n){case"Basic":Wd.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Rle.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?iV.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):iV.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Wd.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Ale,"authorize");function Ile(e,t){let r=_le(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(Ile,"checkPermissions");aV.exports={authorize:Ale,checkPermissions:Ile}});var BC=M((Yxe,dV)=>{var rT=require("clone"),nT=ft(),wle=ae(),eT=(G(),D(j)),Vxe=Q(),DC=require("fs"),MC=require("joi"),{string:tT}=MC.types(),{hdbErrors:Nle,handleHDBError:ZS}=Ee(),{HDB_ERROR_MSGS:Kxe,HTTP_STATUS_CODES:vC}=Nle,{commonValidators:jd}=Zi(),cV=" is required",Cle=["insert","update","upsert"],UC={database:{presence:!1,format:jd.schema_format,length:jd.schema_length},schema:{presence:!1,format:jd.schema_format,length:jd.schema_length},table:{presence:!0,format:jd.schema_format,length:jd.schema_length},action:{inclusion:{within:Cle,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Ole={schema:tT.required(),table:tT.required(),action:tT.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Ple,AWS_SECRET:Lle,AWS_BUCKET:Dle,AWS_FILE_KEY:vle,REGION:Mle}=eT.S3_BUCKET_AUTH_KEYS,Ule={s3:{presence:!0},[`s3.${Ple}`]:{presence:!0,type:"String"},[`s3.${Lle}`]:{presence:!0,type:"String"},[`s3.${Dle}`]:{presence:!0,type:"String"},[`s3.${vle}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Mle}`]:{presence:!0,type:"String"}},lV=rT(UC);lV.data.presence={message:cV};var uV=rT(UC);uV.file_path.presence={message:cV};var xle=Object.assign(rT(UC),Ule),xC=rT(Ole);xC.csv_url=tT.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();xC.passthrough_headers=MC.object();function Ble(e){let t=nT.validateObject(e,lV);return sT(e,t)}a(Ble,"dataObject");function Fle(e){let t=nT.validateBySchema(e,MC.object(xC));return sT(e,t)}a(Fle,"urlObject");function kle(e){let t=nT.validateObject(e,uV);return sT(e,t)}a(kle,"fileObject");function Hle(e){let t=nT.validateObject(e,xle);return sT(e,t)}a(Hle,"s3FileObject");function sT(e,t){if(!t){let r=wle.checkGlobalSchemaTable(e.schema,e.table);if(r)return ZS(new Error,r,vC.BAD_REQUEST);if(e.operation===eT.OPERATIONS_ENUM.CSV_FILE_LOAD)try{DC.accessSync(e.file_path,DC.constants.R_OK|DC.constants.F_OK)}catch(n){return n.code===eT.NODE_ERROR_CODES.ENOENT?ZS(n,`No such file or directory ${n.path}`,vC.BAD_REQUEST):n.code===eT.NODE_ERROR_CODES.EACCES?ZS(n,`Permission denied ${n.path}`,vC.BAD_REQUEST):ZS(n)}}return t}a(sT,"postValidateChecks");dV.exports={dataObject:Ble,urlObject:Fle,fileObject:kle,s3FileObject:Hle}});var FC=M((jxe,fV)=>{"use strict";var ph=Q(),iT=(G(),D(j));async function Gle(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===iT.OPERATIONS_ENUM.INSERT||t.operation===iT.OPERATIONS_ENUM.UPDATE||t.operation===iT.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===iT.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(ph.info(i.message),i):i.http_resp_msg?(ph.error(`Error calling operation: ${e.name}`),ph.error(i.http_resp_msg),i):(ph.error(`Error calling operation: ${e.name}`),ph.error(i),i)}}a(Gle,"callOperationFunctionAsAwait");fV.exports={callOperationFunctionAsAwait:Gle}});var kC=M((Jxe,pV)=>{"use strict";var{S3:qle,GetObjectCommand:$le}=require("@aws-sdk/client-s3");pV.exports={getFileStreamFromS3:Vle,getS3AuthObj:mV};async function Vle(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await mV(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new $le(r))).Body}a(Vle,"getFileStreamFromS3");function mV(e,t,r){return new qle({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(mV,"getS3AuthObj")});var EV=M((Xxe,hV)=>{"use strict";var HC=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}},GC=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};hV.exports={BulkLoadFileObject:HC,BulkLoadDataObject:GC}});var gV=M((e0e,_V)=>{"use strict";var qC=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}};_V.exports=qC});var TV=M((r0e,SV)=>{"use strict";var $C=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};SV.exports=$C});var KC=M((s0e,RV)=>{"use strict";var yV=gV(),Kle=TV(),{HDB_ERROR_MSGS:Yle}=Jr(),VC=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Yle.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 yV(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Kle(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 yV(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}};RV.exports=VC});var Yl=M((a0e,wV)=>{"use strict";var o0e=Sn(),hh=Q(),{validateBySchema:bV}=ft(),ra=require("joi"),Wle=io(),oT=ae(),{handleHDBError:aT,hdbErrors:jle,ClientError:AV}=Ee(),{HDB_ERROR_MSGS:cT,HTTP_STATUS_CODES:YC}=jle,IV=fe();IV.initSync();var{getDatabases:WC}=(Oe(),D(mt)),zle=require("fs-extra"),Jle=(G(),D(j));wV.exports={describeAll:Qle,describeTable:lT,describeSchema:Xle};async function Qle(e={}){try{let t=oT.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=WC(),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 lT({schema:m,table:h,exact_count:u,include_computed:d});else if(n&&n[m].describe&&n[m].tables[h].describe){let _=n[m].tables[h].attribute_permissions;E=await lT({schema:m,table:h,exact_count:u,include_computed:d},_)}E&&l.push(E)}catch(E){hh.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 hh.error("Got an error in describeAll"),hh.error(t),aT(new Error,cT.DESCRIBE_ALL_ERR)}}a(Qle,"describeAll");async function lT(e,t){oT.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=bV(e,ra.object({database:ra.string(),table:ra.string().required(),exact_count:ra.boolean().strict(),include_computed:ra.boolean().strict()}));if(i)throw new AV(i.message);let c=WC()[r];if(!c)throw aT(new Error,cT.SCHEMA_NOT_FOUND(e.schema),YC.NOT_FOUND);let l=c[n];if(!l)throw aT(new Error,cT.TABLE_NOT_FOUND(e.schema,e.table),YC.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 zle.stat(l.primaryStore.env.path)).size}catch(p){hh.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")),IV.get(Jle.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Wle.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){hh.warn(`unable to stat table dbi due to ${p}`)}return m}a(lT,"descTable");async function Xle(e){oT.transformReq(e);let t=bV(e,ra.object({database:ra.string(),exact_count:ra.boolean().strict(),include_computed:ra.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=WC()[n];if(!i)throw aT(new Error,cT.SCHEMA_NOT_FOUND(e.schema),YC.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),oT.isEmpty(l)||l.describe){let u=await lT({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(Xle,"describeSchema")});var LV=M((l0e,PV)=>{"use strict";var Zle=Yl(),{hdbErrors:NV}=Ee(),{getDatabases:CV}=(Oe(),D(mt));PV.exports={checkSchemaExists:OV,checkSchemaTableExists:eue,schemaDescribe:Zle};async function OV(e){if(!CV()[e])return NV.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(OV,"checkSchemaExists");async function eue(e,t){let r=await OV(e);if(r)return r;if(!CV()[e][t])return NV.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(eue,"checkSchemaTableExists")});var uT=M((d0e,DV)=>{"use strict";var tue=ps();DV.exports={writeTransaction:rue};function rue(e,t,r){return tue.writeTransaction(e,t,r)}a(rue,"writeTransaction")});var XC=M((E0e,VV)=>{"use strict";var{decode:nue}=require("msgpackr"),{isMainThread:m0e,parentPort:p0e,threadId:h0e}=require("worker_threads"),mT=lr(),zd=Dt(),JC=(G(),D(j)),Rn=Q(),zC=fe(),sue=(G(),D(j)),{onMessageByType:iue}=st(),xV=io(),{recordAction:vV,recordActionBinary:oue}=(as(),D(Tg)),{publishToStream:aue}=mT,{ConsumerEvents:MV}=require("nats"),cue=Sn(),{promisify:lue}=require("util"),{decodeBlobsWithWrites:uue}=(os(),D(ig)),BV=lue(setTimeout),pT=1e4,hT,fT,due,fue,FV,Eh=new Map,Jd=new Map;VV.exports={initialize:kV,ingestConsumer:QC,setSubscription:mue,setIgnoreOrigin:Eue,getDatabaseSubscriptions:hue,updateConsumer:HV};async function kV(){iue(JC.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await HV(n)}),FV=!0,Rn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await mT.getNATSReferences();hT=e,fT=e.info.server_name,due=t,fue=r}a(kV,"initialize");async function HV(e){if(e.status==="start"){let{js:t,jsm:r}=await GV(e.node_domain_name);QC(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Eh.get(e.stream_name+e.node_domain_name);t&&(Rn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Eh.set(e.stream_name+e.node_domain_name,"close")),Jd.get(e.node_domain_name)==="failed"&&Jd.set(e.node_domain_name,"close")}}a(HV,"updateConsumer");var ET=new Map;function mue(e,t,r){let n=ET.get(e);n||ET.set(e,n=new Map),n.set(t,r),FV||kV().then(pue)}a(mue,"setSubscription");async function pue(){let e=await cue.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+zd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await GV(r),!n))break;let{schema:o,table:c}=i,l=xV.createNatsTableStreamName(o,c);QC(l,n,s,r)}}}a(pue,"accessConsumers");async function GV(e){let t,r,n=1;for(;!r;)try{t=await hT.jetstream({domain:e}),r=await hT.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Jd.get(e)==="close")break;Jd.set(e,"failed"),n%10===1&&Rn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<pT?n++*100:pT;await BV(i)}return{js:t,jsm:r}}a(GV,"connectToRemoteJS");function hue(){return ET}a(hue,"getDatabaseSubscriptions");var qV;function Eue(e){qV=e}a(Eue,"setIgnoreOrigin");var $V=100,UV=new Array($V),dT=0;async function QC(e,t,r,n){let{connection:s}=await mT.getNATSReferences();hT=s,fT=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,fT),Rn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Jd.get(n)==="close")break;o%10===1&&Rn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(Rn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await mT.createConsumer(r,e,fT,new Date(Date.now()).toISOString()));let d=o++*100<pT?o++*100:pT;await BV(d)}let c=!1,l;for(;!c;){if(Eh.get(e+n)==="close"||Jd.get(n)==="close"){Eh.delete(e+n),c=!0;continue}l=await i.consume({max_messages:zC.get(JC.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Eh.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===MV.ConsumerDeleted&&(await l.close(),c=!0),d.type===MV.HeartbeatsMissed){let f=d.data;Rn.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(Rn.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 UV[dT],UV[dT]=_ue(d).catch(f=>{Rn.error(f)}),++dT>=$V&&(dT=0)}catch(d){d.message==="consumer deleted"?(Rn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):Rn.error("Error consuming clustering ingest, restarting consumer",d)}}}a(QC,"ingestConsumer");async function _ue(e){let t;await uue(()=>{t=nue(e.data)}),vV(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Rn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=zC.get(JC.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(zd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(zd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(zd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!qV),oue(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(zd.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;Rn.trace("processing message:",o,c,u,(d?"records: "+d.map(I=>I?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),Rn.trace(`messageProcessor nats msg id: ${e.headers.get(zd.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(I=>h=I),{timestamp:_,user:R,node_name:S}=m||{},y=ET.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:jC(o),value:d[0],id:f?.[0],expiresAt:p,timestamp:_,table:u,onCommit:h,user:R,nodeName:S});else{let I=d.map((H,X)=>({type:jC(o),value:H,expiresAt:p,id:f?.[X],table:u}));for(;l;)I.push({type:jC(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:_,onCommit:h,user:R,nodeName:S})}zC.get(sue.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&aue(e.subject.split(".").slice(0,-1).join("."),xV.createNatsTableStreamName(c,u),e.headers,e.data),await E;let w=Date.now()-_;_&&vV(w,"replication-latency",e.subject,o,"ingest")}catch(o){Rn.error(o)}e.ack()}a(_ue,"messageProcessor");function jC(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(jC,"convertOperation")});var lr=M((b0e,a1)=>{"use strict";var Kr=fe();Kr.initSync();var gue=require("fs-extra"),Sue=require("semver"),Sh=require("path"),{monotonicFactory:Tue}=require("ulidx"),YV=Tue(),yue=require("util"),WV=require("child_process"),Rue=yue.promisify(WV.exec),bue=WV.spawn,on=Dt(),rt=(G(),D(j)),{packageJson:Aue,PACKAGE_ROOT:Iue}=yt(),_T=ae(),yi=Q(),gT=io(),wue=uT(),_h=_t(),{broadcast:Nue,onMessageByType:Cue,getWorkerIndex:Oue}=st(),{isMainThread:jV}=require("worker_threads"),{Encoder:Pue,decode:rO}=require("msgpackr"),zV=new Pue,{isEmpty:Jl}=_T,JV=(Yn(),D(gi)),g0e=48*36e11;jV&&Cue(rt.ITC_EVENT_TYPES.RESTART,()=>{bn=void 0,zl=void 0});var{connect:Lue,StorageType:Due,RetentionPolicy:vue,AckPolicy:nO,DeliverPolicy:sO,DiscardPolicy:Mue,NatsConnection:S0e,JetStreamManager:T0e,JetStreamClient:y0e,StringCodec:R0e,JSONCodec:Uue,createInbox:iO,headers:xue,ErrorCode:KV}=require("nats"),{recordAction:Bue}=(as(),D(Tg)),{encodeBlobsAsBuffers:Fue}=(os(),D(ig)),QV=Uue(),kue="clustering",Hue=Aue.engines[on.NATS_SERVER_NAME],Gue=Sh.join(Iue,"dependencies"),tO=Sh.join(Gue,`${process.platform}-${process.arch}`,on.NATS_BINARY_NAME),ZC,eO,gh,Wl,jl;a1.exports={runCommand:XV,checkNATSServerInstalled:que,createConnection:oO,getConnection:Th,getJetStreamManager:yh,getJetStream:e1,getNATSReferences:mo,getServerList:Vue,createLocalStream:aO,listStreams:t1,deleteLocalStream:Kue,getServerConfig:Qd,listRemoteStreams:Yue,viewStream:Wue,viewStreamIterator:jue,publishToStream:zue,request:Xue,reloadNATS:cO,reloadNATSHub:Zue,reloadNATSLeaf:ede,extractServerName:Que,requestErrorHandler:tde,createLocalTableStream:i1,createTableStreams:sde,purgeTableStream:o1,purgeSchemaTableStreams:ide,getStreamInfo:ode,updateLocalStreams:cde,closeConnection:$ue,getJsmServerName:ST,addNatsMsgHeader:r1,clearClientCache:ZV,updateRemoteConsumer:rde,createConsumer:n1,updateConsumerIterator:nde};async function XV(e,t=void 0){let{stdout:r,stderr:n}=await Rue(e,{cwd:t});if(n)throw new Error(n.replace(`
13
+ `},"serialize"),compressible:!1,q:.8});En.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()}});r0={type:"application/json",serializeStream:Gm,serialize:qm,deserialize:I9,q:.5};En.set("*/*",r0);En.set("",r0);a(I9,"tryJSONParse");a(Vm,"registerContentHandlers");w9=(0,e0.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");zx=kA.default.get(x.HTTP_COMPRESSIONTHRESHOLD);a(Km,"serialize");a(Go,"serializeMessage");a($A,"asyncSerialization");a(VA,"hasAsyncSerialization");a(N9,"streamToBuffer");C9=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(O9,"isBufferEncoding");a(P9,"parseContentType");a(qo,"getDeserializer");a(L9,"deserializerUnknownType");a(D9,"transformIterable");a(J_,"toCsvStream")});var ig={};ye(ig,{Blob:()=>vs,blobsWereEncoded:()=>ul,cleanupOrphans:()=>Y9,databasePaths:()=>YA,decodeBlobsWithWrites:()=>sg,decodeFromDatabase:()=>Ko,decodeWithBlobCallback:()=>zm,deleteBlob:()=>tg,deleteBlobsInObject:()=>Xa,deleteRootBlobPathsForDB:()=>zA,encodeBlobsAsBuffers:()=>$9,encodeBlobsWithFilePath:()=>ng,findBlobsInObject:()=>ll,getFileId:()=>rg,getFilePathForBlob:()=>m0,getRootBlobPathsForDB:()=>ju,isSaving:()=>B9,saveBlob:()=>jm,setDeletionDelay:()=>x9,startPreCommitBlobsForRecord:()=>JA});function d0(){}function tg(e){let t=m0(e);t&&setTimeout(()=>{(0,je.unlink)(t,r=>{r&&Lt.default.debug?.("Error trying to remove blob file",r)})},f0)}function x9(e){f0=e}function jm(e,t=!1){let r=Gr.get(e);if(!r)r={storageIndex:0,fileId:null,store:Bn},Gr.set(e,r);else{if(r.fileId)return r;r.store=Bn}return r.deleteOnFailure=t,k9(r),r.source?KA(e,r.source,r):r.contentBuffer?F9(e,r):KA(e,Qa.Readable.from(e.stream()),r),r}function KA(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,je.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(M9),p=(0,eg.createDeflate)(),(0,Qa.pipeline)(t,p,f,E)):(m||f.write(v9),(0,Qa.pipeline)(t,f,E));function h(_){let R=BigInt(_),S=new Uint8Array(Nr),y=new DataView(S.buffer);return R|=BigInt(o?jA:u0)<<48n,y.setBigInt64(0,R),S}a(h,"createHeader");function E(_){let R=f.fd;if(_){if(i.unlock(d,0),R&&((0,je.close)(R),f.fd=null),r.deleteOnFailure)(0,je.unlink)(n,S=>{S&&Lt.default.debug?.("Error while deleting aborted blob file",S)});else try{if((0,je.statSync)(n).size===0){let S=Buffer.from(_.toString());(0,je.writeFile)(n,Buffer.concat([h(BigInt(S.length)+0xff000000000000n),S]),y=>{y&&Lt.default.debug?.("Error write error message to blob file",y)})}}catch(S){Lt.default.debug?.("Error checking blob file after abort",S)}u(_)}else{if(!m){m=!0;let S=p?p.bytesWritten:f.bytesWritten-Nr;e.size=S,(0,je.write)(R,h(S),0,Nr,0,E);return}i.unlock(d,0),c?(0,je.fdatasync)(R,S=>{S&&u(S),l(),(0,je.close)(R),f.fd=null}):(l(),(0,je.close)(R),f.fd=null)}}a(E,"finished")}),e}function rg(e){return Gr.get(e)?.fileId}function B9(e){return Gr.get(e)?.saving}function m0(e){let t=Gr.get(e);return t?.fileId&&Wu(t)}function ju(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=YA.get(e);if(!t){if(!e.databaseName)return Lt.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,Wm.get)(x.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,ji.join)(n,e.databaseName)):t=[(0,ji.join)((0,Wm.getHdbBasePath)(),"blobs",e.databaseName)],YA.set(e,t)}return t}async function zA(e){let t=ju(e);t&&await Promise.all(t.map(r=>p0(r)))}async function p0(e){if((0,je.existsSync)(e)){for(let t of await(0,Fn.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await p0((0,ji.join)(e,t.name));else try{await(0,Fn.unlink)((0,ji.join)(e,t.name))}catch(r){Lt.default.warn?.("Error deleting file",r)}try{await(0,Fn.rmdir)(e)}catch(t){Lt.default.warn?.("Error deleting directory",t)}}}function Wu({storageIndex:e,fileId:t,store:r}){let n=ju(r);return(0,ji.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 F9(e,t){let r=t.contentBuffer,n=r.length;if(!(n<l0))return e.size=n,KA(e,Qa.Readable.from([r]),t)}function k9(e){let t=ju(e.store),r=H9(),n=t?.length>1?G9(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=Wu(e),o=(0,ji.dirname)(i);(0,je.existsSync)(o)||(0,WA.ensureDirSync)(o),e.filePath=i}function H9(){let e=a0.get(Bn);if(!e){let t=0,r=ju(Bn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let o=0;if((0,je.existsSync)(n))for(let c of(0,je.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,ji.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)),a0.set(Bn,e)}return Number(Atomics.add(e,0,1n))}function G9(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(Z_);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,q9(e)),e.frequencyTable[t%Z_]}async function q9(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,WA.ensureDirSync)(s),o=await(0,Fn.statfs)(s)}let c=o.bavail*o.bsize;return Math.pow(c,.8)})),r=new Array(Z_),n=t.map(s=>1/s);for(let s=0;s<Z_;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 ng(e,t,r){Vu=t,Bn=r,ul=!1;try{return e()}finally{Vu=void 0,Bn=void 0}}function $9(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 sg(e,t,r){try{Xr=[],Vo=r,Bn=t,e()}catch(s){throw Vo=void 0,Xr=void 0,s}Vo=void 0;let n=Xr.length<2?Xr[0]:Promise.all(Xr);return Xr=void 0,n}function zm(e,t,r){Bn=r;try{return Vo=t,e()}finally{Vo=void 0}}function Ko(e,t){return Bn=t,e()}function Xa(e){ll(e,t=>{tg(t)})}function ll(e,t){if(e instanceof vs)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&ll(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&ll(e[r],t)}}function JA(e,t){let r;for(let n in e){let s=e[n];if(s instanceof Yu&&s.saveBeforeCommit){Bn=t;let i=jm(s,!0).saving??Promise.resolve();r=r?Promise.all(r,i):i}}return r}function K9(){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,t){let r,n,s=0;for(let d in e){let f=e[d];if(r=f.primaryStore.rootStore,n=f.auditStore,n)break}let i=new Set,o=ju(r);if(o)for(let d of o)await c(d);return await l(),Lt.default.warn?.(`Cleaned Orphan Blobs from ${t??"database"}, deleted ${s} blobs)`),s;async function c(d){try{if(!(0,je.existsSync)(d))return;for(let f of await(0,Fn.readdir)(d,{withFileTypes:!0})){let m=(0,ji.join)(d,f.name);if(f.isDirectory())await c(m);else if(i.size%1e6===0&&Lt.default.info?.("Finding all blobs for orphan check, paths accumulated",i.size),i.add(m),i.size%2e3===0){let p=(0,c0.getHeapStatistics)();p.used_heap_size>p.heap_size_limit*(.8-i.size/16e6)&&await l()}}}catch(f){Lt.default.error?.("Error searching path for blobs",d,f)}}a(c,"searchPath");async function l(){let d=0,f=Math.floor(((0,Wm.get)(x.STORAGE_BLOBCLEANUPSPEED)??1e4)/1e3+1);for(let m in e){Lt.default.warn?.("Checking for references to potential orphaned blobs in table",m);let p=e[m];for(let h of p.primaryStore.getRange({versions:!0,snapshot:!1,lazy:!0}))try{h.metadataFlags&Zr&&h.value&&u(h.value),d++%f===0?await(0,Ku.setTimeout)(1):await(0,Ku.setImmediate)()}catch(E){Lt.default.error?.("Error searching table",m," for references to potential orphaned blobs failed",E)}}Lt.default.warn?.("Checking for references to potential orphaned blobs in the audit log");for(let{value:m}of n.getRange({start:1,snapshot:!1,lazy:!0}))try{let p=At(m),h=n.tableStores[p.tableId],E=h?.getEntry(p.recordId);(!E||E.version!==p.version||!E.value)&&u(p.getValue(h)),d++%f===0?await(0,Ku.setTimeout)(1):await(0,Ku.setImmediate)()}catch(p){Lt.default.error?.("Error searching audit log for references to potential orphaned blobs failed",p)}Lt.default.warn?.("Deleting",i.size,"orphaned blobs"),s+=i.size;for(let m of i)try{await(0,Fn.unlink)(m)}catch(p){Lt.default.warn?.("Error deleting file",p)}Lt.default.warn?.("Finished deleting",i.size,"orphaned blobs"),i.clear()}a(l,"removePathsThatAreNotReferenced");function u(d){ll(d,f=>{if(f instanceof Yu){let m=Gr.get(f);if(m.fileId!=null){let p=Wu(m);i.has(p)&&i.delete(p)}}})}a(u,"checkObjectForReferences")}var Wi,Fn,je,eg,Qa,WA,Wm,ji,Lt,c0,Ku,l0,Nr,u0,jA,s0,v9,M9,i0,Gr,Vo,vs,Vu,Xr,Bn,ul,Ym,X_,U9,o0,Yu,f0,YA,a0,Z_,V9,os=se(()=>{Wi=require("msgpackr"),Fn=require("node:fs/promises"),je=require("node:fs"),eg=require("node:zlib"),Qa=require("node:stream"),WA=require("fs-extra"),Wm=b(fe());G();ji=require("path"),Lt=b(ir());$o();Ki();c0=require("node:v8"),Ku=require("node:timers/promises"),l0=8192,Nr=8,u0=0,jA=1,s0=255,v9=new Uint8Array([0,u0,255,255,255,255,255,255]),M9=new Uint8Array([0,jA,255,255,255,255,255,255]),i0=0xffffffffffff,Gr=new WeakMap,vs=global.Blob||K9(),ul=!1,Ym=new Uint8Array(8),X_=new DataView(Ym.buffer),U9=6e4;a(d0,"InstanceOfBlobWithNoConstructor");d0.prototype=vs.prototype;o0=!1,Yu=class e extends d0{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=Gr.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):(VA()&&$A(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=Gr.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=Wu(t),o,c=a(async()=>{let l,u=Nr;try{if(l=await(0,Fn.readFile)(i),l.length>=Nr){l.copy(Ym,0,0,Nr);let f=X_.getBigUint64(0);if(Number(f>>48n)===s0)throw new Error("Error in blob: "+l.subarray(Nr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<i0&&(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]===jA?new Promise((f,m)=>{(0,eg.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=Gr.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=Wu(t),o,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,_=a((R,S)=>{(0,je.open)(i,"r",(y,w)=>{if(y){if(y.code==="ENOENT"&&f!==!1&&(Lt.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),_(R,S)},20).unref();S(y),p.#e?.forEach(I=>I(y))}else o=w,R(w)})},"openFile");return new Promise(_)},pull:a(E=>{let _=0,R=100;return new Promise(a(function S(y,w){function I(X){(0,je.close)(o),clearTimeout(d),u&&u.close(),w(X),p.#e?.forEach(q=>q(X))}a(I,"onError");let H=Buffer.allocUnsafe(262144);(0,je.read)(o,H,0,H.length,c,(X,q,k)=>{if(l+=q,X)return I(X);if(c===0){if(q<Nr){R-- >0&&f!==!1?(h(),Lt.default.debug?.("File was empty, waiting for data to be written",i,R),setTimeout(()=>S(y,w),20).unref()):(Lt.default.debug?.("File was empty, throwing error",i,R),I(new Error(`Blob ${t.fileId} was empty`)));return}k.copy(Ym,0,0,Nr);let z=X_.getBigUint64(0);if(Number(z>>48n)===s0)return I(new Error("Error in blob: "+k.subarray(Nr,q)));if(_=Number(z&0xffffffffffffn),_<i0&&p.size!==_&&(p.size=_,p.#t))for(let Y of p.#t)Y(_);k=k.subarray(Nr,q),l-=Nr}else if(q===0){let z=Buffer.allocUnsafe(8);return(0,je.read)(o,z,0,Nr,0,Y=>{if(Y)return I(Y);if(Ym.set(z),_=Number(X_.getBigUint64(0)&0xffffffffffffn),_>l){h()?u?d=setTimeout(()=>{I(new Error(`File read timed out reading from ${i}`))},U9).unref():(u=(0,je.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(y,w))}),S(y,w)):m?I(new Error("Blob is incomplete")):(m=!0,S(y,w));return}(0,je.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,w);s&&l>=s&&(l>s&&(k=k.subarray(0,s-c)),l=_=s),n&&n>c&&(k=k.subarray(n-c))}c+=q;try{E.enqueue(k)}catch(z){return Lt.default.debug?.("Error enqueuing chunk",z),y()}l===_&&((0,je.close)(o),E.close()),y()})},"readMore"))},"pull"),cancel(){(0,je.close)(o),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,_=t.fileId+":blob";f=!E.attemptLock(_,0,()=>{f=!1}),f||E.unlock(_,0)}return f}}slice(t,r,n){let s=Gr.get(this),i=new e(n&&{type:n});if(s?.fileId){let o={...s,start:t,end:r};Gr.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)};Gr.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 o0||(o0=!0,Lt.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 Gr.get(this)?.saving??Promise.resolve()}},f0=500;a(tg,"deleteBlob");a(x9,"setDeletionDelay");global.createBlob=function(e,t){let r=new Yu(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(Gr.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Qa.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Qa.Readable.from(e);else throw new Error("Invalid source type");return r};a(jm,"saveBlob");a(KA,"writeBlobWithStream");a(rg,"getFileId");a(B9,"isSaving");a(m0,"getFilePathForBlob");YA=new Map;a(ju,"getRootBlobPathsForDB");a(zA,"deleteRootBlobPathsForDB");a(p0,"rimrafSteadily");a(Wu,"getFilePath");a(F9,"writeBlobWithBuffer");a(k9,"generateFilePath");a0=new Map;a(H9,"getNextFileId");Z_=128;a(G9,"getNextStorageIndex");a(q9,"createFrequencyTableForStoragePaths");a(ng,"encodeBlobsWithFilePath");a($9,"encodeBlobsAsBuffers");a(sg,"decodeBlobsWithWrites");a(zm,"decodeWithBlobCallback");a(Ko,"decodeFromDatabase");a(Xa,"deleteBlobsInObject");a(ll,"findBlobsInObject");a(JA,"startPreCommitBlobsForRecord");V9=new Wi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Wi.addExtension)({Class:vs,type:11,unpack:a(function(e){let t=V9.unpack(e),r=new Yu;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(Gr.set(r,{storageIndex:t[1],fileId:t[2],store:Bn}),Vo)return Vo(r)??r;if(!Bn)throw new Error("No store specified, cannot load blob from storage")}else Gr.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=Gr.get(e);if(Vu!==void 0&&(ul=!0,t?.recordId!==void 0&&t.recordId!==Vu))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<l0)return r.size=t.contentBuffer.length,(0,Wi.pack)([r,t.contentBuffer])}if(Vu!==void 0){if(t=jm(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Vu,(0,Wi.pack)([r,t.storageIndex,t.fileId])}if(t){if(Vo)return Vo(e),(0,Wi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,je.readFileSync)(Wu(t));if(n.length>=Nr&&(n.copy(Ym,0,0,Nr),Number(X_.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(K9,"polyfillBlob");a(Y9,"cleanupOrphans")});var S0={};ye(S0,{onStorageReclamation:()=>Jm,runReclamationHandlers:()=>eI,setAvailableSpaceRatioGetter:()=>j9});function Jm(e,t,r){(r||(0,ag.getWorkerIndex)()===(0,ag.getWorkerCount)()-1)&&(og.has(e)||og.set(e,[]),og.get(e).push({priority:0,handler:t}),ZA||(ZA=setTimeout(eI,E0).unref()))}async function eI(){for(let[e,t]of og)try{let r=await g0(e),n=W9/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&&(XA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){XA.default.error?.("Error running storage reclamation handlers",r)}ZA=setTimeout(eI,E0).unref()}function j9(e){g0=e??_0}var QA,ag,XA,cg,h0,og,W9,E0,ZA,_0,g0,lg=se(()=>{QA=require("node:fs/promises"),ag=b(st()),XA=b(ir());G();cg=b(fe()),h0=b(ae());cg.default.initSync();og=new Map,W9=cg.default.get(x.STORAGE_RECLAMATION_THRESHOLD)??.4,E0=(0,h0.convertToMS)(cg.default.get(x.STORAGE_RECLAMATION_INTERVAL))||36e5;a(Jm,"onStorageReclamation");_0=a(async e=>{if(QA.statfs){let t=await(0,QA.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"),g0=_0;a(eI,"runReclamationHandlers");a(j9,"setAvailableSpaceRatioGetter")});var D0={};ye(D0,{ACTION_32_BIT:()=>pg,ACTION_64_BIT:()=>X9,AUDIT_STORE_OPTIONS:()=>Zm,Decoder:()=>fl,HAS_BLOBS:()=>Zr,HAS_CURRENT_RESIDENCY_ID:()=>ml,HAS_EXPIRATION_EXTENDED_TYPE:()=>rp,HAS_ORIGINATING_OPERATION:()=>tp,HAS_PREVIOUS_RESIDENCY_ID:()=>pl,REMOTE_SEQUENCE_UPDATE:()=>hg,createAuditEntry:()=>hl,getLastRemoved:()=>J9,openAuditStore:()=>fg,readAuditEntry:()=>At,removeAuditEntry:()=>mg,setAuditRetention:()=>Q9,transactionKeyEncoder:()=>C0});function fg(e){let t=e.auditStore=e.openDB(tI.AUDIT_STORE_NAME,{create:!1,...Zm});t||(t=e.auditStore=e.openDB(tI.AUDIT_STORE_NAME,Zm),y0(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=nI;Jm(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()-rI/(1+i*i)})){try{m=mg(t,h,E)}catch(_){zu.warn("Error removing audit entry",_)}if(p=h,await new Promise(setImmediate),++f>=z9){o=10;break}}await m}finally{f===0?o=Math.min(o<<1,rI/10):(y0(t,p),o>100&&(o=o>>1)),d(void 0),c()}},o).unref()});return u}if(a(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,Xm.getWorkerIndex)()===(0,Xm.getWorkerCount)()-1&&c(),(0,Xm.getWorkerIndex)()===0&&!T0)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(T0=!0,zu.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 mg(e,t,r){let n=Z9(r),s;if(n&Zr){s=At(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)&&Ko(()=>Xa(s.getValue(i)),i.rootStore)}}if((n&15)===sI){s=s||At(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 y0(e,t){iI[0]=t,e.put(Symbol.for("last-removed"),O0)}function J9(e){let t=e.get(Symbol.for("last-removed"));if(t)return O0.set(t),iI[0]}function Q9(e,t=nI){rI=e,nI=t}function hl(e,t,r,n,s,i,o,c,l,u,d,f,m){let p=P0[o];if(!p)throw new Error(`Invalid audit entry type ${o}`);let h=1;if(n&&(n>1?Za.setFloat64(0,n):Ms.set(oI),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}R(s),R(t),_(r),Za.setFloat64(h,e),h+=8,l&ml&&R(u),l&pl&&R(d),l&rp&&(Za.setFloat64(h,f),h+=8),l&tp&&R(L0[m]),i?_(i):Ms[h++]=0,l?Za.setUint32(n?8:0,p|l|3221225472):Ms[n?8:0]=p;let E=Ms.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function _(S){let y=h;h+=1,h=(0,dl.writeKey)(S,Ms,h);let w=h-y-1;w>127?w>16383?(zu.error("Key or username was too large for audit entry",S),h=y+1,Ms[y]=0):(Ms.copyWithin(y+2,y+1,h),Za.setUint16(y,w|32768),h++):Ms[y]=w}function R(S){S<128?Ms[h++]=S:S<16384?(Za.setUint16(h,S|32768),h+=2):S<1056964608?(Za.setUint32(h,S|3221225472),h+=4):(Ms[h]=255,Za.setUint32(h+1,S),h+=5)}}function Z9(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 fl(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function At(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new fl(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&ml&&(m=n.readInt()),i&pl&&(p=n.readInt()),i&rp&&(h=n.readFloat64()),i&tp){let y=n.readInt();E=L0[y]}l=n.readInt();let _=n.position,R=n.position+=l,S;return{type:P0[i&7],tableId:c,nodeId:o,get recordId(){return(0,dl.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return R>_?(0,dl.readKey)(e,_,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,w,I){if(i&ug||i&Qm&&!w)return S||(S=Ko(()=>y.decoder.decode(e.subarray(n.position,r)),y.rootStore)),S;if(i&Qm&&I)return vA(y.getEntry(this.recordId),I,y)},getBinaryValue(){return i&(ug|Qm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return zu.error("Reading audit entry error",n,e),{}}}var dl,dg,tI,Xm,N0,zu,Ms,Za,C0,Zm,rI,z9,iI,O0,nI,T0,ug,Qm,R0,sI,b0,A0,I0,w0,pg,X9,hg,ml,pl,tp,rp,Zr,P0,L0,fl,Ki=se(()=>{dl=require("ordered-binary"),dg=b(fe()),tI=b(Jt());G();Xm=b(st()),N0=b(ae());El();zu=b(Q());z_();os();lg();(0,dg.initSync)();Ms=Buffer.alloc(2816),Za=new DataView(Ms.buffer,Ms.byteOffset,2816),C0={writeKey(e,t,r){return e===ep?(t.set(ep,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,dl.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,dl.readKey)(e,t,r)}},Zm={encoding:"binary",keyEncoder:C0},rI=(0,N0.convertToMS)((0,dg.get)(x.LOGGING_AUDITRETENTION))||86400*3,z9=1e3,iI=new Float64Array(1),O0=new Uint8Array(iI.buffer),nI=1e4,T0=!1;a(fg,"openAuditStore");a(mg,"removeAuditEntry");a(y0,"updateLastRemoved");a(J9,"getLastRemoved");a(Q9,"setAuditRetention");ug=16,Qm=32,R0=1,sI=2,b0=3,A0=4,I0=5,w0=6,pg=14,X9=15,hg=11,ml=512,pl=1024,tp=2048,rp=4096,Zr=8192,P0={put:R0|ug,[R0]:"put",delete:sI,[sI]:"delete",message:b0|ug,[b0]:"message",invalidate:A0|Qm,[A0]:"invalidate",patch:I0|Qm,[I0]:"patch",relocate:w0,[w0]:"relocate"},L0={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(hl,"createAuditEntry");a(Z9,"readAction");a(At,"readAuditEntry");fl=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 Eg(){return aI||(aI=ze({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),aI}function t7(e){return e=e.replace(e7,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 r7(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 lI(e){let t=v0.default.createHash("shake128",{outputLength:4}),r;return(0,M0.isIPv6)(e)?r=t7(e):r=e.toLowerCase(),r7(Uint8Array.from(t.update(r).digest()))}var v0,M0,cI,aI,e7,uI=se(()=>{Oe();v0=b(require("crypto")),M0=require("node:net"),cI=new Map;a(Eg,"getAnalyticsHostnameTable");e7=/(\d{1,3}\.){3}\d{1,3}$/;a(t7,"normalizeIPv6");a(r7,"nodeHashToNumber");a(lI,"stableNodeId")});var Yo,dI=se(()=>{Yo={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 H0={};ye(H0,{captureProfile:()=>mI,userCodeFolders:()=>_g});async function mI(e){let r=k0/1e6,n=new Map,s=new Map,i=new Map,o=0,c=0;try{let u=fI.time.stop(!0),d=u.stringTable.strings;for(let f of u.function)s.set(f.id,d[f.filename]);for(let f of u.location)n.set(f.id,f.line[0]);for(let f of u.sample)l(f);We(c*r,"cpu-usage","harper"),We(o*r,"cpu-usage","user");for(let[f,m]of i)if(m>100){let p=n.get(f),h=s.get(p.functionId)+":"+p.line;We(m*r,"cpu-usage",h)}}catch(u){F0.error?.("analytics profiler error:",u)}finally{e&&setTimeout(()=>{let u=((0,np.get)(x.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;mI(u)},e).unref()}function l(u){let d=!1;for(let f of u.locationId){let m=s.get(n.get(f).functionId);if(_g.some(p=>m.startsWith(p))){let p=u.value[0];o+=p,d||i.set(f,(i.get(f)??0)+p);return}if(m.startsWith(x0.PACKAGE_ROOT)){let p=u.value[0];c+=p,d||(i.set(f,(i.get(f)??0)+p),d=!0)}}}a(l,"getUserHitCount")}var np,x0,B0,fI,F0,U0,_g,k0,G0=se(()=>{as();np=b(fe());G();x0=b(yt()),B0=require("node:fs"),fI=require("@datadog/pprof"),F0=b(Q()),U0=(0,np.getHdbBasePath)(),_g=U0?[U0]:[];process.env.RUN_HDB_APP&&_g.push((0,B0.realpathSync)(process.env.RUN_HDB_APP));k0=5e4;(async()=>{if(_g.length===0)return;fI.time.start({intervalMicros:k0});let e=((0,np.get)(x.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;setTimeout(()=>{mI(e)},e).unref()})();a(mI,"captureProfile")});var Tg={};ye(Tg,{addAnalyticsListener:()=>ap,analyticsDelay:()=>_I,calculateCPUUtilization:()=>iB,diffResourceUsage:()=>oB,onAnalyticsAggregate:()=>TI,recordAction:()=>We,recordActionBinary:()=>tn,recordHostname:()=>gI,setAnalyticsEnabled:()=>i7});function i7(e){eB=e,clearTimeout(ip),ip=null}function o7(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 a7(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},Sg.set(e,o)}function We(e,t,r,n,s){if(!eB)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Sg.get(i);o?o7(e,o):a7(i,e,t,r,n,s),ip||c7()}function tn(e,t,r,n,s){We(!!e,t,r,n,s)}function ap(e){rB.push(e)}function c7(){pI||=performance.now(),ip=setTimeout(async()=>{ip=null;let e=performance.now()-pI;pI=0;let t=[],r={time:Date.now(),period:e,threadId:_l.threadId,metrics:t};for(let[s,i]of Sg){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 sB){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 aB()}let n=process.memoryUsage();t.push({metric:"memory",threadId:_l.threadId,byThread:!0,...n});for(let s of rB)s(t);Sg=new Map,_l.parentPort?_l.parentPort.postMessage({type:tB,report:r}):uB({report:r})},_I).unref()}async function gI(){let e=Ue.hostname;en.trace?.("recordHostname server.hostname:",e);let t=lI(e);en.trace?.("recordHostname nodeId:",t);let r=Eg();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 Ju(e,t){let r=Ue.hostname,n=cI.get(r);n?en.trace?.("storeMetric cached nodeId:",n):(n=lI(r),en.trace?.("storeMetric new nodeId:",n),cI.set(r,n));let s={id:[(0,EI.getNextMonotonicTime)(),n],...t};en.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function iB(e,t){let r=e.userCPUTime+e.systemCPUTime;return en.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function oB(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 l7(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={metric:Yo.TABLE_SIZE,database:t,table:s,size:c};en.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),Ju(e,l),n+=c}return n}function q0(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=Z0.statSync(s.primaryStore.env.path).size,c=l7(e,r,n),l=o-c,u={metric:Yo.DATABASE_SIZE,database:r,size:o,used:c,free:l,audit:i};Ju(e,u),en.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){en.warn?.("Error getting DB size metrics",s)}}function $0(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:Yo.STORAGE_VOLUME,database:r,...i};Ju(e,o),en.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){en.warn?.("Error getting DB volume metrics",s)}}async function u7(e,t=6e4){let r=SI(),n=cB(),s=new Promise(y=>{let w=performance.now();setImmediate(()=>{let I=performance.now();I-w>5e3&&en.warn?.("Unusually high event queue latency on the main thread of "+Math.round(I-w)+"ms"),w=performance.now()}),n.primaryStore.prefetch([1],()=>{let I=performance.now();I-w>5e3&&en.warn?.("Unusually high task queue latency on the main thread of "+Math.round(I-w)+"ms"),y(I-w)})}),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:w}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!w)continue;if(o){if(y>o+t)break}else o=y;d=y;let{metrics:I,threadId:H}=w;for(let X of I||[]){let{path:q,method:k,type:z,metric:Y,count:ce,total:de,distribution:te,threads:Se,...Ne}=X;ce||(ce=1);let Ke=Y+(q?"-"+q:"");k!==void 0&&(Ke+="-"+k),z!==void 0&&(Ke+="-"+z);let $e=c.get(Ke);if($e){if($e.threads){let nr=$e.threads[H];if(nr)$e=nr;else{$e.threads[H]={...Ne};continue}}$e.count||($e.count=1);let Ir=$e.count;for(let nr in Ne){let zr=Ne[nr];typeof zr=="number"&&($e[nr]=($e[nr]*Ir+zr*ce)/(Ir+ce))}$e.count+=ce,de>=0&&($e.total+=de,$e.ratio=$e.total/$e.count)}else $e={period:t,...X},delete $e.distribution,c.set(Ke,$e),$e.byThread&&($e.threads=[],$e.threads[H]={...Ne},u.push($e));if(te){te=te.map(nr=>typeof nr=="number"?{value:nr,count:1}:nr);let Ir=l.get(Ke);Ir?Ir.push(...te):l.set(Ke,te)}}await aB()}for(let y of u){let{path:w,method:I,type:H,metric:X,count:q,total:k,distribution:z,threads:Y,...ce}=y;Y=Y.filter(de=>de);for(let de in ce){if(typeof y[de]!="number")continue;let te=0;for(let Se of Y){let Ne=Se[de];typeof Ne=="number"&&(te+=Ne)}y[de]=te}y.count=Y.length,delete y.threads,delete y.byThread}for(let[y,w]of l){let I=c.get(y);w.sort((nr,zr)=>nr.value>zr.value?1:-1);let H=I.count-1,X=[],q=0,k=0,z;for(let nr of sB){let zr=H*nr;for(;q<zr;)z=w[k++],q+=z.count,k===1&&q--;let xr=w[k>1?k-2:0];z||(z=w[0]),X.push(z.value-(z.value-xr.value)*(q-zr)/z.count)}let[Y,ce,de,te,Se,Ne,Ke,$e,Ir]=X;Object.assign(I,{p1:Y,p10:ce,p25:de,median:te,p75:Se,p90:Ne,p95:Ke,p99:$e,p999:Ir})}let f;for(let[,y]of c)y.time=d,Ju(n,y),f=!0;if(f)for(let y of nB)y(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let y={metric:Yo.MAIN_THREAD_UTILIZATION,idle:p-V0,active:h-K0,taskQueueLatency:await s,time:m,...process.memoryUsage()};Ju(n,y)}V0=p,K0=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 _=oB(gg,E);en.trace?.(`diffed resourceUsage: ${JSON.stringify(_)}`),_.time=m,_.period=gg.time?m-gg.time:t,_.cpuUtilization=iB(_,_.period);let R={metric:Yo.RESOURCE_USAGE,..._};Ju(n,R),gg=E;let S=lt();q0(n,S),q0(n,{system:S.system}),$0(n,S),$0(n,{system:S.system})}async function Y0(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function SI(){return W0||(W0=ze({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function cB(){return j0||(j0=ze({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function m7(){lB=!0;let e=(0,op.get)(x.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await u7(_I,e),await Y0(SI(),d7),await Y0(cB(),f7)},Math.min(e/2,2147483647)).unref()}function uB(e,t){let r=e.report;r.threadId=t?.threadId||_l.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(z0+=n.mean*n.count);r.totalBytesProcessed=z0,t&&(r.metrics.push({metric:Yo.UTILIZATION,...t.performance.eventLoopUtilization(J0.get(t))}),J0.set(t,t.performance.eventLoopUtilization())),r.id=(0,EI.getNextMonotonicTime)(),SI().primaryStore.put(r.id,r),lB||m7(),p7&&(dB=E7(r))}async function E7(e){if(await dB,!ec){let r=(0,sp.dirname)(n7());try{ec=await(0,hI.open)((0,sp.join)(r,"analytics.log"),"r+")}catch{ec=await(0,hI.open)((0,sp.join)(r,"analytics.log"),"w+")}}let t=(await ec.stat()).size;if(t>h7){let r=Buffer.alloc(t);await ec.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ec.write(r,{position:0}),await ec.truncate(r.length),t=r.length}await ec.write(JSON.stringify(e)+`
14
+ `,t)}function TI(e){e&&nB.push(e)}var _l,Q0,X0,sp,hI,EI,op,Z0,n7,s7,en,Sg,eB,ip,pI,_I,tB,rB,nB,sB,V0,K0,gg,aB,d7,f7,W0,j0,lB,z0,J0,p7,dB,ec,h7,as=se(()=>{_l=require("worker_threads"),Q0=b(st());Oe();X0=b(Q()),sp=require("path"),hI=require("fs/promises"),EI=b(xn()),op=b(fe());G();Hr();Z0=b(require("node:fs"));uI();dI();({getLogFilePath:n7,forComponent:s7}=X0.default);setTimeout(()=>{Promise.resolve().then(()=>G0())},1e3);en=s7("analytics").conditional;(0,op.initSync)();Sg=new Map,eB=(0,op.get)(x.ANALYTICS_AGGREGATEPERIOD)>-1;a(i7,"setAnalyticsEnabled");a(o7,"recordExistingAction");a(a7,"recordNewAction");a(We,"recordAction");Ue.recordAnalytics=We;a(tn,"recordActionBinary");pI=0,_I=1e3,tB="analytics-report",rB=[],nB=[];a(ap,"addAnalyticsListener");sB=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(c7,"sendAnalytics");a(gI,"recordHostname");a(Ju,"storeMetric");a(iB,"calculateCPUUtilization");a(oB,"diffResourceUsage");a(l7,"storeTableSizeMetrics");a(q0,"storeDBSizeMetrics");a($0,"storeVolumeMetrics");a(u7,"aggregation");V0=0,K0=0,gg={userCPUTime:0,systemCPUTime:0},aB=a(()=>new Promise(setImmediate),"rest");a(Y0,"cleanup");d7=36e5,f7=31536e6;a(SI,"getRawAnalyticsTable");a(cB,"getAnalyticsTable");(0,Q0.setChildListenerByType)(tB,uB);a(m7,"startScheduledTasks");z0=0,J0=new Map,p7=!1;a(uB,"recordAnalytics");h7=1e6;a(E7,"logAnalytics");a(TI,"onAnalyticsAggregate")});var EB={};ye(EB,{ENTRY:()=>g7,HAS_EXPIRATION:()=>Ag,HAS_RESIDENCY_ID:()=>II,HAS_STRUCTURE_UPDATE:()=>Ig,LAST_TIMESTAMP_PLACEHOLDER:()=>ep,LOCAL_TIMESTAMP:()=>_7,METADATA:()=>Xu,NEW_TIMESTAMP_PLACEHOLDER:()=>mB,NO_TIMESTAMP:()=>Rg,PENDING_LOCAL_TIME:()=>wI,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>oI,RecordEncoder:()=>AI,TIMESTAMP_ASSIGN_LAST:()=>T7,TIMESTAMP_ASSIGN_NEW:()=>pB,TIMESTAMP_ASSIGN_PREVIOUS:()=>hB,TIMESTAMP_PLACEHOLDER:()=>yg,TIMESTAMP_RECORD_PREVIOUS:()=>yI,entryMap:()=>tc,handleLocalTimeForGets:()=>wg,lastMetadata:()=>ut,recordUpdater:()=>NI,removeEntry:()=>Tl});function b7(){return lp[0]=lp[0]^64,S7.getFloat64(0)}function wg(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[Xu],l.localTime=ut.localTime,l.residencyId=ut.residencyId,l.size=ut.size,ut.expiresAt>=0&&(l.expiresAt=ut.expiresAt),ut=null),l.value&&tc.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&&(tc.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[Xu],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,Sl.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Sl.length;u++){let d=Sl[u].deref();(!d||d.isDone||d.isCommitted)&&Sl.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){l==null?gl=Rg:f?gl=i?.localTime?yI|hB:Rg:gl=l?i?.localTime?yI|16384:pB|16384:Rg;let p=u?.expiresAt;if(p>=0&&(c|=Ag),cp=c,RI=p,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:gl>0},E,_=0;try{let R=i?.residencyId,S=u?.residencyId;S&&(bI=S,cp|=II,_|=ml),R!==S&&(_|=pl,R||(R=0)),c&Ag&&(_|=rp),u?.originatingOperation&&(_|=tp),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&d!=="message"&&i.metadataFlags&Zr&&(!i.localTime||!r.getBinaryFast(i.localTime))&&Xa(i.value);let y;if(s!==void 0&&(y=ng(()=>e.put(n,s,h),n,e.rootStore),ul&&(_|=Zr)),l){let w=u?.user?.username;if(m&&(ng(()=>e.encoder.encode(m),n,e.rootStore),ul&&(_|=Zr)),e.encoder.hasStructureUpdate&&(_|=Ig,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let I=i?.localTime,H=r.get(I);if(H){let X=At(H).previousLocalTime;return y=r.put(I,hl(o,t,n,X,u?.nodeId??server.replication.getThisNodeId(r)??0,w,d,Qu,_,S,R,p),{ifVersion:E}),y}}y=r.put(s===void 0?mB:ep,hl(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,w,d,Qu,_,S,R,p,u?.originatingOperation),{instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&y7.has(d)&&We(Qu?.length??1,"db-write",u.tableToTrack,null),y}catch(R){throw R.message+=" id: "+n+" options: "+h,R}}}function Tl(e,t,r){if(t)return t.value&&t.metadataFlags&Zr&&!e.auditStore?.getBinaryFast(t.localTime)&&Xa(t.value),e.remove(t.key,r)}var fB,bg,yg,ep,oI,mB,_7,Xu,g7,lp,S7,Rg,pB,T7,hB,yI,Ag,II,wI,Ig,y7,tc,R7,Qu,gl,cp,RI,bI,ut,AI,Sl,El=se(()=>{fB=require("msgpackr");Ki();bg=b(Q());os();os();as();yg=new Uint8Array([1,1,1,1,4,64,0,0]),ep=new Uint8Array([1,1,1,1,1,0,0,0]),oI=new Uint8Array([1,1,1,1,3,64,0,0]),mB=new Uint8Array([1,1,1,1,0,64,0,0]),_7=Symbol("local-timestamp"),Xu=Symbol("metadata"),g7=Symbol("entry"),lp=new Uint8Array(8),S7=new DataView(lp.buffer,0,8),Rg=0,pB=0,T7=1,hB=3,yI=4,Ag=16,II=32,wI=1,Ig=256,y7=new Set(["put","patch","delete","message","publish"]),tc=new WeakMap,gl=0,cp=-1,RI=-1,bI=0,ut=null,AI=class extends fB.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{a(this,"RecordObject")}getUpdatedTime(){return tc.get(this)?.version}getExpiresAt(){return tc.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,o){if(gl||cp>=0){let c=0,l=gl;l&&(c+=8,gl=0);let u=cp,d=RI,f=bI;u>=0&&(c+=4,cp=-1,d>=0&&(c+=8,RI=-1),f&&(c+=4,bI=0));let m=R7=n.call(this,i,o|2048|c);Qu=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(yg[4]=l,yg[5]=l>>8,m.set(yg,p),p+=8),ul&&(u|=Zr),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|pg<<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 Qu=n.call(this,i,o),Qu};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(lp,0,c),c+=8;else for(let m=0;m<8;m++)lp[m]=t[c++];l=b7(),i=t[c]}let u,d;i<32&&(i===pg?(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&Ag&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&II&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Ko(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return ut={localTime:l,[Xu]:o,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:Ko(()=>super.decode(t,r),this.rootStore)}catch(c){return bg.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(b7,"getTimestamp");a(wg,"handleLocalTimeForGets");Sl=[];setInterval(()=>{for(let e=0;e<Sl.length;e++){let t=Sl[e].deref();!t||t.isDone||t.isCommitted?Sl.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(bg.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):bg.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(Tl,"removeEntry")});function PI(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?PI(f.conditions,f.operator,r,n,s,i,o,c):rd(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?(w,I)=>y.some(H=>H(w,I)):(w,I)=>y.every(H=>H(w,I))}let _=(h.attribute||h[0])===r.primaryKey,R=dp(h,r,i,c,_,p);return m&&E<f.length-1&&p&&(p=D7(r.primaryStore,h.estimated_count,p)),R}).filter(Boolean)}a(d,"mapConditionsToFilters")}function rd(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],w=Ji(n.attributes,y);if(w.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=w.definition?.tableClass||w.elements?.definition?.tableClass,H=new Map,X=rd({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,I,s,H);if(w.relationship.to){i[c[0]]=H;let q=!!Ji(I.attributes,w.relationship.to)?.elements;X=C7(X,w,I.primaryStore,q,H)}if(w.relationship.from){let q=a(k=>(k?.key!==void 0&&(k=k.key),rd({attribute:w.relationship.from,value:k},t,r,n,s,H)),"searchEntry");w.elements?(i[c[0]]=H,X=O7(X,w,I.primaryStore,H,q)):X=X.flatMap(q)}return X}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 _;switch(LI[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]=zi.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,_=!0;break;default:throw new rn.ClientError(`Unknown query comparator "${u}"`)}let R;if(typeof m=="string"&&m.length>Us.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,Us.MAX_SEARCH_KEY_LENGTH)+Us.OVERFLOW_MARKER,E=!1,R=dp(e,n,null,i,d)),typeof p=="string"&&p.length>Us.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,Us.MAX_SEARCH_KEY_LENGTH)+Us.OVERFLOW_MARKER,h=!0,R=R??dp(e,n,null,i,d)),r){let y=m;m=p,p=y,y=!E,E=!h,h=y}if(!f||f.isIndexing||_||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&&_)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??dp(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:w,value:I}){return this?.isSync?I&&R(I)?w:rc.SKIP:new Promise((H,X)=>setImmediate(()=>{try{H(I&&R(I)?w:rc.SKIP)}catch(q){X(q)}}))}:w=>w.value==null&&!(w.metadataFlags&(kn|yl))?rc.SKIP:(o?._freezeRecords&&Object.freeze(w.value),w));return y.hasEntries=!0,y}else return f?f.customIndex?f.customIndex.search(e,o).map(y=>{if(typeof y=="object"&&y){let{key:w,...I}=y,H=n.primaryStore.getEntry(w);return o?._freezeRecords&&Object.freeze(H?.value),{...I,...H}}return y}):f.getRange(S).map(R?function({key:y,value:w}){let I;return typeof y=="string"&&y.length>Us.MAX_SEARCH_KEY_LENGTH?I=n.primaryStore.get(w):I={[c]:y},this.isSync?R(I)?w:rc.SKIP:new Promise((H,X)=>setImmediate(()=>{try{H(R(I)?w:rc.SKIP)}catch(q){X(q)}}))}:({value:y})=>y):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:y,value:w}){return this.isSync?w&&R(w)?y:rc.SKIP:new Promise((I,H)=>setImmediate(()=>{try{I(w&&R(w)?y:rc.SKIP)}catch(X){H(X)}}))})}function Ji(e,t){if(Array.isArray(t))if(t.length>1){let r=Ji(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?Ji(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 C7(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 O7(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 dp(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=Ji(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=dp({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 _,R=a((y,w)=>{let I,H;return E?E.returnDirect?(I=E(y,r,w),H=ut):(H=E(y,r,w,!0),Array.isArray(H)?(I=H.map(X=>X.value),H=null):I=H?.value):I=y[d],{subObject:I,subEntry:H}},"getSubObject"),S=a((y,w)=>{if(E&&h.idFilter){if(!_)if(h.idFilter.idSet?.size===1){for(let k of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:k};_=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else _=u(E.from??t.primaryKey,h.idFilter,!1,!0);let q=_(y);return _.idFilter&&(S.idFilter=_.idFilter),q}let{subObject:I,subEntry:H}=R(y,w);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(z=>z[m.primaryKey]):k}}),I.some(h)):h(I,H):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),LI[o]||o){case Us.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,zi.compareKeys)(d,l[0])>=0&&(0,zi.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,zi.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,zi.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,zi.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,zi.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,zi.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&&Cg(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,_=3;function R(S){let y=S[d],w;if(typeof y!="object"||!y||p?w=f(y):Array.isArray(y)?w=y.some(f):y instanceof Date&&(w=f(y.getTime())),m&&(_++,!w&&!R.idFilter&&++E/_*i>h)){let I=rd(e,r.transaction.getReadTxn(),!1,t),H;R.to?H=I.flatMap(q=>t.primaryStore.get(q)[R.to]):H=I.map(nd);let X=new Set(H);R.idFilter=q=>X.has(nd(q)),R.idFilter.idSet=X}return w}return a(R,"recordFilter"),s&&(R.idFilter=f),R}a(u,"attributeComparator")}function Cg(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/Wo(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=LI[n]||n,n===Us.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=Ji(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=Cg(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*Wo(e.indices[i.relationship.from])/(Wo(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=Wo(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=w7*Wo(e.primaryStore)+1;else if(n==="between")r.estimated_count=I7*Wo(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=Wo(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=A7*Wo(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function Og(e,t){if(e)if(jo=e,Zu.lastIndex=0,P7.test(e))try{if(t&&(t.conditions=[]),li=t??new td,up(li,""),qr!==jo.length&&Qt("Unable to parse query, unexpected end of query"),li.parseErrorMessage&&(li.parseError=new CI(t.parseErrorMessage),!t))throw li.parseError;return li}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${qr} in '${jo}'`,li.parseErrorMessage&&(r.message+=", "+li.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Qt(e){let t=`${e} at position ${qr}`;li.parseErrorMessage=li.parseErrorMessage?li.parseErrorMessage+", "+t:t}function up(e,t){let r=Zu,n,s,i,o,c,l=decodeURIComponent,u;for(;n=r.exec(jo);){qr=r.lastIndex;let[,d,f]=n;o?(d&&Qt(`expected operator, but encountered '${d}'`),o=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Qt(`invalid FIQL operator ${d}`),l=_B):(l=decodeURIComponent,i="equals",d||Qt("attribute must be specified before equality comparator"),s=ed(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=N7[f],l=OI[i]?_B:decodeURIComponent,d||Qt(`attribute must be specified before comparator ${f}`),s=ed(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Qt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Qt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Qt("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&gB(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else Ng(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?Qt("conditions/comparisons are not allowed in a property list"):e.push(ed(d)),s=void 0;break;case"(":Zu.lastIndex=qr;let p=up(d?[]:new td,")");switch(d){case"":Ng(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:Qt("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":Qt("group by is not implemented yet");case"sort":e.sort=SB(p);break;default:Qt(`unknown query function call ${d}`)}jo[qr]===","?r.lastIndex=++qr:o=!0,s=null;break;case"{":e.conditions&&Qt("property sets are not allowed in a queries"),d||Qt("property sets must have a defined parent property name"),Zu.lastIndex=qr,m=up([],"}"),m.name=d,e.push(m),jo[qr]===","?r.lastIndex=++qr:o=!0;break;case"[":if(Zu.lastIndex=qr,d?(m=up(new td,"]"),m.name=d):m=up(e.conditions?new td:[],"]"),e.conditions)if(Ng(e,u),jo[qr]==="="){l=decodeURIComponent,i="equals",s=ed(d),r.lastIndex=++qr;break}else e.conditions.push(m),s=null;else e.push(m);jo[qr]===","?r.lastIndex=++qr: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"&&gB(h,d),Ng(e,u),e.conditions.push(h)}else d&&Qt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(ed(d));return e}else Qt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Qt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?L7:Zu,r.lastIndex=qr),qr===jo.length)return e}t&&Qt(`expected '${t}', but encountered end of string`)}function Ng(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Qt("Can not mix operators within a condition grouping"):e.operator=t)}function ed(e){return e.indexOf(".")>-1?e.split(".").map(ed):decodeURIComponent(e)}function _B(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 gB(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 SB(e){let t=TB(e[0]);return e.length>1&&(t.next=SB(e.slice(1))),t}function TB(e){if(Array.isArray(e)){let t=TB(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}}Qt(`Unknown sort type ${e}`)}function nd(e){return Array.isArray(e)?e.join("\0"):e}function Wo(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function D7(e,t,r){return t*r/Wo(e)}var rn,Us,zi,rc,A7,I7,w7,N7,OI,LI,CI,P7,Zu,L7,qr,li,jo,td,Pg=se(()=>{rn=b(Ee()),Us=b(Jt()),zi=require("ordered-binary"),rc=require("lmdb");Lg();El();A7=.3,I7=.1,w7=.05,N7={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},OI={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(PI,"executeConditions");a(rd,"searchByIndex");a(Ji,"findAttribute");a(C7,"joinTo");a(O7,"joinFrom");LI={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(dp,"filterByType");a(Cg,"estimateCondition");CI=class extends rn.Violation{static{a(this,"SyntaxViolation")}},P7=/[()[\]|!<>.]|(=\w*=)/,Zu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,L7=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(Og,"parseQuery");a(Qt,"recordError");a(up,"parseBlock");a(Ng,"assignOperator");a(ed,"decodeProperty");a(_B,"typedDecoding");a(gB,"wildcardDecoding");a(SB,"toSortObject");a(TB,"toSortEntry");td=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(nd,"flattenKey");a(Wo,"estimatedEntryCount");a(D7,"intersectionEstimate")});var yB,xs,Dg=se(()=>{yB=b(ai());Qi();xs=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,yB._assignPackageExport)("Resource",Xt)});var NB={};ye(NB,{MultiPartId:()=>vg,Resource:()=>Xt,contextStorage:()=>id,snakeCase:()=>M7,transformForSelect:()=>od});function M7(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function RB(e,t){if(Rl=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(Rl=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new vg;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){Rl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return Rl=!0,null;e[e.length-1]==="/"&&(Rl=!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 Fo?o=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new sd.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 _=this.parsePath(c,o,l);_?.id!==void 0?(_.query&&(l?l=Object.assign(_.query,l):l=_.query),u=_.isCollection,c=_.id):c=_,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 xs,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new xs,l.id=c,c==null&&(t.method==="get"&&wB.default.warn?.(`Using an argument with a value of ${c} for ${t.method}, is deprecated`,new Error("Invalid id")),u=!0);l||(l=new xs,l.id=c),u&&(l.isCollection=!0);let f;o||(o=id.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=>id.run(o,()=>h(E)),"runAction")),o?.transaction){let E=this.getResource(c,o,f);return E.then?E.then(p):p(E)}else return bt(o,()=>{o.transaction.startedFrom={resourceName:this.name,method:t.method};let E=this.getResource(c,o,f);return E.then?E.then(p):p(E)},f);function h(E){if(o.authorize&&(o.authorize=!1,m!==!1)){let _=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(_?.then)return _.then(R=>{if(!R)throw new sd.AccessViolation(o.user);return typeof d?.then=="function"?d.then(S=>e(E,l,o,S)):e(E,l,o,d)});if(!_)throw new sd.AccessViolation(o.user)}return typeof d?.then=="function"?d.then(_=>e(E,l,o,_)):e(E,l,o,d)}a(h,"authorizeActionOnResource")}}function cs(e,t){let r=new sd.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 DI(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 od(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):DI(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(DI(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(DI(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]=od(c.select||c,d)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var bB,AB,sd,IB,wB,id,v7,Xt,Rl,vg,Qi=se(()=>{bB=require("crypto");km();$u();AB=b(ai()),sd=b(Ee());Ja();Pg();IB=require("async_hooks");Dg();wB=b(ir()),id=new IB.AsyncLocalStorage,v7={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Xt=class{static{a(this,"Resource")}#e;#t;#n;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=od(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0,method:"get"});static put=Hn(function(t,r,n,s){if(Array.isArray(s)&&t.#n&&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):cs(t,"put")},{hasContent:!0,type:"update",method:"put"});static patch=Hn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):cs(t,"patch")},{hasContent:!0,type:"update",method:"patch"});static delete=Hn(function(t,r,n,s){return t.delete?t.delete(r):cs(t,"delete")},{hasContent:!1,type:"delete",method:"delete"});static getNewId(){return(0,bB.randomUUID)()}static create(t,r,n){let s;return this.loadAsInstance===!1?typeof t=="object"&&t&&!n?(n=r,r=t,s=new xs,s.isCollection=!0):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),n?n.getContext&&(n=n.getContext()):n=id.getStore()??{},bt(n,async()=>{n.transaction.startedFrom??={resourceName:this.name,method:"create"};let i=new this(s,n),o=await i.create?i.create(s,r):cs(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):cs(t,"delete")},{hasContent:!1,type:"update",method:"invalidate"});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",method:"post"});static update=Hn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update",method:"update"});static connect=Hn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):cs(t,"connect")},{hasContent:!0,type:"read",method:"connect"});static subscribe=Hn(function(t,r,n,s){return t.subscribe?t.subscribe(r):cs(t,"subscribe")},{type:"read",method:"subscribe"});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):cs(t,"publish")},{hasContent:!0,type:"create",method:"publish"});static search=Hn(function(t,r,n){let s=t.search?t.search(r):cs(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let o=od(i,t.constructor);return s.map(o)}return s},{type:"read",method:"search"});static query=Hn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):cs(t,"search")},{hasContent:!0,type:"read",method:"query"});static copy=Hn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):cs(t,"copy")},{hasContent:!0,type:"create",method:"copy"});static move=Hn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):cs(t,"move")},{hasContent:!0,type:"delete",method:"move"});async post(t,r){if(this.constructor.loadAsInstance===!1){if(t.isCollection&&this.create)return r=await this.create(t,r),r?.[this.constructor.primaryKey]}else if(this.#n)return(await this.constructor.create(this.#e,t,this.#t)).#e;cs(this,"post")}static isCollection(t){return t&&t.#n}get isCollection(){return this.#n}static coerceId(t){return t}static parseQuery(t,r){return Og(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1),c=r?.headers&&v7[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:RB(t,this),isCollection:Rl}}let i=RB(t,this);return Rl?{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.#n=!0),s}subscribe(t){return new is}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new is}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,AB._assignPackageExport)("Resource",Xt);a(M7,"snakeCase");a(RB,"pathToId");vg=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(Hn,"transactional");a(cs,"missingMethod");a(DI,"selectFromObject");a(od,"transformForSelect")});var bl,vI=se(()=>{bl=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 MI={};ye(MI,{Resources:()=>ad,keyArrayToString:()=>cd,resetResources:()=>U7,resources:()=>Bs});function U7(){return Bs=new ad,Ue.resources=Bs,Bs}function cd(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var CB,OB,ad,Bs,nc=se(()=>{Ja();vI();CB=b(Q()),OB=b(Ee());Hr();ad=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 OB.ServerError(`Conflicting paths for ${t}`);CB.default.error(c),i.Resource=new bl(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 bt(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(cd,"keyArrayToString")});function BI(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=LB,x7(e.primaryStore,e.auditStore)):(c=PB,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{DB(PB[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=cd(t);let d=new xI(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 DB(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),vB(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=At(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=cd(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,UI.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,UI.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 x7(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=LB[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{DB(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function vB(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function MB(e){return e.nextTransaction||(BI({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),vB(e)),e.nextTransaction}var UI,PB,LB,xI,FI=se(()=>{UI=b(Q());$u();nc();Ki();PB=Object.create(null),LB=Object.create(null);a(BI,"addSubscription");xI=class extends is{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(DB,"notifyFromTransactionData");a(x7,"listenToCommits");a(vB,"nextTransaction");a(MB,"whenNextTransaction")});var xB=M((KPe,UB)=>{"use strict";var kI=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};UB.exports=kI});var FB=M((WPe,BB)=>{"use strict";var HI=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};BB.exports=HI});var fp=M(HB=>{"use strict";var kB=fe(),B7=(G(),D(j)),{RecordEncoder:F7}=(El(),D(EB));kB.initSync();var k7=kB.get(B7.CONFIG_PARAMS.STORAGE_CACHING)!==!1,GI=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=k7&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:F7})}};HB.OpenDBIObject=GI});var mp=M((QPe,GB)=>{"use strict";var ls=fe(),Fs=(G(),D(j));ls.initSync();var Mg=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=ls.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||ls.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||ls.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",ls.get(Fs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=ls.get(Fs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),ls.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=ls.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),ls.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=ls.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),ls.get(Fs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=ls.get(Fs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=ls.get(Fs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};GB.exports=Mg;Mg.MAX_DBS=1e4});var gt=M((ZPe,QB)=>{"use strict";var $I=require("lmdb"),ui=require("fs-extra"),us=require("path"),Ug=xn(),VB=Q(),Gn=Jr().LMDB_ERRORS_ENUM,xg=FB(),{OpenDBIObject:VI}=fp(),KB=mp(),sc=Jt(),qB=(G(),D(j)),{table:H7,resetDatabases:G7}=(Oe(),D(mt)),$B=fe(),di=sc.INTERNAL_DBIS_NAME,YB=sc.DBI_DEFINITION_NAME,q7="data.mdb",$7="lock.mdb",pp=".mdb",V7="-lock",qI=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ks(t,r),this.key_type=this.dbi[sc.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[sc.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new $I.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Bg(e,t){if(e===void 0)throw new Error(Gn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Gn.ENV_NAME_REQUIRED)}a(Bg,"pathEnvNameValidation");async function KI(e,t,r=!0){try{await ui.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Gn.INVALID_BASE_PATH):n}try{let n=us.join(e,t+pp);return await ui.access(n,ui.constants.R_OK|ui.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await ui.access(us.join(e,t,q7),ui.constants.R_OK|ui.constants.F_OK),us.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Gn.INVALID_ENVIRONMENT)}else throw new Error(Gn.INVALID_ENVIRONMENT);throw n}}a(KI,"validateEnvironmentPath");function Fg(e,t){if(Ug.validateEnv(e),t===void 0)throw new Error(Gn.DBI_NAME_REQUIRED)}a(Fg,"validateEnvDBIName");async function K7(e,t,r=!1,n=!1){Bg(e,t);let s=us.basename(e);t=t.toString();let i=$B.get(qB.CONFIG_PARAMS.DATABASES);i||$B.setProperty(qB.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await KI(e,t,n),WB(e,t,r)}catch(o){if(o.message===Gn.INVALID_ENVIRONMENT){let c=us.join(e,t);await ui.mkdirp(n?c:e);let l=new KB(n?c:c+pp,!1),u=$I.open(l);u.dbis=Object.create(null);let d=new VI(!1);u.openDB(di,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=YI(e,t,r);return u[sc.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw o}}a(K7,"createEnvironment");async function Y7(e,t,r,n=!0){Bg(e,t),t=t.toString();let s=us.join(e,t);return H7({table:t,database:us.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(Y7,"copyEnvironment");async function WB(e,t,r=!1){Bg(e,t),t=t.toString();let n=YI(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 KI(e,t),i=us.join(e,t+pp),o=s!=i,c=new KB(s,o),l=$I.open(c);l.dbis=Object.create(null);let u=zB(l);for(let d=0;d<u.length;d++)ks(l,u[d]);return l[sc.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(WB,"openEnvironment");async function W7(e,t,r=!1){Bg(e,t),t=t.toString();let n=us.join(e,t+pp),s=await KI(e,t);if(global.lmdb_map!==void 0){let i=YI(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await jB(o),delete global.lmdb_map[i]}}await ui.remove(s),await ui.remove(s===n?s+V7:us.join(us.dirname(s),$7))}a(W7,"deleteEnvironment");async function jB(e){Ug.validateEnv(e);let t=e[sc.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(jB,"closeEnvironment");function YI(e,t,r=!1){let s=`${us.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(YI,"getCachedEnvironmentName");function j7(e){Ug.validateEnv(e);let t=Object.create(null),r=ks(e,di);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==di)try{t[n]=Object.assign(new xg,s)}catch{VB.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(j7,"listDBIDefinitions");function zB(e){Ug.validateEnv(e);let t=[],r=ks(e,di);for(let{key:n}of r.getRange({start:!1}))n!==di&&t.push(n);return t}a(zB,"listDBIs");function z7(e,t){let n=ks(e,di).getEntry(t),s=new xg;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{VB.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(z7,"getDBIDefinition");function JB(e,t,r,n=!r){if(Fg(e,t),t=t.toString(),t===di)throw new Error(Gn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ks(e,t)}catch(s){if(s.message===Gn.DBI_DOES_NOT_EXIST){let i=new VI(r,n===!0),o=e.openDB(t,i),c=new xg(r===!0,n);return o[YB]=c,ks(e,di).putSync(t,c),e.dbis[t]=o,o}throw s}}a(JB,"createDBI");function ks(e,t){if(Fg(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==di?r=z7(e,t):r=new xg,r===void 0)throw new Error(Gn.DBI_DOES_NOT_EXIST);let n;try{let s=new VI(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(Gn.DBI_DOES_NOT_EXIST):s}return n[YB]=r,e.dbis[t]=n,n}a(ks,"openDBI");function J7(e,t){Fg(e,t),t=t.toString();let r=ks(e,t),n=r.getStats();return r[sc.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(J7,"statDBI");async function Q7(e,t){try{let r=us.join(e,t+pp);return(await ui.stat(r)).size}catch{throw new Error(Gn.INVALID_ENVIRONMENT)}}a(Q7,"environmentDataSize");function X7(e,t){if(Fg(e,t),t=t.toString(),t===di)throw new Error(Gn.CANNOT_DROP_INTERNAL_DBIS_NAME);ks(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ks(e,di).removeSync(t)}a(X7,"dropDBI");function Z7(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===Gn.DBI_DOES_NOT_EXIST)JB(e,i,i!==t,i===t),n=!0;else throw o}}n&&G7()}a(Z7,"initializeDBIs");QB.exports={openDBI:ks,openEnvironment:WB,createEnvironment:K7,listDBIs:zB,listDBIDefinitions:j7,createDBI:JB,dropDBI:X7,statDBI:J7,deleteEnvironment:W7,initializeDBIs:Z7,TransactionCursor:qI,environmentDataSize:Q7,copyEnvironment:Y7,closeEnvironment:jB}});var eF=M((tLe,ZB)=>{"use strict";var WI=gt(),eee=Q(),XB=Jr().LMDB_ERRORS_ENUM;ZB.exports=tee;async function tee(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 WI.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==XB.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await WI.closeEnvironment(global.lmdb_map[n]),await WI.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==XB.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){eee.error(t)}}a(tee,"cleanLMDBMap")});var Zi=M((nLe,rF)=>{"use strict";var tF=ae(),ree=(G(),D(j)),ld=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Xi=require("joi"),ic={schema_format:{pattern:ld,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},nee=Xi.alternatives(Xi.string().min(1).max(ic.schema_length.maximum).pattern(ld).messages({"string.pattern.base":"{:#label} "+ic.schema_format.message}),Xi.number(),Xi.array()).required(),see=Xi.alternatives(Xi.string().min(1).max(ic.schema_length.maximum).pattern(ld).messages({"string.pattern.base":"{:#label} "+ic.schema_format.message}),Xi.number()),iee=Xi.alternatives(Xi.string().min(1).max(ic.schema_length.maximum).pattern(ld).messages({"string.pattern.base":"{:#label} "+ic.schema_format.message}),Xi.number()).required();function oee(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>ic.schema_length.maximum?`'${property_name}' maximum of 250 characters`:ld.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}a(oee,"checkValidTable");function aee(e,t){return tF.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(aee,"validateSchemaExists");function cee(e,t){let r=t.state.ancestors[0].schema;return tF.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(cee,"validateTableExists");function lee(e,t){return e.toLowerCase()===ree.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(lee,"validateSchemaName");rF.exports={commonValidators:ic,schemaRegex:ld,hdbSchemaTable:nee,validateSchemaExists:aee,validateTableExists:cee,validateSchemaName:lee,checkValidTable:oee,hdbDatabase:see,hdbTable:iee}});var zI=M((iLe,sF)=>{var{hdbTable:uee,hdbDatabase:nF}=Zi(),dee=ft(),jI=require("joi"),fee={undefined:"undefined",null:"null"},mee=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||fee[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"customRecordsVal"),pee=jI.object({database:nF,schema:nF,table:uee,records:jI.array().items(jI.object().custom(mee)).required()});sF.exports=function(e){return dee.validateBySchema(e,pee)}});var oF=M((aLe,iF)=>{"use strict";var JI=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")}};iF.exports=JI});var cF=M((lLe,aF)=>{"use strict";var QI=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};aF.exports=QI});var uF=M((dLe,lF)=>{"use strict";var XI=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}};lF.exports=XI});var fF=M((mLe,dF)=>{"use strict";var ZI=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};dF.exports=ZI});var Il=M((gLe,hF)=>{"use strict";var hee=gt(),Eee=cF(),_ee=uF(),gee=fF(),eo=xn(),hp=Jr().LMDB_ERRORS_ENUM,See=Jt(),zo=(G(),D(j)),Tee=ae(),yee=require("uuid"),hLe=require("lmdb"),{handleHDBError:Ree,hdbErrors:bee}=Ee(),{OVERFLOW_MARKER:ELe,MAX_SEARCH_KEY_LENGTH:_Le}=See,mF=fe();mF.initSync();var kg=mF.get(zo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),ew=zo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Al=zo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Aee(e,t,r,n,s=eo.getNextMonotonicTime()){sw(e,t,r,n),tw(e,t,r);let i=new Eee,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];pF(u,!0,s);let d=Iee(e,t,r,u),f=u[t];o.push(d),c.push(f)}return rw(o,c,n,i,s)}a(Aee,"insertRecords");function Iee(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][zo.FUNC_VAL],n[o]=c)}let l=eo.getIndexedValues(c),u=e.dbis[o];if(l){kg&&u.prefetch(l.map(d=>({key:d,value:s})),Hg);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}kg&&e.dbis[t].prefetch([s],Hg),e.dbis[t].put(s,n,n[Al])})}a(Iee,"insertRecord");function wee(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(wee,"removeSkippedRecords");function pF(e,t,r){let n=r>0;(n||!Number.isInteger(e[Al]))&&(e[Al]=r||(r=eo.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[ew]))&&(e[ew]=r||eo.getNextMonotonicTime()):delete e[ew]}a(pF,"setTimestamps");function tw(e,t,r){r.indexOf(zo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(zo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(zo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(zo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),hee.initializeDBIs(e,t,r)}a(tw,"initializeTransaction");async function Nee(e,t,r,n,s=eo.getNextMonotonicTime()){sw(e,t,r,n),tw(e,t,r);let i=new _ee,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=nw(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),o.push(u);continue}c.push(m),l.push(f)}return rw(c,l,n,i,s,o)}a(Nee,"updateRecords");async function Cee(e,t,r,n,s=eo.getNextMonotonicTime()){try{sw(e,t,r,n)}catch(l){throw Ree(l,l.message,bee.HTTP_STATUS_CODES.BAD_REQUEST)}tw(e,t,r);let i=new gee,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;Tee.isEmpty(u[t])?(d=yee.v4(),u[t]=d):d=u[t];let f=nw(e,t,u,d,i,!1,s);o.push(f),c.push(d)}return rw(o,c,n,i,s)}a(Cee,"upsertRecords");async function rw(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||eo.getNextMonotonicTime(),wee(r,i),n}a(rw,"finalizeWrite");function nw(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(pF(r,!d,o),Number.isInteger(r[Al])&&u[Al]>r[Al])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],_=e.dbis[h];if(_===void 0)continue;let R=u[h];if(typeof E=="function"){let y=E([[u]]);Array.isArray(y)&&(E=y[0][zo.FUNC_VAL],r[h]=E)}if(E===R)continue;let S=eo.getIndexedValues(R);if(S){kg&&_.prefetch(S.map(y=>({key:y,value:n})),Hg);for(let y=0,w=S.length;y<w;y++)_.remove(S[y],n)}if(S=eo.getIndexedValues(E),S){kg&&_.prefetch(S.map(y=>({key:y,value:n})),Hg);for(let y=0,w=S.length;y<w;y++)_.put(S[y],n)}}let p={...u,...r};c.put(n,p,p[Al])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:nw(e,t,r,n,s,i,o))}a(nw,"updateUpsertRecord");function Oee(e,t,r){if(eo.validateEnv(e),t===void 0)throw new Error(hp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(hp.WRITE_ATTRIBUTES_REQUIRED):new Error(hp.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Oee,"validateBasic");function sw(e,t,r,n){if(Oee(e,t,r),!Array.isArray(n))throw n===void 0?new Error(hp.RECORDS_REQUIRED):new Error(hp.RECORDS_MUST_BE_ARRAY)}a(sw,"validateWrite");function Hg(){}a(Hg,"noop");hF.exports={insertRecords:Aee,updateRecords:Nee,upsertRecords:Cee}});var to=M((TLe,Pee)=>{Pee.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 _F=M((yLe,EF)=>{"use strict";var Lee=require("uuid"),iw=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}`}};EF.exports=iw});var Gg=M((bLe,gF)=>{"use strict";var Dee=_F(),ow=class extends Dee{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}};gF.exports=ow});var TF=M((ILe,SF)=>{"use strict";SF.exports=Mee;var vee="inserted";function Mee(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===vee?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(Mee,"returnObject")});var qg=M((CLe,RF)=>{"use strict";var Uee=(G(),D(j)),aw=gt(),xee=Il(),{getSystemSchemaPath:Bee,getSchemaPath:Fee}=Rt(),NLe=to(),{validateBySchema:kee}=ft(),Ep=require("joi"),Hee=Gg(),Gee=TF(),{handleHDBError:qee,hdbErrors:$ee,ClientError:Vee}=Ee(),yF=ae(),{HTTP_STATUS_CODES:Kee}=$ee,Yee="inserted";RF.exports=Wee;async function Wee(e){let t=kee(e,Ep.object({database:Ep.string(),schema:Ep.string(),table:Ep.string().required(),attribute:Ep.string().required()}));if(t)throw new Vee(t.message);let r=!e.skip_table_check&&yF.checkGlobalSchemaTable(e.schema,e.table);if(r)throw qee(new Error,r,Kee.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=yF.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 Hee(e.schema,e.table,e.attribute,e.id);try{let i=await aw.openEnvironment(Fee(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}`);aw.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await aw.openEnvironment(Bee(),Uee.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await xee.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return Gee(Yee,c,{records:[s]},l)}catch(i){throw i}}a(Wee,"lmdbCreateAttribute")});var _p=M((LLe,AF)=>{"use strict";var Jo=ae(),bF=Q(),PLe=zI(),{getDatabases:jee}=(Oe(),D(mt)),{ClientError:wl}=Ee();AF.exports=zee;function zee(e){if(Jo.isEmpty(e))throw new wl("invalid update parameters defined.");if(Jo.isEmptyOrZeroLength(e.schema))throw new wl("invalid schema specified.");if(Jo.isEmptyOrZeroLength(e.table))throw new wl("invalid table specified.");if(!Array.isArray(e.records))throw new wl("records must be an array");let t=jee()[e.schema]?.[e.table];if(Jo.isEmpty(t))throw new wl(`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&&Jo.isEmptyOrZeroLength(o[r]))throw bF.error("a valid hash attribute must be provided with update record:",o),new wl("a valid hash attribute must be provided with update record, check log for more info");if(!Jo.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw bF.error(`a valid hash value must be provided with ${e.operation} record:`,o),new wl(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Jo.isEmpty(o[r])&&o[r]!==""&&n.has(Jo.autoCast(o[r]))&&(o.skip=!0),n.add(Jo.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(zee,"insertUpdateValidate")});var $g=M((vLe,wF)=>{"use strict";var IF=ae(),Jee=(G(),D(j)),Qee=Q(),Xee=qg(),Zee=Gg(),ete=Qo(),{SchemaEventMsg:tte}=ds(),rte="already exists in";wF.exports=nte;async function nte(e,t,r){if(IF.isEmptyOrZeroLength(r))return r;let n=[];IF.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 ste(e,t.schema,t.name,i)})),s}a(nte,"lmdbCheckForNewAttributes");async function ste(e,t,r,n){let s=new Zee(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await ite(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(rte))Qee.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(ste,"createNewAttribute");async function ite(e){let t;return t=await Xee(e),ete.signalSchemaChange(new tte(process.pid,Jee.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(ite,"createAttribute")});var ud=M((ULe,NF)=>{"use strict";var cw=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}};NF.exports=cw});var OF=M((BLe,CF)=>{"use strict";var ote=ud(),ate=(G(),D(j)).OPERATIONS_ENUM,lw=class extends ote{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(ate.INSERT,r,n,s,i),this.records=t}};CF.exports=lw});var LF=M((kLe,PF)=>{"use strict";var cte=ud(),lte=(G(),D(j)).OPERATIONS_ENUM,uw=class extends cte{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(lte.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};PF.exports=uw});var vF=M((GLe,DF)=>{"use strict";var ute=ud(),dte=(G(),D(j)).OPERATIONS_ENUM,dw=class extends ute{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(dte.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};DF.exports=dw});var UF=M(($Le,MF)=>{"use strict";var fte=ud(),mte=(G(),D(j)).OPERATIONS_ENUM,fw=class extends fte{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(mte.DELETE,n,s,t,i),this.original_records=r}};MF.exports=fw});var gp=M((YLe,kF)=>{"use strict";var KLe=require("path"),xF=gt(),pte=OF(),hte=LF(),Ete=vF(),_te=UF(),dd=Jt(),BF=ae(),{CONFIG_PARAMS:gte}=(G(),D(j)),FF=fe();FF.initSync();var Vg=(G(),D(j)).OPERATIONS_ENUM,{getTransactionAuditStorePath:Ste}=Rt();kF.exports=Tte;async function Tte(e,t){if(FF.get(gte.LOGGING_AUDITLOG)===!1)return;let r=Ste(e.schema,e.table),n=await xF.openEnvironment(r,e.table,!0),s=yte(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){xF.initializeDBIs(n,dd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,dd.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[dd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[dd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),BF.isEmpty(s.user_name)||n.dbis[dd.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[dd.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(Tte,"writeTransaction");function yte(e,t){let r=BF.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Vg.INSERT)return new pte(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vg.UPDATE)return new hte(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vg.UPSERT)return new Ete(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vg.DELETE)return new _te(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(yte,"createTransactionObject")});var mw=M((zLe,HF)=>{"use strict";var Rte=_p(),jLe=xm(),Sp=(G(),D(j)),bte=Bm(),Ate=Il().insertRecords,Ite=gt(),wte=Q(),Nte=$g(),{getSchemaPath:Cte}=Rt(),Ote=gp();HF.exports=Pte;async function Pte(e){try{let{schemaTable:t,attributes:r}=Rte(e);bte(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 Nte(e.hdb_auth_header,t,r),s=Cte(e.schema,e.table),i=await Ite.openEnvironment(s,e.table),o=await Ate(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Ote(e,o)}catch(c){wte.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(Pte,"lmdbCreateRecords")});var $F=M((QLe,qF)=>{"use strict";var GF=(G(),D(j)),Lte=mw(),Dte=xm(),vte=require("fs-extra"),{getSchemaPath:Mte}=Rt();qF.exports=Ute;async function Ute(e){let t=[{name:e.schema,createddate:Date.now()}],r=new Dte(GF.SYSTEM_SCHEMA_NAME,GF.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Lte(r),await vte.mkdirp(Mte(e.schema))}a(Ute,"lmdbCreateSchema")});var KF=M((ZLe,VF)=>{"use strict";var pw=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}};VF.exports=pw});var zF=M((sDe,jF)=>{"use strict";var YF=gt(),hw=xn(),Ew=Jr().LMDB_ERRORS_ENUM,xte=Jt(),WF=Q(),tDe=ae(),Bte=require("lmdb"),Fte=KF(),kte=(G(),D(j)),{OVERFLOW_MARKER:rDe,MAX_SEARCH_KEY_LENGTH:nDe}=xte,Hte=kte.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Gte(e,t,r,n){if(hw.validateEnv(e),t===void 0)throw new Error(Ew.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ew.IDS_REQUIRED):new Error(Ew.IDS_MUST_BE_ITERABLE);try{let s=YF.listDBIs(e);YF.initializeDBIs(e,t,s);let i=new Fte,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[Hte]>n){i.skipped.push(o);continue}let E=e.dbis[t].ifVersion(o,Bte.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let _=0;_<s.length;_++){let R=s[_];if(!h.hasOwnProperty(R)||R===t)continue;let S=e.dbis[R],y=h[R];if(y!=null)try{let w=hw.getIndexedValues(y);if(w)for(let I=0,H=w.length;I<H;I++)S.remove(w[I],o)}catch{WF.warn(`cannot delete from attribute: ${R}, ${y}:${o}`)}}});c.push(E),l.push(o),i.original_records.push(h)}catch(h){WF.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=hw.getNextMonotonicTime(),i}catch(s){throw s}}a(Gte,"deleteRecords");jF.exports={deleteRecords:Gte}});var Tp=M((oDe,QF)=>{"use strict";var fd=ae(),qte=zF(),$te=gt(),{getSchemaPath:Vte}=Rt(),Kte=gp(),Yte=Q();QF.exports=Wte;async function Wte(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(fd.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(fd.isEmptyOrZeroLength(e.hash_values)&&!fd.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];fd.isEmpty(l)||e.hash_values.push(l)}}if(fd.isEmptyOrZeroLength(e.hash_values))return JF([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(fd.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=Vte(e.schema,e.table),i=await $te.openEnvironment(s,e.table),o=await qte.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Kte(e,o)}catch(c){Yte.error(`unable to write transaction due to ${c.message}`)}return JF(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(Wte,"lmdbDeleteRecords");function JF(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(JF,"createDeleteResponse")});var gw=M((lDe,XF)=>{"use strict";var jte=(G(),D(j)),cDe=xn();function _w(e,t){let r=Object.create(null);if(t.length===1&&jte.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(_w,"parseRow");function zte(e,t,r,n){let s=_w(r,e);n.push(s)}a(zte,"searchAll");function Jte(e,t,r,n){let s=_w(r,e);n[t]=s}a(Jte,"searchAllToMap");function Qte(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Qte,"iterateDBI");function Nl(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(Nl,"pushResults");function Xte(e,t,r,n,s,i){t.toString().endsWith(e)&&Nl(t,r,n,s,i)}a(Xte,"endsWith");function Zte(e,t,r,n,s,i){t.toString().includes(e)&&Nl(t,r,n,s,i)}a(Zte,"contains");function ere(e,t,r,n,s,i){t>e&&Nl(t,r,n,s,i)}a(ere,"greaterThanCompare");function tre(e,t,r,n,s,i){t>=e&&Nl(t,r,n,s,i)}a(tre,"greaterThanEqualCompare");function rre(e,t,r,n,s,i){t<e&&Nl(t,r,n,s,i)}a(rre,"lessThanCompare");function nre(e,t,r,n,s,i){t<=e&&Nl(t,r,n,s,i)}a(nre,"lessThanEqualCompare");XF.exports={parseRow:_w,searchAll:zte,searchAllToMap:Jte,iterateDBI:Qte,endsWith:Xte,contains:Zte,greaterThanCompare:ere,greaterThanEqualCompare:tre,lessThanCompare:rre,lessThanEqualCompare:nre,pushResults:Nl}});var md=M((pDe,ik)=>{"use strict";var oc=gt(),dDe=Q(),fs=xn(),Kg=Jt(),ar=Jr().LMDB_ERRORS_ENUM,fDe=ae(),sre=(G(),D(j)),Yg=gw(),{parseRow:ire}=Yg,mDe=require("lmdb"),{OVERFLOW_MARKER:ZF,MAX_SEARCH_KEY_LENGTH:ore}=Kg;function ek(e,t,r,n=!1,s=void 0,i=void 0){return Cl(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(ek,"iterateFullIndex");function yp(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return Cl(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(yp,"iterateRangeBetween");function Cl(e,t,r,n){let s=e.database||e,i=oc.openDBI(s,r);i[Kg.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&oc.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(Cl,"setupTransaction");function tk(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(ZF)){if(!s)if(r)s=oc.openDBI(e,r);else{let l=oc.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=oc.openDBI(e,l[u]),!s[Kg.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(tk,"getOverflowCheck");function are(e,t,r,n=!1,s=void 0,i=void 0){if(fs.validateEnv(e),t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);return Cl(e,t,t,(o,c,l)=>(Wg(r),r=Rp(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>ire(u.value,r))))}a(are,"searchAll");function cre(e,t,r,n=!1,s=void 0,i=void 0){if(fs.validateEnv(e),t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);Wg(r),r=Rp(e.database||e,r);let o=new Map;for(let{key:c,value:l}of ek(e,t,t,n,s,i))o.set(c,Yg.parseRow(l,r));return o}a(cre,"searchAllToMap");function lre(e,t,r=!1,n=void 0,s=void 0){if(fs.validateEnv(e),t===void 0)throw new Error(ar.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=ek(e,void 0,t,r,n,s),c=o.transaction,l=tk(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(lre,"iterateDBI");function ure(e,t){if(fs.validateEnv(e),t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);return oc.statDBI(e,t).entryCount}a(ure,"countAll");function dre(e,t,r,n,s=!1,i=void 0,o=void 0){return ac(e,r,n),Cl(e,t,r,(c,l,u,d)=>(n=fs.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(dre,"equals");function fre(e,t,r){return ac(e,t,r),oc.openDBI(e,t).getValuesCount(r)}a(fre,"count");function mre(e,t,r,n,s=!1,i=void 0,o=void 0){return ac(e,r,n),Cl(e,null,r,(c,l)=>{n=fs.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(mre,"startsWith");function pre(e,t,r,n,s=!1,i=void 0,o=void 0){return rk(e,t,r,n,s,i,o,!0)}a(pre,"endsWith");function rk(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ac(e,r,n),Cl(e,null,r,(l,u,d,f)=>{let m=tk(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(ZF)?u.getValues(p,{transaction:l}).map(E=>{let _=m(p,E);if(c?_.endsWith(n):_.includes(n))return{key:_,value:E}}).filter(E=>E):(c?h.endsWith(n):h.includes(n))?u[Kg.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(rk,"contains");function hre(e,t,r,n,s=!1,i=void 0,o=void 0){ac(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),yp(e,t,r,n,l,s,i,o,!0,!1)}a(hre,"greaterThan");function Ere(e,t,r,n,s=!1,i=void 0,o=void 0){ac(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),yp(e,t,r,n,l,s,i,o,!1,!1)}a(Ere,"greaterThanEqual");function _re(e,t,r,n,s=!1,i=void 0,o=void 0){ac(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),yp(e,t,r,l,n,s,i,o,!1,!0)}a(_re,"lessThan");function gre(e,t,r,n,s=!1,i=void 0,o=void 0){ac(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),yp(e,t,r,l,n,s,i,o,!1,!1)}a(gre,"lessThanEqual");function Sre(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(fs.validateEnv(e),r===void 0)throw new Error(ar.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ar.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ar.END_VALUE_REQUIRED);if(n=fs.convertKeyValueToWrite(n),s=fs.convertKeyValueToWrite(s),n>s)throw new Error(ar.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return yp(e,t,r,n,s,i,o,c)}a(Sre,"between");function Tre(e,t,r,n){fs.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);if(Wg(r),r=Rp(s,r),n===void 0)throw new Error(ar.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Yg.parseRow(c,r)),o}a(Tre,"searchByHash");function yre(e,t,r){fs.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ar.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(yre,"checkHashExists");function Rre(e,t,r,n,s=[]){return sk(e,t,r,n,s),nk(e,t,r,n,s).map(i=>i[1])}a(Rre,"batchSearchByHash");function bre(e,t,r,n,s=[]){sk(e,t,r,n,s);let i=new Map;for(let[o,c]of nk(e,t,r,n,s))i.set(o,c);return i}a(bre,"batchSearchByHashToMap");function nk(e,t,r,n,s=[]){return Cl(e,t,t,(i,o,c)=>{r=Rp(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,Yg.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(nk,"batchHashSearch");function sk(e,t,r,n,s){if(fs.validateEnv(e),t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);if(Wg(r),n==null)throw new Error(ar.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ar.IDS_MUST_BE_ITERABLE)}a(sk,"initializeBatchSearchByHash");function Wg(e){if(!Array.isArray(e))throw e===void 0?new Error(ar.FETCH_ATTRIBUTES_REQUIRED):new Error(ar.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Wg,"validateFetchAttributes");function ac(e,t,r){if(fs.validateEnv(e),t===void 0)throw new Error(ar.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ar.SEARCH_VALUE_REQUIRED);if(r?.length>ore)throw new Error(ar.SEARCH_VALUE_TOO_LARGE)}a(ac,"validateComparisonFunctions");function Rp(e,t){return t.length===1&&sre.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=oc.listDBIs(e)),t}a(Rp,"setGetWholeRowAttributes");ik.exports={searchAll:are,searchAllToMap:cre,count:fre,countAll:ure,equals:dre,startsWith:mre,endsWith:pre,contains:rk,searchByHash:Tre,setGetWholeRowAttributes:Rp,batchSearchByHash:Rre,batchSearchByHashToMap:bre,checkHashExists:yre,iterateDBI:lre,greaterThan:hre,greaterThanEqual:Ere,lessThan:_re,lessThanEqual:gre,between:Sre}});var pd=M((EDe,uk)=>{var ok=require("lodash"),ak=ft(),Je=require("joi"),Are=ae(),{hdbSchemaTable:bp,checkValidTable:ck,hdbTable:lk,hdbDatabase:jg}=Zi(),{handleHDBError:Ire,hdbErrors:wre}=Ee(),{getDatabases:Nre}=(Oe(),D(mt)),{HTTP_STATUS_CODES:Cre}=wre,Ore=Je.object({database:jg,schema:jg,table:lk,attribute:bp,value:Je.any().required(),get_attributes:Je.array().min(1).items(Je.alternatives(bp,Je.object())).optional(),desc:Je.bool(),limit:Je.number().integer().min(1),offset:Je.number().integer().min(0)}),Pre=Je.object({database:jg,schema:jg,table:lk,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(bp,Je.object())).optional(),sort:Je.object({attribute:Je.alternatives(bp,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(bp,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()});uk.exports=function(e,t){let r=null;switch(t){case"value":r=ak.validateBySchema(e,Ore);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(ck("database",e.schema)),i(ck("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=ak.validateBySchema(e,Pre);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Are.checkGlobalSchemaTable(e.schema,e.table);if(s)return Ire(new Error,s,Cre.NOT_FOUND);let o=Nre()[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=ok.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!ok.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 Sw=M((gDe,dk)=>{"use strict";var Lre=gt(),Dre=pd(),{getSchemaPath:vre}=Rt();dk.exports=Mre;function Mre(e){let t=Dre(e,"hashes");if(t)throw t;let r=vre(e.schema,e.table);return Lre.openEnvironment(r,e.table)}a(Mre,"initialize")});var Tw=M((TDe,fk)=>{"use strict";var Ure=md(),xre=Sw();fk.exports=Bre;async function Bre(e){let t=await xre(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Ure.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Bre,"lmdbGetDataByHash")});var hd=M((RDe,mk)=>{"use strict";var yw=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};mk.exports=yw});var hk=M((IDe,pk)=>{"use strict";var ADe=hd(),Fre=md(),kre=Sw();pk.exports=Hre;async function Hre(e){let t=await kre(e),r=global.hdb_schema[e.schema][e.table];return Fre.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Hre,"lmdbSearchByHash")});var fi=M((NDe,Ek)=>{"use strict";var Rw=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}};Ek.exports=Rw});var zg=M((ODe,Rk)=>{"use strict";var _n=md(),Gre=gt(),qre=ae(),Qe=Jt(),Ol=(G(),D(j)),$re=to(),_k=Jr().LMDB_ERRORS_ENUM,{getSchemaPath:Vre}=Rt(),Xo=Ol.SEARCH_WILDCARDS;async function Kre(e,t,r){let n;e.schema===Ol.SYSTEM_SCHEMA_NAME?n=$re[e.table]:n=global.hdb_schema[e.schema][e.table];let s=yk(e,n.hash_attribute,r,t);return Sk(e,s,n.hash_attribute,r)}a(Kre,"prepSearch");async function Sk(e,t,r,n){let s=Vre(e.schema,e.table),i=await Gre.openEnvironment(s,e.table),o=Tk(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(Yre(e,r)===!1){let d=e.attribute;if(d===r)return n?gk(o,()=>!0):o.map(m=>({[r]:m.key}));let f=a(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?gk(o,f):o.map(f)}let u=e.attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?_n.batchSearchByHashToMap(c,r,e.get_attributes,u):_n.batchSearchByHash(c,r,e.get_attributes,u)}a(Sk,"executeSearch");function Tk(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=_n.equals(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.CONTAINS:s=_n.contains(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.ENDS_WITH:case Qe.SEARCH_TYPES._ENDS_WITH:s=_n.endsWith(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.STARTS_WITH:case Qe.SEARCH_TYPES._STARTS_WITH:s=_n.startsWith(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return _n.batchSearchByHash(e,t.attribute,t.get_attributes,[t.value]);case Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return _n.batchSearchByHashToMap(e,t.attribute,t.get_attributes,[t.value]);case Qe.SEARCH_TYPES.SEARCH_ALL:return _n.searchAll(e,n,t.get_attributes,o,c,l);case Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return _n.searchAllToMap(e,n,t.get_attributes,o,c,l);case Qe.SEARCH_TYPES.BETWEEN:s=_n.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=_n.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=_n.greaterThanEqual(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.LESS_THAN:case Qe.SEARCH_TYPES._LESS_THAN:s=_n.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=_n.lessThanEqual(e,i,t.attribute,t.value,o,c,l);break;default:return Object.create(null)}return s}a(Tk,"searchByType");function gk(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(gk,"createMapFromIterable");function Yre(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(Yre,"checkToFetchMore");function yk(e,t,r,n){if(qre.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),Xo.indexOf(s)>-1)return r===!0?Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Qe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Xo[0])<0&&s.indexOf(Xo[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(Xo.indexOf(i)>=0&&Xo.indexOf(o)>=0)return e.value=e.value.slice(1,-1),Qe.SEARCH_TYPES.CONTAINS;if(Xo.indexOf(i)>=0)return e.value=e.value.substr(1),Qe.SEARCH_TYPES.ENDS_WITH;if(Xo.indexOf(o)>=0)return e.value=e.value.slice(0,-1),Qe.SEARCH_TYPES.STARTS_WITH;if(s.includes(Xo[0])||s.includes(Xo[1]))return Qe.SEARCH_TYPES.EQUALS;throw new Error(_k.UNKNOWN_SEARCH_TYPE)}else switch(n){case Ol.VALUE_SEARCH_COMPARATORS.BETWEEN:return Qe.SEARCH_TYPES.BETWEEN;case Ol.VALUE_SEARCH_COMPARATORS.GREATER:return Qe.SEARCH_TYPES.GREATER_THAN;case Ol.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Qe.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ol.VALUE_SEARCH_COMPARATORS.LESS:return Qe.SEARCH_TYPES.LESS_THAN;case Ol.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Qe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(_k.UNKNOWN_SEARCH_TYPE)}}a(yk,"createSearchTypeFromSearchObject");Rk.exports={executeSearch:Sk,createSearchTypeFromSearchObject:yk,prepSearch:Kre,searchByType:Tk}});var Ak=M((DDe,bk)=>{"use strict";var LDe=fi(),Wre=pd(),jre=ae(),zre=(G(),D(j)),Jre=zg();bk.exports=Qre;function Qre(e,t){if(!jre.isEmpty(t)&&zre.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Wre(e,"value");if(n)throw n;return Jre.prepSearch(e,t,!0)}a(Qre,"lmdbGetDataByValue")});var Ap=M((UDe,Ik)=>{"use strict";var MDe=fi(),Xre=pd(),Zre=ae(),ene=(G(),D(j)),tne=zg();Ik.exports=rne;async function rne(e,t){if(!Zre.isEmpty(t)&&ene.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Xre(e,"value");if(n)throw n;return tne.prepSearch(e,t,!1)}a(rne,"lmdbSearchByValue")});var Nk=M((FDe,wk)=>{"use strict";var BDe=Jt(),bw=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}},Aw=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},Iw=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};wk.exports={SearchByConditionsObject:bw,SearchCondition:Aw,SortAttribute:Iw}});var Dk=M(($De,Lk)=>{"use strict";var{SearchByConditionsObject:HDe,SearchCondition:GDe}=Nk(),nne=fi(),sne=pd(),ww=md(),Jg=Jt(),{Resource:qDe}=(Qi(),D(NB)),Pk=zg(),ine=gw(),one=require("lodash"),{getSchemaPath:ane}=Rt(),Ck=gt(),{handleHDBError:cne,hdbErrors:lne}=Ee(),{HTTP_STATUS_CODES:une}=lne,dne=1e8;Lk.exports=fne;async function fne(e){let t=sne(e,"conditions");if(t)throw cne(t,t.message,une.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=ane(e.schema,e.table),n=await Ck.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)Ck.openDBI(n,u.attribute);let i=one.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===Jg.SEARCH_TYPES.EQUALS?u.estimated_count=ww.count(n,u.attribute,u.value):d===Jg.SEARCH_TYPES.CONTAINS||d===Jg.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=dne}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await Ok(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(Pk.filterByType),f=d.length,m=ww.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=>ine.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await Ok(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=ww.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(fne,"lmdbSearchByConditions");async function Ok(e,t,r,n){let s=new nne(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.comparator;return s.attribute=r.attribute,i===Jg.SEARCH_TYPES.BETWEEN?(s.value=r.value[0],s.end_value=r.value[1]):s.value=r.value,Pk.searchByType(e,s,i,n).map(o=>o.value)}a(Ok,"executeConditionSearch")});var Ip=M((KDe,vk)=>{"use strict";var mne=(G(),D(j)).OPERATIONS_ENUM,Nw=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=mne.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};vk.exports=Nw});var Cw=M((WDe,Gk)=>{"use strict";var Bk=fi(),Fk=Ip(),kk=Ap(),Hk=Tp(),qn=(G(),D(j)),Mk=ae(),Uk=gt(),{getTransactionAuditStorePath:pne,getSchemaPath:hne}=Rt(),xk=Q();Gk.exports=Ene;async function Ene(e){try{if(Mk.isEmpty(global.hdb_schema[e.schema])||Mk.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await _ne(e),await gne(e);let t=hne(e.schema,e.table);try{await Uk.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")xk.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=pne(e.schema,e.table);await Uk.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")xk.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Ene,"lmdbDropTable");async function _ne(e){let t=new Bk(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await kk(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 Fk(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await Hk(s)}a(_ne,"deleteAttributesFromSystem");async function gne(e){let t=new Bk(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await kk(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 Fk(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await Hk(s)}catch(i){throw i}}a(gne,"dropTableFromSystem")});var $k=M((zDe,qk)=>{"use strict";var Sne=require("fs-extra"),Tne=fi(),yne=hd(),Rne=Ip(),bne=Cw(),Ane=Tp(),Ine=Tw(),wne=Ap(),Zo=(G(),D(j)),{getSchemaPath:Nne}=Rt(),{handleHDBError:Cne,hdbErrors:One}=Ee(),{HDB_ERROR_MSGS:Pne,HTTP_STATUS_CODES:Lne}=One;qk.exports=Dne;async function Dne(e){let t;try{t=await vne(e.schema);let r=new Tne(Zo.SYSTEM_SCHEMA_NAME,Zo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Zo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Zo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await wne(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await bne(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new Rne(Zo.SYSTEM_SCHEMA_NAME,Zo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Ane(s);let i=Nne(t);await Sne.remove(i)}catch(r){throw r}}a(Dne,"lmdbDropSchema");async function vne(e){let t=new yne(Zo.SYSTEM_SCHEMA_NAME,Zo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Zo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await Ine(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw Cne(new Error,Pne.SCHEMA_NOT_FOUND(e),Lne.NOT_FOUND,void 0,void 0,!0);return n}a(vne,"validateDropSchema")});var wp=M((QDe,Vk)=>{"use strict";var Ow=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};Vk.exports=Ow});var Lw=M((eve,Kk)=>{"use strict";var Mne=require("fs-extra"),Qg=gt(),{getTransactionAuditStorePath:Une}=Rt(),Pw=Jt(),ZDe=wp();Kk.exports=xne;async function xne(e){let t;try{let r=Une(e.schema,e.table);await Mne.mkdirp(r),t=await Qg.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{Qg.createDBI(t,Pw.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Qg.createDBI(t,Pw.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Qg.createDBI(t,Pw.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(xne,"createTransactionsAuditEnvironment")});var jk=M((nve,Wk)=>{"use strict";var Dw=(G(),D(j)),Yk=gt(),Bne=Il(),{getSystemSchemaPath:Fne,getSchemaPath:kne}=Rt(),rve=to(),Hne=qg(),vw=Gg(),Gne=Q(),qne=Lw();Wk.exports=$ne;async function $ne(e,t){let r=kne(t.schema,t.table),n=new vw(t.schema,t.table,Dw.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new vw(t.schema,t.table,Dw.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new vw(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Yk.createEnvironment(r,t.table),e!==void 0){let o=await Yk.openEnvironment(Fne(),Dw.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Bne.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 Mw(n),await Mw(s),await Mw(i)}await qne(t)}catch(o){throw o}}a($ne,"lmdbCreateTable");async function Mw(e){try{await Hne(e)}catch(t){Gne.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Mw,"createAttribute")});var Jk=M((ive,zk)=>{"use strict";var Vne=_p(),Kne=Bm(),Yne=$g(),Np=(G(),D(j)),Wne=Il().updateRecords,jne=gt(),{getSchemaPath:zne}=Rt(),Jne=gp(),Qne=Q();zk.exports=Xne;async function Xne(e){try{let{schemaTable:t,attributes:r}=Vne(e);Kne(e,r,t.hash_attribute),e.schema!==Np.SYSTEM_SCHEMA_NAME&&(r.includes(Np.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Np.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Np.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Np.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Yne(e.hdb_auth_header,t,r),s=zne(e.schema,e.table),i=await jne.openEnvironment(s,e.table),o=await Wne(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Jne(e,o)}catch(c){Qne.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(Xne,"lmdbUpdateRecords")});var Xk=M((ave,Qk)=>{"use strict";var Zne=(G(),D(j)).OPERATIONS_ENUM,Uw=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Zne.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Qk.exports=Uw});var eH=M((uve,Zk)=>{"use strict";var lve=Xk(),ese=_p(),tse=Bm(),rse=$g(),Cp=(G(),D(j)),nse=Il().upsertRecords,sse=gt(),{getSchemaPath:ise}=Rt(),ose=gp(),ase=Q(),{handleHDBError:cse,hdbErrors:lse}=Ee();Zk.exports=use;async function use(e){let t;try{t=ese(e)}catch(l){throw cse(l,l.message,lse.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;tse(e,n,r.hash_attribute),e.schema!==Cp.SYSTEM_SCHEMA_NAME&&(n.includes(Cp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Cp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Cp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Cp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await rse(e.hdb_auth_header,r,n),i=ise(e.schema,e.table),o=await sse.openEnvironment(i,e.table),c=await nse(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await ose(e,c)}catch(l){ase.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(use,"lmdbUpsertRecords")});var rH=M((fve,tH)=>{"use strict";var xw=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};tH.exports=xw});var sH=M((pve,nH)=>{"use strict";var Bw=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}};nH.exports=Bw});var aH=M((_ve,oH)=>{"use strict";var Fw=gt(),{getTransactionAuditStorePath:dse}=Rt(),Eve=rH(),Op=Jt(),fse=ae(),iH=sH(),mse=require("util").promisify,pse=mse(setTimeout),hse=1e4,Ese=100;oH.exports=_se;async function _se(e){let t=dse(e.schema,e.table),r=await Fw.openEnvironment(t,e.table,!0),n=Fw.listDBIs(r);Fw.initializeDBIs(r,Op.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new iH;do s=await gse(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 pse(Ese);while(s.transactions_deleted>0);return i}a(_se,"deleteAuditLogsBefore");async function gse(e,t){let r=new iH;try{let n=e.dbis[Op.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[Op.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];fse.isEmpty(c)||(s=e.dbis[Op.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Op.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>hse)break}return await s,r}catch(n){throw n}}a(gse,"deleteTransactions")});var lH=M((Sve,cH)=>{"use strict";var kw=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};cH.exports=kw});var dH=M((Rve,uH)=>{"use strict";var Sse=fi(),Tse=Ip(),yve=lH(),ro=(G(),D(j)),yse=ae(),Hw=gt(),Rse=to(),bse=Ap(),Ase=Tp(),{getSchemaPath:Ise}=Rt();uH.exports=wse;async function wse(e,t=!0){let r;e.schema===ro.SYSTEM_SCHEMA_NAME?r=Rse[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await Cse(e),s=Ise(e.schema,e.table),i=await Hw.openEnvironment(s,e.table);return t===!0&&await Nse(e,i,r.hash_attribute),Hw.dropDBI(i,e.attribute),n}a(wse,"lmdbDropAttribute");async function Nse(e,t,r){let n=Hw.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(Nse,"removeAttributeFromAllObjects");async function Cse(e){let t=new Sse(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await bse(t)).filter(o=>o[ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(yse.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[ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Tse(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Ase(i)}a(Cse,"dropAttributeFromSystem")});var _H=M((Ive,EH)=>{"use strict";var Gw=gt(),Ed=Jt(),Ave=xn(),qw=(G(),D(j)),fH=ae(),{getTransactionAuditStorePath:Ose}=Rt(),Pse=md(),Xg=ud(),Lse=Q();EH.exports=Dse;async function Dse(e){let t=Ose(e.schema,e.table),r=await Gw.openEnvironment(t,e.table,!0),n=Gw.listDBIs(r);Gw.initializeDBIs(r,Ed.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case qw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return mH(r,e.search_values);case qw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,Mse(r,e.search_values,s);case qw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return vse(r,e.search_values);default:return mH(r)}}a(Dse,"readAuditLog");function mH(e,t=[0,Date.now()]){fH.isEmpty(t[0])&&(t[0]=0),fH.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Ed.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 Xg,s))}a(mH,"searchTransactionsByTimestamp");function vse(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[Ed.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,hH(e,i))}return Object.fromEntries(r)}a(vse,"searchTransactionsByUsername");function Mse(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=Pse.equals(e,Ed.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ed.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=hH(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);pH(l,"records",r,d,o),pH(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(Mse,"searchTransactionsByHashValues");function pH(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 Xg(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new Xg(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(pH,"loopRecords");function hH(e,t){let r=[];try{let n=e.dbis[Ed.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 Xg,i);r.push(o)}}catch(i){Lse.warn(i)}return r}catch(n){throw n}}a(hH,"batchSearchTransactions")});var SH=M((Ove,gH)=>{"use strict";var{getSchemaPath:Nve}=Rt(),Cve=gt(),{database:Use}=(Oe(),D(mt));gH.exports={writeTransaction:xse};async function xse(e,t,r){return Use({database:e,table:t}).transaction(r)}a(xse,"writeTransaction")});var bH=M((Lve,RH)=>{"use strict";var{getSchemaPath:TH}=Rt(),yH=gt();RH.exports={flush:Bse,resetReadTxn:Fse};async function Bse(e,t){return(await yH.openEnvironment(TH(e,t),t.toString())).flushed}a(Bse,"flush");async function Fse(e,t){try{(await yH.openEnvironment(TH(e,t),t.toString())).resetReadTxn()}catch{}}a(Fse,"resetReadTxn")});var NH=M((vve,wH)=>{"use strict";var{Readable:kse}=require("stream"),{getDatabases:Hse}=(Oe(),D(mt)),{readSync:Gse,openSync:qse,createReadStream:AH}=require("fs"),{open:$se}=require("lmdb"),{OpenDBIObject:IH}=fp(),Vse=mp(),{AUDIT_STORE_OPTIONS:Kse}=(Ki(),D(D0)),{INTERNAL_DBIS_NAME:Yse,AUDIT_STORE_NAME:Wse}=Jt();wH.exports=zse;var $w=32768,jse=100;async function zse(e){let t=e.database||e.schema||"data",r=Hse()[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=$se({noSync:!0,maxDbs:Vse.MAX_DBS}),m,p=f.openDB(Yse,new IH(!1)),h=d.useReadTransaction(),E=0,_=a(async function(S,y){y.encoding="binary",y.encoder=void 0;let w=f.openDB(S,y),I=d.openDB(S,y);for(let{key:H,version:X,value:q}of I.getRange({start:null,transaction:h,versions:I.useVersions}))m=w.put(H,q,X),E++%jse===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(w=>S.startsWith?.(w+"/"))){p.put(S,y);let[,w]=S.split("/"),I=!w,H=new IH(!I,I);await _(S,H)}e.include_audit&&await _(Wse,{...Kse}),await m;let R=AH(f.path);return R.headers=l(),R.on("close",()=>{h.done(),f.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=qse(o.path);return o.transaction(()=>{let u=Buffer.alloc($w);Gse(c,u,0,$w),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let f=AH(null,{fd:c,start:$w}),m=new kse.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(zse,"getBackup")});var PH=M((Uve,OH)=>{"use strict";var Jse=Q(),{handleHDBError:Qse}=Ee(),Xse=oF(),Zse=qg(),eie=mw(),tie=$F(),rie=Tp(),nie=Tw(),sie=hk(),iie=Ak(),oie=Ap(),aie=Dk(),cie=$k(),lie=jk(),uie=Jk(),die=eH(),fie=aH(),mie=Cw(),pie=dH(),hie=_H(),Eie=SH(),CH=bH(),_ie=NH(),Vw=class extends Xse{static{a(this,"LMDBBridge")}async searchByConditions(t){return aie(t)}async getDataByHash(t){return await nie(t)}async searchByHash(t){return await sie(t)}async getDataByValue(t,r){return await iie(t,r)}async searchByValue(t){return await oie(t)}async createSchema(t){return await tie(t)}async dropSchema(t){return await cie(t)}async createTable(t,r){return await lie(t,r)}async dropTable(t){return await mie(t)}async createAttribute(t){return await Zse(t)}async createRecords(t){return await eie(t)}async updateRecords(t){return await uie(t)}async upsertRecords(t){try{return await die(t)}catch(r){throw Qse(r,null,null,Jse.ERR,r)}}async deleteRecords(t){return await rie(t)}async dropAttribute(t){return await pie(t)}async deleteAuditLogsBefore(t){return await fie(t)}async readAuditLog(t){return await hie(t)}writeTransaction(t,r,n){return Eie.writeTransaction(t,r,n)}flush(t,r){return CH.flush(t,r)}resetReadTxn(t,r){return CH.resetReadTxn(t,r)}getBackup(t){return _ie(t)}};OH.exports=Vw});function $n(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function Lp(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 ms.ClientError(`${u} must be a string, attempt to assign ${m}`);$n(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 ms.ClientError(`${u} must be a string, attempt to assign ${m}`);$n(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 ms.ClientError(`${u} must be a number, attempt to assign ${p}`);$n(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 ms.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);$n(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 ms.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);$n(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 ms.ClientError(`${u} must be a number, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Boolean":d=a(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new ms.ClientError(`${u} must be a boolean, attempt to assign ${m}`);$n(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 ms.ClientError(`${u} must be a Date, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Bytes":d=a(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new ms.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Blob":d=a(function(m){if(!(m instanceof vs||m==null&&l.nullable!==!1))throw new ms.ClientError(`${u} must be a Blob, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Any":case void 0:d=a(function(m){$n(this)[u]=m},"set");break;default:d=a(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new ms.ClientError(`${u} must be an object, attempt to assign ${m}`);$n(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=Kw(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 ms.ClientError("Can not add a property to a sealed table schema");$n(this)[l]=u}),o("deleteProperty",function(l){$n(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?vH:DH);break}c=l}while(c&&c!==DH&&c!==vH)}function MH(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(LH[t])return LH[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=Kw(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function gie(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 Kw(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends Ll{static{a(this,"TrackedObject")}},Lp(r,t)),new r(e)):new Ll(e);case Array:let n=new eS(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=Kw(o,t?.elements)),n[s]=o}return n;default:return e}}function tS(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=tS(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 Dl(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=Dl(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=MA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Dl(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)Sie.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function Zg(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Pl]||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(Zg(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(Zg(s))return!0}else return!0}else return!0}}return!1}var ms,LH,DH,vH,Ll,Sie,Pl,eS,Pp,Yw=se(()=>{ms=b(Ee());z_();os();a($n,"getChanges");a(Lp,"assignTrackedAccessors");LH=Object.prototype,DH=new Proxy({},{get:MH}),vH=new Proxy({},{get:MH,set:gie});a(MH,"getProxiedProperty");a(gie,"setProxiedProperty");a(Kw,"trackObject");Ll=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}};Lp(Ll,{},!0);a(tS,"collapseData");Sie=Object.prototype.hasOwnProperty;a(Dl,"updateAndFreeze");a(Zg,"hasChanges");Pl=Symbol.for("has-array-changes"),eS=class extends Array{static{a(this,"TrackedArray")}#e;[Pl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Pl]=!0,super.splice(...t)}push(...t){return this[Pl]=!0,super.push(...t)}pop(){return this[Pl]=!0,super.pop()}unshift(...t){return this[Pl]=!0,super.unshift(...t)}shift(){return this[Pl]=!0,super.shift()}};eS.prototype.constructor=Array;Pp=class{static{a(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var qH={};ye(qH,{ResourceBridge:()=>zw});function Jw({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 UH(e,t){let r=no(e),n=Jw(e,r);if(!r)throw new mi.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;bt(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&&tS(d)}catch(f){d={message:(0,GH.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 no(e){let t=e.database||e.schema||yie,r=lt()[t];if(!r)throw(0,mi.handleHDBError)(new Error,Tie.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function xH(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*BH(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 FH,rS,mi,kH,Ww,jw,HH,GH,Tie,yie,Rie,bie,zw,$H=se(()=>{FH=b(PH()),rS=b(pd()),mi=b(Ee());Oe();kH=b(_p());G();Ww=b(Qo()),jw=b(ds()),HH=b(ae());Ja();Yw();GH=b(Q()),{HDB_ERROR_MSGS:Tie}=mi.hdbErrors,yie="data",Rie=1e4,bie=10,zw=class extends FH.default{static{a(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=no(t);if(!r)throw new mi.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,rS.default)(t,"conditions");if(s)throw(0,mi.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:Jw(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 mi.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}]}ze({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await no(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=no(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 no(t).dropTable()}createSchema(t){return _d({database:t.schema,table:null}),Ww.signalSchemaChange(new jw.SchemaEventMsg(process.pid,V.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Qw(t.schema),Ww.signalSchemaChange(new jw.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,kH.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),bt(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=tS(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),bt(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 xH(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=lt()[t.schema][t.table];if(!r.createdTimeProperty)throw new mi.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:y_.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,HH.asyncSetTimeout)(bie),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%Rie===0&&await u();return l.length>0&&await u(),s?xH(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,rS.default)(t,"hashes");if(r)throw r;return UH(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of UH(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&lA[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,rS.default)(t,"value");if(n)throw n;let s=no(t);if(!s)throw new mi.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===y_.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:Jw(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=no(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){no({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return no(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=no(t),n={};switch(t.search_type){case R_.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 R_.USERNAME:{let s=t.search_values;for await(let i of BH(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return BH(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(Jw,"getSelect");a(UH,"getRecords");a(no,"getTable");a(xH,"createDeleteResponse");a(BH,"groupRecordsInHistory")});var ps=M((Yve,VH)=>{"use strict";var{ResourceBridge:Aie}=($H(),D(qH)),Iie=fe();Iie.initSync();var nS;function wie(){return nS||(nS=new Aie,nS)}a(wie,"getBridge");VH.exports=wie()});var pi=M((jve,WH)=>{var Nie=to(),{promisify:Cie}=require("util"),{getDatabases:YH}=(Oe(),D(mt));WH.exports={setSchemaDataToGlobal:KH,getTableSchema:Oie,getSystemSchema:Pie,setSchemaDataToGlobalAsync:Cie(KH)};function KH(e){global.hdb_schema=YH(),e&&e()}a(KH,"setSchemaDataToGlobal");function Oie(e,t,r){let n=YH()[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(Oie,"getTableSchema");function Pie(){return Nie}a(Pie,"getSystemSchema")});var Vn=M((Jve,QH)=>{"use strict";var iS=zI(),nn=ae(),Lie=require("util"),oS=ps(),Die=pi(),jH=Q(),{handleHDBError:vl,hdbErrors:vie}=Ee(),{HTTP_STATUS_CODES:Ml}=vie,Mie=Lie.promisify(Die.getTableSchema),Uie="updated",zH="inserted",JH="upserted";QH.exports={insert:Bie,update:Fie,upsert:kie,validation:xie,flush:Hie};async function xie(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 Mie(e.schema,e.table),r=iS(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 jH.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 jH.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(xie,"validation");async function Bie(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=iS(e);if(t)throw vl(new Error,t.message,Ml.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw vl(new Error,r,Ml.BAD_REQUEST);let n=await oS.createRecords(e);return sS(zH,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(Bie,"insertData");async function Fie(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=iS(e);if(t)throw vl(new Error,t.message,Ml.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw vl(new Error,r,Ml.BAD_REQUEST);let n=await oS.updateRecords(e);return nn.isEmpty(n.existing_rows)?sS(Uie,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):sS(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Fie,"updateData");async function kie(e){if(e.operation!=="upsert")throw vl(new Error,"invalid operation, must be upsert",Ml.INTERNAL_SERVER_ERROR);let t=iS(e);if(t)throw vl(new Error,t.message,Ml.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw vl(new Error,r,Ml.BAD_REQUEST);let n=await oS.upsertRecords(e);return sS(JH,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(kie,"upsertData");function sS(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===zH?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===JH?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(sS,"returnObject");function Hie(e){return nn.transformReq(e),oS.flush(e.schema,e.table)}a(Hie,"flush")});var Zw=M((Xve,eG)=>{var Gie=ft(),Xw=require("joi"),{hdbTable:qie,hdbDatabase:XH}=Zi(),ZH={schema:XH,database:XH,table:qie},$ie={date:Xw.date().iso().required()},Vie={timestamp:Xw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};eG.exports=function(e,t){let r=t==="timestamp"?{...ZH,...Vie}:{...ZH,...$ie},n=Xw.object(r);return Gie.validateBySchema(e,n)}});var nG=M((Zve,rG)=>{var Kie=ft(),eN=require("joi"),{hdbTable:Yie,hdbDatabase:tG}=Zi(),Wie=eN.object({schema:tG,database:tG,table:Yie,hash_values:eN.array().required(),ids:eN.array()});rG.exports=function(e){return Kie.validateBySchema(e,Wie)}});var sN=M((eMe,sG)=>{"use strict";var tN=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}},rN=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}},nN=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};sG.exports={InsertObject:tN,NoSQLSeachObject:rN,DeleteResponseObject:nN}});var Bl=M((rMe,lG)=>{"use strict";var oG=Zw(),jie=nG(),Ul=ae(),iG=require("moment"),aG=Q(),{promisify:zie,callbackify:Jie}=require("util"),xl=(G(),D(j)),Qie=pi(),iN=zie(Qie.getTableSchema),oN=ps(),{DeleteResponseObject:Xie}=sN(),{handleHDBError:cc,hdbErrors:Zie}=Ee(),{HDB_ERROR_MSGS:aS,HTTP_STATUS_CODES:lc}=Zie,eoe="records successfully deleted",toe=Jie(cG);lG.exports={delete:toe,deleteRecord:cG,deleteFilesBefore:roe,deleteAuditLogsBefore:noe};async function roe(e){let t=oG(e,"date");if(t)throw cc(t,t.message,lc.BAD_REQUEST,void 0,void 0,!0);if(Ul.transformReq(e),!iG(e.date,iG.ISO_8601).isValid())throw cc(new Error,aS.INVALID_DATE,lc.BAD_REQUEST,xl.LOG_LEVELS.ERROR,aS.INVALID_DATE,!0);let n=Ul.checkSchemaTableExist(e.schema,e.table);if(n)throw cc(new Error,n,lc.NOT_FOUND,xl.LOG_LEVELS.ERROR,n,!0);let s=await oN.deleteRecordsBefore(e);if(await iN(e.schema,e.table),aG.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(roe,"deleteFilesBefore");async function noe(e){let t=oG(e,"timestamp");if(t)throw cc(t,t.message,lc.BAD_REQUEST,void 0,void 0,!0);if(Ul.transformReq(e),isNaN(e.timestamp))throw cc(new Error,aS.INVALID_VALUE("Timestamp"),lc.BAD_REQUEST,xl.LOG_LEVELS.ERROR,aS.INVALID_VALUE("Timestamp"),!0);let r=Ul.checkSchemaTableExist(e.schema,e.table);if(r)throw cc(new Error,r,lc.NOT_FOUND,xl.LOG_LEVELS.ERROR,r,!0);let n=await oN.deleteAuditLogsBefore(e);return await iN(e.schema,e.table),aG.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(noe,"deleteAuditLogsBefore");async function cG(e){e.ids&&(e.hash_values=e.ids);let t=jie(e);if(t)throw cc(t,t.message,lc.BAD_REQUEST,void 0,void 0,!0);Ul.transformReq(e);let r=Ul.checkSchemaTableExist(e.schema,e.table);if(r)throw cc(new Error,r,lc.NOT_FOUND,xl.LOG_LEVELS.ERROR,r,!0);try{await iN(e.schema,e.table);let n=await oN.deleteRecords(e);return Ul.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${eoe}`),n}catch(n){if(n.message===xl.SEARCH_NOT_FOUND_MESSAGE){let s=new Xie;return s.message=xl.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(cG,"deleteRecord")});var dN={};ye(dN,{HASH_FUNCTION:()=>$r,hash:()=>lN,validate:()=>uN});function aN(e=vp){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Dp.randomBytes(e)).map(r=>t[r%t.length]).join("")}function lN(e,t=$r[dG?.toUpperCase()]??$r.SHA256){return cN[t](e)}function uN(e,t,r=$r[dG?.toUpperCase()]??$r.SHA256){return e?soe[r](e,t):!1}var Dp,gd,uG,dG,vp,fG,$r,cN,soe,fN=se(()=>{Dp=b(require("node:crypto")),gd=b(require("argon2")),uG=b(fe());G();dG=(0,uG.get)(x.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),vp=16,fG=9,$r={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};a(aN,"generateSalt");cN={[$r.MD5]:(e,t=void 0)=>{t=t??aN(fG);let r=Dp.createHash($r.MD5).update(e+t).digest("hex");return t+r},[$r.SHA256]:(e,t=void 0)=>{t=t??aN(vp);let r=Dp.createHash($r.SHA256).update(e+t).digest("hex");return t+r},[$r.ARGON2ID]:async e=>{let t=aN(vp),r=await gd.hash(e,{type:gd.argon2id,salt:Buffer.from(t)});return t+r}},soe={[$r.MD5]:(e,t)=>{let r=e.slice(0,fG);return e===cN[$r.MD5](t,r)},[$r.SHA256]:(e,t)=>{let r=e.slice(0,vp);return e===cN[$r.SHA256](t,r)},[$r.ARGON2ID]:async(e,t)=>await gd.verify(e.slice(vp),t)};a(lN,"hash");a(uN,"validate")});var pG=M((oMe,mG)=>{var mN=ft(),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 ioe(e){return gn.password.presence=!0,gn.username.presence=!0,gn.role.presence=!0,gn.active.presence=!0,mN.validateObject(e,gn)}a(ioe,"addUserValidation");function ooe(e){return gn.password.presence=!1,gn.username.presence=!0,gn.role.presence=!1,gn.active.presence=!1,mN.validateObject(e,gn)}a(ooe,"alterUserValidation");function aoe(e){return gn.password.presence=!1,gn.username.presence=!0,gn.role.presence=!1,gn.active.presence=!1,mN.validateObject(e,gn)}a(aoe,"dropUserValidation");mG.exports={addUserValidation:ioe,alterUserValidation:ooe,dropUserValidation:aoe}});var NG=M((lMe,wG)=>{"use strict";var pN=require("recursive-iterator"),coe=require("alasql"),hN=require("clone"),hG=ae(),{handleHDBError:EG,hdbErrors:loe}=Ee(),{HDB_ERROR_MSGS:_G,HTTP_STATUS_CODES:gG}=loe,{getDatabases:uoe}=(Oe(),D(mt)),doe=["DISTINCT_ARRAY"],SG=Symbol("validateTables"),EN=Symbol("validateTable"),cMe=Symbol("getAllColumns"),TG=Symbol("validateAllColumns"),cS=Symbol("findColumn"),yG=Symbol("validateOrderBy"),Mp=Symbol("validateSegment"),_N=Symbol("validateColumn"),RG=Symbol("setColumnsForTable"),bG=Symbol("checkColumnsForAsterisk"),AG=Symbol("validateGroupBy"),IG=Symbol("hasColumns"),gN=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[SG](),this[bG](),this[TG]()}[SG](){if(this[IG]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[EN](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[EN](t.table)})}}[IG](){let t=!1,r=new pN(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[EN](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=uoe();if(!r[t.databaseid])throw EG(new Error,_G.SCHEMA_NOT_FOUND(t.databaseid),gG.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw EG(new Error,_G.TABLE_NOT_FOUND(t.databaseid,t.tableid),gG.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=hN(s);i.table=hN(t),this.attributes.push(i)})}[cS](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)}[bG](){let t=new pN(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[RG](r.tableid)}[RG](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new coe.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[TG](){this[Mp](this.statement.columns,!1),this[Mp](this.statement.joins,!1),this[Mp](this.statement.where,!1),this[AG](this.statement.group,!1),this[Mp](this.statement.order,!0)}[Mp](t,r){if(!t)return;let n=new pN(t),s=[];for(let{node:i,path:o}of n)!hG.isEmpty(i)&&!hG.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[yG](i):s.push(this[_N](i)));return s}[AG](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&doe.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=hN(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[cS](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[cS](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`}[yG](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[_N](t)}[_N](t){let r=this[cS](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]}};wG.exports=gN});var LG=M((dMe,PG)=>{"use strict";var CG=require("lodash"),Up=require("mathjs"),foe=require("jsonata"),OG=ae();PG.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?CG.uniqWith(e,CG.isEqual):e,"distinct_array"),searchJSON:moe,mad:xp.bind(null,Up.mad),mean:xp.bind(null,Up.mean),mode:xp.bind(null,Up.mode),prod:xp.bind(null,Up.prod),median:xp.bind(null,Up.median)};function xp(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(xp,"aggregateFunction");function moe(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(OG.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),OG.isEmpty(this.__ala__.res[r])){let n=foe(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(moe,"searchJSON")});var vG=M((mMe,DG)=>{"use strict";var hr=require("moment"),SN="YYYY-MM-DDTHH:mm:ss.SSSZZ";hr.suppressDeprecationWarnings=!0;DG.exports={current_date:a(()=>hr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>hr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return hr(e).utc().format("YYYY");case"month":return hr(e).utc().format("MM");case"day":return hr(e).utc().format("DD");case"hour":return hr(e).utc().format("HH");case"minute":return hr(e).utc().format("mm");case"second":return hr(e).utc().format("ss");case"millisecond":return hr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>hr(e).utc().format(SN),"date"),date_format:a((e,t)=>hr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>hr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>hr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=hr(e).utc(),s=hr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>hr().utc().valueOf(),"now"),get_server_time:a(()=>hr().format(SN),"get_server_time"),offset_utc:a((e,t)=>hr(e).utc().utcOffset(t).format(SN),"offset_utc")}});var BG=M((hMe,xG)=>{"use strict";var poe=require("@turf/area"),hoe=require("@turf/length"),Eoe=require("@turf/circle"),_oe=require("@turf/difference"),goe=require("@turf/distance"),Soe=require("@turf/boolean-contains"),Toe=require("@turf/boolean-equal"),yoe=require("@turf/boolean-disjoint"),Roe=require("@turf/helpers"),MG=(G(),D(j)),Ze=ae(),ea=Q();xG.exports={geoArea:boe,geoLength:Aoe,geoCircle:Ioe,geoDifference:woe,geoDistance:UG,geoNear:Noe,geoContains:Coe,geoEqual:Ooe,geoCrosses:Poe,geoConvert:Loe};function boe(e){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return poe.default(e)}catch(t){return ea.trace(t,e),NaN}}a(boe,"geoArea");function Aoe(e,t){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return hoe.default(e,{units:t||"kilometers"})}catch(r){return ea.trace(r,e),NaN}}a(Aoe,"geoLength");function Ioe(e,t,r){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return Eoe.default(e,t,{units:r||"kilometers"})}catch(n){return ea.trace(n,e,t),NaN}}a(Ioe,"geoCircle");function woe(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 _oe(e,t)}catch(r){return ea.trace(r,e,t),NaN}}a(woe,"geoDifference");function UG(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 goe.default(e,t,{units:r||"kilometers"})}catch(n){return ea.trace(n,e,t),NaN}}a(UG,"geoDistance");function Noe(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 UG(e,t,n)<=r}catch(s){return ea.trace(s,e,t),!1}}a(Noe,"geoNear");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 Soe.default(e,t)}catch(r){return ea.trace(r,e,t),!1}}a(Coe,"geoContains");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 Toe.default(e,t)}catch(r){return ea.trace(r,e,t),!1}}a(Ooe,"geoEqual");function Poe(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!yoe.default(e,t)}catch(r){return ea.trace(r,e,t),!1}}a(Poe,"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(MG.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(MG.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ze.autoCastJSON(e)),Roe[t](e,r)}a(Loe,"geoConvert")});var lS=M((_Me,FG)=>{var Fl=LG(),hs=vG(),so=BG();FG.exports=e=>{e.aggr.mad=e.aggr.MAD=Fl.mad,e.aggr.mean=e.aggr.MEAN=Fl.mean,e.aggr.mode=e.aggr.MODE=Fl.mode,e.aggr.prod=e.aggr.PROD=Fl.prod,e.aggr.median=e.aggr.MEDIAN=Fl.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Fl.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Fl.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=hs.current_date,e.fn.current_time=e.fn.CURRENT_TIME=hs.current_time,e.fn.extract=e.fn.EXTRACT=hs.extract,e.fn.date=e.fn.DATE=hs.date,e.fn.date_format=e.fn.DATE_FORMAT=hs.date_format,e.fn.date_add=e.fn.DATE_ADD=hs.date_add,e.fn.date_sub=e.fn.DATE_SUB=hs.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=hs.date_diff,e.fn.now=e.fn.NOW=hs.now,e.fn.offset_utc=e.fn.OFFSET_UTC=hs.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=hs.get_server_time,e.fn.getdate=e.fn.GETDATE=hs.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=hs.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=so.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=so.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=so.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=so.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=so.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=so.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=so.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=so.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=so.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=so.geoNear}});var qG=M((gMe,GG)=>{"use strict";var Bp=require("lodash"),Kn=require("alasql");Kn.options.cache=!1;var Doe=lS(),kG=require("clone"),uS=require("recursive-iterator"),Ve=Q(),it=ae(),Sd=ps(),voe=(G(),D(j)),{hdbErrors:Moe}=Ee(),{getDatabases:HG}=(Oe(),D(mt)),Uoe="IS NULL",hi="There was a problem performing this search. Please check the logs and try again.";Doe(Kn);var TN=class{static{a(this,"SQLSearch")}constructor(t,r){if(it.isEmpty(t))throw Ve.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 Ve.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ve.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ve.error(n),new Error(hi)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ve.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ve.error(n),new Error(hi)}if(Object.keys(this.data).length===0)return Ve.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ve.error("Error thrown from processJoins in SQLSearch class method search."),Ve.error(n),new Error(hi)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ve.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ve.error(n),new Error(hi)}try{return t=await this._finalSQL(),t}catch(n){throw Ve.error("Error thrown from finalSQL in SQLSearch class method search."),Ve.error(n),new Error(hi)}}_getColumns(){let t=new uS(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(kG(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Bp.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=HG()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(it.isEmpty(this.statement.where)){Ve.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new uS(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){Ve.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new uS(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(voe.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&&Bp.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 Ve.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ve.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(kG(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(Uoe)>-1&&this.tables.forEach(s=>{let i={columnid:HG()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Bp.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 Sd.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 Ve.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ve.error(d),new Error(hi)}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 Sd.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 Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ve.error(d),new Error(hi)}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 Sd.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,_]of h)this.data[i].__mergedData[E]?this._updateMergedAttribute(i,E,s.attribute,_[s.attribute]):(this.data[i].__mergedData[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,_[s.attribute]),this._setMergedHashAttribute(i,E))}}catch(d){throw Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ve.error(d),new Error(hi)}else try{c.attribute=s.attribute,c.value="*";let d=await Sd.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 Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ve.error(d),new Error(hi)}}}_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 Ve.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ve.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(_=>{E[_.key]!==null&&E[_.key]!==void 0&&_.keys.add(E[_.key])})}o.forEach(p=>{let h=Object.keys(this.data[`${p.schema}_${p.table}`].__mergedData),E=Bp.difference(h,[...p.keys].map(_=>_.toString()));for(let _=0,R=E.length;_<R;_++){let S=E[_];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 uS(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=Bp.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 Ve.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ve.error(i),new Error(hi)}}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 Sd.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],_=p[E]===void 0?null:p[E];this.data[n].__mergedData[m].push(_)}}}}catch(r){throw Ve.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ve.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();Ve.trace(`Final SQL: ${s}`),n=await Kn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ve.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ve.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 Ve.error(Moe.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ve.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 Sd.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 Ve.error("There was an error when processing this SQL operation. Check your logs"),Ve.error(o),new Error(hi)}}return Object.values(Object.values(this.data)[0].__mergedData)}};GG.exports=TN});var Sn=M((TMe,$G)=>{"use strict";$G.exports={searchByConditions:xoe,searchByHash:Boe,searchByValue:Foe,search:koe};var yN=ps(),{transformReq:RN}=ae();async function xoe(e){return RN(e),yN.searchByConditions(e)}a(xoe,"searchByConditions");async function Boe(e){RN(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of yN.searchByHash(e))r&&t.push(r);return t}a(Boe,"searchByHash");async function Foe(e){RN(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of yN.searchByValue(e))t.push(r);return t}a(Foe,"searchByValue");function koe(e,t){try{let r=NG(),n=qG(),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(koe,"search")});var io=M((RMe,WG)=>{"use strict";var Fp=require("crypto"),Hoe=fe(),{CONFIG_PARAMS:Goe}=(G(),D(j)),KG="aes-256-cbc",qoe=32,$oe=16,bN=64,YG=32,Voe=bN+YG,VG=new Map;WG.exports={encrypt:Koe,decrypt:Yoe,createNatsTableStreamName:Woe};function Koe(e){let t=Fp.randomBytes(qoe),r=Fp.randomBytes($oe),n=Fp.createCipheriv(KG,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(Koe,"encrypt");function Yoe(e){let t=e.substr(0,bN),r=e.substr(bN,YG),n=e.substr(Voe,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Fp.createDecipheriv(KG,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Yoe,"decrypt");function Woe(e,t){let r=Hoe.get(Goe.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=VG.get(r);return n||(n=Fp.createHash("md5").update(r).digest("hex"),VG.set(r,n)),n}a(Woe,"createNatsTableStreamName")});var Dt=M((IMe,zG)=>{"use strict";var{platform:AMe}=require("os"),joe="nats-server.zip",AN="nats-server",zoe=process.platform==="win32"?`${AN}.exe`:AN,Joe=/^[^\s.,*>]+$/,jG="__request__",Qoe=a(e=>`${e}.${jG}`,"REQUEST_SUBJECT"),Xoe={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Zoe={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},eae={HUB:"hub.pid",LEAF:"leaf.pid"},tae={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},rae={SUCCESS:"success",ERROR:"error"},nae={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},sae={TXN:"txn",MSGID:"msgid"},Td={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},iae={[Td.ERR]:1,[Td.WRN]:2,[Td.INF]:3,[Td.DBG]:4,[Td.TRC]:5},oae={debug:"-D",trace:"-DVV"};zG.exports={NATS_SERVER_ZIP:joe,NATS_SERVER_NAME:AN,NATS_BINARY_NAME:zoe,PID_FILES:eae,NATS_CONFIG_FILES:Zoe,SERVER_SUFFIX:tae,NATS_TERM_CONSTRAINTS_RX:Joe,REQUEST_SUFFIX:jG,UPDATE_REMOTE_RESPONSE_STATUSES:rae,CLUSTER_STATUS_STATUSES:nae,REQUEST_SUBJECT:Qoe,SUBJECT_PREFIXES:sae,MSG_HEADERS:Xoe,LOG_LEVELS:Td,LOG_LEVEL_FLAGS:oae,LOG_LEVEL_HIERARCHY:iae}});var gi={};ye(gi,{ACTIVE_BOOLEAN:()=>rq,ALTERUSER_NOTHING_TO_UPDATE:()=>ZG,EMPTY_PASSWORD:()=>eq,EMPTY_ROLE:()=>tq,USERNAME_REQUIRED:()=>XG,addUser:()=>DN,alterUser:()=>vN,dropUser:()=>MN,findAndValidateUser:()=>Rd,getClusterUser:()=>gae,getSuperUser:()=>Gp,getUsersWithRolesCache:()=>_ae,listUsers:()=>mS,listUsersExternal:()=>xN,setUsersWithRolesCache:()=>_i,userInfo:()=>UN});async function DN(e){let t=iq.cleanAttributes(e,oq),r=sq.addUserValidation(t);if(r)throw new Ei(r.message);let n=await Hp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new Ei(yd.ROLE_NAME_NOT_FOUND(t.role),ta.NOT_FOUND);if(n.length>1)throw new Ei(yd.DUP_ROLES_FOUND(t.role),ta.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=PN.encrypt(t.password)),t.password=await kp.hash(t.password,dS),t.hash_function=dS,t.role=n[0].id;let s=await nq.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(ON.debug(s),await _i(),s.skipped_hashes.length===1)throw new Ei(yd.USER_ALREADY_EXISTS(t.username),ta.CONFLICT);return CN.signalUserChange(new LN(process.pid)),`${t.username} successfully added`}async function vN(e){let t=iq.cleanAttributes(e,oq);if(oo.isEmptyOrZeroLength(t.username))throw new Error(XG);if(oo.isEmptyOrZeroLength(t.password)&&oo.isEmptyOrZeroLength(t.role)&&oo.isEmptyOrZeroLength(t.active))throw new Error(ZG);if(!oo.isEmpty(t.password)&&oo.isEmptyOrZeroLength(t.password.trim()))throw new Error(eq);if(!oo.isEmpty(t.active)&&!oo.isBoolean(t.active))throw new Error(rq);if(!oo.isEmpty(t.password)&&!oo.isEmptyOrZeroLength(t.password.trim())&&(hae(t.username)&&(t.hash=PN.encrypt(t.password)),t.password=await kp.hash(t.password,dS),t.hash_function=dS),t.role==="")throw new Error(tq);if(t.role){let n=await Hp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Ei(yd.ALTER_USER_ROLE_NOT_FOUND(t.role),ta.NOT_FOUND);if(n.length>1)throw new Ei(yd.DUP_ROLES_FOUND(t.role),ta.CONFLICT);t.role=n[0].id}let r=await nq.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await _i(),CN.signalUserChange(new LN(process.pid)),r}function hae(e){let t=!1,r=ao.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}async function MN(e){let t=sq.dropUserValidation(e);if(t)throw new Ei(t.message);if(ao.get(e.username)===void 0)throw new Ei(yd.USER_NOT_EXIST(e.username),ta.NOT_FOUND);let r=await pae({table:"hdb_user",schema:"system",hash_values:[e.username]});return ON.debug(r),await _i(),CN.signalUserChange(new LN(process.pid)),`${e.username} successfully deleted`}async function UN(e){if(!e||!e.hdb_user)return"There was no user info in the body";let t=NN.cloneDeep(e.hdb_user),r=await Hp.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}async function xN(){let e=await mS();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}async function mS(){let e=await Hp.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=NN.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Hp.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=NN.cloneDeep(s),s.role=t[s.role],Eae(s.role),n.set(s.username,s);return n}function Eae(e){if(!e){ON.error("invalid user role found.");return}e.permission.system||(e.permission.system={tables:{}}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(dae)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}async function _i(e=void 0){e?ao=e:ao=await mS()}async function _ae(){return ao||await _i(),ao}async function Rd(e,t,r=!0){ao||await _i();let n=ao.get(e);if(!n){if(!r)return{username:e};throw new Ei(IN.GENERIC_AUTH_FAIL,ta.UNAUTHORIZED)}if(n&&!n.active)throw new Ei(IN.USER_INACTIVE,ta.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(QG.get(t)===n.password)return s;{let i=kp.validate(n.password,t,n.hash_function||kp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)QG.set(t,n.password);else throw new Ei(IN.GENERIC_AUTH_FAIL,ta.UNAUTHORIZED)}}return s}async function Gp(){ao||await _i();for(let[,e]of ao)if(e.role.role==="super_user")return e}async function gae(){let e=await mS(),t=lae.getConfigFromFile(wN.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(r==null||r?.role?.role!==wN.ROLE_TYPES_ENUM.CLUSTER_USER)return;let n=PN.decrypt(r.hash);return r.decrypt_hash=n,r.uri_encoded_d_hash=encodeURIComponent(n),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+JG.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+JG.SERVER_SUFFIX.ADMIN,r}var XG,ZG,eq,tq,rq,nq,aae,kp,sq,Hp,CN,oo,iq,ON,cae,PN,wN,JG,lae,uae,dae,fae,Ei,ta,IN,yd,LN,NN,fS,mae,oq,QG,pae,dS,ao,aq,Yn=se(()=>{"use strict";XG="username is required",ZG="nothing to update, must supply active, role or password to update",eq="password cannot be an empty string",tq="If role is specified, it cannot be empty.",rq="active must be true or false",nq=Vn(),aae=Bl(),kp=(fN(),D(dN)),sq=pG(),Hp=Sn(),CN=Qo(),oo=ae(),iq=require("validate.js"),ON=Q(),{promisify:cae}=require("util"),PN=io(),wN=(G(),D(j)),JG=Dt(),lae=_t(),uae=fe(),dae=to(),{hdbErrors:fae,ClientError:Ei}=Ee(),{HTTP_STATUS_CODES:ta,AUTHENTICATION_ERROR_MSGS:IN,HDB_ERROR_MSGS:yd}=fae,{UserEventMsg:LN}=ds(),NN=require("lodash"),{server:fS}=(Hr(),D(bm)),mae=Q();fS.getUser=(e,t)=>Rd(e,t,t!=null);fS.authenticateUser=(e,t)=>Rd(e,t);oq={username:!0,active:!0,role:!0,password:!0},QG=new Map,pae=cae(aae.delete),dS=uae.get(wN.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??kp.HASH_FUNCTION.SHA256;a(DN,"addUser");a(vN,"alterUser");a(hae,"isClusterUser");a(MN,"dropUser");a(UN,"userInfo");a(xN,"listUsersExternal");a(mS,"listUsers");a(Eae,"appendSystemTablesToRole");a(_i,"setUsersWithRolesCache");a(_ae,"getUsersWithRolesCache");a(Rd,"findAndValidateUser");a(Gp,"getSuperUser");a(gae,"getClusterUser");aq=[];fS.invalidateUser=function(e){for(let t of aq)try{t(e)}catch(r){mae.error("Error invalidating user",r)}};fS.onInvalidatedUser=function(e){aq.push(e)}});var Pe,bd=se(()=>{Pe={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var Ad,BN=se(()=>{bd();Ad=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!==Pe.ERROR&&(this.error=void 0)}markHealthy(t){this.updateStatus(Pe.HEALTHY,t||"Component is healthy")}markError(t,r){this.status=Pe.ERROR,this.error=t,this.message=r||(typeof t=="string"?t:t.message),this.lastChecked=new Date}markWarning(t){this.updateStatus(Pe.WARNING,t)}markLoading(t){this.updateStatus(Pe.LOADING,t||"Component is loading")}isHealthy(){return this.status===Pe.HEALTHY}hasError(){return this.status===Pe.ERROR}isLoading(){return this.status===Pe.LOADING}hasWarning(){return this.status===Pe.WARNING}getSummary(){let t=this.status.toUpperCase(),r=this.message?`: ${this.message}`:"";return`${t}${r}`}}});var kl,uc,FN,Id,kN,wd,HN,pS=se(()=>{kl=b(Jr()),uc=class extends Error{static{a(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=kl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},FN=class extends uc{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}.`,kl.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},Id=class extends uc{static{a(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,kl.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},kN=class extends uc{static{a(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,kl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},wd=class extends uc{static{a(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,kl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},HN=class extends uc{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,kl.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 cq,Hl,lq,dc,qp,Nd,Sae,hS,GN=se(()=>{cq=b(ds()),Hl=b(st());G();lq=b(ir());bd();pS();dc=(0,lq.loggerWithTag)("componentStatus.crossThread"),qp=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,Hl.onMessageByType)(b_.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;dc.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&&(dc.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,Hl.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,_=a(()=>{let y=this.awaitingResponses.get(r);y&&y.length>=o&&!E&&(E=!0,S(),dc.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),dc.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,_),(0,cq.sendItcEvent)({type:b_.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{_()}).catch(y=>{E=!0,S(),this.responseCheckers.delete(r),h(new Id("sendItcEvent",y))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,Hl.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 _=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${_}`,{...E,workerIndex:p.workerIndex})}return dc.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof Id?dc.error?.(`ITC failure during component status collection: ${r.message}`):dc.warn?.("Failed to collect component status from all threads:",r),dc.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,Hl.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)}},Nd=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):"",_=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=_;else if(E&&E.startsWith("worker-")){let R=parseInt(E.substring(7));isNaN(R)||(n.workers[R]=_)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==Pe.HEALTHY&&p.message&&(!i||_>s)&&(s=_,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=[Pe.ERROR,Pe.WARNING,Pe.LOADING,Pe.UNKNOWN,Pe.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return Pe.UNKNOWN}},Sae=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),hS=new qp(Sae)});var fc,ES=se(()=>{BN();bd();GN();pS();fc=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 wd(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Pe).includes(r))throw new wd(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Pe).join(", ")}`);this.statusMap.set(t,new Ad(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,Pe.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,Pe.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,Pe.WARNING,r)}initializeLoading(t,r){this.setStatus(t,Pe.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,Pe.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,Pe.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={[Pe.HEALTHY]:0,[Pe.ERROR]:0,[Pe.WARNING]:0,[Pe.LOADING]:0,[Pe.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await hS.collect(t);return Nd.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:Pe.UNKNOWN,message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}};let o=n.some(f=>f.status===Pe.ERROR),c=n.some(f=>f.status===Pe.LOADING),l=o?Pe.ERROR:c?Pe.LOADING:Pe.HEALTHY,u="All components loaded successfully",d={};if(o||c){u=n.filter(m=>m.status===Pe.ERROR||m.status===Pe.LOADING).map(m=>`${m.key}: ${m.latestMessage||m.status}`).join("; ");for(let m of n)m.status!==Pe.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 Er,_S=se(()=>{ES();Er=new fc});function dq(e){let t=uq.get(e);return t||(t=new qN(e),uq.set(e,t)),t}function fq(){Er.reset()}var qN,uq,co,mq,pq=se(()=>{_S();bd();qN=class{static{a(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return Er.setStatus(this.componentName,Pe.HEALTHY,t),this}warning(t){return Er.setStatus(this.componentName,Pe.WARNING,t),this}error(t,r){return Er.setStatus(this.componentName,Pe.ERROR,t,r),this}loading(t){return Er.setStatus(this.componentName,Pe.LOADING,t||"Loading..."),this}unknown(t){return Er.setStatus(this.componentName,Pe.UNKNOWN,t),this}get(){return Er.getStatus(this.componentName)}},uq=new Map;a(dq,"statusForComponent");co={loading(e,t){Er.initializeLoading(e,t)},loaded(e,t){Er.markLoaded(e,t)},failed(e,t,r){Er.markFailed(e,t,r)}};a(fq,"reset");mq=Pe});var $p={};ye($p,{AggregationError:()=>kN,COMPONENT_STATUS_LEVELS:()=>Pe,ComponentStatus:()=>Ad,ComponentStatusError:()=>uc,ComponentStatusOperationError:()=>wd,ComponentStatusRegistry:()=>fc,CrossThreadCollectionError:()=>HN,CrossThreadStatusCollector:()=>qp,CrossThreadTimeoutError:()=>FN,ITCError:()=>Id,StatusAggregator:()=>Nd,componentStatusRegistry:()=>Er,crossThreadCollector:()=>hS,query:()=>Tae});var Tae,hq=se(()=>{_S();ES();BN();ES();GN();_S();pS();bd();Tae={get(e){return Er.getStatus(e)},all(){return Er.getAllStatuses()},byStatus(e){return Er.getComponentsByStatus(e)},summary(){return Er.getStatusSummary()},async allThreads(){return fc.getAggregatedFromAllThreads(Er)}}});var $N={};ye($N,{STATUS:()=>mq,internal:()=>$p,lifecycle:()=>co,reset:()=>fq,statusForComponent:()=>dq});var Vp=se(()=>{pq();hq()});var Yp=M((oUe,gq)=>{"use strict";var Es=Q(),Tn=(G(),D(j)),yae=eF(),Rae=(Yn(),D(gi)),{validateEvent:VN}=ds(),Kp=ps(),bae=require("process"),{resetDatabases:Aae}=(Oe(),D(mt)),Iae={[Tn.ITC_EVENT_TYPES.SCHEMA]:wae,[Tn.ITC_EVENT_TYPES.USER]:_q,[Tn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:Cae};async function wae(e){let t=VN(e);if(t){Es.error(t);return}Es.trace("ITC schemaHandler received schema event:",e),await yae(e.message),await Nae(e.message)}a(wae,"schemaHandler");async function Nae(e){try{Kp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Kp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Kp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=Aae();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Es.error(t)}}a(Nae,"syncSchemaMetadata");var Eq=[];async function _q(e){try{try{Kp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Kp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Es.warn(r)}let t=VN(e);if(t){Es.error(t);return}Es.trace(`ITC userHandler ${Tn.HDB_ITC_CLIENT_PREFIX}${bae.pid} received user event:`,e),await Rae.setUsersWithRolesCache();for(let r of Eq)r()}catch(t){Es.error(t)}}a(_q,"userHandler");_q.addListener=function(e){Eq.push(e)};async function Cae(e){try{let t=VN(e);if(t){Es.error(t);return}Es.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Vp(),D($N)),{getWorkerIndex:n}=st(),{sendItcEvent:s}=ds(),i=r.componentStatusRegistry.getAllStatuses(),o=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:Tn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:o,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?Es.trace(`Sent component status response directly to thread ${u}`):(u===void 0?Es.debug("No originator threadId, falling back to broadcast"):Es.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){Es.error("Error handling component status request:",t)}}a(Cae,"componentStatusRequestHandler");gq.exports=Iae});var ds=M((fUe,Tq)=>{"use strict";var cUe=Q(),KN=ae(),Oae=(G(),D(j)),{ITC_ERRORS:Wp}=Jr(),{parentPort:lUe,threadId:Pae,isMainThread:Lae,workerData:uUe}=require("worker_threads"),{onMessageFromWorkers:Dae,broadcast:dUe,broadcastWithAcknowledgement:vae}=st();Tq.exports={sendItcEvent:Mae,validateEvent:Sq,SchemaEventMsg:Uae,UserEventMsg:xae};var gS;Dae(async(e,t)=>{gS=gS||Yp(),Sq(e),gS[e.type]&&await gS[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Mae(e){return!Lae&&e.message&&(e.message.originator=Pae),vae(e)}a(Mae,"sendItcEvent");function Sq(e){if(typeof e!="object")return Wp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||KN.isEmpty(e.type))return Wp.MISSING_TYPE;if(!e.hasOwnProperty("message")||KN.isEmpty(e.message))return Wp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||KN.isEmpty(e.message.originator))return Wp.MISSING_ORIGIN;if(Oae.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Wp.INVALID_EVENT(e.type)}a(Sq,"validateEvent");function Uae(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(Uae,"SchemaEventMsg");function xae(e){this.originator=e}a(xae,"UserEventMsg")});var Qo=M((hUe,Aq)=>{"use strict";var yq=(G(),D(j)),pUe=ae(),SS=Q(),Rq=xB(),Cd,{sendItcEvent:bq}=ds();function Bae(e){try{SS.debug("signalSchemaChange called with message:",e),Cd=Cd||Yp();let t=new Rq(yq.ITC_EVENT_TYPES.SCHEMA,e);return Cd.schema(t),bq(t)}catch(t){SS.error(t)}}a(Bae,"signalSchemaChange");function Fae(e){try{SS.trace("signalUserChange called with message:",e),Cd=Cd||Yp();let t=new Rq(yq.ITC_EVENT_TYPES.USER,e);return Cd.user(t),bq(t)}catch(t){SS.error(t)}}a(Fae,"signalUserChange");Aq.exports={signalSchemaChange:Bae,signalUserChange:Fae}});function jp(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 Iq(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Hs(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 Hs,zp=se(()=>{Hs=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(jp,"appendHeader");a(Iq,"mergeHeaders")});function TS(e,t,r=Hae){let n;return function(...i){return n?n.length*YN>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();YN=(YN*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var Cq,kae,Hae,wq,Gae,WN,Nq,YN,jN=se(()=>{Cq=b(ir()),kae=3e3,Hae=2e4,wq=0,Gae=3e4,WN=3e3,Nq=performance.now()+WN,YN=0;a(TS,"throttle");setInterval(()=>{let e=performance.now();e-Nq-WN>kae&&wq+Gae<e&&(Cq.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"),wq=e),Nq=e},WN).unref()});var kq={};ye(kq,{EVICTED:()=>yl,INVALIDATED:()=>kn,coerceType:()=>RS,makeTable:()=>bS});function bS(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:_,trackDeletes:R}=e;E??=0;let{attributes:S}=e;S||(S=[]);let y=NI(i,n,l),w,I,H={},X=Promise.resolve(),q,k,z;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(q=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(k=K),K.expiresAt&&(z=K),K.isPrimaryKey&&(H=K);let Y,ce=[],de=[],te=1,Se=2,Ne={},Ke={},$e=864e5,Ir=0,nr,zr,xr,Lu=!1,Qc,Bt,si,Ga=ql.get(x.REPLICATION_DATABASES);if(Array.isArray(Ga)){for(let K of Ga)if(K.name===c&&K.replicateTo>=0){si=K.replicateTo;break}}let l_=i.getRange({start:!1,end:!1}).constructor,um=10,u_=6;_&&hm(),Jm(i.env.path,K=>{if(I)return $a(K)});class dm extends Ll{static{a(this,"Updatable")}getUpdatedTime(){return tc.get(this.getRecord())?.version}getExpiresAt(){return tc.get(this.getRecord())?.expiresAt}addTo(g,T){if(typeof T=="number"||typeof T=="bigint")this.set(g,new Pp(T));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(g,T){return this.addTo(g,-T)}}class ve extends Xt{#e;#t;#n;#r;#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=_;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(g,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)g.intermediateSource=!0,this.sources.unshift(g);else{if(this.sources.some(v=>!v.intermediateSource)){if(this.sources.some(v=>v.name===g.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(g)}I=I||g.get&&(!g.get.reliesOnPrototype||g.prototype.get),w=w||g.load;let C=a(v=>{let A=this.sources;if(A=A.filter(U=>U.intermediateSource&&U[v]&&(!U[v].reliesOnPrototype||U.prototype[v])),A.length>0)if(A.length===1){let U=A[0];return(N,L,$)=>{if(N?.source!==U)return U[v](L,$,N)}}else return(U,N,L)=>{let $=[];for(let W of A){if(U?.source===W)break;$.push(W[v](N,L,U))}return Promise.all($)}},"getApplyToIntermediateSource"),P=this.sources[this.sources.length-1];P.intermediateSource&&(P={});let O=a(v=>{if(P[v]&&(!P[v].reliesOnPrototype||P.prototype[v]))return(A,U,N)=>{if(!A?.source)return P[v](U,N,A)}},"getApplyToCanonicalSource");Ne={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},Ke={put:C("put"),patch:C("patch"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")};let B=P.shouldRevalidateEvents;return(async()=>{let v=!1,A,U=a(async(N,L)=>{let $=N.value,W=N.table?Me[c][N.table]:ve;if(c===Sm&&(N.table===Bu.ROLE_TABLE_NAME||N.table===Bu.USER_TABLE_NAME)&&(v=!0),N.id===void 0&&(N.id=$[W.primaryKey],N.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(N));N.source=g;let J={residencyId:Xc(N.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:N.nodeId,async:!0},F=N.id,he=await W.getResource(F,L,J);switch(N.finished&&await N.finished,N.type){case"put":return B?he._writeInvalidate(F,$,J):he._writeUpdate(F,$,!0,J);case"patch":return B?he._writeInvalidate(F,$,J):he._writeUpdate(F,$,!1,J);case"delete":return he._writeDelete(F,J);case"publish":case"message":return he._writePublish(F,$,J);case"invalidate":return he._writeInvalidate(F,$,J);case"relocate":return he._writeRelocate(F,J);default:Fe.default.error?.("Unknown operation",N.type,N.id)}},"writeUpdate");try{let N=g.subscribe;N&&R==null&&(R=!0);let L={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},$=g.subscribeOnThisThread?g.subscribeOnThisThread((0,Gl.getWorkerIndex)(),L):(0,Gl.getWorkerIndex)()===0,W=N&&$&&await g.subscribe?.(L);if(W){let J;for await(let F of W)try{if(!(F.type==="transaction"?F.writes[0]:F)){Fe.default.error?.("Bad subscription event",F);continue}if(F.source=g,F.type==="end_txn"){J?.resolve();let _e;if(F.localTime&&A!==F.localTime&&F.remoteNodeIds?.length>0&&(_e=a(()=>{let re=[Symbol.for("seq"),F.remoteNodeIds[0]],oe=d.get(re),ge=oe?.nodes;ge||(ge=[]);for(let ie of F.remoteNodeIds.slice(1)){let Ce=ge.find(Be=>Be.id===ie);ge=ge.filter(Be=>Be.id!==ie||Be===Ce),Ce||(Ce={id:ie,seqId:0},ge.push(Ce)),Ce.seqId=Math.max(oe?.seqId??1,F.localTime),ie===J?.nodeId&&(Ce.lastTxnTime=F.timestamp)}let me=Math.max(oe?.seqId??1,F.localTime);Fe.default.trace?.("Received txn",c,me,new Date(me),F.localTime,new Date(F.localTime),F.remoteNodeIds),d.put(re,{seqId:me,nodes:ge})},"updateRecordedSequenceId"),A=F.localTime),F.onCommit){let re=J?J.committed.then(F.onCommit):F.onCommit();_e&&(re?.then?re.then(_e):_e())}else _e&&_e();continue}if(J)if(F.beginTxn)J.resolve();else{J.writePromises.push(U(F,J));continue}!F.timestamp&&F.version&&(F.timestamp=F.version);let ue=bt(F,()=>{if(F.type==="transaction"){let _e=[];for(let re of F.writes)try{_e.push(U(re,F))}catch(oe){throw oe.message+=" writing "+JSON.stringify(re)+" of event "+JSON.stringify(F),oe}return Promise.all(_e)}else if(F.type==="define_schema"){let _e=this.attributes.slice(0),re=!1;for(let oe of F.attributes)_e.find(ge=>ge.name===oe.name)||(_e.push(oe),re=!0);re&&(ze({table:s,database:c,attributes:_e,origin:"cluster"}),Qp.signalSchemaChange(new Xp.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return F.beginTxn?(J=F,J.writePromises=[U(F,F)],new Promise(_e=>{J.resolve=()=>_e(Promise.all(J.writePromises))})):U(F,F)});J&&(J.committed=ue),v&&ue&&!ue?.waitingForUserChange&&(ue.then(()=>Qp.signalUserChange(new Xp.UserEventMsg(process.pid))),ue.waitingForUserChange=!0),F.onCommit&&(ue?ue.then(F.onCommit):F.onCommit())}catch(he){Fe.default.error?.("error in subscription handler",he)}}}catch(N){Fe.default.error?.(N)}})(),this}static get isCaching(){return I}static get shouldRevalidateEvents(){return this.prototype.get!==ve.prototype.get}static getResource(g,T,C){let P=super.getResource(g,T,C);if(this.loadAsInstance===!1&&(T._freezeRecords=!0),g!=null&&this.loadAsInstance!==!1){qi(g);try{if(P.getRecord?.())return P;if(typeof g=="object"&&g&&!Array.isArray(g))throw new Error(`Invalid id ${JSON.stringify(g)}`);let O=!C?.async||i.cache?.get?.(g),B=Br(T),v=B.getReadTxn();if(v?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Uo(g,T,{transaction:v,ensureLoaded:C?.ensureLoaded},O,A=>{if(A?ve._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(g,A,T,P);if(U)return B?.disregardReadTxn(),P.#i=!0,T.loadedFromSource=!0,Gs(U,N=>(ve._updateResource(P,N),P))}return P})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(g)),O}}return P}static _updateResource(g,T){g.#r=T,g.#e=T?.value??null,g.#n=T?.version}ensureLoaded(){let g=pn(this.getId(),this.#r,this.getContext());if(g)return this.#i=!0,this.getContext().loadedFromSource=!0,Gs(g,T=>{this.#r=T,this.#e=T.value,this.#n=T.version})}static getNewId(){let g=H?.type;if(g==="String"||g==="ID")return super.getNewId();if(!Bt){let O=i.getEntry(Symbol.for("id_allocation")),B=O?.value,v;if(B&&B.nodeName===server.hostname&&(!Zae(i)||B.pid===process.pid)){let A=B.start,U=B.end;v=A;for(let N of i.getKeys({start:U,end:A,limit:1,reverse:!0}))v=N}else B=P(O?.version??null),v=B.start;Bt=new BigInt64Array([BigInt(v)+1n]),Bt=new BigInt64Array(i.getUserSharedBuffer("id",Bt.buffer)),Bt.maxSafeId=B.end}let T=Number(Atomics.add(Bt,0,1n)),C=g==="Int"?512:1048576;if(T+C>=Bt.maxSafeId){let O=a(B=>{Bt.maxSafeId=T+(g==="Int"?1023:4194303);let v=(g==="Int"?Math.pow(2,31):Math.pow(2,49))-1,A=B?void 0:i.useReadTransaction(),U=Number(Bt[0]);for(let $ of i.getKeys({start:U+1,end:v,limit:1,transaction:A}))v=$;A?.done();let{value:N,version:L}=i.getEntry(Symbol.for("id_allocation"));if(Bt.maxSafeId<v){if(N.end>Bt.maxSafeId-100)return;Fe.default.info?.("New id allocation",T,Bt.maxSafeId,L),i.put(Symbol.for("id_allocation"),{start:N.start,end:Bt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),L)}else{Fe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Bt.maxSafeId}, but id of ${v} detected`);let $=P(L);$.alreadyUpdated||Atomics.store(Bt,0,BigInt($.start+1)),Bt.maxSafeId=$.end}},"updateEnd");T+C===Bt.maxSafeId?setImmediate(O):T+100>=Bt.maxSafeId&&(Fe.default.warn?.(`Synchronous id allocation required on table ${s}${g=="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 B=(g==="Int"?Math.pow(2,31):Math.pow(2,49))-1,v=B/4,A,U,N=!1,L,$;do{L=Math.floor(Math.random()*B),$={start:L,end:L+(g==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},A=0;for(let W of i.getKeys({start:L,limit:1,reverse:!0}))A=W;U=B;for(let W of i.getKeys({start:L+1,end:B,limit:1}))U=W;v*=.875,v<1e3&&!N&&(N=!0,Fe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${g==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,L,A,U,v))}while(!(v<U-L&&(v<L-A||A===0)));return i.transactionSync(()=>{let W=i.getEntry(Symbol.for("id_allocation"));return(W?.version??null)==O?(Fe.default.info?.("Allocated new id range",$),i.put(Symbol.for("id_allocation"),$,Date.now()),$):(Fe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...W.value})})}}static setTTLExpiration(g){if(typeof g=="number")h=g*1e3,E||(E=0);else if(g&&typeof g=="object")h=g.expiration*1e3,E=(g.eviction||0)*1e3,$e=g.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");$e=$e||(h+E)/4,$a()}static getResidencyRecord(g){return d.get([Symbol.for("residency_by_id"),g])}static setResidency(g){ve.getResidency=g&&((T,C)=>{try{return g(T,C)}catch(P){throw P.message+=` in residency function for table ${s}`,P}})}static setResidencyById(g){ve.getResidencyById=g&&(T=>{try{return g(T)}catch(C){throw C.message+=` in residency function for table ${s}`,C}})}static getResidency(g,T){if(ve.getResidencyById)return ve.getResidencyById(g[t]);let C=si;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),B=Math.floor(O.length*Math.random());P.push(...O.slice(B,B+C));let v=B+C-O.length;v>0&&P.push(...O.slice(0,v))}return P}}static enableAuditing(){_||(_=!0,hm(),ve.audit=!0)}static coerceId(g){return g===""?null:RS(g,H)}static async dropTable(){delete Me[c][s];for(let g of i.getRange({versions:!0,snapshot:!1,lazy:!0}))g.metadataFlags&Zr&&g.value&&Xa(g.value);if(c===o){for(let g of S)d.remove(ve.tableName+"/"+g.name),r[g.name]?.drop();d.remove(ve.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),JN.default.unlinkSync(i.env.path);Qp.signalSchemaChange(new Xp.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(g){let T=this.constructor;if(typeof g=="string"&&T.loadAsInstance!==!1)return this.getProperty(g);if(fm(g))return this.search(g);if(g&&g.id===void 0&&!g.toString()){let C={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?ve.getRecordCount().then(P=>(C.recordCount=P.recordCount,C.estimatedRecordRange=P.estimatedRange,C)):C}if(g!==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 B=Ps(g);qi(B);let v=!0;return g.checkPermission&&(v=this.allowRead(C.user,g)),Gs(Gs(v,A=>{if(!A)throw new dt.AccessViolation(C.user);let U=!0;return Uo(B,C,{transaction:O,ensureLoaded:U},!1,N=>{if(C.onlyIfCached){if(!N?.value)throw new dt.ServerError("Entry is not cached",504)}else if(U){let L=pn(B,N,C);if(L)return P?.disregardReadTxn(),C.loadedFromSource=!0,L.then($=>$?.value)}return N?.value})}),A=>{let U=g?.select;return U&&A!=null?od(U,this.constructor)(A):A})}if(g?.property)return this.getProperty(g.property);if(this.doesExist()||g?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(g,T){let C=Dn(g,T);if(C?.read){if(C.isSuperUser)return!0;let P=C.attribute_permissions,O=T?.select;if(P?.length>0||Lu&&O){if(T||(T={}),O){let B=Array.isArray(O)?O:[O],v=P?.length>0&&zN(P,"read");T.select=B.map(A=>{let U=A.name||A;if(!v||v[U]){let N=xr[U]?.definition?.tableClass;if(N){if(A.name||(A={name:A}),!A.checkPermission&&T.checkPermission&&(A.checkPermission=T.checkPermission),!N.prototype.allowRead.call(null,g,A))return!1;if(!A.select)return A.name}return A}}).filter(Boolean)}else T.select=P.filter(B=>B.read&&!xr[B.attribute_name]).map(B=>B.attribute_name);return T}else return!0}}allowUpdate(g,T,C){let P=Dn(g,C);if(P?.update){let O=P.attribute_permissions;if(O?.length>0){let B=zN(O,"update");for(let v in T)if(!B[v])return!1;for(let v of O){let A=v.attribute_name;!v.update&&!(A in T)&&(T[A]=this.getProperty(A))}}return qa(this.getContext())}}allowCreate(g,T,C){if(this.isCollection){let P=Dn(g,C);if(P?.insert){let O=P.attribute_permissions;if(O?.length>0){let B=zN(O,"insert");for(let v in T)if(!B[v])return!1;return qa(this.getContext())}else return qa(this.getContext())}}else return this.allowUpdate(g,{})}allowDelete(g,T){return Dn(g,T)?.delete&&qa(this.getContext())}update(g,T){let C,P=typeof T=="boolean"||T===void 0&&(g==null||typeof g=="object"&&!(g instanceof URLSearchParams)),O=!1;P?(O=T,T=g,C=this.getId()):C=Ps(g);let B=this.getContext();if(!Br(B))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(g==null)throw new TypeError("Can not put a record without a target");return g.checkPermission&&(A=this.allowUpdate(B.user,T,g)),Gs(A,U=>{if(!U)throw new dt.AccessViolation(B.user);return Gs(i.get(Ps(g)),N=>{let L=new dm(N);return L._setChanges(T),this._writeUpdate(C,L.getChanges(),!1),L})})}return this._writeUpdate(C,this.#t,O),this}addTo(g,T){if(typeof T=="number"||typeof T=="bigint")this.#s===Pq?this.set(g,(+this.getProperty(g)||0)+T):(this.#s||this.update(),this.set(g,new Pp(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(g,T){if(typeof T=="number")return this.addTo(g,-T);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#r}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(g){this.#t=g}setRecord(g){this.#e=g}invalidate(g){let T=!0,C=this.getContext();return g?.checkPermission&&(T=this.allowDelete(C.user,g,C)),Gs(T,P=>{if(!P)throw new dt.AccessViolation(C.user);this._writeInvalidate(g?Ps(g):this.getId())})}_writeInvalidate(g,T,C){let P=this.getContext();qi(g),Br(this.getContext()).addWrite({key:g,store:i,invalidated:!0,entry:this.#r,before:Ne.invalidate?.bind(this,P,g),beforeIntermediate:Uu(T,Ke.invalidate?.bind(this,P,g)),commit:a((B,v)=>{if(!(Fr(B,v,C?.nodeId)<=0)){T??=null;for(let A in r)T||(T={}),T[A]===void 0&&(T[A]=this.getProperty(A));Fe.default.trace?.(`Invalidating entry in ${s} id: ${g}, timestamp: ${new Date(B).toISOString()}`),y(g,T,v,B,kn,_,{user:P?.user,residencyId:C?.residencyId,nodeId:C?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(g,T){let C=this.getContext();qi(g),Br(this.getContext()).addWrite({key:g,store:i,invalidated:!0,entry:this.#r,before:Ne.relocate?.bind(this,C,g),beforeIntermediate:Ke.relocate?.bind(this,C,g),commit:a((O,B)=>{if(Fr(O,B,T?.nodeId)<=0)return;let v=ve.getResidencyRecord(T.residencyId),A=0,U=null,N=B?.value;if(v&&!v.includes(server.hostname)){for(let L in r)U||(U={}),U[L]=N[L];A=kn}else U=N;Fe.default.trace?.(`Relocating entry id: ${g}, timestamp: ${new Date(O).toISOString()}`),y(g,U,B,O,A,_,{user:C.user,residencyId:T.residencyId,nodeId:T.nodeId,expiresAt:T.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(g,T){if(this.getResidencyById)return!1;let C={previousResidency:this.getResidencyRecord(g.residencyId),isRelocation:!0},P=Va(this.getResidency(T.value,C)),O;if(P){if(!P.includes(server.hostname))return!1;O=Xc(P)}let B=0;Fe.default.debug?.("Performing a relocate of an entry",g.key,T.value,P);let v=y(g.key,T.value,g,g.version,B,!0,{residencyId:O,expiresAt:T.expiresAt},"relocate",!1,null);return!0}static evict(g,T,C){let P=this.Source,O;if(!((I||_)&&(!T||(O=i.getEntry(g),!O||!T)||O.version!==C))){if(I){if(i.hasLock(g,O.version))return;let B;for(let v in r)B||(B={}),B[v]=T[v];if(B)return y(g,B,O,C,yl,null,null,null,!0)}return i.ifVersion(g,C,()=>{Du(g,T,null)}),Tl(i,O??i.getEntry(g),C)}}lock(){throw new Error("Not yet implemented")}static operation(g,T){return g.table||=s,g.schema||=c,global.operation(g,T)}put(g,T){if(T===void 0||T instanceof URLSearchParams)this.update(g,!0);else{let C=!0;if(g==null)throw new TypeError("Can not put a record without a target");let P=this.getContext();return g.checkPermission&&(C=this.allowUpdate(P.user,T,g)),Gs(C,O=>{if(!O)throw new dt.AccessViolation(P.user);if(Array.isArray(T))for(let B of T){let v=B[t];this._writeUpdate(v,B,!0)}else{let B=Ps(g);this._writeUpdate(B,T,!0)}})}}create(g,T){let C=!0,P=this.getContext();if(!T&&!(g instanceof URLSearchParams)&&(T=g,g=void 0),!T||typeof T!="object"||Array.isArray(T))throw new TypeError("Can not create a record without an object");return g?.checkPermission&&(C=this.allowCreate(P.user,T,g)),Gs(C,O=>{if(!O)throw new dt.AccessViolation(P.user);let B=Ps(g)??T[t];if(B===void 0)B=this.constructor.getNewId(),T[t]=B;else if(i.get(B))throw new dt.ClientError("Record already exists",409);return this._writeUpdate(B,T,!0),T})}patch(g,T){if(T===void 0||T instanceof URLSearchParams)this.update(g,!1);else{let C=this.update(g,T);if(C?.then)return C.then(()=>{})}}_writeUpdate(g,T,C,P){let O=this.getContext(),B=Br(O);qi(g);let v=this.#r??i.getEntry(g);this.#s=C?Pq:zae;let A=a(N=>C?N.put?()=>N.put(O,g,T):null:N.patch?()=>N.patch(O,g,T):N.put?()=>N.put(O,g,Dl(this)):null,"writeToSources"),U={key:g,store:i,entry:v,nodeName:O?.nodeName,validate:a(N=>{T||(T=this.#t),C||T&&Zg(this.#t===T?this:T)?O?.source||(B.checkOverloaded(),this.validate(T,!C),k&&(T[k.name]=k.type==="Date"?new Date(N):k.type==="String"?new Date(N).toISOString():N),C&&(t&&T[t]!==g&&(T[t]=g),q&&(v?.value?T[q.name]=v?.value[q.name]:T[q.name]=q.type==="Date"?new Date(N):q.type==="String"?new Date(N).toISOString():N),T=Dl(T))):B.removeWrite(U)},"validate"),before:A(Ne),beforeIntermediate:Uu(T,A(Ke)),commit:a((N,L,$)=>{if($){if(O&&L?.version>(O.lastModified||0)&&(O.lastModified=L.version),this.#r=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.#n=N;let W=L?.value,J;this.#s=0;let F=!1,he=Fr(N,L,P?.nodeId),ue,_e=C?"put":"patch",re;P?.residencyId!=null&&(re=P.residencyId);let oe=O?.expiresAt??(h?h+Date.now():-1);if(he<=0){if(_){let ie=L.localTime,Ce=L.version;Fe.default.trace?.("Applying CRDT update to record with id: ",g,"txn time",new Date(N),"applying later update from:",new Date(Ce),"local recorded time",new Date(ie));let Be=[];for(;ie>N||Ce>=N&&ie>0;){let He=l.get(ie);if(!He)break;let Te=At(He);if(Ce=Te.version,Ce>=N){if(Ce===N){if(he=Fr(N,{version:Ce,localTime:ie},P?.nodeId),he===0)return me(!1);if(he>0){ie=Te.previousLocalTime;continue}}if(Te.type==="patch")Be.push(Te),ue=T;else if(Te.type==="put"||Te.type==="delete")return me(!1)}ie=Te.previousLocalTime}ie||Fe.default.debug?.("No further audit history, applying incremental updates based on available history",g,"existing version preserved",L),Be.sort((He,Te)=>He.version-Te.version);for(let He of Be){let Te=He.getValue(i);if(Fe.default.debug?.("Rebuilding update with future patch:",new Date(He.version),Te,He),J=j_(J??T,Te,C),!J)return me(!1)}}else{if(C)return me(!1);J=j_(J??T,W,C),Fe.default.debug?.("Rebuilding update without audit:",J)}Fe.default.trace?.("Rebuilt record to save:",J," is full update:",C)}let ge;if(C&&!J?ge=T:this.constructor.loadAsInstance===!1?ge=Dl(W,J??T):(this.#e=W,ge=Dl(this,J??T)),this.#e=ge,ge&&ge.getRecord)throw new Error("Can not assign a record to a record, check for circular references");if(re==null){v?.residencyId&&(O.previousResidency=ve.getResidencyRecord(v.residencyId));let ie=Va(ve.getResidency(ge,O));if(ie&&!ie.includes(server.hostname))if(ue??=ge,F=!0,ve.getResidencyById)ge=void 0;else{ge=null;for(let Ce in r)ge||(ge={}),ge[Ce]=ue[Ce]}re=Xc(ie)}C||(ue=T),Fe.default.trace?.(`Saving record with id: ${g}, timestamp: ${new Date(N).toISOString()}${oe?", expires at: "+new Date(oe).toISOString():""}${L?", replaces entry from: "+new Date(L.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(ge).slice(0,100)}catch{return""}})()),Du(g,W,ge),me(!0),O.expiresAt&&$a();function me(ie){y(g,ie?ge:void 0,ie?L:{...L,value:void 0},N,F?kn:0,_,{omitLocalRecord:F,user:O?.user,residencyId:re,expiresAt:oe,nodeId:P?.nodeId,originatingOperation:O?.originatingOperation,tableToTrack:c==="system"?null:s},_e,!1,ie?ue:ue??T)}a(me,"writeCommit")},"commit")};B.addWrite(U)}async delete(g){if(fm(g)){g.select=["$id"];for await(let T of this.search(g))this._writeDelete(T.$id);return!0}if(g){let T=!0,C=this.getContext();return g.checkPermission&&(T=this.allowDelete(C.user,g,C)),Gs(T,P=>{if(!P)throw new dt.AccessViolation(C.user);let O=Ps(g);return this._writeDelete(O),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(g,T){let C=Br(this.getContext());qi(g);let P=this.getContext();return C.addWrite({key:g,store:i,entry:this.#r,nodeName:P?.nodeName,before:Ne.delete?.bind(this,P,g),beforeIntermediate:Ke.delete?.bind(this,P,g),commit:a((O,B,v)=>{let A=B?.value;v&&(P&&B?.version>(P.lastModified||0)&&(P.lastModified=B.version),ve._updateResource(this,B)),!(Fr(O,B,T?.nodeId)<=0)&&(Du(this.getId(),A),Fe.default.trace?.(`Deleting record with id: ${g}, txn timestamp: ${new Date(O).toISOString()}`),_||R?(y(g,null,B,O,0,_,{user:P?.user,nodeId:T?.nodeId,tableToTrack:s},"delete"),_||$a()):Tl(i,B))},"commit")}),!0}search(g){let T=this.getContext(),C=Br(T);if(!g)throw new Error("No query provided");if(g.parseError)throw g.parseError;if(g.checkPermission&&!this.allowRead(T.user,g))throw new dt.AccessViolation(T.user);T&&(T.lastModified=Kae);let P=g.conditions;P?P.length===void 0&&(P=P[Symbol.iterator]?Array.from(P):[P]):P=Array.isArray(g)?g:g[Symbol.iterator]?Array.from(g):[];let O=g.id??this.getId();O&&(P=[{attribute:null,comparator:Array.isArray(O)?"prefix":"starts_with",value:O}].concat(P));let B,v={};function A(oe,ge){let me;switch(ge){case"and":case void 0:if(oe.length<1)throw new Error('An "and" operator requires at least one condition');me=!0;break;case"or":if(oe.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ge)}for(let ie of oe){if(ie.conditions){ie.conditions=A(ie.conditions,ie.operator);continue}let Ce=ie[0]??ie.attribute,Be=Ce==null?H:Ji(S,Ce);if(Be)(Be.type||OI[ie.comparator])&&(ie[1]===void 0?ie.value=N(ie.value,Be):ie[1]=N(ie[1],Be));else if(Ce!=null&&!g.allowConditionsOnDynamicAttributes)throw(0,dt.handleHDBError)(new Error,`${Ce} is not a defined attribute`,404);if(ie.chainedConditions)if(ie.chainedConditions.length===1&&(!ie.operator||ie.operator=="and")){let He=ie.chainedConditions[0],Te,pt;if(He.comparator==="gt"||He.comparator==="greater_than"||He.comparator==="ge"||He.comparator==="greater_than_equal"?(Te=ie,pt=He):(Te=He,pt=ie),Te.comparator!=="lt"&&Te.comparator!=="less_than"&&Te.comparator!=="le"&&Te.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Nt=pt.comparator==="ge"||pt.comparator==="greater_than_equal",Ft=Te.comparator==="le"||Te.comparator==="less_than_equal";ie.comparator=(Nt?"ge":"gt")+(Ft?"le":"lt"),ie.value=[pt.value,Te.value]}else throw new Error("Multiple chained conditions are not currently supported")}return oe}a(A,"prepareConditions");function U(oe,ge){if(g.enforceExecutionOrder)return oe;for(let me of oe)me.conditions&&(me.conditions=U(me.conditions,me.operator));return oe.length>1&&ge!=="or"?qae(oe,Cg(ve)):oe}a(U,"orderConditions");function N(oe,ge){return Array.isArray(oe)?oe.map(me=>RS(me,ge)):RS(oe,ge)}a(N,"coerceTypedValues");let L=g.operator;(P.length>0||L)&&(P=A(P,L));let $=typeof g.sort=="object"&&g.sort,W;if($&&L!=="or"){let oe=$.attribute;if(oe==null)throw new dt.ClientError("Sort requires an attribute");if(B=P.find(ge=>nd(ge.attribute)===nd(oe)),!B){let ge=Ji(S,oe);if(!ge)throw(0,dt.handleHDBError)(new Error,`${Array.isArray(oe)?oe.join("."):oe} is not a defined attribute`,404);if(ge.indexed)B={...$,comparator:"sort"},P.push(B);else if(P.length===0&&!g.allowFullScan)throw(0,dt.handleHDBError)(new Error,`${Array.isArray(oe)?oe.join("."):oe} is not indexed and not combined with any other conditions`,404)}B&&(B.descending=!!$.descending)}P=U(P,L),$&&(B&&P[0]===B?$.next&&(W={dbOrderedAttribute:$.attribute,attribute:$.next.attribute,descending:$.next.descending,next:$.next.next}):(B&&P.splice(P.indexOf(B),1),W=$));let J=g.select;if(P.length===0&&(P=[{attribute:t,comparator:"greater_than",value:!0}]),g.explain)return{conditions:P,operator:L,postOrdering:W,selectApplied:!!J};let F=C.useReadTxn(),he=PI(P,L,ve,F,g,T,(oe,ge)=>pm(oe,J,T,F,ge),v),ue=g.ensureLoaded!==!1,_e=ve.transformEntryForSelect(J,T,F,v,ue,!0),re=ve.transformToOrderedSelect(he,J,W,T,F,_e);return(g.offset||g.limit!==void 0)&&(re=re.slice(g.offset,g.limit!==void 0?(g.offset||0)+g.limit:void 0)),re.onDone=()=>{re.onDone=null,C.doneReadTxn()},re.selectApplied=!0,re.getColumns=()=>{if(J){let oe=[];for(let ge of J)ge==="*"?oe.push(...S.map(me=>me.name)):oe.push(ge.name||ge);return oe}return S.filter(oe=>!oe.computed&&!oe.relationship).map(oe=>oe.name)},re}static transformToOrderedSelect(g,T,C,P,O,B){let v=new l_;if(C){g=pm(g,T,P,O,null);let A;v.iterate=function(){let N,L=g[Symbol.asyncIterator]?g[Symbol.asyncIterator]():g[Symbol.iterator](),$,W=C.dbOrderedAttribute,J,F,he=!0;function ue(re){let oe=re.next&&ue(re.next),ge=re.descending;return P.sort=re,(me,ie)=>{let Ce=vu(me,re.attribute,P),Be=vu(ie,re.attribute,P),He=ge?(0,$l.compareKeys)(Be,Ce):(0,$l.compareKeys)(Ce,Be);return He===0?oe?.(me,ie)||0:He}}a(ue,"createComparator");let _e=ue(C);return{async next(){let re;if(N)if(re=N.next(),re.done){if($)return v.onDone&&v.onDone(),re}else return{value:await B.call(this,re.value)};A=[],J&&A.push(J);do if(re=await L.next(),re.done){if($=!0,A.length)break;return v.onDone&&v.onDone(),re}else{let oe=re.value;if(oe?.then&&(oe=await oe),W){let ge=vu(oe,W,P);if(he)he=!1,F=ge;else if(ge!==F){F=ge,J=oe;break}}A.push(oe)}while(!0);return C.isGrouped,A.sort(_e),N=A[Symbol.iterator](),re=N.next(),re.done?(v.onDone&&v.onDone(),re):{value:await B.call(this,re.value)}},return(){return v.onDone&&v.onDone(),L.return()},throw(){return v.onDone&&v.onDone(),L.throw()}}};let U=a(N=>{if(typeof T=="object"&&Array.isArray(N.attribute))for(let L=0;L<T.length;L++){let $=T[L],W;if($.name===N.attribute[0]){for(W=$.sort||($.sort={});W.next;)W=W.next;W.attribute=N.attribute.slice(1),W.descending=N.descending}else $===N.attribute[0]&&(T[L]=W={name:$,sort:{attribute:N.attribute.slice(1),descending:N.descending}})}N.next&&U(N.next)},"applySortingOnSelect");U(C)}else v.iterate=(g[Symbol.asyncIterator]||g[Symbol.iterator]).bind(g),v=v.map(function(A){try{let U=B.call(this,A);return typeof U?.catch=="function"?U.catch(N=>{throw N.partialObject={[t]:A.key},N}):U}catch(U){throw U.partialObject={[t]:A.key},U}});return v}static transformEntryForSelect(g,T,C,P,O,B){let v;O&&I&&!(typeof g=="string"?[g]:g)?.every(N=>{let L;return typeof N=="object"?L=N.name:L=N,r[L]||L===t})&&(v=!0);let A,U=a(function(N){let L;if(T?.transaction?.stale&&(T.transaction.stale=!1),N!=null){if(L=N.deref?N.deref():N.value,!L&&(N.key===void 0||N.deref)||N.metadataFlags&kn){if(N.metadataFlags&kn&&T.replicateFrom===!1&&B&&N.residencyId)return pc.SKIP;if(N=Uo(N.key??N,T,{transaction:C,lazy:g?.length<4,ensureLoaded:O},this?.isSync,$=>$),N?.then)return N.then(U.bind(this));L=N?.value}if(v&&N?.metadataFlags&(kn|yl)||N?.expiresAt!=null&&N?.expiresAt<Date.now()){if(T.onlyIfCached)return{[t]:N.key,message:"This entry has expired"};let $=pn(N.key??N,N,T);if($?.then)return $.then(U)}}if(L==null)return B?pc.SKIP:L;if(g&&!(g[0]==="*"&&g.length===1)){let $,W=a((F,he)=>{let ue;typeof F=="object"?ue=F.name:ue=F;let _e=xr?.[ue],re;if(_e){let oe=P?.[ue];if(oe)if(oe.hasMappings){let me=_e.from?L[_e.from]:nd(N.key);re=oe.get(me),re||(re=[])}else re=oe.fromRecord?.(L);else re=_e(L,T,N,!0);let ge=a(me=>{if(_e.directReturn)return he(me,ue);if(me&&typeof me=="object"){let ie=_e.definition?.tableClass||ve;A||(A={});let Ce=A[ue]||(A[ue]=ie.transformEntryForSelect(ue===F?null:F.select||(Array.isArray(F)?F:null),T,C,oe,O));if(Array.isArray(me)){let Be=[],He=ie.transformToOrderedSelect(me,F.select,typeof F.sort=="object"&&F.sort,T,C,Ce)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Te=a(Nt=>{for(;!Nt.done;){if(Nt?.then)return Nt.then(Te);Be.push(Nt.value),Nt=He.next()}he(Be,ue)},"nextValue"),pt=Te(He.next());pt&&($||($=[]),$.push(pt));return}else if(me=Ce.call(this,me),me?.then){$||($=[]),$.push(me.then(Be=>he(Be,ue)));return}}he(me,ue)},"handleResolvedValue");re?.then?($||($=[]),$.push(re.then(ge))):ge(re);return}else re=L[ue],re&&typeof re=="object"&&ue!==F&&(re=ve.transformEntryForSelect(F.select||F,T,C,null)({value:re}));he(re,ue)},"selectAttribute"),J;if(typeof g=="string")W(g,F=>{J=F});else if(Array.isArray(g))if(g.asArray)J=[],g.forEach((F,he)=>{F==="*"?g[he]=L:W(F,ue=>J[he]=ue)});else{J={};let F=g.forceNulls;for(let he of g)if(he==="*")for(let ue in L)J[ue]=L[ue];else W(he,(ue,_e)=>{ue===void 0&&F&&(ue=null),J[_e]=ue})}else throw new dt.ClientError("Invalid select"+g);return $?Promise.all($).then(()=>J):J}return L},"transform");return U}async subscribe(g){if(!l)throw new Error("Can not subscribe to a table without an audit log");_||ze({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),g||(g={});let T=!g.rawEvents,C=[],P=BI(ve,this.getId()??null,function(v,A,U,N){try{let L=A.getValue?.(i,T),$=A.type;if(!L&&$==="patch"&&T){let J=i.getEntry(v);J?.version===A.version?L=J.value:L=A.getValue?.(i,!0,U),$="put"}let W={id:v,localTime:U,value:L,version:A.version,type:$,beginTxn:N};C?C.push(W):(c!=="system"&&We(A.size??1,"db-message",s,null),this.send(W))}catch(L){Fe.default.error?.(L)}},g.startTime||0,g),O=(async()=>{this.isCollection&&(P.includeDescendants=!0,g.onlyChildren&&(P.onlyChildren=!0)),g.supportsTransactions&&(P.supportsTransactions=!0);let v=this.getId(),A=g.previousCount;A>1e3&&(A=1e3);let U=g.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:N,value:L}of l.getRange({start:U,exclusiveStart:!0,snapshot:!1})){let $=At(L);if($.tableId!==n)continue;let W=$.recordId;if(v==null||Mq(v,W)){let J=$.getValue(i,T,N);if(B({id:W,localTime:N,value:J,version:$.version,type:$.type,size:$.size}),P.queue?.length>Dq&&await P.waitForDrain()===!1)return}P.startTime=N}}else if(A){let N=[];for(let{key:L,value:$}of l.getRange({start:"z",end:!1,reverse:!0}))try{let W=At($);if(W.tableId!==n)continue;let J=W.recordId;if(v==null||Mq(v,J)){let F=W.getValue(i,T,L);if(N.push({id:J,localTime:L,value:F,version:W.version,type:W.type}),--A<=0)break}}catch(W){Fe.default.error("Error getting history entry",L,W)}for(let L=N.length;L>0;)B(N[--L]);N[0]&&(P.startTime=N[0].localTime)}else if(!g.omitCurrent){for(let{key:N,value:L,version:$,localTime:W,size:J}of i.getRange({start:v??!1,end:v==null?void 0:[v,$l.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(L&&(B({id:N,localTime:W,value:L,version:$,type:"put",size:J}),P.queue?.length>Dq&&await P.waitForDrain()===!1))return}}else{A&&!U&&(U=0);let N=this.#r?.localTime;if(N===wI&&(i.cache?.delete(v),this.#r=i.getEntry(v),Fe.default.trace?.("re-retrieved record",N,this.#r?.localTime),N=this.#r?.localTime),Fe.default.trace?.("Subscription from",U,"from",v,N),U<N){let L=[],$=N;do{let W=l.get($);if(W){g.omitCurrent=!0;let J=At(W),F=J.getValue(i,T,$);T&&(J.type="put"),L.push({id:v,value:F,localTime:$,...J}),$=J.previousLocalTime}else break;A&&A--}while($>U&&A!==0);for(let W=L.length;W>0;)B(L[--W]);P.startTime=N}!g.omitCurrent&&this.doesExist()&&B({id:v,localTime:N,value:this.#e,version:this.#n,type:"put"})}for(let N of C)B(N);C=null})();function B(v){c!=="system"&&We(v.size??1,"db-message",s,null),P.send(v)}return a(B,"send"),g.listener&&P.on("data",g.listener),P}static subscribeOnThisThread(g,T){return g===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(g,T,C){if(T===void 0||T instanceof URLSearchParams)this._writePublish(this.getId(),g,T);else{let P=!0,O=this.getContext();return g.checkPermission&&(P=this.allowCreate(O.user,g,O)),Gs(P,B=>{if(!B)throw new dt.AccessViolation(O.user);let v=Ps(g);this._writePublish(v,T,C)})}}_writePublish(g,T,C){let P=Br(this.getContext());g??=null,g!==null&&qi(g);let O=this.getContext();P.addWrite({key:g,store:i,entry:this.#r,nodeName:O?.nodeName,validate:a(()=>{O?.source||(P.checkOverloaded(),this.validate(T))},"validate"),before:Ne.publish?.bind(this,O,g,T),beforeIntermediate:Uu(T,Ke.publish?.bind(this,O,g,T)),commit:a((B,v,A)=>{v===void 0&&R&&!_&&$a(),Fe.default.trace?.(`Publishing message to id: ${g}, timestamp: ${new Date(B).toISOString()}`),y(g,v?.value??null,v,v?.version||B,0,!0,{user:O?.user,residencyId:C?.residencyId,expiresAt:O?.expiresAt,nodeId:C?.nodeId,tableToTrack:s},"message",!1,T)},"commit")})}validate(g,T){let C,P=a((O,B,v)=>{if(B.type&&O!=null)if(T&&O.__op__&&(O=O.value),B.properties){typeof O!="object"&&(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be an object${B.type?" ("+B.type+")":""}`);let A=B.properties;for(let U=0,N=A.length;U<N;U++){let L=A[U];if(L.relationship||L.computed){g.hasOwnProperty(L.name)&&(C||(C=[])).push(`Computed property ${v}.${L.name} may not be directly assigned a value`);continue}let $=P(O[L.name],L,v+"."+L.name);$&&(O[L.name]=$)}if(B.sealed&&O!=null&&typeof O=="object")for(let U in O)A.find(N=>N.name===U)||(C||(C=[])).push(`Property ${U} is not allowed within object in property ${v}`)}else switch(B.type){case"Int":(typeof O!="number"||O>>0!==O)&&(C||(C=[])).push(`Value ${qs(O)} in property ${v} 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 ${qs(O)} in property ${v} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(A=>typeof A=="string")||(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be a string`);break;case"Boolean":typeof O!="boolean"&&(C||(C=[])).push(`Value ${qs(O)} in property ${v} 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 ${qs(O)} in property ${v} 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 ${qs(O)} in property ${v} must be a bigint`)}break;case"Bytes":if(!(O instanceof Uint8Array)){if(typeof O=="string")return Buffer.from(O);(C||(C=[])).push(`Value ${qs(O)} in property ${v} 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 ${qs(O)} in property ${v} must be a Blob`)}break;case"array":if(Array.isArray(O)){if(B.elements)for(let A=0,U=O.length;A<U;A++){let N=O[A],L=P(N,B.elements,v+"[*]");L&&(O[A]=L)}}else(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be an Array`);break}B.nullable===!1&&O==null&&(C||(C=[])).push(`Property ${v} is required (and not does not allow null values)`)},"validateValue");for(let O=0,B=S.length;O<B;O++){let v=S[O];if(v.relationship||v.computed){Object.hasOwn(g,v.name)&&(C||(C=[])).push(`Computed property ${v.name} may not be directly assigned a value`);continue}if(!T||v.name in g){let A=P(g[v.name],v,v.name);A!==void 0&&(g[v.name]=A)}}if(f)for(let O in g)S.find(B=>B.name===O)||(C||(C=[])).push(`Property ${O} is not allowed`);if(C)throw new dt.ClientError(C.join(". "))}getUpdatedTime(){return this.#n}wasLoadedFromSource(){return I?!!this.#i:void 0}static async addAttributes(g){let T=S.slice(0);for(let C of g){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");$ae(C.name),T.push(C)}return ze({table:s,database:c,schemaDefined:u,attributes:T}),ve.indexingOperation}static async removeAttributes(g){let T=S.filter(C=>!g.includes(C.name));return ze({table:s,database:c,schemaDefined:u,attributes:T}),ve.indexingOperation}static getSize(){let g=i.getStats();return(g.treeBranchPageCount+g.treeLeafPageCount+g.overflowPages)*g.pageSize}static getAuditSize(){let g=l?.getStats();return g&&(g.treeBranchPageCount+g.treeLeafPageCount+g.overflowPages)*g.pageSize}static getStorageStats(){let g=i.env.path,T=JN.default.statfsSync?.(g)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(g){let T=i.getStats().entryCount,C=1e3/2,P=performance.now(),O=Math.floor(T/2),B=g?.exactCount,v=0,A=0,U;for(let{value:N}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(N!=null&&v++,A++,await mc(),!B&&A<O&&performance.now()-P>C){U=A;break}if(U){let N=v;v=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:U,snapshot:!1}))re!=null&&v++,await mc();let L=U*2,$=(v+N)/L,W=Math.pow((v-N+1)/U/2,2)+$*(1-$)/L,J=Math.max(Math.sqrt(W)*T,1),F=Math.round($*T),he=Math.max(F-1.96*J,v+N),ue=Math.min(F+1.96*J,T),_e=Math.pow(10,Math.round(Math.log10(J)));return _e>F&&(_e=_e/10),v=Math.round(F/_e)*_e,{recordCount:v,estimatedRange:[Math.round(he),Math.round(ue)]}}return{recordCount:v}}static updatedAttributes(){xr=this.propertyResolvers={$id:a((g,T,C)=>({value:C.key}),"$id"),$updatedtime:a((g,T,C)=>C.version,"$updatedtime"),$updatedTime:a((g,T,C)=>C.version,"$updatedTime"),$expiresAt:a((g,T,C)=>C.expiresAt,"$expiresAt"),$record:a((g,T,C)=>C?{value:g}:g,"$record"),$distance:a((g,T,C)=>C&&(C.distance??T?.vectorDistances?.get(C)),"$distance")};for(let g of this.attributes){g.isPrimaryKey&&(H=g),g.resolve=null;let T=g.relationship,C=g.computed;if(T)if(g.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)"),Lu=!0,T.to)g.elements?.definition?(xr[g.name]=g.resolve=(P,O,B,v)=>{let A=P[T.from?T.from:t],U=g.elements.definition.tableClass;return v?rd({attribute:T.to,value:A},Br(O).getReadTxn(),!1,U,!1).map(N=>N&&N.key!==void 0?N:U.primaryStore.getEntry(N,{transaction:Br(O).getReadTxn()})).asArray:U.search([{attribute:T.to,value:A}],O).asArray},g.set=()=>{},g.resolve.definition=g.elements.definition,g.resolve.to=T.to,T.from&&(g.resolve.from=T.from)):console.error(`The one-to-many/many-to-many relationship property "${g.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(T.from){let P=g.definition||g.elements?.definition;P?(xr[g.name]=g.resolve=(O,B,v,A)=>{let U=O[T.from];if(U===void 0)return;if(g.elements){let L,$=U?.map(W=>{let J=P.tableClass.primaryStore[A?"getEntry":"get"](W,{transaction:Br(B).getReadTxn()});return J?.then&&(L=!0),ve.loadAsInstance===!1&&Object.freeze(A?J?.value:J),J});return T.filterMissing?L?Promise.all($).then(W=>W.filter(Uq)):$.filter(Uq):L?Promise.all($):$}let N=P.tableClass.primaryStore[A?"getEntry":"get"](U,{transaction:Br(B).getReadTxn()});return ve.loadAsInstance===!1&&Object.freeze(A?N?.value:N),N},g.set=(O,B)=>{if(Array.isArray(B)){let v=B.map(A=>A.getId?.()||A[P.tableClass.primaryKey]);O[T.from]=v}else{let v=B.getId?.()||B[P.tableClass.primaryKey];O[T.from]=v}},g.resolve.definition=g.definition||g.elements?.definition,g.resolve.from=T.from):console.error(`The relationship property "${g.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${g.name}" in table "${s}" must use either "from" or "to" arguments`);else if(C)typeof C.from=="function"&&this.setComputedAttribute(g.name,C.from),xr[g.name]=g.resolve=(P,O,B)=>{let v=typeof C.from=="string"?P[C.from]:P,A=this.userResolvers[g.name];if(A)return A(v,O,B);Fe.default.warn(`Computed attribute "${g.name}" does not have a function assigned to it. Please use setComputedAttribute('${g.name}', resolver) to assign a resolver function.`),this.userResolvers[g.name]=()=>{}},g.resolve.directReturn=!0;else if(r[g.name]?.customIndex?.propertyResolver){let P=r[g.name].customIndex;xr[g.name]=(O,B,v)=>{let A=O[g.name];return P.propertyResolver(A,B,v)},xr[g.name].directReturn=!0}}Lp(this,this),Lp(dm,this,!0);for(let g of S){let T=g.name;g.resolve&&(Object.defineProperty(i.encoder.structPrototype,T,{get(){return g.resolve(this,id.getStore())},set(C){return g.set(this,C)},configurable:!0,enumerable:g.enumerable}),g.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(g,T){let C=Ji(S,g);if(!C){console.error(`The attribute "${g}" does not exist in the table "${s}"`);return}if(!C.computed){console.error(`The attribute "${g}" is not defined as computed in the table "${s}"`);return}this.userResolvers[g]=T}static async deleteHistory(g=0,T=!1){let C;for(let{key:P,value:O}of l.getRange({start:0,end:g}))await mc(),At(O).tableId===n&&(C=mg(l,P,O));if(T)for(let P of i.getRange({start:0,versions:!0})){let{key:O,value:B,localTime:v}=P;await mc(),B===null&&v<g&&(C=Tl(i,P))}await C}static async*getHistory(g=0,T=1/0){for(let{key:C,value:P}of l.getRange({start:g||1,end:T})){await mc();let O=At(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(g){let T=[];if(g==null)throw new Error("An id is required");let C=i.getEntry(g);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 mc();let B=l.get(P);if(B){let v=At(B);T.push({id:v.recordId,localTime:P,version:v.version,type:v.type,value:v.getValue(i,!0,P),user:v.user}),P=v.previousLocalTime}else break}while(O<1e3&&P);return T.reverse()}static cleanup(){Y?.remove()}}let d_=TS(async(K,g,T)=>{for(let C of ve.sources)if(C.get&&(!C.get.reliesOnPrototype||C.prototype.get)){if(C.available?.(T)===!1)continue;g.source=C;let P=await C.get(K,g);if(P)return P}},()=>{throw new dt.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});ve.updatedAttributes();let zb=ve.prototype;return h&&ve.setTTLExpiration(h/1e3),z&&f_(),ve;function Du(K,g,T){let C;for(let P in r){let O=r[P],B=O.isIndexing,v=xr[P],A=T&&(v?v(T):T[P]),U=g&&(v?v(g):g[P]);if(A===U&&!B)continue;if(O.customIndex){O.customIndex.index(K,A,U);continue}C=!0;let N=O.indexNulls,L=(0,Jp.getIndexedValues)(A,N),$=(0,Jp.getIndexedValues)(U,N);if($?.length>0){let W=new Set($);if(L=L?L.filter(J=>{if(W.has(J))W.delete(J);else return!0}):[],$=Array.from(W),($.length>0||L.length>0)&&Oq){let J=$.concat(L).map(F=>({key:F,value:K}));O.prefetch(J,vq)}for(let J=0,F=$.length;J<F;J++)O.remove($[J],K)}else L?.length>0&&Oq&&O.prefetch(L.map(W=>({key:W,value:K})),vq);if(L)for(let W=0,J=L.length;W<J;W++)O.put(L[W],K)}return C}a(Du,"updateIndices");function qi(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>Lq)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,$l.writeKey)(K,Jae,0)>Lq)throw new Error("Primary key size is too large: "+K.length);return!0}a(qi,"checkValidId");function Ps(K){return typeof K=="object"&&K?K.id:K}a(Ps,"requestTargetToId");function fm(K){return typeof K=="object"&&K&&K.isCollection}a(fm,"isSearchTarget");function mm(K){}a(mm,"isRequestTarget");function Uo(K,g,T,C,P){if(ve.getResidencyById&&T.ensureLoaded&&g?.replicateFrom!==!1){let B=Va(ve.getResidencyById(K));if(B&&!B.includes(server.hostname)&&w)return w({key:K,residency:B}).then(P)}let O=a(()=>{if(g?.transaction?.stale&&(g.transaction.stale=!1),T.transaction?.isDone)return P(null,K);let B=i.getEntry(K,T);return(c!=="system"||s==="hdb_analytics")&&(Fq.default.trace?.("Recording db-read action for",`${c}.${s}`),We(B?.size??1,"db-read",s,null)),g?._freezeRecords&&Object.freeze(B?.value),B?.residencyId&&B.metadataFlags&kn&&w&&T.ensureLoaded&&g?.replicateFrom!==!1?w(B).then(v=>P(v,K),v=>(Fe.default.error?.("Error loading remote record",K,B,T,v),P(null,K))):(B&&g&&(B?.version>(g.lastModified||0)&&(g.lastModified=B.version),B?.localTime&&!g.lastRefreshed&&(g.lastRefreshed=B.localTime)),P(B,K))},"whenPrefetched");return C?O():te>0?(te--,O()):new Promise((B,v)=>{te===0?(te--,i.prefetch([K],()=>{A(),U()})):(ce.push(K),de.push(U),ce.length>u_&&(te--,A()));function A(){if(ce.length>0){let N=de;i.prefetch(ce,()=>{te===-1?A():te++;for(let L of N)L()}),ce=[],de=[],Se>2&&Se--}else te=Se,Se<um&&Se++}a(A,"prefetch");function U(){try{B(O())}catch(N){v(N)}}a(U,"load")})}a(Uo,"loadLocalRecord");function Dn(K,g){let T=g?.checkPermission;if(typeof T!="object"){if(!K?.role)return;T=K.role.permission}if(T.super_user)return Qae;let C=T[c],P,O=C?.tables;if(O)return O[s];if(c==="data"&&(P=T[s])&&!P.tables)return P}a(Dn,"getTablePermissions");function pn(K,g,T,C){if(I){let P=!1;if(T.noCache?P=!0:(g?(!g.value||g.metadataFlags&(kn|yl)||g.expiresAt!=null&&g.expiresAt<Date.now())&&(P=!0):P=!0,tn(!P,"cache-hit",s)),P){let O=Mu(K,g,T).then(B=>(B?.value&&B?.value.getRecord?.()&&Fe.default.error?.("Can not assign a record that is already a resource"),T&&(B?.version>(T.lastModified||0)&&(T.lastModified=B.version),T.lastRefreshed=Date.now()),B));if(T?.onlyIfCached||g?.value&&C?.allowStaleWhileRevalidate?.(g,K)){if(O.catch(B=>Fe.default.warn?.(B)),T?.onlyIfCached&&!C.doesExist())throw new dt.ServerError("Entry is not cached",504);return}else return O}}else if(g?.value&&g.expiresAt!=null&&g.expiresAt<Date.now())return ve.evict(g.key,g.value,g.version),g.value=null,{then(P){return P(g)}}}a(pn,"ensureLoadedFromSource");function Br(K){let g=K?.transaction;if(g){if(!g.lmdbDb)return g.lmdbDb=i,g;do{if(g.lmdbDb?.path===i.path)return g;let T=g.next;if(!T)return g=g.next=new Fo,g.lmdbDb=i,g;g=T}while(!0)}else return new K_}a(Br,"txnForContext");function vu(K,g,T){if(!K)return;let C=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof g=="object"){let O=xr,B=C;for(let v=0,A=g.length;v<A;v++){let U=g[v],N=O?.[U];B=N&&B?N(B,T,K):B?.[U],K=null,O=N?.definition?.tableClass?.propertyResolvers}return B}let P=xr[g];return P?P(C,T,K):C[g]}a(vu,"getAttributeValue");function pm(K,g,T,C,P){let O=P?.length,B={transaction:C,lazy:O>0||typeof g=="string"||g?.length<4,alwaysPrefetch:!0},v;function A(U,N){let L=U?.value;if(!L)return pc.SKIP;for(let $=0;$<O;$++)if(!v?.includes($)&&!P[$](L,U))return pc.SKIP;return N!==void 0&&(U.key=N),U}if(a(A,"processEntry"),O>0||!K.hasEntries){let U=K.map(N=>{if(v=null,typeof N=="object"&&N?.key!==void 0)return O>0?A(N):N;if(N==null)return pc.SKIP;for(let L=0;L<O;L++){let W=P[L].idFilter;if(W){if(!W(N))return pc.SKIP;v||(v=[]),v.push(L)}}return Uo(N,T,B,!1,A)});return Array.isArray(K)&&(U=U.filter(N=>N!==pc.SKIP)),U.hasEntries=!0,U}return K}a(pm,"transformToEntries");function Fr(K,g,T=server.replication?.getThisNodeId(l)){if(K<=g?.version){if(g?.version===K&&T!==void 0){let C=server.replication?.exportIdMapping(l),P=g.localTime,O=P&&l.get(P);if(O){let B,v,A=At(O);for(let U in C)C[U]===T&&(B=U),C[U]===A.nodeId&&(v=U);if(B>v)return 1;if(B===v)return 0}}return-1}return 1}a(Fr,"precedesExistingVersion");async function Mu(K,g,T){let C=g?.metadataFlags,P=g?.version,O,B;if(!i.attemptLock(K,P,()=>{clearTimeout(B);let N=i.getEntry(K);!N||!N.value||N.metadataFlags&(kn|yl)?O(Mu(K,i.getEntry(K),T)):O(N)}))return new Promise(N=>{O=N,B=setTimeout(()=>{i.unlock(K,P)},jae)});let v=g?.value,A={requestContext:T,replacingRecord:v,replacingEntry:g,replacingVersion:P,noCacheStore:!1,source:null,resourceCache:T?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},U=T?.responseHeaders;return new Promise((N,L)=>{let $;Gs(bt(A,async W=>{let J=performance.now(),F,he,ue;try{F=await d_(K,A,g),ue=C&kn;let re=A.lastModified||ue&&P;re||(re=(0,Jp.getNextMonotonicTime)()),he=ue||re>P||!v;let oe=performance.now()-J;if(We(oe,"cache-resolution",s,null,"success"),U&&jp(U,"Server-Timing",`cache-resolve;dur=${oe.toFixed(2)}`,!0),W.timestamp=re,h&&A.expiresAt==null&&(A.expiresAt=Date.now()+h),F){if(typeof F!="object")throw new Error("Only objects can be cached and stored in tables");if(F.status>0&&F.headers)if(F.status>=300)if(F.status===304)F=v,re=P;else throw new dt.ServerError(F.body||"Error from source",F.status);else F=F.body;typeof F.toJSON=="function"&&(F=F.toJSON()),t&&F[t]!==K&&(F[t]=K)}$=!0,N({key:K,version:re,value:F})}catch(re){re.message+=` while resolving record ${K} for ${s}`,v&&((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))?(N({key:K,version:P,value:v}),Fe.default.trace?.(re.message,"(returned stale record)")):L(re);let oe=performance.now()-J;We(oe,"cache-resolution",s,null,"fail"),U&&jp(U,"Server-Timing",`cache-resolve;dur=${oe.toFixed(2)}`,!0),A.transaction.abort();return}if(T?.noCacheStore||A.noCacheStore){A.transaction.abort();return}Br(A).addWrite({key:K,store:i,entry:g,nodeName:"source",before:Uu(F),commit:a((re,oe)=>{if(oe?.version!==P)return;let ge=Du(K,v,F);if(F){Ke.put?.(A,K,F),oe&&(T.previousResidency=ve.getResidencyRecord(oe.residencyId));let me,ie=!1,Ce,Be=Va(ve.getResidency(F,T));if(Be){if(!Be.includes(server.hostname))if(me=F,ie=!0,ve.getResidencyById)F=void 0;else{F=null;for(let He in r)F||(F={}),F[He]=me[He]}Ce=Xc(Be)}Fe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),y(K,F,oe,re,ie?kn:0,_&&(he||ie)||null,{user:A?.user,expiresAt:A.expiresAt,residencyId:Ce,tableToTrack:s},"put",!!ue,me)}else oe&&(Ke.delete?.(A,K),Fe.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),_||R?y(K,null,oe,re,0,_&&he||null,{user:A?.user,tableToTrack:s},"delete",!!ue):Tl(i,oe,P))},"commit")})}),()=>{i.unlock(K,P)},W=>{i.unlock(K,P),$&&Fe.default.error?.("Error committing cache update",W)})})}a(Mu,"getFromSource");function qa(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(qa,"checkContextPermissions");function $a(K){let g=!1;if(K&&(K-Ir>1&&(g=!0),Ir=K),!($e===nr&&!g)&&(nr=$e,(0,Gl.getWorkerIndex)()===(0,Gl.getWorkerCount)()-1))return zr&&clearTimeout(zr),$e?new Promise(T=>{let C=new Date;C.setMonth(0),C.setDate(1),C.setHours(0),C.setMinutes(0),C.setSeconds(0);let P=$e/(1+Ir),O=g?Date.now():Math.ceil((Date.now()-C.getTime())/P)*P+C.getTime(),B=a(v=>{Fe.default.trace?.(`Scheduled next cleanup scan at ${new Date(v)}`),zr=setTimeout(()=>X=X.then(async()=>{if(B(Math.max(v+$e,Date.now())),i.rootStore.status!=="open"){clearTimeout(zr);return}let A=50,U=new Array(A),N=0,L=Math.pow(Ir,8)*(ql.get(x.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),$=E/Math.pow(Math.max(Ir,1),4);Fe.default.debug?.(`Starting cleanup scan for ${s}, evict threshold ${L}, adjusted eviction ${$}ms`);function W(J,F,he,ue){let _e=J+$-Date.now();if(_e<0)return!0;if(Ir){let re=i.lastSize;return he&Zr&&ll(ue,oe=>{oe.size&&(re+=oe.size)}),Fe.default.trace?.(`shouldEvict adjusted ${_e} ${re}, ${_e*(J-F)/re} < ${L}`),_e*(J-F)/re<L}return!1}a(W,"shouldEvict");try{let J=0;for(let F of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:he,value:ue,version:_e,expiresAt:re,metadataFlags:oe}=F,ge;ue===null&&!_&&_e+Wae<Date.now()?ge=Tl(i,F,_e):re!=null&&W(re,_e,oe,ue)&&(ge=ve.evict(he,ue,_e),J++),ge&&(await U[N],U[N]=ge.catch(me=>{Fe.default.error?.("Cleanup error",me)}),++N>=A&&(N=0)),await mc()}Fe.default.debug?.(`Finished cleanup scan for ${s}, evicted ${J} entries`)}catch(J){Fe.default.warn?.(`Error in cleanup scan for ${s}:`,J)}T(void 0),Ir=0}),Math.min(v-Date.now(),2147483647)).unref()},"startNextTimer");B(O)}):void 0}a($a,"scheduleCleanup");function hm(){Y=l?.addDeleteRemovalCallback(n,i,(K,g)=>{i.remove(K,g)})}a(hm,"addDeleteRemoval");function f_(){(0,Gl.getWorkerIndex)()===0&&setInterval(async()=>{if(!Qc){Qc=!0;try{let K=z.name,g=r[K];if(!g)throw new Error(`expiresAt attribute ${z} must be indexed`);for(let T of g.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let C of g.getValues(T)){let P=i.getEntry(C);P?.value?P.value[K]<Date.now()&&ve.evict(C,P.value,P.version):i.ifVersion(C,P?.version,()=>g.remove(T,C))}await mc()}}catch(K){Fe.default.error?.("Error in evicting old records",K)}finally{Qc=!1}}},Yae).unref()}a(f_,"runRecordExpirationEviction");function Va(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 g=server.shards?.get?.(K);if(g)return Fe.default.trace?.(`Shard ${K} mapped to ${g.map(T=>T.name).join(", ")}`),g.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(Va,"residencyFromFunction");function Xc(K){if(K){let g=K.join(","),T=d.get([Symbol.for("residency_by_set"),g]);return T||(d.put([Symbol.for("residency_by_set"),g],T=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),T],K),T)}}a(Xc,"getResidencyId");function Uu(K,g){let T=JA(K,i.rootStore);if(T){let C=g;return C?async()=>{await C(),await T}:()=>T}return g}a(Uu,"preCommitBlobsForRecordBefore")}function zN(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 vq(){}function RS(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 yS(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return yS(+e);case"Float":return e==="null"?null:yS(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return(0,Od.autoCastBooleanStrict)(e);case"Date":if(isNaN(e)){if(e==="null")return null;Xae.test(e)||(e+="Z");let n=new Date(e);return yS(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,Od.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function yS(e){if(isNaN(e))throw new SyntaxError;return e}function Mq(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 Uq(e){return e!=null}function qs(e){try{return JSON.stringify(e)}catch{return e}}function Zae(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var pc,Jp,xq,Bq,ql,dt,Qp,Xp,Fe,$l,Gl,Od,JN,Fq,qae,$ae,Vae,Kae,Yae,Wae,Oq,jae,Pq,zae,kn,yl,Jae,Lq,Dq,Qae,BUe,Xae,mc,Lg=se(()=>{G();pc=require("lmdb"),Jp=b(xn()),xq=b(require("lodash")),Bq=b(Bm());Qi();km();ql=b(fe());FI();dt=b(Ee()),Qp=b(Qo()),Xp=b(ds());Oe();Pg();Fe=b(ir());Yw();Ja();$l=require("ordered-binary"),Gl=b(st());Ki();Od=b(ae());El();as();z_();zp();JN=b(require("node:fs"));os();lg();Fq=b(Q());jN();({sortBy:qae}=xq.default),{validateAttribute:$ae}=Bq.default,Vae=new Uint8Array(9);Vae[8]=192;Kae=1/0,Yae=6e4,Wae=864e5;ql.initSync();Oq=ql.get(x.STORAGE_PREFETCHWRITES),jae=1e4,Pq=1,zae=2,kn=1,yl=8,Jae=Buffer.allocUnsafeSlow(8192),Lq=1978,Dq=100,Qae={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},BUe=(0,Od.convertToMS)(ql.get(x.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(bS,"makeTable");a(zN,"attributesAsObject");a(vq,"noop");Xae=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(RS,"coerceType");a(yS,"rejectNaN");a(Mq,"isDescendantId");mc=a(()=>new Promise(setImmediate),"rest");a(Gs,"when");a(Uq,"exists");a(qs,"stringify");a(Zae,"hasOtherProcesses")});function AS(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 IS(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 Hq=se(()=>{a(AS,"euclideanDistance");a(IS,"cosineDistance")});var Gq,qq,Ld,lo,Pd,ece,tce,wS,$q=se(()=>{Hq();Gq=require("msgpackr"),qq=b(ir()),Ld=b(Ee()),lo=(0,qq.loggerWithTag)("HNSW"),Pd=Symbol.for("entryPoint"),ece=Symbol.for("key"),tce=10,wS=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=Gq.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?AS:IS,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"?[ece,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(Pd);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f==null){let E=Math.floor(-Math.log(Math.random())*this.mL),_={vector:r,level:E,primaryKey:t};for(let R=0;R<=E;R++)_[R]=[];if(this.indexStore.put(i,_),typeof i!="number")throw new Error("Invalid nodeId: "+i);lo.debug?.("setting entry point to",i),this.indexStore.put(Pd,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),tce),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(Pd,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 _=this.searchLayer(r,l,f,this.efConstruction,E);_=_.slice(0,this.M<<1),_.length===0&&E===0&&lo.info?.("should not have zero connections for",l);let R=h[E];for(let S=0;S<_.length;S++){let{id:y,distance:w,node:I}=_[S];if(y===i)continue;let H=[];if(this.optimizeRouting){let k=!1,z=I[E],Y=1+this.optimizeRouting*(1+.5*S/this.M);for(let ce=0;ce<z?.length;ce++){let{id:de,distance:te}=z[ce],Se=1+this.optimizeRouting*(1+.5*ce/this.M);for(let Ne=0;Ne<R.length;Ne++){let{id:Ke,distance:$e}=R[Ne];if(Ke===de){w*Y>$e+te?k=!0:te*Se>w+$e&&(H.push({fromId:Ke,toId:y}),H.push({fromId:y,toId:Ke}));break}}if(k)break}if(k)continue}else if(S>=(E>0?this.M:this.M<<1))continue;R.push({id:y,distance:w});for(let{fromId:k,toId:z}of H){let Y=d(k);Y||(Y=d(k,this.indexStore.get(k)));for(let ce=0;ce<Y[E].length;ce++)if(Y[E][ce].id===z){Object.isFrozen(Y[E])&&(Y[E]=Y[E].slice()),Y[E].splice(ce,1);break}}let X=c[E],q=X?.find(({id:k})=>k===y);if(q){let k=X?.indexOf(q);X.copied||(X=[...X],X.copied=!0,c[E]=X),X.splice(k,1)}else this.addConnection(y,d(y,I),i,E,w,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(Pd);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);lo.debug?.("setting entry point to",l),this.indexStore.put(Pd,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));if(h)for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:_})=>_!==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(Pd);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 _={id:p,distance:E,node:h};l.push(_),u.push(_)}}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 Ld.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new Ld.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=IS;else if(s==="euclidean")c=AS;else{if(s)throw new Ld.ClientError("Unknown distance function");c=this.distance}if(!t)throw new Ld.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new Ld.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.debug?.("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"?AS:IS);let c=o(s.target,t);return i.set(n,c),c}return t}}});var QN,Vq=se(()=>{$q();QN={HNSW:wS}});var mt={};ye(mt,{NON_REPLICATING_SYSTEM_TABLES:()=>NS,database:()=>_d,databaseEnvs:()=>ra,databases:()=>Me,dropDatabase:()=>Qw,dropTableMeta:()=>ace,getDatabases:()=>lt,getDefaultCompression:()=>MS,getTables:()=>nce,onRemovedDB:()=>ih,onUpdatedTable:()=>Vl,readMetaDb:()=>Zp,resetDatabases:()=>xd,table:()=>ze,tables:()=>yn});function sh(e,t){let r=DS.OpenDBIObject??DS.default.OpenDBIObject;return new r(e,t)}function nce(){return LS||lt(),yn||{}}function lt(){if(LS)return Me;LS=!0,Md=new Map;let e=(0,Zt.getHdbBasePath)()&&(0,Ht.join)((0,Zt.getHdbBasePath)(),tl),t=(0,Zt.get)(x.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Zt.get)(x.STORAGE_PATH)||e&&((0,_s.existsSync)(e)?e:(0,Ht.join)((0,Zt.getHdbBasePath)(),T_)),!!e){if((0,_s.existsSync)(e))for(let r of(0,_s.readdirSync)(e,{withFileTypes:!0})){let n=(0,Ht.basename)(r.name,".mdb");r.isFile()&&(0,Ht.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Zp((0,Ht.join)(e,r.name),null,n)}if((0,_s.existsSync)((0,vd.getBaseSchemaPath)())){for(let r of(0,_s.readdirSync)((0,vd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Ht.join)((0,vd.getBaseSchemaPath)(),r.name),s=(0,Ht.join)((0,vd.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,_s.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Ht.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Ht.join)(s,i.name);Zp((0,Ht.join)(n,i.name),(0,Ht.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,_s.existsSync)(s))for(let o of(0,_s.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,Ht.extname)(o.name).toLowerCase()===".mdb"&&Zp((0,Ht.join)(s,o.name),(0,Ht.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,Ht.join)(c.path,(0,Ht.basename)(o+".mdb"));(0,_s.existsSync)(l)&&Zp(l,o,r,null,!0)}}for(let r in Me){let n=Md.get(r);if(n){let s=Me[r];r.includes("delete")&&Cr.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Cr.trace(`delete table class ${i}`),delete s[i])}else if(delete Me[r],r==="data"){for(let s in yn)delete yn[s];delete yn[vS]}}if((0,Zt.get)(x.ANALYTICS_REPLICATE)===!1?NS.includes("hdb_analytics")||NS.push("hdb_analytics"):(Me.system?.hdb_analytics?.enableAuditing(),Me.system?.hdb_analytics_hostname?.enableAuditing()),Me.system)for(let r of NS)Me.system[r]&&(Me.system[r].replicate=!1);return Md=null,Me}}function xd(){LS=!1;for(let[,e]of ra)e.needsDeletion=!0;lt();for(let[e,t]of ra)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),ra.delete(e);let r=Me[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete Me[t.databaseName],th.forEach(i=>i(t.databaseName));break}}return Me}function Zp(e,t,r=eC,n,s){let i=new XN.default(e,!1);try{let o=ra.get(e);o?o.needsDeletion=!1:(o=(0,Ud.open)(i),ra.set(e,o));let c=new sh(!1),l=o.dbisDb||(o.dbisDb=o.openDB(CS.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,_s.existsSync)(n)&&(i.path=n,u=(0,Ud.open)(i),u.isLegacy=!0):u=fg(o));let d=zq(r),f=d[vS],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,_]=p.toString().split("/");_===""?_=h.name:_||(_=E,E=t,h.name||(h.name=_,h.indexed=!h.is_hash_attribute)),f?.add(E);let R=m.get(E);R||m.set(E,R={attributes:[]}),(_==null||h.is_hash_attribute)&&(R.primary=h),_!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:_}=h;if(!_){for(let te of E)if(te.is_hash_attribute||te.isPrimaryKey){_=te;break}if(!_){Cr.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let R=d[p],S={},y=[],w,I,H=typeof _.audit=="boolean"?_.audit:(0,Zt.get)(x.LOGGING_AUDITLOG),X=_.trackDeletes,q=_.expiration,k=_.eviction,z=_.sealed,Y=_.splitSegments,ce=_.replicate;if(R)S=R.indices,y=R.attributes,R.schemaVersion++;else{w=_.tableId,w?w>=(l.get(Dd)||0)&&(l.putSync(Dd,w+1),Cr.info(`Updating next table id (it was out of sync) to ${w+1} for ${p}`)):(_.tableId=w=l.get(Dd),w||(w=1),Cr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(Dd,w+1),l.putSync(_.key,_));let te=new sh(!_.is_hash_attribute,_.is_hash_attribute);if(te.compression=_.compression,te.compression){let Se=(0,Zt.get)(x.STORAGE_COMPRESSION_THRESHOLD)||jq;te.compression.threshold=Se}I=wg(o.openDB(_.key,te),o),o.databaseName=r,I.tableId=w}let de;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 Ne=Qq(te.key,o,te);S[te.name]=Ne,S[te.name].indexNulls=te.indexNulls}let Se=y.find(Ne=>Ne.name===te.name);Se?y.splice(y.indexOf(Se),1,te):y.push(te),de=!0}}catch(Se){Cr.error("Error trying to update attribute",te,y,S,Se)}}for(let te of y)if(!E.find(Ne=>Ne.name===te.name)){if(te.is_hash_attribute){Cr.error("Unable to remove existing primary key attribute",te);continue}te.indexed&&(y.splice(y.indexOf(te),1),de=!0)}if(R)de&&(R.schemaVersion++,R.updatedAttributes());else{R=Jq(d,p,bS({primaryStore:I,auditStore:u,audit:H,sealed:z,splitSegments:Y,replicate:ce,expirationMS:q&&q*1e3,evictionMS:k&&k*1e3,trackDeletes:X,tableName:p,tableId:w,primaryKey:_.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:_.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let te of eh)te(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function zq(e){let t=Me[e];if(t||(e==="data"?t=Me[e]=yn:e==="system"?Object.defineProperty(Me,"system",{value:t=Object.create(null),configurable:!0}):t=Me[e]=Object.create(null)),Md&&!Md.has(e)){let r=new Set;t[vS]=r,Md.set(e,r)}return t}function Jq(e,t,r){return e[t]=r,r}function _d({database:e,table:t}){e||(e=eC),lt();let r=zq(e),n=(0,Ht.join)((0,Zt.getHdbBasePath)(),tl),s=(0,Zt.get)(x.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,Zt.get)(x.STORAGE_PATH)||((0,_s.existsSync)(n)?n:(0,Ht.join)((0,Zt.getHdbBasePath)(),T_));let o=(0,Ht.join)(n,(i?t:e)+".mdb"),c=ra.get(o);if(!c||c.status==="closed"){let l=new XN.default(o,!1);c=(0,Ud.open)(l),ra.set(o,c)}return c.auditStore||(c.auditStore=fg(c)),c}async function Qw(e){if(!Me[e])throw new Error("Schema does not exist");let t=Me[e],r;for(let n in t)r=t[n].primaryStore.rootStore,ra.delete(r.path),r.status==="open"&&(await r.close(),await rh.remove(r.path));if(r||(r=_d({database:e,table:null}),r.status==="open"&&(await r.close(),await rh.remove(r.path))),e==="data"){for(let n in yn)delete yn[n];delete yn[vS]}delete Me[e],th.forEach(n=>n(e)),await zA(r)}function Qq(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&QN[r.indexed.type]?.useObjectStore,s=new sh(!n,n),i=t.openDB(e,s);if(r.indexed.type){let o=QN[r.indexed.type];o?i.customIndex=new o(i,r.indexed):Cr.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function ze(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=eC);let h=_d({database:r,table:t}),E=Me[r];Cr.trace(`Defining ${t} in ${r}`);let _=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 w=new sh(!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,H;if(_){if(R=_.primaryKey,_.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=_.splitSegments),_.attributes.splice(0,_.attributes.length,...o)}else{let Y=h.auditStore;S=o.find(Se=>Se.isPrimaryKey)||{},R=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=MS(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,Zt.get)(x.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]),Cr.trace(`${t} table loading, opening primary store`);let ce=new sh(!1,!0);ce.compression=S.compression;let de=t+"/";if(y=h.dbisDb=h.openDB(CS.INTERNAL_DBIS_NAME,w),z(),y.get(de))return H&&H(),xd(),ze(e);let te=wg(h.openDB(de,ce),h);h.databaseName=r,te.tableId=y.get(Dd),Cr.trace(`Assigning new table id ${te.tableId} for ${t}`),te.tableId||(te.tableId=1),y.put(Dd,te.tableId+1),S.tableId=te.tableId,_=Jq(E,t,bS({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})),_.schemaVersion=1,I=!0,y.put(de,S)}let X=_.indices;y=y||(h.dbisDb=h.openDB(CS.INTERNAL_DBIS_NAME,w)),_.dbisDB=y;let q=[];for(let{key:Y,value:ce}of y.getRange({start:!0})){let[de,te]=Y.toString().split("/");if(te===""&&(te=ce.name),te){if(de!==t)continue}else continue;let Se=o.find(Ke=>Ke.name===te),Ne=!Se?.indexed&&ce.indexed&&!ce.isPrimaryKey;if((!Se||Ne)&&(z(),I=!0,Se||y.remove(Y),Ne)){let Ke=_.indices[de];Ke&&q.push(Ke)}}let k=[];try{for(let Y of o||[]){if((Y.relationship||Y.computed)&&(I=!0,Y.relationship))continue;let ce=t+"/"+(Y.name||"");Object.defineProperty(Y,"key",{value:ce,configurable:!0});let de=y.get(ce);if(Y.isPrimaryKey){if(de=de||y.get(ce=t+"/")||{},c!==void 0&&c!==_.audit||l!==void 0&&l!==_.sealed||d!==void 0&&d!==_.replicate||(+n||void 0)!==(+de.expiration||void 0)||(+s||void 0)!==(+de.eviction||void 0)||Y.type!==de.type){let Se={...de};typeof c=="boolean"&&(c&&_.enableAuditing(c),Se.audit=c),n&&(Se.expiration=+n),s&&(Se.eviction=+s),l!==void 0&&(Se.sealed=l),d!==void 0&&(Se.replicate=d),Y.type&&(Se.type=Y.type),I=!0,z(),y.put(ce,Se)}continue}de?.attribute&&!de.name&&(de.indexed=!0);let te=!de||de.type!==Y.type||JSON.stringify(de.indexed)!==JSON.stringify(Y.indexed)||de.nullable!==Y.nullable||de.version!==Y.version||de.enumerable!==Y.enumerable||JSON.stringify(de.properties)!==JSON.stringify(Y.properties)||JSON.stringify(de.elements)!==JSON.stringify(Y.elements);if(Y.indexed){let Se=Qq(ce,h,Y);(te||de.indexingPID&&de.indexingPID!==process.pid||de.restartNumber<nh.workerData?.restartNumber)&&(I=!0,z(),de=y.get(ce),(te||de.indexingPID&&de.indexingPID!==process.pid||de.restartNumber<nh.workerData?.restartNumber)&&(I=!0,Y.indexNulls===void 0&&(Y.indexNulls=!0),_.primaryStore.getStats().entryCount>0&&(Y.lastIndexedKey=de?.lastIndexedKey??void 0,Y.indexingPID=process.pid,Se.isIndexing=!0,Object.defineProperty(Y,"dbi",{value:Se}),k.push(Y))),y.put(ce,Y)),de?.indexNulls&&Y.indexNulls===void 0&&(Y.indexNulls=!0),Se.indexNulls=Y.indexNulls,X[Y.name]=Se}else te&&(I=!0,z(),y.put(ce,Y))}}finally{H&&H()}if(I&&(_.schemaVersion++,_.updatedAttributes()),Cr.trace(`${t} table loading, running index`),k.length>0||q.length>0?_.indexingOperation=oce(_,k,q):I&&OS.signalSchemaChange(new PS.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=p,I)for(let Y of eh)Y(_,p!=="cluster");return(n||s||i)&&_.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Cr.trace(`${t} table loaded`),_;function z(){H||h.transactionSync(()=>({then(Y){H=Y}}))}a(z,"startTxn")}async function oce(e,t,r){try{Cr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await OS.signalSchemaChange(new PS.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,Ud.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],_=E.name,R=E.dbi;try{let S=E.resolve,y=m&&(S?S(m):m[_]);if(R.customIndex){R.customIndex.index(f,y);continue}let w=(0,Kq.getIndexedValues)(y,R.indexNulls);if(w)for(let I=0,H=w.length;I<H;I++)R.put(w[I],f)}catch(S){o[_]||(o[_]=!0,Cr.error(`Error indexing attribute ${_}`,S))}}}),s.then(()=>d--,h=>{d--,Cr.error(h)}),nh.workerData&&nh.workerData.restartNumber!==Wq.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>sce?await s:d>ice&&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 OS.signalSchemaChange(new PS.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Cr.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Cr.error("Error in indexing",n)}}function ace({table:e,database:t}){let r=_d({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 Vl(e){return eh.push(e),{remove(){let t=eh.indexOf(e);t>-1&&eh.splice(t,1)}}}function ih(e){return th.push(e),{remove(){let t=th.indexOf(e);t>-1&&th.splice(t,1)}}}function MS(){let e=(0,Zt.get)(x.STORAGE_COMPRESSION),t=(0,Zt.get)(x.STORAGE_COMPRESSION_DICTIONARY),r=(0,Zt.get)(x.STORAGE_COMPRESSION_THRESHOLD)||jq,n={startingOffset:32};return t&&(n.dictionary=rh.readFileSync(t)),r&&(n.threshold=r),e&&n}var Zt,CS,Ud,Ht,_s,vd,XN,rh,ZN,Kq,OS,PS,nh,Yq,Wq,DS,rce,Cr,eC,vS,jq,NS,yn,Me,Dd,eh,th,LS,ra,Md,sce,ice,Oe=se(()=>{Zt=b(fe()),CS=b(Jt()),Ud=require("lmdb"),Ht=require("path"),_s=require("fs"),vd=b(Rt());Lg();XN=b(mp());G();rh=b(require("fs-extra")),ZN=b(ai()),Kq=b(xn()),OS=b(Qo()),PS=b(ds()),nh=require("worker_threads"),Yq=b(Q()),Wq=b(st());Ki();El();os();Vq();DS=b(fp()),{forComponent:rce}=Yq.default;a(sh,"OpenDBIObject");Cr=rce("storage"),eC="data",vS=Symbol("defined-tables"),jq=((0,Zt.get)(x.STORAGE_PAGESIZE)||4096)-60;(0,Zt.initSync)();NS=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"],yn=Object.create(null),Me=Object.create(null);(0,ZN._assignPackageExport)("databases",Me);(0,ZN._assignPackageExport)("tables",yn);Dd=Symbol.for("next-table-id"),eh=[],th=[],ra=new Map;a(nce,"getTables");a(lt,"getDatabases");a(xd,"resetDatabases");a(Zp,"readMetaDb");a(zq,"ensureDB");a(Jq,"setTable");a(_d,"database");a(Qw,"dropDatabase");a(Qq,"openIndex");a(ze,"table");sce=1e3,ice=10;a(oce,"runIndexing");a(ace,"dropTableMeta");a(Vl,"onUpdatedTable");a(ih,"onRemovedDB");a(MS,"getDefaultCompression")});var nC={};ye(nC,{loadGQLSchema:()=>uce,start:()=>rC,startOnMainThread:()=>lce});function rC({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 H=function(q){if(q.kind==="NonNullType"){let Y=H(q.type);return Y.nullable=!1,Y}if(q.kind==="ListType")return{type:"array",elements:H(q.type)};let z={type:q.name?.value};return Object.defineProperty(z,"location",{value:q.loc.startToken}),z};a(H,"getProperty");let S=R.name.value,y=[],w={table:null,database:null,properties:y};m.set(S,w),i.allTypes.set(S,w);for(let q of R.directives){if(q.name.value==="table"){for(let z of q.arguments)w[z.name.value]=z.value.value;w.schema&&(w.database=w.schema),w.table||(w.table=S),w.audit&&(w.audit=w.audit!=="false"),w.attributes=w.properties,p.push(w)}if(q.name.value==="sealed"&&(w.sealed=!0),q.name.value==="splitSegments"&&(w.splitSegments=!0),q.name.value==="replicate"&&(w.replicate=!0),q.name.value==="export"){w.export=!0;for(let z of q.arguments)typeof w.export!="object"&&(w.export={}),w.export[z.name.value]=z.value.value}}let I=!1,X={};for(let q of R.fields){let k=H(q.type);k.name=q.name.value,y.push(k),X[k.name]=void 0;for(let z of q.directives){let Y=z.name.value;if(Y==="primaryKey")I?console.warn("Can not define two attributes as a primary key at",z.loc):(k.isPrimaryKey=!0,I=!0);else if(Y==="indexed"){let ce={};for(let de of z.arguments||[])ce[de.name.value]=de.value.value;k.indexed=ce}else if(Y==="computed"){for(let ce of z.arguments||[])if(ce.name.value==="from"){let de=ce.value.value;k.computed={from:_(de,ce,X)},k.version==null&&(k.version=de)}else ce.name.value==="version"&&(k.version=ce.value.value);k.computed=k.computed||!0}else if(Y==="relationship"){let ce={};for(let de of z.arguments)ce[de.name.value]=de.value.value;k.relationship=ce}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 ce=k.authorizedRoles=[];for(let de of z.arguments)de.name.value==="role"&&ce.push(de.value.value)}else server.knownGraphQLDirectives.includes(Y)&&console.warn(`@${Y} is an unknown directive, at`,z.loc)}}w.type=S,S==="Query"&&(h=w)}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):cce.includes(R.type)||(0,Zq.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,tC.dirname)(n),R.tableClass):i.set((0,tC.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function _(R,S,y){return new Xq.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(_,"createComputedFrom")}}var tC,Xq,Zq,cce,lce,uce,e$=se(()=>{tC=require("path"),Xq=require("node:vm");Oe();Zq=b(st());nc();cce=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives||(server.knownGraphQLDirectives=[]);server.knownGraphQLDirectives.push("table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow","enumerable");a(rC,"start");lce=rC,uce=a(e=>rC({ensureTable:ze}).handleFile(e,null,null,new ad),"loadGQLSchema")});var iC={};ye(iC,{start:()=>Sce});function dce(e){if(e.kind!==qe.Kind.OPERATION_DEFINITION&&e.kind!==qe.Kind.FRAGMENT_DEFINITION)throw new Vr(`Unexpected non-executable definition type ${e.kind}.`)}function t$(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 sC(e){return parseInt(e.value,10)}function n$(e){return parseFloat(e.value)}function s$(e,t,r){let n=r.get(e.name.value);return i$(n)?o$(n,t):{attribute:t,value:n}}function i$(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function o$(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],i$(n)?o$(n,t):{attribute:t,value:n}))}function fce(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case qe.Kind.NULL:return{attribute:t,value:null};case qe.Kind.INT:return{attribute:t,value:sC(e.value)};case qe.Kind.FLOAT:return{attribute:t,value:n$(e.value)};case qe.Kind.BOOLEAN:case qe.Kind.STRING:return{attribute:t,value:e.value.value};case qe.Kind.VARIABLE:return s$(e.value,t,r);case qe.Kind.OBJECT:return a$(e.value,t,r);case qe.Kind.LIST:case qe.Kind.ENUM:default:throw new Vr(`Value type, ${e.value.kind}, is not supported.`)}}function a$(e,t,r){return e.fields.flatMap(n=>fce(n,t,r))}function mce(e,t){switch(e.value.kind){case qe.Kind.NULL:return{attribute:e.name.value,value:null};case qe.Kind.INT:return{attribute:e.name.value,value:sC(e.value)};case qe.Kind.FLOAT:return{attribute:e.name.value,value:n$(e.value)};case qe.Kind.BOOLEAN:case qe.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case qe.Kind.VARIABLE:return s$(e.value,e.name.value,t);case qe.Kind.OBJECT:return a$(e.value,[e.name.value],t);case qe.Kind.LIST:case qe.Kind.ENUM:default:throw new Vr(`Argument type, ${e.value.kind}, is not supported.`)}}function pce(e,t){return e.flatMap(r=>mce(r,t))}function US(e,t){return e.selections.flatMap(r=>{switch(r.kind){case qe.Kind.FIELD:return r;case qe.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Vr(`Fragment \`${n}\` not found.`);return US(s.selectionSet,t)}case qe.Kind.INLINE_FRAGMENT:return US(r.selectionSet,t)}})}function c$(e,t){return US(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:c$(r.selectionSet,t)}:r.name.value)}async function hce(e,t,r,n){let s=Bs.getMatch(e.name.value,"graphql");if(s===void 0)throw new Vr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:c$(e.selectionSet,r),conditions:pce(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 l$(e){switch(e.kind){case qe.Kind.NULL:return null;case qe.Kind.INT:return sC(e);case qe.Kind.FLOAT:return parseFloat(e.value);case qe.Kind.STRING:case qe.Kind.BOOLEAN:return e.value;case qe.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:l$(r.value),...t}),{});case qe.Kind.LIST:case qe.Kind.ENUM:default:throw new Vr(`Value type, ${e.kind}, is not supported.`)}}function Ece(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=l$(n.defaultValue)),n.type.kind===qe.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Vr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function _ce(e,t,r,n){if(e.operation===qe.OperationTypeNode.SUBSCRIPTION)throw new Vr("Subscriptions are not supported.");if(e.operation===qe.OperationTypeNode.MUTATION)throw new Vr("Mutations are not supported yet.");let s=Ece(e.variableDefinitions,t),i=await Promise.all(US(e.selectionSet,r).map(c=>hce(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function r$({query:e,variables:t={},operationName:r},n){let s=qe.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(dce(u),u.kind===qe.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Vr("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 Vr(`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 Vr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Vr(`Operation \`${r}\` not found.`);let l=await _ce(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function gce(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 t$(r),r$(r,e)}case"POST":{let r=await qo(e.headers.get("content-type"),!0)(e._nodeRequest);return t$(r),r$(r,e)}default:throw new uo("Method Not Allowed",405,{Allow:"GET, POST"})}}function Sce(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await gce(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 qe.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Vr)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 qe.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Vr)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 qe,Vr,uo,u$=se(()=>{qe=b(require("graphql"));$o();nc();a(dce,"assertExecutableDefinitionNode");a(t$,"assertRequestParams");a(sC,"processIntValueNode");a(n$,"processFloatValueNode");a(s$,"processVariableNode");a(i$,"isObject");a(o$,"transformObjectIntoQueryCondition");a(fce,"processObjectFieldNode");a(a$,"processObjectValueNode");a(mce,"processArgumentNode");a(pce,"buildConditionsQuery");a(US,"fillInFragments");a(c$,"buildSelectQuery");a(hce,"processFieldNode");a(l$,"processConstValueNode");a(Ece,"resolveVariables");a(_ce,"executeOperation");a(r$,"resolver");Vr=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(gce,"graphqlQueryingHandler");a(Sce,"start")});var E$=M((ixe,h$)=>{var Bd=require("validate.js"),f$=ft(),Fd=(G(),D(j)),{handleHDBError:Tce,hdbErrors:yce}=Ee(),{HDB_ERROR_MSGS:cr,HTTP_STATUS_CODES:Rce}=yce,oC=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),bce={STRUCTURE_USER:"structure_user"},d$=Object.values(Fd.ROLE_TYPES_ENUM),Ace="attribute_permissions",Ice="attribute_name",{PERMS_CRUD_ENUM:kd}=Fd,wce=[Ace,...Object.values(kd)],m$=[kd.READ,kd.INSERT,kd.UPDATE],Nce=[Ice,...m$];function Cce(e){let t=oC();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,p$(e,t)}a(Cce,"addRoleValidation");function Oce(e){let t=oC();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,p$(e,t)}a(Oce,"alterRoleValidation");function Pce(e){let t=oC();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,f$.validateObject(e,t)}a(Pce,"dropRoleValidation");var Lce=["operation","role","id","permission","hdb_user","access"];function p$(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Lce.includes(n[o])||s.push(n[o]);s.length>0&&_r(cr.INVALID_ROLE_JSON_KEYS(s),r);let i=f$.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{_r(o,r)}),e.permission){let o=Dce(e);o&&_r(o,r),d$.forEach(c=>{e.permission[c]&&!Bd.isBoolean(e.permission[c])&&_r(cr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(d$.indexOf(o)<0){if(o===bce.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]||_r(cr.SCHEMA_NOT_FOUND(f),r)}continue}_r(cr.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){_r(cr.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]){_r(cr.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(d=>{wce.includes(d)||_r(cr.INVALID_PERM_KEY(d),r,o,l)}),Object.values(kd).forEach(d=>{Bd.isDefined(u[d])?Bd.isBoolean(u[d])||_r(cr.TABLE_PERM_NOT_BOOLEAN(d),r,o,l):_r(cr.TABLE_PERM_MISSING(d),r,o,l)}),u.attribute_permissions===void 0){_r(cr.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){_r(cr.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=>{!Nce.includes(E)&&E!==kd.DELETE&&_r(cr.INVALID_ATTR_PERM_KEY(E),r,o,l)}),!Bd.isDefined(p.attribute_name)){_r(cr.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=p.attribute_name;if(!d.includes(h)){_r(cr.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}m$.forEach(E=>{Bd.isDefined(p[E])?Bd.isBoolean(p[E])||_r(cr.ATTR_PERM_NOT_BOOLEAN(E,h),r,o,l):_r(cr.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}`;_r(cr.MISMATCHED_TABLE_ATTR_PERMS(m),r,o,l)}}}}return vce(r)}a(p$,"customValidate");h$.exports={addRoleValidation:Cce,alterRoleValidation:Oce,dropRoleValidation:Pce};function Dce(e){let{operation:t,permission:r}=e;if(t===Fd.OPERATIONS_ENUM.ADD_ROLE||t===Fd.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 cr.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Fd.ROLE_TYPES_ENUM.SUPER_USER:Fd.ROLE_TYPES_ENUM.CLUSTER_USER;return cr.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(Dce,"validateNoSUPerms");function vce(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:cr.ROLE_PERMS_ERROR,...e};return Tce(new Error,n,Rce.BAD_REQUEST)}else return null}a(vce,"generateRolePermResponse");function _r(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(_r,"addPermError")});var ah=M((cxe,T$)=>{"use strict";var _$=Vn(),g$=Sn(),Mce=Bl(),cC=E$(),lC=Qo(),axe=require("uuid").v4,Uce=require("util"),xS=(G(),D(j)),xce=ae(),uC=g$.searchByValue,Bce=g$.searchByHash,Fce=Uce.promisify(Mce.delete),kce=fi(),Hce=hd(),{hdbErrors:Gce,handleHDBError:Kl}=Ee(),{HDB_ERROR_MSGS:S$,HTTP_STATUS_CODES:oh}=Gce,{UserEventMsg:dC}=ds();T$.exports={addRole:qce,alterRole:$ce,dropRole:Vce,listRoles:Kce};function aC(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(aC,"scrubRoleDetails");async function qce(e){let t=cC.addRoleValidation(e);if(t)throw t;e=aC(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await uC(r)||[])}catch(i){throw Kl(i)}if(n&&n.length>0)throw Kl(new Error,S$.ROLE_ALREADY_EXISTS(e.role),oh.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 _$.insert(s),lC.signalUserChange(new dC(process.pid)),e=aC(e),e}a(qce,"addRole");async function $ce(e){let t=cC.alterRoleValidation(e);if(t)throw t;e=aC(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await _$.update(r)}catch(s){throw Kl(s)}if(n&&n?.message==="updated 0 of 1 records")throw Kl(new Error,"Invalid role id",oh.BAD_REQUEST,void 0,void 0,!0);return await lC.signalUserChange(new dC(process.pid)),e}a($ce,"alterRole");async function Vce(e){let t=cC.dropRoleValidation(e);if(t)throw Kl(new Error,t,oh.BAD_REQUEST,void 0,void 0,!0);let r=new Hce(xS.SYSTEM_SCHEMA_NAME,xS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Bce(r));if(n.length===0)throw Kl(new Error,S$.ROLE_NOT_FOUND,oh.NOT_FOUND,void 0,void 0,!0);let s=new kce(xS.SYSTEM_SCHEMA_NAME,xS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await uC(s)),o=!1;if(xce.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Kl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,oh.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Fce(c),lC.signalUserChange(new dC(process.pid)),`${n[0].role} successfully deleted`}a(Vce,"dropRole");async function Kce(){return uC({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}a(Kce,"listRoles")});var fC={};ye(fC,{start:()=>b$,startOnMainThread:()=>jce});function b$({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,y$.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(Yce.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 Wce(i)}}}async function Wce(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,R$.isEqual)(i,e)?void 0:(e.id=r.id,(0,BS.alterRole)(e))}return(0,BS.addRole)(e)}var BS,y$,R$,Yce,jce,A$=se(()=>{Oe();BS=b(ah()),y$=require("yaml"),R$=require("lodash"),Yce=["super_user","cluster_user","structure_user"];a(b$,"start");a(Wce,"ensureRole");jce=b$});async function FS(e){let t=(0,N$.pathToFileURL)(e).toString();if(zce)return ch||(ch=Jce(Xce)),(await(await ch).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Jce(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ch=new Compartment({console,Math,Date,fetch:Qce,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,w$.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Xt,s.tables=yn,s.databases=Me}};let n=await(0,I$.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),ch}function Qce(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 Xce(){return{Resource:Xt,tables:yn}}var I$,w$,N$,zce,ch,mC=se(()=>{Qi();Oe();I$=require("fs/promises"),w$=require("path"),N$=require("url"),zce=!1;a(FS,"secureImport");a(Jce,"getCompartment");a(Qce,"secureOnlyFetch");a(Xce,"getGlobalVars")});var pC={};ye(pC,{ResourceLoadError:()=>kS,handleApplication:()=>Zce,suppressHandleApplicationWarning:()=>ele});function O$(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Zce(e){e.handleEntry(a(async function(r){if(r.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${r.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(r.eventType!=="add"){e.requestRestart();return}try{let n=await FS(r.absolutePath),s=(0,C$.dirname)(r.urlPath).replace(/\\/g,"/").replace(/^\/$/,"");O$(n.default)&&(e.resources.set(s,n.default),e.logger.debug(`Registered root resource: ${s}`)),P$(e,n,s)}catch(n){throw new kS(r.absolutePath,n)}},"handleResourceEntry"))}function P$(e,t,r){for(let n in t){let s=t[n],i=`${r}/${n}`;O$(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&P$(e,s,i)}}var C$,kS,ele,L$=se(()=>{mC();C$=require("path");a(O$,"isResource");kS=class extends Error{static{a(this,"ResourceLoadError")}filePath;cause;constructor(t,r){super(`Failed to load resource module ${t}${r?`: ${r.message}`:""}`),this.name="ResourceLoadError",this.filePath=t,this.cause=r}};a(Zce,"handleApplication");a(P$,"recurseForResources");ele=!0});var EC={};ye(EC,{start:()=>tle});function tle({resources:e}){e.set("login",hC),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var hC,D$=se(()=>{Qi();a(tle,"start");hC=class extends Xt{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 GS(e,t){let r={openapi:rle,info:{title:"HarperDB HTTP REST interface",version:F$.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)HS[l.type]?o[l.name]=new gC(HS[l.type],l.type):l.properties?(o[l.name]=new H$(l.type),s(l)):l.elements?.properties&&(o[l.name]=new ole(l.elements.type),s(l.elements)),l.nullable===!1&&c.push(l.name);r.components.schemas[i.type]=new B$(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:z,elements:Y,relationship:ce,definition:de,nullable:te}of l){let Se=de??Y?.definition;Se&&s(Se),te===!1&&h.push(z),ce?k==="array"?m[z]={type:"array",items:{$ref:$s+Y.type}}:m[z]={$ref:$s+k}:Se?k==="array"?m[z]={type:"array",items:{$ref:$s+Se.type}}:m[z]={$ref:$s+Se.type}:k==="array"?Y.type==="Any"?m[z]={type:"array",items:{format:Y.type}}:m[z]={type:"array",items:new gC(HS[Y.type],Y.type)}:k==="Any"?m[z]={format:k}:m[z]=new gC(HS[k],k),p.push(new SC(z,"query",m[z]))}let E=Object.keys(m),_=new SC(f,"path",{type:"string",format:"ID"});_.required=!0,_.description="primary key of record";let R=new SC("property","path",{enum:E});R.required=!0,r.components.schemas[c]=new B$(m,!u,h);let S=d.post!==Resource.prototype.post||d.update,y=typeof d.put=="function",w=typeof d.get=="function",I=typeof d.delete=="function",H=typeof d.patch=="function",X=`/${o}/`;r.paths[X]||(r.paths[X]={}),S&&(r.paths[X].post=new nle(c,n,{200:new Hd({$ref:$s+c},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),r.paths[X].options=new v$(p,n,{200:new M$},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),w&&(r.paths[X].get=new _C(p,n,{200:new Hd({type:"array",items:{$ref:$s+c}})},"search for records by the specified property name and value pairs")),I&&(r.paths[X].delete=new x$(p,n,"delete all the records that match the provided query",{204:new U$}));let q="/"+o+"/{"+f+"}";if(r.paths[q]||(r.paths[q]={}),r.paths[q].options=new v$(p,n,{200:new M$},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),w&&(r.paths[q].get=new _C([_],n,{200:new Hd({$ref:$s+c})},"retrieve a record by its primary key")),y&&(r.paths[q].put=new sle([_],n,c,{200:new Hd({$ref:$s+c})},"create or update the record with the URL path that maps to the record's primary key")),H&&(r.paths[q].patch=new ile([_],n,c,{200:new Hd({$ref:$s+c})},"patch the record with the URL path that maps to the record's primary key")),I&&(r.paths[q].delete=new x$([_],n,"delete a record with the given primary key",{204:new U$})),w&&R.schema.enum.length>0){let k=`/${o}/{${f}}.{property}`;r.paths[k]||(r.paths[k]={}),r.paths[k].get=new _C([_,R],n,{200:new Hd({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 nle(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:$s+e}}}},this.security=t,this.responses=r}function _C(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function v$(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function M$(){this.description=k$,this.headers={},this.content={}}function Hd(e,t){this.description=k$,this.content={"application/json":{schema:e}},this.headers=t}function U$(){this.description="successfully processed request, no content returned to client"}function sle(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:$s+r}}}},this.responses=n}function ile(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:$s+r}}}},this.responses=n}function x$(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function B$(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function gC(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function H$(e){this.$ref=`#/components/schemas/${e}`}function ole(e){this.type="array",this.items=new H$(e)}function SC(e,t,r){this.name=e,this.in=t,this.schema=r}var F$,rle,HS,$s,k$,TC=se(()=>{F$=b(yt()),rle="3.0.3",HS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},$s="#/components/schemas/",k$="successful operation";a(GS,"generateJsonApi");a(nle,"Post");a(_C,"Get");a(v$,"Options");a(M$,"ResponseOptions200");a(Hd,"Response200");a(U$,"Response204");a(sle,"Put");a(ile,"Patch");a(x$,"Delete");a(B$,"ResourceSchema");a(gC,"Type");a(H$,"Ref");a(ole,"ArrayRef");a(SC,"Parameter")});var q$={};ye(q$,{Request:()=>hc,createReuseportFd:()=>qS});var G$,hc,yC,RC,qS,lh=se(()=>{G$=require("os"),hc=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 RC(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 yC(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)}},yC=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)}},RC=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,G$.platform)()!="win32"&&(qS=require("node-unix-socket").createReuseportFd)});var VS={};ye(VS,{parseHeaderValue:()=>AC,start:()=>lle});async function cle(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&Og(e);let i=new Hs;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==$$){let _=$S.getMatch(o,n?"sse":"rest");if(!_)return t(e);e.handlerPath=_.path,c=new xs(_.relativeURL),c.async=!0,l=_.Resource}if(l?.isCaching){let _=r["cache-control"];if(_){let R=AC(_);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 _=AC(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.name));e.replicateTo=_.length===1&&+_[0]>=0?+_[0]:_[0]==="*"?void 0:_}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await bt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=qo(r["content-type"],!0)(e.body,e.headers)}catch(_){throw new Gd.ClientError(_,400)}if(e.authorize=!0,o===$$&&s==="GET"){if(e?.user?.role?.permission?.super_user)return GS($S,`${e.protocol}://${e.hostname}`);throw new Gd.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 Gd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Gd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,bC.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let _=Iq(f.headers,i);return f.headers!==_&&(f.headers=_),f.data!==void 0&&(f.body=Km(f.data,e,f)),f}else if(isFinite(p)){ale[0]=p;let _=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&&_==R?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",_),bC.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=Km(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(o){o.statusCode?o.statusCode===500?Si.warn(o):Si.info(o):Si.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=Km(o.contentType?o:Y$(o),e,c),c}}function lle(e){bC=e,e.includeExpensiveRecordCountEstimates&&(hc.prototype.includeExpensiveRecordCountEstimates=!0),!V$&&(V$=!0,$S=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return cle(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{uh++;let s=new is;K$||(K$=!0,ap(l=>{uh>0&&l.push({metric:"ws-connections",connections:uh,byThread:!0})}));let i;t.on("error",l=>{i=!0,Si.warn(l)});let o;t.on("message",a(function(u){o||(o=qo(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=o(u);We(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{uh--,tn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=$S.getMatch(l,"ws");if(tn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,We(h=>({count:h.count,total:uh}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new xs(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await bt(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await Go(p.value,r);t.send(h),We(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?Si.warn(l):Si.info(l):Si.error(l),t.close(ule[l.statusCode]||1011,Y$(l))}t.close()},e))}function AC(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 Si,Gd,Y$,sn,ale,bC,$$,V$,$S,K$,uh,ule,W$=se(()=>{$o();as();Si=b(Q()),Gd=b(Ee());Pg();$u();Ja();zp();TC();lh();Dg();({errorToString:Y$}=Si),sn=new Uint8Array(8),ale=new Float64Array(sn.buffer,0,1),bC={},$$="openapi";a(cle,"http");uh=0;a(lle,"start");ule={401:3e3,403:3003};a(AC,"parseHeaderValue")});var IC=M((Mxe,z$)=>{var{recordAction:KS,recordActionBinary:j$}=(as(),D(Tg)),dle=require("fastify-plugin"),fle=200;z$.exports=dle(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),KS(o,"duration",u,f,d),j$(s.raw.statusCode<400,"success",u,f,d),j$(1,"response_"+s.raw.statusCode,u,f,d);let m=fle;i?.pipe?(i.on("data",_=>{m+=_.length}),i.on("end",()=>{KS(performance.now()-c,"transfer",u,f,d),KS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,KS(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 Q$=M((Uxe,J$)=>{var mle=ft(),ple={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};J$.exports=function(e){return mle.validateObject(e,ple)}});var YS=M((xxe,X$)=>{"use strict";var hle=(G(),D(j)).OPERATIONS_ENUM,wC=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=hle.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};X$.exports=wC});var mh={};ye(mh,{createTokens:()=>CC,getJWTRSAKeys:()=>QS,refreshOperationToken:()=>OC,validateOperationToken:()=>PC,validateRefreshToken:()=>XS});async function QS(){if(WS)return WS;try{let e=dh.default.join(fh.default.getHdbBasePath(),iA),t=await jS.default.readFile(dh.default.join(e,ym.JWT_PASSPHRASE_NAME),"utf8"),r=await jS.default.readFile(dh.default.join(e,ym.JWT_PRIVATE_KEY_NAME),"utf8");return WS={publicKey:await jS.default.readFile(dh.default.join(e,ym.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},WS}catch(e){throw JS.default.error(e),new Ti.ClientError($d.NO_ENCRYPTION_KEYS,qd.INTERNAL_SERVER_ERROR)}}async function CC(e){let t=(0,NC.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 Ti.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 Rd(e.username,e.password,f)}catch(f){throw JS.default.error(f),new Ti.ClientError($d.INVALID_CREDENTIALS,qd.UNAUTHORIZED)}if(!r)throw new Ti.ClientError($d.INVALID_CREDENTIALS,qd.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 QS(),c=await Vd.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??nV,algorithm:zS,subject:Kd.OPERATION}),l=await Vd.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:Ele,algorithm:zS,subject:Kd.REFRESH}),u=lN(l,$r.SHA256);if((await(0,Z$.update)(new eV.default(Sm,Bu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new Ti.ClientError($d.REFRESH_TOKEN_SAVE_FAILED,qd.INTERNAL_SERVER_ERROR);return tV.default.signalUserChange(new rV.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function OC(e){let t=(0,NC.validateBySchema)(e,fo.default.object({refresh_token:fo.default.string().required()}).required());if(t)throw new Ti.ClientError(t.message);let{refresh_token:r}=e;await XS(r);let n=await QS(),s=await Vd.default.decode(r);return{operation_token:await Vd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:nV,algorithm:zS,subject:Kd.OPERATION})}}async function PC(e){return sV(e,Kd.OPERATION)}async function XS(e){return sV(e,Kd.REFRESH)}async function sV(e,t){try{let r=await QS(),n=await Vd.default.verify(e,r.publicKey,{algorithms:zS,subject:t});if(n.role)throw new Error("Invalid token");let s=await Rd(n.username,void 0,!1);if(t===Kd.REFRESH&&!uN(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw JS.default.warn(r),r?.name==="TokenExpiredError"?new Ti.ClientError($d.TOKEN_EXPIRED,qd.FORBIDDEN):new Ti.ClientError($d.INVALID_TOKEN,qd.UNAUTHORIZED)}}var Vd,jS,dh,fo,NC,Ti,JS,Z$,eV,tV,rV,fh,qd,$d,nV,Ele,zS,Kd,WS,Yd=se(()=>{Vd=b(require("jsonwebtoken")),jS=b(require("fs-extra")),dh=b(require("node:path")),fo=b(require("joi")),NC=b(ft());G();Ti=b(Ee()),JS=b(Q());fN();Yn();Z$=b(Vn()),eV=b(YS()),tV=b(Qo()),rV=b(ds()),fh=b(fe()),{HTTP_STATUS_CODES:qd,AUTHENTICATION_ERROR_MSGS:$d}=Ti.hdbErrors;fh.default.initSync();nV=fh.default.get(x.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Ele=fh.default.get(x.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",zS="RS256",Kd={OPERATION:"operation",REFRESH:"refresh"};a(QS,"getJWTRSAKeys");a(CC,"createTokens");a(OC,"refreshOperationToken");a(PC,"validateOperationToken");a(XS,"validateRefreshToken");a(sV,"validateToken")});var LC=M((qxe,aV)=>{"use strict";var _le=Q$(),Wd=require("passport"),gle=require("passport-local").Strategy,Sle=require("passport-http").BasicStrategy,Tle=require("util"),yle=(Yn(),D(gi)),oV=Tle.callbackify(yle.findAndValidateUser),Gxe=Jr(),Rle=(G(),D(j)),iV=(Yd(),D(mh)),{AccessViolation:ble}=Ee();Wd.use(new gle(function(e,t,r){oV(e,t,r)}));Wd.use(new Sle(function(e,t,r){oV(e,t,r)}));Wd.serializeUser(function(e,t){t(null,e)});Wd.deserializeUser(function(e,t){t(null,e)});function Ale(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(new ble)}switch(a(i,"handleResponse"),n){case"Basic":Wd.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Rle.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?iV.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):iV.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Wd.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Ale,"authorize");function Ile(e,t){let r=_le(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(Ile,"checkPermissions");aV.exports={authorize:Ale,checkPermissions:Ile}});var BC=M((Yxe,dV)=>{var rT=require("clone"),nT=ft(),wle=ae(),eT=(G(),D(j)),Vxe=Q(),DC=require("fs"),MC=require("joi"),{string:tT}=MC.types(),{hdbErrors:Nle,handleHDBError:ZS}=Ee(),{HDB_ERROR_MSGS:Kxe,HTTP_STATUS_CODES:vC}=Nle,{commonValidators:jd}=Zi(),cV=" is required",Cle=["insert","update","upsert"],UC={database:{presence:!1,format:jd.schema_format,length:jd.schema_length},schema:{presence:!1,format:jd.schema_format,length:jd.schema_length},table:{presence:!0,format:jd.schema_format,length:jd.schema_length},action:{inclusion:{within:Cle,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Ole={schema:tT.required(),table:tT.required(),action:tT.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Ple,AWS_SECRET:Lle,AWS_BUCKET:Dle,AWS_FILE_KEY:vle,REGION:Mle}=eT.S3_BUCKET_AUTH_KEYS,Ule={s3:{presence:!0},[`s3.${Ple}`]:{presence:!0,type:"String"},[`s3.${Lle}`]:{presence:!0,type:"String"},[`s3.${Dle}`]:{presence:!0,type:"String"},[`s3.${vle}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Mle}`]:{presence:!0,type:"String"}},lV=rT(UC);lV.data.presence={message:cV};var uV=rT(UC);uV.file_path.presence={message:cV};var xle=Object.assign(rT(UC),Ule),xC=rT(Ole);xC.csv_url=tT.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();xC.passthrough_headers=MC.object();function Ble(e){let t=nT.validateObject(e,lV);return sT(e,t)}a(Ble,"dataObject");function Fle(e){let t=nT.validateBySchema(e,MC.object(xC));return sT(e,t)}a(Fle,"urlObject");function kle(e){let t=nT.validateObject(e,uV);return sT(e,t)}a(kle,"fileObject");function Hle(e){let t=nT.validateObject(e,xle);return sT(e,t)}a(Hle,"s3FileObject");function sT(e,t){if(!t){let r=wle.checkGlobalSchemaTable(e.schema,e.table);if(r)return ZS(new Error,r,vC.BAD_REQUEST);if(e.operation===eT.OPERATIONS_ENUM.CSV_FILE_LOAD)try{DC.accessSync(e.file_path,DC.constants.R_OK|DC.constants.F_OK)}catch(n){return n.code===eT.NODE_ERROR_CODES.ENOENT?ZS(n,`No such file or directory ${n.path}`,vC.BAD_REQUEST):n.code===eT.NODE_ERROR_CODES.EACCES?ZS(n,`Permission denied ${n.path}`,vC.BAD_REQUEST):ZS(n)}}return t}a(sT,"postValidateChecks");dV.exports={dataObject:Ble,urlObject:Fle,fileObject:kle,s3FileObject:Hle}});var FC=M((jxe,fV)=>{"use strict";var ph=Q(),iT=(G(),D(j));async function Gle(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===iT.OPERATIONS_ENUM.INSERT||t.operation===iT.OPERATIONS_ENUM.UPDATE||t.operation===iT.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===iT.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(ph.info(i.message),i):i.http_resp_msg?(ph.error(`Error calling operation: ${e.name}`),ph.error(i.http_resp_msg),i):(ph.error(`Error calling operation: ${e.name}`),ph.error(i),i)}}a(Gle,"callOperationFunctionAsAwait");fV.exports={callOperationFunctionAsAwait:Gle}});var kC=M((Jxe,pV)=>{"use strict";var{S3:qle,GetObjectCommand:$le}=require("@aws-sdk/client-s3");pV.exports={getFileStreamFromS3:Vle,getS3AuthObj:mV};async function Vle(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await mV(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new $le(r))).Body}a(Vle,"getFileStreamFromS3");function mV(e,t,r){return new qle({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(mV,"getS3AuthObj")});var EV=M((Xxe,hV)=>{"use strict";var HC=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}},GC=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};hV.exports={BulkLoadFileObject:HC,BulkLoadDataObject:GC}});var gV=M((e0e,_V)=>{"use strict";var qC=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}};_V.exports=qC});var TV=M((r0e,SV)=>{"use strict";var $C=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};SV.exports=$C});var KC=M((s0e,RV)=>{"use strict";var yV=gV(),Kle=TV(),{HDB_ERROR_MSGS:Yle}=Jr(),VC=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Yle.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 yV(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Kle(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 yV(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}};RV.exports=VC});var Yl=M((a0e,wV)=>{"use strict";var o0e=Sn(),hh=Q(),{validateBySchema:bV}=ft(),na=require("joi"),Wle=io(),oT=ae(),{handleHDBError:aT,hdbErrors:jle,ClientError:AV}=Ee(),{HDB_ERROR_MSGS:cT,HTTP_STATUS_CODES:YC}=jle,IV=fe();IV.initSync();var{getDatabases:WC}=(Oe(),D(mt)),zle=require("fs-extra"),Jle=(G(),D(j));wV.exports={describeAll:Qle,describeTable:lT,describeSchema:Xle};async function Qle(e={}){try{let t=oT.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=WC(),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 lT({schema:m,table:h,exact_count:u,include_computed:d});else if(n&&n[m].describe&&n[m].tables[h].describe){let _=n[m].tables[h].attribute_permissions;E=await lT({schema:m,table:h,exact_count:u,include_computed:d},_)}E&&l.push(E)}catch(E){hh.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 hh.error("Got an error in describeAll"),hh.error(t),aT(new Error,cT.DESCRIBE_ALL_ERR)}}a(Qle,"describeAll");async function lT(e,t){oT.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=bV(e,na.object({database:na.string(),table:na.string().required(),exact_count:na.boolean().strict(),include_computed:na.boolean().strict()}));if(i)throw new AV(i.message);let c=WC()[r];if(!c)throw aT(new Error,cT.SCHEMA_NOT_FOUND(e.schema),YC.NOT_FOUND);let l=c[n];if(!l)throw aT(new Error,cT.TABLE_NOT_FOUND(e.schema,e.table),YC.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 zle.stat(l.primaryStore.env.path)).size}catch(p){hh.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")),IV.get(Jle.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Wle.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){hh.warn(`unable to stat table dbi due to ${p}`)}return m}a(lT,"descTable");async function Xle(e){oT.transformReq(e);let t=bV(e,na.object({database:na.string(),exact_count:na.boolean().strict(),include_computed:na.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=WC()[n];if(!i)throw aT(new Error,cT.SCHEMA_NOT_FOUND(e.schema),YC.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),oT.isEmpty(l)||l.describe){let u=await lT({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(Xle,"describeSchema")});var LV=M((l0e,PV)=>{"use strict";var Zle=Yl(),{hdbErrors:NV}=Ee(),{getDatabases:CV}=(Oe(),D(mt));PV.exports={checkSchemaExists:OV,checkSchemaTableExists:eue,schemaDescribe:Zle};async function OV(e){if(!CV()[e])return NV.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(OV,"checkSchemaExists");async function eue(e,t){let r=await OV(e);if(r)return r;if(!CV()[e][t])return NV.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(eue,"checkSchemaTableExists")});var uT=M((d0e,DV)=>{"use strict";var tue=ps();DV.exports={writeTransaction:rue};function rue(e,t,r){return tue.writeTransaction(e,t,r)}a(rue,"writeTransaction")});var XC=M((E0e,VV)=>{"use strict";var{decode:nue}=require("msgpackr"),{isMainThread:m0e,parentPort:p0e,threadId:h0e}=require("worker_threads"),mT=lr(),zd=Dt(),JC=(G(),D(j)),Rn=Q(),zC=fe(),sue=(G(),D(j)),{onMessageByType:iue}=st(),xV=io(),{recordAction:vV,recordActionBinary:oue}=(as(),D(Tg)),{publishToStream:aue}=mT,{ConsumerEvents:MV}=require("nats"),cue=Sn(),{promisify:lue}=require("util"),{decodeBlobsWithWrites:uue}=(os(),D(ig)),BV=lue(setTimeout),pT=1e4,hT,fT,due,fue,FV,Eh=new Map,Jd=new Map;VV.exports={initialize:kV,ingestConsumer:QC,setSubscription:mue,setIgnoreOrigin:Eue,getDatabaseSubscriptions:hue,updateConsumer:HV};async function kV(){iue(JC.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await HV(n)}),FV=!0,Rn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await mT.getNATSReferences();hT=e,fT=e.info.server_name,due=t,fue=r}a(kV,"initialize");async function HV(e){if(e.status==="start"){let{js:t,jsm:r}=await GV(e.node_domain_name);QC(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Eh.get(e.stream_name+e.node_domain_name);t&&(Rn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Eh.set(e.stream_name+e.node_domain_name,"close")),Jd.get(e.node_domain_name)==="failed"&&Jd.set(e.node_domain_name,"close")}}a(HV,"updateConsumer");var ET=new Map;function mue(e,t,r){let n=ET.get(e);n||ET.set(e,n=new Map),n.set(t,r),FV||kV().then(pue)}a(mue,"setSubscription");async function pue(){let e=await cue.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+zd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await GV(r),!n))break;let{schema:o,table:c}=i,l=xV.createNatsTableStreamName(o,c);QC(l,n,s,r)}}}a(pue,"accessConsumers");async function GV(e){let t,r,n=1;for(;!r;)try{t=await hT.jetstream({domain:e}),r=await hT.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Jd.get(e)==="close")break;Jd.set(e,"failed"),n%10===1&&Rn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<pT?n++*100:pT;await BV(i)}return{js:t,jsm:r}}a(GV,"connectToRemoteJS");function hue(){return ET}a(hue,"getDatabaseSubscriptions");var qV;function Eue(e){qV=e}a(Eue,"setIgnoreOrigin");var $V=100,UV=new Array($V),dT=0;async function QC(e,t,r,n){let{connection:s}=await mT.getNATSReferences();hT=s,fT=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,fT),Rn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Jd.get(n)==="close")break;o%10===1&&Rn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(Rn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await mT.createConsumer(r,e,fT,new Date(Date.now()).toISOString()));let d=o++*100<pT?o++*100:pT;await BV(d)}let c=!1,l;for(;!c;){if(Eh.get(e+n)==="close"||Jd.get(n)==="close"){Eh.delete(e+n),c=!0;continue}l=await i.consume({max_messages:zC.get(JC.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Eh.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===MV.ConsumerDeleted&&(await l.close(),c=!0),d.type===MV.HeartbeatsMissed){let f=d.data;Rn.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(Rn.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 UV[dT],UV[dT]=_ue(d).catch(f=>{Rn.error(f)}),++dT>=$V&&(dT=0)}catch(d){d.message==="consumer deleted"?(Rn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):Rn.error("Error consuming clustering ingest, restarting consumer",d)}}}a(QC,"ingestConsumer");async function _ue(e){let t;await uue(()=>{t=nue(e.data)}),vV(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Rn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=zC.get(JC.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(zd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(zd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(zd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!qV),oue(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(zd.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;Rn.trace("processing message:",o,c,u,(d?"records: "+d.map(I=>I?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),Rn.trace(`messageProcessor nats msg id: ${e.headers.get(zd.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(I=>h=I),{timestamp:_,user:R,node_name:S}=m||{},y=ET.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:jC(o),value:d[0],id:f?.[0],expiresAt:p,timestamp:_,table:u,onCommit:h,user:R,nodeName:S});else{let I=d.map((H,X)=>({type:jC(o),value:H,expiresAt:p,id:f?.[X],table:u}));for(;l;)I.push({type:jC(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:_,onCommit:h,user:R,nodeName:S})}zC.get(sue.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&aue(e.subject.split(".").slice(0,-1).join("."),xV.createNatsTableStreamName(c,u),e.headers,e.data),await E;let w=Date.now()-_;_&&vV(w,"replication-latency",e.subject,o,"ingest")}catch(o){Rn.error(o)}e.ack()}a(_ue,"messageProcessor");function jC(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(jC,"convertOperation")});var lr=M((b0e,a1)=>{"use strict";var Kr=fe();Kr.initSync();var gue=require("fs-extra"),Sue=require("semver"),Sh=require("path"),{monotonicFactory:Tue}=require("ulidx"),YV=Tue(),yue=require("util"),WV=require("child_process"),Rue=yue.promisify(WV.exec),bue=WV.spawn,on=Dt(),rt=(G(),D(j)),{packageJson:Aue,PACKAGE_ROOT:Iue}=yt(),_T=ae(),yi=Q(),gT=io(),wue=uT(),_h=_t(),{broadcast:Nue,onMessageByType:Cue,getWorkerIndex:Oue}=st(),{isMainThread:jV}=require("worker_threads"),{Encoder:Pue,decode:rO}=require("msgpackr"),zV=new Pue,{isEmpty:Jl}=_T,JV=(Yn(),D(gi)),g0e=48*36e11;jV&&Cue(rt.ITC_EVENT_TYPES.RESTART,()=>{bn=void 0,zl=void 0});var{connect:Lue,StorageType:Due,RetentionPolicy:vue,AckPolicy:nO,DeliverPolicy:sO,DiscardPolicy:Mue,NatsConnection:S0e,JetStreamManager:T0e,JetStreamClient:y0e,StringCodec:R0e,JSONCodec:Uue,createInbox:iO,headers:xue,ErrorCode:KV}=require("nats"),{recordAction:Bue}=(as(),D(Tg)),{encodeBlobsAsBuffers:Fue}=(os(),D(ig)),QV=Uue(),kue="clustering",Hue=Aue.engines[on.NATS_SERVER_NAME],Gue=Sh.join(Iue,"dependencies"),tO=Sh.join(Gue,`${process.platform}-${process.arch}`,on.NATS_BINARY_NAME),ZC,eO,gh,Wl,jl;a1.exports={runCommand:XV,checkNATSServerInstalled:que,createConnection:oO,getConnection:Th,getJetStreamManager:yh,getJetStream:e1,getNATSReferences:mo,getServerList:Vue,createLocalStream:aO,listStreams:t1,deleteLocalStream:Kue,getServerConfig:Qd,listRemoteStreams:Yue,viewStream:Wue,viewStreamIterator:jue,publishToStream:zue,request:Xue,reloadNATS:cO,reloadNATSHub:Zue,reloadNATSLeaf:ede,extractServerName:Que,requestErrorHandler:tde,createLocalTableStream:i1,createTableStreams:sde,purgeTableStream:o1,purgeSchemaTableStreams:ide,getStreamInfo:ode,updateLocalStreams:cde,closeConnection:$ue,getJsmServerName:ST,addNatsMsgHeader:r1,clearClientCache:ZV,updateRemoteConsumer:rde,createConsumer:n1,updateConsumerIterator:nde};async function XV(e,t=void 0){let{stdout:r,stderr:n}=await Rue(e,{cwd:t});if(n)throw new Error(n.replace(`
16
16
  `,""));return r.replace(`
17
- `,"")}a(XV,"runCommand");async function que(){try{await gue.access(tO)}catch{return!1}let e=await XV(`${tO} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Sue.eq(t,Hue)}a(que,"checkNATSServerInstalled");async function oO(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await JV.getClusterUser();if(Jl(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}yi.trace("create nats connection called");let i=await Lue({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Kr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Kr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Kr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),yi.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&yi.error("Error with Nats client connection, connection closed",o),i===bn&&ZV()}),i}a(oO,"createConnection");function ZV(){bn=void 0,Wl=void 0,jl=void 0,zl=void 0}a(ZV,"clearClientCache");async function $ue(){bn&&(await bn.drain(),bn=void 0,Wl=void 0,jl=void 0,zl=void 0)}a($ue,"closeConnection");var bn,zl;async function Th(){return zl||(zl=oO(Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),bn=await zl),bn||zl}a(Th,"getConnection");async function yh(){if(Wl)return Wl;Jl(bn)&&await Th();let{domain:e}=Qd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Jl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Wl=await bn.jetstreamManager({domain:e,timeout:6e4}),Wl}a(yh,"getJetStreamManager");async function e1(){if(jl)return jl;Jl(bn)&&await Th();let{domain:e}=Qd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Jl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return jl=bn.jetstream({domain:e,timeout:6e4}),jl}a(e1,"getJetStream");async function mo(){let e=bn||await Th(),t=Wl||await yh(),r=jl||await e1();return{connection:e,jsm:t,js:r}}a(mo,"getNATSReferences");async function Vue(e){let t=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await JV.getClusterUser(),s=await oO(t,r,n),i=iO(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let f=QV.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 _T.asyncSetTimeout(e),await o.drain(),await s.close(),await u,c}a(Vue,"getServerList");async function aO(e,t){let{jsm:r}=await mo(),n=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Due.File,retention:vue.Limits,subjects:t,discard:Mue.Old,maxMsgs:s,maxBytes:i,maxAge:n})}a(aO,"createLocalStream");async function t1(){let{jsm:e}=await mo(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(t1,"listStreams");async function Kue(e){let{jsm:t}=await mo();await t.streams.delete(e)}a(Kue,"deleteLocalStream");async function Yue(e){let{connection:t}=await mo(),r=[],n=iO(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(QV.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(Yue,"listRemoteStreams");async function Wue(e,t=void 0,r=void 0){let{jsm:n,js:s}=await mo(),i=YV(),o={durable_name:i,ack_policy:nO.Explicit};t&&(o.deliver_policy=sO.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=rO(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(Wue,"viewStream");async function*jue(e,t=void 0,r=void 0){let{jsm:n,js:s}=await mo(),i=YV(),o={durable_name:i,ack_policy:nO.Explicit};t&&(o.deliver_policy=sO.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=rO(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(jue,"viewStreamIterator");async function zue(e,t,r,n){yi.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=r1(n,r);let{js:s}=await mo(),i=await ST(),o=`${e}.${i}`,c=await Fue(()=>n instanceof Uint8Array?n:zV.encode(n));try{yi.trace(`publishToStream publishing to subject: ${o}`),Bue(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 s1(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){yi.trace(`publishToStream creating stream: ${t}`);let d=o.split(".");d[2]="*",await aO(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(zue,"publishToStream");function r1(e,t){t===void 0&&(t=xue());let r=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(on.MSG_HEADERS.ORIGIN)&&r&&t.append(on.MSG_HEADERS.ORIGIN,r),t}a(r1,"addNatsMsgHeader");function Qd(e){e=e.toLowerCase();let t=Sh.join(Kr.get(rt.CONFIG_PARAMS.ROOTPATH),kue);if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Jl(eO)&&(eO={port:_h.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:_h.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.HUB,config_file:on.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Sh.join(t,on.PID_FILES.HUB),hdbNatsPath:t}),eO;if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Jl(ZC)&&(ZC={port:_h.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:_h.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.LEAF,config_file:on.NATS_CONFIG_FILES.LEAF_SERVER,domain:_h.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.LEAF,pid_file_path:Sh.join(t,on.PID_FILES.LEAF),hdbNatsPath:t}),ZC;yi.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Qd,"getServerConfig");async function n1(e,t,r,n){try{await e.consumers.add(t,{ack_policy:nO.Explicit,durable_name:r,deliver_policy:sO.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(n1,"createConsumer");async function Jue(e,t,r){await e.consumers.delete(t,r)}a(Jue,"removeConsumer");function Que(e){return e.split(".")[1]}a(Que,"extractServerName");async function Xue(e,t,r=6e4,n=iO()){if(!_T.isObject(t))throw new Error("data param must be an object");let s=zV.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 rO(c.data)}a(Xue,"request");function cO(e){return new Promise(async(t,r)=>{let n=bue(tO,["--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(cO,"reloadNATS");async function Zue(){let{pid_file_path:e}=Qd(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await cO(e)}a(Zue,"reloadNATSHub");async function ede(){let{pid_file_path:e}=Qd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await cO(e)}a(ede,"reloadNATSLeaf");function tde(e,t,r){let n;switch(e.code){case KV.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case KV.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(tde,"requestErrorHandler");async function rde(e,t){let r=t+on.SERVER_SUFFIX.LEAF,{connection:n}=await mo(),{jsm:s}=await ude(r),{schema:i,table:o}=e,c=gT.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await s1(async()=>{if(e.subscribe===!0)await n1(s,c,n.info.server_name,l);else try{await Jue(s,c,n.info.server_name)}catch(u){yi.trace(u)}})}a(rde,"updateRemoteConsumer");async function nde(e,t,r,n){let s=gT.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(!jV&&Oue()<Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=XC();await c(o)}await Nue(o),n==="stop"&&await _T.asyncSetTimeout(1e3)}a(nde,"updateConsumerIterator");function s1(e){return wue.writeTransaction(rt.SYSTEM_SCHEMA_NAME,rt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(s1,"exclusiveLock");async function i1(e,t){let r=gT.createNatsTableStreamName(e,t),n=await ST(),s=ade(e,t,n);await aO(r,[s])}a(i1,"createLocalTableStream");async function sde(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await i1(n,s)}}a(sde,"createTableStreams");async function o1(e,t,r=void 0){if(Kr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=gT.createNatsTableStreamName(e,t),{domain:s}=Qd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Th()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")yi.warn(n);else throw n}}a(o1,"purgeTableStream");async function ide(e,t){if(Kr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await o1(e,t[r])}a(ide,"purgeSchemaTableStreams");async function ode(e){return(await yh()).streams.info(e)}a(ode,"getStreamInfo");function ade(e,t,r){return`${on.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(ade,"createSubjectName");async function ST(){if(gh)return gh;if(gh=(await yh())?.nc?.info?.server_name,gh===void 0)throw new Error("Unable to get jetstream manager server name");return gh}a(ST,"getJsmServerName");async function cde(){let e=await yh(),t=await ST(),r=await t1();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=lde(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(".");yi.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(cde,"updateLocalStreams");function lde(e){let{config:t}=e,r=!1,n=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Kr.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(lde,"updateStreamLimits");async function ude(e){let t,r;try{t=await bn.jetstream({domain:e}),r=await bn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw yi.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(ude,"connectToRemoteJS")});function lO(e){let t=e.get(TT),r=t?(0,Xd.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:bh(e)??1,nodes:[]})})}i[n]=0,e.putSync(TT,(0,Xd.pack)(r))}return r}function Rh(e){return lO(e).remoteNameToId}function l1(e,t){let r=lO(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(TT,(0,Xd.pack)(r)),s}function yT(e,t){let r=lO(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(TT,(0,Xd.pack)(r))}return c1.trace?.("The remote node name map",e,n,s),s}var c1,Xd,TT,uO=se(()=>{c1=b(ir());gs();Xd=require("msgpackr"),TT=Symbol.for("remote-ids");a(lO,"getIdMappingRecord");a(Rh,"exportIdMapping");a(l1,"remoteToLocalNodeId");a(yT,"getIdOfRemoteNode")});var h1={};ye(h1,{commitsAwaitingReplication:()=>Zd,getHDBNodeTable:()=>Gt,getReplicationSharedStatus:()=>ef,iterateRoutes:()=>Ih,shouldReplicateToNode:()=>Ah,subscribeToNodeUpdates:()=>tf});function Gt(){return u1||(u1=ze({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 ef(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(64),n&&{callback:n}))}function tf(e){Gt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;p1.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 Gt().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 Ah(e,t){let r=Ec.default.get(x.REPLICATION_DATABASES);return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&(r==="*"||r?.find?.(n=>n.name===t&&(!n.sharded||e.shard===Ec.default.get(x.REPLICATION_SHARD))))&&Gt().primaryStore.get(nt())?.replicates||e.subscriptions?.some(n=>(n.database||n.schema)===t&&n.subscribe)}function dde(){tf(e=>{_c({},(t,r)=>{let n=e.name,s=d1.get(n);if(s||d1.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=ef(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of Zd.get(r)||[])u>l&&u<=c&&d();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*Ih(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=Ec.default.get(x.REPLICATION_SECUREPORT)??(!Ec.default.get(x.REPLICATION_PORT)&&Ec.default.get(x.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Ec.default.get(x.REPLICATION_PORT)||Ec.default.get(x.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){f1.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 f1,m1,Ec,p1,u1,d1,Zd,rf=se(()=>{Oe();gs();km();f1=require("worker_threads"),m1=b(Ee()),Ec=b(fe());G();p1=b(ir());server.nodes=[];a(Gt,"getHDBNodeTable");a(ef,"getReplicationSharedStatus");a(tf,"subscribeToNodeUpdates");a(Ah,"shouldReplicateToNode");d1=new Map;xx((e,t,r)=>{if(r>server.nodes.length)throw new m1.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Zd||(Zd=new Map,dde());let n=Zd.get(e);return n||(n=[],Zd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(dde,"startSubscriptionToReplications");a(Ih,"iterateRoutes")});var R1={};ye(R1,{connectedToNode:()=>Ql,disconnectedFromNode:()=>sf,ensureNode:()=>na,requestClusterStatus:()=>y1,startOnMainThread:()=>dO});async function dO(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){RT.set(o,bh(u.auditStore));break}}}Ri.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=Gt().primaryStore.get(c);if(u!==null){let d=e.url??gc();if(u===void 0||u.url!==d||u.shard!==e.shard)return na(c,{name:c,url:d,shard:e.shard,replicates:!0})}}a(l,"ensureThisNode"),Gt().primaryStore.get(c)&&l();for(let u of Ih(e))try{let d=!u.subscriptions;if(d&&await l(),d&&u.replicates==null&&(u.replicates=!0),E1.push(u),o.find(f=>f.url===u.url))continue;s(u)}catch(d){console.error(d)}tf(s)});let n;function s(o,c=o?.name){let l=nt()&&c===nt()||gc()&&o?.url===gc();if(l){let m=!!o?.replicates;if(n!==void 0&&n!==m)for(let p of Gt().search([]))p.replicates&&p.name!==c&&s(p,p.name);n=m}if(ot.trace("Setting up node replication for",o),!o){for(let[m,p]of po){let h;for(let[E,{worker:_,nodes:R}]of p){let S=R[0];if(S&&S.name==c){h=!0;for(let[y,{worker:w}]of p)p.delete(y),ot.warn("Node was deleted, unsubscribing from node",c,y,m),w?.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){ot.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(ot.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 nf)if(o.url===p.url){nf.delete(m);break}nf.set(o.name,o)}let d=lt();if(u||(u=new Map,po.set(o.url,u)),u.iterator=_c(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]||(ot.warn(`Database ${p} not found for node ${o.name}, making a subscription anyway`),f(p,!1))}function f(m,p){ot.trace("Setting up replication for database",m,"on node",o.name);let h=u.get(m),E,_=[{replicateByDefault:p,...o}];RT.has(m)&&wh.default.get(x.REPLICATION_FAILOVER)&&(_.push({replicateByDefault:p,name:nt(),startTime:RT.get(m),endTime:Date.now(),replicates:!0}),RT.delete(m));let R=Ah(o,m),S=Ri.workers.filter(y=>y.name==="http");if(h){if(E=h.worker,h.nodes=_,R)return}else R&&(t=t%S.length,E=S[t++],E||ot.warn("No http workers available to subscribe to node",o.name,o.url),u.set(m,{worker:E,nodes:_,url:o.url}),E?.on("exit",()=>{u.get(m)?.worker===E&&(u.delete(m),f(m,p))}));if(R){let y=fde.HDB_LEADER_URL??process.env.HDB_LEADER_URL??E1[0]?.url,w=y?new URL(y).hostname:Array.from(Gt().primaryStore.getKeys({}).filter(H=>H!==nt()))[0],I=_[0].name??(_[0].url&&new URL(_[0].url).hostname);ot.warn(`Setting up subscription with leader ${w} for node ${I}`),_[0].isLeader=!w||I===w,setTimeout(()=>{let H={..._[0],type:"subscribe-to-node",database:m,nodes:_};E?E.postMessage(H):Nh(H)},mde)}else{ot.info("Node no longer should be used, unsubscribing from node",{replicates:o.replicates,databaseName:m,node:o,subscriptions:o.subscriptions,hasDatabase:!!d[m],thisReplicates:Gt().primaryStore.get(nt())?.replicates}),Gt().primaryStore.get(nt())?.replicates||(n=!1,ot.info("Disabling replication, this node name",nt(),Gt().primaryStore.get(nt()),m));let y={type:"unsubscribe-from-node",database:m,url:o.url,name:o.name,nodes:_};E?E.postMessage(y):AT(y)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),sf=a(function(o){try{ot.info("Disconnected from node",o.name,o.url,"finished",!!o.finished);let c=Array.from(nf.keys()),l=c.sort(),u=l.indexOf(o.name||bi(o.url));if(u===-1){ot.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){ot.warn("Disconnected node not found in replication map",o.database,d);return}if(f.connected=!1,o.finished||!wh.default.get(x.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],_=nf.get(E);d=po.get(_.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 w of f.nodes){if(S.some(I=>I.name===w.name)){ot.info(`Disconnected node is already failing over to ${E} for ${o.database}`);continue}w.endTime<Date.now()||(S.push(w),ot.info(`Failing over ${o.database} from ${o.name} to ${E}`),i(w,o.database,R.nodes[0]),y=!0)}f.nodes=[f.nodes[0]],y||ot.info(`Disconnected node ${o.name} has no nodes to fail over to ${E}`);return}ot.warn("Unable to find any other node to fail over to",o.name,o.url)}catch(c){ot.error("Error failing over node",c)}},"disconnectedFromNode"),Ql=a(function(o){let c=po.get(o.url),l=c?.get(o.database);if(!l){ot.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){ot.warn("Newly connected node has no node subscriptions",o.database,l);return}if(!u.name){ot.debug("Connected node is not named yet",o.database,l);return}if(!wh.default.get(x.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 _ of h)i(_,o.database);else{let _=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});_.length<h.length&&(m.nodes=_)}}},"connectedToNode");function i(o,c,l=o){let u=Ri.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]}):Nh({url:l.url,name:l.name,database:c,nodes:[o]})}a(i,"connectToNextWorker"),(0,Ri.onMessageByType)("disconnected-from-node",sf),(0,Ri.onMessageByType)("connected-to-node",Ql),(0,Ri.onMessageByType)("request-cluster-status",y1)}function y1(e,t){let r=[];for(let[n,s]of nf)try{let i=po.get(s.url);ot.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=g1(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ot.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function na(e,t){let r=Gt();e=e??bi(t.url),t.name=e;try{if(t.ca){let s=new S1.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){ot.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ot.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!wh.default.get(x.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=g1(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])]}ot.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Ri,bT,ot,_1,wh,S1,T1,g1,fde,mde,po,sf,Ql,nf,RT,E1,Ch=se(()=>{Oe();Ri=b(st());gs();bT=require("worker_threads");rf();ot=b(Q()),_1=b(require("lodash")),wh=b(fe());G();S1=require("crypto"),T1=b(require("minimist")),{cloneDeep:g1}=_1.default,fde=(0,T1.default)(process.argv),mde=200,po=new Map,nf=new Map,RT=new Map,E1=[];a(dO,"startOnMainThread");a(y1,"requestClusterStatus");bT.parentPort&&(sf=a(e=>{bT.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Ql=a(e=>{bT.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Ri.onMessageByType)("subscribe-to-node",e=>{Nh(e)}),(0,Ri.onMessageByType)("unsubscribe-from-node",e=>{AT(e)}));a(na,"ensureNode")});var Ts=M(qt=>{"use strict";var gr=require("path"),{watch:pde}=require("chokidar"),Wn=require("fs-extra"),of=require("node-forge"),C1=require("net"),{generateKeyPair:fO,X509Certificate:sa,createPrivateKey:O1,randomBytes:hde}=require("node:crypto"),Ede=require("util");fO=Ede.promisify(fO);var vt=of.pki,Ai=require("joi"),{v4:P1}=require("uuid"),{validateBySchema:EO}=ft(),{forComponent:_de}=Q(),Ss=fe(),Vs=(G(),D(j)),{CONFIG_PARAMS:Zl}=Vs,Ii=dA(),{ClientError:Sc}=Ee(),wT=require("node:tls"),{relative:L1,join:gde}=require("node:path"),{CERTIFICATE_VALUES:b1}=Ii,Sde=rl(),mO=_t(),{table:Tde,getDatabases:yde,databases:IT}=(Oe(),D(mt)),{getJWTRSAKeys:A1}=(Yd(),D(mh)),Xe=_de("tls").conditional;qt.generateKeys=SO;qt.updateConfigCert=k1;qt.createCsr=Cde;qt.signCertificate=Ode;qt.setCertTable=af;qt.loadCertificates=x1;qt.reviewSelfSignedCert=yO;qt.createTLSSelector=G1;qt.listCertificates=$1;qt.addCertificate=Ude;qt.removeCertificate=Bde;qt.createNatsCerts=Dde;qt.generateCertsKeys=Lde;qt.getReplicationCert=Ph;qt.getReplicationCertAuth=Nde;qt.renewSelfSigned=vde;qt.hostnamesFromCert=bO;qt.getKey=Fde;qt.getHostnamesFromCertificate=kde;qt.getPrimaryHostName=RO;qt.generateSerialNumber=OT;var{urlToNodeName:D1,getThisNodeUrl:Rde,getThisNodeName:CT,clearThisNodeName:bde}=(gs(),D(ia)),{readFileSync:Ade,statSync:v1}=require("node:fs"),F0e=fe(),{getTicketKeys:Ide,onMessageFromWorkers:wde}=st(),{isMainThread:M1}=require("worker_threads"),{TLSSocket:U1,createSecureContext:k0e}=require("node:tls"),_O=3650,Oh=["127.0.0.1","localhost","::1"],gO=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];function OT(){let e=hde(8);return e[0]=e[0]&127|1,e.toString("hex")}a(OT,"generateSerialNumber");wde(async e=>{e.type===Vs.ITC_EVENT_TYPES.RESTART&&(Ss.initSync(!0),await yO())});var an;function yc(){return an||(an=yde().system.hdb_certificate,an||(an=Tde({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(yc,"getCertTable");async function Ph(){let e=G1("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(CT());if(!r)return;let n=new sa(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(Ph,"getReplicationCert");async function Nde(){yc();let e=(await Ph()).options.cert,r=new sa(e).issuer.match(/CN=(.*)/)?.[1];return an.get(r)}a(Nde,"getReplicationCertAuth");var I1,Tc=new Map;function x1(){if(I1)return;I1=!0;let e=[{configKey:Zl.TLS},{configKey:Zl.OPERATIONSAPI_TLS}];yc();let t=gr.dirname(mO.getConfigFilePath()),r;for(let{configKey:n}of e){let s=mO.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&L1(gde(t,"keys"),o);c&&w1(o,l=>{Tc.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&M1){let d;w1(u,f=>{if(b1.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=H1(u),h=new sa(p),E;try{E=RO(h)}catch(y){Xe.error?.("error extracting host name from certificate",y);return}if(E==null){Xe.error?.("No host name found on certificate");return}if(h.checkIssued(new sa(b1.cert)))return;let _=an.primaryStore.get(E),R=v1(u).mtimeMs,S=!_||_.is_self_signed?1:_.file_timestamp??_.__updatedtime__;if(_&&R<=S){R<S&&Xe.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(x1,"loadCertificates");function w1(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&M1&&Xe.warn?.(`Reloading ${r}:`,i),n=c,t(H1(i)))}catch(c){Xe.error?.(`Error loading ${r}:`,i,c)}},"loadFile");Wn.existsSync(e)?s(e,v1(e)):Xe.error?.(`${r} file not found:`,e),pde(e,{persistent:!1}).on("change",s)}a(w1,"loadAndWatch");function pO(){let e=Rde();if(e==null){let t=Oh[0];return Xe.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return D1(e)}a(pO,"getHost");function NT(){let e=CT();if(e==null){let t=Oh[0];return Xe.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(NT,"getCommonName");async function Cde(){let e=await Ph(),t=vt.certificateFromPem(e.options.cert),r=vt.privateKeyFromPem(e.options.key);Xe.info?.("Creating CSR with cert named:",e.name);let n=vt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:NT()},...gO];Xe.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:B1()}];return Xe.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),of.pki.certificationRequestToPem(n)}a(Cde,"createCsr");function B1(){let e=Oh.includes(NT())?Oh:[...Oh,NT()];return e.includes(pO())||e.push(pO()),[{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=>C1.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(B1,"certExtensions");async function Ode(e){let t={},r=gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;yc();for await(let d of an.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(Tc.has(d.private_key_name)){n=Tc.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await Wn.exists(gr.join(r,d.private_key_name))){n=Wn.readFile(gr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await hO();s=d.ca,n=d.private_key}n=vt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=vt.certificateFromPem(s.certificate);Xe.info?.("Signing CSR with cert named",s.name);let o=vt.certificationRequestFromPem(e.csr);try{o.verify()}catch(d){return Xe.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=of.pki.createCertificate();c.serialNumber=OT(),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+_O),Xe.info?.("sign cert setting validity:",c.validity),Xe.info?.("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),Xe.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;Xe.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,of.md.sha256.create()),t.certificate=vt.certificateToPem(c)}else Xe.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(Ode,"signCertificate");async function Pde(e,t){await af({name:CT(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await af({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:vt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(Pde,"createCertificateTable");async function af(e){let t;try{t=new sa(e.certificate)}catch(r){Xe.error?.(`Failed to parse certificate for ${e.name}:`,r.message),Xe.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},yc(),await an.patch(e)}a(af,"setCertTable");async function SO(){let e=await fO("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:vt.publicKeyFromPem(e.publicKey),privateKey:vt.privateKeyFromPem(e.privateKey)}}a(SO,"generateKeys");async function TO(e,t,r){let n=vt.createCertificate();if(!t){let o=await Ph();t=vt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=OT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+_O);let i=[{name:"commonName",value:NT()},...gO];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(B1()),n.sign(e,of.md.sha256.create()),vt.certificateToPem(n)}a(TO,"generateCertificates");async function hO(){let e=await $1(),t;for(let r of e){if(!r.is_authority)continue;let n=await q1(r.private_key_name);if(r.private_key_name&&n&&new sa(r.certificate).checkPrivateKey(O1(n))){Xe.trace?.(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;Xe.trace?.("No CA found with matching private key")}a(hO,"getCertAuthority");async function F1(e,t,r=!0){let n=vt.createCertificate();n.publicKey=t,n.serialNumber=OT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+_O);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${Ss.get(Zl.REPLICATION_HOSTNAME)??D1(Ss.get(Zl.REPLICATION_URL))??P1().split("-")[0]}`},...gO];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,of.md.sha256.create());let o=gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),c=gr.join(o,Ii.PRIVATEKEY_PEM_NAME);return r&&await Wn.writeFile(c,vt.privateKeyToPem(e)),n}a(F1,"generateCertAuthority");async function Lde(){let{privateKey:e,publicKey:t}=await SO(),r=await F1(e,t),n=await TO(e,t,r);await Pde(n,r),k1()}a(Lde,"generateCertsKeys");async function Dde(){let e=await TO(vt.privateKeyFromPem(Ii.CERTIFICATE_VALUES.key),void 0,vt.certificateFromPem(Ii.CERTIFICATE_VALUES.cert)),t=gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),r=gr.join(t,Ii.NATS_CERTIFICATE_PEM_NAME);await Wn.exists(r)||await Wn.writeFile(r,e);let n=gr.join(t,Ii.NATS_CA_PEM_NAME);await Wn.exists(n)||await Wn.writeFile(n,Ii.CERTIFICATE_VALUES.cert)}a(Dde,"createNatsCerts");async function vde(){yc();for await(let e of an.search([{attribute:"is_self_signed",value:!0}]))await an.delete(e.name);await yO()}a(vde,"renewSelfSigned");async function yO(){bde(),await x1(),yc();let e=await hO();if(!e){Xe.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:vt.privateKeyFromPem(Wn.readFileSync(u)),keyPath:u}}catch(d){return Xe.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=Ss.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=Ss.get(Zl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let o=gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),c=L1(o,i);s||(Xe.warn?.("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await SO(),Wn.existsSync(gr.join(o,Ii.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${P1().split("-")[0]}.pem`),await Wn.writeFile(gr.join(o,c),vt.privateKeyToPem(s)));let l=await F1(s,vt.setRsaPublicKey(s.n,s.e),!1);await af({name:l.subject.getField("CN").value,uses:["https"],certificate:vt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await Ph()){let r=CT();Xe.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await hO();let n=vt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await TO(vt.privateKeyFromPem(e.private_key),s,n);await af({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(yO,"reviewSelfSignedCert");function k1(){let e=Sde(Object.keys(Vs.CONFIG_PARAM_MAP),!0),t=gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),r=gr.join(t,Ii.PRIVATEKEY_PEM_NAME),n=gr.join(t,Ii.NATS_CERTIFICATE_PEM_NAME),s=gr.join(t,Ii.NATS_CA_PEM_NAME),i=Vs.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),mO.updateConfigValue(void 0,void 0,o,!1,!0)}a(k1,"updateConfigCert");function H1(e){return e.startsWith("-----BEGIN")?e:Ade(e,"utf8")}a(H1,"readPEM");var N1=wT.createSecureContext;wT.createSecureContext=function(e){if(!e.cert||!e.key)return N1(e);let t={...e};delete t.key,delete t.cert;let r=N1(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Mde=U1.prototype._init;U1.prototype._init=function(e,t){Mde.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 Xl=new Map;function G1(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(),Xl.clear();let d=0;if(IT===void 0){c();return}for await(let f of IT.system.hdb_certificate.search([])){let m=f.certificate,p=new sa(m);f.is_authority&&(p.asString=m,Xl.set(p.subject,m))}for await(let f of IT.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 q1(f.private_key_name),E=f.certificate,_=new sa(E);if(Xl.has(_.issuer)&&(E+=`
18
- `+Xl.get(_.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let R={ciphers:f.ciphers,ticketKeys:Ide(),availableCAs:Xl,ca:t&&Array.from(Xl.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??bO(_);Array.isArray(S)||(S=[S]);for(let I of S)I===pO()&&(p+=1);let y=wT.createSecureContext(R);y.name=f.name,y.options=R,y.quality=p,y.certificateAuthorities=Array.from(Xl),y.certStart=E.toString().slice(0,100);let w;for(let I of S)if(I){I[0]==="*"&&(s=!0,I=I.slice(1)),C1.isIP(I)&&(w=!0);let H=r.get(I)?.quality??0;Xe.trace?.("Assigning TLS for hostname",I,"if",p,">",H),p>H&&r.set(I,y)}else Xe.error?.("No hostname found for certificate at",wT.certificate);Xe.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){Xe.error?.("Error applying TLS for",f.name,m)}o?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}a(u,"updateTLS"),IT?.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){Xe.info?.("TLS requested for",o||"(no SNI)");let l=o;for(;;){let d=r.get(l);if(d)return Xe.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?Xe.debug?.("No certificate found to match",o,"using the default certificate"):Xe.debug?.("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):Xe.info?.("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(G1,"createTLSSelector");async function q1(e){let t=Tc.get(e);return!t&&e?await Wn.readFile(gr.join(Ss.get(Zl.ROOTPATH),Vs.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(q1,"getPrivateKeyByName");async function $1(){yc();let e=[];for await(let t of an.search([]))e.push(t);return e}a($1,"listCertificates");async function Ude(e){let t=EO(e,Ai.object({name:Ai.string().required(),certificate:Ai.string().required(),is_authority:Ai.boolean().required(),private_key:Ai.string(),hosts:Ai.array(),uses:Ai.array()}));if(t)throw new Sc(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new sa(n),c=!1,l=!1,u;for(let[p,h]of Tc)!s&&!c&&o.checkPrivateKey(O1(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new Sc("A suitable private key was not found for this certificate");let d;if(!r){try{d=RO(o)}catch(p){Xe.error?.(p)}if(d==null)throw new Sc("Error extracting certificate host name, please provide a name parameter")}let f=xde(r??d);s&&!c&&!l&&(await Wn.writeFile(gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME,f+".pem"),s),Tc.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 af(m),"Successfully added certificate: "+f}a(Ude,"addCertificate");function xde(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(xde,"sanitizeName");async function Bde(e){let t=EO(e,Ai.object({name:Ai.string().required()}));if(t)throw new Sc(t.message);let{name:r}=e;yc();let n=await an.get(r);if(!n)throw new Sc(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&&(Xe.info?.("Removing private key named",s),await Wn.remove(gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME,s)))}return await an.delete(r),"Successfully removed "+r}a(Bde,"removeCertificate");function RO(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||bO(e)[0]}a(RO,"getPrimaryHostName");function bO(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(bO,"hostnamesFromCert");async function Fde(e){if(e.bypass_auth!==!0)throw new Sc("Unauthorized","401");let t=EO(e,Ai.object({name:Ai.string().required()}));if(t)throw new Sc(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await A1()).privateKey;if(r===".jwtPublic")return(await A1()).publicKey;if(Tc.get(r))return Tc.get(e.name);throw new Sc("Key not found")}a(Fde,"getKey");function kde(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}a(kde,"getHostnamesFromCertificate")});var mK={};ye(mK,{BACK_PRESSURE_RATIO_POSITION:()=>uK,CONFIRMATION_STATUS_POSITION:()=>lK,LATENCY_POSITION:()=>MT,NodeReplicationConnection:()=>lf,OPERATION_REQUEST:()=>CO,RECEIVED_TIME_POSITION:()=>PO,RECEIVED_VERSION_POSITION:()=>OO,RECEIVING_STATUS_POSITION:()=>LO,RECEIVING_STATUS_RECEIVING:()=>fK,RECEIVING_STATUS_WAITING:()=>dK,SENDING_TIME_POSITION:()=>Dh,createWebSocket:()=>UT,databaseSubscriptions:()=>bc,replicateOverWS:()=>vh,tableUpdateListeners:()=>MO});async function UT(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(!wO){let l=(0,iK.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),wO=u.secureContexts}if(i=wO.get(s),i&&le.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,aK.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&((cf?.caCount!==oa.size||cf?.derivedFromContext!==i)&&(cf=oK.createSecureContext({...i.options,ca:[...oa,...i.options.availableCAs.values()]}),cf.caCount=oa.size,cf.derivedFromContext=i),c.secureContext=cf),new rK.WebSocket(e,"harperdb-replication-v1",c)}function vh(e,t,r){let n=t.port||t.securePort,s=vO.pid%1e3+"-"+nK.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);le.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||bc,f,m,p=!1,h=t.subscription;h?.then&&h.then(A=>{h=A,h.auditStore&&(f=h.auditStore)});let E=t.tables||u&&lt()[u],_,R=new Map,S=[];_=r.name,_&&t.connection&&(t.connection.nodeName=_);let y,w,I,H,X,q,k,z=6e4,Y,ce=0,de=0,te=0,Se=tK.default.get(x.REPLICATION_BLOBTIMEOUT)??12e4,Ne=new Map,Ke=[],$e=0,Ir;if(t.url){let A=a(()=>{X&&de===e._socket?.bytesRead&&te===e._socket?.bytesWritten?e.terminate():(X=performance.now(),e.ping(),de=e._socket?.bytesRead,te=e._socket?.bytesWritten)},"sendPing");I=setInterval(A,Z1).unref(),A()}else nr();e._socket?.setMaxListeners(200);function nr(){clearTimeout(H),de=e._socket?.bytesRead,te=e._socket?.bytesWritten,H=setTimeout(()=>{de===e._socket?.bytesRead&&te===e._socket?.bytesWritten&&(le.warn?.(`Timeout waiting for ping from ${_}, terminating connection and reconnecting`),e.terminate())},Z1*2).unref()}a(nr,"resetPingTimer");let zr=0,xr=0,Lu=!1,Qc=3e4;function Bt(){if(pn?.length>0){let A=performance.now(),U=A-xr;zr=(zr*Qc+(Lu?U:0))/(Qc+U),m&&(m[uK]=zr),xr=A}}a(Bt,"updateBackPressureRatio"),setInterval(Bt,Qc).unref();function si(){if(!(!_||!u))return m||(m=ef(f,u,_)),m}a(si,"getSharedStatus"),u&&Xc(u);let Ga,l_,um=[],u_=[],dm,ve=[],d_=[],zb=[],Du=150,qi=25,Ps=0,fm=0,mm=!1,Mo,Dn,pn,Br;e.on("message",vu);async function vu(A){if(r=await r,!r){le.error?.(s,"No authorization provided"),Fr(1008,"Unauthorized");return}pm(A),e.off("message",vu),e.on("message",pm)}a(vu,"onWSMessageWhenAuthorized");function pm(A){ce=performance.now();try{let U=A.dataView=new fl(A.buffer,A.byteOffset,A.byteLength);if(A[0]>127){let W=(0,at.decode)(A),[J,F,he]=W;switch(J){case K1:{if(F){if(_){if(_!==F){le.error?.(s,`Node name mismatch, expecting to connect to ${_}, but peer reported name as ${F}, disconnecting`),e.send((0,at.encode)([Lh])),Fr(1008,"Node name mismatch");return}}else if(_=F,t.connection?.tentativeNode){let me=t.connection.tentativeNode;me.name=_,t.connection.tentativeNode=null,na(_,me)}if(t.connection&&(t.connection.nodeName=_),le.debug?.(s,"received node name:",_,"db:",u??W[2]),!u)try{Xc(u=W[2]),u==="system"&&(Ga=_c(t,(me,ie)=>{Va(ie)&&K(ie)}),e.on("close",()=>{Ga?.remove()}))}catch(me){le.warn?.(s,"Error setting database",me),e.send((0,at.encode)([Lh])),Fr(1008,me.message);return}hm()}break}case Q1:{le.debug?.(s,"Received table definitions for",F.map(me=>me.table));for(let me of F){let ie=W[2];me.database=ie;let Ce;if(Va(ie)){if(u==="system")Me[ie]?.[me.table]||(Ce=v(me,Me[ie]?.[me.table]));else{if(ie!=="data"&&!Me[ie]){le.warn?.("Database not found",ie);return}Ce=v(me,Me[ie]?.[me.table])}f||(f=Ce?.auditStore),E||(E=lt()?.[ie])}}break}case Lh:Fr();break;case CO:try{let me=r?.replicates||r?.subscribers||r?.name;le.debug?.("Received operation request",F,"from",_),server.operation(F,{user:r},!me).then(ie=>{le.debug?.("Requested request from finished",_,ie),Array.isArray(ie)&&(ie={results:ie}),ie.requestId=F.requestId,e.send((0,at.encode)([LT,ie]))},ie=>{le.debug?.("Failed requested operation from",_,ie),e.send((0,at.encode)([LT,{requestId:F.requestId,error:AO(ie)}]))})}catch(me){e.send((0,at.encode)([LT,{requestId:F.requestId,error:AO(me)}]))}break;case LT:let{resolve:ue,reject:_e}=R.get(F.requestId);le.debug?.("Received completed operation request",_,F),F.error?_e(new Error(F.error)):ue(F),R.delete(F.requestId);break;case IO:let re=W[3];if(!E){u?le.error?.(s,"No database found for",u):le.error?.(s,"Database name never received"),Fr();return}let oe=E[re];oe=v({table:re,database:u,attributes:F.attributes,schemaDefined:F.schemaDefined},oe),um[he]={name:re,decoder:new at.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:F.typedStructs,structures:F.structures}),getEntry(me){return oe.primaryStore.getEntry(me)},rootStore:oe.primaryStore.rootStore};break;case Y1:Br=f?l1(F,f):new Map,dm=W[2],le.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${dm}`);break;case W1:let ge=he;zb[ge]=F;break;case J1:si()[lK]=F,le.trace?.(s,"received and broadcasting committed update",F),si().buffer.notify();break;case z1:y=F,h.send({type:"end_txn",localTime:y,remoteNodeIds:S});break;case DT:{let me=W[1],{fileId:ie,size:Ce,finished:Be,error:He}=me,Te=Ne.get(ie);le.debug?.("Received blob",ie,"has stream",!!Te,"connectedToBlob",!!Te?.connectedToBlob,"length",W[2].length,"finished",Be),Te||(Te=new NO.PassThrough,Te.expectedSize=Ce,Ne.set(ie,Te)),Te.lastChunk=Date.now();let pt=W[2];We(pt.byteLength,"bytes-received",`${_}.${u}`,"replication","blob");try{Be?(He?(Te.on("error",()=>{}),Te.destroy(new Error("Blob error: "+He+" for record "+(Te.recordId??"unknown")+" from "+_))):Te.end(pt),Te.connectedToBlob&&Ne.delete(ie)):Te.write(pt)}catch(Nt){le.error?.(`Error receiving blob for ${Te.recordId} from ${_} and streaming to storage`,Nt),Ne.delete(ie)}break}case j1:{let me=F,ie;try{let Ce=W[3],Be=u_[he]||(u_[he]=E[W[4]]);if(!Be)return le.warn?.("Unknown table id trying to handle record request",he);let He=Be.primaryStore.getBinaryFast(Symbol.for("structures")),Te=He?.length??0;if(Te>0&&Te!==fm){fm=Te;let Nt=(0,at.decode)(He);e.send((0,at.encode)([IO,{typedStructs:Nt.typed,structures:Nt.named},he,Be.tableName]))}let pt=Be.primaryStore.getBinaryFast(Ce);if(pt){let Nt=Be.primaryStore.decoder.decode(pt,{valueAsBuffer:!0}),Ft=ut||{};Ft.version=(0,cK.getLastVersion)(),ut&&ut[Xu]&Zr&&(Nt=Buffer.from(Nt),zm(()=>Be.primaryStore.decoder.decode(pt),m_=>qa(m_,Ce),Be.primaryStore.rootStore)),ie=(0,at.encode)([PT,me,{value:Nt,expiresAt:Ft.expiresAt,version:Ft.version,residencyId:Ft.residencyId,nodeId:Ft.nodeId,user:Ft.user}])}else ie=(0,at.encode)([PT,me])}catch(Ce){ie=(0,at.encode)([PT,me,{error:Ce.message}])}e.send(ie);break}case PT:{let{resolve:me,reject:ie,tableId:Ce,key:Be}=R.get(W[1]),He=W[2];if(He?.error)ie(new Error(He.error));else if(He){let Te;sg(()=>{let pt=um[Ce].decoder.decode(He.value);He.value=pt,He.key=Be,me(He)||Te&&setTimeout(()=>Te.forEach(tg),6e4).unref()},f?.rootStore,pt=>{let Nt=$a(pt,Be);return Te||(Te=[]),Te.push(Nt),Nt})}else me();R.delete(W[1]);break}case V1:{pn=F;let me,ie,Ce=!1;if(h){if(u!==h.databaseName&&!h.then){le.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(le.debug?.(s,"received subscription request for",u,"at",pn),!h){let De;h=new Promise(sr=>{le.debug?.("Waiting for subscription to database "+u),De=sr}),h.ready=De,bc.set(u,h)}if(r.name)ie=Gt().subscribe(r.name),ie.then(async De=>{me=De;for await(let sr of me){let ht=sr.value;if(!(ht?.replicates===!0||ht?.replicates?.receives||ht?.subscriptions?.some(kr=>(kr.database||kr.schema)===u&&kr.publish!==!1))){Ce=!0,Fr(1008,`Unauthorized database subscription to ${u}`);return}}},De=>{le.error?.(s,"Error subscribing to HDB nodes",De)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,at.encode)([Lh])),Fr(1008,`Unauthorized database subscription to ${u}`);return}if(Dn&&(le.debug?.(s,"stopping previous subscription",u),Dn.emit("close")),pn.length===0)return;let Be=pn[0],He=a(De=>{if(De&&(Be.replicateByDefault?!Be.tables.includes(De.tableName):Be.tables.includes(De.tableName)))return{table:De}},"tableToTableEntry"),Te={txnTime:0},pt,Nt,Ft=1/0,m_,p_=a((De,sr)=>{if(De.type==="end_txn"){Te.txnTime&&(o[i]!==66&&le.error?.("Invalid encoding of message"),C(9),C(hg),O(m_=sr),iU()),i=c,Te.txnTime=0;return}let ht=De.nodeId,kr=De.tableId,Ct=Nt[kr];if(!Ct&&(Ct=Nt[kr]=He(h.tableById[kr]),!Ct))return le.debug?.("Not subscribed to table",kr);let Ls=Ct.table,zt=Ls.primaryStore,ii=zt.encoder;(De.extendedType&Ig||!ii.typedStructs)&&(ii._mergeStructures(ii.getStructures()),ii.typedStructs&&(ii.lastTypedStructuresLength=ii.typedStructs.length));let xu=pt[ht];if(!(xu&&xu.startTime<sr&&(!xu.endTime||xu.endTime>sr)))return vT&&le.trace?.(s,"skipping replication update",De.recordId,"to:",_,"from:",ht,"subscribed:",pt),oU();vT&&le.trace?.(s,"sending replication update",De.recordId,"to:",_,"from:",ht,"subscribed:",pt);let Jb=De.version;Te.txnTime!==Jb&&(Te.txnTime&&(vT&&le.trace?.(s,"new txn time, sending queued txn",Te.txnTime),o[i]!==66&&le.error?.("Invalid encoding of message"),iU()),Te.txnTime=Jb,i=c,O(Jb));let Zc=De.residencyId,Qb=f_(Zc,Ls),h_;if(Qb&&!Qb.includes(_)){let $i=f_(De.previousResidencyId,Ls);if($i&&!$i.includes(_)&&(De.type==="put"||De.type==="patch")||Ls.getResidencyById)return oU();let el=De.recordId;le.trace?.(s,"sending invalidation",el,_,"from",ht);let Em=0;Zc&&(Em|=ml),De.previousResidencyId&&(Em|=pl);let eA,E_=null;for(let aU in Ls.indices){if(!E_){if(eA=De.getValue(zt,!0),!eA)break;E_={}}E_[aU]=eA[aU]}h_=hl(De.version,kr,el,null,ht,De.user,De.type==="put"||De.type==="patch"?"invalidate":De.type,ii.encode(E_),Em,Zc,De.previousResidencyId,De.expiresAt)}function oU(){return le.trace?.(s,"skipping audit record",De.recordId),q||(q=setTimeout(()=>{q=null,(m_||0)+X1/2<Ft&&(vT&&le.trace?.(s,"sending skipped sequence update",Ft),e.send((0,at.encode)([z1,Ft])))},X1).unref()),new Promise(setImmediate)}a(oU,"skipAuditRecord");let Xb=ii.typedStructs,Zb=ii.structures;if((Xb?.length!=Ct.typed_length||Zb?.length!=Ct.structure_length)&&(Ct.typed_length=Xb?.length,Ct.structure_length=Zb.length,le.debug?.(s,"send table struct",Ct.typed_length,Ct.structure_length),Ct.sentName||(Ct.sentName=!0),e.send((0,at.encode)([IO,{typedStructs:Xb,structures:Zb,attributes:Ls.attributes,schemaDefined:Ls.schemaDefined},kr,Ct.table.tableName]))),Zc&&!d_[Zc]&&(e.send((0,at.encode)([W1,Qb,Zc])),d_[Zc]=!0),h_)C(h_.length),P(h_);else{let $i=De.encoded;De.extendedType&Zr&&zm(()=>De.getValue(zt),Em=>qa(Em,De.recordId),zt.rootStore);let el=$i[0]===66?8:0;C($i.length-el),P($i,el),le.trace?.("wrote record",De.recordId,"length:",$i.length)}if(e._socket.writableNeedDrain){let $i=performance.now();return Lu=!0,Bt(),new Promise(el=>{le.debug?.(`Waiting for remote node ${_} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",()=>{el(),Lu=!1,Bt()})})}else return $e>qi?new Promise($i=>{Ir=$i}):new Promise(setImmediate)},"sendAuditRecord"),iU=a(()=>{c-i>8?(e.send(o.subarray(i,c)),le.debug?.(s,"Sent message, size:",c-i),u!=="system"&&We(c-i,"bytes-sent",`${_}.${u}`,"replication","egress")):le.debug?.(s,"skipping empty transaction")},"sendQueuedData");Dn=new DO.EventEmitter,Dn.once("close",()=>{Ce=!0,me?.end()});for(let{startTime:De}of pn)De<Ft&&(Ft=De);(ie||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,Nt=h.tableById.map(He),pt=[];for(let{name:sr,startTime:ht,endTime:kr}of pn){let Ct=yT(sr,f);le.debug?.("subscription to",sr,"using local id",Ct,"starting",ht),pt[Ct]={startTime:ht,endTime:kr}}K(u),Ga||(Ga=Vl(sr=>{sr.databaseName===u&&K(u)}),l_=ih(sr=>{sr===u&&(e.send((0,at.encode)([Lh])),Fr())}),e.on("close",()=>{Ga?.remove(),l_?.remove()})),e.send((0,at.encode)([Y1,Rh(h.auditStore),pn.map(({name:sr})=>sr)]));let De=!0;do{isFinite(Ft)||(le.warn?.("Invalid sequence id "+Ft),Fr(1008,"Invalid sequence id"+Ft));let sr;if(De&&!Ce&&(De=!1,Ft===0)){le.info?.("Replicating all tables to",_);let ht=Date.now(),kr=xT(f);for(let Ct in E){if(!He(Ct))continue;let Ls=E[Ct];for(let zt of Ls.primaryStore.getRange({snapshot:!1,versions:!0})){if(Ce)return;le.trace?.(s,"Copying record from",u,Ct,zt.key,zt.localTime),ht=Math.max(zt.localTime??1,ht),sr=!0,si()[Dh]=1;let ii=hl(zt.version,Ls.tableId,zt.key,null,kr,null,"put",zm(()=>Ls.primaryStore.encoder.encode(zt.value),xu=>qa(xu,zt.key)),zt.metadataFlags&-256,zt.residencyId,null,zt.expiresAt);await p_({recordId:zt.key,tableId:Ls.tableId,type:"put",getValue(){return zt.value},encoded:ii,version:zt.version,residencyId:zt.residencyId,nodeId:kr,extendedType:zt.metadataFlags},zt.localTime)}}Te.txnTime||(Te.txnTime=ht,O(ht)),p_({type:"end_txn"},ht),si()[Dh]=0,Ft=ht}for(let{key:ht,value:kr}of f.getRange({start:Ft||1,exclusiveStart:!0,snapshot:!1})){if(Ce)return;let Ct=At(kr);le.debug?.("sending audit record",ht,Ct.recordId),si()[Dh]=ht,Ft=ht,await p_(Ct,ht),Dn.startTime=ht,sr=!0}sr&&p_({type:"end_txn"},Ft),si()[Dh]=0,await MB(f)}while(!Ce)}).catch(De=>{le.error?.(s,"Error handling subscription to node",De),Fr(1008,"Error handling subscription to node")});break}}return}U.position=8;let N=!0,L,$;do{si();let W=U.readInt();if(W===9&&U.getUint8(U.position)==hg){U.position++,y=$=U.readFloat64(),m[OO]=y,m[PO]=Date.now(),m[LO]=dK,h.send({type:"end_txn",localTime:y,remoteNodeIds:S}),le.trace?.("received remote sequence update",y,u);break}let J=U.position,F=At(A,J,J+W),he=um[F.tableId];he||le.error?.(`No table found with an id of ${F.tableId}`);let ue;F.residencyId&&(ue=zb[F.residencyId],le.trace?.(s,"received residency list",ue,F.type,F.recordId));let _e=F.recordId;try{sg(()=>{L={table:he.name,id:F.recordId,type:F.type,nodeId:Br.get(F.nodeId),residencyList:ue,timestamp:F.version,value:F.getValue(he),user:F.user,beginTxn:N,expiresAt:F.expiresAt}},f?.rootStore,re=>$a(re,_e))}catch(re){throw re.message+=" record id: "+_e,re.message+=" typed structures for current decoder"+JSON.stringify(he.decoder.typedStructs),re.message+=" structures for current decoder"+JSON.stringify(he.decoder.structures),re}N=!1,le.debug?.(s,"received replication message",F.type,"id",L.id,"version",new Date(F.version),"nodeId",L.nodeId),m[OO]=F.version,m[PO]=Date.now(),m[LO]=fK,h.send(L),U.position=J+W}while(U.position<A.byteLength);Ps++,u!=="system"&&We(A.byteLength,"bytes-received",`${_}.${u}.${L?.table||"unknown_table"}`,"replication","ingest"),Ps>Du&&!mm&&(mm=!0,e.pause(),le.debug?.(`Commit backlog causing replication back-pressure, requesting that ${_} pause replication`)),h.send({type:"end_txn",localTime:y,remoteNodeIds:S,async onCommit(){if(L){let W=Date.now()-L.timestamp;u!=="system"&&We(W,"replication-latency",_+"."+u+"."+L.table,L.type,"ingest")}Ps--,mm&&(mm=!1,e.resume(),le.debug?.(`Replication resuming ${_}`)),Ke.length>0&&await Promise.all(Ke),le.trace?.("All blobs finished"),!w&&$&&(le.trace?.(s,"queuing confirmation of a commit at",$),setTimeout(()=>{e.send((0,at.encode)([J1,w])),le.trace?.(s,"sent confirmation of a commit at",w),w=null},Gde)),w=$,le.debug?.("last sequence committed",new Date($),u)}})}catch(U){le.error?.(s,"Error handling incoming replication message",U)}}a(pm,"onWSMessage"),e.on("ping",nr),e.on("pong",()=>{if(t.connection){let A=performance.now()-X;t.connection.latency=A,si()&&(m[MT]=A),t.isSubscriptionConnection&&Ql({name:_,database:u,url:t.url,latency:A})}X=null}),e.on("close",(A,U)=>{clearInterval(I),clearTimeout(H),clearInterval(k),Dn&&Dn.emit("close"),Mo&&Mo.end();for(let[N,{reject:L}]of R)L(new Error(`Connection closed ${U?.toString()} ${A}`));le.debug?.(s,"closed",A,U?.toString())});function Fr(A,U){try{e.isFinished=!0,le.debug?.(s,"closing",_,u,A,U),e.close(A,U),t.connection?.emit("finished")}catch(N){le.error?.(s,"Error closing connection",N)}}a(Fr,"close");let Mu=new Set;async function qa(A,U){let N=rg(A);if(Mu.has(N)){le.debug?.("Blob already being sent",N);return}Mu.add(N);try{let L;$e++;for await(let $ of A.stream())L&&(le.debug?.("Sending blob chunk",N,"length",L.length),e.send((0,at.encode)([DT,{fileId:N,size:A.size},L]))),L=$,e._socket.writableNeedDrain&&(le.debug?.("draining",N),await new Promise(W=>e._socket.once("drain",W)),le.debug?.("drained",N)),We($.length,"bytes-sent",`${_}.${u}`,"replication","blob");le.debug?.("Sending final blob chunk",N,"length",L.length),e.send((0,at.encode)([DT,{fileId:N,size:A.size,finished:!0},L]))}catch(L){le.warn?.("Error sending blob",L,"blob id",N,"for record",U),e.send((0,at.encode)([DT,{fileId:N,finished:!0,error:AO(L)},Buffer.alloc(0)]))}finally{Mu.delete(N),$e--,$e<qi&&Ir?.()}}a(qa,"sendBlobs");function $a(A,U){let N=rg(A),L=Ne.get(N);le.debug?.("Received transaction with blob",N,"has stream",!!L,"ended",!!L?.writableEnded),L?L.writableEnded&&Ne.delete(N):(L=new NO.PassThrough,Ne.set(N,L)),L.connectedToBlob=!0,L.lastChunk=Date.now(),L.recordId=U,A.size===void 0&&L.expectedSize&&(A.size=L.expectedSize);let $=L.blob??createBlob(L,A);L.blob=$;let W=Vo(()=>jm($).saving,h.auditStore?.rootStore);return W&&(W.blobId=N,Ke.push(W),W.finally(()=>{le.debug?.(`Finished receiving blob stream ${N}`),Ke.splice(Ke.indexOf(W),1)})),$}a($a,"receiveBlobs");function hm(){if(p||(p=!0,t.connection?.on("subscriptions-updated",hm)),!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 $ of L.value.nodes||[])$.lastTxnTime>(A.get($.id)??0)&&A.set($.id,$.lastTxnTime)}catch(L){if(!L.message.includes("Can not re"))throw L}let U=t.connection?.nodeSubscriptions?.[0];S=[];let N=t.connection?.nodeSubscriptions.map((L,$)=>{let W=[],{replicateByDefault:J}=L;if(L.subscriptions){for(let _e of L.subscriptions)if(_e.subscribe&&(_e.schema||_e.database)===u){let re=_e.table;E?.[re]?.replicate!==!1&&W.push(re)}J=!1}else for(let _e in E)(J?E[_e].replicate===!1:E[_e].replicate)&&W.push(_e);let F=f&&yT(L.name,f),he=h?.dbisDB?.get([Symbol.for("seq"),F])??1,ue=Math.max(he?.seqId??1,(typeof L.startTime=="string"?new Date(L.startTime).getTime():L.startTime)??1);if(le.debug?.("Starting time recorded in db",L.name,F,u,he?.seqId,"start time:",ue,new Date(ue)),U!==L){let _e=f&&yT(U.name,f),re=h?.dbisDB?.get([Symbol.for("seq"),_e])??1;for(let oe of re?.nodes||[])oe.name===L.name&&(ue=oe.seqId,le.debug?.("Using sequence id from proxy node",U.name,ue))}return F===void 0?le.warn("Starting subscription request from node",L,"but no node id found"):S.push(F),A.get(F)>ue&&(ue=A.get(F),le.debug?.("Updating start time from more recent txn recorded",U.name,ue)),ue===1&&(L.isLeader?(le.warn?.(`Requesting full copy of database ${u} from ${L.url}`),ue=0):ue=Date.now()-6e4),le.trace?.(s,"defining subscription request",L.name,u,new Date(ue)),{name:L.name,replicateByDefault:J,tables:W,startTime:ue,isLeader:L.isLeader,endTime:L.endTime}});if(N)if(le.debug?.(s,"sending subscription request",N,h?.dbisDB?.path),clearTimeout(Y),N.length>0)e.send((0,at.encode)([V1,N]));else{let L=a(()=>{let $=performance.now();Y=setTimeout(()=>{ce<=$?Fr(1008,"Connection has no subscriptions and is no longer used"):L()},z).unref()},"scheduleClose");L()}}a(hm,"sendSubscriptionRequestUpdate");function f_(A,U){if(!A)return;let N=ve[A];return N||(N=U.getResidencyRecord(A),ve[A]=N),N}a(f_,"getResidence");function Va(A){return!(Rc&&Rc!="*"&&!Rc[A]&&!Rc.includes?.(A)&&!Rc.some?.(U=>U.name===A))}a(Va,"checkDatabaseAccess");function Xc(A){if(h=h||d.get(A),!Va(A))throw new Error(`Access to database "${A}" is not permitted`);h||le.warn?.(`No database named "${A}" was declared and registered`),f=h?.auditStore,E||(E=lt()?.[A]);let U=nt();if(U===_)throw U?new Error("Should not connect to self",U):new Error("Node name not defined");return Uu(U,A),!0}a(Xc,"setDatabase");function Uu(A,U){let N=lt()?.[U],L=[];for(let $ in N){let W=N[$];L.push({table:$,schemaDefined:W.schemaDefined,attributes:W.attributes.map(J=>({name:J.name,type:J.type,isPrimaryKey:J.isPrimaryKey}))})}le.trace?.("Sending database info for node",A,"database name",U),e.send((0,at.encode)([K1,A,U,L]))}a(Uu,"sendNodeDBName");function K(A){let U=lt()?.[A],N=[];for(let L in U){if(pn&&!pn.some(W=>W.replicateByDefault?!W.tables.includes(L):W.tables.includes(L)))continue;let $=U[L];N.push({table:L,schemaDefined:$.schemaDefined,attributes:$.attributes.map(W=>({name:W.name,type:W.type,isPrimaryKey:W.isPrimaryKey}))})}e.send((0,at.encode)([Q1,N,A]))}a(K,"sendDBSchema"),k=setInterval(()=>{for(let[A,U]of Ne)U.lastChunk+Se<Date.now()&&(le.warn?.(`Timeout waiting for blob stream to finish ${A} for record ${U.recordId??"unknown"} from ${_}`),Ne.delete(A),U.end())},Se).unref();let g=1,T=[];return{end(){Mo&&Mo.end(),Dn&&Dn.emit("close")},getRecord(A){let U=g++;return new Promise((N,L)=>{let $=[j1,U,A.table.tableId,A.id];T[A.table.tableId]||($.push(A.table.tableName),T[A.table.tableId]=!0),e.send((0,at.encode)($)),ce=performance.now(),R.set(U,{tableId:A.table.tableId,key:A.id,resolve(W){let{table:J,entry:F}=A;if(N(W),W)return J._recordRelocate(F,W)},reject:L})})},sendOperation(A){let U=g++;return A.requestId=U,e.send((0,at.encode)([CO,A])),new Promise((N,L)=>{R.set(U,{resolve:N,reject:L})})}};function C(A){B(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,N=A.length){let L=N-U;B(L),A.copy(o,c,U,N),c+=L}function O(A){B(8),l.setFloat64(c,A),c+=8}function B(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 v(A,U){let N=A.database??"data";U||(U={});let L=U.schemaDefined,$=!1,W=A.schemaDefined,J=U.attributes||[];for(let F=0;F<A.attributes?.length;F++){let he=A.attributes[F],ue=J.find(_e=>_e.name===he.name);(!ue||ue.type!==he.type)&&(L?le.error?.(`Schema for '${u}.${A.table}' is defined locally, but attribute '${he.name}: ${he.type}' from '${_}' does not match local attribute ${ue?"'"+ue.name+": "+ue.type+"'":"which does not exist"}`):($=!0,W||(he.indexed=!0),ue?J[J.indexOf(ue)]=he:J.push(he)))}return $?(le.debug?.("(Re)creating",A),ze({table:A.table,database:A.database,schemaDefined:A.schemaDefined,attributes:J,...U})):U}}var tK,at,rK,nK,sK,DO,iK,oK,vO,aK,NO,cK,Hde,AO,le,V1,K1,Y1,Lh,W1,IO,j1,PT,CO,LT,z1,J1,Q1,DT,lK,OO,PO,Dh,MT,LO,uK,dK,fK,MO,bc,vT,X1,Gde,Z1,wO,cf,eK,lf,UO=se(()=>{Oe();Ki();uO();FI();gs();tK=b(fe());G();El();at=require("msgpackr"),rK=require("ws"),nK=require("worker_threads"),sK=b(Q());Ch();DO=require("events"),iK=b(Ts()),oK=b(require("node:tls"));rf();vO=b(require("node:process")),aK=require("node:net");as();os();NO=require("node:stream"),cK=require("lmdb"),{forComponent:Hde,errorToString:AO}=sK.default,le=Hde("replication").conditional,V1=129,K1=140,Y1=141,Lh=142,W1=130,IO=132,j1=133,PT=134,CO=136,LT=137,z1=143,J1=144,Q1=145,DT=146,lK=0,OO=1,PO=2,Dh=3,MT=4,LO=5,uK=6,dK=0,fK=1,MO=new Map,bc=new Map,vT=!0,X1=300,Gde=2,Z1=3e4;a(UT,"createWebSocket");eK=500,lf=class extends DO.EventEmitter{static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=eK;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??bi(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await UT(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;le.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${vO.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),le[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=eK,this.nodeSubscriptions&&Ql({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=vh(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"?(le.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"?le.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`):le.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&&sf({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();le.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(vh,"replicateOverWS")});function Ac(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 hK(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 FO(e){try{let t=eu(e),n=ho.Certificate.fromBER(t).extensions?.find(c=>c.extnID==="2.5.29.31");if(!n)return aa.debug?.("Certificate has no CRL Distribution Points extension"),[];let s=ca.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 aa.debug?.(`Found ${o.length} CRL distribution points: ${o}`),o}catch(t){return aa.warn?.(`Failed to extract CRL distribution points: ${t}`),[]}}function EK(e){try{let t=eu(e),r=ho.Certificate.fromBER(t),n=[],s=[];for(let i of r.extensions||[])if(i.extnID==="2.5.29.31")try{let o=ca.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){aa.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=ca.fromBER(i.extnValue.valueBlock.valueHexView);if(o.offset!==-1&&o.result instanceof ca.Sequence){for(let c of o.result.valueBlock.value)if(c instanceof ca.Sequence&&c.valueBlock.value.length>=2){let l=c.valueBlock.value[0],u=c.valueBlock.value[1];if(l instanceof ca.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){aa.warn?.(`Failed to parse Authority Information Access extension: ${o}`)}return aa.debug?.(`Found ${n.length} CRL distribution points and ${s.length} OCSP responder URLs`),{crlUrls:n,ocspUrls:s}}catch(t){return aa.warn?.(`Failed to extract revocation URLs: ${t}`),{crlUrls:[],ocspUrls:[]}}}function eu(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 BT(e,t,r,n){let s={certPem:e,issuerPem:t,method:r,...n},i=(0,BO.createHash)("sha256").update(JSON.stringify(s)).digest("hex");return`${r}:${i}`}function kO(e,t){return`${e}:${t}`}function _K(e){try{let t=eu(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 aa.error?.(`Failed to extract serial number: ${t}`),new Error(`Failed to extract certificate serial number: ${t.message}`)}}function HO(e){try{let t=eu(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,BO.createHash)("sha256").update(s).digest("hex")}catch(t){throw aa.error?.(`Failed to extract issuer key ID: ${t}`),new Error(`Failed to extract issuer key ID: ${t.message}`)}}function FT(){return xO||(xO=ze({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"}]})),xO}var BO,ho,ca,pK,aa,xO,kT=se(()=>{BO=require("node:crypto"),ho=b(require("pkijs")),ca=b(require("asn1js")),pK=b(ir());Oe();aa=(0,pK.loggerWithTag)("cert-verification-utils");a(Ac,"bufferToPem");a(hK,"extractCertificateChain");a(FO,"extractCRLDistributionPoints");a(EK,"extractRevocationUrls");a(eu,"pemToBuffer");a(BT,"createCacheKey");a(kO,"createRevokedCertificateId");a(_K,"extractSerialNumber");a(HO,"extractIssuerKeyId");xO=null;a(FT,"getCertificateCacheTable")});function gK(e){let{error:t,value:r}=Kde.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 Yr,qde,uf,df,GO,$de,Vde,Kde,SK=se(()=>{Yr=b(require("joi")),qde="fail-closed",uf={timeout:5e3,cacheTtl:36e5,errorCacheTtl:3e5,failureMode:"fail-closed"},df={timeout:1e4,cacheTtl:864e5,failureMode:"fail-closed",gracePeriod:864e5},GO=Yr.default.string().valid("fail-open","fail-closed"),$de=Yr.default.alternatives().try(Yr.default.boolean().custom(e=>e===!1?{enabled:!1}:{enabled:!0,...df}),Yr.default.object({enabled:Yr.default.boolean().default(!0),timeout:Yr.default.number().min(1e3).default(df.timeout).messages({"number.min":"CRL timeout must be at least 1000ms (1 second)"}),cacheTtl:Yr.default.number().min(1e3).default(df.cacheTtl).messages({"number.min":"CRL cacheTtl must be at least 1000ms (1 second)"}),failureMode:GO.default(df.failureMode),gracePeriod:Yr.default.number().min(0).default(df.gracePeriod).messages({"number.min":"CRL gracePeriod must be at least 0ms"})})),Vde=Yr.default.alternatives().try(Yr.default.boolean().custom(e=>e===!1?{enabled:!1}:{enabled:!0,...uf}),Yr.default.object({enabled:Yr.default.boolean().default(!0),timeout:Yr.default.number().min(1e3).default(uf.timeout).messages({"number.min":"OCSP timeout must be at least 1000ms (1 second)"}),cacheTtl:Yr.default.number().min(1e3).default(uf.cacheTtl).messages({"number.min":"OCSP cacheTtl must be at least 1000ms (1 second)"}),errorCacheTtl:Yr.default.number().min(1e3).default(uf.errorCacheTtl).messages({"number.min":"OCSP errorCacheTtl must be at least 1000ms (1 second)"}),failureMode:GO.default(uf.failureMode)})),Kde=Yr.default.object({failureMode:GO.default(qde),crl:$de.default({enabled:!0,...df}),ocsp:Vde.default({enabled:!0,...uf})});a(gK,"validateAndParseCertificateVerificationConfig")});function CK(e){if(typeof e=="boolean"||e==null){if(e===qO&&$O)return Eo.trace?.("Using cached validation error result (primitive) - returning disabled"),!1;if(e===qO&&HT!==null)return Eo.trace?.("Using cached certificate verification config (primitive)"),HT;Eo.trace?.("Parsing and caching certificate verification config (primitive)"),qO=e;try{return HT=RK(e),$O=null,HT}catch(n){return $O=n,Eo.error?.(`Certificate verification config validation failed - defaulting to disabled: ${n.message}`),!1}}if(yK.get(e))return Eo.trace?.("Using cached validation error result (object) - returning disabled"),!1;let r=TK.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=RK(e);return TK.set(e,n),n}catch(n){return yK.set(e,n),Eo.error?.(`Certificate verification config validation failed - defaulting to disabled: ${n.message}`),!1}}function RK(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:gK(t===!0?{}:t)}var bK,AK,Eo,IK,wK,NK,TK,qO,HT,yK,$O,VO=se(()=>{bK=b(ir()),AK=b(yt());SK();Eo=(0,bK.loggerWithTag)("cert-verification-config"),IK=10080*60*1e3,wK=3e5,NK=`Harper/${AK.packageJson.version} CRL-Client`,TK=new WeakMap,qO=null,HT=null,yK=new WeakMap,$O=null;a(CK,"getCachedCertificateVerificationConfig");a(RK,"getCertificateVerificationConfig")});function Mh(e){return e===PK||e===Yde}function Wde(e){return e===LK||e===DK}function KO(e){return e===PK?LK:DK}function jde(){if(OK)return;OK=!0;let e=tu.CryptoEngine.prototype,t=tu.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 Mh(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return Mh(s)?{name:KO(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return Wde(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=tu.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(Mh(i)){let o=KO(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(Mh(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),o=s.toSchema().toBER(!1),c=new Uh.X509Certificate(Buffer.from(i)),l=new Uh.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(Mh(c)){let l=KO(c);try{let u=this.crypto?.subtle||this.subtle||tu.getCrypto(!0)?.subtle||Uh.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 tu,Uh,PK,Yde,LK,DK,OK,vK=se(()=>{tu=b(require("pkijs")),Uh=require("node:crypto"),PK="1.3.101.112",Yde="1.3.101.113",LK="Ed25519",DK="Ed448",OK=!1;a(Mh,"isEd25519OrEd448");a(Wde,"isEdDSAAlgorithmName");a(KO,"getEdDSAAlgorithmName");a(jde,"applyEd25519Patch");jde()});var BK={};ye(BK,{CRLSignatureVerificationError:()=>xh,performCRLCheck:()=>Qde,verifyCRL:()=>jO});function zde(){return GT||(GT=FT(),GT.sourcedFrom(ff)),GT}function Jde(){return qT||(qT=ze({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}]}),qT.sourcedFrom(WO)),qT}function UK(){return YO||(YO=ze({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}]})),YO}async function jO(e,t,r,n){if(r?.enabled===!1)return{valid:!0,status:"disabled",method:"disabled"};try{let s=Ac(e,"CERTIFICATE"),i=Ac(t,"CERTIFICATE"),o=n??FO(s);if(o.length===0)return{valid:!0,status:"no-crl-distribution-points",method:"crl"};let c=BT(s,i,"crl"),l=await zde().get(c,{certPem:s,issuerPem:i,distributionPoint:o[0],config:{crl:r??{}}});if(!l)return Or.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"}:(Or.warn?.("CRL cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"crl"});let u=l,d=l.wasLoadedFromSource?.();return Or.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 Or.error?.(`CRL verification error: ${s}`),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:s.message,method:"crl"}:(Or.warn?.("CRL check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"crl"})}}async function Qde(e,t,r,n){let s=n??FO(e);if(s.length===0)return{status:"good"};let i=_K(e),o=HO(t),c=kO(o,i);try{let u=await UK().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?(Or.warn?.("Using expired CRL data within grace period"),{status:"revoked",reason:m.revocation_reason||"unspecified",source:m.crl_source}):(Or.warn?.("CRL data is too old, treating as unknown"),{status:"unknown",reason:"crl-expired"})}let d=await Xde(s,t,r);return d.upToDate?{status:"good",source:d.source}:(Or.warn?.("CRL data is stale or missing, treating as unknown"),{status:"unknown",reason:d.reason||"crl-unavailable"})}catch(l){return Or.error?.(`CRL lookup error: ${l}`),{status:"unknown",reason:l.message}}}async function Xde(e,t,r){let n=Date.now();for(let s of e)try{let i=Jde(),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 xK(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 xh)throw i}return{upToDate:!1,reason:"no-current-crl-data"}}async function xK(e,t,r){let n=new AbortController,s=setTimeout(()=>n.abort(),r);try{let i=await fetch(e,{signal:n.signal,headers:{"User-Agent":NK}});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(eu(l)):c=o;let u=$T.CertificateRevocationList.fromBER(c),d=$T.Certificate.fromBER(eu(t)),f=await u.verify({issuerCertificate:d});if(!f){let _=`CRL signature verification failed for: ${e}`;throw Or.error?.(_),new xh(_)}let m=u.thisUpdate.value.getTime(),p=u.nextUpdate?.value.getTime()??m+IK,h=d.issuer.typesAndValues.map(_=>`${_.type}=${_.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 Zde(u,t,e,p).catch(_=>{Or.error?.(`Error processing revoked certificates: ${_}`)}),E}finally{clearTimeout(s)}}async function Zde(e,t,r,n){let s=UK(),i=HO(t),o=r;try{await efe(s,o)}catch(c){Or.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){Or.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=kO(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){Or.warn?.(`Failed to process revoked certificate: ${l}`)}}async function efe(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){Or.warn?.(`Failed to delete revoked certificate entry: ${s}`)}}catch(r){throw Or.error?.(`Failed to search for existing CRL entries: ${r}`),r}}var $T,MK,xh,Or,GT,WO,qT,YO,zO=se(()=>{$T=b(require("pkijs")),MK=b(ir());Oe();Qi();kT();VO();JO();xh=class extends Error{static{a(this,"CRLSignatureVerificationError")}constructor(t){super(t),this.name="CRLSignatureVerificationError"}},Or=(0,MK.loggerWithTag)("crl-verification");a(zde,"getCertificateCacheTable");WO=class extends Xt{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 xK(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(Or.error?.(`CRL fetch error for: ${s} - ${c}`),o.failureMode==="fail-closed"){let l=Date.now()+wK;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 Or.warn?.("CRL fetch failed, not caching (fail-open mode)"),null}}};a(Jde,"getCRLCacheTable");a(UK,"getRevokedCertificateTable");a(jO,"verifyCRL");a(Qde,"performCRLCheck");a(Xde,"checkCRLFreshness");a(xK,"downloadAndParseCRL");a(Zde,"processRevokedCertificates");a(efe,"clearExistingCRLEntries")});async function tfe(){QO||(QO=(await Promise.resolve().then(()=>(zO(),BK))).performCRLCheck),XO||(XO=(await Promise.resolve().then(()=>(ZO(),kK))).performOCSPCheck)}var FK,_Be,QO,XO,ff,JO=se(()=>{Qi();FK=b(ir()),_Be=(0,FK.loggerWithTag)("cert-verification-source");a(tfe,"loadVerificationFunctions");ff=class extends Xt{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 tfe();let d,f;if(u==="crl"){f=l.crl;let p=s.distributionPoint?[s.distributionPoint]:void 0;d=await QO(i,o,f,p)}else if(u==="ocsp")f=l.ocsp,d=await XO(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 kK={};ye(kK,{performOCSPCheck:()=>nfe,verifyOCSP:()=>eP});function rfe(){return KT||(KT=FT(),KT.sourcedFrom(ff)),KT}async function eP(e,t,r,n){if(r?.enabled===!1)return{valid:!0,status:"disabled",method:"disabled"};try{let s=Ac(e,"CERTIFICATE"),i=Ac(t,"CERTIFICATE"),o=BT(s,i,"ocsp"),c=await rfe().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"}:(VT.warn?.("OCSP cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"});let l=c,u=c.wasLoadedFromSource?.();return VT.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 VT.error?.(`OCSP verification error: ${s}`),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:s.message,method:"ocsp"}:(VT.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"})}}async function nfe(e,t,r,n){try{let s=await(0,HK.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 HK,GK,VT,KT,ZO=se(()=>{vK();HK=require("easy-ocsp"),GK=b(ir());kT();JO();VT=(0,GK.loggerWithTag)("ocsp-verification");a(rfe,"getCertificateCacheTable");a(eP,"verifyOCSP");a(nfe,"performOCSPCheck")});async function mf(e,t){cn.debug?.(`verifyCertificate called for: ${e.subject?.CN||"unknown"}`);let r=CK(t);if(r===!1)return cn.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=hK(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=Ac(n[0].cert,"CERTIFICATE"),{crlUrls:i,ocspUrls:o}=EK(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 jO(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 eP(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 qK,cn,YT=se(()=>{qK=b(ir());kT();VO();ZO();zO();cn=(0,qK.loggerWithTag)("cert-verification");a(mf,"verifyCertificate")});var ia={};ye(ia,{buildReplicationMtlsConfig:()=>QK,clearThisNodeName:()=>ffe,disableReplication:()=>afe,enabledDatabases:()=>Rc,forEachReplicatedDatabase:()=>_c,getThisNodeId:()=>xT,getThisNodeName:()=>nt,getThisNodeUrl:()=>gc,hostnameToUrl:()=>QT,lastTimeInAuditStore:()=>bh,monitorNodeCAs:()=>XK,replicateOperation:()=>pfe,replicationCertificateAuthorities:()=>oa,sendOperationToNode:()=>Bh,servers:()=>ife,setReplicator:()=>eY,start:()=>ofe,startOnMainThread:()=>dO,subscribeToNode:()=>Nh,unsubscribeFromNode:()=>AT,urlToNodeName:()=>bi});function QK(e){return e?.mtls&&typeof e.mtls=="object"?e.mtls:!0}function ofe(e){if(!e.port&&!e.securePort&&(e.port=Ks.default.get(x.OPERATIONSAPI_NETWORK_PORT),e.securePort=Ks.default.get(x.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 Ih(e))t.set(bi(i.url),i);cfe(e);let r=QK(e);e={isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e,mtls:r};let n=Ue.ws(async(i,o,c,l)=>{if(It.debug("Incoming WS connection received "+o.url),o.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return l(i,o,c);i._socket.unref(),vh(i,e,c.then(()=>o?.user)),i.on("error",u=>{u.code!=="ECONNREFUSED"&&It.error("Error in connection to "+this.url,u.message)})},e);e.runFirst=!0,Ue.http(async(i,o)=>{if(i.isWebSocket&&i.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){It.debug("Incoming replication WS connection received, authorized: "+i.authorized),!i.authorized&&i._nodeRequest.socket.authorizationError&&It.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=Gt().primaryStore;if(i.authorized&&i.peerCertificate.subjectaltname){let l=(0,zK.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 mf(i.peerCertificate,e.mtls);if(!d.valid){It.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)){It.warn("Revoked certificate used in attempt to connect to node",u.name,"certificate serial number",i.peerCertificate.serialNumber);return}else i.user=u}else It.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:It.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(oa);l.options.availableCAs&&u.push(...l.options.availableCAs.values());let d={...l.options,ca:u};l.updatedContext=JT.createSecureContext(d)}catch(u){It.error("Error creating replication TLS config",u)}},"updateContexts");i.secureContextsListeners.push(o),s.push(o),Ks.default.get(x.REPLICATION_ENABLEROOTCAS)!==!1&&o()}XK(()=>{for(let i of s)i()})}function XK(e){let t=0;tf(r=>{r?.ca&&(oa.add(r.ca),oa.size!==t&&(t=oa.size,e?.()))})}function afe(e=!0){JK=e}function cfe(e){JK||(lt(),Rc=e.databases,_c(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||bc;for(let[s,i]of jT){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];eY(r,s,e),MO.get(s)?.forEach(i=>i(s))}}))}function eY(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 ZK extends Xt{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||bc,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(It.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new is,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===Ue.hostname)continue;let E=ufe(h,ZK.subscription,e);if(E?.isConnected){let _=ef(t.auditStore,e,h)[MT];(!d||_<m)&&(d=E,f=h,m=_)}}if(!d)throw l||new WK.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:sfe++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;It.warn("Error in load from node",zT,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function lfe(e,t,r,n,s,i){let o=t+"-"+e,c=jT.get(o);c||(c=new Map,jT.set(o,c));let l=c.get(n);if(l)return l;if(r)return c.set(n,l=new lf(t,r,n,s,i)),l.connect(),l.once("finished",()=>c.delete(n)),l}function ufe(e,t,r){let n=$K.get(e);n||(n=new Map,$K.set(e,n));let s=n.get(r);if(s)return s;let i=Gt().primaryStore.get(e);return i?.url&&(s=new lf(i.url,t,r,e,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function Bh(e,t,r){r||(r={}),r.serverName=e.name;let n=await UT(e.url,r),s=vh(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{It.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{It.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function Nh(e){try{jK.isMainThread&&It.warn("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=bc.get(e.database);if(!t){let n;t=new Promise(s=>{It.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,bc.set(e.database,t)}let r=lfe(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=>Ah(n,e.database)),e.replicateByDefault)}catch(t){It.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function AT({url:e,nodes:t,database:r}){It.trace("Unsubscribing from node",e,r,"nodes",Array.from(Gt().primaryStore.getRange({})));let n=e+"-"+(t[0]?.url??e),s=jT.get(n);if(s){let i=s.get(r);i&&(i.unsubscribe(),s.delete(r))}}function dfe(){if(tP!==void 0)return tP;let e=Ks.default.get(x.OPERATIONSAPI_TLS_CERTIFICATE)||Ks.default.get(x.TLS_CERTIFICATE);if(e)return tP=new KK.X509Certificate((0,YK.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function nt(){return zT||(zT=Ks.default.get("replication_hostname")??bi(Ks.default.get("replication_url"))??dfe()??VK("operationsapi_network_secureport")??VK("operationsapi_network_port")??"127.0.0.1")}function ffe(){zT=void 0}function VK(e){let t=Ks.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function WT(e){let t=Ks.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function xT(e){return Rh(e)?.[nt()]}function gc(){let e=Ks.default.get("replication_url");return e||QT(nt())}function QT(e){let t=WT("replication_port");if(t)return`ws://${e}:${t}`;if(t=WT("replication_secureport"),t)return`wss://${e}:${t}`;if(t=WT("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=WT("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function bi(e){if(e)return new URL(e).hostname}function _c(e,t){for(let n of Object.getOwnPropertyNames(Me))r(n);return ih(n=>{r(n)}),Vl((n,s)=>{r(n.databaseName)});function r(n){let s=Me[n];It.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):mfe(n)&&t(s,n,!1)}a(r,"forDatabase")}function mfe(e){let t=Me[e];for(let r in t)if(t[r].replicate)return!0}function bh(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function pfe(e){let t={message:""};if(e.replicated){e.replicated=!1,It.trace?.("Replicating operation",e.operation,"to nodes",Ue.nodes.map(n=>n.name));let r=await Promise.allSettled(Ue.nodes.map(n=>Bh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Ue.nodes[s]?.name,i})}return t}var Ks,It,KK,YK,JT,WK,jK,zK,JK,sfe,ife,oa,Rc,jT,$K,tP,zT,gs=se(()=>{Oe();Qi();$u();UO();Hr();Ks=b(fe()),It=b(Q()),KK=require("crypto");YT();YK=require("fs");Ch();rf();G();uO();JT=b(require("node:tls")),WK=b(Ee()),jK=require("worker_threads"),zK=b(Ts()),sfe=1,ife=[],oa=Ks.default.get(x.REPLICATION_ENABLEROOTCAS)!==!1?new Set(JT.rootCertificates):new Set;a(QK,"buildReplicationMtlsConfig");a(ofe,"start");a(XK,"monitorNodeCAs");a(afe,"disableReplication");a(cfe,"assignReplicationSource");a(eY,"setReplicator");jT=new Map;a(lfe,"getSubscriptionConnection");$K=new Map;a(ufe,"getRetrievalConnectionByName");a(Bh,"sendOperationToNode");a(Nh,"subscribeToNode");a(AT,"unsubscribeFromNode");a(dfe,"getCommonNameFromCert");a(nt,"getThisNodeName");a(ffe,"clearThisNodeName");Object.defineProperty(Ue,"hostname",{get(){return nt()}});a(VK,"getHostFromListeningPort");a(WT,"getPortFromListeningPort");a(xT,"getThisNodeId");Ue.replication={getThisNodeId:xT,exportIdMapping:Rh};a(gc,"getThisNodeUrl");a(QT,"hostnameToUrl");a(bi,"urlToNodeName");a(_c,"forEachReplicatedDatabase");a(mfe,"hasExplicitlyReplicatedTable");a(bh,"lastTimeInAuditStore");a(pfe,"replicateOperation")});var ry=M((GBe,iY)=>{"use strict";var pf=LV(),{validateBySchema:Fh}=ft(),{commonValidators:hf,schemaRegex:rP}=Zi(),Sr=require("joi"),hfe=Q(),Efe=require("uuid").v4,ey=Jo(),Ef=(G(),D(j)),_fe=require("util"),Ic=ps(),{handleHDBError:la,hdbErrors:gfe,ClientError:ru}=Ee(),{HDB_ERROR_MSGS:XT,HTTP_STATUS_CODES:ua}=gfe,{SchemaEventMsg:ty}=ds(),tY=lr(),{getDatabases:Sfe}=(Oe(),D(mt)),{transformReq:_f}=ae(),{replicateOperation:rY}=(gs(),D(ia)),{cleanupOrphans:Tfe}=(os(),D(ig)),ZT=Sr.string().min(1).max(hf.schema_length.maximum).pattern(rP).messages({"string.pattern.base":"{:#label} "+hf.schema_format.message}),yfe=Sr.string().min(1).max(hf.schema_length.maximum).pattern(rP).messages({"string.pattern.base":"{:#label} "+hf.schema_format.message}).required(),Rfe=Sr.string().min(1).max(hf.schema_length.maximum).pattern(rP).messages({"string.pattern.base":"{:#label} "+hf.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();iY.exports={createSchema:bfe,createSchemaStructure:nY,createTable:Afe,createTableStructure:sY,createAttribute:Ofe,dropSchema:Ife,dropTable:wfe,dropAttribute:Nfe,getBackup:Pfe,cleanupOrphanBlobs:Lfe};async function bfe(e){let t=await nY(e);return ey.signalSchemaChange(new ty(process.pid,e.operation,e.schema)),t}a(bfe,"createSchema");async function nY(e){let t=Fh(e,Sr.object({database:ZT,schema:ZT}));if(t)throw new ru(t.message);if(_f(e),!await pf.checkSchemaExists(e.schema))throw la(new Error,XT.SCHEMA_EXISTS_ERR(e.schema),ua.BAD_REQUEST,Ef.LOG_LEVELS.ERROR,XT.SCHEMA_EXISTS_ERR(e.schema),!0);return await Ic.createSchema(e),`database '${e.schema}' successfully created`}a(nY,"createSchemaStructure");async function Afe(e){return _f(e),e.hash_attribute=e.primary_key??e.hash_attribute,await sY(e)}a(Afe,"createTable");async function sY(e){let t=Fh(e,Sr.object({database:ZT,schema:ZT,table:yfe,residence:Sr.array().items(Sr.string().min(1)).optional(),hash_attribute:Rfe}));if(t)throw new ru(t.message);if(!await pf.checkSchemaTableExists(e.schema,e.table))throw la(new Error,XT.TABLE_EXISTS_ERR(e.schema,e.table),ua.BAD_REQUEST,Ef.LOG_LEVELS.ERROR,XT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Efe(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Ic.createTable(n,e);else throw la(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",ua.BAD_REQUEST);else await Ic.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(sY,"createTableStructure");async function Ife(e){let t=Fh(e,Sr.object({database:Sr.string(),schema:Sr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new ru(t.message);_f(e);let r=await pf.checkSchemaExists(e.schema);if(r)throw la(new Error,r,ua.NOT_FOUND,Ef.LOG_LEVELS.ERROR,r,!0);let n=await pf.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await Ic.dropSchema(e),ey.signalSchemaChange(new ty(process.pid,e.operation,e.schema)),await tY.purgeSchemaTableStreams(e.schema,s);let i=await rY(e);return i.message=`successfully deleted '${e.schema}'`,i}a(Ife,"dropSchema");async function wfe(e){let t=Fh(e,Sr.object({database:Sr.string(),schema:Sr.string(),table:Sr.string().required()}));if(t)throw new ru(t.message);_f(e);let r=await pf.checkSchemaTableExists(e.schema,e.table);if(r)throw la(new Error,r,ua.NOT_FOUND,Ef.LOG_LEVELS.ERROR,r,!0);await Ic.dropTable(e),await tY.purgeTableStream(e.schema,e.table);let n=await rY(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(wfe,"dropTable");async function Nfe(e){let t=Fh(e,Sr.object({database:Sr.string(),schema:Sr.string(),table:Sr.string().required(),attribute:Sr.string().required()}));if(t)throw new ru(t.message);_f(e);let r=await pf.checkSchemaTableExists(e.schema,e.table);if(r)throw la(new Error,r,ua.NOT_FOUND,Ef.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw la(new Error,"You cannot drop a hash attribute",ua.BAD_REQUEST,void 0,void 0,!0);if(Ef.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw la(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,ua.BAD_REQUEST,void 0,void 0,!0);try{return await Ic.dropAttribute(e),Cfe(e),ey.signalSchemaChange(new ty(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw hfe.error(`Got an error deleting attribute ${_fe.inspect(e)}.`),n}}a(Nfe,"dropAttribute");function Cfe(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(Cfe,"dropAttributeFromGlobal");async function Ofe(e){_f(e);let t=Sfe()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw la(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,ua.BAD_REQUEST,void 0,void 0,!0);return await Ic.createAttribute(e),ey.signalSchemaChange(new ty(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Ofe,"createAttribute");function Pfe(e){return Ic.getBackup(e)}a(Pfe,"getBackup");function Lfe(e){if(!e.database)throw new ru('Must provide "database" name for search for orphaned blobs');if(!databases[e.database])throw new ru(`Unknown database '${e.database}'`);return Tfe(databases[e.database],e.database),{message:"Orphaned blobs cleanup started, check logs for progress"}}a(Lfe,"cleanupOrphanBlobs")});var aY=M(($Be,oY)=>{"use strict";var{OPERATIONS_ENUM:Dfe}=(G(),D(j)),nP=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Dfe.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};oY.exports=nP});var sP=M((YBe,fY)=>{"use strict";var vfe=ps(),KBe=aY(),ny=ae(),sy=(G(),D(j)),Mfe=fe(),{handleHDBError:cY,hdbErrors:Ufe}=Ee(),{HDB_ERROR_MSGS:lY,HTTP_STATUS_CODES:uY}=Ufe,xfe=Object.values(sy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),dY="To use this operation audit log must be enabled in harperdb-config.yaml";fY.exports=Bfe;async function Bfe(e){if(ny.isEmpty(e.schema))throw new Error(lY.SCHEMA_REQUIRED_ERR);if(ny.isEmpty(e.table))throw new Error(lY.TABLE_REQUIRED_ERR);if(!Mfe.get(sy.CONFIG_PARAMS.LOGGING_AUDITLOG))throw cY(new Error,dY,uY.BAD_REQUEST,sy.LOG_LEVELS.ERROR,dY,!0);let t=ny.checkSchemaTableExist(e.schema,e.table);if(t)throw cY(new Error,t,uY.NOT_FOUND,sy.LOG_LEVELS.ERROR,t,!0);if(!ny.isEmpty(e.search_type)&&xfe.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await vfe.readAuditLog(e)}a(Bfe,"readAuditLog")});var pY=M((jBe,mY)=>{"use strict";var{OPERATIONS_ENUM:Ffe}=(G(),D(j)),iP=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Ffe.GET_BACKUP,this.schema=t,this.table=r}};mY.exports=iP});var _Y=M((XBe,EY)=>{"use strict";var kfe=ps(),JBe=pY(),oP=ae(),Hfe=(G(),D(j)),QBe=fe(),{handleHDBError:Gfe,hdbErrors:qfe}=Ee(),{HDB_ERROR_MSGS:hY,HTTP_STATUS_CODES:$fe}=qfe;EY.exports=Vfe;async function Vfe(e){if(oP.isEmpty(e.schema))throw new Error(hY.SCHEMA_REQUIRED_ERR);if(oP.isEmpty(e.table))throw new Error(hY.TABLE_REQUIRED_ERR);let t=oP.checkSchemaTableExist(e.schema,e.table);if(t)throw Gfe(new Error,t,$fe.NOT_FOUND,Hfe.LOG_LEVELS.ERROR,t,!0);return await kfe.getBackup(readAuditLogObject)}a(Vfe,"getBackup")});var TY=M((eFe,SY)=>{"use strict";var Kfe=fe(),da=require("joi"),Yfe=ft(),gY=require("moment"),Wfe=require("fs-extra"),cP=require("path"),jfe=require("lodash"),kh=(G(),D(j)),{LOG_LEVELS:nu}=(G(),D(j)),zfe="YYYY-MM-DD hh:mm:ss",Jfe=cP.resolve(__dirname,"../logs");SY.exports=function(e){return Yfe.validateBySchema(e,Qfe)};var Qfe=da.object({from:da.custom(aP),until:da.custom(aP),to:da.custom(aP),level:da.valid(nu.NOTIFY,nu.FATAL,nu.ERROR,nu.WARN,nu.INFO,nu.DEBUG,nu.TRACE),order:da.valid("asc","desc"),limit:da.number().min(1),start:da.number().min(0),log_name:da.custom(Xfe)});function aP(e,t){if(gY(e,gY.ISO_8601).format(zfe)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(aP,"validateDatetime");function Xfe(e,t){if(jfe.invert(kh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Kfe.get(kh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?kh.LOG_NAMES.HDB:e,i=s===kh.LOG_NAMES.INSTALL?cP.join(Jfe,kh.LOG_NAMES.INSTALL):cP.join(n,s);return Wfe.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(Xfe,"validateReadLogPath")});var uP=M((rFe,RY)=>{"use strict";var iy=(G(),D(j)),Zfe=Q(),eme=fe(),tme=TY(),lP=require("path"),yY=require("fs-extra"),{once:rme}=require("events"),{handleHDBError:nme,hdbErrors:sme}=Ee(),{PACKAGE_ROOT:ime}=yt(),{replicateOperation:ome}=(gs(),D(ia)),ame=lP.join(ime,"logs"),cme=1e3,lme=200;RY.exports=ume;async function ume(e){let t=tme(e);if(t)throw nme(t,t.message,sme.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=ome(e),n=eme.get(iy.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?iy.LOG_NAMES.HDB:e.log_name,i=s===iy.LOG_NAMES.INSTALL?lP.join(ame,iy.LOG_NAMES.INSTALL):lP.join(n,s);e.to===void 0&&e.until!==void 0&&(e.to=e.until);let 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.to!==void 0,f=d?new Date(e.to):void 0,m=e.limit===void 0?cme:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,_=0;p==="desc"&&!u&&!f&&(_=Math.max(yY.statSync(i).size-(E+5)*lme,0));let R=yY.createReadStream(i,{start:_});R.on("error",q=>{Zfe.error(q)});let S=0,y=[],w="",I;R.on("data",q=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d.]+Z) \[(.+?)]: /g;q=w+q;let z=0,Y;for(;(Y=k.exec(q))&&!R.destroyed;){I&&(I.message=q.slice(z,Y.index),H(I));let[ce,de,te]=Y,Se=te.split("] ["),Ne=Se[0],Ke=Se[1];Se.splice(0,2),I={timestamp:de,thread:Ne,level:Ke,tags:Se,message:""},z=Y.index+ce.length}w=q.slice(z)}),R.on("end",q=>{R.destroyed||I&&(I.message=w.trim(),H(I))}),R.resume();function H(q){let k,z,Y;switch(!0){case(o&&l&&d):k=new Date(q.timestamp),z=new Date(u),Y=new Date(f),q.level===c&&k>=z&&k<=Y&&S<h?S++:q.level===c&&k>=z&&k<=Y&&(_o(q,p,y),S++,S===E&&R.destroy());break;case(o&&l):k=new Date(q.timestamp),z=new Date(u),q.level===c&&k>=z&&S<h?S++:q.level===c&&k>=z&&(_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),z=new Date(u),Y=new Date(f),k>=z&&k<=Y&&S<h?S++:k>=z&&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),z=new Date(u),k>=z&&S<h?S++:k>=z&&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(H,"onLogMessage"),await rme(R,"close");let X=await r;if(X.replicated){for(let q of y)q.node=server.hostname;for(let q of X.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 z of q.results)z.node=k,_o(z,p,y)}}return y}a(ume,"readLog");function _o(e,t,r){t==="desc"?dme(e,r):t==="asc"?fme(e,r):r.push(e)}a(_o,"pushLineToResult");function dme(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(dme,"insertDescending");function fme(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(fme,"insertAscending")});var oy=M((cFe,wY)=>{"use strict";var dP=require("joi"),{string:gf,boolean:bY,date:mme}=dP.types(),pme=ft(),{validateSchemaExists:sFe,validateTableExists:iFe,validateSchemaName:oFe}=Zi(),hme=(G(),D(j)),Eme=Dt(),AY=fe();AY.initSync();var aFe=gf.invalid(AY.get(hme.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(Eme.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),IY={operation:gf.valid("add_node","update_node","set_node_replication"),node_name:gf.optional(),subscriptions:dP.array().items({table:gf.optional(),schema:gf.optional(),database:gf.optional(),subscribe:bY.required(),publish:bY.required().custom(gme),start_time:mme.iso()})};function _me(e){return pme.validateBySchema(e,dP.object(IY))}a(_me,"addUpdateNodeValidator");function gme(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(gme,"checkForFalsy");wY.exports={addUpdateNodeValidator:_me,validationSchema:IY}});var Sf=M((uFe,NY)=>{"use strict";var fP=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},mP=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};NY.exports={Node:fP,NodeSubscription:mP}});var OY=M((fFe,CY)=>{"use strict";var Sme=(G(),D(j)).OPERATIONS_ENUM,pP=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Sme.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};CY.exports=pP});var Hh=M((pFe,PY)=>{"use strict";var hP=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},EP=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:hP,RemotePayloadSubscription:EP}});var DY=M((EFe,LY)=>{"use strict";var _P=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}};LY.exports=_P});var MY=M((RFe,vY)=>{"use strict";var Tme=DY(),gFe=Jt(),SFe=gt(),yme=Q(),{getSchemaPath:TFe,getTransactionAuditStorePath:yFe}=Rt(),{getDatabases:Rme}=(Oe(),D(mt));vY.exports=bme;async function bme(e){let t=new Tme;try{let r=Rme()[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){yme.warn(`unable to stat table dbi due to ${r}`)}return t}a(bme,"lmdbGetTableSize")});var xY=M((AFe,UY)=>{"use strict";var gP=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}};UY.exports=gP});var qh=M((PFe,HY)=>{"use strict";var Ame=require("fs-extra"),Ime=require("path"),An=require("systeminformation"),wc=Q(),BY=lr(),wFe=Dt(),Tf=(G(),D(j)),wme=MY(),Nme=Yl(),{getThreadInfo:FY}=st(),Gh=fe();Gh.initSync();var Cme=xY(),{openEnvironment:NFe}=gt(),{getSchemaPath:CFe}=Rt(),{database:OFe,databases:SP}=(Oe(),D(mt)),ay;HY.exports={getHDBProcessInfo:bP,getNetworkInfo:IP,getDiskInfo:AP,getMemoryInfo:RP,getCPUInfo:yP,getTimeInfo:TP,getSystemInformation:wP,systemInformation:Ome,getTableSize:NP,getMetrics:CP};function TP(){return An.time()}a(TP,"getTimeInfo");async function yP(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...d}=await An.cpu();d.cpu_speed=await An.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:_,cpus:R,...S}=await An.currentLoad();return S.cpus=[],R.forEach(y=>{let{rawLoad:w,rawLoadIdle:I,rawLoadIrq:H,rawLoadNice:X,rawLoadSystem:q,rawLoadUser:k,...z}=y;S.cpus.push(z)}),d.current_load=S,d}catch(e){return wc.error(`error in getCPUInfo: ${e}`),{}}}a(yP,"getCPUInfo");async function RP(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await An.mem();return Object.assign(s,process.memoryUsage())}catch(e){return wc.error(`error in getMemoryInfo: ${e}`),{}}}a(RP,"getMemoryInfo");async function bP(){let e={core:[],clustering:[]};try{let t=await An.processes(),r;try{r=Number.parseInt(await Ame.readFile(Ime.join(Gh.get(Tf.CONFIG_PARAMS.ROOTPATH),Tf.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Tf.NODE_ERROR_CODES.ENOENT)wc.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 wc.error(`error in getHDBProcessInfo: ${t}`),e}}a(bP,"getHDBProcessInfo");async function AP(){let e={};try{if(!Gh.get(Tf.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await An.disksIO();e.io=i;let{rxSec:o,txSec:c,wxSec:l,...u}=await An.fsStats();return e.read_write=u,e.size=await An.fsSize(),e}catch(t){return wc.error(`error in getDiskInfo: ${t}`),e}}a(AP,"getDiskInfo");async function IP(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Gh.get(Tf.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await An.networkInterfaceDefault(),e.latency=await An.inetChecksite("google.com"),(await An.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 An.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return wc.error(`error in getNetworkInfo: ${t}`),e}}a(IP,"getNetworkInfo");async function wP(){if(ay!==void 0)return ay;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await An.osInfo();e=c;let l=await An.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,ay=e,ay}catch(t){return wc.error(`error in getSystemInformation: ${t}`),e}}a(wP,"getSystemInformation");async function NP(){let e=[],t=await Nme.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await wme(n));return e}a(NP,"getTableSize");async function CP(){let e={};for(let t in SP){let r=e[t]={},n=r.tables={};for(let s in SP[t])try{let i=SP[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){wc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(CP,"getMetrics");async function kY(){if(Gh.get(Tf.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await BY.getNATSReferences(),t=await BY.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(kY,"getNatsStreamInfo");async function Ome(e){let t=new Cme;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await wP(),t.time=TP(),t.cpu=await yP(),t.memory=await RP(),t.disk=await AP(),t.network=await IP(),t.harperdb_processes=await bP(),t.table_size=await NP(),t.metrics=await CP(),t.threads=await FY(),t.replication=await kY(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await wP();break;case"time":t.time=TP();break;case"cpu":t.cpu=await yP();break;case"memory":t.memory=await RP();break;case"disk":t.disk=await AP();break;case"network":t.network=await IP();break;case"harperdb_processes":t.harperdb_processes=await bP();break;case"table_size":t.table_size=await NP();break;case"database_metrics":case"metrics":t.metrics=await CP();break;case"threads":t.threads=await FY();break;case"replication":t.replication=await kY();break;default:break}return t}a(Ome,"systemInformation")});var fa=M((UFe,VY)=>{"use strict";var Pme=Vn(),OP=ae(),Lme=require("util"),su=(G(),D(j)),GY=fe();GY.initSync();var Dme=LC(),qY=Sn(),{Node:DFe,NodeSubscription:vFe}=Sf(),vme=hd(),Mme=OY(),{RemotePayloadObject:Ume,RemotePayloadSubscription:xme}=Hh(),{handleHDBError:Bme,hdbErrors:Fme}=Ee(),{HTTP_STATUS_CODES:kme,HDB_ERROR_MSGS:Hme}=Fme,Gme=fi(),qme=qh(),{packageJson:$me}=yt(),{getDatabases:Vme}=(Oe(),D(mt)),MFe=Lme.promisify(Dme.authorize),Kme=qY.searchByHash,Yme=qY.searchByValue;VY.exports={isEmpty:Wme,getNodeRecord:jme,upsertNodeRecord:zme,buildNodePayloads:Jme,checkClusteringEnabled:Qme,getAllNodeRecords:Xme,getSystemInfo:Zme,reverseSubscription:$Y};function Wme(e){return e==null}a(Wme,"isEmpty");async function jme(e){let t=new vme(su.SYSTEM_SCHEMA_NAME,su.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Kme(t)}a(jme,"getNodeRecord");async function zme(e){let t=new Mme(su.SYSTEM_SCHEMA_NAME,su.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Pme.upsert(t)}a(zme,"upsertNodeRecord");function $Y(e){if(OP.isEmpty(e.subscribe)||OP.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($Y,"reverseSubscription");function Jme(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=OP.getTableHashAttribute(l,u),{subscribe:f,publish:m}=$Y(c),p=Vme()[l]?.[u],h=new xme(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new Ume(r,t,s,n)}a(Jme,"buildNodePayloads");function Qme(){if(!GY.get(su.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Bme(new Error,Hme.CLUSTERING_NOT_ENABLED,kme.BAD_REQUEST,void 0,void 0,!0)}a(Qme,"checkClusteringEnabled");async function Xme(){let e=new Gme(su.SYSTEM_SCHEMA_NAME,su.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Yme(e))}a(Xme,"getAllNodeRecords");async function Zme(){let e=await qme.getSystemInformation();return{hdb_version:$me.version,node_version:e.node_version,platform:e.platform}}a(Zme,"getSystemInfo")});var PP=M((BFe,XY)=>{"use strict";var cy=lr(),KY=ae(),YY=Dt(),WY=(G(),D(j)),ly=Q(),jY=ry(),epe=wp(),{RemotePayloadObject:tpe}=Hh(),{handleHDBError:zY,hdbErrors:rpe}=Ee(),{HTTP_STATUS_CODES:JY}=rpe,{NodeSubscription:QY}=Sf();XY.exports=npe;async function npe(e,t){let r;try{r=await cy.request(`${t}.${YY.REQUEST_SUFFIX}`,new tpe(WY.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),ly.trace("Response from remote describe all request:",r)}catch(o){ly.error(`addNode received error from describe all request to remote node: ${o}`);let c=cy.requestErrorHandler(o,"add_node",t);throw zY(new Error,c,JY.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===YY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw zY(new Error,o,JY.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===WY.SYSTEM_SCHEMA_NAME){await cy.createLocalTableStream(l,c);let h=new QY(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let u=KY.doesSchemaExist(l),d=n[l]!==void 0,f=c?KY.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(o);continue}if(!u&&d&&(ly.trace(`addNode creating schema: ${l}`),await jY.createSchema({operation:"create_schema",schema:l})),!f&&m){ly.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new epe(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await jY.createTable(h)}await cy.createLocalTableStream(l,c);let p=new QY(l,c,o.publish,o.subscribe);p.start_time=o.start_time,i.push(p)}return{added:i,skipped:s}}a(npe,"reviewSubscriptions")});var yf={};ye(yf,{addNodeBack:()=>LP,removeNodeBack:()=>DP,setNode:()=>ape});async function ape(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=bi(t)):t=QT(r);let n=(0,eW.validateBySchema)(e,ope);if(n)throw(0,ma.handleHDBError)(n,n.message,ipe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new ma.ClientError("url or hostname is required for remove_node operation");let p=r,h=Gt(),E=await h.get(p);if(!E)throw new ma.ClientError(p+" does not exist");try{await Bh({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?nt():p},void 0)}catch(_){ys.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:`,_)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new ma.ClientError("url required for this operation");let s=gc();if(s==null)throw new ma.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,Ys.getReplicationCert)();let p=await(0,Ys.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,Ys.createCsr)(),ys.info("Sending CSR to target node:",t)):p&&(c=p.certificate,ys.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,Cc.get)(x.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,Cc.get)(x.REPLICATION_SHARD)!==void 0&&(l.shard=(0,Cc.get)(x.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(ZY):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=ZY(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 Bh({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,ys.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&&(ys.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Ys.setCertTable)({name:spe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Ys.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,Cc.get)(x.REPLICATION_SHARD)!==void 0&&(p.shard=(0,Cc.get)(x.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await na(nt(),p)}await na(u?u.nodeName:f.name??bi(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 LP(e){ys.trace("addNodeBack received request:",e);let t=await(0,Ys.signCertificate)(e),r;e.csr?(r=t.signingCA,ys.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,ys.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,Ys.getReplicationCertAuth)();if(n.replicates){let i={url:gc(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,Cc.get)(x.REPLICATION_SHARD)!==void 0&&(i.shard=(0,Cc.get)(x.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await na(nt(),i)}return await na(e.hostname,n),t.nodeName=nt(),t.usingCA=s?.certificate,ys.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function DP(e){ys.trace("removeNodeBack received request:",e),await Gt().delete(e.name)}function ZY(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Ys,eW,Nc,Cc,ys,ma,spe,ipe,ope,Rf=se(()=>{Ys=b(Ts()),eW=b(ft()),Nc=b(require("joi")),Cc=b(fe());G();Ch();rf();gs();ys=b(Q()),ma=b(Ee()),{pki:spe}=require("node-forge"),{HTTP_STATUS_CODES:ipe}=ma.hdbErrors,ope=Nc.default.object({hostname:Nc.default.string(),verify_tls:Nc.default.boolean(),replicates:Nc.default.boolean(),subscriptions:Nc.default.array(),revoked_certificates:Nc.default.array(),shard:Nc.default.number()});a(ape,"setNode");a(LP,"addNodeBack");a(DP,"removeNodeBack");a(ZY,"reverseSubscription")});var py=M((YFe,rW)=>{"use strict";var{handleHDBError:uy,hdbErrors:cpe}=Ee(),{HTTP_STATUS_CODES:dy}=cpe,{addUpdateNodeValidator:lpe}=oy(),fy=Q(),my=(G(),D(j)),tW=Dt(),upe=ae(),$h=lr(),Vh=fa(),vP=fe(),dpe=PP(),{Node:fpe,NodeSubscription:mpe}=Sf(),{broadcast:ppe}=st(),{setNode:hpe}=(Rf(),D(yf)),VFe=fe(),KFe=(G(),D(j)),Epe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",_pe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",gpe=vP.get(my.CONFIG_PARAMS.CLUSTERING_NODENAME);rW.exports=Spe;async function Spe(e,t=!1){if(fy.trace("addNode called with:",e),vP.get(my.CONFIG_PARAMS.REPLICATION_URL)||vP.get(my.CONFIG_PARAMS.REPLICATION_HOSTNAME))return hpe(e);Vh.checkClusteringEnabled();let r=lpe(e);if(r)throw uy(r,r.message,dy.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await Vh.getNodeRecord(n);if(!upe.isEmptyOrZeroLength(f))throw uy(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,dy.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await dpe(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Epe,o;let c=Vh.buildNodePayloads(s,gpe,my.OPERATIONS_ENUM.ADD_NODE,await Vh.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 mpe(p.schema,p.table,p.publish,p.subscribe))}fy.trace("addNode sending remote payload:",c);let u;try{u=await $h.request(`${n}.${tW.REQUEST_SUFFIX}`,c)}catch(f){fy.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 $h.updateRemoteConsumer(E,n)}let m=$h.requestErrorHandler(f,"add_node",n);throw uy(new Error,m,dy.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===tW.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw uy(new Error,f,dy.INTERNAL_SERVER_ERROR,"error",f)}fy.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await $h.updateRemoteConsumer(p,n),p.subscribe===!0&&await $h.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new fpe(n,l,u.system_info);return await Vh.upsertNodeRecord(d),ppe({type:"nats_update"}),i.length>0?o.message=_pe:o.message=`Successfully added '${n}' to manifest`,o}a(Spe,"addNode")});var BP=M((zFe,sW)=>{"use strict";var{handleHDBError:MP,hdbErrors:Tpe}=Ee(),{HTTP_STATUS_CODES:UP}=Tpe,{addUpdateNodeValidator:ype}=oy(),Kh=Q(),hy=(G(),D(j)),nW=Dt(),jFe=ae(),Yh=lr(),Wh=fa(),xP=fe(),{cloneDeep:Rpe}=require("lodash"),bpe=PP(),{Node:Ape,NodeSubscription:Ipe}=Sf(),{broadcast:wpe}=st(),{setNode:Npe}=(Rf(),D(yf)),Cpe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Ope="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Ppe=xP.get(hy.CONFIG_PARAMS.CLUSTERING_NODENAME);sW.exports=Lpe;async function Lpe(e){if(Kh.trace("updateNode called with:",e),xP.get(hy.CONFIG_PARAMS.REPLICATION_URL)??xP.get(hy.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Npe(e);Wh.checkClusteringEnabled();let t=ype(e);if(t)throw MP(t,t.message,UP.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Wh.getNodeRecord(r);s.length>0&&(n=Rpe(s));let{added:i,skipped:o}=await bpe(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Cpe,c;let l=Wh.buildNodePayloads(i,Ppe,hy.OPERATIONS_ENUM.UPDATE_NODE,await Wh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];Kh.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}Kh.trace("updateNode sending remote payload:",l);let u;try{u=await Yh.request(`${r}.${nW.REQUEST_SUFFIX}`,l)}catch(d){Kh.error(`updateNode received error from request: ${d}`);let f=Yh.requestErrorHandler(d,"update_node",r);throw MP(new Error,f,UP.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===nW.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw MP(new Error,d,UP.INTERNAL_SERVER_ERROR,"error",d)}Kh.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await Yh.updateRemoteConsumer(m,r),m.subscribe===!0?await Yh.updateConsumerIterator(m.schema,m.table,r,"start"):await Yh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new Ape(r,[],u.system_info)]),await Dpe(n[0],i,u.system_info),o.length>0?c.message=Ope:c.message=`Successfully updated '${r}'`,c}a(Lpe,"updateNode");async function Dpe(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 Ipe(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Wh.upsertNodeRecord(n),wpe({type:"nats_update"})}a(Dpe,"updateNodeTable")});var lW=M((QFe,cW)=>{"use strict";var aW=require("joi"),{string:iW}=aW.types(),vpe=ft(),oW=(G(),D(j)),Mpe=fe(),Upe=Dt();cW.exports=xpe;function xpe(e){let t=iW.invalid(Mpe.get(oW.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Upe.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=aW.object({operation:iW.valid(oW.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return vpe.validateBySchema(e,r)}a(xpe,"removeNodeValidator")});var Ey=M((ZFe,pW)=>{"use strict";var{handleHDBError:uW,hdbErrors:Bpe}=Ee(),{HTTP_STATUS_CODES:dW}=Bpe,Fpe=lW(),jh=Q(),fW=fa(),kpe=ae(),bf=(G(),D(j)),mW=Dt(),FP=lr(),kP=fe(),{RemotePayloadObject:Hpe}=Hh(),{NodeSubscription:Gpe}=Sf(),qpe=Ip(),$pe=Bl(),{broadcast:Vpe}=st(),{setNode:Kpe}=(Rf(),D(yf)),Ype=kP.get(bf.CONFIG_PARAMS.CLUSTERING_NODENAME);pW.exports=Wpe;async function Wpe(e){if(jh.trace("removeNode called with:",e),kP.get(bf.CONFIG_PARAMS.REPLICATION_URL)??kP.get(bf.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Kpe(e);fW.checkClusteringEnabled();let t=Fpe(e);if(t)throw uW(t,t.message,dW.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await fW.getNodeRecord(r);if(kpe.isEmptyOrZeroLength(n))throw uW(new Error,`Node '${r}' was not found.`,dW.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Hpe(bf.OPERATIONS_ENUM.REMOVE_NODE,Ype,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await FP.updateConsumerIterator(d.schema,d.table,r,"stop");try{await FP.updateRemoteConsumer(new Gpe(d.schema,d.table,!1,!1),r)}catch(f){jh.error(f)}}try{i=await FP.request(`${r}.${mW.REQUEST_SUFFIX}`,s),jh.trace("Remove node reply from remote node:",r,i)}catch(l){jh.error("removeNode received error from request:",l),o=!0}let c=new qpe(bf.SYSTEM_SCHEMA_NAME,bf.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await $pe.deleteRecord(c),Vpe({type:"nats_update"}),i?.status===mW.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(jh.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(Wpe,"removeNode")});var _W=M((tke,EW)=>{"use strict";var hW=require("joi"),{string:jpe,array:zpe}=hW.types(),Jpe=ft(),Qpe=oy();EW.exports=Xpe;function Xpe(e){let t=hW.object({operation:jpe.valid("configure_cluster").required(),connections:zpe.items(Qpe.validationSchema).required()});return Jpe.validateBySchema(e,t)}a(Xpe,"configureClusterValidator")});var HP=M((nke,RW)=>{"use strict";var gW=(G(),D(j)),_y=Q(),Zpe=ae(),ehe=fe(),the=Ey(),rhe=py(),nhe=fa(),she=_W(),{handleHDBError:SW,hdbErrors:ihe}=Ee(),{HTTP_STATUS_CODES:TW}=ihe,ohe="Configure cluster complete.",ahe="Failed to configure the cluster. Check the logs for more details.",che="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";RW.exports=lhe;async function lhe(e){_y.trace("configure cluster called with:",e);let t=she(e);if(t)throw SW(t,t.message,TW.BAD_REQUEST,void 0,void 0,!0);let r=await nhe.getAllNodeRecords(),n=[];if(ehe.get(gW.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await yW(the,{operation:gW.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}_y.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 yW(rhe,f,f.node_name);s.push(m)}_y.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"&&(_y.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(Zpe.isEmptyOrZeroLength(o))return{message:ohe,connections:c};if(l)return{message:che,failed_nodes:o,connections:c};throw SW(new Error,ahe,TW.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(lhe,"configureCluster");async function yW(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(yW,"functionWrapper")});var wW=M((ike,IW)=>{"use strict";var zh=require("joi"),uhe=ft(),{validateSchemaExists:bW,validateTableExists:dhe,validateSchemaName:AW}=Zi(),fhe=zh.object({operation:zh.string().valid("purge_stream"),schema:zh.string().custom(bW).custom(AW).optional(),database:zh.string().custom(bW).custom(AW).optional(),table:zh.string().custom(dhe).required()});function mhe(e){return uhe.validateBySchema(e,fhe)}a(mhe,"purgeStreamValidator");IW.exports=mhe});var GP=M((ake,NW)=>{"use strict";var{handleHDBError:phe,hdbErrors:hhe}=Ee(),{HTTP_STATUS_CODES:Ehe}=hhe,_he=wW(),ghe=lr(),She=fa();NW.exports=The;async function The(e){e.schema=e.schema??e.database;let t=_he(e);if(t)throw phe(t,t.message,Ehe.BAD_REQUEST,void 0,void 0,!0);She.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await ghe.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(The,"purgeStream")});var VP=M((lke,UW)=>{"use strict";var $P=fa(),yhe=lr(),Sy=fe(),Af=(G(),D(j)),iu=Dt(),Rhe=ae(),qP=Q(),{RemotePayloadObject:bhe}=Hh(),{ErrorCode:CW}=require("nats"),{parentPort:OW}=require("worker_threads"),{onMessageByType:Ahe}=st(),{getThisNodeName:Ihe}=(gs(),D(ia)),{requestClusterStatus:whe}=(Ch(),D(R1)),{getReplicationSharedStatus:Nhe,getHDBNodeTable:Che}=(rf(),D(h1)),{CONFIRMATION_STATUS_POSITION:Ohe,RECEIVED_VERSION_POSITION:PW,RECEIVED_TIME_POSITION:Phe,SENDING_TIME_POSITION:Lhe,RECEIVING_STATUS_POSITION:Dhe,RECEIVING_STATUS_RECEIVING:vhe,BACK_PRESSURE_RATIO_POSITION:Mhe}=(UO(),D(mK)),LW=Sy.get(Af.CONFIG_PARAMS.CLUSTERING_ENABLED),DW=Sy.get(Af.CONFIG_PARAMS.CLUSTERING_NODENAME);UW.exports={clusterStatus:Uhe,buildNodeStatus:MW};var vW;Ahe("cluster-status",async e=>{vW(e)});async function Uhe(){if(Sy.get(Af.CONFIG_PARAMS.REPLICATION_URL)||Sy.get(Af.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;OW?(OW.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{vW=i})):n=whe();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=Nhe(u,l,o);c.lastCommitConfirmed=gy(d[Ohe]),c.lastReceivedRemoteTime=gy(d[PW]),c.lastReceivedLocalTime=gy(d[Phe]),c.lastReceivedVersion=d[PW],c.sendingMessage=gy(d[Lhe]),c.backPressurePercent=d[Mhe]*100,c.lastReceivedStatus=d[Dhe]===vhe?"Receiving":"Waiting"}}n.node_name=Ihe();let s=Che().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:DW,is_enabled:LW,connections:[]};if(!LW)return e;let t=await $P.getAllNodeRecords();if(Rhe.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(MW(t[n],e.connections));return await Promise.allSettled(r),e}a(Uhe,"clusterStatus");function gy(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}a(gy,"asDate");async function MW(e,t){let r=e.name,n=new bhe(Af.OPERATIONS_ENUM.CLUSTER_STATUS,DW,void 0,await $P.getSystemInfo()),s,i,o=iu.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await yhe.request(iu.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===iu.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=iu.CLUSTER_STATUS_STATUSES.CLOSED,qP.error(`Error getting node status from ${r} `,s))}catch(l){qP.warn(`Error getting node status from ${r}`,l),l.code===CW.NoResponders?o=iu.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===CW.Timeout?o=iu.CLUSTER_STATUS_STATUSES.TIMEOUT:o=iu.CLUSTER_STATUS_STATUSES.CLOSED}let c=new xhe(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!==Af.PRE_4_0_0_VERSION&&await $P.upsertNodeRecord(l)}catch(l){qP.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(MW,"buildNodeStatus");function xhe(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(xhe,"NodeStatusObject")});var YP=M((dke,xW)=>{"use strict";var{handleHDBError:Bhe,hdbErrors:Fhe}=Ee(),{HTTP_STATUS_CODES:khe}=Fhe,Hhe=lr(),Ghe=fa(),KP=ae(),Ty=require("joi"),qhe=ft(),$he=2e3,Vhe=Ty.object({timeout:Ty.number().min(1),connected_nodes:Ty.boolean(),routes:Ty.boolean()});xW.exports=Khe;async function Khe(e){Ghe.checkClusteringEnabled();let t=qhe.validateBySchema(e,Vhe);if(t)throw Bhe(t,t.message,khe.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||KP.autoCastBoolean(n),o=s===void 0||KP.autoCastBoolean(s),c={nodes:[]},l=await Hhe.getServerList(r??$he),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:KP.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Khe,"clusterNetwork")});var HW=M((mke,kW)=>{"use strict";var WP=require("joi"),BW=ft(),{routeConstraints:FW}=mA();kW.exports={setRoutesValidator:Yhe,deleteRoutesValidator:Whe};function Yhe(e){let t=WP.object({server:WP.valid("hub","leaf"),routes:FW.required()});return BW.validateBySchema(e,t)}a(Yhe,"setRoutesValidator");function Whe(e){let t=WP.object({routes:FW.required()});return BW.validateBySchema(e,t)}a(Whe,"deleteRoutesValidator")});var yy=M((hke,WW)=>{"use strict";var pa=_t(),jP=ae(),Ws=(G(),D(j)),If=fe(),GW=HW(),{handleHDBError:qW,hdbErrors:jhe}=Ee(),{HTTP_STATUS_CODES:$W}=jhe,VW="cluster routes successfully set",KW="cluster routes successfully deleted";WW.exports={setRoutes:Jhe,getRoutes:Qhe,deleteRoutes:Xhe};function zhe(e){let t=pa.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=jP.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"?pa.updateConfigValue(Ws.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):pa.updateConfigValue(Ws.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:VW,set:i,skipped:s}}a(zhe,"setRoutesNats");function Jhe(e){let t=GW.setRoutesValidator(e);if(t)throw qW(t,t.message,$W.BAD_REQUEST,void 0,void 0,!0);if(If.get(Ws.CONFIG_PARAMS.CLUSTERING_ENABLED))return zhe(e);let r=[],n=[],s=If.get(Ws.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{YW(s,i)?n.push(i):(s.push(i),r.push(i))}),pa.updateConfigValue(Ws.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:VW,set:r,skipped:n}}a(Jhe,"setRoutes");function YW(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(YW,"existsInArray");function Qhe(){if(If.get(Ws.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=pa.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return If.get(Ws.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(Qhe,"getRoutes");function Xhe(e){let t=GW.deleteRoutesValidator(e);if(t)throw qW(t,t.message,$W.BAD_REQUEST,void 0,void 0,!0);if(If.get(Ws.CONFIG_PARAMS.CLUSTERING_ENABLED))return Zhe(e);let r=[],n=[],s=If.get(Ws.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{YW(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),pa.updateConfigValue(Ws.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:KW,deleted:r,skipped:n}}a(Xhe,"deleteRoutes");function Zhe(e){let t=pa.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=jP.isEmptyOrZeroLength(r)?null:r,pa.updateConfigValue(Ws.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=jP.isEmptyOrZeroLength(n)?null:n,pa.updateConfigValue(Ws.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:KW,deleted:s,skipped:i}}a(Zhe,"deleteRoutesNats")});var zW=M((_ke,jW)=>{"use strict";var eEe=Dt(),zP=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+eEe.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"}};jW.exports=zP});var XW=M((Ske,QW)=>{"use strict";var JW=Dt(),JP=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+JW.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+JW.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"}};QW.exports=JP});var ej=M((yke,ZW)=>{"use strict";var QP=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};ZW.exports=QP});var rj=M((bke,tj)=>{"use strict";var tEe=Dt(),XP=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+tEe.SERVER_SUFFIX.ADMIN,this.password=r}};tj.exports=XP});var Iy=M((Ike,ij)=>{"use strict";var ou=require("path"),au=require("fs-extra"),rEe=zW(),nEe=XW(),sEe=ej(),iEe=rj(),ZP=(Yn(),D(gi)),Nf=ae(),jn=_t(),by=(G(),D(j)),Jh=Dt(),{CONFIG_PARAMS:ur}=by,Cf=Q(),Qh=fe(),nj=io(),eL=lr(),oEe=Ts(),wf="clustering",aEe=1e4,sj=50;ij.exports={generateNatsConfig:lEe,removeNatsConfig:uEe,getHubConfigPath:cEe};function cEe(){let e=Qh.get(ur.ROOTPATH);return ou.join(e,wf,Jh.NATS_CONFIG_FILES.HUB_SERVER)}a(cEe,"getHubConfigPath");async function lEe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=Qh.get(ur.ROOTPATH);au.ensureDirSync(ou.join(r,"clustering","leaf")),Qh.initSync();let n=jn.getConfigFromFile(ur.CLUSTERING_TLS_CERT_AUTH),s=jn.getConfigFromFile(ur.CLUSTERING_TLS_PRIVATEKEY),i=jn.getConfigFromFile(ur.CLUSTERING_TLS_CERTIFICATE);!await au.exists(i)&&!await au.exists(!n)&&await oEe.createNatsCerts();let o=ou.join(r,wf,Jh.PID_FILES.HUB),c=ou.join(r,wf,Jh.PID_FILES.LEAF),l=jn.getConfigFromFile(ur.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=ou.join(r,wf,Jh.NATS_CONFIG_FILES.HUB_SERVER),d=ou.join(r,wf,Jh.NATS_CONFIG_FILES.LEAF_SERVER),f=jn.getConfigFromFile(ur.CLUSTERING_TLS_INSECURE),m=jn.getConfigFromFile(ur.CLUSTERING_TLS_VERIFY),p=jn.getConfigFromFile(ur.CLUSTERING_NODENAME),h=jn.getConfigFromFile(ur.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await eL.checkNATSServerInstalled()||Ay("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await ZP.listUsers(),_=jn.getConfigFromFile(ur.CLUSTERING_USER),R=await ZP.getClusterUser();(Nf.isEmpty(R)||R.active!==!0)&&Ay(`Invalid cluster user '${_}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Ry(ur.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Ry(ur.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Ry(ur.CLUSTERING_HUBSERVER_NETWORK_PORT),await Ry(ur.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],y=[];for(let[z,Y]of E.entries())Y.role?.role===by.ROLE_TYPES_ENUM.CLUSTER_USER&&Y.active&&(S.push(new iEe(Y.username,nj.decrypt(Y.hash))),y.push(new sEe(Y.username,nj.decrypt(Y.hash))));let w=[],{hub_routes:I}=jn.getClusteringRoutes();if(!Nf.isEmptyOrZeroLength(I))for(let z of I)w.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${z.host}:${z.port}`);let H=new rEe(jn.getConfigFromFile(ur.CLUSTERING_HUBSERVER_NETWORK_PORT),p,o,i,s,n,f,m,h,jn.getConfigFromFile(ur.CLUSTERING_HUBSERVER_CLUSTER_NAME),jn.getConfigFromFile(ur.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),w,S,y);n==null&&(delete H.tls.ca_file,delete H.leafnodes.tls.ca_file),t=Nf.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===by.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await au.writeJson(u,H),Cf.trace(`Hub server config written to ${u}`));let X=`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 nEe(jn.getConfigFromFile(ur.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[X],[q],S,y,i,s,n,f);n==null&&delete k.tls.ca_file,(t===void 0||t===by.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await au.writeJson(d,k),Cf.trace(`Leaf server config written to ${d}`))}a(lEe,"generateNatsConfig");async function Ry(e){let t=Qh.get(e);return Nf.isEmpty(t)&&Ay(`port undefined for '${e}'`),await Nf.isPortTaken(t)&&Ay(`'${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(Ry,"isPortAvailable");function Ay(e){let t=`Error generating clustering config: ${e}`;Cf.error(t),console.error(t),process.exit(1)}a(Ay,"generateNatsConfigError");async function uEe(e){let{port:t,config_file:r}=eL.getServerConfig(e),{username:n,decrypt_hash:s}=await ZP.getClusterUser(),i=0,o=2e3;for(;i<sj;){try{let d=await eL.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){Cf.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=sj)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&&Cf.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await Nf.asyncSetTimeout(u)}let c="0".repeat(aEe),l=ou.join(Qh.get(ur.ROOTPATH),wf,r);await au.writeFile(l,c),await au.remove(l),Cf.notify(e,"started.")}a(uEe,"removeNatsConfig")});var dj=M((Nke,uj)=>{"use strict";var Rs=fe(),et=(G(),D(j)),Xh=Dt(),ha=require("path"),{PACKAGE_ROOT:Ny}=yt(),oj=fe(),wy=ae(),Of="/dev/null",dEe=ha.join(Ny,"launchServiceScripts"),aj=ha.join(Ny,"utility/scripts"),fEe=ha.join(aj,et.HDB_RESTART_SCRIPT),cj=ha.resolve(Ny,"dependencies",`${process.platform}-${process.arch}`,Xh.NATS_BINARY_NAME);function lj(){let e={[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0,...process.env};return wy.noBootFile()&&(e[et.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=wy.getEnvCliRootPath()),{name:et.PROCESS_DESCRIPTORS.HDB,script:et.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,execArgv:process.execArgv,cwd:Ny}}a(lj,"generateMainServerConfig");var mEe=9930;function pEe(){Rs.initSync(!0);let e=Rs.get(et.CONFIG_PARAMS.ROOTPATH),t=ha.join(e,"clustering",Xh.NATS_CONFIG_FILES.HUB_SERVER),r=ha.join(Rs.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY),et.LOG_NAMES.HDB),n=oj.get(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Xh.LOG_LEVEL_FLAGS[Rs.get(et.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:et.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==mEe?"-"+n:""),binFile:cj,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 Rs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Of,i.error_file=Of),i}a(pEe,"generateNatsHubServerConfig");var hEe=9940;function EEe(){Rs.initSync(!0);let e=Rs.get(et.CONFIG_PARAMS.ROOTPATH),t=ha.join(e,"clustering",Xh.NATS_CONFIG_FILES.LEAF_SERVER),r=ha.join(Rs.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY),et.LOG_NAMES.HDB),n=oj.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Xh.LOG_LEVEL_FLAGS[Rs.get(et.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==hEe?"-"+n:""),binFile:cj,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 Rs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Of,i.error_file=Of),i}a(EEe,"generateNatsLeafServerConfig");function _Ee(){Rs.initSync();let e=ha.join(Rs.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:dEe,autorestart:!1};return Rs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Of,t.error_file=Of),t}a(_Ee,"generateClusteringUpgradeV4ServiceConfig");function gEe(){let e={[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.RESTART_HDB};return wy.noBootFile()&&(e[et.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=wy.getEnvCliRootPath()),{...{name:et.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:aj},script:fEe}}a(gEe,"generateRestart");function SEe(){return{apps:[lj()]}}a(SEe,"generateAllServiceConfigs");uj.exports={generateAllServiceConfigs:SEe,generateMainServerConfig:lj,generateRestart:gEe,generateNatsHubServerConfig:pEe,generateNatsLeafServerConfig:EEe,generateClusteringUpgradeV4ServiceConfig:_Ee}});var Pf=M((Pke,gj)=>{"use strict";var Pr=(G(),D(j)),Oke=ae(),_a=Iy(),Cy=lr(),Ea=Dt(),Oc=dj(),rL=fe(),Pc=Q(),TEe=fa(),{startWorker:fj,onMessageFromWorkers:yEe}=st(),mj=require("fs"),REe=require("node:path"),bEe=(G(),D(j)),{setTimeout:AEe}=require("node:timers/promises"),{execFile:IEe,fork:wEe}=require("node:child_process");gj.exports={start:Lc,restart:CEe,kill:DEe,startAllServices:vEe,startService:hj,restartHdb:OEe,startClusteringProcesses:Ej,startClusteringThreads:_j,isHdbRestartRunning:PEe,getHdbPid:LEe,cleanupChildrenProcesses:Zh,reloadClustering:UEe,expectedRestartOfChildren:pj};yEe(e=>{e.type==="restart"&&rL.initSync(!0)});var go=[],NEe=10,tL;function Lc(e,t=!1){let r=typeof e.args=="string"?e.args.split(" "):e.args;e.silent=!0,e.detached=!0;let n=e.script?wEe(e.script,r,e):IEe(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),!tL&&o!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<NEe&&(mj.existsSync(_a.getHubConfigPath())?Lc(e):(await _a.generateNatsConfig(!0),Lc(e),await new Promise(l=>setTimeout(l,3e3)),await _a.removeNatsConfig(Pr.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await _a.removeNatsConfig(Pr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function i(o){let c=rL.get(Pr.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),l=/\[\d+][^\[]+\[(\w+)]/g,u,d=0,f;for(;u=l.exec(o);){if(u.index&&Ea.LOG_LEVEL_HIERARCHY[c]>=Ea.LOG_LEVEL_HIERARCHY[f||"info"]){let h=f===Ea.LOG_LEVELS.ERR||f===Ea.LOG_LEVELS.WRN?Pc.OUTPUTS.STDERR:Pc.OUTPUTS.STDOUT;Pc.logCustomLevel(f||"info",h,s,o.slice(d,u.index).trim())}let[m,p]=u;d=u.index+m.length,f=Ea.LOG_LEVELS[p]}if(Ea.LOG_LEVEL_HIERARCHY[c]>=Ea.LOG_LEVEL_HIERARCHY[f||"info"]){let m=f===Ea.LOG_LEVELS.ERR||f===Ea.LOG_LEVELS.WRN?Pc.OUTPUTS.STDERR:Pc.OUTPUTS.STDOUT;Pc.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(Lc,"start");function Zh(e=!0){if(!tL&&(tL=!0,go.length!==0))if(Pc.info("Killing child processes..."),go.map(t=>t.kill()),e)process.exit(0);else return AEe(2e3)}a(Zh,"cleanupChildrenProcesses");function CEe(e){pj();for(let t of go)t.name===e&&t.kill()}a(CEe,"restart");function pj(){for(let e of go)e.config&&(e.config.restarts=0)}a(pj,"expectedRestartOfChildren");async function OEe(){await Lc(Oc.generateRestart())}a(OEe,"restartHdb");async function PEe(){let e=await list();for(let t in e)if(e[t].name===Pr.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(PEe,"isHdbRestartRunning");function LEe(){let e=rL.getHdbBasePath();if(!e)return;let t=REe.join(e,bEe.HDB_PID_FILE),r=xEe(t);if(!(!r||r===process.pid)&&BEe(r))return r}a(LEe,"getHdbPid");function DEe(){for(let e of go)e.kill();go=[]}a(DEe,"kill");async function vEe(){await Ej(),await _j(),await Lc(Oc.generateAllServiceConfigs())}a(vEe,"startAllServices");async function hj(e,t=!1){let r;switch(e=e.toLowerCase(),e){case Pr.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Oc.generateMainServerConfig();break;case Pr.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Oc.generateNatsIngestServiceConfig();break;case Pr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Oc.generateNatsReplyServiceConfig();break;case Pr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Oc.generateNatsHubServerConfig(),await Lc(r,t),await _a.removeNatsConfig(e);return;case Pr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Oc.generateNatsLeafServerConfig(),await Lc(r,t),await _a.removeNatsConfig(e);return;case Pr.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Oc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}Lc(r,t)}a(hj,"startService");var MEe;async function Ej(e=!1){for(let t in Pr.CLUSTERING_PROCESSES){let r=Pr.CLUSTERING_PROCESSES[t];await hj(r,e)}}a(Ej,"startClusteringProcesses");async function _j(){MEe=fj(Pr.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Pr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Cy.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Cy.updateLocalStreams();let e=await TEe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Pr.PRE_4_0_0_VERSION){Pc.info("Starting clustering upgrade 4.0.0 process"),fj(Pr.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(_j,"startClusteringThreads");async function UEe(){await _a.generateNatsConfig(!0),await Cy.reloadNATSHub(),await Cy.reloadNATSLeaf(),await _a.removeNatsConfig(Pr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await _a.removeNatsConfig(Pr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(UEe,"reloadClustering");function xEe(e){try{return Number.parseInt(mj.readFileSync(e,"utf8"),10)}catch{return null}}a(xEe,"readPidFile");function BEe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}a(BEe,"isProcessRunning")});var iL={};ye(iL,{compactOnStart:()=>FEe,copyDb:()=>Aj});async function FEe(){ga.notify("Running compact on start"),console.log("Running compact on start");let e=(0,nL.get)(x.ROOTPATH),t=new Map,r=lt();(0,sL.updateConfigValue)(x.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,Oy.join)(e,"backup",n+".mdb"),o=(0,Oy.join)(e,tl,n+"-copy.mdb"),c=0;try{c=await Sj(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){ga.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 Aj(n,o),console.log("Backing up",n,"to",i);try{await(0,cu.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}console.log("Moving copy compacted",n,"to",s),await(0,cu.move)(o,s,{overwrite:!0}),await(0,cu.remove)((0,Oy.join)(e,tl,`${n}-copy.mdb-lock`))}try{xd()}catch(n){ga.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}try{xd()}catch(n){ga.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){ga.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,sL.updateConfigValue)(x.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,cu.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw xd(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let o=await Sj(n);if(console.log("Database",n,"after compact has a total record count of",o),i!==o){let c=`There is a discrepancy between pre and post compact record count for database ${n}.
17
+ `,"")}a(XV,"runCommand");async function que(){try{await gue.access(tO)}catch{return!1}let e=await XV(`${tO} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Sue.eq(t,Hue)}a(que,"checkNATSServerInstalled");async function oO(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await JV.getClusterUser();if(Jl(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}yi.trace("create nats connection called");let i=await Lue({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Kr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Kr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Kr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),yi.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&yi.error("Error with Nats client connection, connection closed",o),i===bn&&ZV()}),i}a(oO,"createConnection");function ZV(){bn=void 0,Wl=void 0,jl=void 0,zl=void 0}a(ZV,"clearClientCache");async function $ue(){bn&&(await bn.drain(),bn=void 0,Wl=void 0,jl=void 0,zl=void 0)}a($ue,"closeConnection");var bn,zl;async function Th(){return zl||(zl=oO(Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),bn=await zl),bn||zl}a(Th,"getConnection");async function yh(){if(Wl)return Wl;Jl(bn)&&await Th();let{domain:e}=Qd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Jl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Wl=await bn.jetstreamManager({domain:e,timeout:6e4}),Wl}a(yh,"getJetStreamManager");async function e1(){if(jl)return jl;Jl(bn)&&await Th();let{domain:e}=Qd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Jl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return jl=bn.jetstream({domain:e,timeout:6e4}),jl}a(e1,"getJetStream");async function mo(){let e=bn||await Th(),t=Wl||await yh(),r=jl||await e1();return{connection:e,jsm:t,js:r}}a(mo,"getNATSReferences");async function Vue(e){let t=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await JV.getClusterUser(),s=await oO(t,r,n),i=iO(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let f=QV.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 _T.asyncSetTimeout(e),await o.drain(),await s.close(),await u,c}a(Vue,"getServerList");async function aO(e,t){let{jsm:r}=await mo(),n=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Due.File,retention:vue.Limits,subjects:t,discard:Mue.Old,maxMsgs:s,maxBytes:i,maxAge:n})}a(aO,"createLocalStream");async function t1(){let{jsm:e}=await mo(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(t1,"listStreams");async function Kue(e){let{jsm:t}=await mo();await t.streams.delete(e)}a(Kue,"deleteLocalStream");async function Yue(e){let{connection:t}=await mo(),r=[],n=iO(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(QV.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(Yue,"listRemoteStreams");async function Wue(e,t=void 0,r=void 0){let{jsm:n,js:s}=await mo(),i=YV(),o={durable_name:i,ack_policy:nO.Explicit};t&&(o.deliver_policy=sO.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=rO(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(Wue,"viewStream");async function*jue(e,t=void 0,r=void 0){let{jsm:n,js:s}=await mo(),i=YV(),o={durable_name:i,ack_policy:nO.Explicit};t&&(o.deliver_policy=sO.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=rO(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(jue,"viewStreamIterator");async function zue(e,t,r,n){yi.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=r1(n,r);let{js:s}=await mo(),i=await ST(),o=`${e}.${i}`,c=await Fue(()=>n instanceof Uint8Array?n:zV.encode(n));try{yi.trace(`publishToStream publishing to subject: ${o}`),Bue(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 s1(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){yi.trace(`publishToStream creating stream: ${t}`);let d=o.split(".");d[2]="*",await aO(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(zue,"publishToStream");function r1(e,t){t===void 0&&(t=xue());let r=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(on.MSG_HEADERS.ORIGIN)&&r&&t.append(on.MSG_HEADERS.ORIGIN,r),t}a(r1,"addNatsMsgHeader");function Qd(e){e=e.toLowerCase();let t=Sh.join(Kr.get(rt.CONFIG_PARAMS.ROOTPATH),kue);if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Jl(eO)&&(eO={port:_h.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:_h.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.HUB,config_file:on.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Sh.join(t,on.PID_FILES.HUB),hdbNatsPath:t}),eO;if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Jl(ZC)&&(ZC={port:_h.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:_h.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.LEAF,config_file:on.NATS_CONFIG_FILES.LEAF_SERVER,domain:_h.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.LEAF,pid_file_path:Sh.join(t,on.PID_FILES.LEAF),hdbNatsPath:t}),ZC;yi.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Qd,"getServerConfig");async function n1(e,t,r,n){try{await e.consumers.add(t,{ack_policy:nO.Explicit,durable_name:r,deliver_policy:sO.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(n1,"createConsumer");async function Jue(e,t,r){await e.consumers.delete(t,r)}a(Jue,"removeConsumer");function Que(e){return e.split(".")[1]}a(Que,"extractServerName");async function Xue(e,t,r=6e4,n=iO()){if(!_T.isObject(t))throw new Error("data param must be an object");let s=zV.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 rO(c.data)}a(Xue,"request");function cO(e){return new Promise(async(t,r)=>{let n=bue(tO,["--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(cO,"reloadNATS");async function Zue(){let{pid_file_path:e}=Qd(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await cO(e)}a(Zue,"reloadNATSHub");async function ede(){let{pid_file_path:e}=Qd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await cO(e)}a(ede,"reloadNATSLeaf");function tde(e,t,r){let n;switch(e.code){case KV.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case KV.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(tde,"requestErrorHandler");async function rde(e,t){let r=t+on.SERVER_SUFFIX.LEAF,{connection:n}=await mo(),{jsm:s}=await ude(r),{schema:i,table:o}=e,c=gT.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await s1(async()=>{if(e.subscribe===!0)await n1(s,c,n.info.server_name,l);else try{await Jue(s,c,n.info.server_name)}catch(u){yi.trace(u)}})}a(rde,"updateRemoteConsumer");async function nde(e,t,r,n){let s=gT.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(!jV&&Oue()<Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=XC();await c(o)}await Nue(o),n==="stop"&&await _T.asyncSetTimeout(1e3)}a(nde,"updateConsumerIterator");function s1(e){return wue.writeTransaction(rt.SYSTEM_SCHEMA_NAME,rt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(s1,"exclusiveLock");async function i1(e,t){let r=gT.createNatsTableStreamName(e,t),n=await ST(),s=ade(e,t,n);await aO(r,[s])}a(i1,"createLocalTableStream");async function sde(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await i1(n,s)}}a(sde,"createTableStreams");async function o1(e,t,r=void 0){if(Kr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=gT.createNatsTableStreamName(e,t),{domain:s}=Qd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Th()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")yi.warn(n);else throw n}}a(o1,"purgeTableStream");async function ide(e,t){if(Kr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await o1(e,t[r])}a(ide,"purgeSchemaTableStreams");async function ode(e){return(await yh()).streams.info(e)}a(ode,"getStreamInfo");function ade(e,t,r){return`${on.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(ade,"createSubjectName");async function ST(){if(gh)return gh;if(gh=(await yh())?.nc?.info?.server_name,gh===void 0)throw new Error("Unable to get jetstream manager server name");return gh}a(ST,"getJsmServerName");async function cde(){let e=await yh(),t=await ST(),r=await t1();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=lde(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(".");yi.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(cde,"updateLocalStreams");function lde(e){let{config:t}=e,r=!1,n=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Kr.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(lde,"updateStreamLimits");async function ude(e){let t,r;try{t=await bn.jetstream({domain:e}),r=await bn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw yi.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(ude,"connectToRemoteJS")});function lO(e){let t=e.get(TT),r=t?(0,Xd.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:bh(e)??1,nodes:[]})})}i[n]=0,e.putSync(TT,(0,Xd.pack)(r))}return r}function Rh(e){return lO(e).remoteNameToId}function l1(e,t){let r=lO(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(TT,(0,Xd.pack)(r)),s}function yT(e,t){let r=lO(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(TT,(0,Xd.pack)(r))}return c1.trace?.("The remote node name map",e,n,s),s}var c1,Xd,TT,uO=se(()=>{c1=b(ir());gs();Xd=require("msgpackr"),TT=Symbol.for("remote-ids");a(lO,"getIdMappingRecord");a(Rh,"exportIdMapping");a(l1,"remoteToLocalNodeId");a(yT,"getIdOfRemoteNode")});var h1={};ye(h1,{commitsAwaitingReplication:()=>Zd,getHDBNodeTable:()=>Gt,getReplicationSharedStatus:()=>ef,iterateRoutes:()=>Ih,shouldReplicateToNode:()=>Ah,subscribeToNodeUpdates:()=>tf});function Gt(){return u1||(u1=ze({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 ef(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(64),n&&{callback:n}))}function tf(e){Gt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;p1.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 Gt().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 Ah(e,t){let r=Ec.default.get(x.REPLICATION_DATABASES);return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&(r==="*"||r?.find?.(n=>n.name===t&&(!n.sharded||e.shard===Ec.default.get(x.REPLICATION_SHARD))))&&Gt().primaryStore.get(nt())?.replicates||e.subscriptions?.some(n=>(n.database||n.schema)===t&&n.subscribe)}function dde(){tf(e=>{_c({},(t,r)=>{let n=e.name,s=d1.get(n);if(s||d1.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=ef(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of Zd.get(r)||[])u>l&&u<=c&&d();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*Ih(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=Ec.default.get(x.REPLICATION_SECUREPORT)??(!Ec.default.get(x.REPLICATION_PORT)&&Ec.default.get(x.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Ec.default.get(x.REPLICATION_PORT)||Ec.default.get(x.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){f1.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 f1,m1,Ec,p1,u1,d1,Zd,rf=se(()=>{Oe();gs();km();f1=require("worker_threads"),m1=b(Ee()),Ec=b(fe());G();p1=b(ir());server.nodes=[];a(Gt,"getHDBNodeTable");a(ef,"getReplicationSharedStatus");a(tf,"subscribeToNodeUpdates");a(Ah,"shouldReplicateToNode");d1=new Map;xx((e,t,r)=>{if(r>server.nodes.length)throw new m1.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Zd||(Zd=new Map,dde());let n=Zd.get(e);return n||(n=[],Zd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(dde,"startSubscriptionToReplications");a(Ih,"iterateRoutes")});var R1={};ye(R1,{connectedToNode:()=>Ql,disconnectedFromNode:()=>sf,ensureNode:()=>sa,requestClusterStatus:()=>y1,startOnMainThread:()=>dO});async function dO(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){RT.set(o,bh(u.auditStore));break}}}Ri.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=Gt().primaryStore.get(c);if(u!==null){let d=e.url??gc();if(u===void 0||u.url!==d||u.shard!==e.shard)return sa(c,{name:c,url:d,shard:e.shard,replicates:!0})}}a(l,"ensureThisNode"),Gt().primaryStore.get(c)&&l();for(let u of Ih(e))try{let d=!u.subscriptions;if(d&&await l(),d&&u.replicates==null&&(u.replicates=!0),E1.push(u),o.find(f=>f.url===u.url))continue;s(u)}catch(d){console.error(d)}tf(s)});let n;function s(o,c=o?.name){let l=nt()&&c===nt()||gc()&&o?.url===gc();if(l){let m=!!o?.replicates;if(n!==void 0&&n!==m)for(let p of Gt().search([]))p.replicates&&p.name!==c&&s(p,p.name);n=m}if(ot.trace("Setting up node replication for",o),!o){for(let[m,p]of po){let h;for(let[E,{worker:_,nodes:R}]of p){let S=R[0];if(S&&S.name==c){h=!0;for(let[y,{worker:w}]of p)p.delete(y),ot.warn("Node was deleted, unsubscribing from node",c,y,m),w?.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){ot.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(ot.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 nf)if(o.url===p.url){nf.delete(m);break}nf.set(o.name,o)}let d=lt();if(u||(u=new Map,po.set(o.url,u)),u.iterator=_c(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]||(ot.warn(`Database ${p} not found for node ${o.name}, making a subscription anyway`),f(p,!1))}function f(m,p){ot.trace("Setting up replication for database",m,"on node",o.name);let h=u.get(m),E,_=[{replicateByDefault:p,...o}];RT.has(m)&&wh.default.get(x.REPLICATION_FAILOVER)&&(_.push({replicateByDefault:p,name:nt(),startTime:RT.get(m),endTime:Date.now(),replicates:!0}),RT.delete(m));let R=Ah(o,m),S=Ri.workers.filter(y=>y.name==="http");if(h){if(E=h.worker,h.nodes=_,R)return}else R&&(t=t%S.length,E=S[t++],E||ot.warn("No http workers available to subscribe to node",o.name,o.url),u.set(m,{worker:E,nodes:_,url:o.url}),E?.on("exit",()=>{u.get(m)?.worker===E&&(u.delete(m),f(m,p))}));if(R){let y=fde.HDB_LEADER_URL??process.env.HDB_LEADER_URL??E1[0]?.url,w=y?new URL(y).hostname:Array.from(Gt().primaryStore.getKeys({}).filter(H=>H!==nt()))[0],I=_[0].name??(_[0].url&&new URL(_[0].url).hostname);ot.warn(`Setting up subscription with leader ${w} for node ${I}`),_[0].isLeader=!w||I===w,setTimeout(()=>{let H={..._[0],type:"subscribe-to-node",database:m,nodes:_};E?E.postMessage(H):Nh(H)},mde)}else{ot.info("Node no longer should be used, unsubscribing from node",{replicates:o.replicates,databaseName:m,node:o,subscriptions:o.subscriptions,hasDatabase:!!d[m],thisReplicates:Gt().primaryStore.get(nt())?.replicates}),Gt().primaryStore.get(nt())?.replicates||(n=!1,ot.info("Disabling replication, this node name",nt(),Gt().primaryStore.get(nt()),m));let y={type:"unsubscribe-from-node",database:m,url:o.url,name:o.name,nodes:_};E?E.postMessage(y):AT(y)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),sf=a(function(o){try{ot.info("Disconnected from node",o.name,o.url,"finished",!!o.finished);let c=Array.from(nf.keys()),l=c.sort(),u=l.indexOf(o.name||bi(o.url));if(u===-1){ot.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){ot.warn("Disconnected node not found in replication map",o.database,d);return}if(f.connected=!1,o.finished||!wh.default.get(x.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],_=nf.get(E);d=po.get(_.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 w of f.nodes){if(S.some(I=>I.name===w.name)){ot.info(`Disconnected node is already failing over to ${E} for ${o.database}`);continue}w.endTime<Date.now()||(S.push(w),ot.info(`Failing over ${o.database} from ${o.name} to ${E}`),i(w,o.database,R.nodes[0]),y=!0)}f.nodes=[f.nodes[0]],y||ot.info(`Disconnected node ${o.name} has no nodes to fail over to ${E}`);return}ot.warn("Unable to find any other node to fail over to",o.name,o.url)}catch(c){ot.error("Error failing over node",c)}},"disconnectedFromNode"),Ql=a(function(o){let c=po.get(o.url),l=c?.get(o.database);if(!l){ot.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){ot.warn("Newly connected node has no node subscriptions",o.database,l);return}if(!u.name){ot.debug("Connected node is not named yet",o.database,l);return}if(!wh.default.get(x.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 _ of h)i(_,o.database);else{let _=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});_.length<h.length&&(m.nodes=_)}}},"connectedToNode");function i(o,c,l=o){let u=Ri.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]}):Nh({url:l.url,name:l.name,database:c,nodes:[o]})}a(i,"connectToNextWorker"),(0,Ri.onMessageByType)("disconnected-from-node",sf),(0,Ri.onMessageByType)("connected-to-node",Ql),(0,Ri.onMessageByType)("request-cluster-status",y1)}function y1(e,t){let r=[];for(let[n,s]of nf)try{let i=po.get(s.url);ot.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=g1(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ot.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function sa(e,t){let r=Gt();e=e??bi(t.url),t.name=e;try{if(t.ca){let s=new S1.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){ot.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ot.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!wh.default.get(x.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=g1(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])]}ot.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Ri,bT,ot,_1,wh,S1,T1,g1,fde,mde,po,sf,Ql,nf,RT,E1,Ch=se(()=>{Oe();Ri=b(st());gs();bT=require("worker_threads");rf();ot=b(Q()),_1=b(require("lodash")),wh=b(fe());G();S1=require("crypto"),T1=b(require("minimist")),{cloneDeep:g1}=_1.default,fde=(0,T1.default)(process.argv),mde=200,po=new Map,nf=new Map,RT=new Map,E1=[];a(dO,"startOnMainThread");a(y1,"requestClusterStatus");bT.parentPort&&(sf=a(e=>{bT.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Ql=a(e=>{bT.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Ri.onMessageByType)("subscribe-to-node",e=>{Nh(e)}),(0,Ri.onMessageByType)("unsubscribe-from-node",e=>{AT(e)}));a(sa,"ensureNode")});var Ts=M(qt=>{"use strict";var gr=require("path"),{watch:pde}=require("chokidar"),Wn=require("fs-extra"),of=require("node-forge"),C1=require("net"),{generateKeyPair:fO,X509Certificate:ia,createPrivateKey:O1,randomBytes:hde}=require("node:crypto"),Ede=require("util");fO=Ede.promisify(fO);var vt=of.pki,Ai=require("joi"),{v4:P1}=require("uuid"),{validateBySchema:EO}=ft(),{forComponent:_de}=Q(),Ss=fe(),Vs=(G(),D(j)),{CONFIG_PARAMS:Zl}=Vs,Ii=dA(),{ClientError:Sc}=Ee(),wT=require("node:tls"),{relative:L1,join:gde}=require("node:path"),{CERTIFICATE_VALUES:b1}=Ii,Sde=rl(),mO=_t(),{table:Tde,getDatabases:yde,databases:IT}=(Oe(),D(mt)),{getJWTRSAKeys:A1}=(Yd(),D(mh)),Xe=_de("tls").conditional;qt.generateKeys=SO;qt.updateConfigCert=k1;qt.createCsr=Cde;qt.signCertificate=Ode;qt.setCertTable=af;qt.loadCertificates=x1;qt.reviewSelfSignedCert=yO;qt.createTLSSelector=G1;qt.listCertificates=$1;qt.addCertificate=Ude;qt.removeCertificate=Bde;qt.createNatsCerts=Dde;qt.generateCertsKeys=Lde;qt.getReplicationCert=Ph;qt.getReplicationCertAuth=Nde;qt.renewSelfSigned=vde;qt.hostnamesFromCert=bO;qt.getKey=Fde;qt.getHostnamesFromCertificate=kde;qt.getPrimaryHostName=RO;qt.generateSerialNumber=OT;var{urlToNodeName:D1,getThisNodeUrl:Rde,getThisNodeName:CT,clearThisNodeName:bde}=(gs(),D(oa)),{readFileSync:Ade,statSync:v1}=require("node:fs"),F0e=fe(),{getTicketKeys:Ide,onMessageFromWorkers:wde}=st(),{isMainThread:M1}=require("worker_threads"),{TLSSocket:U1,createSecureContext:k0e}=require("node:tls"),_O=3650,Oh=["127.0.0.1","localhost","::1"],gO=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];function OT(){let e=hde(8);return e[0]=e[0]&127|1,e.toString("hex")}a(OT,"generateSerialNumber");wde(async e=>{e.type===Vs.ITC_EVENT_TYPES.RESTART&&(Ss.initSync(!0),await yO())});var an;function yc(){return an||(an=yde().system.hdb_certificate,an||(an=Tde({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(yc,"getCertTable");async function Ph(){let e=G1("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(CT());if(!r)return;let n=new ia(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(Ph,"getReplicationCert");async function Nde(){yc();let e=(await Ph()).options.cert,r=new ia(e).issuer.match(/CN=(.*)/)?.[1];return an.get(r)}a(Nde,"getReplicationCertAuth");var I1,Tc=new Map;function x1(){if(I1)return;I1=!0;let e=[{configKey:Zl.TLS},{configKey:Zl.OPERATIONSAPI_TLS}];yc();let t=gr.dirname(mO.getConfigFilePath()),r;for(let{configKey:n}of e){let s=mO.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&L1(gde(t,"keys"),o);c&&w1(o,l=>{Tc.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&M1){let d;w1(u,f=>{if(b1.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=H1(u),h=new ia(p),E;try{E=RO(h)}catch(y){Xe.error?.("error extracting host name from certificate",y);return}if(E==null){Xe.error?.("No host name found on certificate");return}if(h.checkIssued(new ia(b1.cert)))return;let _=an.primaryStore.get(E),R=v1(u).mtimeMs,S=!_||_.is_self_signed?1:_.file_timestamp??_.__updatedtime__;if(_&&R<=S){R<S&&Xe.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(x1,"loadCertificates");function w1(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&M1&&Xe.warn?.(`Reloading ${r}:`,i),n=c,t(H1(i)))}catch(c){Xe.error?.(`Error loading ${r}:`,i,c)}},"loadFile");Wn.existsSync(e)?s(e,v1(e)):Xe.error?.(`${r} file not found:`,e),pde(e,{persistent:!1}).on("change",s)}a(w1,"loadAndWatch");function pO(){let e=Rde();if(e==null){let t=Oh[0];return Xe.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return D1(e)}a(pO,"getHost");function NT(){let e=CT();if(e==null){let t=Oh[0];return Xe.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(NT,"getCommonName");async function Cde(){let e=await Ph(),t=vt.certificateFromPem(e.options.cert),r=vt.privateKeyFromPem(e.options.key);Xe.info?.("Creating CSR with cert named:",e.name);let n=vt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:NT()},...gO];Xe.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:B1()}];return Xe.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),of.pki.certificationRequestToPem(n)}a(Cde,"createCsr");function B1(){let e=Oh.includes(NT())?Oh:[...Oh,NT()];return e.includes(pO())||e.push(pO()),[{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=>C1.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(B1,"certExtensions");async function Ode(e){let t={},r=gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;yc();for await(let d of an.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(Tc.has(d.private_key_name)){n=Tc.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await Wn.exists(gr.join(r,d.private_key_name))){n=Wn.readFile(gr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await hO();s=d.ca,n=d.private_key}n=vt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=vt.certificateFromPem(s.certificate);Xe.info?.("Signing CSR with cert named",s.name);let o=vt.certificationRequestFromPem(e.csr);try{o.verify()}catch(d){return Xe.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=of.pki.createCertificate();c.serialNumber=OT(),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+_O),Xe.info?.("sign cert setting validity:",c.validity),Xe.info?.("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),Xe.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;Xe.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,of.md.sha256.create()),t.certificate=vt.certificateToPem(c)}else Xe.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(Ode,"signCertificate");async function Pde(e,t){await af({name:CT(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await af({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:vt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(Pde,"createCertificateTable");async function af(e){let t;try{t=new ia(e.certificate)}catch(r){Xe.error?.(`Failed to parse certificate for ${e.name}:`,r.message),Xe.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},yc(),await an.patch(e)}a(af,"setCertTable");async function SO(){let e=await fO("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:vt.publicKeyFromPem(e.publicKey),privateKey:vt.privateKeyFromPem(e.privateKey)}}a(SO,"generateKeys");async function TO(e,t,r){let n=vt.createCertificate();if(!t){let o=await Ph();t=vt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=OT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+_O);let i=[{name:"commonName",value:NT()},...gO];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(B1()),n.sign(e,of.md.sha256.create()),vt.certificateToPem(n)}a(TO,"generateCertificates");async function hO(){let e=await $1(),t;for(let r of e){if(!r.is_authority)continue;let n=await q1(r.private_key_name);if(r.private_key_name&&n&&new ia(r.certificate).checkPrivateKey(O1(n))){Xe.trace?.(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;Xe.trace?.("No CA found with matching private key")}a(hO,"getCertAuthority");async function F1(e,t,r=!0){let n=vt.createCertificate();n.publicKey=t,n.serialNumber=OT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+_O);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${Ss.get(Zl.REPLICATION_HOSTNAME)??D1(Ss.get(Zl.REPLICATION_URL))??P1().split("-")[0]}`},...gO];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,of.md.sha256.create());let o=gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),c=gr.join(o,Ii.PRIVATEKEY_PEM_NAME);return r&&await Wn.writeFile(c,vt.privateKeyToPem(e)),n}a(F1,"generateCertAuthority");async function Lde(){let{privateKey:e,publicKey:t}=await SO(),r=await F1(e,t),n=await TO(e,t,r);await Pde(n,r),k1()}a(Lde,"generateCertsKeys");async function Dde(){let e=await TO(vt.privateKeyFromPem(Ii.CERTIFICATE_VALUES.key),void 0,vt.certificateFromPem(Ii.CERTIFICATE_VALUES.cert)),t=gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),r=gr.join(t,Ii.NATS_CERTIFICATE_PEM_NAME);await Wn.exists(r)||await Wn.writeFile(r,e);let n=gr.join(t,Ii.NATS_CA_PEM_NAME);await Wn.exists(n)||await Wn.writeFile(n,Ii.CERTIFICATE_VALUES.cert)}a(Dde,"createNatsCerts");async function vde(){yc();for await(let e of an.search([{attribute:"is_self_signed",value:!0}]))await an.delete(e.name);await yO()}a(vde,"renewSelfSigned");async function yO(){bde(),await x1(),yc();let e=await hO();if(!e){Xe.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:vt.privateKeyFromPem(Wn.readFileSync(u)),keyPath:u}}catch(d){return Xe.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=Ss.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=Ss.get(Zl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let o=gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),c=L1(o,i);s||(Xe.warn?.("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await SO(),Wn.existsSync(gr.join(o,Ii.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${P1().split("-")[0]}.pem`),await Wn.writeFile(gr.join(o,c),vt.privateKeyToPem(s)));let l=await F1(s,vt.setRsaPublicKey(s.n,s.e),!1);await af({name:l.subject.getField("CN").value,uses:["https"],certificate:vt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await Ph()){let r=CT();Xe.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await hO();let n=vt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await TO(vt.privateKeyFromPem(e.private_key),s,n);await af({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(yO,"reviewSelfSignedCert");function k1(){let e=Sde(Object.keys(Vs.CONFIG_PARAM_MAP),!0),t=gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),r=gr.join(t,Ii.PRIVATEKEY_PEM_NAME),n=gr.join(t,Ii.NATS_CERTIFICATE_PEM_NAME),s=gr.join(t,Ii.NATS_CA_PEM_NAME),i=Vs.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),mO.updateConfigValue(void 0,void 0,o,!1,!0)}a(k1,"updateConfigCert");function H1(e){return e.startsWith("-----BEGIN")?e:Ade(e,"utf8")}a(H1,"readPEM");var N1=wT.createSecureContext;wT.createSecureContext=function(e){if(!e.cert||!e.key)return N1(e);let t={...e};delete t.key,delete t.cert;let r=N1(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Mde=U1.prototype._init;U1.prototype._init=function(e,t){Mde.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 Xl=new Map;function G1(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(),Xl.clear();let d=0;if(IT===void 0){c();return}for await(let f of IT.system.hdb_certificate.search([])){let m=f.certificate,p=new ia(m);f.is_authority&&(p.asString=m,Xl.set(p.subject,m))}for await(let f of IT.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 q1(f.private_key_name),E=f.certificate,_=new ia(E);if(Xl.has(_.issuer)&&(E+=`
18
+ `+Xl.get(_.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let R={ciphers:f.ciphers,ticketKeys:Ide(),availableCAs:Xl,ca:t&&Array.from(Xl.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??bO(_);Array.isArray(S)||(S=[S]);for(let I of S)I===pO()&&(p+=1);let y=wT.createSecureContext(R);y.name=f.name,y.options=R,y.quality=p,y.certificateAuthorities=Array.from(Xl),y.certStart=E.toString().slice(0,100);let w;for(let I of S)if(I){I[0]==="*"&&(s=!0,I=I.slice(1)),C1.isIP(I)&&(w=!0);let H=r.get(I)?.quality??0;Xe.trace?.("Assigning TLS for hostname",I,"if",p,">",H),p>H&&r.set(I,y)}else Xe.error?.("No hostname found for certificate at",wT.certificate);Xe.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){Xe.error?.("Error applying TLS for",f.name,m)}o?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}a(u,"updateTLS"),IT?.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){Xe.info?.("TLS requested for",o||"(no SNI)");let l=o;for(;;){let d=r.get(l);if(d)return Xe.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?Xe.debug?.("No certificate found to match",o,"using the default certificate"):Xe.debug?.("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):Xe.info?.("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(G1,"createTLSSelector");async function q1(e){let t=Tc.get(e);return!t&&e?await Wn.readFile(gr.join(Ss.get(Zl.ROOTPATH),Vs.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(q1,"getPrivateKeyByName");async function $1(){yc();let e=[];for await(let t of an.search([]))e.push(t);return e}a($1,"listCertificates");async function Ude(e){let t=EO(e,Ai.object({name:Ai.string().required(),certificate:Ai.string().required(),is_authority:Ai.boolean().required(),private_key:Ai.string(),hosts:Ai.array(),uses:Ai.array()}));if(t)throw new Sc(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new ia(n),c=!1,l=!1,u;for(let[p,h]of Tc)!s&&!c&&o.checkPrivateKey(O1(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new Sc("A suitable private key was not found for this certificate");let d;if(!r){try{d=RO(o)}catch(p){Xe.error?.(p)}if(d==null)throw new Sc("Error extracting certificate host name, please provide a name parameter")}let f=xde(r??d);s&&!c&&!l&&(await Wn.writeFile(gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME,f+".pem"),s),Tc.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 af(m),"Successfully added certificate: "+f}a(Ude,"addCertificate");function xde(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(xde,"sanitizeName");async function Bde(e){let t=EO(e,Ai.object({name:Ai.string().required()}));if(t)throw new Sc(t.message);let{name:r}=e;yc();let n=await an.get(r);if(!n)throw new Sc(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&&(Xe.info?.("Removing private key named",s),await Wn.remove(gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME,s)))}return await an.delete(r),"Successfully removed "+r}a(Bde,"removeCertificate");function RO(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||bO(e)[0]}a(RO,"getPrimaryHostName");function bO(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(bO,"hostnamesFromCert");async function Fde(e){if(e.bypass_auth!==!0)throw new Sc("Unauthorized","401");let t=EO(e,Ai.object({name:Ai.string().required()}));if(t)throw new Sc(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await A1()).privateKey;if(r===".jwtPublic")return(await A1()).publicKey;if(Tc.get(r))return Tc.get(e.name);throw new Sc("Key not found")}a(Fde,"getKey");function kde(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}a(kde,"getHostnamesFromCertificate")});var mK={};ye(mK,{BACK_PRESSURE_RATIO_POSITION:()=>uK,CONFIRMATION_STATUS_POSITION:()=>lK,LATENCY_POSITION:()=>MT,NodeReplicationConnection:()=>lf,OPERATION_REQUEST:()=>CO,RECEIVED_TIME_POSITION:()=>PO,RECEIVED_VERSION_POSITION:()=>OO,RECEIVING_STATUS_POSITION:()=>LO,RECEIVING_STATUS_RECEIVING:()=>fK,RECEIVING_STATUS_WAITING:()=>dK,SENDING_TIME_POSITION:()=>Dh,createWebSocket:()=>UT,databaseSubscriptions:()=>bc,replicateOverWS:()=>vh,tableUpdateListeners:()=>MO});async function UT(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(!wO){let l=(0,iK.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),wO=u.secureContexts}if(i=wO.get(s),i&&le.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,aK.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&((cf?.caCount!==aa.size||cf?.derivedFromContext!==i)&&(cf=oK.createSecureContext({...i.options,ca:[...aa,...i.options.availableCAs.values()]}),cf.caCount=aa.size,cf.derivedFromContext=i),c.secureContext=cf),new rK.WebSocket(e,"harperdb-replication-v1",c)}function vh(e,t,r){let n=t.port||t.securePort,s=vO.pid%1e3+"-"+nK.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);le.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||bc,f,m,p=!1,h=t.subscription;h?.then&&h.then(A=>{h=A,h.auditStore&&(f=h.auditStore)});let E=t.tables||u&&lt()[u],_,R=new Map,S=[];_=r.name,_&&t.connection&&(t.connection.nodeName=_);let y,w,I,H,X,q,k,z=6e4,Y,ce=0,de=0,te=0,Se=tK.default.get(x.REPLICATION_BLOBTIMEOUT)??12e4,Ne=new Map,Ke=[],$e=0,Ir;if(t.url){let A=a(()=>{X&&de===e._socket?.bytesRead&&te===e._socket?.bytesWritten?e.terminate():(X=performance.now(),e.ping(),de=e._socket?.bytesRead,te=e._socket?.bytesWritten)},"sendPing");I=setInterval(A,Z1).unref(),A()}else nr();e._socket?.setMaxListeners(200);function nr(){clearTimeout(H),de=e._socket?.bytesRead,te=e._socket?.bytesWritten,H=setTimeout(()=>{de===e._socket?.bytesRead&&te===e._socket?.bytesWritten&&(le.warn?.(`Timeout waiting for ping from ${_}, terminating connection and reconnecting`),e.terminate())},Z1*2).unref()}a(nr,"resetPingTimer");let zr=0,xr=0,Lu=!1,Qc=3e4;function Bt(){if(pn?.length>0){let A=performance.now(),U=A-xr;zr=(zr*Qc+(Lu?U:0))/(Qc+U),m&&(m[uK]=zr),xr=A}}a(Bt,"updateBackPressureRatio"),setInterval(Bt,Qc).unref();function si(){if(!(!_||!u))return m||(m=ef(f,u,_)),m}a(si,"getSharedStatus"),u&&Xc(u);let Ga,l_,um=[],u_=[],dm,ve=[],d_=[],zb=[],Du=150,qi=25,Ps=0,fm=0,mm=!1,Uo,Dn,pn,Br;e.on("message",vu);async function vu(A){if(r=await r,!r){le.error?.(s,"No authorization provided"),Fr(1008,"Unauthorized");return}pm(A),e.off("message",vu),e.on("message",pm)}a(vu,"onWSMessageWhenAuthorized");function pm(A){ce=performance.now();try{let U=A.dataView=new fl(A.buffer,A.byteOffset,A.byteLength);if(A[0]>127){let W=(0,at.decode)(A),[J,F,he]=W;switch(J){case K1:{if(F){if(_){if(_!==F){le.error?.(s,`Node name mismatch, expecting to connect to ${_}, but peer reported name as ${F}, disconnecting`),e.send((0,at.encode)([Lh])),Fr(1008,"Node name mismatch");return}}else if(_=F,t.connection?.tentativeNode){let me=t.connection.tentativeNode;me.name=_,t.connection.tentativeNode=null,sa(_,me)}if(t.connection&&(t.connection.nodeName=_),le.debug?.(s,"received node name:",_,"db:",u??W[2]),!u)try{Xc(u=W[2]),u==="system"&&(Ga=_c(t,(me,ie)=>{Va(ie)&&K(ie)}),e.on("close",()=>{Ga?.remove()}))}catch(me){le.warn?.(s,"Error setting database",me),e.send((0,at.encode)([Lh])),Fr(1008,me.message);return}hm()}break}case Q1:{le.debug?.(s,"Received table definitions for",F.map(me=>me.table));for(let me of F){let ie=W[2];me.database=ie;let Ce;if(Va(ie)){if(u==="system")Me[ie]?.[me.table]||(Ce=v(me,Me[ie]?.[me.table]));else{if(ie!=="data"&&!Me[ie]){le.warn?.("Database not found",ie);return}Ce=v(me,Me[ie]?.[me.table])}f||(f=Ce?.auditStore),E||(E=lt()?.[ie])}}break}case Lh:Fr();break;case CO:try{let me=r?.replicates||r?.subscribers||r?.name;le.debug?.("Received operation request",F,"from",_),server.operation(F,{user:r},!me).then(ie=>{le.debug?.("Requested request from finished",_,ie),Array.isArray(ie)&&(ie={results:ie}),ie.requestId=F.requestId,e.send((0,at.encode)([LT,ie]))},ie=>{le.debug?.("Failed requested operation from",_,ie),e.send((0,at.encode)([LT,{requestId:F.requestId,error:AO(ie)}]))})}catch(me){e.send((0,at.encode)([LT,{requestId:F.requestId,error:AO(me)}]))}break;case LT:let{resolve:ue,reject:_e}=R.get(F.requestId);le.debug?.("Received completed operation request",_,F),F.error?_e(new Error(F.error)):ue(F),R.delete(F.requestId);break;case IO:let re=W[3];if(!E){u?le.error?.(s,"No database found for",u):le.error?.(s,"Database name never received"),Fr();return}let oe=E[re];oe=v({table:re,database:u,attributes:F.attributes,schemaDefined:F.schemaDefined},oe),um[he]={name:re,decoder:new at.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:F.typedStructs,structures:F.structures}),getEntry(me){return oe.primaryStore.getEntry(me)},rootStore:oe.primaryStore.rootStore};break;case Y1:Br=f?l1(F,f):new Map,dm=W[2],le.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${dm}`);break;case W1:let ge=he;zb[ge]=F;break;case J1:si()[lK]=F,le.trace?.(s,"received and broadcasting committed update",F),si().buffer.notify();break;case z1:y=F,h.send({type:"end_txn",localTime:y,remoteNodeIds:S});break;case DT:{let me=W[1],{fileId:ie,size:Ce,finished:Be,error:He}=me,Te=Ne.get(ie);le.debug?.("Received blob",ie,"has stream",!!Te,"connectedToBlob",!!Te?.connectedToBlob,"length",W[2].length,"finished",Be),Te||(Te=new NO.PassThrough,Te.expectedSize=Ce,Ne.set(ie,Te)),Te.lastChunk=Date.now();let pt=W[2];We(pt.byteLength,"bytes-received",`${_}.${u}`,"replication","blob");try{Be?(He?(Te.on("error",()=>{}),Te.destroy(new Error("Blob error: "+He+" for record "+(Te.recordId??"unknown")+" from "+_))):Te.end(pt),Te.connectedToBlob&&Ne.delete(ie)):Te.write(pt)}catch(Nt){le.error?.(`Error receiving blob for ${Te.recordId} from ${_} and streaming to storage`,Nt),Ne.delete(ie)}break}case j1:{let me=F,ie;try{let Ce=W[3],Be=u_[he]||(u_[he]=E[W[4]]);if(!Be)return le.warn?.("Unknown table id trying to handle record request",he);let He=Be.primaryStore.getBinaryFast(Symbol.for("structures")),Te=He?.length??0;if(Te>0&&Te!==fm){fm=Te;let Nt=(0,at.decode)(He);e.send((0,at.encode)([IO,{typedStructs:Nt.typed,structures:Nt.named},he,Be.tableName]))}let pt=Be.primaryStore.getBinaryFast(Ce);if(pt){let Nt=Be.primaryStore.decoder.decode(pt,{valueAsBuffer:!0}),Ft=ut||{};Ft.version=(0,cK.getLastVersion)(),ut&&ut[Xu]&Zr&&(Nt=Buffer.from(Nt),zm(()=>Be.primaryStore.decoder.decode(pt),m_=>qa(m_,Ce),Be.primaryStore.rootStore)),ie=(0,at.encode)([PT,me,{value:Nt,expiresAt:Ft.expiresAt,version:Ft.version,residencyId:Ft.residencyId,nodeId:Ft.nodeId,user:Ft.user}])}else ie=(0,at.encode)([PT,me])}catch(Ce){ie=(0,at.encode)([PT,me,{error:Ce.message}])}e.send(ie);break}case PT:{let{resolve:me,reject:ie,tableId:Ce,key:Be}=R.get(W[1]),He=W[2];if(He?.error)ie(new Error(He.error));else if(He){let Te;sg(()=>{let pt=um[Ce].decoder.decode(He.value);He.value=pt,He.key=Be,me(He)||Te&&setTimeout(()=>Te.forEach(tg),6e4).unref()},f?.rootStore,pt=>{let Nt=$a(pt,Be);return Te||(Te=[]),Te.push(Nt),Nt})}else me();R.delete(W[1]);break}case V1:{pn=F;let me,ie,Ce=!1;if(h){if(u!==h.databaseName&&!h.then){le.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(le.debug?.(s,"received subscription request for",u,"at",pn),!h){let De;h=new Promise(sr=>{le.debug?.("Waiting for subscription to database "+u),De=sr}),h.ready=De,bc.set(u,h)}if(r.name)ie=Gt().subscribe(r.name),ie.then(async De=>{me=De;for await(let sr of me){let ht=sr.value;if(!(ht?.replicates===!0||ht?.replicates?.receives||ht?.subscriptions?.some(kr=>(kr.database||kr.schema)===u&&kr.publish!==!1))){Ce=!0,Fr(1008,`Unauthorized database subscription to ${u}`);return}}},De=>{le.error?.(s,"Error subscribing to HDB nodes",De)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,at.encode)([Lh])),Fr(1008,`Unauthorized database subscription to ${u}`);return}if(Dn&&(le.debug?.(s,"stopping previous subscription",u),Dn.emit("close")),pn.length===0)return;let Be=pn[0],He=a(De=>{if(De&&(Be.replicateByDefault?!Be.tables.includes(De.tableName):Be.tables.includes(De.tableName)))return{table:De}},"tableToTableEntry"),Te={txnTime:0},pt,Nt,Ft=1/0,m_,p_=a((De,sr)=>{if(De.type==="end_txn"){Te.txnTime&&(o[i]!==66&&le.error?.("Invalid encoding of message"),C(9),C(hg),O(m_=sr),iU()),i=c,Te.txnTime=0;return}let ht=De.nodeId,kr=De.tableId,Ct=Nt[kr];if(!Ct&&(Ct=Nt[kr]=He(h.tableById[kr]),!Ct))return le.debug?.("Not subscribed to table",kr);let Ls=Ct.table,zt=Ls.primaryStore,ii=zt.encoder;(De.extendedType&Ig||!ii.typedStructs)&&(ii._mergeStructures(ii.getStructures()),ii.typedStructs&&(ii.lastTypedStructuresLength=ii.typedStructs.length));let xu=pt[ht];if(!(xu&&xu.startTime<sr&&(!xu.endTime||xu.endTime>sr)))return vT&&le.trace?.(s,"skipping replication update",De.recordId,"to:",_,"from:",ht,"subscribed:",pt),oU();vT&&le.trace?.(s,"sending replication update",De.recordId,"to:",_,"from:",ht,"subscribed:",pt);let Jb=De.version;Te.txnTime!==Jb&&(Te.txnTime&&(vT&&le.trace?.(s,"new txn time, sending queued txn",Te.txnTime),o[i]!==66&&le.error?.("Invalid encoding of message"),iU()),Te.txnTime=Jb,i=c,O(Jb));let Zc=De.residencyId,Qb=f_(Zc,Ls),h_;if(Qb&&!Qb.includes(_)){let $i=f_(De.previousResidencyId,Ls);if($i&&!$i.includes(_)&&(De.type==="put"||De.type==="patch")||Ls.getResidencyById)return oU();let el=De.recordId;le.trace?.(s,"sending invalidation",el,_,"from",ht);let Em=0;Zc&&(Em|=ml),De.previousResidencyId&&(Em|=pl);let eA,E_=null;for(let aU in Ls.indices){if(!E_){if(eA=De.getValue(zt,!0),!eA)break;E_={}}E_[aU]=eA[aU]}h_=hl(De.version,kr,el,null,ht,De.user,De.type==="put"||De.type==="patch"?"invalidate":De.type,ii.encode(E_),Em,Zc,De.previousResidencyId,De.expiresAt)}function oU(){return le.trace?.(s,"skipping audit record",De.recordId),q||(q=setTimeout(()=>{q=null,(m_||0)+X1/2<Ft&&(vT&&le.trace?.(s,"sending skipped sequence update",Ft),e.send((0,at.encode)([z1,Ft])))},X1).unref()),new Promise(setImmediate)}a(oU,"skipAuditRecord");let Xb=ii.typedStructs,Zb=ii.structures;if((Xb?.length!=Ct.typed_length||Zb?.length!=Ct.structure_length)&&(Ct.typed_length=Xb?.length,Ct.structure_length=Zb.length,le.debug?.(s,"send table struct",Ct.typed_length,Ct.structure_length),Ct.sentName||(Ct.sentName=!0),e.send((0,at.encode)([IO,{typedStructs:Xb,structures:Zb,attributes:Ls.attributes,schemaDefined:Ls.schemaDefined},kr,Ct.table.tableName]))),Zc&&!d_[Zc]&&(e.send((0,at.encode)([W1,Qb,Zc])),d_[Zc]=!0),h_)C(h_.length),P(h_);else{let $i=De.encoded;De.extendedType&Zr&&zm(()=>De.getValue(zt),Em=>qa(Em,De.recordId),zt.rootStore);let el=$i[0]===66?8:0;C($i.length-el),P($i,el),le.trace?.("wrote record",De.recordId,"length:",$i.length)}if(e._socket.writableNeedDrain){let $i=performance.now();return Lu=!0,Bt(),new Promise(el=>{le.debug?.(`Waiting for remote node ${_} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",()=>{el(),Lu=!1,Bt()})})}else return $e>qi?new Promise($i=>{Ir=$i}):new Promise(setImmediate)},"sendAuditRecord"),iU=a(()=>{c-i>8?(e.send(o.subarray(i,c)),le.debug?.(s,"Sent message, size:",c-i),u!=="system"&&We(c-i,"bytes-sent",`${_}.${u}`,"replication","egress")):le.debug?.(s,"skipping empty transaction")},"sendQueuedData");Dn=new DO.EventEmitter,Dn.once("close",()=>{Ce=!0,me?.end()});for(let{startTime:De}of pn)De<Ft&&(Ft=De);(ie||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,Nt=h.tableById.map(He),pt=[];for(let{name:sr,startTime:ht,endTime:kr}of pn){let Ct=yT(sr,f);le.debug?.("subscription to",sr,"using local id",Ct,"starting",ht),pt[Ct]={startTime:ht,endTime:kr}}K(u),Ga||(Ga=Vl(sr=>{sr.databaseName===u&&K(u)}),l_=ih(sr=>{sr===u&&(e.send((0,at.encode)([Lh])),Fr())}),e.on("close",()=>{Ga?.remove(),l_?.remove()})),e.send((0,at.encode)([Y1,Rh(h.auditStore),pn.map(({name:sr})=>sr)]));let De=!0;do{isFinite(Ft)||(le.warn?.("Invalid sequence id "+Ft),Fr(1008,"Invalid sequence id"+Ft));let sr;if(De&&!Ce&&(De=!1,Ft===0)){le.info?.("Replicating all tables to",_);let ht=Date.now(),kr=xT(f);for(let Ct in E){if(!He(Ct))continue;let Ls=E[Ct];for(let zt of Ls.primaryStore.getRange({snapshot:!1,versions:!0})){if(Ce)return;le.trace?.(s,"Copying record from",u,Ct,zt.key,zt.localTime),ht=Math.max(zt.localTime??1,ht),sr=!0,si()[Dh]=1;let ii=hl(zt.version,Ls.tableId,zt.key,null,kr,null,"put",zm(()=>Ls.primaryStore.encoder.encode(zt.value),xu=>qa(xu,zt.key)),zt.metadataFlags&-256,zt.residencyId,null,zt.expiresAt);await p_({recordId:zt.key,tableId:Ls.tableId,type:"put",getValue(){return zt.value},encoded:ii,version:zt.version,residencyId:zt.residencyId,nodeId:kr,extendedType:zt.metadataFlags},zt.localTime)}}Te.txnTime||(Te.txnTime=ht,O(ht)),p_({type:"end_txn"},ht),si()[Dh]=0,Ft=ht}for(let{key:ht,value:kr}of f.getRange({start:Ft||1,exclusiveStart:!0,snapshot:!1})){if(Ce)return;let Ct=At(kr);le.debug?.("sending audit record",ht,Ct.recordId),si()[Dh]=ht,Ft=ht,await p_(Ct,ht),Dn.startTime=ht,sr=!0}sr&&p_({type:"end_txn"},Ft),si()[Dh]=0,await MB(f)}while(!Ce)}).catch(De=>{le.error?.(s,"Error handling subscription to node",De),Fr(1008,"Error handling subscription to node")});break}}return}U.position=8;let N=!0,L,$;do{si();let W=U.readInt();if(W===9&&U.getUint8(U.position)==hg){U.position++,y=$=U.readFloat64(),m[OO]=y,m[PO]=Date.now(),m[LO]=dK,h.send({type:"end_txn",localTime:y,remoteNodeIds:S}),le.trace?.("received remote sequence update",y,u);break}let J=U.position,F=At(A,J,J+W),he=um[F.tableId];he||le.error?.(`No table found with an id of ${F.tableId}`);let ue;F.residencyId&&(ue=zb[F.residencyId],le.trace?.(s,"received residency list",ue,F.type,F.recordId));let _e=F.recordId;try{sg(()=>{L={table:he.name,id:F.recordId,type:F.type,nodeId:Br.get(F.nodeId),residencyList:ue,timestamp:F.version,value:F.getValue(he),user:F.user,beginTxn:N,expiresAt:F.expiresAt}},f?.rootStore,re=>$a(re,_e))}catch(re){throw re.message+=" record id: "+_e,re.message+=" typed structures for current decoder"+JSON.stringify(he.decoder.typedStructs),re.message+=" structures for current decoder"+JSON.stringify(he.decoder.structures),re}N=!1,le.debug?.(s,"received replication message",F.type,"id",L.id,"version",new Date(F.version),"nodeId",L.nodeId),m[OO]=F.version,m[PO]=Date.now(),m[LO]=fK,h.send(L),U.position=J+W}while(U.position<A.byteLength);Ps++,u!=="system"&&We(A.byteLength,"bytes-received",`${_}.${u}.${L?.table||"unknown_table"}`,"replication","ingest"),Ps>Du&&!mm&&(mm=!0,e.pause(),le.debug?.(`Commit backlog causing replication back-pressure, requesting that ${_} pause replication`)),h.send({type:"end_txn",localTime:y,remoteNodeIds:S,async onCommit(){if(L){let W=Date.now()-L.timestamp;u!=="system"&&We(W,"replication-latency",_+"."+u+"."+L.table,L.type,"ingest")}Ps--,mm&&(mm=!1,e.resume(),le.debug?.(`Replication resuming ${_}`)),Ke.length>0&&await Promise.all(Ke),le.trace?.("All blobs finished"),!w&&$&&(le.trace?.(s,"queuing confirmation of a commit at",$),setTimeout(()=>{e.send((0,at.encode)([J1,w])),le.trace?.(s,"sent confirmation of a commit at",w),w=null},Gde)),w=$,le.debug?.("last sequence committed",new Date($),u)}})}catch(U){le.error?.(s,"Error handling incoming replication message",U)}}a(pm,"onWSMessage"),e.on("ping",nr),e.on("pong",()=>{if(t.connection){let A=performance.now()-X;t.connection.latency=A,si()&&(m[MT]=A),t.isSubscriptionConnection&&Ql({name:_,database:u,url:t.url,latency:A})}X=null}),e.on("close",(A,U)=>{clearInterval(I),clearTimeout(H),clearInterval(k),Dn&&Dn.emit("close"),Uo&&Uo.end();for(let[N,{reject:L}]of R)L(new Error(`Connection closed ${U?.toString()} ${A}`));le.debug?.(s,"closed",A,U?.toString())});function Fr(A,U){try{e.isFinished=!0,le.debug?.(s,"closing",_,u,A,U),e.close(A,U),t.connection?.emit("finished")}catch(N){le.error?.(s,"Error closing connection",N)}}a(Fr,"close");let Mu=new Set;async function qa(A,U){let N=rg(A);if(Mu.has(N)){le.debug?.("Blob already being sent",N);return}Mu.add(N);try{let L;$e++;for await(let $ of A.stream())L&&(le.debug?.("Sending blob chunk",N,"length",L.length),e.send((0,at.encode)([DT,{fileId:N,size:A.size},L]))),L=$,e._socket.writableNeedDrain&&(le.debug?.("draining",N),await new Promise(W=>e._socket.once("drain",W)),le.debug?.("drained",N)),We($.length,"bytes-sent",`${_}.${u}`,"replication","blob");le.debug?.("Sending final blob chunk",N,"length",L.length),e.send((0,at.encode)([DT,{fileId:N,size:A.size,finished:!0},L]))}catch(L){le.warn?.("Error sending blob",L,"blob id",N,"for record",U),e.send((0,at.encode)([DT,{fileId:N,finished:!0,error:AO(L)},Buffer.alloc(0)]))}finally{Mu.delete(N),$e--,$e<qi&&Ir?.()}}a(qa,"sendBlobs");function $a(A,U){let N=rg(A),L=Ne.get(N);le.debug?.("Received transaction with blob",N,"has stream",!!L,"ended",!!L?.writableEnded),L?L.writableEnded&&Ne.delete(N):(L=new NO.PassThrough,Ne.set(N,L)),L.connectedToBlob=!0,L.lastChunk=Date.now(),L.recordId=U,A.size===void 0&&L.expectedSize&&(A.size=L.expectedSize);let $=L.blob??createBlob(L,A);L.blob=$;let W=Ko(()=>jm($).saving,h.auditStore?.rootStore);return W&&(W.blobId=N,Ke.push(W),W.finally(()=>{le.debug?.(`Finished receiving blob stream ${N}`),Ke.splice(Ke.indexOf(W),1)})),$}a($a,"receiveBlobs");function hm(){if(p||(p=!0,t.connection?.on("subscriptions-updated",hm)),!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 $ of L.value.nodes||[])$.lastTxnTime>(A.get($.id)??0)&&A.set($.id,$.lastTxnTime)}catch(L){if(!L.message.includes("Can not re"))throw L}let U=t.connection?.nodeSubscriptions?.[0];S=[];let N=t.connection?.nodeSubscriptions.map((L,$)=>{let W=[],{replicateByDefault:J}=L;if(L.subscriptions){for(let _e of L.subscriptions)if(_e.subscribe&&(_e.schema||_e.database)===u){let re=_e.table;E?.[re]?.replicate!==!1&&W.push(re)}J=!1}else for(let _e in E)(J?E[_e].replicate===!1:E[_e].replicate)&&W.push(_e);let F=f&&yT(L.name,f),he=h?.dbisDB?.get([Symbol.for("seq"),F])??1,ue=Math.max(he?.seqId??1,(typeof L.startTime=="string"?new Date(L.startTime).getTime():L.startTime)??1);if(le.debug?.("Starting time recorded in db",L.name,F,u,he?.seqId,"start time:",ue,new Date(ue)),U!==L){let _e=f&&yT(U.name,f),re=h?.dbisDB?.get([Symbol.for("seq"),_e])??1;for(let oe of re?.nodes||[])oe.name===L.name&&(ue=oe.seqId,le.debug?.("Using sequence id from proxy node",U.name,ue))}return F===void 0?le.warn("Starting subscription request from node",L,"but no node id found"):S.push(F),A.get(F)>ue&&(ue=A.get(F),le.debug?.("Updating start time from more recent txn recorded",U.name,ue)),ue===1&&(L.isLeader?(le.warn?.(`Requesting full copy of database ${u} from ${L.url}`),ue=0):ue=Date.now()-6e4),le.trace?.(s,"defining subscription request",L.name,u,new Date(ue)),{name:L.name,replicateByDefault:J,tables:W,startTime:ue,isLeader:L.isLeader,endTime:L.endTime}});if(N)if(le.debug?.(s,"sending subscription request",N,h?.dbisDB?.path),clearTimeout(Y),N.length>0)e.send((0,at.encode)([V1,N]));else{let L=a(()=>{let $=performance.now();Y=setTimeout(()=>{ce<=$?Fr(1008,"Connection has no subscriptions and is no longer used"):L()},z).unref()},"scheduleClose");L()}}a(hm,"sendSubscriptionRequestUpdate");function f_(A,U){if(!A)return;let N=ve[A];return N||(N=U.getResidencyRecord(A),ve[A]=N),N}a(f_,"getResidence");function Va(A){return!(Rc&&Rc!="*"&&!Rc[A]&&!Rc.includes?.(A)&&!Rc.some?.(U=>U.name===A))}a(Va,"checkDatabaseAccess");function Xc(A){if(h=h||d.get(A),!Va(A))throw new Error(`Access to database "${A}" is not permitted`);h||le.warn?.(`No database named "${A}" was declared and registered`),f=h?.auditStore,E||(E=lt()?.[A]);let U=nt();if(U===_)throw U?new Error("Should not connect to self",U):new Error("Node name not defined");return Uu(U,A),!0}a(Xc,"setDatabase");function Uu(A,U){let N=lt()?.[U],L=[];for(let $ in N){let W=N[$];L.push({table:$,schemaDefined:W.schemaDefined,attributes:W.attributes.map(J=>({name:J.name,type:J.type,isPrimaryKey:J.isPrimaryKey}))})}le.trace?.("Sending database info for node",A,"database name",U),e.send((0,at.encode)([K1,A,U,L]))}a(Uu,"sendNodeDBName");function K(A){let U=lt()?.[A],N=[];for(let L in U){if(pn&&!pn.some(W=>W.replicateByDefault?!W.tables.includes(L):W.tables.includes(L)))continue;let $=U[L];N.push({table:L,schemaDefined:$.schemaDefined,attributes:$.attributes.map(W=>({name:W.name,type:W.type,isPrimaryKey:W.isPrimaryKey}))})}e.send((0,at.encode)([Q1,N,A]))}a(K,"sendDBSchema"),k=setInterval(()=>{for(let[A,U]of Ne)U.lastChunk+Se<Date.now()&&(le.warn?.(`Timeout waiting for blob stream to finish ${A} for record ${U.recordId??"unknown"} from ${_}`),Ne.delete(A),U.end())},Se).unref();let g=1,T=[];return{end(){Uo&&Uo.end(),Dn&&Dn.emit("close")},getRecord(A){let U=g++;return new Promise((N,L)=>{let $=[j1,U,A.table.tableId,A.id];T[A.table.tableId]||($.push(A.table.tableName),T[A.table.tableId]=!0),e.send((0,at.encode)($)),ce=performance.now(),R.set(U,{tableId:A.table.tableId,key:A.id,resolve(W){let{table:J,entry:F}=A;if(N(W),W)return J._recordRelocate(F,W)},reject:L})})},sendOperation(A){let U=g++;return A.requestId=U,e.send((0,at.encode)([CO,A])),new Promise((N,L)=>{R.set(U,{resolve:N,reject:L})})}};function C(A){B(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,N=A.length){let L=N-U;B(L),A.copy(o,c,U,N),c+=L}function O(A){B(8),l.setFloat64(c,A),c+=8}function B(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 v(A,U){let N=A.database??"data";U||(U={});let L=U.schemaDefined,$=!1,W=A.schemaDefined,J=U.attributes||[];for(let F=0;F<A.attributes?.length;F++){let he=A.attributes[F],ue=J.find(_e=>_e.name===he.name);(!ue||ue.type!==he.type)&&(L?le.error?.(`Schema for '${u}.${A.table}' is defined locally, but attribute '${he.name}: ${he.type}' from '${_}' does not match local attribute ${ue?"'"+ue.name+": "+ue.type+"'":"which does not exist"}`):($=!0,W||(he.indexed=!0),ue?J[J.indexOf(ue)]=he:J.push(he)))}return $?(le.debug?.("(Re)creating",A),ze({table:A.table,database:A.database,schemaDefined:A.schemaDefined,attributes:J,...U})):U}}var tK,at,rK,nK,sK,DO,iK,oK,vO,aK,NO,cK,Hde,AO,le,V1,K1,Y1,Lh,W1,IO,j1,PT,CO,LT,z1,J1,Q1,DT,lK,OO,PO,Dh,MT,LO,uK,dK,fK,MO,bc,vT,X1,Gde,Z1,wO,cf,eK,lf,UO=se(()=>{Oe();Ki();uO();FI();gs();tK=b(fe());G();El();at=require("msgpackr"),rK=require("ws"),nK=require("worker_threads"),sK=b(Q());Ch();DO=require("events"),iK=b(Ts()),oK=b(require("node:tls"));rf();vO=b(require("node:process")),aK=require("node:net");as();os();NO=require("node:stream"),cK=require("lmdb"),{forComponent:Hde,errorToString:AO}=sK.default,le=Hde("replication").conditional,V1=129,K1=140,Y1=141,Lh=142,W1=130,IO=132,j1=133,PT=134,CO=136,LT=137,z1=143,J1=144,Q1=145,DT=146,lK=0,OO=1,PO=2,Dh=3,MT=4,LO=5,uK=6,dK=0,fK=1,MO=new Map,bc=new Map,vT=!0,X1=300,Gde=2,Z1=3e4;a(UT,"createWebSocket");eK=500,lf=class extends DO.EventEmitter{static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=eK;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??bi(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await UT(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;le.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${vO.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),le[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=eK,this.nodeSubscriptions&&Ql({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=vh(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"?(le.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"?le.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`):le.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&&sf({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();le.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(vh,"replicateOverWS")});function Ac(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 hK(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 FO(e){try{let t=eu(e),n=ho.Certificate.fromBER(t).extensions?.find(c=>c.extnID==="2.5.29.31");if(!n)return ca.debug?.("Certificate has no CRL Distribution Points extension"),[];let s=la.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 ca.debug?.(`Found ${o.length} CRL distribution points: ${o}`),o}catch(t){return ca.warn?.(`Failed to extract CRL distribution points: ${t}`),[]}}function EK(e){try{let t=eu(e),r=ho.Certificate.fromBER(t),n=[],s=[];for(let i of r.extensions||[])if(i.extnID==="2.5.29.31")try{let o=la.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){ca.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=la.fromBER(i.extnValue.valueBlock.valueHexView);if(o.offset!==-1&&o.result instanceof la.Sequence){for(let c of o.result.valueBlock.value)if(c instanceof la.Sequence&&c.valueBlock.value.length>=2){let l=c.valueBlock.value[0],u=c.valueBlock.value[1];if(l instanceof la.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){ca.warn?.(`Failed to parse Authority Information Access extension: ${o}`)}return ca.debug?.(`Found ${n.length} CRL distribution points and ${s.length} OCSP responder URLs`),{crlUrls:n,ocspUrls:s}}catch(t){return ca.warn?.(`Failed to extract revocation URLs: ${t}`),{crlUrls:[],ocspUrls:[]}}}function eu(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 BT(e,t,r,n){let s={certPem:e,issuerPem:t,method:r,...n},i=(0,BO.createHash)("sha256").update(JSON.stringify(s)).digest("hex");return`${r}:${i}`}function kO(e,t){return`${e}:${t}`}function _K(e){try{let t=eu(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 ca.error?.(`Failed to extract serial number: ${t}`),new Error(`Failed to extract certificate serial number: ${t.message}`)}}function HO(e){try{let t=eu(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,BO.createHash)("sha256").update(s).digest("hex")}catch(t){throw ca.error?.(`Failed to extract issuer key ID: ${t}`),new Error(`Failed to extract issuer key ID: ${t.message}`)}}function FT(){return xO||(xO=ze({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"}]})),xO}var BO,ho,la,pK,ca,xO,kT=se(()=>{BO=require("node:crypto"),ho=b(require("pkijs")),la=b(require("asn1js")),pK=b(ir());Oe();ca=(0,pK.loggerWithTag)("cert-verification-utils");a(Ac,"bufferToPem");a(hK,"extractCertificateChain");a(FO,"extractCRLDistributionPoints");a(EK,"extractRevocationUrls");a(eu,"pemToBuffer");a(BT,"createCacheKey");a(kO,"createRevokedCertificateId");a(_K,"extractSerialNumber");a(HO,"extractIssuerKeyId");xO=null;a(FT,"getCertificateCacheTable")});function gK(e){let{error:t,value:r}=Kde.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 Yr,qde,uf,df,GO,$de,Vde,Kde,SK=se(()=>{Yr=b(require("joi")),qde="fail-closed",uf={timeout:5e3,cacheTtl:36e5,errorCacheTtl:3e5,failureMode:"fail-closed"},df={timeout:1e4,cacheTtl:864e5,failureMode:"fail-closed",gracePeriod:864e5},GO=Yr.default.string().valid("fail-open","fail-closed"),$de=Yr.default.alternatives().try(Yr.default.boolean().custom(e=>e===!1?{enabled:!1}:{enabled:!0,...df}),Yr.default.object({enabled:Yr.default.boolean().default(!0),timeout:Yr.default.number().min(1e3).default(df.timeout).messages({"number.min":"CRL timeout must be at least 1000ms (1 second)"}),cacheTtl:Yr.default.number().min(1e3).default(df.cacheTtl).messages({"number.min":"CRL cacheTtl must be at least 1000ms (1 second)"}),failureMode:GO.default(df.failureMode),gracePeriod:Yr.default.number().min(0).default(df.gracePeriod).messages({"number.min":"CRL gracePeriod must be at least 0ms"})})),Vde=Yr.default.alternatives().try(Yr.default.boolean().custom(e=>e===!1?{enabled:!1}:{enabled:!0,...uf}),Yr.default.object({enabled:Yr.default.boolean().default(!0),timeout:Yr.default.number().min(1e3).default(uf.timeout).messages({"number.min":"OCSP timeout must be at least 1000ms (1 second)"}),cacheTtl:Yr.default.number().min(1e3).default(uf.cacheTtl).messages({"number.min":"OCSP cacheTtl must be at least 1000ms (1 second)"}),errorCacheTtl:Yr.default.number().min(1e3).default(uf.errorCacheTtl).messages({"number.min":"OCSP errorCacheTtl must be at least 1000ms (1 second)"}),failureMode:GO.default(uf.failureMode)})),Kde=Yr.default.object({failureMode:GO.default(qde),crl:$de.default({enabled:!0,...df}),ocsp:Vde.default({enabled:!0,...uf})});a(gK,"validateAndParseCertificateVerificationConfig")});function CK(e){if(typeof e=="boolean"||e==null){if(e===qO&&$O)return Eo.trace?.("Using cached validation error result (primitive) - returning disabled"),!1;if(e===qO&&HT!==null)return Eo.trace?.("Using cached certificate verification config (primitive)"),HT;Eo.trace?.("Parsing and caching certificate verification config (primitive)"),qO=e;try{return HT=RK(e),$O=null,HT}catch(n){return $O=n,Eo.error?.(`Certificate verification config validation failed - defaulting to disabled: ${n.message}`),!1}}if(yK.get(e))return Eo.trace?.("Using cached validation error result (object) - returning disabled"),!1;let r=TK.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=RK(e);return TK.set(e,n),n}catch(n){return yK.set(e,n),Eo.error?.(`Certificate verification config validation failed - defaulting to disabled: ${n.message}`),!1}}function RK(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:gK(t===!0?{}:t)}var bK,AK,Eo,IK,wK,NK,TK,qO,HT,yK,$O,VO=se(()=>{bK=b(ir()),AK=b(yt());SK();Eo=(0,bK.loggerWithTag)("cert-verification-config"),IK=10080*60*1e3,wK=3e5,NK=`Harper/${AK.packageJson.version} CRL-Client`,TK=new WeakMap,qO=null,HT=null,yK=new WeakMap,$O=null;a(CK,"getCachedCertificateVerificationConfig");a(RK,"getCertificateVerificationConfig")});function Mh(e){return e===PK||e===Yde}function Wde(e){return e===LK||e===DK}function KO(e){return e===PK?LK:DK}function jde(){if(OK)return;OK=!0;let e=tu.CryptoEngine.prototype,t=tu.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 Mh(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return Mh(s)?{name:KO(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return Wde(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=tu.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(Mh(i)){let o=KO(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(Mh(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),o=s.toSchema().toBER(!1),c=new Uh.X509Certificate(Buffer.from(i)),l=new Uh.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(Mh(c)){let l=KO(c);try{let u=this.crypto?.subtle||this.subtle||tu.getCrypto(!0)?.subtle||Uh.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 tu,Uh,PK,Yde,LK,DK,OK,vK=se(()=>{tu=b(require("pkijs")),Uh=require("node:crypto"),PK="1.3.101.112",Yde="1.3.101.113",LK="Ed25519",DK="Ed448",OK=!1;a(Mh,"isEd25519OrEd448");a(Wde,"isEdDSAAlgorithmName");a(KO,"getEdDSAAlgorithmName");a(jde,"applyEd25519Patch");jde()});var BK={};ye(BK,{CRLSignatureVerificationError:()=>xh,performCRLCheck:()=>Qde,verifyCRL:()=>jO});function zde(){return GT||(GT=FT(),GT.sourcedFrom(ff)),GT}function Jde(){return qT||(qT=ze({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}]}),qT.sourcedFrom(WO)),qT}function UK(){return YO||(YO=ze({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}]})),YO}async function jO(e,t,r,n){if(r?.enabled===!1)return{valid:!0,status:"disabled",method:"disabled"};try{let s=Ac(e,"CERTIFICATE"),i=Ac(t,"CERTIFICATE"),o=n??FO(s);if(o.length===0)return{valid:!0,status:"no-crl-distribution-points",method:"crl"};let c=BT(s,i,"crl"),l=await zde().get(c,{certPem:s,issuerPem:i,distributionPoint:o[0],config:{crl:r??{}}});if(!l)return Or.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"}:(Or.warn?.("CRL cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"crl"});let u=l,d=l.wasLoadedFromSource?.();return Or.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 Or.error?.(`CRL verification error: ${s}`),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:s.message,method:"crl"}:(Or.warn?.("CRL check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"crl"})}}async function Qde(e,t,r,n){let s=n??FO(e);if(s.length===0)return{status:"good"};let i=_K(e),o=HO(t),c=kO(o,i);try{let u=await UK().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?(Or.warn?.("Using expired CRL data within grace period"),{status:"revoked",reason:m.revocation_reason||"unspecified",source:m.crl_source}):(Or.warn?.("CRL data is too old, treating as unknown"),{status:"unknown",reason:"crl-expired"})}let d=await Xde(s,t,r);return d.upToDate?{status:"good",source:d.source}:(Or.warn?.("CRL data is stale or missing, treating as unknown"),{status:"unknown",reason:d.reason||"crl-unavailable"})}catch(l){return Or.error?.(`CRL lookup error: ${l}`),{status:"unknown",reason:l.message}}}async function Xde(e,t,r){let n=Date.now();for(let s of e)try{let i=Jde(),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 xK(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 xh)throw i}return{upToDate:!1,reason:"no-current-crl-data"}}async function xK(e,t,r){let n=new AbortController,s=setTimeout(()=>n.abort(),r);try{let i=await fetch(e,{signal:n.signal,headers:{"User-Agent":NK}});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(eu(l)):c=o;let u=$T.CertificateRevocationList.fromBER(c),d=$T.Certificate.fromBER(eu(t)),f=await u.verify({issuerCertificate:d});if(!f){let _=`CRL signature verification failed for: ${e}`;throw Or.error?.(_),new xh(_)}let m=u.thisUpdate.value.getTime(),p=u.nextUpdate?.value.getTime()??m+IK,h=d.issuer.typesAndValues.map(_=>`${_.type}=${_.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 Zde(u,t,e,p).catch(_=>{Or.error?.(`Error processing revoked certificates: ${_}`)}),E}finally{clearTimeout(s)}}async function Zde(e,t,r,n){let s=UK(),i=HO(t),o=r;try{await efe(s,o)}catch(c){Or.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){Or.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=kO(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){Or.warn?.(`Failed to process revoked certificate: ${l}`)}}async function efe(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){Or.warn?.(`Failed to delete revoked certificate entry: ${s}`)}}catch(r){throw Or.error?.(`Failed to search for existing CRL entries: ${r}`),r}}var $T,MK,xh,Or,GT,WO,qT,YO,zO=se(()=>{$T=b(require("pkijs")),MK=b(ir());Oe();Qi();kT();VO();JO();xh=class extends Error{static{a(this,"CRLSignatureVerificationError")}constructor(t){super(t),this.name="CRLSignatureVerificationError"}},Or=(0,MK.loggerWithTag)("crl-verification");a(zde,"getCertificateCacheTable");WO=class extends Xt{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 xK(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(Or.error?.(`CRL fetch error for: ${s} - ${c}`),o.failureMode==="fail-closed"){let l=Date.now()+wK;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 Or.warn?.("CRL fetch failed, not caching (fail-open mode)"),null}}};a(Jde,"getCRLCacheTable");a(UK,"getRevokedCertificateTable");a(jO,"verifyCRL");a(Qde,"performCRLCheck");a(Xde,"checkCRLFreshness");a(xK,"downloadAndParseCRL");a(Zde,"processRevokedCertificates");a(efe,"clearExistingCRLEntries")});async function tfe(){QO||(QO=(await Promise.resolve().then(()=>(zO(),BK))).performCRLCheck),XO||(XO=(await Promise.resolve().then(()=>(ZO(),kK))).performOCSPCheck)}var FK,_Be,QO,XO,ff,JO=se(()=>{Qi();FK=b(ir()),_Be=(0,FK.loggerWithTag)("cert-verification-source");a(tfe,"loadVerificationFunctions");ff=class extends Xt{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 tfe();let d,f;if(u==="crl"){f=l.crl;let p=s.distributionPoint?[s.distributionPoint]:void 0;d=await QO(i,o,f,p)}else if(u==="ocsp")f=l.ocsp,d=await XO(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 kK={};ye(kK,{performOCSPCheck:()=>nfe,verifyOCSP:()=>eP});function rfe(){return KT||(KT=FT(),KT.sourcedFrom(ff)),KT}async function eP(e,t,r,n){if(r?.enabled===!1)return{valid:!0,status:"disabled",method:"disabled"};try{let s=Ac(e,"CERTIFICATE"),i=Ac(t,"CERTIFICATE"),o=BT(s,i,"ocsp"),c=await rfe().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"}:(VT.warn?.("OCSP cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"});let l=c,u=c.wasLoadedFromSource?.();return VT.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 VT.error?.(`OCSP verification error: ${s}`),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:s.message,method:"ocsp"}:(VT.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"})}}async function nfe(e,t,r,n){try{let s=await(0,HK.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 HK,GK,VT,KT,ZO=se(()=>{vK();HK=require("easy-ocsp"),GK=b(ir());kT();JO();VT=(0,GK.loggerWithTag)("ocsp-verification");a(rfe,"getCertificateCacheTable");a(eP,"verifyOCSP");a(nfe,"performOCSPCheck")});async function mf(e,t){cn.debug?.(`verifyCertificate called for: ${e.subject?.CN||"unknown"}`);let r=CK(t);if(r===!1)return cn.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=hK(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=Ac(n[0].cert,"CERTIFICATE"),{crlUrls:i,ocspUrls:o}=EK(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 jO(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 eP(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 qK,cn,YT=se(()=>{qK=b(ir());kT();VO();ZO();zO();cn=(0,qK.loggerWithTag)("cert-verification");a(mf,"verifyCertificate")});var oa={};ye(oa,{buildReplicationMtlsConfig:()=>QK,clearThisNodeName:()=>ffe,disableReplication:()=>afe,enabledDatabases:()=>Rc,forEachReplicatedDatabase:()=>_c,getThisNodeId:()=>xT,getThisNodeName:()=>nt,getThisNodeUrl:()=>gc,hostnameToUrl:()=>QT,lastTimeInAuditStore:()=>bh,monitorNodeCAs:()=>XK,replicateOperation:()=>pfe,replicationCertificateAuthorities:()=>aa,sendOperationToNode:()=>Bh,servers:()=>ife,setReplicator:()=>eY,start:()=>ofe,startOnMainThread:()=>dO,subscribeToNode:()=>Nh,unsubscribeFromNode:()=>AT,urlToNodeName:()=>bi});function QK(e){return e?.mtls&&typeof e.mtls=="object"?e.mtls:!0}function ofe(e){if(!e.port&&!e.securePort&&(e.port=Ks.default.get(x.OPERATIONSAPI_NETWORK_PORT),e.securePort=Ks.default.get(x.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 Ih(e))t.set(bi(i.url),i);cfe(e);let r=QK(e);e={isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e,mtls:r};let n=Ue.ws(async(i,o,c,l)=>{if(It.debug("Incoming WS connection received "+o.url),o.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return l(i,o,c);i._socket.unref(),vh(i,e,c.then(()=>o?.user)),i.on("error",u=>{u.code!=="ECONNREFUSED"&&It.error("Error in connection to "+this.url,u.message)})},e);e.runFirst=!0,Ue.http(async(i,o)=>{if(i.isWebSocket&&i.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){It.debug("Incoming replication WS connection received, authorized: "+i.authorized),!i.authorized&&i._nodeRequest.socket.authorizationError&&It.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=Gt().primaryStore;if(i.authorized&&i.peerCertificate.subjectaltname){let l=(0,zK.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 mf(i.peerCertificate,e.mtls);if(!d.valid){It.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)){It.warn("Revoked certificate used in attempt to connect to node",u.name,"certificate serial number",i.peerCertificate.serialNumber);return}else i.user=u}else It.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:It.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(aa);l.options.availableCAs&&u.push(...l.options.availableCAs.values());let d={...l.options,ca:u};l.updatedContext=JT.createSecureContext(d)}catch(u){It.error("Error creating replication TLS config",u)}},"updateContexts");i.secureContextsListeners.push(o),s.push(o),Ks.default.get(x.REPLICATION_ENABLEROOTCAS)!==!1&&o()}XK(()=>{for(let i of s)i()})}function XK(e){let t=0;tf(r=>{r?.ca&&(aa.add(r.ca),aa.size!==t&&(t=aa.size,e?.()))})}function afe(e=!0){JK=e}function cfe(e){JK||(lt(),Rc=e.databases,_c(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||bc;for(let[s,i]of jT){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];eY(r,s,e),MO.get(s)?.forEach(i=>i(s))}}))}function eY(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 ZK extends Xt{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||bc,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(It.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new is,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===Ue.hostname)continue;let E=ufe(h,ZK.subscription,e);if(E?.isConnected){let _=ef(t.auditStore,e,h)[MT];(!d||_<m)&&(d=E,f=h,m=_)}}if(!d)throw l||new WK.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:sfe++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;It.warn("Error in load from node",zT,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function lfe(e,t,r,n,s,i){let o=t+"-"+e,c=jT.get(o);c||(c=new Map,jT.set(o,c));let l=c.get(n);if(l)return l;if(r)return c.set(n,l=new lf(t,r,n,s,i)),l.connect(),l.once("finished",()=>c.delete(n)),l}function ufe(e,t,r){let n=$K.get(e);n||(n=new Map,$K.set(e,n));let s=n.get(r);if(s)return s;let i=Gt().primaryStore.get(e);return i?.url&&(s=new lf(i.url,t,r,e,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function Bh(e,t,r){r||(r={}),r.serverName=e.name;let n=await UT(e.url,r),s=vh(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{It.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{It.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function Nh(e){try{jK.isMainThread&&It.warn("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=bc.get(e.database);if(!t){let n;t=new Promise(s=>{It.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,bc.set(e.database,t)}let r=lfe(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=>Ah(n,e.database)),e.replicateByDefault)}catch(t){It.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function AT({url:e,nodes:t,database:r}){It.trace("Unsubscribing from node",e,r,"nodes",Array.from(Gt().primaryStore.getRange({})));let n=e+"-"+(t[0]?.url??e),s=jT.get(n);if(s){let i=s.get(r);i&&(i.unsubscribe(),s.delete(r))}}function dfe(){if(tP!==void 0)return tP;let e=Ks.default.get(x.OPERATIONSAPI_TLS_CERTIFICATE)||Ks.default.get(x.TLS_CERTIFICATE);if(e)return tP=new KK.X509Certificate((0,YK.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function nt(){return zT||(zT=Ks.default.get("replication_hostname")??bi(Ks.default.get("replication_url"))??dfe()??VK("operationsapi_network_secureport")??VK("operationsapi_network_port")??"127.0.0.1")}function ffe(){zT=void 0}function VK(e){let t=Ks.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function WT(e){let t=Ks.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function xT(e){return Rh(e)?.[nt()]}function gc(){let e=Ks.default.get("replication_url");return e||QT(nt())}function QT(e){let t=WT("replication_port");if(t)return`ws://${e}:${t}`;if(t=WT("replication_secureport"),t)return`wss://${e}:${t}`;if(t=WT("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=WT("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function bi(e){if(e)return new URL(e).hostname}function _c(e,t){for(let n of Object.getOwnPropertyNames(Me))r(n);return ih(n=>{r(n)}),Vl((n,s)=>{r(n.databaseName)});function r(n){let s=Me[n];It.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):mfe(n)&&t(s,n,!1)}a(r,"forDatabase")}function mfe(e){let t=Me[e];for(let r in t)if(t[r].replicate)return!0}function bh(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function pfe(e){let t={message:""};if(e.replicated){e.replicated=!1,It.trace?.("Replicating operation",e.operation,"to nodes",Ue.nodes.map(n=>n.name));let r=await Promise.allSettled(Ue.nodes.map(n=>Bh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Ue.nodes[s]?.name,i})}return t}var Ks,It,KK,YK,JT,WK,jK,zK,JK,sfe,ife,aa,Rc,jT,$K,tP,zT,gs=se(()=>{Oe();Qi();$u();UO();Hr();Ks=b(fe()),It=b(Q()),KK=require("crypto");YT();YK=require("fs");Ch();rf();G();uO();JT=b(require("node:tls")),WK=b(Ee()),jK=require("worker_threads"),zK=b(Ts()),sfe=1,ife=[],aa=Ks.default.get(x.REPLICATION_ENABLEROOTCAS)!==!1?new Set(JT.rootCertificates):new Set;a(QK,"buildReplicationMtlsConfig");a(ofe,"start");a(XK,"monitorNodeCAs");a(afe,"disableReplication");a(cfe,"assignReplicationSource");a(eY,"setReplicator");jT=new Map;a(lfe,"getSubscriptionConnection");$K=new Map;a(ufe,"getRetrievalConnectionByName");a(Bh,"sendOperationToNode");a(Nh,"subscribeToNode");a(AT,"unsubscribeFromNode");a(dfe,"getCommonNameFromCert");a(nt,"getThisNodeName");a(ffe,"clearThisNodeName");Object.defineProperty(Ue,"hostname",{get(){return nt()}});a(VK,"getHostFromListeningPort");a(WT,"getPortFromListeningPort");a(xT,"getThisNodeId");Ue.replication={getThisNodeId:xT,exportIdMapping:Rh};a(gc,"getThisNodeUrl");a(QT,"hostnameToUrl");a(bi,"urlToNodeName");a(_c,"forEachReplicatedDatabase");a(mfe,"hasExplicitlyReplicatedTable");a(bh,"lastTimeInAuditStore");a(pfe,"replicateOperation")});var ry=M((GBe,iY)=>{"use strict";var pf=LV(),{validateBySchema:Fh}=ft(),{commonValidators:hf,schemaRegex:rP}=Zi(),Sr=require("joi"),hfe=Q(),Efe=require("uuid").v4,ey=Qo(),Ef=(G(),D(j)),_fe=require("util"),Ic=ps(),{handleHDBError:ua,hdbErrors:gfe,ClientError:ru}=Ee(),{HDB_ERROR_MSGS:XT,HTTP_STATUS_CODES:da}=gfe,{SchemaEventMsg:ty}=ds(),tY=lr(),{getDatabases:Sfe}=(Oe(),D(mt)),{transformReq:_f}=ae(),{replicateOperation:rY}=(gs(),D(oa)),{cleanupOrphans:Tfe}=(os(),D(ig)),ZT=Sr.string().min(1).max(hf.schema_length.maximum).pattern(rP).messages({"string.pattern.base":"{:#label} "+hf.schema_format.message}),yfe=Sr.string().min(1).max(hf.schema_length.maximum).pattern(rP).messages({"string.pattern.base":"{:#label} "+hf.schema_format.message}).required(),Rfe=Sr.string().min(1).max(hf.schema_length.maximum).pattern(rP).messages({"string.pattern.base":"{:#label} "+hf.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();iY.exports={createSchema:bfe,createSchemaStructure:nY,createTable:Afe,createTableStructure:sY,createAttribute:Ofe,dropSchema:Ife,dropTable:wfe,dropAttribute:Nfe,getBackup:Pfe,cleanupOrphanBlobs:Lfe};async function bfe(e){let t=await nY(e);return ey.signalSchemaChange(new ty(process.pid,e.operation,e.schema)),t}a(bfe,"createSchema");async function nY(e){let t=Fh(e,Sr.object({database:ZT,schema:ZT}));if(t)throw new ru(t.message);if(_f(e),!await pf.checkSchemaExists(e.schema))throw ua(new Error,XT.SCHEMA_EXISTS_ERR(e.schema),da.BAD_REQUEST,Ef.LOG_LEVELS.ERROR,XT.SCHEMA_EXISTS_ERR(e.schema),!0);return await Ic.createSchema(e),`database '${e.schema}' successfully created`}a(nY,"createSchemaStructure");async function Afe(e){return _f(e),e.hash_attribute=e.primary_key??e.hash_attribute,await sY(e)}a(Afe,"createTable");async function sY(e){let t=Fh(e,Sr.object({database:ZT,schema:ZT,table:yfe,residence:Sr.array().items(Sr.string().min(1)).optional(),hash_attribute:Rfe}));if(t)throw new ru(t.message);if(!await pf.checkSchemaTableExists(e.schema,e.table))throw ua(new Error,XT.TABLE_EXISTS_ERR(e.schema,e.table),da.BAD_REQUEST,Ef.LOG_LEVELS.ERROR,XT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Efe(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Ic.createTable(n,e);else throw ua(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",da.BAD_REQUEST);else await Ic.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(sY,"createTableStructure");async function Ife(e){let t=Fh(e,Sr.object({database:Sr.string(),schema:Sr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new ru(t.message);_f(e);let r=await pf.checkSchemaExists(e.schema);if(r)throw ua(new Error,r,da.NOT_FOUND,Ef.LOG_LEVELS.ERROR,r,!0);let n=await pf.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await Ic.dropSchema(e),ey.signalSchemaChange(new ty(process.pid,e.operation,e.schema)),await tY.purgeSchemaTableStreams(e.schema,s);let i=await rY(e);return i.message=`successfully deleted '${e.schema}'`,i}a(Ife,"dropSchema");async function wfe(e){let t=Fh(e,Sr.object({database:Sr.string(),schema:Sr.string(),table:Sr.string().required()}));if(t)throw new ru(t.message);_f(e);let r=await pf.checkSchemaTableExists(e.schema,e.table);if(r)throw ua(new Error,r,da.NOT_FOUND,Ef.LOG_LEVELS.ERROR,r,!0);await Ic.dropTable(e),await tY.purgeTableStream(e.schema,e.table);let n=await rY(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(wfe,"dropTable");async function Nfe(e){let t=Fh(e,Sr.object({database:Sr.string(),schema:Sr.string(),table:Sr.string().required(),attribute:Sr.string().required()}));if(t)throw new ru(t.message);_f(e);let r=await pf.checkSchemaTableExists(e.schema,e.table);if(r)throw ua(new Error,r,da.NOT_FOUND,Ef.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw ua(new Error,"You cannot drop a hash attribute",da.BAD_REQUEST,void 0,void 0,!0);if(Ef.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw ua(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,da.BAD_REQUEST,void 0,void 0,!0);try{return await Ic.dropAttribute(e),Cfe(e),ey.signalSchemaChange(new ty(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw hfe.error(`Got an error deleting attribute ${_fe.inspect(e)}.`),n}}a(Nfe,"dropAttribute");function Cfe(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(Cfe,"dropAttributeFromGlobal");async function Ofe(e){_f(e);let t=Sfe()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw ua(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,da.BAD_REQUEST,void 0,void 0,!0);return await Ic.createAttribute(e),ey.signalSchemaChange(new ty(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Ofe,"createAttribute");function Pfe(e){return Ic.getBackup(e)}a(Pfe,"getBackup");function Lfe(e){if(!e.database)throw new ru('Must provide "database" name for search for orphaned blobs');if(!databases[e.database])throw new ru(`Unknown database '${e.database}'`);return Tfe(databases[e.database],e.database),{message:"Orphaned blobs cleanup started, check logs for progress"}}a(Lfe,"cleanupOrphanBlobs")});var aY=M(($Be,oY)=>{"use strict";var{OPERATIONS_ENUM:Dfe}=(G(),D(j)),nP=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Dfe.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};oY.exports=nP});var sP=M((YBe,fY)=>{"use strict";var vfe=ps(),KBe=aY(),ny=ae(),sy=(G(),D(j)),Mfe=fe(),{handleHDBError:cY,hdbErrors:Ufe}=Ee(),{HDB_ERROR_MSGS:lY,HTTP_STATUS_CODES:uY}=Ufe,xfe=Object.values(sy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),dY="To use this operation audit log must be enabled in harperdb-config.yaml";fY.exports=Bfe;async function Bfe(e){if(ny.isEmpty(e.schema))throw new Error(lY.SCHEMA_REQUIRED_ERR);if(ny.isEmpty(e.table))throw new Error(lY.TABLE_REQUIRED_ERR);if(!Mfe.get(sy.CONFIG_PARAMS.LOGGING_AUDITLOG))throw cY(new Error,dY,uY.BAD_REQUEST,sy.LOG_LEVELS.ERROR,dY,!0);let t=ny.checkSchemaTableExist(e.schema,e.table);if(t)throw cY(new Error,t,uY.NOT_FOUND,sy.LOG_LEVELS.ERROR,t,!0);if(!ny.isEmpty(e.search_type)&&xfe.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await vfe.readAuditLog(e)}a(Bfe,"readAuditLog")});var pY=M((jBe,mY)=>{"use strict";var{OPERATIONS_ENUM:Ffe}=(G(),D(j)),iP=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Ffe.GET_BACKUP,this.schema=t,this.table=r}};mY.exports=iP});var _Y=M((XBe,EY)=>{"use strict";var kfe=ps(),JBe=pY(),oP=ae(),Hfe=(G(),D(j)),QBe=fe(),{handleHDBError:Gfe,hdbErrors:qfe}=Ee(),{HDB_ERROR_MSGS:hY,HTTP_STATUS_CODES:$fe}=qfe;EY.exports=Vfe;async function Vfe(e){if(oP.isEmpty(e.schema))throw new Error(hY.SCHEMA_REQUIRED_ERR);if(oP.isEmpty(e.table))throw new Error(hY.TABLE_REQUIRED_ERR);let t=oP.checkSchemaTableExist(e.schema,e.table);if(t)throw Gfe(new Error,t,$fe.NOT_FOUND,Hfe.LOG_LEVELS.ERROR,t,!0);return await kfe.getBackup(readAuditLogObject)}a(Vfe,"getBackup")});var TY=M((eFe,SY)=>{"use strict";var Kfe=fe(),fa=require("joi"),Yfe=ft(),gY=require("moment"),Wfe=require("fs-extra"),cP=require("path"),jfe=require("lodash"),kh=(G(),D(j)),{LOG_LEVELS:nu}=(G(),D(j)),zfe="YYYY-MM-DD hh:mm:ss",Jfe=cP.resolve(__dirname,"../logs");SY.exports=function(e){return Yfe.validateBySchema(e,Qfe)};var Qfe=fa.object({from:fa.custom(aP),until:fa.custom(aP),to:fa.custom(aP),level:fa.valid(nu.NOTIFY,nu.FATAL,nu.ERROR,nu.WARN,nu.INFO,nu.DEBUG,nu.TRACE),order:fa.valid("asc","desc"),limit:fa.number().min(1),start:fa.number().min(0),log_name:fa.custom(Xfe)});function aP(e,t){if(gY(e,gY.ISO_8601).format(zfe)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(aP,"validateDatetime");function Xfe(e,t){if(jfe.invert(kh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Kfe.get(kh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?kh.LOG_NAMES.HDB:e,i=s===kh.LOG_NAMES.INSTALL?cP.join(Jfe,kh.LOG_NAMES.INSTALL):cP.join(n,s);return Wfe.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(Xfe,"validateReadLogPath")});var uP=M((rFe,RY)=>{"use strict";var iy=(G(),D(j)),Zfe=Q(),eme=fe(),tme=TY(),lP=require("path"),yY=require("fs-extra"),{once:rme}=require("events"),{handleHDBError:nme,hdbErrors:sme}=Ee(),{PACKAGE_ROOT:ime}=yt(),{replicateOperation:ome}=(gs(),D(oa)),ame=lP.join(ime,"logs"),cme=1e3,lme=200;RY.exports=ume;async function ume(e){let t=tme(e);if(t)throw nme(t,t.message,sme.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=ome(e),n=eme.get(iy.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?iy.LOG_NAMES.HDB:e.log_name,i=s===iy.LOG_NAMES.INSTALL?lP.join(ame,iy.LOG_NAMES.INSTALL):lP.join(n,s);e.to===void 0&&e.until!==void 0&&(e.to=e.until);let 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.to!==void 0,f=d?new Date(e.to):void 0,m=e.limit===void 0?cme:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,_=0;p==="desc"&&!u&&!f&&(_=Math.max(yY.statSync(i).size-(E+5)*lme,0));let R=yY.createReadStream(i,{start:_});R.on("error",q=>{Zfe.error(q)});let S=0,y=[],w="",I;R.on("data",q=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d.]+Z) \[(.+?)]: /g;q=w+q;let z=0,Y;for(;(Y=k.exec(q))&&!R.destroyed;){I&&(I.message=q.slice(z,Y.index),H(I));let[ce,de,te]=Y,Se=te.split("] ["),Ne=Se[0],Ke=Se[1];Se.splice(0,2),I={timestamp:de,thread:Ne,level:Ke,tags:Se,message:""},z=Y.index+ce.length}w=q.slice(z)}),R.on("end",q=>{R.destroyed||I&&(I.message=w.trim(),H(I))}),R.resume();function H(q){let k,z,Y;switch(!0){case(o&&l&&d):k=new Date(q.timestamp),z=new Date(u),Y=new Date(f),q.level===c&&k>=z&&k<=Y&&S<h?S++:q.level===c&&k>=z&&k<=Y&&(_o(q,p,y),S++,S===E&&R.destroy());break;case(o&&l):k=new Date(q.timestamp),z=new Date(u),q.level===c&&k>=z&&S<h?S++:q.level===c&&k>=z&&(_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),z=new Date(u),Y=new Date(f),k>=z&&k<=Y&&S<h?S++:k>=z&&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),z=new Date(u),k>=z&&S<h?S++:k>=z&&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(H,"onLogMessage"),await rme(R,"close");let X=await r;if(X.replicated){for(let q of y)q.node=server.hostname;for(let q of X.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 z of q.results)z.node=k,_o(z,p,y)}}return y}a(ume,"readLog");function _o(e,t,r){t==="desc"?dme(e,r):t==="asc"?fme(e,r):r.push(e)}a(_o,"pushLineToResult");function dme(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(dme,"insertDescending");function fme(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(fme,"insertAscending")});var oy=M((cFe,wY)=>{"use strict";var dP=require("joi"),{string:gf,boolean:bY,date:mme}=dP.types(),pme=ft(),{validateSchemaExists:sFe,validateTableExists:iFe,validateSchemaName:oFe}=Zi(),hme=(G(),D(j)),Eme=Dt(),AY=fe();AY.initSync();var aFe=gf.invalid(AY.get(hme.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(Eme.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),IY={operation:gf.valid("add_node","update_node","set_node_replication"),node_name:gf.optional(),subscriptions:dP.array().items({table:gf.optional(),schema:gf.optional(),database:gf.optional(),subscribe:bY.required(),publish:bY.required().custom(gme),start_time:mme.iso()})};function _me(e){return pme.validateBySchema(e,dP.object(IY))}a(_me,"addUpdateNodeValidator");function gme(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(gme,"checkForFalsy");wY.exports={addUpdateNodeValidator:_me,validationSchema:IY}});var Sf=M((uFe,NY)=>{"use strict";var fP=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},mP=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};NY.exports={Node:fP,NodeSubscription:mP}});var OY=M((fFe,CY)=>{"use strict";var Sme=(G(),D(j)).OPERATIONS_ENUM,pP=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Sme.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};CY.exports=pP});var Hh=M((pFe,PY)=>{"use strict";var hP=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},EP=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:hP,RemotePayloadSubscription:EP}});var DY=M((EFe,LY)=>{"use strict";var _P=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}};LY.exports=_P});var MY=M((RFe,vY)=>{"use strict";var Tme=DY(),gFe=Jt(),SFe=gt(),yme=Q(),{getSchemaPath:TFe,getTransactionAuditStorePath:yFe}=Rt(),{getDatabases:Rme}=(Oe(),D(mt));vY.exports=bme;async function bme(e){let t=new Tme;try{let r=Rme()[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){yme.warn(`unable to stat table dbi due to ${r}`)}return t}a(bme,"lmdbGetTableSize")});var xY=M((AFe,UY)=>{"use strict";var gP=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}};UY.exports=gP});var qh=M((PFe,HY)=>{"use strict";var Ame=require("fs-extra"),Ime=require("path"),An=require("systeminformation"),wc=Q(),BY=lr(),wFe=Dt(),Tf=(G(),D(j)),wme=MY(),Nme=Yl(),{getThreadInfo:FY}=st(),Gh=fe();Gh.initSync();var Cme=xY(),{openEnvironment:NFe}=gt(),{getSchemaPath:CFe}=Rt(),{database:OFe,databases:SP}=(Oe(),D(mt)),ay;HY.exports={getHDBProcessInfo:bP,getNetworkInfo:IP,getDiskInfo:AP,getMemoryInfo:RP,getCPUInfo:yP,getTimeInfo:TP,getSystemInformation:wP,systemInformation:Ome,getTableSize:NP,getMetrics:CP};function TP(){return An.time()}a(TP,"getTimeInfo");async function yP(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...d}=await An.cpu();d.cpu_speed=await An.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:_,cpus:R,...S}=await An.currentLoad();return S.cpus=[],R.forEach(y=>{let{rawLoad:w,rawLoadIdle:I,rawLoadIrq:H,rawLoadNice:X,rawLoadSystem:q,rawLoadUser:k,...z}=y;S.cpus.push(z)}),d.current_load=S,d}catch(e){return wc.error(`error in getCPUInfo: ${e}`),{}}}a(yP,"getCPUInfo");async function RP(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await An.mem();return Object.assign(s,process.memoryUsage())}catch(e){return wc.error(`error in getMemoryInfo: ${e}`),{}}}a(RP,"getMemoryInfo");async function bP(){let e={core:[],clustering:[]};try{let t=await An.processes(),r;try{r=Number.parseInt(await Ame.readFile(Ime.join(Gh.get(Tf.CONFIG_PARAMS.ROOTPATH),Tf.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Tf.NODE_ERROR_CODES.ENOENT)wc.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 wc.error(`error in getHDBProcessInfo: ${t}`),e}}a(bP,"getHDBProcessInfo");async function AP(){let e={};try{if(!Gh.get(Tf.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await An.disksIO();e.io=i;let{rxSec:o,txSec:c,wxSec:l,...u}=await An.fsStats();return e.read_write=u,e.size=await An.fsSize(),e}catch(t){return wc.error(`error in getDiskInfo: ${t}`),e}}a(AP,"getDiskInfo");async function IP(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Gh.get(Tf.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await An.networkInterfaceDefault(),e.latency=await An.inetChecksite("google.com"),(await An.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 An.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return wc.error(`error in getNetworkInfo: ${t}`),e}}a(IP,"getNetworkInfo");async function wP(){if(ay!==void 0)return ay;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await An.osInfo();e=c;let l=await An.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,ay=e,ay}catch(t){return wc.error(`error in getSystemInformation: ${t}`),e}}a(wP,"getSystemInformation");async function NP(){let e=[],t=await Nme.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await wme(n));return e}a(NP,"getTableSize");async function CP(){let e={};for(let t in SP){let r=e[t]={},n=r.tables={};for(let s in SP[t])try{let i=SP[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){wc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(CP,"getMetrics");async function kY(){if(Gh.get(Tf.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await BY.getNATSReferences(),t=await BY.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(kY,"getNatsStreamInfo");async function Ome(e){let t=new Cme;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await wP(),t.time=TP(),t.cpu=await yP(),t.memory=await RP(),t.disk=await AP(),t.network=await IP(),t.harperdb_processes=await bP(),t.table_size=await NP(),t.metrics=await CP(),t.threads=await FY(),t.replication=await kY(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await wP();break;case"time":t.time=TP();break;case"cpu":t.cpu=await yP();break;case"memory":t.memory=await RP();break;case"disk":t.disk=await AP();break;case"network":t.network=await IP();break;case"harperdb_processes":t.harperdb_processes=await bP();break;case"table_size":t.table_size=await NP();break;case"database_metrics":case"metrics":t.metrics=await CP();break;case"threads":t.threads=await FY();break;case"replication":t.replication=await kY();break;default:break}return t}a(Ome,"systemInformation")});var ma=M((UFe,VY)=>{"use strict";var Pme=Vn(),OP=ae(),Lme=require("util"),su=(G(),D(j)),GY=fe();GY.initSync();var Dme=LC(),qY=Sn(),{Node:DFe,NodeSubscription:vFe}=Sf(),vme=hd(),Mme=OY(),{RemotePayloadObject:Ume,RemotePayloadSubscription:xme}=Hh(),{handleHDBError:Bme,hdbErrors:Fme}=Ee(),{HTTP_STATUS_CODES:kme,HDB_ERROR_MSGS:Hme}=Fme,Gme=fi(),qme=qh(),{packageJson:$me}=yt(),{getDatabases:Vme}=(Oe(),D(mt)),MFe=Lme.promisify(Dme.authorize),Kme=qY.searchByHash,Yme=qY.searchByValue;VY.exports={isEmpty:Wme,getNodeRecord:jme,upsertNodeRecord:zme,buildNodePayloads:Jme,checkClusteringEnabled:Qme,getAllNodeRecords:Xme,getSystemInfo:Zme,reverseSubscription:$Y};function Wme(e){return e==null}a(Wme,"isEmpty");async function jme(e){let t=new vme(su.SYSTEM_SCHEMA_NAME,su.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Kme(t)}a(jme,"getNodeRecord");async function zme(e){let t=new Mme(su.SYSTEM_SCHEMA_NAME,su.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Pme.upsert(t)}a(zme,"upsertNodeRecord");function $Y(e){if(OP.isEmpty(e.subscribe)||OP.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($Y,"reverseSubscription");function Jme(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=OP.getTableHashAttribute(l,u),{subscribe:f,publish:m}=$Y(c),p=Vme()[l]?.[u],h=new xme(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new Ume(r,t,s,n)}a(Jme,"buildNodePayloads");function Qme(){if(!GY.get(su.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Bme(new Error,Hme.CLUSTERING_NOT_ENABLED,kme.BAD_REQUEST,void 0,void 0,!0)}a(Qme,"checkClusteringEnabled");async function Xme(){let e=new Gme(su.SYSTEM_SCHEMA_NAME,su.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Yme(e))}a(Xme,"getAllNodeRecords");async function Zme(){let e=await qme.getSystemInformation();return{hdb_version:$me.version,node_version:e.node_version,platform:e.platform}}a(Zme,"getSystemInfo")});var PP=M((BFe,XY)=>{"use strict";var cy=lr(),KY=ae(),YY=Dt(),WY=(G(),D(j)),ly=Q(),jY=ry(),epe=wp(),{RemotePayloadObject:tpe}=Hh(),{handleHDBError:zY,hdbErrors:rpe}=Ee(),{HTTP_STATUS_CODES:JY}=rpe,{NodeSubscription:QY}=Sf();XY.exports=npe;async function npe(e,t){let r;try{r=await cy.request(`${t}.${YY.REQUEST_SUFFIX}`,new tpe(WY.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),ly.trace("Response from remote describe all request:",r)}catch(o){ly.error(`addNode received error from describe all request to remote node: ${o}`);let c=cy.requestErrorHandler(o,"add_node",t);throw zY(new Error,c,JY.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===YY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw zY(new Error,o,JY.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===WY.SYSTEM_SCHEMA_NAME){await cy.createLocalTableStream(l,c);let h=new QY(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let u=KY.doesSchemaExist(l),d=n[l]!==void 0,f=c?KY.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(o);continue}if(!u&&d&&(ly.trace(`addNode creating schema: ${l}`),await jY.createSchema({operation:"create_schema",schema:l})),!f&&m){ly.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new epe(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await jY.createTable(h)}await cy.createLocalTableStream(l,c);let p=new QY(l,c,o.publish,o.subscribe);p.start_time=o.start_time,i.push(p)}return{added:i,skipped:s}}a(npe,"reviewSubscriptions")});var yf={};ye(yf,{addNodeBack:()=>LP,removeNodeBack:()=>DP,setNode:()=>ape});async function ape(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=bi(t)):t=QT(r);let n=(0,eW.validateBySchema)(e,ope);if(n)throw(0,pa.handleHDBError)(n,n.message,ipe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new pa.ClientError("url or hostname is required for remove_node operation");let p=r,h=Gt(),E=await h.get(p);if(!E)throw new pa.ClientError(p+" does not exist");try{await Bh({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?nt():p},void 0)}catch(_){ys.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:`,_)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new pa.ClientError("url required for this operation");let s=gc();if(s==null)throw new pa.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,Ys.getReplicationCert)();let p=await(0,Ys.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,Ys.createCsr)(),ys.info("Sending CSR to target node:",t)):p&&(c=p.certificate,ys.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,Cc.get)(x.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,Cc.get)(x.REPLICATION_SHARD)!==void 0&&(l.shard=(0,Cc.get)(x.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(ZY):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=ZY(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 Bh({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,ys.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&&(ys.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Ys.setCertTable)({name:spe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Ys.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,Cc.get)(x.REPLICATION_SHARD)!==void 0&&(p.shard=(0,Cc.get)(x.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await sa(nt(),p)}await sa(u?u.nodeName:f.name??bi(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 LP(e){ys.trace("addNodeBack received request:",e);let t=await(0,Ys.signCertificate)(e),r;e.csr?(r=t.signingCA,ys.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,ys.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,Ys.getReplicationCertAuth)();if(n.replicates){let i={url:gc(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,Cc.get)(x.REPLICATION_SHARD)!==void 0&&(i.shard=(0,Cc.get)(x.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await sa(nt(),i)}return await sa(e.hostname,n),t.nodeName=nt(),t.usingCA=s?.certificate,ys.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function DP(e){ys.trace("removeNodeBack received request:",e),await Gt().delete(e.name)}function ZY(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Ys,eW,Nc,Cc,ys,pa,spe,ipe,ope,Rf=se(()=>{Ys=b(Ts()),eW=b(ft()),Nc=b(require("joi")),Cc=b(fe());G();Ch();rf();gs();ys=b(Q()),pa=b(Ee()),{pki:spe}=require("node-forge"),{HTTP_STATUS_CODES:ipe}=pa.hdbErrors,ope=Nc.default.object({hostname:Nc.default.string(),verify_tls:Nc.default.boolean(),replicates:Nc.default.boolean(),subscriptions:Nc.default.array(),revoked_certificates:Nc.default.array(),shard:Nc.default.number()});a(ape,"setNode");a(LP,"addNodeBack");a(DP,"removeNodeBack");a(ZY,"reverseSubscription")});var py=M((YFe,rW)=>{"use strict";var{handleHDBError:uy,hdbErrors:cpe}=Ee(),{HTTP_STATUS_CODES:dy}=cpe,{addUpdateNodeValidator:lpe}=oy(),fy=Q(),my=(G(),D(j)),tW=Dt(),upe=ae(),$h=lr(),Vh=ma(),vP=fe(),dpe=PP(),{Node:fpe,NodeSubscription:mpe}=Sf(),{broadcast:ppe}=st(),{setNode:hpe}=(Rf(),D(yf)),VFe=fe(),KFe=(G(),D(j)),Epe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",_pe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",gpe=vP.get(my.CONFIG_PARAMS.CLUSTERING_NODENAME);rW.exports=Spe;async function Spe(e,t=!1){if(fy.trace("addNode called with:",e),vP.get(my.CONFIG_PARAMS.REPLICATION_URL)||vP.get(my.CONFIG_PARAMS.REPLICATION_HOSTNAME))return hpe(e);Vh.checkClusteringEnabled();let r=lpe(e);if(r)throw uy(r,r.message,dy.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await Vh.getNodeRecord(n);if(!upe.isEmptyOrZeroLength(f))throw uy(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,dy.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await dpe(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Epe,o;let c=Vh.buildNodePayloads(s,gpe,my.OPERATIONS_ENUM.ADD_NODE,await Vh.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 mpe(p.schema,p.table,p.publish,p.subscribe))}fy.trace("addNode sending remote payload:",c);let u;try{u=await $h.request(`${n}.${tW.REQUEST_SUFFIX}`,c)}catch(f){fy.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 $h.updateRemoteConsumer(E,n)}let m=$h.requestErrorHandler(f,"add_node",n);throw uy(new Error,m,dy.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===tW.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw uy(new Error,f,dy.INTERNAL_SERVER_ERROR,"error",f)}fy.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await $h.updateRemoteConsumer(p,n),p.subscribe===!0&&await $h.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new fpe(n,l,u.system_info);return await Vh.upsertNodeRecord(d),ppe({type:"nats_update"}),i.length>0?o.message=_pe:o.message=`Successfully added '${n}' to manifest`,o}a(Spe,"addNode")});var BP=M((zFe,sW)=>{"use strict";var{handleHDBError:MP,hdbErrors:Tpe}=Ee(),{HTTP_STATUS_CODES:UP}=Tpe,{addUpdateNodeValidator:ype}=oy(),Kh=Q(),hy=(G(),D(j)),nW=Dt(),jFe=ae(),Yh=lr(),Wh=ma(),xP=fe(),{cloneDeep:Rpe}=require("lodash"),bpe=PP(),{Node:Ape,NodeSubscription:Ipe}=Sf(),{broadcast:wpe}=st(),{setNode:Npe}=(Rf(),D(yf)),Cpe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Ope="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Ppe=xP.get(hy.CONFIG_PARAMS.CLUSTERING_NODENAME);sW.exports=Lpe;async function Lpe(e){if(Kh.trace("updateNode called with:",e),xP.get(hy.CONFIG_PARAMS.REPLICATION_URL)??xP.get(hy.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Npe(e);Wh.checkClusteringEnabled();let t=ype(e);if(t)throw MP(t,t.message,UP.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Wh.getNodeRecord(r);s.length>0&&(n=Rpe(s));let{added:i,skipped:o}=await bpe(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Cpe,c;let l=Wh.buildNodePayloads(i,Ppe,hy.OPERATIONS_ENUM.UPDATE_NODE,await Wh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];Kh.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}Kh.trace("updateNode sending remote payload:",l);let u;try{u=await Yh.request(`${r}.${nW.REQUEST_SUFFIX}`,l)}catch(d){Kh.error(`updateNode received error from request: ${d}`);let f=Yh.requestErrorHandler(d,"update_node",r);throw MP(new Error,f,UP.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===nW.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw MP(new Error,d,UP.INTERNAL_SERVER_ERROR,"error",d)}Kh.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await Yh.updateRemoteConsumer(m,r),m.subscribe===!0?await Yh.updateConsumerIterator(m.schema,m.table,r,"start"):await Yh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new Ape(r,[],u.system_info)]),await Dpe(n[0],i,u.system_info),o.length>0?c.message=Ope:c.message=`Successfully updated '${r}'`,c}a(Lpe,"updateNode");async function Dpe(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 Ipe(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Wh.upsertNodeRecord(n),wpe({type:"nats_update"})}a(Dpe,"updateNodeTable")});var lW=M((QFe,cW)=>{"use strict";var aW=require("joi"),{string:iW}=aW.types(),vpe=ft(),oW=(G(),D(j)),Mpe=fe(),Upe=Dt();cW.exports=xpe;function xpe(e){let t=iW.invalid(Mpe.get(oW.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Upe.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=aW.object({operation:iW.valid(oW.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return vpe.validateBySchema(e,r)}a(xpe,"removeNodeValidator")});var Ey=M((ZFe,pW)=>{"use strict";var{handleHDBError:uW,hdbErrors:Bpe}=Ee(),{HTTP_STATUS_CODES:dW}=Bpe,Fpe=lW(),jh=Q(),fW=ma(),kpe=ae(),bf=(G(),D(j)),mW=Dt(),FP=lr(),kP=fe(),{RemotePayloadObject:Hpe}=Hh(),{NodeSubscription:Gpe}=Sf(),qpe=Ip(),$pe=Bl(),{broadcast:Vpe}=st(),{setNode:Kpe}=(Rf(),D(yf)),Ype=kP.get(bf.CONFIG_PARAMS.CLUSTERING_NODENAME);pW.exports=Wpe;async function Wpe(e){if(jh.trace("removeNode called with:",e),kP.get(bf.CONFIG_PARAMS.REPLICATION_URL)??kP.get(bf.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Kpe(e);fW.checkClusteringEnabled();let t=Fpe(e);if(t)throw uW(t,t.message,dW.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await fW.getNodeRecord(r);if(kpe.isEmptyOrZeroLength(n))throw uW(new Error,`Node '${r}' was not found.`,dW.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Hpe(bf.OPERATIONS_ENUM.REMOVE_NODE,Ype,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await FP.updateConsumerIterator(d.schema,d.table,r,"stop");try{await FP.updateRemoteConsumer(new Gpe(d.schema,d.table,!1,!1),r)}catch(f){jh.error(f)}}try{i=await FP.request(`${r}.${mW.REQUEST_SUFFIX}`,s),jh.trace("Remove node reply from remote node:",r,i)}catch(l){jh.error("removeNode received error from request:",l),o=!0}let c=new qpe(bf.SYSTEM_SCHEMA_NAME,bf.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await $pe.deleteRecord(c),Vpe({type:"nats_update"}),i?.status===mW.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(jh.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(Wpe,"removeNode")});var _W=M((tke,EW)=>{"use strict";var hW=require("joi"),{string:jpe,array:zpe}=hW.types(),Jpe=ft(),Qpe=oy();EW.exports=Xpe;function Xpe(e){let t=hW.object({operation:jpe.valid("configure_cluster").required(),connections:zpe.items(Qpe.validationSchema).required()});return Jpe.validateBySchema(e,t)}a(Xpe,"configureClusterValidator")});var HP=M((nke,RW)=>{"use strict";var gW=(G(),D(j)),_y=Q(),Zpe=ae(),ehe=fe(),the=Ey(),rhe=py(),nhe=ma(),she=_W(),{handleHDBError:SW,hdbErrors:ihe}=Ee(),{HTTP_STATUS_CODES:TW}=ihe,ohe="Configure cluster complete.",ahe="Failed to configure the cluster. Check the logs for more details.",che="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";RW.exports=lhe;async function lhe(e){_y.trace("configure cluster called with:",e);let t=she(e);if(t)throw SW(t,t.message,TW.BAD_REQUEST,void 0,void 0,!0);let r=await nhe.getAllNodeRecords(),n=[];if(ehe.get(gW.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await yW(the,{operation:gW.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}_y.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 yW(rhe,f,f.node_name);s.push(m)}_y.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"&&(_y.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(Zpe.isEmptyOrZeroLength(o))return{message:ohe,connections:c};if(l)return{message:che,failed_nodes:o,connections:c};throw SW(new Error,ahe,TW.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(lhe,"configureCluster");async function yW(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(yW,"functionWrapper")});var wW=M((ike,IW)=>{"use strict";var zh=require("joi"),uhe=ft(),{validateSchemaExists:bW,validateTableExists:dhe,validateSchemaName:AW}=Zi(),fhe=zh.object({operation:zh.string().valid("purge_stream"),schema:zh.string().custom(bW).custom(AW).optional(),database:zh.string().custom(bW).custom(AW).optional(),table:zh.string().custom(dhe).required()});function mhe(e){return uhe.validateBySchema(e,fhe)}a(mhe,"purgeStreamValidator");IW.exports=mhe});var GP=M((ake,NW)=>{"use strict";var{handleHDBError:phe,hdbErrors:hhe}=Ee(),{HTTP_STATUS_CODES:Ehe}=hhe,_he=wW(),ghe=lr(),She=ma();NW.exports=The;async function The(e){e.schema=e.schema??e.database;let t=_he(e);if(t)throw phe(t,t.message,Ehe.BAD_REQUEST,void 0,void 0,!0);She.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await ghe.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(The,"purgeStream")});var VP=M((lke,UW)=>{"use strict";var $P=ma(),yhe=lr(),Sy=fe(),Af=(G(),D(j)),iu=Dt(),Rhe=ae(),qP=Q(),{RemotePayloadObject:bhe}=Hh(),{ErrorCode:CW}=require("nats"),{parentPort:OW}=require("worker_threads"),{onMessageByType:Ahe}=st(),{getThisNodeName:Ihe}=(gs(),D(oa)),{requestClusterStatus:whe}=(Ch(),D(R1)),{getReplicationSharedStatus:Nhe,getHDBNodeTable:Che}=(rf(),D(h1)),{CONFIRMATION_STATUS_POSITION:Ohe,RECEIVED_VERSION_POSITION:PW,RECEIVED_TIME_POSITION:Phe,SENDING_TIME_POSITION:Lhe,RECEIVING_STATUS_POSITION:Dhe,RECEIVING_STATUS_RECEIVING:vhe,BACK_PRESSURE_RATIO_POSITION:Mhe}=(UO(),D(mK)),LW=Sy.get(Af.CONFIG_PARAMS.CLUSTERING_ENABLED),DW=Sy.get(Af.CONFIG_PARAMS.CLUSTERING_NODENAME);UW.exports={clusterStatus:Uhe,buildNodeStatus:MW};var vW;Ahe("cluster-status",async e=>{vW(e)});async function Uhe(){if(Sy.get(Af.CONFIG_PARAMS.REPLICATION_URL)||Sy.get(Af.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;OW?(OW.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{vW=i})):n=whe();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=Nhe(u,l,o);c.lastCommitConfirmed=gy(d[Ohe]),c.lastReceivedRemoteTime=gy(d[PW]),c.lastReceivedLocalTime=gy(d[Phe]),c.lastReceivedVersion=d[PW],c.sendingMessage=gy(d[Lhe]),c.backPressurePercent=d[Mhe]*100,c.lastReceivedStatus=d[Dhe]===vhe?"Receiving":"Waiting"}}n.node_name=Ihe();let s=Che().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:DW,is_enabled:LW,connections:[]};if(!LW)return e;let t=await $P.getAllNodeRecords();if(Rhe.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(MW(t[n],e.connections));return await Promise.allSettled(r),e}a(Uhe,"clusterStatus");function gy(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}a(gy,"asDate");async function MW(e,t){let r=e.name,n=new bhe(Af.OPERATIONS_ENUM.CLUSTER_STATUS,DW,void 0,await $P.getSystemInfo()),s,i,o=iu.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await yhe.request(iu.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===iu.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=iu.CLUSTER_STATUS_STATUSES.CLOSED,qP.error(`Error getting node status from ${r} `,s))}catch(l){qP.warn(`Error getting node status from ${r}`,l),l.code===CW.NoResponders?o=iu.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===CW.Timeout?o=iu.CLUSTER_STATUS_STATUSES.TIMEOUT:o=iu.CLUSTER_STATUS_STATUSES.CLOSED}let c=new xhe(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!==Af.PRE_4_0_0_VERSION&&await $P.upsertNodeRecord(l)}catch(l){qP.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(MW,"buildNodeStatus");function xhe(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(xhe,"NodeStatusObject")});var YP=M((dke,xW)=>{"use strict";var{handleHDBError:Bhe,hdbErrors:Fhe}=Ee(),{HTTP_STATUS_CODES:khe}=Fhe,Hhe=lr(),Ghe=ma(),KP=ae(),Ty=require("joi"),qhe=ft(),$he=2e3,Vhe=Ty.object({timeout:Ty.number().min(1),connected_nodes:Ty.boolean(),routes:Ty.boolean()});xW.exports=Khe;async function Khe(e){Ghe.checkClusteringEnabled();let t=qhe.validateBySchema(e,Vhe);if(t)throw Bhe(t,t.message,khe.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||KP.autoCastBoolean(n),o=s===void 0||KP.autoCastBoolean(s),c={nodes:[]},l=await Hhe.getServerList(r??$he),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:KP.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Khe,"clusterNetwork")});var HW=M((mke,kW)=>{"use strict";var WP=require("joi"),BW=ft(),{routeConstraints:FW}=mA();kW.exports={setRoutesValidator:Yhe,deleteRoutesValidator:Whe};function Yhe(e){let t=WP.object({server:WP.valid("hub","leaf"),routes:FW.required()});return BW.validateBySchema(e,t)}a(Yhe,"setRoutesValidator");function Whe(e){let t=WP.object({routes:FW.required()});return BW.validateBySchema(e,t)}a(Whe,"deleteRoutesValidator")});var yy=M((hke,WW)=>{"use strict";var ha=_t(),jP=ae(),Ws=(G(),D(j)),If=fe(),GW=HW(),{handleHDBError:qW,hdbErrors:jhe}=Ee(),{HTTP_STATUS_CODES:$W}=jhe,VW="cluster routes successfully set",KW="cluster routes successfully deleted";WW.exports={setRoutes:Jhe,getRoutes:Qhe,deleteRoutes:Xhe};function zhe(e){let t=ha.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=jP.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"?ha.updateConfigValue(Ws.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):ha.updateConfigValue(Ws.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:VW,set:i,skipped:s}}a(zhe,"setRoutesNats");function Jhe(e){let t=GW.setRoutesValidator(e);if(t)throw qW(t,t.message,$W.BAD_REQUEST,void 0,void 0,!0);if(If.get(Ws.CONFIG_PARAMS.CLUSTERING_ENABLED))return zhe(e);let r=[],n=[],s=If.get(Ws.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{YW(s,i)?n.push(i):(s.push(i),r.push(i))}),ha.updateConfigValue(Ws.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:VW,set:r,skipped:n}}a(Jhe,"setRoutes");function YW(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(YW,"existsInArray");function Qhe(){if(If.get(Ws.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=ha.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return If.get(Ws.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(Qhe,"getRoutes");function Xhe(e){let t=GW.deleteRoutesValidator(e);if(t)throw qW(t,t.message,$W.BAD_REQUEST,void 0,void 0,!0);if(If.get(Ws.CONFIG_PARAMS.CLUSTERING_ENABLED))return Zhe(e);let r=[],n=[],s=If.get(Ws.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{YW(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),ha.updateConfigValue(Ws.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:KW,deleted:r,skipped:n}}a(Xhe,"deleteRoutes");function Zhe(e){let t=ha.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=jP.isEmptyOrZeroLength(r)?null:r,ha.updateConfigValue(Ws.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=jP.isEmptyOrZeroLength(n)?null:n,ha.updateConfigValue(Ws.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:KW,deleted:s,skipped:i}}a(Zhe,"deleteRoutesNats")});var zW=M((_ke,jW)=>{"use strict";var eEe=Dt(),zP=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+eEe.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"}};jW.exports=zP});var XW=M((Ske,QW)=>{"use strict";var JW=Dt(),JP=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+JW.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+JW.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"}};QW.exports=JP});var ej=M((yke,ZW)=>{"use strict";var QP=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};ZW.exports=QP});var rj=M((bke,tj)=>{"use strict";var tEe=Dt(),XP=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+tEe.SERVER_SUFFIX.ADMIN,this.password=r}};tj.exports=XP});var Iy=M((Ike,ij)=>{"use strict";var ou=require("path"),au=require("fs-extra"),rEe=zW(),nEe=XW(),sEe=ej(),iEe=rj(),ZP=(Yn(),D(gi)),Nf=ae(),jn=_t(),by=(G(),D(j)),Jh=Dt(),{CONFIG_PARAMS:ur}=by,Cf=Q(),Qh=fe(),nj=io(),eL=lr(),oEe=Ts(),wf="clustering",aEe=1e4,sj=50;ij.exports={generateNatsConfig:lEe,removeNatsConfig:uEe,getHubConfigPath:cEe};function cEe(){let e=Qh.get(ur.ROOTPATH);return ou.join(e,wf,Jh.NATS_CONFIG_FILES.HUB_SERVER)}a(cEe,"getHubConfigPath");async function lEe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=Qh.get(ur.ROOTPATH);au.ensureDirSync(ou.join(r,"clustering","leaf")),Qh.initSync();let n=jn.getConfigFromFile(ur.CLUSTERING_TLS_CERT_AUTH),s=jn.getConfigFromFile(ur.CLUSTERING_TLS_PRIVATEKEY),i=jn.getConfigFromFile(ur.CLUSTERING_TLS_CERTIFICATE);!await au.exists(i)&&!await au.exists(!n)&&await oEe.createNatsCerts();let o=ou.join(r,wf,Jh.PID_FILES.HUB),c=ou.join(r,wf,Jh.PID_FILES.LEAF),l=jn.getConfigFromFile(ur.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=ou.join(r,wf,Jh.NATS_CONFIG_FILES.HUB_SERVER),d=ou.join(r,wf,Jh.NATS_CONFIG_FILES.LEAF_SERVER),f=jn.getConfigFromFile(ur.CLUSTERING_TLS_INSECURE),m=jn.getConfigFromFile(ur.CLUSTERING_TLS_VERIFY),p=jn.getConfigFromFile(ur.CLUSTERING_NODENAME),h=jn.getConfigFromFile(ur.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await eL.checkNATSServerInstalled()||Ay("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await ZP.listUsers(),_=jn.getConfigFromFile(ur.CLUSTERING_USER),R=await ZP.getClusterUser();(Nf.isEmpty(R)||R.active!==!0)&&Ay(`Invalid cluster user '${_}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Ry(ur.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Ry(ur.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Ry(ur.CLUSTERING_HUBSERVER_NETWORK_PORT),await Ry(ur.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],y=[];for(let[z,Y]of E.entries())Y.role?.role===by.ROLE_TYPES_ENUM.CLUSTER_USER&&Y.active&&(S.push(new iEe(Y.username,nj.decrypt(Y.hash))),y.push(new sEe(Y.username,nj.decrypt(Y.hash))));let w=[],{hub_routes:I}=jn.getClusteringRoutes();if(!Nf.isEmptyOrZeroLength(I))for(let z of I)w.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${z.host}:${z.port}`);let H=new rEe(jn.getConfigFromFile(ur.CLUSTERING_HUBSERVER_NETWORK_PORT),p,o,i,s,n,f,m,h,jn.getConfigFromFile(ur.CLUSTERING_HUBSERVER_CLUSTER_NAME),jn.getConfigFromFile(ur.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),w,S,y);n==null&&(delete H.tls.ca_file,delete H.leafnodes.tls.ca_file),t=Nf.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===by.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await au.writeJson(u,H),Cf.trace(`Hub server config written to ${u}`));let X=`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 nEe(jn.getConfigFromFile(ur.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[X],[q],S,y,i,s,n,f);n==null&&delete k.tls.ca_file,(t===void 0||t===by.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await au.writeJson(d,k),Cf.trace(`Leaf server config written to ${d}`))}a(lEe,"generateNatsConfig");async function Ry(e){let t=Qh.get(e);return Nf.isEmpty(t)&&Ay(`port undefined for '${e}'`),await Nf.isPortTaken(t)&&Ay(`'${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(Ry,"isPortAvailable");function Ay(e){let t=`Error generating clustering config: ${e}`;Cf.error(t),console.error(t),process.exit(1)}a(Ay,"generateNatsConfigError");async function uEe(e){let{port:t,config_file:r}=eL.getServerConfig(e),{username:n,decrypt_hash:s}=await ZP.getClusterUser(),i=0,o=2e3;for(;i<sj;){try{let d=await eL.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){Cf.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=sj)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&&Cf.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await Nf.asyncSetTimeout(u)}let c="0".repeat(aEe),l=ou.join(Qh.get(ur.ROOTPATH),wf,r);await au.writeFile(l,c),await au.remove(l),Cf.notify(e,"started.")}a(uEe,"removeNatsConfig")});var dj=M((Nke,uj)=>{"use strict";var Rs=fe(),et=(G(),D(j)),Xh=Dt(),Ea=require("path"),{PACKAGE_ROOT:Ny}=yt(),oj=fe(),wy=ae(),Of="/dev/null",dEe=Ea.join(Ny,"launchServiceScripts"),aj=Ea.join(Ny,"utility/scripts"),fEe=Ea.join(aj,et.HDB_RESTART_SCRIPT),cj=Ea.resolve(Ny,"dependencies",`${process.platform}-${process.arch}`,Xh.NATS_BINARY_NAME);function lj(){let e={[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0,...process.env};return wy.noBootFile()&&(e[et.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=wy.getEnvCliRootPath()),{name:et.PROCESS_DESCRIPTORS.HDB,script:et.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,execArgv:process.execArgv,cwd:Ny}}a(lj,"generateMainServerConfig");var mEe=9930;function pEe(){Rs.initSync(!0);let e=Rs.get(et.CONFIG_PARAMS.ROOTPATH),t=Ea.join(e,"clustering",Xh.NATS_CONFIG_FILES.HUB_SERVER),r=Ea.join(Rs.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY),et.LOG_NAMES.HDB),n=oj.get(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Xh.LOG_LEVEL_FLAGS[Rs.get(et.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:et.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==mEe?"-"+n:""),binFile:cj,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 Rs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Of,i.error_file=Of),i}a(pEe,"generateNatsHubServerConfig");var hEe=9940;function EEe(){Rs.initSync(!0);let e=Rs.get(et.CONFIG_PARAMS.ROOTPATH),t=Ea.join(e,"clustering",Xh.NATS_CONFIG_FILES.LEAF_SERVER),r=Ea.join(Rs.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY),et.LOG_NAMES.HDB),n=oj.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Xh.LOG_LEVEL_FLAGS[Rs.get(et.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==hEe?"-"+n:""),binFile:cj,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 Rs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Of,i.error_file=Of),i}a(EEe,"generateNatsLeafServerConfig");function _Ee(){Rs.initSync();let e=Ea.join(Rs.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:dEe,autorestart:!1};return Rs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Of,t.error_file=Of),t}a(_Ee,"generateClusteringUpgradeV4ServiceConfig");function gEe(){let e={[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.RESTART_HDB};return wy.noBootFile()&&(e[et.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=wy.getEnvCliRootPath()),{...{name:et.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:aj},script:fEe}}a(gEe,"generateRestart");function SEe(){return{apps:[lj()]}}a(SEe,"generateAllServiceConfigs");uj.exports={generateAllServiceConfigs:SEe,generateMainServerConfig:lj,generateRestart:gEe,generateNatsHubServerConfig:pEe,generateNatsLeafServerConfig:EEe,generateClusteringUpgradeV4ServiceConfig:_Ee}});var Pf=M((Pke,gj)=>{"use strict";var Pr=(G(),D(j)),Oke=ae(),ga=Iy(),Cy=lr(),_a=Dt(),Oc=dj(),rL=fe(),Pc=Q(),TEe=ma(),{startWorker:fj,onMessageFromWorkers:yEe}=st(),mj=require("fs"),REe=require("node:path"),bEe=(G(),D(j)),{setTimeout:AEe}=require("node:timers/promises"),{execFile:IEe,fork:wEe}=require("node:child_process");gj.exports={start:Lc,restart:CEe,kill:DEe,startAllServices:vEe,startService:hj,restartHdb:OEe,startClusteringProcesses:Ej,startClusteringThreads:_j,isHdbRestartRunning:PEe,getHdbPid:LEe,cleanupChildrenProcesses:Zh,reloadClustering:UEe,expectedRestartOfChildren:pj};yEe(e=>{e.type==="restart"&&rL.initSync(!0)});var go=[],NEe=10,tL;function Lc(e,t=!1){let r=typeof e.args=="string"?e.args.split(" "):e.args;e.silent=!0,e.detached=!0;let n=e.script?wEe(e.script,r,e):IEe(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),!tL&&o!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<NEe&&(mj.existsSync(ga.getHubConfigPath())?Lc(e):(await ga.generateNatsConfig(!0),Lc(e),await new Promise(l=>setTimeout(l,3e3)),await ga.removeNatsConfig(Pr.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ga.removeNatsConfig(Pr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function i(o){let c=rL.get(Pr.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),l=/\[\d+][^\[]+\[(\w+)]/g,u,d=0,f;for(;u=l.exec(o);){if(u.index&&_a.LOG_LEVEL_HIERARCHY[c]>=_a.LOG_LEVEL_HIERARCHY[f||"info"]){let h=f===_a.LOG_LEVELS.ERR||f===_a.LOG_LEVELS.WRN?Pc.OUTPUTS.STDERR:Pc.OUTPUTS.STDOUT;Pc.logCustomLevel(f||"info",h,s,o.slice(d,u.index).trim())}let[m,p]=u;d=u.index+m.length,f=_a.LOG_LEVELS[p]}if(_a.LOG_LEVEL_HIERARCHY[c]>=_a.LOG_LEVEL_HIERARCHY[f||"info"]){let m=f===_a.LOG_LEVELS.ERR||f===_a.LOG_LEVELS.WRN?Pc.OUTPUTS.STDERR:Pc.OUTPUTS.STDOUT;Pc.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(Lc,"start");function Zh(e=!0){if(!tL&&(tL=!0,go.length!==0))if(Pc.info("Killing child processes..."),go.map(t=>t.kill()),e)process.exit(0);else return AEe(2e3)}a(Zh,"cleanupChildrenProcesses");function CEe(e){pj();for(let t of go)t.name===e&&t.kill()}a(CEe,"restart");function pj(){for(let e of go)e.config&&(e.config.restarts=0)}a(pj,"expectedRestartOfChildren");async function OEe(){await Lc(Oc.generateRestart())}a(OEe,"restartHdb");async function PEe(){let e=await list();for(let t in e)if(e[t].name===Pr.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(PEe,"isHdbRestartRunning");function LEe(){let e=rL.getHdbBasePath();if(!e)return;let t=REe.join(e,bEe.HDB_PID_FILE),r=xEe(t);if(!(!r||r===process.pid)&&BEe(r))return r}a(LEe,"getHdbPid");function DEe(){for(let e of go)e.kill();go=[]}a(DEe,"kill");async function vEe(){await Ej(),await _j(),await Lc(Oc.generateAllServiceConfigs())}a(vEe,"startAllServices");async function hj(e,t=!1){let r;switch(e=e.toLowerCase(),e){case Pr.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Oc.generateMainServerConfig();break;case Pr.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Oc.generateNatsIngestServiceConfig();break;case Pr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Oc.generateNatsReplyServiceConfig();break;case Pr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Oc.generateNatsHubServerConfig(),await Lc(r,t),await ga.removeNatsConfig(e);return;case Pr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Oc.generateNatsLeafServerConfig(),await Lc(r,t),await ga.removeNatsConfig(e);return;case Pr.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Oc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}Lc(r,t)}a(hj,"startService");var MEe;async function Ej(e=!1){for(let t in Pr.CLUSTERING_PROCESSES){let r=Pr.CLUSTERING_PROCESSES[t];await hj(r,e)}}a(Ej,"startClusteringProcesses");async function _j(){MEe=fj(Pr.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Pr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Cy.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Cy.updateLocalStreams();let e=await TEe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Pr.PRE_4_0_0_VERSION){Pc.info("Starting clustering upgrade 4.0.0 process"),fj(Pr.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(_j,"startClusteringThreads");async function UEe(){await ga.generateNatsConfig(!0),await Cy.reloadNATSHub(),await Cy.reloadNATSLeaf(),await ga.removeNatsConfig(Pr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ga.removeNatsConfig(Pr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(UEe,"reloadClustering");function xEe(e){try{return Number.parseInt(mj.readFileSync(e,"utf8"),10)}catch{return null}}a(xEe,"readPidFile");function BEe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}a(BEe,"isProcessRunning")});var iL={};ye(iL,{compactOnStart:()=>FEe,copyDb:()=>Aj});async function FEe(){Sa.notify("Running compact on start"),console.log("Running compact on start");let e=(0,nL.get)(x.ROOTPATH),t=new Map,r=lt();(0,sL.updateConfigValue)(x.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,Oy.join)(e,"backup",n+".mdb"),o=(0,Oy.join)(e,tl,n+"-copy.mdb"),c=0;try{c=await Sj(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Sa.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 Aj(n,o),console.log("Backing up",n,"to",i);try{await(0,cu.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}console.log("Moving copy compacted",n,"to",s),await(0,cu.move)(o,s,{overwrite:!0}),await(0,cu.remove)((0,Oy.join)(e,tl,`${n}-copy.mdb-lock`))}try{xd()}catch(n){Sa.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}try{xd()}catch(n){Sa.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Sa.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,sL.updateConfigValue)(x.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,cu.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw xd(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let o=await Sj(n);if(console.log("Database",n,"after compact has a total record count of",o),i!==o){let c=`There is a discrepancy between pre and post compact record count for database ${n}.
20
20
  Total record count before compaction: ${i}, total after: ${o}.
21
- Database backup has not been removed and can be found here: ${s}`;ga.warn(c),console.warn(c)}(0,nL.get)(x.STORAGE_COMPACTONSTARTKEEPBACKUP)!==!0&&(console.log("Removing backup",s),await(0,cu.remove)(s))}}async function Sj(e){let t=await(0,bj.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}function Lf(){}async function Aj(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=Lf,m.primaryStore.remove=Lf;for(let p in m.indices){let h=m.indices[p];h.put=Lf,h.remove=Lf}m.auditStore&&(m.auditStore.put=Lf,m.auditStore.remove=Lf),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,Tj.open)(new yj.default(t)),c=o.openDB(Py.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,_;if(h&&(E=p.compression,_=MS(),_?p.compression=_:delete p.compression,E?.dictionary?.toString()===_?.dictionary?.toString()&&(E=null,_=null)),c.put(m,p),!(h||p.indexed))continue;let R=new Rj.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=_;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(Py.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 _=0,R=0,S=0,y=1e7,w=null;for(;y-- >0;)try{for(let I of m.getKeys({start:w,transaction:E}))try{w=I;let{value:H,version:X}=m.getEntry(I,{transaction:E});if(H?.length<14&&h){S++;continue}l=p.put(I,H,h?X:void 0),_++,E.openTimer&&(E.openTimer=0),R+=(I?.length||10)+H.length,u++>5e3&&(await l,console.log("copied",_,"entries",S,"delete records,",R,"bytes"),u=0)}catch(H){console.error("Error copying record",typeof I=="symbol"?"symbol":I,"from",e,"to",t,H)}console.log("finish copying, copied",_,"entries",S,"delete records,",R,"bytes");return}catch{if(typeof w=="string"){if(w==="z")return console.error("Reached end of dbi",w,"for",e,"to",t);w=w.slice(0,-2)+"z"}else if(typeof w=="number")w++;else return console.error("Unknown key type",w,"for",e,"to",t)}}a(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),o.close()}}var Tj,Oy,cu,nL,yj,Rj,Py,bj,sL,ga,oL=se(()=>{Oe();Tj=require("lmdb"),Oy=require("path"),cu=require("fs-extra"),nL=b(fe()),yj=b(mp()),Rj=b(fp()),Py=b(Jt());G();Ki();bj=b(Yl()),sL=b(_t()),ga=b(Q());a(FEe,"compactOnStart");a(Sj,"getTotalDBRecordCount");a(Lf,"noop");a(Aj,"copyDb")});var cL=M((xke,Ij)=>{"use strict";var eE=fe();eE.initSync();var Df=require("fs-extra"),aL=require("path"),vf=(G(),D(j)),kEe=require("crypto"),HEe=require("uuid").v4;Ij.exports=GEe;function GEe(){if(eE.getHdbBasePath()!==void 0){let e=aL.join(eE.getHdbBasePath(),vf.LICENSE_KEY_DIR_NAME,vf.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=aL.join(eE.getHdbBasePath(),vf.LICENSE_KEY_DIR_NAME,vf.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=aL.join(eE.getHdbBasePath(),vf.LICENSE_KEY_DIR_NAME,vf.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Df.accessSync(r),Df.accessSync(e),Df.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=HEe(),i=kEe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Df.writeFileSync(r,s),Df.writeFileSync(e,i.privateKey),Df.writeFileSync(t,i.publicKey)}else throw n}}}a(GEe,"checkJWTTokenExist")});var Nj=M((Fke,wj)=>{"use strict";var lL=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};wj.exports={HdbInfoInsertObject:lL}});var Pj=M((Hke,Oj)=>{"use strict";var Cj=(G(),D(j)),uL=class{static{a(this,"UpgradeObject")}constructor(t,r){this[Cj.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[Cj.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};Oj.exports={UpgradeObject:uL}});var Ly=M((qke,Dj)=>{"use strict";var js=require("prompt"),Mf=require("chalk"),Lj=Q(),wi=require("os"),dL=rl(),fL=["yes","y"];async function qEe(e){let t=`${wi.EOL}`+Mf.bold.green("Your current HarperDB version requires that we complete an update process.")+`${wi.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${wi.EOL}${wi.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${wi.EOL}`;js.override=dL(["CONFIRM_UPGRADE"]),js.start(),js.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Mf.magenta(`${wi.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 js.get([r])}catch(s){return Lj.error("There was an error when prompting user about an upgrade."),Lj.error(s),!1}return fL.includes(n.CONFIRM_UPGRADE)}a(qEe,"forceUpdatePrompt");async function $Ee(e){let t=`${wi.EOL}`+Mf.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.${wi.EOL}`);js.override=dL(["CONFIRM_DOWNGRADE"]),js.start(),js.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Mf.magenta(`${wi.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 js.get([r]);return fL.includes(n.CONFIRM_DOWNGRADE)}a($Ee,"forceDowngradePrompt");async function VEe(){let e=`${wi.EOL}`+Mf.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");js.override=dL(["GENERATE_CERTS"]),js.start(),js.message=e;let t={properties:{GENERATE_CERTS:{description:Mf.magenta(`${wi.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 js.get([t]);return fL.includes(r.GENERATE_CERTS)}a(VEe,"upgradeCertsPrompt");Dj.exports={forceUpdatePrompt:qEe,forceDowngradePrompt:$Ee,upgradeCertsPrompt:VEe}});var Dy=M((Vke,vj)=>{"use strict";var mL=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};vj.exports=mL});var Uj=M((Jke,Mj)=>{"use strict";var KEe=ae(),YEe=_t(),Yke=Q(),Wke=require("path"),jke=require("fs"),zke=(G(),D(j));Mj.exports={getOldPropsValue:WEe};function WEe(e,t,r=!1){let n=t.getRaw(e);return KEe.isNotEmptyAndHasValue(n)?n:r?YEe.getDefaultConfig(e):""}a(WEe,"getOldPropsValue")});var kj=M((Xke,Fj)=>{"use strict";var Dc=require("path"),vc=require("fs-extra"),jEe=require("properties-reader"),zEe=Dy(),Tr=Q(),{getOldPropsValue:St}=Uj(),{HDB_SETTINGS_NAMES:be,CONFIG_PARAMS:lu}=(G(),D(j)),uu=_t(),vy=fe(),xj=ae(),So=(G(),D(j)),pL=new zEe("3.1.0"),Bj=[];function JEe(){let e=jEe(vy.get(be.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Tr.info(t);let r=` ;Settings for the HarperDB process.
21
+ Database backup has not been removed and can be found here: ${s}`;Sa.warn(c),console.warn(c)}(0,nL.get)(x.STORAGE_COMPACTONSTARTKEEPBACKUP)!==!0&&(console.log("Removing backup",s),await(0,cu.remove)(s))}}async function Sj(e){let t=await(0,bj.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}function Lf(){}async function Aj(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=Lf,m.primaryStore.remove=Lf;for(let p in m.indices){let h=m.indices[p];h.put=Lf,h.remove=Lf}m.auditStore&&(m.auditStore.put=Lf,m.auditStore.remove=Lf),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,Tj.open)(new yj.default(t)),c=o.openDB(Py.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,_;if(h&&(E=p.compression,_=MS(),_?p.compression=_:delete p.compression,E?.dictionary?.toString()===_?.dictionary?.toString()&&(E=null,_=null)),c.put(m,p),!(h||p.indexed))continue;let R=new Rj.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=_;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(Py.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 _=0,R=0,S=0,y=1e7,w=null;for(;y-- >0;)try{for(let I of m.getKeys({start:w,transaction:E}))try{w=I;let{value:H,version:X}=m.getEntry(I,{transaction:E});if(H?.length<14&&h){S++;continue}l=p.put(I,H,h?X:void 0),_++,E.openTimer&&(E.openTimer=0),R+=(I?.length||10)+H.length,u++>5e3&&(await l,console.log("copied",_,"entries",S,"delete records,",R,"bytes"),u=0)}catch(H){console.error("Error copying record",typeof I=="symbol"?"symbol":I,"from",e,"to",t,H)}console.log("finish copying, copied",_,"entries",S,"delete records,",R,"bytes");return}catch{if(typeof w=="string"){if(w==="z")return console.error("Reached end of dbi",w,"for",e,"to",t);w=w.slice(0,-2)+"z"}else if(typeof w=="number")w++;else return console.error("Unknown key type",w,"for",e,"to",t)}}a(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),o.close()}}var Tj,Oy,cu,nL,yj,Rj,Py,bj,sL,Sa,oL=se(()=>{Oe();Tj=require("lmdb"),Oy=require("path"),cu=require("fs-extra"),nL=b(fe()),yj=b(mp()),Rj=b(fp()),Py=b(Jt());G();Ki();bj=b(Yl()),sL=b(_t()),Sa=b(Q());a(FEe,"compactOnStart");a(Sj,"getTotalDBRecordCount");a(Lf,"noop");a(Aj,"copyDb")});var cL=M((xke,Ij)=>{"use strict";var eE=fe();eE.initSync();var Df=require("fs-extra"),aL=require("path"),vf=(G(),D(j)),kEe=require("crypto"),HEe=require("uuid").v4;Ij.exports=GEe;function GEe(){if(eE.getHdbBasePath()!==void 0){let e=aL.join(eE.getHdbBasePath(),vf.LICENSE_KEY_DIR_NAME,vf.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=aL.join(eE.getHdbBasePath(),vf.LICENSE_KEY_DIR_NAME,vf.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=aL.join(eE.getHdbBasePath(),vf.LICENSE_KEY_DIR_NAME,vf.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Df.accessSync(r),Df.accessSync(e),Df.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=HEe(),i=kEe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Df.writeFileSync(r,s),Df.writeFileSync(e,i.privateKey),Df.writeFileSync(t,i.publicKey)}else throw n}}}a(GEe,"checkJWTTokenExist")});var Nj=M((Fke,wj)=>{"use strict";var lL=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};wj.exports={HdbInfoInsertObject:lL}});var Pj=M((Hke,Oj)=>{"use strict";var Cj=(G(),D(j)),uL=class{static{a(this,"UpgradeObject")}constructor(t,r){this[Cj.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[Cj.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};Oj.exports={UpgradeObject:uL}});var Ly=M((qke,Dj)=>{"use strict";var js=require("prompt"),Mf=require("chalk"),Lj=Q(),wi=require("os"),dL=rl(),fL=["yes","y"];async function qEe(e){let t=`${wi.EOL}`+Mf.bold.green("Your current HarperDB version requires that we complete an update process.")+`${wi.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${wi.EOL}${wi.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${wi.EOL}`;js.override=dL(["CONFIRM_UPGRADE"]),js.start(),js.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Mf.magenta(`${wi.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 js.get([r])}catch(s){return Lj.error("There was an error when prompting user about an upgrade."),Lj.error(s),!1}return fL.includes(n.CONFIRM_UPGRADE)}a(qEe,"forceUpdatePrompt");async function $Ee(e){let t=`${wi.EOL}`+Mf.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.${wi.EOL}`);js.override=dL(["CONFIRM_DOWNGRADE"]),js.start(),js.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Mf.magenta(`${wi.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 js.get([r]);return fL.includes(n.CONFIRM_DOWNGRADE)}a($Ee,"forceDowngradePrompt");async function VEe(){let e=`${wi.EOL}`+Mf.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");js.override=dL(["GENERATE_CERTS"]),js.start(),js.message=e;let t={properties:{GENERATE_CERTS:{description:Mf.magenta(`${wi.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 js.get([t]);return fL.includes(r.GENERATE_CERTS)}a(VEe,"upgradeCertsPrompt");Dj.exports={forceUpdatePrompt:qEe,forceDowngradePrompt:$Ee,upgradeCertsPrompt:VEe}});var Dy=M((Vke,vj)=>{"use strict";var mL=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};vj.exports=mL});var Uj=M((Jke,Mj)=>{"use strict";var KEe=ae(),YEe=_t(),Yke=Q(),Wke=require("path"),jke=require("fs"),zke=(G(),D(j));Mj.exports={getOldPropsValue:WEe};function WEe(e,t,r=!1){let n=t.getRaw(e);return KEe.isNotEmptyAndHasValue(n)?n:r?YEe.getDefaultConfig(e):""}a(WEe,"getOldPropsValue")});var kj=M((Xke,Fj)=>{"use strict";var Dc=require("path"),vc=require("fs-extra"),jEe=require("properties-reader"),zEe=Dy(),Tr=Q(),{getOldPropsValue:St}=Uj(),{HDB_SETTINGS_NAMES:be,CONFIG_PARAMS:lu}=(G(),D(j)),uu=_t(),vy=fe(),xj=ae(),So=(G(),D(j)),pL=new zEe("3.1.0"),Bj=[];function JEe(){let e=jEe(vy.get(be.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Tr.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
  ${be.HDB_ROOT_KEY} = ${St(be.HDB_ROOT_KEY,e)}
@@ -87,18 +87,18 @@ ${be.CUSTOM_FUNCTIONS_PORT_KEY} = ${uu.getDefaultConfig(lu.HTTP_PORT)}
87
87
  ${be.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${Dc.join(St(be.HDB_ROOT_KEY,e),"custom_functions")}
88
88
  ;Set the max number of processes HarperDB will start for the Custom Functions server
89
89
  ${be.MAX_CUSTOM_FUNCTION_PROCESSES} = ${uu.getDefaultConfig(lu.HTTP_THREADS)}
90
- `,n=vy.get("settings_path"),s=Dc.dirname(n),i=Dc.join(s,"3_1_0_upgrade_settings.bak");try{Tr.info(`Backing up old settings file to: ${i}`),vc.copySync(n,i)}catch(c){throw Tr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Tr.info("New settings file values for 3.1.0 upgrade:",r),Tr.info(`Creating new/upgraded settings file at '${n}'`),vc.writeFileSync(n,r),Tr.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),Tr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Tr.error(c),vc.copySync(i,n),c}vy.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),Tr.info(o),o}a(JEe,"updateSettingsFile310");function QEe(){let e=Dc.join(xj.getHomeDir(),So.HDB_HOME_DIR_NAME,So.LICENSE_KEY_DIR_NAME,So.LICENSE_FILE_NAME),t=Dc.join(xj.getHomeDir(),So.HDB_HOME_DIR_NAME,So.LICENSE_KEY_DIR_NAME,So.REG_KEY_FILE_NAME),r=Dc.join(vy.getHdbBasePath(),So.LICENSE_KEY_DIR_NAME,So.LICENSE_FILE_NAME),n=Dc.join(r,So.LICENSE_FILE_NAME),s=Dc.join(r,So.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Tr.info(i);let o="Creating .license directory";console.log(o),Tr.info(o),vc.mkdirpSync(r);try{vc.accessSync(e);try{let c="Moving licence file";console.log(c),Tr.info(c),vc.moveSync(e,n);let l="License file successfully moved.";console.log(l),Tr.info(l)}catch{let l="moving license file failed";console.error(l),Tr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Tr.warn(l)}try{vc.accessSync(t);try{let c="Moving registration file";console.log(c),Tr.info(c),vc.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Tr.info(l)}catch{let l="moving registration file failed";console.error(l),Tr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Tr.warn(l)}}a(QEe,"moveLicenseFiles");pL.sync_functions.push(JEe);pL.sync_functions.push(QEe);Bj.push(pL);Fj.exports=Bj});var Vj=M((eHe,$j)=>{"use strict";var bs=gt(),{insertRecords:XEe}=Il(),ZEe=xn(),Mc=Jt(),e_e=ae(),Sa=Q(),t_e=ae(),To=require("fs-extra"),Ta=require("path"),r_e=require("cli-progress"),tE=require("assert"),n_e=require("pino"),s_e=fe();$j.exports=i_e;var My,Hj,Uy,hL,In,rE=!1;async function i_e(e=!0){return My=s_e.getHdbBasePath(),Hj=Ta.join(My,"schema"),Uy=Ta.join(My,"4_0_0_upgrade_tmp"),hL=Ta.join(My,"transactions"),console.info("Reindexing upgrade started for schemas"),Sa.notify("Reindexing upgrade started for schemas"),await Gj(Hj,!1,e),await To.pathExists(hL)&&(console.info(`
90
+ `,n=vy.get("settings_path"),s=Dc.dirname(n),i=Dc.join(s,"3_1_0_upgrade_settings.bak");try{Tr.info(`Backing up old settings file to: ${i}`),vc.copySync(n,i)}catch(c){throw Tr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Tr.info("New settings file values for 3.1.0 upgrade:",r),Tr.info(`Creating new/upgraded settings file at '${n}'`),vc.writeFileSync(n,r),Tr.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),Tr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Tr.error(c),vc.copySync(i,n),c}vy.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),Tr.info(o),o}a(JEe,"updateSettingsFile310");function QEe(){let e=Dc.join(xj.getHomeDir(),So.HDB_HOME_DIR_NAME,So.LICENSE_KEY_DIR_NAME,So.LICENSE_FILE_NAME),t=Dc.join(xj.getHomeDir(),So.HDB_HOME_DIR_NAME,So.LICENSE_KEY_DIR_NAME,So.REG_KEY_FILE_NAME),r=Dc.join(vy.getHdbBasePath(),So.LICENSE_KEY_DIR_NAME,So.LICENSE_FILE_NAME),n=Dc.join(r,So.LICENSE_FILE_NAME),s=Dc.join(r,So.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Tr.info(i);let o="Creating .license directory";console.log(o),Tr.info(o),vc.mkdirpSync(r);try{vc.accessSync(e);try{let c="Moving licence file";console.log(c),Tr.info(c),vc.moveSync(e,n);let l="License file successfully moved.";console.log(l),Tr.info(l)}catch{let l="moving license file failed";console.error(l),Tr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Tr.warn(l)}try{vc.accessSync(t);try{let c="Moving registration file";console.log(c),Tr.info(c),vc.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Tr.info(l)}catch{let l="moving registration file failed";console.error(l),Tr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Tr.warn(l)}}a(QEe,"moveLicenseFiles");pL.sync_functions.push(JEe);pL.sync_functions.push(QEe);Bj.push(pL);Fj.exports=Bj});var Vj=M((eHe,$j)=>{"use strict";var bs=gt(),{insertRecords:XEe}=Il(),ZEe=xn(),Mc=Jt(),e_e=ae(),Ta=Q(),t_e=ae(),To=require("fs-extra"),ya=require("path"),r_e=require("cli-progress"),tE=require("assert"),n_e=require("pino"),s_e=fe();$j.exports=i_e;var My,Hj,Uy,hL,In,rE=!1;async function i_e(e=!0){return My=s_e.getHdbBasePath(),Hj=ya.join(My,"schema"),Uy=ya.join(My,"4_0_0_upgrade_tmp"),hL=ya.join(My,"transactions"),console.info("Reindexing upgrade started for schemas"),Ta.notify("Reindexing upgrade started for schemas"),await Gj(Hj,!1,e),await To.pathExists(hL)&&(console.info(`
91
91
 
92
- Reindexing upgrade started for transaction logs`),Sa.notify("Reindexing upgrade started for transaction logs"),await Gj(hL,!0,e)),Sa.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(rE?", but errors occurred":"")}a(i_e,"reindexUpgrade");async function Gj(e,t,r){let n=await To.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=Ta.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(Ta.join(c,f)).isDirectory())try{await o_e(o,f,t),In.info(`Reindexing started for ${o}.${f}`),Sa.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${f}`),await c_e(o,f,c,t,r),In.info(`Reindexing completed for ${o}.${f}`),Sa.notify(`Reindexing completed for ${o}.${f}`)}catch(m){rE=!0,m.schema_path=c,m.table_name=f,Sa.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Sa.error(m),In.error(m),console.error(m)}}}if(!rE)try{await To.rm(Uy,{recursive:!0})}catch{}}a(Gj,"processTables");async function o_e(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Ta.join(Uy,s);await To.ensureDir(Uy),await To.writeFile(i,""),In=n_e({level:"debug",formatters:{bindings(){}}},i)}a(o_e,"initPinoLogger");var a_e=20;async function c_e(e,t,r,n,s){let i;try{i=await bs.openEnvironment(r,t,n)}catch(S){if(S.message==="MDB_INVALID: File is not an LMDB file"){Sa.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`),In.error(S);return}throw S}let o=d_e(i.dbis),c=bs.openDBI(i,o),l=Object.keys(i.dbis),u=bs.statDBI(i,o);In.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new r_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 bs.createEnvironment(r,t,!1);bs.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>a_e&&await p();await p()}catch(S){throw rE=!0,In.error(S),S}async function p(){let S,y=m.map(({value:I})=>I);n?S=await Promise.all(y.map(I=>l_e(f,I))):S=await XEe(f,o,l.filter(I=>I!=="__blob__"),y,!1);for(let I=0,H=m.length;I<H;I++){let{key:X,value:q}=m[I];In.info(`Record hash value: ${X} hash: ${o}`);let k;n?k=S[I]:k=S.written_hashes.indexOf(X)>-1,tE(k,!0),u_e(f,o,q[o],n),In.info(`Insert success, written hashes: ${S.written_hashes}`),d.increment()}m=[],d.value/d.total*100%10===0&&Sa.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),In.info(`${d.value}/${d.total} records inserted`)}a(p,"finishOutstanding"),d.stop();let h=bs.statDBI(i,o),E=bs.statDBI(f,o);if(In.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${E.entryCount}`),tE.deepStrictEqual(h.entryCount,E.entryCount),await bs.closeEnvironment(i),await bs.closeEnvironment(f),delete global.lmdb_map[`${e}.${t}`],s){let S=Ta.join(r,t),y=Ta.join(S,"data.mdb"),w=Ta.join(S,"lock.mdb");await To.unlink(y),await To.unlink(w),await To.rmdir(S),In.info(`Deleted old environment files from schema folder: ${y}, ${w}`)}let _=await bs.openEnvironment(r,t),R=bs.statDBI(_,o);In.info(`New stats: ${JSON.stringify(E)}. New stats after move: ${JSON.stringify(R)}`),tE.deepStrictEqual(R.entryCount,E.entryCount),await bs.closeEnvironment(_),delete global.lmdb_map[`${e}.${t}`]}a(c_e,"processTable");async function l_e(e,t){bs.initializeDBIs(e,Mc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Mc.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Mc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Mc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),t_e.isEmpty(t.user_name)||e.dbis[Mc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Mc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(l_e,"insertTransaction");function u_e(e,t,r,n){let i=e.dbis[t].get(r);tE.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Mc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Mc.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&&!e_e.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let f=l[u];qj(e,c,f,r)}else qj(e,c,l,r)}a(u_e,"validateIndices");function qj(e,t,r,n){try{let s=!1,i=ZEe.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||In.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),tE.deepStrictEqual(s,!0)}catch(s){rE=!0,In.error(s),console.error(s)}}a(qj,"validateIndex");function d_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(d_e,"getHashDBI")});var zj=M((nHe,jj)=>{"use strict";var xy=require("path"),Uc=require("fs-extra"),f_e=Dy(),du=Q(),Kj=_t(),EL=fe(),Ni=(G(),D(j)),By=ae(),m_e=require("properties-reader"),p_e=fi(),h_e=YS(),E_e=Sn(),rHe=require("util"),__e=E_e.searchByValue,g_e=Vn(),S_e=yy(),T_e=Dt(),y_e=Vj(),Yj=Ts(),R_e=Ly(),iE=new f_e("4.0.0"),Wj=[],nE,sE;async function b_e(){try{if(await R_e.upgradeCertsPrompt()){if(console.log("Generating new certificates."),nE){let t=By.changeExtension(nE,".bak");await Uc.move(nE,t)}if(sE){let t=By.changeExtension(sE,".bak");await Uc.move(sE,t)}await Yj.generateKeys()}else console.log("Using existing certificates."),Yj.updateConfigCert(nE,sE,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(b_e,"generateNewKeys");async function A_e(){console.log("Updating HarperDB nodes."),du.info("Updating HarperDB nodes.");let e=[];try{let t=new p_e(Ni.SYSTEM_SCHEMA_NAME,Ni.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await __e(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!T_e.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:Ni.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(By.isEmptyOrZeroLength(n))return;let s=new h_e(Ni.SYSTEM_SCHEMA_NAME,Ni.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await g_e.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{S_e.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(A_e,"updateNodes");async function I_e(){let e=EL.get(Ni.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(xy.join("config","settings.js"))){du.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),du.info(t);let r=xy.dirname(e),n=EL.get(Ni.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=xy.join(n,"backup","4_0_0_upgrade_settings.bak"),i=xy.join(n,Ni.HDB_CONFIG_FILE);try{du.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Uc.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{du.info(`Creating new/upgraded settings file at '${new_settings_path}'`),console.log(`Creating new/upgraded settings file at '${new_settings_path}'`),du.info("Updating env variables with new settings values");let f=Kj.initOldConfig(e);nE=f[Ni.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],sE=f[Ni.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],Kj.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=By.getPropsFilePath();Uc.accessSync(o,Uc.constants.F_OK|Uc.constants.R_OK);let l=m_e(o).get(Ni.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
93
- install_user = ${l}`;try{Uc.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{EL.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{Uc.removeSync(r),console.log(d),du.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(I_e,"updateSettingsFile400");iE.async_functions.push(I_e);iE.async_functions.push(b_e);iE.async_functions.push(y_e);iE.async_functions.push(A_e);Wj.push(iE);jj.exports=Wj});var Zj=M((iHe,Xj)=>{var w_e=Dy(),{databases:N_e,table:C_e}=(Oe(),D(mt)),O_e=to(),_L=Q(),Jj=new w_e("4.7.0"),Qj=[];async function P_e(){let e=N_e.system?.hdb_license;if(!e){_L.debug?.("system.hdb_license table not found; no migration necessary");return}return _L.debug?.("Dropping existing system.hdb_license table"),await e.dropTable(),_L.debug?.("Creating new usage block system.hdb_license table"),C_e(O_e.hdb_license)}a(P_e,"convertToUsageBlockLicenses");Jj.async_functions.push(P_e);Qj.push(Jj);Xj.exports=Qj});var gL=M((aHe,sz)=>{"use strict";var fu=ae(),L_e=(G(),D(j)),ez=Q(),{DATA_VERSION:D_e,UPGRADE_VERSION:v_e}=L_e.UPGRADE_JSON_FIELD_NAMES_ENUM,tz=kj(),Fy=zj(),rz=Zj(),xc=new Map;tz&&tz.forEach(e=>{xc.set(e.version,e)});Fy&&Fy.forEach(e=>{xc.set(e.version,e)});Fy&&Fy.forEach(e=>{xc.set(e.version,e)});rz&&rz.forEach(e=>{xc.set(e.version,e)});function M_e(){return[...xc.keys()].sort(fu.compareVersions)}a(M_e,"getSortedVersions");function nz(e){let t=e[D_e],r=e[v_e];return fu.isEmptyOrZeroLength(t)||fu.isEmptyOrZeroLength(r)?(ez.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),ez.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."),[]):[...xc.keys()].sort(fu.compareVersions).filter(function(n){return fu.compareVersions(n,t)>0&&fu.compareVersions(n,r)<=0})}a(nz,"getVersionsForUpgrade");function U_e(e){return nz(e).length>0}a(U_e,"hasUpgradesRequired");function x_e(e){return fu.isEmptyOrZeroLength(e)?null:xc.has(e)?xc.get(e):null}a(x_e,"getDirectiveByVersion");sz.exports={getSortedVersions:M_e,getDirectiveByVersion:x_e,getVersionsForUpgrade:nz,hasUpgradesRequired:U_e}});var Hy=M((lHe,lz)=>{"use strict";var B_e=require("util"),SL=require("chalk"),F_e=require("os"),oz=Vn(),k_e=Sn(),As=(G(),D(j)),az=Nj(),yL=sN(),{UpgradeObject:iz}=Pj(),{forceDowngradePrompt:H_e}=Ly(),{packageJson:G_e}=yt(),ky=Q(),Uf=ae(),RL=pi(),q_e=(Oe(),D(mt)),$_e=gL(),V_e=B_e.promisify(RL.setSchemaDataToGlobal),K_e=k_e.searchByValue,Y_e="info_id",W_e="2.9.9",j_e="3.0.0";async function z_e(e){let t=new az.HdbInfoInsertObject(1,e,e),r=new yL.InsertObject(As.OPERATIONS_ENUM.INSERT,As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,As.INFO_TABLE_HASH_ATTRIBUTE,[t]);return RL.setSchemaDataToGlobal(),oz.insert(r)}a(z_e,"insertHdbInstallInfo");async function TL(e){let t,r=await cz(),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 az.HdbInfoInsertObject(i,e,e);let o=new yL.InsertObject(As.OPERATIONS_ENUM.INSERT,As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,As.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await V_e(),oz.insert(o)}a(TL,"insertHdbUpgradeInfo");async function cz(){let e=new yL.NoSQLSeachObject(As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Y_e,As.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await K_e(e))}catch(r){console.error(r)}return t}a(cz,"getAllHdbInfoRecords");async function J_e(){let e=await cz();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(J_e,"getLatestHdbInfoRecord");async function Q_e(){ky.info("Checking if HDB software has been updated");try{let e=G_e.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await J_e(),r;if(Uf.isEmpty(t))r=W_e;else if(r=t.data_version_num,Uf.compareVersions(r.toString(),e.toString())>0){if(!Uf.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(SL.yellow(`This instance's data was last run on version ${r}`)),console.error(SL.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.${F_e.EOL}${As.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Uf.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(SL.yellow(`This instance's data was last run on version ${r}`)),await H_e(new iz(r,e))?await TL(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(RL.setSchemaDataToGlobal(),X_e(r),e.toString()===r.toString())return;let n=new iz(r,e);if($_e.hasUpgradesRequired(n))return n;Uf.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await TL(n.upgrade_version),ky.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw ky.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),ky.fatal(e),e}}a(Q_e,"getVersionUpdateInfo");function X_e(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 ${As.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in q_e.databases.system))throw console.log(t),new Error(t);if(!Uf.isEmpty(e)&&e<j_e)throw console.log(t),new Error(t)}a(X_e,"checkIfInstallIsSupported");lz.exports={insertHdbInstallInfo:z_e,insertHdbUpgradeInfo:TL,getVersionUpdateInfo:Q_e}});var mz=M((dHe,fz)=>{"use strict";var Gy=require("joi"),{boolean:Z_e,string:bL,number:ege}=Gy.types(),uz=require("fs-extra"),oE=(G(),D(j)),dz=require("path"),tge=ft();fz.exports=rge;function rge(e){let t=bL.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=Gy.object({[oE.INSTALL_PROMPTS.ROOTPATH]:Gy.custom(nge),[oE.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:Gy.alternatives([ege.min(0),bL]).allow("null",null),[oE.INSTALL_PROMPTS.TC_AGREEMENT]:bL.valid("yes","YES","Yes"),[oE.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[oE.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Z_e});return tge.validateBySchema(e,r)}a(rge,"installValidator");function nge(e,t){if(uz.existsSync(dz.join(e,"system/hdb_user/data.mdb"))||uz.existsSync(dz.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(nge,"validateRootAvailable")});var hz=M((mHe,pz)=>{"use strict";var{mkdirpSync:sge,copySync:ige}=require("fs-extra"),Bc=require("path"),aE=(G(),D(j)),{PACKAGE_ROOT:oge}=yt(),IL=Q(),age=ps(),AL=to(),cge=Rt(),{NON_REPLICATING_SYSTEM_TABLES:lge}=(Oe(),D(mt));pz.exports=uge;async function uge(e){IL.trace("Mounting HarperDB"),mu(e),mu(Bc.join(e,"backup")),mu(Bc.join(e,"keys")),mu(Bc.join(e,"keys",aE.LICENSE_FILE_NAME)),mu(Bc.join(e,"log")),mu(Bc.join(e,"database")),mu(Bc.join(e,"components")),ige(Bc.resolve(oge,"./utility/install/README.md"),Bc.join(e,"README.md")),await dge()}a(uge,"mountHdb");async function dge(){let e=wp(),t=Object.keys(AL);for(let r of t){let n=AL[r].hash_attribute;try{cge.initSystemSchemaPaths(aE.SYSTEM_SCHEMA_NAME,r);let s=new e(aE.SYSTEM_SCHEMA_NAME,r,n);s.attributes=AL[r].attributes;let i=s.attributes.find(({attribute:o})=>o===n);i.isPrimaryKey=!0,lge.includes(r)||(s.audit=!0),await age.createTable(r,s)}catch(s){throw IL.error(`issue creating environment for ${aE.SYSTEM_SCHEMA_NAME}.${r}: ${s}`),s}}}a(dge,"createLMDBTables");function mu(e){sge(e,{mode:aE.HDB_FILE_PERMISSIONS}),IL.info(`Directory ${e} created`)}a(mu,"makeDirectory")});var Oz=M((_He,Cz)=>{"use strict";var CL=require("os"),Tz=require("inquirer"),Js=require("fs-extra"),fge=require("properties-reader"),hu=require("chalk"),Ro=require("path"),mge=require("human-readable-ids").hri,wL,pge=require("yaml"),yr=Q(),Fc=fe(),cE=ae(),$y=rl(),yz=Hy(),{packageJson:Rz}=yt(),pe=(G(),D(j)),{CONFIG_PARAM_MAP:hHe,CONFIG_PARAMS:$t}=pe,hge=mz(),Ege=hz(),OL=_t(),_ge=(Yn(),D(gi)),gge=ah(),Sge=cL(),Tge=pi(),yge=require("util").promisify,Rge=yge(Tge.setSchemaDataToGlobal),Ez=Ts(),pu=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),un=a(e=>hu.magenta.bold(e),"HDB_PROMPT_MSG"),bge="https://harperdb.io/legal/end-user-license-agreement",kc=CL.EOL,ya="",Age="yes",_z="Starting HarperDB install...",gz="HarperDB installation was successful.",Sz="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Ige="An out of date version of HarperDB is already installed.",NL="It appears that HarperDB is already installed. Exiting install...",wge="Aborting install",EHe=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])$/),Nge=new RegExp(/^[^\s.,*>]+$/),Cge=CL.homedir(),Oge=Ro.join(Cge,pe.HDB_ROOT_DIR_NAME),Pge="HDB_ADMIN",Lge="CLUSTER_USER",Dge="dev",vge="localhost",qy={[$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:"},Hc=$y([pe.INSTALL_PROMPTS.HDB_CONFIG]),yo,bz=!1,PL=!1,Az=!1;Cz.exports={install:Iz,updateConfigEnv:Vge,setIgnoreExisting:Kge};Iz.createSuperUser=Nz;async function Iz(){console.log(un(kc+_z+kc)),yr.notify(_z);let e;Hc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&(e=Mge());let t=xge();Object.assign(t,e),t[pe.INSTALL_PROMPTS.TC_AGREEMENT]&&t[pe.INSTALL_PROMPTS.ROOTPATH]&&t[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[pe.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(Az=!0,t[pe.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=hge(t);if(r)throw r.message;await Bge(),await Fge(t);let n=await Uge(t);yo=n[pe.INSTALL_PROMPTS.ROOTPATH],Hc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&Ro.dirname(Hc[pe.INSTALL_PROMPTS.HDB_CONFIG])===yo&&(bz=!0),!PL&&!Hc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&await Js.pathExists(Ro.join(yo,pe.HDB_CONFIG_FILE))&&(console.error(NL),process.exit()),wL||(wL=(await import("ora")).default);let s=wL({prefixText:un("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),cE.isEmpty(yo))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Fc.setHdbBasePath(yo),await Ege(yo),await kge(),await Hge(n),yr.initLogSettings(!0),await Nz(n),await qge(n),await Ez.updateConfigCert(),await Ez.generateCertsKeys(),await $ge(),Sge(),s.stop(),console.log(un(kc+gz+kc)),yr.notify(gz)}a(Iz,"install");function Mge(){let e=pge.parseDocument(Js.readFileSync(Hc[pe.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=OL.flattenConfig(e.toJSON());return t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(Mge,"getConfigFromFile");async function Uge(e){yr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:pu,when:Ra(e[pe.INSTALL_PROMPTS.ROOTPATH],ln.DESTINATION),name:pe.INSTALL_PROMPTS.ROOTPATH,prefix:ya,default:Oge,validate:a(async s=>zs(s)?zs(s):await Js.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:pu,when:Ra(e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],ln.HDB_USERNAME),name:pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:ya,default:Pge,validate:a(s=>zs(s)?zs(s):(t=s,!0),"validate"),message:un(ln.HDB_USERNAME)},{type:"password",when:Ra(e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],ln.HDB_PASS),name:pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:ya,validate:a(s=>zs(s)?zs(s):!0,"validate"),message:un(ln.HDB_PASS)},{type:"input",transformer:pu,when:Ra(e[pe.INSTALL_PROMPTS.DEFAULTS_MODE],ln.DEFAULTS_MODE),name:pe.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:ya,default:Dge,validate:a(s=>zs(s)?zs(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:un(ln.DEFAULTS_MODE)}];if(Az||r.push({type:"input",name:pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:pu,when:Ra(e[pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME],ln.REPLICATION_HOSTNAME),prefix:ya,default:vge,message:un(ln.REPLICATION_HOSTNAME)}),cE.autoCastBoolean(e[pe.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:pu,when:Ra(e[pe.INSTALL_PROMPTS.CLUSTERING_NODENAME],ln.NODE_NAME),name:pe.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:ya,default:mge.random(),validate:a(i=>Nge.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:un(ln.NODE_NAME)},{type:"input",transformer:pu,when:Ra(e[pe.INSTALL_PROMPTS.CLUSTERING_USER],ln.CLUSTER_USERNAME),name:pe.INSTALL_PROMPTS.CLUSTERING_USER,prefix:ya,default:Lge,validate:a(i=>zs(i)?zs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:un(ln.CLUSTER_USERNAME)},{type:"password",when:Ra(e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD],ln.CLUSTER_PASS),name:pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:ya,validate:a(i=>zs(i)?zs(i):!0,"validate"),message:un(ln.CLUSTER_PASS)}];r.push(...s)}let n=await Tz.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(Uge,"installPrompts");function Ra(e,t){return e!==void 0?(t.includes("password")?(console.log(`${un(t)} ${hu.gray("[hidden]")}`),yr.trace(`${un(t)} [hidden]`)):(console.log(`${un(t)} ${e}`),yr.trace(`${un(t)} ${e}`)),!1):!0}a(Ra,"displayCmdEnvVar");function zs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(zs,"checkForEmptyValue");function xge(){let e=Object.keys(pe.INSTALL_PROMPTS),t=$y(e),r=$y(Object.keys(pe.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=pe.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(xge,"checkForPromptOverride");async function Bge(){yr.trace("Checking for existing install.");let e=cE.getPropsFilePath(),t=await Js.pathExists(e),r;if(t){yr.trace(`Install found an existing boot prop file at:${e}`);let n=fge(e),s=OL.getConfigValue(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Js.pathExists(s)}if(!t&&cE.noBootFile()&&(r=!0),r&&!PL){if(yr.trace(`Install found existing HDB config at:${e}`),await yz.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${Rz.version}. Exiting install...`;console.log(kc+hu.magenta.bold(Ige)),console.log(hu.magenta.bold(s)),yr.error(s)}else console.log(kc+hu.magenta.bold(NL)),yr.error(NL);process.exit(0)}}a(Bge,"checkForExistingInstall");async function Fge(e){yr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${bge}${kc}and can be viewed by typing or copying and pasting the URL into your web browser.${kc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:ya,transformer:pu,when:Ra(e[pe.INSTALL_PROMPTS.TC_AGREEMENT],t),name:pe.INSTALL_PROMPTS.TC_AGREEMENT,message:un(t),validate:a(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:hu.yellow("Please enter 'yes' or 'no'"),"validate")},n=await Tz.prompt([r]);n[pe.INSTALL_PROMPTS.TC_AGREEMENT]&&n[pe.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Age&&(console.log(hu.yellow(Sz)),yr.error(Sz),process.exit(0))}a(Fge,"termsAgreement");async function kge(){let e=Ro.join(yo,pe.HDB_CONFIG_FILE),t;try{t=CL.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=cE.getHomeDir(),s=Ro.join(n,pe.HDB_HOME_DIR_NAME),i=Ro.join(s,pe.LICENSE_KEY_DIR_NAME);try{Js.mkdirpSync(s,{mode:pe.HDB_FILE_PERMISSIONS}),Js.mkdirpSync(i,{mode:pe.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${pe.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Ro.join(s,pe.BOOT_PROPS_FILE_NAME);try{await Js.writeFile(o,r)}catch(c){throw yr.error(`There was an error creating the boot file at path: ${o}`),c}Fc.setProperty(pe.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Fc.setProperty(pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Fc.setProperty(Fc.BOOT_PROPS_FILE_PATH,o)}}a(kge,"createBootPropertiesFile");async function Hge(e){yr.trace("Creating HarperDB config file");let t=$y(Object.keys(pe.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[pe.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in qy){if(r===$t.HTTP_PORT&&t[$t.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??qy[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()]??qy[r],t[$t.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===$t.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=qy[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{Hc[pe.INSTALL_PROMPTS.HDB_CONFIG]||OL.createConfigFile(t),Fc.initSync()}catch(r){Gge(r)}}a(Hge,"createConfigFile");function Gge(e){yr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(wge);let t=Ro.resolve(Fc.get(Fc.BOOT_PROPS_FILE_PATH),"../");t&&Js.removeSync(t),yo&&(bz?Js.readdirSync(yo,{withFileTypes:!0}).forEach(n=>{let s=Ro.join(n.path,n.name);s!==Hc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&Js.removeSync(s)}):Js.removeSync(yo)),process.exit(1)}a(Gge,"rollbackInstall");async function wz(e,t){yr.trace("Creating admin user"),await Rge();let r;try{r=await gge.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 _ge.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(wz,"createAdminUser");async function Nz(e){yr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await wz(t,r),delete e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(Nz,"createSuperUser");async function qge(e){yr.trace("Creating Cluster user.");let t;e[pe.INSTALL_PROMPTS.CLUSTERING_USER]&&e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[pe.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await wz({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[pe.INSTALL_PROMPTS.CLUSTERING_USER],delete e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(qge,"createClusterUser");async function $ge(){let e=Rz.version;if(e)await yz.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a($ge,"insertHdbVersionInfo");function Vge(e){Hc[pe.INSTALL_PROMPTS.HDB_CONFIG]=e}a(Vge,"updateConfigEnv");function Kge(e){PL=e}a(Kge,"setIgnoreExisting")});var DL={};ye(DL,{isHdbInstalled:()=>Yge});function Yge(e,t){try{LL.default.statSync((0,Vy.getPropsFilePath)()),LL.default.statSync(e.get(Tm.SETTINGS_PATH_KEY))}catch(r){if((0,Vy.noBootFile)())return!0;if(r.code==="ENOENT")return!1;throw t.error(`Error checking for HDB install - ${r}`),r}return!0}var LL,Vy,vL=se(()=>{G();LL=b(require("node:fs")),Vy=b(ae());a(Yge,"isHdbInstalled")});var Dz=M((THe,Lz)=>{"use strict";var ML=ae(),Is=Q(),Pz=gL();Lz.exports={processDirectives:Wge};async function Wge(e){console.log("Starting upgrade process...");let t=Pz.getVersionsForUpgrade(e),r=Jge(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;Is.notify(c),console.log(c);let l=[],u=[];try{l=jge(o.sync_functions)}catch(d){throw Is.error(`Error while running an upgrade script for ${o.version}`),d}try{u=await zge(o.async_functions)}catch(d){throw Is.error(`Error while running an upgrade script for ${o.version}`),d}n.push(...l,...u)}return n}a(Wge,"processDirectives");function jge(e){if(ML.isEmptyOrZeroLength(e))return Is.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Is.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Is.info(`Running function ${r.name}`),!(r instanceof Function)){Is.info("Variable being processed is not a function");continue}let n=r();Is.info(n),t.push(n)}return t}a(jge,"runSyncFunctions");async function zge(e){if(ML.isEmptyOrZeroLength(e))return Is.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Is.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(Is.info(`Running function ${s.name}`),!(s instanceof Function)){Is.info("Variable being processed is not a function");continue}let i=await s();Is.info(i),t.push(i)}return t}a(zge,"runAsyncFunctions");function Jge(e){if(ML.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=Pz.getDirectiveByVersion(r);n&&t.push(n)}return t}a(Jge,"getUpgradeDirectivesToInstall")});var Fz=M((bHe,Bz)=>{"use strict";var Uz=fe();Uz.initSync();var Qge=require("chalk"),ba=Q(),xf=(G(),D(j)),Xge=Dz(),RHe=ae(),Zge=(vL(),D(DL)),xz=Hy(),eSe=Ly(),tSe=pi(),{packageJson:vz}=yt(),rSe=require("util").promisify,nSe=rSe(tSe.setSchemaDataToGlobal),Mz,{UPGRADE_VERSION:UL}=xf.UPGRADE_JSON_FIELD_NAMES_ENUM;Bz.exports={upgrade:sSe};async function sSe(e){await nSe(),Mz===void 0&&(Mz=Pf()),Zge.isHdbInstalled(Uz,ba)||(Ky("Harper is not installed. Harper must be installed before running an upgrade.",xf.LOG_LEVELS.ERROR),process.exit(1));let r=e;r||(r=await xz.getVersionUpdateInfo(),r||(console.log("HarperDB version is current"),process.exit(0))),Ky(`This version of HarperDB is ${vz.version}`,xf.LOG_LEVELS.INFO);let n=r[UL]??vz.version;n||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${xf.HDB_SUPPORT_ADDRESS}`),ba.notify("Missing new version field from upgrade info object"),process.exit(1));let s,i=0;try{s=await eSe.forceUpdatePrompt(r)}catch(o){ba.error("There was an error when prompting user about upgrade."),ba.error(o),s=!1,i=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(i)),ba.info(`Starting upgrade to version ${n}`),await iSe(r),Ky(`HarperDB was successfully upgraded to version ${r[UL]}`,xf.LOG_LEVELS.INFO)}a(sSe,"upgrade");async function iSe(e){try{await Xge.processDirectives(e)}catch(t){throw Ky("There was an error during the data upgrade. Please check the logs.",xf.LOG_LEVELS.ERROR),t}try{await xz.insertHdbUpgradeInfo(e[UL])}catch(t){ba.error("Error updating the 'hdb_info' system table."),ba.error(t)}}a(iSe,"runUpgrade");function Ky(e,t=void 0){t||(t=ba.info),ba[t](e),console.log(Qge.magenta(e))}a(Ky,"printToLogAndConsole")});var kz={};ye(kz,{SERVERS:()=>Bf,portServer:()=>xL,setPortServerMap:()=>Yy});function Yy(e,t){let r=xL.get(e)??[];xL.set(e,[...r,t])}var Bf,xL,BL=se(()=>{Bf={},xL=new Map;a(Yy,"setPortServerMap")});function aSe(e){if(typeof e!="string")throw new Wy(`License must be a string; received ${typeof e}: ${e}`);let t;try{t=e.split(".")}catch(l){let u=new Wy(`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 Ff(`License must have three dot-separated parts; got ${t.length}`);let[r,n,s]=t,i=oSe.getKey();if(!(0,zy.verify)(null,Buffer.from(r+"."+n,"utf8"),i,Buffer.from(s,"base64url")))throw new kL("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 cSe(e){if(e?.typ!=="Harper-License")throw new lE(`Invalid license header; typ must be 'Harper-License'; got: ${e?.typ}`);if(e?.alg!=="EdDSA")throw new lE(`Invalid license header; alg must be 'EdDSA'; got: ${e?.alg}`)}function lSe(e,t){return e.required?typeof t===e.type:typeof t>"u"||typeof t===e.type}function uSe(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(!lSe(t[r],e[r]))throw new jy(`Invalid license payload; ${i} must be a ${s}; got: ${typeof e[r]}`)}}function Gz(e){let{header:t,payload:r}=aSe(e),n;try{n=JSON.parse(t)}catch(i){let o=new lE;throw o.cause=i,o}cSe(n);let s;try{s=JSON.parse(r)}catch(i){let o=new jy;throw o.cause=i,o}return uSe(s),s}var zy,Hz,FL,Wy,Ff,kL,lE,jy,oSe,qz=se(()=>{zy=require("node:crypto"),Hz=b(fe());G();FL=class{static{a(this,"PublicKey")}pem;constructor(t){t&&(t==="test"||t==="development")?this.pem=`-----BEGIN PUBLIC KEY-----
92
+ Reindexing upgrade started for transaction logs`),Ta.notify("Reindexing upgrade started for transaction logs"),await Gj(hL,!0,e)),Ta.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(rE?", but errors occurred":"")}a(i_e,"reindexUpgrade");async function Gj(e,t,r){let n=await To.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=ya.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(ya.join(c,f)).isDirectory())try{await o_e(o,f,t),In.info(`Reindexing started for ${o}.${f}`),Ta.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${f}`),await c_e(o,f,c,t,r),In.info(`Reindexing completed for ${o}.${f}`),Ta.notify(`Reindexing completed for ${o}.${f}`)}catch(m){rE=!0,m.schema_path=c,m.table_name=f,Ta.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Ta.error(m),In.error(m),console.error(m)}}}if(!rE)try{await To.rm(Uy,{recursive:!0})}catch{}}a(Gj,"processTables");async function o_e(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=ya.join(Uy,s);await To.ensureDir(Uy),await To.writeFile(i,""),In=n_e({level:"debug",formatters:{bindings(){}}},i)}a(o_e,"initPinoLogger");var a_e=20;async function c_e(e,t,r,n,s){let i;try{i=await bs.openEnvironment(r,t,n)}catch(S){if(S.message==="MDB_INVALID: File is not an LMDB file"){Ta.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`),In.error(S);return}throw S}let o=d_e(i.dbis),c=bs.openDBI(i,o),l=Object.keys(i.dbis),u=bs.statDBI(i,o);In.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new r_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 bs.createEnvironment(r,t,!1);bs.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>a_e&&await p();await p()}catch(S){throw rE=!0,In.error(S),S}async function p(){let S,y=m.map(({value:I})=>I);n?S=await Promise.all(y.map(I=>l_e(f,I))):S=await XEe(f,o,l.filter(I=>I!=="__blob__"),y,!1);for(let I=0,H=m.length;I<H;I++){let{key:X,value:q}=m[I];In.info(`Record hash value: ${X} hash: ${o}`);let k;n?k=S[I]:k=S.written_hashes.indexOf(X)>-1,tE(k,!0),u_e(f,o,q[o],n),In.info(`Insert success, written hashes: ${S.written_hashes}`),d.increment()}m=[],d.value/d.total*100%10===0&&Ta.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),In.info(`${d.value}/${d.total} records inserted`)}a(p,"finishOutstanding"),d.stop();let h=bs.statDBI(i,o),E=bs.statDBI(f,o);if(In.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${E.entryCount}`),tE.deepStrictEqual(h.entryCount,E.entryCount),await bs.closeEnvironment(i),await bs.closeEnvironment(f),delete global.lmdb_map[`${e}.${t}`],s){let S=ya.join(r,t),y=ya.join(S,"data.mdb"),w=ya.join(S,"lock.mdb");await To.unlink(y),await To.unlink(w),await To.rmdir(S),In.info(`Deleted old environment files from schema folder: ${y}, ${w}`)}let _=await bs.openEnvironment(r,t),R=bs.statDBI(_,o);In.info(`New stats: ${JSON.stringify(E)}. New stats after move: ${JSON.stringify(R)}`),tE.deepStrictEqual(R.entryCount,E.entryCount),await bs.closeEnvironment(_),delete global.lmdb_map[`${e}.${t}`]}a(c_e,"processTable");async function l_e(e,t){bs.initializeDBIs(e,Mc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Mc.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Mc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Mc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),t_e.isEmpty(t.user_name)||e.dbis[Mc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Mc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(l_e,"insertTransaction");function u_e(e,t,r,n){let i=e.dbis[t].get(r);tE.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Mc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Mc.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&&!e_e.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let f=l[u];qj(e,c,f,r)}else qj(e,c,l,r)}a(u_e,"validateIndices");function qj(e,t,r,n){try{let s=!1,i=ZEe.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||In.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),tE.deepStrictEqual(s,!0)}catch(s){rE=!0,In.error(s),console.error(s)}}a(qj,"validateIndex");function d_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(d_e,"getHashDBI")});var zj=M((nHe,jj)=>{"use strict";var xy=require("path"),Uc=require("fs-extra"),f_e=Dy(),du=Q(),Kj=_t(),EL=fe(),Ni=(G(),D(j)),By=ae(),m_e=require("properties-reader"),p_e=fi(),h_e=YS(),E_e=Sn(),rHe=require("util"),__e=E_e.searchByValue,g_e=Vn(),S_e=yy(),T_e=Dt(),y_e=Vj(),Yj=Ts(),R_e=Ly(),iE=new f_e("4.0.0"),Wj=[],nE,sE;async function b_e(){try{if(await R_e.upgradeCertsPrompt()){if(console.log("Generating new certificates."),nE){let t=By.changeExtension(nE,".bak");await Uc.move(nE,t)}if(sE){let t=By.changeExtension(sE,".bak");await Uc.move(sE,t)}await Yj.generateKeys()}else console.log("Using existing certificates."),Yj.updateConfigCert(nE,sE,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(b_e,"generateNewKeys");async function A_e(){console.log("Updating HarperDB nodes."),du.info("Updating HarperDB nodes.");let e=[];try{let t=new p_e(Ni.SYSTEM_SCHEMA_NAME,Ni.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await __e(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!T_e.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:Ni.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(By.isEmptyOrZeroLength(n))return;let s=new h_e(Ni.SYSTEM_SCHEMA_NAME,Ni.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await g_e.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{S_e.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(A_e,"updateNodes");async function I_e(){let e=EL.get(Ni.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(xy.join("config","settings.js"))){du.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),du.info(t);let r=xy.dirname(e),n=EL.get(Ni.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=xy.join(n,"backup","4_0_0_upgrade_settings.bak"),i=xy.join(n,Ni.HDB_CONFIG_FILE);try{du.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Uc.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{du.info(`Creating new/upgraded settings file at '${new_settings_path}'`),console.log(`Creating new/upgraded settings file at '${new_settings_path}'`),du.info("Updating env variables with new settings values");let f=Kj.initOldConfig(e);nE=f[Ni.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],sE=f[Ni.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],Kj.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=By.getPropsFilePath();Uc.accessSync(o,Uc.constants.F_OK|Uc.constants.R_OK);let l=m_e(o).get(Ni.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
93
+ install_user = ${l}`;try{Uc.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{EL.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{Uc.removeSync(r),console.log(d),du.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(I_e,"updateSettingsFile400");iE.async_functions.push(I_e);iE.async_functions.push(b_e);iE.async_functions.push(y_e);iE.async_functions.push(A_e);Wj.push(iE);jj.exports=Wj});var Zj=M((iHe,Xj)=>{var w_e=Dy(),{databases:N_e,table:C_e}=(Oe(),D(mt)),O_e=to(),_L=Q(),Jj=new w_e("4.7.0"),Qj=[];async function P_e(){let e=N_e.system?.hdb_license;if(!e){_L.debug?.("system.hdb_license table not found; no migration necessary");return}return _L.debug?.("Dropping existing system.hdb_license table"),await e.dropTable(),_L.debug?.("Creating new usage block system.hdb_license table"),C_e(O_e.hdb_license)}a(P_e,"convertToUsageBlockLicenses");Jj.async_functions.push(P_e);Qj.push(Jj);Xj.exports=Qj});var gL=M((aHe,sz)=>{"use strict";var fu=ae(),L_e=(G(),D(j)),ez=Q(),{DATA_VERSION:D_e,UPGRADE_VERSION:v_e}=L_e.UPGRADE_JSON_FIELD_NAMES_ENUM,tz=kj(),Fy=zj(),rz=Zj(),xc=new Map;tz&&tz.forEach(e=>{xc.set(e.version,e)});Fy&&Fy.forEach(e=>{xc.set(e.version,e)});Fy&&Fy.forEach(e=>{xc.set(e.version,e)});rz&&rz.forEach(e=>{xc.set(e.version,e)});function M_e(){return[...xc.keys()].sort(fu.compareVersions)}a(M_e,"getSortedVersions");function nz(e){let t=e[D_e],r=e[v_e];return fu.isEmptyOrZeroLength(t)||fu.isEmptyOrZeroLength(r)?(ez.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),ez.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."),[]):[...xc.keys()].sort(fu.compareVersions).filter(function(n){return fu.compareVersions(n,t)>0&&fu.compareVersions(n,r)<=0})}a(nz,"getVersionsForUpgrade");function U_e(e){return nz(e).length>0}a(U_e,"hasUpgradesRequired");function x_e(e){return fu.isEmptyOrZeroLength(e)?null:xc.has(e)?xc.get(e):null}a(x_e,"getDirectiveByVersion");sz.exports={getSortedVersions:M_e,getDirectiveByVersion:x_e,getVersionsForUpgrade:nz,hasUpgradesRequired:U_e}});var Hy=M((lHe,lz)=>{"use strict";var B_e=require("util"),SL=require("chalk"),F_e=require("os"),oz=Vn(),k_e=Sn(),As=(G(),D(j)),az=Nj(),yL=sN(),{UpgradeObject:iz}=Pj(),{forceDowngradePrompt:H_e}=Ly(),{packageJson:G_e}=yt(),ky=Q(),Uf=ae(),RL=pi(),q_e=(Oe(),D(mt)),$_e=gL(),V_e=B_e.promisify(RL.setSchemaDataToGlobal),K_e=k_e.searchByValue,Y_e="info_id",W_e="2.9.9",j_e="3.0.0";async function z_e(e){let t=new az.HdbInfoInsertObject(1,e,e),r=new yL.InsertObject(As.OPERATIONS_ENUM.INSERT,As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,As.INFO_TABLE_HASH_ATTRIBUTE,[t]);return RL.setSchemaDataToGlobal(),oz.insert(r)}a(z_e,"insertHdbInstallInfo");async function TL(e){let t,r=await cz(),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 az.HdbInfoInsertObject(i,e,e);let o=new yL.InsertObject(As.OPERATIONS_ENUM.INSERT,As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,As.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await V_e(),oz.insert(o)}a(TL,"insertHdbUpgradeInfo");async function cz(){let e=new yL.NoSQLSeachObject(As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Y_e,As.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await K_e(e))}catch(r){console.error(r)}return t}a(cz,"getAllHdbInfoRecords");async function J_e(){let e=await cz();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(J_e,"getLatestHdbInfoRecord");async function Q_e(){ky.info("Checking if HDB software has been updated");try{let e=G_e.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await J_e(),r;if(Uf.isEmpty(t))r=W_e;else if(r=t.data_version_num,Uf.compareVersions(r.toString(),e.toString())>0){if(!Uf.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(SL.yellow(`This instance's data was last run on version ${r}`)),console.error(SL.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.${F_e.EOL}${As.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Uf.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(SL.yellow(`This instance's data was last run on version ${r}`)),await H_e(new iz(r,e))?await TL(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(RL.setSchemaDataToGlobal(),X_e(r),e.toString()===r.toString())return;let n=new iz(r,e);if($_e.hasUpgradesRequired(n))return n;Uf.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await TL(n.upgrade_version),ky.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw ky.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),ky.fatal(e),e}}a(Q_e,"getVersionUpdateInfo");function X_e(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 ${As.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in q_e.databases.system))throw console.log(t),new Error(t);if(!Uf.isEmpty(e)&&e<j_e)throw console.log(t),new Error(t)}a(X_e,"checkIfInstallIsSupported");lz.exports={insertHdbInstallInfo:z_e,insertHdbUpgradeInfo:TL,getVersionUpdateInfo:Q_e}});var mz=M((dHe,fz)=>{"use strict";var Gy=require("joi"),{boolean:Z_e,string:bL,number:ege}=Gy.types(),uz=require("fs-extra"),oE=(G(),D(j)),dz=require("path"),tge=ft();fz.exports=rge;function rge(e){let t=bL.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=Gy.object({[oE.INSTALL_PROMPTS.ROOTPATH]:Gy.custom(nge),[oE.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:Gy.alternatives([ege.min(0),bL]).allow("null",null),[oE.INSTALL_PROMPTS.TC_AGREEMENT]:bL.valid("yes","YES","Yes"),[oE.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[oE.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Z_e});return tge.validateBySchema(e,r)}a(rge,"installValidator");function nge(e,t){if(uz.existsSync(dz.join(e,"system/hdb_user/data.mdb"))||uz.existsSync(dz.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(nge,"validateRootAvailable")});var hz=M((mHe,pz)=>{"use strict";var{mkdirpSync:sge,copySync:ige}=require("fs-extra"),Bc=require("path"),aE=(G(),D(j)),{PACKAGE_ROOT:oge}=yt(),IL=Q(),age=ps(),AL=to(),cge=Rt(),{NON_REPLICATING_SYSTEM_TABLES:lge}=(Oe(),D(mt));pz.exports=uge;async function uge(e){IL.trace("Mounting HarperDB"),mu(e),mu(Bc.join(e,"backup")),mu(Bc.join(e,"keys")),mu(Bc.join(e,"keys",aE.LICENSE_FILE_NAME)),mu(Bc.join(e,"log")),mu(Bc.join(e,"database")),mu(Bc.join(e,"components")),ige(Bc.resolve(oge,"./utility/install/README.md"),Bc.join(e,"README.md")),await dge()}a(uge,"mountHdb");async function dge(){let e=wp(),t=Object.keys(AL);for(let r of t){let n=AL[r].hash_attribute;try{cge.initSystemSchemaPaths(aE.SYSTEM_SCHEMA_NAME,r);let s=new e(aE.SYSTEM_SCHEMA_NAME,r,n);s.attributes=AL[r].attributes;let i=s.attributes.find(({attribute:o})=>o===n);i.isPrimaryKey=!0,lge.includes(r)||(s.audit=!0),await age.createTable(r,s)}catch(s){throw IL.error(`issue creating environment for ${aE.SYSTEM_SCHEMA_NAME}.${r}: ${s}`),s}}}a(dge,"createLMDBTables");function mu(e){sge(e,{mode:aE.HDB_FILE_PERMISSIONS}),IL.info(`Directory ${e} created`)}a(mu,"makeDirectory")});var Oz=M((_He,Cz)=>{"use strict";var CL=require("os"),Tz=require("inquirer"),Js=require("fs-extra"),fge=require("properties-reader"),hu=require("chalk"),Ro=require("path"),mge=require("human-readable-ids").hri,wL,pge=require("yaml"),yr=Q(),Fc=fe(),cE=ae(),$y=rl(),yz=Hy(),{packageJson:Rz}=yt(),pe=(G(),D(j)),{CONFIG_PARAM_MAP:hHe,CONFIG_PARAMS:$t}=pe,hge=mz(),Ege=hz(),OL=_t(),_ge=(Yn(),D(gi)),gge=ah(),Sge=cL(),Tge=pi(),yge=require("util").promisify,Rge=yge(Tge.setSchemaDataToGlobal),Ez=Ts(),pu=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),un=a(e=>hu.magenta.bold(e),"HDB_PROMPT_MSG"),bge="https://harperdb.io/legal/end-user-license-agreement",kc=CL.EOL,Ra="",Age="yes",_z="Starting HarperDB install...",gz="HarperDB installation was successful.",Sz="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Ige="An out of date version of HarperDB is already installed.",NL="It appears that HarperDB is already installed. Exiting install...",wge="Aborting install",EHe=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])$/),Nge=new RegExp(/^[^\s.,*>]+$/),Cge=CL.homedir(),Oge=Ro.join(Cge,pe.HDB_ROOT_DIR_NAME),Pge="HDB_ADMIN",Lge="CLUSTER_USER",Dge="dev",vge="localhost",qy={[$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:"},Hc=$y([pe.INSTALL_PROMPTS.HDB_CONFIG]),yo,bz=!1,PL=!1,Az=!1;Cz.exports={install:Iz,updateConfigEnv:Vge,setIgnoreExisting:Kge};Iz.createSuperUser=Nz;async function Iz(){console.log(un(kc+_z+kc)),yr.notify(_z);let e;Hc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&(e=Mge());let t=xge();Object.assign(t,e),t[pe.INSTALL_PROMPTS.TC_AGREEMENT]&&t[pe.INSTALL_PROMPTS.ROOTPATH]&&t[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[pe.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(Az=!0,t[pe.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=hge(t);if(r)throw r.message;await Bge(),await Fge(t);let n=await Uge(t);yo=n[pe.INSTALL_PROMPTS.ROOTPATH],Hc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&Ro.dirname(Hc[pe.INSTALL_PROMPTS.HDB_CONFIG])===yo&&(bz=!0),!PL&&!Hc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&await Js.pathExists(Ro.join(yo,pe.HDB_CONFIG_FILE))&&(console.error(NL),process.exit()),wL||(wL=(await import("ora")).default);let s=wL({prefixText:un("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),cE.isEmpty(yo))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Fc.setHdbBasePath(yo),await Ege(yo),await kge(),await Hge(n),yr.initLogSettings(!0),await Nz(n),await qge(n),await Ez.updateConfigCert(),await Ez.generateCertsKeys(),await $ge(),Sge(),s.stop(),console.log(un(kc+gz+kc)),yr.notify(gz)}a(Iz,"install");function Mge(){let e=pge.parseDocument(Js.readFileSync(Hc[pe.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=OL.flattenConfig(e.toJSON());return t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(Mge,"getConfigFromFile");async function Uge(e){yr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:pu,when:ba(e[pe.INSTALL_PROMPTS.ROOTPATH],ln.DESTINATION),name:pe.INSTALL_PROMPTS.ROOTPATH,prefix:Ra,default:Oge,validate:a(async s=>zs(s)?zs(s):await Js.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:pu,when:ba(e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],ln.HDB_USERNAME),name:pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Ra,default:Pge,validate:a(s=>zs(s)?zs(s):(t=s,!0),"validate"),message:un(ln.HDB_USERNAME)},{type:"password",when:ba(e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],ln.HDB_PASS),name:pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Ra,validate:a(s=>zs(s)?zs(s):!0,"validate"),message:un(ln.HDB_PASS)},{type:"input",transformer:pu,when:ba(e[pe.INSTALL_PROMPTS.DEFAULTS_MODE],ln.DEFAULTS_MODE),name:pe.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:Ra,default:Dge,validate:a(s=>zs(s)?zs(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:un(ln.DEFAULTS_MODE)}];if(Az||r.push({type:"input",name:pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:pu,when:ba(e[pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME],ln.REPLICATION_HOSTNAME),prefix:Ra,default:vge,message:un(ln.REPLICATION_HOSTNAME)}),cE.autoCastBoolean(e[pe.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:pu,when:ba(e[pe.INSTALL_PROMPTS.CLUSTERING_NODENAME],ln.NODE_NAME),name:pe.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Ra,default:mge.random(),validate:a(i=>Nge.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:un(ln.NODE_NAME)},{type:"input",transformer:pu,when:ba(e[pe.INSTALL_PROMPTS.CLUSTERING_USER],ln.CLUSTER_USERNAME),name:pe.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Ra,default:Lge,validate:a(i=>zs(i)?zs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:un(ln.CLUSTER_USERNAME)},{type:"password",when:ba(e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD],ln.CLUSTER_PASS),name:pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Ra,validate:a(i=>zs(i)?zs(i):!0,"validate"),message:un(ln.CLUSTER_PASS)}];r.push(...s)}let n=await Tz.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(Uge,"installPrompts");function ba(e,t){return e!==void 0?(t.includes("password")?(console.log(`${un(t)} ${hu.gray("[hidden]")}`),yr.trace(`${un(t)} [hidden]`)):(console.log(`${un(t)} ${e}`),yr.trace(`${un(t)} ${e}`)),!1):!0}a(ba,"displayCmdEnvVar");function zs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(zs,"checkForEmptyValue");function xge(){let e=Object.keys(pe.INSTALL_PROMPTS),t=$y(e),r=$y(Object.keys(pe.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=pe.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(xge,"checkForPromptOverride");async function Bge(){yr.trace("Checking for existing install.");let e=cE.getPropsFilePath(),t=await Js.pathExists(e),r;if(t){yr.trace(`Install found an existing boot prop file at:${e}`);let n=fge(e),s=OL.getConfigValue(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Js.pathExists(s)}if(!t&&cE.noBootFile()&&(r=!0),r&&!PL){if(yr.trace(`Install found existing HDB config at:${e}`),await yz.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${Rz.version}. Exiting install...`;console.log(kc+hu.magenta.bold(Ige)),console.log(hu.magenta.bold(s)),yr.error(s)}else console.log(kc+hu.magenta.bold(NL)),yr.error(NL);process.exit(0)}}a(Bge,"checkForExistingInstall");async function Fge(e){yr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${bge}${kc}and can be viewed by typing or copying and pasting the URL into your web browser.${kc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:Ra,transformer:pu,when:ba(e[pe.INSTALL_PROMPTS.TC_AGREEMENT],t),name:pe.INSTALL_PROMPTS.TC_AGREEMENT,message:un(t),validate:a(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:hu.yellow("Please enter 'yes' or 'no'"),"validate")},n=await Tz.prompt([r]);n[pe.INSTALL_PROMPTS.TC_AGREEMENT]&&n[pe.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Age&&(console.log(hu.yellow(Sz)),yr.error(Sz),process.exit(0))}a(Fge,"termsAgreement");async function kge(){let e=Ro.join(yo,pe.HDB_CONFIG_FILE),t;try{t=CL.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=cE.getHomeDir(),s=Ro.join(n,pe.HDB_HOME_DIR_NAME),i=Ro.join(s,pe.LICENSE_KEY_DIR_NAME);try{Js.mkdirpSync(s,{mode:pe.HDB_FILE_PERMISSIONS}),Js.mkdirpSync(i,{mode:pe.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${pe.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Ro.join(s,pe.BOOT_PROPS_FILE_NAME);try{await Js.writeFile(o,r)}catch(c){throw yr.error(`There was an error creating the boot file at path: ${o}`),c}Fc.setProperty(pe.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Fc.setProperty(pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Fc.setProperty(Fc.BOOT_PROPS_FILE_PATH,o)}}a(kge,"createBootPropertiesFile");async function Hge(e){yr.trace("Creating HarperDB config file");let t=$y(Object.keys(pe.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[pe.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in qy){if(r===$t.HTTP_PORT&&t[$t.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??qy[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()]??qy[r],t[$t.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===$t.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=qy[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{Hc[pe.INSTALL_PROMPTS.HDB_CONFIG]||OL.createConfigFile(t),Fc.initSync()}catch(r){Gge(r)}}a(Hge,"createConfigFile");function Gge(e){yr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(wge);let t=Ro.resolve(Fc.get(Fc.BOOT_PROPS_FILE_PATH),"../");t&&Js.removeSync(t),yo&&(bz?Js.readdirSync(yo,{withFileTypes:!0}).forEach(n=>{let s=Ro.join(n.path,n.name);s!==Hc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&Js.removeSync(s)}):Js.removeSync(yo)),process.exit(1)}a(Gge,"rollbackInstall");async function wz(e,t){yr.trace("Creating admin user"),await Rge();let r;try{r=await gge.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 _ge.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(wz,"createAdminUser");async function Nz(e){yr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await wz(t,r),delete e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(Nz,"createSuperUser");async function qge(e){yr.trace("Creating Cluster user.");let t;e[pe.INSTALL_PROMPTS.CLUSTERING_USER]&&e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[pe.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await wz({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[pe.INSTALL_PROMPTS.CLUSTERING_USER],delete e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(qge,"createClusterUser");async function $ge(){let e=Rz.version;if(e)await yz.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a($ge,"insertHdbVersionInfo");function Vge(e){Hc[pe.INSTALL_PROMPTS.HDB_CONFIG]=e}a(Vge,"updateConfigEnv");function Kge(e){PL=e}a(Kge,"setIgnoreExisting")});var DL={};ye(DL,{isHdbInstalled:()=>Yge});function Yge(e,t){try{LL.default.statSync((0,Vy.getPropsFilePath)()),LL.default.statSync(e.get(Tm.SETTINGS_PATH_KEY))}catch(r){if((0,Vy.noBootFile)())return!0;if(r.code==="ENOENT")return!1;throw t.error(`Error checking for HDB install - ${r}`),r}return!0}var LL,Vy,vL=se(()=>{G();LL=b(require("node:fs")),Vy=b(ae());a(Yge,"isHdbInstalled")});var Dz=M((THe,Lz)=>{"use strict";var ML=ae(),Is=Q(),Pz=gL();Lz.exports={processDirectives:Wge};async function Wge(e){console.log("Starting upgrade process...");let t=Pz.getVersionsForUpgrade(e),r=Jge(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;Is.notify(c),console.log(c);let l=[],u=[];try{l=jge(o.sync_functions)}catch(d){throw Is.error(`Error while running an upgrade script for ${o.version}`),d}try{u=await zge(o.async_functions)}catch(d){throw Is.error(`Error while running an upgrade script for ${o.version}`),d}n.push(...l,...u)}return n}a(Wge,"processDirectives");function jge(e){if(ML.isEmptyOrZeroLength(e))return Is.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Is.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Is.info(`Running function ${r.name}`),!(r instanceof Function)){Is.info("Variable being processed is not a function");continue}let n=r();Is.info(n),t.push(n)}return t}a(jge,"runSyncFunctions");async function zge(e){if(ML.isEmptyOrZeroLength(e))return Is.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Is.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(Is.info(`Running function ${s.name}`),!(s instanceof Function)){Is.info("Variable being processed is not a function");continue}let i=await s();Is.info(i),t.push(i)}return t}a(zge,"runAsyncFunctions");function Jge(e){if(ML.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=Pz.getDirectiveByVersion(r);n&&t.push(n)}return t}a(Jge,"getUpgradeDirectivesToInstall")});var Fz=M((bHe,Bz)=>{"use strict";var Uz=fe();Uz.initSync();var Qge=require("chalk"),Aa=Q(),xf=(G(),D(j)),Xge=Dz(),RHe=ae(),Zge=(vL(),D(DL)),xz=Hy(),eSe=Ly(),tSe=pi(),{packageJson:vz}=yt(),rSe=require("util").promisify,nSe=rSe(tSe.setSchemaDataToGlobal),Mz,{UPGRADE_VERSION:UL}=xf.UPGRADE_JSON_FIELD_NAMES_ENUM;Bz.exports={upgrade:sSe};async function sSe(e){await nSe(),Mz===void 0&&(Mz=Pf()),Zge.isHdbInstalled(Uz,Aa)||(Ky("Harper is not installed. Harper must be installed before running an upgrade.",xf.LOG_LEVELS.ERROR),process.exit(1));let r=e;r||(r=await xz.getVersionUpdateInfo(),r||(console.log("HarperDB version is current"),process.exit(0))),Ky(`This version of HarperDB is ${vz.version}`,xf.LOG_LEVELS.INFO);let n=r[UL]??vz.version;n||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${xf.HDB_SUPPORT_ADDRESS}`),Aa.notify("Missing new version field from upgrade info object"),process.exit(1));let s,i=0;try{s=await eSe.forceUpdatePrompt(r)}catch(o){Aa.error("There was an error when prompting user about upgrade."),Aa.error(o),s=!1,i=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(i)),Aa.info(`Starting upgrade to version ${n}`),await iSe(r),Ky(`HarperDB was successfully upgraded to version ${r[UL]}`,xf.LOG_LEVELS.INFO)}a(sSe,"upgrade");async function iSe(e){try{await Xge.processDirectives(e)}catch(t){throw Ky("There was an error during the data upgrade. Please check the logs.",xf.LOG_LEVELS.ERROR),t}try{await xz.insertHdbUpgradeInfo(e[UL])}catch(t){Aa.error("Error updating the 'hdb_info' system table."),Aa.error(t)}}a(iSe,"runUpgrade");function Ky(e,t=void 0){t||(t=Aa.info),Aa[t](e),console.log(Qge.magenta(e))}a(Ky,"printToLogAndConsole")});var kz={};ye(kz,{SERVERS:()=>Bf,portServer:()=>xL,setPortServerMap:()=>Yy});function Yy(e,t){let r=xL.get(e)??[];xL.set(e,[...r,t])}var Bf,xL,BL=se(()=>{Bf={},xL=new Map;a(Yy,"setPortServerMap")});function aSe(e){if(typeof e!="string")throw new Wy(`License must be a string; received ${typeof e}: ${e}`);let t;try{t=e.split(".")}catch(l){let u=new Wy(`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 Ff(`License must have three dot-separated parts; got ${t.length}`);let[r,n,s]=t,i=oSe.getKey();if(!(0,zy.verify)(null,Buffer.from(r+"."+n,"utf8"),i,Buffer.from(s,"base64url")))throw new kL("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 cSe(e){if(e?.typ!=="Harper-License")throw new lE(`Invalid license header; typ must be 'Harper-License'; got: ${e?.typ}`);if(e?.alg!=="EdDSA")throw new lE(`Invalid license header; alg must be 'EdDSA'; got: ${e?.alg}`)}function lSe(e,t){return e.required?typeof t===e.type:typeof t>"u"||typeof t===e.type}function uSe(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(!lSe(t[r],e[r]))throw new jy(`Invalid license payload; ${i} must be a ${s}; got: ${typeof e[r]}`)}}function Gz(e){let{header:t,payload:r}=aSe(e),n;try{n=JSON.parse(t)}catch(i){let o=new lE;throw o.cause=i,o}cSe(n);let s;try{s=JSON.parse(r)}catch(i){let o=new jy;throw o.cause=i,o}return uSe(s),s}var zy,Hz,FL,Wy,Ff,kL,lE,jy,oSe,qz=se(()=>{zy=require("node:crypto"),Hz=b(fe());G();FL=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,zy.createPublicKey)(this.pem)}toString(){return this.pem}},Wy=class extends TypeError{static{a(this,"LicenseEncodingError")}},Ff=class extends TypeError{static{a(this,"InvalidLicenseError")}},kL=class extends Ff{static{a(this,"InvalidLicenseSignatureError")}},lE=class extends Ff{static{a(this,"InvalidHeaderError")}},jy=class extends Ff{static{a(this,"InvalidPayloadError")}},oSe=new FL(Hz.get(x.LICENSE_MODE));a(aSe,"validateLicenseSignature");a(cSe,"validateLicenseHeader");a(lSe,"valid");a(uSe,"validateLicensePayload");a(Gz,"validateLicense")});var Jy={};ye(Jy,{getActiveLicense:()=>VL,getUsageLicenses:()=>Xz,getUsageLicensesOp:()=>YL,installUsageLicense:()=>$L,installUsageLicenseOp:()=>qL,isActiveLicense:()=>Jz,isLicensed:()=>KL,loadAndWatchLicensesDir:()=>mSe,recordUsage:()=>Qz});async function qL(e){let t=e.license;try{await $L(t)}catch(r){let n=new Kz.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function $L(e){let t=Gz(e),{id:r}=t;if(await Me.system.hdb_license.get(r))throw new GL(`A usage license with ${r} already exists`);return bo.info?.("Installing usage license:",t),Me.system.hdb_license.put(r,t)}function Jz(e){return(e.reads===-1||(e.usedReads??0)<e.reads)&&(e.readBytes===-1||(e.usedReadBytes??0)<e.readBytes)&&(e.writes===-1||(e.usedWrites??0)<e.writes)&&(e.writeBytes===-1||(e.usedWriteBytes??0)<e.writeBytes)&&(e.realTimeMessages===-1||(e.usedRealTimeMessages??0)<e.realTimeMessages)&&(e.realTimeBytes===-1||(e.usedRealTimeBytes??0)<e.realTimeBytes)&&(e.cpuTime===-1||(e.usedCpuTime??0)<e.cpuTime)&&(e.storage===-1||(e.usedStorage??0)<e.storage)}async function VL(){let e=Yz.get(x.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=Me.system.hdb_license?.search(t);for await(let n of r??[])if(Jz(n))return n}async function KL(){return await VL()!==void 0}async function Qz(e){Aa=bo.forComponent("license"),Aa.trace?.("Recording usage into license from analytics");let t,r=(await VL())?.id;if(r){Aa.trace?.("Found license to record usage into:",r);let n={};bt(n,()=>{t=Me.system.hdb_license.update(r,n);for(let s of e)switch(Aa.trace?.("Processing analytics record:",s),s.metric){case"db-read":Aa.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":Aa.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":Aa.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"&&(Aa.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:Aa.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.";$z||(console.error(n),$z=!0),Vz===void 0&&(Vz=setInterval(()=>{bo.notify(n)},dSe).unref())}}function YL(e){let t={};return e.region&&(t.region=e.region),Xz(t)}function Xz(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]})}),Me.system.hdb_license.search({sort:{attribute:"__createdtime__"},conditions:t})}async function fSe(e){bo.trace?.("Loading usage license from file:",e);let t=await jz.readFile(e,{encoding:"utf-8"});try{await $L(t)}catch(r){bo.error?.("Failed to install usage license from file:",e,r)}}function mSe(){let e=HL.default.join(HL.default.dirname(Wz.getConfigFilePath()),"licenses");(0,zz.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:a((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",fSe)}var Kz,bo,Yz,HL,Wz,jz,zz,GL,$z,Vz,dSe,Aa,uE=se(()=>{qz();Kz=b(Ee()),bo=b(Q());as();Ja();Yz=b(fe());G();Oe();HL=b(require("node:path")),Wz=b(_t()),jz=b(require("node:fs/promises")),zz=require("chokidar"),GL=class extends Error{static{a(this,"ExistingLicenseError")}};a(qL,"installUsageLicenseOp");a($L,"installUsageLicense");$z=!1,dSe=6e5;a(Jz,"isActiveLicense");a(VL,"getActiveLicense");a(KL,"isLicensed");a(Qz,"recordUsage");TI(Qz);a(YL,"getUsageLicensesOp");a(Xz,"getUsageLicenses");a(fSe,"loadLicenseFile");a(mSe,"loadAndWatchLicensesDir")});var rR={};ye(rR,{deliverSocket:()=>u2,getHttpOptions:()=>_Se,getRequestId:()=>p2,handleApplication:()=>ESe,httpServer:()=>eD,logRequest:()=>mE,proxyRequest:()=>gSe,registerServer:()=>XL,suppressHandleApplicationWarning:()=>hSe});function ESe(e){pE=e.options.getAll(),e.options.on("change",t=>{pE=e.options.getAll()})}function _Se(){return pE}function u2(e,t,r){let n=e?.read?e:new n2.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Bf[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=Bf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Ia.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function gSe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=Zz.get(s),r){case"connection":i=u2(void 0,t),Zz.set(s,i),i.write=(c,l,u)=>(Xy.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(Xy.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Xy.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 XL(e,t,r=!0){t||(t=Lr.default.get(x.HTTP_PORT));let n=Bf[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",r2),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Bf[t]=e;e.on("unhandled",r2)}function ZL(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=[],Lr.default.get(x.HTTP_PORT)!=null&&t.push({port:Lr.default.get(x.HTTP_PORT),secure:Lr.default.get(x.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Lr.default.get(x.HTTP_SECUREPORT)!=null&&t.push({port:Lr.default.get(x.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Lr.default.get(x.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,s2.resolvePath)(Lr.default.get(x.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function eD(e,t){let r=[];for(let{port:n,secure:s}of ZL(t))r.push(d2(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?JL[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,XL(e,n,!1)),Zy[n]=eR(JL,n);return r}function d2(e,t,r,n){if(Yy(e,{protocol_name:t?"HTTPS":"HTTP",name:nR()}),!Qy[e]){let s=r?"operationsApi_network":"http",i=Lr.default.get(s+"_keepAliveTimeout"),o=Lr.default.get(s+"_timeout"),c=Lr.default.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:o,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Lr.default.get(x.HTTP_MAXHEADERSIZE)},u=Lr.default.get(s+"_mtls"),d=Lr.default.get(s+"_mtls_required"),f;if(t){let E=Lr.default.get("tls");f=Lr.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,i2.getTicketKeys)(),SNICallback:(0,o2.createTLSSelector)(r?"operations-api":"server",u),ciphers:E.ciphers??E[0]?.ciphers})}let m=a(async(E,_)=>{let R=performance.now(),S=0;try{let w=new hc(E,_);r&&(w.isOperationsServer=!0),pE.logging?.id&&(w.requestId=S=p2());let I=await Zy[e](w);if(!I){if(w._nodeResponse.statusCode){mE(E,w._nodeResponse.statusCode,S,performance.now()-R);return}I=f2(w)}if(I.headers?.set||(I.headers=new Hs(I.headers)),await KL()?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||[])_.setHeader(te[0],te[1]);return E.baseRequest=w,_.baseResponse=I,Qy[e].emit("unhandled",E,_)}let H=I.status||200;_.statusCode=H;let X=performance.now(),q=X-R,k=I.body,z,Y=!1;if(!I.handlesHeaders){let te=I.headers||new Hs;k?k.length>=0?(typeof k=="string"?te.set("Content-Length",Buffer.byteLength(k)):te.set("Content-Length",k.length),z=!0):k instanceof vs&&(k.size?te.set("Content-Length",k.size):k.on&&(Y=!0,k.on("size",Ne=>{_.headersSent||_.setHeader("Content-Length",Ne)})),k=k.stream()):(te.set("Content-Length","0"),z=!0);let Se=`hdb;dur=${q.toFixed(2)}`;if(I.wasCacheMiss&&(Se+=", miss"),jp(te,"Server-Timing",Se,!0),!_.headersSent)if(Y){if(te)if(te[Symbol.iterator])for(let[Ne,Ke]of te)_.setHeader(Ne,Ke);else for(let Ne in te)_.setHeader(Ne,te[Ne])}else _.writeHead(H,te&&(te[Symbol.iterator]?Array.from(te):te));z&&_.end(k)}let ce=w.handlerPath,de=w.method;if(We(q,"duration",ce,de,I.wasCacheMiss==null?void 0:I.wasCacheMiss?"cache-miss":"cache-hit"),tn(H<400,"success",ce,de),tn(1,"response_"+H,ce,de),mE(E,H,S,q),!z)if(k instanceof ReadableStream&&(k=zL.Readable.fromWeb(k)),(k[Symbol.iterator]||k[Symbol.asyncIterator])&&(k=zL.Readable.from(k)),k?.pipe){k.pipe(_),k.destroy&&_.on("close",()=>{k.destroy()});let te=0;k.on("data",Se=>{te+=Se.length}),k.on("end",()=>{We(performance.now()-X,"transfer",ce,de),We(te,"bytes-sent",ce,de)})}else k?.then?k.then(te=>{_.end(te)},y):_.end(k)}catch(w){y(w)}function y(w){let I=w.headers,H=w.statusCode||500;_.writeHead(H,I&&(I[Symbol.iterator]?Array.from(I):I)),_.end(pSe(w)),mE(E,H,S,performance.now()-R),w.statusCode?w.statusCode===500?Ia.default.warn(w):Ia.default.info(w):Ia.default.error(w)}a(y,"onError")},"requestHandler"),p=TS(m,(E,_)=>{_.statusCode=503,_.end("Service unavailable, exceeded request queue limit"),We(!0,"service-unavailable",e)},Lr.default.get(s+"_requestQueueLimit")),h=Qy[e]=(t?f?a2.createSecureServer:c2.createServer:tR.createServer)(l,(E,_)=>{let R=E.method;R==="GET"||R==="OPTIONS"||R==="HEAD"?m(E,_):p(E,_)});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&&We(performance.now()-E._parent.startTime,"tls-handshake",e),We(E.isSessionReused(),"tls-reused",e)}),h.isSecure=!0),XL(h,e)}return Qy[e]}function eR(e,t){let r=f2;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 f2(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Hs}}function SSe(e,t){eD(e,{requestOnly:!0,...t})}function m2(e,t){for(let{port:r}of ZL(t))e2[t?.runFirst?"unshift":"push"]({listener:e,port:r}),QL[r]=eR(e2,r)}function TSe(e,t){let r=[];for(let{port:n,secure:s}of ZL(t)){Yy(n,{protocol_name:s?"WSS":"WS",name:nR()});let i=d2(n,s,t?.isOperationsServer,t?.mtls);dE[n]||(dE[n]=new l2.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),dE[n].on("connection",(o,c)=>{try{let l=new hc(c);l.isWebSocket=!0;let u=Zy[n](l);Ia.default.debug("Received WS connection, calling listeners",WL),t2[n](o,l,u)}catch(l){Ia.default.warn("Error in handling WS connection",l)}}),m2((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):dE[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),dE[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{QL[n]&&QL[n](o,c,l)})),r.push(i),WL[t?.runFirst?"unshift":"push"]({listener:e,port:n}),t2[n]=eR(WL,n),Zy[n]=eR(JL,n)}return r}function r2(e,t){t.writeHead(404),t.end(`Not found
101
- `),mE(e,404,0,e.requestId)}function mE(e,t,r,n){let s=pE.logging;if(s){jL||(jL=Ia.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";jL[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+ySe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function ySe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function p2(){return fE||(fE=new BigInt64Array([1n]),fE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",fE.buffer))),Number(Atomics.add(fE,0,1n))}var n2,Ia,Xy,Lr,s2,i2,o2,a2,c2,tR,zL,l2,pSe,dE,Qy,Zy,JL,pE,hSe,Zz,e2,QL,WL,t2,jL,fE,tD=se(()=>{n2=require("node:net"),Ia=b(Q()),Xy=require("node:worker_threads"),Lr=b(fe());G();s2=b(_t()),i2=b(st()),o2=b(Ts()),a2=require("node:http2"),c2=require("node:https"),tR=require("node:http");lh();zp();os();as();zL=require("node:stream");Hr();BL();hE();jN();l2=require("ws");uE();({errorToString:pSe}=Ia.default);Ue.http=eD;Ue.request=SSe;Ue.ws=TSe;Ue.upgrade=m2;dE={},Qy={},Zy={},JL=[],pE={},hSe=!0;a(ESe,"handleApplication");a(_Se,"getHttpOptions");a(u2,"deliverSocket");Zz=new Map;a(gSe,"proxyRequest");a(XL,"registerServer");a(ZL,"getPorts");a(eD,"httpServer");a(d2,"getHTTPServer");a(eR,"makeCallbackChain");a(f2,"unhandled");a(SSe,"onRequest");Object.defineProperty(tR.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){}});e2=[],QL={};a(m2,"onUpgrade");WL=[],t2={};a(TSe,"onWebSocket");a(r2,"defaultNotFound");a(mE,"logRequest");a(ySe,"headersToString");a(p2,"getRequestId")});var nD=M(gE=>{"use strict";__();var{isMainThread:rD,parentPort:h2,threadId:sR,workerData:RSe}=require("node:worker_threads"),{createServer:bSe}=require("node:net"),{unlinkSync:ASe,existsSync:ISe}=require("fs"),_2;gE.whenComponentsLoaded=new Promise(e=>{_2=e});var Ci=Q(),Ao=fe(),Oi=(G(),D(j)),{server:wSe}=(Hr(),D(bm)),{createServer:NSe}=require("node:tls"),{restartNumber:CSe,getWorkerIndex:_E}=st(),{createReuseportFd:EE}=(lh(),D(q$)),{createTLSSelector:OSe}=Ts(),{resolvePath:$He}=_t(),{startupLog:PSe}=iR(),{SERVERS:kf,setPortServerMap:E2,portServer:LSe}=(BL(),D(kz)),DSe=(tD(),D(rR)),vSe=ai(),g2=Ao.get(Oi.CONFIG_PARAMS.THREADS_DEBUG),MSe=Ao.get(Oi.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);wSe.socket=USe;if(g2){let e;if(rD)e=Ao.get(Oi.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Ci.info("Could not close debugger",t)}});else{let t=Ao.get(Oi.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&_E()>=0&&(e=t+_E())}if(e){let t=Ao.get(Oi.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=Ao.get(Oi.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Ci.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&rD)try{require("inspector").open(9229)}catch(e){CSe<=1&&Ci.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"&&Ci.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:VHe,CONFIG_PARAMS:KHe}=Oi;Ao.initSync();gE.globals=vSe;gE.listenOnPorts=T2;gE.startServers=S2;function S2(){let e=Ao.get(Oi.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=aR().loadRootComponents(!0).then(()=>{h2?.on("message",n=>{let{port:s,fd:i,data:o}=n;if(i)deliverSocket(i,s,o);else if(n.requestId)DSe.proxyRequest(n);else if(n.type===Oi.ITC_EVENT_TYPES.SHUTDOWN){Ci.trace("received shutdown request",sR);for(let c in kf){let l=kf[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;if(!l[f]){h&&l.closeAllConnections?.(),clearInterval(p);return}let E=l[f][h?"all":"idle"]?.()||[];if(E.length===0){h&&clearInterval(p);return}m===1?Ci.info(`Closing ${E.length} idle connections`):h&&Ci.warn(`Forcefully closing ${E.length} active connections`);for(let _=0,R=E.length;_<R;_++){let S=E[_].socket;S._httpMessage&&!S._httpMessage.finished&&!h||(h?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
100
+ `}getKey(){return(0,zy.createPublicKey)(this.pem)}toString(){return this.pem}},Wy=class extends TypeError{static{a(this,"LicenseEncodingError")}},Ff=class extends TypeError{static{a(this,"InvalidLicenseError")}},kL=class extends Ff{static{a(this,"InvalidLicenseSignatureError")}},lE=class extends Ff{static{a(this,"InvalidHeaderError")}},jy=class extends Ff{static{a(this,"InvalidPayloadError")}},oSe=new FL(Hz.get(x.LICENSE_MODE));a(aSe,"validateLicenseSignature");a(cSe,"validateLicenseHeader");a(lSe,"valid");a(uSe,"validateLicensePayload");a(Gz,"validateLicense")});var Jy={};ye(Jy,{getActiveLicense:()=>VL,getUsageLicenses:()=>Xz,getUsageLicensesOp:()=>YL,installUsageLicense:()=>$L,installUsageLicenseOp:()=>qL,isActiveLicense:()=>Jz,isLicensed:()=>KL,loadAndWatchLicensesDir:()=>mSe,recordUsage:()=>Qz});async function qL(e){let t=e.license;try{await $L(t)}catch(r){let n=new Kz.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function $L(e){let t=Gz(e),{id:r}=t;if(await Me.system.hdb_license.get(r))throw new GL(`A usage license with ${r} already exists`);return bo.info?.("Installing usage license:",t),Me.system.hdb_license.put(r,t)}function Jz(e){return(e.reads===-1||(e.usedReads??0)<e.reads)&&(e.readBytes===-1||(e.usedReadBytes??0)<e.readBytes)&&(e.writes===-1||(e.usedWrites??0)<e.writes)&&(e.writeBytes===-1||(e.usedWriteBytes??0)<e.writeBytes)&&(e.realTimeMessages===-1||(e.usedRealTimeMessages??0)<e.realTimeMessages)&&(e.realTimeBytes===-1||(e.usedRealTimeBytes??0)<e.realTimeBytes)&&(e.cpuTime===-1||(e.usedCpuTime??0)<e.cpuTime)&&(e.storage===-1||(e.usedStorage??0)<e.storage)}async function VL(){let e=Yz.get(x.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=Me.system.hdb_license?.search(t);for await(let n of r??[])if(Jz(n))return n}async function KL(){return await VL()!==void 0}async function Qz(e){Ia=bo.forComponent("license"),Ia.trace?.("Recording usage into license from analytics");let t,r=(await VL())?.id;if(r){Ia.trace?.("Found license to record usage into:",r);let n={};bt(n,()=>{t=Me.system.hdb_license.update(r,n);for(let s of e)switch(Ia.trace?.("Processing analytics record:",s),s.metric){case"db-read":Ia.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":Ia.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":Ia.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"&&(Ia.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:Ia.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.";$z||(console.error(n),$z=!0),Vz===void 0&&(Vz=setInterval(()=>{bo.notify(n)},dSe).unref())}}function YL(e){let t={};return e.region&&(t.region=e.region),Xz(t)}function Xz(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]})}),Me.system.hdb_license.search({sort:{attribute:"__createdtime__"},conditions:t})}async function fSe(e){bo.trace?.("Loading usage license from file:",e);let t=await jz.readFile(e,{encoding:"utf-8"});try{await $L(t)}catch(r){bo.error?.("Failed to install usage license from file:",e,r)}}function mSe(){let e=HL.default.join(HL.default.dirname(Wz.getConfigFilePath()),"licenses");(0,zz.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:a((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",fSe)}var Kz,bo,Yz,HL,Wz,jz,zz,GL,$z,Vz,dSe,Ia,uE=se(()=>{qz();Kz=b(Ee()),bo=b(Q());as();Ja();Yz=b(fe());G();Oe();HL=b(require("node:path")),Wz=b(_t()),jz=b(require("node:fs/promises")),zz=require("chokidar"),GL=class extends Error{static{a(this,"ExistingLicenseError")}};a(qL,"installUsageLicenseOp");a($L,"installUsageLicense");$z=!1,dSe=6e5;a(Jz,"isActiveLicense");a(VL,"getActiveLicense");a(KL,"isLicensed");a(Qz,"recordUsage");TI(Qz);a(YL,"getUsageLicensesOp");a(Xz,"getUsageLicenses");a(fSe,"loadLicenseFile");a(mSe,"loadAndWatchLicensesDir")});var rR={};ye(rR,{deliverSocket:()=>u2,getHttpOptions:()=>_Se,getRequestId:()=>p2,handleApplication:()=>ESe,httpServer:()=>eD,logRequest:()=>mE,proxyRequest:()=>gSe,registerServer:()=>XL,suppressHandleApplicationWarning:()=>hSe});function ESe(e){pE=e.options.getAll(),e.options.on("change",t=>{pE=e.options.getAll()})}function _Se(){return pE}function u2(e,t,r){let n=e?.read?e:new n2.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Bf[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=Bf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(wa.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function gSe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=Zz.get(s),r){case"connection":i=u2(void 0,t),Zz.set(s,i),i.write=(c,l,u)=>(Xy.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(Xy.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Xy.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 XL(e,t,r=!0){t||(t=Lr.default.get(x.HTTP_PORT));let n=Bf[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",r2),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Bf[t]=e;e.on("unhandled",r2)}function ZL(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=[],Lr.default.get(x.HTTP_PORT)!=null&&t.push({port:Lr.default.get(x.HTTP_PORT),secure:Lr.default.get(x.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Lr.default.get(x.HTTP_SECUREPORT)!=null&&t.push({port:Lr.default.get(x.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Lr.default.get(x.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,s2.resolvePath)(Lr.default.get(x.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function eD(e,t){let r=[];for(let{port:n,secure:s}of ZL(t))r.push(d2(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?JL[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,XL(e,n,!1)),Zy[n]=eR(JL,n);return r}function d2(e,t,r,n){if(Yy(e,{protocol_name:t?"HTTPS":"HTTP",name:nR()}),!Qy[e]){let s=r?"operationsApi_network":"http",i=Lr.default.get(s+"_keepAliveTimeout"),o=Lr.default.get(s+"_timeout"),c=Lr.default.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:o,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Lr.default.get(x.HTTP_MAXHEADERSIZE)},u=Lr.default.get(s+"_mtls"),d=Lr.default.get(s+"_mtls_required"),f;if(t){let E=Lr.default.get("tls");f=Lr.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,i2.getTicketKeys)(),SNICallback:(0,o2.createTLSSelector)(r?"operations-api":"server",u),ciphers:E.ciphers??E[0]?.ciphers})}let m=a(async(E,_)=>{let R=performance.now(),S=0;try{let w=new hc(E,_);r&&(w.isOperationsServer=!0),pE.logging?.id&&(w.requestId=S=p2());let I=await Zy[e](w);if(!I){if(w._nodeResponse.statusCode){mE(E,w._nodeResponse.statusCode,S,performance.now()-R);return}I=f2(w)}if(I.headers?.set||(I.headers=new Hs(I.headers)),await KL()?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||[])_.setHeader(te[0],te[1]);return E.baseRequest=w,_.baseResponse=I,Qy[e].emit("unhandled",E,_)}let H=I.status||200;_.statusCode=H;let X=performance.now(),q=X-R,k=I.body,z,Y=!1;if(!I.handlesHeaders){let te=I.headers||new Hs;k?k.length>=0?(typeof k=="string"?te.set("Content-Length",Buffer.byteLength(k)):te.set("Content-Length",k.length),z=!0):k instanceof vs&&(k.size?te.set("Content-Length",k.size):k.on&&(Y=!0,k.on("size",Ne=>{_.headersSent||_.setHeader("Content-Length",Ne)})),k=k.stream()):(te.set("Content-Length","0"),z=!0);let Se=`hdb;dur=${q.toFixed(2)}`;if(I.wasCacheMiss&&(Se+=", miss"),jp(te,"Server-Timing",Se,!0),!_.headersSent)if(Y){if(te)if(te[Symbol.iterator])for(let[Ne,Ke]of te)_.setHeader(Ne,Ke);else for(let Ne in te)_.setHeader(Ne,te[Ne])}else _.writeHead(H,te&&(te[Symbol.iterator]?Array.from(te):te));z&&_.end(k)}let ce=w.handlerPath,de=w.method;if(We(q,"duration",ce,de,I.wasCacheMiss==null?void 0:I.wasCacheMiss?"cache-miss":"cache-hit"),tn(H<400,"success",ce,de),tn(1,"response_"+H,ce,de),mE(E,H,S,q),!z)if(k instanceof ReadableStream&&(k=zL.Readable.fromWeb(k)),(k[Symbol.iterator]||k[Symbol.asyncIterator])&&(k=zL.Readable.from(k)),k?.pipe){k.pipe(_),k.destroy&&_.on("close",()=>{k.destroy()});let te=0;k.on("data",Se=>{te+=Se.length}),k.on("end",()=>{We(performance.now()-X,"transfer",ce,de),We(te,"bytes-sent",ce,de)})}else k?.then?k.then(te=>{_.end(te)},y):_.end(k)}catch(w){y(w)}function y(w){let I=w.headers,H=w.statusCode||500;_.writeHead(H,I&&(I[Symbol.iterator]?Array.from(I):I)),_.end(pSe(w)),mE(E,H,S,performance.now()-R),w.statusCode?w.statusCode===500?wa.default.warn(w):wa.default.info(w):wa.default.error(w)}a(y,"onError")},"requestHandler"),p=TS(m,(E,_)=>{_.statusCode=503,_.end("Service unavailable, exceeded request queue limit"),We(!0,"service-unavailable",e)},Lr.default.get(s+"_requestQueueLimit")),h=Qy[e]=(t?f?a2.createSecureServer:c2.createServer:tR.createServer)(l,(E,_)=>{let R=E.method;R==="GET"||R==="OPTIONS"||R==="HEAD"?m(E,_):p(E,_)});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&&We(performance.now()-E._parent.startTime,"tls-handshake",e),We(E.isSessionReused(),"tls-reused",e)}),h.isSecure=!0),XL(h,e)}return Qy[e]}function eR(e,t){let r=f2;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 f2(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Hs}}function SSe(e,t){eD(e,{requestOnly:!0,...t})}function m2(e,t){for(let{port:r}of ZL(t))e2[t?.runFirst?"unshift":"push"]({listener:e,port:r}),QL[r]=eR(e2,r)}function TSe(e,t){let r=[];for(let{port:n,secure:s}of ZL(t)){Yy(n,{protocol_name:s?"WSS":"WS",name:nR()});let i=d2(n,s,t?.isOperationsServer,t?.mtls);dE[n]||(dE[n]=new l2.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),dE[n].on("connection",(o,c)=>{try{let l=new hc(c);l.isWebSocket=!0;let u=Zy[n](l);wa.default.debug("Received WS connection, calling listeners",WL),t2[n](o,l,u)}catch(l){wa.default.warn("Error in handling WS connection",l)}}),m2((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):dE[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),dE[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{QL[n]&&QL[n](o,c,l)})),r.push(i),WL[t?.runFirst?"unshift":"push"]({listener:e,port:n}),t2[n]=eR(WL,n),Zy[n]=eR(JL,n)}return r}function r2(e,t){t.writeHead(404),t.end(`Not found
101
+ `),mE(e,404,0,e.requestId)}function mE(e,t,r,n){let s=pE.logging;if(s){jL||(jL=wa.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";jL[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+ySe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function ySe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function p2(){return fE||(fE=new BigInt64Array([1n]),fE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",fE.buffer))),Number(Atomics.add(fE,0,1n))}var n2,wa,Xy,Lr,s2,i2,o2,a2,c2,tR,zL,l2,pSe,dE,Qy,Zy,JL,pE,hSe,Zz,e2,QL,WL,t2,jL,fE,tD=se(()=>{n2=require("node:net"),wa=b(Q()),Xy=require("node:worker_threads"),Lr=b(fe());G();s2=b(_t()),i2=b(st()),o2=b(Ts()),a2=require("node:http2"),c2=require("node:https"),tR=require("node:http");lh();zp();os();as();zL=require("node:stream");Hr();BL();hE();jN();l2=require("ws");uE();({errorToString:pSe}=wa.default);Ue.http=eD;Ue.request=SSe;Ue.ws=TSe;Ue.upgrade=m2;dE={},Qy={},Zy={},JL=[],pE={},hSe=!0;a(ESe,"handleApplication");a(_Se,"getHttpOptions");a(u2,"deliverSocket");Zz=new Map;a(gSe,"proxyRequest");a(XL,"registerServer");a(ZL,"getPorts");a(eD,"httpServer");a(d2,"getHTTPServer");a(eR,"makeCallbackChain");a(f2,"unhandled");a(SSe,"onRequest");Object.defineProperty(tR.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){}});e2=[],QL={};a(m2,"onUpgrade");WL=[],t2={};a(TSe,"onWebSocket");a(r2,"defaultNotFound");a(mE,"logRequest");a(ySe,"headersToString");a(p2,"getRequestId")});var nD=M(gE=>{"use strict";__();var{isMainThread:rD,parentPort:h2,threadId:sR,workerData:RSe}=require("node:worker_threads"),{createServer:bSe}=require("node:net"),{unlinkSync:ASe,existsSync:ISe}=require("fs"),_2;gE.whenComponentsLoaded=new Promise(e=>{_2=e});var Ci=Q(),Ao=fe(),Oi=(G(),D(j)),{server:wSe}=(Hr(),D(bm)),{createServer:NSe}=require("node:tls"),{restartNumber:CSe,getWorkerIndex:_E}=st(),{createReuseportFd:EE}=(lh(),D(q$)),{createTLSSelector:OSe}=Ts(),{resolvePath:$He}=_t(),{startupLog:PSe}=iR(),{SERVERS:kf,setPortServerMap:E2,portServer:LSe}=(BL(),D(kz)),DSe=(tD(),D(rR)),vSe=ai(),g2=Ao.get(Oi.CONFIG_PARAMS.THREADS_DEBUG),MSe=Ao.get(Oi.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);wSe.socket=USe;if(g2){let e;if(rD)e=Ao.get(Oi.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Ci.info("Could not close debugger",t)}});else{let t=Ao.get(Oi.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&_E()>=0&&(e=t+_E())}if(e){let t=Ao.get(Oi.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=Ao.get(Oi.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Ci.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&rD)try{require("inspector").open(9229)}catch(e){CSe<=1&&Ci.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"&&Ci.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:VHe,CONFIG_PARAMS:KHe}=Oi;Ao.initSync();gE.globals=vSe;gE.listenOnPorts=T2;gE.startServers=S2;function S2(){let e=Ao.get(Oi.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=aR().loadRootComponents(!0).then(()=>{h2?.on("message",n=>{let{port:s,fd:i,data:o}=n;if(i)deliverSocket(i,s,o);else if(n.requestId)DSe.proxyRequest(n);else if(n.type===Oi.ITC_EVENT_TYPES.SHUTDOWN){Ci.trace("received shutdown request",sR);for(let c in kf){let l=kf[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;if(!l[f]){h&&l.closeAllConnections?.(),clearInterval(p);return}let E=l[f][h?"all":"idle"]?.()||[];if(E.length===0){h&&clearInterval(p);return}m===1?Ci.info(`Closing ${E.length} idle connections`):h&&Ci.warn(`Forcefully closing ${E.length} active connections`);for(let _=0,R=E.length;_<R;_++){let S=E[_].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
104
  `))}},25).unref()}l.close?.(()=>{clearInterval(u),setTimeout(()=>{console.log("forced close server",c,sR),l.cantCleanupProperly||Ci.warn("Had to forcefully exit the thread",sR),process.exit(0)},5e3).unref()})}if(g2||process.env.DEV_MODE)try{require("inspector").close()}catch(c){Ci.info("Could not close debugger",c)}}}).ref();let r;EE&&!MSe&&(r=T2()),Promise.resolve(r).then(()=>{if(_E()===0)try{PSe(LSe)}catch(n){console.error("Error displaying start-up log",n)}h2?.postMessage({type:Oi.ITC_EVENT_TYPES.CHILD_STARTED})})});return _2(t),t}a(S2,"startServers");function T2(){let e=[];for(let t in kf){let r=kf[t];if(t.includes?.("/")&&_E()==0){ISe(t)&&ASe(t),e.push(new Promise((o,c)=>{r.listen({path:t},()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),Ci.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=Ao.get(Oi.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let o=typeof s=="string"?s.split("-"):s,c=_E();if(c<o[0]||c>o[1])continue}let i;try{let o=t.lastIndexOf(":");o>0?EE?n={fd:EE(+t.slice(o+1).replace(/[\[\]]/g,""),t.slice(0,o))}:n={host:+t.slice(o+1).replace(/[\[\]]/g,""),port:t.slice(0,o)}:EE?n={fd:EE(+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}),Ci.trace("Listening on port "+t,sR)}).on("error",c)}))}return Promise.all(e)}a(T2,"listenOnPorts");!rD&&!RSe?.noServerStart&&S2();function USe(e,t){let r=(hE(),D(oR)).getComponentName,n;if(t.securePort){E2(t.securePort,{protocol_name:"TLS",name:r()});let s=OSe("server",t.mtls),i=Ao.get("tls");n=NSe({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),kf[t.securePort]=n}return t.port&&(E2(t.port,{protocol_name:"TCP",name:r()}),n=bSe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),kf[t.port]=n),n}a(USe,"onSocket")});var C2={};ye(C2,{startHTTPThreads:()=>xSe,startSocketServer:()=>aD,updateWorkerIdleness:()=>N2});async function xSe(e=2,t){gI().catch(r=>Vf.error?.("Error recording hostname for analytics:",r));try{if(t)iD(0,1,!0);else{let{loadRootComponents:r}=aR();if(e===0)return(0,Io.setMainIsWorker)(!0),await nD().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)iD(r,e);return Promise.all(w2)}finally{(0,Io.threadsHaveStarted)()}}function iD(e,t=1,r){if(sD++,(0,Io.startWorker)("server/threads/threadServer.js",{name:uA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(u){u.type===aA.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});w2.push(s),await s,Hf.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=lR.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=Hf.indexOf(n);o>-1&&Hf.splice(o,1)}if(a(i,"removeWorker"),Gf){let o=Gf;Gf=[];for(let c of o)I2[c.localPort](null,c)}}}),r){let n=setInterval(()=>{oD?oD=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Io.shutdownWorkers)(),sD=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function aD(e=0,t){if(typeof e=="string")try{(0,uR.existsSync)(e)&&(0,uR.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=BSe:r=FSe(t):r=cD;let n=(0,qf.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=I2[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),oD=!0,r(i,(o,c)=>{if(!o){if(y2){let u=i._socket||new qf.Socket({handle:i,writable:!0,readable:!0});y2.deliverSocket(u,e,c),u.resume()}else sD>0?(Gf.length===0&&setTimeout(()=>{Gf.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,Gf.push(i)):(console.log("start up a dynamic thread to handle request"),iD(0));We(!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});GSe(u,o,e)}We(!0,"socket-routed")})},Vf.info(`HarperDB ${A2.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 cD(e,t){let r,n=0;for(let s of Hf){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=cR)return cR=i,t(r);n=i}cR=0,t(r)}function BSe(e,t){let r={};e.getpeername(r);let n=r.address,s=$f.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);cD(e,o=>{$f.set(n,{worker:o,lastUsed:i}),t(o)})}function FSe(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=$f.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);cD(n,f=>{$f.set(l,{worker:f,lastUsed:d}),s(f,o)})})}a(r,"findByHeaderAffinity")}function N2(){cR=0;for(let e of Hf)e.expectedIdle=e.recentELU.idle+kSe,e.requests=1;Hf.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function GSe(e,t,r){let n=HSe++;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(),lR.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")),lR.delete(n)),s.event=="destroy"&&(e.destroy(),lR.delete(n))})}var Io,qf,Vf,uR,b2,A2,Hf,Gf,I2,y2,sD,w2,oD,cR,R2,$f,kSe,lR,HSe,lD=se(()=>{Io=b(st()),qf=require("net");G();Vf=b(Q()),uR=require("fs");as();b2=require("worker_threads"),A2=b(yt()),Hf=[],Gf=[],I2=[],sD=0,w2=[];b2.isMainThread&&process.on("uncaughtException",e=>{if(e.code!=="ECONNRESET"){if(e.code==="EIO"){Vf.disableStdio();return}console.error("uncaughtException",e)}});a(xSe,"startHTTPThreads");a(iD,"startHTTPWorker");a(aD,"startSocketServer");cR=0;a(cD,"findMostIdleWorker");R2=36e5,$f=new Map;a(BSe,"findByRemoteAddressAffinity");a(FSe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of $f)r.lastUsed+R2<e&&$f.delete(t)},R2).unref();kSe=1e3;a(N2,"updateWorkerIdleness");(0,Io.setMonitorListener)(N2);lR=new Map,HSe=1;a(GSe,"proxySocket")});var iR=M(fR=>{"use strict";var Ae=fe();Ae.initSync();jf();var dn=(G(),D(j)),{CONFIG_PARAMS:xe}=dn,dr=Q(),Yf=require("fs-extra"),Gc=require("path"),qSe=cL(),{install:$Se}=Oz(),uD=require("chalk"),{packageJson:VSe,PACKAGE_ROOT:KSe}=yt(),Wf=ae(),YSe=(vL(),D(DL)),dD=_t(),P2=rl(),O2=Iy(),WSe=Fz(),{compactOnStart:jSe}=(oL(),D(iL)),zSe=require("minimist"),JSe=Ts(),{startHTTPThreads:QSe}=(lD(),D(C2)),XSe=Hy(),{isMainThread:ZSe}=require("worker_threads"),JHe=to(),QHe=Yl(),XHe=Lw(),ZHe=wp(),dR=(G(),D(j)),{getHdbPid:eTe}=Pf(),qc,Kf,L2=!1,tTe="Upgrade complete. Starting HarperDB.",rTe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",nTe="HarperDB not found, starting install process.",sTe="There was an error during install, check install_log.log for more details. Exiting.",iTe="HarperDB successfully started.";function oTe(){process.on("unhandledRejection",(e,t)=>{dr.error("Unhandled promise rejection: Promise",t,"reason:",e)})}a(oTe,"addUnhandleRejectionListener");function aTe(){if(!L2){let e=a(()=>{Yf.removeSync(Gc.join(Ae.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(aTe,"addExitListeners");async function D2(e=!1,t=!1){if(console.log(uD.magenta("Starting HarperDB...")),oTe(),dr.suppressLogging?.(()=>{console.log(uD.magenta(""+Yf.readFileSync(Gc.join(KSe,"utility/install/ascii_logo.txt"))))}),dr.debug("Checking to make sure hdb is installed"),YSe.isHdbInstalled(Ae,dr)===!1){console.log(nTe);try{await $Se()}catch(o){console.error(sTe,o),dr.error(o),process.exit(1)}}if(!e){let o=P2(Object.keys(dn.CONFIG_PARAM_MAP),!0);!Wf.isEmpty(o)&&!Wf.isEmptyOrZeroLength(Object.keys(o))&&dD.updateConfigValue(void 0,void 0,o,!0,!0)}let r=Kf?.service==="clustering";Kf?.service&&!r&&(console.error("Unrecognized service argument"),dr.debug("Unrecognized service argument"),process.exit(1));let n=eTe();n&&(r||(dr.debug("Error: HarperDB is already running"),console.error(`Error: HarperDB is already running (pid: ${n})`),process.exit(4))),qc===void 0&&(qc=Pf()),dr.debug("Checking for service clustering"),r&&(n||(console.error("HarperDB must be running to start clustering."),process.exit()),Ae.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 O2.generateNatsConfig(),await qc.startClusteringProcesses(!0),process.exit()),aTe(),t&&await Yf.writeFile(Gc.join(Ae.get(dR.CONFIG_PARAMS.ROOTPATH),dR.HDB_PID_FILE),`${process.pid}`),dr.info("HarperDB PID",process.pid);let s;try{let o=await XSe.getVersionUpdateInfo();o!==void 0&&(s=o[dn.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await WSe.upgrade(o),console.log(tTe))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`,o),dr.error(o)):(console.error(rTe,o),dr.error(o)),process.exit(1)}qSe(),uTe(),await JSe.reviewSelfSignedCert(),Wf.autoCastBoolean(Ae.get(dn.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&ZSe&&await O2.generateNatsConfig(t)}a(D2,"initialize");async function cTe(e=!1){try{Kf=zSe(process.argv),Kf.ROOTPATH&&dD.updateConfigObject("settings_path",Gc.join(Kf.ROOTPATH,dn.HDB_CONFIG_FILE)),await D2(e,!0),Ae.get(dn.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await jSe();let t=process.env.IS_SCRIPTED_SERVICE&&!Kf.service;Wf.autoCastBoolean(Ae.get(dn.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(await qc.startClusteringProcesses(),await qc.startClusteringThreads()),await QSe(process.env.DEV_MODE?1:Ae.get(dR.CONFIG_PARAMS.THREADS_COUNT)??Ae.get(dR.CONFIG_PARAMS.THREADS)),t||v2()}catch(t){console.error(t),dr.error(t),process.exit(1)}}a(cTe,"main");function v2(){dr.suppressLogging(()=>{console.log(uD.magenta(`HarperDB ${VSe.version} successfully started`))}),dr.notify(iTe)}a(v2,"started");async function lTe(e=!0){L2=!e;try{qc===void 0&&(qc=Pf()),dr.debug("initializing processManagement..."),await D2(),dr.debug("Starting new main process"),await qc.startService(dn.PROCESS_DESCRIPTORS.HDB,!0),v2(),e&&process.exit(0)}catch(t){console.error(t),dr.error(t),process.exit(1)}}a(lTe,"launch");function uTe(){let e=Gc.join(Ae.get(dn.CONFIG_PARAMS.ROOTPATH),dn.LICENSE_KEY_DIR_NAME,dn.LICENSE_FILE_NAME),t=Gc.join(e,dn.LICENSE_FILE_NAME),r=Gc.join(e,dn.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=P2(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Wf.isEmpty(n)||Wf.isEmpty(s))return;Yf.mkdirpSync(e),Yf.writeFileSync(r,n),Yf.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),dr.error(s)}}a(uTe,"writeLicenseFromVars");fR.launch=lTe;fR.main=cTe;fR.startupLog=dTe;function dTe(e){let r=a(p=>p.padEnd(20),"pad"),n=`
@@ -117,22 +117,22 @@ Connection: close\r
117
117
  `;let l=[],u=dD.getConfigObj();for(let p in u)u[p].package&&l.push(p);let d={},f=`${r("REST:")}`;for(let[p,h]of e)for(let E of h){let _=E.name;_==="rest"&&(f+=`${E.protocol_name}: ${p}, `),l.includes(_)&&(d[_]?d[_]+=`${E.protocol_name}: ${p}, `:d[_]=`${E.protocol_name}: ${p}, `)}f.length>21&&(f=f.slice(0,-2),n+=`${f}
118
118
  `);let m=Ae.get(xe.HTTP_PORT)?`HTTP: ${Ae.get(xe.HTTP_PORT)}, `:"";m+=Ae.get(xe.HTTP_SECUREPORT)?`HTTPS: ${Ae.get(xe.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
- `;console.log(n),Ae.get(xe.LOGGING_STDSTREAMS)&&dr.logsAtLevel("info")&&dr.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(dTe,"startupLog")});var jf=M((iGe,k2)=>{"use strict";var fTe=require("minimist"),{isMainThread:hD,parentPort:SE,threadId:rGe}=require("worker_threads"),Vt=(G(),D(j)),Pi=Q(),mTe=ae(),mR=Iy(),fD=lr(),nGe=Dt(),pTe=_t(),Eu=Pf(),M2=qh(),{compactOnStart:hTe}=(oL(),D(iL)),sGe=rl(),{restartWorkers:pD,onMessageByType:ETe,shutdownWorkersNow:_Te}=st(),{handleHDBError:gTe,hdbErrors:STe}=Ee(),{HTTP_STATUS_CODES:TTe}=STe,TE=fe(),{sendOperationToNode:U2,getThisNodeName:yTe,monitorNodeCAs:RTe}=(gs(),D(ia)),bTe=require("node:path"),{unlinkSync:ATe}=require("node:fs");TE.initSync();var mD=`Restarting HarperDB. This may take up to ${Vt.RESTART_TIMEOUT_MS/1e3} seconds.`,x2="Clustering is not enabled so cannot be restarted",ITe="Invalid service",wa;k2.exports={restart:F2,restartService:ED};hD&&ETe(Vt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await ED({service:e.workerType}):F2({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function F2(e){wa=Object.keys(e).length===0;let t=fTe(process.argv);if(t.service){await ED(t);return}if(wa){let r=Eu.getHdbPid();return console.error(r?"Restarting Harper...":"Starting Harper..."),iR().launch(!0),mD}return hD?(Pi.notify(mD),TE.get(Vt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await hTe(),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 _Te(),await Eu.cleanupChildrenProcesses(!1),await ATe(bTe.join(TE.get(Vt.CONFIG_PARAMS.ROOTPATH),Vt.HDB_PID_FILE),`${process.pid}`),Pi.debug("Starting new process..."),iR().launch(!0)},50)):SE.postMessage({type:Vt.ITC_EVENT_TYPES.RESTART}),mD}a(F2,"restart");async function ED(e){let{service:t}=e;if(Vt.HDB_PROCESS_SERVICES[t]===void 0)throw gTe(new Error,ITe,TTe.BAD_REQUEST,void 0,void 0,!0);if(Eu.expectedRestartOfChildren(),!hD){e.replicated&&RTe(),SE.postMessage({type:Vt.ITC_EVENT_TYPES.RESTART,workerType:t}),SE.ref(),await new Promise(s=>{SE.on("message",i=>{i.type==="restart-complete"&&(s(),SE.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===yTe())continue;let i;try{({job_id:i}=await U2(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 U2(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(!TE.get(Vt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=x2;break}wa&&console.log("Restarting clustering"),Pi.notify("Restarting clustering"),await wTe();break;case Vt.HDB_PROCESS_SERVICES.clustering_config:case Vt.HDB_PROCESS_SERVICES["clustering config"]:if(!TE.get(Vt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=x2;break}wa&&console.log("Restarting clusteringConfig"),Pi.notify("Restarting clustering_config"),await Eu.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:wa&&console.log("Restarting httpWorkers"),Pi.notify("Restarting http_workers"),wa?await Eu.restart(Vt.PROCESS_DESCRIPTORS.HDB):await pD("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Pi.error(r),wa&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(ED,"restartService");async function wTe(){if(!pTe.getConfigFromFile(Vt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await M2.getHDBProcessInfo()).clustering.length===0)Pi.trace("Clustering not running, restart will start clustering services"),await mR.generateNatsConfig(!0),await Eu.startClusteringProcesses(),await Eu.startClusteringThreads(),await B2(),wa&&await fD.closeConnection();else{await mR.generateNatsConfig(!0),(await M2.getHDBProcessInfo()).clustering.forEach(s=>{Pi.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await mTe.asyncSetTimeout(3e3),await B2(),await fD.updateLocalStreams(),wa&&await fD.closeConnection(),Pi.trace("Restart clustering restarting ingest and reply service threads");let r=pD(Vt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),n=pD(Vt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await r,await n}}a(wTe,"restartClustering");async function B2(){await mR.removeNatsConfig(Vt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await mR.removeNatsConfig(Vt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(B2,"removeNatsConfig")});var J2=M((cGe,z2)=>{"use strict";var aGe=require("lodash"),zn=(G(),D(j)),{handleHDBError:H2,hdbErrors:NTe}=Ee(),{HDB_ERROR_MSGS:CTe,HTTP_STATUS_CODES:OTe}=NTe,_D=Q();z2.exports={getRolePermissions:LTe};var _u=Object.create(null),PTe=a(e=>({key:e,perms:{}}),"permsTemplateObj"),V2=a((e=!1)=>({describe:e,tables:{}}),"schemaPermsTemplate"),K2=a((e=!1,t=!1,r=!1,n=!1)=>({[zn.PERMS_CRUD_ENUM.READ]:e,[zn.PERMS_CRUD_ENUM.INSERT]:t,[zn.PERMS_CRUD_ENUM.UPDATE]:r,[zn.PERMS_CRUD_ENUM.DELETE]:n}),"permissionsTemplate"),gD=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...K2(t,r,n,s)}),"tablePermsTemplate"),G2=a((e,t=K2())=>({attribute_name:e,describe:j2(t),[yE]:t[yE],[SD]:t[SD],[TD]:t[TD]}),"attrPermsTemplate"),q2=a((e,t=!1)=>({attribute_name:e,describe:t,[yE]:t}),"timestampAttrPermsTemplate"),{READ:yE,INSERT:SD,UPDATE:TD}=zn.PERMS_CRUD_ENUM,Y2=Object.values(zn.PERMS_CRUD_ENUM),W2=[yE,SD,TD];function LTe(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[zn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(_u[t]&&_u[t].key===n)return _u[t].perms;let s=DTe(e,r);return _u[t]?_u[t].key=n:_u[t]=PTe(n),_u[t].perms=s,s}catch(r){if(!e[zn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[zn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<zn.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 _D.error(n),_D.debug(r),H2(new Error,CTe.OUTDATED_PERMS_TRANSLATION_ERROR,OTe.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
121
- ${r.stack}`;throw _D.error(n),H2(new Error)}}}a(LTe,"getRolePermissions");function DTe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[zn.SYSTEM_SCHEMA_NAME]=n[zn.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]=vTe(t[i]);return}r[i]=V2(),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=MTe(c,l);r[i].describe||Y2.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=gD()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=gD()})}),r}a(DTe,"translateRolePermissions");function vTe(e){let t=V2(!0);return Object.keys(e).forEach(r=>{t.tables[r]=gD(!0,!0,!0,!0,!0)}),t}a(vTe,"createStructureUserPermissions");function MTe(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 zn.TIME_STAMP_NAMES.includes(f)&&(m=q2(f,d[yE])),u[f]=m,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=G2(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=j2(d),s.attribute_permissions.push(d),c||UTe(d,l)}else if(u!==o){let d;zn.TIME_STAMP_NAMES.includes(u)?d=q2(u):d=G2(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=$2(s),s}else return e.describe=$2(e),e}a(MTe,"getTableAttrPerms");function $2(e){return Y2.filter(t=>e[t]).length>0}a($2,"getSchemaTableDescribePerm");function j2(e){return W2.filter(t=>e[t]).length>0}a(j2,"getAttributeDescribePerm");function UTe(e,t){W2.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(UTe,"checkForHashPerms")});var RE={};ye(RE,{authentication:()=>s4,bypassAuth:()=>WTe,login:()=>RD,logout:()=>bD,start:()=>jTe});function WTe(){n4=!0}async function s4(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let p=e.isOperationsServer?$Te?qTe:[]:GTe?HTe:[];if(p.includes(i)||p.includes("*")){if(e.method==="OPTIONS"){let h=wn.get(x.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",E=new Hs([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",h],["Access-Control-Allow-Origin",i]]);return hR&&E.set("Access-Control-Allow-Credentials","true"),{status:200,headers:E}}o.push("Access-Control-Allow-Origin",i),hR&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(hR){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 _=E.indexOf(";");l=E.slice(p.length,_===-1?E.length:_),u=await Q2.get(l);break}e.session=u||(u={})}let d=a((p,h,E)=>{let _=new BTe(p,h,Ka.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);_.auth_strategy=E,l&&(_.session_id=l),r.referer&&(_.referer=r.referer),r.origin&&(_.origin=r.origin),h===oi.SUCCESS?pR.info?.(_):pR.error?.(_)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&pR.error?.("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let p=await mf(e.peerCertificate,e.mtlsConfig);if(!p.valid)return pR.error?.("Certificate verification failed:",p.status,"for",e.peerCertificate.subject.CN),c({status:401,body:Ho({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 Ue.getUser(h,null,e),d(h,oi.SUCCESS,"mTLS")):kTe("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=gu.get(n),!f){let p=n.indexOf(" "),h=n.slice(0,p),E=n.slice(p+1),_,R;try{switch(h){case"Basic":let S=atob(E),y=S.indexOf(":");_=S.slice(0,y),R=S.slice(y+1),f=_||R?await Ue.getUser(_,R,e):null;break;case"Bearer":try{f=await PC(E)}catch(w){if(w.message==="invalid token")try{return await XS(E),c({status:-1})}catch{throw w}}break}}catch(S){return KTe&&(gu.get(E)||(gu.set(E,E),d(_,oi.FAILURE,h))),c({status:401,body:Ho({error:S.message},e)})}gu.set(n,f),VTe&&d(f.username,oi.SUCCESS,h)}e.user=f}else u?.user?e.user=await Ue.getUser(u.user,null,e):(n4&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await Gp());hR&&(e.session.update=function(p){let h=wn.get(x.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,Z2.v4)();let _=wn.get(x.AUTHENTICATION_COOKIE_DOMAINS),R=h?new Date(Date.now()+(0,yD.convertToMS)(h)).toUTCString():YTe,S=r.host&&_?.find(I=>{I.startsWith(".")&&(I=I.slice(1));let H=r.host.indexOf(":");return(H!==-1?r.host.slice(0,H):r.host).endsWith(I)}),w=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${R}; HttpOnly`;S&&(w+=`; Domain=${S}`),E&&(w+="; SameSite=None; Secure"),o?o.push("Set-Cookie",w):m?.headers?.set&&m.headers.set("Set-Cookie",w)}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,Q2.put(p,{expiresAt:h?Date.now()+(0,yD.convertToMS)(h):void 0})},e.login=async function(p,h){let E=e.user=await Ue.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 Hs);for(let f=0;f<u;){let m=o[f++];d.set(m,o[f++])}}return o=null,l}a(c,"applyResponseHeaders")}function jTe({server:e,port:t,securePort:r}){e.http(s4,t||r?{port:t,securePort:r}:{port:"all"}),X2||(X2=!0,setInterval(()=>{gu=new Map},wn.get(x.AUTHENTICATION_CACHETTL)).unref(),FTe.addListener(()=>{gu=new Map}))}async function RD(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 bD(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var Z2,wn,e4,t4,yD,xTe,BTe,FTe,r4,kTe,pR,HTe,GTe,qTe,$Te,Q2,hR,n4,VTe,KTe,YTe,gu,X2,ER=se(()=>{Yn();Hr();nc();Yd();Oe();Z2=require("uuid"),wn=b(fe());G();e4=b(Q()),t4=b(Yp());zp();yD=b(ae());YT();qo();({forComponent:xTe,AuthAuditLog:BTe}=e4.default),{user:FTe}=t4.default,r4=xTe("authentication"),{debug:kTe}=r4,pR=r4.withTag("auth-event");wn.initSync();HTe=wn.get(x.HTTP_CORSACCESSLIST),GTe=wn.get(x.HTTP_CORS),qTe=wn.get(x.OPERATIONSAPI_NETWORK_CORSACCESSLIST),$Te=wn.get(x.OPERATIONSAPI_NETWORK_CORS),Q2=ze({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),hR=wn.get(x.AUTHENTICATION_ENABLESESSIONS)??!0,n4=process.env.AUTHENTICATION_AUTHORIZELOCAL??wn.get(x.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,VTe=wn.get(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,KTe=wn.get(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,YTe="Tue, 01 Oct 8307 19:33:20 GMT",gu=new Map;Ue.onInvalidatedUser(()=>{gu=new Map});a(WTe,"bypassAuth");a(s4,"authentication");a(jTe,"start");a(RD,"login");a(bD,"logout")});var d4=M((TGe,u4)=>{"use strict";var Ie=require("joi"),i4=require("fs-extra"),o4=require("path"),Jn=ft(),a4=fe(),c4=(G(),D(j)),l4=Q(),{hdbErrors:zTe}=Ee(),{HDB_ERROR_MSGS:Nn}=zTe,Na=/^[a-zA-Z0-9-_]+$/,JTe=/^[a-zA-Z0-9-_]+$/;u4.exports={getDropCustomFunctionValidator:XTe,setCustomFunctionValidator:ZTe,addComponentValidator:nye,dropCustomFunctionProjectValidator:sye,packageComponentValidator:iye,deployComponentValidator:oye,setComponentFileValidator:eye,getComponentFileValidator:rye,dropComponentFileValidator:tye,addSSHKeyValidator:aye,getSSHKeyValidator:cye,updateSSHKeyValidator:lye,deleteSSHKeyValidator:uye,setSSHKnownHostsValidator:dye};function _R(e,t,r){try{let n=a4.get(c4.CONFIG_PARAMS.COMPONENTSROOT),s=o4.join(n,t);return i4.existsSync(s)?e?t:r.message(Nn.PROJECT_EXISTS):e?r.message(Nn.NO_PROJECT):t}catch(n){return l4.error(n),r.message(Nn.VALIDATION_ERR)}}a(_R,"checkProjectExists");function bE(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(bE,"checkFilePath");function QTe(e,t,r,n){try{let s=a4.get(c4.CONFIG_PARAMS.COMPONENTSROOT),i=o4.join(s,e,t,r+".js");return i4.existsSync(i)?r:n.message(Nn.NO_FILE)}catch(s){return l4.error(s),n.message(Nn.VALIDATION_ERR)}}a(QTe,"checkFileExists");function XTe(e){let t=Ie.object({project:Ie.string().pattern(Na).custom(_R.bind(null,!0)).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().pattern(Na).custom(QTe.bind(null,e.project,e.type)).custom(bE).required().messages({"string.pattern.base":Nn.BAD_FILE_NAME})});return Jn.validateBySchema(e,t)}a(XTe,"getDropCustomFunctionValidator");function ZTe(e){let t=Ie.object({project:Ie.string().pattern(Na).custom(_R.bind(null,!0)).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().custom(bE).required(),function_content:Ie.string().required()});return Jn.validateBySchema(e,t)}a(ZTe,"setCustomFunctionValidator");function eye(e){let t=Ie.object({project:Ie.string().pattern(Na).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),file:Ie.string().custom(bE).required(),payload:Ie.string().allow("").optional(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Jn.validateBySchema(e,t)}a(eye,"setComponentFileValidator");function tye(e){let t=Ie.object({project:Ie.string().pattern(Na).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),file:Ie.string().custom(bE).optional()});return Jn.validateBySchema(e,t)}a(tye,"dropComponentFileValidator");function rye(e){let t=Ie.object({project:Ie.string().required(),file:Ie.string().custom(bE).required(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Jn.validateBySchema(e,t)}a(rye,"getComponentFileValidator");function nye(e){let t=Ie.object({project:Ie.string().pattern(Na).custom(_R.bind(null,!1)).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),template:Ie.string().optional(),install_command:Ie.string().optional(),install_timeout:Ie.number().optional()});return Jn.validateBySchema(e,t)}a(nye,"addComponentValidator");function sye(e){let t=Ie.object({project:Ie.string().pattern(Na).custom(_R.bind(null,!0)).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME})});return Jn.validateBySchema(e,t)}a(sye,"dropCustomFunctionProjectValidator");function iye(e){let t=Ie.object({project:Ie.string().pattern(Na).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),skip_node_modules:Ie.boolean(),skip_symlinks:Ie.boolean()});return Jn.validateBySchema(e,t)}a(iye,"packageComponentValidator");function oye(e){let t=Ie.object({project:Ie.string().pattern(Na).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),package:Ie.string().optional(),restart:Ie.alternatives().try(Ie.boolean(),Ie.string().valid("rolling")).optional(),install_command:Ie.string().optional(),install_timeout:Ie.number().optional()});return Jn.validateBySchema(e,t)}a(oye,"deployComponentValidator");function aye(e){let t=Ie.object({name:Ie.string().pattern(JTe).required().messages({"string.pattern.base":Nn.BAD_SSH_KEY_NAME}),key:Ie.string().required(),host:Ie.string().required(),hostname:Ie.string().required(),known_hosts:Ie.string().optional()});return Jn.validateBySchema(e,t)}a(aye,"addSSHKeyValidator");function cye(e){let t=Ie.object({name:Ie.string().required()});return Jn.validateBySchema(e,t)}a(cye,"getSSHKeyValidator");function lye(e){let t=Ie.object({name:Ie.string().required(),key:Ie.string().required()});return Jn.validateBySchema(e,t)}a(lye,"updateSSHKeyValidator");function uye(e){let t=Ie.object({name:Ie.string().required()});return Jn.validateBySchema(e,t)}a(uye,"deleteSSHKeyValidator");function dye(e){let t=Ie.object({known_hosts:Ie.string().required()});return Jn.validateBySchema(e,t)}a(dye,"setSSHKnownHostsValidator")});var h4={};ye(h4,{packageDirectory:()=>fye});function fye(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];m4.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,f4.join)("cache","webpack")):void 0,map:a(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,p4.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var f4,m4,p4,E4=se(()=>{f4=require("path"),m4=b(require("tar-fs")),p4=require("node:zlib");a(fye,"packageDirectory")});var bR={};ye(bR,{Application:()=>RR,InvalidInstallCommandError:()=>TR,InvalidInstallPropertyError:()=>SR,InvalidInstallTimeoutError:()=>yR,InvalidPackageIdentifierError:()=>gR,assertApplicationConfig:()=>R4,derivePackageIdentifier:()=>I4,extractApplication:()=>b4,installApplication:()=>A4,installApplications:()=>mye,nonInteractiveSpawn:()=>AE,prepareApplication:()=>w4});function R4(e,t){if(typeof t.package!="string")throw new gR(e,t.package);if("install"in t){if(typeof t.install!="object"||t.install===null||Array.isArray(t.install))throw new SR(e,t.install);if("command"in t.install&&typeof t.install.command!="string")throw new TR(e,t.install.command);if("timeout"in t.install&&(typeof t.install.timeout!="number"||t.install.timeout<0))throw new yR(e,t.install.timeout)}}async function b4(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=g4.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,ct.stat)(i);if(o.isDirectory()){await(0,ct.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,Oa.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,code:o,stderr:c}=await AE(e.name,"npm",["pack",e.packageIdentifier],s);if(o!==0)throw new Error(`Failed to download package ${e.packageIdentifier}: ${c}`);t=(0,Qn.join)(s,i.trim()),r=(0,Oa.createReadStream)(t)}}try{await(0,ct.access)(e.dirPath,ct.constants.F_OK),await(0,ct.rm)(e.dirPath,{recursive:!0,force:!0})}catch(s){if(s.code!=="ENOENT")throw s}await(0,ct.mkdir)(e.dirPath,{recursive:!0}),await(0,S4.pipeline)(r,(0,y4.default)(),(0,T4.extract)(e.dirPath));let n=await(0,ct.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,ct.mkdtemp)(e.dirPath);await(0,ct.cp)(s,i,{recursive:!0}),await(0,ct.rm)(s,{recursive:!0,force:!0}),await(0,ct.cp)(i,e.dirPath,{recursive:!0}),await(0,ct.rm)(i,{recursive:!0,force:!0})}t&&await(0,ct.rm)(t,{force:!0})}async function A4(e){let t;try{t=JSON.parse(await(0,ct.readFile)((0,Qn.join)(e.dirPath,"package.json"),"utf8"))}catch(i){if(i.code!=="ENOENT")throw i;e.logger.debug(`Application ${e.name} has no package.json; skipping install`);return}try{await(0,ct.access)((0,Qn.join)(e.dirPath,"node_modules"),ct.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 AE(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{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 AE(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 AE(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 I4(e){return e.includes(":")?e:e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?`npm:${e}`:(0,Qn.extname)(e)||(0,Oa.existsSync)(e)?`file:${e}`:`github:${e}`}function w4(e){return b4(e).then(()=>A4(e))}async function mye(){let e=(0,Su.getConfigObj)(),t=(0,Su.getConfigValue)(x.COMPONENTSROOT);await(0,ct.mkdir)(t,{recursive:!0});let r=(0,Qn.join)((0,Su.getConfigValue)(x.ROOTPATH),"harper-application-lock.json"),n={application:{}};try{n=JSON.parse(await(0,ct.readFile)(r,"utf8"))}catch(o){if(o.code!=="ENOENT")throw o}let s=[];for(let[o,c]of Object.entries(e)){if(typeof c!="object"||c===null||!("package"in c))continue;R4(o,c);let l=new RR({name:o,packageIdentifier:c.package,install:c.install});if((0,Oa.existsSync)(l.dirPath)&&n.applications[o]&&JSON.stringify(n.applications[o])===JSON.stringify(c)){Ca.default.info(`Application ${o} is already installed with matching configuration; skipping installation`);continue}s.push(w4(l)),n.applications[o]=c}let i=await Promise.allSettled(s);Ca.default.debug(i),Ca.default.info("All root applications loaded"),await(0,ct.writeFile)(r,JSON.stringify(n,null,2),"utf8")}function pye(){let e=(0,Su.getConfigValue)(x.ROOTPATH),t=(0,Qn.join)(e,"ssh");if((0,Oa.existsSync)(t)){for(let r of(0,Oa.readdirSync)(t))if(r.includes(".key"))return`ssh -F ${(0,Qn.join)(t,"config")} -o UserKnownHostsFile=${(0,Qn.join)(t,"known_hosts")}`}}function AE(e,t,r,n,s=300*1e3){return new Promise((i,o)=>{Ca.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Executing \`${t} ${r.join(" ")}\` in ${n}`);let c={...process.env},l=pye();l&&(c.GIT_SSH_COMMAND=l);let u=(0,_4.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(),Ca.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),Ca.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=Ca.default.loggerWithTag(`${e}:spawn:${t}:stderr`);for(let i of r.split(`
122
- `))s[n](i)}var Su,Ca,Qn,ct,_4,Oa,g4,S4,T4,y4,gR,SR,TR,yR,RR,AR=se(()=>{Su=b(_t());G();Ca=b(Q()),Qn=require("node:path"),ct=require("node:fs/promises"),_4=require("node:child_process"),Oa=require("node:fs"),g4=require("node:stream"),S4=require("node:stream/promises"),T4=require("tar-fs"),y4=b(require("gunzip-maybe")),gR=class extends TypeError{static{a(this,"InvalidPackageIdentifierError")}constructor(t,r){super(`Invalid 'package' property for application ${t}: expected string, got ${typeof r}`)}},SR=class extends TypeError{static{a(this,"InvalidInstallPropertyError")}constructor(t,r){super(`Invalid 'install' property for application ${t}: expected object, got ${typeof r}`)}},TR=class extends TypeError{static{a(this,"InvalidInstallCommandError")}constructor(t,r){super(`Invalid 'install.command' property for application ${t}: expected string, got ${typeof r}`)}},yR=class extends TypeError{static{a(this,"InvalidInstallTimeoutError")}constructor(t,r){super(`Invalid 'install.timeout' property for application ${t}: expected non-negative number, got ${typeof r}`)}};a(R4,"assertApplicationConfig");a(b4,"extractApplication");a(A4,"installApplication");RR=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&&I4(n),this.install=s,this.dirPath=(0,Qn.join)((0,Su.getConfigValue)(x.COMPONENTSROOT),t),this.logger=Ca.default.loggerWithTag(t)}};a(I4,"derivePackageIdentifier");a(w4,"prepareApplication");a(mye,"installApplications");a(pye,"getGitSSHCommand");a(AE,"nonInteractiveSpawn");a(zf,"printStderr")});var wD=M(er=>{"use strict";var ke=require("node:path"),{isMainThread:hye}=require("node:worker_threads"),Le=require("fs-extra"),AD=require("fast-glob"),ID=require("normalize-path"),Cn=d4(),Kt=Q(),Mt=(G(),D(j)),Rr=fe(),IR=_t(),Eye=ae(),{PACKAGE_ROOT:_ye}=yt(),{handleHDBError:Yt,hdbErrors:gye}=Ee(),IGe=fe(),{HDB_ERROR_MSGS:Tu,HTTP_STATUS_CODES:Wt}=gye,N4=st(),{replicateOperation:Li}=(gs(),D(ia)),{packageDirectory:Sye}=(E4(),D(h4)),wGe=ke.join(_ye,"application-template"),Tye=Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),wo=ke.join(Tye,"ssh"),Pa=ke.join(wo,"known_hosts"),{Resources:yye}=(nc(),D(MI)),{Application:C4,prepareApplication:O4}=(AR(),D(bR));function Rye(){Kt.trace("getting custom api status");let e={};try{e={port:Rr.get(Mt.CONFIG_PARAMS.HTTP_PORT),directory:Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Yt(new Error,Tu.FUNCTION_STATUS,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,t)}return e}a(Rye,"customFunctionsStatus");function bye(){Kt.trace("getting custom api endpoints");let e={},t=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT);try{AD.sync(ID(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:AD.sync(ID(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:AD.sync(ID(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Yt(new Error,Tu.GET_FUNCTIONS,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,r)}return e}a(bye,"getCustomFunctions");function Aye(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=Cn.getDropCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("getting custom api endpoint file content");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=ke.join(r,n,s,i+".js");try{return Le.readFileSync(o,{encoding:"utf8"})}catch(c){throw Yt(new Error,Tu.GET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,c)}}a(Aye,"getCustomFunction");async function Iye(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=Cn.setCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("setting custom function file content");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{Le.outputFileSync(ke.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 Yt(new Error,Tu.SET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,c)}}a(Iye,"setCustomFunction");async function wye(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=Cn.getDropCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("dropping custom function file");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Le.unlinkSync(ke.join(r,n,s,i+".js"));let o=await Li(e);return o.message=`Successfully deleted custom function: ${i}.js`,o}catch(o){throw Yt(new Error,Tu.DROP_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,o)}}a(wye,"dropCustomFunction");async function Nye(e){e.project&&(e.project=ke.parse(e.project).name);let t=Cn.addComponentValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("adding component");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,install_command:s,install_timeout:i}=e,o=e.template||"https://github.com/harperdb/application-template";try{let c=ke.join(r,n);Le.mkdirSync(c,{recursive:!0});let l=new C4({name:n,packageIdentifier:o,install:{command:s,timeout:i}});await O4(l);let u=await Li(e);return u.message=`Successfully added project: ${n}`,u}catch(c){throw Yt(new Error,Tu.ADD_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,c)}}a(Nye,"addComponent");async function Cye(e){e.project&&(e.project=ke.parse(e.project).name);let t=Cn.dropCustomFunctionProjectValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("dropping custom function project");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Rr.get(Mt.CONFIG_PARAMS.APPS);if(!Eye.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 IR.updateConfigValue(Mt.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=ke.join(r,n);Le.rmSync(i,{recursive:!0});let o=await Li(e);return o.message=`Successfully deleted project: ${n}`,o}catch(i){throw Yt(new Error,Tu.DROP_FUNCTION_PROJECT,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,i)}}a(Cye,"dropCustomFunctionProject");async function Oye(e){e.project&&(e.project=ke.parse(e.project).name);let t=Cn.packageComponentValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Kt.trace("packaging component",n);let s;try{s=await Le.realpath(ke.join(r,n))}catch(o){if(o.code!==Mt.NODE_ERROR_CODES.ENOENT)throw o;try{s=await Le.realpath(ke.join(Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===Mt.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await Sye(s,e)).toString("base64");return{project:n,payload:i}}a(Oye,"packageComponent");async function Pye(e){e.project?e.project=ke.parse(e.project).name:e.package&&(e.project=Lye(e.package));let t=Cn.deployComponentValidator(e);if(t)throw Yt(t,t.message,Wt.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 IR.addConfig(e.project,l)}let r=new C4({name:e.project,payload:e.payload,packageIdentifier:e.package,install:{command:e.install_command,timeout:e.install_timeout}});if(await O4(r),hye)return;let n=new yye;n.isWorker=!0;let s=(hE(),D(oR)),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)N4.restartWorkers("http"),c.message=`Successfully deployed: ${r.name}, restarting HarperDB`;else if(o){let u=await(NR(),D(wR)).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(Pye,"deployComponent");function Lye(e){if(e.startsWith("git+ssh://"))return ke.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return ke.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Le.readFileSync(ke.join(e,"package.json"),"utf8"));return ke.basename(t)}catch{}return ke.basename(e)}a(Lye,"getProjectNameFromPackage");async function Dye(){let e=IR.getConfiguration(),t=a(async(i,o)=>{try{let c=await Le.readdir(i,{withFileTypes:!0});for(let l of c){let u=l.name;if(u.startsWith(".")||u==="node_modules")continue;let d=ke.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 Le.stat(d),m={name:ke.basename(u),mtime:f.mtime,size:f.size};o.entries.push(m)}}return o}catch(c){return Kt.warn("Error loading package",c),{error:c.toString(),entries:[]}}},"walkDir"),r=await t(Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{name:Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT).split(ke.sep).slice(-1).pop(),entries:[]});for(let i of r.entries){let o=e[i.name]?.package;o&&(i.package=o)}let{internal:n}=(Vp(),D($N)),s;try{s=await n.ComponentStatusRegistry.getAggregatedFromAllThreads(n.componentStatusRegistry)}catch(i){Kt.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){Kt.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(Dye,"getComponents");async function vye(e){let t=Cn.getComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let s=await Le.stat(ke.join(r,e.project,e.file));return{message:await Le.readFile(ke.join(r,e.project,e.file),n),size:s.size,birthtime:s.birthtime,mtime:s.mtime}}catch(s){throw s.code===Mt.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${ke.join(e.project,e.file)}'`):s}}a(vye,"getComponentFile");async function Mye(e){let t=Cn.setComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=ke.join(Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Le.ensureFile(n),await Le.outputFile(n,e.payload,r)):await Le.ensureDir(n);let s=await Li(e);return s.message="Successfully set component: "+e.file,s}a(Mye,"setComponentFile");async function Uye(e){let t=Cn.dropComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?ke.join(r,n):r,i=ke.join(Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),s),o=ke.join(Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Le.pathExists(o)&&await Le.unlink(o),await Le.pathExists(i)&&await Le.remove(i);let c=ke.join(Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Le.pathExists(c)){let u=JSON.parse(await Le.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Le.writeFile(c,JSON.stringify(u,null,2),"utf8")}IR.deleteConfigFromFile([r]);let l=await Li(e);return e.restart===!0?(N4.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}a(Uye,"dropComponent");async function xye(e){let t=Cn.addSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:o}=e;Kt.trace("adding ssh key",r);let c=ke.join(wo,r+".key"),l=ke.join(wo,"config");if(await Le.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Le.outputFile(c,n),await Le.chmod(c,"0600");let u=`#${r}
120
+ `;console.log(n),Ae.get(xe.LOGGING_STDSTREAMS)&&dr.logsAtLevel("info")&&dr.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(dTe,"startupLog")});var jf=M((iGe,k2)=>{"use strict";var fTe=require("minimist"),{isMainThread:hD,parentPort:SE,threadId:rGe}=require("worker_threads"),Vt=(G(),D(j)),Pi=Q(),mTe=ae(),mR=Iy(),fD=lr(),nGe=Dt(),pTe=_t(),Eu=Pf(),M2=qh(),{compactOnStart:hTe}=(oL(),D(iL)),sGe=rl(),{restartWorkers:pD,onMessageByType:ETe,shutdownWorkersNow:_Te}=st(),{handleHDBError:gTe,hdbErrors:STe}=Ee(),{HTTP_STATUS_CODES:TTe}=STe,TE=fe(),{sendOperationToNode:U2,getThisNodeName:yTe,monitorNodeCAs:RTe}=(gs(),D(oa)),bTe=require("node:path"),{unlinkSync:ATe}=require("node:fs");TE.initSync();var mD=`Restarting HarperDB. This may take up to ${Vt.RESTART_TIMEOUT_MS/1e3} seconds.`,x2="Clustering is not enabled so cannot be restarted",ITe="Invalid service",Na;k2.exports={restart:F2,restartService:ED};hD&&ETe(Vt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await ED({service:e.workerType}):F2({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function F2(e){Na=Object.keys(e).length===0;let t=fTe(process.argv);if(t.service){await ED(t);return}if(Na){let r=Eu.getHdbPid();return console.error(r?"Restarting Harper...":"Starting Harper..."),iR().launch(!0),mD}return hD?(Pi.notify(mD),TE.get(Vt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await hTe(),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 _Te(),await Eu.cleanupChildrenProcesses(!1),await ATe(bTe.join(TE.get(Vt.CONFIG_PARAMS.ROOTPATH),Vt.HDB_PID_FILE),`${process.pid}`),Pi.debug("Starting new process..."),iR().launch(!0)},50)):SE.postMessage({type:Vt.ITC_EVENT_TYPES.RESTART}),mD}a(F2,"restart");async function ED(e){let{service:t}=e;if(Vt.HDB_PROCESS_SERVICES[t]===void 0)throw gTe(new Error,ITe,TTe.BAD_REQUEST,void 0,void 0,!0);if(Eu.expectedRestartOfChildren(),!hD){e.replicated&&RTe(),SE.postMessage({type:Vt.ITC_EVENT_TYPES.RESTART,workerType:t}),SE.ref(),await new Promise(s=>{SE.on("message",i=>{i.type==="restart-complete"&&(s(),SE.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===yTe())continue;let i;try{({job_id:i}=await U2(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 U2(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(!TE.get(Vt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=x2;break}Na&&console.log("Restarting clustering"),Pi.notify("Restarting clustering"),await wTe();break;case Vt.HDB_PROCESS_SERVICES.clustering_config:case Vt.HDB_PROCESS_SERVICES["clustering config"]:if(!TE.get(Vt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=x2;break}Na&&console.log("Restarting clusteringConfig"),Pi.notify("Restarting clustering_config"),await Eu.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:Na&&console.log("Restarting httpWorkers"),Pi.notify("Restarting http_workers"),Na?await Eu.restart(Vt.PROCESS_DESCRIPTORS.HDB):await pD("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Pi.error(r),Na&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(ED,"restartService");async function wTe(){if(!pTe.getConfigFromFile(Vt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await M2.getHDBProcessInfo()).clustering.length===0)Pi.trace("Clustering not running, restart will start clustering services"),await mR.generateNatsConfig(!0),await Eu.startClusteringProcesses(),await Eu.startClusteringThreads(),await B2(),Na&&await fD.closeConnection();else{await mR.generateNatsConfig(!0),(await M2.getHDBProcessInfo()).clustering.forEach(s=>{Pi.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await mTe.asyncSetTimeout(3e3),await B2(),await fD.updateLocalStreams(),Na&&await fD.closeConnection(),Pi.trace("Restart clustering restarting ingest and reply service threads");let r=pD(Vt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),n=pD(Vt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await r,await n}}a(wTe,"restartClustering");async function B2(){await mR.removeNatsConfig(Vt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await mR.removeNatsConfig(Vt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(B2,"removeNatsConfig")});var J2=M((cGe,z2)=>{"use strict";var aGe=require("lodash"),zn=(G(),D(j)),{handleHDBError:H2,hdbErrors:NTe}=Ee(),{HDB_ERROR_MSGS:CTe,HTTP_STATUS_CODES:OTe}=NTe,_D=Q();z2.exports={getRolePermissions:LTe};var _u=Object.create(null),PTe=a(e=>({key:e,perms:{}}),"permsTemplateObj"),V2=a((e=!1)=>({describe:e,tables:{}}),"schemaPermsTemplate"),K2=a((e=!1,t=!1,r=!1,n=!1)=>({[zn.PERMS_CRUD_ENUM.READ]:e,[zn.PERMS_CRUD_ENUM.INSERT]:t,[zn.PERMS_CRUD_ENUM.UPDATE]:r,[zn.PERMS_CRUD_ENUM.DELETE]:n}),"permissionsTemplate"),gD=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...K2(t,r,n,s)}),"tablePermsTemplate"),G2=a((e,t=K2())=>({attribute_name:e,describe:j2(t),[yE]:t[yE],[SD]:t[SD],[TD]:t[TD]}),"attrPermsTemplate"),q2=a((e,t=!1)=>({attribute_name:e,describe:t,[yE]:t}),"timestampAttrPermsTemplate"),{READ:yE,INSERT:SD,UPDATE:TD}=zn.PERMS_CRUD_ENUM,Y2=Object.values(zn.PERMS_CRUD_ENUM),W2=[yE,SD,TD];function LTe(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[zn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(_u[t]&&_u[t].key===n)return _u[t].perms;let s=DTe(e,r);return _u[t]?_u[t].key=n:_u[t]=PTe(n),_u[t].perms=s,s}catch(r){if(!e[zn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[zn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<zn.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 _D.error(n),_D.debug(r),H2(new Error,CTe.OUTDATED_PERMS_TRANSLATION_ERROR,OTe.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
121
+ ${r.stack}`;throw _D.error(n),H2(new Error)}}}a(LTe,"getRolePermissions");function DTe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[zn.SYSTEM_SCHEMA_NAME]=n[zn.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]=vTe(t[i]);return}r[i]=V2(),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=MTe(c,l);r[i].describe||Y2.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=gD()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=gD()})}),r}a(DTe,"translateRolePermissions");function vTe(e){let t=V2(!0);return Object.keys(e).forEach(r=>{t.tables[r]=gD(!0,!0,!0,!0,!0)}),t}a(vTe,"createStructureUserPermissions");function MTe(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 zn.TIME_STAMP_NAMES.includes(f)&&(m=q2(f,d[yE])),u[f]=m,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=G2(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=j2(d),s.attribute_permissions.push(d),c||UTe(d,l)}else if(u!==o){let d;zn.TIME_STAMP_NAMES.includes(u)?d=q2(u):d=G2(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=$2(s),s}else return e.describe=$2(e),e}a(MTe,"getTableAttrPerms");function $2(e){return Y2.filter(t=>e[t]).length>0}a($2,"getSchemaTableDescribePerm");function j2(e){return W2.filter(t=>e[t]).length>0}a(j2,"getAttributeDescribePerm");function UTe(e,t){W2.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(UTe,"checkForHashPerms")});var RE={};ye(RE,{authentication:()=>s4,bypassAuth:()=>WTe,login:()=>RD,logout:()=>bD,start:()=>jTe});function WTe(){n4=!0}async function s4(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let p=e.isOperationsServer?$Te?qTe:[]:GTe?HTe:[];if(p.includes(i)||p.includes("*")){if(e.method==="OPTIONS"){let h=wn.get(x.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",E=new Hs([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",h],["Access-Control-Allow-Origin",i]]);return hR&&E.set("Access-Control-Allow-Credentials","true"),{status:200,headers:E}}o.push("Access-Control-Allow-Origin",i),hR&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(hR){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 _=E.indexOf(";");l=E.slice(p.length,_===-1?E.length:_),u=await Q2.get(l);break}e.session=u||(u={})}let d=a((p,h,E)=>{let _=new BTe(p,h,Ka.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);_.auth_strategy=E,l&&(_.session_id=l),r.referer&&(_.referer=r.referer),r.origin&&(_.origin=r.origin),h===oi.SUCCESS?pR.info?.(_):pR.error?.(_)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&pR.error?.("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let p=await mf(e.peerCertificate,e.mtlsConfig);if(!p.valid)return pR.error?.("Certificate verification failed:",p.status,"for",e.peerCertificate.subject.CN),c({status:401,body:Go({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 Ue.getUser(h,null,e),d(h,oi.SUCCESS,"mTLS")):kTe("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=gu.get(n),!f){let p=n.indexOf(" "),h=n.slice(0,p),E=n.slice(p+1),_,R;try{switch(h){case"Basic":let S=atob(E),y=S.indexOf(":");_=S.slice(0,y),R=S.slice(y+1),f=_||R?await Ue.getUser(_,R,e):null;break;case"Bearer":try{f=await PC(E)}catch(w){if(w.message==="invalid token")try{return await XS(E),c({status:-1})}catch{throw w}}break}}catch(S){return KTe&&(gu.get(E)||(gu.set(E,E),d(_,oi.FAILURE,h))),c({status:401,body:Go({error:S.message},e)})}gu.set(n,f),VTe&&d(f.username,oi.SUCCESS,h)}e.user=f}else u?.user?e.user=await Ue.getUser(u.user,null,e):(n4&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await Gp());hR&&(e.session.update=function(p){let h=wn.get(x.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,Z2.v4)();let _=wn.get(x.AUTHENTICATION_COOKIE_DOMAINS),R=h?new Date(Date.now()+(0,yD.convertToMS)(h)).toUTCString():YTe,S=r.host&&_?.find(I=>{I.startsWith(".")&&(I=I.slice(1));let H=r.host.indexOf(":");return(H!==-1?r.host.slice(0,H):r.host).endsWith(I)}),w=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${R}; HttpOnly`;S&&(w+=`; Domain=${S}`),E&&(w+="; SameSite=None; Secure"),o?o.push("Set-Cookie",w):m?.headers?.set&&m.headers.set("Set-Cookie",w)}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,Q2.put(p,{expiresAt:h?Date.now()+(0,yD.convertToMS)(h):void 0})},e.login=async function(p,h){let E=e.user=await Ue.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 Hs);for(let f=0;f<u;){let m=o[f++];d.set(m,o[f++])}}return o=null,l}a(c,"applyResponseHeaders")}function jTe({server:e,port:t,securePort:r}){e.http(s4,t||r?{port:t,securePort:r}:{port:"all"}),X2||(X2=!0,setInterval(()=>{gu=new Map},wn.get(x.AUTHENTICATION_CACHETTL)).unref(),FTe.addListener(()=>{gu=new Map}))}async function RD(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 bD(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var Z2,wn,e4,t4,yD,xTe,BTe,FTe,r4,kTe,pR,HTe,GTe,qTe,$Te,Q2,hR,n4,VTe,KTe,YTe,gu,X2,ER=se(()=>{Yn();Hr();nc();Yd();Oe();Z2=require("uuid"),wn=b(fe());G();e4=b(Q()),t4=b(Yp());zp();yD=b(ae());YT();$o();({forComponent:xTe,AuthAuditLog:BTe}=e4.default),{user:FTe}=t4.default,r4=xTe("authentication"),{debug:kTe}=r4,pR=r4.withTag("auth-event");wn.initSync();HTe=wn.get(x.HTTP_CORSACCESSLIST),GTe=wn.get(x.HTTP_CORS),qTe=wn.get(x.OPERATIONSAPI_NETWORK_CORSACCESSLIST),$Te=wn.get(x.OPERATIONSAPI_NETWORK_CORS),Q2=ze({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),hR=wn.get(x.AUTHENTICATION_ENABLESESSIONS)??!0,n4=process.env.AUTHENTICATION_AUTHORIZELOCAL??wn.get(x.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,VTe=wn.get(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,KTe=wn.get(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,YTe="Tue, 01 Oct 8307 19:33:20 GMT",gu=new Map;Ue.onInvalidatedUser(()=>{gu=new Map});a(WTe,"bypassAuth");a(s4,"authentication");a(jTe,"start");a(RD,"login");a(bD,"logout")});var d4=M((TGe,u4)=>{"use strict";var Ie=require("joi"),i4=require("fs-extra"),o4=require("path"),Jn=ft(),a4=fe(),c4=(G(),D(j)),l4=Q(),{hdbErrors:zTe}=Ee(),{HDB_ERROR_MSGS:Nn}=zTe,Ca=/^[a-zA-Z0-9-_]+$/,JTe=/^[a-zA-Z0-9-_]+$/;u4.exports={getDropCustomFunctionValidator:XTe,setCustomFunctionValidator:ZTe,addComponentValidator:nye,dropCustomFunctionProjectValidator:sye,packageComponentValidator:iye,deployComponentValidator:oye,setComponentFileValidator:eye,getComponentFileValidator:rye,dropComponentFileValidator:tye,addSSHKeyValidator:aye,getSSHKeyValidator:cye,updateSSHKeyValidator:lye,deleteSSHKeyValidator:uye,setSSHKnownHostsValidator:dye};function _R(e,t,r){try{let n=a4.get(c4.CONFIG_PARAMS.COMPONENTSROOT),s=o4.join(n,t);return i4.existsSync(s)?e?t:r.message(Nn.PROJECT_EXISTS):e?r.message(Nn.NO_PROJECT):t}catch(n){return l4.error(n),r.message(Nn.VALIDATION_ERR)}}a(_R,"checkProjectExists");function bE(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(bE,"checkFilePath");function QTe(e,t,r,n){try{let s=a4.get(c4.CONFIG_PARAMS.COMPONENTSROOT),i=o4.join(s,e,t,r+".js");return i4.existsSync(i)?r:n.message(Nn.NO_FILE)}catch(s){return l4.error(s),n.message(Nn.VALIDATION_ERR)}}a(QTe,"checkFileExists");function XTe(e){let t=Ie.object({project:Ie.string().pattern(Ca).custom(_R.bind(null,!0)).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().pattern(Ca).custom(QTe.bind(null,e.project,e.type)).custom(bE).required().messages({"string.pattern.base":Nn.BAD_FILE_NAME})});return Jn.validateBySchema(e,t)}a(XTe,"getDropCustomFunctionValidator");function ZTe(e){let t=Ie.object({project:Ie.string().pattern(Ca).custom(_R.bind(null,!0)).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().custom(bE).required(),function_content:Ie.string().required()});return Jn.validateBySchema(e,t)}a(ZTe,"setCustomFunctionValidator");function eye(e){let t=Ie.object({project:Ie.string().pattern(Ca).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),file:Ie.string().custom(bE).required(),payload:Ie.string().allow("").optional(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Jn.validateBySchema(e,t)}a(eye,"setComponentFileValidator");function tye(e){let t=Ie.object({project:Ie.string().pattern(Ca).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),file:Ie.string().custom(bE).optional()});return Jn.validateBySchema(e,t)}a(tye,"dropComponentFileValidator");function rye(e){let t=Ie.object({project:Ie.string().required(),file:Ie.string().custom(bE).required(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Jn.validateBySchema(e,t)}a(rye,"getComponentFileValidator");function nye(e){let t=Ie.object({project:Ie.string().pattern(Ca).custom(_R.bind(null,!1)).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),template:Ie.string().optional(),install_command:Ie.string().optional(),install_timeout:Ie.number().optional()});return Jn.validateBySchema(e,t)}a(nye,"addComponentValidator");function sye(e){let t=Ie.object({project:Ie.string().pattern(Ca).custom(_R.bind(null,!0)).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME})});return Jn.validateBySchema(e,t)}a(sye,"dropCustomFunctionProjectValidator");function iye(e){let t=Ie.object({project:Ie.string().pattern(Ca).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),skip_node_modules:Ie.boolean(),skip_symlinks:Ie.boolean()});return Jn.validateBySchema(e,t)}a(iye,"packageComponentValidator");function oye(e){let t=Ie.object({project:Ie.string().pattern(Ca).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),package:Ie.string().optional(),restart:Ie.alternatives().try(Ie.boolean(),Ie.string().valid("rolling")).optional(),install_command:Ie.string().optional(),install_timeout:Ie.number().optional()});return Jn.validateBySchema(e,t)}a(oye,"deployComponentValidator");function aye(e){let t=Ie.object({name:Ie.string().pattern(JTe).required().messages({"string.pattern.base":Nn.BAD_SSH_KEY_NAME}),key:Ie.string().required(),host:Ie.string().required(),hostname:Ie.string().required(),known_hosts:Ie.string().optional()});return Jn.validateBySchema(e,t)}a(aye,"addSSHKeyValidator");function cye(e){let t=Ie.object({name:Ie.string().required()});return Jn.validateBySchema(e,t)}a(cye,"getSSHKeyValidator");function lye(e){let t=Ie.object({name:Ie.string().required(),key:Ie.string().required()});return Jn.validateBySchema(e,t)}a(lye,"updateSSHKeyValidator");function uye(e){let t=Ie.object({name:Ie.string().required()});return Jn.validateBySchema(e,t)}a(uye,"deleteSSHKeyValidator");function dye(e){let t=Ie.object({known_hosts:Ie.string().required()});return Jn.validateBySchema(e,t)}a(dye,"setSSHKnownHostsValidator")});var h4={};ye(h4,{packageDirectory:()=>fye});function fye(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];m4.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,f4.join)("cache","webpack")):void 0,map:a(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,p4.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var f4,m4,p4,E4=se(()=>{f4=require("path"),m4=b(require("tar-fs")),p4=require("node:zlib");a(fye,"packageDirectory")});var bR={};ye(bR,{Application:()=>RR,InvalidInstallCommandError:()=>TR,InvalidInstallPropertyError:()=>SR,InvalidInstallTimeoutError:()=>yR,InvalidPackageIdentifierError:()=>gR,assertApplicationConfig:()=>R4,derivePackageIdentifier:()=>I4,extractApplication:()=>b4,installApplication:()=>A4,installApplications:()=>mye,nonInteractiveSpawn:()=>AE,prepareApplication:()=>w4});function R4(e,t){if(typeof t.package!="string")throw new gR(e,t.package);if("install"in t){if(typeof t.install!="object"||t.install===null||Array.isArray(t.install))throw new SR(e,t.install);if("command"in t.install&&typeof t.install.command!="string")throw new TR(e,t.install.command);if("timeout"in t.install&&(typeof t.install.timeout!="number"||t.install.timeout<0))throw new yR(e,t.install.timeout)}}async function b4(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=g4.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,ct.stat)(i);if(o.isDirectory()){await(0,ct.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,Oa.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,code:o,stderr:c}=await AE(e.name,"npm",["pack",e.packageIdentifier],s);if(o!==0)throw new Error(`Failed to download package ${e.packageIdentifier}: ${c}`);t=(0,Qn.join)(s,i.trim()),r=(0,Oa.createReadStream)(t)}}try{await(0,ct.access)(e.dirPath,ct.constants.F_OK),await(0,ct.rm)(e.dirPath,{recursive:!0,force:!0})}catch(s){if(s.code!=="ENOENT")throw s}await(0,ct.mkdir)(e.dirPath,{recursive:!0}),await(0,S4.pipeline)(r,(0,y4.default)(),(0,T4.extract)(e.dirPath));let n=await(0,ct.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,ct.mkdtemp)(e.dirPath);await(0,ct.cp)(s,i,{recursive:!0}),await(0,ct.rm)(s,{recursive:!0,force:!0}),await(0,ct.cp)(i,e.dirPath,{recursive:!0}),await(0,ct.rm)(i,{recursive:!0,force:!0})}t&&await(0,ct.rm)(t,{force:!0})}async function A4(e){let t;try{t=JSON.parse(await(0,ct.readFile)((0,Qn.join)(e.dirPath,"package.json"),"utf8"))}catch(i){if(i.code!=="ENOENT")throw i;e.logger.debug(`Application ${e.name} has no package.json; skipping install`);return}try{await(0,ct.access)((0,Qn.join)(e.dirPath,"node_modules"),ct.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 AE(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{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 AE(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 AE(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 I4(e){return e.includes(":")?e:e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?`npm:${e}`:(0,Qn.extname)(e)||(0,Oa.existsSync)(e)?`file:${e}`:`github:${e}`}function w4(e){return b4(e).then(()=>A4(e))}async function mye(){let e=(0,Su.getConfigObj)(),t=(0,Su.getConfigValue)(x.COMPONENTSROOT);await(0,ct.mkdir)(t,{recursive:!0});let r=(0,Qn.join)((0,Su.getConfigValue)(x.ROOTPATH),"harper-application-lock.json"),n={applications:{}};try{n=JSON.parse(await(0,ct.readFile)(r,"utf8"))}catch(o){if(o.code!=="ENOENT")throw o}let s=[];for(let[o,c]of Object.entries(e))if(!(typeof c!="object"||c===null||!("package"in c)))try{R4(o,c);let l=new RR({name:o,packageIdentifier:c.package,install:c.install});if((0,Oa.existsSync)(l.dirPath)&&n.applications[o]&&JSON.stringify(n.applications[o])===JSON.stringify(c)){wo.default.info(`Application ${o} is already installed with matching configuration; skipping installation`);continue}s.push(w4(l)),n.applications[o]=c}catch(l){wo.default.error(`Skipping installation of application ${o} due to invalid configuration: ${l.message}`)}let i=await Promise.allSettled(s);wo.default.debug(i),wo.default.info("All root applications loaded"),await(0,ct.writeFile)(r,JSON.stringify(n,null,2),"utf8")}function pye(){let e=(0,Su.getConfigValue)(x.ROOTPATH),t=(0,Qn.join)(e,"ssh");if((0,Oa.existsSync)(t)){for(let r of(0,Oa.readdirSync)(t))if(r.includes(".key"))return`ssh -F ${(0,Qn.join)(t,"config")} -o UserKnownHostsFile=${(0,Qn.join)(t,"known_hosts")}`}}function AE(e,t,r,n,s=300*1e3){return new Promise((i,o)=>{wo.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Executing \`${t} ${r.join(" ")}\` in ${n}`);let c={...process.env},l=pye();l&&(c.GIT_SSH_COMMAND=l);let u=(0,_4.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(),wo.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),wo.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=wo.default.loggerWithTag(`${e}:spawn:${t}:stderr`);for(let i of r.split(`
122
+ `))s[n](i)}var Su,wo,Qn,ct,_4,Oa,g4,S4,T4,y4,gR,SR,TR,yR,RR,AR=se(()=>{Su=b(_t());G();wo=b(Q()),Qn=require("node:path"),ct=require("node:fs/promises"),_4=require("node:child_process"),Oa=require("node:fs"),g4=require("node:stream"),S4=require("node:stream/promises"),T4=require("tar-fs"),y4=b(require("gunzip-maybe")),gR=class extends TypeError{static{a(this,"InvalidPackageIdentifierError")}constructor(t,r){super(`Invalid 'package' property for application ${t}: expected string, got ${typeof r}`)}},SR=class extends TypeError{static{a(this,"InvalidInstallPropertyError")}constructor(t,r){super(`Invalid 'install' property for application ${t}: expected object, got ${typeof r}`)}},TR=class extends TypeError{static{a(this,"InvalidInstallCommandError")}constructor(t,r){super(`Invalid 'install.command' property for application ${t}: expected string, got ${typeof r}`)}},yR=class extends TypeError{static{a(this,"InvalidInstallTimeoutError")}constructor(t,r){super(`Invalid 'install.timeout' property for application ${t}: expected non-negative number, got ${typeof r}`)}};a(R4,"assertApplicationConfig");a(b4,"extractApplication");a(A4,"installApplication");RR=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&&I4(n),this.install=s,this.dirPath=(0,Qn.join)((0,Su.getConfigValue)(x.COMPONENTSROOT),t),this.logger=wo.default.loggerWithTag(t)}};a(I4,"derivePackageIdentifier");a(w4,"prepareApplication");a(mye,"installApplications");a(pye,"getGitSSHCommand");a(AE,"nonInteractiveSpawn");a(zf,"printStderr")});var wD=M(er=>{"use strict";var ke=require("node:path"),{isMainThread:hye}=require("node:worker_threads"),Le=require("fs-extra"),AD=require("fast-glob"),ID=require("normalize-path"),Cn=d4(),Kt=Q(),Mt=(G(),D(j)),Rr=fe(),IR=_t(),Eye=ae(),{PACKAGE_ROOT:_ye}=yt(),{handleHDBError:Yt,hdbErrors:gye}=Ee(),IGe=fe(),{HDB_ERROR_MSGS:Tu,HTTP_STATUS_CODES:Wt}=gye,N4=st(),{replicateOperation:Li}=(gs(),D(oa)),{packageDirectory:Sye}=(E4(),D(h4)),wGe=ke.join(_ye,"application-template"),Tye=Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),No=ke.join(Tye,"ssh"),Pa=ke.join(No,"known_hosts"),{Resources:yye}=(nc(),D(MI)),{Application:C4,prepareApplication:O4}=(AR(),D(bR));function Rye(){Kt.trace("getting custom api status");let e={};try{e={port:Rr.get(Mt.CONFIG_PARAMS.HTTP_PORT),directory:Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Yt(new Error,Tu.FUNCTION_STATUS,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,t)}return e}a(Rye,"customFunctionsStatus");function bye(){Kt.trace("getting custom api endpoints");let e={},t=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT);try{AD.sync(ID(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:AD.sync(ID(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:AD.sync(ID(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Yt(new Error,Tu.GET_FUNCTIONS,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,r)}return e}a(bye,"getCustomFunctions");function Aye(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=Cn.getDropCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("getting custom api endpoint file content");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=ke.join(r,n,s,i+".js");try{return Le.readFileSync(o,{encoding:"utf8"})}catch(c){throw Yt(new Error,Tu.GET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,c)}}a(Aye,"getCustomFunction");async function Iye(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=Cn.setCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("setting custom function file content");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{Le.outputFileSync(ke.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 Yt(new Error,Tu.SET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,c)}}a(Iye,"setCustomFunction");async function wye(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=Cn.getDropCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("dropping custom function file");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Le.unlinkSync(ke.join(r,n,s,i+".js"));let o=await Li(e);return o.message=`Successfully deleted custom function: ${i}.js`,o}catch(o){throw Yt(new Error,Tu.DROP_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,o)}}a(wye,"dropCustomFunction");async function Nye(e){e.project&&(e.project=ke.parse(e.project).name);let t=Cn.addComponentValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("adding component");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,install_command:s,install_timeout:i}=e,o=e.template||"https://github.com/harperdb/application-template";try{let c=ke.join(r,n);Le.mkdirSync(c,{recursive:!0});let l=new C4({name:n,packageIdentifier:o,install:{command:s,timeout:i}});await O4(l);let u=await Li(e);return u.message=`Successfully added project: ${n}`,u}catch(c){throw Yt(new Error,Tu.ADD_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,c)}}a(Nye,"addComponent");async function Cye(e){e.project&&(e.project=ke.parse(e.project).name);let t=Cn.dropCustomFunctionProjectValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("dropping custom function project");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Rr.get(Mt.CONFIG_PARAMS.APPS);if(!Eye.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 IR.updateConfigValue(Mt.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=ke.join(r,n);Le.rmSync(i,{recursive:!0});let o=await Li(e);return o.message=`Successfully deleted project: ${n}`,o}catch(i){throw Yt(new Error,Tu.DROP_FUNCTION_PROJECT,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,i)}}a(Cye,"dropCustomFunctionProject");async function Oye(e){e.project&&(e.project=ke.parse(e.project).name);let t=Cn.packageComponentValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Kt.trace("packaging component",n);let s;try{s=await Le.realpath(ke.join(r,n))}catch(o){if(o.code!==Mt.NODE_ERROR_CODES.ENOENT)throw o;try{s=await Le.realpath(ke.join(Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===Mt.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await Sye(s,e)).toString("base64");return{project:n,payload:i}}a(Oye,"packageComponent");async function Pye(e){e.project?e.project=ke.parse(e.project).name:e.package&&(e.project=Lye(e.package));let t=Cn.deployComponentValidator(e);if(t)throw Yt(t,t.message,Wt.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 IR.addConfig(e.project,l)}let r=new C4({name:e.project,payload:e.payload,packageIdentifier:e.package,install:{command:e.install_command,timeout:e.install_timeout}});if(await O4(r),hye)return;let n=new yye;n.isWorker=!0;let s=(hE(),D(oR)),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)N4.restartWorkers("http"),c.message=`Successfully deployed: ${r.name}, restarting HarperDB`;else if(o){let u=await(NR(),D(wR)).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(Pye,"deployComponent");function Lye(e){if(e.startsWith("git+ssh://"))return ke.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return ke.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Le.readFileSync(ke.join(e,"package.json"),"utf8"));return ke.basename(t)}catch{}return ke.basename(e)}a(Lye,"getProjectNameFromPackage");async function Dye(){let e=IR.getConfiguration(),t=a(async(i,o)=>{try{let c=await Le.readdir(i,{withFileTypes:!0});for(let l of c){let u=l.name;if(u.startsWith(".")||u==="node_modules")continue;let d=ke.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 Le.stat(d),m={name:ke.basename(u),mtime:f.mtime,size:f.size};o.entries.push(m)}}return o}catch(c){return Kt.warn("Error loading package",c),{error:c.toString(),entries:[]}}},"walkDir"),r=await t(Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{name:Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT).split(ke.sep).slice(-1).pop(),entries:[]});for(let i of r.entries){let o=e[i.name]?.package;o&&(i.package=o)}let{internal:n}=(Vp(),D($N)),s;try{s=await n.ComponentStatusRegistry.getAggregatedFromAllThreads(n.componentStatusRegistry)}catch(i){Kt.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){Kt.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(Dye,"getComponents");async function vye(e){let t=Cn.getComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let s=await Le.stat(ke.join(r,e.project,e.file));return{message:await Le.readFile(ke.join(r,e.project,e.file),n),size:s.size,birthtime:s.birthtime,mtime:s.mtime}}catch(s){throw s.code===Mt.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${ke.join(e.project,e.file)}'`):s}}a(vye,"getComponentFile");async function Mye(e){let t=Cn.setComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=ke.join(Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Le.ensureFile(n),await Le.outputFile(n,e.payload,r)):await Le.ensureDir(n);let s=await Li(e);return s.message="Successfully set component: "+e.file,s}a(Mye,"setComponentFile");async function Uye(e){let t=Cn.dropComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?ke.join(r,n):r,i=ke.join(Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),s),o=ke.join(Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Le.pathExists(o)&&await Le.unlink(o),await Le.pathExists(i)&&await Le.remove(i);let c=ke.join(Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Le.pathExists(c)){let u=JSON.parse(await Le.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Le.writeFile(c,JSON.stringify(u,null,2),"utf8")}IR.deleteConfigFromFile([r]);let l=await Li(e);return e.restart===!0?(N4.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}a(Uye,"dropComponent");async function xye(e){let t=Cn.addSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:o}=e;Kt.trace("adding ssh key",r);let c=ke.join(No,r+".key"),l=ke.join(No,"config");if(await Le.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Le.outputFile(c,n),await Le.chmod(c,"0600");let u=`#${r}
123
123
  Host ${s}
124
124
  HostName ${i}
125
125
  User git
126
126
  IdentityFile ${c}
127
127
  IdentitiesOnly yes`;await Le.pathExists(l)?await Le.appendFile(l,`
128
128
  `+u):await Le.outputFile(l,u);let d="";if(await Le.pathExists(Pa)||(await Le.writeFile(Pa,""),await Le.chmod(Pa,"0600")),i=="github.com"&&!(await Le.readFile(Pa,"utf8")).includes("github.com"))try{let E=(await(await fetch("https://api.github.com/meta")).json()).ssh_keys;for(let _ of E)Le.appendFile(Pa,"github.com "+_+`
129
- `)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}o&&await Le.appendFile(Pa,o);let f=await Li(e);return f.message=`Added ssh key: ${r}${d}`,f}a(xye,"addSSHKey");async function Bye(e){let t=Cn.getSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r}=e;Kt.trace("getting ssh key",r);let n=ke.join(wo,r+".key");if(!await Le.pathExists(n))throw new Error("Key does not exist.");let s={name:r,key:await Le.readFile(n,"utf8")},i=ke.join(wo,"config");if(await Le.pathExists(i)){let o=await Le.readFile(i,"utf8"),c=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g"),l=o.match(c);if(l&&l[0]){let u=l[0],d=u.match(/^Host\s+(.+)$/m);d&&(s.host=d[1].trim());let f=u.match(/^\s*HostName\s+(.+)$/m);f&&(s.hostname=f[1].trim())}}return s}a(Bye,"getSSHKey");async function Fye(e){let t=Cn.updateSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r,key:n}=e;Kt.trace("updating ssh key",r);let s=ke.join(wo,r+".key");if(!await Le.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Le.outputFile(s,n);let i=await Li(e);return i.message=`Updated ssh key: ${r}`,i}a(Fye,"updateSSHKey");async function kye(e){let t=Cn.deleteSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r}=e;Kt.trace("deleting ssh key",r);let n=ke.join(wo,r+".key"),s=ke.join(wo,"config");if(!await Le.pathExists(n))throw new Error("Key does not exist");let i=await Le.readFile(s,"utf8"),o=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(o,""),await Le.outputFile(s,i),Le.removeSync(n);let c=await Li(e);return c.message=`Deleted ssh key: ${r}`,c}a(kye,"deleteSSHKey");async function Hye(e){let t=[];return await Le.pathExists(wo)&&(await Le.readdir(wo)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}a(Hye,"listSSHKeys");async function Gye(e){let t=Cn.setSSHKnownHostsValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{known_hosts:r}=e;await Le.outputFile(Pa,r);let n=await Li(e);return n.message="Known hosts successfully set",n}a(Gye,"setSSHKnownHosts");async function qye(e){return await Le.pathExists(Pa)?{known_hosts:await Le.readFile(Pa,"utf8")}:{known_hosts:null}}a(qye,"getSSHKnownHosts");er.customFunctionsStatus=Rye;er.getCustomFunctions=bye;er.getCustomFunction=Aye;er.setCustomFunction=Iye;er.dropCustomFunction=wye;er.addComponent=Nye;er.dropCustomFunctionProject=Cye;er.packageComponent=Oye;er.deployComponent=Pye;er.getComponents=Dye;er.getComponentFile=vye;er.setComponentFile=Mye;er.dropComponent=Uye;er.addSSHKey=xye;er.getSSHKey=Bye;er.updateSSHKey=Fye;er.deleteSSHKey=kye;er.listSSHKeys=Hye;er.setSSHKnownHosts=Gye;er.getSSHKnownHosts=qye});var ND=M((OGe,L4)=>{"use strict";var Qs=require("joi"),P4=ft();L4.exports={readTransactionLogValidator:$ye,deleteTransactionLogsBeforeValidator:Vye};function $ye(e){let t=Qs.object({schema:Qs.string(),database:Qs.string(),table:Qs.string().required(),from:Qs.date().timestamp(),to:Qs.date().timestamp(),limit:Qs.number().min(1)});return P4.validateBySchema(e,t)}a($ye,"readTransactionLogValidator");function Vye(e){let t=Qs.object({schema:Qs.string(),database:Qs.string(),table:Qs.string().required(),timestamp:Qs.date().timestamp().required()});return P4.validateBySchema(e,t)}a(Vye,"deleteTransactionLogsBeforeValidator")});var PR=M((LGe,B4)=>{"use strict";var CD=(G(),D(j)),IE=lr(),D4=ae(),v4=fe(),M4=io(),U4=Q(),{handleHDBError:CR,hdbErrors:Kye}=Ee(),{HTTP_STATUS_CODES:OR}=Kye,{readTransactionLogValidator:Yye,deleteTransactionLogsBeforeValidator:Wye}=ND(),x4=ps(),jye="Logs successfully deleted from transaction log.",zye="All logs successfully deleted from transaction log.";B4.exports={readTransactionLog:Jye,deleteTransactionLogsBefore:Xye};async function Jye(e){let t=Yye(e);if(t)throw CR(t,t.message,OR.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=D4.checkSchemaTableExist(e.database,e.table);if(r)throw CR(new Error,r,OR.NOT_FOUND,void 0,void 0,!0);return v4.get(CD.CONFIG_PARAMS.CLUSTERING_ENABLED)?await Qye(e):(U4.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)),x4.readAuditLog(e))}a(Jye,"readTransactionLog");async function*Qye(e){let t=M4.createNatsTableStreamName(e.database,e.table),r=await IE.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===CD.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}a(Qye,"readTransactionLogNats");async function Xye(e){let t=Wye(e);if(t)throw CR(t,t.message,OR.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!v4.get(CD.CONFIG_PARAMS.CLUSTERING_ENABLED))return U4.info("Delete transaction logs called for Plexus"),x4.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=D4.checkSchemaTableExist(r,n);if(i)throw CR(new Error,i,OR.NOT_FOUND,void 0,void 0,!0);let o=M4.createNatsTableStreamName(r,n),{jsm:c}=await IE.getNATSReferences(),l=await IE.getStreamInfo(o),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=jye,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=zye):f=(await IE.viewStream(o,parseInt(s),1))[0].nats_sequence,await IE.purgeTableStream(r,n,{seq:f}),d}a(Xye,"deleteTransactionLogsBefore")});var OD=M((vGe,k4)=>{"use strict";var LR=require("joi"),Zye=require("path"),{handleHDBError:eRe,hdbErrors:tRe}=Ee(),{HTTP_STATUS_CODES:rRe}=tRe,nRe=ft(),F4=Q();k4.exports={installModules:aRe};var{CONFIG_PARAMS:sRe}=(G(),D(j)),{getConfigValue:iRe}=_t(),{nonInteractiveSpawn:oRe}=(AR(),D(bR));async function aRe(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";F4.warn(t,e.projects);let r=lRe(e);if(r)throw eRe(r,r.message,rRe.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=iRe(sRe.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=Zye.join(i,l);try{let{stdout:d,stderr:f}=oRe(l,"npm",c,u);d=d?d.replace(`
129
+ `)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}o&&await Le.appendFile(Pa,o);let f=await Li(e);return f.message=`Added ssh key: ${r}${d}`,f}a(xye,"addSSHKey");async function Bye(e){let t=Cn.getSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r}=e;Kt.trace("getting ssh key",r);let n=ke.join(No,r+".key");if(!await Le.pathExists(n))throw new Error("Key does not exist.");let s={name:r,key:await Le.readFile(n,"utf8")},i=ke.join(No,"config");if(await Le.pathExists(i)){let o=await Le.readFile(i,"utf8"),c=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g"),l=o.match(c);if(l&&l[0]){let u=l[0],d=u.match(/^Host\s+(.+)$/m);d&&(s.host=d[1].trim());let f=u.match(/^\s*HostName\s+(.+)$/m);f&&(s.hostname=f[1].trim())}}return s}a(Bye,"getSSHKey");async function Fye(e){let t=Cn.updateSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r,key:n}=e;Kt.trace("updating ssh key",r);let s=ke.join(No,r+".key");if(!await Le.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Le.outputFile(s,n);let i=await Li(e);return i.message=`Updated ssh key: ${r}`,i}a(Fye,"updateSSHKey");async function kye(e){let t=Cn.deleteSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r}=e;Kt.trace("deleting ssh key",r);let n=ke.join(No,r+".key"),s=ke.join(No,"config");if(!await Le.pathExists(n))throw new Error("Key does not exist");let i=await Le.readFile(s,"utf8"),o=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(o,""),await Le.outputFile(s,i),Le.removeSync(n);let c=await Li(e);return c.message=`Deleted ssh key: ${r}`,c}a(kye,"deleteSSHKey");async function Hye(e){let t=[];return await Le.pathExists(No)&&(await Le.readdir(No)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}a(Hye,"listSSHKeys");async function Gye(e){let t=Cn.setSSHKnownHostsValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{known_hosts:r}=e;await Le.outputFile(Pa,r);let n=await Li(e);return n.message="Known hosts successfully set",n}a(Gye,"setSSHKnownHosts");async function qye(e){return await Le.pathExists(Pa)?{known_hosts:await Le.readFile(Pa,"utf8")}:{known_hosts:null}}a(qye,"getSSHKnownHosts");er.customFunctionsStatus=Rye;er.getCustomFunctions=bye;er.getCustomFunction=Aye;er.setCustomFunction=Iye;er.dropCustomFunction=wye;er.addComponent=Nye;er.dropCustomFunctionProject=Cye;er.packageComponent=Oye;er.deployComponent=Pye;er.getComponents=Dye;er.getComponentFile=vye;er.setComponentFile=Mye;er.dropComponent=Uye;er.addSSHKey=xye;er.getSSHKey=Bye;er.updateSSHKey=Fye;er.deleteSSHKey=kye;er.listSSHKeys=Hye;er.setSSHKnownHosts=Gye;er.getSSHKnownHosts=qye});var ND=M((OGe,L4)=>{"use strict";var Qs=require("joi"),P4=ft();L4.exports={readTransactionLogValidator:$ye,deleteTransactionLogsBeforeValidator:Vye};function $ye(e){let t=Qs.object({schema:Qs.string(),database:Qs.string(),table:Qs.string().required(),from:Qs.date().timestamp(),to:Qs.date().timestamp(),limit:Qs.number().min(1)});return P4.validateBySchema(e,t)}a($ye,"readTransactionLogValidator");function Vye(e){let t=Qs.object({schema:Qs.string(),database:Qs.string(),table:Qs.string().required(),timestamp:Qs.date().timestamp().required()});return P4.validateBySchema(e,t)}a(Vye,"deleteTransactionLogsBeforeValidator")});var PR=M((LGe,B4)=>{"use strict";var CD=(G(),D(j)),IE=lr(),D4=ae(),v4=fe(),M4=io(),U4=Q(),{handleHDBError:CR,hdbErrors:Kye}=Ee(),{HTTP_STATUS_CODES:OR}=Kye,{readTransactionLogValidator:Yye,deleteTransactionLogsBeforeValidator:Wye}=ND(),x4=ps(),jye="Logs successfully deleted from transaction log.",zye="All logs successfully deleted from transaction log.";B4.exports={readTransactionLog:Jye,deleteTransactionLogsBefore:Xye};async function Jye(e){let t=Yye(e);if(t)throw CR(t,t.message,OR.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=D4.checkSchemaTableExist(e.database,e.table);if(r)throw CR(new Error,r,OR.NOT_FOUND,void 0,void 0,!0);return v4.get(CD.CONFIG_PARAMS.CLUSTERING_ENABLED)?await Qye(e):(U4.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)),x4.readAuditLog(e))}a(Jye,"readTransactionLog");async function*Qye(e){let t=M4.createNatsTableStreamName(e.database,e.table),r=await IE.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===CD.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}a(Qye,"readTransactionLogNats");async function Xye(e){let t=Wye(e);if(t)throw CR(t,t.message,OR.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!v4.get(CD.CONFIG_PARAMS.CLUSTERING_ENABLED))return U4.info("Delete transaction logs called for Plexus"),x4.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=D4.checkSchemaTableExist(r,n);if(i)throw CR(new Error,i,OR.NOT_FOUND,void 0,void 0,!0);let o=M4.createNatsTableStreamName(r,n),{jsm:c}=await IE.getNATSReferences(),l=await IE.getStreamInfo(o),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=jye,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=zye):f=(await IE.viewStream(o,parseInt(s),1))[0].nats_sequence,await IE.purgeTableStream(r,n,{seq:f}),d}a(Xye,"deleteTransactionLogsBefore")});var OD=M((vGe,k4)=>{"use strict";var LR=require("joi"),Zye=require("path"),{handleHDBError:eRe,hdbErrors:tRe}=Ee(),{HTTP_STATUS_CODES:rRe}=tRe,nRe=ft(),F4=Q();k4.exports={installModules:aRe};var{CONFIG_PARAMS:sRe}=(G(),D(j)),{getConfigValue:iRe}=_t(),{nonInteractiveSpawn:oRe}=(AR(),D(bR));async function aRe(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";F4.warn(t,e.projects);let r=lRe(e);if(r)throw eRe(r,r.message,rRe.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=iRe(sRe.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=Zye.join(i,l);try{let{stdout:d,stderr:f}=oRe(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=cRe(d.stderr):o[l].npm_error=d.message;continue}}return F4.info(`finished installModules with response ${o}`),o.warning=t,o}a(aRe,"installModules");function cRe(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(cRe,"parseNPMStdErr");function lRe(e){let t=LR.object({projects:LR.array().min(1).items(LR.string()).required(),dry_run:LR.boolean().default(!1)});return nRe.validateBySchema(e,t)}a(lRe,"modulesValidator")});var vD={};ye(vD,{describeMetric:()=>K4,describeMetricOp:()=>DD,get:()=>$4,getOp:()=>PD,listMetrics:()=>V4,listMetricsOp:()=>LD});async function dRe(e){return(await Eg().get(e)).hostname}function H4(e,t){return e.length===0||e.includes(t)}function PD(e){return wE.trace?.("get_analytics request:",e),$4(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function q4(e){return"conditions"in e?{...e,conditions:e.conditions.map(q4)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function $4(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(q4));let o=t??[];H4(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),wE.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],H4(o,"node")&&(wE.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await dRe(d)),wE.trace?.("get_analytics result:",JSON.stringify(u)),u})}function LD(e){return V4(e.metric_types)}async function V4(e=["builtin"]){let t=[],r=Object.values(Ko);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 DD(e){return K4(e.metric)}async function K4(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 wE.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var G4,uRe,wE,MD=se(()=>{G4=b(Q());uI();dI();({forComponent:uRe}=G4.default),wE=uRe("analytics").conditional;a(dRe,"lookupHostname");a(H4,"isSelected");a(PD,"getOp");a(q4,"conformCondition");a($4,"get");a(LD,"listMetricsOp");a(V4,"listMetrics");a(DD,"describeMetricOp");a(K4,"describeMetric")});var DR,vR,NE,MR=se(()=>{DR={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},vR=Object.keys(DR),NE="primary"});function W4(e){return Y4.validateBySchema(e,hRe)}var CE,Y4,fRe,mRe,pRe,hRe,j4=se(()=>{CE=b(require("joi")),Y4=b(ft());MR();fRe=vR,mRe=Object.entries(DR).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),pRe=a(()=>{let e=CE.default.string().min(1).max(512);return Object.entries(DR).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:CE.default.string().valid(...r.allowedValues).messages({"any.only":mRe[t]})}))}),e.required()},"createStatusValidationSchema"),hRe=CE.default.object({id:CE.default.string().valid(...fRe).required(),status:pRe()});a(W4,"validateStatus")});function z4(){UD||(UD=La.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),xD=new Uint8Array(UD))}function J4(){z4(),xD[0]=1}function Q4(){return z4(),xD[0]===1}var UD,xD,BD=se(()=>{OE();a(z4,"ensureInitialized");a(J4,"requestRestart");a(Q4,"restartNeeded")});var qD={};ye(qD,{DEFAULT_STATUS_ID:()=>NE,STATUS_IDS:()=>vR,Status:()=>La,clear:()=>kD,get:()=>HD,set:()=>GD});function LE(){return FD||(FD=ze({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),FD}function kD({id:e}){return PE.debug?.("clearStatus",e),LE().delete(e)}async function _Re(){PE.debug?.("getAllStatus");let e=LE().get({}),t=await $p.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=Q4();return{systemStatus:e,componentStatus:r,restartRequired:n}}function HD({id:e}){return e?(PE.debug?.("getStatus",e),LE().get(e)):(PE.debug?.("getStatus","all"),_Re())}function GD({status:e,id:t=NE}){let r=W4({status:e,id:t});if(r)throw(0,UR.handleHDBError)(r,r.message,ERe.BAD_REQUEST);return PE.debug?.("setStatus",t,e),LE().put(t,{status:e})}var UR,X4,ERe,FD,La,PE,OE=se(()=>{Oe();UR=b(Ee()),X4=b(ir());j4();MR();Vp();BD();MR();({HTTP_STATUS_CODES:ERe}=UR.hdbErrors);a(LE,"getStatusTable");La={get primaryStore(){return LE().primaryStore}},PE=(0,X4.loggerWithTag)("status");a(kD,"clearStatus");a(_Re,"getAllStatus");a(HD,"getStatus");a(GD,"setStatus")});var YD={};ye(YD,{getFingerprint:()=>VD,getRegistrationInfo:()=>$D,setLicense:()=>KD});function $D(){return{version:Z4.packageJson.version,deprecated:!0}}function VD(){return{message:"this-is-deprecated",deprecated:!0}}function KD(){return{deprecated:!0}}var Z4,WD=se(()=>{Z4=b(yt());a($D,"getRegistrationInfo");a(VD,"getFingerprint");a(KD,"setLicense")});var tJ=M((ZGe,eJ)=>{"use strict";var DE=require("alasql"),yu=require("recursive-iterator"),Di=Q(),gRe=ae(),vE=(G(),D(j)),jD=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,TRe(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=>vE.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=>!vE.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][vE.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=SRe(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=>!vE.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new DE.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 SRe(e){return e.filter(t=>t[vE.PERMS_CRUD_ENUM.READ])}a(SRe,"filterReadRestrictedAttrs");function TRe(e,t,r,n,s){yRe(e,t,r,n,s)}a(TRe,"interpretAST");function ME(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(ME,"addSchemaTableToMap");function yRe(e,t,r,n,s){if(!e){Di.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof DE.yy.Insert?IRe(e,t,r):e instanceof DE.yy.Select?RRe(e,t,r,n,s):e instanceof DE.yy.Update?bRe(e,t,r):e instanceof DE.yy.Delete?ARe(e,t,r):Di.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(yRe,"getRecordAttributesAST");function RRe(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(gRe.isEmptyOrZeroLength(i)){Di.error("No schema specified");return}e.from.forEach(c=>{ME(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),ME(c.table,t,r,n,s)});let o=new yu(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 yu(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 yu(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 yu(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(RRe,"getSelectAttributes");function bRe(e,t,r){if(!e){Di.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new yu(e.columns),s=e.table.databaseid;ME(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&zD(e.table.tableid,s,i.columnid,t,r)}a(bRe,"getUpdateAttributes");function ARe(e,t,r){if(!e){Di.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new yu(e.where),s=e.table.databaseid;ME(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&zD(e.table.tableid,s,i.columnid,t,r)}a(ARe,"getDeleteAttributes");function IRe(e,t,r){if(!e){Di.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new yu(e.columns),s=e.into.databaseid;ME(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&zD(e.into.tableid,s,i.columnid,t,r)}a(IRe,"getInsertAttributes");function zD(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(zD,"pushAttribute");eJ.exports=jD});var kR=M((tqe,gJ)=>{"use strict";var JD=Vn(),xR=Sn(),ws=ry(),BE=Yl(),QD=Bl(),wRe=sP(),NRe=_Y(),FE=(Yn(),D(gi)),BR=ah(),Dr=Q(),CRe=uP(),ORe=py(),PRe=BP(),LRe=Ey(),DRe=HP(),vRe=GP(),MRe=VP(),URe=YP(),XD=yy(),Da=ae(),sJ=jf(),On=(G(),D(j)),iJ=J2(),xRe=qh(),oJ=(Yd(),D(mh)),aJ=(ER(),D(RE)),cJ=_t(),fr=wD(),lJ=PR(),BRe=OD(),Jf=Ts(),uJ=(Rf(),D(yf)),ZD=(MD(),D(vD)),ev=(OE(),D(qD)),dJ=(uE(),D(Jy)),tv=(WD(),D(YD)),fJ=KC(),{handleHDBError:Xn,hdbErrors:mJ}=Ee(),{HDB_ERROR_MSGS:fn,HTTP_STATUS_CODES:UE}=mJ,ee=new Map,pJ="delete",$c="insert",Xs="read",Ru="update",xE="describe",rJ=BE.describeSchema.name,nJ=BE.describeTable.name,hJ={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},FRe={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},kRe="catchup",HRe="handleGetJob",GRe="handleGetJobsByStartDate",FR={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},qRe=[ws.createTable.name,ws.createAttribute.name,ws.dropTable.name,ws.dropAttribute.name],EJ={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}};ee.set(JD.insert.name,new ne(!1,[$c]));ee.set(JD.update.name,new ne(!1,[Ru]));ee.set(JD.upsert.name,new ne(!1,[$c,Ru]));ee.set(xR.searchByConditions.name,new ne(!1,[Xs]));ee.set(xR.searchByHash.name,new ne(!1,[Xs]));ee.set(xR.searchByValue.name,new ne(!1,[Xs]));ee.set(xR.search.name,new ne(!1,[Xs]));ee.set(ws.createSchema.name,new ne(!0,[]));ee.set(ws.createTable.name,new ne(!0,[]));ee.set(ws.createAttribute.name,new ne(!1,[$c]));ee.set(ws.dropSchema.name,new ne(!0,[]));ee.set(ws.dropTable.name,new ne(!0,[]));ee.set(ws.dropAttribute.name,new ne(!0,[]));ee.set(BE.describeSchema.name,new ne(!1,[Xs]));ee.set(BE.describeTable.name,new ne(!1,[Xs]));ee.set(QD.deleteRecord.name,new ne(!1,[pJ]));ee.set(FE.addUser.name,new ne(!0,[]));ee.set(FE.alterUser.name,new ne(!0,[]));ee.set(FE.dropUser.name,new ne(!0,[]));ee.set(FE.listUsersExternal.name,new ne(!0,[]));ee.set(BR.listRoles.name,new ne(!0,[]));ee.set(BR.addRole.name,new ne(!0,[]));ee.set(BR.alterRole.name,new ne(!0,[]));ee.set(BR.dropRole.name,new ne(!0,[]));ee.set(CRe.name,new ne(!0,[]));ee.set(ORe.name,new ne(!0,[]));ee.set(PRe.name,new ne(!0,[]));ee.set(LRe.name,new ne(!0,[]));ee.set(DRe.name,new ne(!0,[]));ee.set(vRe.name,new ne(!0,[]));ee.set(XD.setRoutes.name,new ne(!0,[]));ee.set(XD.getRoutes.name,new ne(!0,[]));ee.set(XD.deleteRoutes.name,new ne(!0,[]));ee.set(cJ.setConfiguration.name,new ne(!0,[]));ee.set(MRe.clusterStatus.name,new ne(!0,[]));ee.set(URe.name,new ne(!0,[]));ee.set(QD.deleteFilesBefore.name,new ne(!0,[]));ee.set(QD.deleteAuditLogsBefore.name,new ne(!0,[]));ee.set(sJ.restart.name,new ne(!0,[]));ee.set(sJ.restartService.name,new ne(!0,[]));ee.set(wRe.name,new ne(!0,[]));ee.set(NRe.name,new ne(!0,[Xs]));ee.set(ws.cleanupOrphanBlobs.name,new ne(!0,[]));ee.set(xRe.systemInformation.name,new ne(!0,[]));ee.set(cJ.getConfiguration.name,new ne(!0,[]));ee.set(lJ.readTransactionLog.name,new ne(!0,[]));ee.set(lJ.deleteTransactionLogsBefore.name,new ne(!0,[]));ee.set(BRe.installModules.name,new ne(!0,[]));ee.set(Jf.createCsr.name,new ne(!0,[]));ee.set(Jf.signCertificate.name,new ne(!0,[]));ee.set(Jf.listCertificates.name,new ne(!0,[]));ee.set(Jf.addCertificate.name,new ne(!0,[]));ee.set(Jf.removeCertificate.name,new ne(!0,[]));ee.set(Jf.getKey.name,new ne(!0,[]));ee.set(uJ.addNodeBack.name,new ne(!0,[]));ee.set(uJ.removeNodeBack.name,new ne(!0,[]));ee.set(ZD.getOp.name,new ne(!1,[Xs]));ee.set(ZD.listMetricsOp.name,new ne(!1,[Xs]));ee.set(ZD.describeMetricOp.name,new ne(!1,[Xs]));ee.set(ev.clear.name,new ne(!0,[]));ee.set(ev.get.name,new ne(!0,[]));ee.set(ev.set.name,new ne(!0,[]));ee.set(dJ.installUsageLicenseOp.name,new ne(!0,[]));ee.set(dJ.getUsageLicensesOp.name,new ne(!0,[]));ee.set(tv.getFingerprint.name,new ne(!0,[]));ee.set(tv.setLicense.name,new ne(!0,[]));ee.set(oJ.createTokens.name,new ne(!1,[]));ee.set(oJ.refreshOperationToken.name,new ne(!1,[]));ee.set(aJ.login.name,new ne(!1,[]));ee.set(aJ.logout.name,new ne(!1,[]));ee.set(fr.customFunctionsStatus.name,new ne(!0,[]));ee.set(fr.getCustomFunctions.name,new ne(!0,[]));ee.set(fr.getComponents.name,new ne(!0,[]));ee.set(fr.getComponentFile.name,new ne(!0,[]));ee.set(fr.setComponentFile.name,new ne(!0,[]));ee.set(fr.dropComponent.name,new ne(!0,[]));ee.set(fr.getCustomFunction.name,new ne(!0,[]));ee.set(fr.setCustomFunction.name,new ne(!0,[]));ee.set(fr.dropCustomFunction.name,new ne(!0,[]));ee.set(fr.addComponent.name,new ne(!0,[]));ee.set(fr.dropCustomFunctionProject.name,new ne(!0,[]));ee.set(fr.packageComponent.name,new ne(!0,[]));ee.set(fr.deployComponent.name,new ne(!0,[]));ee.set(fr.addSSHKey.name,new ne(!0,[]));ee.set(fr.getSSHKey.name,new ne(!0,[]));ee.set(fr.updateSSHKey.name,new ne(!0,[]));ee.set(fr.deleteSSHKey.name,new ne(!0,[]));ee.set(fr.listSSHKeys.name,new ne(!0,[]));ee.set(fr.setSSHKnownHosts.name,new ne(!0,[]));ee.set(fr.getSSHKnownHosts.name,new ne(!0,[]));ee.set(tv.getRegistrationInfo.name,new ne(!1,[]));ee.set(FE.userInfo.name,new ne(!1,[]));ee.set(BE.describeAll.name,new ne(!1,[]));ee.set(HRe,new ne(!1,[]));ee.set(GRe,new ne(!0,[]));ee.set(kRe,new ne(!0,[]));ee.set(FR.CSV_DATA_LOAD,new ne(!1,[$c,Ru]));ee.set(FR.CSV_URL_LOAD,new ne(!1,[$c,Ru]));ee.set(FR.CSV_FILE_LOAD,new ne(!1,[$c,Ru]));ee.set(FR.IMPORT_FROM_S3,new ne(!1,[$c,Ru]));ee.set(EJ.EXPORT_TO_S3,new ne(!0,[]));ee.set(EJ.EXPORT_LOCAL,new ne(!0,[]));ee.set(On.VALID_SQL_OPS_ENUM.DELETE,new ne(!1,[pJ]));ee.set(On.VALID_SQL_OPS_ENUM.SELECT,new ne(!1,[Xs]));ee.set(On.VALID_SQL_OPS_ENUM.INSERT,new ne(!1,[$c]));ee.set(On.VALID_SQL_OPS_ENUM.UPDATE,new ne(!1,[Ru]));gJ.exports={verifyPerms:VRe,verifyPermsAst:$Re,verifyBulkLoadAttributePerms:YRe};function $Re(e,t,r){if(Da.isEmptyOrZeroLength(e))throw Dr.info("verify_perms_ast has an empty user parameter"),Xn(new Error);if(Da.isEmptyOrZeroLength(t))throw Dr.info("verify_perms_ast has an empty user parameter"),Xn(new Error);if(Da.isEmptyOrZeroLength(r))throw Dr.info("verify_perms_ast has a null operation parameter"),Xn(new Error);try{let n=tJ(),s=require("alasql"),i=new fJ,o=new n(e),c=o.getSchemas(),l=new Map;if((!c||c.length===0)&&o.affected_attributes&&o.affected_attributes.size>0)throw Dr.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&&hJ[r])throw Xn(new Error,fn.DROP_SYSTEM,UE.FORBIDDEN);if(u&&!d)return null;let f=iJ.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=_J(t,r,l,i);return m||(l.forEach((p,h)=>{for(let E=0;E<p.length;E++){let _=o.getAttributesBySchemaTableName(h,p[E]),R=nv(t.role.permission,h,p[E]);rv(_,R,r,p[E],h,i)}}),i.getPermsResponse())}catch(n){throw Xn(n)}}a($Re,"verifyPermsAst");function VRe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Dr.info("null required parameter in verifyPerms"),Xn(new Error,fn.DEFAULT_INVALID_REQUEST,UE.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 fJ;if(Da.isEmptyOrZeroLength(e.hdb_user?.role)||Da.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Dr.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(On.SYSTEM_SCHEMA_NAME)||s===On.SYSTEM_SCHEMA_NAME;if(l&&d&&FRe[e.operation]&&(i===On.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===On.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===On.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&hJ[r])throw Xn(new Error,fn.DROP_SYSTEM,UE.FORBIDDEN);if(l&&!d||u===!0&&(r===ws.createSchema.name||r===ws.dropSchema.name))return null;if(qRe.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=iJ.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===rJ||r===nJ)&&!f.super_user){if(s===On.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(fn.SCHEMA_PERM_ERROR(s));if(r===rJ&&(!f[s]||!f[s][xE]))return c.handleInvalidItem(fn.SCHEMA_NOT_FOUND(s));if(r===nJ&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][xE]))return c.handleInvalidItem(fn.TABLE_NOT_FOUND(s,i))}let m=_J(e.hdb_user,r,o,c,n);if(m)return m;if(ee.get(r)&&ee.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&On.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],_=f[s].tables[i];_[On.PERMS_CRUD_ENUM.READ]&&(_.attribute_permissions.length>0?_.attribute_permissions.filter(S=>S[On.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=KRe(e),h=nv(e.hdb_user?.role?.permission,s,i);return rv(p,h,r,i,s,c,n),c.getPermsResponse()}a(VRe,"verifyPerms");function _J(e,t,r,n,s){if(Da.arrayHasEmptyValues([e,t,r]))throw Dr.info("hasPermissions has an invalid parameter"),Xn(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||ee.get(t).requires_su))return null;if(!ee.get(t))throw Dr.info(`operation ${t} not found.`),Xn(new Error,fn.OP_NOT_FOUND(t),UE.BAD_REQUEST);if(ee.get(t)&&ee.get(t).requires_su)return Dr.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][xE]===!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[xE]===!1)n.addInvalidItem(fn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=ee.get(t).perms;!Da.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],_=f[E];(_==null||_===!1)&&(Dr.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 Dr.error(p),Dr.error(m),Xn(mJ.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}a(_J,"hasPermissions");function rv(e,t,r,n,s,i,o){if(!e||!t)throw Dr.info("no attributes specified in checkAttributePerms."),Xn(new Error);let c=ee.get(r).perms;if(!c||c==="")throw Dr.info(`no permissions found for ${r} in checkAttributePerms().`),Xn(new Error);if(Da.isEmptyOrZeroLength(t))return Dr.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[xE]===!1){i.addInvalidItem(fn.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(On.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Xs)throw Xn(new Error,fn.SYSTEM_TIMESTAMP_PERMS_ERR,UE.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(rv,"checkAttributePerms");function KRe(e){let t=new Set;try{if(e.action)return t;if(e.operation===On.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){Dr.info(r)}return t}a(KRe,"getRecordAttributes");function nv(e,t,r){let n=new Map;if(Da.isEmpty(e))return Dr.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{Dr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(nv,"getAttributePermissions");function YRe(e,t,r,n,s,i,o){let c=new Set(i),l=nv(e,n,s);rv(c,l,t,s,n,o,r)}a(YRe,"verifyBulkLoadAttributePerms")});var iv=M((nqe,SJ)=>{"use strict";var sv=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};SJ.exports=sv});var dv=M((lqe,xJ)=>{"use strict";var HR=Vn(),qR=BC(),WRe=require("needle"),vi=(G(),D(j)),iqe=Dt(),Qf=ae(),{handleHDBError:tr,hdbErrors:CJ}=Ee(),{HTTP_STATUS_CODES:mn,HDB_ERROR_MSGS:vr,CHECK_LOGS_WRAPPER:Au}=CJ,Xf=Q(),ov=require("papaparse");Qf.promisifyPapaParse();var Mi=require("fs-extra"),jRe=require("path"),{chain:TJ}=require("stream-chain"),yJ=require("stream-json/streamers/StreamArray"),RJ=require("stream-json/utils/Batch"),bJ=require("stream-chain/utils/comp"),{finished:AJ}=require("stream"),zRe=fe(),OJ=FC(),JRe=kC(),{BulkLoadFileObject:cv,BulkLoadDataObject:QRe}=EV(),lv=KC(),{verifyBulkLoadAttributePerms:PJ}=kR(),oqe=iv(),aqe=lr(),cqe=io(),{databases:XRe}=(Oe(),D(mt)),{coerceType:ZRe}=(Lg(),D(kq)),IJ="No records parsed from csv file.",bu=`${zRe.get("HDB_ROOT")}/tmp`,{schemaRegex:ebe}=Zi(),wJ=1024*1024*2,NJ=5e3,tbe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};xJ.exports={csvDataLoad:rbe,csvURLLoad:nbe,csvFileLoad:sbe,importFromS3:ibe};async function rbe(e,t){let r=qR.dataObject(e);if(r)throw tr(r,r.message,mn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=vJ(e.schema,e.table),i=ov.parse(e.data,{header:!0,skipEmptyLines:!0,transform:av.bind(null,s),dynamicTyping:!1}),o=new lv;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&PJ(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 tr(new Error,c,mn.BAD_REQUEST,void 0,void 0,!0);let l=new QRe(e.action,e.schema,e.table,i.data);return n=await OJ.callOperationFunctionAsAwait(MJ,l,null),n.message===IJ?IJ:UJ(n.records,n.number_written)}catch(s){throw Iu(s)}}a(rbe,"csvDataLoad");async function nbe(e){let t=qR.urlObject(e);if(t)throw tr(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${bu}/${r}`;try{await obe(e,r)}catch(s){throw Xf.error(vr.DOWNLOAD_FILE_ERR(r)+" - "+s),tr(s,Au(vr.DOWNLOAD_FILE_ERR(r)))}try{let s=new cv(this.job_operation_function.name,e.action,e.schema,e.table,n,vi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await uv(s);return await GR(n),i}catch(s){throw await GR(n),Iu(s)}}a(nbe,"csvURLLoad");async function sbe(e){let t=qR.fileObject(e);if(t)throw tr(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);let r=new cv(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,vi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await uv(r)}catch(n){throw Iu(n)}}a(sbe,"csvFileLoad");async function ibe(e){let t=qR.s3FileObject(e);if(t)throw tr(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=jRe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${bu}/${s}`;let i=new cv(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await abe(s,e);let o=await uv(i);return await GR(r),o}catch(n){throw await GR(r),Iu(n)}}a(ibe,"importFromS3");async function obe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await WRe("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 tr(n,s,n.statusCode,vi.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}lbe(r,e.csv_url),await cbe(t,r.raw)}a(obe,"downloadCSVFile");async function abe(e,t){try{let r=`${bu}/${e}`;await Mi.mkdirp(bu),await Mi.writeFile(`${bu}/${e}`,"",{flag:"a+"});let n=await Mi.createWriteStream(r),s=await JRe.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),tr(r,Au(vr.S3_DOWNLOAD_ERR))}}a(abe,"downloadFileFromS3");async function cbe(e,t){try{await Mi.mkdirp(bu),await Mi.writeFile(`${bu}/${e}`,t)}catch(r){throw Xf.error(vr.WRITE_TEMP_FILE_ERR),tr(r,Au(vr.DEFAULT_BULK_LOAD_ERR))}}a(cbe,"writeFileToTempFolder");async function GR(e){if(e)try{await Mi.access(e),await Mi.unlink(e)}catch{Xf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(GR,"deleteTempFile");function lbe(e,t){if(e.statusCode!==CJ.HTTP_STATUS_CODES.OK)throw tr(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,mn.BAD_REQUEST);if(!tbe[e.headers["content-type"]])throw tr(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,mn.BAD_REQUEST);if(!e.raw)throw tr(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,mn.BAD_REQUEST)}a(lbe,"validateURLResponse");async function uv(e){try{let t;switch(e.file_type){case vi.VALID_S3_FILE_TYPES.CSV:t=await ube(e);break;case vi.VALID_S3_FILE_TYPES.JSON:t=await dbe(e);break;default:throw tr(new Error,vr.DEFAULT_BULK_LOAD_ERR,mn.BAD_REQUEST,vi.LOG_LEVELS.ERROR,vr.INVALID_FILE_EXT_ERR(e))}return UJ(t.records,t.number_written)}catch(t){throw Iu(t)}}a(uv,"fileLoad");async function LJ(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 HR.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&PJ(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=tr(c);r(l)}}a(LJ,"validateChunk");async function DJ(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Qf.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Qf.isEmpty(c)&&!Qf.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 OJ.callOperationFunctionAsAwait(MJ,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=tr(c,Au(vr.INSERT_CSV_ERR),mn.INTERNAL_SERVER_ERROR,vi.LOG_LEVELS.ERROR,vr.INSERT_CSV_ERR+" - "+c);r(l)}}a(DJ,"insertChunk");async function ube(e){let t={records:0,number_written:0},r=vJ(e.schema,e.table);try{let n=new lv,s=Mi.createReadStream(e.file_path,{highWaterMark:wJ});s.setEncoding("utf8"),await ov.parsePromise(s,LJ.bind(null,e,n),av.bind(null,r));let i=n.getPermsResponse();if(i)throw tr(new Error,i,mn.BAD_REQUEST);return s=Mi.createReadStream(e.file_path,{highWaterMark:wJ}),s.setEncoding("utf8"),await ov.parsePromise(s,DJ.bind(null,e,t),av.bind(null,r)),s.destroy(),t}catch(n){throw tr(n,Au(vr.PAPA_PARSE_ERR),mn.INTERNAL_SERVER_ERROR,vi.LOG_LEVELS.ERROR,vr.PAPA_PARSE_ERR+n)}}a(ube,"callPapaParse");function vJ(e,t){let r=XRe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>ZRe(i,s));return n}a(vJ,"createTransformMap");function av(e,t,r){let n=e.get(r);return n?n(t):Qf.autoCast(t)}a(av,"typeFunction");async function dbe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new lv,s=TJ([Mi.createReadStream(e.file_path,{encoding:"utf-8"}),yJ.withParser(),c=>c.value,new RJ({batchSize:NJ}),bJ(async c=>{await LJ(e,n,r,c)})]);await new Promise((c,l)=>{AJ(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw tr(new Error,i,mn.BAD_REQUEST);let o=TJ([Mi.createReadStream(e.file_path,{encoding:"utf-8"}),yJ.withParser(),c=>c.value,new RJ({batchSize:NJ}),bJ(async c=>{await DJ(e,t,r,c)})]);return await new Promise((c,l)=>{AJ(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw tr(n,Au(vr.INSERT_JSON_ERR),mn.INTERNAL_SERVER_ERROR,vi.LOG_LEVELS.ERROR,vr.INSERT_JSON_ERR+n)}}a(dbe,"insertJson");async function MJ(e){let t={};try{e.data&&e.data.length>0&&fbe(e.data[0])?t=await mbe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Xf.info(t.message))}catch(r){throw Iu(r)}return t}a(MJ,"callBulkFileLoad");function fbe(e){let t=Object.keys(e);for(let r of t)if(!ebe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(fbe,"validateColumnNames");async function mbe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=HR.insert;break;case"update":i=HR.update;break;case"upsert":i=HR.upsert;break;default:throw tr(new Error,vr.INVALID_ACTION_PARAM_ERR(n),mn.BAD_REQUEST,vi.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=Qf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw Iu(o)}}a(mbe,"bulkFileLoad");function UJ(e,t){return`successfully loaded ${t} of ${e} records`}a(UJ,"buildResponseMsg");function Iu(e){return tr(e,Au(vr.DEFAULT_BULK_LOAD_ERR),mn.INTERNAL_SERVER_ERROR,vi.LOG_LEVELS.ERROR,vr.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Iu,"buildTopLevelErrMsg")});var HJ=M((fqe,kJ)=>{"use strict";var pbe=Sn(),hbe=pi(),BJ=Q(),Ebe=Vn(),dqe=uT(),_be=require("clone"),mv=require("alasql"),gbe=lS(),FJ=require("util"),Sbe=FJ.promisify(hbe.getTableSchema),Tbe=FJ.promisify(pbe.search),ybe=(G(),D(j)),fv=ae();gbe(mv);kJ.exports={update:bbe};var Rbe="There was a problem performing this update. Please check the logs and try again.";async function bbe({statement:e,hdb_user:t}){let r=await Sbe(e.table.databaseid,e.table.tableid),n=Abe(e.columns);fv.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=_be(s),c=fv.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=mv.parse(l).statements[0],d=await Tbe(u),f=Ibe(n,d);return wbe(o,f,t)}a(bbe,"update");function Abe(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=mv.compile(`SELECT ${r.expression.toString()} AS [${ybe.FUNC_VAL}] FROM ?`)}),t}catch(t){throw BJ.error(t),new Error(Rbe)}}a(Abe,"createUpdateRecord");function Ibe(e,t){return fv.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Ibe,"buildUpdateRecords");async function wbe(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Ebe.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){BJ.error(`Error delete new_attributes from update response: ${i}`)}return s}a(wbe,"updateRecords")});var qJ=M((Eqe,GJ)=>{var Nbe=require("alasql"),Cbe=Sn(),Obe=Q(),Pbe=ps(),hv=require("util"),pv=ae(),Lbe=(G(),D(j)),Dbe=pi(),pqe=uT(),hqe=Vn(),vbe="record",Mbe="successfully deleted",Ube=hv.callbackify(kbe),xbe=hv.promisify(Cbe.search),Bbe=hv.promisify(Dbe.getTableSchema);GJ.exports={convertDelete:Ube};function Fbe(e){return`${e.deleted_hashes.length} ${vbe}${e.deleted_hashes.length===1?"":"s"} ${Mbe}`}a(Fbe,"generateReturnMessage");async function kbe({statement:e,hdb_user:t}){let r=await Bbe(e.table.databaseid,e.table.tableid);pv.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=pv.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Nbe.parse(o).statements[0],l={operation:Lbe.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await xbe(c);let u=await Pbe.deleteRecords(l);return pv.isEmptyOrZeroLength(u.message)&&(u.message=Fbe(u)),delete u.txn_time,u}catch(u){throw Obe.error(u),u.hdb_code?u.message:u}}a(kbe,"convertDelete")});var HE=M((gqe,WJ)=>{"use strict";WJ.exports={evaluateSQL:Xbe,processAST:YJ,convertSQLToAST:KJ,checkASTPermissions:VJ};var Hbe=Vn(),$J=require("util"),Gbe=$J.callbackify(Hbe.insert),qbe=Sn().search,$be=HJ().update,Vbe=$J.callbackify($be),Kbe=qJ().convertDelete,Vc=require("alasql"),Ybe=kR(),$R=Q(),Wbe=lS(),jbe=ae(),kE=(G(),D(j)),{hdbErrors:zbe,handleHDBError:Ev}=Ee(),{HTTP_STATUS_CODES:_v}=zbe;Wbe(Vc);var Jbe=403,Qbe="There was a problem performing this insert. Please check the logs and try again.",gv=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Xbe(e,t){let r=e.parsed_sql_object;if(!r){r=KJ(e.sql);let n,s=r.ast.statements[0];if(s instanceof Vc.yy.Insert?n=s.into.databaseid:s instanceof Vc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Vc.yy.Update||s instanceof Vc.yy.Delete?n=s.table.databaseid:$R.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Vc.yy.Select)&&jbe.isEmptyOrZeroLength(n))return t("No schema specified",null)}YJ(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Xbe,"evaluateSQL");function VJ(e,t){let r;try{r=Ybe.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(VJ,"checkASTPermissions");function KJ(e){let t=new gv;if(!e)throw Ev(new Error,"The 'sql' parameter is missing from the request body",_v.BAD_REQUEST);try{let r=e.trim(),n=Vc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
133
- `);throw n[1]?Ev(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,_v.BAD_REQUEST):Ev(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",_v.BAD_REQUEST)}return t}a(KJ,"convertSQLToAST");function YJ(e,t,r){try{let n=Zbe;if(!e.bypass_auth&&!t.permissions_checked){let i=VJ(e,t);if(i&&i.length>0)return r(Jbe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case kE.VALID_SQL_OPS_ENUM.SELECT:n=qbe,s=t.ast.statements[0];break;case kE.VALID_SQL_OPS_ENUM.INSERT:n=eAe;break;case kE.VALID_SQL_OPS_ENUM.UPDATE:n=Vbe;break;case kE.VALID_SQL_OPS_ENUM.DELETE:n=Kbe;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(YJ,"processAST");function Zbe(e,t){$R.info(e),t("unknown sql statement")}a(Zbe,"nullFunction");function eAe({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=tAe(i,e.values)}catch(o){return r(o)}Gbe(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){$R.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(eAe,"convertInsert");function tAe(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]]=Vc.compile(`SELECT ${s.toString()} AS [${kE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw $R.error(r),new Error(Qbe)}}a(tAe,"createDataObjects")});var yv=M((Tqe,tQ)=>{"use strict";var Tv=Sn(),rAe=kC(),{AsyncParser:nAe}=require("json2csv"),VR=require("stream"),Ns=ae(),Sv=require("fs-extra"),sAe=require("path"),Zs=Q(),{promisify:JJ}=require("util"),GE=ae(),{handleHDBError:br,hdbErrors:iAe}=Ee(),{HDB_ERROR_MSGS:Zn,HTTP_STATUS_CODES:Ar}=iAe,{streamAsJSON:oAe}=(FA(),D(Wx)),{Upload:aAe}=require("@aws-sdk/lib-storage"),{toCsvStream:cAe}=(qo(),D(n0)),jJ=["search_by_value","search_by_hash","sql","search_by_conditions"],zJ=["json","csv"],QJ="json",XJ="csv",lAe="Successfully exported JSON locally.",uAe="Successfully exported CSV locally.",dAe=1e3,fAe=Tv.searchByHash,mAe=Tv.searchByValue,pAe=JJ(VR.finished);tQ.exports={export_to_s3:gAe,export_local:hAe};async function hAe(e){Zs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=ZJ(e);if(!Ns.isEmpty(t))throw Zs.error(t),br(new Error,t,Ar.BAD_REQUEST,void 0,void 0,!0);if(Ns.isEmpty(e.path))throw Zs.error(Zn.MISSING_VALUE("path")),br(new Error,Zn.MISSING_VALUE("path"),Ar.BAD_REQUEST,void 0,void 0,!0);let r=(Ns.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(sAe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Ns.buildFolderPath(e.path,r);await EAe(e.path);let s=await eQ(e);return await _Ae(n,e.format,s)}a(hAe,"export_local");async function EAe(e){if(Zs.trace("in confirmPath"),Ns.isEmptyOrZeroLength(e))throw br(new Error,`Invalid path: ${e}`,Ar.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await Sv.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,Zs.error(n),br(new Error,n,Ar.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 Zs.error(r),br(new Error,r,Ar.BAD_REQUEST,void 0,void 0,!0)}return!0}a(EAe,"confirmPath");async function _Ae(e,t,r){if(Zs.trace("in saveToLocal"),GE.isEmptyOrZeroLength(e))throw br(new Error,Zn.INVALID_VALUE("file_path"),Ar.BAD_REQUEST,void 0,void 0,!0);if(GE.isEmptyOrZeroLength(t))throw br(new Error,Zn.INVALID_VALUE("Source format"),Ar.BAD_REQUEST,void 0,void 0,!0);if(GE.isEmpty(r))throw br(new Error,Zn.NOT_FOUND("Data"),Ar.BAD_REQUEST,void 0,void 0,!0);if(t===QJ){let n=Sv.createWriteStream(e);return oAe(r).pipe(n),await pAe(n),{message:lAe,path:e}}else if(t===XJ){let n=Sv.createWriteStream(e),s=VR.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new nAe(i,c).fromInput(s).toOutput(n).promise(!1),{message:uAe,path:e}}throw br(new Error,Zn.INVALID_VALUE("format"),Ar.BAD_REQUEST)}a(_Ae,"saveToLocal");async function gAe(e){if(!e.s3||Object.keys(e.s3).length===0)throw br(new Error,Zn.MISSING_VALUE("S3 object"),Ar.BAD_REQUEST);if(Ns.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw br(new Error,Zn.MISSING_VALUE("aws_access_key_id"),Ar.BAD_REQUEST);if(Ns.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw br(new Error,Zn.MISSING_VALUE("aws_secret_access_key"),Ar.BAD_REQUEST);if(Ns.isEmptyOrZeroLength(e.s3.bucket))throw br(new Error,Zn.MISSING_VALUE("bucket"),Ar.BAD_REQUEST);if(Ns.isEmptyOrZeroLength(e.s3.key))throw br(new Error,Zn.MISSING_VALUE("key"),Ar.BAD_REQUEST);if(Ns.isEmptyOrZeroLength(e.s3.region))throw br(new Error,Zn.MISSING_VALUE("region"),Ar.BAD_REQUEST);let t=ZJ(e);if(!Ns.isEmpty(t))throw br(new Error,t,Ar.BAD_REQUEST);Zs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await eQ(e)}catch(l){throw Zs.error(l),l}let n,s=await rAe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new VR.PassThrough;if(e.format===XJ){i=e.s3.key+".csv";let l=cAe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(o)}else if(e.format===QJ){i=e.s3.key+".json";let l=new VR.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%dAe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw br(new Error,Zn.INVALID_VALUE("format"),Ar.BAD_REQUEST);return new aAe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(gAe,"export_to_s3");function ZJ(e){if(Zs.trace("in exportCoreValidation"),Ns.isEmpty(e.format))return"format missing";if(zJ.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${zJ.join(", ")}`;let t=e.search_operation.operation;if(Ns.isEmpty(t))return"search_operation.operation missing";if(jJ.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${jJ.join(", ")}`}a(ZJ,"exportCoreValidation");async function eQ(e){Zs.trace("in getRecords");let t,r;if(GE.isEmpty(e.search_operation)||GE.isEmptyOrZeroLength(e.search_operation.operation))throw br(new Error,Zn.INVALID_VALUE("Search operation"),Ar.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=mAe;break;case"search_by_hash":t=fAe;break;case"search_by_conditions":t=Tv.searchByConditions;break;case"sql":{let n=HE();t=JJ(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Zs.error(r),br(new Error,r,Ar.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(eQ,"getRecords")});var nQ=M((Rqe,rQ)=>{"use strict";var Rv=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};rQ.exports=Rv});var oQ=M((Aqe,iQ)=>{"use strict";var SAe=(G(),D(j)),sQ=require("moment"),TAe=require("uuid").v4,bv=class{static{a(this,"JobObject")}constructor(){this.id=TAe(),this.type=void 0,this.start_datetime=sQ().valueOf(),this.created_datetime=sQ().valueOf(),this.end_datetime=void 0,this.status=SAe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};iQ.exports=bv});var YR=M((wqe,pQ)=>{"use strict";var yAe=require("uuid").v4,dQ=Vn(),fQ=Sn(),RAe=fi(),bAe=hd(),AAe=nQ(),Ut=(G(),D(j)),IAe=oQ(),wAe=YS(),Ui=Q(),NAe=xm(),Zf=ae(),{promisify:CAe}=require("util"),wu=require("moment"),KR=BC(),aQ=Zw(),{deleteTransactionLogsBeforeValidator:OAe}=ND(),{handleHDBError:cQ,hdbErrors:PAe,ClientError:LAe}=Ee(),{HTTP_STATUS_CODES:lQ}=PAe,uQ=fQ.searchByValue,DAe=fQ.searchByHash,vAe=dQ.insert,MAe=dQ.update,Av;pQ.exports={addJob:BAe,updateJob:kAe,handleGetJob:UAe,handleGetJobsByStartDate:xAe,getJobById:mQ};async function UAe(e){if(e.id===void 0)throw new LAe("'id' is required");let t=await mQ(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(UAe,"handleGetJob");async function xAe(e){try{let t=await FAe(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=wu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=wu(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(xAe,"handleGetJobsByStartDate");async function BAe(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(!Ut.JOB_TYPE_ENUM[e.operation])return Ui.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ut.OPERATIONS_ENUM.CSV_FILE_LOAD:n=KR.fileObject(e);break;case Ut.OPERATIONS_ENUM.CSV_URL_LOAD:n=KR.urlObject(e);break;case Ut.OPERATIONS_ENUM.CSV_DATA_LOAD:n=KR.dataObject(e);break;case Ut.OPERATIONS_ENUM.IMPORT_FROM_S3:n=KR.s3FileObject(e);break;case Ut.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ut.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=aQ(e,"date");break;case Ut.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=aQ(e,"timestamp");break;case Ut.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=OAe(e);break;case Ut.OPERATIONS_ENUM.RESTART_SERVICE:if(Ut.HDB_PROCESS_SERVICES[e.service]===void 0)throw cQ(new Error,"Invalid service",lQ.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw cQ(n,n.message,lQ.BAD_REQUEST,void 0,void 0,!0);let s=new IAe;s.type=e.operation===Ut.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ut.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new RAe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await uQ(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=yAe();try{o=await uQ(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 NAe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await vAe(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(BAe,"addJob");async function FAe(e){let t=wu(e.from_date,wu.ISO_8601),r=wu(e.to_date,wu.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 AAe(n,e.hdb_user);try{if(!Av){let i=HE();Av=CAe(i.evaluateSQL)}return await Av(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(FAe,"getJobsInDateRange");async function mQ(e){if(Zf.isEmptyOrZeroLength(e))return Zf.errorizeMessage("Invalid job ID specified.");let t=new bAe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await DAe(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(mQ,"getJobById");async function kAe(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===Ut.JOB_STATUS_ENUM.COMPLETE||e.status===Ut.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=wu().valueOf());let t=new wAe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await MAe(t),r}a(kAe,"updateJob")});var RQ=M((Cqe,yQ)=>{"use strict";var hQ=ae(),Mr=(G(),D(j)),HAe=require("moment"),WR=dv(),qE=Q(),EQ=YR(),_Q=yv(),gQ=Bl(),SQ=st(),GAe=PR(),qAe=jf(),{parentPort:$Ae,isMainThread:TQ}=require("worker_threads"),{onMessageByType:VAe}=st(),Iv=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function KAe(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(hQ.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(hQ.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Mr.JOB_TYPE_ENUM.csv_file_load:await No(e,WR.csvFileLoad);break;case Mr.JOB_TYPE_ENUM.csv_url_load:await No(e,WR.csvURLLoad);break;case Mr.JOB_TYPE_ENUM.csv_data_load:await No(e,WR.csvDataLoad);break;case Mr.JOB_TYPE_ENUM.import_from_s3:await No(e,WR.importFromS3);break;case Mr.JOB_TYPE_ENUM.empty_trash:break;case Mr.JOB_TYPE_ENUM.export_local:await No(e,_Q.export_local);break;case Mr.JOB_TYPE_ENUM.export_to_s3:await No(e,_Q.export_to_s3);break;case Mr.JOB_TYPE_ENUM.delete_files_before:case Mr.JOB_TYPE_ENUM.delete_records_before:await No(e,gQ.deleteFilesBefore);break;case Mr.JOB_TYPE_ENUM.delete_audit_logs_before:await No(e,gQ.deleteAuditLogsBefore);break;case Mr.JOB_TYPE_ENUM.delete_transaction_logs_before:await No(e,GAe.deleteTransactionLogsBefore);break;case Mr.JOB_TYPE_ENUM.restart_service:return await No(e,qAe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(KAe,"parseMessage");async function No(e,t){try{e.job.status=Mr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=HAe().valueOf(),await EQ.updateJob(e.job),await YAe(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):qE.error(`There was an error running ${t.name} job with id ${e.job.id}`),qE.error(n),e.job.message=n,e.job.status=Mr.JOB_STATUS_ENUM.ERROR;try{await EQ.updateJob(e.job)}catch(s){throw qE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(No,"runJob");async function YAe(e){qE.trace("launching job thread:",e),TQ?SQ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Mr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):$Ae.postMessage({type:Mr.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(YAe,"launchJobThread");TQ&&VAe(Mr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{SQ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Mr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){qE.error(r)}});yQ.exports={parseMessage:KAe,RunnerMessage:Iv}});var AQ=M((Pqe,bQ)=>{"use strict";var WAe=ae(),wv=fe(),Kc=(G(),D(j)),jAe=Dt(),zAe=lr(),Co=Q(),JAe=iv(),QAe=io();wv.initSync();bQ.exports={postOperationHandler:ZAe,sendOperationTransaction:$E};async function $E(e,t,r,n){if(e.schema===Kc.SYSTEM_SCHEMA_NAME)return;let s=XAe(e,t,r);s&&(Co.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await zAe.publishToStream(`${jAe.SUBJECT_PREFIXES.TXN}.${e.schema}`,QAe.createNatsTableStreamName(e.schema,e.table),n,s))}a($E,"sendOperationTransaction");function XAe(e,t,r){if(WAe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Kc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}a(XAe,"convertCRUDOperationToTransaction");async function ZAe(e,t,r){if(!wv.get(Kc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;Co.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=wv.get(Kc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new JAe(t.txn_time,n,s);switch(e.operation){case Kc.OPERATIONS_ENUM.INSERT:try{await $E(e,t.inserted_hashes,i,r)}catch(o){Co.error("There was an error calling clustering postOperationHandler for insert."),Co.error(o)}break;case Kc.OPERATIONS_ENUM.DELETE:try{await $E(e,t.deleted_hashes,i,r)}catch(o){Co.error("There was an error calling clustering postOperationHandler for delete."),Co.error(o)}break;case Kc.OPERATIONS_ENUM.UPDATE:try{await $E(e,t.update_hashes,i,r)}catch(o){Co.error("There was an error calling clustering postOperationHandler for update."),Co.error(o)}break;case Kc.OPERATIONS_ENUM.UPSERT:try{await $E(e,t.upserted_hashes,i,r)}catch(o){Co.error("There was an error calling clustering postOperationHandler for upsert."),Co.error(o)}break;default:break}return t}a(ZAe,"postOperationHandler")});var Z,IQ=se(()=>{Z=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 wR={};ye(wR,{chooseOperation:()=>KQ,executeJob:()=>ei,getOperationFunction:()=>YQ,operation:()=>Uv,processLocalTransaction:()=>VQ});function rIe(e){if(!Nv){let t=HE();Nv=Mv.promisify(t.evaluateSQL)}return Nv(e)}async function VQ(e,t){try{if(e.body.operation!=="read_log"&&(WE.default.log_level===gm.INFO||WE.default.log_level===gm.DEBUG||WE.default.log_level===gm.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:o,...c}=e.body;Pn.info(c)}}catch(n){Pn.error(n)}let r=await qQ.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return nIe[e.body.operation]&&BQ.default.setSchemaDataToGlobal(n=>{n&&Pn.error(n)}),r}function KQ(e){let t;try{t=YQ(e)}catch(s){throw Pn.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=HE(),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 Pn.error(`${wQ.FORBIDDEN} from operation ${e.operation}`),Pn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,ti.handleHDBError)(new Error,c,ti.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=xQ.default.verifyPerms(i,s);if(o)throw Pn.error(`${wQ.FORBIDDEN} from operation ${e.operation}`),Pn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,ti.handleHDBError)(new Error,o,ti.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,ti.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function YQ(e){if(Pn.trace(`getOperationFunction with operation: ${e.operation}`),NQ.has(e.operation))return NQ.get(e.operation);throw(0,ti.handleHDBError)(new Error,ti.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),ti.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function Uv(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=KQ(e);return VQ({body:e},n)}async function sIe(e){Pn.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[cA]=!0;let o;switch(i.operation){case V.INSERT:o=await Cu.default.insert(i);break;case V.UPDATE:o=await Cu.default.update(i);break;case V.UPSERT:o=await Cu.default.upsert(i);break;case V.DELETE:o=await tm.default.deleteRecord(i);break;default:Pn.warn("invalid operation in catchup");break}await eIe.postOperationHandler(i,o,e)}catch(o){Pn.info("Invalid operation in transaction"),Pn.error(o)}}async function ei(e){(0,GQ.transformReq)(e);let t,r;try{if(r=await zR.default.addJob(e),r){t=r.createdJob,Pn.info("addJob result",r);let n=new Lv.default.RunnerMessage(t,e);return{message:await Lv.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 Pn.error(i),(0,ti.handleHDBError)(n,i)}}function iIe(){let e=new Map;return e.set(V.INSERT,new Z(Cu.default.insert)),e.set(V.UPDATE,new Z(Cu.default.update)),e.set(V.UPSERT,new Z(Cu.default.upsert)),e.set(V.SEARCH_BY_CONDITIONS,new Z(em.default.searchByConditions)),e.set(V.SEARCH_BY_HASH,new Z(em.default.searchByHash)),e.set(V.SEARCH_BY_ID,new Z(em.default.searchByHash)),e.set(V.SEARCH_BY_VALUE,new Z(em.default.searchByValue)),e.set(V.SEARCH,new Z(tIe)),e.set(V.SQL,new Z(rIe)),e.set(V.CSV_DATA_LOAD,new Z(ei,VE.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new Z(ei,VE.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new Z(ei,VE.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new Z(ei,VE.default.importFromS3)),e.set(V.CREATE_SCHEMA,new Z(xi.default.createSchema)),e.set(V.CREATE_DATABASE,new Z(xi.default.createSchema)),e.set(V.CREATE_TABLE,new Z(xi.default.createTable)),e.set(V.CREATE_ATTRIBUTE,new Z(xi.default.createAttribute)),e.set(V.DROP_SCHEMA,new Z(xi.default.dropSchema)),e.set(V.DROP_DATABASE,new Z(xi.default.dropSchema)),e.set(V.DROP_TABLE,new Z(xi.default.dropTable)),e.set(V.DROP_ATTRIBUTE,new Z(xi.default.dropAttribute)),e.set(V.DESCRIBE_SCHEMA,new Z(KE.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new Z(KE.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new Z(KE.default.describeTable)),e.set(V.DESCRIBE_ALL,new Z(KE.default.describeAll)),e.set(V.DELETE,new Z(tm.default.deleteRecord)),e.set(V.ADD_USER,new Z(DN)),e.set(V.ALTER_USER,new Z(vN)),e.set(V.DROP_USER,new Z(MN)),e.set(V.LIST_USERS,new Z(xN)),e.set(V.LIST_ROLES,new Z(YE.default.listRoles)),e.set(V.ADD_ROLE,new Z(YE.default.addRole)),e.set(V.ALTER_ROLE,new Z(YE.default.alterRole)),e.set(V.DROP_ROLE,new Z(YE.default.dropRole)),e.set(V.USER_INFO,new Z(UN)),e.set(V.READ_LOG,new Z(OQ.default)),e.set(V.ADD_NODE,new Z(PQ.default)),e.set(V.UPDATE_NODE,new Z(Cv.default)),e.set(V.SET_NODE_REPLICATION,new Z(Cv.default)),e.set(V.REMOVE_NODE,new Z(LQ.default)),e.set(V.CONFIGURE_CLUSTER,new Z(DQ.default)),e.set(V.PURGE_STREAM,new Z(vQ.default)),e.set(V.SET_CONFIGURATION,new Z(Dv.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new Z(MQ.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new Z(UQ.default)),e.set(V.CLUSTER_SET_ROUTES,new Z(jR.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new Z(jR.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new Z(jR.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new Z(ei,Ov.default.export_to_s3)),e.set(V.CREATE_CSR,new Z(Nu.default.createCsr)),e.set(V.SIGN_CERTIFICATE,new Z(Nu.default.signCertificate)),e.set(V.LIST_CERTIFICATES,new Z(Nu.default.listCertificates)),e.set(V.ADD_CERTIFICATES,new Z(Nu.default.addCertificate)),e.set(V.REMOVE_CERTIFICATE,new Z(Nu.default.removeCertificate)),e.set(V.GET_KEY,new Z(Nu.default.getKey)),e.set(V.ADD_NODE_BACK,new Z(LP)),e.set(V.REMOVE_NODE_BACK,new Z(DP)),e.set(V.DELETE_FILES_BEFORE,new Z(ei,tm.default.deleteFilesBefore)),e.set(V.DELETE_RECORDS_BEFORE,new Z(ei,tm.default.deleteFilesBefore)),e.set(V.EXPORT_LOCAL,new Z(ei,Ov.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new Z(zR.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new Z(zR.default.handleGetJob)),e.set(V.GET_REGISTRATION_INFO,new Z($D)),e.set(V.GET_FINGERPRINT,new Z(VD)),e.set(V.SET_LICENSE,new Z(KD)),e.set(V.RESTART,new Z(Pv.default.restart)),e.set(V.RESTART_SERVICE,new Z(ei,Pv.default.restartService)),e.set(V.CATCHUP,new Z(sIe)),e.set(V.SYSTEM_INFORMATION,new Z(FQ.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new Z(ei,tm.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new Z(CQ.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new Z(CC)),e.set(V.REFRESH_OPERATION_TOKEN,new Z(OC)),e.set(V.LOGIN,new Z(RD)),e.set(V.LOGOUT,new Z(bD)),e.set(V.GET_CONFIGURATION,new Z(Dv.default.getConfiguration)),e.set(V.CUSTOM_FUNCTIONS_STATUS,new Z(wt.default.customFunctionsStatus)),e.set(V.GET_CUSTOM_FUNCTIONS,new Z(wt.default.getCustomFunctions)),e.set(V.GET_COMPONENT_FILE,new Z(wt.default.getComponentFile)),e.set(V.GET_COMPONENTS,new Z(wt.default.getComponents)),e.set(V.SET_COMPONENT_FILE,new Z(wt.default.setComponentFile)),e.set(V.DROP_COMPONENT,new Z(wt.default.dropComponent)),e.set(V.GET_CUSTOM_FUNCTION,new Z(wt.default.getCustomFunction)),e.set(V.SET_CUSTOM_FUNCTION,new Z(wt.default.setCustomFunction)),e.set(V.DROP_CUSTOM_FUNCTION,new Z(wt.default.dropCustomFunction)),e.set(V.ADD_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.addComponent)),e.set(V.ADD_COMPONENT,new Z(wt.default.addComponent)),e.set(V.DROP_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.dropCustomFunctionProject)),e.set(V.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.packageComponent)),e.set(V.PACKAGE_COMPONENT,new Z(wt.default.packageComponent)),e.set(V.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.deployComponent)),e.set(V.DEPLOY_COMPONENT,new Z(wt.default.deployComponent)),e.set(V.READ_TRANSACTION_LOG,new Z(vv.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new Z(ei,vv.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new Z(kQ.default.installModules)),e.set(V.GET_BACKUP,new Z(xi.default.getBackup)),e.set(V.CLEANUP_ORPHAN_BLOBS,new Z(xi.default.cleanupOrphanBlobs)),e.set(V.ADD_SSH_KEY,new Z(wt.default.addSSHKey)),e.set(V.GET_SSH_KEY,new Z(wt.default.getSSHKey)),e.set(V.UPDATE_SSH_KEY,new Z(wt.default.updateSSHKey)),e.set(V.DELETE_SSH_KEY,new Z(wt.default.deleteSSHKey)),e.set(V.LIST_SSH_KEYS,new Z(wt.default.listSSHKeys)),e.set(V.SET_SSH_KNOWN_HOSTS,new Z(wt.default.setSSHKnownHosts)),e.set(V.GET_SSH_KNOWN_HOSTS,new Z(wt.default.getSSHKnownHosts)),e.set(V.GET_ANALYTICS,new Z(PD)),e.set(V.LIST_METRICS,new Z(LD)),e.set(V.DESCRIBE_METRIC,new Z(DD)),e.set(V.GET_STATUS,new Z(HD)),e.set(V.SET_STATUS,new Z(GD)),e.set(V.CLEAR_STATUS,new Z(kD)),e.set(V.INSTALL_USAGE_LICENSE,new Z(qL)),e.set(V.GET_USAGE_LICENSES,new Z(YL)),e}var em,VE,xi,KE,tm,CQ,YE,wt,WE,OQ,PQ,Cv,LQ,DQ,vQ,MQ,UQ,jR,Ov,xQ,zR,ti,Pv,Mv,Cu,BQ,FQ,Lv,Dv,vv,kQ,HQ,GQ,Nu,qQ,$Q,wQ,Pn,eIe,tIe,Nv,nIe,NQ,NR=se(()=>{em=b(Sn()),VE=b(dv()),xi=b(ry()),KE=b(Yl()),tm=b(Bl()),CQ=b(sP());Yn();YE=b(ah()),wt=b(wD()),WE=b(Q()),OQ=b(uP()),PQ=b(py()),Cv=b(BP()),LQ=b(Ey()),DQ=b(HP()),vQ=b(GP()),MQ=b(VP()),UQ=b(YP()),jR=b(yy()),Ov=b(yv()),xQ=b(kR()),zR=b(YR());G();ti=b(Ee()),Pv=b(jf()),Mv=b(require("util")),Cu=b(Vn()),BQ=b(pi()),FQ=b(qh()),Lv=b(RQ());Yd();ER();Dv=b(_t()),vv=b(PR()),kQ=b(OD()),HQ=b(ai()),GQ=b(ae());Hr();Nu=b(Ts());Rf();MD();qQ=b(FC()),$Q=b(AQ());OE();uE();WD();IQ();({HTTP_STATUS_CODES:wQ}=ti.hdbErrors),Pn=WE.default.loggerWithTag("operation"),{transactToClusteringUtils:eIe}=$Q.default,tIe=Mv.promisify(em.default.search);a(rIe,"evaluateSQL");nIe={[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(VQ,"processLocalTransaction");NQ=iIe();Ue.operation=Uv;a(KQ,"chooseOperation");a(YQ,"getOperationFunction");(0,HQ._assignPackageExport)("operation",Uv);a(Uv,"operation");a(sIe,"catchup");a(ei,"executeJob");a(iIe,"initializeOperationFunctionMap")});var XR=M((Bqe,JQ)=>{"use strict";var JR=(G(),D(j)),oIe=ae(),rm=Q(),{handleHDBError:xv,hdbErrors:QR}=Ee(),{isMainThread:aIe}=require("worker_threads"),{Readable:cIe}=require("stream"),WQ=require("os"),lIe=require("util"),uIe=LC(),zQ=lIe.promisify(uIe.authorize),jQ=(NR(),D(wR)),{createGzip:dIe,constants:fIe}=require("zlib"),mIe=[JR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,JR.OPERATIONS_ENUM.LOGIN,JR.OPERATIONS_ENUM.LOGOUT];function pIe(e){let t=`Found an uncaught exception with message: ${e.message}. ${WQ.EOL}Stack: ${e.stack} ${WQ.EOL}Terminating ${aIe?"HDB":"thread"}.`;console.error(t),rm.fatal(t),process.exit(1)}a(pIe,"handleServerUncaughtException");function hIe(e,t,r){if(rm[e.logLevel||"info"](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:QR.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(hIe,"serverErrorHandler");function EIe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=xv(new Error,"Invalid JSON.",QR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(oIe.isEmpty(e.body.operation)){let n=xv(new Error,"Request body must include an 'operation' property.",QR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(EIe,"reqBodyValidationHandler");function _Ie(e,t,r){let n;!mIe.includes(e.body.operation)||e.body.operation===JR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?zQ(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{i.statusCode=401,rm.debug("Login failed",i),r(i,null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(_Ie,"authHandler");function gIe(e,t,r){zQ(e,t).then(n=>{e.hdb_user=n,r()}).catch(n=>{rm.warn(n),rm.warn(`{"ip":"${e.socket?.remoteAddress}", "error":"${n.stack}"`);let s=typeof n=="string"?{error:n}:{error:n.message};r(xv(n,s,QR.HTTP_STATUS_CODES.UNAUTHORIZED),null)})}a(gIe,"authAndEnsureUserOnRequest");async function SIe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=jQ.chooseOperation(e.body);let s=await jQ.processLocalTransaction(e,n);if(s instanceof cIe&&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(dIe({level:fIe.Z_BEST_SPEED})))}return s}catch(s){throw rm.error(s),s}}a(SIe,"handlePostRequest");JQ.exports={authHandler:_Ie,authAndEnsureUserOnRequest:gIe,handlePostRequest:SIe,handleServerUncaughtException:pIe,serverErrorHandler:hIe,reqBodyValidationHandler:EIe}});var e3=M((kqe,ZQ)=>{"use strict";var TIe=require("fastify-plugin"),{handlePostRequest:QQ,authHandler:yIe,reqBodyValidationHandler:RIe}=XR();async function bIe(e){e.decorate("hdbCore",{preValidation:[RIe,yIe],request:a(t=>XQ(QQ(t,response)),"request"),requestWithoutAuthentication:a((t,r)=>XQ(QQ(t,r,!0)),"requestWithoutAuthentication")})}a(bIe,"hdbCore");async function XQ(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(XQ,"convertAsyncIterators");ZQ.exports=TIe(bIe)});var r3=M((qqe,t3)=>{"use strict";var Gqe=require("fs"),ZR=fe();ZR.initSync();var{CONFIG_PARAMS:Bv}=(G(),D(j)),AIe=1024*1024*1024;function IIe(e){let t=ZR.get(Bv.HTTP_TIMEOUT),r=ZR.get(Bv.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:AIe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:ZR.get(Bv.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(IIe,"getServerOptions");t3.exports=IIe});var i3=M((Vqe,s3)=>{"use strict";var Fv=fe();Fv.initSync();var{CONFIG_PARAMS:n3}=(G(),D(j));function wIe(){let e=Fv.get(n3.HTTP_CORSACCESSLIST),t=Fv.get(n3.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(wIe,"getCORSOptions");s3.exports=wIe});var c3=M((Yqe,a3)=>{"use strict";var o3=fe();o3.initSync();var NIe=(G(),D(j));function CIe(){return o3.get(NIe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(CIe,"getHeaderTimeoutConfig");a3.exports=CIe});var Hv={};ye(Hv,{customFunctionsServer:()=>LIe,ready:()=>y3,start:()=>PIe});function PIe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){va||(va=T3(t),Ue.http((await va).server));let o=await va,c=(0,kv.dirname)(s),l=(0,kv.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!l3.has(c)){l3.add(c);try{o.register(vIe(c,l))}catch(u){if(u.message==="Root plugin has already booted")Tt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:y3}}async function LIe(){try{Tt.info("In Custom Functions Fastify server"+process.cwd()),Tt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Tt.debug(`Custom Functions server process ${process.pid} starting up.`),await DIe();let e=h3.get(x.HTTP_SECUREPORT)>0,t;try{t=va=await T3(e)}catch(r){throw Tt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Tt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Tt.error(`Custom Functions ${process.pid} Error: ${e}`),Tt.error(e),process.exit(1)}}async function DIe(){try{Tt.info("Custom Functions starting configuration."),await _i(),Tt.info("Custom Functions completed configuration.")}catch(e){Tt.error(e)}}function vIe(e,t){return async function(r){try{Tt.info("Custom Functions starting buildRoutes"),Tt.trace("Loading fastify routes folder "+e),(0,u3.existsSync)(e)&&r.register(p3.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Tt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Tt.error(s.message):s&&Tt.error(s),o()})}catch(n){Tt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function T3(e){Tt.info("Custom Functions starting buildServer.");let t=(0,E3.default)(e),r=(0,d3.default)(t);r.server.headersTimeout=(0,g3.default)(),r.setErrorHandler(S3.serverErrorHandler);let n=(0,_3.default)();return n&&r.register(f3.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(m3.default),await r.register(OIe),await r.after(),Vm(r),Tt.info("Custom Functions completed buildServer."),r}function y3(){if(va)return va.then?va.then(e=>e.ready()):va.ready()}var kv,u3,d3,f3,m3,p3,h3,Tt,OIe,E3,_3,g3,S3,va,l3,R3=se(()=>{kv=require("path"),u3=require("fs"),d3=b(require("fastify")),f3=b(require("@fastify/cors")),m3=b(IC()),p3=b(require("@fastify/autoload")),h3=b(fe());G();Tt=b(Q()),OIe=b(e3());Yn();E3=b(r3()),_3=b(i3()),g3=b(c3()),S3=b(XR());qo();Hr();l3=new Set;a(PIe,"start");a(LIe,"customFunctionsServer");a(DIe,"setUp");a(vIe,"buildRouteFolder");a(T3,"buildServer");a(y3,"ready")});var qv={};ye(qv,{handleApplication:()=>MIe,suppressHandleApplicationWarning:()=>UIe});function MIe(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,Ma.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,Ma.dirname)(n.urlPath),null),r.set((0,Ma.join)((0,Ma.dirname)(n.urlPath),"/"),n.absolutePath));break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,Ma.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"])??!0;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);if(d&&(o=r.get(n.pathname),o===null))return{status:301,headers:{Location:(0,Ma.join)(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,Gv.default)(n,(0,nm.realpathSync)(o))};if(i)return s(n);let c=e.options.get(["notFound"]);if(xIe(c),!c)return{status:404,body:"File not found"};let l=(0,Ma.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,Gv.default)(n,(0,nm.realpathSync)(l))}},{runFirst:!0})}function xIe(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,Ma,Gv,UIe,b3=se(()=>{nm=require("node:fs"),Ma=require("node:path"),Gv=b(require("send"));a(MIe,"handleApplication");UIe=!0;a(xIe,"validateNotFoundOption")});var $v={};ye($v,{start:()=>BIe});function BIe({override:e}){return{handleFile:a((t,r,n)=>{eb.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,A3.parse)(t))){if(process.env[s]!==void 0)if(eb.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)eb.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var A3,eb,I3=se(()=>{A3=require("dotenv"),eb=b(Q());a(BIe,"start")});var Yv={};ye(Yv,{DataLoaderError:()=>Cs,DataLoaderResult:()=>sm,EmptyFileError:()=>sb,FileParseError:()=>nb,InvalidPropertyTypeError:()=>ib,MissingRequiredPropertyError:()=>jE,RecordProcessingError:()=>zE,SystemDatabaseError:()=>ob,UnsupportedFileExtensionError:()=>rb,computeRecordHash:()=>Kv,handleApplication:()=>HIe,loadDataFile:()=>v3,suppressHandleApplicationWarning:()=>kIe});function Kv(e){let t=Object.keys(e).sort(),r={};for(let s of t)r[s]=e[s];let n=JSON.stringify(r);return(0,N3.createHash)("sha256").update(n).digest("hex")}function D3(e){return e.system&&e.system[Vv]?e.system[Vv]:tb||(tb=ze({database:"system",table:Vv,attributes:[{name:"id",type:"string",isPrimaryKey:!0},{name:"hash",type:"string"}]}),tb)}async function FIe(e,t,r,n){try{let s=D3(n),i=e?`${e}:${t}:${r}`:`${t}:${r}`;return(await s.get(i))?.hash||null}catch(s){return ri.error?.(`Failed to get stored hash: ${s.message}`),null}}async function w3(e,t,r,n,s){try{let i=D3(s),o=e?`${e}:${t}:${r}`:`${t}:${r}`;await i.put({id:o,hash:n})}catch(i){ri.error?.(`Failed to store hash: ${i.message}`)}}function HIe(e){if((0,O3.getWorkerIndex)()!==0){ri.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(a(function(r){return r.entryType!=="file"||r.eventType==="unlink"?Promise.resolve():v3(r,yn,Me).then(n=>{ri.debug?.("Data loader processed file: %s: %s",(0,Ua.basename)(r.absolutePath),n.message)})},"handleDataLoaderEntry"))}async function v3({contents:e,absolutePath:t},r,n){let s=(0,Ua.extname)(t)||"unknown",i;try{if(s===".yaml"||s===".yml")i=(0,C3.parseDocument)(e.toString()).toJSON();else if(s===".json")i=JSON.parse(e.toString());else throw new rb(t,s)}catch(d){throw d instanceof Cs?d:new nb(t,d)}if(!i)throw new sb(t);let{database:o,table:c,records:l}=i;if(!c)throw new jE(t,"table");if(!l)throw new jE(t,"records");if(!Array.isArray(l))throw new ib(t,"records","array");let u=o?`${o}.${c}`:c;if(o?.toLowerCase()==="system")throw new ob(o,c);try{let d;if(o&&n[o]&&n[o][c])ri.debug?.(`Using existing table ${u} from database tables`),d=n[o][c];else if(r&&r[c])ri.debug?.(`Using existing table ${u} from global tables`),d=r[c];else{ri.debug?.(`Table ${u} not found, creating new table`);let _=[];if(l.length>0){let R=l[0];Object.keys(R).map(S=>{let y={name:S,type:typeof R[S]};return S==="id"&&(y.isPrimaryKey=!0),y}).forEach(S=>{_.push(S)})}d=await ze({database:o,table:c,attributes:_})}let f=l.length,m=0,p=0,h=0,E=100;for(let _=0;_<l.length;_+=E){let R=l.slice(_,_+E),S=[];for(let y of R)S.push(async()=>{try{let w=null,I=y.id;I!==void 0&&(w=await d.get(I));let H=Kv(y);if(!w){m++;let z=await d.put(y);return await w3(o,c,I,H,n),z}let X=await FIe(o,c,I,n);if(!X)return h++,Promise.resolve({inserted:0,updated:0});let q={};for(let z of Object.keys(y))z in w&&(q[z]=w[z]);return Kv(q)!==X?(h++,Promise.resolve({inserted:0,updated:0})):H!==X?(p++,await d.patch(I,y),await w3(o,c,I,H,n),{updated:1}):(h++,Promise.resolve({inserted:0,updated:0}))}catch(w){if(w instanceof Cs)ri.error?.(`Record processing error: ${w.message}`);else{let I=new zE(u,w);ri.error?.(`Record processing error: ${I.message}`)}return Promise.resolve({inserted:0,updated:0,error:w.message})}});await Promise.all(S.map(y=>y()))}if(m>0||p>0){let _=`Loaded ${m} new and updated ${p} records in ${u}`;return h>0&&(_+=` (${h} records skipped)`),ri.info?.(_),new sm(t,o,c,"success",m+p,_)}else if(h>0){let _=`All ${h} records in ${u} already up-to-date`;return ri.info?.(_),new sm(t,o,c,"skipped",f,_)}else{let _=`No records to process in ${u}`;return ri.info?.(_),new sm(t,o,c,"success",0,_)}}catch(d){throw d instanceof Cs?d:new zE(u,d)}}var Ua,N3,C3,O3,xa,P3,L3,ri,Vv,tb,kIe,Cs,rb,nb,sb,jE,ib,ob,zE,sm,M3=se(()=>{Ua=require("node:path"),N3=require("node:crypto"),C3=require("yaml");Oe();O3=b(st()),xa=b(Jr()),P3=b(Ee()),L3=b(Q()),ri=L3.default.forComponent("dataLoader"),Vv="hdb_dataloader_hash";a(Kv,"computeRecordHash");a(D3,"getHashTrackingTable");a(FIe,"getStoredHash");a(w3,"storeHash");kIe=!0;a(HIe,"handleApplication");a(v3,"loadDataFile");Cs=class extends P3.ClientError{static{a(this,"DataLoaderError")}constructor(t,r=xa.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},rb=class extends Cs{static{a(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,Ua.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,xa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},nb=class extends Cs{static{a(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,Ua.basename)(t)}: ${r.message}`,xa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},sb=class extends Cs{static{a(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,Ua.basename)(t)} is empty or invalid`,xa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},jE=class extends Cs{static{a(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,Ua.basename)(t)} is missing required "${r}" property`,xa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},ib=class extends Cs{static{a(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,Ua.basename)(t)} has invalid "${r}" property, expected ${n}`,xa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},ob=class extends Cs{static{a(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,xa.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},zE=class extends Cs{static{a(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,xa.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},sm=class{static{a(this,"DataLoaderResult")}#e;#t;#n;#r;#s;#i;constructor(t,r,n,s,i,o){this.#e=t,this.#t=r||"unknown",this.#n=n||"unknown",this.#r=s,this.#s=i,this.#i=o}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#n}get status(){return this.#r}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#n,status:this.#r,count:this.#s,message:this.#i}}}});var Wv={};ye(Wv,{calculateRestHttpURL:()=>Y3,hdbServer:()=>VIe,start:()=>VIe});async function VIe(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=U3.default.isMaster,await KIe();let t=e.securePort>0;im=YIe(t,e.resources),await im.ready(),e||(e={}),e.isOperationsServer=!0;try{Ue.http(im.server,e),im.server.closeIdleConnections||await im.listen({port:0,host:"::"})}catch(r){throw im.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 KIe(){return Bi.default.trace("Configuring HarperDB process."),$3.default.setSchemaDataToGlobal(),_i()}function YIe(e,t){Bi.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let r=zIe(e),n=(0,x3.default)(r);n.server.headersTimeout=QIe(),n.setErrorHandler(Oo.serverErrorHandler);let s=JIe();s&&n.register(B3.default,s),n.register(function(o,c,l){o.setNotFoundHandler(function(u,d){n.server.emit("unhandled",u.raw,d.raw)}),l()}),n.register(H3.default),n.register(F3.default),Vm(n),n.get("/health",()=>"HarperDB is running."),n.register(k3.default,{root:G3.default.join(q3.PACKAGE_ROOT,"studio/web")});let i=Fi.default.get(Tm.LOCAL_STUDIO_ON);return!V3.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:[Oo.authAndEnsureUserOnRequest]},WIe(t)),n.post("/",{preValidation:[Oo.reqBodyValidationHandler,Oo.authHandler],config:{isOperation:!0}},jIe),Bi.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),n}function WIe(e){let t=Fi.default.get(x.HTTP_PORT),r=Fi.default.get(x.HTTP_SECUREPORT);return n=>n.hdb_user?.role?.permission?.super_user?GS(e,Y3(t,r,n)):(Bi.default.warn(`{"ip":"${n.socket.remoteAddress}", "error":"attempt to access /api/openapi/rest without being super_user"`),new K3.ServerError("Forbidden",403))}function Y3(e,t,r){let n=new URL(`${r.protocol}://${r.hostname}`);return n.hostname.toLowerCase()==="localhost"||n.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 jIe(e,t){return e.body?.operation?.startsWith("restart")&&t.header("Connection","close"),(0,Oo.handlePostRequest)(e,t)}function zIe(e){let t=Fi.default.get(om.OPERATIONSAPI_NETWORK_TIMEOUT),r=Fi.default.get(om.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:qIe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,http2:Fi.default.get(om.OPERATIONSAPI_NETWORK_HTTP2),https:e}}function JIe(){let e=Fi.default.get(om.OPERATIONSAPI_NETWORK_CORS),t=Fi.default.get(om.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===$Ie)&&(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 QIe(){return Fi.default.get(om.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??GIe}var U3,Fi,Bi,x3,B3,F3,k3,H3,G3,q3,$3,V3,Oo,K3,GIe,qIe,$Ie,om,im,W3=se(()=>{U3=b(require("cluster")),Fi=b(fe());G();Bi=b(Q()),x3=b(require("fastify")),B3=b(require("@fastify/cors")),F3=b(require("@fastify/compress")),k3=b(require("@fastify/static")),H3=b(IC()),G3=b(require("path")),q3=b(yt()),$3=b(pi()),V3=b(ae());Yn();Hr();Oo=b(XR());qo();TC();K3=b(Ee());Fi.default.initSync();GIe=6e4,qIe=1024*1024*1024,$Ie="TRUE",{CONFIG_PARAMS:om}=j;a(VIe,"operationsServer");a(KIe,"setUp");a(YIe,"buildServer");a(WIe,"restOpenAPIHandler");a(Y3,"calculateRestHttpURL");a(jIe,"handler");a(zIe,"getServerOptions");a(JIe,"getCORSOpts");a(QIe,"getHeaderTimeoutConfig")});var ub={};ye(ub,{disableNATS:()=>ZIe,publishToStream:()=>lb,setNATSReplicator:()=>jv,setPublishToStream:()=>ewe,setSubscription:()=>Xv,start:()=>XIe});function XIe(){JE.default.get(x.CLUSTERING_ENABLED)&&rwe()}function ZIe(e=!0){X3=e}function ewe(e,t){lb=e,Xv=t}function rwe(){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];jv(s,r,i)}}Vl((r,n)=>{jv(r.tableName,r.databaseName,r),n&&e6(r)}),!j3&&(j3=!0)}function jv(e,t,r){if(t==="system"&&nwe.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 Xt{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){e6(i)}static subscribe(){let i=new is;return Xv(t,e,i),i}static subscribeOnThisThread(i){return i<(JE.default.get(x.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??twe)}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 ab(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=Z3;return i}a(n,"getNATSTransaction")}function e6(e){let t=JE.default.get(x.CLUSTERING_NODENAME);lb(`${Jv.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,Qv.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 z3,Jv,Qv,J3,Q3,JE,cb,X3,lb,Xv,twe,Z3,j3,nwe,ab,zv,Zv=se(()=>{Oe();Qi();z3=b(lr()),Jv=b(Dt()),Qv=b(io());$u();J3=b(XC()),Q3=b(xn()),JE=b(fe());G();cb=b(Q());a(XIe,"start");a(ZIe,"disableNATS");lb=z3.publishToStream,Xv=J3.setSubscription;a(ewe,"setPublishToStream");twe=2;a(rwe,"assignReplicationSource");nwe=["hdb_job","hdb_raw_analytics","hdb_info"];a(jv,"setNATSReplicator");a(e6,"publishSchema");ab=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=JE.default.get(x.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||(cb.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(lb(`${Jv.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,Qv.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw cb.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},zv=class extends ab{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,Q3.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};Z3=new zv});async function i6({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await eM.get(e,{returnNonexistent:!0});i=new nM(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await eM.get(e);o&&o.delete()}i=new fb(e,t)}return n&&(n.id=e,n.user={username:t?.username},QE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function tM(){return db++,db>65500&&(db=1),db}function rM(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 xs(i.relativeURL);o.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return bt(r,()=>s?t===void 0?c.delete(o,r):c.put(o,e.data,r):c.publish(o,e.data,r))}var r6,Yc,n6,s6,t6,eM,QE,db,fb,nM,o6=se(()=>{Oe();nc();r6=b(xn()),Yc=b(Q());Ja();n6=b(st()),s6=b(nD());Hr();Dg();t6=100,eM=ze({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"}]}}]}),QE=ze({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,n6.getWorkerIndex)()===0&&(async()=>{await s6.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of QE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Ue.getUser(r.user.username));try{await rM(r,t,r)}catch{(0,Yc.warn)("Failed to publish will",t)}QE.delete(e.id)}})();a(i6,"getSession");db=1;a(tM,"getNextMessageId");fb=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,Yc.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("/"),w;for(let X=0;X<y.length;X++)if(y[X].indexOf("+")>-1)if(y[X]==="+")w=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&w)throw new Error("Filters can not be combined");let I=!0;y[y.length-1]==="#"&&(y.length--,I=!1),w&&(n=a(X=>{let q=X.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 H=y.indexOf("+");m.url="/"+(H>-1?y.slice(0,H):y).concat("").join("/")}}else m.isCollection=!1;let E=p.path,_=p.Resource,R=await bt(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let y=await _.subscribe(m,S);if(!y)return;if(!y[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let w=(async()=>{for await(let I of y)try{let H;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,H=this.needsAcknowledge(I)):(I.acknowledge?.(),H=tM());let X=I.id;if(Array.isArray(X)&&(X=cd(X)),X==null&&(X=""),await this.listener(E+"/"+X,I.value,H,t)===!1)break;this.awaitingAcks?.size>t6?await new Promise(k=>setTimeout(k,this.awaitingAcks.size-t6)):await new Promise(setImmediate)}catch(H){(0,Yc.warn)(H)}})();return y});if(R)return R.topic=s,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=tM();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 rM(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();bt(r,async()=>{try{if(!t){let n=await QE.get(this.sessionId);n?.doesExist()&&await rM(n,n.data,r)}}finally{await QE.delete(this.sessionId)}}).catch(n=>{(0,Yc.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(rM,"publish");nM=class extends fb{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=tM(),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,Yc.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,r6.getNextMonotonicTime)()),(0,Yc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),eM.put(this.sessionRecord)}}});var sM={};ye(sM,{bypassAuth:()=>swe,start:()=>owe});function swe(){f6=!0}function owe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new d6.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),rr.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=c6(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=>{rr.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(o.events.emit("connection",u),rr.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 mf(p,l);if(!E.valid)throw rr.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,am.get)(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&pb.notify?.({username:d?.username,status:oi.SUCCESS,type:Ka.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,am.get)(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&pb.error?.({username:h,status:oi.FAILURE,type:Ka.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else rr.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){o.events.emit("error",p,u),rr.error?.(p)}else if(l.required)return rr.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&iwe(u.remoteAddress)&&(d=await Gp(),rr.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=c6(u,p=>u.write(p),null,d,o);u.on("data",f),u.on("close",m),u.on("error",p=>{rr.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function c6(e,t,r,n,s){a6||(a6=!0,ap(f=>{mb>0&&f.push({metric:"mqtt-connections",connections:mb,byThread:!0})}));let i;mb++;let o,c={protocolVersion:4},l=(0,hb.parser)({protocolVersion:5});function u(f){l.parse(f)}a(u,"onMessage");function d(){mb--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),tn(!1,"connection","mqtt","disconnect"),rr.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"),rr.info?.(y);return}let m=f.cmd;if(o)o.then&&await o;else if(m!=="connect"){rr.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;We(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 Ue.getUser(f.username,f.password.toString(),r),(0,am.get)(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&pb.notify?.({username:n?.username,status:oi.SUCCESS,type:Ka.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(z){return(0,am.get)(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&pb.error?.({username:f.username,status:oi.FAILURE,type:Ka.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,z),tn(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),tn(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let z=e.deserialize||(e.deserialize=Go(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?z(f.will.payload):void 0,delete f.will.payload}o=i6({user:n,...f}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(z){return rr.error?.(z),s.events.emit("auth-failed",f,e,z),tn(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:z.code||5,returnCode:z.code||128})}s.events.emit("connected",o,e),tn(!0,"connection","mqtt","connect"),_({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0});let y=a(async(z,Y,ce,de)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",z);let te=z.indexOf("/",1),Se=te>0?z.slice(0,te):z;_({cmd:"publish",topic:z,payload:await S(Y),messageId:ce||Math.floor(Math.random()*1e8),qos:de.qos},Se);let Ne=e._socket??e;return Ne.writableNeedDrain?new Promise(Ke=>Ne.once("drain",Ke)):!Ne.closed}catch(te){return rr.error?.(te),o?.disconnect(),s.sessions.delete(o),!1}},"listener");o.setListener(y),o.sessionWasPresent&&await o.resume();break;case"subscribe":let w=[];for(let z of f.subscriptions){let Y;try{let ce=await o.addSubscription(z,z.qos>=1);Y=ce?ce.qos||0:c.protocolVersion<5?128:143}catch(ce){s.events.emit("error",ce,e,z,o),ce.statusCode?ce.statusCode===500?rr.warn?.(ce):rr.info?.(ce):rr.error?.(ce),Y=c.protocolVersion<5?128:ce.statusCode===403?135:ce.statusCode===404?143:128}w.push(Y)}await o.committed,_({cmd:"suback",granted:w,messageId:f.messageId});break;case"unsubscribe":{let z=[];for(let Y of f.unsubscriptions)z.push(o.removeSubscription(Y)?0:17);_({cmd:"unsuback",granted:z,messageId:f.messageId});break}case"pubrel":_({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let I=f.qos===2?"pubrec":"puback",H=e.deserialize||(e.deserialize=Go(r?.headers.get?.("content-type"))),q=(f.payload?.length||0)>0?H(f.payload):void 0,k;try{k=await o.publish(f,q)}catch(z){s.events.emit("error",z,e,f,o),rr.warn?.(z),f.qos>0&&_({cmd:I,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&_({cmd:I,messageId:f.messageId,reasonCode:k===!1?144:0},f.topic);break;case"pubrec":_({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(f.messageId);break;case"pingreq":_({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"),rr.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),rr.error?.(y),_({cmd:"disconnect"})}function _(y,w){let I=(0,hb.generate)(y,c);t(I),We(I.length,"bytes-sent",w,R(y),"mqtt")}a(_,"sendPacket");function R(y){return y.qos>0?y.cmd+",qos="+y.qos:y.cmd}a(R,"packetMethodName");function S(y){return Ho(y,r)}a(S,"serialize")}),l.on("error",f=>{rr.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var hb,am,l6,u6,d6,pb,rr,f6,iwe,a6,mb,m6=se(()=>{hb=require("mqtt-packet");o6();Yn();qo();as();Hr();am=b(fe());G();l6=b(ir()),u6=b(Q()),d6=require("events");YT();pb=(0,l6.loggerWithTag)("auth-event"),rr=(0,u6.forComponent)("mqtt"),f6=(0,am.get)(x.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(swe,"bypassAuth");iwe=a(e=>f6&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");a(owe,"start");mb=0;a(c6,"onSocket")});function Eb(e,t){if(t?.includes(".."))throw new iM(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var iM,oM=se(()=>{iM=class extends Error{static{a(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};a(Eb,"resolveBaseURLPath")});function p6(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 h6=se(()=>{a(p6,"deriveCommonPatternBase")});function _b(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 aM=se(()=>{a(_b,"deriveGlobOptions")});var E6,cM,XE,_6=se(()=>{oM();h6();aM();E6=require("micromatch"),cM=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"}},XE=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=Eb(this.name,this.config.urlPath),this.globOptions=_b(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new cM(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,E6.scan)(s).base),this.commonPatternBase=p6(this.patternBases)}}});function g6(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function Ou(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(g6(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(g6(n,t)){t=t.slice(n.length+1);break}}}return(0,S6.join)(e.baseURLPath,t)}var S6,lM=se(()=>{S6=require("node:path");a(g6,"pathStartsWithBase");a(Ou,"deriveURLPath")});function T6(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var Sb,y6,R6,uM,b6,A6,gb,I6=se(()=>{Sb=require("node:events");_6();y6=b(Q()),R6=b(require("chokidar")),uM=require("node:path"),b6=require("node:fs/promises");lM();A6=require("micromatch"),gb=class extends Sb.EventEmitter{static{a(this,"EntryHandler")}#e;#t;#n;#r;#s;ready;constructor(t,r,n,s){super(),this.#e=new XE(t,r,T6(n)),this.#n=s||y6.default.loggerWithTag(t),this.#r=new Set,this.#s=!1,this.ready=(0,Sb.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#i(...[t,r,n]){if(r===""&&(r="/"),!(0,A6.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,uM.join)(this.directory,r);switch(t){case"add":case"change":{let i=Ou(this.#e,r,"file"),o=(0,b6.readFile)(s).then(c=>{let l={eventType:t,entryType:"file",contents:c,stats:n,absolutePath:s,urlPath:i};this.emit("all",l),this.emit(t,l)}).finally(()=>{this.#r.delete(o),this.#c()});this.#r.add(o);break}case"unlink":{let i=Ou(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=Ou(this.#e,r,"directory"),o={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",o),this.emit(t,o);break}}}#o(t){this.emit("error",t)}#u(){this.#s=!0,this.#r.size>0&&this.#n.debug?.(`Initial scan complete, still waiting for ${this.#r.size} pending file reads`),this.#c()}#c(){this.#s&&this.#r.size===0&&this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,uM.join)(this.#e.directory,r));return this.#t=R6.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:a(r=>{let n=r.replace(/\\/g,"/"),s=t.map(i=>i.replace(/\\/g,"/"));return n!==this.#e.directory.replace(/\\/g,"/")&&s.every(i=>!n.startsWith(i))},"ignored")}).on("all",this.#i.bind(this)).on("error",this.#o.bind(this)).on("ready",this.#u.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 XE(this.name,this.directory,T6(t)),this.#a()}};a(T6,"castConfig")});var Tb,dM=se(()=>{Tb={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var Rb,w6,N6,C6,O6,P6,fM,mM,pM,hM,EM,yb,L6=se(()=>{Rb=require("events"),w6=b(require("yaml")),N6=b(require("chokidar")),C6=require("node:fs/promises"),O6=require("util"),P6=b(Q());dM();fM=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"}},mM=class extends Error{static{a(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},pM=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"}},hM=class extends Error{static{a(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},EM=class extends Error{static{a(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},yb=class extends Rb.EventEmitter{static{a(this,"OptionsWatcher")}#e;#t;#n;#r;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||P6.default.loggerWithTag(t),this.ready=(0,Rb.once)(this,"ready"),this.#t=N6.default.watch(r,{persistent:!1}).on("add",this.#o.bind(this)).on("change",this.#o.bind(this)).on("error",this.#u.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#o.bind(this))}#o(){(0,C6.readFile)(this.#e,"utf-8").then(t=>{this.#r=w6.default.parse(t),this.#r&&this.#s in this.#r?this.#n?this.#l(this.#r[this.#s],this.#n):(this.#n=this.#r[this.#s],this.emit("ready",this.#n)):this.#n&&(this.#n=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#r?(this.#a(),this.emit("remove")):(this.#a(),this.emit("ready"));return}this.emit("error",t)})}#u(t){this.emit("error",new fM(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.#a(),this.emit("remove")}#a(){this.#r=Tb,this.#n=this.#r[this.#s]}#l(t,r,n=[]){if(!this.#d(r)||!this.#d(t)){this.#m(n,t);return}for(let s of Object.keys(r))s in t||this.#m(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let o=n.concat(s),c=this.#f(o);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#m(o,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#d(c)?this.#l(i,c,o):this.#m(o,i);continue}(0,O6.isDeepStrictEqual)(i,c)||this.#m(o,i)}}#d(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#f(t){let r=this.#n;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#m(t,r){if(!this.#n)throw new mM;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new pM(t,r);let n=this.#n;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new hM(t,s);n=n[s]}if(n==null||typeof n!="object")throw new EM(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#n)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#n?this.#f(t):void 0}getAll(){return structuredClone(this.#n)}getRoot(){return this.#r}}});var ZE,D6,bb,Ab,v6=se(()=>{ZE=require("node:events");I6();L6();D6=b(Q());BD();bb=class extends Error{static{a(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},Ab=class extends ZE.EventEmitter{static{a(this,"Scope")}#e;#t;#n;#r;#s;#i;#o;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#n=t,this.#t=r,this.#e=n,this.#i=(0,D6.loggerWithTag)(this.#n),this.resources=s,this.server=i,this.#s=[],this.#o=new Set,this.ready=(0,ZE.once)(this,"ready"),this.options=new yb(t,n,this.#i).on("error",this.#c.bind(this)).on("change",this.#d.bind(this)()).on("ready",this.#u.bind(this))}get logger(){return this.#i}get name(){return this.#n}get directory(){return this.#t}get configFilePath(){return this.#e}#u(){this.emit("ready")}#c(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#a(t){let r=new gb(this.#n,this.#t,t,this.#i).on("error",this.#c.bind(this)).on("add",this.#l("add")).on("change",this.#l("change")).on("unlink",this.#l("unlink")).on("addDir",this.#l("addDir")).on("unlinkDir",this.#l("unlinkDir"));return this.#s.push(r),r}#l(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#d(){let t=this;return a(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#r){t.#r=t.#a(i);return}t.#r.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#f(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return{files:t.files,urlPath:t.urlPath}}handleEntry(t,r){let n,s=a((i,o)=>{let c=new Set,l=a(d=>{let f=o(d);if(f instanceof Promise){let m=f.catch(p=>{throw this.#i.error?.("Error in async entry handler:",p),this.#c(p),p}).finally(()=>c.delete(m));c.add(m)}},"wrapped"),u=(0,ZE.once)(i,"ready").then(async()=>{c.size>0&&await Promise.all(c),i.emit("initialLoadComplete")});return this.#o.add(u),u.finally(()=>this.#o.delete(u)),l},"wrapHandler");if(t===void 0)if(this.#r)n=this.#r;else{let i=this.#f();if(i)this.#r=this.#a(i),n=this.#r;else{this.emit("error",new bb);return}}else if(typeof t=="function"){if(this.#r)n=this.#r;else{let o=this.#f();if(o)this.#r=this.#a(o),n=this.#r;else{this.emit("error",new bb);return}}let i=s(n,t);n.on("all",i)}else if(n=this.#a(t),r){let i=s(n,r);n.on("all",i)}return n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),J4()}async waitForInitialLoads(){this.#o.size>0&&await Promise.all(this.#o)}}});function Pu(e){return typeof e=="string"&&e.trim()!==""}function _M(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>Pu(t))}function B6(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function awe(e){e.config.root&&e_.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 AM(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(B6(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let o=(0,t_.join)(e.directory,i);Ib.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 F6(e){let t=!1;if(t=await awe(e),t)return t;let r=await(0,M6.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,t_.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=Ou(e,n.path,"directory");Ib.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=Ou(e,n.path,"file"),o=await(0,U6.readFile)(s);Ib.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 e_.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var Ib,M6,e_,t_,U6,x6,wb,ki,gM,SM,TM,yM,RM,bM,AM,IM,wM,k6=se(()=>{Ib=require("node:worker_threads"),M6=b(require("fast-glob")),e_=b(Q());oM();aM();t_=require("node:path"),U6=require("node:fs/promises");lM();x6=require("micromatch"),wb=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,!Pu(this.config.files)&&!_M(this.config.files)&&!B6(this.config.files))throw new gM(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!_M(this.config.files.source)&&!Pu(this.config.files.source))throw new SM(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new TM(this);if(this.config.files.ignore!==void 0&&!_M(this.config.files.ignore)&&!Pu(this.config.files.ignore))throw new yM(this)}if(this.config.root!==void 0&&!Pu(this.config.root))throw new bM(this);if(this.config.path!==void 0&&!Pu(this.config.path))throw new IM(this);if(this.config.path&&(e_.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!Pu(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new wM(this);this.globOptions=_b(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new RM(this,r);return r.startsWith("/")&&(e_.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,x6.scan)(r).base),this.baseURLPath=Eb(this.name,this.config.urlPath)}},ki=class extends Error{static{a(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,t_.basename)(r.directory)}) ${t}`)}},gM=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)}},SM=class extends ki{static{a(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},TM=class extends ki{static{a(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},yM=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)}},RM=class extends ki{static{a(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},bM=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)}},AM=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)}},IM=class extends ki{static{a(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},wM=class extends ki{static{a(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};a(Pu,"isNonEmptyString");a(_M,"isArrayOfNonEmptyStrings");a(B6,"isObject");a(awe,"handleRoots");a(F6,"processResourceExtensionComponent")});var oR={};ye(oR,{getComponentName:()=>nR,loadComponent:()=>Pb,loadComponentDirectories:()=>$6,setErrorReporter:()=>lwe});function $6(e,t){t&&(CM=t),e&&(DM=e);let r=[];if((0,jt.existsSync)(NM)){let s=(0,jt.readdirSync)(NM,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Wr.join)(NM,o);r.push(Pb(c,CM,rA,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Pb(n,CM,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{q6=!0})}function lwe(e){Cb=e}function uwe(e){return new Promise((t,r)=>{let n=setTimeout(()=>{La.primaryStore.unlock(e,0),r(new Error("symlinking harperdb module timed out"))},1e4);if(La.primaryStore.attemptLock(e,0,()=>{clearTimeout(n),t()}))try{let s=(0,Wr.join)(e,"node_modules");(0,jt.existsSync)(s)||(0,jt.mkdirSync)(s);let i=(0,Wr.join)(s,"harperdb");if((0,jt.existsSync)(i)){if((0,jt.realpathSync)(i)===(0,jt.realpathSync)(LM.PACKAGE_ROOT))return t();(0,jt.rmSync)(i,{recursive:!0,force:!0})}(0,jt.symlinkSync)(LM.PACKAGE_ROOT,i,"dir"),t()}finally{La.primaryStore.unlock(e,0)}})}function V6(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;if(!La.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(V6(e,t))}))return new Promise((o,c)=>{n=o,s=setTimeout(()=>{c(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)});let i;return Promise.race([Promise.resolve(t.handleApplication(e)).then(async()=>{await e.waitForInitialLoads()}),new Promise((o,c)=>i=setTimeout(()=>c(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{La.primaryStore.unlock(e.name,0),clearTimeout(i)})})}async function Pb(e,t,r,n,s,i){let o=(0,jt.realpathSync)(e);if(Nb.has(o))return Nb.get(o);Nb.set(o,!0),s&&(DM=s);try{let c,l=(0,Wr.join)(e,"harperdb-config.yaml");if((0,jt.existsSync)(l)?c=n?(0,Lb.getConfigObj)():(0,PM.parseDocument)((0,jt.readFileSync)(l,"utf8")).toJSON():!n&&(0,jt.existsSync)(l=(0,Wr.join)(e,"config.yaml"))?c=(0,PM.parseDocument)((0,jt.readFileSync)(l,"utf8")).toJSON():c=Tb,!n)try{await uwe(e)}catch(m){Ba.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&Ba.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=Ob,d={};for(let m in c){let p=n?m:`${(0,Wr.basename)(e)}.${m}`;Ob=m;let h=c[m];if(!h)continue;co.loading(p);let E,_=h.package;try{if(_){let I=null;if(n)I=(0,Wr.join)(e,"components",m);else{let H=e;for(I=(0,Wr.join)(H,"node_modules",m);!(0,jt.existsSync)(I);){if(H=(0,Wr.dirname)(H),H.length<(0,G6.getHdbBasePath)().length){I=null;break}I=(0,Wr.join)(H,"node_modules",m)}}if(I)E=await Pb(I,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${_}`)}else E=cwe[m];if(!E){co.loaded(p,`Application component '${p}' processed`);continue}let R=a(I=>(I.origin=r,ze(I)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,y=S?.securePort||S?.https&&S.port,w=!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&&Ba.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let I=new Ab(m,e,l,t,Ue);await V6(I,E),co.loaded(p,`Component '${p}' loaded successfully`);continue}if(OM.isMainThread&&(E=await E.startOnMainThread?.({server:Ue,ensureTable:R,port:w,securePort:y,resources:t,...h})||E,n&&S))for(let I of[w,y])try{if(+I&&!H6.includes(I)){let H=vM.get(x.HTTP_SESSIONAFFINITY);H&&Ba.default.warn("Session affinity is not recommended and may cause memory leaks"),(H||!qS)&&(H6.push(I),aD(I,H))}}catch(H){console.error("Error listening on socket",I,H,m)}if(t.isWorker&&(E=await E.start?.({server:Ue,ensureTable:R,port:w,securePort:y,resources:t,...h})||E),DM.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let I=new wb({config:h,name:m,directory:e,module:E,resources:t});d[m]=await F6(I)}co.loaded(p,`Component '${p}' loaded successfully`)}catch(R){R.message=`Could not load component '${m}' for application '${(0,Wr.basename)(e)}' due to: ${R.message}`,Cb?.(R),((0,r_.getWorkerIndex)()===0?console:Ba.default).error(R),t.set(h.path||"/",new bl(R),null,!0),co.failed(p,R,`Could not load component '${p}'`)}}if(Ob=u,OM.isMainThread&&!q6&&i&&(0,r_.watchDir)(e,async()=>$6()),c.extensionModule||c.pluginModule){let m=await FS((0,Wr.join)(e,c.extensionModule||c.pluginModule));return Nb.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?`;Cb?.(new Error(m)),((0,r_.getWorkerIndex)()===0?console:Ba.default).error(m),co.failed((0,Wr.basename)(e),m)}for(let[m,p]of Object.entries(d))p||Ba.default.warn(`Component ${m} from (${(0,Wr.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}`,Cb?.(c),t.set("",new bl(c))}}var jt,Wr,OM,PM,vM,LM,Ba,r_,G6,Lb,NM,DM,q6,CM,cwe,H6,Nb,Cb,Ob,nR,hE=se(()=>{jt=require("node:fs"),Wr=require("node:path"),OM=require("node:worker_threads"),PM=require("yaml"),vM=b(fe()),LM=b(yt());G();e$();u$();A$();L$();D$();W$();R3();b3();I3();Ba=b(Q());M3();r_=b(st());mC();Hr();Oe();lD();G6=b(fe());W3();ER();Zv();gs();m6();Lb=b(_t());lh();vI();v6();k6();tD();OE();Vp();dM();NM=(0,Lb.resolvePath)(vM.get(x.COMPONENTSROOT)),DM=new Map;a($6,"loadComponentDirectories");cwe={REST:VS,rest:VS,graphql:iC,graphqlSchema:nC,roles:fC,jsResource:pC,fastifyRoutes:Hv,login:EC,static:qv,operationsApi:Wv,customFunctions:{},http:rR,clustering:ub,replication:ia,authentication:RE,mqtt:sM,loadEnv:$v,logging:Ba.default,dataLoader:Yv},H6=[],Nb=new Map;a(lwe,"setErrorReporter");nR=a(()=>Ob,"getComponentName");a(uwe,"symlinkHarperModule");a(V6,"sequentiallyHandleApplication");a(Pb,"loadComponent")});var aR=M((LVe,K6)=>{var{isMainThread:MM}=require("worker_threads"),{getTables:dwe}=(Oe(),D(mt)),{loadComponentDirectories:fwe,loadComponent:mwe}=(hE(),D(oR)),{resetResources:pwe}=(nc(),D(MI)),hwe=_t(),{dirname:Ewe}=require("path"),{getConnection:_we}=lr(),gwe=fe(),{CONFIG_PARAMS:Swe}=(G(),D(j)),{loadCertificates:Twe}=Ts(),{installApplications:ywe}=(AR(),D(bR)),{loadAndWatchLicensesDir:Rwe}=(uE(),D(Jy)),UM=new Map;async function bwe(e=!1){!MM&&gwe.get(Swe.CLUSTERING_ENABLED)&&_we();try{MM&&await ywe()}catch(n){console.error(n)}let t=pwe();dwe(),t.isWorker=e,MM&&Rwe(),await Twe(),await mwe(Ewe(hwe.getConfigFilePath()),t,"hdb",!0,UM),await fwe(UM,t);let r=[];for(let[n]of UM)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(bwe,"loadRootComponents");K6.exports.loadRootComponents=bwe});var st=M((vVe,Gi)=>{"use strict";__();var{Worker:Awe,MessageChannel:Iwe,parentPort:Po,isMainThread:HM,threadId:wwe,workerData:Lo}=require("worker_threads"),{PACKAGE_ROOT:Nwe}=yt(),{join:z6,isAbsolute:Cwe,extname:Owe}=require("path"),{server:J6}=(Hr(),D(bm)),{watch:Pwe,readdir:Lwe}=require("fs/promises"),{totalmem:Y6}=require("os"),{setHeapSnapshotNearHeapLimit:Dwe}=require("v8"),Wc=(G(),D(j)),Mb=fe(),Hi=Q(),{randomBytes:vwe}=require("crypto"),{_assignPackageExport:Mwe}=ai(),W6=1024*1024,Fa=[],ni=[],Uwe=50,GM=1e4,xwe="restart",Q6="request_thread_info",X6="resource_report",Z6="thread_info",eX="added-port",Bwe="ack",xM;Mwe("threads",ni);Gi.exports={startWorker:BM,restartWorkers:$M,shutdownWorkers:oX,shutdownWorkersNow:qwe,workers:Fa,setMonitorListener:Jwe,onMessageFromWorkers:$we,onMessageByType:cX,broadcast:Kwe,broadcastWithAcknowledgement:Wwe,setChildListenerByType:Gwe,getWorkerIndex:tX,getWorkerCount:rX,getTicketKeys:sX,setMainIsWorker:kwe,setTerminateTimeout:Fwe,restartNumber:Lo?.restartNumber||1};ni.onMessageByType=cX;ni.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=ni.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Gi.exports.whenThreadsStarted=new Promise(e=>{Gi.exports.threadsHaveStarted=e});Mb.get(Wc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&Dwe(1);var qM;function Fwe(e){GM=e}a(Fwe,"setTerminateTimeout");function tX(){return Lo?Lo.workerIndex:qM?0:void 0}a(tX,"getWorkerIndex");function rX(){return Lo?Lo.workerCount:qM?1:void 0}a(rX,"getWorkerCount");function kwe(e){qM=e,Gi.exports.threadsHaveStarted()}a(kwe,"setMainIsWorker");var nX=1,Db;function sX(){return Db||(Db=HM?vwe(48):Lo.ticketKeys,Db)}a(sX,"getTicketKeys");Object.defineProperty(J6,"workerIndex",{get(){return tX()}});Object.defineProperty(J6,"workerCount",{get(){return rX()}});var iX={[Q6](e,t){jwe(t)},[X6](e,t){zwe(t,e)}};function BM(e,t={}){let r=process.constrainedMemory?.()||Y6();r=Math.min(r,Y6(),2e4*W6);let n=Mb.get(Wc.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/W6/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let u of ni){let d=new Iwe;d.existingPort=u,i.push(d),o.push(d.port2)}Owe(e)||(e+=".js");let c=["--enable-source-maps","--expose-internals"];Mb.get(Wc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&c.push("--heapsnapshot-near-heap-limit=1");let l=new Awe(Cwe(e)?e:z6(Nwe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:c,argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:nX=t.threadCount,name:t.name,restartNumber:Gi.exports.restartNumber,ticketKeys:sX()},transferList:o,...t});for(let{port1:u,existingPort:d}of i)d.postMessage({type:eX,port:u,threadId:l.threadId},[u]);return Ub(l,!0),l.unexpectedRestarts=t.unexpectedRestarts||0,l.startCopy=()=>BM(e,t),l.on("error",u=>{Hi.error(`Worker index ${t.workerIndex} error:`,u)}),l.on("exit",u=>{Fa.splice(Fa.indexOf(l),1),!l.wasShutdown&&t.autoRestart!==!1&&(l.unexpectedRestarts<Uwe?(t.unexpectedRestarts=l.unexpectedRestarts+1,BM(e,t)):Hi.error(`Thread has been restarted ${l.restarts} times and will not be restarted`))}),l.on("message",u=>{iX[u.type]?.(u,l)}),Fa.push(l),Xwe(),t.onStarted&&t.onStarted(l),l.name=t.name,l}a(BM,"startWorker");var Hwe=[Wc.THREAD_TYPES.HTTP];async function $M(e=null,t=Math.max(nX>3,1),r=!0){if(HM){try{process.chdir(process.cwd())}catch(o){Hi.error("Unable to reestablish current working directory",o)}if(r){let{loadRootComponents:o}=aR();await o()}Gi.exports.restartNumber++,t<1&&(t=t*Fa.length);let n=[],s=[];for(let o of Fa.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Hi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Gi.exports.restartNumber,type:Wc.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Hwe.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()},GM*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===Wc.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}=jf();r&&(e==="http"||!e)&&Mb.get(Wc.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Po.postMessage({type:xwe,workerType:e})}a($M,"restartWorkers");function Gwe(e,t){iX[e]=t}a(Gwe,"setChildListenerByType");function oX(e){return $M(e,1/0,!1)}a(oX,"shutdownWorkers");function qwe(e){return oX(e),Promise.all(Fa.map(t=>t.terminate()))}a(qwe,"shutdownWorkersNow");var aX=[];function $we(e){aX.push(e)}a($we,"onMessageFromWorkers");var FM=new Map;function cX(e,t){let r=FM.get(e);r||FM.set(e,r=[]),r.push(t)}a(cX,"onMessageByType");var Vwe=10;async function Kwe(e,t){let r=0;for(let n of ni)try{n.postMessage(e),r++>Vwe&&(r=0,await new Promise(setImmediate))}catch(s){Hi.error("Unable to send message to worker",s)}t&&uX(e,null)}a(Kwe,"broadcast");var vb=new Map,Ywe=1;function Wwe(e){return new Promise(t=>{let r=0;for(let n of ni)try{let s=Ywe++,i=a(()=>{vb.delete(s),--r===0&&t(),n!==Po&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,vb.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of vb)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Hi.error("Unable to send message to worker",s)}r===0&&t()})}a(Wwe,"broadcastWithAcknowledgement");function jwe(e){e.postMessage({type:Z6,workers:lX()})}a(jwe,"sendThreadInfo");function lX(){let e=Date.now();return Fa.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(lX,"getChildWorkerInfo");function zwe(e,t){e.resources=t,e.resources.updated=Date.now()}a(zwe,"recordResourceReport");var kM;function Jwe(e){kM=e}a(Jwe,"setMonitorListener");var Qwe=1e3,j6=!1;function Xwe(){j6||(j6=!0,setInterval(()=>{for(let e of Fa){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}kM&&kM()},Qwe).unref())}a(Xwe,"startMonitoring");var Zwe=1e3;if(Po&&Lo?.addPorts){Ub(Po);for(let e=0,t=Lo.addPorts.length;e<t;e++){let r=Lo.addPorts[e];r.threadId=Lo.addThreadIds[e],Ub(r)}setInterval(()=>{let e=process.memoryUsage();Po.postMessage({type:X6,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Zwe).unref(),xM=a(()=>new Promise((e,t)=>{Po.on("message",r),Po.postMessage({type:Q6});function r(n){n.type===Z6&&(Po.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else xM=lX;Gi.exports.getThreadInfo=xM;function Ub(e,t){ni.push(e),e.on("message",r=>{if(r.type===eX)r.port.threadId=r.threadId,Ub(r.port);else if(r.type===Bwe){let n=vb.get(r.id);n&&n()}else uX(r,e)}).on("close",()=>{ni.splice(ni.indexOf(e),1)}).on("exit",()=>{ni.splice(ni.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Ub,"addPort");function uX(e,t){for(let n of aX)n(e,t);let r=FM.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Hi.error(s)}}a(uX,"notifyMessageListeners");if(HM){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await Lwe(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(z6(s,o.name));try{for await(let{filename:o}of Pwe(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await $M(),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");Gi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else Po.on("message",async e=>{let{type:t}=e;t===Wc.ITC_EVENT_TYPES.SHUTDOWN&&(Gi.exports.restartNumber=e.restartNumber,Po.unref(),setTimeout(()=>{Hi.warn("Thread did not voluntarily terminate",wwe),process.exit(0)},GM).unref())})});var EX=M((BVe,hX)=>{"use strict";var{promises:cm,createReadStream:eNe,createWriteStream:tNe}=require("fs"),{createGzip:rNe}=require("zlib"),{promisify:nNe}=require("util"),{pipeline:sNe}=require("stream"),iNe=nNe(sNe),KM=require("path"),pX=fe();pX.initSync();var xb=Q(),{CONFIG_PARAMS:oNe,ITC_EVENT_TYPES:UVe}=(G(),D(j)),{onMessageFromWorkers:xVe}=st(),{convertToMS:dX}=ae(),{onStorageReclamation:aNe}=(lg(),D(S0)),cNe=6e4,lNe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",uNe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",VM,fX;hX.exports=dNe;function dNe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:o}){if(s===!1)return;let c=0;if(aNe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(lNe);if(!i)throw new Error(uNe);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=dX(r));let d;return VM=Date.now(),xb.trace("Log rotate enabled, maxSize:",t,"interval:",r),fX=setInterval(async()=>{if(l){let f;f=await cm.stat(e.path),f.size>=l&&(d=await mX(e.path,i))}if(u&&Date.now()-VM>=u&&(d=await mX(e.path,i),VM=Date.now()),n||c){let f=dX(n??"1M")/(1+c);c=0;let m=await cm.readdir(i);for(let p of m)try{let h=await cm.stat(KM.join(i,p));Date.now()-h.mtimeMs>f&&await cm.unlink(KM.join(i,p))}catch(h){xb.error("Error trying to remove log",p,h)}}},o??cNe).unref(),{end(){clearInterval(fX)},getLastRotatedLogPath(){return d}}}a(dNe,"logRotator");async function mX(e,t){let r=pX.get(oNe.LOGGING_ROTATION_COMPRESS),n=KM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await cm.rename(e,n),r&&(e=n,n+=".gz",await iNe(eNe(e),rNe(),tNe(n)),await cm.unlink(e)),xb.closeLogFile(),xb.notify(`hdb.log rotated, old log moved to ${n}`),n}a(mX,"moveLogFile")});var yX={};ye(yX,{RootConfigWatcher:()=>YM});var _X,gX,SX,Bb,TX,YM,RX=se(()=>{_X=b(require("chokidar")),gX=require("node:fs/promises"),SX=b(_t()),Bb=require("node:stream"),TX=require("yaml"),YM=class extends Bb.EventEmitter{static{a(this,"RootConfigWatcher")}#e;#t;#n;ready;constructor(){super(),this.#e=(0,SX.getConfigFilePath)(),this.ready=(0,Bb.once)(this,"ready"),this.#t=_X.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,gX.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,TX.parse)(t);if(!this.#n){this.#n=r,this.emit("ready",this.#n);return}this.emit("change",this.#n=r)}).catch(t=>{})}close(){return this.#t.close(),this.#n=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#n}}});var Q=M((qVe,Kb)=>{"use strict";var ka=require("fs-extra"),{workerData:fNe,threadId:mNe,isMainThread:CX}=require("worker_threads"),i_=require("path"),OX=require("yaml"),PX=require("properties-reader"),jr=(G(),D(j)),bX=rl(),pNe=require("os"),{PACKAGE_ROOT:eU}=yt(),{_assignPackageExport:hNe}=ai(),{Console:ENe}=require("console"),jM=process.env.IS_SCRIPTED_SERVICE?function(){}:process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),AX=new Map,{join:Ha}=i_,IX=1e4,mr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},_Ne={STDOUT:"stdOut",STDERR:"stdErr"},GVe=Ha(eU,"logs"),gNe=Ha(eU,"config/yaml/",jr.HDB_DEFAULT_CONFIG_FILE),SNe=1e4,o_,a_,Fb,LX,Do,zM,WM,Hb,xt,es,Gb,qb,lm,s_,n_;function kb(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=i_.dirname(n)):t.root?n=Ha(t.root,zM):(n=xt.path,t.root||(t.root=i_.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=mr[t.level]??xt?.level??mr.info,DX(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(xt.path===e.path&&r)}a(kb,"updateLogger");function DX(e){let t=e.conditional??(e.conditional={});t.notify=mr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=mr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=mr.error>=e.level?e.error.bind(e):void 0,t.warn=mr.warn>=e.level?e.warn.bind(e):void 0,t.info=mr.info>=e.level?e.info.bind(e):void 0,t.debug=mr.debug>=e.level?e.debug.bind(e):void 0,t.trace=mr.trace>=e.level?e.trace.bind(e):void 0}a(DX,"updateConditional");async function JM(){n_||(n_=new kNe,await n_.ready,n_.on("change",JM));let e=n_.config,t=e.logging??{};kb(xt,t),Hb=xt.path,o_=t.console??!1,t.external&&kb(es,t.external);for(let r in e){let n=e[r];n.logging?kb(xt.forComponent(r),n.logging,r):xt.hasComponent(r)&&kb(xt.forComponent(r),t,r)}}a(JM,"updateLogSettings");var QM=class extends ENe{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){Ln="trace",this.level<=mr.trace&&super.info(...t),Ln="info"}debug(...t){Ln="debug",this.level<=mr.debug&&super.info(...t),Ln="info"}info(...t){Ln="info",this.level<=mr.info&&super.info(...t),Ln="info"}warn(...t){Ln="warn",this.level<=mr.warn&&super.warn(...t),Ln="info"}error(...t){Ln="error",this.level<=mr.error&&super.error(...t),Ln="info"}fatal(...t){lm=!0;try{Ln="fatal",this.level<=mr.fatal&&super.error(...t),Ln="info"}finally{lm=!1}}notify(...t){lm=!0;try{Ln="notify",this.level<=mr.notify&&super.info(...t),Ln="info"}finally{lm=!1}}withTag(t){return MX(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};s_===void 0&&vX();Kb.exports={notify:CNe,fatal:ONe,error:ZM,warn:PNe,info:INe,debug:NNe,trace:wNe,logLevel:Do,loggerWithTag:MX,suppressLogging:bNe,initLogSettings:vX,logCustomLevel:LNe,closeLogFile:UX,createLogger:Vb,logsAtLevel:yNe,getLogFilePath:a(()=>Hb,"getLogFilePath"),forComponent:a(e=>xt.forComponent(e),"forComponent"),setMainLogger:BNe,setLogLevel:vNe,OUTPUTS:_Ne,AuthAuditLog:FNe,start:JM,startOnMainThread:JM,errorToString:xNe,disableStdio:TNe};function TNe(){jM=a(function(){},"nativeStdWrite")}a(TNe,"disableStdio");Kb.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)}};hNe("logger",Kb.exports.externalLogger);function yNe(e){return mr[Do]<=mr[e]}a(yNe,"logsAtLevel");function vX(e=!1){try{if(s_===void 0||e){UX();let t=DNe(),r=bX(["ROOTPATH"]);try{s_=PX(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!ka.pathExistsSync(Ha(r.ROOTPATH,jr.HDB_CONFIG_FILE)))throw s}let n;if({level:Do,configLogPath:WM,toFile:a_,logConsole:o_,colorMode:LX,rotation:n,toStream:Fb}=MNe(r.ROOTPATH?Ha(r.ROOTPATH,jr.HDB_CONFIG_FILE):s_.get("settings_path")),zM=jr.LOG_NAMES.HDB,Hb=Ha(WM,zM),xt=Vb({path:Hb,level:Do,stdStreams:Fb,rotation:n}),es=xt.forComponent("external"),es.tag=null,CX)try{require("segfault-handler").registerHandler(Ha(WM,"crash.log"))}catch{}}}catch(t){if(s_=void 0,t.code===jr.NODE_ERROR_CODES.ENOENT||t.code===jr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=bX(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){Do=o;continue}i===jr.CONFIG_PARAMS.LOGGING_CONSOLE&&(o_=i)}let{defaultLevel:n}=UNe();a_=!1,Fb=!0,Do=Do===void 0?n:Do,xt=Vb({level:Do}),es=xt.forComponent("external"),es.tag=null;return}throw ZM("Error initializing log settings"),ZM(t),t}process.env.DEV_MODE&&(Fb=!0),RNe()}a(vX,"initLogSettings");var jc=!0;function RNe(){a_&&(process.stdout.write=function(e){return typeof e=="string"&&jc&&o_&&(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(cRe,"parseNPMStdErr");function lRe(e){let t=LR.object({projects:LR.array().min(1).items(LR.string()).required(),dry_run:LR.boolean().default(!1)});return nRe.validateBySchema(e,t)}a(lRe,"modulesValidator")});var vD={};ye(vD,{describeMetric:()=>K4,describeMetricOp:()=>DD,get:()=>$4,getOp:()=>PD,listMetrics:()=>V4,listMetricsOp:()=>LD});async function dRe(e){return(await Eg().get(e)).hostname}function H4(e,t){return e.length===0||e.includes(t)}function PD(e){return wE.trace?.("get_analytics request:",e),$4(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function q4(e){return"conditions"in e?{...e,conditions:e.conditions.map(q4)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function $4(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(q4));let o=t??[];H4(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),wE.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],H4(o,"node")&&(wE.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await dRe(d)),wE.trace?.("get_analytics result:",JSON.stringify(u)),u})}function LD(e){return V4(e.metric_types)}async function V4(e=["builtin"]){let t=[],r=Object.values(Yo);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 DD(e){return K4(e.metric)}async function K4(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 wE.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var G4,uRe,wE,MD=se(()=>{G4=b(Q());uI();dI();({forComponent:uRe}=G4.default),wE=uRe("analytics").conditional;a(dRe,"lookupHostname");a(H4,"isSelected");a(PD,"getOp");a(q4,"conformCondition");a($4,"get");a(LD,"listMetricsOp");a(V4,"listMetrics");a(DD,"describeMetricOp");a(K4,"describeMetric")});var DR,vR,NE,MR=se(()=>{DR={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},vR=Object.keys(DR),NE="primary"});function W4(e){return Y4.validateBySchema(e,hRe)}var CE,Y4,fRe,mRe,pRe,hRe,j4=se(()=>{CE=b(require("joi")),Y4=b(ft());MR();fRe=vR,mRe=Object.entries(DR).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),pRe=a(()=>{let e=CE.default.string().min(1).max(512);return Object.entries(DR).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:CE.default.string().valid(...r.allowedValues).messages({"any.only":mRe[t]})}))}),e.required()},"createStatusValidationSchema"),hRe=CE.default.object({id:CE.default.string().valid(...fRe).required(),status:pRe()});a(W4,"validateStatus")});function z4(){UD||(UD=La.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),xD=new Uint8Array(UD))}function J4(){z4(),xD[0]=1}function Q4(){return z4(),xD[0]===1}var UD,xD,BD=se(()=>{OE();a(z4,"ensureInitialized");a(J4,"requestRestart");a(Q4,"restartNeeded")});var qD={};ye(qD,{DEFAULT_STATUS_ID:()=>NE,STATUS_IDS:()=>vR,Status:()=>La,clear:()=>kD,get:()=>HD,set:()=>GD});function LE(){return FD||(FD=ze({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),FD}function kD({id:e}){return PE.debug?.("clearStatus",e),LE().delete(e)}async function _Re(){PE.debug?.("getAllStatus");let e=LE().get({}),t=await $p.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=Q4();return{systemStatus:e,componentStatus:r,restartRequired:n}}function HD({id:e}){return e?(PE.debug?.("getStatus",e),LE().get(e)):(PE.debug?.("getStatus","all"),_Re())}function GD({status:e,id:t=NE}){let r=W4({status:e,id:t});if(r)throw(0,UR.handleHDBError)(r,r.message,ERe.BAD_REQUEST);return PE.debug?.("setStatus",t,e),LE().put(t,{status:e})}var UR,X4,ERe,FD,La,PE,OE=se(()=>{Oe();UR=b(Ee()),X4=b(ir());j4();MR();Vp();BD();MR();({HTTP_STATUS_CODES:ERe}=UR.hdbErrors);a(LE,"getStatusTable");La={get primaryStore(){return LE().primaryStore}},PE=(0,X4.loggerWithTag)("status");a(kD,"clearStatus");a(_Re,"getAllStatus");a(HD,"getStatus");a(GD,"setStatus")});var YD={};ye(YD,{getFingerprint:()=>VD,getRegistrationInfo:()=>$D,setLicense:()=>KD});function $D(){return{version:Z4.packageJson.version,deprecated:!0}}function VD(){return{message:"this-is-deprecated",deprecated:!0}}function KD(){return{deprecated:!0}}var Z4,WD=se(()=>{Z4=b(yt());a($D,"getRegistrationInfo");a(VD,"getFingerprint");a(KD,"setLicense")});var tJ=M((ZGe,eJ)=>{"use strict";var DE=require("alasql"),yu=require("recursive-iterator"),Di=Q(),gRe=ae(),vE=(G(),D(j)),jD=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,TRe(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=>vE.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=>!vE.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][vE.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=SRe(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=>!vE.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new DE.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 SRe(e){return e.filter(t=>t[vE.PERMS_CRUD_ENUM.READ])}a(SRe,"filterReadRestrictedAttrs");function TRe(e,t,r,n,s){yRe(e,t,r,n,s)}a(TRe,"interpretAST");function ME(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(ME,"addSchemaTableToMap");function yRe(e,t,r,n,s){if(!e){Di.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof DE.yy.Insert?IRe(e,t,r):e instanceof DE.yy.Select?RRe(e,t,r,n,s):e instanceof DE.yy.Update?bRe(e,t,r):e instanceof DE.yy.Delete?ARe(e,t,r):Di.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(yRe,"getRecordAttributesAST");function RRe(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(gRe.isEmptyOrZeroLength(i)){Di.error("No schema specified");return}e.from.forEach(c=>{ME(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),ME(c.table,t,r,n,s)});let o=new yu(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 yu(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 yu(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 yu(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(RRe,"getSelectAttributes");function bRe(e,t,r){if(!e){Di.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new yu(e.columns),s=e.table.databaseid;ME(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&zD(e.table.tableid,s,i.columnid,t,r)}a(bRe,"getUpdateAttributes");function ARe(e,t,r){if(!e){Di.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new yu(e.where),s=e.table.databaseid;ME(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&zD(e.table.tableid,s,i.columnid,t,r)}a(ARe,"getDeleteAttributes");function IRe(e,t,r){if(!e){Di.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new yu(e.columns),s=e.into.databaseid;ME(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&zD(e.into.tableid,s,i.columnid,t,r)}a(IRe,"getInsertAttributes");function zD(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(zD,"pushAttribute");eJ.exports=jD});var kR=M((tqe,gJ)=>{"use strict";var JD=Vn(),xR=Sn(),ws=ry(),BE=Yl(),QD=Bl(),wRe=sP(),NRe=_Y(),FE=(Yn(),D(gi)),BR=ah(),Dr=Q(),CRe=uP(),ORe=py(),PRe=BP(),LRe=Ey(),DRe=HP(),vRe=GP(),MRe=VP(),URe=YP(),XD=yy(),Da=ae(),sJ=jf(),On=(G(),D(j)),iJ=J2(),xRe=qh(),oJ=(Yd(),D(mh)),aJ=(ER(),D(RE)),cJ=_t(),fr=wD(),lJ=PR(),BRe=OD(),Jf=Ts(),uJ=(Rf(),D(yf)),ZD=(MD(),D(vD)),ev=(OE(),D(qD)),dJ=(uE(),D(Jy)),tv=(WD(),D(YD)),fJ=KC(),{handleHDBError:Xn,hdbErrors:mJ}=Ee(),{HDB_ERROR_MSGS:fn,HTTP_STATUS_CODES:UE}=mJ,ee=new Map,pJ="delete",$c="insert",Xs="read",Ru="update",xE="describe",rJ=BE.describeSchema.name,nJ=BE.describeTable.name,hJ={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},FRe={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},kRe="catchup",HRe="handleGetJob",GRe="handleGetJobsByStartDate",FR={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},qRe=[ws.createTable.name,ws.createAttribute.name,ws.dropTable.name,ws.dropAttribute.name],EJ={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}};ee.set(JD.insert.name,new ne(!1,[$c]));ee.set(JD.update.name,new ne(!1,[Ru]));ee.set(JD.upsert.name,new ne(!1,[$c,Ru]));ee.set(xR.searchByConditions.name,new ne(!1,[Xs]));ee.set(xR.searchByHash.name,new ne(!1,[Xs]));ee.set(xR.searchByValue.name,new ne(!1,[Xs]));ee.set(xR.search.name,new ne(!1,[Xs]));ee.set(ws.createSchema.name,new ne(!0,[]));ee.set(ws.createTable.name,new ne(!0,[]));ee.set(ws.createAttribute.name,new ne(!1,[$c]));ee.set(ws.dropSchema.name,new ne(!0,[]));ee.set(ws.dropTable.name,new ne(!0,[]));ee.set(ws.dropAttribute.name,new ne(!0,[]));ee.set(BE.describeSchema.name,new ne(!1,[Xs]));ee.set(BE.describeTable.name,new ne(!1,[Xs]));ee.set(QD.deleteRecord.name,new ne(!1,[pJ]));ee.set(FE.addUser.name,new ne(!0,[]));ee.set(FE.alterUser.name,new ne(!0,[]));ee.set(FE.dropUser.name,new ne(!0,[]));ee.set(FE.listUsersExternal.name,new ne(!0,[]));ee.set(BR.listRoles.name,new ne(!0,[]));ee.set(BR.addRole.name,new ne(!0,[]));ee.set(BR.alterRole.name,new ne(!0,[]));ee.set(BR.dropRole.name,new ne(!0,[]));ee.set(CRe.name,new ne(!0,[]));ee.set(ORe.name,new ne(!0,[]));ee.set(PRe.name,new ne(!0,[]));ee.set(LRe.name,new ne(!0,[]));ee.set(DRe.name,new ne(!0,[]));ee.set(vRe.name,new ne(!0,[]));ee.set(XD.setRoutes.name,new ne(!0,[]));ee.set(XD.getRoutes.name,new ne(!0,[]));ee.set(XD.deleteRoutes.name,new ne(!0,[]));ee.set(cJ.setConfiguration.name,new ne(!0,[]));ee.set(MRe.clusterStatus.name,new ne(!0,[]));ee.set(URe.name,new ne(!0,[]));ee.set(QD.deleteFilesBefore.name,new ne(!0,[]));ee.set(QD.deleteAuditLogsBefore.name,new ne(!0,[]));ee.set(sJ.restart.name,new ne(!0,[]));ee.set(sJ.restartService.name,new ne(!0,[]));ee.set(wRe.name,new ne(!0,[]));ee.set(NRe.name,new ne(!0,[Xs]));ee.set(ws.cleanupOrphanBlobs.name,new ne(!0,[]));ee.set(xRe.systemInformation.name,new ne(!0,[]));ee.set(cJ.getConfiguration.name,new ne(!0,[]));ee.set(lJ.readTransactionLog.name,new ne(!0,[]));ee.set(lJ.deleteTransactionLogsBefore.name,new ne(!0,[]));ee.set(BRe.installModules.name,new ne(!0,[]));ee.set(Jf.createCsr.name,new ne(!0,[]));ee.set(Jf.signCertificate.name,new ne(!0,[]));ee.set(Jf.listCertificates.name,new ne(!0,[]));ee.set(Jf.addCertificate.name,new ne(!0,[]));ee.set(Jf.removeCertificate.name,new ne(!0,[]));ee.set(Jf.getKey.name,new ne(!0,[]));ee.set(uJ.addNodeBack.name,new ne(!0,[]));ee.set(uJ.removeNodeBack.name,new ne(!0,[]));ee.set(ZD.getOp.name,new ne(!1,[Xs]));ee.set(ZD.listMetricsOp.name,new ne(!1,[Xs]));ee.set(ZD.describeMetricOp.name,new ne(!1,[Xs]));ee.set(ev.clear.name,new ne(!0,[]));ee.set(ev.get.name,new ne(!0,[]));ee.set(ev.set.name,new ne(!0,[]));ee.set(dJ.installUsageLicenseOp.name,new ne(!0,[]));ee.set(dJ.getUsageLicensesOp.name,new ne(!0,[]));ee.set(tv.getFingerprint.name,new ne(!0,[]));ee.set(tv.setLicense.name,new ne(!0,[]));ee.set(oJ.createTokens.name,new ne(!1,[]));ee.set(oJ.refreshOperationToken.name,new ne(!1,[]));ee.set(aJ.login.name,new ne(!1,[]));ee.set(aJ.logout.name,new ne(!1,[]));ee.set(fr.customFunctionsStatus.name,new ne(!0,[]));ee.set(fr.getCustomFunctions.name,new ne(!0,[]));ee.set(fr.getComponents.name,new ne(!0,[]));ee.set(fr.getComponentFile.name,new ne(!0,[]));ee.set(fr.setComponentFile.name,new ne(!0,[]));ee.set(fr.dropComponent.name,new ne(!0,[]));ee.set(fr.getCustomFunction.name,new ne(!0,[]));ee.set(fr.setCustomFunction.name,new ne(!0,[]));ee.set(fr.dropCustomFunction.name,new ne(!0,[]));ee.set(fr.addComponent.name,new ne(!0,[]));ee.set(fr.dropCustomFunctionProject.name,new ne(!0,[]));ee.set(fr.packageComponent.name,new ne(!0,[]));ee.set(fr.deployComponent.name,new ne(!0,[]));ee.set(fr.addSSHKey.name,new ne(!0,[]));ee.set(fr.getSSHKey.name,new ne(!0,[]));ee.set(fr.updateSSHKey.name,new ne(!0,[]));ee.set(fr.deleteSSHKey.name,new ne(!0,[]));ee.set(fr.listSSHKeys.name,new ne(!0,[]));ee.set(fr.setSSHKnownHosts.name,new ne(!0,[]));ee.set(fr.getSSHKnownHosts.name,new ne(!0,[]));ee.set(tv.getRegistrationInfo.name,new ne(!1,[]));ee.set(FE.userInfo.name,new ne(!1,[]));ee.set(BE.describeAll.name,new ne(!1,[]));ee.set(HRe,new ne(!1,[]));ee.set(GRe,new ne(!0,[]));ee.set(kRe,new ne(!0,[]));ee.set(FR.CSV_DATA_LOAD,new ne(!1,[$c,Ru]));ee.set(FR.CSV_URL_LOAD,new ne(!1,[$c,Ru]));ee.set(FR.CSV_FILE_LOAD,new ne(!1,[$c,Ru]));ee.set(FR.IMPORT_FROM_S3,new ne(!1,[$c,Ru]));ee.set(EJ.EXPORT_TO_S3,new ne(!0,[]));ee.set(EJ.EXPORT_LOCAL,new ne(!0,[]));ee.set(On.VALID_SQL_OPS_ENUM.DELETE,new ne(!1,[pJ]));ee.set(On.VALID_SQL_OPS_ENUM.SELECT,new ne(!1,[Xs]));ee.set(On.VALID_SQL_OPS_ENUM.INSERT,new ne(!1,[$c]));ee.set(On.VALID_SQL_OPS_ENUM.UPDATE,new ne(!1,[Ru]));gJ.exports={verifyPerms:VRe,verifyPermsAst:$Re,verifyBulkLoadAttributePerms:YRe};function $Re(e,t,r){if(Da.isEmptyOrZeroLength(e))throw Dr.info("verify_perms_ast has an empty user parameter"),Xn(new Error);if(Da.isEmptyOrZeroLength(t))throw Dr.info("verify_perms_ast has an empty user parameter"),Xn(new Error);if(Da.isEmptyOrZeroLength(r))throw Dr.info("verify_perms_ast has a null operation parameter"),Xn(new Error);try{let n=tJ(),s=require("alasql"),i=new fJ,o=new n(e),c=o.getSchemas(),l=new Map;if((!c||c.length===0)&&o.affected_attributes&&o.affected_attributes.size>0)throw Dr.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&&hJ[r])throw Xn(new Error,fn.DROP_SYSTEM,UE.FORBIDDEN);if(u&&!d)return null;let f=iJ.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=_J(t,r,l,i);return m||(l.forEach((p,h)=>{for(let E=0;E<p.length;E++){let _=o.getAttributesBySchemaTableName(h,p[E]),R=nv(t.role.permission,h,p[E]);rv(_,R,r,p[E],h,i)}}),i.getPermsResponse())}catch(n){throw Xn(n)}}a($Re,"verifyPermsAst");function VRe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Dr.info("null required parameter in verifyPerms"),Xn(new Error,fn.DEFAULT_INVALID_REQUEST,UE.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 fJ;if(Da.isEmptyOrZeroLength(e.hdb_user?.role)||Da.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Dr.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(On.SYSTEM_SCHEMA_NAME)||s===On.SYSTEM_SCHEMA_NAME;if(l&&d&&FRe[e.operation]&&(i===On.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===On.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===On.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&hJ[r])throw Xn(new Error,fn.DROP_SYSTEM,UE.FORBIDDEN);if(l&&!d||u===!0&&(r===ws.createSchema.name||r===ws.dropSchema.name))return null;if(qRe.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=iJ.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===rJ||r===nJ)&&!f.super_user){if(s===On.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(fn.SCHEMA_PERM_ERROR(s));if(r===rJ&&(!f[s]||!f[s][xE]))return c.handleInvalidItem(fn.SCHEMA_NOT_FOUND(s));if(r===nJ&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][xE]))return c.handleInvalidItem(fn.TABLE_NOT_FOUND(s,i))}let m=_J(e.hdb_user,r,o,c,n);if(m)return m;if(ee.get(r)&&ee.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&On.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],_=f[s].tables[i];_[On.PERMS_CRUD_ENUM.READ]&&(_.attribute_permissions.length>0?_.attribute_permissions.filter(S=>S[On.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=KRe(e),h=nv(e.hdb_user?.role?.permission,s,i);return rv(p,h,r,i,s,c,n),c.getPermsResponse()}a(VRe,"verifyPerms");function _J(e,t,r,n,s){if(Da.arrayHasEmptyValues([e,t,r]))throw Dr.info("hasPermissions has an invalid parameter"),Xn(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||ee.get(t).requires_su))return null;if(!ee.get(t))throw Dr.info(`operation ${t} not found.`),Xn(new Error,fn.OP_NOT_FOUND(t),UE.BAD_REQUEST);if(ee.get(t)&&ee.get(t).requires_su)return Dr.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][xE]===!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[xE]===!1)n.addInvalidItem(fn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=ee.get(t).perms;!Da.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],_=f[E];(_==null||_===!1)&&(Dr.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 Dr.error(p),Dr.error(m),Xn(mJ.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}a(_J,"hasPermissions");function rv(e,t,r,n,s,i,o){if(!e||!t)throw Dr.info("no attributes specified in checkAttributePerms."),Xn(new Error);let c=ee.get(r).perms;if(!c||c==="")throw Dr.info(`no permissions found for ${r} in checkAttributePerms().`),Xn(new Error);if(Da.isEmptyOrZeroLength(t))return Dr.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[xE]===!1){i.addInvalidItem(fn.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(On.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Xs)throw Xn(new Error,fn.SYSTEM_TIMESTAMP_PERMS_ERR,UE.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(rv,"checkAttributePerms");function KRe(e){let t=new Set;try{if(e.action)return t;if(e.operation===On.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){Dr.info(r)}return t}a(KRe,"getRecordAttributes");function nv(e,t,r){let n=new Map;if(Da.isEmpty(e))return Dr.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{Dr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(nv,"getAttributePermissions");function YRe(e,t,r,n,s,i,o){let c=new Set(i),l=nv(e,n,s);rv(c,l,t,s,n,o,r)}a(YRe,"verifyBulkLoadAttributePerms")});var iv=M((nqe,SJ)=>{"use strict";var sv=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};SJ.exports=sv});var dv=M((lqe,xJ)=>{"use strict";var HR=Vn(),qR=BC(),WRe=require("needle"),vi=(G(),D(j)),iqe=Dt(),Qf=ae(),{handleHDBError:tr,hdbErrors:CJ}=Ee(),{HTTP_STATUS_CODES:mn,HDB_ERROR_MSGS:vr,CHECK_LOGS_WRAPPER:Au}=CJ,Xf=Q(),ov=require("papaparse");Qf.promisifyPapaParse();var Mi=require("fs-extra"),jRe=require("path"),{chain:TJ}=require("stream-chain"),yJ=require("stream-json/streamers/StreamArray"),RJ=require("stream-json/utils/Batch"),bJ=require("stream-chain/utils/comp"),{finished:AJ}=require("stream"),zRe=fe(),OJ=FC(),JRe=kC(),{BulkLoadFileObject:cv,BulkLoadDataObject:QRe}=EV(),lv=KC(),{verifyBulkLoadAttributePerms:PJ}=kR(),oqe=iv(),aqe=lr(),cqe=io(),{databases:XRe}=(Oe(),D(mt)),{coerceType:ZRe}=(Lg(),D(kq)),IJ="No records parsed from csv file.",bu=`${zRe.get("HDB_ROOT")}/tmp`,{schemaRegex:ebe}=Zi(),wJ=1024*1024*2,NJ=5e3,tbe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};xJ.exports={csvDataLoad:rbe,csvURLLoad:nbe,csvFileLoad:sbe,importFromS3:ibe};async function rbe(e,t){let r=qR.dataObject(e);if(r)throw tr(r,r.message,mn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=vJ(e.schema,e.table),i=ov.parse(e.data,{header:!0,skipEmptyLines:!0,transform:av.bind(null,s),dynamicTyping:!1}),o=new lv;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&PJ(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 tr(new Error,c,mn.BAD_REQUEST,void 0,void 0,!0);let l=new QRe(e.action,e.schema,e.table,i.data);return n=await OJ.callOperationFunctionAsAwait(MJ,l,null),n.message===IJ?IJ:UJ(n.records,n.number_written)}catch(s){throw Iu(s)}}a(rbe,"csvDataLoad");async function nbe(e){let t=qR.urlObject(e);if(t)throw tr(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${bu}/${r}`;try{await obe(e,r)}catch(s){throw Xf.error(vr.DOWNLOAD_FILE_ERR(r)+" - "+s),tr(s,Au(vr.DOWNLOAD_FILE_ERR(r)))}try{let s=new cv(this.job_operation_function.name,e.action,e.schema,e.table,n,vi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await uv(s);return await GR(n),i}catch(s){throw await GR(n),Iu(s)}}a(nbe,"csvURLLoad");async function sbe(e){let t=qR.fileObject(e);if(t)throw tr(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);let r=new cv(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,vi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await uv(r)}catch(n){throw Iu(n)}}a(sbe,"csvFileLoad");async function ibe(e){let t=qR.s3FileObject(e);if(t)throw tr(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=jRe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${bu}/${s}`;let i=new cv(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await abe(s,e);let o=await uv(i);return await GR(r),o}catch(n){throw await GR(r),Iu(n)}}a(ibe,"importFromS3");async function obe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await WRe("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 tr(n,s,n.statusCode,vi.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}lbe(r,e.csv_url),await cbe(t,r.raw)}a(obe,"downloadCSVFile");async function abe(e,t){try{let r=`${bu}/${e}`;await Mi.mkdirp(bu),await Mi.writeFile(`${bu}/${e}`,"",{flag:"a+"});let n=await Mi.createWriteStream(r),s=await JRe.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),tr(r,Au(vr.S3_DOWNLOAD_ERR))}}a(abe,"downloadFileFromS3");async function cbe(e,t){try{await Mi.mkdirp(bu),await Mi.writeFile(`${bu}/${e}`,t)}catch(r){throw Xf.error(vr.WRITE_TEMP_FILE_ERR),tr(r,Au(vr.DEFAULT_BULK_LOAD_ERR))}}a(cbe,"writeFileToTempFolder");async function GR(e){if(e)try{await Mi.access(e),await Mi.unlink(e)}catch{Xf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(GR,"deleteTempFile");function lbe(e,t){if(e.statusCode!==CJ.HTTP_STATUS_CODES.OK)throw tr(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,mn.BAD_REQUEST);if(!tbe[e.headers["content-type"]])throw tr(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,mn.BAD_REQUEST);if(!e.raw)throw tr(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,mn.BAD_REQUEST)}a(lbe,"validateURLResponse");async function uv(e){try{let t;switch(e.file_type){case vi.VALID_S3_FILE_TYPES.CSV:t=await ube(e);break;case vi.VALID_S3_FILE_TYPES.JSON:t=await dbe(e);break;default:throw tr(new Error,vr.DEFAULT_BULK_LOAD_ERR,mn.BAD_REQUEST,vi.LOG_LEVELS.ERROR,vr.INVALID_FILE_EXT_ERR(e))}return UJ(t.records,t.number_written)}catch(t){throw Iu(t)}}a(uv,"fileLoad");async function LJ(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 HR.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&PJ(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=tr(c);r(l)}}a(LJ,"validateChunk");async function DJ(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Qf.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Qf.isEmpty(c)&&!Qf.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 OJ.callOperationFunctionAsAwait(MJ,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=tr(c,Au(vr.INSERT_CSV_ERR),mn.INTERNAL_SERVER_ERROR,vi.LOG_LEVELS.ERROR,vr.INSERT_CSV_ERR+" - "+c);r(l)}}a(DJ,"insertChunk");async function ube(e){let t={records:0,number_written:0},r=vJ(e.schema,e.table);try{let n=new lv,s=Mi.createReadStream(e.file_path,{highWaterMark:wJ});s.setEncoding("utf8"),await ov.parsePromise(s,LJ.bind(null,e,n),av.bind(null,r));let i=n.getPermsResponse();if(i)throw tr(new Error,i,mn.BAD_REQUEST);return s=Mi.createReadStream(e.file_path,{highWaterMark:wJ}),s.setEncoding("utf8"),await ov.parsePromise(s,DJ.bind(null,e,t),av.bind(null,r)),s.destroy(),t}catch(n){throw tr(n,Au(vr.PAPA_PARSE_ERR),mn.INTERNAL_SERVER_ERROR,vi.LOG_LEVELS.ERROR,vr.PAPA_PARSE_ERR+n)}}a(ube,"callPapaParse");function vJ(e,t){let r=XRe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>ZRe(i,s));return n}a(vJ,"createTransformMap");function av(e,t,r){let n=e.get(r);return n?n(t):Qf.autoCast(t)}a(av,"typeFunction");async function dbe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new lv,s=TJ([Mi.createReadStream(e.file_path,{encoding:"utf-8"}),yJ.withParser(),c=>c.value,new RJ({batchSize:NJ}),bJ(async c=>{await LJ(e,n,r,c)})]);await new Promise((c,l)=>{AJ(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw tr(new Error,i,mn.BAD_REQUEST);let o=TJ([Mi.createReadStream(e.file_path,{encoding:"utf-8"}),yJ.withParser(),c=>c.value,new RJ({batchSize:NJ}),bJ(async c=>{await DJ(e,t,r,c)})]);return await new Promise((c,l)=>{AJ(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw tr(n,Au(vr.INSERT_JSON_ERR),mn.INTERNAL_SERVER_ERROR,vi.LOG_LEVELS.ERROR,vr.INSERT_JSON_ERR+n)}}a(dbe,"insertJson");async function MJ(e){let t={};try{e.data&&e.data.length>0&&fbe(e.data[0])?t=await mbe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Xf.info(t.message))}catch(r){throw Iu(r)}return t}a(MJ,"callBulkFileLoad");function fbe(e){let t=Object.keys(e);for(let r of t)if(!ebe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(fbe,"validateColumnNames");async function mbe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=HR.insert;break;case"update":i=HR.update;break;case"upsert":i=HR.upsert;break;default:throw tr(new Error,vr.INVALID_ACTION_PARAM_ERR(n),mn.BAD_REQUEST,vi.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=Qf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw Iu(o)}}a(mbe,"bulkFileLoad");function UJ(e,t){return`successfully loaded ${t} of ${e} records`}a(UJ,"buildResponseMsg");function Iu(e){return tr(e,Au(vr.DEFAULT_BULK_LOAD_ERR),mn.INTERNAL_SERVER_ERROR,vi.LOG_LEVELS.ERROR,vr.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Iu,"buildTopLevelErrMsg")});var HJ=M((fqe,kJ)=>{"use strict";var pbe=Sn(),hbe=pi(),BJ=Q(),Ebe=Vn(),dqe=uT(),_be=require("clone"),mv=require("alasql"),gbe=lS(),FJ=require("util"),Sbe=FJ.promisify(hbe.getTableSchema),Tbe=FJ.promisify(pbe.search),ybe=(G(),D(j)),fv=ae();gbe(mv);kJ.exports={update:bbe};var Rbe="There was a problem performing this update. Please check the logs and try again.";async function bbe({statement:e,hdb_user:t}){let r=await Sbe(e.table.databaseid,e.table.tableid),n=Abe(e.columns);fv.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=_be(s),c=fv.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=mv.parse(l).statements[0],d=await Tbe(u),f=Ibe(n,d);return wbe(o,f,t)}a(bbe,"update");function Abe(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=mv.compile(`SELECT ${r.expression.toString()} AS [${ybe.FUNC_VAL}] FROM ?`)}),t}catch(t){throw BJ.error(t),new Error(Rbe)}}a(Abe,"createUpdateRecord");function Ibe(e,t){return fv.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Ibe,"buildUpdateRecords");async function wbe(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Ebe.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){BJ.error(`Error delete new_attributes from update response: ${i}`)}return s}a(wbe,"updateRecords")});var qJ=M((Eqe,GJ)=>{var Nbe=require("alasql"),Cbe=Sn(),Obe=Q(),Pbe=ps(),hv=require("util"),pv=ae(),Lbe=(G(),D(j)),Dbe=pi(),pqe=uT(),hqe=Vn(),vbe="record",Mbe="successfully deleted",Ube=hv.callbackify(kbe),xbe=hv.promisify(Cbe.search),Bbe=hv.promisify(Dbe.getTableSchema);GJ.exports={convertDelete:Ube};function Fbe(e){return`${e.deleted_hashes.length} ${vbe}${e.deleted_hashes.length===1?"":"s"} ${Mbe}`}a(Fbe,"generateReturnMessage");async function kbe({statement:e,hdb_user:t}){let r=await Bbe(e.table.databaseid,e.table.tableid);pv.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=pv.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Nbe.parse(o).statements[0],l={operation:Lbe.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await xbe(c);let u=await Pbe.deleteRecords(l);return pv.isEmptyOrZeroLength(u.message)&&(u.message=Fbe(u)),delete u.txn_time,u}catch(u){throw Obe.error(u),u.hdb_code?u.message:u}}a(kbe,"convertDelete")});var HE=M((gqe,WJ)=>{"use strict";WJ.exports={evaluateSQL:Xbe,processAST:YJ,convertSQLToAST:KJ,checkASTPermissions:VJ};var Hbe=Vn(),$J=require("util"),Gbe=$J.callbackify(Hbe.insert),qbe=Sn().search,$be=HJ().update,Vbe=$J.callbackify($be),Kbe=qJ().convertDelete,Vc=require("alasql"),Ybe=kR(),$R=Q(),Wbe=lS(),jbe=ae(),kE=(G(),D(j)),{hdbErrors:zbe,handleHDBError:Ev}=Ee(),{HTTP_STATUS_CODES:_v}=zbe;Wbe(Vc);var Jbe=403,Qbe="There was a problem performing this insert. Please check the logs and try again.",gv=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Xbe(e,t){let r=e.parsed_sql_object;if(!r){r=KJ(e.sql);let n,s=r.ast.statements[0];if(s instanceof Vc.yy.Insert?n=s.into.databaseid:s instanceof Vc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Vc.yy.Update||s instanceof Vc.yy.Delete?n=s.table.databaseid:$R.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Vc.yy.Select)&&jbe.isEmptyOrZeroLength(n))return t("No schema specified",null)}YJ(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Xbe,"evaluateSQL");function VJ(e,t){let r;try{r=Ybe.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(VJ,"checkASTPermissions");function KJ(e){let t=new gv;if(!e)throw Ev(new Error,"The 'sql' parameter is missing from the request body",_v.BAD_REQUEST);try{let r=e.trim(),n=Vc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
133
+ `);throw n[1]?Ev(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,_v.BAD_REQUEST):Ev(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",_v.BAD_REQUEST)}return t}a(KJ,"convertSQLToAST");function YJ(e,t,r){try{let n=Zbe;if(!e.bypass_auth&&!t.permissions_checked){let i=VJ(e,t);if(i&&i.length>0)return r(Jbe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case kE.VALID_SQL_OPS_ENUM.SELECT:n=qbe,s=t.ast.statements[0];break;case kE.VALID_SQL_OPS_ENUM.INSERT:n=eAe;break;case kE.VALID_SQL_OPS_ENUM.UPDATE:n=Vbe;break;case kE.VALID_SQL_OPS_ENUM.DELETE:n=Kbe;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(YJ,"processAST");function Zbe(e,t){$R.info(e),t("unknown sql statement")}a(Zbe,"nullFunction");function eAe({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=tAe(i,e.values)}catch(o){return r(o)}Gbe(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){$R.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(eAe,"convertInsert");function tAe(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]]=Vc.compile(`SELECT ${s.toString()} AS [${kE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw $R.error(r),new Error(Qbe)}}a(tAe,"createDataObjects")});var yv=M((Tqe,tQ)=>{"use strict";var Tv=Sn(),rAe=kC(),{AsyncParser:nAe}=require("json2csv"),VR=require("stream"),Ns=ae(),Sv=require("fs-extra"),sAe=require("path"),Zs=Q(),{promisify:JJ}=require("util"),GE=ae(),{handleHDBError:br,hdbErrors:iAe}=Ee(),{HDB_ERROR_MSGS:Zn,HTTP_STATUS_CODES:Ar}=iAe,{streamAsJSON:oAe}=(FA(),D(Wx)),{Upload:aAe}=require("@aws-sdk/lib-storage"),{toCsvStream:cAe}=($o(),D(n0)),jJ=["search_by_value","search_by_hash","sql","search_by_conditions"],zJ=["json","csv"],QJ="json",XJ="csv",lAe="Successfully exported JSON locally.",uAe="Successfully exported CSV locally.",dAe=1e3,fAe=Tv.searchByHash,mAe=Tv.searchByValue,pAe=JJ(VR.finished);tQ.exports={export_to_s3:gAe,export_local:hAe};async function hAe(e){Zs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=ZJ(e);if(!Ns.isEmpty(t))throw Zs.error(t),br(new Error,t,Ar.BAD_REQUEST,void 0,void 0,!0);if(Ns.isEmpty(e.path))throw Zs.error(Zn.MISSING_VALUE("path")),br(new Error,Zn.MISSING_VALUE("path"),Ar.BAD_REQUEST,void 0,void 0,!0);let r=(Ns.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(sAe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Ns.buildFolderPath(e.path,r);await EAe(e.path);let s=await eQ(e);return await _Ae(n,e.format,s)}a(hAe,"export_local");async function EAe(e){if(Zs.trace("in confirmPath"),Ns.isEmptyOrZeroLength(e))throw br(new Error,`Invalid path: ${e}`,Ar.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await Sv.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,Zs.error(n),br(new Error,n,Ar.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 Zs.error(r),br(new Error,r,Ar.BAD_REQUEST,void 0,void 0,!0)}return!0}a(EAe,"confirmPath");async function _Ae(e,t,r){if(Zs.trace("in saveToLocal"),GE.isEmptyOrZeroLength(e))throw br(new Error,Zn.INVALID_VALUE("file_path"),Ar.BAD_REQUEST,void 0,void 0,!0);if(GE.isEmptyOrZeroLength(t))throw br(new Error,Zn.INVALID_VALUE("Source format"),Ar.BAD_REQUEST,void 0,void 0,!0);if(GE.isEmpty(r))throw br(new Error,Zn.NOT_FOUND("Data"),Ar.BAD_REQUEST,void 0,void 0,!0);if(t===QJ){let n=Sv.createWriteStream(e);return oAe(r).pipe(n),await pAe(n),{message:lAe,path:e}}else if(t===XJ){let n=Sv.createWriteStream(e),s=VR.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new nAe(i,c).fromInput(s).toOutput(n).promise(!1),{message:uAe,path:e}}throw br(new Error,Zn.INVALID_VALUE("format"),Ar.BAD_REQUEST)}a(_Ae,"saveToLocal");async function gAe(e){if(!e.s3||Object.keys(e.s3).length===0)throw br(new Error,Zn.MISSING_VALUE("S3 object"),Ar.BAD_REQUEST);if(Ns.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw br(new Error,Zn.MISSING_VALUE("aws_access_key_id"),Ar.BAD_REQUEST);if(Ns.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw br(new Error,Zn.MISSING_VALUE("aws_secret_access_key"),Ar.BAD_REQUEST);if(Ns.isEmptyOrZeroLength(e.s3.bucket))throw br(new Error,Zn.MISSING_VALUE("bucket"),Ar.BAD_REQUEST);if(Ns.isEmptyOrZeroLength(e.s3.key))throw br(new Error,Zn.MISSING_VALUE("key"),Ar.BAD_REQUEST);if(Ns.isEmptyOrZeroLength(e.s3.region))throw br(new Error,Zn.MISSING_VALUE("region"),Ar.BAD_REQUEST);let t=ZJ(e);if(!Ns.isEmpty(t))throw br(new Error,t,Ar.BAD_REQUEST);Zs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await eQ(e)}catch(l){throw Zs.error(l),l}let n,s=await rAe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new VR.PassThrough;if(e.format===XJ){i=e.s3.key+".csv";let l=cAe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(o)}else if(e.format===QJ){i=e.s3.key+".json";let l=new VR.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%dAe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw br(new Error,Zn.INVALID_VALUE("format"),Ar.BAD_REQUEST);return new aAe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(gAe,"export_to_s3");function ZJ(e){if(Zs.trace("in exportCoreValidation"),Ns.isEmpty(e.format))return"format missing";if(zJ.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${zJ.join(", ")}`;let t=e.search_operation.operation;if(Ns.isEmpty(t))return"search_operation.operation missing";if(jJ.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${jJ.join(", ")}`}a(ZJ,"exportCoreValidation");async function eQ(e){Zs.trace("in getRecords");let t,r;if(GE.isEmpty(e.search_operation)||GE.isEmptyOrZeroLength(e.search_operation.operation))throw br(new Error,Zn.INVALID_VALUE("Search operation"),Ar.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=mAe;break;case"search_by_hash":t=fAe;break;case"search_by_conditions":t=Tv.searchByConditions;break;case"sql":{let n=HE();t=JJ(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Zs.error(r),br(new Error,r,Ar.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(eQ,"getRecords")});var nQ=M((Rqe,rQ)=>{"use strict";var Rv=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};rQ.exports=Rv});var oQ=M((Aqe,iQ)=>{"use strict";var SAe=(G(),D(j)),sQ=require("moment"),TAe=require("uuid").v4,bv=class{static{a(this,"JobObject")}constructor(){this.id=TAe(),this.type=void 0,this.start_datetime=sQ().valueOf(),this.created_datetime=sQ().valueOf(),this.end_datetime=void 0,this.status=SAe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};iQ.exports=bv});var YR=M((wqe,pQ)=>{"use strict";var yAe=require("uuid").v4,dQ=Vn(),fQ=Sn(),RAe=fi(),bAe=hd(),AAe=nQ(),Ut=(G(),D(j)),IAe=oQ(),wAe=YS(),Ui=Q(),NAe=xm(),Zf=ae(),{promisify:CAe}=require("util"),wu=require("moment"),KR=BC(),aQ=Zw(),{deleteTransactionLogsBeforeValidator:OAe}=ND(),{handleHDBError:cQ,hdbErrors:PAe,ClientError:LAe}=Ee(),{HTTP_STATUS_CODES:lQ}=PAe,uQ=fQ.searchByValue,DAe=fQ.searchByHash,vAe=dQ.insert,MAe=dQ.update,Av;pQ.exports={addJob:BAe,updateJob:kAe,handleGetJob:UAe,handleGetJobsByStartDate:xAe,getJobById:mQ};async function UAe(e){if(e.id===void 0)throw new LAe("'id' is required");let t=await mQ(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(UAe,"handleGetJob");async function xAe(e){try{let t=await FAe(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=wu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=wu(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(xAe,"handleGetJobsByStartDate");async function BAe(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(!Ut.JOB_TYPE_ENUM[e.operation])return Ui.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ut.OPERATIONS_ENUM.CSV_FILE_LOAD:n=KR.fileObject(e);break;case Ut.OPERATIONS_ENUM.CSV_URL_LOAD:n=KR.urlObject(e);break;case Ut.OPERATIONS_ENUM.CSV_DATA_LOAD:n=KR.dataObject(e);break;case Ut.OPERATIONS_ENUM.IMPORT_FROM_S3:n=KR.s3FileObject(e);break;case Ut.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ut.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=aQ(e,"date");break;case Ut.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=aQ(e,"timestamp");break;case Ut.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=OAe(e);break;case Ut.OPERATIONS_ENUM.RESTART_SERVICE:if(Ut.HDB_PROCESS_SERVICES[e.service]===void 0)throw cQ(new Error,"Invalid service",lQ.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw cQ(n,n.message,lQ.BAD_REQUEST,void 0,void 0,!0);let s=new IAe;s.type=e.operation===Ut.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ut.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new RAe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await uQ(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=yAe();try{o=await uQ(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 NAe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await vAe(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(BAe,"addJob");async function FAe(e){let t=wu(e.from_date,wu.ISO_8601),r=wu(e.to_date,wu.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 AAe(n,e.hdb_user);try{if(!Av){let i=HE();Av=CAe(i.evaluateSQL)}return await Av(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(FAe,"getJobsInDateRange");async function mQ(e){if(Zf.isEmptyOrZeroLength(e))return Zf.errorizeMessage("Invalid job ID specified.");let t=new bAe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await DAe(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(mQ,"getJobById");async function kAe(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===Ut.JOB_STATUS_ENUM.COMPLETE||e.status===Ut.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=wu().valueOf());let t=new wAe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await MAe(t),r}a(kAe,"updateJob")});var RQ=M((Cqe,yQ)=>{"use strict";var hQ=ae(),Mr=(G(),D(j)),HAe=require("moment"),WR=dv(),qE=Q(),EQ=YR(),_Q=yv(),gQ=Bl(),SQ=st(),GAe=PR(),qAe=jf(),{parentPort:$Ae,isMainThread:TQ}=require("worker_threads"),{onMessageByType:VAe}=st(),Iv=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function KAe(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(hQ.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(hQ.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Mr.JOB_TYPE_ENUM.csv_file_load:await Co(e,WR.csvFileLoad);break;case Mr.JOB_TYPE_ENUM.csv_url_load:await Co(e,WR.csvURLLoad);break;case Mr.JOB_TYPE_ENUM.csv_data_load:await Co(e,WR.csvDataLoad);break;case Mr.JOB_TYPE_ENUM.import_from_s3:await Co(e,WR.importFromS3);break;case Mr.JOB_TYPE_ENUM.empty_trash:break;case Mr.JOB_TYPE_ENUM.export_local:await Co(e,_Q.export_local);break;case Mr.JOB_TYPE_ENUM.export_to_s3:await Co(e,_Q.export_to_s3);break;case Mr.JOB_TYPE_ENUM.delete_files_before:case Mr.JOB_TYPE_ENUM.delete_records_before:await Co(e,gQ.deleteFilesBefore);break;case Mr.JOB_TYPE_ENUM.delete_audit_logs_before:await Co(e,gQ.deleteAuditLogsBefore);break;case Mr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Co(e,GAe.deleteTransactionLogsBefore);break;case Mr.JOB_TYPE_ENUM.restart_service:return await Co(e,qAe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(KAe,"parseMessage");async function Co(e,t){try{e.job.status=Mr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=HAe().valueOf(),await EQ.updateJob(e.job),await YAe(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):qE.error(`There was an error running ${t.name} job with id ${e.job.id}`),qE.error(n),e.job.message=n,e.job.status=Mr.JOB_STATUS_ENUM.ERROR;try{await EQ.updateJob(e.job)}catch(s){throw qE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Co,"runJob");async function YAe(e){qE.trace("launching job thread:",e),TQ?SQ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Mr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):$Ae.postMessage({type:Mr.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(YAe,"launchJobThread");TQ&&VAe(Mr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{SQ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Mr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){qE.error(r)}});yQ.exports={parseMessage:KAe,RunnerMessage:Iv}});var AQ=M((Pqe,bQ)=>{"use strict";var WAe=ae(),wv=fe(),Kc=(G(),D(j)),jAe=Dt(),zAe=lr(),Oo=Q(),JAe=iv(),QAe=io();wv.initSync();bQ.exports={postOperationHandler:ZAe,sendOperationTransaction:$E};async function $E(e,t,r,n){if(e.schema===Kc.SYSTEM_SCHEMA_NAME)return;let s=XAe(e,t,r);s&&(Oo.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await zAe.publishToStream(`${jAe.SUBJECT_PREFIXES.TXN}.${e.schema}`,QAe.createNatsTableStreamName(e.schema,e.table),n,s))}a($E,"sendOperationTransaction");function XAe(e,t,r){if(WAe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Kc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}a(XAe,"convertCRUDOperationToTransaction");async function ZAe(e,t,r){if(!wv.get(Kc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;Oo.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=wv.get(Kc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new JAe(t.txn_time,n,s);switch(e.operation){case Kc.OPERATIONS_ENUM.INSERT:try{await $E(e,t.inserted_hashes,i,r)}catch(o){Oo.error("There was an error calling clustering postOperationHandler for insert."),Oo.error(o)}break;case Kc.OPERATIONS_ENUM.DELETE:try{await $E(e,t.deleted_hashes,i,r)}catch(o){Oo.error("There was an error calling clustering postOperationHandler for delete."),Oo.error(o)}break;case Kc.OPERATIONS_ENUM.UPDATE:try{await $E(e,t.update_hashes,i,r)}catch(o){Oo.error("There was an error calling clustering postOperationHandler for update."),Oo.error(o)}break;case Kc.OPERATIONS_ENUM.UPSERT:try{await $E(e,t.upserted_hashes,i,r)}catch(o){Oo.error("There was an error calling clustering postOperationHandler for upsert."),Oo.error(o)}break;default:break}return t}a(ZAe,"postOperationHandler")});var Z,IQ=se(()=>{Z=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 wR={};ye(wR,{chooseOperation:()=>KQ,executeJob:()=>ei,getOperationFunction:()=>YQ,operation:()=>Uv,processLocalTransaction:()=>VQ});function rIe(e){if(!Nv){let t=HE();Nv=Mv.promisify(t.evaluateSQL)}return Nv(e)}async function VQ(e,t){try{if(e.body.operation!=="read_log"&&(WE.default.log_level===gm.INFO||WE.default.log_level===gm.DEBUG||WE.default.log_level===gm.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:o,...c}=e.body;Pn.info(c)}}catch(n){Pn.error(n)}let r=await qQ.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return nIe[e.body.operation]&&BQ.default.setSchemaDataToGlobal(n=>{n&&Pn.error(n)}),r}function KQ(e){let t;try{t=YQ(e)}catch(s){throw Pn.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=HE(),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 Pn.error(`${wQ.FORBIDDEN} from operation ${e.operation}`),Pn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,ti.handleHDBError)(new Error,c,ti.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=xQ.default.verifyPerms(i,s);if(o)throw Pn.error(`${wQ.FORBIDDEN} from operation ${e.operation}`),Pn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,ti.handleHDBError)(new Error,o,ti.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,ti.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function YQ(e){if(Pn.trace(`getOperationFunction with operation: ${e.operation}`),NQ.has(e.operation))return NQ.get(e.operation);throw(0,ti.handleHDBError)(new Error,ti.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),ti.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function Uv(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=KQ(e);return VQ({body:e},n)}async function sIe(e){Pn.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[cA]=!0;let o;switch(i.operation){case V.INSERT:o=await Cu.default.insert(i);break;case V.UPDATE:o=await Cu.default.update(i);break;case V.UPSERT:o=await Cu.default.upsert(i);break;case V.DELETE:o=await tm.default.deleteRecord(i);break;default:Pn.warn("invalid operation in catchup");break}await eIe.postOperationHandler(i,o,e)}catch(o){Pn.info("Invalid operation in transaction"),Pn.error(o)}}async function ei(e){(0,GQ.transformReq)(e);let t,r;try{if(r=await zR.default.addJob(e),r){t=r.createdJob,Pn.info("addJob result",r);let n=new Lv.default.RunnerMessage(t,e);return{message:await Lv.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 Pn.error(i),(0,ti.handleHDBError)(n,i)}}function iIe(){let e=new Map;return e.set(V.INSERT,new Z(Cu.default.insert)),e.set(V.UPDATE,new Z(Cu.default.update)),e.set(V.UPSERT,new Z(Cu.default.upsert)),e.set(V.SEARCH_BY_CONDITIONS,new Z(em.default.searchByConditions)),e.set(V.SEARCH_BY_HASH,new Z(em.default.searchByHash)),e.set(V.SEARCH_BY_ID,new Z(em.default.searchByHash)),e.set(V.SEARCH_BY_VALUE,new Z(em.default.searchByValue)),e.set(V.SEARCH,new Z(tIe)),e.set(V.SQL,new Z(rIe)),e.set(V.CSV_DATA_LOAD,new Z(ei,VE.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new Z(ei,VE.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new Z(ei,VE.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new Z(ei,VE.default.importFromS3)),e.set(V.CREATE_SCHEMA,new Z(xi.default.createSchema)),e.set(V.CREATE_DATABASE,new Z(xi.default.createSchema)),e.set(V.CREATE_TABLE,new Z(xi.default.createTable)),e.set(V.CREATE_ATTRIBUTE,new Z(xi.default.createAttribute)),e.set(V.DROP_SCHEMA,new Z(xi.default.dropSchema)),e.set(V.DROP_DATABASE,new Z(xi.default.dropSchema)),e.set(V.DROP_TABLE,new Z(xi.default.dropTable)),e.set(V.DROP_ATTRIBUTE,new Z(xi.default.dropAttribute)),e.set(V.DESCRIBE_SCHEMA,new Z(KE.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new Z(KE.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new Z(KE.default.describeTable)),e.set(V.DESCRIBE_ALL,new Z(KE.default.describeAll)),e.set(V.DELETE,new Z(tm.default.deleteRecord)),e.set(V.ADD_USER,new Z(DN)),e.set(V.ALTER_USER,new Z(vN)),e.set(V.DROP_USER,new Z(MN)),e.set(V.LIST_USERS,new Z(xN)),e.set(V.LIST_ROLES,new Z(YE.default.listRoles)),e.set(V.ADD_ROLE,new Z(YE.default.addRole)),e.set(V.ALTER_ROLE,new Z(YE.default.alterRole)),e.set(V.DROP_ROLE,new Z(YE.default.dropRole)),e.set(V.USER_INFO,new Z(UN)),e.set(V.READ_LOG,new Z(OQ.default)),e.set(V.ADD_NODE,new Z(PQ.default)),e.set(V.UPDATE_NODE,new Z(Cv.default)),e.set(V.SET_NODE_REPLICATION,new Z(Cv.default)),e.set(V.REMOVE_NODE,new Z(LQ.default)),e.set(V.CONFIGURE_CLUSTER,new Z(DQ.default)),e.set(V.PURGE_STREAM,new Z(vQ.default)),e.set(V.SET_CONFIGURATION,new Z(Dv.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new Z(MQ.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new Z(UQ.default)),e.set(V.CLUSTER_SET_ROUTES,new Z(jR.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new Z(jR.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new Z(jR.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new Z(ei,Ov.default.export_to_s3)),e.set(V.CREATE_CSR,new Z(Nu.default.createCsr)),e.set(V.SIGN_CERTIFICATE,new Z(Nu.default.signCertificate)),e.set(V.LIST_CERTIFICATES,new Z(Nu.default.listCertificates)),e.set(V.ADD_CERTIFICATES,new Z(Nu.default.addCertificate)),e.set(V.REMOVE_CERTIFICATE,new Z(Nu.default.removeCertificate)),e.set(V.GET_KEY,new Z(Nu.default.getKey)),e.set(V.ADD_NODE_BACK,new Z(LP)),e.set(V.REMOVE_NODE_BACK,new Z(DP)),e.set(V.DELETE_FILES_BEFORE,new Z(ei,tm.default.deleteFilesBefore)),e.set(V.DELETE_RECORDS_BEFORE,new Z(ei,tm.default.deleteFilesBefore)),e.set(V.EXPORT_LOCAL,new Z(ei,Ov.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new Z(zR.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new Z(zR.default.handleGetJob)),e.set(V.GET_REGISTRATION_INFO,new Z($D)),e.set(V.GET_FINGERPRINT,new Z(VD)),e.set(V.SET_LICENSE,new Z(KD)),e.set(V.RESTART,new Z(Pv.default.restart)),e.set(V.RESTART_SERVICE,new Z(ei,Pv.default.restartService)),e.set(V.CATCHUP,new Z(sIe)),e.set(V.SYSTEM_INFORMATION,new Z(FQ.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new Z(ei,tm.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new Z(CQ.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new Z(CC)),e.set(V.REFRESH_OPERATION_TOKEN,new Z(OC)),e.set(V.LOGIN,new Z(RD)),e.set(V.LOGOUT,new Z(bD)),e.set(V.GET_CONFIGURATION,new Z(Dv.default.getConfiguration)),e.set(V.CUSTOM_FUNCTIONS_STATUS,new Z(wt.default.customFunctionsStatus)),e.set(V.GET_CUSTOM_FUNCTIONS,new Z(wt.default.getCustomFunctions)),e.set(V.GET_COMPONENT_FILE,new Z(wt.default.getComponentFile)),e.set(V.GET_COMPONENTS,new Z(wt.default.getComponents)),e.set(V.SET_COMPONENT_FILE,new Z(wt.default.setComponentFile)),e.set(V.DROP_COMPONENT,new Z(wt.default.dropComponent)),e.set(V.GET_CUSTOM_FUNCTION,new Z(wt.default.getCustomFunction)),e.set(V.SET_CUSTOM_FUNCTION,new Z(wt.default.setCustomFunction)),e.set(V.DROP_CUSTOM_FUNCTION,new Z(wt.default.dropCustomFunction)),e.set(V.ADD_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.addComponent)),e.set(V.ADD_COMPONENT,new Z(wt.default.addComponent)),e.set(V.DROP_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.dropCustomFunctionProject)),e.set(V.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.packageComponent)),e.set(V.PACKAGE_COMPONENT,new Z(wt.default.packageComponent)),e.set(V.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.deployComponent)),e.set(V.DEPLOY_COMPONENT,new Z(wt.default.deployComponent)),e.set(V.READ_TRANSACTION_LOG,new Z(vv.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new Z(ei,vv.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new Z(kQ.default.installModules)),e.set(V.GET_BACKUP,new Z(xi.default.getBackup)),e.set(V.CLEANUP_ORPHAN_BLOBS,new Z(xi.default.cleanupOrphanBlobs)),e.set(V.ADD_SSH_KEY,new Z(wt.default.addSSHKey)),e.set(V.GET_SSH_KEY,new Z(wt.default.getSSHKey)),e.set(V.UPDATE_SSH_KEY,new Z(wt.default.updateSSHKey)),e.set(V.DELETE_SSH_KEY,new Z(wt.default.deleteSSHKey)),e.set(V.LIST_SSH_KEYS,new Z(wt.default.listSSHKeys)),e.set(V.SET_SSH_KNOWN_HOSTS,new Z(wt.default.setSSHKnownHosts)),e.set(V.GET_SSH_KNOWN_HOSTS,new Z(wt.default.getSSHKnownHosts)),e.set(V.GET_ANALYTICS,new Z(PD)),e.set(V.LIST_METRICS,new Z(LD)),e.set(V.DESCRIBE_METRIC,new Z(DD)),e.set(V.GET_STATUS,new Z(HD)),e.set(V.SET_STATUS,new Z(GD)),e.set(V.CLEAR_STATUS,new Z(kD)),e.set(V.INSTALL_USAGE_LICENSE,new Z(qL)),e.set(V.GET_USAGE_LICENSES,new Z(YL)),e}var em,VE,xi,KE,tm,CQ,YE,wt,WE,OQ,PQ,Cv,LQ,DQ,vQ,MQ,UQ,jR,Ov,xQ,zR,ti,Pv,Mv,Cu,BQ,FQ,Lv,Dv,vv,kQ,HQ,GQ,Nu,qQ,$Q,wQ,Pn,eIe,tIe,Nv,nIe,NQ,NR=se(()=>{em=b(Sn()),VE=b(dv()),xi=b(ry()),KE=b(Yl()),tm=b(Bl()),CQ=b(sP());Yn();YE=b(ah()),wt=b(wD()),WE=b(Q()),OQ=b(uP()),PQ=b(py()),Cv=b(BP()),LQ=b(Ey()),DQ=b(HP()),vQ=b(GP()),MQ=b(VP()),UQ=b(YP()),jR=b(yy()),Ov=b(yv()),xQ=b(kR()),zR=b(YR());G();ti=b(Ee()),Pv=b(jf()),Mv=b(require("util")),Cu=b(Vn()),BQ=b(pi()),FQ=b(qh()),Lv=b(RQ());Yd();ER();Dv=b(_t()),vv=b(PR()),kQ=b(OD()),HQ=b(ai()),GQ=b(ae());Hr();Nu=b(Ts());Rf();MD();qQ=b(FC()),$Q=b(AQ());OE();uE();WD();IQ();({HTTP_STATUS_CODES:wQ}=ti.hdbErrors),Pn=WE.default.loggerWithTag("operation"),{transactToClusteringUtils:eIe}=$Q.default,tIe=Mv.promisify(em.default.search);a(rIe,"evaluateSQL");nIe={[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(VQ,"processLocalTransaction");NQ=iIe();Ue.operation=Uv;a(KQ,"chooseOperation");a(YQ,"getOperationFunction");(0,HQ._assignPackageExport)("operation",Uv);a(Uv,"operation");a(sIe,"catchup");a(ei,"executeJob");a(iIe,"initializeOperationFunctionMap")});var XR=M((Bqe,JQ)=>{"use strict";var JR=(G(),D(j)),oIe=ae(),rm=Q(),{handleHDBError:xv,hdbErrors:QR}=Ee(),{isMainThread:aIe}=require("worker_threads"),{Readable:cIe}=require("stream"),WQ=require("os"),lIe=require("util"),uIe=LC(),zQ=lIe.promisify(uIe.authorize),jQ=(NR(),D(wR)),{createGzip:dIe,constants:fIe}=require("zlib"),mIe=[JR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,JR.OPERATIONS_ENUM.LOGIN,JR.OPERATIONS_ENUM.LOGOUT];function pIe(e){let t=`Found an uncaught exception with message: ${e.message}. ${WQ.EOL}Stack: ${e.stack} ${WQ.EOL}Terminating ${aIe?"HDB":"thread"}.`;console.error(t),rm.fatal(t),process.exit(1)}a(pIe,"handleServerUncaughtException");function hIe(e,t,r){if(rm[e.logLevel||"info"](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:QR.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(hIe,"serverErrorHandler");function EIe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=xv(new Error,"Invalid JSON.",QR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(oIe.isEmpty(e.body.operation)){let n=xv(new Error,"Request body must include an 'operation' property.",QR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(EIe,"reqBodyValidationHandler");function _Ie(e,t,r){let n;!mIe.includes(e.body.operation)||e.body.operation===JR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?zQ(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{i.statusCode=401,rm.debug("Login failed",i),r(i,null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(_Ie,"authHandler");function gIe(e,t,r){zQ(e,t).then(n=>{e.hdb_user=n,r()}).catch(n=>{rm.warn(n),rm.warn(`{"ip":"${e.socket?.remoteAddress}", "error":"${n.stack}"`);let s=typeof n=="string"?{error:n}:{error:n.message};r(xv(n,s,QR.HTTP_STATUS_CODES.UNAUTHORIZED),null)})}a(gIe,"authAndEnsureUserOnRequest");async function SIe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=jQ.chooseOperation(e.body);let s=await jQ.processLocalTransaction(e,n);if(s instanceof cIe&&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(dIe({level:fIe.Z_BEST_SPEED})))}return s}catch(s){throw rm.error(s),s}}a(SIe,"handlePostRequest");JQ.exports={authHandler:_Ie,authAndEnsureUserOnRequest:gIe,handlePostRequest:SIe,handleServerUncaughtException:pIe,serverErrorHandler:hIe,reqBodyValidationHandler:EIe}});var e3=M((kqe,ZQ)=>{"use strict";var TIe=require("fastify-plugin"),{handlePostRequest:QQ,authHandler:yIe,reqBodyValidationHandler:RIe}=XR();async function bIe(e){e.decorate("hdbCore",{preValidation:[RIe,yIe],request:a(t=>XQ(QQ(t,response)),"request"),requestWithoutAuthentication:a((t,r)=>XQ(QQ(t,r,!0)),"requestWithoutAuthentication")})}a(bIe,"hdbCore");async function XQ(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(XQ,"convertAsyncIterators");ZQ.exports=TIe(bIe)});var r3=M((qqe,t3)=>{"use strict";var Gqe=require("fs"),ZR=fe();ZR.initSync();var{CONFIG_PARAMS:Bv}=(G(),D(j)),AIe=1024*1024*1024;function IIe(e){let t=ZR.get(Bv.HTTP_TIMEOUT),r=ZR.get(Bv.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:AIe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:ZR.get(Bv.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(IIe,"getServerOptions");t3.exports=IIe});var i3=M((Vqe,s3)=>{"use strict";var Fv=fe();Fv.initSync();var{CONFIG_PARAMS:n3}=(G(),D(j));function wIe(){let e=Fv.get(n3.HTTP_CORSACCESSLIST),t=Fv.get(n3.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(wIe,"getCORSOptions");s3.exports=wIe});var c3=M((Yqe,a3)=>{"use strict";var o3=fe();o3.initSync();var NIe=(G(),D(j));function CIe(){return o3.get(NIe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(CIe,"getHeaderTimeoutConfig");a3.exports=CIe});var Hv={};ye(Hv,{customFunctionsServer:()=>LIe,ready:()=>y3,start:()=>PIe});function PIe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){va||(va=T3(t),Ue.http((await va).server));let o=await va,c=(0,kv.dirname)(s),l=(0,kv.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!l3.has(c)){l3.add(c);try{o.register(vIe(c,l))}catch(u){if(u.message==="Root plugin has already booted")Tt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:y3}}async function LIe(){try{Tt.info("In Custom Functions Fastify server"+process.cwd()),Tt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Tt.debug(`Custom Functions server process ${process.pid} starting up.`),await DIe();let e=h3.get(x.HTTP_SECUREPORT)>0,t;try{t=va=await T3(e)}catch(r){throw Tt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Tt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Tt.error(`Custom Functions ${process.pid} Error: ${e}`),Tt.error(e),process.exit(1)}}async function DIe(){try{Tt.info("Custom Functions starting configuration."),await _i(),Tt.info("Custom Functions completed configuration.")}catch(e){Tt.error(e)}}function vIe(e,t){return async function(r){try{Tt.info("Custom Functions starting buildRoutes"),Tt.trace("Loading fastify routes folder "+e),(0,u3.existsSync)(e)&&r.register(p3.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Tt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Tt.error(s.message):s&&Tt.error(s),o()})}catch(n){Tt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function T3(e){Tt.info("Custom Functions starting buildServer.");let t=(0,E3.default)(e),r=(0,d3.default)(t);r.server.headersTimeout=(0,g3.default)(),r.setErrorHandler(S3.serverErrorHandler);let n=(0,_3.default)();return n&&r.register(f3.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(m3.default),await r.register(OIe),await r.after(),Vm(r),Tt.info("Custom Functions completed buildServer."),r}function y3(){if(va)return va.then?va.then(e=>e.ready()):va.ready()}var kv,u3,d3,f3,m3,p3,h3,Tt,OIe,E3,_3,g3,S3,va,l3,R3=se(()=>{kv=require("path"),u3=require("fs"),d3=b(require("fastify")),f3=b(require("@fastify/cors")),m3=b(IC()),p3=b(require("@fastify/autoload")),h3=b(fe());G();Tt=b(Q()),OIe=b(e3());Yn();E3=b(r3()),_3=b(i3()),g3=b(c3()),S3=b(XR());$o();Hr();l3=new Set;a(PIe,"start");a(LIe,"customFunctionsServer");a(DIe,"setUp");a(vIe,"buildRouteFolder");a(T3,"buildServer");a(y3,"ready")});var qv={};ye(qv,{handleApplication:()=>MIe,suppressHandleApplicationWarning:()=>UIe});function MIe(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,Ma.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,Ma.dirname)(n.urlPath),null),r.set((0,Ma.join)((0,Ma.dirname)(n.urlPath),"/"),n.absolutePath));break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,Ma.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"])??!0;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);if(d&&(o=r.get(n.pathname),o===null))return{status:301,headers:{Location:(0,Ma.join)(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,Gv.default)(n,(0,nm.realpathSync)(o))};if(i)return s(n);let c=e.options.get(["notFound"]);if(xIe(c),!c)return{status:404,body:"File not found"};let l=(0,Ma.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,Gv.default)(n,(0,nm.realpathSync)(l))}},{runFirst:!0})}function xIe(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,Ma,Gv,UIe,b3=se(()=>{nm=require("node:fs"),Ma=require("node:path"),Gv=b(require("send"));a(MIe,"handleApplication");UIe=!0;a(xIe,"validateNotFoundOption")});var $v={};ye($v,{start:()=>BIe});function BIe({override:e}){return{handleFile:a((t,r,n)=>{eb.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,A3.parse)(t))){if(process.env[s]!==void 0)if(eb.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)eb.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var A3,eb,I3=se(()=>{A3=require("dotenv"),eb=b(Q());a(BIe,"start")});var Yv={};ye(Yv,{DataLoaderError:()=>Cs,DataLoaderResult:()=>sm,EmptyFileError:()=>sb,FileParseError:()=>nb,InvalidPropertyTypeError:()=>ib,MissingRequiredPropertyError:()=>jE,RecordProcessingError:()=>zE,SystemDatabaseError:()=>ob,UnsupportedFileExtensionError:()=>rb,computeRecordHash:()=>Kv,handleApplication:()=>HIe,loadDataFile:()=>v3,suppressHandleApplicationWarning:()=>kIe});function Kv(e){let t=Object.keys(e).sort(),r={};for(let s of t)r[s]=e[s];let n=JSON.stringify(r);return(0,N3.createHash)("sha256").update(n).digest("hex")}function D3(e){return e.system&&e.system[Vv]?e.system[Vv]:tb||(tb=ze({database:"system",table:Vv,attributes:[{name:"id",type:"string",isPrimaryKey:!0},{name:"hash",type:"string"}]}),tb)}async function FIe(e,t,r,n){try{let s=D3(n),i=e?`${e}:${t}:${r}`:`${t}:${r}`;return(await s.get(i))?.hash||null}catch(s){return ri.error?.(`Failed to get stored hash: ${s.message}`),null}}async function w3(e,t,r,n,s){try{let i=D3(s),o=e?`${e}:${t}:${r}`:`${t}:${r}`;await i.put({id:o,hash:n})}catch(i){ri.error?.(`Failed to store hash: ${i.message}`)}}function HIe(e){if((0,O3.getWorkerIndex)()!==0){ri.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(a(function(r){return r.entryType!=="file"||r.eventType==="unlink"?Promise.resolve():v3(r,yn,Me).then(n=>{ri.debug?.("Data loader processed file: %s: %s",(0,Ua.basename)(r.absolutePath),n.message)})},"handleDataLoaderEntry"))}async function v3({contents:e,absolutePath:t},r,n){let s=(0,Ua.extname)(t)||"unknown",i;try{if(s===".yaml"||s===".yml")i=(0,C3.parseDocument)(e.toString()).toJSON();else if(s===".json")i=JSON.parse(e.toString());else throw new rb(t,s)}catch(d){throw d instanceof Cs?d:new nb(t,d)}if(!i)throw new sb(t);let{database:o,table:c,records:l}=i;if(!c)throw new jE(t,"table");if(!l)throw new jE(t,"records");if(!Array.isArray(l))throw new ib(t,"records","array");let u=o?`${o}.${c}`:c;if(o?.toLowerCase()==="system")throw new ob(o,c);try{let d;if(o&&n[o]&&n[o][c])ri.debug?.(`Using existing table ${u} from database tables`),d=n[o][c];else if(r&&r[c])ri.debug?.(`Using existing table ${u} from global tables`),d=r[c];else{ri.debug?.(`Table ${u} not found, creating new table`);let _=[];if(l.length>0){let R=l[0];Object.keys(R).map(S=>{let y={name:S,type:typeof R[S]};return S==="id"&&(y.isPrimaryKey=!0),y}).forEach(S=>{_.push(S)})}d=await ze({database:o,table:c,attributes:_})}let f=l.length,m=0,p=0,h=0,E=100;for(let _=0;_<l.length;_+=E){let R=l.slice(_,_+E),S=[];for(let y of R)S.push(async()=>{try{let w=null,I=y.id;I!==void 0&&(w=await d.get(I));let H=Kv(y);if(!w){m++;let z=await d.put(y);return await w3(o,c,I,H,n),z}let X=await FIe(o,c,I,n);if(!X)return h++,Promise.resolve({inserted:0,updated:0});let q={};for(let z of Object.keys(y))z in w&&(q[z]=w[z]);return Kv(q)!==X?(h++,Promise.resolve({inserted:0,updated:0})):H!==X?(p++,await d.patch(I,y),await w3(o,c,I,H,n),{updated:1}):(h++,Promise.resolve({inserted:0,updated:0}))}catch(w){if(w instanceof Cs)ri.error?.(`Record processing error: ${w.message}`);else{let I=new zE(u,w);ri.error?.(`Record processing error: ${I.message}`)}return Promise.resolve({inserted:0,updated:0,error:w.message})}});await Promise.all(S.map(y=>y()))}if(m>0||p>0){let _=`Loaded ${m} new and updated ${p} records in ${u}`;return h>0&&(_+=` (${h} records skipped)`),ri.info?.(_),new sm(t,o,c,"success",m+p,_)}else if(h>0){let _=`All ${h} records in ${u} already up-to-date`;return ri.info?.(_),new sm(t,o,c,"skipped",f,_)}else{let _=`No records to process in ${u}`;return ri.info?.(_),new sm(t,o,c,"success",0,_)}}catch(d){throw d instanceof Cs?d:new zE(u,d)}}var Ua,N3,C3,O3,xa,P3,L3,ri,Vv,tb,kIe,Cs,rb,nb,sb,jE,ib,ob,zE,sm,M3=se(()=>{Ua=require("node:path"),N3=require("node:crypto"),C3=require("yaml");Oe();O3=b(st()),xa=b(Jr()),P3=b(Ee()),L3=b(Q()),ri=L3.default.forComponent("dataLoader"),Vv="hdb_dataloader_hash";a(Kv,"computeRecordHash");a(D3,"getHashTrackingTable");a(FIe,"getStoredHash");a(w3,"storeHash");kIe=!0;a(HIe,"handleApplication");a(v3,"loadDataFile");Cs=class extends P3.ClientError{static{a(this,"DataLoaderError")}constructor(t,r=xa.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},rb=class extends Cs{static{a(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,Ua.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,xa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},nb=class extends Cs{static{a(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,Ua.basename)(t)}: ${r.message}`,xa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},sb=class extends Cs{static{a(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,Ua.basename)(t)} is empty or invalid`,xa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},jE=class extends Cs{static{a(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,Ua.basename)(t)} is missing required "${r}" property`,xa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},ib=class extends Cs{static{a(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,Ua.basename)(t)} has invalid "${r}" property, expected ${n}`,xa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},ob=class extends Cs{static{a(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,xa.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},zE=class extends Cs{static{a(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,xa.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},sm=class{static{a(this,"DataLoaderResult")}#e;#t;#n;#r;#s;#i;constructor(t,r,n,s,i,o){this.#e=t,this.#t=r||"unknown",this.#n=n||"unknown",this.#r=s,this.#s=i,this.#i=o}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#n}get status(){return this.#r}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#n,status:this.#r,count:this.#s,message:this.#i}}}});var Wv={};ye(Wv,{calculateRestHttpURL:()=>Y3,hdbServer:()=>VIe,start:()=>VIe});async function VIe(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=U3.default.isMaster,await KIe();let t=e.securePort>0;im=YIe(t,e.resources),await im.ready(),e||(e={}),e.isOperationsServer=!0;try{Ue.http(im.server,e),im.server.closeIdleConnections||await im.listen({port:0,host:"::"})}catch(r){throw im.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 KIe(){return Bi.default.trace("Configuring HarperDB process."),$3.default.setSchemaDataToGlobal(),_i()}function YIe(e,t){Bi.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let r=zIe(e),n=(0,x3.default)(r);n.server.headersTimeout=QIe(),n.setErrorHandler(Po.serverErrorHandler);let s=JIe();s&&n.register(B3.default,s),n.register(function(o,c,l){o.setNotFoundHandler(function(u,d){n.server.emit("unhandled",u.raw,d.raw)}),l()}),n.register(H3.default),n.register(F3.default),Vm(n),n.get("/health",()=>"HarperDB is running."),n.register(k3.default,{root:G3.default.join(q3.PACKAGE_ROOT,"studio/web")});let i=Fi.default.get(Tm.LOCAL_STUDIO_ON);return!V3.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:[Po.authAndEnsureUserOnRequest]},WIe(t)),n.post("/",{preValidation:[Po.reqBodyValidationHandler,Po.authHandler],config:{isOperation:!0}},jIe),Bi.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),n}function WIe(e){let t=Fi.default.get(x.HTTP_PORT),r=Fi.default.get(x.HTTP_SECUREPORT);return n=>n.hdb_user?.role?.permission?.super_user?GS(e,Y3(t,r,n)):(Bi.default.warn(`{"ip":"${n.socket.remoteAddress}", "error":"attempt to access /api/openapi/rest without being super_user"`),new K3.ServerError("Forbidden",403))}function Y3(e,t,r){let n=new URL(`${r.protocol}://${r.hostname}`);return n.hostname.toLowerCase()==="localhost"||n.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 jIe(e,t){return e.body?.operation?.startsWith("restart")&&t.header("Connection","close"),(0,Po.handlePostRequest)(e,t)}function zIe(e){let t=Fi.default.get(om.OPERATIONSAPI_NETWORK_TIMEOUT),r=Fi.default.get(om.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:qIe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,http2:Fi.default.get(om.OPERATIONSAPI_NETWORK_HTTP2),https:e}}function JIe(){let e=Fi.default.get(om.OPERATIONSAPI_NETWORK_CORS),t=Fi.default.get(om.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===$Ie)&&(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 QIe(){return Fi.default.get(om.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??GIe}var U3,Fi,Bi,x3,B3,F3,k3,H3,G3,q3,$3,V3,Po,K3,GIe,qIe,$Ie,om,im,W3=se(()=>{U3=b(require("cluster")),Fi=b(fe());G();Bi=b(Q()),x3=b(require("fastify")),B3=b(require("@fastify/cors")),F3=b(require("@fastify/compress")),k3=b(require("@fastify/static")),H3=b(IC()),G3=b(require("path")),q3=b(yt()),$3=b(pi()),V3=b(ae());Yn();Hr();Po=b(XR());$o();TC();K3=b(Ee());Fi.default.initSync();GIe=6e4,qIe=1024*1024*1024,$Ie="TRUE",{CONFIG_PARAMS:om}=j;a(VIe,"operationsServer");a(KIe,"setUp");a(YIe,"buildServer");a(WIe,"restOpenAPIHandler");a(Y3,"calculateRestHttpURL");a(jIe,"handler");a(zIe,"getServerOptions");a(JIe,"getCORSOpts");a(QIe,"getHeaderTimeoutConfig")});var ub={};ye(ub,{disableNATS:()=>ZIe,publishToStream:()=>lb,setNATSReplicator:()=>jv,setPublishToStream:()=>ewe,setSubscription:()=>Xv,start:()=>XIe});function XIe(){JE.default.get(x.CLUSTERING_ENABLED)&&rwe()}function ZIe(e=!0){X3=e}function ewe(e,t){lb=e,Xv=t}function rwe(){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];jv(s,r,i)}}Vl((r,n)=>{jv(r.tableName,r.databaseName,r),n&&e6(r)}),!j3&&(j3=!0)}function jv(e,t,r){if(t==="system"&&nwe.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 Xt{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){e6(i)}static subscribe(){let i=new is;return Xv(t,e,i),i}static subscribeOnThisThread(i){return i<(JE.default.get(x.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??twe)}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 ab(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=Z3;return i}a(n,"getNATSTransaction")}function e6(e){let t=JE.default.get(x.CLUSTERING_NODENAME);lb(`${Jv.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,Qv.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 z3,Jv,Qv,J3,Q3,JE,cb,X3,lb,Xv,twe,Z3,j3,nwe,ab,zv,Zv=se(()=>{Oe();Qi();z3=b(lr()),Jv=b(Dt()),Qv=b(io());$u();J3=b(XC()),Q3=b(xn()),JE=b(fe());G();cb=b(Q());a(XIe,"start");a(ZIe,"disableNATS");lb=z3.publishToStream,Xv=J3.setSubscription;a(ewe,"setPublishToStream");twe=2;a(rwe,"assignReplicationSource");nwe=["hdb_job","hdb_raw_analytics","hdb_info"];a(jv,"setNATSReplicator");a(e6,"publishSchema");ab=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=JE.default.get(x.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||(cb.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(lb(`${Jv.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,Qv.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw cb.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},zv=class extends ab{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,Q3.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};Z3=new zv});async function i6({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await eM.get(e,{returnNonexistent:!0});i=new nM(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await eM.get(e);o&&o.delete()}i=new fb(e,t)}return n&&(n.id=e,n.user={username:t?.username},QE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function tM(){return db++,db>65500&&(db=1),db}function rM(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 xs(i.relativeURL);o.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return bt(r,()=>s?t===void 0?c.delete(o,r):c.put(o,e.data,r):c.publish(o,e.data,r))}var r6,Yc,n6,s6,t6,eM,QE,db,fb,nM,o6=se(()=>{Oe();nc();r6=b(xn()),Yc=b(Q());Ja();n6=b(st()),s6=b(nD());Hr();Dg();t6=100,eM=ze({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"}]}}]}),QE=ze({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,n6.getWorkerIndex)()===0&&(async()=>{await s6.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of QE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Ue.getUser(r.user.username));try{await rM(r,t,r)}catch{(0,Yc.warn)("Failed to publish will",t)}QE.delete(e.id)}})();a(i6,"getSession");db=1;a(tM,"getNextMessageId");fb=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,Yc.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("/"),w;for(let X=0;X<y.length;X++)if(y[X].indexOf("+")>-1)if(y[X]==="+")w=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&w)throw new Error("Filters can not be combined");let I=!0;y[y.length-1]==="#"&&(y.length--,I=!1),w&&(n=a(X=>{let q=X.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 H=y.indexOf("+");m.url="/"+(H>-1?y.slice(0,H):y).concat("").join("/")}}else m.isCollection=!1;let E=p.path,_=p.Resource,R=await bt(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let y=await _.subscribe(m,S);if(!y)return;if(!y[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let w=(async()=>{for await(let I of y)try{let H;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,H=this.needsAcknowledge(I)):(I.acknowledge?.(),H=tM());let X=I.id;if(Array.isArray(X)&&(X=cd(X)),X==null&&(X=""),await this.listener(E+"/"+X,I.value,H,t)===!1)break;this.awaitingAcks?.size>t6?await new Promise(k=>setTimeout(k,this.awaitingAcks.size-t6)):await new Promise(setImmediate)}catch(H){(0,Yc.warn)(H)}})();return y});if(R)return R.topic=s,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=tM();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 rM(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();bt(r,async()=>{try{if(!t){let n=await QE.get(this.sessionId);n?.doesExist()&&await rM(n,n.data,r)}}finally{await QE.delete(this.sessionId)}}).catch(n=>{(0,Yc.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(rM,"publish");nM=class extends fb{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=tM(),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,Yc.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,r6.getNextMonotonicTime)()),(0,Yc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),eM.put(this.sessionRecord)}}});var sM={};ye(sM,{bypassAuth:()=>swe,start:()=>owe});function swe(){f6=!0}function owe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new d6.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),rr.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=c6(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=>{rr.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(o.events.emit("connection",u),rr.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 mf(p,l);if(!E.valid)throw rr.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,am.get)(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&pb.notify?.({username:d?.username,status:oi.SUCCESS,type:Ka.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,am.get)(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&pb.error?.({username:h,status:oi.FAILURE,type:Ka.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else rr.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){o.events.emit("error",p,u),rr.error?.(p)}else if(l.required)return rr.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&iwe(u.remoteAddress)&&(d=await Gp(),rr.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=c6(u,p=>u.write(p),null,d,o);u.on("data",f),u.on("close",m),u.on("error",p=>{rr.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function c6(e,t,r,n,s){a6||(a6=!0,ap(f=>{mb>0&&f.push({metric:"mqtt-connections",connections:mb,byThread:!0})}));let i;mb++;let o,c={protocolVersion:4},l=(0,hb.parser)({protocolVersion:5});function u(f){l.parse(f)}a(u,"onMessage");function d(){mb--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),tn(!1,"connection","mqtt","disconnect"),rr.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"),rr.info?.(y);return}let m=f.cmd;if(o)o.then&&await o;else if(m!=="connect"){rr.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;We(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 Ue.getUser(f.username,f.password.toString(),r),(0,am.get)(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&pb.notify?.({username:n?.username,status:oi.SUCCESS,type:Ka.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(z){return(0,am.get)(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&pb.error?.({username:f.username,status:oi.FAILURE,type:Ka.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,z),tn(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),tn(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let z=e.deserialize||(e.deserialize=qo(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?z(f.will.payload):void 0,delete f.will.payload}o=i6({user:n,...f}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(z){return rr.error?.(z),s.events.emit("auth-failed",f,e,z),tn(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:z.code||5,returnCode:z.code||128})}s.events.emit("connected",o,e),tn(!0,"connection","mqtt","connect"),_({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0});let y=a(async(z,Y,ce,de)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",z);let te=z.indexOf("/",1),Se=te>0?z.slice(0,te):z;_({cmd:"publish",topic:z,payload:await S(Y),messageId:ce||Math.floor(Math.random()*1e8),qos:de.qos},Se);let Ne=e._socket??e;return Ne.writableNeedDrain?new Promise(Ke=>Ne.once("drain",Ke)):!Ne.closed}catch(te){return rr.error?.(te),o?.disconnect(),s.sessions.delete(o),!1}},"listener");o.setListener(y),o.sessionWasPresent&&await o.resume();break;case"subscribe":let w=[];for(let z of f.subscriptions){let Y;try{let ce=await o.addSubscription(z,z.qos>=1);Y=ce?ce.qos||0:c.protocolVersion<5?128:143}catch(ce){s.events.emit("error",ce,e,z,o),ce.statusCode?ce.statusCode===500?rr.warn?.(ce):rr.info?.(ce):rr.error?.(ce),Y=c.protocolVersion<5?128:ce.statusCode===403?135:ce.statusCode===404?143:128}w.push(Y)}await o.committed,_({cmd:"suback",granted:w,messageId:f.messageId});break;case"unsubscribe":{let z=[];for(let Y of f.unsubscriptions)z.push(o.removeSubscription(Y)?0:17);_({cmd:"unsuback",granted:z,messageId:f.messageId});break}case"pubrel":_({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let I=f.qos===2?"pubrec":"puback",H=e.deserialize||(e.deserialize=qo(r?.headers.get?.("content-type"))),q=(f.payload?.length||0)>0?H(f.payload):void 0,k;try{k=await o.publish(f,q)}catch(z){s.events.emit("error",z,e,f,o),rr.warn?.(z),f.qos>0&&_({cmd:I,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&_({cmd:I,messageId:f.messageId,reasonCode:k===!1?144:0},f.topic);break;case"pubrec":_({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(f.messageId);break;case"pingreq":_({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"),rr.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),rr.error?.(y),_({cmd:"disconnect"})}function _(y,w){let I=(0,hb.generate)(y,c);t(I),We(I.length,"bytes-sent",w,R(y),"mqtt")}a(_,"sendPacket");function R(y){return y.qos>0?y.cmd+",qos="+y.qos:y.cmd}a(R,"packetMethodName");function S(y){return Go(y,r)}a(S,"serialize")}),l.on("error",f=>{rr.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var hb,am,l6,u6,d6,pb,rr,f6,iwe,a6,mb,m6=se(()=>{hb=require("mqtt-packet");o6();Yn();$o();as();Hr();am=b(fe());G();l6=b(ir()),u6=b(Q()),d6=require("events");YT();pb=(0,l6.loggerWithTag)("auth-event"),rr=(0,u6.forComponent)("mqtt"),f6=(0,am.get)(x.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(swe,"bypassAuth");iwe=a(e=>f6&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");a(owe,"start");mb=0;a(c6,"onSocket")});function Eb(e,t){if(t?.includes(".."))throw new iM(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var iM,oM=se(()=>{iM=class extends Error{static{a(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};a(Eb,"resolveBaseURLPath")});function p6(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 h6=se(()=>{a(p6,"deriveCommonPatternBase")});function _b(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 aM=se(()=>{a(_b,"deriveGlobOptions")});var E6,cM,XE,_6=se(()=>{oM();h6();aM();E6=require("micromatch"),cM=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"}},XE=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=Eb(this.name,this.config.urlPath),this.globOptions=_b(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new cM(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,E6.scan)(s).base),this.commonPatternBase=p6(this.patternBases)}}});function g6(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function Ou(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(g6(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(g6(n,t)){t=t.slice(n.length+1);break}}}return(0,S6.join)(e.baseURLPath,t)}var S6,lM=se(()=>{S6=require("node:path");a(g6,"pathStartsWithBase");a(Ou,"deriveURLPath")});function T6(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var Sb,y6,R6,uM,b6,A6,gb,I6=se(()=>{Sb=require("node:events");_6();y6=b(Q()),R6=b(require("chokidar")),uM=require("node:path"),b6=require("node:fs/promises");lM();A6=require("micromatch"),gb=class extends Sb.EventEmitter{static{a(this,"EntryHandler")}#e;#t;#n;#r;#s;ready;constructor(t,r,n,s){super(),this.#e=new XE(t,r,T6(n)),this.#n=s||y6.default.loggerWithTag(t),this.#r=new Set,this.#s=!1,this.ready=(0,Sb.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#i(...[t,r,n]){if(r===""&&(r="/"),!(0,A6.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,uM.join)(this.directory,r);switch(t){case"add":case"change":{let i=Ou(this.#e,r,"file"),o=(0,b6.readFile)(s).then(c=>{let l={eventType:t,entryType:"file",contents:c,stats:n,absolutePath:s,urlPath:i};this.emit("all",l),this.emit(t,l)}).finally(()=>{this.#r.delete(o),this.#c()});this.#r.add(o);break}case"unlink":{let i=Ou(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=Ou(this.#e,r,"directory"),o={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",o),this.emit(t,o);break}}}#o(t){this.emit("error",t)}#u(){this.#s=!0,this.#r.size>0&&this.#n.debug?.(`Initial scan complete, still waiting for ${this.#r.size} pending file reads`),this.#c()}#c(){this.#s&&this.#r.size===0&&this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,uM.join)(this.#e.directory,r));return this.#t=R6.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:a(r=>{let n=r.replace(/\\/g,"/"),s=t.map(i=>i.replace(/\\/g,"/"));return n!==this.#e.directory.replace(/\\/g,"/")&&s.every(i=>!n.startsWith(i))},"ignored")}).on("all",this.#i.bind(this)).on("error",this.#o.bind(this)).on("ready",this.#u.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 XE(this.name,this.directory,T6(t)),this.#a()}};a(T6,"castConfig")});var Tb,dM=se(()=>{Tb={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var Rb,w6,N6,C6,O6,P6,fM,mM,pM,hM,EM,yb,L6=se(()=>{Rb=require("events"),w6=b(require("yaml")),N6=b(require("chokidar")),C6=require("node:fs/promises"),O6=require("util"),P6=b(Q());dM();fM=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"}},mM=class extends Error{static{a(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},pM=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"}},hM=class extends Error{static{a(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},EM=class extends Error{static{a(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},yb=class extends Rb.EventEmitter{static{a(this,"OptionsWatcher")}#e;#t;#n;#r;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||P6.default.loggerWithTag(t),this.ready=(0,Rb.once)(this,"ready"),this.#t=N6.default.watch(r,{persistent:!1}).on("add",this.#o.bind(this)).on("change",this.#o.bind(this)).on("error",this.#u.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#o.bind(this))}#o(){(0,C6.readFile)(this.#e,"utf-8").then(t=>{this.#r=w6.default.parse(t),this.#r&&this.#s in this.#r?this.#n?this.#l(this.#r[this.#s],this.#n):(this.#n=this.#r[this.#s],this.emit("ready",this.#n)):this.#n&&(this.#n=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#r?(this.#a(),this.emit("remove")):(this.#a(),this.emit("ready"));return}this.emit("error",t)})}#u(t){this.emit("error",new fM(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.#a(),this.emit("remove")}#a(){this.#r=Tb,this.#n=this.#r[this.#s]}#l(t,r,n=[]){if(!this.#d(r)||!this.#d(t)){this.#m(n,t);return}for(let s of Object.keys(r))s in t||this.#m(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let o=n.concat(s),c=this.#f(o);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#m(o,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#d(c)?this.#l(i,c,o):this.#m(o,i);continue}(0,O6.isDeepStrictEqual)(i,c)||this.#m(o,i)}}#d(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#f(t){let r=this.#n;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#m(t,r){if(!this.#n)throw new mM;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new pM(t,r);let n=this.#n;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new hM(t,s);n=n[s]}if(n==null||typeof n!="object")throw new EM(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#n)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#n?this.#f(t):void 0}getAll(){return structuredClone(this.#n)}getRoot(){return this.#r}}});var ZE,D6,bb,Ab,v6=se(()=>{ZE=require("node:events");I6();L6();D6=b(Q());BD();bb=class extends Error{static{a(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},Ab=class extends ZE.EventEmitter{static{a(this,"Scope")}#e;#t;#n;#r;#s;#i;#o;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#n=t,this.#t=r,this.#e=n,this.#i=(0,D6.loggerWithTag)(this.#n),this.resources=s,this.server=i,this.#s=[],this.#o=new Set,this.ready=(0,ZE.once)(this,"ready"),this.options=new yb(t,n,this.#i).on("error",this.#c.bind(this)).on("change",this.#d.bind(this)()).on("ready",this.#u.bind(this))}get logger(){return this.#i}get name(){return this.#n}get directory(){return this.#t}get configFilePath(){return this.#e}#u(){this.emit("ready")}#c(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#a(t){let r=new gb(this.#n,this.#t,t,this.#i).on("error",this.#c.bind(this)).on("add",this.#l("add")).on("change",this.#l("change")).on("unlink",this.#l("unlink")).on("addDir",this.#l("addDir")).on("unlinkDir",this.#l("unlinkDir"));return this.#s.push(r),r}#l(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#d(){let t=this;return a(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#r){t.#r=t.#a(i);return}t.#r.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#f(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return{files:t.files,urlPath:t.urlPath}}handleEntry(t,r){let n,s=a((i,o)=>{let c=new Set,l=a(d=>{let f=o(d);if(f instanceof Promise){let m=f.catch(p=>{throw this.#i.error?.("Error in async entry handler:",p),this.#c(p),p}).finally(()=>c.delete(m));c.add(m)}},"wrapped"),u=(0,ZE.once)(i,"ready").then(async()=>{c.size>0&&await Promise.all(c),i.emit("initialLoadComplete")});return this.#o.add(u),u.finally(()=>this.#o.delete(u)),l},"wrapHandler");if(t===void 0)if(this.#r)n=this.#r;else{let i=this.#f();if(i)this.#r=this.#a(i),n=this.#r;else{this.emit("error",new bb);return}}else if(typeof t=="function"){if(this.#r)n=this.#r;else{let o=this.#f();if(o)this.#r=this.#a(o),n=this.#r;else{this.emit("error",new bb);return}}let i=s(n,t);n.on("all",i)}else if(n=this.#a(t),r){let i=s(n,r);n.on("all",i)}return n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),J4()}async waitForInitialLoads(){this.#o.size>0&&await Promise.all(this.#o)}}});function Pu(e){return typeof e=="string"&&e.trim()!==""}function _M(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>Pu(t))}function B6(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function awe(e){e.config.root&&e_.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 AM(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(B6(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let o=(0,t_.join)(e.directory,i);Ib.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 F6(e){let t=!1;if(t=await awe(e),t)return t;let r=await(0,M6.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,t_.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=Ou(e,n.path,"directory");Ib.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=Ou(e,n.path,"file"),o=await(0,U6.readFile)(s);Ib.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 e_.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var Ib,M6,e_,t_,U6,x6,wb,ki,gM,SM,TM,yM,RM,bM,AM,IM,wM,k6=se(()=>{Ib=require("node:worker_threads"),M6=b(require("fast-glob")),e_=b(Q());oM();aM();t_=require("node:path"),U6=require("node:fs/promises");lM();x6=require("micromatch"),wb=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,!Pu(this.config.files)&&!_M(this.config.files)&&!B6(this.config.files))throw new gM(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!_M(this.config.files.source)&&!Pu(this.config.files.source))throw new SM(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new TM(this);if(this.config.files.ignore!==void 0&&!_M(this.config.files.ignore)&&!Pu(this.config.files.ignore))throw new yM(this)}if(this.config.root!==void 0&&!Pu(this.config.root))throw new bM(this);if(this.config.path!==void 0&&!Pu(this.config.path))throw new IM(this);if(this.config.path&&(e_.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!Pu(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new wM(this);this.globOptions=_b(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new RM(this,r);return r.startsWith("/")&&(e_.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,x6.scan)(r).base),this.baseURLPath=Eb(this.name,this.config.urlPath)}},ki=class extends Error{static{a(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,t_.basename)(r.directory)}) ${t}`)}},gM=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)}},SM=class extends ki{static{a(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},TM=class extends ki{static{a(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},yM=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)}},RM=class extends ki{static{a(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},bM=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)}},AM=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)}},IM=class extends ki{static{a(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},wM=class extends ki{static{a(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};a(Pu,"isNonEmptyString");a(_M,"isArrayOfNonEmptyStrings");a(B6,"isObject");a(awe,"handleRoots");a(F6,"processResourceExtensionComponent")});var oR={};ye(oR,{getComponentName:()=>nR,loadComponent:()=>Pb,loadComponentDirectories:()=>$6,setErrorReporter:()=>lwe});function $6(e,t){t&&(CM=t),e&&(DM=e);let r=[];if((0,jt.existsSync)(NM)){let s=(0,jt.readdirSync)(NM,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Wr.join)(NM,o);r.push(Pb(c,CM,rA,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Pb(n,CM,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{q6=!0})}function lwe(e){Cb=e}function uwe(e){return new Promise((t,r)=>{let n=setTimeout(()=>{La.primaryStore.unlock(e,0),r(new Error("symlinking harperdb module timed out"))},1e4);if(La.primaryStore.attemptLock(e,0,()=>{clearTimeout(n),t()}))try{let s=(0,Wr.join)(e,"node_modules");(0,jt.existsSync)(s)||(0,jt.mkdirSync)(s);let i=(0,Wr.join)(s,"harperdb");if((0,jt.existsSync)(i)){if((0,jt.realpathSync)(i)===(0,jt.realpathSync)(LM.PACKAGE_ROOT))return t();(0,jt.rmSync)(i,{recursive:!0,force:!0})}(0,jt.symlinkSync)(LM.PACKAGE_ROOT,i,"dir"),t()}finally{La.primaryStore.unlock(e,0)}})}function V6(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;if(!La.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(V6(e,t))}))return new Promise((o,c)=>{n=o,s=setTimeout(()=>{c(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)});let i;return Promise.race([Promise.resolve(t.handleApplication(e)).then(async()=>{await e.waitForInitialLoads()}),new Promise((o,c)=>i=setTimeout(()=>c(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{La.primaryStore.unlock(e.name,0),clearTimeout(i)})})}async function Pb(e,t,r,n,s,i){let o=(0,jt.realpathSync)(e);if(Nb.has(o))return Nb.get(o);Nb.set(o,!0),s&&(DM=s);try{let c,l=(0,Wr.join)(e,"harperdb-config.yaml");if((0,jt.existsSync)(l)?c=n?(0,Lb.getConfigObj)():(0,PM.parseDocument)((0,jt.readFileSync)(l,"utf8")).toJSON():!n&&(0,jt.existsSync)(l=(0,Wr.join)(e,"config.yaml"))?c=(0,PM.parseDocument)((0,jt.readFileSync)(l,"utf8")).toJSON():c=Tb,!n)try{await uwe(e)}catch(m){Ba.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&Ba.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=Ob,d={};for(let m in c){let p=n?m:`${(0,Wr.basename)(e)}.${m}`;Ob=m;let h=c[m];if(!h)continue;co.loading(p);let E,_=h.package;try{if(_){let I=null;if(n)I=(0,Wr.join)(e,"components",m);else{let H=e;for(I=(0,Wr.join)(H,"node_modules",m);!(0,jt.existsSync)(I);){if(H=(0,Wr.dirname)(H),H.length<(0,G6.getHdbBasePath)().length){I=null;break}I=(0,Wr.join)(H,"node_modules",m)}}if(I)E=await Pb(I,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${_}`)}else E=cwe[m];if(!E){co.loaded(p,`Application component '${p}' processed`);continue}let R=a(I=>(I.origin=r,ze(I)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,y=S?.securePort||S?.https&&S.port,w=!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&&Ba.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let I=new Ab(m,e,l,t,Ue);await V6(I,E),co.loaded(p,`Component '${p}' loaded successfully`);continue}if(OM.isMainThread&&(E=await E.startOnMainThread?.({server:Ue,ensureTable:R,port:w,securePort:y,resources:t,...h})||E,n&&S))for(let I of[w,y])try{if(+I&&!H6.includes(I)){let H=vM.get(x.HTTP_SESSIONAFFINITY);H&&Ba.default.warn("Session affinity is not recommended and may cause memory leaks"),(H||!qS)&&(H6.push(I),aD(I,H))}}catch(H){console.error("Error listening on socket",I,H,m)}if(t.isWorker&&(E=await E.start?.({server:Ue,ensureTable:R,port:w,securePort:y,resources:t,...h})||E),DM.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let I=new wb({config:h,name:m,directory:e,module:E,resources:t});d[m]=await F6(I)}co.loaded(p,`Component '${p}' loaded successfully`)}catch(R){R.message=`Could not load component '${m}' for application '${(0,Wr.basename)(e)}' due to: ${R.message}`,Cb?.(R),((0,r_.getWorkerIndex)()===0?console:Ba.default).error(R),t.set(h.path||"/",new bl(R),null,!0),co.failed(p,R,`Could not load component '${p}'`)}}if(Ob=u,OM.isMainThread&&!q6&&i&&(0,r_.watchDir)(e,async()=>$6()),c.extensionModule||c.pluginModule){let m=await FS((0,Wr.join)(e,c.extensionModule||c.pluginModule));return Nb.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?`;Cb?.(new Error(m)),((0,r_.getWorkerIndex)()===0?console:Ba.default).error(m),co.failed((0,Wr.basename)(e),m)}for(let[m,p]of Object.entries(d))p||Ba.default.warn(`Component ${m} from (${(0,Wr.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}`,Cb?.(c),t.set("",new bl(c))}}var jt,Wr,OM,PM,vM,LM,Ba,r_,G6,Lb,NM,DM,q6,CM,cwe,H6,Nb,Cb,Ob,nR,hE=se(()=>{jt=require("node:fs"),Wr=require("node:path"),OM=require("node:worker_threads"),PM=require("yaml"),vM=b(fe()),LM=b(yt());G();e$();u$();A$();L$();D$();W$();R3();b3();I3();Ba=b(Q());M3();r_=b(st());mC();Hr();Oe();lD();G6=b(fe());W3();ER();Zv();gs();m6();Lb=b(_t());lh();vI();v6();k6();tD();OE();Vp();dM();NM=(0,Lb.resolvePath)(vM.get(x.COMPONENTSROOT)),DM=new Map;a($6,"loadComponentDirectories");cwe={REST:VS,rest:VS,graphql:iC,graphqlSchema:nC,roles:fC,jsResource:pC,fastifyRoutes:Hv,login:EC,static:qv,operationsApi:Wv,customFunctions:{},http:rR,clustering:ub,replication:oa,authentication:RE,mqtt:sM,loadEnv:$v,logging:Ba.default,dataLoader:Yv},H6=[],Nb=new Map;a(lwe,"setErrorReporter");nR=a(()=>Ob,"getComponentName");a(uwe,"symlinkHarperModule");a(V6,"sequentiallyHandleApplication");a(Pb,"loadComponent")});var aR=M((LVe,K6)=>{var{isMainThread:MM}=require("worker_threads"),{getTables:dwe}=(Oe(),D(mt)),{loadComponentDirectories:fwe,loadComponent:mwe}=(hE(),D(oR)),{resetResources:pwe}=(nc(),D(MI)),hwe=_t(),{dirname:Ewe}=require("path"),{getConnection:_we}=lr(),gwe=fe(),{CONFIG_PARAMS:Swe}=(G(),D(j)),{loadCertificates:Twe}=Ts(),{installApplications:ywe}=(AR(),D(bR)),{loadAndWatchLicensesDir:Rwe}=(uE(),D(Jy)),UM=new Map;async function bwe(e=!1){!MM&&gwe.get(Swe.CLUSTERING_ENABLED)&&_we();try{MM&&await ywe()}catch(n){console.error(n)}let t=pwe();dwe(),t.isWorker=e,MM&&Rwe(),await Twe(),await mwe(Ewe(hwe.getConfigFilePath()),t,"hdb",!0,UM),await fwe(UM,t);let r=[];for(let[n]of UM)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(bwe,"loadRootComponents");K6.exports.loadRootComponents=bwe});var st=M((vVe,Gi)=>{"use strict";__();var{Worker:Awe,MessageChannel:Iwe,parentPort:Lo,isMainThread:HM,threadId:wwe,workerData:Do}=require("worker_threads"),{PACKAGE_ROOT:Nwe}=yt(),{join:z6,isAbsolute:Cwe,extname:Owe}=require("path"),{server:J6}=(Hr(),D(bm)),{watch:Pwe,readdir:Lwe}=require("fs/promises"),{totalmem:Y6}=require("os"),{setHeapSnapshotNearHeapLimit:Dwe}=require("v8"),Wc=(G(),D(j)),Mb=fe(),Hi=Q(),{randomBytes:vwe}=require("crypto"),{_assignPackageExport:Mwe}=ai(),W6=1024*1024,Fa=[],ni=[],Uwe=50,GM=1e4,xwe="restart",Q6="request_thread_info",X6="resource_report",Z6="thread_info",eX="added-port",Bwe="ack",xM;Mwe("threads",ni);Gi.exports={startWorker:BM,restartWorkers:$M,shutdownWorkers:oX,shutdownWorkersNow:qwe,workers:Fa,setMonitorListener:Jwe,onMessageFromWorkers:$we,onMessageByType:cX,broadcast:Kwe,broadcastWithAcknowledgement:Wwe,setChildListenerByType:Gwe,getWorkerIndex:tX,getWorkerCount:rX,getTicketKeys:sX,setMainIsWorker:kwe,setTerminateTimeout:Fwe,restartNumber:Do?.restartNumber||1};ni.onMessageByType=cX;ni.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=ni.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Gi.exports.whenThreadsStarted=new Promise(e=>{Gi.exports.threadsHaveStarted=e});Mb.get(Wc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&Dwe(1);var qM;function Fwe(e){GM=e}a(Fwe,"setTerminateTimeout");function tX(){return Do?Do.workerIndex:qM?0:void 0}a(tX,"getWorkerIndex");function rX(){return Do?Do.workerCount:qM?1:void 0}a(rX,"getWorkerCount");function kwe(e){qM=e,Gi.exports.threadsHaveStarted()}a(kwe,"setMainIsWorker");var nX=1,Db;function sX(){return Db||(Db=HM?vwe(48):Do.ticketKeys,Db)}a(sX,"getTicketKeys");Object.defineProperty(J6,"workerIndex",{get(){return tX()}});Object.defineProperty(J6,"workerCount",{get(){return rX()}});var iX={[Q6](e,t){jwe(t)},[X6](e,t){zwe(t,e)}};function BM(e,t={}){let r=process.constrainedMemory?.()||Y6();r=Math.min(r,Y6(),2e4*W6);let n=Mb.get(Wc.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/W6/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let u of ni){let d=new Iwe;d.existingPort=u,i.push(d),o.push(d.port2)}Owe(e)||(e+=".js");let c=["--enable-source-maps","--expose-internals"];Mb.get(Wc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&c.push("--heapsnapshot-near-heap-limit=1");let l=new Awe(Cwe(e)?e:z6(Nwe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:c,argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:nX=t.threadCount,name:t.name,restartNumber:Gi.exports.restartNumber,ticketKeys:sX()},transferList:o,...t});for(let{port1:u,existingPort:d}of i)d.postMessage({type:eX,port:u,threadId:l.threadId},[u]);return Ub(l,!0),l.unexpectedRestarts=t.unexpectedRestarts||0,l.startCopy=()=>BM(e,t),l.on("error",u=>{Hi.error(`Worker index ${t.workerIndex} error:`,u)}),l.on("exit",u=>{Fa.splice(Fa.indexOf(l),1),!l.wasShutdown&&t.autoRestart!==!1&&(l.unexpectedRestarts<Uwe?(t.unexpectedRestarts=l.unexpectedRestarts+1,BM(e,t)):Hi.error(`Thread has been restarted ${l.restarts} times and will not be restarted`))}),l.on("message",u=>{iX[u.type]?.(u,l)}),Fa.push(l),Xwe(),t.onStarted&&t.onStarted(l),l.name=t.name,l}a(BM,"startWorker");var Hwe=[Wc.THREAD_TYPES.HTTP];async function $M(e=null,t=Math.max(nX>3,1),r=!0){if(HM){try{process.chdir(process.cwd())}catch(o){Hi.error("Unable to reestablish current working directory",o)}if(r){let{loadRootComponents:o}=aR();await o()}Gi.exports.restartNumber++,t<1&&(t=t*Fa.length);let n=[],s=[];for(let o of Fa.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Hi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Gi.exports.restartNumber,type:Wc.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Hwe.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()},GM*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===Wc.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}=jf();r&&(e==="http"||!e)&&Mb.get(Wc.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Lo.postMessage({type:xwe,workerType:e})}a($M,"restartWorkers");function Gwe(e,t){iX[e]=t}a(Gwe,"setChildListenerByType");function oX(e){return $M(e,1/0,!1)}a(oX,"shutdownWorkers");function qwe(e){return oX(e),Promise.all(Fa.map(t=>t.terminate()))}a(qwe,"shutdownWorkersNow");var aX=[];function $we(e){aX.push(e)}a($we,"onMessageFromWorkers");var FM=new Map;function cX(e,t){let r=FM.get(e);r||FM.set(e,r=[]),r.push(t)}a(cX,"onMessageByType");var Vwe=10;async function Kwe(e,t){let r=0;for(let n of ni)try{n.postMessage(e),r++>Vwe&&(r=0,await new Promise(setImmediate))}catch(s){Hi.error("Unable to send message to worker",s)}t&&uX(e,null)}a(Kwe,"broadcast");var vb=new Map,Ywe=1;function Wwe(e){return new Promise(t=>{let r=0;for(let n of ni)try{let s=Ywe++,i=a(()=>{vb.delete(s),--r===0&&t(),n!==Lo&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,vb.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of vb)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Hi.error("Unable to send message to worker",s)}r===0&&t()})}a(Wwe,"broadcastWithAcknowledgement");function jwe(e){e.postMessage({type:Z6,workers:lX()})}a(jwe,"sendThreadInfo");function lX(){let e=Date.now();return Fa.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(lX,"getChildWorkerInfo");function zwe(e,t){e.resources=t,e.resources.updated=Date.now()}a(zwe,"recordResourceReport");var kM;function Jwe(e){kM=e}a(Jwe,"setMonitorListener");var Qwe=1e3,j6=!1;function Xwe(){j6||(j6=!0,setInterval(()=>{for(let e of Fa){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}kM&&kM()},Qwe).unref())}a(Xwe,"startMonitoring");var Zwe=1e3;if(Lo&&Do?.addPorts){Ub(Lo);for(let e=0,t=Do.addPorts.length;e<t;e++){let r=Do.addPorts[e];r.threadId=Do.addThreadIds[e],Ub(r)}setInterval(()=>{let e=process.memoryUsage();Lo.postMessage({type:X6,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Zwe).unref(),xM=a(()=>new Promise((e,t)=>{Lo.on("message",r),Lo.postMessage({type:Q6});function r(n){n.type===Z6&&(Lo.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else xM=lX;Gi.exports.getThreadInfo=xM;function Ub(e,t){ni.push(e),e.on("message",r=>{if(r.type===eX)r.port.threadId=r.threadId,Ub(r.port);else if(r.type===Bwe){let n=vb.get(r.id);n&&n()}else uX(r,e)}).on("close",()=>{ni.splice(ni.indexOf(e),1)}).on("exit",()=>{ni.splice(ni.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Ub,"addPort");function uX(e,t){for(let n of aX)n(e,t);let r=FM.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Hi.error(s)}}a(uX,"notifyMessageListeners");if(HM){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await Lwe(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(z6(s,o.name));try{for await(let{filename:o}of Pwe(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await $M(),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");Gi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else Lo.on("message",async e=>{let{type:t}=e;t===Wc.ITC_EVENT_TYPES.SHUTDOWN&&(Gi.exports.restartNumber=e.restartNumber,Lo.unref(),setTimeout(()=>{Hi.warn("Thread did not voluntarily terminate",wwe),process.exit(0)},GM).unref())})});var EX=M((BVe,hX)=>{"use strict";var{promises:cm,createReadStream:eNe,createWriteStream:tNe}=require("fs"),{createGzip:rNe}=require("zlib"),{promisify:nNe}=require("util"),{pipeline:sNe}=require("stream"),iNe=nNe(sNe),KM=require("path"),pX=fe();pX.initSync();var xb=Q(),{CONFIG_PARAMS:oNe,ITC_EVENT_TYPES:UVe}=(G(),D(j)),{onMessageFromWorkers:xVe}=st(),{convertToMS:dX}=ae(),{onStorageReclamation:aNe}=(lg(),D(S0)),cNe=6e4,lNe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",uNe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",VM,fX;hX.exports=dNe;function dNe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:o}){if(s===!1)return;let c=0;if(aNe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(lNe);if(!i)throw new Error(uNe);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=dX(r));let d;return VM=Date.now(),xb.trace("Log rotate enabled, maxSize:",t,"interval:",r),fX=setInterval(async()=>{if(l){let f;f=await cm.stat(e.path),f.size>=l&&(d=await mX(e.path,i))}if(u&&Date.now()-VM>=u&&(d=await mX(e.path,i),VM=Date.now()),n||c){let f=dX(n??"1M")/(1+c);c=0;let m=await cm.readdir(i);for(let p of m)try{let h=await cm.stat(KM.join(i,p));Date.now()-h.mtimeMs>f&&await cm.unlink(KM.join(i,p))}catch(h){xb.error("Error trying to remove log",p,h)}}},o??cNe).unref(),{end(){clearInterval(fX)},getLastRotatedLogPath(){return d}}}a(dNe,"logRotator");async function mX(e,t){let r=pX.get(oNe.LOGGING_ROTATION_COMPRESS),n=KM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await cm.rename(e,n),r&&(e=n,n+=".gz",await iNe(eNe(e),rNe(),tNe(n)),await cm.unlink(e)),xb.closeLogFile(),xb.notify(`hdb.log rotated, old log moved to ${n}`),n}a(mX,"moveLogFile")});var yX={};ye(yX,{RootConfigWatcher:()=>YM});var _X,gX,SX,Bb,TX,YM,RX=se(()=>{_X=b(require("chokidar")),gX=require("node:fs/promises"),SX=b(_t()),Bb=require("node:stream"),TX=require("yaml"),YM=class extends Bb.EventEmitter{static{a(this,"RootConfigWatcher")}#e;#t;#n;ready;constructor(){super(),this.#e=(0,SX.getConfigFilePath)(),this.ready=(0,Bb.once)(this,"ready"),this.#t=_X.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,gX.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,TX.parse)(t);if(!this.#n){this.#n=r,this.emit("ready",this.#n);return}this.emit("change",this.#n=r)}).catch(t=>{})}close(){return this.#t.close(),this.#n=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#n}}});var Q=M((qVe,Kb)=>{"use strict";var ka=require("fs-extra"),{workerData:fNe,threadId:mNe,isMainThread:CX}=require("worker_threads"),i_=require("path"),OX=require("yaml"),PX=require("properties-reader"),jr=(G(),D(j)),bX=rl(),pNe=require("os"),{PACKAGE_ROOT:eU}=yt(),{_assignPackageExport:hNe}=ai(),{Console:ENe}=require("console"),jM=process.env.IS_SCRIPTED_SERVICE?function(){}:process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),AX=new Map,{join:Ha}=i_,IX=1e4,mr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},_Ne={STDOUT:"stdOut",STDERR:"stdErr"},GVe=Ha(eU,"logs"),gNe=Ha(eU,"config/yaml/",jr.HDB_DEFAULT_CONFIG_FILE),SNe=1e4,o_,a_,Fb,LX,vo,zM,WM,Hb,xt,es,Gb,qb,lm,s_,n_;function kb(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=i_.dirname(n)):t.root?n=Ha(t.root,zM):(n=xt.path,t.root||(t.root=i_.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=mr[t.level]??xt?.level??mr.info,DX(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(xt.path===e.path&&r)}a(kb,"updateLogger");function DX(e){let t=e.conditional??(e.conditional={});t.notify=mr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=mr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=mr.error>=e.level?e.error.bind(e):void 0,t.warn=mr.warn>=e.level?e.warn.bind(e):void 0,t.info=mr.info>=e.level?e.info.bind(e):void 0,t.debug=mr.debug>=e.level?e.debug.bind(e):void 0,t.trace=mr.trace>=e.level?e.trace.bind(e):void 0}a(DX,"updateConditional");async function JM(){n_||(n_=new kNe,await n_.ready,n_.on("change",JM));let e=n_.config,t=e.logging??{};kb(xt,t),Hb=xt.path,o_=t.console??!1,t.external&&kb(es,t.external);for(let r in e){let n=e[r];n.logging?kb(xt.forComponent(r),n.logging,r):xt.hasComponent(r)&&kb(xt.forComponent(r),t,r)}}a(JM,"updateLogSettings");var QM=class extends ENe{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){Ln="trace",this.level<=mr.trace&&super.info(...t),Ln="info"}debug(...t){Ln="debug",this.level<=mr.debug&&super.info(...t),Ln="info"}info(...t){Ln="info",this.level<=mr.info&&super.info(...t),Ln="info"}warn(...t){Ln="warn",this.level<=mr.warn&&super.warn(...t),Ln="info"}error(...t){Ln="error",this.level<=mr.error&&super.error(...t),Ln="info"}fatal(...t){lm=!0;try{Ln="fatal",this.level<=mr.fatal&&super.error(...t),Ln="info"}finally{lm=!1}}notify(...t){lm=!0;try{Ln="notify",this.level<=mr.notify&&super.info(...t),Ln="info"}finally{lm=!1}}withTag(t){return MX(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};s_===void 0&&vX();Kb.exports={notify:CNe,fatal:ONe,error:ZM,warn:PNe,info:INe,debug:NNe,trace:wNe,logLevel:vo,loggerWithTag:MX,suppressLogging:bNe,initLogSettings:vX,logCustomLevel:LNe,closeLogFile:UX,createLogger:Vb,logsAtLevel:yNe,getLogFilePath:a(()=>Hb,"getLogFilePath"),forComponent:a(e=>xt.forComponent(e),"forComponent"),setMainLogger:BNe,setLogLevel:vNe,OUTPUTS:_Ne,AuthAuditLog:FNe,start:JM,startOnMainThread:JM,errorToString:xNe,disableStdio:TNe};function TNe(){jM=a(function(){},"nativeStdWrite")}a(TNe,"disableStdio");Kb.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)}};hNe("logger",Kb.exports.externalLogger);function yNe(e){return mr[vo]<=mr[e]}a(yNe,"logsAtLevel");function vX(e=!1){try{if(s_===void 0||e){UX();let t=DNe(),r=bX(["ROOTPATH"]);try{s_=PX(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!ka.pathExistsSync(Ha(r.ROOTPATH,jr.HDB_CONFIG_FILE)))throw s}let n;if({level:vo,configLogPath:WM,toFile:a_,logConsole:o_,colorMode:LX,rotation:n,toStream:Fb}=MNe(r.ROOTPATH?Ha(r.ROOTPATH,jr.HDB_CONFIG_FILE):s_.get("settings_path")),zM=jr.LOG_NAMES.HDB,Hb=Ha(WM,zM),xt=Vb({path:Hb,level:vo,stdStreams:Fb,rotation:n}),es=xt.forComponent("external"),es.tag=null,CX)try{require("segfault-handler").registerHandler(Ha(WM,"crash.log"))}catch{}}}catch(t){if(s_=void 0,t.code===jr.NODE_ERROR_CODES.ENOENT||t.code===jr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=bX(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){vo=o;continue}i===jr.CONFIG_PARAMS.LOGGING_CONSOLE&&(o_=i)}let{defaultLevel:n}=UNe();a_=!1,Fb=!0,vo=vo===void 0?n:vo,xt=Vb({level:vo}),es=xt.forComponent("external"),es.tag=null;return}throw ZM("Error initializing log settings"),ZM(t),t}process.env.DEV_MODE&&(Fb=!0),RNe()}a(vX,"initLogSettings");var jc=!0;function RNe(){a_&&(process.stdout.write=function(e){return typeof e=="string"&&jc&&o_&&(e=e.toString(),e[e.length-1]===`
134
134
  `&&(e=e.slice(0,-1)),qb(e)),jM.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&jc&&o_&&(e[e.length-1]===`
135
135
  `&&(e=e.slice(0,-1)),qb(e)),jM.apply(process.stderr,arguments)})}a(RNe,"stdioLogging");function MX(e,t,r=xt){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<=mr[i]?function(...o){$b=e;try{return s.call(r,...o)}finally{$b=void 0}}:null}a(n,"logWithTag")}a(MX,"loggerWithTag");function bNe(e){try{jc=!1,e()}finally{jc=!0}}a(bNe,"suppressLogging");var ANe=fNe?.name?.replace(/ /g,"-")||"main",Ln="info",XM,$b;function Vb({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:o}){t||(t="info");let c=mr[t],l;function u(p){if(a_)if(l.logToStdstreams){f(p.replace(/\x1b\[[0-9;]*m/g,"")),jc=!1;try{process.stdout.write(p)}finally{jc=!0}}else f(p);else r&&process.stdout.write(p)}a(u,"logStdOut");function d(p){if(a_){if(f(p),r){jc=!1;try{process.stderr.write(p)}finally{jc=!0}}}else r&&process.stderr.write(p)}a(d,"logStdErr");let f=e&&NX(e,n,s);function m(p){return{write(h){let E=[Ln];E.unshift(XM||ANe+"/"+mNe),$b&&E.push($b),l.tag&&E.push(l.tag),p(`[${E.join("] [")}]: ${h}`)}}}if(a(m,"logPrepend"),s&&(qb=f),l=new QM({stdout:m(i??u),stderr:m(i??d),colorMode:r&&LX||!1},c),DX(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(p){e=p,f=NX(e,l.rotation,s),s&&(qb=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=Vb({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(Vb,"createLogger");var wX=100;function NX(e,t,r){let n=AX.get(e),s,i,o,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,AX.set(e,n)),CX&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let h=EX();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<IX?c.push(E):c.length===IX&&c.push(`Maximum log buffer rate reached, logs will be throttled
138
- `),lm&&(clearTimeout(o),f())):lm||l<performance.now()+wX?f(E):(l=Math.min(l,performance.now()+wX),c=[E],o=setTimeout(f,1))}function f(h){if(p(),s){let E=performance.now();ka.appendFileSync(s,c?c.join(""):h);let _=performance.now();l=Math.max(_,l)+(_-E)*50}else i||console.log(c?c.join(""):h);c&&(c=null)}function m(){try{ka.closeSync(s)}catch{}s=null,r&&(Gb=null)}function p(h){if(!s){try{s=ka.openSync(e,"a"),r&&(Gb=s)}catch(E){if(E.code==="ENOENT"&&!h)return ka.mkdirpSync(i_.dirname(e)),p(!0);i||(i=!0,console.error(E))}setTimeout(()=>{m()},SNe).unref()}}}a(NX,"getFileLogger");function INe(...e){xt.info(...e)}a(INe,"info");function wNe(...e){xt.trace(...e)}a(wNe,"trace");function ZM(...e){xt.error(...e)}a(ZM,"error");function NNe(...e){xt.debug(...e)}a(NNe,"debug");function CNe(...e){xt.notify(...e)}a(CNe,"notify");function ONe(...e){xt.fatal(...e)}a(ONe,"fatal");function PNe(...e){xt.warn(...e)}a(PNe,"warn");function LNe(e,t,r,...n){XM=r.service_name;try{xt[e](...n)}finally{XM=void 0}}a(LNe,"logCustomLevel");function DNe(){let e;try{e=pNe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Ha(e,jr.HDB_HOME_DIR_NAME,jr.BOOT_PROPS_FILE_NAME);return ka.existsSync(t)||(t=Ha(eU,"utility/hdb_boot_properties.file")),t}a(DNe,"getPropsFilePath");function vNe(e){Do=e}a(vNe,"setLogLevel");function MNe(e){try{if(e.includes("config/settings.js")){let u=PX(e);return{level:u.get(jr.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:i_.dirname(u.get(jr.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:u.get(jr.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:u.get(jr.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=OX.parseDocument(ka.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","colors"])??!0,l=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:o,colorMode:c,rotation:l}}catch(t){if(t.code===jr.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(MNe,"getLogConfig");function UNe(){try{let e=OX.parseDocument(ka.readFileSync(gNe,"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(UNe,"getDefaultConfig");function xNe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}a(xNe,"errorToString");function BNe(e){xt=e}a(BNe,"setMainLogger");function UX(){try{ka.closeSync(Gb)}catch{}Gb=null}a(UX,"closeLogFile");function FNe(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(FNe,"AuthAuditLog");var{RootConfigWatcher:kNe}=(RX(),D(yX))});var ae=M(we=>{"use strict";var zc=require("path"),HX=require("fs-extra"),ts=Q(),xX=require("fs-extra"),Yb=require("os"),HNe=require("net"),GNe=require("recursive-iterator"),Ur=(G(),D(j)),{PACKAGE_ROOT:qNe}=yt(),BX=require("papaparse"),Wb=require("moment"),{inspect:$Ne}=require("util"),FX=require("is-number"),VNe=require("minimist"),KNe=require("https"),YNe=require("http"),WNe=/^((\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)))$/,jNe=require("util").promisify(setTimeout),zNe="",JNe=4,kX={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};we.isEmpty=Os;we.isEmptyOrZeroLength=vo;we.arrayHasEmptyValues=ZNe;we.arrayHasEmptyOrZeroLengthValues=eCe;we.buildFolderPath=tCe;we.isBoolean=GX;we.errorizeMessage=QNe;we.stripFileExtension=nCe;we.autoCast=sCe;we.autoCastJSON=qX;we.autoCastJSONDeep=rU;we.removeDir=iCe;we.compareVersions=oCe;we.isCompatibleDataVersion=aCe;we.escapeRawValue=cCe;we.unescapeValue=lCe;we.stringifyProps=uCe;we.timeoutPromise=fCe;we.isClusterOperation=pCe;we.getClusterUser=ECe;we.checkGlobalSchemaTable=hCe;we.getHomeDir=VX;we.getPropsFilePath=dCe;we.promisifyPapaParse=_Ce;we.removeBOM=KX;we.createEventPromise=gCe;we.checkSchemaTableExist=SCe;we.checkSchemaExists=YX;we.checkTableExists=WX;we.getStartOfTomorrowInSeconds=TCe;we.getLimitKey=yCe;we.isObject=rCe;we.isNotEmptyAndHasValue=XNe;we.autoCasterIsNumberCheck=$X;we.backtickASTSchemaItems=RCe;we.isPortTaken=mCe;we.createForkArgs=bCe;we.autoCastBoolean=ACe;we.autoCastBooleanStrict=ICe;we.asyncSetTimeout=jNe;we.getTableHashAttribute=wCe;we.doesSchemaExist=NCe;we.doesTableExist=CCe;we.stringifyObj=OCe;we.ms_to_time=PCe;we.changeExtension=LCe;we.getEnvCliRootPath=nU;we.noBootFile=DCe;we.httpRequest=vCe;we.transformReq=MCe;we.convertToMS=UCe;we.PACKAGE_ROOT=qNe;function QNe(e){return e instanceof Error?e:new Error(e)}a(QNe,"errorizeMessage");function Os(e){return e==null}a(Os,"isEmpty");function XNe(e){return!Os(e)&&(e||e===0||e===""||GX(e))}a(XNe,"isNotEmptyAndHasValue");function vo(e){return Os(e)||e.length===0||e.size===0}a(vo,"isEmptyOrZeroLength");function ZNe(e){if(Os(e))return!0;for(let t=0;t<e.length;t++)if(Os(e[t]))return!0;return!1}a(ZNe,"arrayHasEmptyValues");function eCe(e){if(vo(e))return!0;for(let t=0;t<e.length;t++)if(vo(e[t]))return!0;return!1}a(eCe,"arrayHasEmptyOrZeroLengthValues");function tCe(...e){try{return e.join(zc.sep)}catch{console.error(e)}}a(tCe,"buildFolderPath");function GX(e){return Os(e)?!1:e===!0||e===!1}a(GX,"isBoolean");function rCe(e){return Os(e)?!1:typeof e=="object"}a(rCe,"isObject");function nCe(e){return vo(e)?zNe:e.slice(0,-JNe)}a(nCe,"stripFileExtension");function sCe(e){return Os(e)||e===""||typeof e!="string"?e:kX[e]!==void 0?kX[e]:$X(e)===!0?Number(e):WNe.test(e)?new Date(e):e}a(sCe,"autoCast");function qX(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(qX,"autoCastJSON");function rU(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=rU(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=rU(r);n!==r&&(e[t]=n)}return e}else return qX(e)}a(rU,"autoCastJSONDeep");function $X(e){if(e.startsWith("0.")&&FX(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&FX(e))}a($X,"autoCasterIsNumberCheck");async function iCe(e){if(vo(e))throw new Error(`Directory path: ${e} does not exist`);try{await xX.emptyDir(e),await xX.remove(e)}catch(t){throw ts.error(`Error removing files in ${e} -- ${t}`),t}}a(iCe,"removeDir");function oCe(e,t){if(vo(e)){ts.info("Invalid current version sent as parameter.");return}if(vo(t)){ts.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(oCe,"compareVersions");function aCe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(aCe,"isCompatibleDataVersion");function cCe(e){if(Os(e))return e;let t=String(e);return t==="."?Ur.UNICODE_PERIOD:t===".."?Ur.UNICODE_PERIOD+Ur.UNICODE_PERIOD:t.replace(Ur.FORWARD_SLASH_REGEX,Ur.UNICODE_FORWARD_SLASH)}a(cCe,"escapeRawValue");function lCe(e){if(Os(e))return e;let t=String(e);return t===Ur.UNICODE_PERIOD?".":t===Ur.UNICODE_PERIOD+Ur.UNICODE_PERIOD?"..":String(e).replace(Ur.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(lCe,"unescapeValue");function uCe(e,t){if(Os(e))return ts.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+Yb.EOL}!vo(n)&&n[0]===";"?r+=" "+n+s+Yb.EOL:vo(n)||(r+=n+"="+s+Yb.EOL)}catch{ts.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(uCe,"stringifyProps");function VX(){let e;try{e=Yb.homedir()}catch{e=process.env.HOME}return e}a(VX,"getHomeDir");function dCe(){let e=zc.join(VX(),Ur.HDB_HOME_DIR_NAME,Ur.BOOT_PROPS_FILE_NAME);return HX.existsSync(e)||(e=zc.join(__dirname,"../","hdb_boot_properties.file")),e}a(dCe,"getPropsFilePath");function fCe(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(fCe,"timeoutPromise");async function mCe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=HNe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(mCe,"isPortTaken");function pCe(e){try{return Ur.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){ts.error(`Error checking operation against cluster ops ${t}`)}return!1}a(pCe,"isClusterOperation");function hCe(e,t){let r=(Oe(),D(mt)).getDatabases();if(!r[e])return jb.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return jb.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(hCe,"checkGlobalSchemaTable");function ECe(e,t){if(Os(t)){ts.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Os(e)||vo(e)){ts.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){ts.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){ts.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(ECe,"getClusterUser");function _Ce(){BX.parsePromise=function(e,t,r){return new Promise(function(n,s){BX.parse(e,{header:!0,transformHeader:KX,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(_Ce,"promisifyPapaParse");function KX(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(KX,"removeBOM");function gCe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;ts.info(`Got cluster status event response: ${$Ne(s)}`);try{i.cancel()}catch{ts.error("Error trying to cancel timeout.")}n(s)})})}a(gCe,"createEventPromise");function SCe(e,t){let r=YX(e);if(r)return r;let n=WX(e,t);if(n)return n}a(SCe,"checkSchemaTableExist");function YX(e){let{getDatabases:t}=(Oe(),D(mt));if(!t()[e])return jb.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(YX,"checkSchemaExists");function WX(e,t){let{getDatabases:r}=(Oe(),D(mt));if(!r()[e][t])return jb.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(WX,"checkTableExists");function TCe(){let e=Wb().utc().add(1,"d").startOf("d").unix(),t=Wb().utc().unix();return e-t}a(TCe,"getStartOfTomorrowInSeconds");function yCe(){return Wb().utc().format("DD-MM-YYYY")}a(yCe,"getLimitKey");function RCe(e){try{let t=new GNe(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){ts.error("Got an error back ticking items."),ts.error(t)}}a(RCe,"backtickASTSchemaItems");function bCe(e){return[e]}a(bCe,"createForkArgs");function ACe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(ACe,"autoCastBoolean");function ICe(e){if(typeof e=="string"){let t=e.toLowerCase();if(t==="true")return!0;if(t==="false")return!1}return e}a(ICe,"autoCastBooleanStrict");function wCe(e,t){let{getDatabases:r}=(Oe(),D(mt)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(wCe,"getTableHashAttribute");function NCe(e){let{getDatabases:t}=(Oe(),D(mt));return t()[e]!==void 0}a(NCe,"doesSchemaExist");function CCe(e,t){let{getDatabases:r}=(Oe(),D(mt));return r()[e]?.[t]!==void 0}a(CCe,"doesTableExist");function OCe(e){try{return JSON.stringify(e)}catch{return e}}a(OCe,"stringifyObj");function PCe(e){let t=Wb.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(PCe,"ms_to_time");function LCe(e,t){let r=zc.basename(e,zc.extname(e));return zc.join(zc.dirname(e),r+t)}a(LCe,"changeExtension");function nU(){if(process.env[Ur.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ur.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=VNe(process.argv);if(e[Ur.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ur.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(nU,"getEnvCliRootPath");var tU;function DCe(){if(tU)return tU;let e=nU();if(nU()&&HX.pathExistsSync(zc.join(e,Ur.HDB_CONFIG_FILE)))return tU=!0,!0}a(DCe,"noBootFile");function vCe(e,t){let r;return e.protocol==="http:"?r=YNe:r=KNe,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(vCe,"httpRequest");function MCe(e){if(!e.schema&&!e.database){e.schema=Ur.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(MCe,"transformReq");function UCe(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(UCe,"convertToMS");var jb=Jr()});__();var sU=(G(),D(j)),jX=ae(),c_=Q(),xCe=pi(),BCe=(Yn(),D(gi)),FCe=(NR(),D(wR)),{start:kCe}=(Zv(),D(ub)),{closeConnection:HCe}=lr(),zX=require("moment"),JX=YR(),{cloneDeep:GCe}=require("lodash"),qCe=process.env[sU.PROCESS_NAME_ENV_PROP],Jc=qCe.substring(4);a((async function(){let t={id:Jc,request:void 0},r=0;try{c_.notify("Starting job:",Jc),kCe(),xCe.setSchemaDataToGlobal(),await BCe.setUsersWithRolesCache();let n=await JX.getJobById(Jc);if(jX.isEmptyOrZeroLength(n))throw new Error(`Unable to find a record in hdbJob for job: ${Jc}`);let{request:s}=n[0];if(jX.isEmptyOrZeroLength(s))throw new Error("Did not find job request in hdb_job table, unable to proceed");s=GCe(s);let i=FCe.getOperationFunction(s);c_.trace("Running operation:",s.operation,"for job",Jc);let o=await i.job_operation_function(s);c_.trace("Result from job:",Jc,o),t.status=sU.JOB_STATUS_ENUM.COMPLETE,typeof o=="string"?t.message=o:(t.result=o,t.message="Successfully completed job: "+Jc),t.end_datetime=zX().valueOf(),c_.notify("Successfully completed job:",Jc)}catch(n){r=1,c_.error(n),t.status=sU.JOB_STATUS_ENUM.ERROR,t.message=n.message?n.message:n,t.end_datetime=zX().valueOf()}finally{await JX.updateJob(t),await HCe(),setTimeout(()=>{process.exit(r)},3e3).unref()}}),"job")();
138
+ `),lm&&(clearTimeout(o),f())):lm||l<performance.now()+wX?f(E):(l=Math.min(l,performance.now()+wX),c=[E],o=setTimeout(f,1))}function f(h){if(p(),s){let E=performance.now();ka.appendFileSync(s,c?c.join(""):h);let _=performance.now();l=Math.max(_,l)+(_-E)*50}else i||console.log(c?c.join(""):h);c&&(c=null)}function m(){try{ka.closeSync(s)}catch{}s=null,r&&(Gb=null)}function p(h){if(!s){try{s=ka.openSync(e,"a"),r&&(Gb=s)}catch(E){if(E.code==="ENOENT"&&!h)return ka.mkdirpSync(i_.dirname(e)),p(!0);i||(i=!0,console.error(E))}setTimeout(()=>{m()},SNe).unref()}}}a(NX,"getFileLogger");function INe(...e){xt.info(...e)}a(INe,"info");function wNe(...e){xt.trace(...e)}a(wNe,"trace");function ZM(...e){xt.error(...e)}a(ZM,"error");function NNe(...e){xt.debug(...e)}a(NNe,"debug");function CNe(...e){xt.notify(...e)}a(CNe,"notify");function ONe(...e){xt.fatal(...e)}a(ONe,"fatal");function PNe(...e){xt.warn(...e)}a(PNe,"warn");function LNe(e,t,r,...n){XM=r.service_name;try{xt[e](...n)}finally{XM=void 0}}a(LNe,"logCustomLevel");function DNe(){let e;try{e=pNe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Ha(e,jr.HDB_HOME_DIR_NAME,jr.BOOT_PROPS_FILE_NAME);return ka.existsSync(t)||(t=Ha(eU,"utility/hdb_boot_properties.file")),t}a(DNe,"getPropsFilePath");function vNe(e){vo=e}a(vNe,"setLogLevel");function MNe(e){try{if(e.includes("config/settings.js")){let u=PX(e);return{level:u.get(jr.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:i_.dirname(u.get(jr.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:u.get(jr.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:u.get(jr.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=OX.parseDocument(ka.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","colors"])??!0,l=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:o,colorMode:c,rotation:l}}catch(t){if(t.code===jr.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(MNe,"getLogConfig");function UNe(){try{let e=OX.parseDocument(ka.readFileSync(gNe,"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(UNe,"getDefaultConfig");function xNe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}a(xNe,"errorToString");function BNe(e){xt=e}a(BNe,"setMainLogger");function UX(){try{ka.closeSync(Gb)}catch{}Gb=null}a(UX,"closeLogFile");function FNe(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(FNe,"AuthAuditLog");var{RootConfigWatcher:kNe}=(RX(),D(yX))});var ae=M(we=>{"use strict";var zc=require("path"),HX=require("fs-extra"),ts=Q(),xX=require("fs-extra"),Yb=require("os"),HNe=require("net"),GNe=require("recursive-iterator"),Ur=(G(),D(j)),{PACKAGE_ROOT:qNe}=yt(),BX=require("papaparse"),Wb=require("moment"),{inspect:$Ne}=require("util"),FX=require("is-number"),VNe=require("minimist"),KNe=require("https"),YNe=require("http"),WNe=/^((\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)))$/,jNe=require("util").promisify(setTimeout),zNe="",JNe=4,kX={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};we.isEmpty=Os;we.isEmptyOrZeroLength=Mo;we.arrayHasEmptyValues=ZNe;we.arrayHasEmptyOrZeroLengthValues=eCe;we.buildFolderPath=tCe;we.isBoolean=GX;we.errorizeMessage=QNe;we.stripFileExtension=nCe;we.autoCast=sCe;we.autoCastJSON=qX;we.autoCastJSONDeep=rU;we.removeDir=iCe;we.compareVersions=oCe;we.isCompatibleDataVersion=aCe;we.escapeRawValue=cCe;we.unescapeValue=lCe;we.stringifyProps=uCe;we.timeoutPromise=fCe;we.isClusterOperation=pCe;we.getClusterUser=ECe;we.checkGlobalSchemaTable=hCe;we.getHomeDir=VX;we.getPropsFilePath=dCe;we.promisifyPapaParse=_Ce;we.removeBOM=KX;we.createEventPromise=gCe;we.checkSchemaTableExist=SCe;we.checkSchemaExists=YX;we.checkTableExists=WX;we.getStartOfTomorrowInSeconds=TCe;we.getLimitKey=yCe;we.isObject=rCe;we.isNotEmptyAndHasValue=XNe;we.autoCasterIsNumberCheck=$X;we.backtickASTSchemaItems=RCe;we.isPortTaken=mCe;we.createForkArgs=bCe;we.autoCastBoolean=ACe;we.autoCastBooleanStrict=ICe;we.asyncSetTimeout=jNe;we.getTableHashAttribute=wCe;we.doesSchemaExist=NCe;we.doesTableExist=CCe;we.stringifyObj=OCe;we.ms_to_time=PCe;we.changeExtension=LCe;we.getEnvCliRootPath=nU;we.noBootFile=DCe;we.httpRequest=vCe;we.transformReq=MCe;we.convertToMS=UCe;we.PACKAGE_ROOT=qNe;function QNe(e){return e instanceof Error?e:new Error(e)}a(QNe,"errorizeMessage");function Os(e){return e==null}a(Os,"isEmpty");function XNe(e){return!Os(e)&&(e||e===0||e===""||GX(e))}a(XNe,"isNotEmptyAndHasValue");function Mo(e){return Os(e)||e.length===0||e.size===0}a(Mo,"isEmptyOrZeroLength");function ZNe(e){if(Os(e))return!0;for(let t=0;t<e.length;t++)if(Os(e[t]))return!0;return!1}a(ZNe,"arrayHasEmptyValues");function eCe(e){if(Mo(e))return!0;for(let t=0;t<e.length;t++)if(Mo(e[t]))return!0;return!1}a(eCe,"arrayHasEmptyOrZeroLengthValues");function tCe(...e){try{return e.join(zc.sep)}catch{console.error(e)}}a(tCe,"buildFolderPath");function GX(e){return Os(e)?!1:e===!0||e===!1}a(GX,"isBoolean");function rCe(e){return Os(e)?!1:typeof e=="object"}a(rCe,"isObject");function nCe(e){return Mo(e)?zNe:e.slice(0,-JNe)}a(nCe,"stripFileExtension");function sCe(e){return Os(e)||e===""||typeof e!="string"?e:kX[e]!==void 0?kX[e]:$X(e)===!0?Number(e):WNe.test(e)?new Date(e):e}a(sCe,"autoCast");function qX(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(qX,"autoCastJSON");function rU(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=rU(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=rU(r);n!==r&&(e[t]=n)}return e}else return qX(e)}a(rU,"autoCastJSONDeep");function $X(e){if(e.startsWith("0.")&&FX(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&FX(e))}a($X,"autoCasterIsNumberCheck");async function iCe(e){if(Mo(e))throw new Error(`Directory path: ${e} does not exist`);try{await xX.emptyDir(e),await xX.remove(e)}catch(t){throw ts.error(`Error removing files in ${e} -- ${t}`),t}}a(iCe,"removeDir");function oCe(e,t){if(Mo(e)){ts.info("Invalid current version sent as parameter.");return}if(Mo(t)){ts.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(oCe,"compareVersions");function aCe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(aCe,"isCompatibleDataVersion");function cCe(e){if(Os(e))return e;let t=String(e);return t==="."?Ur.UNICODE_PERIOD:t===".."?Ur.UNICODE_PERIOD+Ur.UNICODE_PERIOD:t.replace(Ur.FORWARD_SLASH_REGEX,Ur.UNICODE_FORWARD_SLASH)}a(cCe,"escapeRawValue");function lCe(e){if(Os(e))return e;let t=String(e);return t===Ur.UNICODE_PERIOD?".":t===Ur.UNICODE_PERIOD+Ur.UNICODE_PERIOD?"..":String(e).replace(Ur.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(lCe,"unescapeValue");function uCe(e,t){if(Os(e))return ts.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+Yb.EOL}!Mo(n)&&n[0]===";"?r+=" "+n+s+Yb.EOL:Mo(n)||(r+=n+"="+s+Yb.EOL)}catch{ts.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(uCe,"stringifyProps");function VX(){let e;try{e=Yb.homedir()}catch{e=process.env.HOME}return e}a(VX,"getHomeDir");function dCe(){let e=zc.join(VX(),Ur.HDB_HOME_DIR_NAME,Ur.BOOT_PROPS_FILE_NAME);return HX.existsSync(e)||(e=zc.join(__dirname,"../","hdb_boot_properties.file")),e}a(dCe,"getPropsFilePath");function fCe(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(fCe,"timeoutPromise");async function mCe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=HNe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(mCe,"isPortTaken");function pCe(e){try{return Ur.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){ts.error(`Error checking operation against cluster ops ${t}`)}return!1}a(pCe,"isClusterOperation");function hCe(e,t){let r=(Oe(),D(mt)).getDatabases();if(!r[e])return jb.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return jb.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(hCe,"checkGlobalSchemaTable");function ECe(e,t){if(Os(t)){ts.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Os(e)||Mo(e)){ts.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){ts.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){ts.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(ECe,"getClusterUser");function _Ce(){BX.parsePromise=function(e,t,r){return new Promise(function(n,s){BX.parse(e,{header:!0,transformHeader:KX,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(_Ce,"promisifyPapaParse");function KX(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(KX,"removeBOM");function gCe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;ts.info(`Got cluster status event response: ${$Ne(s)}`);try{i.cancel()}catch{ts.error("Error trying to cancel timeout.")}n(s)})})}a(gCe,"createEventPromise");function SCe(e,t){let r=YX(e);if(r)return r;let n=WX(e,t);if(n)return n}a(SCe,"checkSchemaTableExist");function YX(e){let{getDatabases:t}=(Oe(),D(mt));if(!t()[e])return jb.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(YX,"checkSchemaExists");function WX(e,t){let{getDatabases:r}=(Oe(),D(mt));if(!r()[e][t])return jb.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(WX,"checkTableExists");function TCe(){let e=Wb().utc().add(1,"d").startOf("d").unix(),t=Wb().utc().unix();return e-t}a(TCe,"getStartOfTomorrowInSeconds");function yCe(){return Wb().utc().format("DD-MM-YYYY")}a(yCe,"getLimitKey");function RCe(e){try{let t=new GNe(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){ts.error("Got an error back ticking items."),ts.error(t)}}a(RCe,"backtickASTSchemaItems");function bCe(e){return[e]}a(bCe,"createForkArgs");function ACe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(ACe,"autoCastBoolean");function ICe(e){if(typeof e=="string"){let t=e.toLowerCase();if(t==="true")return!0;if(t==="false")return!1}return e}a(ICe,"autoCastBooleanStrict");function wCe(e,t){let{getDatabases:r}=(Oe(),D(mt)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(wCe,"getTableHashAttribute");function NCe(e){let{getDatabases:t}=(Oe(),D(mt));return t()[e]!==void 0}a(NCe,"doesSchemaExist");function CCe(e,t){let{getDatabases:r}=(Oe(),D(mt));return r()[e]?.[t]!==void 0}a(CCe,"doesTableExist");function OCe(e){try{return JSON.stringify(e)}catch{return e}}a(OCe,"stringifyObj");function PCe(e){let t=Wb.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(PCe,"ms_to_time");function LCe(e,t){let r=zc.basename(e,zc.extname(e));return zc.join(zc.dirname(e),r+t)}a(LCe,"changeExtension");function nU(){if(process.env[Ur.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ur.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=VNe(process.argv);if(e[Ur.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ur.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(nU,"getEnvCliRootPath");var tU;function DCe(){if(tU)return tU;let e=nU();if(nU()&&HX.pathExistsSync(zc.join(e,Ur.HDB_CONFIG_FILE)))return tU=!0,!0}a(DCe,"noBootFile");function vCe(e,t){let r;return e.protocol==="http:"?r=YNe:r=KNe,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(vCe,"httpRequest");function MCe(e){if(!e.schema&&!e.database){e.schema=Ur.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(MCe,"transformReq");function UCe(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(UCe,"convertToMS");var jb=Jr()});__();var sU=(G(),D(j)),jX=ae(),c_=Q(),xCe=pi(),BCe=(Yn(),D(gi)),FCe=(NR(),D(wR)),{start:kCe}=(Zv(),D(ub)),{closeConnection:HCe}=lr(),zX=require("moment"),JX=YR(),{cloneDeep:GCe}=require("lodash"),qCe=process.env[sU.PROCESS_NAME_ENV_PROP],Jc=qCe.substring(4);a((async function(){let t={id:Jc,request:void 0},r=0;try{c_.notify("Starting job:",Jc),kCe(),xCe.setSchemaDataToGlobal(),await BCe.setUsersWithRolesCache();let n=await JX.getJobById(Jc);if(jX.isEmptyOrZeroLength(n))throw new Error(`Unable to find a record in hdbJob for job: ${Jc}`);let{request:s}=n[0];if(jX.isEmptyOrZeroLength(s))throw new Error("Did not find job request in hdb_job table, unable to proceed");s=GCe(s);let i=FCe.getOperationFunction(s);c_.trace("Running operation:",s.operation,"for job",Jc);let o=await i.job_operation_function(s);c_.trace("Result from job:",Jc,o),t.status=sU.JOB_STATUS_ENUM.COMPLETE,typeof o=="string"?t.message=o:(t.result=o,t.message="Successfully completed job: "+Jc),t.end_datetime=zX().valueOf(),c_.notify("Successfully completed job:",Jc)}catch(n){r=1,c_.error(n),t.status=sU.JOB_STATUS_ENUM.ERROR,t.message=n.message?n.message:n,t.end_datetime=zX().valueOf()}finally{await JX.updateJob(t),await HCe(),setTimeout(()=>{process.exit(r)},3e3).unref()}}),"job")();