harperdb 4.7.0-alpha.5 → 4.7.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +31 -31
- package/bin/lite.js +29 -29
- package/launchServiceScripts/launchNatsIngestService.js +29 -29
- package/launchServiceScripts/launchNatsReplyService.js +29 -29
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +29 -29
- package/npm-shrinkwrap.json +293 -293
- package/package.json +1 -1
- package/resources/registrationDeprecated.d.ts +4 -0
- package/server/jobs/jobProcess.js +29 -29
- package/server/threads/threadServer.js +29 -29
- package/studio/build-local/asset-manifest.json +2 -2
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/{main.9f5f17c8.js → main.1577832c.js} +2 -2
- package/utility/hdbTerms.d.ts +1 -0
- package/utility/scripts/restartHdb.js +29 -29
- /package/studio/build-local/static/js/{main.9f5f17c8.js.LICENSE.txt → main.1577832c.js.LICENSE.txt} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var Z3=Object.create;var Qf=Object.defineProperty;var eX=Object.getOwnPropertyDescriptor;var tX=Object.getOwnPropertyNames;var rX=Object.getPrototypeOf,nX=Object.prototype.hasOwnProperty;var o=(e,t)=>Qf(e,"name",{value:t,configurable:!0});var ie=(e,t)=>()=>(e&&(t=e(e=0)),t);var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ie=(e,t)=>{for(var r in t)Qf(e,r,{get:t[r],enumerable:!0})},$M=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of tX(t))!nX.call(e,s)&&s!==r&&Qf(e,s,{get:()=>t[s],enumerable:!(n=eX(t,s))||n.enumerable});return e};var w=(e,t,r)=>(r=e!=null?Z3(rX(e)):{},$M(t||!e||!e.__esModule?Qf(r,"default",{value:e,enumerable:!0}):r,e)),D=e=>$M(Qf({},"__esModule",{value:!0}),e);var bt=M((Wwe,YM)=>{var{join:sX,dirname:VM}=require("node:path"),{existsSync:iX,readFileSync:oX}=require("node:fs");function aX(){let t=__dirname,r,n=0;for(;!iX(r=sX(t,"package.json"));)if(t===(t=VM(t))||n++>10)throw new Error("Could not find package root");return r}o(aX,"findPackageJson");var KM=aX(),cX=JSON.parse(oX(KM,"utf8")),lX=VM(KM);YM.exports={packageJson:cX,PACKAGE_ROOT:lX}});var WE=M((jwe,WM)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n}=require("node:path"),{existsSync:s,statSync:i,readFileSync:a,writeFileSync:c,unlinkSync:l}=require("node:fs"),{isMainThread:u}=require("node:worker_threads"),{spawnSync:d,spawn:f}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:m}=bt(),p=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],h="ts-build";if(u){let A=!1,S=!1;if(S=s(n(m,h))){let R=new Set;e.sync(p.map(N=>`${N}/**/*.ts`),{cwd:m}).forEach(N=>{let O=0,F=0;try{R.add(N),O=i(n(m,N)).mtimeMs-5e3,F=i(n(m,h,N.replace(/.ts$/,".js"))).mtimeMs}catch{}O>F&&(A=!0)}),e.sync(p.map(N=>`${N}/**/*.js`),{cwd:n(m,h)}).forEach(N=>{if(!R.has(N.replace(/.js$/,".ts")))try{l(n(m,h,N))}catch{}})}else A=!0;if(A){console.log("Compiling TypeScript...");let R=d("npx",["tsc"],{cwd:m});if(R.stdout?.length&&console.log(R.stdout.toString()),R.stderr?.length&&console.log(R.stderr.toString()),S){let N=n(t(),"harperdb-tsc.pid"),O=!1;if(s(N))try{process.kill(+a(N,"utf8"),0),O=!0}catch{}if(!O){console.log("Starting background TypeScript compilation...");let F=f("npx",["tsc","--watch"],{detached:!0,cwd:m,stdio:"ignore"});F.on("error",ee=>{console.error("Error trying to compile TypeScript",ee)}),F.pid&&c(N,String(F.pid),"utf-8"),F.unref()}}}}let E=WM.constructor,g=E._findPath;E._findPath=function(A,S,R){if(A.startsWith(".")&&!R&&S.length===1&&S[0].startsWith(m)&&!S[0].includes("node_modules")){let N=r(m,S[0]),O;N.startsWith(h)?O=n(m,r(h,N)):O=n(m,h,N),(A.endsWith(".js")||A.endsWith(".ts"))&&(A=A.slice(0,-3));let F=n(O,A),ee=F+".js";if(s(ee))return ee;if(F.includes(".")&&s(F))return F}return g(A,S,R)}}});var W={};Ie(W,{AUTH_AUDIT_STATUS:()=>si,AUTH_AUDIT_TYPES:()=>ba,BOOT_PROPS_FILE_NAME:()=>DX,BOOT_PROP_PARAMS:()=>QM,CLUSTERING_FLAG:()=>TA,CLUSTERING_PROCESSES:()=>SX,CLUSTER_MESSAGE_TYPE_ENUM:()=>SA,CLUSTER_OPERATIONS:()=>zX,CONFIG_PARAMS:()=>B,CONFIG_PARAM_MAP:()=>JM,DATABASES_DIR_NAME:()=>kc,DATABASES_PARAM_CONFIG:()=>XX,DEFAULT_DATABASE_NAME:()=>yX,ESCAPED_FORWARD_SLASH_REGEX:()=>PX,FORWARD_SLASH_REGEX:()=>CX,FUNC_VAL:()=>l5,GEO_CONVERSION_ENUM:()=>QX,HDB_COMPONENT_CONFIG_FILE:()=>fX,HDB_CONFIG_FILE:()=>uX,HDB_DEFAULT_CONFIG_FILE:()=>dX,HDB_FILE_PERMISSIONS:()=>vX,HDB_HOME_DIR_NAME:()=>LX,HDB_PID_FILE:()=>TX,HDB_PROCESS_SERVICES:()=>gX,HDB_PROC_NAME:()=>mX,HDB_RESTART_SCRIPT:()=>pX,HDB_ROOT_DIR_NAME:()=>hA,HDB_SETTINGS_NAMES:()=>Zf,HDB_SUPPORT_ADDRESS:()=>jM,INFO_TABLE_HASH_ATTRIBUTE:()=>HX,INSERT_MAX_CHARACTER_SIZE:()=>FX,INSTALL_PROMPTS:()=>BX,ITC_EVENT_TYPES:()=>ZE,JOB_STATUS_ENUM:()=>VX,JOB_TYPE_ENUM:()=>ZX,JWT_ENUM:()=>em,LAUNCH_SERVICE_SCRIPTS:()=>AX,LEGACY_CONFIG_PARAMS:()=>JX,LEGACY_DATABASES_DIR_NAME:()=>QE,LICENSE_FILE_NAME:()=>$X,LICENSE_KEY_DIR_NAME:()=>gA,LICENSE_VALUES:()=>e5,LOG_LEVELS:()=>Jf,LOG_NAMES:()=>RX,METADATA_PROPERTY:()=>n5,NODE_ERROR_CODES:()=>r5,OPERATIONS_ENUM:()=>V,PERMS_CRUD_ENUM:()=>a5,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>o5,PRE_4_0_0_VERSION:()=>u5,PROCESS_DESCRIPTORS:()=>_X,PROCESS_NAME_ENV_PROP:()=>xX,RAM_ALLOCATION_ENUM:()=>t5,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>XE,REG_KEY_FILE_NAME:()=>GX,RESTART_TIMEOUT_MS:()=>MX,ROLE_TYPES_ENUM:()=>bX,S3_BUCKET_AUTH_KEYS:()=>YX,SEARCH_NOT_FOUND_MESSAGE:()=>wX,SEARCH_WILDCARDS:()=>c5,SERVICE_ACTIONS_ENUM:()=>jX,SUPPORT_HELP_MSG:()=>IX,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>qX,SYSTEM_SCHEMA_NAME:()=>Xf,SYSTEM_TABLE_NAMES:()=>Ru,THREAD_TYPES:()=>RA,TIME_STAMP_NAMES:()=>i5,TIME_STAMP_NAMES_ENUM:()=>s5,TRANSACTIONS_DIR_NAME:()=>UX,UNICODE_FORWARD_SLASH:()=>OX,UNICODE_PERIOD:()=>NX,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>kX,VALID_S3_FILE_TYPES:()=>KX,VALID_SQL_OPS_ENUM:()=>WX,VALUE_SEARCH_COMPARATORS:()=>JE,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>yA});var zE,jE,uX,dX,hA,fX,mX,pX,zM,pA,EA,_A,hX,EX,_X,gX,SX,TX,yX,RX,Jf,AX,bX,jM,IX,wX,NX,CX,OX,PX,Xf,LX,gA,DX,MX,vX,kc,QE,UX,xX,QM,BX,FX,kX,Ru,HX,qX,GX,$X,VX,V,KX,YX,WX,zX,jX,QX,Zf,JX,B,JM,XX,ZX,SA,e5,t5,r5,n5,TA,XM,ZM,s5,i5,o5,JE,yA,a5,c5,l5,XE,em,ZE,RA,u5,si,ba,H=ie(()=>{zE=require("node:path"),jE=w(bt()),uX="harperdb-config.yaml",dX="defaultConfig.yaml",hA="hdb",fX="config.yaml",mX="harperdb.js",pX="restartHdb.js",zM="HarperDB",pA="Custom Functions",EA="Clustering Hub",_A="Clustering Leaf",hX="Clustering Ingest Service",EX="Clustering Reply Service",_X={HDB:zM,CLUSTERING_HUB:EA,CLUSTERING_LEAF:_A,CLUSTERING_INGEST_SERVICE:hX,CLUSTERING_REPLY_SERVICE:EX,CUSTOM_FUNCTIONS:pA,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"},gX={harperdb:zM,"clustering hub":EA,"clustering leaf":_A,"custom functions":pA,custom_functions:pA,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},SX={CLUSTERING_HUB_PROC_DESCRIPTOR:EA,CLUSTERING_LEAF_PROC_DESCRIPTOR:_A},TX="hdb.pid",yX="data",RX={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Jf={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},AX={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,zE.join)(jE.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,zE.join)(jE.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,zE.join)(jE.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},bX={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},jM="support@harperdb.io",IX=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${jM}`,wX="None of the specified records were found.",NX="U+002E",CX=/\//g,OX="U+002F",PX=/U\+002F/g,Xf="system",LX=".harperdb",gA="keys",DX="hdb_boot_properties.file",MX=6e4,vX=448,kc="database",QE="schema",UX="transactions",xX="PROCESS_NAME",QM={SETTINGS_PATH_KEY:"settings_path"},BX={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"},FX=250,kX={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Ru={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"},HX="info_id",qX={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"},GX="060493.ks",$X=".license",VX={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",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",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status",INSTALL_USAGE_LICENSE:"install_usage_license",GET_USAGE_LICENSES:"get_usage_licenses"},KX={CSV:".csv",JSON:".json"},YX={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},WX={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},zX={[V.INSERT]:V.INSERT,[V.UPDATE]:V.UPDATE,[V.UPSERT]:V.UPSERT,[V.DELETE]:V.DELETE},jX={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"},QX={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Zf={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"},JX={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"},B={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",ANALYTICS_REPLICATE:"analytics_replicate",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_COOKIE_DOMAINS:"authentication_cookie_domains",AUTHENTICATION_COOKIE_EXPIRES:"authentication_cookie_expires",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MTLS_CERTIFICATEVERIFICATION:"http_mtls_certificateVerification",HTTP_MTLS_CERTIFICATEVERIFICATION_TIMEOUT:"http_mtls_certificateVerification_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_CACHETTL:"http_mtls_certificateVerification_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"http_mtls_certificateVerification_failureMode",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_REQUESTQUEUELIMIT:"http_requestQueueLimit",HTTP_HTTP2:"http_http2",LICENSE_MODE:"license_mode",LICENSE_REGION:"license_region",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_EXTERNAL_LEVEL:"logging_external_level",LOGGING_EXTERNAL_TAG:"logging_external_tag",LOGGING_EXTERNAL_PATH:"logging_external_path",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",REPLICATION_FAILOVER:"replication_failOver",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},JM={settings_path:QM.SETTINGS_PATH_KEY,hdb_root_key:B.ROOTPATH,hdb_root:B.ROOTPATH,rootpath:B.ROOTPATH,server_port_key:B.OPERATIONSAPI_NETWORK_PORT,server_port:B.OPERATIONSAPI_NETWORK_PORT,cert_key:B.TLS_CERTIFICATE,certificate:B.TLS_CERTIFICATE,private_key_key:B.TLS_PRIVATEKEY,private_key:B.TLS_PRIVATEKEY,http_secure_enabled_key:B.OPERATIONSAPI_NETWORK_HTTPS,https_on:B.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:B.OPERATIONSAPI_NETWORK_CORS,cors_on:B.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:B.LOGGING_LEVEL,log_level:B.LOGGING_LEVEL,log_path_key:B.LOGGING_ROOT,log_path:B.LOGGING_ROOT,clustering_node_name_key:B.CLUSTERING_NODENAME,node_name:B.CLUSTERING_NODENAME,clustering_enabled_key:B.CLUSTERING_ENABLED,clustering:B.CLUSTERING_ENABLED,max_http_threads:B.THREADS_COUNT,max_hdb_processes:B.THREADS_COUNT,server_timeout_key:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:B.LOGGING_AUDITLOG,disable_transaction_log:B.LOGGING_AUDITLOG,operation_token_timeout_key:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:B.HTTP_PORT,custom_functions_port:B.HTTP_PORT,custom_functions_directory_key:B.COMPONENTSROOT,custom_functions_directory:B.COMPONENTSROOT,max_custom_function_processes:B.THREADS_COUNT,logging_console:B.LOGGING_CONSOLE,log_to_file:B.LOGGING_FILE,log_to_stdstreams:B.LOGGING_STDSTREAMS,local_studio_on:B.LOCALSTUDIO_ENABLED,clustering_port:B.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:B.CLUSTERING_USER,customfunctions_network_port:B.HTTP_PORT,customfunctions_tls_certificate:B.TLS_CERTIFICATE,customfunctions_network_cors:B.HTTP_CORS,customfunctions_network_corsaccesslist:B.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:B.HTTP_HEADERSTIMEOUT,customfunctions_network_https:B.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:B.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:B.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:B.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:B.HTTP_TIMEOUT,customfunctions_tls:B.TLS,http_threads:B.THREADS_COUNT,threads:B.THREADS_COUNT,threads_count:B.THREADS_COUNT,customfunctions_processes:B.THREADS_COUNT,customfunctions_root:B.COMPONENTSROOT,operationsapi_root:B.ROOTPATH};for(let e in B){let t=B[e];JM[t.toLowerCase()]=t}XX={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},ZX={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"},SA={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"},e5={VERSION_DEFAULT:"2.2.0"},t5={DEVELOPMENT:8192,DEFAULT:512},r5={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},n5=Symbol("metadata"),TA="__clustering__",XM="__createdtime__",ZM="__updatedtime__",s5={CREATED_TIME:XM,UPDATED_TIME:ZM},i5=[XM,ZM],o5=15984864e5,JE={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},yA={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},a5={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},c5=["*","%"],l5="func_val",XE={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},em={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},ZE={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"},RA={HTTP:"http"},u5="3.x.x",si={SUCCESS:"success",FAILURE:"failure"},ba={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var Hc=M((Qwe,rv)=>{"use strict";var ev=require("minimist");rv.exports=d5;function d5(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=tv(process.env),n=tv(ev(process.argv))):(r=process.env,n=ev(process.argv));let s={};for(let i=0,a=e.length;i<a;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}o(d5,"assignCMDENVVariables");function tv(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}o(tv,"objKeysToLowerCase")});var ii=M(jn=>{"use strict";global.Resource=jn.Resource=void 0;global.tables=jn.tables={};global.databases=jn.databases={};global.getUser=jn.getUser=void 0;global.authenticateUser=jn.authenticateUser=void 0;global.server=jn.server={};global.contentTypes=jn.contentTypes=null;global.threads=jn.threads=[];global.logger={};global.RequestTarget=jn.RequestTarget=void 0;global.operation=jn.operation=void 0;jn._assignPackageExport=(e,t)=>{global[e]=jn[e]=t}});var AA=M(an=>{"use strict";var f5={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
|
|
1
|
+
"use strict";var nX=Object.create;var Qf=Object.defineProperty;var sX=Object.getOwnPropertyDescriptor;var iX=Object.getOwnPropertyNames;var oX=Object.getPrototypeOf,aX=Object.prototype.hasOwnProperty;var o=(e,t)=>Qf(e,"name",{value:t,configurable:!0});var ie=(e,t)=>()=>(e&&(t=e(e=0)),t);var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ie=(e,t)=>{for(var r in t)Qf(e,r,{get:t[r],enumerable:!0})},YM=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of iX(t))!aX.call(e,s)&&s!==r&&Qf(e,s,{get:()=>t[s],enumerable:!(n=sX(t,s))||n.enumerable});return e};var w=(e,t,r)=>(r=e!=null?nX(oX(e)):{},YM(t||!e||!e.__esModule?Qf(r,"default",{value:e,enumerable:!0}):r,e)),D=e=>YM(Qf({},"__esModule",{value:!0}),e);var Tt=M((Xwe,jM)=>{var{join:cX,dirname:WM}=require("node:path"),{existsSync:lX,readFileSync:uX}=require("node:fs");function dX(){let t=__dirname,r,n=0;for(;!lX(r=cX(t,"package.json"));)if(t===(t=WM(t))||n++>10)throw new Error("Could not find package root");return r}o(dX,"findPackageJson");var zM=dX(),fX=JSON.parse(uX(zM,"utf8")),mX=WM(zM);jM.exports={packageJson:fX,PACKAGE_ROOT:mX}});var WE=M((eNe,QM)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n}=require("node:path"),{existsSync:s,statSync:i,readFileSync:a,writeFileSync:c,unlinkSync:l}=require("node:fs"),{isMainThread:u}=require("node:worker_threads"),{spawnSync:d,spawn:f}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:m}=Tt(),p=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],h="ts-build";if(u){let A=!1,S=!1;if(S=s(n(m,h))){let R=new Set;e.sync(p.map(N=>`${N}/**/*.ts`),{cwd:m}).forEach(N=>{let O=0,F=0;try{R.add(N),O=i(n(m,N)).mtimeMs-5e3,F=i(n(m,h,N.replace(/.ts$/,".js"))).mtimeMs}catch{}O>F&&(A=!0)}),e.sync(p.map(N=>`${N}/**/*.js`),{cwd:n(m,h)}).forEach(N=>{if(!R.has(N.replace(/.js$/,".ts")))try{l(n(m,h,N))}catch{}})}else A=!0;if(A){console.log("Compiling TypeScript...");let R=d("npx",["tsc"],{cwd:m});if(R.stdout?.length&&console.log(R.stdout.toString()),R.stderr?.length&&console.log(R.stderr.toString()),S){let N=n(t(),"harperdb-tsc.pid"),O=!1;if(s(N))try{process.kill(+a(N,"utf8"),0),O=!0}catch{}if(!O){console.log("Starting background TypeScript compilation...");let F=f("npx",["tsc","--watch"],{detached:!0,cwd:m,stdio:"ignore"});F.on("error",te=>{console.error("Error trying to compile TypeScript",te)}),F.pid&&c(N,String(F.pid),"utf-8"),F.unref()}}}}let E=QM.constructor,g=E._findPath;E._findPath=function(A,S,R){if(A.startsWith(".")&&!R&&S.length===1&&S[0].startsWith(m)&&!S[0].includes("node_modules")){let N=r(m,S[0]),O;N.startsWith(h)?O=n(m,r(h,N)):O=n(m,h,N),(A.endsWith(".js")||A.endsWith(".ts"))&&(A=A.slice(0,-3));let F=n(O,A),te=F+".js";if(s(te))return te;if(F.includes(".")&&s(F))return F}return g(A,S,R)}}});var W={};Ie(W,{AUTH_AUDIT_STATUS:()=>si,AUTH_AUDIT_TYPES:()=>ba,BOOT_PROPS_FILE_NAME:()=>xX,BOOT_PROP_PARAMS:()=>ZM,CLUSTERING_FLAG:()=>TA,CLUSTERING_PROCESSES:()=>AX,CLUSTER_MESSAGE_TYPE_ENUM:()=>SA,CLUSTER_OPERATIONS:()=>XX,CONFIG_PARAMS:()=>B,CONFIG_PARAM_MAP:()=>ev,DATABASES_DIR_NAME:()=>kc,DATABASES_PARAM_CONFIG:()=>r5,DEFAULT_DATABASE_NAME:()=>IX,ESCAPED_FORWARD_SLASH_REGEX:()=>vX,FORWARD_SLASH_REGEX:()=>DX,FUNC_VAL:()=>m5,GEO_CONVERSION_ENUM:()=>e5,HDB_COMPONENT_CONFIG_FILE:()=>EX,HDB_CONFIG_FILE:()=>pX,HDB_DEFAULT_CONFIG_FILE:()=>hX,HDB_FILE_PERMISSIONS:()=>FX,HDB_HOME_DIR_NAME:()=>UX,HDB_PID_FILE:()=>bX,HDB_PROCESS_SERVICES:()=>RX,HDB_PROC_NAME:()=>_X,HDB_RESTART_SCRIPT:()=>gX,HDB_ROOT_DIR_NAME:()=>hA,HDB_SETTINGS_NAMES:()=>Zf,HDB_SUPPORT_ADDRESS:()=>XM,INFO_TABLE_HASH_ATTRIBUTE:()=>VX,INSERT_MAX_CHARACTER_SIZE:()=>GX,INSTALL_PROMPTS:()=>qX,ITC_EVENT_TYPES:()=>ZE,JOB_STATUS_ENUM:()=>zX,JOB_TYPE_ENUM:()=>n5,JWT_ENUM:()=>em,LAUNCH_SERVICE_SCRIPTS:()=>NX,LEGACY_CONFIG_PARAMS:()=>t5,LEGACY_DATABASES_DIR_NAME:()=>QE,LICENSE_FILE_NAME:()=>WX,LICENSE_KEY_DIR_NAME:()=>gA,LICENSE_VALUES:()=>s5,LOG_LEVELS:()=>Jf,LOG_NAMES:()=>wX,METADATA_PROPERTY:()=>a5,NODE_ERROR_CODES:()=>o5,OPERATIONS_ENUM:()=>V,PERMS_CRUD_ENUM:()=>d5,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>u5,PRE_4_0_0_VERSION:()=>p5,PROCESS_DESCRIPTORS:()=>yX,PROCESS_NAME_ENV_PROP:()=>HX,RAM_ALLOCATION_ENUM:()=>i5,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>XE,REG_KEY_FILE_NAME:()=>YX,RESTART_TIMEOUT_MS:()=>BX,ROLE_TYPES_ENUM:()=>CX,S3_BUCKET_AUTH_KEYS:()=>QX,SEARCH_NOT_FOUND_MESSAGE:()=>PX,SEARCH_WILDCARDS:()=>f5,SERVICE_ACTIONS_ENUM:()=>ZX,SUPPORT_HELP_MSG:()=>OX,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>KX,SYSTEM_SCHEMA_NAME:()=>Xf,SYSTEM_TABLE_NAMES:()=>Ru,THREAD_TYPES:()=>RA,TIME_STAMP_NAMES:()=>l5,TIME_STAMP_NAMES_ENUM:()=>c5,TRANSACTIONS_DIR_NAME:()=>kX,UNICODE_FORWARD_SLASH:()=>MX,UNICODE_PERIOD:()=>LX,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>$X,VALID_S3_FILE_TYPES:()=>jX,VALID_SQL_OPS_ENUM:()=>JX,VALUE_SEARCH_COMPARATORS:()=>JE,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>yA});var zE,jE,pX,hX,hA,EX,_X,gX,JM,pA,EA,_A,SX,TX,yX,RX,AX,bX,IX,wX,Jf,NX,CX,XM,OX,PX,LX,DX,MX,vX,Xf,UX,gA,xX,BX,FX,kc,QE,kX,HX,ZM,qX,GX,$X,Ru,VX,KX,YX,WX,zX,V,jX,QX,JX,XX,ZX,e5,Zf,t5,B,ev,r5,n5,SA,s5,i5,o5,a5,TA,tv,rv,c5,l5,u5,JE,yA,d5,f5,m5,XE,em,ZE,RA,p5,si,ba,H=ie(()=>{zE=require("node:path"),jE=w(Tt()),pX="harperdb-config.yaml",hX="defaultConfig.yaml",hA="hdb",EX="config.yaml",_X="harperdb.js",gX="restartHdb.js",JM="HarperDB",pA="Custom Functions",EA="Clustering Hub",_A="Clustering Leaf",SX="Clustering Ingest Service",TX="Clustering Reply Service",yX={HDB:JM,CLUSTERING_HUB:EA,CLUSTERING_LEAF:_A,CLUSTERING_INGEST_SERVICE:SX,CLUSTERING_REPLY_SERVICE:TX,CUSTOM_FUNCTIONS:pA,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"},RX={harperdb:JM,"clustering hub":EA,"clustering leaf":_A,"custom functions":pA,custom_functions:pA,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},AX={CLUSTERING_HUB_PROC_DESCRIPTOR:EA,CLUSTERING_LEAF_PROC_DESCRIPTOR:_A},bX="hdb.pid",IX="data",wX={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Jf={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},NX={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,zE.join)(jE.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,zE.join)(jE.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,zE.join)(jE.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},CX={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},XM="support@harperdb.io",OX=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${XM}`,PX="None of the specified records were found.",LX="U+002E",DX=/\//g,MX="U+002F",vX=/U\+002F/g,Xf="system",UX=".harperdb",gA="keys",xX="hdb_boot_properties.file",BX=6e4,FX=448,kc="database",QE="schema",kX="transactions",HX="PROCESS_NAME",ZM={SETTINGS_PATH_KEY:"settings_path"},qX={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"},GX=250,$X={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Ru={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"},VX="info_id",KX={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"},YX="060493.ks",WX=".license",zX={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",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",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status",INSTALL_USAGE_LICENSE:"install_usage_license",GET_USAGE_LICENSES:"get_usage_licenses"},jX={CSV:".csv",JSON:".json"},QX={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},JX={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},XX={[V.INSERT]:V.INSERT,[V.UPDATE]:V.UPDATE,[V.UPSERT]:V.UPSERT,[V.DELETE]:V.DELETE},ZX={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"},e5={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Zf={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"},t5={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"},B={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",ANALYTICS_REPLICATE:"analytics_replicate",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_COOKIE_DOMAINS:"authentication_cookie_domains",AUTHENTICATION_COOKIE_EXPIRES:"authentication_cookie_expires",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MTLS_CERTIFICATEVERIFICATION:"http_mtls_certificateVerification",HTTP_MTLS_CERTIFICATEVERIFICATION_TIMEOUT:"http_mtls_certificateVerification_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_CACHETTL:"http_mtls_certificateVerification_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"http_mtls_certificateVerification_failureMode",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_REQUESTQUEUELIMIT:"http_requestQueueLimit",HTTP_HTTP2:"http_http2",LICENSE_MODE:"license_mode",LICENSE_REGION:"license_region",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_EXTERNAL_LEVEL:"logging_external_level",LOGGING_EXTERNAL_TAG:"logging_external_tag",LOGGING_EXTERNAL_PATH:"logging_external_path",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",REPLICATION_FAILOVER:"replication_failOver",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},ev={settings_path:ZM.SETTINGS_PATH_KEY,hdb_root_key:B.ROOTPATH,hdb_root:B.ROOTPATH,rootpath:B.ROOTPATH,server_port_key:B.OPERATIONSAPI_NETWORK_PORT,server_port:B.OPERATIONSAPI_NETWORK_PORT,cert_key:B.TLS_CERTIFICATE,certificate:B.TLS_CERTIFICATE,private_key_key:B.TLS_PRIVATEKEY,private_key:B.TLS_PRIVATEKEY,http_secure_enabled_key:B.OPERATIONSAPI_NETWORK_HTTPS,https_on:B.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:B.OPERATIONSAPI_NETWORK_CORS,cors_on:B.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:B.LOGGING_LEVEL,log_level:B.LOGGING_LEVEL,log_path_key:B.LOGGING_ROOT,log_path:B.LOGGING_ROOT,clustering_node_name_key:B.CLUSTERING_NODENAME,node_name:B.CLUSTERING_NODENAME,clustering_enabled_key:B.CLUSTERING_ENABLED,clustering:B.CLUSTERING_ENABLED,max_http_threads:B.THREADS_COUNT,max_hdb_processes:B.THREADS_COUNT,server_timeout_key:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:B.LOGGING_AUDITLOG,disable_transaction_log:B.LOGGING_AUDITLOG,operation_token_timeout_key:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:B.HTTP_PORT,custom_functions_port:B.HTTP_PORT,custom_functions_directory_key:B.COMPONENTSROOT,custom_functions_directory:B.COMPONENTSROOT,max_custom_function_processes:B.THREADS_COUNT,logging_console:B.LOGGING_CONSOLE,log_to_file:B.LOGGING_FILE,log_to_stdstreams:B.LOGGING_STDSTREAMS,local_studio_on:B.LOCALSTUDIO_ENABLED,clustering_port:B.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:B.CLUSTERING_USER,customfunctions_network_port:B.HTTP_PORT,customfunctions_tls_certificate:B.TLS_CERTIFICATE,customfunctions_network_cors:B.HTTP_CORS,customfunctions_network_corsaccesslist:B.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:B.HTTP_HEADERSTIMEOUT,customfunctions_network_https:B.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:B.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:B.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:B.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:B.HTTP_TIMEOUT,customfunctions_tls:B.TLS,http_threads:B.THREADS_COUNT,threads:B.THREADS_COUNT,threads_count:B.THREADS_COUNT,customfunctions_processes:B.THREADS_COUNT,customfunctions_root:B.COMPONENTSROOT,operationsapi_root:B.ROOTPATH};for(let e in B){let t=B[e];ev[t.toLowerCase()]=t}r5={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},n5={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"},SA={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"},s5={VERSION_DEFAULT:"2.2.0"},i5={DEVELOPMENT:8192,DEFAULT:512},o5={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},a5=Symbol("metadata"),TA="__clustering__",tv="__createdtime__",rv="__updatedtime__",c5={CREATED_TIME:tv,UPDATED_TIME:rv},l5=[tv,rv],u5=15984864e5,JE={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},yA={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},d5={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},f5=["*","%"],m5="func_val",XE={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},em={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},ZE={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"},RA={HTTP:"http"},p5="3.x.x",si={SUCCESS:"success",FAILURE:"failure"},ba={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var Hc=M((tNe,iv)=>{"use strict";var nv=require("minimist");iv.exports=h5;function h5(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=sv(process.env),n=sv(nv(process.argv))):(r=process.env,n=nv(process.argv));let s={};for(let i=0,a=e.length;i<a;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}o(h5,"assignCMDENVVariables");function sv(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}o(sv,"objKeysToLowerCase")});var ii=M(jn=>{"use strict";global.Resource=jn.Resource=void 0;global.tables=jn.tables={};global.databases=jn.databases={};global.getUser=jn.getUser=void 0;global.authenticateUser=jn.authenticateUser=void 0;global.server=jn.server={};global.contentTypes=jn.contentTypes=null;global.threads=jn.threads=[];global.logger={};global.RequestTarget=jn.RequestTarget=void 0;global.operation=jn.operation=void 0;jn._assignPackageExport=(e,t)=>{global[e]=jn[e]=t}});var AA=M(an=>{"use strict";var E5={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
|
-
`)},m5="certificate.pem",p5="privateKey.pem",h5="caCertificate.pem",E5="natsCertificate.pem",_5="natsCaCertificate.pem",It={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},g5={tls_certificate:It.SERVER,tlsCertificateAuthority:It.CA,customFunctions_tls_certificate:It.SERVER,customFunctionsTlsCertificateAuthority:It.CA,operationsApi_tls_certificate:It["OPERATIONS-API"],operationsApiTlsCertificateAuthority:It["OPERATIONS-CA"]},S5={[It.SERVER]:2,[It.DEFAULT]:1},T5={[It["OPERATIONS-API"]]:3,[It.SERVER]:2,[It.DEFAULT]:1},y5={[It["OPERATIONS-API"]]:3,[It.SERVER]:2,[It.DEFAULT]:1},R5={[It["OPERATIONS-CA"]]:3,[It.CA]:2,[It["DEFAULT-CA"]]:1},A5={[It["OPERATIONS-CA"]]:3,[It.CA]:2,[It["DEFAULT-CA"]]:1},b5={[It.CA]:2,[It["DEFAULT-CA"]]:1};an.CERTIFICATE_PEM_NAME=m5;an.PRIVATEKEY_PEM_NAME=p5;an.CA_PEM_NAME=h5;an.CERT_NAME=It;an.CERT_CONFIG_NAME_MAP=g5;an.CERT_PREFERENCE_APP=S5;an.CERT_PREFERENCE_OPS=T5;an.CERT_PREFERENCE_REP=y5;an.CA_CERT_PREFERENCE_REP=R5;an.CA_CERT_PREFERENCE_OPS=A5;an.CA_CERT_PREFERENCE_APP=b5;an.CERTIFICATE_VALUES=f5;an.NATS_CERTIFICATE_PEM_NAME=E5;an.NATS_CA_PEM_NAME=_5});var ft=M((eNe,nv)=>{"use strict";var In=require("validate.js");In.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||In.validators.type.checks[t](e)?null:` must be a '${t}' value`};In.validators.type.checks={Object:o(function(e){return In.isObject(e)&&!In.isArray(e)},"Object"),Array:In.isArray,Integer:In.isInteger,Number:In.isNumber,String:In.isString,Date:In.isDate,Boolean:o(function(e){return typeof e=="boolean"},"Boolean")};In.validators.hasValidFileExt=function(e,t){return In.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};nv.exports={validateObject:I5,validateObjectAsync:w5,validateBySchema:N5};function I5(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=In(e,t,{format:"flat"});return r?new Error(r):null}o(I5,"validateObject");async function w5(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await In.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}o(w5,"validateObjectAsync");function N5(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(N5,"validateBySchema")});var IA=M((nNe,lv)=>{"use strict";var av=require("fs-extra"),ge=require("joi"),C5=require("os"),{boolean:Ke,string:Et,number:lr,array:Ia}=ge.types(),{totalmem:sv}=require("os"),qc=require("path"),O5=Q(),bA=oe(),rNe=AA(),iv=(H(),D(W)),P5=ft(),ov="log",L5="components",D5="Invalid logging.rotation.maxSize unit. Available units are G, M or K",M5="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",v5="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",U5="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",x5="rootPath config parameter is undefined",wn=ge.alternatives([lr.min(0),Et]).optional().empty(null),e_=ge.alternatives([Ia.items(Et,{host:Et.required(),port:wn},{hostname:Et.required(),port:wn}).empty(null),Ia.items(Et)]),Ui,cv=!1;lv.exports={configValidator:B5,routesValidator:$5,routeConstraints:e_};function B5(e,t=!1){if(cv=t,Ui=e.rootPath,bA.isEmpty(Ui))throw x5;let r=Ke.optional(),n=lr.min(0).max(1e3).empty(null).default(G5),s=Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(tm),i=Et.optional().empty(null),a=Et.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ge.string().empty(null).default(tm),l=ge.custom(k5).empty(null).default(tm),u=e.clustering?.enabled,d=ge.object({certificate:i,certificateAuthority:i,privateKey:i}),f;return u===!0?f=ge.object({enabled:r,hubServer:ge.object({cluster:ge.object({name:ge.required().empty(null),network:ge.object({port:wn,routes:e_}).required()}).required(),leafNodes:ge.object({network:ge.object({port:wn}).required()}).required(),network:ge.object({port:wn}).required()}).required(),leafServer:ge.object({network:ge.object({port:wn,routes:e_}).required(),streams:ge.object({maxAge:lr.min(120).allow(null).optional(),maxBytes:lr.min(1).allow(null).optional(),maxMsgs:lr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ge.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:Ke.optional(),databaseLevel:Ke.optional(),tls:ge.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ke.required(),verify:Ke.optional()}),user:Et.optional().empty(null)}).optional():f=ge.object({enabled:r,tls:ge.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ke.optional()})}).optional(),ge.object({authentication:ge.alternatives(ge.object({authorizeLocal:Ke,cacheTTL:lr.required(),cookie:ge.object({domains:Ia.items(Et).optional(),expires:Et.optional()}),enableSessions:Ke,hashFunction:Et.valid("md5","sha256","argon2id").optional().empty(null)}),Ke).optional(),analytics:ge.object({aggregatePeriod:lr,replicate:Ke.optional()}),replication:ge.object({hostname:ge.alternatives(Et,lr).optional().empty(null),url:Et.optional().empty(null),port:wn,securePort:wn,routes:Ia.optional().empty(null),databases:ge.alternatives(Et,Ia),enableRootCAs:Ke.optional(),copyTablesToCatchUp:Ke.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:ge.object({enabled:r}).required(),logging:ge.object({auditAuthEvents:ge.object({logFailed:Ke,logSuccessful:Ke}),file:Ke.required(),level:ge.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ge.object({enabled:Ke.optional(),compress:Ke.optional(),interval:Et.custom(q5).optional().empty(null),maxSize:Et.custom(H5).optional().empty(null),path:Et.optional().empty(null).default(tm)}).required(),root:s,stdStreams:Ke.required(),auditLog:Ke.required()}).required(),operationsApi:ge.object({network:ge.object({cors:Ke.optional(),corsAccessList:Ia.optional(),headersTimeout:lr.min(1).optional(),keepAliveTimeout:lr.min(1).optional(),port:wn,domainSocket:ge.optional().empty("hdb/operations-server").default(tm),securePort:wn,timeout:lr.min(1).optional()}).optional(),tls:ge.alternatives([ge.array().items(d),d])}).required(),rootPath:Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ge.object({network:ge.object({port:wn,securePort:wn,mtls:ge.alternatives([Ke.optional(),ge.object({user:Et.optional(),certificateAuthority:i,required:Ke.optional()})])}).required(),webSocket:Ke.optional(),requireAuthentication:Ke.optional()}),http:ge.object({compressionThreshold:lr.optional(),cors:Ke.optional(),corsAccessList:Ia.optional(),headersTimeout:lr.min(1).optional(),port:wn,securePort:wn,maxHeaderSize:lr.optional(),mtls:ge.alternatives([Ke.optional(),ge.object({user:Et.optional(),certificateAuthority:i,required:Ke.optional()})]),threadRange:ge.alternatives([Ia.optional(),Et.optional()])}).required(),threads:ge.alternatives(n.optional(),ge.object({count:n.optional(),debug:ge.alternatives(Ke.optional(),ge.object({startingPort:lr.min(1).optional(),host:Et.optional(),waitForDebugger:Ke.optional()})),maxHeapMemory:lr.min(0).optional()})),storage:ge.object({writeAsync:Ke.required(),overlappingSync:Ke.optional(),caching:Ke.optional(),compression:ge.alternatives([Ke.optional(),ge.object({dictionary:Et.optional(),threshold:lr.optional()})]),compactOnStart:Ke.optional(),compactOnStartKeepBackup:Ke.optional(),noReadAhead:Ke.optional(),path:l,prefetchWrites:Ke.optional(),maxFreeSpaceToLoad:lr.optional(),maxFreeSpaceToRetain:lr.optional()}).required(),ignoreScripts:Ke.optional(),tls:ge.alternatives([ge.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(B5,"configValidator");function F5(e){return cv||av.existsSync(e)?null:`Specified path ${e} does not exist.`}o(F5,"doesPathExist");function k5(e,t){ge.assert(e,Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=F5(e);if(r)return t.message(r)}o(k5,"validatePath");function H5(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(D5);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(v5):e}o(H5,"validateRotationMaxSize");function q5(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(M5);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(U5):e}o(q5,"validateRotationInterval");function G5(e,t){let r=t.state.path.join("."),n=C5.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||sv();return i=Math.round(Math.min(i,sv())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),O5.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}o(G5,"setDefaultThreads");function tm(e,t){let r=t.state.path.join(".");if(!bA.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(bA.isEmpty(Ui))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return qc.join(Ui,L5);case"logging.root":return qc.join(Ui,ov);case"clustering.leafServer.streams.path":return qc.join(Ui,"clustering","leaf");case"storage.path":let n=qc.join(Ui,iv.LEGACY_DATABASES_DIR_NAME);return av.existsSync(n)?n:qc.join(Ui,iv.DATABASES_DIR_NAME);case"logging.rotation.path":return qc.join(Ui,ov);case"operationsApi.network.domainSocket":return r==null?null:qc.join(Ui,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(tm,"setDefaultRoot");function $5(e){let t=ge.object({routes:e_});return P5.validateBySchema({routes:e},t)}o($5,"routesValidator")});var $t=M((iNe,dv)=>{"use strict";var V5="__dbis__",K5="__txns__",Y5="__environment_name__",W5="__dbi_defintion__",z5={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"},j5=["__createdtime__","__updatedtime__"],Q5="\uFFFF",uv={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},J5=Object.values(uv);dv.exports={AUDIT_STORE_NAME:K5,INTERNAL_DBIS_NAME:V5,DBI_DEFINITION_NAME:W5,SEARCH_TYPES:z5,TIMESTAMP_NAMES:j5,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Y5,TRANSACTIONS_DBI_NAMES_ENUM:uv,TRANSACTIONS_DBIS:J5,OVERFLOW_MARKER:Q5}});var Kr=M((oNe,Tv)=>{"use strict";var fv=(H(),D(W)),mv=$t(),pv={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},hv=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Ev={500:hv("There was an error processing your request."),400:"Invalid request"},X5=Ev[pv.INTERNAL_SERVER_ERROR],Z5={OP_NOT_SUPPORTED_FOR_FS:o(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:o(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:o(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:o(e=>`${e} not found.`,"NOT_FOUND")},e6={CONFIG_VALIDATION:o(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},t6={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:o(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:o(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:o(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:o((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:o(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},r6={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 ${mv.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${mv.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"},n6={ATTR_NAME_LENGTH_ERR:o(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${fv.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 ${fv.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"},_v={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"},s6={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:o(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:o(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:o((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:o(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."},i6={ATTR_PERM_MISSING:o((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:o((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:o(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:o(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:o(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:o(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:o(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:o(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:o(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:o((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:o(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:o(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:o(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:o(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:o(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},o6={ATTR_NOT_FOUND:o((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:o((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:o(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:o(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:o(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:o((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:o((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},a6={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},c6={ALTER_USER_DUP_ROLES:o(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:o(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:o(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:o(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:o(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:o(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},gv={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:o(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")},Sv={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:o(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},l6={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"},u6={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},d6={..._v,...t6,...Z5,...s6,...i6,...o6,...a6,...c6,...n6,...gv,...Sv,...l6,...u6,...e6};Tv.exports={CHECK_LOGS_WRAPPER:hv,HDB_ERROR_MSGS:d6,DEFAULT_ERROR_MSGS:Ev,DEFAULT_ERROR_RESP:X5,HTTP_STATUS_CODES:pv,LMDB_ERRORS_ENUM:r6,AUTHENTICATION_ERROR_MSGS:_v,VALIDATION_ERROR_MSGS:gv,ITC_ERRORS:Sv}});var _e=M((cNe,Av)=>{"use strict";var Au=Kr(),f6=Q(),m6=(H(),D(W)),t_=class extends Error{static{o(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,yv),this.statusCode=n||Au.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Au.DEFAULT_ERROR_MSGS[n]?Au.DEFAULT_ERROR_MSGS[n]:Au.DEFAULT_ERROR_MSGS[Au.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&&f6[s](i)}},wA=class extends Error{static{o(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},NA=class extends Error{static{o(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function yv(e,t,r,n=m6.LOG_LEVELS.ERROR,s=null,i=!1){if(Rv(e))return e;let a=new t_(e,t,r,n,s);return i&&delete a.stack,a}o(yv,"handleHDBError");function bu(e){this.message=e}o(bu,"Violation");bu.prototype=Object.create(Error.prototype);bu.prototype.constructor=bu;bu.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var CA=class extends bu{static{o(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function Rv(e){return e.__proto__.constructor.name===t_.name}o(Rv,"isHDBError");Av.exports={isHDBError:Rv,handleHDBError:yv,ClientError:wA,ServerError:NA,AccessViolation:CA,Violation:bu,hdbErrors:Au}});var rm={};Ie(rm,{server:()=>Ue});var bv,Ue,xr=ie(()=>{bv=w(ii()),Ue={};(0,bv._assignPackageExport)("server",Ue)});var Tt=M(tr=>{"use strict";var Is=(H(),D(W)),Ir=oe(),ur=Q(),{configValidator:p6,routesValidator:Iv}=IA(),cn=require("fs-extra"),Nv=require("yaml"),Jn=require("path"),h6=require("is-number"),Cv=require("properties-reader"),E6=require("lodash"),{handleHDBError:_6}=_e(),{HTTP_STATUS_CODES:g6,HDB_ERROR_MSGS:Iu}=Kr(),{server:S6}=(xr(),D(rm)),{PACKAGE_ROOT:Ov}=bt(),{DATABASES_PARAM_CONFIG:nm,CONFIG_PARAMS:Qn,CONFIG_PARAM_MAP:oi}=Is,T6="Unable to get config value because config is uninitialized",y6="Config successfully initialized",R6="Error backing up config file",A6="Empty parameter sent to getConfigValue",Pv=Jn.join(Ov,"config","yaml",Is.HDB_DEFAULT_CONFIG_FILE),b6=Jn.join(Ov,"config","yaml","defaultNatsConfig.yaml"),I6="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",wv={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"},r_,Ut,n_;tr.createConfigFile=w6;tr.getDefaultConfig=N6;tr.getConfigValue=Dv;tr.initConfig=s_;tr.flattenConfig=wu;tr.updateConfigValue=Mv;tr.updateConfigObject=O6;tr.getConfiguration=D6;tr.setConfiguration=M6;tr.readConfigFile=DA;tr.getClusteringRoutes=v6;tr.initOldConfig=vv;tr.getConfigFromFile=U6;tr.getConfigFilePath=Gc;tr.addConfig=x6;tr.deleteConfigFromFile=B6;tr.getConfigObj=F6;tr.resolvePath=OA;tr.getFlatConfigObj=k6;function OA(e){if(e?.startsWith("~/"))return Jn.join(Ir.getHomeDir(),e.slice(1));let t=ue();try{return Jn.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}o(OA,"resolvePath");function w6(e,t=!1){let r=wa(Pv);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=Nv.parseDocument(cn.readFileSync(b6,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}r_=wu(r.toJSON());let n;for(let c in e){let l=oi[c.toLowerCase()];if(l===Qn.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=PA(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){ur.error(f)}}}n&&Lv(r,n),LA(r,t);let s=r.toJSON();Ut=wu(s);let i=r.getIn(["rootPath"]),a=Jn.join(i,Is.HDB_CONFIG_FILE);if(cn.createFileSync(a),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);cn.writeFileSync(a,String(r)),ur.trace(`Config file written to ${a}`)}o(w6,"createConfigFile");function Lv(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Ir.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 a in n[s][nm.TABLES][i]){let c=n[s][nm.TABLES][i][a],l=[Qn.DATABASES,s,nm.TABLES,i,a];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let a=n[s][i],c=[Qn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(n){ur.error("Error parsing schemas CLI/env config arguments",n)}}o(Lv,"setSchemasConfig");function N6(e){if(r_===void 0){let r=wa(Pv);r_=wu(r.toJSON())}let t=oi[e.toLowerCase()];if(t!==void 0)return r_[t.toLowerCase()]}o(N6,"getDefaultConfig");function Dv(e){if(e==null){ur.info(A6);return}if(Ut===void 0){ur.trace(T6);return}let t=oi[e.toLowerCase()];if(t!==void 0)return Ut[t.toLowerCase()]}o(Dv,"getConfigValue");function Gc(e=Ir.getPropsFilePath()){let t=Ir.getEnvCliRootPath();if(t)return OA(Jn.join(t,Is.HDB_CONFIG_FILE));let r=Cv(e);return OA(r.get(Is.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}o(Gc,"getConfigFilePath");function s_(e=!1){if(Ut===void 0||e){let t;if(!Ir.noBootFile()){t=Ir.getPropsFilePath();try{cn.accessSync(t,cn.constants.F_OK|cn.constants.R_OK)}catch(i){throw ur.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Gc(t),n;if(r.includes("config/settings.js"))try{vv(r);return}catch(i){if(i.code!==Is.NODE_ERROR_CODES.ENOENT)throw i}try{n=wa(r)}catch(i){if(i.code===Is.NODE_ERROR_CODES.ENOENT){ur.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 ur.error(i),new Error(`Error reading HarperDB config file at ${r}`)}C6(n,r),LA(n);let s=n.toJSON();if(S6.config=s,Ut=wu(s),Ut.logging_rotation_rotate)for(let i in wv)Ut[i]&&ur.error(`Config ${wv[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);ur.trace(y6)}}o(s_,"initConfig");function C6(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Jn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Jn.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(ur.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);cn.writeFileSync(t,String(e))}}o(C6,"checkForUpdatedConfig");function LA(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 Iu.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 Iu.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=p6(r,t);if(n.error)throw Iu.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)}o(LA,"validateConfig");function O6(e,t){Ut===void 0&&(Ut={});let r=oi[e.toLowerCase()];if(r===void 0){ur.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ut[r.toLowerCase()]=t}o(O6,"updateConfigObject");function Mv(e,t,r=void 0,n=!1,s=!1,i=!1){Ut===void 0&&s_();let a=Dv(oi.hdb_root),c=Jn.join(a,Is.HDB_CONFIG_FILE),l=wa(c),u;if(r&&Ut){let m=!1;for(let p in r)if(r[p]!=Ut[p.toLowerCase()]){m=!0;break}if(!m){ur.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===Qn.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=oi[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=PA(m,t);l.setIn([...p],h)}else for(let m in r){let p=oi[m.toLowerCase()];if(p===Qn.HTTP_SECUREPORT&&r[m]===Ut[Qn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===Qn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===Ut[Qn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===Qn.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=Is.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let g=PA(p,r[m]);p==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],g)}catch(A){ur.error(A)}}}u&&Lv(l,u),LA(l);let d=l.getIn(["rootPath"]),f=Jn.join(d,Is.HDB_CONFIG_FILE);if(n===!0&&P6(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);cn.writeFileSync(f,String(l)),s&&(Ut=wu(l.toJSON())),ur.trace(`Config parameter: ${e} updated with value: ${t}`)}o(Mv,"updateConfigValue");function P6(e,t){try{let r=Jn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${Is.HDB_CONFIG_FILE}.bak`);cn.copySync(e,r),ur.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){ur.error(R6),ur.error(r)}}o(P6,"backupConfigFile");var L6=["databases"];function wu(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}),n_=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])&&!L6.includes(i)){let a=r(n[i]);for(let c in a){if(!a.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!Qn[l.toUpperCase()]&&oi[l]&&(s[oi[l].toLowerCase()]=a[c]),s[l]=a[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}o(r,"squashObj")}o(wu,"flattenConfig");function PA(e,t){if(e===Qn.CLUSTERING_NODENAME||e===Qn.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(h6(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Ir.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 Ir.autoCast(t)}o(PA,"castConfigValue");function D6(){let e=Ir.getPropsFilePath(),t=Gc(e);return wa(t).toJSON()}o(D6,"getConfiguration");async function M6(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return Mv(void 0,void 0,s,!0),I6}catch(i){throw typeof i=="string"||i instanceof String?_6(i,i,g6.BAD_REQUEST,void 0,void 0,!0):i}}o(M6,"setConfiguration");function DA(){let e=Ir.getPropsFilePath();try{cn.accessSync(e,cn.constants.F_OK|cn.constants.R_OK)}catch(n){if(!Ir.noBootFile())throw ur.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Gc(e);return wa(t).toJSON()}o(DA,"readConfigFile");function wa(e){return Nv.parseDocument(cn.readFileSync(e,"utf8"),{simpleKeys:!0})}o(wa,"parseYamlDoc");function v6(){let e=DA(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Ir.isEmptyOrZeroLength(t)?[]:t;let r=Iv(t);if(r)throw Iu.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Ir.isEmptyOrZeroLength(n)?[]:n;let s=Iv(n);if(s)throw Iu.CONFIG_VALIDATION(s.message);if(!Ir.isEmptyOrZeroLength(n)&&!Ir.isEmptyOrZeroLength(t)){let i=t.filter(a=>n.some(c=>c.host===a.host&&c.port===a.port));if(!Ir.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Iu.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:n}}o(v6,"getClusteringRoutes");function vv(e){let t=Cv(e);Ut={};for(let r in oi){let n=t.get(r.toUpperCase());if(Ir.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=oi[r].toLowerCase();s===Qn.LOGGING_ROOT?Ut[s]=Jn.dirname(n):Ut[s]=n}return Ut}o(vv,"initOldConfig");function U6(e){let t=DA();return E6.get(t,e.replaceAll("_","."))}o(U6,"getConfigFromFile");async function x6(e,t){let r=wa(Gc());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 cn.writeFile(Gc(),String(r))}o(x6,"addConfig");function B6(e){let t=Gc(Ir.getPropsFilePath()),r=wa(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Jn.join(n,Is.HDB_CONFIG_FILE);cn.writeFileSync(s,String(r))}o(B6,"deleteConfigFromFile");function F6(){return n_||(s_(),n_)}o(F6,"getConfigObj");function k6(){return Ut||s_(),Ut}o(k6,"getFlatConfigObj")});var ue=M((kv,Hv)=>{"use strict";var MA=require("fs-extra"),$c=require("path"),Uv=require("os"),H6=require("properties-reader"),im=Q(),sm=oe(),ke=(H(),D(W)),i_=Tt(),q6="Error initializing environment manager",o_="BOOT_PROPS_FILE_PATH",xv=!1,G6={[ke.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ke.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ro={};Object.assign(kv,Hv.exports={BOOT_PROPS_FILE_PATH:o_,getHdbBasePath:$6,setHdbBasePath:V6,get:Bv,initSync:Y6,setProperty:Ze,initTestEnvironment:z6,setCloneVar:W6});function $6(){return Ro[ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o($6,"getHdbBasePath");function V6(e){Ro[ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(V6,"setHdbBasePath");function Bv(e){let t=i_.getConfigValue(e);return t===void 0?Ro[e]:t}o(Bv,"get");function Ze(e,t){G6[e]&&(Ro[e]=t),i_.updateConfigObject(e,t)}o(Ze,"setProperty");function K6(){let e;try{e=sm.getPropsFilePath(),MA.accessSync(e,MA.constants.F_OK|MA.constants.R_OK),xv=!0;let t=H6(e);return Ro[ke.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ke.HDB_SETTINGS_NAMES.INSTALL_USER),Ro[ke.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ke.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ro[o_]=e,!0}catch{return im.trace(`Environment manager found no properties file at ${e}`),!1}}o(K6,"doesPropFileExist");function Y6(e=!1){try{((xv||K6()||sm.noBootFile())&&!Fv||e)&&(i_.initConfig(e),Ro[ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=i_.getConfigValue(ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){im.error(q6),im.error(t),console.error(t),process.exit(1)}}o(Y6,"initSync");var Fv=!1;function W6(e){Fv=e}o(W6,"setCloneVar");function z6(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:a,local_studio_on:c}=e,l=$c.join(__dirname,"../../","unitTests");Ro[o_]=$c.join(l,"hdb_boot_properties.file"),Ze(ke.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,$c.join(l,"settings.test")),Ze(ke.HDB_SETTINGS_NAMES.INSTALL_USER,Uv.userInfo()?Uv.userInfo().username:void 0),Ze(ke.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ze(ke.HDB_SETTINGS_NAMES.LOG_PATH_KEY,$c.join(l,"envDir","log")),Ze(ke.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ze(ke.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ze(ke.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ze(ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,$c.join(l,"envDir")),Ze(ke.CONFIG_PARAMS.STORAGE_PATH,$c.join(l,"envDir")),s&&(Ze(ke.CONFIG_PARAMS.HTTP_SECUREPORT,Bv(ke.CONFIG_PARAMS.HTTP_PORT)),Ze(ke.CONFIG_PARAMS.HTTP_PORT,null)),Ze(ke.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ze(ke.CONFIG_PARAMS.HTTP_PORT,9926),Ze(ke.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ze(ke.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Ze(ke.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,sm.isEmpty(i)?!1:i),Ze(ke.CONFIG_PARAMS.HTTP_CORS,sm.isEmpty(i)?!1:i),Ze(ke.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ze(ke.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ze(ke.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ze(ke.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ze(ke.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,$c.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ze(ke.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,sm.isEmpty(c)?!1:c),a&&(Ze("CORS_ACCESSLIST",a),Ze(ke.CONFIG_PARAMS.HTTP_CORSACCESSLIST,a)),n&&(Ze(ke.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ze(ke.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ze(ke.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ze(ke.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ze(ke.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ze(ke.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${o_}. Please check your boot props and settings files`;im.fatal(r),im.error(t)}}o(z6,"initTestEnvironment")});var yt=M((mNe,Wv)=>{"use strict";var um=(H(),D(W)),j6=oe(),Nn=ue(),dm=require("path"),Q6=require("minimist"),qv=require("fs-extra"),Gv=require("lodash");Nn.initSync();var{CONFIG_PARAMS:Na,DATABASES_PARAM_CONFIG:om,SYSTEM_SCHEMA_NAME:a_}=um,am,cm,lm;function $v(){if(am!==void 0)return am;if(Nn.getHdbBasePath()!==void 0)return am=Nn.get(Na.STORAGE_PATH)||dm.join(Nn.getHdbBasePath(),um.DATABASES_DIR_NAME),am}o($v,"getBaseSchemaPath");function Vv(){if(cm!==void 0)return cm;if(Nn.getHdbBasePath()!==void 0)return cm=Yv(a_),cm}o(Vv,"getSystemSchemaPath");function Kv(){if(lm!==void 0)return lm;if(Nn.getHdbBasePath()!==void 0)return lm=Nn.get(um.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||dm.join(Nn.getHdbBasePath(),um.TRANSACTIONS_DIR_NAME),lm}o(Kv,"getTransactionAuditStoreBasePath");function J6(e,t){let r=Nn.get(Na.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||dm.join(Kv(),e.toString())}o(J6,"getTransactionAuditStorePath");function Yv(e,t){e=e.toString(),t=t&&t.toString();let r=Nn.get(um.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||dm.join($v(),e)}o(Yv,"getSchemaPath");function X6(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,Q6(process.argv));let n=r[Na.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(a){if(!j6.isObject(n))throw a;i=n}for(let a of i){let c=a[a_];if(!c)continue;let l=Nn.get(Na.DATABASES);l=l??{};let u=c?.tables?.[t]?.[om.PATH];if(u)return Gv.set(l,[a_,om.TABLES,t,om.PATH],u),Nn.setProperty(Na.DATABASES,l),u;let d=c?.[om.PATH];if(d)return Gv.set(l,[a_,om.PATH],d),Nn.setProperty(Na.DATABASES,l),d}}let s=r[Na.STORAGE_PATH.toUpperCase()];if(s){if(!qv.pathExistsSync(s))throw new Error(s+" does not exist");let i=dm.join(s,e);return qv.mkdirsSync(i),Nn.setProperty(Na.STORAGE_PATH,s),i}return Vv()}o(X6,"initSystemSchemaPaths");function Z6(){am=void 0,cm=void 0,lm=void 0}o(Z6,"resetPaths");Wv.exports={getBaseSchemaPath:$v,getSystemSchemaPath:Vv,getTransactionAuditStorePath:J6,getTransactionAuditStoreBasePath:Kv,getSchemaPath:Yv,initSystemSchemaPaths:X6,resetPaths:Z6}});var Cn=M((_Ne,Xv)=>{"use strict";var e8=Kr().LMDB_ERRORS_ENUM,hNe=require("lmdb"),t8=$t(),ENe=require("buffer").Buffer,{OVERFLOW_MARKER:zv,MAX_SEARCH_KEY_LENGTH:c_}=t8,jv=["number","string","symbol","boolean","bigint"];function r8(e){if(e=e?.primaryStore||e,!e)throw new Error(e8.ENV_REQUIRED)}o(r8,"validateEnv");function n8(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o(n8,"stringifyData");function s8(e){return e instanceof Date?e.valueOf():e}o(s8,"convertKeyValueToWrite");function i8(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(jv.includes(typeof e))return e.length>c_?[e.slice(0,c_)+zv]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(jv.includes(typeof i))i.length>c_?r.push(i.slice(0,c_)+zv):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}o(i8,"getIndexedValues");var l_=0,Qv=0;function Jv(){Qv=Date.now()-performance.now()}o(Jv,"adjustStartTime");Jv();var o8=6e4;setInterval(Jv,o8).unref();function a8(){let e=performance.now()+Qv;return e>l_?(l_=e,e):(l_+=488e-6,l_)}o(a8,"getNextMonotonicTime");Xv.exports={validateEnv:r8,stringifyData:n8,convertKeyValueToWrite:s8,getNextMonotonicTime:a8,getIndexedValues:i8}});var fm=M((SNe,Zv)=>{"use strict";var c8=(H(),D(W)).OPERATIONS_ENUM,vA=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=c8.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Zv.exports=vA});var mm=M((RNe,nU)=>{"use strict";var yNe=fm(),u_=(H(),D(W)),UA=oe(),eU=Q(),l8=require("uuid"),{handleHDBError:d_,hdbErrors:u8}=_e(),{HDB_ERROR_MSGS:f_,HTTP_STATUS_CODES:m_}=u8;nU.exports=tU;function tU(e,t,r){for(let s=0;s<t.length;s++)rU(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];d8(i,r,e.operation)}}o(tU,"processRows");tU.validateAttribute=rU;function rU(e){if(Buffer.byteLength(String(e))>u_.INSERT_MAX_CHARACTER_SIZE)throw d_(new Error,f_.ATTR_NAME_LENGTH_ERR(e),m_.BAD_REQUEST,void 0,void 0,!0);if(UA.isEmptyOrZeroLength(e)||UA.isEmpty(e.trim()))throw d_(new Error,f_.ATTR_NAME_NULLISH_ERR,m_.BAD_REQUEST,void 0,void 0,!0)}o(rU,"validateAttribute");function d8(e,t,r){if(!e.hasOwnProperty(t)||UA.isEmptyOrZeroLength(e[t])){if(r===u_.OPERATIONS_ENUM.INSERT||r===u_.OPERATIONS_ENUM.UPSERT){e[t]=l8.v4();return}throw eU.error("Update transaction aborted due to record with no hash value:",e),d_(new Error,f_.RECORD_MISSING_HASH_ERR,m_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>u_.INSERT_MAX_CHARACTER_SIZE)throw eU.error(e),d_(new Error,f_.HASH_VAL_LENGTH_ERR,m_.BAD_REQUEST,void 0,void 0,!0)}o(d8,"validateHash")});function uU(e){BA=e}function h8(){p8=setInterval(function(){for(let e of xA)if(e.stale){let t=e.getContext()?.url;aU.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},m8).unref()}var FA,oU,aU,cU,lU,sU,xA,f8,Ao,pm,iU,BA,bo,p_,m8,p8,hm=ie(()=>{FA=w(Cn()),oU=w(_e()),aU=w(Q()),cU=w(ue());H();lU=w(oe()),sU=100,xA=new Set,f8=(0,lU.convertToMS)(cU.get(B.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Ao={CLOSED:0,OPEN:1,LINGERING:2};o(uU,"replicationConfirmation");bo=class e{static{o(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=Ao.OPEN;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===Ao.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),xA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(xA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(pm&&!this.overloadChecked&&performance.now()-iU>f8)throw new oU.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===Ao.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===Ao.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,FA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let f=this.validated;this.validated=this.writes.length;for(let p=f;p<this.validated;p++)this.writes[p]?.validate?.(this.timestamp);let m;for(let p=f;p<this.validated;p++){let h=this.writes[p];h&&(h.before||h.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let p=0;p<2;p++){let h;for(let E=f;E<this.validated;E++){let g=this.writes[E];if(!g)continue;let A=g[p===0?"before":"beforeIntermediate"];if(A){let S=A();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?Ao.LINGERING:Ao.OPEN;let s,i=[],a=0;this.writes=this.writes.filter(f=>f);let c=o(f=>{f.commit(r,f.entry,n)},"doWrite"),l=o(()=>{let f=this.writes[a++];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)<sU>>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 pm||(pm=s,iU=performance.now(),pm.then(()=>{pm=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];BA&&p&&i.push(BA(m,p.store.getEntry(p.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+sU/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=Ao.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},p_=class extends bo{static{o(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,FA.getNextMonotonicTime)())}getReadTxn(){}},m8=3e4;o(h8,"startMonitoringTxns");h8()});var dU,Xn,kA,Nu=ie(()=>{dU=require("events"),Xn=class extends dU.EventEmitter{static{o(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new kA;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)}},kA=class{static{o(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function Rt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===Ao.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,a)}catch(c){a(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function a(c){throw n.abort({}),c}}var fU,Ca=ie(()=>{fU=w(ii());hm();o(Rt,"transaction");(0,fU._assignPackageExport)("transaction",Rt);Rt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Rt.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 qA={};Ie(qA,{add:()=>h_,applyReverse:()=>mU,getRecordAtTime:()=>HA,rebuildUpdateBefore:()=>E_});function h_(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 E_(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let a=e[s];if(a?.__op__)if(a.__op__===i.__op__)n||(n={}),n[s]=a;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=a,h_(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function mU(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=E8[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=pU}}function HA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=xt(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":mU(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let a={},c=0;for(let l in s)s[l]===pU&&(a[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=xt(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)a[f]&&(s[f]=d[f],a[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in a)s[l]=null;return s}var E8,pU,__=ie(()=>{Io();o(h_,"add");h_.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)};E8={add:h_};o(E_,"rebuildUpdateBefore");o(mU,"applyReverse");pU={};o(HA,"getRecordAtTime")});var Zn=M(S_=>{var g_=Q();for(let e of["trace","debug","info","warn","error","fatal","notify"])g_.logsAtLevel(e)&&(S_[e]=g_[e]);S_.loggerWithTag=e=>g_.loggerWithTag(e,!0);S_.setLogLevel=g_.setLogLevel});var yU={};Ie(yU,{parse:()=>VA,streamAsJSON:()=>_m,stringify:()=>Vc});function _m(e){return new GA({value:e})}function hU(e){return console.error(e),JSON.stringify(Em(e))}function EU(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Vc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===SU)return TU(e);if(t.resolution)return t.resolution.then(()=>Vc(e));throw t}}function TU(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+=TU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Vc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function VA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),S8.test(e)?_8.parse(e):JSON.parse(e)):null}var _U,$A,gU,_8,g8,SU,Em,GA,S8,KA=ie(()=>{_U=require("stream"),$A=w(Q()),gU=w(require("json-bigint-fixes")),_8=(0,gU.default)({useNativeBigInt:!0}),g8=1e4,SU={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw SU};({errorToString:Em}=$A);o(_m,"streamAsJSON");GA=class extends _U.Readable{static{o(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 a;for(;;){try{a=i.next(),a.then&&(yield a.then(c=>(a=c,""),c=>($A.warn("Error serializing in stream",c),a={done:!1,value:{error:Em(c)}},i={next:o(()=>({done:!0}),"next")},"")))}catch(c){a={done:!1,value:{error:Em(c)}},i={next:o(()=>({done:!0}),"next")}}if(a.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(a.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),hU)}catch(s){yield hU(s)}else yield Vc(t)}else yield Vc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);EU(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(Em(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>g8?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 EU(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(Em(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};o(hU,"handleError");o(EU,"when");o(Vc,"stringify");o(TU,"jsStringify");S8=/[[,:]\s*-?\d{16,}/;o(VA,"parse")});var LU={};Ie(LU,{asyncSerialization:()=>QA,contentTypes:()=>jA,findBestSerializer:()=>y_,getDeserializer:()=>Oo,hasAsyncSerialization:()=>JA,registerContentHandlers:()=>Tm,serialize:()=>ym,serializeMessage:()=>Co,toCsvStream:()=>T_});function T8(e){try{return e?.[0]===123?zA(e):e}catch{return e}}function Tm(e){e.register(y8,{serializers:[{regex:/^application\/json$/,serializer:_m},{regex:/^application\/cbor$/,serializer:o(function(t){return new Kc.EncoderStream(Sm).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:o(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Yc.Readable.from((0,xi.encodeIter)(t,Sm)):(0,xi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:o(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),T_(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,xi.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Kc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function y_(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,a,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=ln.get(u);if(p){let h=(p.q||1)*f;h>s&&(n=p,i=p.type||u,s=h,a=m)}}if(!n){if(r)throw new bU.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(ln.keys()).join(", "),406);n=ln.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:a}}function ym(e,t,r){let n=AU&&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 ws)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=y_(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}),WA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let a=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),a=a.pipe((0,No.createBrotliCompress)({params:{[No.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?No.constants.BROTLI_MODE_TEXT:No.constants.BROTLI_MODE_GENERIC,[No.constants.BROTLI_PARAM_QUALITY]:2}}))),a}s=i.serializer.serialize(e,r)}return n&&s?.length>AU?(r.headers.set("Content-Encoding","br"),new Promise((i,a)=>(0,No.brotliCompress)(s,(c,l)=>{c?a(c):i(l)}))):s}function Co(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;wo=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=y_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=gm(e);return wo?.length>0?(wo.length===1?wo[0]:Promise.all(wo)).then(()=>Co(e,t,!0)):n}finally{wo=void 0}}function QA(e){if(wo)wo.push(e);else throw new Error("Unable to serialize asynchronously")}function JA(){return!!wo}function R8(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 b8(e){return A8.includes(e)}function I8(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,a]=s.split("=");r[i.trim()]=a.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function Oo(e="",t=!1){let r=I8(e),n=r.type&&ln.get(r.type)?.deserialize||w8(r);return t?s=>R8(s).then(n):n}function w8(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!b8(e.parameters.charset)&&WA.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 zA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function N8(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 T_(e,t){let r=Yc.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(a=>({label:a,value:a})));let s={objectMode:!0},i=new NU.Transform(n,s);return r.pipe(i)}var xi,Kc,No,bU,Yc,IU,YA,wU,WA,NU,CU,OU,gm,zA,Sm,ln,jA,RU,PU,y8,AU,wo,A8,Po=ie(()=>{KA();xi=require("msgpackr"),Kc=require("cbor-x"),No=require("zlib"),bU=w(_e()),Yc=w(require("stream"));xr();IU=w(ii()),YA=w(ue());H();wU=w(require("yaml")),WA=w(Zn());Ns();NU=require("json2csv"),CU=w(require("fastify-plugin")),OU=YA.default.get(B.SERIALIZATION_BIGINT)!==!1,gm=OU?Vc:JSON.stringify,zA=OU?VA:JSON.parse,Sm={useRecords:!1,useToJSON:!0},ln=new Map,jA=ln;Ue.contentTypes=jA;(0,IU._assignPackageExport)("contentTypes",jA);ln.set("application/json",{serializeStream:_m,serialize:gm,deserialize(e){return zA(e)},q:.8});RU=new Kc.Encoder(Sm);ln.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Kc.EncoderStream(Sm).end(e)},serialize:RU.encode,deserialize:RU.decode,q:1});ln.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Yc.Readable.from((0,xi.encodeIter)(e,Sm)):(0,xi.pack)(e)},serialize:xi.pack,deserialize:xi.unpack,q:.9});ln.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),T_(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]),T_(e,e?.getColumns?.())},q:.1});ln.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return Yc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});ln.set("text/yaml",{serialize(e){return wU.stringify(e,{aliasDuplicateObjects:!1})},q:.7});ln.set("text/event-stream",{serializeStream:o(function(e){return Yc.Readable.from(N8(e,this.serialize))},"serializeStream"),serialize:o(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+`
|
|
3
|
+
`)},_5="certificate.pem",g5="privateKey.pem",S5="caCertificate.pem",T5="natsCertificate.pem",y5="natsCaCertificate.pem",It={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},R5={tls_certificate:It.SERVER,tlsCertificateAuthority:It.CA,customFunctions_tls_certificate:It.SERVER,customFunctionsTlsCertificateAuthority:It.CA,operationsApi_tls_certificate:It["OPERATIONS-API"],operationsApiTlsCertificateAuthority:It["OPERATIONS-CA"]},A5={[It.SERVER]:2,[It.DEFAULT]:1},b5={[It["OPERATIONS-API"]]:3,[It.SERVER]:2,[It.DEFAULT]:1},I5={[It["OPERATIONS-API"]]:3,[It.SERVER]:2,[It.DEFAULT]:1},w5={[It["OPERATIONS-CA"]]:3,[It.CA]:2,[It["DEFAULT-CA"]]:1},N5={[It["OPERATIONS-CA"]]:3,[It.CA]:2,[It["DEFAULT-CA"]]:1},C5={[It.CA]:2,[It["DEFAULT-CA"]]:1};an.CERTIFICATE_PEM_NAME=_5;an.PRIVATEKEY_PEM_NAME=g5;an.CA_PEM_NAME=S5;an.CERT_NAME=It;an.CERT_CONFIG_NAME_MAP=R5;an.CERT_PREFERENCE_APP=A5;an.CERT_PREFERENCE_OPS=b5;an.CERT_PREFERENCE_REP=I5;an.CA_CERT_PREFERENCE_REP=w5;an.CA_CERT_PREFERENCE_OPS=N5;an.CA_CERT_PREFERENCE_APP=C5;an.CERTIFICATE_VALUES=E5;an.NATS_CERTIFICATE_PEM_NAME=T5;an.NATS_CA_PEM_NAME=y5});var ft=M((iNe,ov)=>{"use strict";var In=require("validate.js");In.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||In.validators.type.checks[t](e)?null:` must be a '${t}' value`};In.validators.type.checks={Object:o(function(e){return In.isObject(e)&&!In.isArray(e)},"Object"),Array:In.isArray,Integer:In.isInteger,Number:In.isNumber,String:In.isString,Date:In.isDate,Boolean:o(function(e){return typeof e=="boolean"},"Boolean")};In.validators.hasValidFileExt=function(e,t){return In.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};ov.exports={validateObject:O5,validateObjectAsync:P5,validateBySchema:L5};function O5(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=In(e,t,{format:"flat"});return r?new Error(r):null}o(O5,"validateObject");async function P5(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await In.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}o(P5,"validateObjectAsync");function L5(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(L5,"validateBySchema")});var IA=M((cNe,fv)=>{"use strict";var uv=require("fs-extra"),ge=require("joi"),D5=require("os"),{boolean:Ke,string:Et,number:lr,array:Ia}=ge.types(),{totalmem:av}=require("os"),qc=require("path"),M5=Q(),bA=oe(),aNe=AA(),cv=(H(),D(W)),v5=ft(),lv="log",U5="components",x5="Invalid logging.rotation.maxSize unit. Available units are G, M or K",B5="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",F5="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",k5="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",H5="rootPath config parameter is undefined",wn=ge.alternatives([lr.min(0),Et]).optional().empty(null),e_=ge.alternatives([Ia.items(Et,{host:Et.required(),port:wn},{hostname:Et.required(),port:wn}).empty(null),Ia.items(Et)]),Ui,dv=!1;fv.exports={configValidator:q5,routesValidator:W5,routeConstraints:e_};function q5(e,t=!1){if(dv=t,Ui=e.rootPath,bA.isEmpty(Ui))throw H5;let r=Ke.optional(),n=lr.min(0).max(1e3).empty(null).default(Y5),s=Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(tm),i=Et.optional().empty(null),a=Et.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ge.string().empty(null).default(tm),l=ge.custom($5).empty(null).default(tm),u=e.clustering?.enabled,d=ge.object({certificate:i,certificateAuthority:i,privateKey:i}),f;return u===!0?f=ge.object({enabled:r,hubServer:ge.object({cluster:ge.object({name:ge.required().empty(null),network:ge.object({port:wn,routes:e_}).required()}).required(),leafNodes:ge.object({network:ge.object({port:wn}).required()}).required(),network:ge.object({port:wn}).required()}).required(),leafServer:ge.object({network:ge.object({port:wn,routes:e_}).required(),streams:ge.object({maxAge:lr.min(120).allow(null).optional(),maxBytes:lr.min(1).allow(null).optional(),maxMsgs:lr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ge.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:Ke.optional(),databaseLevel:Ke.optional(),tls:ge.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ke.required(),verify:Ke.optional()}),user:Et.optional().empty(null)}).optional():f=ge.object({enabled:r,tls:ge.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ke.optional()})}).optional(),ge.object({authentication:ge.alternatives(ge.object({authorizeLocal:Ke,cacheTTL:lr.required(),cookie:ge.object({domains:Ia.items(Et).optional(),expires:Et.optional()}),enableSessions:Ke,hashFunction:Et.valid("md5","sha256","argon2id").optional().empty(null)}),Ke).optional(),analytics:ge.object({aggregatePeriod:lr,replicate:Ke.optional()}),replication:ge.object({hostname:ge.alternatives(Et,lr).optional().empty(null),url:Et.optional().empty(null),port:wn,securePort:wn,routes:Ia.optional().empty(null),databases:ge.alternatives(Et,Ia),enableRootCAs:Ke.optional(),copyTablesToCatchUp:Ke.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:ge.object({enabled:r}).required(),logging:ge.object({auditAuthEvents:ge.object({logFailed:Ke,logSuccessful:Ke}),file:Ke.required(),level:ge.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ge.object({enabled:Ke.optional(),compress:Ke.optional(),interval:Et.custom(K5).optional().empty(null),maxSize:Et.custom(V5).optional().empty(null),path:Et.optional().empty(null).default(tm)}).required(),root:s,stdStreams:Ke.required(),auditLog:Ke.required()}).required(),operationsApi:ge.object({network:ge.object({cors:Ke.optional(),corsAccessList:Ia.optional(),headersTimeout:lr.min(1).optional(),keepAliveTimeout:lr.min(1).optional(),port:wn,domainSocket:ge.optional().empty("hdb/operations-server").default(tm),securePort:wn,timeout:lr.min(1).optional()}).optional(),tls:ge.alternatives([ge.array().items(d),d])}).required(),rootPath:Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ge.object({network:ge.object({port:wn,securePort:wn,mtls:ge.alternatives([Ke.optional(),ge.object({user:Et.optional(),certificateAuthority:i,required:Ke.optional()})])}).required(),webSocket:Ke.optional(),requireAuthentication:Ke.optional()}),http:ge.object({compressionThreshold:lr.optional(),cors:Ke.optional(),corsAccessList:Ia.optional(),headersTimeout:lr.min(1).optional(),port:wn,securePort:wn,maxHeaderSize:lr.optional(),mtls:ge.alternatives([Ke.optional(),ge.object({user:Et.optional(),certificateAuthority:i,required:Ke.optional()})]),threadRange:ge.alternatives([Ia.optional(),Et.optional()])}).required(),threads:ge.alternatives(n.optional(),ge.object({count:n.optional(),debug:ge.alternatives(Ke.optional(),ge.object({startingPort:lr.min(1).optional(),host:Et.optional(),waitForDebugger:Ke.optional()})),maxHeapMemory:lr.min(0).optional()})),storage:ge.object({writeAsync:Ke.required(),overlappingSync:Ke.optional(),caching:Ke.optional(),compression:ge.alternatives([Ke.optional(),ge.object({dictionary:Et.optional(),threshold:lr.optional()})]),compactOnStart:Ke.optional(),compactOnStartKeepBackup:Ke.optional(),noReadAhead:Ke.optional(),path:l,prefetchWrites:Ke.optional(),maxFreeSpaceToLoad:lr.optional(),maxFreeSpaceToRetain:lr.optional()}).required(),ignoreScripts:Ke.optional(),tls:ge.alternatives([ge.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(q5,"configValidator");function G5(e){return dv||uv.existsSync(e)?null:`Specified path ${e} does not exist.`}o(G5,"doesPathExist");function $5(e,t){ge.assert(e,Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=G5(e);if(r)return t.message(r)}o($5,"validatePath");function V5(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(x5);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(F5):e}o(V5,"validateRotationMaxSize");function K5(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(B5);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(k5):e}o(K5,"validateRotationInterval");function Y5(e,t){let r=t.state.path.join("."),n=D5.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||av();return i=Math.round(Math.min(i,av())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),M5.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}o(Y5,"setDefaultThreads");function tm(e,t){let r=t.state.path.join(".");if(!bA.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(bA.isEmpty(Ui))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return qc.join(Ui,U5);case"logging.root":return qc.join(Ui,lv);case"clustering.leafServer.streams.path":return qc.join(Ui,"clustering","leaf");case"storage.path":let n=qc.join(Ui,cv.LEGACY_DATABASES_DIR_NAME);return uv.existsSync(n)?n:qc.join(Ui,cv.DATABASES_DIR_NAME);case"logging.rotation.path":return qc.join(Ui,lv);case"operationsApi.network.domainSocket":return r==null?null:qc.join(Ui,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(tm,"setDefaultRoot");function W5(e){let t=ge.object({routes:e_});return v5.validateBySchema({routes:e},t)}o(W5,"routesValidator")});var $t=M((uNe,pv)=>{"use strict";var z5="__dbis__",j5="__txns__",Q5="__environment_name__",J5="__dbi_defintion__",X5={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"},Z5=["__createdtime__","__updatedtime__"],e6="\uFFFF",mv={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},t6=Object.values(mv);pv.exports={AUDIT_STORE_NAME:j5,INTERNAL_DBIS_NAME:z5,DBI_DEFINITION_NAME:J5,SEARCH_TYPES:X5,TIMESTAMP_NAMES:Z5,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Q5,TRANSACTIONS_DBI_NAMES_ENUM:mv,TRANSACTIONS_DBIS:t6,OVERFLOW_MARKER:e6}});var Kr=M((dNe,Av)=>{"use strict";var hv=(H(),D(W)),Ev=$t(),_v={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},gv=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Sv={500:gv("There was an error processing your request."),400:"Invalid request"},r6=Sv[_v.INTERNAL_SERVER_ERROR],n6={OP_NOT_SUPPORTED_FOR_FS:o(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:o(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:o(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:o(e=>`${e} not found.`,"NOT_FOUND")},s6={CONFIG_VALIDATION:o(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},i6={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:o(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:o(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:o(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:o((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:o(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},o6={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 ${Ev.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Ev.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"},a6={ATTR_NAME_LENGTH_ERR:o(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${hv.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 ${hv.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"},Tv={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"},c6={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:o(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:o(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:o((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:o(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."},l6={ATTR_PERM_MISSING:o((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:o((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:o(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:o(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:o(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:o(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:o(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:o(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:o(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:o((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:o(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:o(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:o(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:o(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:o(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},u6={ATTR_NOT_FOUND:o((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:o((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:o(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:o(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:o(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:o((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:o((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},d6={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},f6={ALTER_USER_DUP_ROLES:o(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:o(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:o(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:o(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:o(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:o(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},yv={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:o(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")},Rv={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:o(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},m6={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"},p6={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},h6={...Tv,...i6,...n6,...c6,...l6,...u6,...d6,...f6,...a6,...yv,...Rv,...m6,...p6,...s6};Av.exports={CHECK_LOGS_WRAPPER:gv,HDB_ERROR_MSGS:h6,DEFAULT_ERROR_MSGS:Sv,DEFAULT_ERROR_RESP:r6,HTTP_STATUS_CODES:_v,LMDB_ERRORS_ENUM:o6,AUTHENTICATION_ERROR_MSGS:Tv,VALIDATION_ERROR_MSGS:yv,ITC_ERRORS:Rv}});var _e=M((mNe,wv)=>{"use strict";var Au=Kr(),E6=Q(),_6=(H(),D(W)),t_=class extends Error{static{o(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,bv),this.statusCode=n||Au.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Au.DEFAULT_ERROR_MSGS[n]?Au.DEFAULT_ERROR_MSGS[n]:Au.DEFAULT_ERROR_MSGS[Au.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&&E6[s](i)}},wA=class extends Error{static{o(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},NA=class extends Error{static{o(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function bv(e,t,r,n=_6.LOG_LEVELS.ERROR,s=null,i=!1){if(Iv(e))return e;let a=new t_(e,t,r,n,s);return i&&delete a.stack,a}o(bv,"handleHDBError");function bu(e){this.message=e}o(bu,"Violation");bu.prototype=Object.create(Error.prototype);bu.prototype.constructor=bu;bu.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var CA=class extends bu{static{o(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function Iv(e){return e.__proto__.constructor.name===t_.name}o(Iv,"isHDBError");wv.exports={isHDBError:Iv,handleHDBError:bv,ClientError:wA,ServerError:NA,AccessViolation:CA,Violation:bu,hdbErrors:Au}});var rm={};Ie(rm,{server:()=>Ue});var Nv,Ue,xr=ie(()=>{Nv=w(ii()),Ue={};(0,Nv._assignPackageExport)("server",Ue)});var yt=M(tr=>{"use strict";var Is=(H(),D(W)),Ir=oe(),ur=Q(),{configValidator:g6,routesValidator:Cv}=IA(),cn=require("fs-extra"),Pv=require("yaml"),Jn=require("path"),S6=require("is-number"),Lv=require("properties-reader"),T6=require("lodash"),{handleHDBError:y6}=_e(),{HTTP_STATUS_CODES:R6,HDB_ERROR_MSGS:Iu}=Kr(),{server:A6}=(xr(),D(rm)),{PACKAGE_ROOT:Dv}=Tt(),{DATABASES_PARAM_CONFIG:nm,CONFIG_PARAMS:Qn,CONFIG_PARAM_MAP:oi}=Is,b6="Unable to get config value because config is uninitialized",I6="Config successfully initialized",w6="Error backing up config file",N6="Empty parameter sent to getConfigValue",Mv=Jn.join(Dv,"config","yaml",Is.HDB_DEFAULT_CONFIG_FILE),C6=Jn.join(Dv,"config","yaml","defaultNatsConfig.yaml"),O6="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Ov={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"},r_,Ut,n_;tr.createConfigFile=P6;tr.getDefaultConfig=L6;tr.getConfigValue=Uv;tr.initConfig=s_;tr.flattenConfig=wu;tr.updateConfigValue=xv;tr.updateConfigObject=M6;tr.getConfiguration=x6;tr.setConfiguration=B6;tr.readConfigFile=DA;tr.getClusteringRoutes=F6;tr.initOldConfig=Bv;tr.getConfigFromFile=k6;tr.getConfigFilePath=Gc;tr.addConfig=H6;tr.deleteConfigFromFile=q6;tr.getConfigObj=G6;tr.resolvePath=OA;tr.getFlatConfigObj=$6;function OA(e){if(e?.startsWith("~/"))return Jn.join(Ir.getHomeDir(),e.slice(1));let t=ue();try{return Jn.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}o(OA,"resolvePath");function P6(e,t=!1){let r=wa(Mv);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=Pv.parseDocument(cn.readFileSync(C6,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}r_=wu(r.toJSON());let n;for(let c in e){let l=oi[c.toLowerCase()];if(l===Qn.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=PA(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){ur.error(f)}}}n&&vv(r,n),LA(r,t);let s=r.toJSON();Ut=wu(s);let i=r.getIn(["rootPath"]),a=Jn.join(i,Is.HDB_CONFIG_FILE);if(cn.createFileSync(a),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);cn.writeFileSync(a,String(r)),ur.trace(`Config file written to ${a}`)}o(P6,"createConfigFile");function vv(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Ir.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 a in n[s][nm.TABLES][i]){let c=n[s][nm.TABLES][i][a],l=[Qn.DATABASES,s,nm.TABLES,i,a];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let a=n[s][i],c=[Qn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(n){ur.error("Error parsing schemas CLI/env config arguments",n)}}o(vv,"setSchemasConfig");function L6(e){if(r_===void 0){let r=wa(Mv);r_=wu(r.toJSON())}let t=oi[e.toLowerCase()];if(t!==void 0)return r_[t.toLowerCase()]}o(L6,"getDefaultConfig");function Uv(e){if(e==null){ur.info(N6);return}if(Ut===void 0){ur.trace(b6);return}let t=oi[e.toLowerCase()];if(t!==void 0)return Ut[t.toLowerCase()]}o(Uv,"getConfigValue");function Gc(e=Ir.getPropsFilePath()){let t=Ir.getEnvCliRootPath();if(t)return OA(Jn.join(t,Is.HDB_CONFIG_FILE));let r=Lv(e);return OA(r.get(Is.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}o(Gc,"getConfigFilePath");function s_(e=!1){if(Ut===void 0||e){let t;if(!Ir.noBootFile()){t=Ir.getPropsFilePath();try{cn.accessSync(t,cn.constants.F_OK|cn.constants.R_OK)}catch(i){throw ur.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Gc(t),n;if(r.includes("config/settings.js"))try{Bv(r);return}catch(i){if(i.code!==Is.NODE_ERROR_CODES.ENOENT)throw i}try{n=wa(r)}catch(i){if(i.code===Is.NODE_ERROR_CODES.ENOENT){ur.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 ur.error(i),new Error(`Error reading HarperDB config file at ${r}`)}D6(n,r),LA(n);let s=n.toJSON();if(A6.config=s,Ut=wu(s),Ut.logging_rotation_rotate)for(let i in Ov)Ut[i]&&ur.error(`Config ${Ov[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);ur.trace(I6)}}o(s_,"initConfig");function D6(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Jn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Jn.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(ur.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);cn.writeFileSync(t,String(e))}}o(D6,"checkForUpdatedConfig");function LA(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 Iu.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 Iu.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=g6(r,t);if(n.error)throw Iu.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)}o(LA,"validateConfig");function M6(e,t){Ut===void 0&&(Ut={});let r=oi[e.toLowerCase()];if(r===void 0){ur.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ut[r.toLowerCase()]=t}o(M6,"updateConfigObject");function xv(e,t,r=void 0,n=!1,s=!1,i=!1){Ut===void 0&&s_();let a=Uv(oi.hdb_root),c=Jn.join(a,Is.HDB_CONFIG_FILE),l=wa(c),u;if(r&&Ut){let m=!1;for(let p in r)if(r[p]!=Ut[p.toLowerCase()]){m=!0;break}if(!m){ur.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===Qn.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=oi[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=PA(m,t);l.setIn([...p],h)}else for(let m in r){let p=oi[m.toLowerCase()];if(p===Qn.HTTP_SECUREPORT&&r[m]===Ut[Qn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===Qn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===Ut[Qn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===Qn.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=Is.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let g=PA(p,r[m]);p==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],g)}catch(A){ur.error(A)}}}u&&vv(l,u),LA(l);let d=l.getIn(["rootPath"]),f=Jn.join(d,Is.HDB_CONFIG_FILE);if(n===!0&&v6(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);cn.writeFileSync(f,String(l)),s&&(Ut=wu(l.toJSON())),ur.trace(`Config parameter: ${e} updated with value: ${t}`)}o(xv,"updateConfigValue");function v6(e,t){try{let r=Jn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${Is.HDB_CONFIG_FILE}.bak`);cn.copySync(e,r),ur.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){ur.error(w6),ur.error(r)}}o(v6,"backupConfigFile");var U6=["databases"];function wu(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}),n_=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])&&!U6.includes(i)){let a=r(n[i]);for(let c in a){if(!a.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!Qn[l.toUpperCase()]&&oi[l]&&(s[oi[l].toLowerCase()]=a[c]),s[l]=a[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}o(r,"squashObj")}o(wu,"flattenConfig");function PA(e,t){if(e===Qn.CLUSTERING_NODENAME||e===Qn.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(S6(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Ir.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 Ir.autoCast(t)}o(PA,"castConfigValue");function x6(){let e=Ir.getPropsFilePath(),t=Gc(e);return wa(t).toJSON()}o(x6,"getConfiguration");async function B6(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return xv(void 0,void 0,s,!0),O6}catch(i){throw typeof i=="string"||i instanceof String?y6(i,i,R6.BAD_REQUEST,void 0,void 0,!0):i}}o(B6,"setConfiguration");function DA(){let e=Ir.getPropsFilePath();try{cn.accessSync(e,cn.constants.F_OK|cn.constants.R_OK)}catch(n){if(!Ir.noBootFile())throw ur.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Gc(e);return wa(t).toJSON()}o(DA,"readConfigFile");function wa(e){return Pv.parseDocument(cn.readFileSync(e,"utf8"),{simpleKeys:!0})}o(wa,"parseYamlDoc");function F6(){let e=DA(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Ir.isEmptyOrZeroLength(t)?[]:t;let r=Cv(t);if(r)throw Iu.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Ir.isEmptyOrZeroLength(n)?[]:n;let s=Cv(n);if(s)throw Iu.CONFIG_VALIDATION(s.message);if(!Ir.isEmptyOrZeroLength(n)&&!Ir.isEmptyOrZeroLength(t)){let i=t.filter(a=>n.some(c=>c.host===a.host&&c.port===a.port));if(!Ir.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Iu.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:n}}o(F6,"getClusteringRoutes");function Bv(e){let t=Lv(e);Ut={};for(let r in oi){let n=t.get(r.toUpperCase());if(Ir.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=oi[r].toLowerCase();s===Qn.LOGGING_ROOT?Ut[s]=Jn.dirname(n):Ut[s]=n}return Ut}o(Bv,"initOldConfig");function k6(e){let t=DA();return T6.get(t,e.replaceAll("_","."))}o(k6,"getConfigFromFile");async function H6(e,t){let r=wa(Gc());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 cn.writeFile(Gc(),String(r))}o(H6,"addConfig");function q6(e){let t=Gc(Ir.getPropsFilePath()),r=wa(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Jn.join(n,Is.HDB_CONFIG_FILE);cn.writeFileSync(s,String(r))}o(q6,"deleteConfigFromFile");function G6(){return n_||(s_(),n_)}o(G6,"getConfigObj");function $6(){return Ut||s_(),Ut}o($6,"getFlatConfigObj")});var ue=M((Gv,$v)=>{"use strict";var MA=require("fs-extra"),$c=require("path"),Fv=require("os"),V6=require("properties-reader"),im=Q(),sm=oe(),ke=(H(),D(W)),i_=yt(),K6="Error initializing environment manager",o_="BOOT_PROPS_FILE_PATH",kv=!1,Y6={[ke.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ke.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ro={};Object.assign(Gv,$v.exports={BOOT_PROPS_FILE_PATH:o_,getHdbBasePath:W6,setHdbBasePath:z6,get:Hv,initSync:Q6,setProperty:Ze,initTestEnvironment:X6,setCloneVar:J6});function W6(){return Ro[ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(W6,"getHdbBasePath");function z6(e){Ro[ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(z6,"setHdbBasePath");function Hv(e){let t=i_.getConfigValue(e);return t===void 0?Ro[e]:t}o(Hv,"get");function Ze(e,t){Y6[e]&&(Ro[e]=t),i_.updateConfigObject(e,t)}o(Ze,"setProperty");function j6(){let e;try{e=sm.getPropsFilePath(),MA.accessSync(e,MA.constants.F_OK|MA.constants.R_OK),kv=!0;let t=V6(e);return Ro[ke.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ke.HDB_SETTINGS_NAMES.INSTALL_USER),Ro[ke.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ke.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ro[o_]=e,!0}catch{return im.trace(`Environment manager found no properties file at ${e}`),!1}}o(j6,"doesPropFileExist");function Q6(e=!1){try{((kv||j6()||sm.noBootFile())&&!qv||e)&&(i_.initConfig(e),Ro[ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=i_.getConfigValue(ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){im.error(K6),im.error(t),console.error(t),process.exit(1)}}o(Q6,"initSync");var qv=!1;function J6(e){qv=e}o(J6,"setCloneVar");function X6(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:a,local_studio_on:c}=e,l=$c.join(__dirname,"../../","unitTests");Ro[o_]=$c.join(l,"hdb_boot_properties.file"),Ze(ke.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,$c.join(l,"settings.test")),Ze(ke.HDB_SETTINGS_NAMES.INSTALL_USER,Fv.userInfo()?Fv.userInfo().username:void 0),Ze(ke.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ze(ke.HDB_SETTINGS_NAMES.LOG_PATH_KEY,$c.join(l,"envDir","log")),Ze(ke.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ze(ke.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ze(ke.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ze(ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,$c.join(l,"envDir")),Ze(ke.CONFIG_PARAMS.STORAGE_PATH,$c.join(l,"envDir")),s&&(Ze(ke.CONFIG_PARAMS.HTTP_SECUREPORT,Hv(ke.CONFIG_PARAMS.HTTP_PORT)),Ze(ke.CONFIG_PARAMS.HTTP_PORT,null)),Ze(ke.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ze(ke.CONFIG_PARAMS.HTTP_PORT,9926),Ze(ke.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ze(ke.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Ze(ke.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,sm.isEmpty(i)?!1:i),Ze(ke.CONFIG_PARAMS.HTTP_CORS,sm.isEmpty(i)?!1:i),Ze(ke.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ze(ke.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ze(ke.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ze(ke.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ze(ke.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,$c.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ze(ke.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,sm.isEmpty(c)?!1:c),a&&(Ze("CORS_ACCESSLIST",a),Ze(ke.CONFIG_PARAMS.HTTP_CORSACCESSLIST,a)),n&&(Ze(ke.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ze(ke.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ze(ke.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ze(ke.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ze(ke.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ze(ke.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${o_}. Please check your boot props and settings files`;im.fatal(r),im.error(t)}}o(X6,"initTestEnvironment")});var Rt=M((gNe,Qv)=>{"use strict";var um=(H(),D(W)),Z6=oe(),Nn=ue(),dm=require("path"),e8=require("minimist"),Vv=require("fs-extra"),Kv=require("lodash");Nn.initSync();var{CONFIG_PARAMS:Na,DATABASES_PARAM_CONFIG:om,SYSTEM_SCHEMA_NAME:a_}=um,am,cm,lm;function Yv(){if(am!==void 0)return am;if(Nn.getHdbBasePath()!==void 0)return am=Nn.get(Na.STORAGE_PATH)||dm.join(Nn.getHdbBasePath(),um.DATABASES_DIR_NAME),am}o(Yv,"getBaseSchemaPath");function Wv(){if(cm!==void 0)return cm;if(Nn.getHdbBasePath()!==void 0)return cm=jv(a_),cm}o(Wv,"getSystemSchemaPath");function zv(){if(lm!==void 0)return lm;if(Nn.getHdbBasePath()!==void 0)return lm=Nn.get(um.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||dm.join(Nn.getHdbBasePath(),um.TRANSACTIONS_DIR_NAME),lm}o(zv,"getTransactionAuditStoreBasePath");function t8(e,t){let r=Nn.get(Na.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||dm.join(zv(),e.toString())}o(t8,"getTransactionAuditStorePath");function jv(e,t){e=e.toString(),t=t&&t.toString();let r=Nn.get(um.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||dm.join(Yv(),e)}o(jv,"getSchemaPath");function r8(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,e8(process.argv));let n=r[Na.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(a){if(!Z6.isObject(n))throw a;i=n}for(let a of i){let c=a[a_];if(!c)continue;let l=Nn.get(Na.DATABASES);l=l??{};let u=c?.tables?.[t]?.[om.PATH];if(u)return Kv.set(l,[a_,om.TABLES,t,om.PATH],u),Nn.setProperty(Na.DATABASES,l),u;let d=c?.[om.PATH];if(d)return Kv.set(l,[a_,om.PATH],d),Nn.setProperty(Na.DATABASES,l),d}}let s=r[Na.STORAGE_PATH.toUpperCase()];if(s){if(!Vv.pathExistsSync(s))throw new Error(s+" does not exist");let i=dm.join(s,e);return Vv.mkdirsSync(i),Nn.setProperty(Na.STORAGE_PATH,s),i}return Wv()}o(r8,"initSystemSchemaPaths");function n8(){am=void 0,cm=void 0,lm=void 0}o(n8,"resetPaths");Qv.exports={getBaseSchemaPath:Yv,getSystemSchemaPath:Wv,getTransactionAuditStorePath:t8,getTransactionAuditStoreBasePath:zv,getSchemaPath:jv,initSystemSchemaPaths:r8,resetPaths:n8}});var Cn=M((RNe,tU)=>{"use strict";var s8=Kr().LMDB_ERRORS_ENUM,TNe=require("lmdb"),i8=$t(),yNe=require("buffer").Buffer,{OVERFLOW_MARKER:Jv,MAX_SEARCH_KEY_LENGTH:c_}=i8,Xv=["number","string","symbol","boolean","bigint"];function o8(e){if(e=e?.primaryStore||e,!e)throw new Error(s8.ENV_REQUIRED)}o(o8,"validateEnv");function a8(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o(a8,"stringifyData");function c8(e){return e instanceof Date?e.valueOf():e}o(c8,"convertKeyValueToWrite");function l8(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(Xv.includes(typeof e))return e.length>c_?[e.slice(0,c_)+Jv]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(Xv.includes(typeof i))i.length>c_?r.push(i.slice(0,c_)+Jv):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}o(l8,"getIndexedValues");var l_=0,Zv=0;function eU(){Zv=Date.now()-performance.now()}o(eU,"adjustStartTime");eU();var u8=6e4;setInterval(eU,u8).unref();function d8(){let e=performance.now()+Zv;return e>l_?(l_=e,e):(l_+=488e-6,l_)}o(d8,"getNextMonotonicTime");tU.exports={validateEnv:o8,stringifyData:a8,convertKeyValueToWrite:c8,getNextMonotonicTime:d8,getIndexedValues:l8}});var fm=M((bNe,rU)=>{"use strict";var f8=(H(),D(W)).OPERATIONS_ENUM,vA=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=f8.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};rU.exports=vA});var mm=M((NNe,oU)=>{"use strict";var wNe=fm(),u_=(H(),D(W)),UA=oe(),nU=Q(),m8=require("uuid"),{handleHDBError:d_,hdbErrors:p8}=_e(),{HDB_ERROR_MSGS:f_,HTTP_STATUS_CODES:m_}=p8;oU.exports=sU;function sU(e,t,r){for(let s=0;s<t.length;s++)iU(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];h8(i,r,e.operation)}}o(sU,"processRows");sU.validateAttribute=iU;function iU(e){if(Buffer.byteLength(String(e))>u_.INSERT_MAX_CHARACTER_SIZE)throw d_(new Error,f_.ATTR_NAME_LENGTH_ERR(e),m_.BAD_REQUEST,void 0,void 0,!0);if(UA.isEmptyOrZeroLength(e)||UA.isEmpty(e.trim()))throw d_(new Error,f_.ATTR_NAME_NULLISH_ERR,m_.BAD_REQUEST,void 0,void 0,!0)}o(iU,"validateAttribute");function h8(e,t,r){if(!e.hasOwnProperty(t)||UA.isEmptyOrZeroLength(e[t])){if(r===u_.OPERATIONS_ENUM.INSERT||r===u_.OPERATIONS_ENUM.UPSERT){e[t]=m8.v4();return}throw nU.error("Update transaction aborted due to record with no hash value:",e),d_(new Error,f_.RECORD_MISSING_HASH_ERR,m_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>u_.INSERT_MAX_CHARACTER_SIZE)throw nU.error(e),d_(new Error,f_.HASH_VAL_LENGTH_ERR,m_.BAD_REQUEST,void 0,void 0,!0)}o(h8,"validateHash")});function mU(e){BA=e}function S8(){g8=setInterval(function(){for(let e of xA)if(e.stale){let t=e.getContext()?.url;uU.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},_8).unref()}var FA,lU,uU,dU,fU,aU,xA,E8,Ao,pm,cU,BA,bo,p_,_8,g8,hm=ie(()=>{FA=w(Cn()),lU=w(_e()),uU=w(Q()),dU=w(ue());H();fU=w(oe()),aU=100,xA=new Set,E8=(0,fU.convertToMS)(dU.get(B.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Ao={CLOSED:0,OPEN:1,LINGERING:2};o(mU,"replicationConfirmation");bo=class e{static{o(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=Ao.OPEN;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===Ao.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),xA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(xA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(pm&&!this.overloadChecked&&performance.now()-cU>E8)throw new lU.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===Ao.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===Ao.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,FA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let f=this.validated;this.validated=this.writes.length;for(let p=f;p<this.validated;p++)this.writes[p]?.validate?.(this.timestamp);let m;for(let p=f;p<this.validated;p++){let h=this.writes[p];h&&(h.before||h.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let p=0;p<2;p++){let h;for(let E=f;E<this.validated;E++){let g=this.writes[E];if(!g)continue;let A=g[p===0?"before":"beforeIntermediate"];if(A){let S=A();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?Ao.LINGERING:Ao.OPEN;let s,i=[],a=0;this.writes=this.writes.filter(f=>f);let c=o(f=>{f.commit(r,f.entry,n)},"doWrite"),l=o(()=>{let f=this.writes[a++];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)<aU>>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 pm||(pm=s,cU=performance.now(),pm.then(()=>{pm=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];BA&&p&&i.push(BA(m,p.store.getEntry(p.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+aU/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=Ao.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},p_=class extends bo{static{o(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,FA.getNextMonotonicTime)())}getReadTxn(){}},_8=3e4;o(S8,"startMonitoringTxns");S8()});var pU,Xn,kA,Nu=ie(()=>{pU=require("events"),Xn=class extends pU.EventEmitter{static{o(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new kA;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)}},kA=class{static{o(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function At(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===Ao.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,a)}catch(c){a(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function a(c){throw n.abort({}),c}}var hU,Ca=ie(()=>{hU=w(ii());hm();o(At,"transaction");(0,hU._assignPackageExport)("transaction",At);At.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};At.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var qA={};Ie(qA,{add:()=>h_,applyReverse:()=>EU,getRecordAtTime:()=>HA,rebuildUpdateBefore:()=>E_});function h_(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 E_(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let a=e[s];if(a?.__op__)if(a.__op__===i.__op__)n||(n={}),n[s]=a;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=a,h_(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function EU(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=T8[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=_U}}function HA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=xt(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":EU(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let a={},c=0;for(let l in s)s[l]===_U&&(a[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=xt(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)a[f]&&(s[f]=d[f],a[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in a)s[l]=null;return s}var T8,_U,__=ie(()=>{Io();o(h_,"add");h_.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)};T8={add:h_};o(E_,"rebuildUpdateBefore");o(EU,"applyReverse");_U={};o(HA,"getRecordAtTime")});var Zn=M(S_=>{var g_=Q();for(let e of["trace","debug","info","warn","error","fatal","notify"])g_.logsAtLevel(e)&&(S_[e]=g_[e]);S_.loggerWithTag=e=>g_.loggerWithTag(e,!0);S_.setLogLevel=g_.setLogLevel});var bU={};Ie(bU,{parse:()=>VA,streamAsJSON:()=>_m,stringify:()=>Vc});function _m(e){return new GA({value:e})}function gU(e){return console.error(e),JSON.stringify(Em(e))}function SU(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Vc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===RU)return AU(e);if(t.resolution)return t.resolution.then(()=>Vc(e));throw t}}function AU(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+=AU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Vc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function VA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),A8.test(e)?y8.parse(e):JSON.parse(e)):null}var TU,$A,yU,y8,R8,RU,Em,GA,A8,KA=ie(()=>{TU=require("stream"),$A=w(Q()),yU=w(require("json-bigint-fixes")),y8=(0,yU.default)({useNativeBigInt:!0}),R8=1e4,RU={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw RU};({errorToString:Em}=$A);o(_m,"streamAsJSON");GA=class extends TU.Readable{static{o(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 a;for(;;){try{a=i.next(),a.then&&(yield a.then(c=>(a=c,""),c=>($A.warn("Error serializing in stream",c),a={done:!1,value:{error:Em(c)}},i={next:o(()=>({done:!0}),"next")},"")))}catch(c){a={done:!1,value:{error:Em(c)}},i={next:o(()=>({done:!0}),"next")}}if(a.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(a.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),gU)}catch(s){yield gU(s)}else yield Vc(t)}else yield Vc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);SU(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(Em(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>R8?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 SU(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(Em(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};o(gU,"handleError");o(SU,"when");o(Vc,"stringify");o(AU,"jsStringify");A8=/[[,:]\s*-?\d{16,}/;o(VA,"parse")});var vU={};Ie(vU,{asyncSerialization:()=>QA,contentTypes:()=>jA,findBestSerializer:()=>y_,getDeserializer:()=>Oo,hasAsyncSerialization:()=>JA,registerContentHandlers:()=>Tm,serialize:()=>ym,serializeMessage:()=>Co,toCsvStream:()=>T_});function b8(e){try{return e?.[0]===123?zA(e):e}catch{return e}}function Tm(e){e.register(I8,{serializers:[{regex:/^application\/json$/,serializer:_m},{regex:/^application\/cbor$/,serializer:o(function(t){return new Kc.EncoderStream(Sm).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:o(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Yc.Readable.from((0,xi.encodeIter)(t,Sm)):(0,xi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:o(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),T_(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,xi.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Kc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function y_(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,a,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=ln.get(u);if(p){let h=(p.q||1)*f;h>s&&(n=p,i=p.type||u,s=h,a=m)}}if(!n){if(r)throw new NU.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(ln.keys()).join(", "),406);n=ln.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:a}}function ym(e,t,r){let n=wU&&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 ws)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=y_(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}),WA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let a=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),a=a.pipe((0,No.createBrotliCompress)({params:{[No.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?No.constants.BROTLI_MODE_TEXT:No.constants.BROTLI_MODE_GENERIC,[No.constants.BROTLI_PARAM_QUALITY]:2}}))),a}s=i.serializer.serialize(e,r)}return n&&s?.length>wU?(r.headers.set("Content-Encoding","br"),new Promise((i,a)=>(0,No.brotliCompress)(s,(c,l)=>{c?a(c):i(l)}))):s}function Co(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;wo=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=y_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=gm(e);return wo?.length>0?(wo.length===1?wo[0]:Promise.all(wo)).then(()=>Co(e,t,!0)):n}finally{wo=void 0}}function QA(e){if(wo)wo.push(e);else throw new Error("Unable to serialize asynchronously")}function JA(){return!!wo}function w8(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 C8(e){return N8.includes(e)}function O8(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,a]=s.split("=");r[i.trim()]=a.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function Oo(e="",t=!1){let r=O8(e),n=r.type&&ln.get(r.type)?.deserialize||P8(r);return t?s=>w8(s).then(n):n}function P8(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!C8(e.parameters.charset)&&WA.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 zA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function L8(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 T_(e,t){let r=Yc.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(a=>({label:a,value:a})));let s={objectMode:!0},i=new PU.Transform(n,s);return r.pipe(i)}var xi,Kc,No,NU,Yc,CU,YA,OU,WA,PU,LU,DU,gm,zA,Sm,ln,jA,IU,MU,I8,wU,wo,N8,Po=ie(()=>{KA();xi=require("msgpackr"),Kc=require("cbor-x"),No=require("zlib"),NU=w(_e()),Yc=w(require("stream"));xr();CU=w(ii()),YA=w(ue());H();OU=w(require("yaml")),WA=w(Zn());Ns();PU=require("json2csv"),LU=w(require("fastify-plugin")),DU=YA.default.get(B.SERIALIZATION_BIGINT)!==!1,gm=DU?Vc:JSON.stringify,zA=DU?VA:JSON.parse,Sm={useRecords:!1,useToJSON:!0},ln=new Map,jA=ln;Ue.contentTypes=jA;(0,CU._assignPackageExport)("contentTypes",jA);ln.set("application/json",{serializeStream:_m,serialize:gm,deserialize(e){return zA(e)},q:.8});IU=new Kc.Encoder(Sm);ln.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Kc.EncoderStream(Sm).end(e)},serialize:IU.encode,deserialize:IU.decode,q:1});ln.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Yc.Readable.from((0,xi.encodeIter)(e,Sm)):(0,xi.pack)(e)},serialize:xi.pack,deserialize:xi.unpack,q:.9});ln.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),T_(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]),T_(e,e?.getColumns?.())},q:.1});ln.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return Yc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});ln.set("text/yaml",{serialize(e){return OU.stringify(e,{aliasDuplicateObjects:!1})},q:.7});ln.set("text/event-stream",{serializeStream:o(function(e){return Yc.Readable.from(L8(e,this.serialize))},"serializeStream"),serialize:o(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=gm(r)),t+="data: "+r+`
|
|
6
6
|
`}return e.id&&(t+="id: "+e.id+`
|
|
7
7
|
`),e.retry&&(t+="retry: "+e.retry+`
|
|
@@ -10,33 +10,33 @@
|
|
|
10
10
|
|
|
11
11
|
`:`data: ${e}
|
|
12
12
|
|
|
13
|
-
`},"serialize"),compressible:!1,q:.8});ln.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()}});PU={type:"application/json",serializeStream:_m,serialize:gm,deserialize:T8,q:.5};ln.set("*/*",PU);ln.set("",PU);o(T8,"tryJSONParse");o(Tm,"registerContentHandlers");y8=(0,CU.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:a,type:c}=y_(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&a.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=a.serializeStream}else u=a.serialize;return u(l,{headers:{set:o((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});o(y_,"findBestSerializer");AU=YA.default.get(B.HTTP_COMPRESSIONTHRESHOLD);o(ym,"serialize");o(Co,"serializeMessage");o(QA,"asyncSerialization");o(JA,"hasAsyncSerialization");o(R8,"streamToBuffer");A8=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];o(b8,"isBufferEncoding");o(I8,"parseContentType");o(Oo,"getDeserializer");o(w8,"deserializerUnknownType");o(N8,"transformIterable");o(T_,"toCsvStream")});var nb={};Ie(nb,{Blob:()=>ws,blobsWereEncoded:()=>Wc,databasePaths:()=>ZA,decodeBlobsWithWrites:()=>P_,decodeFromDatabase:()=>zc,decodeWithBlobCallback:()=>wm,deleteBlob:()=>N_,deleteBlobsInObject:()=>Oa,deleteRootBlobPathsForDB:()=>rb,encodeBlobsAsBuffers:()=>B8,encodeBlobsWithFilePath:()=>O_,findBlobsInObject:()=>Ou,getFileId:()=>C_,getFilePathForBlob:()=>HU,getRootBlobPathsForDB:()=>Im,setDeletionDelay:()=>L8});function BU(){}function N_(e){let t=HU(e);t&&setTimeout(()=>{(0,rt.unlink)(t,r=>{r&&Lo.default.debug?.("Error trying to remove blob file",r)})},FU)}function L8(e){FU=e}function kU(e){let t=On.get(e);if(!t)t={storageIndex:0,fileId:null,store:Pn},On.set(e,t);else{if(t.fileId)return t;t.store=Pn}return M8(t),t.source?XA(e,t.source,t):t.contentBuffer?D8(e,t):XA(e,Am.Readable.from(e.stream()),t),t}function XA(e,t,r){let{filePath:n,fileId:s,store:i,compress:a,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,rt.createWriteStream)(n,{autoClose:!1,flags:"w"});if(t.errored){let g=Buffer.from(t.errored.toString());f.write(Buffer.concat([h(BigInt(g.length)+0xff000000000000n),g])),E(t.errored);return}let m=!1;e.size!==void 0&&(f.write(h(e.size)),m=!0);let p;a?(m||f.write(O8),p=(0,I_.createDeflate)(),t.pipe(p).pipe(f)):(m||f.write(C8),t.pipe(f)),t.on("error",E);function h(g){let A=BigInt(g),S=new Uint8Array(wr),R=new DataView(S.buffer);return A|=BigInt(a?tb:xU)<<48n,R.setBigInt64(0,A),S}o(h,"createHeader");function E(g){i.unlock(d,0);let A=f.fd;g?(A&&(0,rt.close)(A),u(g)):c?(0,rt.fdatasync)(A,S=>{S&&u(S),l(),(0,rt.close)(A)}):(l(),(0,rt.close)(A))}o(E,"finished"),f.on("error",E).on("finish",()=>{if(m)E();else{let g=p?p.bytesWritten:f.bytesWritten-wr;e.size=g,(0,rt.write)(f.fd,h(g),0,wr,0,E)}})}),e}function C_(e){return On.get(e)?.fileId}function HU(e){let t=On.get(e);return t?.fileId&&bm(t)}function Im(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=ZA.get(e);if(!t){if(!e.databaseName)return Lo.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,w_.get)(B.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Mo.join)(n,e.databaseName)):t=[(0,Mo.join)((0,w_.getHdbBasePath)(),"blobs",e.databaseName)],ZA.set(e,t)}return t}async function rb(e){let t=Im(e);t&&await Promise.all(t.map(r=>qU(r)))}async function qU(e){if((0,rt.existsSync)(e)){for(let t of await(0,Cs.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await qU((0,Mo.join)(e,t.name));else try{await(0,Cs.unlink)((0,Mo.join)(e,t.name))}catch(r){Lo.default.warn?.("Error deleting file",r)}try{await(0,Cs.rmdir)(e)}catch(t){Lo.default.warn?.("Error deleting directory",t)}}}function bm({storageIndex:e,fileId:t,store:r}){let n=Im(r);return(0,Mo.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 D8(e,t){let r=t.contentBuffer,n=r.length;if(!(n<UU))return e.size=n,XA(e,Am.Readable.from([r]),t)}function M8(e){let t=Im(e.store),r=v8(),n=t?.length>1?U8(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=bm(e),a=(0,Mo.dirname)(i);(0,rt.existsSync)(a)||(0,eb.ensureDirSync)(a),e.filePath=i}function v8(){let e=vU.get(Pn);if(!e){let t=0,r=Im(Pn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let a=0;if((0,rt.existsSync)(n))for(let c of(0,rt.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>a&&(a=l)}s+=a,n=(0,Mo.join)(n,a.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(Pn.getUserSharedBuffer("blob-file-id",e.buffer)),vU.set(Pn,e)}return Number(Atomics.add(e,0,1n))}function U8(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(b_);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,x8(e)),e.frequencyTable[t%b_]}async function x8(e){if(!Cs.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let a;try{a=await(0,Cs.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,eb.ensureDirSync)(s),a=await(0,Cs.statfs)(s)}let c=a.bavail*a.bsize;return Math.pow(c,.8)})),r=new Array(b_),n=t.map(s=>1/s);for(let s=0;s<b_;s++){let i=1/0,a=0;for(let c=0;c<n.length;c++)n[c]<i&&(a=c,i=n[c]);n[a]+=1/t[a],r[s]=a}e.frequencyTable=r}function O_(e,t,r){Cu=t,Pn=r,Wc=!1;try{return e()}finally{Cu=void 0,Pn=void 0}}function B8(e){Yr=[];let t;try{t=e()}catch(n){throw Yr=void 0,n}let r=Yr.length<2?Yr[0]:Promise.all(Yr);return Yr=void 0,r?r.then(()=>e()):t}function P_(e,t){try{Yr=[],Do=t,e()}catch(n){throw Do=void 0,Yr=void 0,n}Do=void 0;let r=Yr.length<2?Yr[0]:Promise.all(Yr);return Yr=void 0,r}function wm(e,t,r){Pn=r;try{return Do=t,e()}finally{Do=void 0}}function zc(e,t){return Pn=t,e()}function Oa(e){Ou(e,t=>{N_(t)})}function Ou(e,t){if(e instanceof ws)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&Ou(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&Ou(e[r],t)}}function k8(){return class{static{o(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""}}}var Bi,Cs,rt,I_,Am,eb,w_,Mo,Lo,UU,wr,xU,tb,DU,C8,O8,MU,On,Do,ws,Cu,Yr,Pn,Wc,Rm,R_,P8,A_,FU,ZA,vU,b_,F8,Ns=ie(()=>{Bi=require("msgpackr"),Cs=require("node:fs/promises"),rt=require("node:fs"),I_=require("node:zlib"),Am=require("node:stream"),eb=require("fs-extra"),w_=w(ue());H();Mo=require("path"),Lo=w(Zn());Po();UU=8192,wr=8,xU=0,tb=1,DU=255,C8=new Uint8Array([0,xU,255,255,255,255,255,255]),O8=new Uint8Array([0,tb,255,255,255,255,255,255]),MU=0xffffffffffff,On=new WeakMap,ws=global.Blob||k8(),Wc=!1,Rm=new Uint8Array(8),R_=new DataView(Rm.buffer),P8=6e4;o(BU,"InstanceOfBlobWithNoConstructor");BU.prototype=ws.prototype;A_=class e extends BU{static{o(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size)}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=On.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):(JA()&&QA(this.bytes().then(a=>t.contentBuffer=a)),`[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=On.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=bm(t),a,c=o(async()=>{let l,u=wr;try{if(l=await(0,Cs.readFile)(i),l.length>=wr){l.copy(Rm,0,0,wr);let f=R_.getBigUint64(0);if(Number(f>>48n)===DU)throw new Error("Error in blob: "+buffer.subarray(wr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<MU&&(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(a)throw new Error(`Incomplete blob for ${i}`);return new Promise((h,E)=>{if(m.attemptLock(p,0,()=>(a=!0,h(c()))))return a=!0,m.unlock(p,0),h(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return o(d,"checkCompletion"),l[1]===tb?new Promise((f,m)=>{(0,I_.deflate)(l.subarray(wr),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(wr))},"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=On.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=bm(t),a,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,g=o((A,S)=>{(0,rt.open)(i,"r",(R,N)=>{if(R){if(R.code==="ENOENT"&&f!==!1&&(Lo.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),g(A,S)},20).unref();S(R),p.#e?.forEach(O=>O(R))}else a=N,A(N)})},"openFile");return new Promise(g)},pull:o(E=>{let g=0,A=100;return new Promise(o(function S(R,N){function O(ee){(0,rt.close)(a),clearTimeout(d),u&&u.close(),N(ee),p.#e?.forEach(q=>q(ee))}o(O,"onError");let F=Buffer.allocUnsafe(262144);(0,rt.read)(a,F,0,F.length,c,(ee,q,k)=>{if(l+=q,ee)return O(ee);if(c===0){if(q<wr){A-- >0&&f!==!1?(h(),Lo.default.debug?.("File was empty, waiting for data to be written",i,A),setTimeout(()=>S(R,N),20).unref()):(Lo.default.debug?.("File was empty, throwing error",i,A),N(new Error(`Blob ${t.fileId} was empty`)));return}k.copy(Rm,0,0,wr);let J=R_.getBigUint64(0);if(Number(J>>48n)===DU)return O(new Error("Error in blob: "+k.subarray(wr)));if(g=Number(J&0xffffffffffffn),g<MU&&p.size!==g&&(p.size=g,p.#t))for(let Y of p.#t)Y(g);k=k.subarray(wr,q),l-=wr}else if(q===0){let J=Buffer.allocUnsafe(8);return(0,rt.read)(a,J,0,wr,0,Y=>{if(Y)return O(Y);if(Rm.set(J),g=Number(R_.getBigUint64(0)&0xffffffffffffn),g>l){h()?u?d=setTimeout(()=>{O(new Error(`File read timed out reading from ${i}`))},P8).unref():(u=(0,rt.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(R,N))}),S(R,N)):m?O(new Error("Blob is incomplete")):(m=!0,S(R,N));return}(0,rt.close)(a),E.close(),R()})}else k=k.subarray(0,q);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=q,S(R,N);s&&l>=s&&(l>s&&(k=k.subarray(0,s-c)),l=g=s),n&&n>c&&(k=k.subarray(n-c))}c+=q;try{E.enqueue(k)}catch(J){return Lo.default.debug?.("Error enqueuing chunk",J),R()}l===g&&((0,rt.close)(a),E.close()),R()})},"readMore"))},"pull"),cancel(){(0,rt.close)(a),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,g=t.fileId+":blob";f=!E.attemptLock(g,0,()=>{f=!1}),f||E.unlock(g,0)}return f}}slice(t,r,n){let s=On.get(this),i=new e(n&&{type:n});if(s?.fileId){let a={...s,start:t,end:r};On.set(i,a),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let a={...s,contentBuffer:s.contentBuffer.subarray(t,r)};On.set(i,a),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(t){if(Pn=t?.primaryStore?.rootStore,!Pn)throw new Error("No target table specified");return kU(this).saving??Promise.resolve()}},FU=500;o(N_,"deleteBlob");o(L8,"setDeletionDelay");global.createBlob=function(e,t){let r=new A_(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(On.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Am.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Am.Readable.from(e);else throw new Error("Invalid source type");return r};o(kU,"saveBlob");o(XA,"writeBlobWithStream");o(C_,"getFileId");o(HU,"getFilePathForBlob");ZA=new Map;o(Im,"getRootBlobPathsForDB");o(rb,"deleteRootBlobPathsForDB");o(qU,"rimrafSteadily");o(bm,"getFilePath");o(D8,"writeBlobWithBuffer");o(M8,"generateFilePath");vU=new Map;o(v8,"getNextFileId");b_=128;o(U8,"getNextStorageIndex");o(x8,"createFrequencyTableForStoragePaths");o(O_,"encodeBlobsWithFilePath");o(B8,"encodeBlobsAsBuffers");o(P_,"decodeBlobsWithWrites");o(wm,"decodeWithBlobCallback");o(zc,"decodeFromDatabase");o(Oa,"deleteBlobsInObject");o(Ou,"findBlobsInObject");F8=new Bi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Bi.addExtension)({Class:ws,type:11,unpack:o(function(e){let t=F8.unpack(e),r=new A_;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(On.set(r,{storageIndex:t[1],fileId:t[2],store:Pn}),Do)return Do(r)??r;if(!Pn)throw new Error("No store specified, cannot load blob from storage")}else On.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:o(function(e){let t=On.get(e);if(Cu!==void 0&&(Wc=!0,t?.recordId!==void 0&&t.recordId!==Cu))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<UU)return r.size=t.contentBuffer.length,(0,Bi.pack)([r,t.contentBuffer])}if(Cu!==void 0){if(t=kU(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Cu,(0,Bi.pack)([r,t.storageIndex,t.fileId])}if(t){if(Do)return Do(e),(0,Bi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,rt.readFileSync)(bm(t));if(n.length>=wr&&(n.copy(Rm,0,0,wr),Number(R_.getBigUint64(0)&0xffffffffffffn)===n.length-wr))return Buffer.concat([(0,Bi.pack)([r]),n]);if(Yr)Yr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Yr)return Yr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Bi.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});o(k8,"polyfillBlob")});var YU={};Ie(YU,{onStorageReclamation:()=>Nm,runReclamationHandlers:()=>ab,setAvailableSpaceRatioGetter:()=>q8});function Nm(e,t,r){(r||(0,D_.getWorkerIndex)()===(0,D_.getWorkerCount)()-1)&&(L_.has(e)||L_.set(e,[]),L_.get(e).push({priority:0,handler:t}),ob||(ob=setTimeout(ab,$U).unref()))}async function ab(){for(let[e,t]of L_)try{let r=await KU(e),n=H8/r;for(let s of t){let{priority:i,handler:a}=s;if(s.priority=n,n>1||i>1){let c=a(n>1?n:0);c&&(ib.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){ib.default.error?.("Error running storage reclamation handlers",r)}ob=setTimeout(ab,$U).unref()}function q8(e){KU=e??VU}var sb,D_,ib,M_,GU,L_,H8,$U,ob,VU,KU,v_=ie(()=>{sb=require("node:fs/promises"),D_=w(nt()),ib=w(Zn());H();M_=w(ue()),GU=w(oe());M_.default.initSync();L_=new Map,H8=M_.default.get(B.STORAGE_RECLAMATION_THRESHOLD)??.4,$U=(0,GU.convertToMS)(M_.default.get(B.STORAGE_RECLAMATION_INTERVAL))||36e5;o(Nm,"onStorageReclamation");VU=o(async e=>{if(sb.statfs){let t=await(0,sb.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"),KU=VU;o(ab,"runReclamationHandlers");o(q8,"setAvailableSpaceRatioGetter")});var ix={};Ie(ix,{ACTION_32_BIT:()=>k_,ACTION_64_BIT:()=>K8,AUDIT_STORE_OPTIONS:()=>Pm,Decoder:()=>Qc,HAS_BLOBS:()=>Ln,HAS_CURRENT_RESIDENCY_ID:()=>Jc,HAS_EXPIRATION_EXTENDED_TYPE:()=>Mm,HAS_ORIGINATING_OPERATION:()=>Dm,HAS_PREVIOUS_RESIDENCY_ID:()=>Xc,REMOTE_SEQUENCE_UPDATE:()=>H_,createAuditEntry:()=>Zc,getLastRemoved:()=>$8,openAuditStore:()=>B_,readAuditEntry:()=>xt,removeAuditEntry:()=>F_,setAuditRetention:()=>V8,transactionKeyEncoder:()=>tx});function B_(e){let t=e.auditStore=e.openDB(cb.AUDIT_STORE_NAME,{create:!1,...Pm});t||(t=e.auditStore=e.openDB(cb.AUDIT_STORE_NAME,Pm),zU(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,a=ub;Nm(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(a=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()-lb/(1+i*i)})){try{m=F_(t,h,E)}catch(g){Pu.warn("Error removing audit entry",g)}if(p=h,await new Promise(setImmediate),++f>=G8){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,lb/10):(zU(t,p),a>100&&(a=a>>1)),d(void 0),c()}},a).unref()});return u}if(o(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,Om.getWorkerIndex)()===(0,Om.getWorkerCount)()-1&&c(),(0,Om.getWorkerIndex)()===0&&!WU)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(WU=!0,Pu.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 F_(e,t,r){let n=Y8(r),s;if(n&Ln){s=xt(r);let i=e.tableStores[s.tableId],a=i?.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&zc(()=>Oa(s.getValue(i)),i.rootStore)}if((n&15)===db){s=s||xt(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 zU(e,t){fb[0]=t,e.put(Symbol.for("last-removed"),rx)}function $8(e){let t=e.get(Symbol.for("last-removed"));if(t)return rx.set(t),fb[0]}function V8(e,t=ub){lb=e,ub=t}function Zc(e,t,r,n,s,i,a,c,l,u,d,f,m){let p=nx[a];if(!p)throw new Error(`Invalid audit entry type ${a}`);let h=1;if(n&&(n>1?Pa.setFloat64(0,n):Os.set(mb),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}A(s),A(t),g(r),Pa.setFloat64(h,e),h+=8,l&Jc&&A(u),l&Xc&&A(d),l&Mm&&(Pa.setFloat64(h,f),h+=8),l&Dm&&A(sx[m]),i?g(i):Os[h++]=0,l?Pa.setUint32(n?8:0,p|l|3221225472):Os[n?8:0]=p;let E=Os.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function g(S){let R=h;h+=1,h=(0,jc.writeKey)(S,Os,h);let N=h-R-1;N>127?N>16383?(Pu.error("Key or username was too large for audit entry",S),h=R+1,Os[R]=0):(Os.copyWithin(R+2,R+1,h),Pa.setUint16(R,N|32768),h++):Os[R]=N}function A(S){S<128?Os[h++]=S:S<16384?(Pa.setUint16(h,S|32768),h+=2):S<1056964608?(Pa.setUint32(h,S|3221225472),h+=4):(Os[h]=255,Pa.setUint32(h+1,S),h+=5)}}function Y8(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 Qc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function xt(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Qc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),a=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,p,h,E;if(i&Jc&&(m=n.readInt()),i&Xc&&(p=n.readInt()),i&Mm&&(h=n.readFloat64()),i&Dm){let R=n.readInt();E=sx[R]}l=n.readInt();let g=n.position,A=n.position+=l,S;return{type:nx[i&7],tableId:c,nodeId:a,get recordId(){return(0,jc.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return A>g?(0,jc.readKey)(e,g,A):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(R,N,O){if(i&U_||i&Cm&&!N)return S||(S=zc(()=>R.decoder.decode(e.subarray(n.position,r)),R.rootStore)),S;if(i&Cm&&O)return HA(R.getEntry(this.recordId),O,R)},getBinaryValue(){return i&(U_|Cm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return Pu.error("Reading audit entry error",n,e),{}}}var jc,x_,cb,Om,ex,Pu,Os,Pa,tx,Pm,lb,G8,fb,rx,ub,WU,U_,Cm,jU,db,QU,JU,XU,ZU,k_,K8,H_,Jc,Xc,Dm,Mm,Ln,nx,sx,Qc,Io=ie(()=>{jc=require("ordered-binary"),x_=w(ue()),cb=w($t());H();Om=w(nt()),ex=w(oe());el();Pu=w(Q());__();Ns();v_();(0,x_.initSync)();Os=Buffer.alloc(2816),Pa=new DataView(Os.buffer,Os.byteOffset,2816),tx={writeKey(e,t,r){return e===Lm?(t.set(Lm,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,jc.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,jc.readKey)(e,t,r)}},Pm={encoding:"binary",keyEncoder:tx},lb=(0,ex.convertToMS)((0,x_.get)(B.LOGGING_AUDITRETENTION))||86400*3,G8=1e3,fb=new Float64Array(1),rx=new Uint8Array(fb.buffer),ub=1e4,WU=!1;o(B_,"openAuditStore");o(F_,"removeAuditEntry");o(zU,"updateLastRemoved");o($8,"getLastRemoved");o(V8,"setAuditRetention");U_=16,Cm=32,jU=1,db=2,QU=3,JU=4,XU=5,ZU=6,k_=14,K8=15,H_=11,Jc=512,Xc=1024,Dm=2048,Mm=4096,Ln=8192,nx={put:jU|U_,[jU]:"put",delete:db,[db]:"delete",message:QU|U_,[QU]:"message",invalidate:JU|Cm,[JU]:"invalidate",patch:XU|Cm,[XU]:"patch",relocate:ZU,[ZU]:"relocate"},sx={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(Zc,"createAuditEntry");o(Y8,"readAction");o(xt,"readAuditEntry");Qc=class extends DataView{static{o(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 q_(){return pb||(pb=Xe({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),pb}function z8(e){return e=e.replace(W8,t=>{let[r,n,s,i]=t.split(".").map(a=>parseInt(a));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 j8(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 Eb(e){let t=ox.default.createHash("shake128",{outputLength:4}),r;return(0,ax.isIPv6)(e)?r=z8(e):r=e.toLowerCase(),j8(Uint8Array.from(t.update(r).digest()))}var ox,ax,hb,pb,W8,_b=ie(()=>{Oe();ox=w(require("crypto")),ax=require("node:net"),hb=new Map;o(q_,"getAnalyticsHostnameTable");W8=/(\d{1,3}\.){3}\d{1,3}$/;o(z8,"normalizeIPv6");o(j8,"nodeHashToNumber");o(Eb,"stableNodeId")});var vo,gb=ie(()=>{vo={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 V_={};Ie(V_,{addAnalyticsListener:()=>Bm,analyticsDelay:()=>Rb,calculateCPUUtilization:()=>Ix,diffResourceUsage:()=>wx,onAnalyticsAggregate:()=>Ib,recordAction:()=>Je,recordActionBinary:()=>zr,recordHostname:()=>Ab,setAnalyticsEnabled:()=>X8});function X8(e){Tx=e,clearTimeout(Um),Um=null}function Z8(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 eZ(e,t,r,n,s,i){let a={};if(typeof t=="number")a.total=t,a.values=new Float32Array(4),a.values.index=1,a.values[0]=t,a.total=t;else if(typeof t=="boolean")a.total=t?1:0,a.count=1;else if(typeof t=="function")a.count=1,a.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);a.description={metric:r,path:n,method:s,type:i},$_.set(e,a)}function Je(e,t,r,n,s){if(!Tx)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let a=$_.get(i);a?Z8(e,a):eZ(i,e,t,r,n,s),Um||tZ()}function zr(e,t,r,n,s){Je(!!e,t,r,n,s)}function Bm(e){Rx.push(e)}function tZ(){Sb||=performance.now(),Um=setTimeout(async()=>{Um=null;let e=performance.now()-Sb;Sb=0;let t=[],r={time:Date.now(),period:e,threadId:tl.threadId,metrics:t};for(let[s,i]of $_){if(i.values){let a=i.values.subarray(0,i.values.index);a.sort();let c=a.length,l=0,u=[],d;for(let f of bx){let m=Math.floor(c*f),p=a[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 Nx()}let n=process.memoryUsage();t.push({metric:"memory",threadId:tl.threadId,byThread:!0,...n});for(let s of Rx)s(t);$_=new Map,tl.parentPort?tl.parentPort.postMessage({type:yx,report:r}):Px({report:r})},Rb).unref()}async function Ab(){let e=Ue.hostname;Wr.trace?.("recordHostname server.hostname:",e);let t=Eb(e);Wr.trace?.("recordHostname nodeId:",t);let r=q_();if(!await r.get(t)){let s={id:t,hostname:e};Wr.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function Lu(e,t){let r=Ue.hostname,n=hb.get(r);n?Wr.trace?.("storeMetric cached nodeId:",n):(n=Eb(r),Wr.trace?.("storeMetric new nodeId:",n),hb.set(r,n));let s={id:[(0,yb.getNextMonotonicTime)(),n],...t};Wr.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function Ix(e,t){let r=e.userCPUTime+e.systemCPUTime;return Wr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function wx(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 rZ(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let a=`${t}.${s}`,c=i.getSize(),l={metric:vo.TABLE_SIZE,database:t,table:s,size:c};Wr.trace?.(`table ${a} size metric: ${JSON.stringify(l)}`),Lu(e,l),n+=c}return n}function cx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let a=Sx.statSync(s.primaryStore.env.path).size,c=rZ(e,r,n),l=a-c,u={metric:vo.DATABASE_SIZE,database:r,size:a,used:c,free:l,audit:i};Lu(e,u),Wr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Wr.warn?.("Error getting DB size metrics",s)}}function lx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let a={metric:vo.STORAGE_VOLUME,database:r,...i};Lu(e,a),Wr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(a)}`)}catch(s){Wr.warn?.("Error getting DB volume metrics",s)}}async function nZ(e,t=6e4){let r=bb(),n=Cx(),s=new Promise(R=>{let N=performance.now();setImmediate(()=>{let O=performance.now();O-N>5e3&&Wr.warn?.("Unusually high event queue latency on the main thread of "+Math.round(O-N)+"ms"),N=performance.now()}),n.primaryStore.prefetch([1],()=>{let O=performance.now();O-N>5e3&&Wr.warn?.("Unusually high task queue latency on the main thread of "+Math.round(O-N)+"ms"),R(O-N)})}),i;for(let R of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(R.value?.time){i=R.value.time;break}if(Date.now()-t<i)return;let a,c=new Map,l=new Map,u=[],d;for(let{key:R,value:N}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!N)continue;if(a){if(R>a+t)break}else a=R;d=R;let{metrics:O,threadId:F}=N;for(let ee of O||[]){let{path:q,method:k,type:J,metric:Y,count:le,total:ae,distribution:re,threads:Re,...Te}=ee;le||(le=1);let Fe=Y+(q?"-"+q:"");k!==void 0&&(Fe+="-"+k),J!==void 0&&(Fe+="-"+J);let qe=c.get(Fe);if(qe){if(qe.threads){let Zt=qe.threads[F];if(Zt)qe=Zt;else{qe.threads[F]={...Te};continue}}qe.count||(qe.count=1);let Rr=qe.count;for(let Zt in Te){let Ht=Te[Zt];typeof Ht=="number"&&(qe[Zt]=(qe[Zt]*Rr+Ht*le)/(Rr+le))}qe.count+=le,ae>=0&&(qe.total+=ae,qe.ratio=qe.total/qe.count)}else qe={period:t,...ee},delete qe.distribution,c.set(Fe,qe),qe.byThread&&(qe.threads=[],qe.threads[F]={...Te},u.push(qe));if(re){re=re.map(Zt=>typeof Zt=="number"?{value:Zt,count:1}:Zt);let Rr=l.get(Fe);Rr?Rr.push(...re):l.set(Fe,re)}}await Nx()}for(let R of u){let{path:N,method:O,type:F,metric:ee,count:q,total:k,distribution:J,threads:Y,...le}=R;Y=Y.filter(ae=>ae);for(let ae in le){if(typeof R[ae]!="number")continue;let re=0;for(let Re of Y){let Te=Re[ae];typeof Te=="number"&&(re+=Te)}R[ae]=re}R.count=Y.length,delete R.threads,delete R.byThread}for(let[R,N]of l){let O=c.get(R);N.sort((Zt,Ht)=>Zt.value>Ht.value?1:-1);let F=O.count-1,ee=[],q=0,k=0,J;for(let Zt of bx){let Ht=F*Zt;for(;q<Ht;)J=N[k++],q+=J.count,k===1&&q--;let er=N[k>1?k-2:0];J||(J=N[0]),ee.push(J.value-(J.value-er.value)*(q-Ht)/J.count)}let[Y,le,ae,re,Re,Te,Fe,qe,Rr]=ee;Object.assign(O,{p1:Y,p10:le,p25:ae,median:re,p75:Re,p90:Te,p95:Fe,p99:qe,p999:Rr})}let f;for(let[,R]of c)R.time=d,Lu(n,R),f=!0;if(f)for(let R of Ax)R(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let R={metric:vo.MAIN_THREAD_UTILIZATION,idle:p-ux,active:h-dx,taskQueueLatency:await s,time:m,...process.memoryUsage()};Lu(n,R)}ux=p,dx=h;let E=process.resourceUsage();E.time=m,E.userCPUTime=E.userCPUTime/1e3,E.systemCPUTime=E.systemCPUTime/1e3,Wr.trace?.(`process.resourceUsage: ${JSON.stringify(E)}`);let g=wx(G_,E);Wr.trace?.(`diffed resourceUsage: ${JSON.stringify(g)}`),g.time=m,g.period=G_.time?m-G_.time:t,g.cpuUtilization=Ix(g,g.period);let A={metric:vo.RESOURCE_USAGE,...g};Lu(n,A),G_=E;let S=at();cx(n,S),cx(n,{system:S.system}),lx(n,S),lx(n,{system:S.system})}async function fx(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function bb(){return mx||(mx=Xe({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Cx(){return px||(px=Xe({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function oZ(){Ox=!0;let e=(0,xm.get)(B.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await nZ(Rb,e),await fx(bb(),sZ),await fx(Cx(),iZ)},Math.min(e/2,2147483647)).unref()}function Px(e,t){let r=e.report;r.threadId=t?.threadId||tl.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(hx+=n.mean*n.count);r.totalBytesProcessed=hx,t&&(r.metrics.push({metric:vo.UTILIZATION,...t.performance.eventLoopUtilization(Ex.get(t))}),Ex.set(t,t.performance.eventLoopUtilization())),r.id=(0,yb.getNextMonotonicTime)(),bb().primaryStore.put(r.id,r),Ox||oZ(),aZ&&(Lx=lZ(r))}async function lZ(e){if(await Lx,!La){let r=(0,vm.dirname)(Q8());try{La=await(0,Tb.open)((0,vm.join)(r,"analytics.log"),"r+")}catch{La=await(0,Tb.open)((0,vm.join)(r,"analytics.log"),"w+")}}let t=(await La.stat()).size;if(t>cZ){let r=Buffer.alloc(t);await La.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await La.write(r,{position:0}),await La.truncate(r.length),t=r.length}await La.write(JSON.stringify(e)+`
|
|
14
|
-
`,t)}function Ib(e){e&&Ax.push(e)}var tl,_x,gx,vm,Tb,yb,xm,Sx,Q8,J8,Wr,$_,Tx,Um,Sb,Rb,yx,Rx,Ax,bx,ux,dx,G_,Nx,sZ,iZ,mx,px,Ox,hx,Ex,aZ,Lx,La,cZ,Ps=ie(()=>{tl=require("worker_threads"),_x=w(nt());Oe();gx=w(Q()),vm=require("path"),Tb=require("fs/promises"),yb=w(Cn()),xm=w(ue());H();xr();Sx=w(require("node:fs"));_b();gb();({getLogFilePath:Q8,forComponent:J8}=gx.default),Wr=J8("analytics").conditional;(0,xm.initSync)();$_=new Map,Tx=(0,xm.get)(B.ANALYTICS_AGGREGATEPERIOD)>-1;o(X8,"setAnalyticsEnabled");o(Z8,"recordExistingAction");o(eZ,"recordNewAction");o(Je,"recordAction");Ue.recordAnalytics=Je;o(zr,"recordActionBinary");Sb=0,Rb=1e3,yx="analytics-report",Rx=[],Ax=[];o(Bm,"addAnalyticsListener");bx=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];o(tZ,"sendAnalytics");o(Ab,"recordHostname");o(Lu,"storeMetric");o(Ix,"calculateCPUUtilization");o(wx,"diffResourceUsage");o(rZ,"storeTableSizeMetrics");o(cx,"storeDBSizeMetrics");o(lx,"storeVolumeMetrics");o(nZ,"aggregation");ux=0,dx=0,G_={userCPUTime:0,systemCPUTime:0},Nx=o(()=>new Promise(setImmediate),"rest");o(fx,"cleanup");sZ=36e5,iZ=31536e6;o(bb,"getRawAnalyticsTable");o(Cx,"getAnalyticsTable");(0,_x.setChildListenerByType)(yx,Px);o(oZ,"startScheduledTasks");hx=0,Ex=new Map,aZ=!1;o(Px,"recordAnalytics");cZ=1e6;o(lZ,"logAnalytics");o(Ib,"onAnalyticsAggregate")});var xx={};Ie(xx,{ENTRY:()=>dZ,HAS_EXPIRATION:()=>W_,HAS_RESIDENCY_ID:()=>Lb,HAS_STRUCTURE_UPDATE:()=>z_,LAST_TIMESTAMP_PLACEHOLDER:()=>Lm,LOCAL_TIMESTAMP:()=>uZ,METADATA:()=>vu,NEW_TIMESTAMP_PLACEHOLDER:()=>Mx,NO_TIMESTAMP:()=>wb,PENDING_LOCAL_TIME:()=>Db,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>mb,RecordEncoder:()=>Pb,TIMESTAMP_ASSIGN_LAST:()=>mZ,TIMESTAMP_ASSIGN_NEW:()=>vx,TIMESTAMP_ASSIGN_PREVIOUS:()=>Ux,TIMESTAMP_PLACEHOLDER:()=>K_,TIMESTAMP_RECORD_PREVIOUS:()=>Nb,entryMap:()=>Da,handleLocalTimeForGets:()=>j_,lastMetadata:()=>ct,recordUpdater:()=>Mb,removeEntry:()=>nl});function EZ(){return km[0]=km[0]^64,fZ.getFloat64(0)}function j_(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(a,c){e.readCount++,ct=null;let l=r.call(this,a,c);return l&&(ct&&(l.metadataFlags=ct[vu],l.localTime=ct.localTime,l.residencyId=ct.residencyId,l.size=ct.size,ct.expiresAt>=0&&(l.expiresAt=ct.expiresAt),ct=null),l.value&&Da.set(l.value,l),l.key=a),l};let n=e.get;e.get=function(a,c){ct=null;let l=n.call(this,a,c);return ct&&l&&(Da.set(l,ct),ct=null),l};let s=e.getRange;e.getRange=function(a){let c=s.call(this,a);return a.valuesForKey?c.map(l=>l?.value):a.values===!1||a.onlyCount?c:c.map(l=>(ct&&(l.metadataFlags=ct[vu],l.localTime=ct.localTime,l.residencyId=ct.residencyId,ct.expiresAt>=0&&(l.expiresAt=ct.expiresAt),ct=null),l))};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let a=i.constructor,c=i.use,l=i.done;a.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,rl.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<rl.length;u++){let d=rl[u].deref();(!d||d.isDone||d.isCommitted)&&rl.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function Mb(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){f||l==null?Mu=i?.localTime?Nb|Ux:wb:Mu=l?i?.localTime?Nb|16384:vx|16384:wb;let p=u?.expiresAt;if(p>=0&&(c|=W_),Fm=c,Cb=p,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:a,instructedWrite:Mu>0},E,g=0;try{let A=i?.residencyId,S=u?.residencyId;S&&(Ob=S,Fm|=Lb,g|=Jc),A!==S&&(g|=Xc,A||(A=0)),c&W_&&(g|=Mm),u?.originatingOperation&&(g|=Dm),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&i.metadataFlags&Ln&&(r.getBinaryFast(i.localTime)||Oa(i.value));let R;if(s!==void 0&&(R=O_(()=>e.put(n,s,h),n,e.rootStore),Wc&&(g|=Ln)),l){let N=u?.user?.username;if(m&&(O_(()=>e.encoder.encode(m),n,e.rootStore),Wc&&(g|=Ln)),e.encoder.hasStructureUpdate&&(g|=z_,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let O=i?.localTime,F=r.get(O);if(F){let ee=xt(F).previousLocalTime;return R=r.put(O,Zc(a,t,n,ee,u?.nodeId??server.replication.getThisNodeId(r)??0,N,d,Du,g,S,A,p),{ifVersion:E}),R}}R=r.put(s===void 0?Mx:Lm,Zc(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,d,Du,g,S,A,p,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&pZ.has(d)&&Je(Du?.length??1,"db-write",u.tableToTrack,null),R}catch(A){throw A.message+=" id: "+n+" options: "+h,A}}}function nl(e,t,r){if(t)return t.value&&t.metadataFlags&Ln&&!e.auditStore.getBinaryFast(t.localTime)&&Oa(t.value),e.remove(t.key,r)}var Dx,Y_,K_,Lm,mb,Mx,uZ,vu,dZ,km,fZ,wb,vx,mZ,Ux,Nb,W_,Lb,Db,z_,pZ,Da,hZ,Du,Mu,Fm,Cb,Ob,ct,Pb,rl,el=ie(()=>{Dx=require("msgpackr");Io();Y_=w(Q());Ns();Ns();Ps();K_=new Uint8Array([1,1,1,1,4,64,0,0]),Lm=new Uint8Array([1,1,1,1,1,0,0,0]),mb=new Uint8Array([1,1,1,1,3,64,0,0]),Mx=new Uint8Array([1,1,1,1,0,64,0,0]),uZ=Symbol("local-timestamp"),vu=Symbol("metadata"),dZ=Symbol("entry"),km=new Uint8Array(8),fZ=new DataView(km.buffer,0,8),wb=0,vx=0,mZ=1,Ux=3,Nb=4,W_=16,Lb=32,Db=1,z_=256,pZ=new Set(["put","patch","delete","message","publish"]),Da=new WeakMap,Mu=0,Fm=-1,Cb=-1,Ob=0,ct=null,Pb=class extends Dx.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return Da.get(this)?.version}getExpiresAt(){return Da.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(Mu||Fm>=0){let c=0,l=Mu;l&&(c+=8,Mu=0);let u=Fm,d=Cb,f=Ob;u>=0&&(c+=4,Fm=-1,d>=0&&(c+=8,Cb=-1),f&&(c+=4,Ob=0));let m=hZ=n.call(this,i,a|2048|c);Du=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(K_[4]=l,K_[5]=l>>8,m.set(K_,p),p+=8),Wc&&(u|=Ln),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|k_<<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 Du=n.call(this,i,a),Du};let s=this.saveStructures;this.saveStructures=function(i,a){let c=s.call(this,i,a);return this.hasStructureUpdate=!0,c}}decode(t,r){ct=null;let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],a=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(km,0,c),c+=8;else for(let m=0;m<8;m++)km[m]=t[c++];l=EZ(),i=t[c]}let u,d;i<32&&(i===k_?(a=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(a=i|t[c+1]<<5,c+=2),a&W_&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),a&Lb&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=zc(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return ct={localTime:l,[vu]:a,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:zc(()=>super.decode(t,r),this.rootStore)}catch(c){return Y_.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o(EZ,"getTimestamp");o(j_,"handleLocalTimeForGets");rl=[];setInterval(()=>{for(let e=0;e<rl.length;e++){let t=rl[e].deref();!t||t.isDone||t.isCommitted?rl.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Y_.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Y_.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();o(Mb,"recordUpdater");o(nl,"removeEntry")});function xb(e,t,r,n,s,i,a,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?a(f,m):f}function u(f){return f.conditions?xb(f.conditions,f.operator,r,n,s,i,a,c):Fu(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}o(u,"executeCondition");function d(f,m,p){return f.map((h,E)=>{if(h.conditions){let S=h.operator==="or",R=d(h.conditions,!S,p);return S?(N,O)=>R.some(F=>F(N,O)):(N,O)=>R.every(F=>F(N,O))}let g=(h.attribute||h[0])===r.primaryKey,A=qm(h,r,i,c,g,p);return m&&E<f.length-1&&p&&(p=IZ(r.primaryStore,h.estimated_count,p)),A}).filter(Boolean)}o(d,"mapConditionsToFilters")}function Fu(e,t,r,n,s,i,a){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new jr.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let R=c[0],N=ki(n.attributes,R);if(N.relationship){if(c.length<2)throw new jr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let O=N.definition?.tableClass||N.elements?.definition?.tableClass,F=new Map,ee=Fu({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,O,s,F);if(N.relationship.to){i[c[0]]=F;let q=!!ki(O.attributes,N.relationship.to)?.elements;ee=yZ(ee,N,O.primaryStore,q,F)}if(N.relationship.from){let q=o(k=>(k?.key!==void 0&&(k=k.key),Fu({attribute:N.relationship.from,value:k},t,r,n,s,F)),"searchEntry");N.elements?(i[c[0]]=F,ee=RZ(ee,N,O.primaryStore,F,q)):ee=ee.flatMap(q)}return ee}else if(c.length===1)c=c[0];else throw new jr.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,p,h,E;l instanceof Date&&(l=l.getTime());let g;switch(Bb[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]=Fi.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),p=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),p=l[1],p instanceof Date&&(p=p.getTime()),h=u==="gele"||u==="gtle"||u==="between",E=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,p=l,h=!0;break;case"ne":if(l===null){m=l,E=!0;break}case"sort":case"contains":case"ends_with":m=!0,g=!0;break;default:throw new jr.ClientError(`Unknown query comparator "${u}"`)}let A;if(typeof m=="string"&&m.length>Ls.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,Ls.MAX_SEARCH_KEY_LENGTH)+Ls.OVERFLOW_MARKER,E=!1,A=qm(e,n,null,i,d)),typeof p=="string"&&p.length>Ls.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,Ls.MAX_SEARCH_KEY_LENGTH)+Ls.OVERFLOW_MARKER,h=!0,A=A??qm(e,n,null,i,d)),r){let R=m;m=p,p=R,R=!E,E=!h,h=R}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new jr.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new jr.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 jr.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new jr.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(A=A??qm(e,n,null,i,d),!A)throw new jr.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 R=f.getRange(S).map(A?function({key:N,value:O}){return this?.isSync?O&&A(O)?N:Ma.SKIP:new Promise((F,ee)=>setImmediate(()=>{try{F(O&&A(O)?N:Ma.SKIP)}catch(q){ee(q)}}))}:N=>N.value==null&&!(N.metadataFlags&(Dn|va))?Ma.SKIP:(a?._freezeRecords&&Object.freeze(N.value),N));return R.hasEntries=!0,R}else return f?f.customIndex?f.customIndex.search(e,a).map(R=>{if(typeof R=="object"&&R){let{key:N,...O}=R,F=n.primaryStore.getEntry(N);return a?._freezeRecords&&Object.freeze(F?.value),{...O,...F}}return R}):f.getRange(S).map(A?function({key:R,value:N}){let O;return typeof R=="string"&&R.length>Ls.MAX_SEARCH_KEY_LENGTH?O=n.primaryStore.get(N):O={[c]:R},this.isSync?A(O)?N:Ma.SKIP:new Promise((F,ee)=>setImmediate(()=>{try{F(A(O)?N:Ma.SKIP)}catch(q){ee(q)}}))}:({value:R})=>R):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:R,value:N}){return this.isSync?N&&A(N)?R:Ma.SKIP:new Promise((O,F)=>setImmediate(()=>{try{O(N&&A(N)?R:Ma.SKIP)}catch(ee){F(ee)}}))})}function ki(e,t){if(Array.isArray(t))if(t.length>1){let r=ki(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?ki(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 yZ(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=o((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 a=i.next();return a.done?a:{value:a.value}},return(){if(i?.return)return i.return()}}}})}function RZ(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,a,c=new Set;return{next(){let l;if(a)for(;l=a.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:(a=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return a?.return?.()},throw(){return a?.throw?.()}}}})}function qm(e,t,r,n,s,i){let a=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=ki(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=qm({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:a},m,r,p?.[d]?.joined,c[1]===m.primaryKey,i);if(!h)return;if(p){p.filters||(p.filters=[]),p.filters.push(h);return}let E=t.propertyResolvers?.[d];E.to&&(h.to=E.to);let g,A=o((R,N)=>{let O,F;return E?E.returnDirect?(O=E(R,r,N),F=ct):(F=E(R,r,N,!0),Array.isArray(F)?(O=F.map(ee=>ee.value),F=null):O=F?.value):O=R[d],{subObject:O,subEntry:F}},"getSubObject"),S=o((R,N)=>{if(E&&h.idFilter){if(!g)if(h.idFilter.idSet?.size===1){for(let k of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:k};g=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else g=u(E.from??t.primaryKey,h.idFilter,!1,!0);let q=g(R);return g.idFilter&&(S.idFilter=g.idFilter),q}let{subObject:O,subEntry:F}=A(R,N);return O?Array.isArray(O)?(!n?.[d]&&n&&(n[d]={fromRecord(q){let k=A(q).subObject;return Array.isArray(k)?k.filter(h).map(J=>J[m.primaryKey]):k}}),O.some(h)):h(O,F):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),Bb[a]||a){case Ls.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,Fi.compareKeys)(d,l[0])>=0&&(0,Fi.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,Fi.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,Fi.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,Fi.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,Fi.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,Fi.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new jr.ClientError(`Unknown query comparator "${a}"`)}function u(d,f,m,p){let h;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&J_(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,g=3;function A(S){let R=S[d],N;if(typeof R!="object"||!R||p?N=f(R):Array.isArray(R)?N=R.some(f):R instanceof Date&&(N=f(R.getTime())),m&&(g++,!N&&!A.idFilter&&++E/g*i>h)){let O=Fu(e,r.transaction.getReadTxn(),!1,t),F;A.to?F=O.flatMap(q=>t.primaryStore.get(q)[A.to]):F=O.map(ku);let ee=new Set(F);A.idFilter=q=>ee.has(ku(q)),A.idFilter.idSet=ee}return N}return o(A,"recordFilter"),s&&(A.idFilter=f),A}o(u,"attributeComparator")}function J_(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/Uo(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=Bb[n]||n,n===Ls.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=ki(e.attributes,s[0]),a=i.definition?.tableClass||i.elements.definition?.tableClass,c=J_(a)({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*Uo(e.indices[i.relationship.from])/(Uo(a.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=Uo(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=SZ*Uo(e.primaryStore)+1;else if(n==="between")r.estimated_count=gZ*Uo(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=Uo(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=_Z*Uo(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function X_(e,t){if(e)if(xo=e,Uu.lastIndex=0,AZ.test(e))try{if(t&&(t.conditions=[]),ai=t??new Bu,Hm(ai,""),Br!==xo.length&&Vt("Unable to parse query, unexpected end of query"),ai.parseErrorMessage&&(ai.parseError=new vb(t.parseErrorMessage),!t))throw ai.parseError;return ai}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${Br} in '${xo}'`,ai.parseErrorMessage&&(r.message+=", "+ai.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Vt(e){let t=`${e} at position ${Br}`;ai.parseErrorMessage=ai.parseErrorMessage?ai.parseErrorMessage+", "+t:t}function Hm(e,t){let r=Uu,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(xo);){Br=r.lastIndex;let[,d,f]=n;a?(d&&Vt(`expected operator, but encountered '${d}'`),a=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Vt(`invalid FIQL operator ${d}`),l=Bx):(l=decodeURIComponent,i="equals",d||Vt("attribute must be specified before equality comparator"),s=xu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=TZ[f],l=Ub[i]?Bx:decodeURIComponent,d||Vt(`attribute must be specified before comparator ${f}`),s=xu(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Vt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Vt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Vt("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&Fx(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else Q_(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?Vt("conditions/comparisons are not allowed in a property list"):e.push(xu(d)),s=void 0;break;case"(":Uu.lastIndex=Br;let p=Hm(d?[]:new Bu,")");switch(d){case"":Q_(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:Vt("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":Vt("group by is not implemented yet");case"sort":e.sort=kx(p);break;default:Vt(`unknown query function call ${d}`)}xo[Br]===","?r.lastIndex=++Br:a=!0,s=null;break;case"{":e.conditions&&Vt("property sets are not allowed in a queries"),d||Vt("property sets must have a defined parent property name"),Uu.lastIndex=Br,m=Hm([],"}"),m.name=d,e.push(m),xo[Br]===","?r.lastIndex=++Br:a=!0;break;case"[":if(Uu.lastIndex=Br,d?(m=Hm(new Bu,"]"),m.name=d):m=Hm(e.conditions?new Bu:[],"]"),e.conditions)if(Q_(e,u),xo[Br]==="="){l=decodeURIComponent,i="equals",s=xu(d),r.lastIndex=++Br;break}else e.conditions.push(m),s=null;else e.push(m);xo[Br]===","?r.lastIndex=++Br:a=!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"&&Fx(h,d),Q_(e,u),e.conditions.push(h)}else d&&Vt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(xu(d));return e}else Vt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Vt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?bZ:Uu,r.lastIndex=Br),Br===xo.length)return e}t&&Vt(`expected '${t}', but encountered end of string`)}function Q_(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Vt("Can not mix operators within a condition grouping"):e.operator=t)}function xu(e){return e.indexOf(".")>-1?e.split(".").map(xu):decodeURIComponent(e)}function Bx(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 jr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function Fx(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new jr.ClientError("wildcard can only be used at the end of a string")}function kx(e){let t=Hx(e[0]);return e.length>1&&(t.next=kx(e.slice(1))),t}function Hx(e){if(Array.isArray(e)){let t=Hx(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}}Vt(`Unknown sort type ${e}`)}function ku(e){return Array.isArray(e)?e.join("\0"):e}function Uo(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function IZ(e,t,r){return t*r/Uo(e)}var jr,Ls,Fi,Ma,_Z,gZ,SZ,TZ,Ub,Bb,vb,AZ,Uu,bZ,Br,ai,xo,Bu,Z_=ie(()=>{jr=w(_e()),Ls=w($t()),Fi=require("ordered-binary"),Ma=require("lmdb");eg();el();_Z=.3,gZ=.1,SZ=.05,TZ={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},Ub={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(xb,"executeConditions");o(Fu,"searchByIndex");o(ki,"findAttribute");o(yZ,"joinTo");o(RZ,"joinFrom");Bb={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"};o(qm,"filterByType");o(J_,"estimateCondition");vb=class extends jr.Violation{static{o(this,"SyntaxViolation")}},AZ=/[()[\]|!<>.]|(=\w*=)/,Uu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,bZ=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(X_,"parseQuery");o(Vt,"recordError");o(Hm,"parseBlock");o(Q_,"assignOperator");o(xu,"decodeProperty");o(Bx,"typedDecoding");o(Fx,"wildcardDecoding");o(kx,"toSortObject");o(Hx,"toSortEntry");Bu=class{static{o(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}};o(ku,"flattenKey");o(Uo,"estimatedEntryCount");o(IZ,"intersectionEstimate")});var qx,ci,tg=ie(()=>{qx=w(ii()),ci=class extends URLSearchParams{static{o(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,qx._assignPackageExport)("Resource",Resource)});var Yx={};Ie(Yx,{MultiPartId:()=>rg,Resource:()=>Fr,contextStorage:()=>qu,snakeCase:()=>NZ,transformForSelect:()=>Gu});function NZ(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Gx(e,t){if(sl=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(sl=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new rg;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){sl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return sl=!0,null;e[e.length-1]==="/"&&(sl=!0)}return t.coerceId(decodeURIComponent(e))}function Mn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,a){let c,l,u,d;if(r){if(a)d=i,a=a.getContext?.()||a;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,a=i.getContext?.()||i):i?.transaction instanceof bo?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new Hu.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?a?(d=i,a=a.getContext?.()||a):a=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(a=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let E=c.indexOf("?");E>-1&&(l=this.parseQuery(c.slice(E+1),s),c=c.slice(0,E),c===""&&(u=!0));let g=this.parsePath(c,a,l);g?.id!==void 0?(g.query&&(l?l=Object.assign(g.query,l):l=g.query),u=g.isCollection,c=g.id):c=g,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new ci,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new ci,l.id=c,c==null&&(u=!0);l||(l=new ci,l.id=c),u&&(l.isCollection=!0);let f;a||(a=qu.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=o(E=>qu.run(a,()=>h(E)),"runAction")),a?.transaction){let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)}else return Rt(a,()=>{let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)},f);function h(E){if(m!==!1&&a.authorize){a.authorize=!1;let g=t.type==="read"?E.allowRead(a.user,l,a):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(a.user,d,a):E.allowUpdate(a.user,d,a):t.type==="create"?E.allowCreate(a.user,d,a):E.allowDelete(a.user,l,a);if(g?.then)return g.then(A=>{if(!A)throw new Hu.AccessViolation(a.user);return typeof d?.then=="function"?d.then(S=>e(E,l,a,S)):e(E,l,a,d)});if(!g)throw new Hu.AccessViolation(a.user)}return typeof d?.then=="function"?d.then(g=>e(E,l,a,g)):e(E,l,a,d)}o(h,"authorizeActionOnResource")}}function es(e,t){let r=new Hu.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 Fb(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let a,c;return e.hasOwnProperty(i)&&typeof(a=e[i])!="function"?a: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 Gu(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return o(function a(c){return c.then?c.then(a):Array.isArray(c)?c.map(a):Fb(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(Fb(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let a=e.forceNulls;return o(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(Fb(l,r,n)),f;for(let m of e){let p=d(m);p===void 0&&a&&(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(a){return c=>{if(typeof c=="string")return a(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]=Gu(c.select||c,d)}let u=a(c.name);return l(u)}else return a(c);else return c}}o(i,"handleProperty")}var $x,Vx,Hu,Kx,qu,wZ,Fr,sl,rg,Ua=ie(()=>{$x=require("crypto");hm();Nu();Vx=w(ii()),Hu=w(_e());Ca();Z_();Kx=require("async_hooks");tg();qu=new Kx.AsyncLocalStorage,wZ={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Fr=class{static{o(this,"Resource")}#e;#t;#r;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=Mn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(a);return a(i);function a(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=Gu(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Mn(function(t,r,n,s){if(Array.isArray(s)&&t.#r&&t.constructor.loadAsInstance!==!1){let i=[];for(let a of s){let c=t.constructor,l=a[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(a,n))):i.push(u.put(a,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):es(t,"put")},{hasContent:!0,type:"update"});static patch=Mn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):es(t,"patch")},{hasContent:!0,type:"update"});static delete=Mn(function(t,r,n,s){return t.delete?t.delete(r):es(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,$x.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=qu.getStore()??{};let s;return this.loadAsInstance===!1?s=t:t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),Rt(n,async()=>{let i=new this(s,n),a=await i.create?i.create(s,r):es(i,"create");return n.newLocation=s??a?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?a:i})}static invalidate=Mn(function(t,r,n,s){return t.invalidate?t.invalidate(r):es(t,"delete")},{hasContent:!1,type:"update"});static post=Mn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create"});static update=Mn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update"});static connect=Mn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):es(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Mn(function(t,r,n,s){return t.subscribe?t.subscribe(r):es(t,"subscribe")},{type:"read"});static publish=Mn(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):es(t,"publish")},{hasContent:!0,type:"create"});static search=Mn(function(t,r,n){let s=t.search?t.search(r):es(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let a=Gu(i,t.constructor);return s.map(a)}return s},{type:"read"});static query=Mn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):es(t,"search")},{hasContent:!0,type:"read"});static copy=Mn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):es(t,"copy")},{hasContent:!0,type:"create"});static move=Mn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):es(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;es(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return X_(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&wZ[a];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===a))if(t=t.slice(0,s),n)n.property=a;else return{query:{property:a},id:Gx(t,this),isCollection:sl}}let i=Gx(t,this);return sl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),a;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?a=r.isCollection:a=n?.isCollection;let c=a&&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 a&&(s.#r=!0),s}subscribe(t){return new Xn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new Xn}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,Vx._assignPackageExport)("Resource",Fr);o(NZ,"snakeCase");o(Gx,"pathToId");rg=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(Mn,"transactional");o(es,"missingMethod");o(Fb,"selectFromObject");o(Gu,"transformForSelect")});var il,kb=ie(()=>{il=class{static{o(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 Hb={};Ie(Hb,{Resources:()=>$u,keyArrayToString:()=>Vu,resetResources:()=>CZ,resources:()=>Ds});function CZ(){return Ds=new $u,Ue.resources=Ds,Ds}function Vu(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Wx,zx,$u,Ds,xa=ie(()=>{Ca();kb();Wx=w(Q()),zx=w(_e());xr();$u=class extends Map{static{o(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:""},a=super.get(t);if(a&&(a.Resource.databaseName!==r.databaseName||a.Resource.tableName!==r.tableName)&&!s){let c=new zx.ServerError(`Conflicting paths for ${t}`);Wx.default.error(c),i.Resource=new il(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,a=t.length;for(;n<a;){s=n,n=t.indexOf("/",n),n===-1&&(n=a);let u=n===a?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===a&&(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 Rt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};o(CZ,"resetResources");o(Vu,"keyArrayToString")});function $b(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=Qx,OZ(e.primaryStore,e.auditStore)):(c=jx,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{Jx(jx[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[a];u||(u=l[a]=new Map,u.envs=l,u.tableId=a,u.store=e.primaryStore),t=Vu(t);let d=new Gb(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 Jx(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),Xx(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=xt(s),a=e[i.tableId];if(!a)continue;let c=i.recordId,l=Vu(c),u=0;do{let d=a.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,qb.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,qb.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 OZ(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:a,txnId:c})=>{let l=Qx[s];if(!l)return;let u=o(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{Jx(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function Xx(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function Zx(e){return e.nextTransaction||($b({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),Xx(e)),e.nextTransaction}var qb,jx,Qx,Gb,Vb=ie(()=>{qb=w(Q());Nu();xa();Io();jx=Object.create(null),Qx=Object.create(null);o($b,"addSubscription");Gb=class extends Xn{static{o(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"}}};o(Jx,"notifyFromTransactionData");o(OZ,"listenToCommits");o(Xx,"nextTransaction");o(Zx,"whenNextTransaction")});var t0=M((kCe,e0)=>{"use strict";var Kb=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};e0.exports=Kb});var n0=M((qCe,r0)=>{"use strict";var Yb=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};r0.exports=Yb});var Gm=M(i0=>{"use strict";var s0=ue(),PZ=(H(),D(W)),{RecordEncoder:LZ}=(el(),D(xx));s0.initSync();var DZ=s0.get(PZ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Wb=class{static{o(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=DZ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:LZ})}};i0.OpenDBIObject=Wb});var $m=M((KCe,o0)=>{"use strict";var ts=ue(),Ms=(H(),D(W));ts.initSync();var ng=class{static{o(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=ts.get(Ms.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||ts.get(Ms.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||ts.get(Ms.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",ts.get(Ms.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=ts.get(Ms.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),ts.get(Ms.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=ts.get(Ms.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),ts.get(Ms.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=ts.get(Ms.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),ts.get(Ms.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=ts.get(Ms.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=ts.get(Ms.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};o0.exports=ng;ng.MAX_DBS=1e4});var _t=M((WCe,E0)=>{"use strict";var jb=require("lmdb"),li=require("fs-extra"),rs=require("path"),sg=Cn(),l0=Q(),vn=Kr().LMDB_ERRORS_ENUM,ig=n0(),{OpenDBIObject:Qb}=Gm(),u0=$m(),Ba=$t(),a0=(H(),D(W)),{table:MZ,resetDatabases:vZ}=(Oe(),D(mt)),c0=ue(),ui=Ba.INTERNAL_DBIS_NAME,d0=Ba.DBI_DEFINITION_NAME,UZ="data.mdb",xZ="lock.mdb",Vm=".mdb",BZ="-lock",zb=class{static{o(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=vs(t,r),this.key_type=this.dbi[Ba.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ba.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new jb.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function og(e,t){if(e===void 0)throw new Error(vn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(vn.ENV_NAME_REQUIRED)}o(og,"pathEnvNameValidation");async function Jb(e,t,r=!0){try{await li.access(e)}catch(n){throw n.code==="ENOENT"?new Error(vn.INVALID_BASE_PATH):n}try{let n=rs.join(e,t+Vm);return await li.access(n,li.constants.R_OK|li.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await li.access(rs.join(e,t,UZ),li.constants.R_OK|li.constants.F_OK),rs.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(vn.INVALID_ENVIRONMENT)}else throw new Error(vn.INVALID_ENVIRONMENT);throw n}}o(Jb,"validateEnvironmentPath");function ag(e,t){if(sg.validateEnv(e),t===void 0)throw new Error(vn.DBI_NAME_REQUIRED)}o(ag,"validateEnvDBIName");async function FZ(e,t,r=!1,n=!1){og(e,t);let s=rs.basename(e);t=t.toString();let i=c0.get(a0.CONFIG_PARAMS.DATABASES);i||c0.setProperty(a0.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Jb(e,t,n),f0(e,t,r)}catch(a){if(a.message===vn.INVALID_ENVIRONMENT){let c=rs.join(e,t);await li.mkdirp(n?c:e);let l=new u0(n?c:c+Vm,!1),u=jb.open(l);u.dbis=Object.create(null);let d=new Qb(!1);u.openDB(ui,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=Xb(e,t,r);return u[Ba.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw a}}o(FZ,"createEnvironment");async function kZ(e,t,r,n=!0){og(e,t),t=t.toString();let s=rs.join(e,t);return MZ({table:t,database:rs.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}o(kZ,"copyEnvironment");async function f0(e,t,r=!1){og(e,t),t=t.toString();let n=Xb(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 Jb(e,t),i=rs.join(e,t+Vm),a=s!=i,c=new u0(s,a),l=jb.open(c);l.dbis=Object.create(null);let u=p0(l);for(let d=0;d<u.length;d++)vs(l,u[d]);return l[Ba.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}o(f0,"openEnvironment");async function HZ(e,t,r=!1){og(e,t),t=t.toString();let n=rs.join(e,t+Vm),s=await Jb(e,t);if(global.lmdb_map!==void 0){let i=Xb(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await m0(a),delete global.lmdb_map[i]}}await li.remove(s),await li.remove(s===n?s+BZ:rs.join(rs.dirname(s),xZ))}o(HZ,"deleteEnvironment");async function m0(e){sg.validateEnv(e);let t=e[Ba.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(m0,"closeEnvironment");function Xb(e,t,r=!1){let s=`${rs.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}o(Xb,"getCachedEnvironmentName");function qZ(e){sg.validateEnv(e);let t=Object.create(null),r=vs(e,ui);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==ui)try{t[n]=Object.assign(new ig,s)}catch{l0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}o(qZ,"listDBIDefinitions");function p0(e){sg.validateEnv(e);let t=[],r=vs(e,ui);for(let{key:n}of r.getRange({start:!1}))n!==ui&&t.push(n);return t}o(p0,"listDBIs");function GZ(e,t){let n=vs(e,ui).getEntry(t),s=new ig;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{l0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}o(GZ,"getDBIDefinition");function h0(e,t,r,n=!r){if(ag(e,t),t=t.toString(),t===ui)throw new Error(vn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return vs(e,t)}catch(s){if(s.message===vn.DBI_DOES_NOT_EXIST){let i=new Qb(r,n===!0),a=e.openDB(t,i),c=new ig(r===!0,n);return a[d0]=c,vs(e,ui).putSync(t,c),e.dbis[t]=a,a}throw s}}o(h0,"createDBI");function vs(e,t){if(ag(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ui?r=GZ(e,t):r=new ig,r===void 0)throw new Error(vn.DBI_DOES_NOT_EXIST);let n;try{let s=new Qb(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(vn.DBI_DOES_NOT_EXIST):s}return n[d0]=r,e.dbis[t]=n,n}o(vs,"openDBI");function $Z(e,t){ag(e,t),t=t.toString();let r=vs(e,t),n=r.getStats();return r[Ba.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}o($Z,"statDBI");async function VZ(e,t){try{let r=rs.join(e,t+Vm);return(await li.stat(r)).size}catch{throw new Error(vn.INVALID_ENVIRONMENT)}}o(VZ,"environmentDataSize");function KZ(e,t){if(ag(e,t),t=t.toString(),t===ui)throw new Error(vn.CANNOT_DROP_INTERNAL_DBIS_NAME);vs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],vs(e,ui).removeSync(t)}o(KZ,"dropDBI");function YZ(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{vs(e,i)}catch(a){if(a.message===vn.DBI_DOES_NOT_EXIST)h0(e,i,i!==t,i===t),n=!0;else throw a}}n&&vZ()}o(YZ,"initializeDBIs");E0.exports={openDBI:vs,openEnvironment:f0,createEnvironment:FZ,listDBIs:p0,listDBIDefinitions:qZ,createDBI:h0,dropDBI:KZ,statDBI:$Z,deleteEnvironment:HZ,initializeDBIs:YZ,TransactionCursor:zb,environmentDataSize:VZ,copyEnvironment:kZ,closeEnvironment:m0}});var S0=M((jCe,g0)=>{"use strict";var Zb=_t(),WZ=Q(),_0=Kr().LMDB_ERRORS_ENUM;g0.exports=zZ;async function zZ(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 a=t[i];if(a.startsWith(`${e.schema}.`)||a.startsWith(`txn.${e.schema}.`))try{await Zb.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==_0.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await Zb.closeEnvironment(global.lmdb_map[n]),await Zb.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==_0.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){WZ.error(t)}}o(zZ,"cleanLMDBMap")});var qi=M((JCe,y0)=>{"use strict";var T0=oe(),jZ=(H(),D(W)),Ku=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Hi=require("joi"),Fa={schema_format:{pattern:Ku,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},QZ=Hi.alternatives(Hi.string().min(1).max(Fa.schema_length.maximum).pattern(Ku).messages({"string.pattern.base":"{:#label} "+Fa.schema_format.message}),Hi.number(),Hi.array()).required(),JZ=Hi.alternatives(Hi.string().min(1).max(Fa.schema_length.maximum).pattern(Ku).messages({"string.pattern.base":"{:#label} "+Fa.schema_format.message}),Hi.number()),XZ=Hi.alternatives(Hi.string().min(1).max(Fa.schema_length.maximum).pattern(Ku).messages({"string.pattern.base":"{:#label} "+Fa.schema_format.message}),Hi.number()).required();function ZZ(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>Fa.schema_length.maximum?`'${property_name}' maximum of 250 characters`:Ku.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}o(ZZ,"checkValidTable");function e9(e,t){return T0.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(e9,"validateSchemaExists");function t9(e,t){let r=t.state.ancestors[0].schema;return T0.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(t9,"validateTableExists");function r9(e,t){return e.toLowerCase()===jZ.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(r9,"validateSchemaName");y0.exports={commonValidators:Fa,schemaRegex:Ku,hdbSchemaTable:QZ,validateSchemaExists:e9,validateTableExists:t9,validateSchemaName:r9,checkValidTable:ZZ,hdbDatabase:JZ,hdbTable:XZ}});var tI=M((ZCe,A0)=>{var{hdbTable:n9,hdbDatabase:R0}=qi(),s9=ft(),eI=require("joi"),i9={undefined:"undefined",null:"null"},o9=o((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let a=r[i];(!a||a.length===0||i9[a]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${a}'`:s+=`. Invalid attribute name: '${a}'`)}return s?t.message(s):e},"customRecordsVal"),a9=eI.object({database:R0,schema:R0,table:n9,records:eI.array().items(eI.object().custom(o9)).required()});A0.exports=function(e){return s9.validateBySchema(e,a9)}});var I0=M((tOe,b0)=>{"use strict";var rI=class{static{o(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")}};b0.exports=rI});var N0=M((nOe,w0)=>{"use strict";var nI=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};w0.exports=nI});var O0=M((iOe,C0)=>{"use strict";var sI=class{static{o(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}};C0.exports=sI});var L0=M((aOe,P0)=>{"use strict";var iI=class{static{o(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};P0.exports=iI});var al=M((fOe,v0)=>{"use strict";var c9=_t(),l9=N0(),u9=O0(),d9=L0(),Gi=Cn(),Km=Kr().LMDB_ERRORS_ENUM,f9=$t(),Bo=(H(),D(W)),m9=oe(),p9=require("uuid"),lOe=require("lmdb"),{handleHDBError:h9,hdbErrors:E9}=_e(),{OVERFLOW_MARKER:uOe,MAX_SEARCH_KEY_LENGTH:dOe}=f9,D0=ue();D0.initSync();var cg=D0.get(Bo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),oI=Bo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,ol=Bo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function _9(e,t,r,n,s=Gi.getNextMonotonicTime()){uI(e,t,r,n),aI(e,t,r);let i=new l9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];M0(u,!0,s);let d=g9(e,t,r,u),f=u[t];a.push(d),c.push(f)}return cI(a,c,n,i,s)}o(_9,"insertRecords");function g9(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||n.hasOwnProperty(a)===!1)continue;let c=n[a];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][Bo.FUNC_VAL],n[a]=c)}let l=Gi.getIndexedValues(c),u=e.dbis[a];if(l){cg&&u.prefetch(l.map(d=>({key:d,value:s})),lg);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}cg&&e.dbis[t].prefetch([s],lg),e.dbis[t].put(s,n,n[ol])})}o(g9,"insertRecord");function S9(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}o(S9,"removeSkippedRecords");function M0(e,t,r){let n=r>0;(n||!Number.isInteger(e[ol]))&&(e[ol]=r||(r=Gi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[oI]))&&(e[oI]=r||Gi.getNextMonotonicTime()):delete e[oI]}o(M0,"setTimestamps");function aI(e,t,r){r.indexOf(Bo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Bo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Bo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Bo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),c9.initializeDBIs(e,t,r)}o(aI,"initializeTransaction");async function T9(e,t,r,n,s=Gi.getNextMonotonicTime()){uI(e,t,r,n),aI(e,t,r);let i=new u9,a=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=lI(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),a.push(u);continue}c.push(m),l.push(f)}return cI(c,l,n,i,s,a)}o(T9,"updateRecords");async function y9(e,t,r,n,s=Gi.getNextMonotonicTime()){try{uI(e,t,r,n)}catch(l){throw h9(l,l.message,E9.HTTP_STATUS_CODES.BAD_REQUEST)}aI(e,t,r);let i=new d9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;m9.isEmpty(u[t])?(d=p9.v4(),u[t]=d):d=u[t];let f=lI(e,t,u,d,i,!1,s);a.push(f),c.push(d)}return cI(a,c,n,i,s)}o(y9,"upsertRecords");async function cI(e,t,r,n,s,i=[]){let a=await Promise.all(e);for(let c=0,l=a.length;c<l;c++)a[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Gi.getNextMonotonicTime(),S9(r,i),n}o(cI,"finalizeWrite");function lI(e,t,r,n,s,i=!1,a){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(M0(r,!d,a),Number.isInteger(r[ol])&&u[ol]>r[ol])return!1;d&&s.original_records.push(u);let f,m=o(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let E=r[h],g=e.dbis[h];if(g===void 0)continue;let A=u[h];if(typeof E=="function"){let R=E([[u]]);Array.isArray(R)&&(E=R[0][Bo.FUNC_VAL],r[h]=E)}if(E===A)continue;let S=Gi.getIndexedValues(A);if(S){cg&&g.prefetch(S.map(R=>({key:R,value:n})),lg);for(let R=0,N=S.length;R<N;R++)g.remove(S[R],n)}if(S=Gi.getIndexedValues(E),S){cg&&g.prefetch(S.map(R=>({key:R,value:n})),lg);for(let R=0,N=S.length;R<N;R++)g.put(S[R],n)}}let p={...u,...r};c.put(n,p,p[ol])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:lI(e,t,r,n,s,i,a))}o(lI,"updateUpsertRecord");function R9(e,t,r){if(Gi.validateEnv(e),t===void 0)throw new Error(Km.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Km.WRITE_ATTRIBUTES_REQUIRED):new Error(Km.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(R9,"validateBasic");function uI(e,t,r,n){if(R9(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Km.RECORDS_REQUIRED):new Error(Km.RECORDS_MUST_BE_ARRAY)}o(uI,"validateWrite");function lg(){}o(lg,"noop");v0.exports={insertRecords:_9,updateRecords:T9,upsertRecords:y9}});var $i=M((pOe,A9)=>{A9.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"}]}}});var x0=M((hOe,U0)=>{"use strict";var b9=require("uuid"),dI=class{static{o(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||b9.v4(),this.schema_table=`${this.schema}.${this.table}`}};U0.exports=dI});var ug=M((_Oe,B0)=>{"use strict";var I9=x0(),fI=class extends I9{static{o(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,a=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=a}};B0.exports=fI});var k0=M((SOe,F0)=>{"use strict";F0.exports=N9;var w9="inserted";function N9(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===w9?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}o(N9,"returnObject")});var dg=M((ROe,q0)=>{"use strict";var C9=(H(),D(W)),mI=_t(),O9=al(),{getSystemSchemaPath:P9,getSchemaPath:L9}=yt(),yOe=$i(),{validateBySchema:D9}=ft(),Ym=require("joi"),M9=ug(),v9=k0(),{handleHDBError:U9,hdbErrors:x9,ClientError:B9}=_e(),H0=oe(),{HTTP_STATUS_CODES:F9}=x9,k9="inserted";q0.exports=H9;async function H9(e){let t=D9(e,Ym.object({database:Ym.string(),schema:Ym.string(),table:Ym.string().required(),attribute:Ym.string().required()}));if(t)throw new B9(t.message);let r=!e.skip_table_check&&H0.checkGlobalSchemaTable(e.schema,e.table);if(r)throw U9(new Error,r,F9.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=H0.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 M9(e.schema,e.table,e.attribute,e.id);try{let i=await mI.openEnvironment(L9(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}`);mI.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await mI.openEnvironment(P9(),C9.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await O9.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return v9(k9,c,{records:[s]},l)}catch(i){throw i}}o(H9,"lmdbCreateAttribute")});var Wm=M((IOe,$0)=>{"use strict";var Fo=oe(),G0=Q(),bOe=tI(),{getDatabases:q9}=(Oe(),D(mt)),{ClientError:cl}=_e();$0.exports=G9;function G9(e){if(Fo.isEmpty(e))throw new cl("invalid update parameters defined.");if(Fo.isEmptyOrZeroLength(e.schema))throw new cl("invalid schema specified.");if(Fo.isEmptyOrZeroLength(e.table))throw new cl("invalid table specified.");if(!Array.isArray(e.records))throw new cl("records must be an array");let t=q9()[e.schema]?.[e.table];if(Fo.isEmpty(t))throw new cl(`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(a=>{if(i&&Fo.isEmptyOrZeroLength(a[r]))throw G0.error("a valid hash attribute must be provided with update record:",a),new cl("a valid hash attribute must be provided with update record, check log for more info");if(!Fo.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw G0.error(`a valid hash value must be provided with ${e.operation} record:`,a),new cl(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Fo.isEmpty(a[r])&&a[r]!==""&&n.has(Fo.autoCast(a[r]))&&(a.skip=!0),n.add(Fo.autoCast(a[r]));for(let c in a)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}o(G9,"insertUpdateValidate")});var fg=M((NOe,K0)=>{"use strict";var V0=oe(),$9=(H(),D(W)),V9=Q(),K9=dg(),Y9=ug(),W9=ko(),{SchemaEventMsg:z9}=ns(),j9="already exists in";K0.exports=Q9;async function Q9(e,t,r){if(V0.isEmptyOrZeroLength(r))return r;let n=[];V0.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 J9(e,t.schema,t.name,i)})),s}o(Q9,"lmdbCheckForNewAttributes");async function J9(e,t,r,n){let s=new Y9(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await X9(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(j9))V9.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}o(J9,"createNewAttribute");async function X9(e){let t;return t=await K9(e),W9.signalSchemaChange(new z9(process.pid,$9.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(X9,"createAttribute")});var Yu=M((OOe,Y0)=>{"use strict";var pI=class{static{o(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}};Y0.exports=pI});var z0=M((LOe,W0)=>{"use strict";var Z9=Yu(),e7=(H(),D(W)).OPERATIONS_ENUM,hI=class extends Z9{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(e7.INSERT,r,n,s,i),this.records=t}};W0.exports=hI});var Q0=M((MOe,j0)=>{"use strict";var t7=Yu(),r7=(H(),D(W)).OPERATIONS_ENUM,EI=class extends t7{static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(r7.UPDATE,n,s,i,a),this.records=t,this.original_records=r}};j0.exports=EI});var X0=M((UOe,J0)=>{"use strict";var n7=Yu(),s7=(H(),D(W)).OPERATIONS_ENUM,_I=class extends n7{static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(s7.UPSERT,n,s,i,a),this.records=t,this.original_records=r}};J0.exports=_I});var eB=M((BOe,Z0)=>{"use strict";var i7=Yu(),o7=(H(),D(W)).OPERATIONS_ENUM,gI=class extends i7{static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(o7.DELETE,n,s,t,i),this.original_records=r}};Z0.exports=gI});var zm=M((HOe,sB)=>{"use strict";var kOe=require("path"),tB=_t(),a7=z0(),c7=Q0(),l7=X0(),u7=eB(),Wu=$t(),rB=oe(),{CONFIG_PARAMS:d7}=(H(),D(W)),nB=ue();nB.initSync();var mg=(H(),D(W)).OPERATIONS_ENUM,{getTransactionAuditStorePath:f7}=yt();sB.exports=m7;async function m7(e,t){if(nB.get(d7.LOGGING_AUDITLOG)===!1)return;let r=f7(e.schema,e.table),n=await tB.openEnvironment(r,e.table,!0),s=p7(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){tB.initializeDBIs(n,Wu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Wu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Wu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Wu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),rB.isEmpty(s.user_name)||n.dbis[Wu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let a=0;a<s.hash_values.length;a++)n.dbis[Wu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[a],i)})}}o(m7,"writeTransaction");function p7(e,t){let r=rB.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===mg.INSERT)return new a7(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===mg.UPDATE)return new c7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===mg.UPSERT)return new l7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===mg.DELETE)return new u7(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(p7,"createTransactionObject")});var SI=M(($Oe,iB)=>{"use strict";var h7=Wm(),GOe=fm(),jm=(H(),D(W)),E7=mm(),_7=al().insertRecords,g7=_t(),S7=Q(),T7=fg(),{getSchemaPath:y7}=yt(),R7=zm();iB.exports=A7;async function A7(e){try{let{schemaTable:t,attributes:r}=h7(e);E7(e,r,t.hash_attribute),e.schema!==jm.SYSTEM_SCHEMA_NAME&&(r.includes(jm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(jm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(jm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(jm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await T7(e.hdb_auth_header,t,r),s=y7(e.schema,e.table),i=await g7.openEnvironment(s,e.table),a=await _7(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await R7(e,a)}catch(c){S7.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(A7,"lmdbCreateRecords")});var cB=M((KOe,aB)=>{"use strict";var oB=(H(),D(W)),b7=SI(),I7=fm(),w7=require("fs-extra"),{getSchemaPath:N7}=yt();aB.exports=C7;async function C7(e){let t=[{name:e.schema,createddate:Date.now()}],r=new I7(oB.SYSTEM_SCHEMA_NAME,oB.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await b7(r),await w7.mkdirp(N7(e.schema))}o(C7,"lmdbCreateSchema")});var uB=M((WOe,lB)=>{"use strict";var TI=class{static{o(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};lB.exports=TI});var pB=M((XOe,mB)=>{"use strict";var dB=_t(),yI=Cn(),RI=Kr().LMDB_ERRORS_ENUM,O7=$t(),fB=Q(),jOe=oe(),P7=require("lmdb"),L7=uB(),D7=(H(),D(W)),{OVERFLOW_MARKER:QOe,MAX_SEARCH_KEY_LENGTH:JOe}=O7,M7=D7.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function v7(e,t,r,n){if(yI.validateEnv(e),t===void 0)throw new Error(RI.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(RI.IDS_REQUIRED):new Error(RI.IDS_MUST_BE_ITERABLE);try{let s=dB.listDBIs(e);dB.initializeDBIs(e,t,s);let i=new L7,a,c=[],l=[];for(let m=0,p=r.length;m<p;m++)try{a=r[m];let h=e.dbis[t].get(a);if(!h||n&&h[M7]>n){i.skipped.push(a);continue}let E=e.dbis[t].ifVersion(a,P7.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let g=0;g<s.length;g++){let A=s[g];if(!h.hasOwnProperty(A)||A===t)continue;let S=e.dbis[A],R=h[A];if(R!=null)try{let N=yI.getIndexedValues(R);if(N)for(let O=0,F=N.length;O<F;O++)S.remove(N[O],a)}catch{fB.warn(`cannot delete from attribute: ${A}, ${R}:${a}`)}}});c.push(E),l.push(a),i.original_records.push(h)}catch(h){fB.warn(h),i.skipped.push(a)}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=yI.getNextMonotonicTime(),i}catch(s){throw s}}o(v7,"deleteRecords");mB.exports={deleteRecords:v7}});var Qm=M((ePe,EB)=>{"use strict";var zu=oe(),U7=pB(),x7=_t(),{getSchemaPath:B7}=yt(),F7=zm(),k7=Q();EB.exports=H7;async function H7(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(zu.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(zu.isEmptyOrZeroLength(e.hash_values)&&!zu.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];zu.isEmpty(l)||e.hash_values.push(l)}}if(zu.isEmptyOrZeroLength(e.hash_values))return hB([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(zu.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=B7(e.schema,e.table),i=await x7.openEnvironment(s,e.table),a=await U7.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await F7(e,a)}catch(c){k7.error(`unable to write transaction due to ${c.message}`)}return hB(a.deleted,a.skipped,a.txn_time)}catch(s){throw s}}o(H7,"lmdbDeleteRecords");function hB(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}}o(hB,"createDeleteResponse")});var bI=M((nPe,_B)=>{"use strict";var q7=(H(),D(W)),rPe=Cn();function AI(e,t){let r=Object.create(null);if(t.length===1&&q7.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}o(AI,"parseRow");function G7(e,t,r,n){let s=AI(r,e);n.push(s)}o(G7,"searchAll");function $7(e,t,r,n){let s=AI(r,e);n[t]=s}o($7,"searchAllToMap");function V7(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(V7,"iterateDBI");function ll(e,t,r,n,s){let i=Object.create(null);i[s]=e;let a;n===s?a=e:(a=t,n!==void 0&&(i[n]=a)),r[0].push(a),r[1].push(i)}o(ll,"pushResults");function K7(e,t,r,n,s,i){t.toString().endsWith(e)&&ll(t,r,n,s,i)}o(K7,"endsWith");function Y7(e,t,r,n,s,i){t.toString().includes(e)&&ll(t,r,n,s,i)}o(Y7,"contains");function W7(e,t,r,n,s,i){t>e&&ll(t,r,n,s,i)}o(W7,"greaterThanCompare");function z7(e,t,r,n,s,i){t>=e&&ll(t,r,n,s,i)}o(z7,"greaterThanEqualCompare");function j7(e,t,r,n,s,i){t<e&&ll(t,r,n,s,i)}o(j7,"lessThanCompare");function Q7(e,t,r,n,s,i){t<=e&&ll(t,r,n,s,i)}o(Q7,"lessThanEqualCompare");_B.exports={parseRow:AI,searchAll:G7,searchAllToMap:$7,iterateDBI:V7,endsWith:K7,contains:Y7,greaterThanCompare:W7,greaterThanEqualCompare:z7,lessThanCompare:j7,lessThanEqualCompare:Q7,pushResults:ll}});var ju=M((cPe,bB)=>{"use strict";var ka=_t(),iPe=Q(),ss=Cn(),pg=$t(),rr=Kr().LMDB_ERRORS_ENUM,oPe=oe(),J7=(H(),D(W)),hg=bI(),{parseRow:X7}=hg,aPe=require("lmdb"),{OVERFLOW_MARKER:gB,MAX_SEARCH_KEY_LENGTH:Z7}=pg;function SB(e,t,r,n=!1,s=void 0,i=void 0){return ul(e,t,r,(a,c)=>c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}o(SB,"iterateFullIndex");function Jm(e,t,r,n,s,i=!1,a=void 0,c=void 0,l=!1,u=!1){return ul(e,t,r,(d,f,m,p)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:a,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return p===r?(S.values=!1,f.getRange(S).map(R=>({value:R}))):f.getRange(S)})}o(Jm,"iterateRangeBetween");function ul(e,t,r,n){let s=e.database||e,i=ka.openDBI(s,r);i[pg.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ka.openDBI(s,t);let a;e.database?a=e:(a=e.useReadTransaction(),a.database=e);let c=n(a,i,s,t);return c.transaction=a,e.database||(c.onDone=()=>{a.done()}),c}o(ul,"setupTransaction");function TB(e,t,r,n){let s;return function(i,a){if(typeof i=="string"&&i.endsWith(gB)){if(!s)if(r)s=ka.openDBI(e,r);else{let l=ka.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=ka.openDBI(e,l[u]),!s[pg.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(a,{transaction:t,lazy:!0})[n]}return i}}o(TB,"getOverflowCheck");function eee(e,t,r,n=!1,s=void 0,i=void 0){if(ss.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);return ul(e,t,t,(a,c,l)=>(Eg(r),r=Xm(l,r),c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>X7(u.value,r))))}o(eee,"searchAll");function tee(e,t,r,n=!1,s=void 0,i=void 0){if(ss.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);Eg(r),r=Xm(e.database||e,r);let a=new Map;for(let{key:c,value:l}of SB(e,t,t,n,s,i))a.set(c,hg.parseRow(l,r));return a}o(tee,"searchAllToMap");function ree(e,t,r=!1,n=void 0,s=void 0){if(ss.validateEnv(e),t===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=SB(e,void 0,t,r,n,s),c=a.transaction,l=TB(c.database,c,void 0,t);for(let{key:u,value:d}of a){let f=l(u,d);i[f]===void 0&&(i[f]=[]),i[f].push(d)}return i}o(ree,"iterateDBI");function nee(e,t){if(ss.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);return ka.statDBI(e,t).entryCount}o(nee,"countAll");function see(e,t,r,n,s=!1,i=void 0,a=void 0){return Ha(e,r,n),ul(e,t,r,(c,l,u,d)=>(n=ss.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:a}).map(f=>({key:n,value:f}))))}o(see,"equals");function iee(e,t,r){return Ha(e,t,r),ka.openDBI(e,t).getValuesCount(r)}o(iee,"count");function oee(e,t,r,n,s=!1,i=void 0,a=void 0){return Ha(e,r,n),ul(e,null,r,(c,l)=>{n=ss.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(a)?a++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:a}).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:a}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}o(oee,"startsWith");function aee(e,t,r,n,s=!1,i=void 0,a=void 0){return yB(e,t,r,n,s,i,a,!0)}o(aee,"endsWith");function yB(e,t,r,n,s=!1,i=void 0,a=void 0,c=!1){return Ha(e,r,n),ul(e,null,r,(l,u,d,f)=>{let m=TB(d,l,f,r);return a=Number.isInteger(a)?a:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(p=>{let h=p.toString();return h.endsWith(gB)?u.getValues(p,{transaction:l}).map(E=>{let g=m(p,E);if(c?g.endsWith(n):g.includes(n))return{key:g,value:E}}).filter(E=>E):(c?h.endsWith(n):h.includes(n))?u[pg.DBI_DEFINITION_NAME].is_hash_attribute?{key:p,value:p}:u.getValues(p,{transaction:l}).map(E=>({key:p,value:E})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(yB,"contains");function cee(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Jm(e,t,r,n,l,s,i,a,!0,!1)}o(cee,"greaterThan");function lee(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Jm(e,t,r,n,l,s,i,a,!1,!1)}o(lee,"greaterThanEqual");function uee(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Jm(e,t,r,l,n,s,i,a,!1,!0)}o(uee,"lessThan");function dee(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Jm(e,t,r,l,n,s,i,a,!1,!1)}o(dee,"lessThanEqual");function fee(e,t,r,n,s,i=!1,a=void 0,c=void 0){if(ss.validateEnv(e),r===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(rr.START_VALUE_REQUIRED);if(s===void 0)throw new Error(rr.END_VALUE_REQUIRED);if(n=ss.convertKeyValueToWrite(n),s=ss.convertKeyValueToWrite(s),n>s)throw new Error(rr.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Jm(e,t,r,n,s,i,a,c)}o(fee,"between");function mee(e,t,r,n){ss.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(Eg(r),r=Xm(s,r),n===void 0)throw new Error(rr.ID_REQUIRED);let a=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(a=hg.parseRow(c,r)),a}o(mee,"searchByHash");function pee(e,t,r){ss.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(rr.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}o(pee,"checkHashExists");function hee(e,t,r,n,s=[]){return AB(e,t,r,n,s),RB(e,t,r,n,s).map(i=>i[1])}o(hee,"batchSearchByHash");function Eee(e,t,r,n,s=[]){AB(e,t,r,n,s);let i=new Map;for(let[a,c]of RB(e,t,r,n,s))i.set(a,c);return i}o(Eee,"batchSearchByHashToMap");function RB(e,t,r,n,s=[]){return ul(e,t,t,(i,a,c)=>{r=Xm(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,hg.parseRow(d,r)];s.push(u)}).filter(u=>u)})}o(RB,"batchHashSearch");function AB(e,t,r,n,s){if(ss.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(Eg(r),n==null)throw new Error(rr.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(rr.IDS_MUST_BE_ITERABLE)}o(AB,"initializeBatchSearchByHash");function Eg(e){if(!Array.isArray(e))throw e===void 0?new Error(rr.FETCH_ATTRIBUTES_REQUIRED):new Error(rr.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(Eg,"validateFetchAttributes");function Ha(e,t,r){if(ss.validateEnv(e),t===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(rr.SEARCH_VALUE_REQUIRED);if(r?.length>Z7)throw new Error(rr.SEARCH_VALUE_TOO_LARGE)}o(Ha,"validateComparisonFunctions");function Xm(e,t){return t.length===1&&J7.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ka.listDBIs(e)),t}o(Xm,"setGetWholeRowAttributes");bB.exports={searchAll:eee,searchAllToMap:tee,count:iee,countAll:nee,equals:see,startsWith:oee,endsWith:aee,contains:yB,searchByHash:mee,setGetWholeRowAttributes:Xm,batchSearchByHash:hee,batchSearchByHashToMap:Eee,checkHashExists:pee,iterateDBI:ree,greaterThan:cee,greaterThanEqual:lee,lessThan:uee,lessThanEqual:dee,between:fee}});var Qu=M((uPe,OB)=>{var IB=require("lodash"),wB=ft(),Ye=require("joi"),_ee=oe(),{hdbSchemaTable:Zm,checkValidTable:NB,hdbTable:CB,hdbDatabase:_g}=qi(),{handleHDBError:gee,hdbErrors:See}=_e(),{getDatabases:Tee}=(Oe(),D(mt)),{HTTP_STATUS_CODES:yee}=See,Ree=Ye.object({database:_g,schema:_g,table:CB,attribute:Zm,value:Ye.any().required(),get_attributes:Ye.array().min(1).items(Ye.alternatives(Zm,Ye.object())).optional(),desc:Ye.bool(),limit:Ye.number().integer().min(1),offset:Ye.number().integer().min(0)}),Aee=Ye.object({database:_g,schema:_g,table:CB,operator:Ye.string().valid("and","or").default("and").lowercase(),offset:Ye.number().integer().min(0),limit:Ye.number().integer().min(1),get_attributes:Ye.array().min(1).items(Ye.alternatives(Zm,Ye.object())).optional(),sort:Ye.object({attribute:Ye.alternatives(Zm,Ye.array().min(1)),descending:Ye.bool().optional()}).optional(),conditions:Ye.array().min(1).items(Ye.alternatives(Ye.object({operator:Ye.string().valid("and","or").default("and").lowercase(),conditions:Ye.array()}),Ye.object({attribute:Ye.alternatives(Zm,Ye.array().min(1)),comparator:Ye.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),value:Ye.when("comparator",{switch:[{is:"equals",then:Ye.any()},{is:"between",then:Ye.array().items(Ye.alternatives([Ye.string(),Ye.number()])).length(2)}],otherwise:Ye.alternatives(Ye.string(),Ye.number())}).required()}))).required()});OB.exports=function(e,t){let r=null;switch(t){case"value":r=wB.validateBySchema(e,Ree);break;case"hashes":let i=function(a){s?s+=". "+a:s=a};var n=i;o(i,"addError");let s;i(NB("database",e.schema)),i(NB("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="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(a=>typeof a=="string"||typeof a=="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=wB.validateBySchema(e,Aee);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=_ee.checkGlobalSchemaTable(e.schema,e.table);if(s)return gee(new Error,s,yee.NOT_FOUND);let a=Tee()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.attribute);let l=o(d=>{for(let f of d.conditions)f.conditions?l(f):c.push(f.attribute)},"addConditions");t==="conditions"&&l(e);let u=IB.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!IB.some(a,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 II=M((fPe,PB)=>{"use strict";var bee=_t(),Iee=Qu(),{getSchemaPath:wee}=yt();PB.exports=Nee;function Nee(e){let t=Iee(e,"hashes");if(t)throw t;let r=wee(e.schema,e.table);return bee.openEnvironment(r,e.table)}o(Nee,"initialize")});var wI=M((pPe,LB)=>{"use strict";var Cee=ju(),Oee=II();LB.exports=Pee;async function Pee(e){let t=await Oee(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Cee.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(Pee,"lmdbGetDataByHash")});var Ju=M((EPe,DB)=>{"use strict";var NI=class{static{o(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};DB.exports=NI});var vB=M((SPe,MB)=>{"use strict";var gPe=Ju(),Lee=ju(),Dee=II();MB.exports=Mee;async function Mee(e){let t=await Dee(e),r=global.hdb_schema[e.schema][e.table];return Lee.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(Mee,"lmdbSearchByHash")});var di=M((yPe,UB)=>{"use strict";var CI=class{static{o(this,"SearchObject")}constructor(t,r,n,s,i,a,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=a,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};UB.exports=CI});var gg=M((APe,qB)=>{"use strict";var un=ju(),vee=_t(),Uee=oe(),We=$t(),dl=(H(),D(W)),xee=$i(),xB=Kr().LMDB_ERRORS_ENUM,{getSchemaPath:Bee}=yt(),Ho=dl.SEARCH_WILDCARDS;async function Fee(e,t,r){let n;e.schema===dl.SYSTEM_SCHEMA_NAME?n=xee[e.table]:n=global.hdb_schema[e.schema][e.table];let s=HB(e,n.hash_attribute,r,t);return FB(e,s,n.hash_attribute,r)}o(Fee,"prepSearch");async function FB(e,t,r,n){let s=Bee(e.schema,e.table),i=await vee.openEnvironment(s,e.table),a=kB(i,e,t,r),c=a.transaction||i;if([We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,We.SEARCH_TYPES.SEARCH_ALL,We.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(kee(e,r)===!1){let d=e.attribute;if(d===r)return n?BB(a,()=>!0):a.map(m=>({[r]:m.key}));let f=o(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?BB(a,f):a.map(f)}let u=e.attribute===r?a.map(d=>d.key):a.map(d=>d.value);return n===!0?un.batchSearchByHashToMap(c,r,e.get_attributes,u):un.batchSearchByHash(c,r,e.get_attributes,u)}o(FB,"executeSearch");function kB(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:a,limit:c,offset:l}=t;switch(a=typeof a=="boolean"?a:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case We.SEARCH_TYPES.EQUALS:s=un.equals(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.CONTAINS:s=un.contains(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.ENDS_WITH:case We.SEARCH_TYPES._ENDS_WITH:s=un.endsWith(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.STARTS_WITH:case We.SEARCH_TYPES._STARTS_WITH:s=un.startsWith(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return un.batchSearchByHash(e,t.attribute,t.get_attributes,[t.value]);case We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return un.batchSearchByHashToMap(e,t.attribute,t.get_attributes,[t.value]);case We.SEARCH_TYPES.SEARCH_ALL:return un.searchAll(e,n,t.get_attributes,a,c,l);case We.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return un.searchAllToMap(e,n,t.get_attributes,a,c,l);case We.SEARCH_TYPES.BETWEEN:s=un.between(e,i,t.attribute,t.value,t.end_value,a,c,l);break;case We.SEARCH_TYPES.GREATER_THAN:case We.SEARCH_TYPES._GREATER_THAN:s=un.greaterThan(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.GREATER_THAN_EQUAL:case We.SEARCH_TYPES._GREATER_THAN_EQUAL:s=un.greaterThanEqual(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.LESS_THAN:case We.SEARCH_TYPES._LESS_THAN:s=un.lessThan(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.LESS_THAN_EQUAL:case We.SEARCH_TYPES._LESS_THAN_EQUAL:s=un.lessThanEqual(e,i,t.attribute,t.value,a,c,l);break;default:return Object.create(null)}return s}o(kB,"searchByType");function BB(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}o(BB,"createMapFromIterable");function kee(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}o(kee,"checkToFetchMore");function HB(e,t,r,n){if(Uee.isEmpty(n)){let s=e.value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),a=s.charAt(s.length-1),c=!1;if(e.attribute===t&&(c=!0),Ho.indexOf(s)>-1)return r===!0?We.SEARCH_TYPES.SEARCH_ALL_TO_MAP:We.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Ho[0])<0&&s.indexOf(Ho[1])<0)return c===!0?r===!0?We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:We.SEARCH_TYPES.EQUALS;if(Ho.indexOf(i)>=0&&Ho.indexOf(a)>=0)return e.value=e.value.slice(1,-1),We.SEARCH_TYPES.CONTAINS;if(Ho.indexOf(i)>=0)return e.value=e.value.substr(1),We.SEARCH_TYPES.ENDS_WITH;if(Ho.indexOf(a)>=0)return e.value=e.value.slice(0,-1),We.SEARCH_TYPES.STARTS_WITH;if(s.includes(Ho[0])||s.includes(Ho[1]))return We.SEARCH_TYPES.EQUALS;throw new Error(xB.UNKNOWN_SEARCH_TYPE)}else switch(n){case dl.VALUE_SEARCH_COMPARATORS.BETWEEN:return We.SEARCH_TYPES.BETWEEN;case dl.VALUE_SEARCH_COMPARATORS.GREATER:return We.SEARCH_TYPES.GREATER_THAN;case dl.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return We.SEARCH_TYPES.GREATER_THAN_EQUAL;case dl.VALUE_SEARCH_COMPARATORS.LESS:return We.SEARCH_TYPES.LESS_THAN;case dl.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return We.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(xB.UNKNOWN_SEARCH_TYPE)}}o(HB,"createSearchTypeFromSearchObject");qB.exports={executeSearch:FB,createSearchTypeFromSearchObject:HB,prepSearch:Fee,searchByType:kB}});var $B=M((wPe,GB)=>{"use strict";var IPe=di(),Hee=Qu(),qee=oe(),Gee=(H(),D(W)),$ee=gg();GB.exports=Vee;function Vee(e,t){if(!qee.isEmpty(t)&&Gee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Hee(e,"value");if(n)throw n;return $ee.prepSearch(e,t,!0)}o(Vee,"lmdbGetDataByValue")});var ep=M((OPe,VB)=>{"use strict";var CPe=di(),Kee=Qu(),Yee=oe(),Wee=(H(),D(W)),zee=gg();VB.exports=jee;async function jee(e,t){if(!Yee.isEmpty(t)&&Wee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Kee(e,"value");if(n)throw n;return zee.prepSearch(e,t,!1)}o(jee,"lmdbSearchByValue")});var YB=M((DPe,KB)=>{"use strict";var LPe=$t(),OI=class{static{o(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,a=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=a,this.conditions=s,this.operator=c}},PI=class{static{o(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},LI=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};KB.exports={SearchByConditionsObject:OI,SearchCondition:PI,SortAttribute:LI}});var JB=M((BPe,QB)=>{"use strict";var{SearchByConditionsObject:vPe,SearchCondition:UPe}=YB(),Qee=di(),Jee=Qu(),DI=ju(),Sg=$t(),{Resource:xPe}=(Ua(),D(Yx)),jB=gg(),Xee=bI(),Zee=require("lodash"),{getSchemaPath:ete}=yt(),WB=_t(),{handleHDBError:tte,hdbErrors:rte}=_e(),{HTTP_STATUS_CODES:nte}=rte,ste=1e8;QB.exports=ite;async function ite(e){let t=Jee(e,"conditions");if(t)throw tte(t,t.message,nte.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=ete(e.schema,e.table),n=await WB.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)WB.openDBI(n,u.attribute);let i=Zee.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===Sg.SEARCH_TYPES.EQUALS?u.estimated_count=DI.count(n,u.attribute,u.value):d===Sg.SEARCH_TYPES.CONTAINS||d===Sg.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=ste}return u.estimated_count}),a=n.useReadTransaction();a.database=n;let c=await zB(a,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(jB.filterByType),f=d.length,m=DI.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(p=>u.get(p,{transaction:a,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=>Xee.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await zB(a,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=DI.batchSearchByHash(a,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{a.done()},l}o(ite,"lmdbSearchByConditions");async function zB(e,t,r,n){let s=new Qee(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.comparator;return s.attribute=r.attribute,i===Sg.SEARCH_TYPES.BETWEEN?(s.value=r.value[0],s.end_value=r.value[1]):s.value=r.value,jB.searchByType(e,s,i,n).map(a=>a.value)}o(zB,"executeConditionSearch")});var tp=M((kPe,XB)=>{"use strict";var ote=(H(),D(W)).OPERATIONS_ENUM,MI=class{static{o(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=ote.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};XB.exports=MI});var vI=M((qPe,oF)=>{"use strict";var rF=di(),nF=tp(),sF=ep(),iF=Qm(),Un=(H(),D(W)),ZB=oe(),eF=_t(),{getTransactionAuditStorePath:ate,getSchemaPath:cte}=yt(),tF=Q();oF.exports=lte;async function lte(e){try{if(ZB.isEmpty(global.hdb_schema[e.schema])||ZB.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await ute(e),await dte(e);let t=cte(e.schema,e.table);try{await eF.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")tF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=ate(e.schema,e.table);await eF.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")tF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(lte,"lmdbDropTable");async function ute(e){let t=new rF(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await sF(t)),n=[];for(let i=0;i<r.length;i++){let a=r[i];n.push(a.id)}if(n.length===0)return;let s=new nF(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await iF(s)}o(ute,"deleteAttributesFromSystem");async function dte(e){let t=new rF(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await sF(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(n=a)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new nF(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await iF(s)}catch(i){throw i}}o(dte,"dropTableFromSystem")});var cF=M(($Pe,aF)=>{"use strict";var fte=require("fs-extra"),mte=di(),pte=Ju(),hte=tp(),Ete=vI(),_te=Qm(),gte=wI(),Ste=ep(),qo=(H(),D(W)),{getSchemaPath:Tte}=yt(),{handleHDBError:yte,hdbErrors:Rte}=_e(),{HDB_ERROR_MSGS:Ate,HTTP_STATUS_CODES:bte}=Rte;aF.exports=Ite;async function Ite(e){let t;try{t=await wte(e.schema);let r=new mte(qo.SYSTEM_SCHEMA_NAME,qo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await Ste(r));for(let a=0;a<n.length;a++){let c={schema:t,table:n[a].name};try{await Ete(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new hte(qo.SYSTEM_SCHEMA_NAME,qo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await _te(s);let i=Tte(t);await fte.remove(i)}catch(r){throw r}}o(Ite,"lmdbDropSchema");async function wte(e){let t=new pte(qo.SYSTEM_SCHEMA_NAME,qo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await gte(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw yte(new Error,Ate.SCHEMA_NOT_FOUND(e),bte.NOT_FOUND,void 0,void 0,!0);return n}o(wte,"validateDropSchema")});var rp=M((KPe,lF)=>{"use strict";var UI=class{static{o(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};lF.exports=UI});var BI=M((zPe,uF)=>{"use strict";var Nte=require("fs-extra"),Tg=_t(),{getTransactionAuditStorePath:Cte}=yt(),xI=$t(),WPe=rp();uF.exports=Ote;async function Ote(e){let t;try{let r=Cte(e.schema,e.table);await Nte.mkdirp(r),t=await Tg.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{Tg.createDBI(t,xI.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Tg.createDBI(t,xI.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Tg.createDBI(t,xI.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}o(Ote,"createTransactionsAuditEnvironment")});var mF=M((JPe,fF)=>{"use strict";var FI=(H(),D(W)),dF=_t(),Pte=al(),{getSystemSchemaPath:Lte,getSchemaPath:Dte}=yt(),QPe=$i(),Mte=dg(),kI=ug(),vte=Q(),Ute=BI();fF.exports=xte;async function xte(e,t){let r=Dte(t.schema,t.table),n=new kI(t.schema,t.table,FI.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new kI(t.schema,t.table,FI.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new kI(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await dF.createEnvironment(r,t.table),e!==void 0){let a=await dF.openEnvironment(Lte(),FI.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Pte.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbTableAttributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await HI(n),await HI(s),await HI(i)}await Ute(t)}catch(a){throw a}}o(xte,"lmdbCreateTable");async function HI(e){try{await Mte(e)}catch(t){vte.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(HI,"createAttribute")});var hF=M((ZPe,pF)=>{"use strict";var Bte=Wm(),Fte=mm(),kte=fg(),np=(H(),D(W)),Hte=al().updateRecords,qte=_t(),{getSchemaPath:Gte}=yt(),$te=zm(),Vte=Q();pF.exports=Kte;async function Kte(e){try{let{schemaTable:t,attributes:r}=Bte(e);Fte(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 kte(e.hdb_auth_header,t,r),s=Gte(e.schema,e.table),i=await qte.openEnvironment(s,e.table),a=await Hte(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await $te(e,a)}catch(c){Vte.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(Kte,"lmdbUpdateRecords")});var _F=M((tLe,EF)=>{"use strict";var Yte=(H(),D(W)).OPERATIONS_ENUM,qI=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Yte.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};EF.exports=qI});var SF=M((sLe,gF)=>{"use strict";var nLe=_F(),Wte=Wm(),zte=mm(),jte=fg(),sp=(H(),D(W)),Qte=al().upsertRecords,Jte=_t(),{getSchemaPath:Xte}=yt(),Zte=zm(),ere=Q(),{handleHDBError:tre,hdbErrors:rre}=_e();gF.exports=nre;async function nre(e){let t;try{t=Wte(e)}catch(l){throw tre(l,l.message,rre.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;zte(e,n,r.hash_attribute),e.schema!==sp.SYSTEM_SCHEMA_NAME&&(n.includes(sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await jte(e.hdb_auth_header,r,n),i=Xte(e.schema,e.table),a=await Jte.openEnvironment(i,e.table),c=await Qte(a,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await Zte(e,c)}catch(l){ere.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}}o(nre,"lmdbUpsertRecords")});var yF=M((oLe,TF)=>{"use strict";var GI=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};TF.exports=GI});var AF=M((cLe,RF)=>{"use strict";var $I=class{static{o(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};RF.exports=$I});var wF=M((dLe,IF)=>{"use strict";var VI=_t(),{getTransactionAuditStorePath:sre}=yt(),uLe=yF(),ip=$t(),ire=oe(),bF=AF(),ore=require("util").promisify,are=ore(setTimeout),cre=1e4,lre=100;IF.exports=ure;async function ure(e){let t=sre(e.schema,e.table),r=await VI.openEnvironment(t,e.table,!0),n=VI.listDBIs(r);VI.initializeDBIs(r,ip.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new bF;do s=await dre(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 are(lre);while(s.transactions_deleted>0);return i}o(ure,"deleteAuditLogsBefore");async function dre(e,t){let r=new bF;try{let n=e.dbis[ip.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:a}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=a[ip.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];ire.isEmpty(c)||(s=e.dbis[ip.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<a.hash_values.length;l++)s=e.dbis[ip.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>cre)break}return await s,r}catch(n){throw n}}o(dre,"deleteTransactions")});var CF=M((mLe,NF)=>{"use strict";var KI=class{static{o(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};NF.exports=KI});var PF=M((ELe,OF)=>{"use strict";var fre=di(),mre=tp(),hLe=CF(),Vi=(H(),D(W)),pre=oe(),YI=_t(),hre=$i(),Ere=ep(),_re=Qm(),{getSchemaPath:gre}=yt();OF.exports=Sre;async function Sre(e,t=!0){let r;e.schema===Vi.SYSTEM_SCHEMA_NAME?r=hre[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await yre(e),s=gre(e.schema,e.table),i=await YI.openEnvironment(s,e.table);return t===!0&&await Tre(e,i,r.hash_attribute),YI.dropDBI(i,e.attribute),n}o(Sre,"lmdbDropAttribute");async function Tre(e,t,r){let n=YI.openDBI(t,r),s,i=e.attribute;for(let{key:a,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(a,u,l)}await s}o(Tre,"removeAttributeFromAllObjects");async function yre(e){let t=new fre(Vi.SYSTEM_SCHEMA_NAME,Vi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Vi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Vi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Vi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await Ere(t)).filter(a=>a[Vi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(pre.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(a=>a[Vi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new mre(Vi.SYSTEM_SCHEMA_NAME,Vi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return _re(i)}o(yre,"dropAttributeFromSystem")});var xF=M((SLe,UF)=>{"use strict";var WI=_t(),Xu=$t(),gLe=Cn(),zI=(H(),D(W)),LF=oe(),{getTransactionAuditStorePath:Rre}=yt(),Are=ju(),yg=Yu(),bre=Q();UF.exports=Ire;async function Ire(e){let t=Rre(e.schema,e.table),r=await WI.openEnvironment(t,e.table,!0),n=WI.listDBIs(r);WI.initializeDBIs(r,Xu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case zI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return DF(r,e.search_values);case zI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,Nre(r,e.search_values,s);case zI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return wre(r,e.search_values);default:return DF(r)}}o(Ire,"readAuditLog");function DF(e,t=[0,Date.now()]){LF.isEmpty(t[0])&&(t[0]=0),LF.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Xu.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 yg,s))}o(DF,"searchTransactionsByTimestamp");function wre(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let a of e.dbis[Xu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(a);r.set(s,vF(e,i))}return Object.fromEntries(r)}o(wre,"searchTransactionsByUsername");function Nre(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=Are.equals(e,Xu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Xu.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=vF(e,s),a=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);MF(l,"records",r,d,a),MF(l,"original_records",r,d,a)}return Object.fromEntries(a)}o(Nre,"searchTransactionsByHashValues");function MF(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let c=e[t][a],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 yg(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new yg(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}o(MF,"loopRecords");function vF(e,t){let r=[];try{let n=e.dbis[Xu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let a=Object.assign(new yg,i);r.push(a)}}catch(i){bre.warn(i)}return r}catch(n){throw n}}o(vF,"batchSearchTransactions")});var FF=M((ALe,BF)=>{"use strict";var{getSchemaPath:yLe}=yt(),RLe=_t(),{database:Cre}=(Oe(),D(mt));BF.exports={writeTransaction:Ore};async function Ore(e,t,r){return Cre({database:e,table:t}).transaction(r)}o(Ore,"writeTransaction")});var GF=M((ILe,qF)=>{"use strict";var{getSchemaPath:kF}=yt(),HF=_t();qF.exports={flush:Pre,resetReadTxn:Lre};async function Pre(e,t){return(await HF.openEnvironment(kF(e,t),t.toString())).flushed}o(Pre,"flush");async function Lre(e,t){try{(await HF.openEnvironment(kF(e,t),t.toString())).resetReadTxn()}catch{}}o(Lre,"resetReadTxn")});var YF=M((NLe,KF)=>{"use strict";var{Readable:Dre}=require("stream"),{getDatabases:Mre}=(Oe(),D(mt)),{readSync:vre,openSync:Ure,createReadStream:$F}=require("fs"),{open:xre}=require("lmdb"),{OpenDBIObject:VF}=Gm(),Bre=$m(),{AUDIT_STORE_OPTIONS:Fre}=(Io(),D(ix)),{INTERNAL_DBIS_NAME:kre,AUDIT_STORE_NAME:Hre}=$t();KF.exports=Gre;var jI=32768,qre=100;async function Gre(e){let t=e.database||e.schema||"data",r=Mre()[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=xre({noSync:!0,maxDbs:Bre.MAX_DBS}),m,p=f.openDB(kre,new VF(!1)),h=d.useReadTransaction(),E=0,g=o(async function(S,R){R.encoding="binary",R.encoder=void 0;let N=f.openDB(S,R),O=d.openDB(S,R);for(let{key:F,version:ee,value:q}of O.getRange({start:null,transaction:h,versions:O.useVersions}))m=N.put(F,q,ee),E++%qre===0&&(await new Promise(k=>setTimeout(k,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:R}of d.getRange({transaction:h,start:!1}))if(s.some(N=>S.startsWith?.(N+"/"))){p.put(S,R);let[,N]=S.split("/"),O=!N,F=new VF(!O,O);await g(S,F)}e.include_audit&&await g(Hre,{...Fre}),await m;let A=$F(f.path);return A.headers=l(),A.on("close",()=>{h.done(),f.close()}),A}let a=r[Object.keys(r)[0]].primaryStore,c=Ure(a.path);return a.transaction(()=>{let u=Buffer.alloc(jI);vre(c,u,0,jI),a.resetReadTxn();let d=a.useReadTransaction();d.renew();let f=$F(null,{fd:c,start:jI}),m=new Dre.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}}o(Gre,"getBackup")});var jF=M((OLe,zF)=>{"use strict";var $re=Q(),{handleHDBError:Vre}=_e(),Kre=I0(),Yre=dg(),Wre=SI(),zre=cB(),jre=Qm(),Qre=wI(),Jre=vB(),Xre=$B(),Zre=ep(),ene=JB(),tne=cF(),rne=mF(),nne=hF(),sne=SF(),ine=wF(),one=vI(),ane=PF(),cne=xF(),lne=FF(),WF=GF(),une=YF(),QI=class extends Kre{static{o(this,"LMDBBridge")}async searchByConditions(t){return ene(t)}async getDataByHash(t){return await Qre(t)}async searchByHash(t){return await Jre(t)}async getDataByValue(t,r){return await Xre(t,r)}async searchByValue(t){return await Zre(t)}async createSchema(t){return await zre(t)}async dropSchema(t){return await tne(t)}async createTable(t,r){return await rne(t,r)}async dropTable(t){return await one(t)}async createAttribute(t){return await Yre(t)}async createRecords(t){return await Wre(t)}async updateRecords(t){return await nne(t)}async upsertRecords(t){try{return await sne(t)}catch(r){throw Vre(r,null,null,$re.ERR,r)}}async deleteRecords(t){return await jre(t)}async dropAttribute(t){return await ane(t)}async deleteAuditLogsBefore(t){return await ine(t)}async readAuditLog(t){return await cne(t)}writeTransaction(t,r,n){return lne.writeTransaction(t,r,n)}flush(t,r){return WF.flush(t,r)}resetReadTxn(t,r){return WF.resetReadTxn(t,r)}getBackup(t){return une(t)}};zF.exports=QI});function xn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function ap(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=o(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new is.ClientError(`${u} must be a string, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"ID":d=o(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(p=>typeof p=="string")||m==null&&l.nullable!==!1))throw new is.ClientError(`${u} must be a string, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Float":case"Number":d=o(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="number"||m==null&&l.nullable!==!1))throw new is.ClientError(`${u} must be a number, attempt to assign ${p}`);xn(this)[u]=m},"set");break;case"Int":d=o(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 is.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Long":d=o(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 is.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"BigInt":d=o(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 is.ClientError(`${u} must be a number, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Boolean":d=o(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new is.ClientError(`${u} must be a boolean, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Date":d=o(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 is.ClientError(`${u} must be a Date, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Bytes":d=o(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new is.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Blob":d=o(function(m){if(!(m instanceof ws||m==null&&l.nullable!==!1))throw new is.ClientError(`${u} must be a Blob, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Any":case void 0:d=o(function(m){xn(this)[u]=m},"set");break;default:d=o(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new is.ClientError(`${u} must be an object, attempt to assign ${m}`);xn(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=JI(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)}a("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]}),a("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new is.ClientError("Can not add a property to a sealed table schema");xn(this)[l]=u}),a("deleteProperty",function(l){xn(this)[l]=void 0}),a("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||a("get",n.getProperty),n.delete||a("delete",n.deleteProperty),n.then||a("then",null);function a(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}o(a,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?XF:JF);break}c=l}while(c&&c!==JF&&c!==XF)}function ZF(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(QF[t])return QF[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=JI(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function dne(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 JI(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends ml{static{o(this,"TrackedObject")}},ap(r,t)),new r(e)):new ml(e);case Array:let n=new Ag(e.length,e);for(let s=0,i=e.length;s<i;s++){let a=e[s];a&&typeof a=="object"&&(a=JI(a,t?.elements)),n[s]=a}return n;default:return e}}function bg(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 a=r[s];i=i.update(a)}else i=bg(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 qa(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 a=qa(i);a!==i&&r===e&&(r=e.slice(0)),i=a}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=qA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=qa(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)fne.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function Rg(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[fl]||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(Rg(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(Rg(s))return!0}else return!0}else return!0}}return!1}var is,QF,JF,XF,ml,fne,fl,Ag,op,XI=ie(()=>{is=w(_e());__();Ns();o(xn,"getChanges");o(ap,"assignTrackedAccessors");QF=Object.prototype,JF=new Proxy({},{get:ZF}),XF=new Proxy({},{get:ZF,set:dne});o(ZF,"getProxiedProperty");o(dne,"setProxiedProperty");o(JI,"trackObject");ml=class{static{o(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}};ap(ml,{},!0);o(bg,"collapseData");fne=Object.prototype.hasOwnProperty;o(qa,"updateAndFreeze");o(Rg,"hasChanges");fl=Symbol.for("has-array-changes"),Ag=class extends Array{static{o(this,"TrackedArray")}#e;[fl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[fl]=!0,super.splice(...t)}push(...t){return this[fl]=!0,super.push(...t)}pop(){return this[fl]=!0,super.pop()}unshift(...t){return this[fl]=!0,super.unshift(...t)}shift(){return this[fl]=!0,super.shift()}};Ag.prototype.constructor=Array;op=class{static{o(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var ak={};Ie(ak,{ResourceBridge:()=>tw});function rw({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 ek(e,t){let r=Ki(e),n=rw(e,r);if(!r)throw new fi.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},a;Rt(i,()=>new Promise(u=>a=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&&bg(d)}catch(f){d={message:(0,ok.errorToString)(f)}}return t?{value:{key:u,value:d}}:{value:d}}else return a(),{done:!0}},return(u){return a(),{value:u,done:!0}},throw(u){return a(),{done:!0}}}}}}function Ki(e){let t=e.database||e.schema||pne,r=at()[t];if(!r)throw(0,fi.handleHDBError)(new Error,mne.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function tk(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*rk(e,t,r,n){let s,i=0;for await(let a of e.getHistory(t,r)){let c=a.operation??a.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=a;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:a.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var nk,Ig,fi,sk,ZI,ew,ik,ok,mne,pne,hne,Ene,tw,ck=ie(()=>{nk=w(jF()),Ig=w(Qu()),fi=w(_e());Oe();sk=w(Wm());H();ZI=w(ko()),ew=w(ns()),ik=w(oe());Ca();XI();ok=w(Q()),{HDB_ERROR_MSGS:mne}=fi.hdbErrors,pne="data",hne=1e4,Ene=10,tw=class extends nk.default{static{o(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=Ki(t);if(!r)throw new fi.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 a=i;return{attribute:a.attribute??a.search_attribute,comparator:a.comparator??a.search_type,value:a.value!==void 0?a.value:a.search_value}}}o(n,"mapCondition");let s=(0,Ig.default)(t,"conditions");if(s)throw(0,fi.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:rw(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 a of n)a.is_primary_key?(a.isPrimaryKey=!0,delete a.is_primary_key):a.name===i&&i&&(a.isPrimaryKey=!0);else{if(!i)throw new fi.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Xe({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Ki(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Ki(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=o((a,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(a,l,()=>r.primaryStore.put(a,c,l)).then(u=>{if(!u){let{value:d,version:f}=r.primaryStore.getEntry(a);return i(a,d,f)}})),"deleteRecord");for(let{key:a,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(a,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){return Ki(t).dropTable()}createSchema(t){return Zu({database:t.schema,table:null}),ZI.signalSchemaChange(new ew.SchemaEventMsg(process.pid,V.CREATE_SCHEMA,t.schema))}async dropSchema(t){await nw(t.schema),ZI.signalSchemaChange(new ew.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,sk.default)(t),s,i=at()[t.schema][t.table],a={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(a.replicateTo=t.replicateTo),t.replicatedConfirmation&&(a.replicatedConfirmation=t.replicatedConfirmation),Rt(a,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,a);if(t.requires_existing&&!m||t.requires_no_existing&&m){u.push(d[i.primaryKey]);continue}m&&(m=bg(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,a):i.put(d,a)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=at()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),Rt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),a=[],c=[];for(let l of i)await r.delete(l,n)?a.push(l):c.push(l);return tk(a,c,s.timestamp)})}async deleteRecordsBefore(t){let r=at()[t.schema][t.table];if(!r.createdTimeProperty)throw new fi.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:JE.LESS}]}),s=!1,i=[],a=[],c=0,l=[],u=o(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),a.push(...d.skipped_hashes),await(0,ik.asyncSetTimeout)(Ene),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%hne===0&&await u();return l.length>0&&await u(),s?tk(i,a,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Ig.default)(t,"hashes");if(r)throw r;return ek(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of ek(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&yA[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,Ig.default)(t,"value");if(n)throw n;let s=Ki(t);if(!s)throw new fi.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===JE.BETWEEN&&(i=[i,t.end_value]);let a=i==="*"?[]:[{attribute:t.attribute,value:i,comparator:r}];return s.search({conditions:a,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:rw(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Ki(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){Ki({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Ki(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Ki(t),n={};switch(t.search_type){case XE.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let a=i.operation??i.type;return a==="put"&&(a="upsert"),{operation:a,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case XE.USERNAME:{let s=t.search_values;for await(let i of rk(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return rk(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};o(rw,"getSelect");o(ek,"getRecords");o(Ki,"getTable");o(tk,"createDeleteResponse");o(rk,"groupRecordsInHistory")});var os=M((HLe,lk)=>{"use strict";var{ResourceBridge:_ne}=(ck(),D(ak)),gne=ue();gne.initSync();var wg;function Sne(){return wg||(wg=new _ne,wg)}o(Sne,"getBridge");lk.exports=Sne()});var mi=M((GLe,fk)=>{var Tne=$i(),{promisify:yne}=require("util"),{getDatabases:dk}=(Oe(),D(mt));fk.exports={setSchemaDataToGlobal:uk,getTableSchema:Rne,getSystemSchema:Ane,setSchemaDataToGlobalAsync:yne(uk)};function uk(e){global.hdb_schema=dk(),e&&e()}o(uk,"setSchemaDataToGlobal");function Rne(e,t,r){let n=dk()[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`)}o(Rne,"getTableSchema");function Ane(){return Tne}o(Ane,"getSystemSchema")});var Bn=M((VLe,Ek)=>{"use strict";var Cg=tI(),Qr=oe(),bne=require("util"),Og=os(),Ine=mi(),mk=Q(),{handleHDBError:pl,hdbErrors:wne}=_e(),{HTTP_STATUS_CODES:hl}=wne,Nne=bne.promisify(Ine.getTableSchema),Cne="updated",pk="inserted",hk="upserted";Ek.exports={insert:Pne,update:Lne,upsert:Dne,validation:One,flush:Mne};async function One(e){if(Qr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Qr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Qr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Nne(e.schema,e.table),r=Cg(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={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(c=>{if(a&&Qr.isEmptyOrZeroLength(c[n]))throw mk.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(!Qr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw mk.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Qr.isEmpty(c[n])&&c[n]!==""&&s.has(Qr.autoCast(c[n]))&&(c.skip=!0),s.add(Qr.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)}}o(One,"validation");async function Pne(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Cg(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Og.createRecords(e);return Ng(pk,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}o(Pne,"insertData");async function Lne(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Cg(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Og.updateRecords(e);return Qr.isEmpty(n.existing_rows)?Ng(Cne,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Ng(n.update_action,[],e,n.hashes,void 0,n.txn_time)}o(Lne,"updateData");async function Dne(e){if(e.operation!=="upsert")throw pl(new Error,"invalid operation, must be upsert",hl.INTERNAL_SERVER_ERROR);let t=Cg(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Og.upsertRecords(e);return Ng(hk,n.written_hashes,e,[],n.new_attributes,n.txn_time)}o(Dne,"upsertData");function Ng(e,t,r,n,s,i){let a={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===pk?(a.inserted_hashes=t,a.skipped_hashes=n,a):e===hk?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=n,a)}o(Ng,"returnObject");function Mne(e){return Qr.transformReq(e),Og.flush(e.schema,e.table)}o(Mne,"flush")});var iw=M((YLe,Sk)=>{var vne=ft(),sw=require("joi"),{hdbTable:Une,hdbDatabase:_k}=qi(),gk={schema:_k,database:_k,table:Une},xne={date:sw.date().iso().required()},Bne={timestamp:sw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Sk.exports=function(e,t){let r=t==="timestamp"?{...gk,...Bne}:{...gk,...xne},n=sw.object(r);return vne.validateBySchema(e,n)}});var Rk=M((WLe,yk)=>{var Fne=ft(),ow=require("joi"),{hdbTable:kne,hdbDatabase:Tk}=qi(),Hne=ow.object({schema:Tk,database:Tk,table:kne,hash_values:ow.array().required(),ids:ow.array()});yk.exports=function(e){return Fne.validateBySchema(e,Hne)}});var uw=M((zLe,Ak)=>{"use strict";var aw=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},cw=class{static{o(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,a){this.schema=t,this.table=r,this.attribute=n,this.hash_attribute=s,this.get_attributes=i,this.value=a}},lw=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Ak.exports={InsertObject:aw,NoSQLSeachObject:cw,DeleteResponseObject:lw}});var gl=M((QLe,Ck)=>{"use strict";var Ik=iw(),qne=Rk(),El=oe(),bk=require("moment"),wk=Q(),{promisify:Gne,callbackify:$ne}=require("util"),_l=(H(),D(W)),Vne=mi(),dw=Gne(Vne.getTableSchema),fw=os(),{DeleteResponseObject:Kne}=uw(),{handleHDBError:Ga,hdbErrors:Yne}=_e(),{HDB_ERROR_MSGS:Pg,HTTP_STATUS_CODES:$a}=Yne,Wne="records successfully deleted",zne=$ne(Nk);Ck.exports={delete:zne,deleteRecord:Nk,deleteFilesBefore:jne,deleteAuditLogsBefore:Qne};async function jne(e){let t=Ik(e,"date");if(t)throw Ga(t,t.message,$a.BAD_REQUEST,void 0,void 0,!0);if(El.transformReq(e),!bk(e.date,bk.ISO_8601).isValid())throw Ga(new Error,Pg.INVALID_DATE,$a.BAD_REQUEST,_l.LOG_LEVELS.ERROR,Pg.INVALID_DATE,!0);let n=El.checkSchemaTableExist(e.schema,e.table);if(n)throw Ga(new Error,n,$a.NOT_FOUND,_l.LOG_LEVELS.ERROR,n,!0);let s=await fw.deleteRecordsBefore(e);if(await dw(e.schema,e.table),wk.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}o(jne,"deleteFilesBefore");async function Qne(e){let t=Ik(e,"timestamp");if(t)throw Ga(t,t.message,$a.BAD_REQUEST,void 0,void 0,!0);if(El.transformReq(e),isNaN(e.timestamp))throw Ga(new Error,Pg.INVALID_VALUE("Timestamp"),$a.BAD_REQUEST,_l.LOG_LEVELS.ERROR,Pg.INVALID_VALUE("Timestamp"),!0);let r=El.checkSchemaTableExist(e.schema,e.table);if(r)throw Ga(new Error,r,$a.NOT_FOUND,_l.LOG_LEVELS.ERROR,r,!0);let n=await fw.deleteAuditLogsBefore(e);return await dw(e.schema,e.table),wk.info(`Finished deleting audit logs before ${e.timestamp}`),n}o(Qne,"deleteAuditLogsBefore");async function Nk(e){e.ids&&(e.hash_values=e.ids);let t=qne(e);if(t)throw Ga(t,t.message,$a.BAD_REQUEST,void 0,void 0,!0);El.transformReq(e);let r=El.checkSchemaTableExist(e.schema,e.table);if(r)throw Ga(new Error,r,$a.NOT_FOUND,_l.LOG_LEVELS.ERROR,r,!0);try{await dw(e.schema,e.table);let n=await fw.deleteRecords(e);return El.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Wne}`),n}catch(n){if(n.message===_l.SEARCH_NOT_FOUND_MESSAGE){let s=new Kne;return s.message=_l.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}o(Nk,"deleteRecord")});var _w={};Ie(_w,{HASH_FUNCTION:()=>kr,hash:()=>hw,validate:()=>Ew});function mw(e=lp){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(cp.randomBytes(e)).map(r=>t[r%t.length]).join("")}function hw(e,t=kr[Pk?.toUpperCase()]??kr.SHA256){return pw[t](e)}function Ew(e,t,r=kr[Pk?.toUpperCase()]??kr.SHA256){return e?Jne[r](e,t):!1}var cp,ed,Ok,Pk,lp,Lk,kr,pw,Jne,gw=ie(()=>{cp=w(require("node:crypto")),ed=w(require("argon2")),Ok=w(ue());H();Pk=(0,Ok.get)(B.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),lp=16,Lk=9,kr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};o(mw,"generateSalt");pw={[kr.MD5]:(e,t=void 0)=>{t=t??mw(Lk);let r=cp.createHash(kr.MD5).update(e+t).digest("hex");return t+r},[kr.SHA256]:(e,t=void 0)=>{t=t??mw(lp);let r=cp.createHash(kr.SHA256).update(e+t).digest("hex");return t+r},[kr.ARGON2ID]:async e=>{let t=mw(lp),r=await ed.hash(e,{type:ed.argon2id,salt:Buffer.from(t)});return t+r}},Jne={[kr.MD5]:(e,t)=>{let r=e.slice(0,Lk);return e===pw[kr.MD5](t,r)},[kr.SHA256]:(e,t)=>{let r=e.slice(0,lp);return e===pw[kr.SHA256](t,r)},[kr.ARGON2ID]:async(e,t)=>await ed.verify(e.slice(lp),t)};o(hw,"hash");o(Ew,"validate")});var Mk=M((eDe,Dk)=>{var Sw=ft(),dn={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 Xne(e){return dn.password.presence=!0,dn.username.presence=!0,dn.role.presence=!0,dn.active.presence=!0,Sw.validateObject(e,dn)}o(Xne,"addUserValidation");function Zne(e){return dn.password.presence=!1,dn.username.presence=!0,dn.role.presence=!1,dn.active.presence=!1,Sw.validateObject(e,dn)}o(Zne,"alterUserValidation");function ese(e){return dn.password.presence=!1,dn.username.presence=!0,dn.role.presence=!1,dn.active.presence=!1,Sw.validateObject(e,dn)}o(ese,"dropUserValidation");Dk.exports={addUserValidation:Xne,alterUserValidation:Zne,dropUserValidation:ese}});var Yk=M((nDe,Kk)=>{"use strict";var Tw=require("recursive-iterator"),tse=require("alasql"),yw=require("clone"),vk=oe(),{handleHDBError:Uk,hdbErrors:rse}=_e(),{HDB_ERROR_MSGS:xk,HTTP_STATUS_CODES:Bk}=rse,{getDatabases:nse}=(Oe(),D(mt)),sse=["DISTINCT_ARRAY"],Fk=Symbol("validateTables"),Rw=Symbol("validateTable"),rDe=Symbol("getAllColumns"),kk=Symbol("validateAllColumns"),Lg=Symbol("findColumn"),Hk=Symbol("validateOrderBy"),up=Symbol("validateSegment"),Aw=Symbol("validateColumn"),qk=Symbol("setColumnsForTable"),Gk=Symbol("checkColumnsForAsterisk"),$k=Symbol("validateGroupBy"),Vk=Symbol("hasColumns"),bw=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Fk](),this[Gk](),this[kk]()}[Fk](){if(this[Vk]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Rw](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Rw](t.table)})}}[Vk](){let t=!1,r=new Tw(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Rw](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=nse();if(!r[t.databaseid])throw Uk(new Error,xk.SCHEMA_NOT_FOUND(t.databaseid),Bk.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Uk(new Error,xk.TABLE_NOT_FOUND(t.databaseid,t.tableid),Bk.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=yw(s);i.table=yw(t),this.attributes.push(i)})}[Lg](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)}[Gk](){let t=new Tw(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[qk](r.tableid)}[qk](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new tse.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[kk](){this[up](this.statement.columns,!1),this[up](this.statement.joins,!1),this[up](this.statement.where,!1),this[$k](this.statement.group,!1),this[up](this.statement.order,!0)}[up](t,r){if(!t)return;let n=new Tw(t),s=[];for(let{node:i,path:a}of n)!vk.isEmpty(i)&&!vk.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Hk](i):s.push(this[Aw](i)));return s}[$k](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&sse.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=yw(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Lg](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,a)=>{if(i.toString()===n.toString()){s=i,r.splice(a,1);return}});else{let i=this[Lg](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((a,c)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){s=a,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`}[Hk](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[Aw](t)}[Aw](t){let r=this[Lg](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]}};Kk.exports=bw});var Qk=M((iDe,jk)=>{"use strict";var Wk=require("lodash"),dp=require("mathjs"),ise=require("jsonata"),zk=oe();jk.exports={distinct_array:o(e=>Array.isArray(e)&&e.length>1?Wk.uniqWith(e,Wk.isEqual):e,"distinct_array"),searchJSON:ose,mad:fp.bind(null,dp.mad),mean:fp.bind(null,dp.mean),mode:fp.bind(null,dp.mode),prod:fp.bind(null,dp.prod),median:fp.bind(null,dp.median)};function fp(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}o(fp,"aggregateFunction");function ose(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(zk.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),zk.isEmpty(this.__ala__.res[r])){let n=ise(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}o(ose,"searchJSON")});var Xk=M((aDe,Jk)=>{"use strict";var dr=require("moment"),Iw="YYYY-MM-DDTHH:mm:ss.SSSZZ";dr.suppressDeprecationWarnings=!0;Jk.exports={current_date:o(()=>dr().utc().format("YYYY-MM-DD"),"current_date"),current_time:o(()=>dr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:o((e,t)=>{switch(t.toLowerCase()){case"year":return dr(e).utc().format("YYYY");case"month":return dr(e).utc().format("MM");case"day":return dr(e).utc().format("DD");case"hour":return dr(e).utc().format("HH");case"minute":return dr(e).utc().format("mm");case"second":return dr(e).utc().format("ss");case"millisecond":return dr(e).utc().format("SSS");default:break}},"extract"),date:o(e=>dr(e).utc().format(Iw),"date"),date_format:o((e,t)=>dr(e).utc().format(t),"date_format"),date_add:o((e,t,r)=>dr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:o((e,t,r)=>dr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:o((e,t,r)=>{let n=dr(e).utc(),s=dr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:o(()=>dr().utc().valueOf(),"now"),get_server_time:o(()=>dr().format(Iw),"get_server_time"),offset_utc:o((e,t)=>dr(e).utc().utcOffset(t).format(Iw),"offset_utc")}});var rH=M((lDe,tH)=>{"use strict";var ase=require("@turf/area"),cse=require("@turf/length"),lse=require("@turf/circle"),use=require("@turf/difference"),dse=require("@turf/distance"),fse=require("@turf/boolean-contains"),mse=require("@turf/boolean-equal"),pse=require("@turf/boolean-disjoint"),hse=require("@turf/helpers"),Zk=(H(),D(W)),ze=oe(),Go=Q();tH.exports={geoArea:Ese,geoLength:_se,geoCircle:gse,geoDifference:Sse,geoDistance:eH,geoNear:Tse,geoContains:yse,geoEqual:Rse,geoCrosses:Ase,geoConvert:bse};function Ese(e){if(ze.isEmpty(e))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return ase.default(e)}catch(t){return Go.trace(t,e),NaN}}o(Ese,"geoArea");function _se(e,t){if(ze.isEmpty(e))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return cse.default(e,{units:t||"kilometers"})}catch(r){return Go.trace(r,e),NaN}}o(_se,"geoLength");function gse(e,t,r){if(ze.isEmpty(e))return NaN;if(ze.isEmpty(t))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return lse.default(e,t,{units:r||"kilometers"})}catch(n){return Go.trace(n,e,t),NaN}}o(gse,"geoCircle");function Sse(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 use(e,t)}catch(r){return Go.trace(r,e,t),NaN}}o(Sse,"geoDifference");function eH(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 dse.default(e,t,{units:r||"kilometers"})}catch(n){return Go.trace(n,e,t),NaN}}o(eH,"geoDistance");function Tse(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 eH(e,t,n)<=r}catch(s){return Go.trace(s,e,t),!1}}o(Tse,"geoNear");function yse(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 fse.default(e,t)}catch(r){return Go.trace(r,e,t),!1}}o(yse,"geoContains");function Rse(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 mse.default(e,t)}catch(r){return Go.trace(r,e,t),!1}}o(Rse,"geoEqual");function Ase(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!pse.default(e,t)}catch(r){return Go.trace(r,e,t),!1}}o(Ase,"geoCrosses");function bse(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(Zk.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(Zk.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=ze.autoCastJSON(e)),hse[t](e,r)}o(bse,"geoConvert")});var Dg=M((dDe,nH)=>{var Sl=Qk(),as=Xk(),Yi=rH();nH.exports=e=>{e.aggr.mad=e.aggr.MAD=Sl.mad,e.aggr.mean=e.aggr.MEAN=Sl.mean,e.aggr.mode=e.aggr.MODE=Sl.mode,e.aggr.prod=e.aggr.PROD=Sl.prod,e.aggr.median=e.aggr.MEDIAN=Sl.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Sl.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Sl.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=as.current_date,e.fn.current_time=e.fn.CURRENT_TIME=as.current_time,e.fn.extract=e.fn.EXTRACT=as.extract,e.fn.date=e.fn.DATE=as.date,e.fn.date_format=e.fn.DATE_FORMAT=as.date_format,e.fn.date_add=e.fn.DATE_ADD=as.date_add,e.fn.date_sub=e.fn.DATE_SUB=as.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=as.date_diff,e.fn.now=e.fn.NOW=as.now,e.fn.offset_utc=e.fn.OFFSET_UTC=as.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=as.get_server_time,e.fn.getdate=e.fn.GETDATE=as.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=as.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Yi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Yi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Yi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Yi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Yi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Yi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Yi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Yi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Yi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Yi.geoNear}});var aH=M((fDe,oH)=>{"use strict";var mp=require("lodash"),Fn=require("alasql");Fn.options.cache=!1;var Ise=Dg(),sH=require("clone"),Mg=require("recursive-iterator"),Ve=Q(),st=oe(),td=os(),wse=(H(),D(W)),{hdbErrors:Nse}=_e(),{getDatabases:iH}=(Oe(),D(mt)),Cse="IS NULL",pi="There was a problem performing this search. Please check the logs and try again.";Ise(Fn);var ww=class{static{o(this,"SQLSearch")}constructor(t,r){if(st.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(),st.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!st.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(pi)}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(pi)}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(pi)}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(pi)}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(pi)}}_getColumns(){let t=new Mg(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(sH(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=mp.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=iH()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(st.isEmpty(this.statement.where)){Ve.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Mg(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!st.isEmpty(r)&&r.right)if(st.isNotEmptyAndHasValue(r.right.value)){let n=st.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Fn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=st.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Fn.yy.LogicValue({value:i}):n instanceof Fn.yy.StringValue&&st.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Fn.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 Mg(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 a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!st.isEmpty(wse.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(st.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(st.isEmptyOrZeroLength(r.left.columnid)||st.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,value:r.right.value})}continue}if(st.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let c=!1;switch(r.op){case"=":!st.isEmpty(r.right.value)||!st.isEmpty(r.left.value)?n.add(st.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[a].ignore=c,c?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...n])}}}_setAliasesForColumns(){if(st.isEmptyOrZeroLength(this.all_table_attributes)&&st.isEmptyOrZeroLength(this.statement.from)&&st.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&mp.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(st.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);st.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(st.isEmptyOrZeroLength(this.all_table_attributes)&&!st.isEmptyOrZeroLength(this.columns.columns))return t;if(st.isEmptyOrZeroLength(this.all_table_attributes)&&st.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Fn.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(sH(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__mergedAttributes.push(r),this.data[t].__mergedAttrMap[r]=this.data[t].__mergedAttributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__mergedData[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__mergedAttrMap[n];this.data[t].__mergedData[r].splice(i,1,s)}async _getFetchAttributeValues(){if(st.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(Cse)>-1&&this.tables.forEach(s=>{let i={columnid:iH()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=mp.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 a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[a].__hashName;return s[a]||(s[a]=[],s[a].push(null),this._addColumnToMergedAttributes(a,c)),i.attribute!==c&&(s[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,a=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===a&&(l=!0),!st.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!st.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await td.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(pi)}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 td.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(pi)}else if(!st.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!st.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let f=0,m=d.length;f<m;f++){let p=d[f];c.attribute=p.attribute,c.value=p.value;let h=await td.getDataByValue(c,p.operation);if(l)for(let[E]of h)this.data[i].__mergedData[E]||(this.data[i].__mergedData[E]=[...n[i]],this._setMergedHashAttribute(i,E));else for(let[E,g]of h)this.data[i].__mergedData[E]?this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]):(this.data[i].__mergedData[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,E))}}catch(d){throw Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ve.error(d),new Error(pi)}else try{c.attribute=s.attribute,c.value="*";let d=await td.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(pi)}}}_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 Fn.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,a=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===a});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 Fn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Fn.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 Fn.yy.FuncValue:new Fn.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 a=[],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;a.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 Fn.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];a.forEach(g=>{E[g.key]!==null&&E[g.key]!==void 0&&g.keys.add(E[g.key])})}a.forEach(p=>{let h=Object.keys(this.data[`${p.schema}_${p.table}`].__mergedData),E=mp.difference(h,[...p.keys].map(g=>g.toString()));for(let g=0,A=E.length;g<A;g++){let S=E[g];delete this.data[`${p.schema}_${p.table}`].__mergedData[S]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Mg(this.columns);for(let{node:i}of s)if(i&&i.columnid){let a=this._findColumn(i);if(a){let c=a.table.as?a.table.as:a.table.tableid;(!t[c]||t[c].indexOf(a.attribute)<0)&&n.push(a)}}n=mp.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(pi)}}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,a=[];for(let d in i)a.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:a,get_attributes:s.columns},l=await td.getDataByHash(c),u=s.columns.length;for(let d=0,f=a.length;d<f;d++){let m=a[d],p=l.get(m);for(let h=0;h<u;h++){let E=s.columns[h],g=p[E]===void 0?null:p[E];this.data[n].__mergedData[m].push(g)}}}}catch(r){throw 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(a=>{let c=a.aggregatorid?a.expression:a,l=a.aggregatorid?a.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 Fn.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(Nse.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((a,c)=>{let l=s[i],u=new RegExp(`${l}.\`${a}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=new RegExp(`\`${a}\``,"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 a=await td.getDataByValue(i);for(let[c,l]of a)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(a){throw Ve.error("There was an error when processing this SQL operation. Check your logs"),Ve.error(a),new Error(pi)}}return Object.values(Object.values(this.data)[0].__mergedData)}};oH.exports=ww});var fn=M((pDe,cH)=>{"use strict";var Ose=Yk();cH.exports={searchByConditions:Lse,searchByHash:Dse,searchByValue:Mse,search:vse};var Nw=os(),{transformReq:Cw}=oe(),Pse=aH();async function Lse(e){return Cw(e),Nw.searchByConditions(e)}o(Lse,"searchByConditions");async function Dse(e){Cw(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Nw.searchByHash(e))r&&t.push(r);return t}o(Dse,"searchByHash");async function Mse(e){Cw(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Nw.searchByValue(e))t.push(r);return t}o(Mse,"searchByValue");function vse(e,t){try{let r=new Ose(e);r.validate(),new Pse(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}o(vse,"search")});var Wi=M((EDe,fH)=>{"use strict";var pp=require("crypto"),Use=ue(),{CONFIG_PARAMS:xse}=(H(),D(W)),uH="aes-256-cbc",Bse=32,Fse=16,Ow=64,dH=32,kse=Ow+dH,lH=new Map;fH.exports={encrypt:Hse,decrypt:qse,createNatsTableStreamName:Gse};function Hse(e){let t=pp.randomBytes(Bse),r=pp.randomBytes(Fse),n=pp.createCipheriv(uH,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),a=r.toString("hex"),c=s.toString("hex");return i+a+c}o(Hse,"encrypt");function qse(e){let t=e.substr(0,Ow),r=e.substr(Ow,dH),n=e.substr(kse,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),a=pp.createDecipheriv(uH,Buffer.from(t,"hex"),s),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(qse,"decrypt");function Gse(e,t){let r=Use.get(xse.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=lH.get(r);return n||(n=pp.createHash("md5").update(r).digest("hex"),lH.set(r,n)),n}o(Gse,"createNatsTableStreamName")});var wt=M((SDe,pH)=>{"use strict";var{platform:gDe}=require("os"),$se="nats-server.zip",Pw="nats-server",Vse=process.platform==="win32"?`${Pw}.exe`:Pw,Kse=/^[^\s.,*>]+$/,mH="__request__",Yse=o(e=>`${e}.${mH}`,"REQUEST_SUBJECT"),Wse={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},zse={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},jse={HUB:"hub.pid",LEAF:"leaf.pid"},Qse={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Jse={SUCCESS:"success",ERROR:"error"},Xse={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Zse={TXN:"txn",MSGID:"msgid"},rd={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},eie={[rd.ERR]:1,[rd.WRN]:2,[rd.INF]:3,[rd.DBG]:4,[rd.TRC]:5},tie={debug:"-D",trace:"-DVV"};pH.exports={NATS_SERVER_ZIP:$se,NATS_SERVER_NAME:Pw,NATS_BINARY_NAME:Vse,PID_FILES:jse,NATS_CONFIG_FILES:zse,SERVER_SUFFIX:Qse,NATS_TERM_CONSTRAINTS_RX:Kse,REQUEST_SUFFIX:mH,UPDATE_REMOTE_RESPONSE_STATUSES:Jse,CLUSTER_STATUS_STATUSES:Xse,REQUEST_SUBJECT:Yse,SUBJECT_PREFIXES:Zse,MSG_HEADERS:Wse,LOG_LEVELS:rd,LOG_LEVEL_FLAGS:tie,LOG_LEVEL_HIERARCHY:eie}});var kn=M((yDe,Hr)=>{"use strict";var _H="username is required",gH="nothing to update, must supply active, role or password to update",SH="password cannot be an empty string",TH="If role is specified, it cannot be empty.",yH="active must be true or false";Hr.exports.addUser=uie;Hr.exports.alterUser=die;Hr.exports.dropUser=mie;Hr.exports.getSuperUser=gie;Hr.exports.userInfo=pie;Hr.exports.listUsers=Ug;Hr.exports.listUsersExternal=hie;Hr.exports.setUsersWithRolesCache=Tl;Hr.exports.findAndValidateUser=kw;Hr.exports.getClusterUser=Sie;Hr.exports.getUsersWithRolesCache=_ie;Hr.exports.USERNAME_REQUIRED=_H;Hr.exports.ALTERUSER_NOTHING_TO_UPDATE=gH;Hr.exports.EMPTY_PASSWORD=SH;Hr.exports.EMPTY_ROLE=TH;Hr.exports.ACTIVE_BOOLEAN=yH;var RH=Bn(),rie=gl(),hp=(gw(),D(_w)),AH=Mk(),Ep=fn(),Uw=ko(),zi=oe(),bH=require("validate.js"),xw=Q(),{promisify:nie}=require("util"),Bw=Wi(),Dw=(H(),D(W)),hH=wt(),sie=Tt(),iie=ue(),oie=$i(),{hdbErrors:aie,ClientError:hi}=_e(),{HTTP_STATUS_CODES:$o,AUTHENTICATION_ERROR_MSGS:Lw,HDB_ERROR_MSGS:nd}=aie,{UserEventMsg:Fw}=ns(),Mw=require("lodash"),{server:vg}=(xr(),D(rm)),cie=Q();vg.getUser=(e,t)=>kw(e,t,t!=null);vg.authenticateUser=(e,t)=>kw(e,t);var IH={username:!0,active:!0,role:!0,password:!0},EH=new Map,lie=nie(rie.delete),vw=iie.get(Dw.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??hp.HASH_FUNCTION.SHA256,ji;async function uie(e){let t=bH.cleanAttributes(e,IH),r=AH.addUserValidation(t);if(r)throw new hi(r.message);let n=await Ep.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new hi(nd.ROLE_NAME_NOT_FOUND(t.role),$o.NOT_FOUND);if(n.length>1)throw new hi(nd.DUP_ROLES_FOUND(t.role),$o.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=Bw.encrypt(t.password)),t.password=await hp.hash(t.password,vw),t.hash_function=vw,t.role=n[0].id;let s=await RH.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(xw.debug(s),await Tl(),s.skipped_hashes.length===1)throw new hi(nd.USER_ALREADY_EXISTS(t.username),$o.CONFLICT);return Uw.signalUserChange(new Fw(process.pid)),`${t.username} successfully added`}o(uie,"addUser");async function die(e){let t=bH.cleanAttributes(e,IH);if(zi.isEmptyOrZeroLength(t.username))throw new Error(_H);if(zi.isEmptyOrZeroLength(t.password)&&zi.isEmptyOrZeroLength(t.role)&&zi.isEmptyOrZeroLength(t.active))throw new Error(gH);if(!zi.isEmpty(t.password)&&zi.isEmptyOrZeroLength(t.password.trim()))throw new Error(SH);if(!zi.isEmpty(t.active)&&!zi.isBoolean(t.active))throw new Error(yH);if(!zi.isEmpty(t.password)&&!zi.isEmptyOrZeroLength(t.password.trim())&&(fie(t.username)&&(t.hash=Bw.encrypt(t.password)),t.password=await hp.hash(t.password,vw)),t.role==="")throw new Error(TH);if(t.role){let n=await Ep.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new hi(nd.ALTER_USER_ROLE_NOT_FOUND(t.role),$o.NOT_FOUND);if(n.length>1)throw new hi(nd.DUP_ROLES_FOUND(t.role),$o.CONFLICT);t.role=n[0].id}let r=await RH.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Tl(),Uw.signalUserChange(new Fw(process.pid)),r}o(die,"alterUser");function fie(e){let t=!1,r=ji.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(fie,"isClusterUser");async function mie(e){let t=AH.dropUserValidation(e);if(t)throw new hi(t.message);if(ji.get(e.username)===void 0)throw new hi(nd.USER_NOT_EXIST(e.username),$o.NOT_FOUND);let r=await lie({table:"hdb_user",schema:"system",hash_values:[e.username]});return xw.debug(r),await Tl(),Uw.signalUserChange(new Fw(process.pid)),`${e.username} successfully deleted`}o(mie,"dropUser");async function pie(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=Mw.cloneDeep(e.hdb_user);let r=await Ep.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}o(pie,"userInfo");async function hie(){let e=await Ug();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}o(hie,"listUsersExternal");async function Ug(){let e=await Ep.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=Mw.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Ep.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=Mw.cloneDeep(s),s.role=t[s.role],Eie(s.role),n.set(s.username,s);return n}o(Ug,"listUsers");function Eie(e){if(!e){xw.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(oie)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}o(Eie,"appendSystemTablesToRole");async function Tl(e=void 0){e?ji=e:ji=await Ug()}o(Tl,"setUsersWithRolesCache");async function _ie(){return ji||await Tl(),ji}o(_ie,"getUsersWithRolesCache");async function kw(e,t,r=!0){ji||await Tl();let n=ji.get(e);if(!n){if(!r)return{username:e};throw new hi(Lw.GENERIC_AUTH_FAIL,$o.UNAUTHORIZED)}if(n&&!n.active)throw new hi(Lw.USER_INACTIVE,$o.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(EH.get(t)===n.password)return s;{let i=hp.validate(n.password,t,n.hash_function||hp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)EH.set(t,n.password);else throw new hi(Lw.GENERIC_AUTH_FAIL,$o.UNAUTHORIZED)}}return s}o(kw,"findAndValidateUser");async function gie(){ji||await Tl();for(let[,e]of ji)if(e.role.role==="super_user")return e}o(gie,"getSuperUser");async function Sie(){let e=await Ug(),t=sie.getConfigFromFile(Dw.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==Dw.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=Bw.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+hH.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+hH.SERVER_SUFFIX.ADMIN,r}o(Sie,"getClusterUser");var wH=[];vg.invalidateUser=function(e){for(let t of wH)try{t(e)}catch(r){cie.error("Error invalidating user",r)}};vg.onInvalidatedUser=function(e){wH.push(e)}});var Ge,sd=ie(()=>{Ge={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var id,Hw=ie(()=>{sd();id=class{static{o(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!==Ge.ERROR&&(this.error=void 0)}markHealthy(t){this.updateStatus(Ge.HEALTHY,t||"Component is healthy")}markError(t,r){this.status=Ge.ERROR,this.error=t,this.message=r||(typeof t=="string"?t:t.message),this.lastChecked=new Date}markWarning(t){this.updateStatus(Ge.WARNING,t)}markLoading(t){this.updateStatus(Ge.LOADING,t||"Component is loading")}isHealthy(){return this.status===Ge.HEALTHY}hasError(){return this.status===Ge.ERROR}isLoading(){return this.status===Ge.LOADING}hasWarning(){return this.status===Ge.WARNING}getSummary(){let t=this.status.toUpperCase(),r=this.message?`: ${this.message}`:"";return`${t}${r}`}}});var yl,Va,qw,od,Gw,ad,$w,xg=ie(()=>{yl=w(Kr()),Va=class extends Error{static{o(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=yl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},qw=class extends Va{static{o(this,"CrossThreadTimeoutError")}requestId;timeoutMs;collectedCount;constructor(t,r,n){super(`Component status collection timeout after ${r}ms. Collected ${n} responses for request ${t}.`,yl.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},od=class extends Va{static{o(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,yl.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},Gw=class extends Va{static{o(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,yl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},ad=class extends Va{static{o(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,yl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},$w=class extends Va{static{o(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,yl.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 NH,Rl,CH,Ka,_p,cd,Tie,Bg,Vw=ie(()=>{NH=w(ns()),Rl=w(nt());H();CH=w(Zn());sd();xg();Ka=(0,CH.loggerWithTag)("componentStatus.crossThread"),_p=class{static{o(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,Rl.onMessageByType)(ZE.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;Ka.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&&(Ka.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 a=((0,Rl.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,g=o(()=>{let R=this.awaitingResponses.get(r);R&&R.length>=a&&!E&&(E=!0,S(),Ka.trace?.(`Collected all ${R.length} expected responses for request ${r}`),p(R))},"checkComplete"),A=setTimeout(()=>{if(!E){E=!0;let R=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),Ka.debug?.(`Collection timeout for request ${r}: collected ${R.length}/${a} responses`),p(R)}},this.timeout),S=o(()=>{this.awaitingResponses.delete(r),clearTimeout(A)},"cleanup");this.responseCheckers.set(r,g),(0,NH.sendItcEvent)({type:ZE.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{g()}).catch(R=>{E=!0,S(),this.responseCheckers.delete(r),h(new od("sendItcEvent",R))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,Rl.getWorkerIndex)(),m=f===void 0?"main":`worker-${f}`;for(let[p,h]of d)u.set(`${p}@${m}`,{...h,workerIndex:f});for(let p of l)for(let[h,E]of p.statuses){let g=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${g}`,{...E,workerIndex:p.workerIndex})}return Ka.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof od?Ka.error?.(`ITC failure during component status collection: ${r.message}`):Ka.warn?.("Failed to collect component status from all threads:",r),Ka.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,Rl.getWorkerIndex)(),i=s===void 0?"main":`worker-${s}`;for(let[a,c]of r)n.set(`${a}@${i}`,{...c,workerIndex:s});return n}cleanup(){this.awaitingResponses.clear(),this.responseCheckers.clear(),this.cleanupTimer&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null)}},cd=class{static{o(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let a=s.indexOf("@"),c=a!==-1?s.substring(0,a):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let a=this.aggregateComponentGroup(s,i);r.set(s,a)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,a,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",g=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=g;else if(E&&E.startsWith("worker-")){let A=parseInt(E.substring(7));isNaN(A)||(n.workers[A]=g)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==Ge.HEALTHY&&p.message&&(!i||g>s)&&(s=g,i=p.message),p.error&&!a&&(a=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:a};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[Ge.ERROR,Ge.WARNING,Ge.LOADING,Ge.UNKNOWN,Ge.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return Ge.UNKNOWN}},Tie=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),Bg=new _p(Tie)});var Ya,Fg=ie(()=>{Hw();sd();Vw();xg();Ya=class{static{o(this,"ComponentStatusRegistry")}statusMap=new Map;reset(){this.statusMap=new Map}setStatus(t,r,n,s){if(!t||typeof t!="string")throw new ad(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Ge).includes(r))throw new ad(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Ge).join(", ")}`);this.statusMap.set(t,new id(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,Ge.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,Ge.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,Ge.WARNING,r)}initializeLoading(t,r){this.setStatus(t,Ge.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,Ge.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,Ge.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={[Ge.HEALTHY]:0,[Ge.ERROR]:0,[Ge.WARNING]:0,[Ge.LOADING]:0,[Ge.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await Bg.collect(t);return cd.aggregate(r)}}});var fr,kg=ie(()=>{Fg();fr=new Ya});function PH(e){let t=OH.get(e);return t||(t=new Kw(e),OH.set(e,t)),t}function LH(){fr.reset()}var Kw,OH,Vo,DH,MH=ie(()=>{kg();sd();Kw=class{static{o(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return fr.setStatus(this.componentName,Ge.HEALTHY,t),this}warning(t){return fr.setStatus(this.componentName,Ge.WARNING,t),this}error(t,r){return fr.setStatus(this.componentName,Ge.ERROR,t,r),this}loading(t){return fr.setStatus(this.componentName,Ge.LOADING,t||"Loading..."),this}unknown(t){return fr.setStatus(this.componentName,Ge.UNKNOWN,t),this}get(){return fr.getStatus(this.componentName)}},OH=new Map;o(PH,"statusForComponent");Vo={loading(e,t){fr.initializeLoading(e,t)},loaded(e,t){fr.markLoaded(e,t)},failed(e,t,r){fr.markFailed(e,t,r)}};o(LH,"reset");DH=Ge});var gp={};Ie(gp,{AggregationError:()=>Gw,COMPONENT_STATUS_LEVELS:()=>Ge,ComponentStatus:()=>id,ComponentStatusError:()=>Va,ComponentStatusOperationError:()=>ad,ComponentStatusRegistry:()=>Ya,CrossThreadCollectionError:()=>$w,CrossThreadStatusCollector:()=>_p,CrossThreadTimeoutError:()=>qw,ITCError:()=>od,StatusAggregator:()=>cd,componentStatusRegistry:()=>fr,crossThreadCollector:()=>Bg,query:()=>yie});var yie,vH=ie(()=>{kg();Fg();Hw();Fg();Vw();kg();xg();sd();yie={get(e){return fr.getStatus(e)},all(){return fr.getAllStatuses()},byStatus(e){return fr.getComponentsByStatus(e)},summary(){return fr.getStatusSummary()},async allThreads(){return Ya.getAggregatedFromAllThreads(fr)}}});var Yw={};Ie(Yw,{STATUS:()=>DH,internal:()=>gp,lifecycle:()=>Vo,reset:()=>LH,statusForComponent:()=>PH});var Sp=ie(()=>{MH();vH()});var yp=M((tMe,BH)=>{"use strict";var cs=Q(),mn=(H(),D(W)),Rie=S0(),Aie=kn(),{validateEvent:Ww}=ns(),Tp=os(),bie=require("process"),{resetDatabases:Iie}=(Oe(),D(mt)),wie={[mn.ITC_EVENT_TYPES.SCHEMA]:Nie,[mn.ITC_EVENT_TYPES.USER]:xH,[mn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:Oie};async function Nie(e){let t=Ww(e);if(t){cs.error(t);return}cs.trace("ITC schemaHandler received schema event:",e),await Rie(e.message),await Cie(e.message)}o(Nie,"schemaHandler");async function Cie(e){try{Tp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Tp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Tp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=Iie();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){cs.error(t)}}o(Cie,"syncSchemaMetadata");var UH=[];async function xH(e){try{try{Tp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Tp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){cs.warn(r)}let t=Ww(e);if(t){cs.error(t);return}cs.trace(`ITC userHandler ${mn.HDB_ITC_CLIENT_PREFIX}${bie.pid} received user event:`,e),await Aie.setUsersWithRolesCache();for(let r of UH)r()}catch(t){cs.error(t)}}o(xH,"userHandler");xH.addListener=function(e){UH.push(e)};async function Oie(e){try{let t=Ww(e);if(t){cs.error(t);return}cs.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Sp(),D(Yw)),{getWorkerIndex:n}=nt(),{sendItcEvent:s}=ns(),i=r.componentStatusRegistry.getAllStatuses(),a=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:mn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:a,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?cs.trace(`Sent component status response directly to thread ${u}`):(u===void 0?cs.debug("No originator threadId, falling back to broadcast"):cs.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){cs.error("Error handling component status request:",t)}}o(Oie,"componentStatusRequestHandler");BH.exports=wie});var ns=M((aMe,kH)=>{"use strict";var nMe=Q(),zw=oe(),Pie=(H(),D(W)),{ITC_ERRORS:Rp}=Kr(),{parentPort:sMe,threadId:Lie,isMainThread:Die,workerData:iMe}=require("worker_threads"),{onMessageFromWorkers:Mie,broadcast:oMe,broadcastWithAcknowledgement:vie}=nt();kH.exports={sendItcEvent:Uie,validateEvent:FH,SchemaEventMsg:xie,UserEventMsg:Bie};var Hg;Mie(async(e,t)=>{Hg=Hg||yp(),FH(e),Hg[e.type]&&await Hg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Uie(e){return!Die&&e.message&&(e.message.originator=Lie),vie(e)}o(Uie,"sendItcEvent");function FH(e){if(typeof e!="object")return Rp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||zw.isEmpty(e.type))return Rp.MISSING_TYPE;if(!e.hasOwnProperty("message")||zw.isEmpty(e.message))return Rp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||zw.isEmpty(e.message.originator))return Rp.MISSING_ORIGIN;if(Pie.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Rp.INVALID_EVENT(e.type)}o(FH,"validateEvent");function xie(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}o(xie,"SchemaEventMsg");function Bie(e){this.originator=e}o(Bie,"UserEventMsg")});var ko=M((uMe,$H)=>{"use strict";var HH=(H(),D(W)),lMe=oe(),qg=Q(),qH=t0(),ld,{sendItcEvent:GH}=ns();function Fie(e){try{qg.debug("signalSchemaChange called with message:",e),ld=ld||yp();let t=new qH(HH.ITC_EVENT_TYPES.SCHEMA,e);return ld.schema(t),GH(t)}catch(t){qg.error(t)}}o(Fie,"signalSchemaChange");function kie(e){try{qg.trace("signalUserChange called with message:",e),ld=ld||yp();let t=new qH(HH.ITC_EVENT_TYPES.USER,e);return ld.user(t),GH(t)}catch(t){qg.error(t)}}o(kie,"signalUserChange");$H.exports={signalSchemaChange:Fie,signalUserChange:kie}});function Ap(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 VH(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Us(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 Us,bp=ie(()=>{Us=class extends Map{static{o(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 a=i[1];if(n)r=(typeof a=="string"?a:a.join(", "))+", "+r;else if(typeof a=="string")r=[a,r];else{a.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};o(Ap,"appendHeader");o(VH,"mergeHeaders")});function Gg(e,t,r=qie){let n;return function(...i){return n?n.length*jw>r?t(...i):new Promise((a,c)=>{n.push({args:i,fn(){try{let l=e(...i);a(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,a){setImmediate(()=>{let c=performance.now();jw=(jw*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var WH,Hie,qie,KH,Gie,Qw,YH,jw,Jw=ie(()=>{WH=w(Zn()),Hie=3e3,qie=2e4,KH=0,Gie=3e4,Qw=3e3,YH=performance.now()+Qw,jw=0;o(Gg,"throttle");setInterval(()=>{let e=performance.now();e-YH-Qw>Hie&&KH+Gie<e&&(WH.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"),KH=e),YH=e},Qw).unref()});var sq={};Ie(sq,{EVICTED:()=>va,INVALIDATED:()=>Dn,coerceType:()=>Vg,makeTable:()=>Yg});function Yg(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:a,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:p}=e,{expirationMS:h,evictionMS:E,audit:g,trackDeletes:A}=e;E??=0;let{attributes:S}=e;S||(S=[]);let R=Mb(i,n,l),N,O,F={},ee=Promise.resolve(),q,k,J;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(q=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(k=K),K.expiresAt&&(J=K),K.isPrimaryKey&&(F=K);let Y,le=[],ae=[],re=1,Re=2,Te={},Fe={},qe=864e5,Rr=0,Zt,Ht,er,qf=!1,Mc,qt,Gf,$f=bl.get(B.REPLICATION_DATABASES);if(Array.isArray($f)){for(let K of $f)if(K.name===c&&K.replicateTo>=0){Gf=K.replicateTo;break}}let qE=i.getRange({start:!1,end:!1}).constructor,GE=10,aA=6;g&&Tu(),Nm(i.env.path,K=>{if(O)return xc(K)});class Vf extends ml{static{o(this,"Updatable")}getUpdatedTime(){return Da.get(this.getRecord())?.version}getExpiresAt(){return Da.get(this.getRecord())?.expiresAt}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.set(_,new op(T));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(_,T){return this.addTo(_,-T)}}class Le extends Fr{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=a;static databaseName=c;static attributes=S;static replicate=p;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=q;static updatedTimeProperty=k;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(_,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)_.intermediateSource=!0,this.sources.unshift(_);else{if(this.sources.some(I=>!I.intermediateSource)){if(this.sources.some(I=>I.name===_.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(_)}O=O||_.get&&(!_.get.reliesOnPrototype||_.prototype.get),N=N||_.load;let C=o(I=>{let v=this.sources;if(v=v.filter(U=>U.intermediateSource&&U[I]&&(!U[I].reliesOnPrototype||U.prototype[I])),v.length>0)if(v.length===1){let U=v[0];return(L,x,G)=>{if(L?.source!==U)return U[I](x,G,L)}}else return(U,L,x)=>{let G=[];for(let j of v){if(U?.source===j)break;G.push(j[I](L,x,U))}return Promise.all(G)}},"getApplyToIntermediateSource"),y=this.sources[this.sources.length-1];y.intermediateSource&&(y={});let b=o(I=>{if(y[I]&&(!y[I].reliesOnPrototype||y.prototype[I]))return(v,U,L)=>{if(!v?.source)return y[I](U,L,v)}},"getApplyToCanonicalSource");Te={put:b("put"),patch:b("patch"),delete:b("delete"),publish:b("publish")},Fe={put:C("put"),patch:C("patch"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")};let P=y.shouldRevalidateEvents;return(async()=>{let I=!1,v,U=o(async(L,x)=>{let G=L.value,j=L.table?Me[c][L.table]:Le;if(c===Xf&&(L.table===Ru.ROLE_TABLE_NAME||L.table===Ru.USER_TABLE_NAME)&&(I=!0),L.id===void 0&&(L.id=G[j.primaryKey],L.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(L));L.source=_;let X={residencyId:yo(L.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:L.nodeId,async:!0},$=L.id,be=await j.getResource($,x,X);switch(L.finished&&await L.finished,L.type){case"put":return P?be._writeInvalidate($,G,X):be._writeUpdate($,G,!0,X);case"patch":return P?be._writeInvalidate($,G,X):be._writeUpdate($,G,!1,X);case"delete":return be._writeDelete($,X);case"publish":case"message":return be._writePublish($,G,X);case"invalidate":return be._writeInvalidate($,G,X);case"relocate":return be._writeRelocate($,X);default:xe.default.error?.("Unknown operation",L.type,L.id)}},"writeUpdate");try{let L=_.subscribe;L&&A==null&&(A=!0);let x={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},G=_.subscribeOnThisThread?_.subscribeOnThisThread((0,Al.getWorkerIndex)(),x):(0,Al.getWorkerIndex)()===0,j=L&&G&&await _.subscribe?.(x);if(j){let X;for await(let $ of j)try{if(!($.type==="transaction"?$.writes[0]:$)){xe.default.error?.("Bad subscription event",$);continue}if($.source=_,$.type==="end_txn"){if(X?.resolve(),$.localTime&&v!==$.localTime){if($.remoteNodeIds?.length>0){let de=[Symbol.for("seq"),$.remoteNodeIds[0]],z=d.get(de),ne=z?.nodes;ne||(ne=[]);for(let Ee of $.remoteNodeIds.slice(1)){let fe=ne.find(De=>De.id===Ee);ne=ne.filter(De=>De.id!==Ee||De===fe),fe||(fe={id:Ee,seqId:0},ne.push(fe)),fe.seqId=Math.max(z?.seqId??1,$.localTime),Ee===X?.nodeId&&(fe.lastTxnTime=$.timestamp)}let me=Math.max(z?.seqId??1,$.localTime);xe.default.trace?.("Received txn",c,me,new Date(me),$.localTime,new Date($.localTime),$.remoteNodeIds),d.put(de,{seqId:me,nodes:ne})}v=$.localTime}$.onCommit&&X?.committed.then($.onCommit);continue}if(X)if($.beginTxn)X.resolve();else{X.write_promises.push(U($,X));continue}!$.timestamp&&$.version&&($.timestamp=$.version);let pe=Rt($,()=>{if($.type==="transaction"){let de=[];for(let z of $.writes)try{de.push(U(z,$))}catch(ne){throw ne.message+=" writing "+JSON.stringify(z)+" of event "+JSON.stringify($),ne}return Promise.all(de)}else if($.type==="define_schema"){let de=this.attributes.slice(0),z=!1;for(let ne of $.attributes)de.find(me=>me.name===ne.name)||(de.push(ne),z=!0);z&&(Xe({table:s,database:c,attributes:de,origin:"cluster"}),wp.signalSchemaChange(new Np.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return $.beginTxn?(X=$,X.write_promises=[U($,$)],new Promise(de=>{X.resolve=()=>de(Promise.all(X.write_promises))})):U($,$)});X&&(X.committed=pe),I&&pe&&!pe?.waitingForUserChange&&(pe.then(()=>wp.signalUserChange(new Np.UserEventMsg(process.pid))),pe.waitingForUserChange=!0),$.onCommit&&(pe?pe.then($.onCommit):$.onCommit())}catch(be){xe.default.error?.("error in subscription handler",be)}}}catch(L){xe.default.error?.(L)}})(),this}static get isCaching(){return O}static get shouldRevalidateEvents(){return this.prototype.get!==Le.prototype.get}static getResource(_,T,C){let y=super.getResource(_,T,C);if(this.loadAsInstance===!1&&(T._freezeRecords=!0),_!=null&&this.loadAsInstance!==!1){Mr(_);try{if(y.getRecord?.())return y;if(typeof _=="object"&&_&&!Array.isArray(_))throw new Error(`Invalid id ${JSON.stringify(_)}`);let b=!C?.async||i.cache?.get?.(_),P=br(T),I=P.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return vc(_,T,{transaction:I,ensureLoaded:C?.ensureLoaded},b,v=>{if(v?Le._updateResource(y,v):y.#e=null,T.onlyIfCached){if(!y.doesExist())throw new lt.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let U=Ra(_,v,T,y);if(U)return P?.disregardReadTxn(),y.#i=!0,T.loadedFromSource=!0,xs(U,L=>(Le._updateResource(y,L),y))}return y})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(_)),b}}return y}static _updateResource(_,T){_.#n=T,_.#e=T?.value??null,_.#r=T?.version}ensureLoaded(){let _=Ra(this.getId(),this.#n,this.getContext());if(_)return this.#i=!0,this.getContext().loadedFromSource=!0,xs(_,T=>{this.#n=T,this.#e=T.value,this.#r=T.version})}static getNewId(){let _=F?.type;if(_==="String"||_==="ID")return super.getNewId();if(!qt){let b=i.getEntry(Symbol.for("id_allocation")),P=b?.value,I;if(P&&P.nodeName===server.hostname&&(!eoe(i)||P.pid===process.pid)){let v=P.start,U=P.end;I=v;for(let L of i.getKeys({start:U,end:v,limit:1,reverse:!0}))I=L}else P=y(b?.version??null),I=P.start;qt=new BigInt64Array([BigInt(I)+1n]),qt=new BigInt64Array(i.getUserSharedBuffer("id",qt.buffer)),qt.maxSafeId=P.end}let T=Number(Atomics.add(qt,0,1n)),C=_==="Int"?512:1048576;if(T+C>=qt.maxSafeId){let b=o(P=>{qt.maxSafeId=T+(_==="Int"?1023:4194303);let I=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,v=P?void 0:i.useReadTransaction(),U=Number(qt[0]);for(let G of i.getKeys({start:U+1,end:I,limit:1,transaction:v}))I=G;v?.done();let{value:L,version:x}=i.getEntry(Symbol.for("id_allocation"));if(qt.maxSafeId<I){if(L.end>qt.maxSafeId-100)return;xe.default.info?.("New id allocation",T,qt.maxSafeId,x),i.put(Symbol.for("id_allocation"),{start:L.start,end:qt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),x)}else{xe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${qt.maxSafeId}, but id of ${I} detected`);let G=y(x);G.alreadyUpdated||Atomics.store(qt,0,BigInt(G.start+1)),qt.maxSafeId=G.end}},"updateEnd");T+C===qt.maxSafeId?setImmediate(b):T+100>=qt.maxSafeId&&(xe.default.warn?.(`Synchronous id allocation required on table ${s}${_=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>b(!0)))}return T;function y(b){let P=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,I=P/4,v,U,L=!1,x,G;do{x=Math.floor(Math.random()*P),G={start:x,end:x+(_==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},v=0;for(let j of i.getKeys({start:x,limit:1,reverse:!0}))v=j;U=P;for(let j of i.getKeys({start:x+1,end:P,limit:1}))U=j;I*=.875,I<1e3&&!L&&(L=!0,xe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${_==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,x,v,U,I))}while(!(I<U-x&&(I<x-v||v===0)));return i.transactionSync(()=>{let j=i.getEntry(Symbol.for("id_allocation"));return(j?.version??null)==b?(xe.default.info?.("Allocated new id range",G),i.put(Symbol.for("id_allocation"),G,Date.now()),G):(xe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...j.value})})}}static setTTLExpiration(_){if(typeof _=="number")h=_*1e3,E||(E=0);else if(_&&typeof _=="object")h=_.expiration*1e3,E=(_.eviction||0)*1e3,qe=_.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");qe=qe||(h+E)/4,xc()}static getResidencyRecord(_){return d.get([Symbol.for("residency_by_id"),_])}static setResidency(_){Le.getResidency=_&&((T,C)=>{try{return _(T,C)}catch(y){throw y.message+=` in residency function for table ${s}`,y}})}static setResidencyById(_){Le.getResidencyById=_&&(T=>{try{return _(T)}catch(C){throw C.message+=` in residency function for table ${s}`,C}})}static getResidency(_,T){if(Le.getResidencyById)return Le.getResidencyById(_[t]);let C=Gf;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 y=[server.hostname];if(T.previousResidency)y.push(...T.previousResidency.slice(0,C));else{let b=server.nodes.map(v=>v.name),P=Math.floor(b.length*Math.random());y.push(...b.slice(P,P+C));let I=P+C-b.length;I>0&&y.push(...b.slice(0,I))}return y}}static enableAuditing(_=!0){g=_,_&&Tu(),Le.audit=_}static coerceId(_){return _===""?null:Vg(_,F)}static async dropTable(){delete Me[c][s];for(let _ of i.getRange({versions:!0,snapshot:!1,lazy:!0}))_.metadataFlags&Ln&&_.value&&Oa(_.value);if(c===a){for(let _ of S)d.remove(Le.tableName+"/"+_.name),r[_.name]?.drop();d.remove(Le.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),Zw.default.unlinkSync(i.env.path);wp.signalSchemaChange(new Np.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(_){let T=this.constructor;if(typeof _=="string"&&T.loadAsInstance!==!1)return this.getProperty(_);if(Yf(_))return this.search(_);if(_&&_.id===void 0&&!_.toString()){let C={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?Le.getRecordCount().then(y=>(C.recordCount=y.recordCount,C.estimatedRecordRange=y.estimatedRange,C)):C}if(_!==void 0&&T.loadAsInstance===!1){let C=this.getContext(),y=br(C),b=y.getReadTxn();if(b?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let P=Ar(_);Mr(P);let I=!0;return _.checkPermission&&(I=this.allowRead(C.user,_)),xs(xs(I,v=>{if(!v)throw new lt.AccessViolation(C.user);let U=!0;return vc(P,C,{transaction:b,ensureLoaded:U},!1,L=>{if(C.onlyIfCached){if(!L?.value)throw new lt.ServerError("Entry is not cached",504)}else if(U){let x=Ra(P,L,C);if(x)return y?.disregardReadTxn(),C.loadedFromSource=!0,x.then(G=>G?.value)}return L?.value})}),v=>{let U=_?.select;return U&&v!=null?Gu(U,this.constructor)(v):v})}if(_?.property)return this.getProperty(_.property);if(this.doesExist()||_?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(_,T){let C=Vr(_,T);if(C?.read){if(C.isSuperUser)return!0;let y=C.attribute_permissions,b=T?.select;if(y?.length>0||qf&&b){if(T||(T={}),b){let P=y?.length>0&&Xw(y,"read");T.select=b.map(I=>{let v=I.name||I;if(!P||P[v]){let U=er[v]?.definition?.tableClass;if(U){if(I.name||(I={name:I}),!I.checkPermission&&T.checkPermission&&(I.checkPermission=T.checkPermission),!U.prototype.allowRead.call(null,_,I))return!1;if(!I.select)return I.name}return I}}).filter(Boolean)}else T.select=y.filter(P=>P.read&&!er[P.attribute_name]).map(P=>P.attribute_name);return T}else return!0}}allowUpdate(_,T,C){let y=Vr(_,C);if(y?.update){let b=y.attribute_permissions;if(b?.length>0){let P=Xw(b,"update");for(let I in T)if(!P[I])return!1;for(let I of b){let v=I.attribute_name;!I.update&&!(v in T)&&(T[v]=this.getProperty(v))}}return Uc(this.getContext())}}allowCreate(_,T,C){if(this.isCollection){let y=Vr(_,C);if(y?.insert){let b=y.attribute_permissions;if(b?.length>0){let P=Xw(b,"insert");for(let I in T)if(!P[I])return!1;return Uc(this.getContext())}else return Uc(this.getContext())}}else return this.allowUpdate(_,{})}allowDelete(_,T){return Vr(_,T)?.delete&&Uc(this.getContext())}update(_,T){let C,y=typeof T=="boolean"||T===void 0&&(_==null||typeof _=="object"&&!(_ instanceof URLSearchParams)),b=!1;y?(b=T,T=_,C=this.getId()):C=Ar(_);let P=this.getContext();if(!br(P))throw new Error("Can not update a table resource outside of a transaction");if(T===!1)return this;if(typeof T=="object"&&T)if(b)Object.isFrozen(T)&&(T={...T}),this.#e={},this.#t=T;else if(y){let v=this.#t;v&&(T=Object.assign(v,T)),this.#t=T}else{let v=!0;if(_==null)throw new TypeError("Can not put a record without a target");return _.checkPermission&&(v=this.allowUpdate(P.user,T,_)),xs(v,U=>{if(!U)throw new lt.AccessViolation(P.user);return xs(i.get(Ar(_)),L=>{let x=new Vf(L);return x._setChanges(T),this._writeUpdate(C,x.getChanges(),!1),x})})}return this._writeUpdate(C,this.#t,b),this}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.#s===jH?this.set(_,(+this.getProperty(_)||0)+T):(this.#s||this.update(),this.set(_,new op(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(_,T){if(typeof T=="number")return this.addTo(_,-T);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(_){this.#t=_}setRecord(_){this.#e=_}invalidate(_){let T=!0,C=this.getContext();return _?.checkPermission&&(T=this.allowDelete(C.user,_,C)),xs(T,y=>{if(!y)throw new lt.AccessViolation(C.user);this._writeInvalidate(_?Ar(_):this.getId())})}_writeInvalidate(_,T,C){let y=this.getContext();Mr(_),br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Te.invalidate?.bind(this,y,_),beforeIntermediate:Fe.invalidate?.bind(this,y,_),commit:o((P,I)=>{if(!(Aa(P,I,C?.nodeId)<=0)){T??=null;for(let v in r)T||(T={}),T[v]===void 0&&(T[v]=this.getProperty(v));xe.default.trace?.(`Invalidating entry in ${s} id: ${_}, timestamp: ${new Date(P).toISOString()}`),R(_,T,I,P,Dn,g,{user:y?.user,residencyId:C?.residencyId,nodeId:C?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(_,T){let C=this.getContext();Mr(_),br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Te.relocate?.bind(this,C,_),beforeIntermediate:Fe.relocate?.bind(this,C,_),commit:o((b,P)=>{if(Aa(b,P,T?.nodeId)<=0)return;let I=Le.getResidencyRecord(T.residencyId),v=0,U=null,L=P?.value;if(I&&!I.includes(server.hostname)){for(let x in r)U||(U={}),U[x]=L[x];v=Dn}else U=L;xe.default.trace?.(`Relocating entry id: ${_}, timestamp: ${new Date(b).toISOString()}`),R(_,U,P,b,v,g,{user:C.user,residencyId:T.residencyId,nodeId:T.nodeId,expiresAt:T.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(_,T){let C={previousResidency:this.getResidencyRecord(_.residencyId),isRelocation:!0},y=Bc(this.getResidency(T.value,C)),b;if(y){if(!y.includes(server.hostname))return!1;b=yo(y)}let P=0;xe.default.debug?.("Performing a relocate of an entry",existing_entry.key,T.value,y);let I=R(_.key,T.value,_,_.version,P,!0,{residencyId:b,expiresAt:T.expiresAt},"relocate",!1,null);return!0}static evict(_,T,C){let y=this.Source,b;if(!((O||g)&&(!T||(b=i.getEntry(_),!b||!T)||b.version!==C))){if(O){if(i.hasLock(_,b.version))return;let P;for(let I in r)P||(P={}),P[I]=T[I];if(P)return R(_,P,b,C,va,null,null,null,!0)}if(i.ifVersion(_,C,()=>{To(_,T,null)}),g)return R(_,null,b,C,va,null,null,null,!0);nl(i,b??i.getEntry(_),C)}}lock(){throw new Error("Not yet implemented")}static operation(_,T){return _.table||=s,_.schema||=c,global.operation(_,T)}put(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!0);else{let C=!0;if(_==null)throw new TypeError("Can not put a record without a target");let y=this.getContext();return _.checkPermission&&(C=this.allowUpdate(y.user,T,_)),xs(C,b=>{if(!b)throw new lt.AccessViolation(y.user);if(Array.isArray(T))for(let P of T){let I=P[t];this._writeUpdate(I,P,!0)}else{let P=Ar(_);this._writeUpdate(P,T,!0)}})}}create(_,T){let C=!0,y=this.getContext();if(!T&&!(_ instanceof URLSearchParams)&&(T=_,_=void 0),!T||typeof T!="object"||Array.isArray(T))throw new TypeError("Can not create a record without an object");return _?.checkPermission&&(C=this.allowCreate(y.user,T,_)),xs(C,b=>{if(!b)throw new lt.AccessViolation(y.user);let P=Ar(_)??T[t];if(P===void 0)P=this.constructor.getNewId();else if(i.get(P))throw new lt.ClientError("Record already exists",409);return this._writeUpdate(P,T,!0),T})}patch(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!1);else{let C=this.update(_,T);if(C?.then)return C.then(()=>{})}}_writeUpdate(_,T,C,y){let b=this.getContext(),P=br(b);Mr(_);let I=this.#n??i.getEntry(_);this.#s=C?jH:Qie;let v={key:_,store:i,entry:I,nodeName:b?.nodeName,validate:o(U=>{T||(T=this.#t),C||T&&Rg(this.#t===T?this:T)?b?.source||(P.checkOverloaded(),this.validate(T,!C),k&&(T[k.name]=k.type==="Date"?new Date(U):k.type==="String"?new Date(U).toISOString():U),C&&(t&&T[t]!==_&&(T[t]=_),q&&(I?.value?T[q.name]=I?.value[q.name]:T[q.name]=q.type==="Date"?new Date(U):q.type==="String"?new Date(U).toISOString():U),T=qa(T))):P.removeWrite(v)},"validate"),before:C?Te.put?()=>Te.put(b,_,T):null:Te.patch?()=>Te.patch(b,_,T):Te.put?()=>Te.put(b,_,qa(this)):null,beforeIntermediate:C?Fe.put?()=>Fe.put(b,_,T):null:Fe.patch?()=>Fe.patch(b,_,T):Fe.put?()=>Fe.put(b,_,qa(this)):null,commit:o((U,L,x)=>{if(x){if(b&&L?.version>(b.lastModified||0)&&(b.lastModified=L.version),this.#n=L,L?.value&&L.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");C||(this.#e=L?.value??null)}this.#t=void 0,this.#r=U;let G=L?.value,j;this.#s=0;let X=!1,$=Aa(U,L,y?.nodeId),be;if($<=0){if(g){let me=L.localTime,Ee=L.version;xe.default.trace?.("Applying CRDT update to record with id: ",_,"txn time",new Date(U),"applying later update from:",new Date(Ee),"local recorded time",new Date(me));let fe=[];for(;me>U||Ee>=U&&me>0;){let De=l.get(me);if(!De)break;let ve=xt(De);if(Ee=ve.version,Ee>=U){if(Ee===U){if($=Aa(U,{version:Ee,localTime:me},y?.nodeId),$===0)return;if($>0)continue}if(ve.type==="patch")fe.push(ve),be=T;else if(ve.type==="put"||ve.type==="delete")return}me=ve.previousLocalTime}me||xe.default.debug?.("No further audit history, applying incremental updates based on available history",_,"existing version preserved",L),fe.sort((De,ve)=>De.version-ve.version);for(let De of fe){let ve=De.getValue(i);if(xe.default.debug?.("Rebuilding update with future patch:",new Date(De.version),ve,De),j=E_(j??T,ve,C),!j)return}}else{if(C)return;j=E_(j??T,G,C),xe.default.debug?.("Rebuilding update without audit:",j)}xe.default.trace?.("Rebuilt record to save:",j," is full update:",C)}let pe;if(C&&!j?pe=T:this.constructor.loadAsInstance===!1?pe=qa(G,j??T):(this.#e=G,pe=qa(this,j??T)),this.#e=pe,pe&&pe.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let de;if(y?.residencyId!=null)de=y.residencyId;else{I?.residencyId&&(b.previousResidency=Le.getResidencyRecord(I.residencyId));let me=Bc(Le.getResidency(pe,b));if(me&&!me.includes(server.hostname))if(be??=pe,X=!0,Le.getResidencyById)pe=void 0;else{pe=null;for(let Ee in r)pe||(pe={}),pe[Ee]=be[Ee]}de=yo(me)}C||(be=T);let z=b?.expiresAt??(h?h+Date.now():-1);xe.default.trace?.(`Saving record with id: ${_}, timestamp: ${new Date(U).toISOString()}${z?", expires at: "+new Date(z).toISOString():""}${L?", replaces entry from: "+new Date(L.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(pe).slice(0,100)}catch{return""}})()),To(_,G,pe);let ne=C?"put":"patch";R(_,pe,L,U,X?Dn:0,g,{omitLocalRecord:X,user:b?.user,residencyId:de,expiresAt:z,nodeId:y?.nodeId,originatingOperation:b?.originatingOperation,tableToTrack:c==="system"?null:s},ne,!1,be),b.expiresAt&&xc()},"commit")};P.addWrite(v)}async delete(_){if(Yf(_)){_.select=["$id"];for await(let T of this.search(_))this._writeDelete(T.$id);return!0}if(_){let T=!0,C=this.getContext();return _.checkPermission&&(T=this.allowDelete(C.user,_,C)),xs(T,y=>{if(!y)throw new lt.AccessViolation(C.user);let b=Ar(_);return this._writeDelete(b),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(_,T){let C=br(this.getContext());Mr(_);let y=this.getContext();return C.addWrite({key:_,store:i,entry:this.#n,nodeName:y?.nodeName,before:Te.delete?.bind(this,y,_),beforeIntermediate:Fe.delete?.bind(this,y,_),commit:o((b,P,I)=>{let v=P?.value;I&&(y&&P?.version>(y.lastModified||0)&&(y.lastModified=P.version),Le._updateResource(this,P)),!(Aa(b,P,T?.nodeId)<=0)&&(To(this.getId(),v),xe.default.trace?.(`Deleting record with id: ${_}, txn timestamp: ${new Date(b).toISOString()}`),g||A?(R(_,null,P,b,0,g,{user:y?.user,nodeId:T?.nodeId,tableToTrack:s},"delete"),g||xc()):nl(i,P))},"commit")}),!0}search(_){let T=this.getContext(),C=br(T);if(!_)throw new Error("No query provided");if(_.parseError)throw _.parseError;if(_.checkPermission&&!this.allowRead(T.user,_))throw new lt.AccessViolation(T.user);T&&(T.lastModified=Yie);let y=_.conditions;y?y.length===void 0&&(y=y[Symbol.iterator]?Array.from(y):[y]):y=Array.isArray(_)?_:_[Symbol.iterator]?Array.from(_):[];let b=_.id??this.getId();b&&(y=[{attribute:null,comparator:Array.isArray(b)?"prefix":"starts_with",value:b}].concat(y));let P,I={};function v(ne,me){let Ee;switch(me){case"and":case void 0:if(ne.length<1)throw new Error('An "and" operator requires at least one condition');Ee=!0;break;case"or":if(ne.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+me)}for(let fe of ne){if(fe.conditions){fe.conditions=v(fe.conditions,fe.operator);continue}let De=fe[0]??fe.attribute,ve=De==null?F:ki(S,De);if(ve)(ve.type||Ub[fe.comparator])&&(fe[1]===void 0?fe.value=L(fe.value,ve):fe[1]=L(fe[1],ve));else if(De!=null)throw(0,lt.handleHDBError)(new Error,`${De} is not a defined attribute`,404);if(fe.chainedConditions)if(fe.chainedConditions.length===1&&(!fe.operator||fe.operator=="and")){let $e=fe.chainedConditions[0],vr,zn;if($e.comparator==="gt"||$e.comparator==="greater_than"||$e.comparator==="ge"||$e.comparator==="greater_than_equal"?(vr=fe,zn=$e):(vr=$e,zn=fe),vr.comparator!=="lt"&&vr.comparator!=="less_than"&&vr.comparator!=="le"&&vr.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let vi=zn.comparator==="ge"||zn.comparator==="greater_than_equal",Ne=vr.comparator==="le"||vr.comparator==="less_than_equal";fe.comparator=(vi?"ge":"gt")+(Ne?"le":"lt"),fe.value=[zn.value,vr.value]}else throw new Error("Multiple chained conditions are not currently supported")}return ne}o(v,"prepareConditions");function U(ne,me){if(_.enforceExecutionOrder)return ne;for(let Ee of ne)Ee.conditions&&(Ee.conditions=U(Ee.conditions,Ee.operator));return ne.length>1&&me!=="or"?$ie(ne,J_(Le)):ne}o(U,"orderConditions");function L(ne,me){return Array.isArray(ne)?ne.map(Ee=>Vg(Ee,me)):Vg(ne,me)}o(L,"coerceTypedValues");let x=_.operator;(y.length>0||x)&&(y=v(y,x));let G=typeof _.sort=="object"&&_.sort,j;if(G&&x!=="or"){let ne=G.attribute;if(ne==null)throw new lt.ClientError("Sort requires an attribute");if(P=y.find(me=>ku(me.attribute)===ku(ne)),!P){let me=ki(S,ne);if(!me)throw(0,lt.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not a defined attribute`,404);if(me.indexed)P={...G,comparator:"sort"},y.push(P);else if(y.length===0&&!_.allowFullScan)throw(0,lt.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not indexed and not combined with any other conditions`,404)}P&&(P.descending=!!G.descending)}y=U(y,x),G&&(P&&y[0]===P?G.next&&(j={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(P&&y.splice(y.indexOf(P),1),j=G));let X=_.select;if(y.length===0&&(y=[{attribute:t,comparator:"greater_than",value:!0}]),_.explain)return{conditions:y,operator:x,postOrdering:j,selectApplied:!!X};let $=C.useReadTxn(),be=xb(y,x,Le,$,_,T,(ne,me)=>Wf(ne,X,T,$,me),I),pe=_.ensureLoaded!==!1,de=Le.transformEntryForSelect(X,T,$,I,pe,!0),z=Le.transformToOrderedSelect(be,X,j,T,$,de);return(_.offset||_.limit!==void 0)&&(z=z.slice(_.offset,_.limit!==void 0?(_.offset||0)+_.limit:void 0)),z.onDone=()=>{z.onDone=null,C.doneReadTxn()},z.selectApplied=!0,z.getColumns=()=>{if(X){let ne=[];for(let me of X)me==="*"?ne.push(...S.map(Ee=>Ee.name)):ne.push(me.name||me);return ne}return S.filter(ne=>!ne.computed&&!ne.relationship).map(ne=>ne.name)},z}static transformToOrderedSelect(_,T,C,y,b,P){let I=new qE;if(C){_=Wf(_,T,y,b,null);let v;I.iterate=function(){let L,x=_[Symbol.asyncIterator]?_[Symbol.asyncIterator]():_[Symbol.iterator](),G,j=C.dbOrderedAttribute,X,$,be=!0;function pe(z){let ne=z.next&&pe(z.next),me=z.descending;return y.sort=z,(Ee,fe)=>{let De=gu(Ee,z.attribute,y),ve=gu(fe,z.attribute,y),$e=me?(0,Il.compareKeys)(ve,De):(0,Il.compareKeys)(De,ve);return $e===0?ne?.(Ee,fe)||0:$e}}o(pe,"createComparator");let de=pe(C);return{async next(){let z;if(L)if(z=L.next(),z.done){if(G)return I.onDone&&I.onDone(),z}else return{value:await P.call(this,z.value)};v=[],X&&v.push(X);do if(z=await x.next(),z.done){if(G=!0,v.length)break;return I.onDone&&I.onDone(),z}else{let ne=z.value;if(ne?.then&&(ne=await ne),j){let me=gu(ne,j,y);if(be)be=!1,$=me;else if(me!==$){$=me,X=ne;break}}v.push(ne)}while(!0);return C.isGrouped,v.sort(de),L=v[Symbol.iterator](),z=L.next(),z.done?(I.onDone&&I.onDone(),z):{value:await P.call(this,z.value)}},return(){return I.onDone&&I.onDone(),x.return()},throw(){return I.onDone&&I.onDone(),x.throw()}}};let U=o(L=>{if(typeof T=="object"&&Array.isArray(L.attribute))for(let x=0;x<T.length;x++){let G=T[x],j;if(G.name===L.attribute[0]){for(j=G.sort||(G.sort={});j.next;)j=j.next;j.attribute=L.attribute.slice(1),j.descending=L.descending}else G===L.attribute[0]&&(T[x]=j={name:G,sort:{attribute:L.attribute.slice(1),descending:L.descending}})}L.next&&U(L.next)},"applySortingOnSelect");U(C)}else I.iterate=(_[Symbol.asyncIterator]||_[Symbol.iterator]).bind(_),I=I.map(function(v){try{let U=P.call(this,v);return typeof U?.catch=="function"?U.catch(L=>{throw L.partialObject={[t]:v.key},L}):U}catch(U){throw U.partialObject={[t]:v.key},U}});return I}static transformEntryForSelect(_,T,C,y,b,P){let I;b&&O&&!(typeof _=="string"?[_]:_)?.every(L=>{let x;return typeof L=="object"?x=L.name:x=L,r[x]||x===t})&&(I=!0);let v,U=o(function(L){let x;if(T?.transaction?.stale&&(T.transaction.stale=!1),L!=null){if(x=L.deref?L.deref():L.value,!x&&(L.key===void 0||L.deref)||L.metadataFlags&Dn){if(L.metadataFlags&Dn&&T.replicateFrom===!1&&P&&L.residencyId)return za.SKIP;if(L=vc(L.key??L,T,{transaction:C,lazy:_?.length<4,ensureLoaded:b},this?.isSync,G=>G),L?.then)return L.then(U.bind(this));x=L?.value}if(I&&L?.metadataFlags&(Dn|va)||L?.expiresAt!=null&&L?.expiresAt<Date.now()){if(T.onlyIfCached)return{[t]:L.key,message:"This entry has expired"};let G=Ra(L.key??L,L,T);if(G?.then)return G.then(U)}}if(x==null)return P?za.SKIP:x;if(_&&!(_[0]==="*"&&_.length===1)){let G,j=o(($,be)=>{let pe;typeof $=="object"?pe=$.name:pe=$;let de=er?.[pe],z;if(de){let ne=y?.[pe];if(ne)if(ne.hasMappings){let Ee=de.from?x[de.from]:ku(L.key);z=ne.get(Ee),z||(z=[])}else z=ne.fromRecord?.(x);else z=de(x,T,L,!0);let me=o(Ee=>{if(de.directReturn)return be(Ee,pe);if(Ee&&typeof Ee=="object"){let fe=de.definition?.tableClass||Le;v||(v={});let De=v[pe]||(v[pe]=fe.transformEntryForSelect(pe===$?null:$.select||(Array.isArray($)?$:null),T,C,ne,b));if(Array.isArray(Ee)){let ve=[],$e=fe.transformToOrderedSelect(Ee,$.select,typeof $.sort=="object"&&$.sort,T,C,De)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),vr=o(vi=>{for(;!vi.done;){if(vi?.then)return vi.then(vr);ve.push(vi.value),vi=$e.next()}be(ve,pe)},"nextValue"),zn=vr($e.next());zn&&(G||(G=[]),G.push(zn));return}else if(Ee=De.call(this,Ee),Ee?.then){G||(G=[]),G.push(Ee.then(ve=>be(ve,pe)));return}}be(Ee,pe)},"handleResolvedValue");z?.then?(G||(G=[]),G.push(z.then(me))):me(z);return}else z=x[pe],z&&typeof z=="object"&&pe!==$&&(z=Le.transformEntryForSelect($.select||$,T,C,null)({value:z}));be(z,pe)},"selectAttribute"),X;if(typeof _=="string")j(_,$=>{X=$});else if(Array.isArray(_))if(_.asArray)X=[],_.forEach(($,be)=>{$==="*"?_[be]=x:j($,pe=>X[be]=pe)});else{X={};let $=_.forceNulls;for(let be of _)if(be==="*")for(let pe in x)X[pe]=x[pe];else j(be,(pe,de)=>{pe===void 0&&$&&(pe=null),X[de]=pe})}else throw new lt.ClientError("Invalid select"+_);return G?Promise.all(G).then(()=>X):X}return x},"transform");return U}async subscribe(_){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||Xe({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),_||(_={});let T=!_.rawEvents,C=[],y=$b(Le,this.getId()??null,function(I,v,U,L){try{let x=v.getValue?.(i,T),G=v.type;if(!x&&G==="patch"&&T){let X=i.getEntry(I);X?.version===v.version?x=X.value:x=v.getValue?.(i,!0,U),G="put"}let j={id:I,localTime:U,value:x,version:v.version,type:G,beginTxn:L};C?C.push(j):(Je(v.size??1,"db-message",s,null),this.send(j))}catch(x){xe.default.error?.(x)}},_.startTime||0,_),b=(async()=>{this.isCollection&&(y.includeDescendants=!0,_.onlyChildren&&(y.onlyChildren=!0)),_.supportsTransactions&&(y.supportsTransactions=!0);let I=this.getId(),v=_.previousCount;v>1e3&&(v=1e3);let U=_.startTime;if(this.isCollection){if(U){if(v)throw new lt.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:L,value:x}of l.getRange({start:U,exclusiveStart:!0,snapshot:!1})){let G=xt(x);if(G.tableId!==n)continue;let j=G.recordId;if(I==null||ZH(I,j)){let X=G.getValue(i,T,L);if(P({id:j,localTime:L,value:X,version:G.version,type:G.type,size:G.size}),y.queue?.length>JH&&await y.waitForDrain()===!1)return}y.startTime=L}}else if(v){let L=[];for(let{key:x,value:G}of l.getRange({start:"z",end:!1,reverse:!0}))try{let j=xt(G);if(j.tableId!==n)continue;let X=j.recordId;if(I==null||ZH(I,X)){let $=j.getValue(i,T,x);if(L.push({id:X,localTime:x,value:$,version:j.version,type:j.type}),--v<=0)break}}catch(j){xe.default.error("Error getting history entry",x,j)}for(let x=L.length;x>0;)P(L[--x]);L[0]&&(y.startTime=L[0].localTime)}else if(!_.omitCurrent){for(let{key:L,value:x,version:G,localTime:j,size:X}of i.getRange({start:I??!1,end:I==null?void 0:[I,Il.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(x&&(P({id:L,localTime:j,value:x,version:G,type:"put",size:X}),y.queue?.length>JH&&await y.waitForDrain()===!1))return}}else{v&&!U&&(U=0);let L=this.#n?.localTime;if(L===Db&&(i.cache?.delete(I),this.#n=i.getEntry(I),xe.default.trace?.("re-retrieved record",L,this.#n?.localTime),L=this.#n?.localTime),xe.default.trace?.("Subscription from",U,"from",I,L),U<L){let x=[],G=L;do{let j=l.get(G);if(j){_.omitCurrent=!0;let X=xt(j),$=X.getValue(i,T,G);T&&(X.type="put"),x.push({id:I,value:$,localTime:G,...X}),G=X.previousLocalTime}else break;v&&v--}while(G>U&&v!==0);for(let j=x.length;j>0;)P(x[--j]);y.startTime=L}!_.omitCurrent&&this.doesExist()&&P({id:I,localTime:L,value:this.#e,version:this.#r,type:"put"})}for(let L of C)P(L);C=null})();function P(I){Je(I.size??1,"db-message",s,null),y.send(I)}return o(P,"send"),_.listener&&y.on("data",_.listener),y}static subscribeOnThisThread(_,T){return _===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(_,T,C){if(T===void 0||T instanceof URLSearchParams)this._writePublish(this.getId(),_,T);else{let y=!0,b=this.getContext();return _.checkPermission&&(y=this.allowCreate(b.user,_,b)),xs(y,P=>{if(!P)throw new lt.AccessViolation(b.user);let I=Ar(_);this._writePublish(I,T,C)})}}_writePublish(_,T,C){let y=br(this.getContext());_??=null,_!==null&&Mr(_);let b=this.getContext();y.addWrite({key:_,store:i,entry:this.#n,nodeName:b?.nodeName,validate:o(()=>{b?.source||(y.checkOverloaded(),this.validate(T))},"validate"),before:Te.publish?.bind(this,b,_,T),beforeIntermediate:Fe.publish?.bind(this,b,_,T),commit:o((P,I,v)=>{I===void 0&&A&&!g&&xc(),xe.default.trace?.(`Publishing message to id: ${_}, timestamp: ${new Date(P).toISOString()}`),R(_,I?.value??null,I,I?.version||P,0,!0,{user:b?.user,residencyId:C?.residencyId,expiresAt:b?.expiresAt,nodeId:C?.nodeId,tableToTrack:s},"message",!1,T)},"commit")})}validate(_,T){let C,y=o((b,P,I)=>{if(P.type&&b!=null)if(T&&b.__op__&&(b=b.value),P.properties){typeof b!="object"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an object${P.type?" ("+P.type+")":""}`);let v=P.properties;for(let U=0,L=v.length;U<L;U++){let x=v[U];if(x.relationship||x.computed){_.hasOwnProperty(x.name)&&(C||(C=[])).push(`Computed property ${I}.${x.name} may not be directly assigned a value`);continue}let G=y(b[x.name],x,I+"."+x.name);G&&(b[x.name]=G)}if(P.sealed&&b!=null&&typeof b=="object")for(let U in b)v.find(L=>L.name===U)||(C||(C=[])).push(`Property ${U} is not allowed within object in property ${I}`)}else switch(P.type){case"Int":(typeof b!="number"||b>>0!==b)&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof b!="number"||!(Math.floor(b)===b&&Math.abs(b)<=9007199254740992))&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(v=>typeof v=="string")||(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a string`);break;case"Boolean":typeof b!="boolean"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a boolean`);break;case"Date":if(!(b instanceof Date)){if(typeof b=="string"||typeof b=="number")return new Date(b);(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a Date`)}break;case"BigInt":if(typeof b!="bigint"){if(typeof b=="string"||typeof b=="number")return BigInt(b);(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a bigint`)}break;case"Bytes":if(!(b instanceof Uint8Array)){if(typeof b=="string")return Buffer.from(b);(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(b instanceof ws)){if(typeof b=="string"&&(b=Buffer.from(b)),b instanceof Buffer)return createBlob(b,{type:"text/plain"});(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a Blob`)}break;case"array":if(Array.isArray(b)){if(P.elements)for(let v=0,U=b.length;v<U;v++){let L=b[v],x=y(L,P.elements,I+"[*]");x&&(b[v]=x)}}else(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an Array`);break}P.nullable===!1&&b==null&&(C||(C=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let b=0,P=S.length;b<P;b++){let I=S[b];if(I.relationship||I.computed){Object.hasOwn(_,I.name)&&(C||(C=[])).push(`Computed property ${I.name} may not be directly assigned a value`);continue}if(!T||I.name in _){let v=y(_[I.name],I,I.name);v!==void 0&&(_[I.name]=v)}}if(f)for(let b in _)S.find(P=>P.name===b)||(C||(C=[])).push(`Property ${b} is not allowed`);if(C)throw new lt.ClientError(C.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return O?!!this.#i:void 0}static async addAttributes(_){let T=S.slice(0);for(let C of _){if(!C.name)throw new lt.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new lt.ClientError("Attribute names cannot include backticks or forward slashes");Vie(C.name),T.push(C)}return Xe({table:s,database:c,schemaDefined:u,attributes:T}),Le.indexingOperation}static async removeAttributes(_){let T=S.filter(C=>!_.includes(C.name));return Xe({table:s,database:c,schemaDefined:u,attributes:T}),Le.indexingOperation}static getSize(){let _=i.getStats();return(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getAuditSize(){let _=l?.getStats();return _&&(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getStorageStats(){let _=i.env.path,T=Zw.default.statfsSync?.(_)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(_){let T=i.getStats().entryCount,C=1e3/2,y=performance.now(),b=Math.floor(T/2),P=_?.exactCount,I=0,v=0,U;for(let{value:L}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(L!=null&&I++,v++,await Wa(),!P&&v<b&&performance.now()-y>C){U=v;break}if(U){let L=I;I=0;for(let{value:z}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:U,snapshot:!1}))z!=null&&I++,await Wa();let x=U*2,G=(I+L)/x,j=Math.pow((I-L+1)/U/2,2)+G*(1-G)/x,X=Math.max(Math.sqrt(j)*T,1),$=Math.round(G*T),be=Math.max($-1.96*X,I+L),pe=Math.min($+1.96*X,T),de=Math.pow(10,Math.round(Math.log10(X)));return de>$&&(de=de/10),I=Math.round($/de)*de,{recordCount:I,estimatedRange:[Math.round(be),Math.round(pe)]}}return{recordCount:I}}static updatedAttributes(){er=this.propertyResolvers={$id:o((_,T,C)=>({value:C.key}),"$id"),$updatedtime:o((_,T,C)=>C.version,"$updatedtime"),$updatedTime:o((_,T,C)=>C.version,"$updatedTime"),$expiresAt:o((_,T,C)=>C.expiresAt,"$expiresAt"),$record:o((_,T,C)=>C?{value:_}:_,"$record"),$distance:o((_,T,C)=>C&&(C.distance??T?.vectorDistances?.get(C)),"$distance")};for(let _ of this.attributes){_.isPrimaryKey&&(F=_),_.resolve=null;let T=_.relationship,C=_.computed;if(T)if(_.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),C&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),qf=!0,T.to)_.elements?.definition?(er[_.name]=_.resolve=(y,b,P,I)=>{let v=y[T.from?T.from:t],U=_.elements.definition.tableClass;return I?Fu({attribute:T.to,value:v},br(b).getReadTxn(),!1,U,!1).map(L=>L&&L.key!==void 0?L:U.primaryStore.getEntry(L,{transaction:br(b).getReadTxn()})).asArray:U.search([{attribute:T.to,value:v}],b).asArray},_.set=()=>{},_.resolve.definition=_.elements.definition,_.resolve.to=T.to,T.from&&(_.resolve.from=T.from)):console.error(`The one-to-many/many-to-many relationship property "${_.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(T.from){let y=_.definition||_.elements?.definition;y?(er[_.name]=_.resolve=(b,P,I,v)=>{let U=b[T.from];if(U===void 0)return;if(_.elements){let x,G=U?.map(j=>{let X=y.tableClass.primaryStore[v?"getEntry":"get"](j,{transaction:br(P).getReadTxn()});return X?.then&&(x=!0),Le.loadAsInstance===!1&&Object.freeze(v?X?.value:X),X});return T.filterMissing?x?Promise.all(G).then(j=>j.filter(eq)):G.filter(eq):x?Promise.all(G):G}let L=y.tableClass.primaryStore[v?"getEntry":"get"](U,{transaction:br(P).getReadTxn()});return Le.loadAsInstance===!1&&Object.freeze(v?L?.value:L),L},_.set=(b,P)=>{if(Array.isArray(P)){let I=P.map(v=>v.getId?.()||v[y.tableClass.primaryKey]);b[T.from]=I}else{let I=P.getId?.()||P[y.tableClass.primaryKey];b[T.from]=I}},_.resolve.definition=_.definition||_.elements?.definition,_.resolve.from=T.from):console.error(`The relationship property "${_.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${_.name}" in table "${s}" must use either "from" or "to" arguments`);else if(C)typeof C.from=="function"&&this.setComputedAttribute(_.name,C.from),er[_.name]=_.resolve=(y,b,P)=>{let I=typeof C.from=="string"?y[C.from]:y,v=this.userResolvers[_.name];if(v)return v(I,b,P);xe.default.warn(`Computed attribute "${_.name}" does not have a function assigned to it. Please use setComputedAttribute('${_.name}', resolver) to assign a resolver function.`),this.userResolvers[_.name]=()=>{}},_.resolve.directReturn=!0;else if(r[_.name]?.customIndex?.propertyResolver){let y=r[_.name].customIndex;er[_.name]=(b,P,I)=>{let v=b[_.name];return y.propertyResolver(v,P,I)},er[_.name].directReturn=!0}}ap(this,this),ap(Vf,this,!0);for(let _ of S){let T=_.name;_.resolve&&Object.defineProperty(i.encoder.structPrototype,T,{get(){return _.resolve(this,qu.getStore())},set(C){return _.set(this,C)},configurable:!0})}}static setComputedAttribute(_,T){let C=ki(S,_);if(!C){console.error(`The attribute "${_}" does not exist in the table "${s}"`);return}if(!C.computed){console.error(`The attribute "${_}" is not defined as computed in the table "${s}"`);return}this.userResolvers[_]=T}static async deleteHistory(_=0,T=!1){let C;for(let{key:y,value:b}of l.getRange({start:0,end:_}))await Wa(),xt(b).tableId===n&&(C=F_(l,y,b));if(T)for(let y of i.getRange({start:0,versions:!0})){let{key:b,value:P,localTime:I}=y;await Wa(),P===null&&I<_&&(C=nl(i,y))}await C}static async*getHistory(_=0,T=1/0){for(let{key:C,value:y}of l.getRange({start:_||1,end:T})){await Wa();let b=xt(y);b.tableId===n&&(yield{id:b.recordId,localTime:C,version:b.version,type:b.type,value:b.getValue(i,!0,C),user:b.user,operation:b.originatingOperation})}}static async getHistoryOfRecord(_){let T=[];if(_==null)throw new Error("An id is required");let C=i.getEntry(_);if(!C)return T;let y=C.localTime;if(!y)throw new Error("The entry does not have a local audit time");let b=0;do{await Wa();let P=l.get(y);if(P){let I=xt(P);T.push({id:I.recordId,localTime:y,version:I.version,type:I.type,value:I.getValue(i,!0,y),user:I.user}),y=I.previousLocalTime}else break}while(b<1e3&&y);return T.reverse()}static cleanup(){Y?.remove()}}let $E=Gg(async(K,_,T)=>{for(let C of Le.sources)if(C.get&&(!C.get.reliesOnPrototype||C.prototype.get)){if(C.available?.(T)===!1)continue;_.source=C;let y=await C.get(K,_);if(y)return y}},()=>{throw new lt.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});Le.updatedAttributes();let Kf=Le.prototype;return h&&Le.setTTLExpiration(h/1e3),J&&VE(),Le;function To(K,_,T){let C;for(let y in r){let b=r[y],P=b.isIndexing,I=er[y],v=T&&(I?I(T):T[y]),U=_&&(I?I(_):_[y]);if(v===U&&!P)continue;if(b.customIndex){b.customIndex.index(K,v,U);continue}C=!0;let L=b.indexNulls,x=(0,Ip.getIndexedValues)(v,L),G=(0,Ip.getIndexedValues)(U,L);if(s==="OrganizationRole"&&xe.default.error?.({tableName:s,id:K,key:y,valuesToAdd:x,valuesToRemove:G}),G?.length>0){let j=new Set(G);if(x=x?x.filter(X=>{if(j.has(X))j.delete(X);else return!0}):[],G=Array.from(j),(G.length>0||x.length>0)&&zH){let X=G.concat(x).map($=>({key:$,value:K}));b.prefetch(X,XH)}for(let X=0,$=G.length;X<$;X++)b.remove(G[X],K)}else x?.length>0&&zH&&b.prefetch(x.map(j=>({key:j,value:K})),XH);if(x)for(let j=0,X=x.length;j<X;j++)b.put(x[j],K)}return C}o(To,"updateIndices");function Mr(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>QH)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,Il.writeKey)(K,Jie,0)>QH)throw new Error("Primary key size is too large: "+K.length);return!0}o(Mr,"checkValidId");function Ar(K){return typeof K=="object"&&K?K.id:K}o(Ar,"requestTargetToId");function Yf(K){return typeof K=="object"&&K&&K.isCollection}o(Yf,"isSearchTarget");function cA(K){}o(cA,"isRequestTarget");function vc(K,_,T,C,y){if(Le.getResidencyById&&T.ensureLoaded&&_?.replicateFrom!==!1){let P=Bc(Le.getResidencyById(K));if(P&&!P.includes(server.hostname)&&N)return N({key:K,residency:P}).then(y)}let b=o(()=>{if(_?.transaction?.stale&&(_.transaction.stale=!1),T.transaction?.isDone)return y(null,K);let P=i.getEntry(K,T);return(c!=="system"||s==="hdb_analytics")&&(nq.default.trace?.("Recording db-read action for",`${c}.${s}`),Je(P?.size??1,"db-read",s,null)),_?._freezeRecords&&Object.freeze(P?.value),P?.residencyId&&P.metadataFlags&Dn&&N&&T.ensureLoaded&&_?.replicateFrom!==!1?N(P).then(I=>y(I,K),I=>(xe.default.error?.("Error loading remote record",K,P,T,I),y(null,K))):(P&&_&&(P?.version>(_.lastModified||0)&&(_.lastModified=P.version),P?.localTime&&!_.lastRefreshed&&(_.lastRefreshed=P.localTime)),y(P,K))},"whenPrefetched");return C?b():re>0?(re--,b()):new Promise((P,I)=>{re===0?(re--,i.prefetch([K],()=>{v(),U()})):(le.push(K),ae.push(U),le.length>aA&&(re--,v()));function v(){if(le.length>0){let L=ae;i.prefetch(le,()=>{re===-1?v():re++;for(let x of L)x()}),le=[],ae=[],Re>2&&Re--}else re=Re,Re<GE&&Re++}o(v,"prefetch");function U(){try{P(b())}catch(L){I(L)}}o(U,"load")})}o(vc,"loadLocalRecord");function Vr(K,_){let T=_?.checkPermission;if(typeof T!="object"){if(!K?.role)return;T=K.role.permission}if(T.super_user)return Xie;let C=T[c],y,b=C?.tables;if(b)return b[s];if(c==="data"&&(y=T[s])&&!y.tables)return y}o(Vr,"getTablePermissions");function Ra(K,_,T,C){if(O){let y=!1;if(T.noCache?y=!0:(_?(!_.value||_.metadataFlags&(Dn|va)||_.expiresAt!=null&&_.expiresAt<Date.now())&&(y=!0):y=!0,zr(!y,"cache-hit",s)),y){let b=Su(K,_,T).then(P=>(P?.value&&P?.value.getRecord?.()&&xe.default.error?.("Can not assign a record that is already a resource"),T&&(P?.version>(T.lastModified||0)&&(T.lastModified=P.version),T.lastRefreshed=Date.now()),P));if(T?.onlyIfCached||_?.value&&C?.allowStaleWhileRevalidate?.(_,K)){if(b.catch(P=>xe.default.warn?.(P)),T?.onlyIfCached&&!C.doesExist())throw new lt.ServerError("Entry is not cached",504);return}else return b}}else if(_?.value&&_.expiresAt!=null&&_.expiresAt<Date.now())return Le.evict(_.key,_.value,_.version),_.value=null,{then(y){return y(_)}}}o(Ra,"ensureLoadedFromSource");function br(K){let _=K?.transaction;if(_){if(!_.lmdbDb)return _.lmdbDb=i,_;do{if(_.lmdbDb?.path===i.path)return _;let T=_.next;if(!T)return _=_.next=new bo,_.lmdbDb=i,_;_=T}while(!0)}else return new p_}o(br,"txnForContext");function gu(K,_,T){if(!K)return;let C=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof _=="object"){let b=er,P=C;for(let I=0,v=_.length;I<v;I++){let U=_[I],L=b?.[U];P=L&&P?L(P,T,K):P?.[U],K=null,b=L?.definition?.tableClass?.propertyResolvers}return P}let y=er[_];return y?y(C,T,K):C[_]}o(gu,"getAttributeValue");function Wf(K,_,T,C,y){let b=y?.length,P={transaction:C,lazy:b>0||typeof _=="string"||_?.length<4,alwaysPrefetch:!0},I;function v(U,L){let x=U?.value;if(!x)return za.SKIP;for(let G=0;G<b;G++)if(!I?.includes(G)&&!y[G](x,U))return za.SKIP;return L!==void 0&&(U.key=L),U}if(o(v,"processEntry"),b>0||!K.hasEntries){let U=K.map(L=>{if(I=null,typeof L=="object"&&L?.key!==void 0)return b>0?v(L):L;if(L==null)return za.SKIP;for(let x=0;x<b;x++){let j=y[x].idFilter;if(j){if(!j(L))return za.SKIP;I||(I=[]),I.push(x)}}return vc(L,T,P,!1,v)});return Array.isArray(K)&&(U=U.filter(L=>L!==za.SKIP)),U.hasEntries=!0,U}return K}o(Wf,"transformToEntries");function Aa(K,_,T=server.replication?.getThisNodeId(l)){if(K<=_?.version){if(_?.version===K&&T!==void 0){let C=server.replication?.exportIdMapping(l),y=_.localTime,b=y&&l.get(y);if(b){let P,I,v=xt(b);for(let U in C)C[U]===T&&(P=U),C[U]===v.nodeId&&(I=U);if(P>I)return 1;if(P===I)return 0}}return-1}return 1}o(Aa,"precedesExistingVersion");async function Su(K,_,T){let C=_?.metadataFlags,y=_?.version,b,P;if(!i.attemptLock(K,y,()=>{clearTimeout(P);let L=i.getEntry(K);!L||!L.value||L.metadataFlags&(Dn|va)?b(Su(K,i.getEntry(K),T)):b(L)}))return new Promise(L=>{b=L,P=setTimeout(()=>{i.unlock(K,y)},jie)});let I=_?.value,v={requestContext:T,replacingRecord:I,replacingEntry:_,replacingVersion:y,noCacheStore:!1,source:null,resourceCache:T?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},U=T?.responseHeaders;return new Promise((L,x)=>{let G;xs(Rt(v,async j=>{let X=performance.now(),$,be,pe;try{$=await $E(K,v,_),pe=C&Dn;let z=v.lastModified||pe&&y;be=pe||z>y||!I,z||(z=(0,Ip.getNextMonotonicTime)());let ne=performance.now()-X;if(Je(ne,"cache-resolution",s,null,"success"),U&&Ap(U,"Server-Timing",`cache-resolve;dur=${ne.toFixed(2)}`,!0),j.timestamp=z,h&&v.expiresAt==null&&(v.expiresAt=Date.now()+h),$){if(typeof $!="object")throw new Error("Only objects can be cached and stored in tables");if($.status>0&&$.headers)if($.status>=300)if($.status===304)$=I,z=y;else throw new lt.ServerError($.body||"Error from source",$.status);else $=$.body;typeof $.toJSON=="function"&&($=$.toJSON()),t&&$[t]!==K&&($[t]=K)}G=!0,L({key:K,version:z,value:$})}catch(z){z.message+=` while resolving record ${K} for ${s}`,I&&((z.code==="ECONNRESET"||z.code==="ECONNREFUSED"||z.code==="EAI_AGAIN")&&!T?.mustRevalidate||T?.staleIfError&&(z.statusCode===500||z.statusCode===502||z.statusCode===503||z.statusCode===504))?(L({key:K,version:y,value:I}),xe.default.trace?.(z.message,"(returned stale record)")):x(z);let ne=performance.now()-X;Je(ne,"cache-resolution",s,null,"fail"),U&&Ap(U,"Server-Timing",`cache-resolve;dur=${ne.toFixed(2)}`,!0),v.transaction.abort();return}if(T?.noCacheStore||v.noCacheStore){v.transaction.abort();return}br(v).addWrite({key:K,store:i,entry:_,nodeName:"source",commit:o((z,ne)=>{if(ne?.version!==y)return;let me=To(K,I,$);if($){Fe.put?.(v,K,$),ne&&(T.previousResidency=Le.getResidencyRecord(ne.residencyId));let Ee,fe=!1,De,ve=Bc(Le.getResidency($,T));if(ve){if(!ve.includes(server.hostname))if(Ee=$,fe=!0,Le.getResidencyById)$=void 0;else{$=null;for(let $e in r)$||($={}),$[$e]=Ee[$e]}De=yo(ve)}xe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(z).toISOString()}`),R(K,$,ne,z,fe?Dn:0,g&&(be||fe)||null,{user:v?.user,expiresAt:v.expiresAt,residencyId:De,tableToTrack:s},"put",!!pe,Ee)}else ne&&(Fe.delete?.(v,K),xe.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(z).toISOString()}`),g||A?R(K,null,ne,z,0,g&&be||null,{user:v?.user,tableToTrack:s},"delete",!!pe):nl(i,ne,y))},"commit")})}),()=>{i.unlock(K,y)},j=>{i.unlock(K,y),G&&xe.default.error?.("Error committing cache update",j)})})}o(Su,"getFromSource");function Uc(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new lt.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new lt.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(Uc,"checkContextPermissions");function xc(K){let _=!1;if(K&&(K-Rr>1&&(_=!0),Rr=K),!(qe===Zt&&!_)&&(Zt=qe,(0,Al.getWorkerIndex)()===(0,Al.getWorkerCount)()-1))return Ht&&clearTimeout(Ht),qe?new Promise(T=>{let C=new Date;C.setMonth(0),C.setDate(1),C.setHours(0),C.setMinutes(0),C.setSeconds(0);let y=qe/(1+Rr),b=_?Date.now():Math.ceil((Date.now()-C.getTime())/y)*y+C.getTime(),P=o(I=>{xe.default.trace?.(`Scheduled next cleanup scan at ${new Date(I)}`),Ht=setTimeout(()=>ee=ee.then(async()=>{if(P(Math.max(I+qe,Date.now())),i.rootStore.status!=="open"){clearTimeout(Ht);return}let v=50,U=new Array(v),L=0,x=Math.pow(Rr,8)*(bl.get(B.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),G=E/Math.pow(Math.max(Rr,1),4);xe.default.info?.(`Starting cleanup scan for ${s}, evict threshold ${x}, adjusted eviction ${G}ms`);function j(X,$,be,pe){let de=X+G-Date.now();if(de<0)return!0;if(Rr){let z=i.lastSize;return be&Ln&&Ou(pe,ne=>{ne.size&&(z+=ne.size)}),xe.default.trace?.(`shouldEvict adjusted ${de} ${z}, ${de*(X-$)/z} < ${x}`),de*(X-$)/z<x}return!1}o(j,"shouldEvict");try{let X=0;for(let $ of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:be,value:pe,version:de,expiresAt:z,metadataFlags:ne}=$,me;pe===null&&!g&&de+zie<Date.now()?me=nl(i,$,de):z!=null&&j(z,de,ne,pe)&&(me=Le.evict(be,pe,de),X++),me&&(await U[L],U[L]=me.catch(Ee=>{xe.default.error?.("Cleanup error",Ee)}),++L>=v&&(L=0)),await Wa()}xe.default.info?.(`Finished cleanup scan for ${s}, evicted ${X} entries`)}catch(X){xe.default.warn?.(`Error in cleanup scan for ${s}:`,X)}T(void 0),Rr=0}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");P(b)}):void 0}o(xc,"scheduleCleanup");function Tu(){Y=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}o(Tu,"addDeleteRemoval");function VE(){(0,Al.getWorkerIndex)()===0&&setInterval(async()=>{if(!Mc){Mc=!0;try{let K=J.name,_=r[K];if(!_)throw new Error(`expiresAt attribute ${J} must be indexed`);for(let T of _.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let C of _.getValues(T)){let y=i.getEntry(C);y?.value?y.value[K]<Date.now()&&Le.evict(C,y.value,y.version):i.ifVersion(C,y?.version,()=>_.remove(T,C))}await Wa()}}catch(K){xe.default.error?.("Error in evicting old records",K)}finally{Mc=!1}}},Wie).unref()}o(VE,"runRecordExpirationEviction");function Bc(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let _=server.shards?.get?.(K);if(_)return xe.default.trace?.(`Shard ${K} mapped to ${_.map(T=>T.name).join(", ")}`),_.map(T=>T.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}o(Bc,"residencyFromFunction");function yo(K){if(K){let _=K.join(","),T=d.get([Symbol.for("residency_by_set"),_]);return T||(d.put([Symbol.for("residency_by_set"),_],T=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),T],K),T)}}o(yo,"getResidencyId")}function Xw(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 XH(){}function Vg(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 $g(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return $g(+e);case"Float":return e==="null"?null:$g(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;Zie.test(e)||(e+="Z");let n=new Date(e);return $g(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,Kg.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function $g(e){if(isNaN(e))throw new SyntaxError;return e}function ZH(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 xs(e,t,r){return e?.then?e.then(t,r):t(e)}function eq(e){return e!=null}function Bs(e){try{return JSON.stringify(e)}catch{return e}}function eoe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var za,Ip,tq,rq,bl,lt,wp,Np,xe,Il,Al,Kg,Zw,nq,$ie,Vie,Kie,Yie,Wie,zie,zH,jie,jH,Qie,Dn,va,Jie,QH,JH,Xie,DMe,Zie,Wa,eg=ie(()=>{H();za=require("lmdb"),Ip=w(Cn()),tq=w(require("lodash")),rq=w(mm());Ua();hm();bl=w(ue());Vb();lt=w(_e()),wp=w(ko()),Np=w(ns());Oe();Z_();xe=w(Zn());XI();Ca();Il=require("ordered-binary"),Al=w(nt());Io();Kg=w(oe());el();Ps();__();bp();Zw=w(require("node:fs"));Ns();v_();nq=w(Q());Jw();({sortBy:$ie}=tq.default),{validateAttribute:Vie}=rq.default,Kie=new Uint8Array(9);Kie[8]=192;Yie=1/0,Wie=6e4,zie=864e5;bl.initSync();zH=bl.get(B.STORAGE_PREFETCHWRITES),jie=1e4,jH=1,Qie=2,Dn=1,va=8,Jie=Buffer.allocUnsafeSlow(8192),QH=1978,JH=100,Xie={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},DMe=(0,Kg.convertToMS)(bl.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(Yg,"makeTable");o(Xw,"attributesAsObject");o(XH,"noop");Zie=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(Vg,"coerceType");o($g,"rejectNaN");o(ZH,"isDescendantId");Wa=o(()=>new Promise(setImmediate),"rest");o(xs,"when");o(eq,"exists");o(Bs,"stringify");o(eoe,"hasOtherProcesses")});function Wg(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,a=t[s]||0,c=i-a;r+=c*c}return r}function zg(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 a=0;a<i;a++){let c=e[a]||0,l=t[a]||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 iq=ie(()=>{o(Wg,"euclideanDistance");o(zg,"cosineDistance")});var oq,aq,dd,Qi,ud,toe,roe,jg,cq=ie(()=>{iq();oq=require("msgpackr"),aq=w(Zn()),dd=w(_e()),Qi=(0,aq.loggerWithTag)("HNSW"),ud=Symbol.for("entryPoint"),toe=Symbol.for("key"),roe=10,jg=class{static{o(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=oq.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?Wg:zg,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"?[toe,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 a=new Map,c,l=this.indexStore.get(ud);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let E=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:E,primaryKey:t};for(let A=0;A<=E;A++)g[A]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);Qi.debug?.("setting entry point to",i),this.indexStore.put(ud,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),roe),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);Qi.debug?.("setting entry point to",i),this.indexStore.put(ud,i)}for(;p>m;){let E=this.searchLayer(r,l,f,this.efConstruction,p);E.length>0&&(l=E[0].id,f=E[0].node),p--}let h=new Array(m+1);for(let E=0;E<=m;E++)h[E]=[];for(let E=Math.min(m,p);E>=0;E--){let g=this.searchLayer(r,l,f,this.efConstruction,E);g=g.slice(0,this.M<<1),g.length===0&&E===0&&Qi.info?.("should not have zero connections for",l);let A=h[E];for(let S=0;S<g.length;S++){let{id:R,distance:N,node:O}=g[S];if(R===i)continue;let F=[];if(this.optimizeRouting){let k=!1,J=O[E],Y=1+this.optimizeRouting*(1+.5*S/this.M);for(let le=0;le<J.length;le++){let{id:ae,distance:re}=J[le],Re=1+this.optimizeRouting*(1+.5*le/this.M);for(let Te=0;Te<A.length;Te++){let{id:Fe,distance:qe}=A[Te];if(Fe===ae){N*Y>qe+re?k=!0:re*Re>N+qe&&(F.push({fromId:Fe,toId:R}),F.push({fromId:R,toId:Fe}));break}}if(k)break}if(k)continue}else if(S>=(E>0?this.M:this.M<<1))continue;A.push({id:R,distance:N});for(let{fromId:k,toId:J}of F){let Y=d(k);Y||(Y=d(k,this.indexStore.get(k)));for(let le=0;le<Y[E].length;le++)if(Y[E][le].id===J){Object.isFrozen(Y[E])&&(Y[E]=Y[E].slice()),Y[E].splice(le,1);break}}let ee=c[E],q=ee?.find(({id:k})=>k===R);if(q){let k=ee?.indexOf(q);ee.copied||(ee=[...ee],ee.copied=!0,c[E]=ee),ee.splice(k,1)}else this.addConnection(R,d(R,O),i,E,N,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...h})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m][0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:p,value:h}of this.indexStore.getRange({start:0,end:1/0}))if(h.level>m){if(l=p,h.level===f)break;m=h.level}}if(l===void 0)this.indexStore.remove(ud);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);Qi.debug?.("setting entry point to",l),this.indexStore.put(ud,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:p}of m){let h=d(p,this.indexStore.get(p));for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:g})=>g!==i),h[E].length===0&&(Qi.info?.("node was left orphaned, will reindex",p),u.set(h.primaryKey,h.vector))}}function d(f,m){let p=a.get(f);return!p&&m&&(p={...m},a.set(f,p)),p}o(d,"updateNode");for(let[f,m]of a)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(ud);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,a=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=a(t,h.vector);if(E<f||u.length<s){let g={id:p,distance:E,node:h};l.push(g),u.push(g)}}u.sort((p,h)=>p.distance-h.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let a=0;switch(i){case"lt":case"le":a=r;case"sort":break;default:throw new dd.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new dd.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=zg;else if(s==="euclidean")c=Wg;else{if(s)throw new dd.ClientError("Unknown distance function");c=this.distance}if(!t)throw new dd.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new dd.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 a&&(d=d.filter(f=>f.distance<a)),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 a=this.indexStore.get(i);if(!a){Qi.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||Qi.info?.("asymmetry detected",a[n])}n++}}addConnection(t,r,n,s,i,a){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){Qi.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=a(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=a(f.id,m),m[s]=m[s].filter(({id:p})=>p!==t),s===0&&m[s].length===0&&Qi.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?Qi.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 a=s.shift(),c=this.indexStore.get(a);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 a=this.distance;s.type&&(a=s.distance==="euclidean"?Wg:zg);let c=a(s.target,t);return i.set(n,c),c}return t}}});var eN,lq=ie(()=>{cq();eN={HNSW:jg}});var mt={};Ie(mt,{database:()=>Zu,databaseEnvs:()=>Ko,databases:()=>Me,dropDatabase:()=>nw,dropTableMeta:()=>coe,getDatabases:()=>at,getDefaultCompression:()=>rS,getTables:()=>soe,onRemovedDB:()=>vp,onUpdatedTable:()=>wl,readMetaDb:()=>Cp,resetDatabases:()=>Ed,table:()=>Xe,tables:()=>pn});function Mp(e,t){let r=eS.OpenDBIObject??eS.default.OpenDBIObject;return new r(e,t)}function soe(){return Zg||at(),pn||{}}function at(){if(Zg)return Me;Zg=!0,pd=new Map;let e=(0,Kt.getHdbBasePath)()&&(0,Bt.join)((0,Kt.getHdbBasePath)(),kc),t=(0,Kt.get)(B.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Kt.get)(B.STORAGE_PATH)||e&&((0,ls.existsSync)(e)?e:(0,Bt.join)((0,Kt.getHdbBasePath)(),QE)),!e)return;if((0,ls.existsSync)(e))for(let n of(0,ls.readdirSync)(e,{withFileTypes:!0})){let s=(0,Bt.basename)(n.name,".mdb");n.isFile()&&(0,Bt.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&Cp((0,Bt.join)(e,n.name),null,s)}if((0,ls.existsSync)((0,md.getBaseSchemaPath)())){for(let n of(0,ls.readdirSync)((0,md.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,Bt.join)((0,md.getBaseSchemaPath)(),n.name),i=(0,Bt.join)((0,md.getTransactionAuditStoreBasePath)(),n.name);for(let a of(0,ls.readdirSync)(s,{withFileTypes:!0}))if(a.isFile()&&(0,Bt.extname)(a.name).toLowerCase()===".mdb"){let c=(0,Bt.join)(i,a.name);Cp((0,Bt.join)(s,a.name),(0,Bt.basename)(a.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,ls.existsSync)(i))for(let c of(0,ls.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,Bt.extname)(c.name).toLowerCase()===".mdb"&&Cp((0,Bt.join)(i,c.name),(0,Bt.basename)(c.name,".mdb"),n);let a=s.tables;if(a)for(let c in a){let l=a[c],u=(0,Bt.join)(l.path,(0,Bt.basename)(c+".mdb"));(0,ls.existsSync)(u)&&Cp(u,c,n,null,!0)}}for(let n in Me){let s=pd.get(n);if(s){let i=Me[n];n.includes("delete")&&Nr.trace(`defined tables ${Array.from(s.keys())}`);for(let a in i)s.has(a)||(Nr.trace(`delete table class ${a}`),delete i[a])}else if(delete Me[n],n==="data"){for(let i in pn)delete pn[i];delete pn[tS]}}let r=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"];if((0,Kt.get)(B.ANALYTICS_REPLICATE)===!1?r.push("hdb_analytics"):(Me.system?.hdb_analytics?.enableAuditing(),Me.system?.hdb_analytics_hostname?.enableAuditing()),Me.system)for(let n of r)Me.system[n]&&(Me.system[n].replicate=!1);return pd=null,Me}function Ed(){Zg=!1;for(let[,e]of Ko)e.needsDeletion=!0;at();for(let[e,t]of Ko)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Ko.delete(e);let r=Me[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete Me[t.databaseName],Pp.forEach(i=>i(t.databaseName));break}}return Me}function Cp(e,t,r=nN,n,s){let i=new tN.default(e,!1);try{let a=Ko.get(e);a?a.needsDeletion=!1:(a=(0,hd.open)(i),Ko.set(e,a));let c=new Mp(!1),l=a.dbisDb||(a.dbisDb=a.openDB(Qg.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,ls.existsSync)(n)&&(i.path=n,u=(0,hd.open)(i),u.isLegacy=!0):u=B_(a));let d=pq(r),f=d[tS],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,g]=p.toString().split("/");g===""?g=h.name:g||(g=E,E=t,h.name||(h.name=g,h.indexed=!h.is_hash_attribute)),f?.add(E);let A=m.get(E);A||m.set(E,A={attributes:[]}),(g==null||h.is_hash_attribute)&&(A.primary=h),g!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:g}=h;if(!g){for(let re of E)if(re.is_hash_attribute||re.isPrimaryKey){g=re;break}if(!g){Nr.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let A=d[p],S={},R=[],N,O,F=typeof g.audit=="boolean"?g.audit:(0,Kt.get)(B.LOGGING_AUDITLOG),ee=g.trackDeletes,q=g.expiration,k=g.eviction,J=g.sealed,Y=g.splitSegments,le=g.replicate;if(A)S=A.indices,R=A.attributes,A.schemaVersion++;else{N=g.tableId,N?N>=(l.get(fd)||0)&&(l.putSync(fd,N+1),Nr.info(`Updating next table id (it was out of sync) to ${N+1} for ${p}`)):(g.tableId=N=l.get(fd),N||(N=1),Nr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(fd,N+1),l.putSync(g.key,g));let re=new Mp(!g.is_hash_attribute,g.is_hash_attribute);if(re.compression=g.compression,re.compression){let Re=(0,Kt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||mq;re.compression.threshold=Re}O=j_(a.openDB(g.key,re),a),a.databaseName=r,O.tableId=N}let ae;for(let re of E){re.attribute=re.name;try{if(!re.is_hash_attribute&&(re.indexed||re.attribute&&!re.name)){if(!S[re.name]){let Te=Eq(re.key,a,re);S[re.name]=Te,S[re.name].indexNulls=re.indexNulls}let Re=R.find(Te=>Te.name===re.name);Re?R.splice(R.indexOf(Re),1,re):R.push(re),ae=!0}}catch(Re){Nr.error("Error trying to update attribute",re,R,S,Re)}}for(let re of R)if(!E.find(Te=>Te.name===re.name)){if(re.is_hash_attribute){Nr.error("Unable to remove existing primary key attribute",re);continue}re.indexed&&(R.splice(R.indexOf(re),1),ae=!0)}if(A)ae&&(A.schemaVersion++,A.updatedAttributes());else{A=hq(d,p,Yg({primaryStore:O,auditStore:u,audit:F,sealed:J,splitSegments:Y,replicate:le,expirationMS:q&&q*1e3,evictionMS:k&&k*1e3,trackDeletes:ee,tableName:p,tableId:N,primaryKey:g.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:g.schemaDefined,dbisDB:l})),A.schemaVersion=1;for(let re of Op)re(A)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function pq(e){let t=Me[e];if(t||(e==="data"?t=Me[e]=pn:e==="system"?Object.defineProperty(Me,"system",{value:t=Object.create(null),configurable:!0}):t=Me[e]=Object.create(null)),pd&&!pd.has(e)){let r=new Set;t[tS]=r,pd.set(e,r)}return t}function hq(e,t,r){return e[t]=r,r}function Zu({database:e,table:t}){e||(e=nN),at();let r=pq(e),n=(0,Bt.join)((0,Kt.getHdbBasePath)(),kc),s=(0,Kt.get)(B.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,Kt.get)(B.STORAGE_PATH)||((0,ls.existsSync)(n)?n:(0,Bt.join)((0,Kt.getHdbBasePath)(),QE));let a=(0,Bt.join)(n,(i?t:e)+".mdb"),c=Ko.get(a);if(!c||c.status==="closed"){let l=new tN.default(a,!1);c=(0,hd.open)(l),Ko.set(a,c)}return c.auditStore||(c.auditStore=B_(c)),c}async function nw(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,Ko.delete(r.path),r.status==="open"&&(await r.close(),await Lp.remove(r.path));if(r||(r=Zu({database:e,table:null}),r.status==="open"&&(await r.close(),await Lp.remove(r.path))),e==="data"){for(let n in pn)delete pn[n];delete pn[tS]}delete Me[e],Pp.forEach(n=>n(e)),await rb(r)}function Eq(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&eN[r.indexed.type]?.useObjectStore,s=new Mp(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=eN[r.indexed.type];a?i.customIndex=new a(i,r.indexed):Nr.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function Xe(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:a,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=nN);let h=Zu({database:r,table:t}),E=Me[r];Nr.trace(`Defining ${t} in ${r}`);let g=E?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let A,S,R;m==null&&(m=!0);let N=new Mp(!1);for(let Y of a)Y.attribute&&!Y.name?(Y.name=Y.attribute,Y.indexed=!0):Y.attribute=Y.name,Y.expiresAt&&(Y.indexed=!0);let O,F;if(g){if(A=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...a)}else{let Y=h.auditStore;S=a.find(Re=>Re.isPrimaryKey)||{},A=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=rS(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,Kt.get)(B.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]),Nr.trace(`${t} table loading, opening primary store`);let le=new Mp(!1,!0);le.compression=S.compression;let ae=t+"/";if(R=h.dbisDb=h.openDB(Qg.INTERNAL_DBIS_NAME,N),J(),R.get(ae))return F&&F(),Ed(),Xe(e);let re=j_(h.openDB(ae,le),h);h.databaseName=r,re.tableId=R.get(fd),Nr.trace(`Assigning new table id ${re.tableId} for ${t}`),re.tableId||(re.tableId=1),R.put(fd,re.tableId+1),S.tableId=re.tableId,g=hq(E,t,Yg({primaryStore:re,auditStore:Y,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:A,tableName:t,tableId:re.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:R})),g.schemaVersion=1,O=!0,R.put(ae,S)}let ee=g.indices;R=R||(h.dbisDb=h.openDB(Qg.INTERNAL_DBIS_NAME,N)),g.dbisDB=R;let q=[];for(let{key:Y,value:le}of R.getRange({start:!0})){let[ae,re]=Y.toString().split("/");if(re===""&&(re=le.name),re){if(ae!==t)continue}else continue;let Re=a.find(Fe=>Fe.name===re),Te=!Re?.indexed&&le.indexed&&!le.isPrimaryKey;if((!Re||Te)&&(J(),O=!0,Re||R.remove(Y),Te)){let Fe=g.indices[ae];Fe&&q.push(Fe)}}let k=[];try{for(let Y of a||[]){if((Y.relationship||Y.computed)&&(O=!0,Y.relationship))continue;let le=t+"/"+(Y.name||"");Object.defineProperty(Y,"key",{value:le,configurable:!0});let ae=R.get(le);if(Y.isPrimaryKey){if(ae=ae||R.get(le=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+ae.expiration||void 0)||(+s||void 0)!==(+ae.eviction||void 0)||Y.type!==ae.type){let Re={...ae};typeof c=="boolean"&&(c&&g.enableAuditing(c),Re.audit=c),n&&(Re.expiration=+n),s&&(Re.eviction=+s),l!==void 0&&(Re.sealed=l),d!==void 0&&(Re.replicate=d),Y.type&&(Re.type=Y.type),O=!0,J(),R.put(le,Re)}continue}ae?.attribute&&!ae.name&&(ae.indexed=!0);let re=!ae||ae.type!==Y.type||JSON.stringify(ae.indexed)!==JSON.stringify(Y.indexed)||ae.nullable!==Y.nullable||ae.version!==Y.version||JSON.stringify(ae.properties)!==JSON.stringify(Y.properties)||JSON.stringify(ae.elements)!==JSON.stringify(Y.elements);if(Y.indexed){let Re=Eq(le,h,Y);(re||ae.indexingPID&&ae.indexingPID!==process.pid||ae.restartNumber<Dp.workerData?.restartNumber)&&(O=!0,J(),ae=R.get(le),(re||ae.indexingPID&&ae.indexingPID!==process.pid||ae.restartNumber<Dp.workerData?.restartNumber)&&(O=!0,Y.indexNulls===void 0&&(Y.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(Y.lastIndexedKey=ae?.lastIndexedKey??void 0,Y.indexingPID=process.pid,Re.isIndexing=!0,Object.defineProperty(Y,"dbi",{value:Re}),k.push(Y))),R.put(le,Y)),ae?.indexNulls&&Y.indexNulls===void 0&&(Y.indexNulls=!0),Re.indexNulls=Y.indexNulls,ee[Y.name]=Re}else re&&(O=!0,J(),R.put(le,Y))}}finally{F&&F()}if(O&&(g.schemaVersion++,g.updatedAttributes()),Nr.trace(`${t} table loading, running index`),k.length>0||q.length>0?g.indexingOperation=aoe(g,k,q):O&&Jg.signalSchemaChange(new Xg.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=p,O)for(let Y of Op)Y(g,p!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Nr.trace(`${t} table loaded`),g;function J(){F||h.transactionSync(()=>({then(Y){F=Y}}))}o(J,"startTxn")}async function aoe(e,t,r){try{Nr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await Jg.signalSchemaChange(new Xg.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,a={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,hd.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:p}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,p,()=>{for(let h=0;h<l;h++){let E=t[h],g=E.name,A=E.dbi;try{let S=E.resolve,R=m&&(S?S(m):m[g]);if(A.customIndex){A.customIndex.index(f,R);continue}let N=(0,uq.getIndexedValues)(R);if(N)for(let O=0,F=N.length;O<F;O++)A.put(N[O],f)}catch(S){a[g]||(a[g]=!0,Nr.error(`Error indexing attribute ${g}`,S))}}}),s.then(()=>d--,h=>{d--,Nr.error(h)}),Dp.workerData&&Dp.workerData.restartNumber!==fq.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>ioe?await s:d>ooe&&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 Jg.signalSchemaChange(new Xg.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Nr.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Nr.error("Error in indexing",n)}}function coe({table:e,database:t}){let r=Zu({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 wl(e){return Op.push(e),{remove(){let t=Op.indexOf(e);t>-1&&Op.splice(t,1)}}}function vp(e){return Pp.push(e),{remove(){let t=Pp.indexOf(e);t>-1&&Pp.splice(t,1)}}}function rS(){let e=(0,Kt.get)(B.STORAGE_COMPRESSION),t=(0,Kt.get)(B.STORAGE_COMPRESSION_DICTIONARY),r=(0,Kt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||mq,n={startingOffset:32};return t&&(n.dictionary=Lp.readFileSync(t)),r&&(n.threshold=r),e&&n}var Kt,Qg,hd,Bt,ls,md,tN,Lp,rN,uq,Jg,Xg,Dp,dq,fq,eS,noe,Nr,nN,tS,mq,pn,Me,fd,Op,Pp,Zg,Ko,pd,ioe,ooe,Oe=ie(()=>{Kt=w(ue()),Qg=w($t()),hd=require("lmdb"),Bt=require("path"),ls=require("fs"),md=w(yt());eg();tN=w($m());H();Lp=w(require("fs-extra")),rN=w(ii()),uq=w(Cn()),Jg=w(ko()),Xg=w(ns()),Dp=require("worker_threads"),dq=w(Q()),fq=w(nt());Io();el();Ns();lq();eS=w(Gm()),{forComponent:noe}=dq.default;o(Mp,"OpenDBIObject");Nr=noe("storage"),nN="data",tS=Symbol("defined-tables"),mq=((0,Kt.get)(B.STORAGE_PAGESIZE)||4096)-60;(0,Kt.initSync)();pn=Object.create(null),Me=Object.create(null);(0,rN._assignPackageExport)("databases",Me);(0,rN._assignPackageExport)("tables",pn);fd=Symbol.for("next-table-id"),Op=[],Pp=[],Ko=new Map;o(soe,"getTables");o(at,"getDatabases");o(Ed,"resetDatabases");o(Cp,"readMetaDb");o(pq,"ensureDB");o(hq,"setTable");o(Zu,"database");o(nw,"dropDatabase");o(Eq,"openIndex");o(Xe,"table");ioe=1e3,ooe=10;o(aoe,"runIndexing");o(coe,"dropTableMeta");o(wl,"onUpdatedTable");o(vp,"onRemovedDB");o(rS,"getDefaultCompression")});var oN={};Ie(oN,{loadGQLSchema:()=>doe,start:()=>iN,startOnMainThread:()=>uoe});function iN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:a,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=a(new c(r.toString(),s)),m=new Map,p=[],h;for(let A of f.definitions)switch(A.kind){case l.OBJECT_TYPE_DEFINITION:let F=function(q){if(q.kind==="NonNullType"){let Y=F(q.type);return Y.nullable=!1,Y}if(q.kind==="ListType")return{type:"array",elements:F(q.type)};let J={type:q.name?.value};return Object.defineProperty(J,"location",{value:q.loc.startToken}),J};o(F,"getProperty");let S=A.name.value,R=[],N={table:null,database:null,properties:R};m.set(S,N),i.allTypes.set(S,N);for(let q of A.directives){if(q.name.value==="table"){for(let J of q.arguments)N[J.name.value]=J.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=S),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,p.push(N)}if(q.name.value==="sealed"&&(N.sealed=!0),q.name.value==="splitSegments"&&(N.splitSegments=!0),q.name.value==="replicate"&&(N.replicate=!0),q.name.value==="export"){N.export=!0;for(let J of q.arguments)typeof N.export!="object"&&(N.export={}),N.export[J.name.value]=J.value.value}}let O=!1,ee={};for(let q of A.fields){let k=F(q.type);k.name=q.name.value,R.push(k),ee[k.name]=void 0;for(let J of q.directives){let Y=J.name.value;if(Y==="primaryKey")O?console.warn("Can not define two attributes as a primary key at",J.loc):(k.isPrimaryKey=!0,O=!0);else if(Y==="indexed"){let le={};for(let ae of J.arguments||[])le[ae.name.value]=ae.value.value;k.indexed=le}else if(Y==="computed"){for(let le of J.arguments||[])if(le.name.value==="from"){let ae=le.value.value;k.computed={from:g(ae,le,ee)},k.version==null&&(k.version=ae)}else le.name.value==="version"&&(k.version=le.value.value);k.computed=k.computed||!0}else if(Y==="relationship"){let le={};for(let ae of J.arguments)le[ae.name.value]=ae.value.value;k.relationship=le}else if(Y==="createdTime")k.assignCreatedTime=!0;else if(Y==="updatedTime")k.assignUpdatedTime=!0;else if(Y==="expiresAt")k.expiresAt=!0;else if(Y==="allow"){let le=k.authorizedRoles=[];for(let ae of J.arguments)ae.name.value==="role"&&le.push(ae.value.value)}else server.knownGraphQLDirectives.includes(Y)&&console.warn(`@${Y} is an unknown directive, at`,J.loc)}}N.type=S,S==="Query"&&(h=N)}function E(A){let S=m.get(A.type);S?(Object.defineProperty(A,"properties",{value:S.properties}),Object.defineProperty(A,"definition",{value:S})):A.type==="array"?E(A.elements):loe.includes(A.type)||(0,gq.getWorkerIndex)()===0&&console.error(`The type ${A.type} is unknown at line ${A.location.line}, column ${A.location.column}, in ${s}`)}o(E,"connectPropertyType");for(let A of m.values())for(let S of A.properties)E(S);for(let A of p)A.tableClass=e(A),A.export&&(A.export.name===""?i.set((0,sN.dirname)(n),A.tableClass):i.set((0,sN.dirname)(n)+"/"+(A.export.name||A.type),A.tableClass,A.export));function g(A,S,R){return new _q.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${A}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(R)}o(g,"createComputedFrom")}}var sN,_q,gq,loe,uoe,doe,Sq=ie(()=>{sN=require("path"),_q=require("node:vm");Oe();gq=w(nt());xa();loe=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);o(iN,"start");uoe=iN,doe=o(e=>iN({ensureTable:Xe}).handleFile(e,null,null,new $u),"loadGQLSchema")});var cN={};Ie(cN,{start:()=>Toe});function foe(e){if(e.kind!==He.Kind.OPERATION_DEFINITION&&e.kind!==He.Kind.FRAGMENT_DEFINITION)throw new qr(`Unexpected non-executable definition type ${e.kind}.`)}function Tq(e){if(typeof e!="object"||e===null)throw new Ji("Request body must be an object.");if(!("query"in e))throw new Ji("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Ji("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Ji("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Ji("Request body `operationName` field must be a string.")}function aN(e){return parseInt(e.value,10)}function Rq(e){return parseFloat(e.value)}function Aq(e,t,r){let n=r.get(e.name.value);return bq(n)?Iq(n,t):{attribute:t,value:n}}function bq(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function Iq(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],bq(n)?Iq(n,t):{attribute:t,value:n}))}function moe(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case He.Kind.NULL:return{attribute:t,value:null};case He.Kind.INT:return{attribute:t,value:aN(e.value)};case He.Kind.FLOAT:return{attribute:t,value:Rq(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:t,value:e.value.value};case He.Kind.VARIABLE:return Aq(e.value,t,r);case He.Kind.OBJECT:return wq(e.value,t,r);case He.Kind.LIST:case He.Kind.ENUM:default:throw new qr(`Value type, ${e.value.kind}, is not supported.`)}}function wq(e,t,r){return e.fields.flatMap(n=>moe(n,t,r))}function poe(e,t){switch(e.value.kind){case He.Kind.NULL:return{attribute:e.name.value,value:null};case He.Kind.INT:return{attribute:e.name.value,value:aN(e.value)};case He.Kind.FLOAT:return{attribute:e.name.value,value:Rq(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case He.Kind.VARIABLE:return Aq(e.value,e.name.value,t);case He.Kind.OBJECT:return wq(e.value,[e.name.value],t);case He.Kind.LIST:case He.Kind.ENUM:default:throw new qr(`Argument type, ${e.value.kind}, is not supported.`)}}function hoe(e,t){return e.flatMap(r=>poe(r,t))}function nS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case He.Kind.FIELD:return r;case He.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new qr(`Fragment \`${n}\` not found.`);return nS(s.selectionSet,t)}case He.Kind.INLINE_FRAGMENT:return nS(r.selectionSet,t)}})}function Nq(e,t){return nS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:Nq(r.selectionSet,t)}:r.name.value)}async function Eoe(e,t,r,n){let s=Ds.getMatch(e.name.value,"graphql");if(s===void 0)throw new qr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,a={select:Nq(e.selectionSet,r),conditions:hoe(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(a,n))c.push(l);return[e.name.value,c]}function Cq(e){switch(e.kind){case He.Kind.NULL:return null;case He.Kind.INT:return aN(e);case He.Kind.FLOAT:return parseFloat(e.value);case He.Kind.STRING:case He.Kind.BOOLEAN:return e.value;case He.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:Cq(r.value),...t}),{});case He.Kind.LIST:case He.Kind.ENUM:default:throw new qr(`Value type, ${e.kind}, is not supported.`)}}function _oe(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=Cq(n.defaultValue)),n.type.kind===He.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new qr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function goe(e,t,r,n){if(e.operation===He.OperationTypeNode.SUBSCRIPTION)throw new qr("Subscriptions are not supported.");if(e.operation===He.OperationTypeNode.MUTATION)throw new qr("Mutations are not supported yet.");let s=_oe(e.variableDefinitions,t),i=await Promise.all(nS(e.selectionSet,r).map(c=>Eoe(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function yq({query:e,variables:t={},operationName:r},n){let s=He.parse(e),i=new Map,a=new Map;for(let u of s.definitions)if(foe(u),u.kind===He.Kind.FRAGMENT_DEFINITION)a.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new qr("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 qr(`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 qr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new qr(`Operation \`${r}\` not found.`);let l=await goe(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Soe(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 Tq(r),yq(r,e)}case"POST":{let r=await Oo(e.headers.get("content-type"),!0)(e._nodeRequest);return Tq(r),yq(r,e)}default:throw new Ji("Method Not Allowed",405,{Allow:"GET, POST"})}}function Toe(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Soe(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Ji)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof He.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof qr)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 Ji)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof He.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof qr)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var He,qr,Ji,Oq=ie(()=>{He=w(require("graphql"));Po();xa();o(foe,"assertExecutableDefinitionNode");o(Tq,"assertRequestParams");o(aN,"processIntValueNode");o(Rq,"processFloatValueNode");o(Aq,"processVariableNode");o(bq,"isObject");o(Iq,"transformObjectIntoQueryCondition");o(moe,"processObjectFieldNode");o(wq,"processObjectValueNode");o(poe,"processArgumentNode");o(hoe,"buildConditionsQuery");o(nS,"fillInFragments");o(Nq,"buildSelectQuery");o(Eoe,"processFieldNode");o(Cq,"processConstValueNode");o(_oe,"resolveVariables");o(goe,"executeOperation");o(yq,"resolver");qr=class extends Error{static{o(this,"GraphQLQueryingError")}},Ji=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(Soe,"graphqlQueryingHandler");o(Toe,"start")});var Uq=M((eve,vq)=>{var _d=require("validate.js"),Lq=ft(),gd=(H(),D(W)),{handleHDBError:yoe,hdbErrors:Roe}=_e(),{HDB_ERROR_MSGS:nr,HTTP_STATUS_CODES:Aoe}=Roe,lN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),boe={STRUCTURE_USER:"structure_user"},Pq=Object.values(gd.ROLE_TYPES_ENUM),Ioe="attribute_permissions",woe="attribute_name",{PERMS_CRUD_ENUM:Sd}=gd,Noe=[Ioe,...Object.values(Sd)],Dq=[Sd.READ,Sd.INSERT,Sd.UPDATE],Coe=[woe,...Dq];function Ooe(e){let t=lN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Mq(e,t)}o(Ooe,"addRoleValidation");function Poe(e){let t=lN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Mq(e,t)}o(Poe,"alterRoleValidation");function Loe(e){let t=lN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Lq.validateObject(e,t)}o(Loe,"dropRoleValidation");var Doe=["operation","role","id","permission","hdb_user","access"];function Mq(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)Doe.includes(n[a])||s.push(n[a]);s.length>0&&mr(nr.INVALID_ROLE_JSON_KEYS(s),r);let i=Lq.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{mr(a,r)}),e.permission){let a=Moe(e);a&&mr(a,r),Pq.forEach(c=>{e.permission[c]&&!_d.isBoolean(e.permission[c])&&mr(nr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(Pq.indexOf(a)<0){if(a===boe.STRUCTURE_USER){let l=e.permission[a];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]||mr(nr.SCHEMA_NOT_FOUND(f),r)}continue}mr(nr.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){mr(nr.SCHEMA_NOT_FOUND(a),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[a][l]){mr(nr.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{Noe.includes(d)||mr(nr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(Sd).forEach(d=>{_d.isDefined(u[d])?_d.isBoolean(u[d])||mr(nr.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):mr(nr.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){mr(nr.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){mr(nr.ATTR_PERMS_NOT_ARRAY,r,a,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[a][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=>{!Coe.includes(E)&&E!==Sd.DELETE&&mr(nr.INVALID_ATTR_PERM_KEY(E),r,a,l)}),!_d.isDefined(p.attribute_name)){mr(nr.ATTR_PERM_MISSING_NAME,r,a,l);continue}let h=p.attribute_name;if(!d.includes(h)){mr(nr.INVALID_ATTRIBUTE_IN_PERMS(h),r,a,l);continue}Dq.forEach(E=>{_d.isDefined(p[E])?_d.isBoolean(p[E])||mr(nr.ATTR_PERM_NOT_BOOLEAN(E,h),r,a,l):mr(nr.ATTR_PERM_MISSING(E,h),r,a,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=`${a}.${l}`;mr(nr.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return voe(r)}o(Mq,"customValidate");vq.exports={addRoleValidation:Ooe,alterRoleValidation:Poe,dropRoleValidation:Loe};function Moe(e){let{operation:t,permission:r}=e;if(t===gd.OPERATIONS_ENUM.ADD_ROLE||t===gd.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 nr.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?gd.ROLE_TYPES_ENUM.SUPER_USER:gd.ROLE_TYPES_ENUM.CLUSTER_USER;return nr.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(Moe,"validateNoSUPerms");function voe(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:nr.ROLE_PERMS_ERROR,...e};return yoe(new Error,n,Aoe.BAD_REQUEST)}else return null}o(voe,"generateRolePermResponse");function mr(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]}}o(mr,"addPermError")});var xp=M((nve,kq)=>{"use strict";var xq=Bn(),Bq=fn(),Uoe=gl(),dN=Uq(),fN=ko(),rve=require("uuid").v4,xoe=require("util"),sS=(H(),D(W)),Boe=oe(),mN=Bq.searchByValue,Foe=Bq.searchByHash,koe=xoe.promisify(Uoe.delete),Hoe=di(),qoe=Ju(),{hdbErrors:Goe,handleHDBError:Nl}=_e(),{HDB_ERROR_MSGS:Fq,HTTP_STATUS_CODES:Up}=Goe,{UserEventMsg:pN}=ns();kq.exports={addRole:$oe,alterRole:Voe,dropRole:Koe,listRoles:Yoe};function uN(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}o(uN,"scrubRoleDetails");async function $oe(e){let t=dN.addRoleValidation(e);if(t)throw t;e=uN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await mN(r)||[])}catch(i){throw Nl(i)}if(n&&n.length>0)throw Nl(new Error,Fq.ROLE_ALREADY_EXISTS(e.role),Up.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 xq.insert(s),fN.signalUserChange(new pN(process.pid)),e=uN(e),e}o($oe,"addRole");async function Voe(e){let t=dN.alterRoleValidation(e);if(t)throw t;e=uN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await xq.update(r)}catch(s){throw Nl(s)}if(n&&n?.message==="updated 0 of 1 records")throw Nl(new Error,"Invalid role id",Up.BAD_REQUEST,void 0,void 0,!0);return await fN.signalUserChange(new pN(process.pid)),e}o(Voe,"alterRole");async function Koe(e){let t=dN.dropRoleValidation(e);if(t)throw Nl(new Error,t,Up.BAD_REQUEST,void 0,void 0,!0);let r=new qoe(sS.SYSTEM_SCHEMA_NAME,sS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Foe(r));if(n.length===0)throw Nl(new Error,Fq.ROLE_NOT_FOUND,Up.NOT_FOUND,void 0,void 0,!0);let s=new Hoe(sS.SYSTEM_SCHEMA_NAME,sS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await mN(s)),a=!1;if(Boe.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){a=!0;break}}if(a===!0)throw Nl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Up.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await koe(c),fN.signalUserChange(new pN(process.pid)),`${n[0].role} successfully deleted`}o(Koe,"dropRole");async function Yoe(){return mN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}o(Yoe,"listRoles")});var hN={};Ie(hN,{start:()=>Gq,startOnMainThread:()=>joe});function Gq({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,Hq.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 a in i.permission){if(Woe.includes(a))continue;let c=i.permission[a];c.tables||(i.permission[a]=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 zoe(i)}}}async function zoe(e){let t=at().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,qq.isEqual)(i,e)?void 0:(e.id=r.id,(0,iS.alterRole)(e))}return(0,iS.addRole)(e)}var iS,Hq,qq,Woe,joe,$q=ie(()=>{Oe();iS=w(xp()),Hq=require("yaml"),qq=require("lodash"),Woe=["super_user","cluster_user","structure_user"];o(Gq,"start");o(zoe,"ensureRole");joe=Gq});async function oS(e){let t=(0,Yq.pathToFileURL)(e).toString();if(Qoe)return Bp||(Bp=Joe(Zoe)),(await(await Bp).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Joe(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Bp=new Compartment({console,Math,Date,fetch:Xoe,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,Kq.extname)(r)||(r+=".js"),r)},importHook:o(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Fr,s.tables=pn,s.databases=Me}};let n=await(0,Vq.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Bp}function Xoe(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 Zoe(){return{Resource:Fr,tables:pn}}var Vq,Kq,Yq,Qoe,Bp,EN=ie(()=>{Ua();Oe();Vq=require("fs/promises"),Kq=require("path"),Yq=require("url"),Qoe=!1;o(oS,"secureImport");o(Joe,"getCompartment");o(Xoe,"secureOnlyFetch");o(Zoe,"getGlobalVars")});var _N={};Ie(_N,{handleApplication:()=>eae,suppressHandleApplicationWarning:()=>tae});function Wq(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function eae(e){e.handleEntry(t=>{if(t.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${t.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(t.eventType!=="add"){e.requestRestart();return}oS(t.absolutePath).then(r=>{let n=(0,aS.dirname)(t.urlPath);Wq(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),zq(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function zq(e,t,r){for(let n in t){let s=t[n],i=(0,aS.join)(r,n);Wq(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&zq(e,s,i)}}var aS,tae,jq=ie(()=>{EN();aS=require("path");o(Wq,"isResource");o(eae,"handleApplication");o(zq,"recurseForResources");tae=!0});var SN={};Ie(SN,{start:()=>rae});function rae({resources:e}){e.set("login",gN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var gN,Qq=ie(()=>{Ua();o(rae,"start");gN=class extends Fr{static{o(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:a}=r;return{data:await n.login(s,i)}}}});function rG(e){let t={openapi:nae,info:{title:"HarperDB HTTP REST interface",version:eG.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}],n=o(s=>{if(s.type&&!t.components.schemas[s.type]){t.components.schemas[s.type]={};let i={},a=[];for(let c of s.properties)cS[c.type]?i[c.name]=new yN(cS[c.type],c.type):c.properties?(i[c.name]=new nG(c.type),n(c)):c.elements?.properties&&(i[c.name]=new lae(c.elements.type),n(c.elements)),c.nullable===!1&&a.push(c.name);t.components.schemas[s.type]=new Zq(i,!s.sealed,a)}},"includeDefinitionInSchema");for(let[,s]of e){if(!s.path||s.Resource.isError)continue;let{path:i}=s,a=i.split("/").pop(),{attributes:c,sealed:l}=s.Resource,{prototype:u,primaryKey:d="id"}=s.Resource;if(!c&&e.allTypes.has(s.path)){let ee=e.allTypes.get(s.path);l=ee.sealed,c=ee.properties}if(!d)continue;let f={},m=[],p=[];if(c)for(let{type:ee,name:q,elements:k,relationship:J,definition:Y,nullable:le}of c){let ae=Y??k?.definition;ae&&n(ae),le===!1&&p.push(q),J?ee==="array"?f[q]={type:"array",items:{$ref:Fs+k.type}}:f[q]={$ref:Fs+ee}:ae?ee==="array"?f[q]={type:"array",items:{$ref:Fs+ae.type}}:f[q]={$ref:Fs+ae.type}:ee==="array"?k.type==="Any"?f[q]={type:"array",items:{format:k.type}}:f[q]={type:"array",items:new yN(cS[k.type],k.type)}:ee==="Any"?f[q]={format:ee}:f[q]=new yN(cS[ee],ee),m.push(new RN(q,"query",f[q]))}let h=Object.keys(f),E=new RN(d,"path",{type:"string",format:"ID"});E.required=!0,E.description="primary key of record";let g=new RN("property","path",{enum:h});g.required=!0,t.components.schemas[a]=new Zq(f,!l,p);let A=u.post!==Resource.prototype.post||u.update,S=typeof u.put=="function",R=typeof u.get=="function",N=typeof u.delete=="function",O=typeof u.patch=="function",F="/"+i+"/";A&&(t.paths[F]={},t.paths[F].post=new sae(a,r,{200:new Td({$ref:Fs+a},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),R&&(t.paths[F]||(t.paths[F]={}),t.paths[F].get=new TN(m,r,{200:new Td({type:"array",items:{$ref:Fs+a}})},"search for records by the specified property name and value pairs")),t.paths[F]||(t.paths[F]={}),t.paths[F].options=new iae(m,r,{200:new oae},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),N&&(t.paths[F]||(t.paths[F]={}),t.paths[F].delete=new Xq(m,r,"delete all the records that match the provided query",{204:new Jq})),F="/"+i+"/{"+d+"}",R&&(t.paths[F]={},t.paths[F].get=new TN([E],r,{200:new Td({$ref:Fs+a})},"retrieve a record by its primary key")),S&&(t.paths[F]||(t.paths[F]={}),t.paths[F].put=new aae([E],r,a,{200:new Td({$ref:Fs+a})},"create or update the record with the URL path that maps to the record's primary key")),O&&(t.paths[F]||(t.paths[F]={}),t.paths[F].patch=new cae([E],r,a,{200:new Td({$ref:Fs+a})},"patch the record with the URL path that maps to the record's primary key")),N&&(t.paths[F]||(t.paths[F]={}),t.paths[F].delete=new Xq([E],r,"delete a record with the given primary key",{204:new Jq})),R&&g.schema.enum.length>0&&(F="/"+i+"/{"+d+"}.{property}",t.paths[F]={},t.paths[F].get=new TN([E,g],r,{200:new Td({enum:h})},"used to retrieve the specified property of the specified record"))}for(let[,s]of e.allTypes)n(s),s.sealed&&t.components.schemas[s.type].additionalProperties&&(t.components.schemas[s.type].additionalProperties=!1);return t}function sae(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Fs+e}}}},this.security=t,this.responses=r}function TN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function iae(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function oae(){this.description=tG,this.headers={},this.content={}}function Td(e,t){this.description=tG,this.content={"application/json":{schema:e}},this.headers=t}function Jq(){this.description="successfully processed request, no content returned to client"}function aae(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Fs+r}}}},this.responses=n}function cae(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Fs+r}}}},this.responses=n}function Xq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function Zq(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function yN(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function nG(e){this.$ref=`#/components/schemas/${e}`}function lae(e){this.type="array",this.items=new nG(e)}function RN(e,t,r){this.name=e,this.in=t,this.schema=r}var eG,nae,cS,Fs,tG,sG=ie(()=>{eG=w(bt()),nae="3.0.3",cS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Fs="#/components/schemas/",tG="successful operation";o(rG,"generateJsonApi");o(sae,"Post");o(TN,"Get");o(iae,"Options");o(oae,"ResponseOptions200");o(Td,"Response200");o(Jq,"Response204");o(aae,"Put");o(cae,"Patch");o(Xq,"Delete");o(Zq,"ResourceSchema");o(yN,"Type");o(nG,"Ref");o(lae,"ArrayRef");o(RN,"Parameter")});var oG={};Ie(oG,{Request:()=>ja,createReuseportFd:()=>lS});var iG,ja,AN,bN,lS,Fp=ie(()=>{iG=require("os"),ja=class{static{o(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 bN(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 AN(this._nodeRequest))}get host(){return this._nodeRequest.authority||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)}},AN=class{static{o(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)}},bN=class{static{o(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,iG.platform)()!="win32"&&(lS=require("node-unix-socket").createReuseportFd)});var dS={};Ie(dS,{parseHeaderValue:()=>wN,start:()=>fae});async function dae(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&X_(e);let i=new Us;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==aG){let g=uS.getMatch(a,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new ci(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let A=wN(g);for(let S of A)switch(S.name){case"max-age":e.expiresAt=S.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=wN(u).map(A=>(A.next?.name==="confirm"&&A.next.value>=0&&(e.replicatedConfirmation=+A.next.value),A.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await Rt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Oo(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new yd.ClientError(g,400)}if(e.authorize=!0,a===aG&&s==="GET"){if(e?.user?.role?.permission?.super_user)return rG(uS);throw new yd.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 yd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new yd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,IN.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let g=VH(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=ym(f.data,e,f)),f}else if(isFinite(p)){uae[0]=p;let g=String.fromCharCode(34,(Jr[0]&63)+62,(Jr[0]>>6)+(Jr[1]<<2&63)+62,(Jr[1]>>4)+(Jr[2]<<4&63)+62,(Jr[2]>>2)+62,(Jr[3]&63)+62,(Jr[3]>>6)+(Jr[4]<<2&63)+62,(Jr[4]>>4)+(Jr[5]<<4&63)+62,(Jr[5]>>2)+62,(Jr[6]&63)+62,(Jr[6]>>6)+(Jr[7]<<2&63)+62,34),A=r["if-none-match"];A&&g==A?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),IN.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=ym(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(a){a.statusCode?a.statusCode===500?Ei.warn(a):Ei.info(a):Ei.error(a),a.statusCode===405&&(a.method&&(a.message+=` to handle HTTP method ${a.method.toUpperCase()||""}`),a.allow&&(a.allow.push("trace","head","options"),i.setIfNone("Allow",a.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:a.statusCode||500,headers:i,body:void 0};return c.body=ym(a.contentType?a:uG(a),e,c),c}}function fae(e){IN=e,e.includeExpensiveRecordCountEstimates&&(ja.prototype.includeExpensiveRecordCountEstimates=!0),!cG&&(cG=!0,uS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return dae(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{kp++;let s=new Xn;lG||(lG=!0,Bm(l=>{kp>0&&l.push({metric:"ws-connections",connections:kp,byThread:!0})}));let i;t.on("error",l=>{i=!0,Ei.warn(l)});let a;t.on("message",o(function(u){a||(a=Oo(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=a(u);Je(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{kp--,zr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=uS.getMatch(l,"ws");if(zr(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,Je(h=>({count:h.count,total:kp}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new ci(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await Rt(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await Co(p.value,r);t.send(h),Je(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?Ei.warn(l):Ei.info(l):Ei.error(l),t.close(mae[l.statusCode]||1011,uG(l))}t.close()},e))}function wN(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,a]=s.trim().split("=");i=i.trim(),a&&(a=a.trim()),r={name:i.toLowerCase(),value:a,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var Ei,yd,uG,Jr,uae,IN,aG,cG,uS,lG,kp,mae,dG=ie(()=>{Po();Ps();Ei=w(Q()),yd=w(_e());Z_();Nu();Ca();bp();sG();Fp();tg();({errorToString:uG}=Ei),Jr=new Uint8Array(8),uae=new Float64Array(Jr.buffer,0,1),IN={},aG="openapi";o(dae,"http");kp=0;o(fae,"start");mae={401:3e3,403:3003};o(wN,"parseHeaderValue")});var NN=M((Ove,mG)=>{var{recordAction:fS,recordActionBinary:fG}=(Ps(),D(V_)),pae=require("fastify-plugin"),hae=200;mG.exports=pae(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let a=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),fS(a,"duration",u,f,d),fG(s.raw.statusCode<400,"success",u,f,d),fG(1,"response_"+s.raw.statusCode,u,f,d);let m=hae;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{fS(performance.now()-c,"transfer",u,f,d),fS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,fS(m,"bytes-sent",u,f,d));let p=a.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 hG=M((Pve,pG)=>{var Eae=ft(),_ae={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};pG.exports=function(e){return Eae.validateObject(e,_ae)}});var mS=M((Lve,EG)=>{"use strict";var gae=(H(),D(W)).OPERATIONS_ENUM,CN=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=gae.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};EG.exports=CN});var Gp={};Ie(Gp,{createTokens:()=>LN,getJWTRSAKeys:()=>gS,refreshOperationToken:()=>DN,validateOperationToken:()=>MN,validateRefreshToken:()=>SS});async function gS(){if(pS)return pS;try{let e=Hp.default.join(qp.default.getHdbBasePath(),gA),t=await hS.default.readFile(Hp.default.join(e,em.JWT_PASSPHRASE_NAME),"utf8"),r=await hS.default.readFile(Hp.default.join(e,em.JWT_PRIVATE_KEY_NAME),"utf8");return pS={publicKey:await hS.default.readFile(Hp.default.join(e,em.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},pS}catch(e){throw _S.default.error(e),new _i.ClientError(Ad.NO_ENCRYPTION_KEYS,Rd.INTERNAL_SERVER_ERROR)}}async function LN(e){let t=(0,ON.validateBySchema)(e,Xi.default.object({username:Xi.default.string().optional(),password:Xi.default.string().optional(),role:Xi.default.string().optional(),expires_in:Xi.default.alternatives(Xi.default.string(),Xi.default.number()).optional()}));if(t)throw new _i.ClientError(t.message);let r;try{let f=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,f=!1),r=await(0,PN.findAndValidateUser)(e.username,e.password,f)}catch(f){throw _S.default.error(f),new _i.ClientError(Ad.INVALID_CREDENTIALS,Rd.UNAUTHORIZED)}if(!r)throw new _i.ClientError(Ad.INVALID_CREDENTIALS,Rd.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 a=await gS(),c=await bd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??yG,algorithm:ES,subject:Id.OPERATION}),l=await bd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:Sae,algorithm:ES,subject:Id.REFRESH}),u=hw(l,kr.SHA256);if((await(0,_G.update)(new gG.default(Xf,Ru.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new _i.ClientError(Ad.REFRESH_TOKEN_SAVE_FAILED,Rd.INTERNAL_SERVER_ERROR);return SG.default.signalUserChange(new TG.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function DN(e){let t=(0,ON.validateBySchema)(e,Xi.default.object({refresh_token:Xi.default.string().required()}).required());if(t)throw new _i.ClientError(t.message);let{refresh_token:r}=e;await SS(r);let n=await gS(),s=await bd.default.decode(r);return{operation_token:await bd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:yG,algorithm:ES,subject:Id.OPERATION})}}async function MN(e){return RG(e,Id.OPERATION)}async function SS(e){return RG(e,Id.REFRESH)}async function RG(e,t){try{let r=await gS(),n=await bd.default.verify(e,r.publicKey,{algorithms:ES,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,PN.findAndValidateUser)(n.username,void 0,!1);if(t===Id.REFRESH&&!Ew(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw _S.default.warn(r),r?.name==="TokenExpiredError"?new _i.ClientError(Ad.TOKEN_EXPIRED,Rd.FORBIDDEN):new _i.ClientError(Ad.INVALID_TOKEN,Rd.UNAUTHORIZED)}}var bd,hS,Hp,Xi,ON,_i,_S,PN,_G,gG,SG,TG,qp,Rd,Ad,yG,Sae,ES,Id,pS,wd=ie(()=>{bd=w(require("jsonwebtoken")),hS=w(require("fs-extra")),Hp=w(require("node:path")),Xi=w(require("joi")),ON=w(ft());H();_i=w(_e()),_S=w(Q());gw();PN=w(kn()),_G=w(Bn()),gG=w(mS()),SG=w(ko()),TG=w(ns()),qp=w(ue()),{HTTP_STATUS_CODES:Rd,AUTHENTICATION_ERROR_MSGS:Ad}=_i.hdbErrors;qp.default.initSync();yG=qp.default.get(B.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Sae=qp.default.get(B.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",ES="RS256",Id={OPERATION:"operation",REFRESH:"refresh"};o(gS,"getJWTRSAKeys");o(LN,"createTokens");o(DN,"refreshOperationToken");o(MN,"validateOperationToken");o(SS,"validateRefreshToken");o(RG,"validateToken")});var vN=M((xve,IG)=>{"use strict";var Tae=hG(),Nd=require("passport"),yae=require("passport-local").Strategy,Rae=require("passport-http").BasicStrategy,Aae=require("util"),bae=kn(),bG=Aae.callbackify(bae.findAndValidateUser),Uve=Kr(),Iae=(H(),D(W)),AG=(wd(),D(Gp));Nd.use(new yae(function(e,t,r){bG(e,t,r)}));Nd.use(new Rae(function(e,t,r){bG(e,t,r)}));Nd.serializeUser(function(e,t){t(null,e)});Nd.deserializeUser(function(e,t){t(null,e)});function wae(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let a=e.headers.authorization.split(" ");n=a[0],s=a[1]}function i(a,c){return a?r(a):c?r(null,c):r("Must login")}switch(o(i,"handleResponse"),n){case"Basic":Nd.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Iae.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?AG.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):AG.validateOperationToken(s).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:Nd.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(wae,"authorize");function Nae(e,t){let r=Tae(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 a=i[e.schema].tables[e.table].attribute_permissions;for(let c in a)e.attributes.indexOf(a[c].attribute_name)>-1&&!a[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${a[c].attribute_name} `))}return t(null,n)}o(Nae,"checkPermissions");IG.exports={authorize:wae,checkPermissions:Nae}});var TS=M((Fve,wG)=>{"use strict";var Cae=os();wG.exports={writeTransaction:Oae};function Oae(e,t,r){return Cae.writeTransaction(e,t,r)}o(Oae,"writeTransaction")});var PG=M((qve,OG)=>{"use strict";var Pae=fn(),Lae=mi(),NG=Q(),Dae=Bn(),Hve=TS(),Mae=require("clone"),xN=require("alasql"),vae=Dg(),CG=require("util"),Uae=CG.promisify(Lae.getTableSchema),xae=CG.promisify(Pae.search),Bae=(H(),D(W)),UN=oe();vae(xN);OG.exports={update:kae};var Fae="There was a problem performing this update. Please check the logs and try again.";async function kae({statement:e,hdb_user:t}){let r=await Uae(e.table.databaseid,e.table.tableid),n=Hae(e.columns);UN.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=Mae(s),c=UN.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=xN.parse(l).statements[0],d=await xae(u),f=qae(n,d);return Gae(a,f,t)}o(kae,"update");function Hae(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=xN.compile(`SELECT ${r.expression.toString()} AS [${Bae.FUNC_VAL}] FROM ?`)}),t}catch(t){throw NG.error(t),new Error(Fae)}}o(Hae,"createUpdateRecord");function qae(e,t){return UN.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(qae,"buildUpdateRecords");async function Gae(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Dae.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){NG.error(`Error delete new_attributes from update response: ${i}`)}return s}o(Gae,"updateRecords")});var DG=M((Kve,LG)=>{var $ae=require("alasql"),Vae=fn(),Kae=Q(),Yae=os(),FN=require("util"),BN=oe(),Wae=(H(),D(W)),zae=mi(),$ve=TS(),Vve=Bn(),jae="record",Qae="successfully deleted",Jae=FN.callbackify(tce),Xae=FN.promisify(Vae.search),Zae=FN.promisify(zae.getTableSchema);LG.exports={convertDelete:Jae};function ece(e){return`${e.deleted_hashes.length} ${jae}${e.deleted_hashes.length===1?"":"s"} ${Qae}`}o(ece,"generateReturnMessage");async function tce({statement:e,hdb_user:t}){let r=await Zae(e.table.databaseid,e.table.tableid);BN.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=BN.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=$ae.parse(a).statements[0],l={operation:Wae.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Xae(c);let u=await Yae.deleteRecords(l);return BN.isEmptyOrZeroLength(u.message)&&(u.message=ece(u)),delete u.txn_time,u}catch(u){throw Kae.error(u),u.hdb_code?u.message:u}}o(tce,"convertDelete")});var Ol=M((zve,xG)=>{"use strict";var Wve=fn(),$p=Q(),{validateBySchema:MG}=ft(),Cl=require("joi"),rce=Wi(),yS=oe(),{handleHDBError:RS,hdbErrors:nce,ClientError:vG}=_e(),{HDB_ERROR_MSGS:AS,HTTP_STATUS_CODES:kN}=nce,UG=ue();UG.initSync();var{getDatabases:HN}=(Oe(),D(mt)),sce=require("fs-extra"),ice=(H(),D(W));xG.exports={describeAll:oce,describeTable:bS,describeSchema:ace};async function oce(e={}){try{let t=yS.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=HN(),a={},c={},l=[],u=e?.exact_count;for(let f in i){a[f]=!0,!t&&!s&&!r&&(c[f]=e.hdb_user?.role?.permission[f]?.describe);let m=i[f];for(let p in m)try{let h;if(t||s||r)h=await bS({schema:f,table:p,exactCount:u});else if(n&&n[f].describe&&n[f].tables[p].describe){let E=n[f].tables[p].attribute_permissions;h=await bS({schema:f,table:p,exactCount:u},E)}h&&l.push(h)}catch(h){$p.error(h)}}let d={};for(let f in l)t||s||r?(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]):c[l[f].schema]&&(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]);for(let f in a)t||s||r?d[f]={}:c[f]&&(d[f]={});return d}catch(t){return $p.error("Got an error in describeAll"),$p.error(t),RS(new Error,AS.DESCRIBE_ALL_ERR)}}o(oce,"describeAll");async function bS(e,t){yS.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=MG(e,Cl.object({database:Cl.string(),table:Cl.string().required(),exact_count:Cl.boolean().strict()}));if(i)throw new vG(i.message);let c=HN()[r];if(!c)throw RS(new Error,AS.SCHEMA_NOT_FOUND(e.schema),kN.NOT_FOUND);let l=c[n];if(!l)throw RS(new Error,AS.TABLE_NOT_FOUND(e.schema,e.table),kN.NOT_FOUND);function u(p){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,properties:p.properties?p.properties.map(h=>({type:h.type,name:h.name})):void 0})}o(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 sce.stat(l.primaryStore.env.path)).size}catch(p){$p.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")),UG.get(ice.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=rce.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){$p.warn(`unable to stat table dbi due to ${p}`)}return m}o(bS,"descTable");async function ace(e){yS.transformReq(e);let t=MG(e,Cl.object({database:Cl.string(),exact_count:Cl.boolean().strict()}));if(t)throw new vG(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=HN()[n];if(!i)throw RS(new Error,AS.SCHEMA_NOT_FOUND(e.schema),kN.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),yS.isEmpty(l)||l.describe){let u=await bS({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(a[u.name]=u)}}return a}o(ace,"describeSchema")});var qG=M((Qve,HG)=>{"use strict";var cce=Ol(),{hdbErrors:BG}=_e(),{getDatabases:FG}=(Oe(),D(mt));HG.exports={checkSchemaExists:kG,checkSchemaTableExists:lce,schemaDescribe:cce};async function kG(e){if(!FG()[e])return BG.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(kG,"checkSchemaExists");async function lce(e,t){let r=await kG(e);if(r)return r;if(!FG()[e][t])return BG.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(lce,"checkSchemaTableExists")});var KN=M((tUe,ZG)=>{"use strict";var{decode:uce}=require("msgpackr"),{isMainThread:Xve,parentPort:Zve,threadId:eUe}=require("worker_threads"),NS=sr(),Cd=wt(),$N=(H(),D(W)),hn=Q(),GN=ue(),dce=(H(),D(W)),{onMessageByType:fce}=nt(),KG=Wi(),{recordAction:GG,recordActionBinary:mce}=(Ps(),D(V_)),{publishToStream:pce}=NS,{ConsumerEvents:$G}=require("nats"),hce=fn(),{promisify:Ece}=require("util"),{decodeBlobsWithWrites:_ce}=(Ns(),D(nb)),YG=Ece(setTimeout),CS=1e4,OS,wS,gce,Sce,WG,Vp=new Map,Od=new Map;ZG.exports={initialize:zG,ingestConsumer:VN,setSubscription:Tce,setIgnoreOrigin:Ace,getDatabaseSubscriptions:Rce,updateConsumer:jG};async function zG(){fce($N.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await jG(n)}),WG=!0,hn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await NS.getNATSReferences();OS=e,wS=e.info.server_name,gce=t,Sce=r}o(zG,"initialize");async function jG(e){if(e.status==="start"){let{js:t,jsm:r}=await QG(e.node_domain_name);VN(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Vp.get(e.stream_name+e.node_domain_name);t&&(hn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Vp.set(e.stream_name+e.node_domain_name,"close")),Od.get(e.node_domain_name)==="failed"&&Od.set(e.node_domain_name,"close")}}o(jG,"updateConsumer");var PS=new Map;function Tce(e,t,r){let n=PS.get(e);n||PS.set(e,n=new Map),n.set(t,r),WG||zG().then(yce)}o(Tce,"setSubscription");async function yce(){let e=await hce.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+Cd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await QG(r),!n))break;let{schema:a,table:c}=i,l=KG.createNatsTableStreamName(a,c);VN(l,n,s,r)}}}o(yce,"accessConsumers");async function QG(e){let t,r,n=1;for(;!r;)try{t=await OS.jetstream({domain:e}),r=await OS.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Od.get(e)==="close")break;Od.set(e,"failed"),n%10===1&&hn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<CS?n++*100:CS;await YG(i)}return{js:t,jsm:r}}o(QG,"connectToRemoteJS");function Rce(){return PS}o(Rce,"getDatabaseSubscriptions");var JG;function Ace(e){JG=e}o(Ace,"setIgnoreOrigin");var XG=100,VG=new Array(XG),IS=0;async function VN(e,t,r,n){let{connection:s}=await NS.getNATSReferences();OS=s,wS=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,wS),hn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Od.get(n)==="close")break;a%10===1&&hn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(hn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await NS.createConsumer(r,e,wS,new Date(Date.now()).toISOString()));let d=a++*100<CS?a++*100:CS;await YG(d)}let c=!1,l;for(;!c;){if(Vp.get(e+n)==="close"||Od.get(n)==="close"){Vp.delete(e+n),c=!0;continue}l=await i.consume({max_messages:GN.get($N.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Vp.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===$G.ConsumerDeleted&&(await l.close(),c=!0),d.type===$G.HeartbeatsMissed){let f=d.data;hn.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(hn.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 VG[IS],VG[IS]=bce(d).catch(f=>{hn.error(f)}),++IS>=XG&&(IS=0)}catch(d){d.message==="consumer deleted"?(hn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):hn.error("Error consuming clustering ingest, restarting consumer",d)}}}o(VN,"ingestConsumer");async function bce(e){let t;await _ce(()=>{t=uce(e.data)}),GG(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),hn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=GN.get($N.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Cd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Cd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Cd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!JG),mce(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Cd.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:a,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:p}=t;hn.trace("processing message:",a,c,u,(d?"records: "+d.map(O=>O?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),hn.trace(`messageProcessor nats msg id: ${e.headers.get(Cd.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(O=>h=O),{timestamp:g,user:A,node_name:S}=m||{},R=PS.get(c)?.get(u);if(!R)throw new Error(`Missing table for replication message: ${u}`);if(a==="define_schema")t.type=a,t.onCommit=h,R.send(t);else if(d.length===1&&!l)R.send({type:qN(a),value:d[0],id:f?.[0],expiresAt:p,timestamp:g,table:u,onCommit:h,user:A,nodeName:S});else{let O=d.map((F,ee)=>({type:qN(a),value:F,expiresAt:p,id:f?.[ee],table:u}));for(;l;)O.push({type:qN(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;R.send({type:"transaction",writes:O,table:u,timestamp:g,onCommit:h,user:A,nodeName:S})}GN.get(dce.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&pce(e.subject.split(".").slice(0,-1).join("."),KG.createNatsTableStreamName(c,u),e.headers,e.data),await E;let N=Date.now()-g;g&&GG(N,"replication-latency",e.subject,a,"ingest")}catch(a){hn.error(a)}e.ack()}o(bce,"messageProcessor");function qN(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(qN,"convertOperation")});var sr=M((cUe,E$)=>{"use strict";var Gr=ue();Gr.initSync();var Ice=require("fs-extra"),wce=require("semver"),Wp=require("path"),{monotonicFactory:Nce}=require("ulidx"),t$=Nce(),Cce=require("util"),r$=require("child_process"),Oce=Cce.promisify(r$.exec),Pce=r$.spawn,Xr=wt(),et=(H(),D(W)),{packageJson:Lce,PACKAGE_ROOT:Dce}=bt(),LS=oe(),gi=Q(),DS=Wi(),Mce=TS(),Kp=Tt(),{broadcast:vce,onMessageByType:Uce,getWorkerIndex:xce}=nt(),{isMainThread:n$}=require("worker_threads"),{Encoder:Bce,decode:jN}=require("msgpackr"),s$=new Bce,{isEmpty:Ml}=LS,i$=kn(),nUe=48*36e11;n$&&Uce(et.ITC_EVENT_TYPES.RESTART,()=>{En=void 0,Dl=void 0});var{connect:Fce,StorageType:kce,RetentionPolicy:Hce,AckPolicy:QN,DeliverPolicy:JN,DiscardPolicy:qce,NatsConnection:sUe,JetStreamManager:iUe,JetStreamClient:oUe,StringCodec:aUe,JSONCodec:Gce,createInbox:XN,headers:$ce,ErrorCode:e$}=require("nats"),{recordAction:Vce}=(Ps(),D(V_)),{encodeBlobsAsBuffers:Kce}=(Ns(),D(nb)),o$=Gce(),Yce="clustering",Wce=Lce.engines[Xr.NATS_SERVER_NAME],zce=Wp.join(Dce,"dependencies"),zN=Wp.join(zce,`${process.platform}-${process.arch}`,Xr.NATS_BINARY_NAME),YN,WN,Yp,Pl,Ll;E$.exports={runCommand:a$,checkNATSServerInstalled:jce,createConnection:ZN,getConnection:zp,getJetStreamManager:jp,getJetStream:l$,getNATSReferences:Zi,getServerList:Jce,createLocalStream:eC,listStreams:u$,deleteLocalStream:Xce,getServerConfig:Pd,listRemoteStreams:Zce,viewStream:ele,viewStreamIterator:tle,publishToStream:rle,request:ile,reloadNATS:tC,reloadNATSHub:ole,reloadNATSLeaf:ale,extractServerName:sle,requestErrorHandler:cle,createLocalTableStream:p$,createTableStreams:dle,purgeTableStream:h$,purgeSchemaTableStreams:fle,getStreamInfo:mle,updateLocalStreams:hle,closeConnection:Qce,getJsmServerName:MS,addNatsMsgHeader:d$,clearClientCache:c$,updateRemoteConsumer:lle,createConsumer:f$,updateConsumerIterator:ule};async function a$(e,t=void 0){let{stdout:r,stderr:n}=await Oce(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
13
|
+
`},"serialize"),compressible:!1,q:.8});ln.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()}});MU={type:"application/json",serializeStream:_m,serialize:gm,deserialize:b8,q:.5};ln.set("*/*",MU);ln.set("",MU);o(b8,"tryJSONParse");o(Tm,"registerContentHandlers");I8=(0,LU.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:a,type:c}=y_(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&a.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=a.serializeStream}else u=a.serialize;return u(l,{headers:{set:o((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});o(y_,"findBestSerializer");wU=YA.default.get(B.HTTP_COMPRESSIONTHRESHOLD);o(ym,"serialize");o(Co,"serializeMessage");o(QA,"asyncSerialization");o(JA,"hasAsyncSerialization");o(w8,"streamToBuffer");N8=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];o(C8,"isBufferEncoding");o(O8,"parseContentType");o(Oo,"getDeserializer");o(P8,"deserializerUnknownType");o(L8,"transformIterable");o(T_,"toCsvStream")});var nb={};Ie(nb,{Blob:()=>ws,blobsWereEncoded:()=>Wc,databasePaths:()=>ZA,decodeBlobsWithWrites:()=>P_,decodeFromDatabase:()=>zc,decodeWithBlobCallback:()=>wm,deleteBlob:()=>N_,deleteBlobsInObject:()=>Oa,deleteRootBlobPathsForDB:()=>rb,encodeBlobsAsBuffers:()=>q8,encodeBlobsWithFilePath:()=>O_,findBlobsInObject:()=>Ou,getFileId:()=>C_,getFilePathForBlob:()=>$U,getRootBlobPathsForDB:()=>Im,setDeletionDelay:()=>U8});function HU(){}function N_(e){let t=$U(e);t&&setTimeout(()=>{(0,rt.unlink)(t,r=>{r&&Lo.default.debug?.("Error trying to remove blob file",r)})},qU)}function U8(e){qU=e}function GU(e){let t=On.get(e);if(!t)t={storageIndex:0,fileId:null,store:Pn},On.set(e,t);else{if(t.fileId)return t;t.store=Pn}return B8(t),t.source?XA(e,t.source,t):t.contentBuffer?x8(e,t):XA(e,Am.Readable.from(e.stream()),t),t}function XA(e,t,r){let{filePath:n,fileId:s,store:i,compress:a,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,rt.createWriteStream)(n,{autoClose:!1,flags:"w"});if(t.errored){let g=Buffer.from(t.errored.toString());f.write(Buffer.concat([h(BigInt(g.length)+0xff000000000000n),g])),E(t.errored);return}let m=!1;e.size!==void 0&&(f.write(h(e.size)),m=!0);let p;a?(m||f.write(M8),p=(0,I_.createDeflate)(),t.pipe(p).pipe(f)):(m||f.write(D8),t.pipe(f)),t.on("error",E);function h(g){let A=BigInt(g),S=new Uint8Array(wr),R=new DataView(S.buffer);return A|=BigInt(a?tb:kU)<<48n,R.setBigInt64(0,A),S}o(h,"createHeader");function E(g){i.unlock(d,0);let A=f.fd;g?(A&&(0,rt.close)(A),u(g)):c?(0,rt.fdatasync)(A,S=>{S&&u(S),l(),(0,rt.close)(A)}):(l(),(0,rt.close)(A))}o(E,"finished"),f.on("error",E).on("finish",()=>{if(m)E();else{let g=p?p.bytesWritten:f.bytesWritten-wr;e.size=g,(0,rt.write)(f.fd,h(g),0,wr,0,E)}})}),e}function C_(e){return On.get(e)?.fileId}function $U(e){let t=On.get(e);return t?.fileId&&bm(t)}function Im(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=ZA.get(e);if(!t){if(!e.databaseName)return Lo.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,w_.get)(B.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Mo.join)(n,e.databaseName)):t=[(0,Mo.join)((0,w_.getHdbBasePath)(),"blobs",e.databaseName)],ZA.set(e,t)}return t}async function rb(e){let t=Im(e);t&&await Promise.all(t.map(r=>VU(r)))}async function VU(e){if((0,rt.existsSync)(e)){for(let t of await(0,Cs.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await VU((0,Mo.join)(e,t.name));else try{await(0,Cs.unlink)((0,Mo.join)(e,t.name))}catch(r){Lo.default.warn?.("Error deleting file",r)}try{await(0,Cs.rmdir)(e)}catch(t){Lo.default.warn?.("Error deleting directory",t)}}}function bm({storageIndex:e,fileId:t,store:r}){let n=Im(r);return(0,Mo.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 x8(e,t){let r=t.contentBuffer,n=r.length;if(!(n<FU))return e.size=n,XA(e,Am.Readable.from([r]),t)}function B8(e){let t=Im(e.store),r=F8(),n=t?.length>1?k8(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=bm(e),a=(0,Mo.dirname)(i);(0,rt.existsSync)(a)||(0,eb.ensureDirSync)(a),e.filePath=i}function F8(){let e=BU.get(Pn);if(!e){let t=0,r=Im(Pn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let a=0;if((0,rt.existsSync)(n))for(let c of(0,rt.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>a&&(a=l)}s+=a,n=(0,Mo.join)(n,a.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(Pn.getUserSharedBuffer("blob-file-id",e.buffer)),BU.set(Pn,e)}return Number(Atomics.add(e,0,1n))}function k8(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(b_);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,H8(e)),e.frequencyTable[t%b_]}async function H8(e){if(!Cs.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let a;try{a=await(0,Cs.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,eb.ensureDirSync)(s),a=await(0,Cs.statfs)(s)}let c=a.bavail*a.bsize;return Math.pow(c,.8)})),r=new Array(b_),n=t.map(s=>1/s);for(let s=0;s<b_;s++){let i=1/0,a=0;for(let c=0;c<n.length;c++)n[c]<i&&(a=c,i=n[c]);n[a]+=1/t[a],r[s]=a}e.frequencyTable=r}function O_(e,t,r){Cu=t,Pn=r,Wc=!1;try{return e()}finally{Cu=void 0,Pn=void 0}}function q8(e){Yr=[];let t;try{t=e()}catch(n){throw Yr=void 0,n}let r=Yr.length<2?Yr[0]:Promise.all(Yr);return Yr=void 0,r?r.then(()=>e()):t}function P_(e,t){try{Yr=[],Do=t,e()}catch(n){throw Do=void 0,Yr=void 0,n}Do=void 0;let r=Yr.length<2?Yr[0]:Promise.all(Yr);return Yr=void 0,r}function wm(e,t,r){Pn=r;try{return Do=t,e()}finally{Do=void 0}}function zc(e,t){return Pn=t,e()}function Oa(e){Ou(e,t=>{N_(t)})}function Ou(e,t){if(e instanceof ws)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&Ou(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&Ou(e[r],t)}}function $8(){return class{static{o(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""}}}var Bi,Cs,rt,I_,Am,eb,w_,Mo,Lo,FU,wr,kU,tb,UU,D8,M8,xU,On,Do,ws,Cu,Yr,Pn,Wc,Rm,R_,v8,A_,qU,ZA,BU,b_,G8,Ns=ie(()=>{Bi=require("msgpackr"),Cs=require("node:fs/promises"),rt=require("node:fs"),I_=require("node:zlib"),Am=require("node:stream"),eb=require("fs-extra"),w_=w(ue());H();Mo=require("path"),Lo=w(Zn());Po();FU=8192,wr=8,kU=0,tb=1,UU=255,D8=new Uint8Array([0,kU,255,255,255,255,255,255]),M8=new Uint8Array([0,tb,255,255,255,255,255,255]),xU=0xffffffffffff,On=new WeakMap,ws=global.Blob||$8(),Wc=!1,Rm=new Uint8Array(8),R_=new DataView(Rm.buffer),v8=6e4;o(HU,"InstanceOfBlobWithNoConstructor");HU.prototype=ws.prototype;A_=class e extends HU{static{o(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size)}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=On.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):(JA()&&QA(this.bytes().then(a=>t.contentBuffer=a)),`[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=On.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=bm(t),a,c=o(async()=>{let l,u=wr;try{if(l=await(0,Cs.readFile)(i),l.length>=wr){l.copy(Rm,0,0,wr);let f=R_.getBigUint64(0);if(Number(f>>48n)===UU)throw new Error("Error in blob: "+buffer.subarray(wr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<xU&&(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(a)throw new Error(`Incomplete blob for ${i}`);return new Promise((h,E)=>{if(m.attemptLock(p,0,()=>(a=!0,h(c()))))return a=!0,m.unlock(p,0),h(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return o(d,"checkCompletion"),l[1]===tb?new Promise((f,m)=>{(0,I_.deflate)(l.subarray(wr),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(wr))},"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=On.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=bm(t),a,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,g=o((A,S)=>{(0,rt.open)(i,"r",(R,N)=>{if(R){if(R.code==="ENOENT"&&f!==!1&&(Lo.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),g(A,S)},20).unref();S(R),p.#e?.forEach(O=>O(R))}else a=N,A(N)})},"openFile");return new Promise(g)},pull:o(E=>{let g=0,A=100;return new Promise(o(function S(R,N){function O(te){(0,rt.close)(a),clearTimeout(d),u&&u.close(),N(te),p.#e?.forEach(q=>q(te))}o(O,"onError");let F=Buffer.allocUnsafe(262144);(0,rt.read)(a,F,0,F.length,c,(te,q,k)=>{if(l+=q,te)return O(te);if(c===0){if(q<wr){A-- >0&&f!==!1?(h(),Lo.default.debug?.("File was empty, waiting for data to be written",i,A),setTimeout(()=>S(R,N),20).unref()):(Lo.default.debug?.("File was empty, throwing error",i,A),N(new Error(`Blob ${t.fileId} was empty`)));return}k.copy(Rm,0,0,wr);let J=R_.getBigUint64(0);if(Number(J>>48n)===UU)return O(new Error("Error in blob: "+k.subarray(wr)));if(g=Number(J&0xffffffffffffn),g<xU&&p.size!==g&&(p.size=g,p.#t))for(let Y of p.#t)Y(g);k=k.subarray(wr,q),l-=wr}else if(q===0){let J=Buffer.allocUnsafe(8);return(0,rt.read)(a,J,0,wr,0,Y=>{if(Y)return O(Y);if(Rm.set(J),g=Number(R_.getBigUint64(0)&0xffffffffffffn),g>l){h()?u?d=setTimeout(()=>{O(new Error(`File read timed out reading from ${i}`))},v8).unref():(u=(0,rt.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(R,N))}),S(R,N)):m?O(new Error("Blob is incomplete")):(m=!0,S(R,N));return}(0,rt.close)(a),E.close(),R()})}else k=k.subarray(0,q);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=q,S(R,N);s&&l>=s&&(l>s&&(k=k.subarray(0,s-c)),l=g=s),n&&n>c&&(k=k.subarray(n-c))}c+=q;try{E.enqueue(k)}catch(J){return Lo.default.debug?.("Error enqueuing chunk",J),R()}l===g&&((0,rt.close)(a),E.close()),R()})},"readMore"))},"pull"),cancel(){(0,rt.close)(a),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,g=t.fileId+":blob";f=!E.attemptLock(g,0,()=>{f=!1}),f||E.unlock(g,0)}return f}}slice(t,r,n){let s=On.get(this),i=new e(n&&{type:n});if(s?.fileId){let a={...s,start:t,end:r};On.set(i,a),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let a={...s,contentBuffer:s.contentBuffer.subarray(t,r)};On.set(i,a),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(t){if(Pn=t?.primaryStore?.rootStore,!Pn)throw new Error("No target table specified");return GU(this).saving??Promise.resolve()}},qU=500;o(N_,"deleteBlob");o(U8,"setDeletionDelay");global.createBlob=function(e,t){let r=new A_(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(On.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Am.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Am.Readable.from(e);else throw new Error("Invalid source type");return r};o(GU,"saveBlob");o(XA,"writeBlobWithStream");o(C_,"getFileId");o($U,"getFilePathForBlob");ZA=new Map;o(Im,"getRootBlobPathsForDB");o(rb,"deleteRootBlobPathsForDB");o(VU,"rimrafSteadily");o(bm,"getFilePath");o(x8,"writeBlobWithBuffer");o(B8,"generateFilePath");BU=new Map;o(F8,"getNextFileId");b_=128;o(k8,"getNextStorageIndex");o(H8,"createFrequencyTableForStoragePaths");o(O_,"encodeBlobsWithFilePath");o(q8,"encodeBlobsAsBuffers");o(P_,"decodeBlobsWithWrites");o(wm,"decodeWithBlobCallback");o(zc,"decodeFromDatabase");o(Oa,"deleteBlobsInObject");o(Ou,"findBlobsInObject");G8=new Bi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Bi.addExtension)({Class:ws,type:11,unpack:o(function(e){let t=G8.unpack(e),r=new A_;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(On.set(r,{storageIndex:t[1],fileId:t[2],store:Pn}),Do)return Do(r)??r;if(!Pn)throw new Error("No store specified, cannot load blob from storage")}else On.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:o(function(e){let t=On.get(e);if(Cu!==void 0&&(Wc=!0,t?.recordId!==void 0&&t.recordId!==Cu))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<FU)return r.size=t.contentBuffer.length,(0,Bi.pack)([r,t.contentBuffer])}if(Cu!==void 0){if(t=GU(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Cu,(0,Bi.pack)([r,t.storageIndex,t.fileId])}if(t){if(Do)return Do(e),(0,Bi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,rt.readFileSync)(bm(t));if(n.length>=wr&&(n.copy(Rm,0,0,wr),Number(R_.getBigUint64(0)&0xffffffffffffn)===n.length-wr))return Buffer.concat([(0,Bi.pack)([r]),n]);if(Yr)Yr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Yr)return Yr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Bi.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});o($8,"polyfillBlob")});var jU={};Ie(jU,{onStorageReclamation:()=>Nm,runReclamationHandlers:()=>ab,setAvailableSpaceRatioGetter:()=>K8});function Nm(e,t,r){(r||(0,D_.getWorkerIndex)()===(0,D_.getWorkerCount)()-1)&&(L_.has(e)||L_.set(e,[]),L_.get(e).push({priority:0,handler:t}),ob||(ob=setTimeout(ab,YU).unref()))}async function ab(){for(let[e,t]of L_)try{let r=await zU(e),n=V8/r;for(let s of t){let{priority:i,handler:a}=s;if(s.priority=n,n>1||i>1){let c=a(n>1?n:0);c&&(ib.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){ib.default.error?.("Error running storage reclamation handlers",r)}ob=setTimeout(ab,YU).unref()}function K8(e){zU=e??WU}var sb,D_,ib,M_,KU,L_,V8,YU,ob,WU,zU,v_=ie(()=>{sb=require("node:fs/promises"),D_=w(nt()),ib=w(Zn());H();M_=w(ue()),KU=w(oe());M_.default.initSync();L_=new Map,V8=M_.default.get(B.STORAGE_RECLAMATION_THRESHOLD)??.4,YU=(0,KU.convertToMS)(M_.default.get(B.STORAGE_RECLAMATION_INTERVAL))||36e5;o(Nm,"onStorageReclamation");WU=o(async e=>{if(sb.statfs){let t=await(0,sb.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"),zU=WU;o(ab,"runReclamationHandlers");o(K8,"setAvailableSpaceRatioGetter")});var cx={};Ie(cx,{ACTION_32_BIT:()=>k_,ACTION_64_BIT:()=>j8,AUDIT_STORE_OPTIONS:()=>Pm,Decoder:()=>Qc,HAS_BLOBS:()=>Ln,HAS_CURRENT_RESIDENCY_ID:()=>Jc,HAS_EXPIRATION_EXTENDED_TYPE:()=>Mm,HAS_ORIGINATING_OPERATION:()=>Dm,HAS_PREVIOUS_RESIDENCY_ID:()=>Xc,REMOTE_SEQUENCE_UPDATE:()=>H_,createAuditEntry:()=>Zc,getLastRemoved:()=>W8,openAuditStore:()=>B_,readAuditEntry:()=>xt,removeAuditEntry:()=>F_,setAuditRetention:()=>z8,transactionKeyEncoder:()=>sx});function B_(e){let t=e.auditStore=e.openDB(cb.AUDIT_STORE_NAME,{create:!1,...Pm});t||(t=e.auditStore=e.openDB(cb.AUDIT_STORE_NAME,Pm),JU(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,a=ub;Nm(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(a=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()-lb/(1+i*i)})){try{m=F_(t,h,E)}catch(g){Pu.warn("Error removing audit entry",g)}if(p=h,await new Promise(setImmediate),++f>=Y8){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,lb/10):(JU(t,p),a>100&&(a=a>>1)),d(void 0),c()}},a).unref()});return u}if(o(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,Om.getWorkerIndex)()===(0,Om.getWorkerCount)()-1&&c(),(0,Om.getWorkerIndex)()===0&&!QU)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(QU=!0,Pu.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 F_(e,t,r){let n=Q8(r),s;if(n&Ln){s=xt(r);let i=e.tableStores[s.tableId],a=i?.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&zc(()=>Oa(s.getValue(i)),i.rootStore)}if((n&15)===db){s=s||xt(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 JU(e,t){fb[0]=t,e.put(Symbol.for("last-removed"),ix)}function W8(e){let t=e.get(Symbol.for("last-removed"));if(t)return ix.set(t),fb[0]}function z8(e,t=ub){lb=e,ub=t}function Zc(e,t,r,n,s,i,a,c,l,u,d,f,m){let p=ox[a];if(!p)throw new Error(`Invalid audit entry type ${a}`);let h=1;if(n&&(n>1?Pa.setFloat64(0,n):Os.set(mb),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}A(s),A(t),g(r),Pa.setFloat64(h,e),h+=8,l&Jc&&A(u),l&Xc&&A(d),l&Mm&&(Pa.setFloat64(h,f),h+=8),l&Dm&&A(ax[m]),i?g(i):Os[h++]=0,l?Pa.setUint32(n?8:0,p|l|3221225472):Os[n?8:0]=p;let E=Os.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function g(S){let R=h;h+=1,h=(0,jc.writeKey)(S,Os,h);let N=h-R-1;N>127?N>16383?(Pu.error("Key or username was too large for audit entry",S),h=R+1,Os[R]=0):(Os.copyWithin(R+2,R+1,h),Pa.setUint16(R,N|32768),h++):Os[R]=N}function A(S){S<128?Os[h++]=S:S<16384?(Pa.setUint16(h,S|32768),h+=2):S<1056964608?(Pa.setUint32(h,S|3221225472),h+=4):(Os[h]=255,Pa.setUint32(h+1,S),h+=5)}}function Q8(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 Qc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function xt(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Qc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),a=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,p,h,E;if(i&Jc&&(m=n.readInt()),i&Xc&&(p=n.readInt()),i&Mm&&(h=n.readFloat64()),i&Dm){let R=n.readInt();E=ax[R]}l=n.readInt();let g=n.position,A=n.position+=l,S;return{type:ox[i&7],tableId:c,nodeId:a,get recordId(){return(0,jc.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return A>g?(0,jc.readKey)(e,g,A):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(R,N,O){if(i&U_||i&Cm&&!N)return S||(S=zc(()=>R.decoder.decode(e.subarray(n.position,r)),R.rootStore)),S;if(i&Cm&&O)return HA(R.getEntry(this.recordId),O,R)},getBinaryValue(){return i&(U_|Cm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return Pu.error("Reading audit entry error",n,e),{}}}var jc,x_,cb,Om,nx,Pu,Os,Pa,sx,Pm,lb,Y8,fb,ix,ub,QU,U_,Cm,XU,db,ZU,ex,tx,rx,k_,j8,H_,Jc,Xc,Dm,Mm,Ln,ox,ax,Qc,Io=ie(()=>{jc=require("ordered-binary"),x_=w(ue()),cb=w($t());H();Om=w(nt()),nx=w(oe());el();Pu=w(Q());__();Ns();v_();(0,x_.initSync)();Os=Buffer.alloc(2816),Pa=new DataView(Os.buffer,Os.byteOffset,2816),sx={writeKey(e,t,r){return e===Lm?(t.set(Lm,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,jc.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,jc.readKey)(e,t,r)}},Pm={encoding:"binary",keyEncoder:sx},lb=(0,nx.convertToMS)((0,x_.get)(B.LOGGING_AUDITRETENTION))||86400*3,Y8=1e3,fb=new Float64Array(1),ix=new Uint8Array(fb.buffer),ub=1e4,QU=!1;o(B_,"openAuditStore");o(F_,"removeAuditEntry");o(JU,"updateLastRemoved");o(W8,"getLastRemoved");o(z8,"setAuditRetention");U_=16,Cm=32,XU=1,db=2,ZU=3,ex=4,tx=5,rx=6,k_=14,j8=15,H_=11,Jc=512,Xc=1024,Dm=2048,Mm=4096,Ln=8192,ox={put:XU|U_,[XU]:"put",delete:db,[db]:"delete",message:ZU|U_,[ZU]:"message",invalidate:ex|Cm,[ex]:"invalidate",patch:tx|Cm,[tx]:"patch",relocate:rx,[rx]:"relocate"},ax={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(Zc,"createAuditEntry");o(Q8,"readAction");o(xt,"readAuditEntry");Qc=class extends DataView{static{o(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 q_(){return pb||(pb=Xe({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),pb}function X8(e){return e=e.replace(J8,t=>{let[r,n,s,i]=t.split(".").map(a=>parseInt(a));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 Z8(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 Eb(e){let t=lx.default.createHash("shake128",{outputLength:4}),r;return(0,ux.isIPv6)(e)?r=X8(e):r=e.toLowerCase(),Z8(Uint8Array.from(t.update(r).digest()))}var lx,ux,hb,pb,J8,_b=ie(()=>{Oe();lx=w(require("crypto")),ux=require("node:net"),hb=new Map;o(q_,"getAnalyticsHostnameTable");J8=/(\d{1,3}\.){3}\d{1,3}$/;o(X8,"normalizeIPv6");o(Z8,"nodeHashToNumber");o(Eb,"stableNodeId")});var vo,gb=ie(()=>{vo={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 V_={};Ie(V_,{addAnalyticsListener:()=>Bm,analyticsDelay:()=>Rb,calculateCPUUtilization:()=>Cx,diffResourceUsage:()=>Ox,onAnalyticsAggregate:()=>Ib,recordAction:()=>Je,recordActionBinary:()=>zr,recordHostname:()=>Ab,setAnalyticsEnabled:()=>rZ});function rZ(e){Ax=e,clearTimeout(Um),Um=null}function nZ(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 sZ(e,t,r,n,s,i){let a={};if(typeof t=="number")a.total=t,a.values=new Float32Array(4),a.values.index=1,a.values[0]=t,a.total=t;else if(typeof t=="boolean")a.total=t?1:0,a.count=1;else if(typeof t=="function")a.count=1,a.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);a.description={metric:r,path:n,method:s,type:i},$_.set(e,a)}function Je(e,t,r,n,s){if(!Ax)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let a=$_.get(i);a?nZ(e,a):sZ(i,e,t,r,n,s),Um||iZ()}function zr(e,t,r,n,s){Je(!!e,t,r,n,s)}function Bm(e){Ix.push(e)}function iZ(){Sb||=performance.now(),Um=setTimeout(async()=>{Um=null;let e=performance.now()-Sb;Sb=0;let t=[],r={time:Date.now(),period:e,threadId:tl.threadId,metrics:t};for(let[s,i]of $_){if(i.values){let a=i.values.subarray(0,i.values.index);a.sort();let c=a.length,l=0,u=[],d;for(let f of Nx){let m=Math.floor(c*f),p=a[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 Px()}let n=process.memoryUsage();t.push({metric:"memory",threadId:tl.threadId,byThread:!0,...n});for(let s of Ix)s(t);$_=new Map,tl.parentPort?tl.parentPort.postMessage({type:bx,report:r}):Mx({report:r})},Rb).unref()}async function Ab(){let e=Ue.hostname;Wr.trace?.("recordHostname server.hostname:",e);let t=Eb(e);Wr.trace?.("recordHostname nodeId:",t);let r=q_();if(!await r.get(t)){let s={id:t,hostname:e};Wr.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function Lu(e,t){let r=Ue.hostname,n=hb.get(r);n?Wr.trace?.("storeMetric cached nodeId:",n):(n=Eb(r),Wr.trace?.("storeMetric new nodeId:",n),hb.set(r,n));let s={id:[(0,yb.getNextMonotonicTime)(),n],...t};Wr.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function Cx(e,t){let r=e.userCPUTime+e.systemCPUTime;return Wr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function Ox(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 oZ(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let a=`${t}.${s}`,c=i.getSize(),l={metric:vo.TABLE_SIZE,database:t,table:s,size:c};Wr.trace?.(`table ${a} size metric: ${JSON.stringify(l)}`),Lu(e,l),n+=c}return n}function dx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let a=Rx.statSync(s.primaryStore.env.path).size,c=oZ(e,r,n),l=a-c,u={metric:vo.DATABASE_SIZE,database:r,size:a,used:c,free:l,audit:i};Lu(e,u),Wr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Wr.warn?.("Error getting DB size metrics",s)}}function fx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let a={metric:vo.STORAGE_VOLUME,database:r,...i};Lu(e,a),Wr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(a)}`)}catch(s){Wr.warn?.("Error getting DB volume metrics",s)}}async function aZ(e,t=6e4){let r=bb(),n=Lx(),s=new Promise(R=>{let N=performance.now();setImmediate(()=>{let O=performance.now();O-N>5e3&&Wr.warn?.("Unusually high event queue latency on the main thread of "+Math.round(O-N)+"ms"),N=performance.now()}),n.primaryStore.prefetch([1],()=>{let O=performance.now();O-N>5e3&&Wr.warn?.("Unusually high task queue latency on the main thread of "+Math.round(O-N)+"ms"),R(O-N)})}),i;for(let R of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(R.value?.time){i=R.value.time;break}if(Date.now()-t<i)return;let a,c=new Map,l=new Map,u=[],d;for(let{key:R,value:N}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!N)continue;if(a){if(R>a+t)break}else a=R;d=R;let{metrics:O,threadId:F}=N;for(let te of O||[]){let{path:q,method:k,type:J,metric:Y,count:le,total:ae,distribution:re,threads:Re,...Te}=te;le||(le=1);let Fe=Y+(q?"-"+q:"");k!==void 0&&(Fe+="-"+k),J!==void 0&&(Fe+="-"+J);let qe=c.get(Fe);if(qe){if(qe.threads){let Zt=qe.threads[F];if(Zt)qe=Zt;else{qe.threads[F]={...Te};continue}}qe.count||(qe.count=1);let Rr=qe.count;for(let Zt in Te){let Ht=Te[Zt];typeof Ht=="number"&&(qe[Zt]=(qe[Zt]*Rr+Ht*le)/(Rr+le))}qe.count+=le,ae>=0&&(qe.total+=ae,qe.ratio=qe.total/qe.count)}else qe={period:t,...te},delete qe.distribution,c.set(Fe,qe),qe.byThread&&(qe.threads=[],qe.threads[F]={...Te},u.push(qe));if(re){re=re.map(Zt=>typeof Zt=="number"?{value:Zt,count:1}:Zt);let Rr=l.get(Fe);Rr?Rr.push(...re):l.set(Fe,re)}}await Px()}for(let R of u){let{path:N,method:O,type:F,metric:te,count:q,total:k,distribution:J,threads:Y,...le}=R;Y=Y.filter(ae=>ae);for(let ae in le){if(typeof R[ae]!="number")continue;let re=0;for(let Re of Y){let Te=Re[ae];typeof Te=="number"&&(re+=Te)}R[ae]=re}R.count=Y.length,delete R.threads,delete R.byThread}for(let[R,N]of l){let O=c.get(R);N.sort((Zt,Ht)=>Zt.value>Ht.value?1:-1);let F=O.count-1,te=[],q=0,k=0,J;for(let Zt of Nx){let Ht=F*Zt;for(;q<Ht;)J=N[k++],q+=J.count,k===1&&q--;let er=N[k>1?k-2:0];J||(J=N[0]),te.push(J.value-(J.value-er.value)*(q-Ht)/J.count)}let[Y,le,ae,re,Re,Te,Fe,qe,Rr]=te;Object.assign(O,{p1:Y,p10:le,p25:ae,median:re,p75:Re,p90:Te,p95:Fe,p99:qe,p999:Rr})}let f;for(let[,R]of c)R.time=d,Lu(n,R),f=!0;if(f)for(let R of wx)R(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let R={metric:vo.MAIN_THREAD_UTILIZATION,idle:p-mx,active:h-px,taskQueueLatency:await s,time:m,...process.memoryUsage()};Lu(n,R)}mx=p,px=h;let E=process.resourceUsage();E.time=m,E.userCPUTime=E.userCPUTime/1e3,E.systemCPUTime=E.systemCPUTime/1e3,Wr.trace?.(`process.resourceUsage: ${JSON.stringify(E)}`);let g=Ox(G_,E);Wr.trace?.(`diffed resourceUsage: ${JSON.stringify(g)}`),g.time=m,g.period=G_.time?m-G_.time:t,g.cpuUtilization=Cx(g,g.period);let A={metric:vo.RESOURCE_USAGE,...g};Lu(n,A),G_=E;let S=at();dx(n,S),dx(n,{system:S.system}),fx(n,S),fx(n,{system:S.system})}async function hx(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function bb(){return Ex||(Ex=Xe({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Lx(){return _x||(_x=Xe({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function uZ(){Dx=!0;let e=(0,xm.get)(B.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await aZ(Rb,e),await hx(bb(),cZ),await hx(Lx(),lZ)},Math.min(e/2,2147483647)).unref()}function Mx(e,t){let r=e.report;r.threadId=t?.threadId||tl.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(gx+=n.mean*n.count);r.totalBytesProcessed=gx,t&&(r.metrics.push({metric:vo.UTILIZATION,...t.performance.eventLoopUtilization(Sx.get(t))}),Sx.set(t,t.performance.eventLoopUtilization())),r.id=(0,yb.getNextMonotonicTime)(),bb().primaryStore.put(r.id,r),Dx||uZ(),dZ&&(vx=mZ(r))}async function mZ(e){if(await vx,!La){let r=(0,vm.dirname)(eZ());try{La=await(0,Tb.open)((0,vm.join)(r,"analytics.log"),"r+")}catch{La=await(0,Tb.open)((0,vm.join)(r,"analytics.log"),"w+")}}let t=(await La.stat()).size;if(t>fZ){let r=Buffer.alloc(t);await La.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await La.write(r,{position:0}),await La.truncate(r.length),t=r.length}await La.write(JSON.stringify(e)+`
|
|
14
|
+
`,t)}function Ib(e){e&&wx.push(e)}var tl,Tx,yx,vm,Tb,yb,xm,Rx,eZ,tZ,Wr,$_,Ax,Um,Sb,Rb,bx,Ix,wx,Nx,mx,px,G_,Px,cZ,lZ,Ex,_x,Dx,gx,Sx,dZ,vx,La,fZ,Ps=ie(()=>{tl=require("worker_threads"),Tx=w(nt());Oe();yx=w(Q()),vm=require("path"),Tb=require("fs/promises"),yb=w(Cn()),xm=w(ue());H();xr();Rx=w(require("node:fs"));_b();gb();({getLogFilePath:eZ,forComponent:tZ}=yx.default),Wr=tZ("analytics").conditional;(0,xm.initSync)();$_=new Map,Ax=(0,xm.get)(B.ANALYTICS_AGGREGATEPERIOD)>-1;o(rZ,"setAnalyticsEnabled");o(nZ,"recordExistingAction");o(sZ,"recordNewAction");o(Je,"recordAction");Ue.recordAnalytics=Je;o(zr,"recordActionBinary");Sb=0,Rb=1e3,bx="analytics-report",Ix=[],wx=[];o(Bm,"addAnalyticsListener");Nx=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];o(iZ,"sendAnalytics");o(Ab,"recordHostname");o(Lu,"storeMetric");o(Cx,"calculateCPUUtilization");o(Ox,"diffResourceUsage");o(oZ,"storeTableSizeMetrics");o(dx,"storeDBSizeMetrics");o(fx,"storeVolumeMetrics");o(aZ,"aggregation");mx=0,px=0,G_={userCPUTime:0,systemCPUTime:0},Px=o(()=>new Promise(setImmediate),"rest");o(hx,"cleanup");cZ=36e5,lZ=31536e6;o(bb,"getRawAnalyticsTable");o(Lx,"getAnalyticsTable");(0,Tx.setChildListenerByType)(bx,Mx);o(uZ,"startScheduledTasks");gx=0,Sx=new Map,dZ=!1;o(Mx,"recordAnalytics");fZ=1e6;o(mZ,"logAnalytics");o(Ib,"onAnalyticsAggregate")});var kx={};Ie(kx,{ENTRY:()=>hZ,HAS_EXPIRATION:()=>W_,HAS_RESIDENCY_ID:()=>Lb,HAS_STRUCTURE_UPDATE:()=>z_,LAST_TIMESTAMP_PLACEHOLDER:()=>Lm,LOCAL_TIMESTAMP:()=>pZ,METADATA:()=>vu,NEW_TIMESTAMP_PLACEHOLDER:()=>xx,NO_TIMESTAMP:()=>wb,PENDING_LOCAL_TIME:()=>Db,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>mb,RecordEncoder:()=>Pb,TIMESTAMP_ASSIGN_LAST:()=>_Z,TIMESTAMP_ASSIGN_NEW:()=>Bx,TIMESTAMP_ASSIGN_PREVIOUS:()=>Fx,TIMESTAMP_PLACEHOLDER:()=>K_,TIMESTAMP_RECORD_PREVIOUS:()=>Nb,entryMap:()=>Da,handleLocalTimeForGets:()=>j_,lastMetadata:()=>ct,recordUpdater:()=>Mb,removeEntry:()=>nl});function TZ(){return km[0]=km[0]^64,EZ.getFloat64(0)}function j_(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(a,c){e.readCount++,ct=null;let l=r.call(this,a,c);return l&&(ct&&(l.metadataFlags=ct[vu],l.localTime=ct.localTime,l.residencyId=ct.residencyId,l.size=ct.size,ct.expiresAt>=0&&(l.expiresAt=ct.expiresAt),ct=null),l.value&&Da.set(l.value,l),l.key=a),l};let n=e.get;e.get=function(a,c){ct=null;let l=n.call(this,a,c);return ct&&l&&(Da.set(l,ct),ct=null),l};let s=e.getRange;e.getRange=function(a){let c=s.call(this,a);return a.valuesForKey?c.map(l=>l?.value):a.values===!1||a.onlyCount?c:c.map(l=>(ct&&(l.metadataFlags=ct[vu],l.localTime=ct.localTime,l.residencyId=ct.residencyId,ct.expiresAt>=0&&(l.expiresAt=ct.expiresAt),ct=null),l))};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let a=i.constructor,c=i.use,l=i.done;a.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,rl.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<rl.length;u++){let d=rl[u].deref();(!d||d.isDone||d.isCommitted)&&rl.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function Mb(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){f||l==null?Mu=i?.localTime?Nb|Fx:wb:Mu=l?i?.localTime?Nb|16384:Bx|16384:wb;let p=u?.expiresAt;if(p>=0&&(c|=W_),Fm=c,Cb=p,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:a,instructedWrite:Mu>0},E,g=0;try{let A=i?.residencyId,S=u?.residencyId;S&&(Ob=S,Fm|=Lb,g|=Jc),A!==S&&(g|=Xc,A||(A=0)),c&W_&&(g|=Mm),u?.originatingOperation&&(g|=Dm),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&i.metadataFlags&Ln&&(r.getBinaryFast(i.localTime)||Oa(i.value));let R;if(s!==void 0&&(R=O_(()=>e.put(n,s,h),n,e.rootStore),Wc&&(g|=Ln)),l){let N=u?.user?.username;if(m&&(O_(()=>e.encoder.encode(m),n,e.rootStore),Wc&&(g|=Ln)),e.encoder.hasStructureUpdate&&(g|=z_,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let O=i?.localTime,F=r.get(O);if(F){let te=xt(F).previousLocalTime;return R=r.put(O,Zc(a,t,n,te,u?.nodeId??server.replication.getThisNodeId(r)??0,N,d,Du,g,S,A,p),{ifVersion:E}),R}}R=r.put(s===void 0?xx:Lm,Zc(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,d,Du,g,S,A,p,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&gZ.has(d)&&Je(Du?.length??1,"db-write",u.tableToTrack,null),R}catch(A){throw A.message+=" id: "+n+" options: "+h,A}}}function nl(e,t,r){if(t)return t.value&&t.metadataFlags&Ln&&!e.auditStore.getBinaryFast(t.localTime)&&Oa(t.value),e.remove(t.key,r)}var Ux,Y_,K_,Lm,mb,xx,pZ,vu,hZ,km,EZ,wb,Bx,_Z,Fx,Nb,W_,Lb,Db,z_,gZ,Da,SZ,Du,Mu,Fm,Cb,Ob,ct,Pb,rl,el=ie(()=>{Ux=require("msgpackr");Io();Y_=w(Q());Ns();Ns();Ps();K_=new Uint8Array([1,1,1,1,4,64,0,0]),Lm=new Uint8Array([1,1,1,1,1,0,0,0]),mb=new Uint8Array([1,1,1,1,3,64,0,0]),xx=new Uint8Array([1,1,1,1,0,64,0,0]),pZ=Symbol("local-timestamp"),vu=Symbol("metadata"),hZ=Symbol("entry"),km=new Uint8Array(8),EZ=new DataView(km.buffer,0,8),wb=0,Bx=0,_Z=1,Fx=3,Nb=4,W_=16,Lb=32,Db=1,z_=256,gZ=new Set(["put","patch","delete","message","publish"]),Da=new WeakMap,Mu=0,Fm=-1,Cb=-1,Ob=0,ct=null,Pb=class extends Ux.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return Da.get(this)?.version}getExpiresAt(){return Da.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(Mu||Fm>=0){let c=0,l=Mu;l&&(c+=8,Mu=0);let u=Fm,d=Cb,f=Ob;u>=0&&(c+=4,Fm=-1,d>=0&&(c+=8,Cb=-1),f&&(c+=4,Ob=0));let m=SZ=n.call(this,i,a|2048|c);Du=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(K_[4]=l,K_[5]=l>>8,m.set(K_,p),p+=8),Wc&&(u|=Ln),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|k_<<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 Du=n.call(this,i,a),Du};let s=this.saveStructures;this.saveStructures=function(i,a){let c=s.call(this,i,a);return this.hasStructureUpdate=!0,c}}decode(t,r){ct=null;let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],a=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(km,0,c),c+=8;else for(let m=0;m<8;m++)km[m]=t[c++];l=TZ(),i=t[c]}let u,d;i<32&&(i===k_?(a=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(a=i|t[c+1]<<5,c+=2),a&W_&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),a&Lb&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=zc(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return ct={localTime:l,[vu]:a,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:zc(()=>super.decode(t,r),this.rootStore)}catch(c){return Y_.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o(TZ,"getTimestamp");o(j_,"handleLocalTimeForGets");rl=[];setInterval(()=>{for(let e=0;e<rl.length;e++){let t=rl[e].deref();!t||t.isDone||t.isCommitted?rl.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Y_.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Y_.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();o(Mb,"recordUpdater");o(nl,"removeEntry")});function xb(e,t,r,n,s,i,a,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?a(f,m):f}function u(f){return f.conditions?xb(f.conditions,f.operator,r,n,s,i,a,c):Fu(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}o(u,"executeCondition");function d(f,m,p){return f.map((h,E)=>{if(h.conditions){let S=h.operator==="or",R=d(h.conditions,!S,p);return S?(N,O)=>R.some(F=>F(N,O)):(N,O)=>R.every(F=>F(N,O))}let g=(h.attribute||h[0])===r.primaryKey,A=qm(h,r,i,c,g,p);return m&&E<f.length-1&&p&&(p=OZ(r.primaryStore,h.estimated_count,p)),A}).filter(Boolean)}o(d,"mapConditionsToFilters")}function Fu(e,t,r,n,s,i,a){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new jr.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let R=c[0],N=ki(n.attributes,R);if(N.relationship){if(c.length<2)throw new jr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let O=N.definition?.tableClass||N.elements?.definition?.tableClass,F=new Map,te=Fu({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,O,s,F);if(N.relationship.to){i[c[0]]=F;let q=!!ki(O.attributes,N.relationship.to)?.elements;te=IZ(te,N,O.primaryStore,q,F)}if(N.relationship.from){let q=o(k=>(k?.key!==void 0&&(k=k.key),Fu({attribute:N.relationship.from,value:k},t,r,n,s,F)),"searchEntry");N.elements?(i[c[0]]=F,te=wZ(te,N,O.primaryStore,F,q)):te=te.flatMap(q)}return te}else if(c.length===1)c=c[0];else throw new jr.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,p,h,E;l instanceof Date&&(l=l.getTime());let g;switch(Bb[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]=Fi.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),p=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),p=l[1],p instanceof Date&&(p=p.getTime()),h=u==="gele"||u==="gtle"||u==="between",E=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,p=l,h=!0;break;case"ne":if(l===null){m=l,E=!0;break}case"sort":case"contains":case"ends_with":m=!0,g=!0;break;default:throw new jr.ClientError(`Unknown query comparator "${u}"`)}let A;if(typeof m=="string"&&m.length>Ls.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,Ls.MAX_SEARCH_KEY_LENGTH)+Ls.OVERFLOW_MARKER,E=!1,A=qm(e,n,null,i,d)),typeof p=="string"&&p.length>Ls.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,Ls.MAX_SEARCH_KEY_LENGTH)+Ls.OVERFLOW_MARKER,h=!0,A=A??qm(e,n,null,i,d)),r){let R=m;m=p,p=R,R=!E,E=!h,h=R}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new jr.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new jr.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 jr.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new jr.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(A=A??qm(e,n,null,i,d),!A)throw new jr.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 R=f.getRange(S).map(A?function({key:N,value:O}){return this?.isSync?O&&A(O)?N:Ma.SKIP:new Promise((F,te)=>setImmediate(()=>{try{F(O&&A(O)?N:Ma.SKIP)}catch(q){te(q)}}))}:N=>N.value==null&&!(N.metadataFlags&(Dn|va))?Ma.SKIP:(a?._freezeRecords&&Object.freeze(N.value),N));return R.hasEntries=!0,R}else return f?f.customIndex?f.customIndex.search(e,a).map(R=>{if(typeof R=="object"&&R){let{key:N,...O}=R,F=n.primaryStore.getEntry(N);return a?._freezeRecords&&Object.freeze(F?.value),{...O,...F}}return R}):f.getRange(S).map(A?function({key:R,value:N}){let O;return typeof R=="string"&&R.length>Ls.MAX_SEARCH_KEY_LENGTH?O=n.primaryStore.get(N):O={[c]:R},this.isSync?A(O)?N:Ma.SKIP:new Promise((F,te)=>setImmediate(()=>{try{F(A(O)?N:Ma.SKIP)}catch(q){te(q)}}))}:({value:R})=>R):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:R,value:N}){return this.isSync?N&&A(N)?R:Ma.SKIP:new Promise((O,F)=>setImmediate(()=>{try{O(N&&A(N)?R:Ma.SKIP)}catch(te){F(te)}}))})}function ki(e,t){if(Array.isArray(t))if(t.length>1){let r=ki(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?ki(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 IZ(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=o((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 a=i.next();return a.done?a:{value:a.value}},return(){if(i?.return)return i.return()}}}})}function wZ(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,a,c=new Set;return{next(){let l;if(a)for(;l=a.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:(a=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return a?.return?.()},throw(){return a?.throw?.()}}}})}function qm(e,t,r,n,s,i){let a=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=ki(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=qm({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:a},m,r,p?.[d]?.joined,c[1]===m.primaryKey,i);if(!h)return;if(p){p.filters||(p.filters=[]),p.filters.push(h);return}let E=t.propertyResolvers?.[d];E.to&&(h.to=E.to);let g,A=o((R,N)=>{let O,F;return E?E.returnDirect?(O=E(R,r,N),F=ct):(F=E(R,r,N,!0),Array.isArray(F)?(O=F.map(te=>te.value),F=null):O=F?.value):O=R[d],{subObject:O,subEntry:F}},"getSubObject"),S=o((R,N)=>{if(E&&h.idFilter){if(!g)if(h.idFilter.idSet?.size===1){for(let k of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:k};g=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else g=u(E.from??t.primaryKey,h.idFilter,!1,!0);let q=g(R);return g.idFilter&&(S.idFilter=g.idFilter),q}let{subObject:O,subEntry:F}=A(R,N);return O?Array.isArray(O)?(!n?.[d]&&n&&(n[d]={fromRecord(q){let k=A(q).subObject;return Array.isArray(k)?k.filter(h).map(J=>J[m.primaryKey]):k}}),O.some(h)):h(O,F):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),Bb[a]||a){case Ls.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,Fi.compareKeys)(d,l[0])>=0&&(0,Fi.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,Fi.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,Fi.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,Fi.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,Fi.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,Fi.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new jr.ClientError(`Unknown query comparator "${a}"`)}function u(d,f,m,p){let h;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&J_(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,g=3;function A(S){let R=S[d],N;if(typeof R!="object"||!R||p?N=f(R):Array.isArray(R)?N=R.some(f):R instanceof Date&&(N=f(R.getTime())),m&&(g++,!N&&!A.idFilter&&++E/g*i>h)){let O=Fu(e,r.transaction.getReadTxn(),!1,t),F;A.to?F=O.flatMap(q=>t.primaryStore.get(q)[A.to]):F=O.map(ku);let te=new Set(F);A.idFilter=q=>te.has(ku(q)),A.idFilter.idSet=te}return N}return o(A,"recordFilter"),s&&(A.idFilter=f),A}o(u,"attributeComparator")}function J_(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/Uo(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=Bb[n]||n,n===Ls.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=ki(e.attributes,s[0]),a=i.definition?.tableClass||i.elements.definition?.tableClass,c=J_(a)({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*Uo(e.indices[i.relationship.from])/(Uo(a.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=Uo(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=AZ*Uo(e.primaryStore)+1;else if(n==="between")r.estimated_count=RZ*Uo(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=Uo(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=yZ*Uo(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function X_(e,t){if(e)if(xo=e,Uu.lastIndex=0,NZ.test(e))try{if(t&&(t.conditions=[]),ai=t??new Bu,Hm(ai,""),Br!==xo.length&&Vt("Unable to parse query, unexpected end of query"),ai.parseErrorMessage&&(ai.parseError=new vb(t.parseErrorMessage),!t))throw ai.parseError;return ai}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${Br} in '${xo}'`,ai.parseErrorMessage&&(r.message+=", "+ai.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Vt(e){let t=`${e} at position ${Br}`;ai.parseErrorMessage=ai.parseErrorMessage?ai.parseErrorMessage+", "+t:t}function Hm(e,t){let r=Uu,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(xo);){Br=r.lastIndex;let[,d,f]=n;a?(d&&Vt(`expected operator, but encountered '${d}'`),a=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Vt(`invalid FIQL operator ${d}`),l=Hx):(l=decodeURIComponent,i="equals",d||Vt("attribute must be specified before equality comparator"),s=xu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=bZ[f],l=Ub[i]?Hx:decodeURIComponent,d||Vt(`attribute must be specified before comparator ${f}`),s=xu(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Vt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Vt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Vt("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&qx(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else Q_(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?Vt("conditions/comparisons are not allowed in a property list"):e.push(xu(d)),s=void 0;break;case"(":Uu.lastIndex=Br;let p=Hm(d?[]:new Bu,")");switch(d){case"":Q_(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:Vt("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":Vt("group by is not implemented yet");case"sort":e.sort=Gx(p);break;default:Vt(`unknown query function call ${d}`)}xo[Br]===","?r.lastIndex=++Br:a=!0,s=null;break;case"{":e.conditions&&Vt("property sets are not allowed in a queries"),d||Vt("property sets must have a defined parent property name"),Uu.lastIndex=Br,m=Hm([],"}"),m.name=d,e.push(m),xo[Br]===","?r.lastIndex=++Br:a=!0;break;case"[":if(Uu.lastIndex=Br,d?(m=Hm(new Bu,"]"),m.name=d):m=Hm(e.conditions?new Bu:[],"]"),e.conditions)if(Q_(e,u),xo[Br]==="="){l=decodeURIComponent,i="equals",s=xu(d),r.lastIndex=++Br;break}else e.conditions.push(m),s=null;else e.push(m);xo[Br]===","?r.lastIndex=++Br:a=!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"&&qx(h,d),Q_(e,u),e.conditions.push(h)}else d&&Vt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(xu(d));return e}else Vt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Vt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?CZ:Uu,r.lastIndex=Br),Br===xo.length)return e}t&&Vt(`expected '${t}', but encountered end of string`)}function Q_(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Vt("Can not mix operators within a condition grouping"):e.operator=t)}function xu(e){return e.indexOf(".")>-1?e.split(".").map(xu):decodeURIComponent(e)}function Hx(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 jr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function qx(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new jr.ClientError("wildcard can only be used at the end of a string")}function Gx(e){let t=$x(e[0]);return e.length>1&&(t.next=Gx(e.slice(1))),t}function $x(e){if(Array.isArray(e)){let t=$x(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}}Vt(`Unknown sort type ${e}`)}function ku(e){return Array.isArray(e)?e.join("\0"):e}function Uo(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function OZ(e,t,r){return t*r/Uo(e)}var jr,Ls,Fi,Ma,yZ,RZ,AZ,bZ,Ub,Bb,vb,NZ,Uu,CZ,Br,ai,xo,Bu,Z_=ie(()=>{jr=w(_e()),Ls=w($t()),Fi=require("ordered-binary"),Ma=require("lmdb");eg();el();yZ=.3,RZ=.1,AZ=.05,bZ={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},Ub={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(xb,"executeConditions");o(Fu,"searchByIndex");o(ki,"findAttribute");o(IZ,"joinTo");o(wZ,"joinFrom");Bb={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"};o(qm,"filterByType");o(J_,"estimateCondition");vb=class extends jr.Violation{static{o(this,"SyntaxViolation")}},NZ=/[()[\]|!<>.]|(=\w*=)/,Uu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,CZ=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(X_,"parseQuery");o(Vt,"recordError");o(Hm,"parseBlock");o(Q_,"assignOperator");o(xu,"decodeProperty");o(Hx,"typedDecoding");o(qx,"wildcardDecoding");o(Gx,"toSortObject");o($x,"toSortEntry");Bu=class{static{o(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}};o(ku,"flattenKey");o(Uo,"estimatedEntryCount");o(OZ,"intersectionEstimate")});var Vx,ci,tg=ie(()=>{Vx=w(ii()),ci=class extends URLSearchParams{static{o(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,Vx._assignPackageExport)("Resource",Resource)});var jx={};Ie(jx,{MultiPartId:()=>rg,Resource:()=>Fr,contextStorage:()=>qu,snakeCase:()=>LZ,transformForSelect:()=>Gu});function LZ(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Kx(e,t){if(sl=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(sl=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new rg;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){sl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return sl=!0,null;e[e.length-1]==="/"&&(sl=!0)}return t.coerceId(decodeURIComponent(e))}function Mn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,a){let c,l,u,d;if(r){if(a)d=i,a=a.getContext?.()||a;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,a=i.getContext?.()||i):i?.transaction instanceof bo?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new Hu.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?a?(d=i,a=a.getContext?.()||a):a=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(a=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let E=c.indexOf("?");E>-1&&(l=this.parseQuery(c.slice(E+1),s),c=c.slice(0,E),c===""&&(u=!0));let g=this.parsePath(c,a,l);g?.id!==void 0?(g.query&&(l?l=Object.assign(g.query,l):l=g.query),u=g.isCollection,c=g.id):c=g,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new ci,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new ci,l.id=c,c==null&&(u=!0);l||(l=new ci,l.id=c),u&&(l.isCollection=!0);let f;a||(a=qu.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=o(E=>qu.run(a,()=>h(E)),"runAction")),a?.transaction){let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)}else return At(a,()=>{let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)},f);function h(E){if(m!==!1&&a.authorize){a.authorize=!1;let g=t.type==="read"?E.allowRead(a.user,l,a):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(a.user,d,a):E.allowUpdate(a.user,d,a):t.type==="create"?E.allowCreate(a.user,d,a):E.allowDelete(a.user,l,a);if(g?.then)return g.then(A=>{if(!A)throw new Hu.AccessViolation(a.user);return typeof d?.then=="function"?d.then(S=>e(E,l,a,S)):e(E,l,a,d)});if(!g)throw new Hu.AccessViolation(a.user)}return typeof d?.then=="function"?d.then(g=>e(E,l,a,g)):e(E,l,a,d)}o(h,"authorizeActionOnResource")}}function es(e,t){let r=new Hu.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 Fb(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let a,c;return e.hasOwnProperty(i)&&typeof(a=e[i])!="function"?a: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 Gu(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return o(function a(c){return c.then?c.then(a):Array.isArray(c)?c.map(a):Fb(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(Fb(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let a=e.forceNulls;return o(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(Fb(l,r,n)),f;for(let m of e){let p=d(m);p===void 0&&a&&(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(a){return c=>{if(typeof c=="string")return a(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]=Gu(c.select||c,d)}let u=a(c.name);return l(u)}else return a(c);else return c}}o(i,"handleProperty")}var Yx,Wx,Hu,zx,qu,PZ,Fr,sl,rg,Ua=ie(()=>{Yx=require("crypto");hm();Nu();Wx=w(ii()),Hu=w(_e());Ca();Z_();zx=require("async_hooks");tg();qu=new zx.AsyncLocalStorage,PZ={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Fr=class{static{o(this,"Resource")}#e;#t;#r;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=Mn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(a);return a(i);function a(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=Gu(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Mn(function(t,r,n,s){if(Array.isArray(s)&&t.#r&&t.constructor.loadAsInstance!==!1){let i=[];for(let a of s){let c=t.constructor,l=a[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(a,n))):i.push(u.put(a,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):es(t,"put")},{hasContent:!0,type:"update"});static patch=Mn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):es(t,"patch")},{hasContent:!0,type:"update"});static delete=Mn(function(t,r,n,s){return t.delete?t.delete(r):es(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,Yx.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=qu.getStore()??{};let s;return this.loadAsInstance===!1?s=t:t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),At(n,async()=>{let i=new this(s,n),a=await i.create?i.create(s,r):es(i,"create");return n.newLocation=s??a?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?a:i})}static invalidate=Mn(function(t,r,n,s){return t.invalidate?t.invalidate(r):es(t,"delete")},{hasContent:!1,type:"update"});static post=Mn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create"});static update=Mn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update"});static connect=Mn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):es(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Mn(function(t,r,n,s){return t.subscribe?t.subscribe(r):es(t,"subscribe")},{type:"read"});static publish=Mn(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):es(t,"publish")},{hasContent:!0,type:"create"});static search=Mn(function(t,r,n){let s=t.search?t.search(r):es(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let a=Gu(i,t.constructor);return s.map(a)}return s},{type:"read"});static query=Mn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):es(t,"search")},{hasContent:!0,type:"read"});static copy=Mn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):es(t,"copy")},{hasContent:!0,type:"create"});static move=Mn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):es(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;es(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return X_(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&PZ[a];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===a))if(t=t.slice(0,s),n)n.property=a;else return{query:{property:a},id:Kx(t,this),isCollection:sl}}let i=Kx(t,this);return sl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),a;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?a=r.isCollection:a=n?.isCollection;let c=a&&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 a&&(s.#r=!0),s}subscribe(t){return new Xn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new Xn}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,Wx._assignPackageExport)("Resource",Fr);o(LZ,"snakeCase");o(Kx,"pathToId");rg=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(Mn,"transactional");o(es,"missingMethod");o(Fb,"selectFromObject");o(Gu,"transformForSelect")});var il,kb=ie(()=>{il=class{static{o(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 Hb={};Ie(Hb,{Resources:()=>$u,keyArrayToString:()=>Vu,resetResources:()=>DZ,resources:()=>Ds});function DZ(){return Ds=new $u,Ue.resources=Ds,Ds}function Vu(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Qx,Jx,$u,Ds,xa=ie(()=>{Ca();kb();Qx=w(Q()),Jx=w(_e());xr();$u=class extends Map{static{o(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:""},a=super.get(t);if(a&&(a.Resource.databaseName!==r.databaseName||a.Resource.tableName!==r.tableName)&&!s){let c=new Jx.ServerError(`Conflicting paths for ${t}`);Qx.default.error(c),i.Resource=new il(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,a=t.length;for(;n<a;){s=n,n=t.indexOf("/",n),n===-1&&(n=a);let u=n===a?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===a&&(f=u.indexOf("?",s),f!==-1)){let m=u.slice(0,f);d=this.get(m)}if(d&&(!r||d.exportTypes?.[r]!==!1)){if(d.relativeURL=t.slice(f!==-1?f:n),!d.hasSubPaths)return d;i=d}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return At(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};o(DZ,"resetResources");o(Vu,"keyArrayToString")});function $b(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=Zx,MZ(e.primaryStore,e.auditStore)):(c=Xx,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{e0(Xx[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[a];u||(u=l[a]=new Map,u.envs=l,u.tableId=a,u.store=e.primaryStore),t=Vu(t);let d=new Gb(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 e0(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),t0(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=xt(s),a=e[i.tableId];if(!a)continue;let c=i.recordId,l=Vu(c),u=0;do{let d=a.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,qb.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,qb.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 MZ(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:a,txnId:c})=>{let l=Zx[s];if(!l)return;let u=o(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{e0(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function t0(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function r0(e){return e.nextTransaction||($b({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),t0(e)),e.nextTransaction}var qb,Xx,Zx,Gb,Vb=ie(()=>{qb=w(Q());Nu();xa();Io();Xx=Object.create(null),Zx=Object.create(null);o($b,"addSubscription");Gb=class extends Xn{static{o(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"}}};o(e0,"notifyFromTransactionData");o(MZ,"listenToCommits");o(t0,"nextTransaction");o(r0,"whenNextTransaction")});var s0=M((VCe,n0)=>{"use strict";var Kb=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};n0.exports=Kb});var o0=M((YCe,i0)=>{"use strict";var Yb=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};i0.exports=Yb});var Gm=M(c0=>{"use strict";var a0=ue(),vZ=(H(),D(W)),{RecordEncoder:UZ}=(el(),D(kx));a0.initSync();var xZ=a0.get(vZ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Wb=class{static{o(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=xZ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:UZ})}};c0.OpenDBIObject=Wb});var $m=M((QCe,l0)=>{"use strict";var ts=ue(),Ms=(H(),D(W));ts.initSync();var ng=class{static{o(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=ts.get(Ms.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||ts.get(Ms.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||ts.get(Ms.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",ts.get(Ms.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=ts.get(Ms.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),ts.get(Ms.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=ts.get(Ms.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),ts.get(Ms.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=ts.get(Ms.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),ts.get(Ms.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=ts.get(Ms.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=ts.get(Ms.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};l0.exports=ng;ng.MAX_DBS=1e4});var _t=M((XCe,S0)=>{"use strict";var jb=require("lmdb"),li=require("fs-extra"),rs=require("path"),sg=Cn(),f0=Q(),vn=Kr().LMDB_ERRORS_ENUM,ig=o0(),{OpenDBIObject:Qb}=Gm(),m0=$m(),Ba=$t(),u0=(H(),D(W)),{table:BZ,resetDatabases:FZ}=(Oe(),D(mt)),d0=ue(),ui=Ba.INTERNAL_DBIS_NAME,p0=Ba.DBI_DEFINITION_NAME,kZ="data.mdb",HZ="lock.mdb",Vm=".mdb",qZ="-lock",zb=class{static{o(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=vs(t,r),this.key_type=this.dbi[Ba.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ba.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new jb.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function og(e,t){if(e===void 0)throw new Error(vn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(vn.ENV_NAME_REQUIRED)}o(og,"pathEnvNameValidation");async function Jb(e,t,r=!0){try{await li.access(e)}catch(n){throw n.code==="ENOENT"?new Error(vn.INVALID_BASE_PATH):n}try{let n=rs.join(e,t+Vm);return await li.access(n,li.constants.R_OK|li.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await li.access(rs.join(e,t,kZ),li.constants.R_OK|li.constants.F_OK),rs.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(vn.INVALID_ENVIRONMENT)}else throw new Error(vn.INVALID_ENVIRONMENT);throw n}}o(Jb,"validateEnvironmentPath");function ag(e,t){if(sg.validateEnv(e),t===void 0)throw new Error(vn.DBI_NAME_REQUIRED)}o(ag,"validateEnvDBIName");async function GZ(e,t,r=!1,n=!1){og(e,t);let s=rs.basename(e);t=t.toString();let i=d0.get(u0.CONFIG_PARAMS.DATABASES);i||d0.setProperty(u0.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Jb(e,t,n),h0(e,t,r)}catch(a){if(a.message===vn.INVALID_ENVIRONMENT){let c=rs.join(e,t);await li.mkdirp(n?c:e);let l=new m0(n?c:c+Vm,!1),u=jb.open(l);u.dbis=Object.create(null);let d=new Qb(!1);u.openDB(ui,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=Xb(e,t,r);return u[Ba.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw a}}o(GZ,"createEnvironment");async function $Z(e,t,r,n=!0){og(e,t),t=t.toString();let s=rs.join(e,t);return BZ({table:t,database:rs.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}o($Z,"copyEnvironment");async function h0(e,t,r=!1){og(e,t),t=t.toString();let n=Xb(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 Jb(e,t),i=rs.join(e,t+Vm),a=s!=i,c=new m0(s,a),l=jb.open(c);l.dbis=Object.create(null);let u=_0(l);for(let d=0;d<u.length;d++)vs(l,u[d]);return l[Ba.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}o(h0,"openEnvironment");async function VZ(e,t,r=!1){og(e,t),t=t.toString();let n=rs.join(e,t+Vm),s=await Jb(e,t);if(global.lmdb_map!==void 0){let i=Xb(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await E0(a),delete global.lmdb_map[i]}}await li.remove(s),await li.remove(s===n?s+qZ:rs.join(rs.dirname(s),HZ))}o(VZ,"deleteEnvironment");async function E0(e){sg.validateEnv(e);let t=e[Ba.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(E0,"closeEnvironment");function Xb(e,t,r=!1){let s=`${rs.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}o(Xb,"getCachedEnvironmentName");function KZ(e){sg.validateEnv(e);let t=Object.create(null),r=vs(e,ui);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==ui)try{t[n]=Object.assign(new ig,s)}catch{f0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}o(KZ,"listDBIDefinitions");function _0(e){sg.validateEnv(e);let t=[],r=vs(e,ui);for(let{key:n}of r.getRange({start:!1}))n!==ui&&t.push(n);return t}o(_0,"listDBIs");function YZ(e,t){let n=vs(e,ui).getEntry(t),s=new ig;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{f0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}o(YZ,"getDBIDefinition");function g0(e,t,r,n=!r){if(ag(e,t),t=t.toString(),t===ui)throw new Error(vn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return vs(e,t)}catch(s){if(s.message===vn.DBI_DOES_NOT_EXIST){let i=new Qb(r,n===!0),a=e.openDB(t,i),c=new ig(r===!0,n);return a[p0]=c,vs(e,ui).putSync(t,c),e.dbis[t]=a,a}throw s}}o(g0,"createDBI");function vs(e,t){if(ag(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ui?r=YZ(e,t):r=new ig,r===void 0)throw new Error(vn.DBI_DOES_NOT_EXIST);let n;try{let s=new Qb(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(vn.DBI_DOES_NOT_EXIST):s}return n[p0]=r,e.dbis[t]=n,n}o(vs,"openDBI");function WZ(e,t){ag(e,t),t=t.toString();let r=vs(e,t),n=r.getStats();return r[Ba.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}o(WZ,"statDBI");async function zZ(e,t){try{let r=rs.join(e,t+Vm);return(await li.stat(r)).size}catch{throw new Error(vn.INVALID_ENVIRONMENT)}}o(zZ,"environmentDataSize");function jZ(e,t){if(ag(e,t),t=t.toString(),t===ui)throw new Error(vn.CANNOT_DROP_INTERNAL_DBIS_NAME);vs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],vs(e,ui).removeSync(t)}o(jZ,"dropDBI");function QZ(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{vs(e,i)}catch(a){if(a.message===vn.DBI_DOES_NOT_EXIST)g0(e,i,i!==t,i===t),n=!0;else throw a}}n&&FZ()}o(QZ,"initializeDBIs");S0.exports={openDBI:vs,openEnvironment:h0,createEnvironment:GZ,listDBIs:_0,listDBIDefinitions:KZ,createDBI:g0,dropDBI:jZ,statDBI:WZ,deleteEnvironment:VZ,initializeDBIs:QZ,TransactionCursor:zb,environmentDataSize:zZ,copyEnvironment:$Z,closeEnvironment:E0}});var R0=M((eOe,y0)=>{"use strict";var Zb=_t(),JZ=Q(),T0=Kr().LMDB_ERRORS_ENUM;y0.exports=XZ;async function XZ(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 a=t[i];if(a.startsWith(`${e.schema}.`)||a.startsWith(`txn.${e.schema}.`))try{await Zb.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==T0.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await Zb.closeEnvironment(global.lmdb_map[n]),await Zb.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==T0.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){JZ.error(t)}}o(XZ,"cleanLMDBMap")});var qi=M((rOe,b0)=>{"use strict";var A0=oe(),ZZ=(H(),D(W)),Ku=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Hi=require("joi"),Fa={schema_format:{pattern:Ku,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},e9=Hi.alternatives(Hi.string().min(1).max(Fa.schema_length.maximum).pattern(Ku).messages({"string.pattern.base":"{:#label} "+Fa.schema_format.message}),Hi.number(),Hi.array()).required(),t9=Hi.alternatives(Hi.string().min(1).max(Fa.schema_length.maximum).pattern(Ku).messages({"string.pattern.base":"{:#label} "+Fa.schema_format.message}),Hi.number()),r9=Hi.alternatives(Hi.string().min(1).max(Fa.schema_length.maximum).pattern(Ku).messages({"string.pattern.base":"{:#label} "+Fa.schema_format.message}),Hi.number()).required();function n9(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>Fa.schema_length.maximum?`'${property_name}' maximum of 250 characters`:Ku.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}o(n9,"checkValidTable");function s9(e,t){return A0.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(s9,"validateSchemaExists");function i9(e,t){let r=t.state.ancestors[0].schema;return A0.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(i9,"validateTableExists");function o9(e,t){return e.toLowerCase()===ZZ.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(o9,"validateSchemaName");b0.exports={commonValidators:Fa,schemaRegex:Ku,hdbSchemaTable:e9,validateSchemaExists:s9,validateTableExists:i9,validateSchemaName:o9,checkValidTable:n9,hdbDatabase:t9,hdbTable:r9}});var tI=M((sOe,w0)=>{var{hdbTable:a9,hdbDatabase:I0}=qi(),c9=ft(),eI=require("joi"),l9={undefined:"undefined",null:"null"},u9=o((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let a=r[i];(!a||a.length===0||l9[a]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${a}'`:s+=`. Invalid attribute name: '${a}'`)}return s?t.message(s):e},"customRecordsVal"),d9=eI.object({database:I0,schema:I0,table:a9,records:eI.array().items(eI.object().custom(u9)).required()});w0.exports=function(e){return c9.validateBySchema(e,d9)}});var C0=M((oOe,N0)=>{"use strict";var rI=class{static{o(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")}};N0.exports=rI});var P0=M((cOe,O0)=>{"use strict";var nI=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};O0.exports=nI});var D0=M((uOe,L0)=>{"use strict";var sI=class{static{o(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}};L0.exports=sI});var v0=M((fOe,M0)=>{"use strict";var iI=class{static{o(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};M0.exports=iI});var al=M((_Oe,B0)=>{"use strict";var f9=_t(),m9=P0(),p9=D0(),h9=v0(),Gi=Cn(),Km=Kr().LMDB_ERRORS_ENUM,E9=$t(),Bo=(H(),D(W)),_9=oe(),g9=require("uuid"),pOe=require("lmdb"),{handleHDBError:S9,hdbErrors:T9}=_e(),{OVERFLOW_MARKER:hOe,MAX_SEARCH_KEY_LENGTH:EOe}=E9,U0=ue();U0.initSync();var cg=U0.get(Bo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),oI=Bo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,ol=Bo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function y9(e,t,r,n,s=Gi.getNextMonotonicTime()){uI(e,t,r,n),aI(e,t,r);let i=new m9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];x0(u,!0,s);let d=R9(e,t,r,u),f=u[t];a.push(d),c.push(f)}return cI(a,c,n,i,s)}o(y9,"insertRecords");function R9(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||n.hasOwnProperty(a)===!1)continue;let c=n[a];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][Bo.FUNC_VAL],n[a]=c)}let l=Gi.getIndexedValues(c),u=e.dbis[a];if(l){cg&&u.prefetch(l.map(d=>({key:d,value:s})),lg);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}cg&&e.dbis[t].prefetch([s],lg),e.dbis[t].put(s,n,n[ol])})}o(R9,"insertRecord");function A9(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}o(A9,"removeSkippedRecords");function x0(e,t,r){let n=r>0;(n||!Number.isInteger(e[ol]))&&(e[ol]=r||(r=Gi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[oI]))&&(e[oI]=r||Gi.getNextMonotonicTime()):delete e[oI]}o(x0,"setTimestamps");function aI(e,t,r){r.indexOf(Bo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Bo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Bo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Bo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),f9.initializeDBIs(e,t,r)}o(aI,"initializeTransaction");async function b9(e,t,r,n,s=Gi.getNextMonotonicTime()){uI(e,t,r,n),aI(e,t,r);let i=new p9,a=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=lI(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),a.push(u);continue}c.push(m),l.push(f)}return cI(c,l,n,i,s,a)}o(b9,"updateRecords");async function I9(e,t,r,n,s=Gi.getNextMonotonicTime()){try{uI(e,t,r,n)}catch(l){throw S9(l,l.message,T9.HTTP_STATUS_CODES.BAD_REQUEST)}aI(e,t,r);let i=new h9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;_9.isEmpty(u[t])?(d=g9.v4(),u[t]=d):d=u[t];let f=lI(e,t,u,d,i,!1,s);a.push(f),c.push(d)}return cI(a,c,n,i,s)}o(I9,"upsertRecords");async function cI(e,t,r,n,s,i=[]){let a=await Promise.all(e);for(let c=0,l=a.length;c<l;c++)a[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Gi.getNextMonotonicTime(),A9(r,i),n}o(cI,"finalizeWrite");function lI(e,t,r,n,s,i=!1,a){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(x0(r,!d,a),Number.isInteger(r[ol])&&u[ol]>r[ol])return!1;d&&s.original_records.push(u);let f,m=o(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let E=r[h],g=e.dbis[h];if(g===void 0)continue;let A=u[h];if(typeof E=="function"){let R=E([[u]]);Array.isArray(R)&&(E=R[0][Bo.FUNC_VAL],r[h]=E)}if(E===A)continue;let S=Gi.getIndexedValues(A);if(S){cg&&g.prefetch(S.map(R=>({key:R,value:n})),lg);for(let R=0,N=S.length;R<N;R++)g.remove(S[R],n)}if(S=Gi.getIndexedValues(E),S){cg&&g.prefetch(S.map(R=>({key:R,value:n})),lg);for(let R=0,N=S.length;R<N;R++)g.put(S[R],n)}}let p={...u,...r};c.put(n,p,p[ol])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:lI(e,t,r,n,s,i,a))}o(lI,"updateUpsertRecord");function w9(e,t,r){if(Gi.validateEnv(e),t===void 0)throw new Error(Km.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Km.WRITE_ATTRIBUTES_REQUIRED):new Error(Km.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(w9,"validateBasic");function uI(e,t,r,n){if(w9(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Km.RECORDS_REQUIRED):new Error(Km.RECORDS_MUST_BE_ARRAY)}o(uI,"validateWrite");function lg(){}o(lg,"noop");B0.exports={insertRecords:y9,updateRecords:b9,upsertRecords:I9}});var $i=M((SOe,N9)=>{N9.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"}]}}});var k0=M((TOe,F0)=>{"use strict";var C9=require("uuid"),dI=class{static{o(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||C9.v4(),this.schema_table=`${this.schema}.${this.table}`}};F0.exports=dI});var ug=M((ROe,H0)=>{"use strict";var O9=k0(),fI=class extends O9{static{o(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,a=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=a}};H0.exports=fI});var G0=M((bOe,q0)=>{"use strict";q0.exports=L9;var P9="inserted";function L9(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===P9?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}o(L9,"returnObject")});var dg=M((NOe,V0)=>{"use strict";var D9=(H(),D(W)),mI=_t(),M9=al(),{getSystemSchemaPath:v9,getSchemaPath:U9}=Rt(),wOe=$i(),{validateBySchema:x9}=ft(),Ym=require("joi"),B9=ug(),F9=G0(),{handleHDBError:k9,hdbErrors:H9,ClientError:q9}=_e(),$0=oe(),{HTTP_STATUS_CODES:G9}=H9,$9="inserted";V0.exports=V9;async function V9(e){let t=x9(e,Ym.object({database:Ym.string(),schema:Ym.string(),table:Ym.string().required(),attribute:Ym.string().required()}));if(t)throw new q9(t.message);let r=!e.skip_table_check&&$0.checkGlobalSchemaTable(e.schema,e.table);if(r)throw k9(new Error,r,G9.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=$0.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 B9(e.schema,e.table,e.attribute,e.id);try{let i=await mI.openEnvironment(U9(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}`);mI.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await mI.openEnvironment(v9(),D9.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await M9.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return F9($9,c,{records:[s]},l)}catch(i){throw i}}o(V9,"lmdbCreateAttribute")});var Wm=M((POe,Y0)=>{"use strict";var Fo=oe(),K0=Q(),OOe=tI(),{getDatabases:K9}=(Oe(),D(mt)),{ClientError:cl}=_e();Y0.exports=Y9;function Y9(e){if(Fo.isEmpty(e))throw new cl("invalid update parameters defined.");if(Fo.isEmptyOrZeroLength(e.schema))throw new cl("invalid schema specified.");if(Fo.isEmptyOrZeroLength(e.table))throw new cl("invalid table specified.");if(!Array.isArray(e.records))throw new cl("records must be an array");let t=K9()[e.schema]?.[e.table];if(Fo.isEmpty(t))throw new cl(`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(a=>{if(i&&Fo.isEmptyOrZeroLength(a[r]))throw K0.error("a valid hash attribute must be provided with update record:",a),new cl("a valid hash attribute must be provided with update record, check log for more info");if(!Fo.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw K0.error(`a valid hash value must be provided with ${e.operation} record:`,a),new cl(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Fo.isEmpty(a[r])&&a[r]!==""&&n.has(Fo.autoCast(a[r]))&&(a.skip=!0),n.add(Fo.autoCast(a[r]));for(let c in a)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}o(Y9,"insertUpdateValidate")});var fg=M((DOe,z0)=>{"use strict";var W0=oe(),W9=(H(),D(W)),z9=Q(),j9=dg(),Q9=ug(),J9=ko(),{SchemaEventMsg:X9}=ns(),Z9="already exists in";z0.exports=e7;async function e7(e,t,r){if(W0.isEmptyOrZeroLength(r))return r;let n=[];W0.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 t7(e,t.schema,t.name,i)})),s}o(e7,"lmdbCheckForNewAttributes");async function t7(e,t,r,n){let s=new Q9(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await r7(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(Z9))z9.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}o(t7,"createNewAttribute");async function r7(e){let t;return t=await j9(e),J9.signalSchemaChange(new X9(process.pid,W9.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(r7,"createAttribute")});var Yu=M((vOe,j0)=>{"use strict";var pI=class{static{o(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}};j0.exports=pI});var J0=M((xOe,Q0)=>{"use strict";var n7=Yu(),s7=(H(),D(W)).OPERATIONS_ENUM,hI=class extends n7{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(s7.INSERT,r,n,s,i),this.records=t}};Q0.exports=hI});var Z0=M((FOe,X0)=>{"use strict";var i7=Yu(),o7=(H(),D(W)).OPERATIONS_ENUM,EI=class extends i7{static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(o7.UPDATE,n,s,i,a),this.records=t,this.original_records=r}};X0.exports=EI});var tB=M((HOe,eB)=>{"use strict";var a7=Yu(),c7=(H(),D(W)).OPERATIONS_ENUM,_I=class extends a7{static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(c7.UPSERT,n,s,i,a),this.records=t,this.original_records=r}};eB.exports=_I});var nB=M((GOe,rB)=>{"use strict";var l7=Yu(),u7=(H(),D(W)).OPERATIONS_ENUM,gI=class extends l7{static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(u7.DELETE,n,s,t,i),this.original_records=r}};rB.exports=gI});var zm=M((KOe,aB)=>{"use strict";var VOe=require("path"),sB=_t(),d7=J0(),f7=Z0(),m7=tB(),p7=nB(),Wu=$t(),iB=oe(),{CONFIG_PARAMS:h7}=(H(),D(W)),oB=ue();oB.initSync();var mg=(H(),D(W)).OPERATIONS_ENUM,{getTransactionAuditStorePath:E7}=Rt();aB.exports=_7;async function _7(e,t){if(oB.get(h7.LOGGING_AUDITLOG)===!1)return;let r=E7(e.schema,e.table),n=await sB.openEnvironment(r,e.table,!0),s=g7(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){sB.initializeDBIs(n,Wu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Wu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Wu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Wu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),iB.isEmpty(s.user_name)||n.dbis[Wu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let a=0;a<s.hash_values.length;a++)n.dbis[Wu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[a],i)})}}o(_7,"writeTransaction");function g7(e,t){let r=iB.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===mg.INSERT)return new d7(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===mg.UPDATE)return new f7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===mg.UPSERT)return new m7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===mg.DELETE)return new p7(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(g7,"createTransactionObject")});var SI=M((zOe,cB)=>{"use strict";var S7=Wm(),WOe=fm(),jm=(H(),D(W)),T7=mm(),y7=al().insertRecords,R7=_t(),A7=Q(),b7=fg(),{getSchemaPath:I7}=Rt(),w7=zm();cB.exports=N7;async function N7(e){try{let{schemaTable:t,attributes:r}=S7(e);T7(e,r,t.hash_attribute),e.schema!==jm.SYSTEM_SCHEMA_NAME&&(r.includes(jm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(jm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(jm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(jm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await b7(e.hdb_auth_header,t,r),s=I7(e.schema,e.table),i=await R7.openEnvironment(s,e.table),a=await y7(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await w7(e,a)}catch(c){A7.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(N7,"lmdbCreateRecords")});var dB=M((QOe,uB)=>{"use strict";var lB=(H(),D(W)),C7=SI(),O7=fm(),P7=require("fs-extra"),{getSchemaPath:L7}=Rt();uB.exports=D7;async function D7(e){let t=[{name:e.schema,createddate:Date.now()}],r=new O7(lB.SYSTEM_SCHEMA_NAME,lB.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await C7(r),await P7.mkdirp(L7(e.schema))}o(D7,"lmdbCreateSchema")});var mB=M((XOe,fB)=>{"use strict";var TI=class{static{o(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};fB.exports=TI});var _B=M((nPe,EB)=>{"use strict";var pB=_t(),yI=Cn(),RI=Kr().LMDB_ERRORS_ENUM,M7=$t(),hB=Q(),ePe=oe(),v7=require("lmdb"),U7=mB(),x7=(H(),D(W)),{OVERFLOW_MARKER:tPe,MAX_SEARCH_KEY_LENGTH:rPe}=M7,B7=x7.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function F7(e,t,r,n){if(yI.validateEnv(e),t===void 0)throw new Error(RI.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(RI.IDS_REQUIRED):new Error(RI.IDS_MUST_BE_ITERABLE);try{let s=pB.listDBIs(e);pB.initializeDBIs(e,t,s);let i=new U7,a,c=[],l=[];for(let m=0,p=r.length;m<p;m++)try{a=r[m];let h=e.dbis[t].get(a);if(!h||n&&h[B7]>n){i.skipped.push(a);continue}let E=e.dbis[t].ifVersion(a,v7.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let g=0;g<s.length;g++){let A=s[g];if(!h.hasOwnProperty(A)||A===t)continue;let S=e.dbis[A],R=h[A];if(R!=null)try{let N=yI.getIndexedValues(R);if(N)for(let O=0,F=N.length;O<F;O++)S.remove(N[O],a)}catch{hB.warn(`cannot delete from attribute: ${A}, ${R}:${a}`)}}});c.push(E),l.push(a),i.original_records.push(h)}catch(h){hB.warn(h),i.skipped.push(a)}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=yI.getNextMonotonicTime(),i}catch(s){throw s}}o(F7,"deleteRecords");EB.exports={deleteRecords:F7}});var Qm=M((iPe,SB)=>{"use strict";var zu=oe(),k7=_B(),H7=_t(),{getSchemaPath:q7}=Rt(),G7=zm(),$7=Q();SB.exports=V7;async function V7(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(zu.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(zu.isEmptyOrZeroLength(e.hash_values)&&!zu.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];zu.isEmpty(l)||e.hash_values.push(l)}}if(zu.isEmptyOrZeroLength(e.hash_values))return gB([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(zu.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=q7(e.schema,e.table),i=await H7.openEnvironment(s,e.table),a=await k7.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await G7(e,a)}catch(c){$7.error(`unable to write transaction due to ${c.message}`)}return gB(a.deleted,a.skipped,a.txn_time)}catch(s){throw s}}o(V7,"lmdbDeleteRecords");function gB(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}}o(gB,"createDeleteResponse")});var bI=M((cPe,TB)=>{"use strict";var K7=(H(),D(W)),aPe=Cn();function AI(e,t){let r=Object.create(null);if(t.length===1&&K7.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}o(AI,"parseRow");function Y7(e,t,r,n){let s=AI(r,e);n.push(s)}o(Y7,"searchAll");function W7(e,t,r,n){let s=AI(r,e);n[t]=s}o(W7,"searchAllToMap");function z7(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(z7,"iterateDBI");function ll(e,t,r,n,s){let i=Object.create(null);i[s]=e;let a;n===s?a=e:(a=t,n!==void 0&&(i[n]=a)),r[0].push(a),r[1].push(i)}o(ll,"pushResults");function j7(e,t,r,n,s,i){t.toString().endsWith(e)&&ll(t,r,n,s,i)}o(j7,"endsWith");function Q7(e,t,r,n,s,i){t.toString().includes(e)&&ll(t,r,n,s,i)}o(Q7,"contains");function J7(e,t,r,n,s,i){t>e&&ll(t,r,n,s,i)}o(J7,"greaterThanCompare");function X7(e,t,r,n,s,i){t>=e&&ll(t,r,n,s,i)}o(X7,"greaterThanEqualCompare");function Z7(e,t,r,n,s,i){t<e&&ll(t,r,n,s,i)}o(Z7,"lessThanCompare");function eee(e,t,r,n,s,i){t<=e&&ll(t,r,n,s,i)}o(eee,"lessThanEqualCompare");TB.exports={parseRow:AI,searchAll:Y7,searchAllToMap:W7,iterateDBI:z7,endsWith:j7,contains:Q7,greaterThanCompare:J7,greaterThanEqualCompare:X7,lessThanCompare:Z7,lessThanEqualCompare:eee,pushResults:ll}});var ju=M((mPe,NB)=>{"use strict";var ka=_t(),uPe=Q(),ss=Cn(),pg=$t(),rr=Kr().LMDB_ERRORS_ENUM,dPe=oe(),tee=(H(),D(W)),hg=bI(),{parseRow:ree}=hg,fPe=require("lmdb"),{OVERFLOW_MARKER:yB,MAX_SEARCH_KEY_LENGTH:nee}=pg;function RB(e,t,r,n=!1,s=void 0,i=void 0){return ul(e,t,r,(a,c)=>c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}o(RB,"iterateFullIndex");function Jm(e,t,r,n,s,i=!1,a=void 0,c=void 0,l=!1,u=!1){return ul(e,t,r,(d,f,m,p)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:a,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return p===r?(S.values=!1,f.getRange(S).map(R=>({value:R}))):f.getRange(S)})}o(Jm,"iterateRangeBetween");function ul(e,t,r,n){let s=e.database||e,i=ka.openDBI(s,r);i[pg.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ka.openDBI(s,t);let a;e.database?a=e:(a=e.useReadTransaction(),a.database=e);let c=n(a,i,s,t);return c.transaction=a,e.database||(c.onDone=()=>{a.done()}),c}o(ul,"setupTransaction");function AB(e,t,r,n){let s;return function(i,a){if(typeof i=="string"&&i.endsWith(yB)){if(!s)if(r)s=ka.openDBI(e,r);else{let l=ka.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=ka.openDBI(e,l[u]),!s[pg.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(a,{transaction:t,lazy:!0})[n]}return i}}o(AB,"getOverflowCheck");function see(e,t,r,n=!1,s=void 0,i=void 0){if(ss.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);return ul(e,t,t,(a,c,l)=>(Eg(r),r=Xm(l,r),c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>ree(u.value,r))))}o(see,"searchAll");function iee(e,t,r,n=!1,s=void 0,i=void 0){if(ss.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);Eg(r),r=Xm(e.database||e,r);let a=new Map;for(let{key:c,value:l}of RB(e,t,t,n,s,i))a.set(c,hg.parseRow(l,r));return a}o(iee,"searchAllToMap");function oee(e,t,r=!1,n=void 0,s=void 0){if(ss.validateEnv(e),t===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=RB(e,void 0,t,r,n,s),c=a.transaction,l=AB(c.database,c,void 0,t);for(let{key:u,value:d}of a){let f=l(u,d);i[f]===void 0&&(i[f]=[]),i[f].push(d)}return i}o(oee,"iterateDBI");function aee(e,t){if(ss.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);return ka.statDBI(e,t).entryCount}o(aee,"countAll");function cee(e,t,r,n,s=!1,i=void 0,a=void 0){return Ha(e,r,n),ul(e,t,r,(c,l,u,d)=>(n=ss.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:a}).map(f=>({key:n,value:f}))))}o(cee,"equals");function lee(e,t,r){return Ha(e,t,r),ka.openDBI(e,t).getValuesCount(r)}o(lee,"count");function uee(e,t,r,n,s=!1,i=void 0,a=void 0){return Ha(e,r,n),ul(e,null,r,(c,l)=>{n=ss.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(a)?a++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:a}).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:a}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}o(uee,"startsWith");function dee(e,t,r,n,s=!1,i=void 0,a=void 0){return bB(e,t,r,n,s,i,a,!0)}o(dee,"endsWith");function bB(e,t,r,n,s=!1,i=void 0,a=void 0,c=!1){return Ha(e,r,n),ul(e,null,r,(l,u,d,f)=>{let m=AB(d,l,f,r);return a=Number.isInteger(a)?a:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(p=>{let h=p.toString();return h.endsWith(yB)?u.getValues(p,{transaction:l}).map(E=>{let g=m(p,E);if(c?g.endsWith(n):g.includes(n))return{key:g,value:E}}).filter(E=>E):(c?h.endsWith(n):h.includes(n))?u[pg.DBI_DEFINITION_NAME].is_hash_attribute?{key:p,value:p}:u.getValues(p,{transaction:l}).map(E=>({key:p,value:E})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(bB,"contains");function fee(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Jm(e,t,r,n,l,s,i,a,!0,!1)}o(fee,"greaterThan");function mee(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Jm(e,t,r,n,l,s,i,a,!1,!1)}o(mee,"greaterThanEqual");function pee(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Jm(e,t,r,l,n,s,i,a,!1,!0)}o(pee,"lessThan");function hee(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Jm(e,t,r,l,n,s,i,a,!1,!1)}o(hee,"lessThanEqual");function Eee(e,t,r,n,s,i=!1,a=void 0,c=void 0){if(ss.validateEnv(e),r===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(rr.START_VALUE_REQUIRED);if(s===void 0)throw new Error(rr.END_VALUE_REQUIRED);if(n=ss.convertKeyValueToWrite(n),s=ss.convertKeyValueToWrite(s),n>s)throw new Error(rr.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Jm(e,t,r,n,s,i,a,c)}o(Eee,"between");function _ee(e,t,r,n){ss.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(Eg(r),r=Xm(s,r),n===void 0)throw new Error(rr.ID_REQUIRED);let a=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(a=hg.parseRow(c,r)),a}o(_ee,"searchByHash");function gee(e,t,r){ss.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(rr.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}o(gee,"checkHashExists");function See(e,t,r,n,s=[]){return wB(e,t,r,n,s),IB(e,t,r,n,s).map(i=>i[1])}o(See,"batchSearchByHash");function Tee(e,t,r,n,s=[]){wB(e,t,r,n,s);let i=new Map;for(let[a,c]of IB(e,t,r,n,s))i.set(a,c);return i}o(Tee,"batchSearchByHashToMap");function IB(e,t,r,n,s=[]){return ul(e,t,t,(i,a,c)=>{r=Xm(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,hg.parseRow(d,r)];s.push(u)}).filter(u=>u)})}o(IB,"batchHashSearch");function wB(e,t,r,n,s){if(ss.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(Eg(r),n==null)throw new Error(rr.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(rr.IDS_MUST_BE_ITERABLE)}o(wB,"initializeBatchSearchByHash");function Eg(e){if(!Array.isArray(e))throw e===void 0?new Error(rr.FETCH_ATTRIBUTES_REQUIRED):new Error(rr.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(Eg,"validateFetchAttributes");function Ha(e,t,r){if(ss.validateEnv(e),t===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(rr.SEARCH_VALUE_REQUIRED);if(r?.length>nee)throw new Error(rr.SEARCH_VALUE_TOO_LARGE)}o(Ha,"validateComparisonFunctions");function Xm(e,t){return t.length===1&&tee.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ka.listDBIs(e)),t}o(Xm,"setGetWholeRowAttributes");NB.exports={searchAll:see,searchAllToMap:iee,count:lee,countAll:aee,equals:cee,startsWith:uee,endsWith:dee,contains:bB,searchByHash:_ee,setGetWholeRowAttributes:Xm,batchSearchByHash:See,batchSearchByHashToMap:Tee,checkHashExists:gee,iterateDBI:oee,greaterThan:fee,greaterThanEqual:mee,lessThan:pee,lessThanEqual:hee,between:Eee}});var Qu=M((hPe,DB)=>{var CB=require("lodash"),OB=ft(),Ye=require("joi"),yee=oe(),{hdbSchemaTable:Zm,checkValidTable:PB,hdbTable:LB,hdbDatabase:_g}=qi(),{handleHDBError:Ree,hdbErrors:Aee}=_e(),{getDatabases:bee}=(Oe(),D(mt)),{HTTP_STATUS_CODES:Iee}=Aee,wee=Ye.object({database:_g,schema:_g,table:LB,attribute:Zm,value:Ye.any().required(),get_attributes:Ye.array().min(1).items(Ye.alternatives(Zm,Ye.object())).optional(),desc:Ye.bool(),limit:Ye.number().integer().min(1),offset:Ye.number().integer().min(0)}),Nee=Ye.object({database:_g,schema:_g,table:LB,operator:Ye.string().valid("and","or").default("and").lowercase(),offset:Ye.number().integer().min(0),limit:Ye.number().integer().min(1),get_attributes:Ye.array().min(1).items(Ye.alternatives(Zm,Ye.object())).optional(),sort:Ye.object({attribute:Ye.alternatives(Zm,Ye.array().min(1)),descending:Ye.bool().optional()}).optional(),conditions:Ye.array().min(1).items(Ye.alternatives(Ye.object({operator:Ye.string().valid("and","or").default("and").lowercase(),conditions:Ye.array()}),Ye.object({attribute:Ye.alternatives(Zm,Ye.array().min(1)),comparator:Ye.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),value:Ye.when("comparator",{switch:[{is:"equals",then:Ye.any()},{is:"between",then:Ye.array().items(Ye.alternatives([Ye.string(),Ye.number()])).length(2)}],otherwise:Ye.alternatives(Ye.string(),Ye.number())}).required()}))).required()});DB.exports=function(e,t){let r=null;switch(t){case"value":r=OB.validateBySchema(e,wee);break;case"hashes":let i=function(a){s?s+=". "+a:s=a};var n=i;o(i,"addError");let s;i(PB("database",e.schema)),i(PB("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="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(a=>typeof a=="string"||typeof a=="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=OB.validateBySchema(e,Nee);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=yee.checkGlobalSchemaTable(e.schema,e.table);if(s)return Ree(new Error,s,Iee.NOT_FOUND);let a=bee()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.attribute);let l=o(d=>{for(let f of d.conditions)f.conditions?l(f):c.push(f.attribute)},"addConditions");t==="conditions"&&l(e);let u=CB.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!CB.some(a,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 II=M((_Pe,MB)=>{"use strict";var Cee=_t(),Oee=Qu(),{getSchemaPath:Pee}=Rt();MB.exports=Lee;function Lee(e){let t=Oee(e,"hashes");if(t)throw t;let r=Pee(e.schema,e.table);return Cee.openEnvironment(r,e.table)}o(Lee,"initialize")});var wI=M((SPe,vB)=>{"use strict";var Dee=ju(),Mee=II();vB.exports=vee;async function vee(e){let t=await Mee(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Dee.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(vee,"lmdbGetDataByHash")});var Ju=M((yPe,UB)=>{"use strict";var NI=class{static{o(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};UB.exports=NI});var BB=M((bPe,xB)=>{"use strict";var APe=Ju(),Uee=ju(),xee=II();xB.exports=Bee;async function Bee(e){let t=await xee(e),r=global.hdb_schema[e.schema][e.table];return Uee.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(Bee,"lmdbSearchByHash")});var di=M((wPe,FB)=>{"use strict";var CI=class{static{o(this,"SearchObject")}constructor(t,r,n,s,i,a,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=a,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};FB.exports=CI});var gg=M((CPe,VB)=>{"use strict";var un=ju(),Fee=_t(),kee=oe(),We=$t(),dl=(H(),D(W)),Hee=$i(),kB=Kr().LMDB_ERRORS_ENUM,{getSchemaPath:qee}=Rt(),Ho=dl.SEARCH_WILDCARDS;async function Gee(e,t,r){let n;e.schema===dl.SYSTEM_SCHEMA_NAME?n=Hee[e.table]:n=global.hdb_schema[e.schema][e.table];let s=$B(e,n.hash_attribute,r,t);return qB(e,s,n.hash_attribute,r)}o(Gee,"prepSearch");async function qB(e,t,r,n){let s=qee(e.schema,e.table),i=await Fee.openEnvironment(s,e.table),a=GB(i,e,t,r),c=a.transaction||i;if([We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,We.SEARCH_TYPES.SEARCH_ALL,We.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if($ee(e,r)===!1){let d=e.attribute;if(d===r)return n?HB(a,()=>!0):a.map(m=>({[r]:m.key}));let f=o(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?HB(a,f):a.map(f)}let u=e.attribute===r?a.map(d=>d.key):a.map(d=>d.value);return n===!0?un.batchSearchByHashToMap(c,r,e.get_attributes,u):un.batchSearchByHash(c,r,e.get_attributes,u)}o(qB,"executeSearch");function GB(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:a,limit:c,offset:l}=t;switch(a=typeof a=="boolean"?a:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case We.SEARCH_TYPES.EQUALS:s=un.equals(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.CONTAINS:s=un.contains(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.ENDS_WITH:case We.SEARCH_TYPES._ENDS_WITH:s=un.endsWith(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.STARTS_WITH:case We.SEARCH_TYPES._STARTS_WITH:s=un.startsWith(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return un.batchSearchByHash(e,t.attribute,t.get_attributes,[t.value]);case We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return un.batchSearchByHashToMap(e,t.attribute,t.get_attributes,[t.value]);case We.SEARCH_TYPES.SEARCH_ALL:return un.searchAll(e,n,t.get_attributes,a,c,l);case We.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return un.searchAllToMap(e,n,t.get_attributes,a,c,l);case We.SEARCH_TYPES.BETWEEN:s=un.between(e,i,t.attribute,t.value,t.end_value,a,c,l);break;case We.SEARCH_TYPES.GREATER_THAN:case We.SEARCH_TYPES._GREATER_THAN:s=un.greaterThan(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.GREATER_THAN_EQUAL:case We.SEARCH_TYPES._GREATER_THAN_EQUAL:s=un.greaterThanEqual(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.LESS_THAN:case We.SEARCH_TYPES._LESS_THAN:s=un.lessThan(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.LESS_THAN_EQUAL:case We.SEARCH_TYPES._LESS_THAN_EQUAL:s=un.lessThanEqual(e,i,t.attribute,t.value,a,c,l);break;default:return Object.create(null)}return s}o(GB,"searchByType");function HB(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}o(HB,"createMapFromIterable");function $ee(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}o($ee,"checkToFetchMore");function $B(e,t,r,n){if(kee.isEmpty(n)){let s=e.value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),a=s.charAt(s.length-1),c=!1;if(e.attribute===t&&(c=!0),Ho.indexOf(s)>-1)return r===!0?We.SEARCH_TYPES.SEARCH_ALL_TO_MAP:We.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Ho[0])<0&&s.indexOf(Ho[1])<0)return c===!0?r===!0?We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:We.SEARCH_TYPES.EQUALS;if(Ho.indexOf(i)>=0&&Ho.indexOf(a)>=0)return e.value=e.value.slice(1,-1),We.SEARCH_TYPES.CONTAINS;if(Ho.indexOf(i)>=0)return e.value=e.value.substr(1),We.SEARCH_TYPES.ENDS_WITH;if(Ho.indexOf(a)>=0)return e.value=e.value.slice(0,-1),We.SEARCH_TYPES.STARTS_WITH;if(s.includes(Ho[0])||s.includes(Ho[1]))return We.SEARCH_TYPES.EQUALS;throw new Error(kB.UNKNOWN_SEARCH_TYPE)}else switch(n){case dl.VALUE_SEARCH_COMPARATORS.BETWEEN:return We.SEARCH_TYPES.BETWEEN;case dl.VALUE_SEARCH_COMPARATORS.GREATER:return We.SEARCH_TYPES.GREATER_THAN;case dl.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return We.SEARCH_TYPES.GREATER_THAN_EQUAL;case dl.VALUE_SEARCH_COMPARATORS.LESS:return We.SEARCH_TYPES.LESS_THAN;case dl.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return We.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(kB.UNKNOWN_SEARCH_TYPE)}}o($B,"createSearchTypeFromSearchObject");VB.exports={executeSearch:qB,createSearchTypeFromSearchObject:$B,prepSearch:Gee,searchByType:GB}});var YB=M((LPe,KB)=>{"use strict";var PPe=di(),Vee=Qu(),Kee=oe(),Yee=(H(),D(W)),Wee=gg();KB.exports=zee;function zee(e,t){if(!Kee.isEmpty(t)&&Yee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Vee(e,"value");if(n)throw n;return Wee.prepSearch(e,t,!0)}o(zee,"lmdbGetDataByValue")});var ep=M((vPe,WB)=>{"use strict";var MPe=di(),jee=Qu(),Qee=oe(),Jee=(H(),D(W)),Xee=gg();WB.exports=Zee;async function Zee(e,t){if(!Qee.isEmpty(t)&&Jee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=jee(e,"value");if(n)throw n;return Xee.prepSearch(e,t,!1)}o(Zee,"lmdbSearchByValue")});var jB=M((BPe,zB)=>{"use strict";var xPe=$t(),OI=class{static{o(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,a=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=a,this.conditions=s,this.operator=c}},PI=class{static{o(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},LI=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};zB.exports={SearchByConditionsObject:OI,SearchCondition:PI,SortAttribute:LI}});var eF=M((GPe,ZB)=>{"use strict";var{SearchByConditionsObject:kPe,SearchCondition:HPe}=jB(),ete=di(),tte=Qu(),DI=ju(),Sg=$t(),{Resource:qPe}=(Ua(),D(jx)),XB=gg(),rte=bI(),nte=require("lodash"),{getSchemaPath:ste}=Rt(),QB=_t(),{handleHDBError:ite,hdbErrors:ote}=_e(),{HTTP_STATUS_CODES:ate}=ote,cte=1e8;ZB.exports=lte;async function lte(e){let t=tte(e,"conditions");if(t)throw ite(t,t.message,ate.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=ste(e.schema,e.table),n=await QB.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)QB.openDBI(n,u.attribute);let i=nte.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===Sg.SEARCH_TYPES.EQUALS?u.estimated_count=DI.count(n,u.attribute,u.value):d===Sg.SEARCH_TYPES.CONTAINS||d===Sg.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=cte}return u.estimated_count}),a=n.useReadTransaction();a.database=n;let c=await JB(a,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(XB.filterByType),f=d.length,m=DI.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(p=>u.get(p,{transaction:a,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=>rte.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await JB(a,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=DI.batchSearchByHash(a,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{a.done()},l}o(lte,"lmdbSearchByConditions");async function JB(e,t,r,n){let s=new ete(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.comparator;return s.attribute=r.attribute,i===Sg.SEARCH_TYPES.BETWEEN?(s.value=r.value[0],s.end_value=r.value[1]):s.value=r.value,XB.searchByType(e,s,i,n).map(a=>a.value)}o(JB,"executeConditionSearch")});var tp=M((VPe,tF)=>{"use strict";var ute=(H(),D(W)).OPERATIONS_ENUM,MI=class{static{o(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=ute.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};tF.exports=MI});var vI=M((YPe,lF)=>{"use strict";var iF=di(),oF=tp(),aF=ep(),cF=Qm(),Un=(H(),D(W)),rF=oe(),nF=_t(),{getTransactionAuditStorePath:dte,getSchemaPath:fte}=Rt(),sF=Q();lF.exports=mte;async function mte(e){try{if(rF.isEmpty(global.hdb_schema[e.schema])||rF.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await pte(e),await hte(e);let t=fte(e.schema,e.table);try{await nF.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")sF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=dte(e.schema,e.table);await nF.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")sF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(mte,"lmdbDropTable");async function pte(e){let t=new iF(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await aF(t)),n=[];for(let i=0;i<r.length;i++){let a=r[i];n.push(a.id)}if(n.length===0)return;let s=new oF(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await cF(s)}o(pte,"deleteAttributesFromSystem");async function hte(e){let t=new iF(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await aF(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(n=a)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new oF(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await cF(s)}catch(i){throw i}}o(hte,"dropTableFromSystem")});var dF=M((zPe,uF)=>{"use strict";var Ete=require("fs-extra"),_te=di(),gte=Ju(),Ste=tp(),Tte=vI(),yte=Qm(),Rte=wI(),Ate=ep(),qo=(H(),D(W)),{getSchemaPath:bte}=Rt(),{handleHDBError:Ite,hdbErrors:wte}=_e(),{HDB_ERROR_MSGS:Nte,HTTP_STATUS_CODES:Cte}=wte;uF.exports=Ote;async function Ote(e){let t;try{t=await Pte(e.schema);let r=new _te(qo.SYSTEM_SCHEMA_NAME,qo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await Ate(r));for(let a=0;a<n.length;a++){let c={schema:t,table:n[a].name};try{await Tte(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new Ste(qo.SYSTEM_SCHEMA_NAME,qo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await yte(s);let i=bte(t);await Ete.remove(i)}catch(r){throw r}}o(Ote,"lmdbDropSchema");async function Pte(e){let t=new gte(qo.SYSTEM_SCHEMA_NAME,qo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await Rte(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw Ite(new Error,Nte.SCHEMA_NOT_FOUND(e),Cte.NOT_FOUND,void 0,void 0,!0);return n}o(Pte,"validateDropSchema")});var rp=M((QPe,fF)=>{"use strict";var UI=class{static{o(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};fF.exports=UI});var BI=M((ZPe,mF)=>{"use strict";var Lte=require("fs-extra"),Tg=_t(),{getTransactionAuditStorePath:Dte}=Rt(),xI=$t(),XPe=rp();mF.exports=Mte;async function Mte(e){let t;try{let r=Dte(e.schema,e.table);await Lte.mkdirp(r),t=await Tg.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{Tg.createDBI(t,xI.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Tg.createDBI(t,xI.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Tg.createDBI(t,xI.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}o(Mte,"createTransactionsAuditEnvironment")});var EF=M((rLe,hF)=>{"use strict";var FI=(H(),D(W)),pF=_t(),vte=al(),{getSystemSchemaPath:Ute,getSchemaPath:xte}=Rt(),tLe=$i(),Bte=dg(),kI=ug(),Fte=Q(),kte=BI();hF.exports=Hte;async function Hte(e,t){let r=xte(t.schema,t.table),n=new kI(t.schema,t.table,FI.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new kI(t.schema,t.table,FI.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new kI(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await pF.createEnvironment(r,t.table),e!==void 0){let a=await pF.openEnvironment(Ute(),FI.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await vte.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbTableAttributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await HI(n),await HI(s),await HI(i)}await kte(t)}catch(a){throw a}}o(Hte,"lmdbCreateTable");async function HI(e){try{await Bte(e)}catch(t){Fte.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(HI,"createAttribute")});var gF=M((sLe,_F)=>{"use strict";var qte=Wm(),Gte=mm(),$te=fg(),np=(H(),D(W)),Vte=al().updateRecords,Kte=_t(),{getSchemaPath:Yte}=Rt(),Wte=zm(),zte=Q();_F.exports=jte;async function jte(e){try{let{schemaTable:t,attributes:r}=qte(e);Gte(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 $te(e.hdb_auth_header,t,r),s=Yte(e.schema,e.table),i=await Kte.openEnvironment(s,e.table),a=await Vte(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Wte(e,a)}catch(c){zte.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(jte,"lmdbUpdateRecords")});var TF=M((oLe,SF)=>{"use strict";var Qte=(H(),D(W)).OPERATIONS_ENUM,qI=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Qte.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};SF.exports=qI});var RF=M((lLe,yF)=>{"use strict";var cLe=TF(),Jte=Wm(),Xte=mm(),Zte=fg(),sp=(H(),D(W)),ere=al().upsertRecords,tre=_t(),{getSchemaPath:rre}=Rt(),nre=zm(),sre=Q(),{handleHDBError:ire,hdbErrors:ore}=_e();yF.exports=are;async function are(e){let t;try{t=Jte(e)}catch(l){throw ire(l,l.message,ore.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;Xte(e,n,r.hash_attribute),e.schema!==sp.SYSTEM_SCHEMA_NAME&&(n.includes(sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Zte(e.hdb_auth_header,r,n),i=rre(e.schema,e.table),a=await tre.openEnvironment(i,e.table),c=await ere(a,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await nre(e,c)}catch(l){sre.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}}o(are,"lmdbUpsertRecords")});var bF=M((dLe,AF)=>{"use strict";var GI=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};AF.exports=GI});var wF=M((mLe,IF)=>{"use strict";var $I=class{static{o(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};IF.exports=$I});var OF=M((ELe,CF)=>{"use strict";var VI=_t(),{getTransactionAuditStorePath:cre}=Rt(),hLe=bF(),ip=$t(),lre=oe(),NF=wF(),ure=require("util").promisify,dre=ure(setTimeout),fre=1e4,mre=100;CF.exports=pre;async function pre(e){let t=cre(e.schema,e.table),r=await VI.openEnvironment(t,e.table,!0),n=VI.listDBIs(r);VI.initializeDBIs(r,ip.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new NF;do s=await hre(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 dre(mre);while(s.transactions_deleted>0);return i}o(pre,"deleteAuditLogsBefore");async function hre(e,t){let r=new NF;try{let n=e.dbis[ip.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:a}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=a[ip.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];lre.isEmpty(c)||(s=e.dbis[ip.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<a.hash_values.length;l++)s=e.dbis[ip.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>fre)break}return await s,r}catch(n){throw n}}o(hre,"deleteTransactions")});var LF=M((gLe,PF)=>{"use strict";var KI=class{static{o(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};PF.exports=KI});var MF=M((yLe,DF)=>{"use strict";var Ere=di(),_re=tp(),TLe=LF(),Vi=(H(),D(W)),gre=oe(),YI=_t(),Sre=$i(),Tre=ep(),yre=Qm(),{getSchemaPath:Rre}=Rt();DF.exports=Are;async function Are(e,t=!0){let r;e.schema===Vi.SYSTEM_SCHEMA_NAME?r=Sre[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await Ire(e),s=Rre(e.schema,e.table),i=await YI.openEnvironment(s,e.table);return t===!0&&await bre(e,i,r.hash_attribute),YI.dropDBI(i,e.attribute),n}o(Are,"lmdbDropAttribute");async function bre(e,t,r){let n=YI.openDBI(t,r),s,i=e.attribute;for(let{key:a,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(a,u,l)}await s}o(bre,"removeAttributeFromAllObjects");async function Ire(e){let t=new Ere(Vi.SYSTEM_SCHEMA_NAME,Vi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Vi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Vi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Vi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await Tre(t)).filter(a=>a[Vi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(gre.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(a=>a[Vi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new _re(Vi.SYSTEM_SCHEMA_NAME,Vi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return yre(i)}o(Ire,"dropAttributeFromSystem")});var kF=M((bLe,FF)=>{"use strict";var WI=_t(),Xu=$t(),ALe=Cn(),zI=(H(),D(W)),vF=oe(),{getTransactionAuditStorePath:wre}=Rt(),Nre=ju(),yg=Yu(),Cre=Q();FF.exports=Ore;async function Ore(e){let t=wre(e.schema,e.table),r=await WI.openEnvironment(t,e.table,!0),n=WI.listDBIs(r);WI.initializeDBIs(r,Xu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case zI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return UF(r,e.search_values);case zI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,Lre(r,e.search_values,s);case zI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Pre(r,e.search_values);default:return UF(r)}}o(Ore,"readAuditLog");function UF(e,t=[0,Date.now()]){vF.isEmpty(t[0])&&(t[0]=0),vF.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Xu.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 yg,s))}o(UF,"searchTransactionsByTimestamp");function Pre(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let a of e.dbis[Xu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(a);r.set(s,BF(e,i))}return Object.fromEntries(r)}o(Pre,"searchTransactionsByUsername");function Lre(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=Nre.equals(e,Xu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Xu.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=BF(e,s),a=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);xF(l,"records",r,d,a),xF(l,"original_records",r,d,a)}return Object.fromEntries(a)}o(Lre,"searchTransactionsByHashValues");function xF(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let c=e[t][a],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 yg(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new yg(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}o(xF,"loopRecords");function BF(e,t){let r=[];try{let n=e.dbis[Xu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let a=Object.assign(new yg,i);r.push(a)}}catch(i){Cre.warn(i)}return r}catch(n){throw n}}o(BF,"batchSearchTransactions")});var qF=M((CLe,HF)=>{"use strict";var{getSchemaPath:wLe}=Rt(),NLe=_t(),{database:Dre}=(Oe(),D(mt));HF.exports={writeTransaction:Mre};async function Mre(e,t,r){return Dre({database:e,table:t}).transaction(r)}o(Mre,"writeTransaction")});var KF=M((PLe,VF)=>{"use strict";var{getSchemaPath:GF}=Rt(),$F=_t();VF.exports={flush:vre,resetReadTxn:Ure};async function vre(e,t){return(await $F.openEnvironment(GF(e,t),t.toString())).flushed}o(vre,"flush");async function Ure(e,t){try{(await $F.openEnvironment(GF(e,t),t.toString())).resetReadTxn()}catch{}}o(Ure,"resetReadTxn")});var jF=M((DLe,zF)=>{"use strict";var{Readable:xre}=require("stream"),{getDatabases:Bre}=(Oe(),D(mt)),{readSync:Fre,openSync:kre,createReadStream:YF}=require("fs"),{open:Hre}=require("lmdb"),{OpenDBIObject:WF}=Gm(),qre=$m(),{AUDIT_STORE_OPTIONS:Gre}=(Io(),D(cx)),{INTERNAL_DBIS_NAME:$re,AUDIT_STORE_NAME:Vre}=$t();zF.exports=Yre;var jI=32768,Kre=100;async function Yre(e){let t=e.database||e.schema||"data",r=Bre()[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=Hre({noSync:!0,maxDbs:qre.MAX_DBS}),m,p=f.openDB($re,new WF(!1)),h=d.useReadTransaction(),E=0,g=o(async function(S,R){R.encoding="binary",R.encoder=void 0;let N=f.openDB(S,R),O=d.openDB(S,R);for(let{key:F,version:te,value:q}of O.getRange({start:null,transaction:h,versions:O.useVersions}))m=N.put(F,q,te),E++%Kre===0&&(await new Promise(k=>setTimeout(k,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:R}of d.getRange({transaction:h,start:!1}))if(s.some(N=>S.startsWith?.(N+"/"))){p.put(S,R);let[,N]=S.split("/"),O=!N,F=new WF(!O,O);await g(S,F)}e.include_audit&&await g(Vre,{...Gre}),await m;let A=YF(f.path);return A.headers=l(),A.on("close",()=>{h.done(),f.close()}),A}let a=r[Object.keys(r)[0]].primaryStore,c=kre(a.path);return a.transaction(()=>{let u=Buffer.alloc(jI);Fre(c,u,0,jI),a.resetReadTxn();let d=a.useReadTransaction();d.renew();let f=YF(null,{fd:c,start:jI}),m=new xre.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}}o(Yre,"getBackup")});var XF=M((vLe,JF)=>{"use strict";var Wre=Q(),{handleHDBError:zre}=_e(),jre=C0(),Qre=dg(),Jre=SI(),Xre=dB(),Zre=Qm(),ene=wI(),tne=BB(),rne=YB(),nne=ep(),sne=eF(),ine=dF(),one=EF(),ane=gF(),cne=RF(),lne=OF(),une=vI(),dne=MF(),fne=kF(),mne=qF(),QF=KF(),pne=jF(),QI=class extends jre{static{o(this,"LMDBBridge")}async searchByConditions(t){return sne(t)}async getDataByHash(t){return await ene(t)}async searchByHash(t){return await tne(t)}async getDataByValue(t,r){return await rne(t,r)}async searchByValue(t){return await nne(t)}async createSchema(t){return await Xre(t)}async dropSchema(t){return await ine(t)}async createTable(t,r){return await one(t,r)}async dropTable(t){return await une(t)}async createAttribute(t){return await Qre(t)}async createRecords(t){return await Jre(t)}async updateRecords(t){return await ane(t)}async upsertRecords(t){try{return await cne(t)}catch(r){throw zre(r,null,null,Wre.ERR,r)}}async deleteRecords(t){return await Zre(t)}async dropAttribute(t){return await dne(t)}async deleteAuditLogsBefore(t){return await lne(t)}async readAuditLog(t){return await fne(t)}writeTransaction(t,r,n){return mne.writeTransaction(t,r,n)}flush(t,r){return QF.flush(t,r)}resetReadTxn(t,r){return QF.resetReadTxn(t,r)}getBackup(t){return pne(t)}};JF.exports=QI});function xn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function ap(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=o(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new is.ClientError(`${u} must be a string, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"ID":d=o(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(p=>typeof p=="string")||m==null&&l.nullable!==!1))throw new is.ClientError(`${u} must be a string, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Float":case"Number":d=o(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="number"||m==null&&l.nullable!==!1))throw new is.ClientError(`${u} must be a number, attempt to assign ${p}`);xn(this)[u]=m},"set");break;case"Int":d=o(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 is.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Long":d=o(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 is.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"BigInt":d=o(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 is.ClientError(`${u} must be a number, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Boolean":d=o(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new is.ClientError(`${u} must be a boolean, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Date":d=o(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 is.ClientError(`${u} must be a Date, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Bytes":d=o(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new is.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Blob":d=o(function(m){if(!(m instanceof ws||m==null&&l.nullable!==!1))throw new is.ClientError(`${u} must be a Blob, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Any":case void 0:d=o(function(m){xn(this)[u]=m},"set");break;default:d=o(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new is.ClientError(`${u} must be an object, attempt to assign ${m}`);xn(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=JI(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)}a("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]}),a("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new is.ClientError("Can not add a property to a sealed table schema");xn(this)[l]=u}),a("deleteProperty",function(l){xn(this)[l]=void 0}),a("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||a("get",n.getProperty),n.delete||a("delete",n.deleteProperty),n.then||a("then",null);function a(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}o(a,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?tk:ek);break}c=l}while(c&&c!==ek&&c!==tk)}function rk(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(ZF[t])return ZF[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=JI(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function hne(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 JI(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends ml{static{o(this,"TrackedObject")}},ap(r,t)),new r(e)):new ml(e);case Array:let n=new Ag(e.length,e);for(let s=0,i=e.length;s<i;s++){let a=e[s];a&&typeof a=="object"&&(a=JI(a,t?.elements)),n[s]=a}return n;default:return e}}function bg(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 a=r[s];i=i.update(a)}else i=bg(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 qa(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 a=qa(i);a!==i&&r===e&&(r=e.slice(0)),i=a}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=qA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=qa(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)Ene.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function Rg(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[fl]||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(Rg(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(Rg(s))return!0}else return!0}else return!0}}return!1}var is,ZF,ek,tk,ml,Ene,fl,Ag,op,XI=ie(()=>{is=w(_e());__();Ns();o(xn,"getChanges");o(ap,"assignTrackedAccessors");ZF=Object.prototype,ek=new Proxy({},{get:rk}),tk=new Proxy({},{get:rk,set:hne});o(rk,"getProxiedProperty");o(hne,"setProxiedProperty");o(JI,"trackObject");ml=class{static{o(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}};ap(ml,{},!0);o(bg,"collapseData");Ene=Object.prototype.hasOwnProperty;o(qa,"updateAndFreeze");o(Rg,"hasChanges");fl=Symbol.for("has-array-changes"),Ag=class extends Array{static{o(this,"TrackedArray")}#e;[fl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[fl]=!0,super.splice(...t)}push(...t){return this[fl]=!0,super.push(...t)}pop(){return this[fl]=!0,super.pop()}unshift(...t){return this[fl]=!0,super.unshift(...t)}shift(){return this[fl]=!0,super.shift()}};Ag.prototype.constructor=Array;op=class{static{o(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var uk={};Ie(uk,{ResourceBridge:()=>tw});function rw({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 nk(e,t){let r=Ki(e),n=rw(e,r);if(!r)throw new fi.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},a;At(i,()=>new Promise(u=>a=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&&bg(d)}catch(f){d={message:(0,lk.errorToString)(f)}}return t?{value:{key:u,value:d}}:{value:d}}else return a(),{done:!0}},return(u){return a(),{value:u,done:!0}},throw(u){return a(),{done:!0}}}}}}function Ki(e){let t=e.database||e.schema||gne,r=at()[t];if(!r)throw(0,fi.handleHDBError)(new Error,_ne.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function sk(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*ik(e,t,r,n){let s,i=0;for await(let a of e.getHistory(t,r)){let c=a.operation??a.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=a;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:a.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var ok,Ig,fi,ak,ZI,ew,ck,lk,_ne,gne,Sne,Tne,tw,dk=ie(()=>{ok=w(XF()),Ig=w(Qu()),fi=w(_e());Oe();ak=w(Wm());H();ZI=w(ko()),ew=w(ns()),ck=w(oe());Ca();XI();lk=w(Q()),{HDB_ERROR_MSGS:_ne}=fi.hdbErrors,gne="data",Sne=1e4,Tne=10,tw=class extends ok.default{static{o(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=Ki(t);if(!r)throw new fi.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 a=i;return{attribute:a.attribute??a.search_attribute,comparator:a.comparator??a.search_type,value:a.value!==void 0?a.value:a.search_value}}}o(n,"mapCondition");let s=(0,Ig.default)(t,"conditions");if(s)throw(0,fi.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:rw(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 a of n)a.is_primary_key?(a.isPrimaryKey=!0,delete a.is_primary_key):a.name===i&&i&&(a.isPrimaryKey=!0);else{if(!i)throw new fi.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Xe({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Ki(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Ki(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=o((a,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(a,l,()=>r.primaryStore.put(a,c,l)).then(u=>{if(!u){let{value:d,version:f}=r.primaryStore.getEntry(a);return i(a,d,f)}})),"deleteRecord");for(let{key:a,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(a,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){return Ki(t).dropTable()}createSchema(t){return Zu({database:t.schema,table:null}),ZI.signalSchemaChange(new ew.SchemaEventMsg(process.pid,V.CREATE_SCHEMA,t.schema))}async dropSchema(t){await nw(t.schema),ZI.signalSchemaChange(new ew.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,ak.default)(t),s,i=at()[t.schema][t.table],a={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(a.replicateTo=t.replicateTo),t.replicatedConfirmation&&(a.replicatedConfirmation=t.replicatedConfirmation),At(a,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,a);if(t.requires_existing&&!m||t.requires_no_existing&&m){u.push(d[i.primaryKey]);continue}m&&(m=bg(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,a):i.put(d,a)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=at()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),At(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),a=[],c=[];for(let l of i)await r.delete(l,n)?a.push(l):c.push(l);return sk(a,c,s.timestamp)})}async deleteRecordsBefore(t){let r=at()[t.schema][t.table];if(!r.createdTimeProperty)throw new fi.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:JE.LESS}]}),s=!1,i=[],a=[],c=0,l=[],u=o(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),a.push(...d.skipped_hashes),await(0,ck.asyncSetTimeout)(Tne),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%Sne===0&&await u();return l.length>0&&await u(),s?sk(i,a,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Ig.default)(t,"hashes");if(r)throw r;return nk(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of nk(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&yA[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,Ig.default)(t,"value");if(n)throw n;let s=Ki(t);if(!s)throw new fi.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===JE.BETWEEN&&(i=[i,t.end_value]);let a=i==="*"?[]:[{attribute:t.attribute,value:i,comparator:r}];return s.search({conditions:a,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:rw(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Ki(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){Ki({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Ki(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Ki(t),n={};switch(t.search_type){case XE.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let a=i.operation??i.type;return a==="put"&&(a="upsert"),{operation:a,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case XE.USERNAME:{let s=t.search_values;for await(let i of ik(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return ik(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};o(rw,"getSelect");o(nk,"getRecords");o(Ki,"getTable");o(sk,"createDeleteResponse");o(ik,"groupRecordsInHistory")});var os=M((KLe,fk)=>{"use strict";var{ResourceBridge:yne}=(dk(),D(uk)),Rne=ue();Rne.initSync();var wg;function Ane(){return wg||(wg=new yne,wg)}o(Ane,"getBridge");fk.exports=Ane()});var mi=M((WLe,hk)=>{var bne=$i(),{promisify:Ine}=require("util"),{getDatabases:pk}=(Oe(),D(mt));hk.exports={setSchemaDataToGlobal:mk,getTableSchema:wne,getSystemSchema:Nne,setSchemaDataToGlobalAsync:Ine(mk)};function mk(e){global.hdb_schema=pk(),e&&e()}o(mk,"setSchemaDataToGlobal");function wne(e,t,r){let n=pk()[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`)}o(wne,"getTableSchema");function Nne(){return bne}o(Nne,"getSystemSchema")});var Bn=M((jLe,Sk)=>{"use strict";var Cg=tI(),Qr=oe(),Cne=require("util"),Og=os(),One=mi(),Ek=Q(),{handleHDBError:pl,hdbErrors:Pne}=_e(),{HTTP_STATUS_CODES:hl}=Pne,Lne=Cne.promisify(One.getTableSchema),Dne="updated",_k="inserted",gk="upserted";Sk.exports={insert:vne,update:Une,upsert:xne,validation:Mne,flush:Bne};async function Mne(e){if(Qr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Qr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Qr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Lne(e.schema,e.table),r=Cg(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={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(c=>{if(a&&Qr.isEmptyOrZeroLength(c[n]))throw Ek.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(!Qr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw Ek.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Qr.isEmpty(c[n])&&c[n]!==""&&s.has(Qr.autoCast(c[n]))&&(c.skip=!0),s.add(Qr.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)}}o(Mne,"validation");async function vne(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Cg(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Og.createRecords(e);return Ng(_k,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}o(vne,"insertData");async function Une(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Cg(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Og.updateRecords(e);return Qr.isEmpty(n.existing_rows)?Ng(Dne,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Ng(n.update_action,[],e,n.hashes,void 0,n.txn_time)}o(Une,"updateData");async function xne(e){if(e.operation!=="upsert")throw pl(new Error,"invalid operation, must be upsert",hl.INTERNAL_SERVER_ERROR);let t=Cg(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Og.upsertRecords(e);return Ng(gk,n.written_hashes,e,[],n.new_attributes,n.txn_time)}o(xne,"upsertData");function Ng(e,t,r,n,s,i){let a={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===_k?(a.inserted_hashes=t,a.skipped_hashes=n,a):e===gk?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=n,a)}o(Ng,"returnObject");function Bne(e){return Qr.transformReq(e),Og.flush(e.schema,e.table)}o(Bne,"flush")});var iw=M((JLe,Rk)=>{var Fne=ft(),sw=require("joi"),{hdbTable:kne,hdbDatabase:Tk}=qi(),yk={schema:Tk,database:Tk,table:kne},Hne={date:sw.date().iso().required()},qne={timestamp:sw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Rk.exports=function(e,t){let r=t==="timestamp"?{...yk,...qne}:{...yk,...Hne},n=sw.object(r);return Fne.validateBySchema(e,n)}});var Ik=M((XLe,bk)=>{var Gne=ft(),ow=require("joi"),{hdbTable:$ne,hdbDatabase:Ak}=qi(),Vne=ow.object({schema:Ak,database:Ak,table:$ne,hash_values:ow.array().required(),ids:ow.array()});bk.exports=function(e){return Gne.validateBySchema(e,Vne)}});var uw=M((ZLe,wk)=>{"use strict";var aw=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},cw=class{static{o(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,a){this.schema=t,this.table=r,this.attribute=n,this.hash_attribute=s,this.get_attributes=i,this.value=a}},lw=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};wk.exports={InsertObject:aw,NoSQLSeachObject:cw,DeleteResponseObject:lw}});var gl=M((tDe,Lk)=>{"use strict";var Ck=iw(),Kne=Ik(),El=oe(),Nk=require("moment"),Ok=Q(),{promisify:Yne,callbackify:Wne}=require("util"),_l=(H(),D(W)),zne=mi(),dw=Yne(zne.getTableSchema),fw=os(),{DeleteResponseObject:jne}=uw(),{handleHDBError:Ga,hdbErrors:Qne}=_e(),{HDB_ERROR_MSGS:Pg,HTTP_STATUS_CODES:$a}=Qne,Jne="records successfully deleted",Xne=Wne(Pk);Lk.exports={delete:Xne,deleteRecord:Pk,deleteFilesBefore:Zne,deleteAuditLogsBefore:ese};async function Zne(e){let t=Ck(e,"date");if(t)throw Ga(t,t.message,$a.BAD_REQUEST,void 0,void 0,!0);if(El.transformReq(e),!Nk(e.date,Nk.ISO_8601).isValid())throw Ga(new Error,Pg.INVALID_DATE,$a.BAD_REQUEST,_l.LOG_LEVELS.ERROR,Pg.INVALID_DATE,!0);let n=El.checkSchemaTableExist(e.schema,e.table);if(n)throw Ga(new Error,n,$a.NOT_FOUND,_l.LOG_LEVELS.ERROR,n,!0);let s=await fw.deleteRecordsBefore(e);if(await dw(e.schema,e.table),Ok.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}o(Zne,"deleteFilesBefore");async function ese(e){let t=Ck(e,"timestamp");if(t)throw Ga(t,t.message,$a.BAD_REQUEST,void 0,void 0,!0);if(El.transformReq(e),isNaN(e.timestamp))throw Ga(new Error,Pg.INVALID_VALUE("Timestamp"),$a.BAD_REQUEST,_l.LOG_LEVELS.ERROR,Pg.INVALID_VALUE("Timestamp"),!0);let r=El.checkSchemaTableExist(e.schema,e.table);if(r)throw Ga(new Error,r,$a.NOT_FOUND,_l.LOG_LEVELS.ERROR,r,!0);let n=await fw.deleteAuditLogsBefore(e);return await dw(e.schema,e.table),Ok.info(`Finished deleting audit logs before ${e.timestamp}`),n}o(ese,"deleteAuditLogsBefore");async function Pk(e){e.ids&&(e.hash_values=e.ids);let t=Kne(e);if(t)throw Ga(t,t.message,$a.BAD_REQUEST,void 0,void 0,!0);El.transformReq(e);let r=El.checkSchemaTableExist(e.schema,e.table);if(r)throw Ga(new Error,r,$a.NOT_FOUND,_l.LOG_LEVELS.ERROR,r,!0);try{await dw(e.schema,e.table);let n=await fw.deleteRecords(e);return El.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Jne}`),n}catch(n){if(n.message===_l.SEARCH_NOT_FOUND_MESSAGE){let s=new jne;return s.message=_l.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}o(Pk,"deleteRecord")});var _w={};Ie(_w,{HASH_FUNCTION:()=>kr,hash:()=>hw,validate:()=>Ew});function mw(e=lp){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(cp.randomBytes(e)).map(r=>t[r%t.length]).join("")}function hw(e,t=kr[Mk?.toUpperCase()]??kr.SHA256){return pw[t](e)}function Ew(e,t,r=kr[Mk?.toUpperCase()]??kr.SHA256){return e?tse[r](e,t):!1}var cp,ed,Dk,Mk,lp,vk,kr,pw,tse,gw=ie(()=>{cp=w(require("node:crypto")),ed=w(require("argon2")),Dk=w(ue());H();Mk=(0,Dk.get)(B.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),lp=16,vk=9,kr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};o(mw,"generateSalt");pw={[kr.MD5]:(e,t=void 0)=>{t=t??mw(vk);let r=cp.createHash(kr.MD5).update(e+t).digest("hex");return t+r},[kr.SHA256]:(e,t=void 0)=>{t=t??mw(lp);let r=cp.createHash(kr.SHA256).update(e+t).digest("hex");return t+r},[kr.ARGON2ID]:async e=>{let t=mw(lp),r=await ed.hash(e,{type:ed.argon2id,salt:Buffer.from(t)});return t+r}},tse={[kr.MD5]:(e,t)=>{let r=e.slice(0,vk);return e===pw[kr.MD5](t,r)},[kr.SHA256]:(e,t)=>{let r=e.slice(0,lp);return e===pw[kr.SHA256](t,r)},[kr.ARGON2ID]:async(e,t)=>await ed.verify(e.slice(lp),t)};o(hw,"hash");o(Ew,"validate")});var xk=M((iDe,Uk)=>{var Sw=ft(),dn={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 rse(e){return dn.password.presence=!0,dn.username.presence=!0,dn.role.presence=!0,dn.active.presence=!0,Sw.validateObject(e,dn)}o(rse,"addUserValidation");function nse(e){return dn.password.presence=!1,dn.username.presence=!0,dn.role.presence=!1,dn.active.presence=!1,Sw.validateObject(e,dn)}o(nse,"alterUserValidation");function sse(e){return dn.password.presence=!1,dn.username.presence=!0,dn.role.presence=!1,dn.active.presence=!1,Sw.validateObject(e,dn)}o(sse,"dropUserValidation");Uk.exports={addUserValidation:rse,alterUserValidation:nse,dropUserValidation:sse}});var jk=M((cDe,zk)=>{"use strict";var Tw=require("recursive-iterator"),ise=require("alasql"),yw=require("clone"),Bk=oe(),{handleHDBError:Fk,hdbErrors:ose}=_e(),{HDB_ERROR_MSGS:kk,HTTP_STATUS_CODES:Hk}=ose,{getDatabases:ase}=(Oe(),D(mt)),cse=["DISTINCT_ARRAY"],qk=Symbol("validateTables"),Rw=Symbol("validateTable"),aDe=Symbol("getAllColumns"),Gk=Symbol("validateAllColumns"),Lg=Symbol("findColumn"),$k=Symbol("validateOrderBy"),up=Symbol("validateSegment"),Aw=Symbol("validateColumn"),Vk=Symbol("setColumnsForTable"),Kk=Symbol("checkColumnsForAsterisk"),Yk=Symbol("validateGroupBy"),Wk=Symbol("hasColumns"),bw=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[qk](),this[Kk](),this[Gk]()}[qk](){if(this[Wk]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Rw](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Rw](t.table)})}}[Wk](){let t=!1,r=new Tw(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Rw](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=ase();if(!r[t.databaseid])throw Fk(new Error,kk.SCHEMA_NOT_FOUND(t.databaseid),Hk.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Fk(new Error,kk.TABLE_NOT_FOUND(t.databaseid,t.tableid),Hk.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=yw(s);i.table=yw(t),this.attributes.push(i)})}[Lg](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)}[Kk](){let t=new Tw(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[Vk](r.tableid)}[Vk](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new ise.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Gk](){this[up](this.statement.columns,!1),this[up](this.statement.joins,!1),this[up](this.statement.where,!1),this[Yk](this.statement.group,!1),this[up](this.statement.order,!0)}[up](t,r){if(!t)return;let n=new Tw(t),s=[];for(let{node:i,path:a}of n)!Bk.isEmpty(i)&&!Bk.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[$k](i):s.push(this[Aw](i)));return s}[Yk](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&cse.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=yw(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Lg](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,a)=>{if(i.toString()===n.toString()){s=i,r.splice(a,1);return}});else{let i=this[Lg](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((a,c)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){s=a,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`}[$k](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[Aw](t)}[Aw](t){let r=this[Lg](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]}};zk.exports=bw});var Zk=M((uDe,Xk)=>{"use strict";var Qk=require("lodash"),dp=require("mathjs"),lse=require("jsonata"),Jk=oe();Xk.exports={distinct_array:o(e=>Array.isArray(e)&&e.length>1?Qk.uniqWith(e,Qk.isEqual):e,"distinct_array"),searchJSON:use,mad:fp.bind(null,dp.mad),mean:fp.bind(null,dp.mean),mode:fp.bind(null,dp.mode),prod:fp.bind(null,dp.prod),median:fp.bind(null,dp.median)};function fp(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}o(fp,"aggregateFunction");function use(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(Jk.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Jk.isEmpty(this.__ala__.res[r])){let n=lse(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}o(use,"searchJSON")});var tH=M((fDe,eH)=>{"use strict";var dr=require("moment"),Iw="YYYY-MM-DDTHH:mm:ss.SSSZZ";dr.suppressDeprecationWarnings=!0;eH.exports={current_date:o(()=>dr().utc().format("YYYY-MM-DD"),"current_date"),current_time:o(()=>dr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:o((e,t)=>{switch(t.toLowerCase()){case"year":return dr(e).utc().format("YYYY");case"month":return dr(e).utc().format("MM");case"day":return dr(e).utc().format("DD");case"hour":return dr(e).utc().format("HH");case"minute":return dr(e).utc().format("mm");case"second":return dr(e).utc().format("ss");case"millisecond":return dr(e).utc().format("SSS");default:break}},"extract"),date:o(e=>dr(e).utc().format(Iw),"date"),date_format:o((e,t)=>dr(e).utc().format(t),"date_format"),date_add:o((e,t,r)=>dr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:o((e,t,r)=>dr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:o((e,t,r)=>{let n=dr(e).utc(),s=dr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:o(()=>dr().utc().valueOf(),"now"),get_server_time:o(()=>dr().format(Iw),"get_server_time"),offset_utc:o((e,t)=>dr(e).utc().utcOffset(t).format(Iw),"offset_utc")}});var iH=M((pDe,sH)=>{"use strict";var dse=require("@turf/area"),fse=require("@turf/length"),mse=require("@turf/circle"),pse=require("@turf/difference"),hse=require("@turf/distance"),Ese=require("@turf/boolean-contains"),_se=require("@turf/boolean-equal"),gse=require("@turf/boolean-disjoint"),Sse=require("@turf/helpers"),rH=(H(),D(W)),ze=oe(),Go=Q();sH.exports={geoArea:Tse,geoLength:yse,geoCircle:Rse,geoDifference:Ase,geoDistance:nH,geoNear:bse,geoContains:Ise,geoEqual:wse,geoCrosses:Nse,geoConvert:Cse};function Tse(e){if(ze.isEmpty(e))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return dse.default(e)}catch(t){return Go.trace(t,e),NaN}}o(Tse,"geoArea");function yse(e,t){if(ze.isEmpty(e))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return fse.default(e,{units:t||"kilometers"})}catch(r){return Go.trace(r,e),NaN}}o(yse,"geoLength");function Rse(e,t,r){if(ze.isEmpty(e))return NaN;if(ze.isEmpty(t))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return mse.default(e,t,{units:r||"kilometers"})}catch(n){return Go.trace(n,e,t),NaN}}o(Rse,"geoCircle");function Ase(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 pse(e,t)}catch(r){return Go.trace(r,e,t),NaN}}o(Ase,"geoDifference");function nH(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 hse.default(e,t,{units:r||"kilometers"})}catch(n){return Go.trace(n,e,t),NaN}}o(nH,"geoDistance");function bse(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 nH(e,t,n)<=r}catch(s){return Go.trace(s,e,t),!1}}o(bse,"geoNear");function Ise(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 Ese.default(e,t)}catch(r){return Go.trace(r,e,t),!1}}o(Ise,"geoContains");function wse(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 _se.default(e,t)}catch(r){return Go.trace(r,e,t),!1}}o(wse,"geoEqual");function Nse(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!gse.default(e,t)}catch(r){return Go.trace(r,e,t),!1}}o(Nse,"geoCrosses");function Cse(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(rH.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(rH.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=ze.autoCastJSON(e)),Sse[t](e,r)}o(Cse,"geoConvert")});var Dg=M((EDe,oH)=>{var Sl=Zk(),as=tH(),Yi=iH();oH.exports=e=>{e.aggr.mad=e.aggr.MAD=Sl.mad,e.aggr.mean=e.aggr.MEAN=Sl.mean,e.aggr.mode=e.aggr.MODE=Sl.mode,e.aggr.prod=e.aggr.PROD=Sl.prod,e.aggr.median=e.aggr.MEDIAN=Sl.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Sl.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Sl.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=as.current_date,e.fn.current_time=e.fn.CURRENT_TIME=as.current_time,e.fn.extract=e.fn.EXTRACT=as.extract,e.fn.date=e.fn.DATE=as.date,e.fn.date_format=e.fn.DATE_FORMAT=as.date_format,e.fn.date_add=e.fn.DATE_ADD=as.date_add,e.fn.date_sub=e.fn.DATE_SUB=as.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=as.date_diff,e.fn.now=e.fn.NOW=as.now,e.fn.offset_utc=e.fn.OFFSET_UTC=as.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=as.get_server_time,e.fn.getdate=e.fn.GETDATE=as.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=as.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Yi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Yi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Yi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Yi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Yi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Yi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Yi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Yi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Yi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Yi.geoNear}});var uH=M((_De,lH)=>{"use strict";var mp=require("lodash"),Fn=require("alasql");Fn.options.cache=!1;var Ose=Dg(),aH=require("clone"),Mg=require("recursive-iterator"),Ve=Q(),st=oe(),td=os(),Pse=(H(),D(W)),{hdbErrors:Lse}=_e(),{getDatabases:cH}=(Oe(),D(mt)),Dse="IS NULL",pi="There was a problem performing this search. Please check the logs and try again.";Ose(Fn);var ww=class{static{o(this,"SQLSearch")}constructor(t,r){if(st.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(),st.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!st.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(pi)}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(pi)}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(pi)}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(pi)}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(pi)}}_getColumns(){let t=new Mg(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(aH(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=mp.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=cH()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(st.isEmpty(this.statement.where)){Ve.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Mg(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!st.isEmpty(r)&&r.right)if(st.isNotEmptyAndHasValue(r.right.value)){let n=st.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Fn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=st.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Fn.yy.LogicValue({value:i}):n instanceof Fn.yy.StringValue&&st.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Fn.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 Mg(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 a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!st.isEmpty(Pse.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(st.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(st.isEmptyOrZeroLength(r.left.columnid)||st.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,value:r.right.value})}continue}if(st.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let c=!1;switch(r.op){case"=":!st.isEmpty(r.right.value)||!st.isEmpty(r.left.value)?n.add(st.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[a].ignore=c,c?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...n])}}}_setAliasesForColumns(){if(st.isEmptyOrZeroLength(this.all_table_attributes)&&st.isEmptyOrZeroLength(this.statement.from)&&st.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&mp.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(st.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);st.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(st.isEmptyOrZeroLength(this.all_table_attributes)&&!st.isEmptyOrZeroLength(this.columns.columns))return t;if(st.isEmptyOrZeroLength(this.all_table_attributes)&&st.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Fn.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(aH(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__mergedAttributes.push(r),this.data[t].__mergedAttrMap[r]=this.data[t].__mergedAttributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__mergedData[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__mergedAttrMap[n];this.data[t].__mergedData[r].splice(i,1,s)}async _getFetchAttributeValues(){if(st.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(Dse)>-1&&this.tables.forEach(s=>{let i={columnid:cH()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=mp.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 a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[a].__hashName;return s[a]||(s[a]=[],s[a].push(null),this._addColumnToMergedAttributes(a,c)),i.attribute!==c&&(s[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,a=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===a&&(l=!0),!st.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!st.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await td.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(pi)}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 td.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(pi)}else if(!st.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!st.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let f=0,m=d.length;f<m;f++){let p=d[f];c.attribute=p.attribute,c.value=p.value;let h=await td.getDataByValue(c,p.operation);if(l)for(let[E]of h)this.data[i].__mergedData[E]||(this.data[i].__mergedData[E]=[...n[i]],this._setMergedHashAttribute(i,E));else for(let[E,g]of h)this.data[i].__mergedData[E]?this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]):(this.data[i].__mergedData[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,E))}}catch(d){throw Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ve.error(d),new Error(pi)}else try{c.attribute=s.attribute,c.value="*";let d=await td.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(pi)}}}_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 Fn.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,a=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===a});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 Fn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Fn.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 Fn.yy.FuncValue:new Fn.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 a=[],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;a.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 Fn.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];a.forEach(g=>{E[g.key]!==null&&E[g.key]!==void 0&&g.keys.add(E[g.key])})}a.forEach(p=>{let h=Object.keys(this.data[`${p.schema}_${p.table}`].__mergedData),E=mp.difference(h,[...p.keys].map(g=>g.toString()));for(let g=0,A=E.length;g<A;g++){let S=E[g];delete this.data[`${p.schema}_${p.table}`].__mergedData[S]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Mg(this.columns);for(let{node:i}of s)if(i&&i.columnid){let a=this._findColumn(i);if(a){let c=a.table.as?a.table.as:a.table.tableid;(!t[c]||t[c].indexOf(a.attribute)<0)&&n.push(a)}}n=mp.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(pi)}}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,a=[];for(let d in i)a.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:a,get_attributes:s.columns},l=await td.getDataByHash(c),u=s.columns.length;for(let d=0,f=a.length;d<f;d++){let m=a[d],p=l.get(m);for(let h=0;h<u;h++){let E=s.columns[h],g=p[E]===void 0?null:p[E];this.data[n].__mergedData[m].push(g)}}}}catch(r){throw 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(a=>{let c=a.aggregatorid?a.expression:a,l=a.aggregatorid?a.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 Fn.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(Lse.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((a,c)=>{let l=s[i],u=new RegExp(`${l}.\`${a}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=new RegExp(`\`${a}\``,"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 a=await td.getDataByValue(i);for(let[c,l]of a)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(a){throw Ve.error("There was an error when processing this SQL operation. Check your logs"),Ve.error(a),new Error(pi)}}return Object.values(Object.values(this.data)[0].__mergedData)}};lH.exports=ww});var fn=M((SDe,dH)=>{"use strict";var Mse=jk();dH.exports={searchByConditions:Use,searchByHash:xse,searchByValue:Bse,search:Fse};var Nw=os(),{transformReq:Cw}=oe(),vse=uH();async function Use(e){return Cw(e),Nw.searchByConditions(e)}o(Use,"searchByConditions");async function xse(e){Cw(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Nw.searchByHash(e))r&&t.push(r);return t}o(xse,"searchByHash");async function Bse(e){Cw(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Nw.searchByValue(e))t.push(r);return t}o(Bse,"searchByValue");function Fse(e,t){try{let r=new Mse(e);r.validate(),new vse(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}o(Fse,"search")});var Wi=M((yDe,hH)=>{"use strict";var pp=require("crypto"),kse=ue(),{CONFIG_PARAMS:Hse}=(H(),D(W)),mH="aes-256-cbc",qse=32,Gse=16,Ow=64,pH=32,$se=Ow+pH,fH=new Map;hH.exports={encrypt:Vse,decrypt:Kse,createNatsTableStreamName:Yse};function Vse(e){let t=pp.randomBytes(qse),r=pp.randomBytes(Gse),n=pp.createCipheriv(mH,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),a=r.toString("hex"),c=s.toString("hex");return i+a+c}o(Vse,"encrypt");function Kse(e){let t=e.substr(0,Ow),r=e.substr(Ow,pH),n=e.substr($se,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),a=pp.createDecipheriv(mH,Buffer.from(t,"hex"),s),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(Kse,"decrypt");function Yse(e,t){let r=kse.get(Hse.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=fH.get(r);return n||(n=pp.createHash("md5").update(r).digest("hex"),fH.set(r,n)),n}o(Yse,"createNatsTableStreamName")});var wt=M((bDe,_H)=>{"use strict";var{platform:ADe}=require("os"),Wse="nats-server.zip",Pw="nats-server",zse=process.platform==="win32"?`${Pw}.exe`:Pw,jse=/^[^\s.,*>]+$/,EH="__request__",Qse=o(e=>`${e}.${EH}`,"REQUEST_SUBJECT"),Jse={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Xse={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Zse={HUB:"hub.pid",LEAF:"leaf.pid"},eie={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},tie={SUCCESS:"success",ERROR:"error"},rie={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},nie={TXN:"txn",MSGID:"msgid"},rd={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},sie={[rd.ERR]:1,[rd.WRN]:2,[rd.INF]:3,[rd.DBG]:4,[rd.TRC]:5},iie={debug:"-D",trace:"-DVV"};_H.exports={NATS_SERVER_ZIP:Wse,NATS_SERVER_NAME:Pw,NATS_BINARY_NAME:zse,PID_FILES:Zse,NATS_CONFIG_FILES:Xse,SERVER_SUFFIX:eie,NATS_TERM_CONSTRAINTS_RX:jse,REQUEST_SUFFIX:EH,UPDATE_REMOTE_RESPONSE_STATUSES:tie,CLUSTER_STATUS_STATUSES:rie,REQUEST_SUBJECT:Qse,SUBJECT_PREFIXES:nie,MSG_HEADERS:Jse,LOG_LEVELS:rd,LOG_LEVEL_FLAGS:iie,LOG_LEVEL_HIERARCHY:sie}});var kn=M((wDe,Hr)=>{"use strict";var TH="username is required",yH="nothing to update, must supply active, role or password to update",RH="password cannot be an empty string",AH="If role is specified, it cannot be empty.",bH="active must be true or false";Hr.exports.addUser=pie;Hr.exports.alterUser=hie;Hr.exports.dropUser=_ie;Hr.exports.getSuperUser=Rie;Hr.exports.userInfo=gie;Hr.exports.listUsers=Ug;Hr.exports.listUsersExternal=Sie;Hr.exports.setUsersWithRolesCache=Tl;Hr.exports.findAndValidateUser=kw;Hr.exports.getClusterUser=Aie;Hr.exports.getUsersWithRolesCache=yie;Hr.exports.USERNAME_REQUIRED=TH;Hr.exports.ALTERUSER_NOTHING_TO_UPDATE=yH;Hr.exports.EMPTY_PASSWORD=RH;Hr.exports.EMPTY_ROLE=AH;Hr.exports.ACTIVE_BOOLEAN=bH;var IH=Bn(),oie=gl(),hp=(gw(),D(_w)),wH=xk(),Ep=fn(),Uw=ko(),zi=oe(),NH=require("validate.js"),xw=Q(),{promisify:aie}=require("util"),Bw=Wi(),Dw=(H(),D(W)),gH=wt(),cie=yt(),lie=ue(),uie=$i(),{hdbErrors:die,ClientError:hi}=_e(),{HTTP_STATUS_CODES:$o,AUTHENTICATION_ERROR_MSGS:Lw,HDB_ERROR_MSGS:nd}=die,{UserEventMsg:Fw}=ns(),Mw=require("lodash"),{server:vg}=(xr(),D(rm)),fie=Q();vg.getUser=(e,t)=>kw(e,t,t!=null);vg.authenticateUser=(e,t)=>kw(e,t);var CH={username:!0,active:!0,role:!0,password:!0},SH=new Map,mie=aie(oie.delete),vw=lie.get(Dw.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??hp.HASH_FUNCTION.SHA256,ji;async function pie(e){let t=NH.cleanAttributes(e,CH),r=wH.addUserValidation(t);if(r)throw new hi(r.message);let n=await Ep.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new hi(nd.ROLE_NAME_NOT_FOUND(t.role),$o.NOT_FOUND);if(n.length>1)throw new hi(nd.DUP_ROLES_FOUND(t.role),$o.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=Bw.encrypt(t.password)),t.password=await hp.hash(t.password,vw),t.hash_function=vw,t.role=n[0].id;let s=await IH.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(xw.debug(s),await Tl(),s.skipped_hashes.length===1)throw new hi(nd.USER_ALREADY_EXISTS(t.username),$o.CONFLICT);return Uw.signalUserChange(new Fw(process.pid)),`${t.username} successfully added`}o(pie,"addUser");async function hie(e){let t=NH.cleanAttributes(e,CH);if(zi.isEmptyOrZeroLength(t.username))throw new Error(TH);if(zi.isEmptyOrZeroLength(t.password)&&zi.isEmptyOrZeroLength(t.role)&&zi.isEmptyOrZeroLength(t.active))throw new Error(yH);if(!zi.isEmpty(t.password)&&zi.isEmptyOrZeroLength(t.password.trim()))throw new Error(RH);if(!zi.isEmpty(t.active)&&!zi.isBoolean(t.active))throw new Error(bH);if(!zi.isEmpty(t.password)&&!zi.isEmptyOrZeroLength(t.password.trim())&&(Eie(t.username)&&(t.hash=Bw.encrypt(t.password)),t.password=await hp.hash(t.password,vw)),t.role==="")throw new Error(AH);if(t.role){let n=await Ep.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new hi(nd.ALTER_USER_ROLE_NOT_FOUND(t.role),$o.NOT_FOUND);if(n.length>1)throw new hi(nd.DUP_ROLES_FOUND(t.role),$o.CONFLICT);t.role=n[0].id}let r=await IH.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Tl(),Uw.signalUserChange(new Fw(process.pid)),r}o(hie,"alterUser");function Eie(e){let t=!1,r=ji.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(Eie,"isClusterUser");async function _ie(e){let t=wH.dropUserValidation(e);if(t)throw new hi(t.message);if(ji.get(e.username)===void 0)throw new hi(nd.USER_NOT_EXIST(e.username),$o.NOT_FOUND);let r=await mie({table:"hdb_user",schema:"system",hash_values:[e.username]});return xw.debug(r),await Tl(),Uw.signalUserChange(new Fw(process.pid)),`${e.username} successfully deleted`}o(_ie,"dropUser");async function gie(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=Mw.cloneDeep(e.hdb_user);let r=await Ep.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}o(gie,"userInfo");async function Sie(){let e=await Ug();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}o(Sie,"listUsersExternal");async function Ug(){let e=await Ep.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=Mw.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Ep.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=Mw.cloneDeep(s),s.role=t[s.role],Tie(s.role),n.set(s.username,s);return n}o(Ug,"listUsers");function Tie(e){if(!e){xw.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(uie)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}o(Tie,"appendSystemTablesToRole");async function Tl(e=void 0){e?ji=e:ji=await Ug()}o(Tl,"setUsersWithRolesCache");async function yie(){return ji||await Tl(),ji}o(yie,"getUsersWithRolesCache");async function kw(e,t,r=!0){ji||await Tl();let n=ji.get(e);if(!n){if(!r)return{username:e};throw new hi(Lw.GENERIC_AUTH_FAIL,$o.UNAUTHORIZED)}if(n&&!n.active)throw new hi(Lw.USER_INACTIVE,$o.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(SH.get(t)===n.password)return s;{let i=hp.validate(n.password,t,n.hash_function||hp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)SH.set(t,n.password);else throw new hi(Lw.GENERIC_AUTH_FAIL,$o.UNAUTHORIZED)}}return s}o(kw,"findAndValidateUser");async function Rie(){ji||await Tl();for(let[,e]of ji)if(e.role.role==="super_user")return e}o(Rie,"getSuperUser");async function Aie(){let e=await Ug(),t=cie.getConfigFromFile(Dw.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==Dw.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=Bw.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+gH.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+gH.SERVER_SUFFIX.ADMIN,r}o(Aie,"getClusterUser");var OH=[];vg.invalidateUser=function(e){for(let t of OH)try{t(e)}catch(r){fie.error("Error invalidating user",r)}};vg.onInvalidatedUser=function(e){OH.push(e)}});var Ge,sd=ie(()=>{Ge={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var id,Hw=ie(()=>{sd();id=class{static{o(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!==Ge.ERROR&&(this.error=void 0)}markHealthy(t){this.updateStatus(Ge.HEALTHY,t||"Component is healthy")}markError(t,r){this.status=Ge.ERROR,this.error=t,this.message=r||(typeof t=="string"?t:t.message),this.lastChecked=new Date}markWarning(t){this.updateStatus(Ge.WARNING,t)}markLoading(t){this.updateStatus(Ge.LOADING,t||"Component is loading")}isHealthy(){return this.status===Ge.HEALTHY}hasError(){return this.status===Ge.ERROR}isLoading(){return this.status===Ge.LOADING}hasWarning(){return this.status===Ge.WARNING}getSummary(){let t=this.status.toUpperCase(),r=this.message?`: ${this.message}`:"";return`${t}${r}`}}});var yl,Va,qw,od,Gw,ad,$w,xg=ie(()=>{yl=w(Kr()),Va=class extends Error{static{o(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=yl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},qw=class extends Va{static{o(this,"CrossThreadTimeoutError")}requestId;timeoutMs;collectedCount;constructor(t,r,n){super(`Component status collection timeout after ${r}ms. Collected ${n} responses for request ${t}.`,yl.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},od=class extends Va{static{o(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,yl.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},Gw=class extends Va{static{o(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,yl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},ad=class extends Va{static{o(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,yl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},$w=class extends Va{static{o(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,yl.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 PH,Rl,LH,Ka,_p,cd,bie,Bg,Vw=ie(()=>{PH=w(ns()),Rl=w(nt());H();LH=w(Zn());sd();xg();Ka=(0,LH.loggerWithTag)("componentStatus.crossThread"),_p=class{static{o(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,Rl.onMessageByType)(ZE.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;Ka.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&&(Ka.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 a=((0,Rl.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,g=o(()=>{let R=this.awaitingResponses.get(r);R&&R.length>=a&&!E&&(E=!0,S(),Ka.trace?.(`Collected all ${R.length} expected responses for request ${r}`),p(R))},"checkComplete"),A=setTimeout(()=>{if(!E){E=!0;let R=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),Ka.debug?.(`Collection timeout for request ${r}: collected ${R.length}/${a} responses`),p(R)}},this.timeout),S=o(()=>{this.awaitingResponses.delete(r),clearTimeout(A)},"cleanup");this.responseCheckers.set(r,g),(0,PH.sendItcEvent)({type:ZE.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{g()}).catch(R=>{E=!0,S(),this.responseCheckers.delete(r),h(new od("sendItcEvent",R))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,Rl.getWorkerIndex)(),m=f===void 0?"main":`worker-${f}`;for(let[p,h]of d)u.set(`${p}@${m}`,{...h,workerIndex:f});for(let p of l)for(let[h,E]of p.statuses){let g=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${g}`,{...E,workerIndex:p.workerIndex})}return Ka.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof od?Ka.error?.(`ITC failure during component status collection: ${r.message}`):Ka.warn?.("Failed to collect component status from all threads:",r),Ka.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,Rl.getWorkerIndex)(),i=s===void 0?"main":`worker-${s}`;for(let[a,c]of r)n.set(`${a}@${i}`,{...c,workerIndex:s});return n}cleanup(){this.awaitingResponses.clear(),this.responseCheckers.clear(),this.cleanupTimer&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null)}},cd=class{static{o(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let a=s.indexOf("@"),c=a!==-1?s.substring(0,a):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let a=this.aggregateComponentGroup(s,i);r.set(s,a)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,a,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",g=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=g;else if(E&&E.startsWith("worker-")){let A=parseInt(E.substring(7));isNaN(A)||(n.workers[A]=g)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==Ge.HEALTHY&&p.message&&(!i||g>s)&&(s=g,i=p.message),p.error&&!a&&(a=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:a};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[Ge.ERROR,Ge.WARNING,Ge.LOADING,Ge.UNKNOWN,Ge.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return Ge.UNKNOWN}},bie=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),Bg=new _p(bie)});var Ya,Fg=ie(()=>{Hw();sd();Vw();xg();Ya=class{static{o(this,"ComponentStatusRegistry")}statusMap=new Map;reset(){this.statusMap=new Map}setStatus(t,r,n,s){if(!t||typeof t!="string")throw new ad(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Ge).includes(r))throw new ad(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Ge).join(", ")}`);this.statusMap.set(t,new id(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,Ge.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,Ge.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,Ge.WARNING,r)}initializeLoading(t,r){this.setStatus(t,Ge.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,Ge.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,Ge.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={[Ge.HEALTHY]:0,[Ge.ERROR]:0,[Ge.WARNING]:0,[Ge.LOADING]:0,[Ge.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await Bg.collect(t);return cd.aggregate(r)}}});var fr,kg=ie(()=>{Fg();fr=new Ya});function MH(e){let t=DH.get(e);return t||(t=new Kw(e),DH.set(e,t)),t}function vH(){fr.reset()}var Kw,DH,Vo,UH,xH=ie(()=>{kg();sd();Kw=class{static{o(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return fr.setStatus(this.componentName,Ge.HEALTHY,t),this}warning(t){return fr.setStatus(this.componentName,Ge.WARNING,t),this}error(t,r){return fr.setStatus(this.componentName,Ge.ERROR,t,r),this}loading(t){return fr.setStatus(this.componentName,Ge.LOADING,t||"Loading..."),this}unknown(t){return fr.setStatus(this.componentName,Ge.UNKNOWN,t),this}get(){return fr.getStatus(this.componentName)}},DH=new Map;o(MH,"statusForComponent");Vo={loading(e,t){fr.initializeLoading(e,t)},loaded(e,t){fr.markLoaded(e,t)},failed(e,t,r){fr.markFailed(e,t,r)}};o(vH,"reset");UH=Ge});var gp={};Ie(gp,{AggregationError:()=>Gw,COMPONENT_STATUS_LEVELS:()=>Ge,ComponentStatus:()=>id,ComponentStatusError:()=>Va,ComponentStatusOperationError:()=>ad,ComponentStatusRegistry:()=>Ya,CrossThreadCollectionError:()=>$w,CrossThreadStatusCollector:()=>_p,CrossThreadTimeoutError:()=>qw,ITCError:()=>od,StatusAggregator:()=>cd,componentStatusRegistry:()=>fr,crossThreadCollector:()=>Bg,query:()=>Iie});var Iie,BH=ie(()=>{kg();Fg();Hw();Fg();Vw();kg();xg();sd();Iie={get(e){return fr.getStatus(e)},all(){return fr.getAllStatuses()},byStatus(e){return fr.getComponentsByStatus(e)},summary(){return fr.getStatusSummary()},async allThreads(){return Ya.getAggregatedFromAllThreads(fr)}}});var Yw={};Ie(Yw,{STATUS:()=>UH,internal:()=>gp,lifecycle:()=>Vo,reset:()=>vH,statusForComponent:()=>MH});var Sp=ie(()=>{xH();BH()});var yp=M((oMe,HH)=>{"use strict";var cs=Q(),mn=(H(),D(W)),wie=R0(),Nie=kn(),{validateEvent:Ww}=ns(),Tp=os(),Cie=require("process"),{resetDatabases:Oie}=(Oe(),D(mt)),Pie={[mn.ITC_EVENT_TYPES.SCHEMA]:Lie,[mn.ITC_EVENT_TYPES.USER]:kH,[mn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:Mie};async function Lie(e){let t=Ww(e);if(t){cs.error(t);return}cs.trace("ITC schemaHandler received schema event:",e),await wie(e.message),await Die(e.message)}o(Lie,"schemaHandler");async function Die(e){try{Tp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Tp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Tp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=Oie();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){cs.error(t)}}o(Die,"syncSchemaMetadata");var FH=[];async function kH(e){try{try{Tp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Tp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){cs.warn(r)}let t=Ww(e);if(t){cs.error(t);return}cs.trace(`ITC userHandler ${mn.HDB_ITC_CLIENT_PREFIX}${Cie.pid} received user event:`,e),await Nie.setUsersWithRolesCache();for(let r of FH)r()}catch(t){cs.error(t)}}o(kH,"userHandler");kH.addListener=function(e){FH.push(e)};async function Mie(e){try{let t=Ww(e);if(t){cs.error(t);return}cs.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Sp(),D(Yw)),{getWorkerIndex:n}=nt(),{sendItcEvent:s}=ns(),i=r.componentStatusRegistry.getAllStatuses(),a=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:mn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:a,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?cs.trace(`Sent component status response directly to thread ${u}`):(u===void 0?cs.debug("No originator threadId, falling back to broadcast"):cs.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){cs.error("Error handling component status request:",t)}}o(Mie,"componentStatusRequestHandler");HH.exports=Pie});var ns=M((fMe,GH)=>{"use strict";var cMe=Q(),zw=oe(),vie=(H(),D(W)),{ITC_ERRORS:Rp}=Kr(),{parentPort:lMe,threadId:Uie,isMainThread:xie,workerData:uMe}=require("worker_threads"),{onMessageFromWorkers:Bie,broadcast:dMe,broadcastWithAcknowledgement:Fie}=nt();GH.exports={sendItcEvent:kie,validateEvent:qH,SchemaEventMsg:Hie,UserEventMsg:qie};var Hg;Bie(async(e,t)=>{Hg=Hg||yp(),qH(e),Hg[e.type]&&await Hg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function kie(e){return!xie&&e.message&&(e.message.originator=Uie),Fie(e)}o(kie,"sendItcEvent");function qH(e){if(typeof e!="object")return Rp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||zw.isEmpty(e.type))return Rp.MISSING_TYPE;if(!e.hasOwnProperty("message")||zw.isEmpty(e.message))return Rp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||zw.isEmpty(e.message.originator))return Rp.MISSING_ORIGIN;if(vie.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Rp.INVALID_EVENT(e.type)}o(qH,"validateEvent");function Hie(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}o(Hie,"SchemaEventMsg");function qie(e){this.originator=e}o(qie,"UserEventMsg")});var ko=M((hMe,YH)=>{"use strict";var $H=(H(),D(W)),pMe=oe(),qg=Q(),VH=s0(),ld,{sendItcEvent:KH}=ns();function Gie(e){try{qg.debug("signalSchemaChange called with message:",e),ld=ld||yp();let t=new VH($H.ITC_EVENT_TYPES.SCHEMA,e);return ld.schema(t),KH(t)}catch(t){qg.error(t)}}o(Gie,"signalSchemaChange");function $ie(e){try{qg.trace("signalUserChange called with message:",e),ld=ld||yp();let t=new VH($H.ITC_EVENT_TYPES.USER,e);return ld.user(t),KH(t)}catch(t){qg.error(t)}}o($ie,"signalUserChange");YH.exports={signalSchemaChange:Gie,signalUserChange:$ie}});function Ap(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 WH(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Us(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 Us,bp=ie(()=>{Us=class extends Map{static{o(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 a=i[1];if(n)r=(typeof a=="string"?a:a.join(", "))+", "+r;else if(typeof a=="string")r=[a,r];else{a.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};o(Ap,"appendHeader");o(WH,"mergeHeaders")});function Gg(e,t,r=Kie){let n;return function(...i){return n?n.length*jw>r?t(...i):new Promise((a,c)=>{n.push({args:i,fn(){try{let l=e(...i);a(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,a){setImmediate(()=>{let c=performance.now();jw=(jw*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var QH,Vie,Kie,zH,Yie,Qw,jH,jw,Jw=ie(()=>{QH=w(Zn()),Vie=3e3,Kie=2e4,zH=0,Yie=3e4,Qw=3e3,jH=performance.now()+Qw,jw=0;o(Gg,"throttle");setInterval(()=>{let e=performance.now();e-jH-Qw>Vie&&zH+Yie<e&&(QH.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"),zH=e),jH=e},Qw).unref()});var aq={};Ie(aq,{EVICTED:()=>va,INVALIDATED:()=>Dn,coerceType:()=>Vg,makeTable:()=>Yg});function Yg(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:a,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:p}=e,{expirationMS:h,evictionMS:E,audit:g,trackDeletes:A}=e;E??=0;let{attributes:S}=e;S||(S=[]);let R=Mb(i,n,l),N,O,F={},te=Promise.resolve(),q,k,J;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(q=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(k=K),K.expiresAt&&(J=K),K.isPrimaryKey&&(F=K);let Y,le=[],ae=[],re=1,Re=2,Te={},Fe={},qe=864e5,Rr=0,Zt,Ht,er,qf=!1,Mc,qt,Gf,$f=bl.get(B.REPLICATION_DATABASES);if(Array.isArray($f)){for(let K of $f)if(K.name===c&&K.replicateTo>=0){Gf=K.replicateTo;break}}let qE=i.getRange({start:!1,end:!1}).constructor,GE=10,aA=6;g&&Tu(),Nm(i.env.path,K=>{if(O)return xc(K)});class Vf extends ml{static{o(this,"Updatable")}getUpdatedTime(){return Da.get(this.getRecord())?.version}getExpiresAt(){return Da.get(this.getRecord())?.expiresAt}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.set(_,new op(T));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(_,T){return this.addTo(_,-T)}}class Le extends Fr{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=a;static databaseName=c;static attributes=S;static replicate=p;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=q;static updatedTimeProperty=k;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(_,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)_.intermediateSource=!0,this.sources.unshift(_);else{if(this.sources.some(I=>!I.intermediateSource)){if(this.sources.some(I=>I.name===_.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(_)}O=O||_.get&&(!_.get.reliesOnPrototype||_.prototype.get),N=N||_.load;let C=o(I=>{let v=this.sources;if(v=v.filter(U=>U.intermediateSource&&U[I]&&(!U[I].reliesOnPrototype||U.prototype[I])),v.length>0)if(v.length===1){let U=v[0];return(L,x,G)=>{if(L?.source!==U)return U[I](x,G,L)}}else return(U,L,x)=>{let G=[];for(let j of v){if(U?.source===j)break;G.push(j[I](L,x,U))}return Promise.all(G)}},"getApplyToIntermediateSource"),y=this.sources[this.sources.length-1];y.intermediateSource&&(y={});let b=o(I=>{if(y[I]&&(!y[I].reliesOnPrototype||y.prototype[I]))return(v,U,L)=>{if(!v?.source)return y[I](U,L,v)}},"getApplyToCanonicalSource");Te={put:b("put"),patch:b("patch"),delete:b("delete"),publish:b("publish")},Fe={put:C("put"),patch:C("patch"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")};let P=y.shouldRevalidateEvents;return(async()=>{let I=!1,v,U=o(async(L,x)=>{let G=L.value,j=L.table?Me[c][L.table]:Le;if(c===Xf&&(L.table===Ru.ROLE_TABLE_NAME||L.table===Ru.USER_TABLE_NAME)&&(I=!0),L.id===void 0&&(L.id=G[j.primaryKey],L.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(L));L.source=_;let X={residencyId:yo(L.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:L.nodeId,async:!0},$=L.id,be=await j.getResource($,x,X);switch(L.finished&&await L.finished,L.type){case"put":return P?be._writeInvalidate($,G,X):be._writeUpdate($,G,!0,X);case"patch":return P?be._writeInvalidate($,G,X):be._writeUpdate($,G,!1,X);case"delete":return be._writeDelete($,X);case"publish":case"message":return be._writePublish($,G,X);case"invalidate":return be._writeInvalidate($,G,X);case"relocate":return be._writeRelocate($,X);default:xe.default.error?.("Unknown operation",L.type,L.id)}},"writeUpdate");try{let L=_.subscribe;L&&A==null&&(A=!0);let x={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},G=_.subscribeOnThisThread?_.subscribeOnThisThread((0,Al.getWorkerIndex)(),x):(0,Al.getWorkerIndex)()===0,j=L&&G&&await _.subscribe?.(x);if(j){let X;for await(let $ of j)try{if(!($.type==="transaction"?$.writes[0]:$)){xe.default.error?.("Bad subscription event",$);continue}if($.source=_,$.type==="end_txn"){if(X?.resolve(),$.localTime&&v!==$.localTime){if($.remoteNodeIds?.length>0){let de=[Symbol.for("seq"),$.remoteNodeIds[0]],z=d.get(de),ne=z?.nodes;ne||(ne=[]);for(let Ee of $.remoteNodeIds.slice(1)){let fe=ne.find(De=>De.id===Ee);ne=ne.filter(De=>De.id!==Ee||De===fe),fe||(fe={id:Ee,seqId:0},ne.push(fe)),fe.seqId=Math.max(z?.seqId??1,$.localTime),Ee===X?.nodeId&&(fe.lastTxnTime=$.timestamp)}let me=Math.max(z?.seqId??1,$.localTime);xe.default.trace?.("Received txn",c,me,new Date(me),$.localTime,new Date($.localTime),$.remoteNodeIds),d.put(de,{seqId:me,nodes:ne})}v=$.localTime}$.onCommit&&X?.committed.then($.onCommit);continue}if(X)if($.beginTxn)X.resolve();else{X.write_promises.push(U($,X));continue}!$.timestamp&&$.version&&($.timestamp=$.version);let pe=At($,()=>{if($.type==="transaction"){let de=[];for(let z of $.writes)try{de.push(U(z,$))}catch(ne){throw ne.message+=" writing "+JSON.stringify(z)+" of event "+JSON.stringify($),ne}return Promise.all(de)}else if($.type==="define_schema"){let de=this.attributes.slice(0),z=!1;for(let ne of $.attributes)de.find(me=>me.name===ne.name)||(de.push(ne),z=!0);z&&(Xe({table:s,database:c,attributes:de,origin:"cluster"}),wp.signalSchemaChange(new Np.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return $.beginTxn?(X=$,X.write_promises=[U($,$)],new Promise(de=>{X.resolve=()=>de(Promise.all(X.write_promises))})):U($,$)});X&&(X.committed=pe),I&&pe&&!pe?.waitingForUserChange&&(pe.then(()=>wp.signalUserChange(new Np.UserEventMsg(process.pid))),pe.waitingForUserChange=!0),$.onCommit&&(pe?pe.then($.onCommit):$.onCommit())}catch(be){xe.default.error?.("error in subscription handler",be)}}}catch(L){xe.default.error?.(L)}})(),this}static get isCaching(){return O}static get shouldRevalidateEvents(){return this.prototype.get!==Le.prototype.get}static getResource(_,T,C){let y=super.getResource(_,T,C);if(this.loadAsInstance===!1&&(T._freezeRecords=!0),_!=null&&this.loadAsInstance!==!1){Mr(_);try{if(y.getRecord?.())return y;if(typeof _=="object"&&_&&!Array.isArray(_))throw new Error(`Invalid id ${JSON.stringify(_)}`);let b=!C?.async||i.cache?.get?.(_),P=br(T),I=P.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return vc(_,T,{transaction:I,ensureLoaded:C?.ensureLoaded},b,v=>{if(v?Le._updateResource(y,v):y.#e=null,T.onlyIfCached){if(!y.doesExist())throw new lt.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let U=Ra(_,v,T,y);if(U)return P?.disregardReadTxn(),y.#i=!0,T.loadedFromSource=!0,xs(U,L=>(Le._updateResource(y,L),y))}return y})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(_)),b}}return y}static _updateResource(_,T){_.#n=T,_.#e=T?.value??null,_.#r=T?.version}ensureLoaded(){let _=Ra(this.getId(),this.#n,this.getContext());if(_)return this.#i=!0,this.getContext().loadedFromSource=!0,xs(_,T=>{this.#n=T,this.#e=T.value,this.#r=T.version})}static getNewId(){let _=F?.type;if(_==="String"||_==="ID")return super.getNewId();if(!qt){let b=i.getEntry(Symbol.for("id_allocation")),P=b?.value,I;if(P&&P.nodeName===server.hostname&&(!soe(i)||P.pid===process.pid)){let v=P.start,U=P.end;I=v;for(let L of i.getKeys({start:U,end:v,limit:1,reverse:!0}))I=L}else P=y(b?.version??null),I=P.start;qt=new BigInt64Array([BigInt(I)+1n]),qt=new BigInt64Array(i.getUserSharedBuffer("id",qt.buffer)),qt.maxSafeId=P.end}let T=Number(Atomics.add(qt,0,1n)),C=_==="Int"?512:1048576;if(T+C>=qt.maxSafeId){let b=o(P=>{qt.maxSafeId=T+(_==="Int"?1023:4194303);let I=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,v=P?void 0:i.useReadTransaction(),U=Number(qt[0]);for(let G of i.getKeys({start:U+1,end:I,limit:1,transaction:v}))I=G;v?.done();let{value:L,version:x}=i.getEntry(Symbol.for("id_allocation"));if(qt.maxSafeId<I){if(L.end>qt.maxSafeId-100)return;xe.default.info?.("New id allocation",T,qt.maxSafeId,x),i.put(Symbol.for("id_allocation"),{start:L.start,end:qt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),x)}else{xe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${qt.maxSafeId}, but id of ${I} detected`);let G=y(x);G.alreadyUpdated||Atomics.store(qt,0,BigInt(G.start+1)),qt.maxSafeId=G.end}},"updateEnd");T+C===qt.maxSafeId?setImmediate(b):T+100>=qt.maxSafeId&&(xe.default.warn?.(`Synchronous id allocation required on table ${s}${_=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>b(!0)))}return T;function y(b){let P=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,I=P/4,v,U,L=!1,x,G;do{x=Math.floor(Math.random()*P),G={start:x,end:x+(_==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},v=0;for(let j of i.getKeys({start:x,limit:1,reverse:!0}))v=j;U=P;for(let j of i.getKeys({start:x+1,end:P,limit:1}))U=j;I*=.875,I<1e3&&!L&&(L=!0,xe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${_==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,x,v,U,I))}while(!(I<U-x&&(I<x-v||v===0)));return i.transactionSync(()=>{let j=i.getEntry(Symbol.for("id_allocation"));return(j?.version??null)==b?(xe.default.info?.("Allocated new id range",G),i.put(Symbol.for("id_allocation"),G,Date.now()),G):(xe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...j.value})})}}static setTTLExpiration(_){if(typeof _=="number")h=_*1e3,E||(E=0);else if(_&&typeof _=="object")h=_.expiration*1e3,E=(_.eviction||0)*1e3,qe=_.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");qe=qe||(h+E)/4,xc()}static getResidencyRecord(_){return d.get([Symbol.for("residency_by_id"),_])}static setResidency(_){Le.getResidency=_&&((T,C)=>{try{return _(T,C)}catch(y){throw y.message+=` in residency function for table ${s}`,y}})}static setResidencyById(_){Le.getResidencyById=_&&(T=>{try{return _(T)}catch(C){throw C.message+=` in residency function for table ${s}`,C}})}static getResidency(_,T){if(Le.getResidencyById)return Le.getResidencyById(_[t]);let C=Gf;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 y=[server.hostname];if(T.previousResidency)y.push(...T.previousResidency.slice(0,C));else{let b=server.nodes.map(v=>v.name),P=Math.floor(b.length*Math.random());y.push(...b.slice(P,P+C));let I=P+C-b.length;I>0&&y.push(...b.slice(0,I))}return y}}static enableAuditing(_=!0){g=_,_&&Tu(),Le.audit=_}static coerceId(_){return _===""?null:Vg(_,F)}static async dropTable(){delete Me[c][s];for(let _ of i.getRange({versions:!0,snapshot:!1,lazy:!0}))_.metadataFlags&Ln&&_.value&&Oa(_.value);if(c===a){for(let _ of S)d.remove(Le.tableName+"/"+_.name),r[_.name]?.drop();d.remove(Le.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),Zw.default.unlinkSync(i.env.path);wp.signalSchemaChange(new Np.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(_){let T=this.constructor;if(typeof _=="string"&&T.loadAsInstance!==!1)return this.getProperty(_);if(Yf(_))return this.search(_);if(_&&_.id===void 0&&!_.toString()){let C={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?Le.getRecordCount().then(y=>(C.recordCount=y.recordCount,C.estimatedRecordRange=y.estimatedRange,C)):C}if(_!==void 0&&T.loadAsInstance===!1){let C=this.getContext(),y=br(C),b=y.getReadTxn();if(b?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let P=Ar(_);Mr(P);let I=!0;return _.checkPermission&&(I=this.allowRead(C.user,_)),xs(xs(I,v=>{if(!v)throw new lt.AccessViolation(C.user);let U=!0;return vc(P,C,{transaction:b,ensureLoaded:U},!1,L=>{if(C.onlyIfCached){if(!L?.value)throw new lt.ServerError("Entry is not cached",504)}else if(U){let x=Ra(P,L,C);if(x)return y?.disregardReadTxn(),C.loadedFromSource=!0,x.then(G=>G?.value)}return L?.value})}),v=>{let U=_?.select;return U&&v!=null?Gu(U,this.constructor)(v):v})}if(_?.property)return this.getProperty(_.property);if(this.doesExist()||_?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(_,T){let C=Vr(_,T);if(C?.read){if(C.isSuperUser)return!0;let y=C.attribute_permissions,b=T?.select;if(y?.length>0||qf&&b){if(T||(T={}),b){let P=y?.length>0&&Xw(y,"read");T.select=b.map(I=>{let v=I.name||I;if(!P||P[v]){let U=er[v]?.definition?.tableClass;if(U){if(I.name||(I={name:I}),!I.checkPermission&&T.checkPermission&&(I.checkPermission=T.checkPermission),!U.prototype.allowRead.call(null,_,I))return!1;if(!I.select)return I.name}return I}}).filter(Boolean)}else T.select=y.filter(P=>P.read&&!er[P.attribute_name]).map(P=>P.attribute_name);return T}else return!0}}allowUpdate(_,T,C){let y=Vr(_,C);if(y?.update){let b=y.attribute_permissions;if(b?.length>0){let P=Xw(b,"update");for(let I in T)if(!P[I])return!1;for(let I of b){let v=I.attribute_name;!I.update&&!(v in T)&&(T[v]=this.getProperty(v))}}return Uc(this.getContext())}}allowCreate(_,T,C){if(this.isCollection){let y=Vr(_,C);if(y?.insert){let b=y.attribute_permissions;if(b?.length>0){let P=Xw(b,"insert");for(let I in T)if(!P[I])return!1;return Uc(this.getContext())}else return Uc(this.getContext())}}else return this.allowUpdate(_,{})}allowDelete(_,T){return Vr(_,T)?.delete&&Uc(this.getContext())}update(_,T){let C,y=typeof T=="boolean"||T===void 0&&(_==null||typeof _=="object"&&!(_ instanceof URLSearchParams)),b=!1;y?(b=T,T=_,C=this.getId()):C=Ar(_);let P=this.getContext();if(!br(P))throw new Error("Can not update a table resource outside of a transaction");if(T===!1)return this;if(typeof T=="object"&&T)if(b)Object.isFrozen(T)&&(T={...T}),this.#e={},this.#t=T;else if(y){let v=this.#t;v&&(T=Object.assign(v,T)),this.#t=T}else{let v=!0;if(_==null)throw new TypeError("Can not put a record without a target");return _.checkPermission&&(v=this.allowUpdate(P.user,T,_)),xs(v,U=>{if(!U)throw new lt.AccessViolation(P.user);return xs(i.get(Ar(_)),L=>{let x=new Vf(L);return x._setChanges(T),this._writeUpdate(C,x.getChanges(),!1),x})})}return this._writeUpdate(C,this.#t,b),this}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.#s===XH?this.set(_,(+this.getProperty(_)||0)+T):(this.#s||this.update(),this.set(_,new op(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(_,T){if(typeof T=="number")return this.addTo(_,-T);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(_){this.#t=_}setRecord(_){this.#e=_}invalidate(_){let T=!0,C=this.getContext();return _?.checkPermission&&(T=this.allowDelete(C.user,_,C)),xs(T,y=>{if(!y)throw new lt.AccessViolation(C.user);this._writeInvalidate(_?Ar(_):this.getId())})}_writeInvalidate(_,T,C){let y=this.getContext();Mr(_),br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Te.invalidate?.bind(this,y,_),beforeIntermediate:Fe.invalidate?.bind(this,y,_),commit:o((P,I)=>{if(!(Aa(P,I,C?.nodeId)<=0)){T??=null;for(let v in r)T||(T={}),T[v]===void 0&&(T[v]=this.getProperty(v));xe.default.trace?.(`Invalidating entry in ${s} id: ${_}, timestamp: ${new Date(P).toISOString()}`),R(_,T,I,P,Dn,g,{user:y?.user,residencyId:C?.residencyId,nodeId:C?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(_,T){let C=this.getContext();Mr(_),br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Te.relocate?.bind(this,C,_),beforeIntermediate:Fe.relocate?.bind(this,C,_),commit:o((b,P)=>{if(Aa(b,P,T?.nodeId)<=0)return;let I=Le.getResidencyRecord(T.residencyId),v=0,U=null,L=P?.value;if(I&&!I.includes(server.hostname)){for(let x in r)U||(U={}),U[x]=L[x];v=Dn}else U=L;xe.default.trace?.(`Relocating entry id: ${_}, timestamp: ${new Date(b).toISOString()}`),R(_,U,P,b,v,g,{user:C.user,residencyId:T.residencyId,nodeId:T.nodeId,expiresAt:T.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(_,T){let C={previousResidency:this.getResidencyRecord(_.residencyId),isRelocation:!0},y=Bc(this.getResidency(T.value,C)),b;if(y){if(!y.includes(server.hostname))return!1;b=yo(y)}let P=0;xe.default.debug?.("Performing a relocate of an entry",existing_entry.key,T.value,y);let I=R(_.key,T.value,_,_.version,P,!0,{residencyId:b,expiresAt:T.expiresAt},"relocate",!1,null);return!0}static evict(_,T,C){let y=this.Source,b;if(!((O||g)&&(!T||(b=i.getEntry(_),!b||!T)||b.version!==C))){if(O){if(i.hasLock(_,b.version))return;let P;for(let I in r)P||(P={}),P[I]=T[I];if(P)return R(_,P,b,C,va,null,null,null,!0)}if(i.ifVersion(_,C,()=>{To(_,T,null)}),g)return R(_,null,b,C,va,null,null,null,!0);nl(i,b??i.getEntry(_),C)}}lock(){throw new Error("Not yet implemented")}static operation(_,T){return _.table||=s,_.schema||=c,global.operation(_,T)}put(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!0);else{let C=!0;if(_==null)throw new TypeError("Can not put a record without a target");let y=this.getContext();return _.checkPermission&&(C=this.allowUpdate(y.user,T,_)),xs(C,b=>{if(!b)throw new lt.AccessViolation(y.user);if(Array.isArray(T))for(let P of T){let I=P[t];this._writeUpdate(I,P,!0)}else{let P=Ar(_);this._writeUpdate(P,T,!0)}})}}create(_,T){let C=!0,y=this.getContext();if(!T&&!(_ instanceof URLSearchParams)&&(T=_,_=void 0),!T||typeof T!="object"||Array.isArray(T))throw new TypeError("Can not create a record without an object");return _?.checkPermission&&(C=this.allowCreate(y.user,T,_)),xs(C,b=>{if(!b)throw new lt.AccessViolation(y.user);let P=Ar(_)??T[t];if(P===void 0)P=this.constructor.getNewId();else if(i.get(P))throw new lt.ClientError("Record already exists",409);return this._writeUpdate(P,T,!0),T})}patch(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!1);else{let C=this.update(_,T);if(C?.then)return C.then(()=>{})}}_writeUpdate(_,T,C,y){let b=this.getContext(),P=br(b);Mr(_);let I=this.#n??i.getEntry(_);this.#s=C?XH:eoe;let v={key:_,store:i,entry:I,nodeName:b?.nodeName,validate:o(U=>{T||(T=this.#t),C||T&&Rg(this.#t===T?this:T)?b?.source||(P.checkOverloaded(),this.validate(T,!C),k&&(T[k.name]=k.type==="Date"?new Date(U):k.type==="String"?new Date(U).toISOString():U),C&&(t&&T[t]!==_&&(T[t]=_),q&&(I?.value?T[q.name]=I?.value[q.name]:T[q.name]=q.type==="Date"?new Date(U):q.type==="String"?new Date(U).toISOString():U),T=qa(T))):P.removeWrite(v)},"validate"),before:C?Te.put?()=>Te.put(b,_,T):null:Te.patch?()=>Te.patch(b,_,T):Te.put?()=>Te.put(b,_,qa(this)):null,beforeIntermediate:C?Fe.put?()=>Fe.put(b,_,T):null:Fe.patch?()=>Fe.patch(b,_,T):Fe.put?()=>Fe.put(b,_,qa(this)):null,commit:o((U,L,x)=>{if(x){if(b&&L?.version>(b.lastModified||0)&&(b.lastModified=L.version),this.#n=L,L?.value&&L.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");C||(this.#e=L?.value??null)}this.#t=void 0,this.#r=U;let G=L?.value,j;this.#s=0;let X=!1,$=Aa(U,L,y?.nodeId),be;if($<=0){if(g){let me=L.localTime,Ee=L.version;xe.default.trace?.("Applying CRDT update to record with id: ",_,"txn time",new Date(U),"applying later update from:",new Date(Ee),"local recorded time",new Date(me));let fe=[];for(;me>U||Ee>=U&&me>0;){let De=l.get(me);if(!De)break;let ve=xt(De);if(Ee=ve.version,Ee>=U){if(Ee===U){if($=Aa(U,{version:Ee,localTime:me},y?.nodeId),$===0)return;if($>0)continue}if(ve.type==="patch")fe.push(ve),be=T;else if(ve.type==="put"||ve.type==="delete")return}me=ve.previousLocalTime}me||xe.default.debug?.("No further audit history, applying incremental updates based on available history",_,"existing version preserved",L),fe.sort((De,ve)=>De.version-ve.version);for(let De of fe){let ve=De.getValue(i);if(xe.default.debug?.("Rebuilding update with future patch:",new Date(De.version),ve,De),j=E_(j??T,ve,C),!j)return}}else{if(C)return;j=E_(j??T,G,C),xe.default.debug?.("Rebuilding update without audit:",j)}xe.default.trace?.("Rebuilt record to save:",j," is full update:",C)}let pe;if(C&&!j?pe=T:this.constructor.loadAsInstance===!1?pe=qa(G,j??T):(this.#e=G,pe=qa(this,j??T)),this.#e=pe,pe&&pe.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let de;if(y?.residencyId!=null)de=y.residencyId;else{I?.residencyId&&(b.previousResidency=Le.getResidencyRecord(I.residencyId));let me=Bc(Le.getResidency(pe,b));if(me&&!me.includes(server.hostname))if(be??=pe,X=!0,Le.getResidencyById)pe=void 0;else{pe=null;for(let Ee in r)pe||(pe={}),pe[Ee]=be[Ee]}de=yo(me)}C||(be=T);let z=b?.expiresAt??(h?h+Date.now():-1);xe.default.trace?.(`Saving record with id: ${_}, timestamp: ${new Date(U).toISOString()}${z?", expires at: "+new Date(z).toISOString():""}${L?", replaces entry from: "+new Date(L.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(pe).slice(0,100)}catch{return""}})()),To(_,G,pe);let ne=C?"put":"patch";R(_,pe,L,U,X?Dn:0,g,{omitLocalRecord:X,user:b?.user,residencyId:de,expiresAt:z,nodeId:y?.nodeId,originatingOperation:b?.originatingOperation,tableToTrack:c==="system"?null:s},ne,!1,be),b.expiresAt&&xc()},"commit")};P.addWrite(v)}async delete(_){if(Yf(_)){_.select=["$id"];for await(let T of this.search(_))this._writeDelete(T.$id);return!0}if(_){let T=!0,C=this.getContext();return _.checkPermission&&(T=this.allowDelete(C.user,_,C)),xs(T,y=>{if(!y)throw new lt.AccessViolation(C.user);let b=Ar(_);return this._writeDelete(b),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(_,T){let C=br(this.getContext());Mr(_);let y=this.getContext();return C.addWrite({key:_,store:i,entry:this.#n,nodeName:y?.nodeName,before:Te.delete?.bind(this,y,_),beforeIntermediate:Fe.delete?.bind(this,y,_),commit:o((b,P,I)=>{let v=P?.value;I&&(y&&P?.version>(y.lastModified||0)&&(y.lastModified=P.version),Le._updateResource(this,P)),!(Aa(b,P,T?.nodeId)<=0)&&(To(this.getId(),v),xe.default.trace?.(`Deleting record with id: ${_}, txn timestamp: ${new Date(b).toISOString()}`),g||A?(R(_,null,P,b,0,g,{user:y?.user,nodeId:T?.nodeId,tableToTrack:s},"delete"),g||xc()):nl(i,P))},"commit")}),!0}search(_){let T=this.getContext(),C=br(T);if(!_)throw new Error("No query provided");if(_.parseError)throw _.parseError;if(_.checkPermission&&!this.allowRead(T.user,_))throw new lt.AccessViolation(T.user);T&&(T.lastModified=Qie);let y=_.conditions;y?y.length===void 0&&(y=y[Symbol.iterator]?Array.from(y):[y]):y=Array.isArray(_)?_:_[Symbol.iterator]?Array.from(_):[];let b=_.id??this.getId();b&&(y=[{attribute:null,comparator:Array.isArray(b)?"prefix":"starts_with",value:b}].concat(y));let P,I={};function v(ne,me){let Ee;switch(me){case"and":case void 0:if(ne.length<1)throw new Error('An "and" operator requires at least one condition');Ee=!0;break;case"or":if(ne.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+me)}for(let fe of ne){if(fe.conditions){fe.conditions=v(fe.conditions,fe.operator);continue}let De=fe[0]??fe.attribute,ve=De==null?F:ki(S,De);if(ve)(ve.type||Ub[fe.comparator])&&(fe[1]===void 0?fe.value=L(fe.value,ve):fe[1]=L(fe[1],ve));else if(De!=null)throw(0,lt.handleHDBError)(new Error,`${De} is not a defined attribute`,404);if(fe.chainedConditions)if(fe.chainedConditions.length===1&&(!fe.operator||fe.operator=="and")){let $e=fe.chainedConditions[0],vr,zn;if($e.comparator==="gt"||$e.comparator==="greater_than"||$e.comparator==="ge"||$e.comparator==="greater_than_equal"?(vr=fe,zn=$e):(vr=$e,zn=fe),vr.comparator!=="lt"&&vr.comparator!=="less_than"&&vr.comparator!=="le"&&vr.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let vi=zn.comparator==="ge"||zn.comparator==="greater_than_equal",Ne=vr.comparator==="le"||vr.comparator==="less_than_equal";fe.comparator=(vi?"ge":"gt")+(Ne?"le":"lt"),fe.value=[zn.value,vr.value]}else throw new Error("Multiple chained conditions are not currently supported")}return ne}o(v,"prepareConditions");function U(ne,me){if(_.enforceExecutionOrder)return ne;for(let Ee of ne)Ee.conditions&&(Ee.conditions=U(Ee.conditions,Ee.operator));return ne.length>1&&me!=="or"?Wie(ne,J_(Le)):ne}o(U,"orderConditions");function L(ne,me){return Array.isArray(ne)?ne.map(Ee=>Vg(Ee,me)):Vg(ne,me)}o(L,"coerceTypedValues");let x=_.operator;(y.length>0||x)&&(y=v(y,x));let G=typeof _.sort=="object"&&_.sort,j;if(G&&x!=="or"){let ne=G.attribute;if(ne==null)throw new lt.ClientError("Sort requires an attribute");if(P=y.find(me=>ku(me.attribute)===ku(ne)),!P){let me=ki(S,ne);if(!me)throw(0,lt.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not a defined attribute`,404);if(me.indexed)P={...G,comparator:"sort"},y.push(P);else if(y.length===0&&!_.allowFullScan)throw(0,lt.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not indexed and not combined with any other conditions`,404)}P&&(P.descending=!!G.descending)}y=U(y,x),G&&(P&&y[0]===P?G.next&&(j={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(P&&y.splice(y.indexOf(P),1),j=G));let X=_.select;if(y.length===0&&(y=[{attribute:t,comparator:"greater_than",value:!0}]),_.explain)return{conditions:y,operator:x,postOrdering:j,selectApplied:!!X};let $=C.useReadTxn(),be=xb(y,x,Le,$,_,T,(ne,me)=>Wf(ne,X,T,$,me),I),pe=_.ensureLoaded!==!1,de=Le.transformEntryForSelect(X,T,$,I,pe,!0),z=Le.transformToOrderedSelect(be,X,j,T,$,de);return(_.offset||_.limit!==void 0)&&(z=z.slice(_.offset,_.limit!==void 0?(_.offset||0)+_.limit:void 0)),z.onDone=()=>{z.onDone=null,C.doneReadTxn()},z.selectApplied=!0,z.getColumns=()=>{if(X){let ne=[];for(let me of X)me==="*"?ne.push(...S.map(Ee=>Ee.name)):ne.push(me.name||me);return ne}return S.filter(ne=>!ne.computed&&!ne.relationship).map(ne=>ne.name)},z}static transformToOrderedSelect(_,T,C,y,b,P){let I=new qE;if(C){_=Wf(_,T,y,b,null);let v;I.iterate=function(){let L,x=_[Symbol.asyncIterator]?_[Symbol.asyncIterator]():_[Symbol.iterator](),G,j=C.dbOrderedAttribute,X,$,be=!0;function pe(z){let ne=z.next&&pe(z.next),me=z.descending;return y.sort=z,(Ee,fe)=>{let De=gu(Ee,z.attribute,y),ve=gu(fe,z.attribute,y),$e=me?(0,Il.compareKeys)(ve,De):(0,Il.compareKeys)(De,ve);return $e===0?ne?.(Ee,fe)||0:$e}}o(pe,"createComparator");let de=pe(C);return{async next(){let z;if(L)if(z=L.next(),z.done){if(G)return I.onDone&&I.onDone(),z}else return{value:await P.call(this,z.value)};v=[],X&&v.push(X);do if(z=await x.next(),z.done){if(G=!0,v.length)break;return I.onDone&&I.onDone(),z}else{let ne=z.value;if(ne?.then&&(ne=await ne),j){let me=gu(ne,j,y);if(be)be=!1,$=me;else if(me!==$){$=me,X=ne;break}}v.push(ne)}while(!0);return C.isGrouped,v.sort(de),L=v[Symbol.iterator](),z=L.next(),z.done?(I.onDone&&I.onDone(),z):{value:await P.call(this,z.value)}},return(){return I.onDone&&I.onDone(),x.return()},throw(){return I.onDone&&I.onDone(),x.throw()}}};let U=o(L=>{if(typeof T=="object"&&Array.isArray(L.attribute))for(let x=0;x<T.length;x++){let G=T[x],j;if(G.name===L.attribute[0]){for(j=G.sort||(G.sort={});j.next;)j=j.next;j.attribute=L.attribute.slice(1),j.descending=L.descending}else G===L.attribute[0]&&(T[x]=j={name:G,sort:{attribute:L.attribute.slice(1),descending:L.descending}})}L.next&&U(L.next)},"applySortingOnSelect");U(C)}else I.iterate=(_[Symbol.asyncIterator]||_[Symbol.iterator]).bind(_),I=I.map(function(v){try{let U=P.call(this,v);return typeof U?.catch=="function"?U.catch(L=>{throw L.partialObject={[t]:v.key},L}):U}catch(U){throw U.partialObject={[t]:v.key},U}});return I}static transformEntryForSelect(_,T,C,y,b,P){let I;b&&O&&!(typeof _=="string"?[_]:_)?.every(L=>{let x;return typeof L=="object"?x=L.name:x=L,r[x]||x===t})&&(I=!0);let v,U=o(function(L){let x;if(T?.transaction?.stale&&(T.transaction.stale=!1),L!=null){if(x=L.deref?L.deref():L.value,!x&&(L.key===void 0||L.deref)||L.metadataFlags&Dn){if(L.metadataFlags&Dn&&T.replicateFrom===!1&&P&&L.residencyId)return za.SKIP;if(L=vc(L.key??L,T,{transaction:C,lazy:_?.length<4,ensureLoaded:b},this?.isSync,G=>G),L?.then)return L.then(U.bind(this));x=L?.value}if(I&&L?.metadataFlags&(Dn|va)||L?.expiresAt!=null&&L?.expiresAt<Date.now()){if(T.onlyIfCached)return{[t]:L.key,message:"This entry has expired"};let G=Ra(L.key??L,L,T);if(G?.then)return G.then(U)}}if(x==null)return P?za.SKIP:x;if(_&&!(_[0]==="*"&&_.length===1)){let G,j=o(($,be)=>{let pe;typeof $=="object"?pe=$.name:pe=$;let de=er?.[pe],z;if(de){let ne=y?.[pe];if(ne)if(ne.hasMappings){let Ee=de.from?x[de.from]:ku(L.key);z=ne.get(Ee),z||(z=[])}else z=ne.fromRecord?.(x);else z=de(x,T,L,!0);let me=o(Ee=>{if(de.directReturn)return be(Ee,pe);if(Ee&&typeof Ee=="object"){let fe=de.definition?.tableClass||Le;v||(v={});let De=v[pe]||(v[pe]=fe.transformEntryForSelect(pe===$?null:$.select||(Array.isArray($)?$:null),T,C,ne,b));if(Array.isArray(Ee)){let ve=[],$e=fe.transformToOrderedSelect(Ee,$.select,typeof $.sort=="object"&&$.sort,T,C,De)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),vr=o(vi=>{for(;!vi.done;){if(vi?.then)return vi.then(vr);ve.push(vi.value),vi=$e.next()}be(ve,pe)},"nextValue"),zn=vr($e.next());zn&&(G||(G=[]),G.push(zn));return}else if(Ee=De.call(this,Ee),Ee?.then){G||(G=[]),G.push(Ee.then(ve=>be(ve,pe)));return}}be(Ee,pe)},"handleResolvedValue");z?.then?(G||(G=[]),G.push(z.then(me))):me(z);return}else z=x[pe],z&&typeof z=="object"&&pe!==$&&(z=Le.transformEntryForSelect($.select||$,T,C,null)({value:z}));be(z,pe)},"selectAttribute"),X;if(typeof _=="string")j(_,$=>{X=$});else if(Array.isArray(_))if(_.asArray)X=[],_.forEach(($,be)=>{$==="*"?_[be]=x:j($,pe=>X[be]=pe)});else{X={};let $=_.forceNulls;for(let be of _)if(be==="*")for(let pe in x)X[pe]=x[pe];else j(be,(pe,de)=>{pe===void 0&&$&&(pe=null),X[de]=pe})}else throw new lt.ClientError("Invalid select"+_);return G?Promise.all(G).then(()=>X):X}return x},"transform");return U}async subscribe(_){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||Xe({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),_||(_={});let T=!_.rawEvents,C=[],y=$b(Le,this.getId()??null,function(I,v,U,L){try{let x=v.getValue?.(i,T),G=v.type;if(!x&&G==="patch"&&T){let X=i.getEntry(I);X?.version===v.version?x=X.value:x=v.getValue?.(i,!0,U),G="put"}let j={id:I,localTime:U,value:x,version:v.version,type:G,beginTxn:L};C?C.push(j):(Je(v.size??1,"db-message",s,null),this.send(j))}catch(x){xe.default.error?.(x)}},_.startTime||0,_),b=(async()=>{this.isCollection&&(y.includeDescendants=!0,_.onlyChildren&&(y.onlyChildren=!0)),_.supportsTransactions&&(y.supportsTransactions=!0);let I=this.getId(),v=_.previousCount;v>1e3&&(v=1e3);let U=_.startTime;if(this.isCollection){if(U){if(v)throw new lt.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:L,value:x}of l.getRange({start:U,exclusiveStart:!0,snapshot:!1})){let G=xt(x);if(G.tableId!==n)continue;let j=G.recordId;if(I==null||rq(I,j)){let X=G.getValue(i,T,L);if(P({id:j,localTime:L,value:X,version:G.version,type:G.type,size:G.size}),y.queue?.length>eq&&await y.waitForDrain()===!1)return}y.startTime=L}}else if(v){let L=[];for(let{key:x,value:G}of l.getRange({start:"z",end:!1,reverse:!0}))try{let j=xt(G);if(j.tableId!==n)continue;let X=j.recordId;if(I==null||rq(I,X)){let $=j.getValue(i,T,x);if(L.push({id:X,localTime:x,value:$,version:j.version,type:j.type}),--v<=0)break}}catch(j){xe.default.error("Error getting history entry",x,j)}for(let x=L.length;x>0;)P(L[--x]);L[0]&&(y.startTime=L[0].localTime)}else if(!_.omitCurrent){for(let{key:L,value:x,version:G,localTime:j,size:X}of i.getRange({start:I??!1,end:I==null?void 0:[I,Il.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(x&&(P({id:L,localTime:j,value:x,version:G,type:"put",size:X}),y.queue?.length>eq&&await y.waitForDrain()===!1))return}}else{v&&!U&&(U=0);let L=this.#n?.localTime;if(L===Db&&(i.cache?.delete(I),this.#n=i.getEntry(I),xe.default.trace?.("re-retrieved record",L,this.#n?.localTime),L=this.#n?.localTime),xe.default.trace?.("Subscription from",U,"from",I,L),U<L){let x=[],G=L;do{let j=l.get(G);if(j){_.omitCurrent=!0;let X=xt(j),$=X.getValue(i,T,G);T&&(X.type="put"),x.push({id:I,value:$,localTime:G,...X}),G=X.previousLocalTime}else break;v&&v--}while(G>U&&v!==0);for(let j=x.length;j>0;)P(x[--j]);y.startTime=L}!_.omitCurrent&&this.doesExist()&&P({id:I,localTime:L,value:this.#e,version:this.#r,type:"put"})}for(let L of C)P(L);C=null})();function P(I){Je(I.size??1,"db-message",s,null),y.send(I)}return o(P,"send"),_.listener&&y.on("data",_.listener),y}static subscribeOnThisThread(_,T){return _===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(_,T,C){if(T===void 0||T instanceof URLSearchParams)this._writePublish(this.getId(),_,T);else{let y=!0,b=this.getContext();return _.checkPermission&&(y=this.allowCreate(b.user,_,b)),xs(y,P=>{if(!P)throw new lt.AccessViolation(b.user);let I=Ar(_);this._writePublish(I,T,C)})}}_writePublish(_,T,C){let y=br(this.getContext());_??=null,_!==null&&Mr(_);let b=this.getContext();y.addWrite({key:_,store:i,entry:this.#n,nodeName:b?.nodeName,validate:o(()=>{b?.source||(y.checkOverloaded(),this.validate(T))},"validate"),before:Te.publish?.bind(this,b,_,T),beforeIntermediate:Fe.publish?.bind(this,b,_,T),commit:o((P,I,v)=>{I===void 0&&A&&!g&&xc(),xe.default.trace?.(`Publishing message to id: ${_}, timestamp: ${new Date(P).toISOString()}`),R(_,I?.value??null,I,I?.version||P,0,!0,{user:b?.user,residencyId:C?.residencyId,expiresAt:b?.expiresAt,nodeId:C?.nodeId,tableToTrack:s},"message",!1,T)},"commit")})}validate(_,T){let C,y=o((b,P,I)=>{if(P.type&&b!=null)if(T&&b.__op__&&(b=b.value),P.properties){typeof b!="object"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an object${P.type?" ("+P.type+")":""}`);let v=P.properties;for(let U=0,L=v.length;U<L;U++){let x=v[U];if(x.relationship||x.computed){_.hasOwnProperty(x.name)&&(C||(C=[])).push(`Computed property ${I}.${x.name} may not be directly assigned a value`);continue}let G=y(b[x.name],x,I+"."+x.name);G&&(b[x.name]=G)}if(P.sealed&&b!=null&&typeof b=="object")for(let U in b)v.find(L=>L.name===U)||(C||(C=[])).push(`Property ${U} is not allowed within object in property ${I}`)}else switch(P.type){case"Int":(typeof b!="number"||b>>0!==b)&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof b!="number"||!(Math.floor(b)===b&&Math.abs(b)<=9007199254740992))&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(v=>typeof v=="string")||(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a string`);break;case"Boolean":typeof b!="boolean"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a boolean`);break;case"Date":if(!(b instanceof Date)){if(typeof b=="string"||typeof b=="number")return new Date(b);(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a Date`)}break;case"BigInt":if(typeof b!="bigint"){if(typeof b=="string"||typeof b=="number")return BigInt(b);(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a bigint`)}break;case"Bytes":if(!(b instanceof Uint8Array)){if(typeof b=="string")return Buffer.from(b);(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(b instanceof ws)){if(typeof b=="string"&&(b=Buffer.from(b)),b instanceof Buffer)return createBlob(b,{type:"text/plain"});(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a Blob`)}break;case"array":if(Array.isArray(b)){if(P.elements)for(let v=0,U=b.length;v<U;v++){let L=b[v],x=y(L,P.elements,I+"[*]");x&&(b[v]=x)}}else(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an Array`);break}P.nullable===!1&&b==null&&(C||(C=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let b=0,P=S.length;b<P;b++){let I=S[b];if(I.relationship||I.computed){Object.hasOwn(_,I.name)&&(C||(C=[])).push(`Computed property ${I.name} may not be directly assigned a value`);continue}if(!T||I.name in _){let v=y(_[I.name],I,I.name);v!==void 0&&(_[I.name]=v)}}if(f)for(let b in _)S.find(P=>P.name===b)||(C||(C=[])).push(`Property ${b} is not allowed`);if(C)throw new lt.ClientError(C.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return O?!!this.#i:void 0}static async addAttributes(_){let T=S.slice(0);for(let C of _){if(!C.name)throw new lt.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new lt.ClientError("Attribute names cannot include backticks or forward slashes");zie(C.name),T.push(C)}return Xe({table:s,database:c,schemaDefined:u,attributes:T}),Le.indexingOperation}static async removeAttributes(_){let T=S.filter(C=>!_.includes(C.name));return Xe({table:s,database:c,schemaDefined:u,attributes:T}),Le.indexingOperation}static getSize(){let _=i.getStats();return(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getAuditSize(){let _=l?.getStats();return _&&(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getStorageStats(){let _=i.env.path,T=Zw.default.statfsSync?.(_)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(_){let T=i.getStats().entryCount,C=1e3/2,y=performance.now(),b=Math.floor(T/2),P=_?.exactCount,I=0,v=0,U;for(let{value:L}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(L!=null&&I++,v++,await Wa(),!P&&v<b&&performance.now()-y>C){U=v;break}if(U){let L=I;I=0;for(let{value:z}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:U,snapshot:!1}))z!=null&&I++,await Wa();let x=U*2,G=(I+L)/x,j=Math.pow((I-L+1)/U/2,2)+G*(1-G)/x,X=Math.max(Math.sqrt(j)*T,1),$=Math.round(G*T),be=Math.max($-1.96*X,I+L),pe=Math.min($+1.96*X,T),de=Math.pow(10,Math.round(Math.log10(X)));return de>$&&(de=de/10),I=Math.round($/de)*de,{recordCount:I,estimatedRange:[Math.round(be),Math.round(pe)]}}return{recordCount:I}}static updatedAttributes(){er=this.propertyResolvers={$id:o((_,T,C)=>({value:C.key}),"$id"),$updatedtime:o((_,T,C)=>C.version,"$updatedtime"),$updatedTime:o((_,T,C)=>C.version,"$updatedTime"),$expiresAt:o((_,T,C)=>C.expiresAt,"$expiresAt"),$record:o((_,T,C)=>C?{value:_}:_,"$record"),$distance:o((_,T,C)=>C&&(C.distance??T?.vectorDistances?.get(C)),"$distance")};for(let _ of this.attributes){_.isPrimaryKey&&(F=_),_.resolve=null;let T=_.relationship,C=_.computed;if(T)if(_.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),C&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),qf=!0,T.to)_.elements?.definition?(er[_.name]=_.resolve=(y,b,P,I)=>{let v=y[T.from?T.from:t],U=_.elements.definition.tableClass;return I?Fu({attribute:T.to,value:v},br(b).getReadTxn(),!1,U,!1).map(L=>L&&L.key!==void 0?L:U.primaryStore.getEntry(L,{transaction:br(b).getReadTxn()})).asArray:U.search([{attribute:T.to,value:v}],b).asArray},_.set=()=>{},_.resolve.definition=_.elements.definition,_.resolve.to=T.to,T.from&&(_.resolve.from=T.from)):console.error(`The one-to-many/many-to-many relationship property "${_.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(T.from){let y=_.definition||_.elements?.definition;y?(er[_.name]=_.resolve=(b,P,I,v)=>{let U=b[T.from];if(U===void 0)return;if(_.elements){let x,G=U?.map(j=>{let X=y.tableClass.primaryStore[v?"getEntry":"get"](j,{transaction:br(P).getReadTxn()});return X?.then&&(x=!0),Le.loadAsInstance===!1&&Object.freeze(v?X?.value:X),X});return T.filterMissing?x?Promise.all(G).then(j=>j.filter(nq)):G.filter(nq):x?Promise.all(G):G}let L=y.tableClass.primaryStore[v?"getEntry":"get"](U,{transaction:br(P).getReadTxn()});return Le.loadAsInstance===!1&&Object.freeze(v?L?.value:L),L},_.set=(b,P)=>{if(Array.isArray(P)){let I=P.map(v=>v.getId?.()||v[y.tableClass.primaryKey]);b[T.from]=I}else{let I=P.getId?.()||P[y.tableClass.primaryKey];b[T.from]=I}},_.resolve.definition=_.definition||_.elements?.definition,_.resolve.from=T.from):console.error(`The relationship property "${_.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${_.name}" in table "${s}" must use either "from" or "to" arguments`);else if(C)typeof C.from=="function"&&this.setComputedAttribute(_.name,C.from),er[_.name]=_.resolve=(y,b,P)=>{let I=typeof C.from=="string"?y[C.from]:y,v=this.userResolvers[_.name];if(v)return v(I,b,P);xe.default.warn(`Computed attribute "${_.name}" does not have a function assigned to it. Please use setComputedAttribute('${_.name}', resolver) to assign a resolver function.`),this.userResolvers[_.name]=()=>{}},_.resolve.directReturn=!0;else if(r[_.name]?.customIndex?.propertyResolver){let y=r[_.name].customIndex;er[_.name]=(b,P,I)=>{let v=b[_.name];return y.propertyResolver(v,P,I)},er[_.name].directReturn=!0}}ap(this,this),ap(Vf,this,!0);for(let _ of S){let T=_.name;_.resolve&&Object.defineProperty(i.encoder.structPrototype,T,{get(){return _.resolve(this,qu.getStore())},set(C){return _.set(this,C)},configurable:!0})}}static setComputedAttribute(_,T){let C=ki(S,_);if(!C){console.error(`The attribute "${_}" does not exist in the table "${s}"`);return}if(!C.computed){console.error(`The attribute "${_}" is not defined as computed in the table "${s}"`);return}this.userResolvers[_]=T}static async deleteHistory(_=0,T=!1){let C;for(let{key:y,value:b}of l.getRange({start:0,end:_}))await Wa(),xt(b).tableId===n&&(C=F_(l,y,b));if(T)for(let y of i.getRange({start:0,versions:!0})){let{key:b,value:P,localTime:I}=y;await Wa(),P===null&&I<_&&(C=nl(i,y))}await C}static async*getHistory(_=0,T=1/0){for(let{key:C,value:y}of l.getRange({start:_||1,end:T})){await Wa();let b=xt(y);b.tableId===n&&(yield{id:b.recordId,localTime:C,version:b.version,type:b.type,value:b.getValue(i,!0,C),user:b.user,operation:b.originatingOperation})}}static async getHistoryOfRecord(_){let T=[];if(_==null)throw new Error("An id is required");let C=i.getEntry(_);if(!C)return T;let y=C.localTime;if(!y)throw new Error("The entry does not have a local audit time");let b=0;do{await Wa();let P=l.get(y);if(P){let I=xt(P);T.push({id:I.recordId,localTime:y,version:I.version,type:I.type,value:I.getValue(i,!0,y),user:I.user}),y=I.previousLocalTime}else break}while(b<1e3&&y);return T.reverse()}static cleanup(){Y?.remove()}}let $E=Gg(async(K,_,T)=>{for(let C of Le.sources)if(C.get&&(!C.get.reliesOnPrototype||C.prototype.get)){if(C.available?.(T)===!1)continue;_.source=C;let y=await C.get(K,_);if(y)return y}},()=>{throw new lt.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});Le.updatedAttributes();let Kf=Le.prototype;return h&&Le.setTTLExpiration(h/1e3),J&&VE(),Le;function To(K,_,T){let C;for(let y in r){let b=r[y],P=b.isIndexing,I=er[y],v=T&&(I?I(T):T[y]),U=_&&(I?I(_):_[y]);if(v===U&&!P)continue;if(b.customIndex){b.customIndex.index(K,v,U);continue}C=!0;let L=b.indexNulls,x=(0,Ip.getIndexedValues)(v,L),G=(0,Ip.getIndexedValues)(U,L);if(s==="OrganizationRole"&&xe.default.error?.({tableName:s,id:K,key:y,valuesToAdd:x,valuesToRemove:G}),G?.length>0){let j=new Set(G);if(x=x?x.filter(X=>{if(j.has(X))j.delete(X);else return!0}):[],G=Array.from(j),(G.length>0||x.length>0)&&JH){let X=G.concat(x).map($=>({key:$,value:K}));b.prefetch(X,tq)}for(let X=0,$=G.length;X<$;X++)b.remove(G[X],K)}else x?.length>0&&JH&&b.prefetch(x.map(j=>({key:j,value:K})),tq);if(x)for(let j=0,X=x.length;j<X;j++)b.put(x[j],K)}return C}o(To,"updateIndices");function Mr(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>ZH)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,Il.writeKey)(K,toe,0)>ZH)throw new Error("Primary key size is too large: "+K.length);return!0}o(Mr,"checkValidId");function Ar(K){return typeof K=="object"&&K?K.id:K}o(Ar,"requestTargetToId");function Yf(K){return typeof K=="object"&&K&&K.isCollection}o(Yf,"isSearchTarget");function cA(K){}o(cA,"isRequestTarget");function vc(K,_,T,C,y){if(Le.getResidencyById&&T.ensureLoaded&&_?.replicateFrom!==!1){let P=Bc(Le.getResidencyById(K));if(P&&!P.includes(server.hostname)&&N)return N({key:K,residency:P}).then(y)}let b=o(()=>{if(_?.transaction?.stale&&(_.transaction.stale=!1),T.transaction?.isDone)return y(null,K);let P=i.getEntry(K,T);return(c!=="system"||s==="hdb_analytics")&&(oq.default.trace?.("Recording db-read action for",`${c}.${s}`),Je(P?.size??1,"db-read",s,null)),_?._freezeRecords&&Object.freeze(P?.value),P?.residencyId&&P.metadataFlags&Dn&&N&&T.ensureLoaded&&_?.replicateFrom!==!1?N(P).then(I=>y(I,K),I=>(xe.default.error?.("Error loading remote record",K,P,T,I),y(null,K))):(P&&_&&(P?.version>(_.lastModified||0)&&(_.lastModified=P.version),P?.localTime&&!_.lastRefreshed&&(_.lastRefreshed=P.localTime)),y(P,K))},"whenPrefetched");return C?b():re>0?(re--,b()):new Promise((P,I)=>{re===0?(re--,i.prefetch([K],()=>{v(),U()})):(le.push(K),ae.push(U),le.length>aA&&(re--,v()));function v(){if(le.length>0){let L=ae;i.prefetch(le,()=>{re===-1?v():re++;for(let x of L)x()}),le=[],ae=[],Re>2&&Re--}else re=Re,Re<GE&&Re++}o(v,"prefetch");function U(){try{P(b())}catch(L){I(L)}}o(U,"load")})}o(vc,"loadLocalRecord");function Vr(K,_){let T=_?.checkPermission;if(typeof T!="object"){if(!K?.role)return;T=K.role.permission}if(T.super_user)return roe;let C=T[c],y,b=C?.tables;if(b)return b[s];if(c==="data"&&(y=T[s])&&!y.tables)return y}o(Vr,"getTablePermissions");function Ra(K,_,T,C){if(O){let y=!1;if(T.noCache?y=!0:(_?(!_.value||_.metadataFlags&(Dn|va)||_.expiresAt!=null&&_.expiresAt<Date.now())&&(y=!0):y=!0,zr(!y,"cache-hit",s)),y){let b=Su(K,_,T).then(P=>(P?.value&&P?.value.getRecord?.()&&xe.default.error?.("Can not assign a record that is already a resource"),T&&(P?.version>(T.lastModified||0)&&(T.lastModified=P.version),T.lastRefreshed=Date.now()),P));if(T?.onlyIfCached||_?.value&&C?.allowStaleWhileRevalidate?.(_,K)){if(b.catch(P=>xe.default.warn?.(P)),T?.onlyIfCached&&!C.doesExist())throw new lt.ServerError("Entry is not cached",504);return}else return b}}else if(_?.value&&_.expiresAt!=null&&_.expiresAt<Date.now())return Le.evict(_.key,_.value,_.version),_.value=null,{then(y){return y(_)}}}o(Ra,"ensureLoadedFromSource");function br(K){let _=K?.transaction;if(_){if(!_.lmdbDb)return _.lmdbDb=i,_;do{if(_.lmdbDb?.path===i.path)return _;let T=_.next;if(!T)return _=_.next=new bo,_.lmdbDb=i,_;_=T}while(!0)}else return new p_}o(br,"txnForContext");function gu(K,_,T){if(!K)return;let C=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof _=="object"){let b=er,P=C;for(let I=0,v=_.length;I<v;I++){let U=_[I],L=b?.[U];P=L&&P?L(P,T,K):P?.[U],K=null,b=L?.definition?.tableClass?.propertyResolvers}return P}let y=er[_];return y?y(C,T,K):C[_]}o(gu,"getAttributeValue");function Wf(K,_,T,C,y){let b=y?.length,P={transaction:C,lazy:b>0||typeof _=="string"||_?.length<4,alwaysPrefetch:!0},I;function v(U,L){let x=U?.value;if(!x)return za.SKIP;for(let G=0;G<b;G++)if(!I?.includes(G)&&!y[G](x,U))return za.SKIP;return L!==void 0&&(U.key=L),U}if(o(v,"processEntry"),b>0||!K.hasEntries){let U=K.map(L=>{if(I=null,typeof L=="object"&&L?.key!==void 0)return b>0?v(L):L;if(L==null)return za.SKIP;for(let x=0;x<b;x++){let j=y[x].idFilter;if(j){if(!j(L))return za.SKIP;I||(I=[]),I.push(x)}}return vc(L,T,P,!1,v)});return Array.isArray(K)&&(U=U.filter(L=>L!==za.SKIP)),U.hasEntries=!0,U}return K}o(Wf,"transformToEntries");function Aa(K,_,T=server.replication?.getThisNodeId(l)){if(K<=_?.version){if(_?.version===K&&T!==void 0){let C=server.replication?.exportIdMapping(l),y=_.localTime,b=y&&l.get(y);if(b){let P,I,v=xt(b);for(let U in C)C[U]===T&&(P=U),C[U]===v.nodeId&&(I=U);if(P>I)return 1;if(P===I)return 0}}return-1}return 1}o(Aa,"precedesExistingVersion");async function Su(K,_,T){let C=_?.metadataFlags,y=_?.version,b,P;if(!i.attemptLock(K,y,()=>{clearTimeout(P);let L=i.getEntry(K);!L||!L.value||L.metadataFlags&(Dn|va)?b(Su(K,i.getEntry(K),T)):b(L)}))return new Promise(L=>{b=L,P=setTimeout(()=>{i.unlock(K,y)},Zie)});let I=_?.value,v={requestContext:T,replacingRecord:I,replacingEntry:_,replacingVersion:y,noCacheStore:!1,source:null,resourceCache:T?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},U=T?.responseHeaders;return new Promise((L,x)=>{let G;xs(At(v,async j=>{let X=performance.now(),$,be,pe;try{$=await $E(K,v,_),pe=C&Dn;let z=v.lastModified||pe&&y;be=pe||z>y||!I,z||(z=(0,Ip.getNextMonotonicTime)());let ne=performance.now()-X;if(Je(ne,"cache-resolution",s,null,"success"),U&&Ap(U,"Server-Timing",`cache-resolve;dur=${ne.toFixed(2)}`,!0),j.timestamp=z,h&&v.expiresAt==null&&(v.expiresAt=Date.now()+h),$){if(typeof $!="object")throw new Error("Only objects can be cached and stored in tables");if($.status>0&&$.headers)if($.status>=300)if($.status===304)$=I,z=y;else throw new lt.ServerError($.body||"Error from source",$.status);else $=$.body;typeof $.toJSON=="function"&&($=$.toJSON()),t&&$[t]!==K&&($[t]=K)}G=!0,L({key:K,version:z,value:$})}catch(z){z.message+=` while resolving record ${K} for ${s}`,I&&((z.code==="ECONNRESET"||z.code==="ECONNREFUSED"||z.code==="EAI_AGAIN")&&!T?.mustRevalidate||T?.staleIfError&&(z.statusCode===500||z.statusCode===502||z.statusCode===503||z.statusCode===504))?(L({key:K,version:y,value:I}),xe.default.trace?.(z.message,"(returned stale record)")):x(z);let ne=performance.now()-X;Je(ne,"cache-resolution",s,null,"fail"),U&&Ap(U,"Server-Timing",`cache-resolve;dur=${ne.toFixed(2)}`,!0),v.transaction.abort();return}if(T?.noCacheStore||v.noCacheStore){v.transaction.abort();return}br(v).addWrite({key:K,store:i,entry:_,nodeName:"source",commit:o((z,ne)=>{if(ne?.version!==y)return;let me=To(K,I,$);if($){Fe.put?.(v,K,$),ne&&(T.previousResidency=Le.getResidencyRecord(ne.residencyId));let Ee,fe=!1,De,ve=Bc(Le.getResidency($,T));if(ve){if(!ve.includes(server.hostname))if(Ee=$,fe=!0,Le.getResidencyById)$=void 0;else{$=null;for(let $e in r)$||($={}),$[$e]=Ee[$e]}De=yo(ve)}xe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(z).toISOString()}`),R(K,$,ne,z,fe?Dn:0,g&&(be||fe)||null,{user:v?.user,expiresAt:v.expiresAt,residencyId:De,tableToTrack:s},"put",!!pe,Ee)}else ne&&(Fe.delete?.(v,K),xe.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(z).toISOString()}`),g||A?R(K,null,ne,z,0,g&&be||null,{user:v?.user,tableToTrack:s},"delete",!!pe):nl(i,ne,y))},"commit")})}),()=>{i.unlock(K,y)},j=>{i.unlock(K,y),G&&xe.default.error?.("Error committing cache update",j)})})}o(Su,"getFromSource");function Uc(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new lt.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new lt.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(Uc,"checkContextPermissions");function xc(K){let _=!1;if(K&&(K-Rr>1&&(_=!0),Rr=K),!(qe===Zt&&!_)&&(Zt=qe,(0,Al.getWorkerIndex)()===(0,Al.getWorkerCount)()-1))return Ht&&clearTimeout(Ht),qe?new Promise(T=>{let C=new Date;C.setMonth(0),C.setDate(1),C.setHours(0),C.setMinutes(0),C.setSeconds(0);let y=qe/(1+Rr),b=_?Date.now():Math.ceil((Date.now()-C.getTime())/y)*y+C.getTime(),P=o(I=>{xe.default.trace?.(`Scheduled next cleanup scan at ${new Date(I)}`),Ht=setTimeout(()=>te=te.then(async()=>{if(P(Math.max(I+qe,Date.now())),i.rootStore.status!=="open"){clearTimeout(Ht);return}let v=50,U=new Array(v),L=0,x=Math.pow(Rr,8)*(bl.get(B.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),G=E/Math.pow(Math.max(Rr,1),4);xe.default.info?.(`Starting cleanup scan for ${s}, evict threshold ${x}, adjusted eviction ${G}ms`);function j(X,$,be,pe){let de=X+G-Date.now();if(de<0)return!0;if(Rr){let z=i.lastSize;return be&Ln&&Ou(pe,ne=>{ne.size&&(z+=ne.size)}),xe.default.trace?.(`shouldEvict adjusted ${de} ${z}, ${de*(X-$)/z} < ${x}`),de*(X-$)/z<x}return!1}o(j,"shouldEvict");try{let X=0;for(let $ of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:be,value:pe,version:de,expiresAt:z,metadataFlags:ne}=$,me;pe===null&&!g&&de+Xie<Date.now()?me=nl(i,$,de):z!=null&&j(z,de,ne,pe)&&(me=Le.evict(be,pe,de),X++),me&&(await U[L],U[L]=me.catch(Ee=>{xe.default.error?.("Cleanup error",Ee)}),++L>=v&&(L=0)),await Wa()}xe.default.info?.(`Finished cleanup scan for ${s}, evicted ${X} entries`)}catch(X){xe.default.warn?.(`Error in cleanup scan for ${s}:`,X)}T(void 0),Rr=0}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");P(b)}):void 0}o(xc,"scheduleCleanup");function Tu(){Y=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}o(Tu,"addDeleteRemoval");function VE(){(0,Al.getWorkerIndex)()===0&&setInterval(async()=>{if(!Mc){Mc=!0;try{let K=J.name,_=r[K];if(!_)throw new Error(`expiresAt attribute ${J} must be indexed`);for(let T of _.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let C of _.getValues(T)){let y=i.getEntry(C);y?.value?y.value[K]<Date.now()&&Le.evict(C,y.value,y.version):i.ifVersion(C,y?.version,()=>_.remove(T,C))}await Wa()}}catch(K){xe.default.error?.("Error in evicting old records",K)}finally{Mc=!1}}},Jie).unref()}o(VE,"runRecordExpirationEviction");function Bc(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let _=server.shards?.get?.(K);if(_)return xe.default.trace?.(`Shard ${K} mapped to ${_.map(T=>T.name).join(", ")}`),_.map(T=>T.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}o(Bc,"residencyFromFunction");function yo(K){if(K){let _=K.join(","),T=d.get([Symbol.for("residency_by_set"),_]);return T||(d.put([Symbol.for("residency_by_set"),_],T=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),T],K),T)}}o(yo,"getResidencyId")}function Xw(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 tq(){}function Vg(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 $g(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return $g(+e);case"Float":return e==="null"?null:$g(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;noe.test(e)||(e+="Z");let n=new Date(e);return $g(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,Kg.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function $g(e){if(isNaN(e))throw new SyntaxError;return e}function rq(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 xs(e,t,r){return e?.then?e.then(t,r):t(e)}function nq(e){return e!=null}function Bs(e){try{return JSON.stringify(e)}catch{return e}}function soe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var za,Ip,sq,iq,bl,lt,wp,Np,xe,Il,Al,Kg,Zw,oq,Wie,zie,jie,Qie,Jie,Xie,JH,Zie,XH,eoe,Dn,va,toe,ZH,eq,roe,BMe,noe,Wa,eg=ie(()=>{H();za=require("lmdb"),Ip=w(Cn()),sq=w(require("lodash")),iq=w(mm());Ua();hm();bl=w(ue());Vb();lt=w(_e()),wp=w(ko()),Np=w(ns());Oe();Z_();xe=w(Zn());XI();Ca();Il=require("ordered-binary"),Al=w(nt());Io();Kg=w(oe());el();Ps();__();bp();Zw=w(require("node:fs"));Ns();v_();oq=w(Q());Jw();({sortBy:Wie}=sq.default),{validateAttribute:zie}=iq.default,jie=new Uint8Array(9);jie[8]=192;Qie=1/0,Jie=6e4,Xie=864e5;bl.initSync();JH=bl.get(B.STORAGE_PREFETCHWRITES),Zie=1e4,XH=1,eoe=2,Dn=1,va=8,toe=Buffer.allocUnsafeSlow(8192),ZH=1978,eq=100,roe={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},BMe=(0,Kg.convertToMS)(bl.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(Yg,"makeTable");o(Xw,"attributesAsObject");o(tq,"noop");noe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(Vg,"coerceType");o($g,"rejectNaN");o(rq,"isDescendantId");Wa=o(()=>new Promise(setImmediate),"rest");o(xs,"when");o(nq,"exists");o(Bs,"stringify");o(soe,"hasOtherProcesses")});function Wg(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,a=t[s]||0,c=i-a;r+=c*c}return r}function zg(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 a=0;a<i;a++){let c=e[a]||0,l=t[a]||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 cq=ie(()=>{o(Wg,"euclideanDistance");o(zg,"cosineDistance")});var lq,uq,dd,Qi,ud,ioe,ooe,jg,dq=ie(()=>{cq();lq=require("msgpackr"),uq=w(Zn()),dd=w(_e()),Qi=(0,uq.loggerWithTag)("HNSW"),ud=Symbol.for("entryPoint"),ioe=Symbol.for("key"),ooe=10,jg=class{static{o(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=lq.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?Wg:zg,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"?[ioe,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 a=new Map,c,l=this.indexStore.get(ud);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let E=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:E,primaryKey:t};for(let A=0;A<=E;A++)g[A]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);Qi.debug?.("setting entry point to",i),this.indexStore.put(ud,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),ooe),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);Qi.debug?.("setting entry point to",i),this.indexStore.put(ud,i)}for(;p>m;){let E=this.searchLayer(r,l,f,this.efConstruction,p);E.length>0&&(l=E[0].id,f=E[0].node),p--}let h=new Array(m+1);for(let E=0;E<=m;E++)h[E]=[];for(let E=Math.min(m,p);E>=0;E--){let g=this.searchLayer(r,l,f,this.efConstruction,E);g=g.slice(0,this.M<<1),g.length===0&&E===0&&Qi.info?.("should not have zero connections for",l);let A=h[E];for(let S=0;S<g.length;S++){let{id:R,distance:N,node:O}=g[S];if(R===i)continue;let F=[];if(this.optimizeRouting){let k=!1,J=O[E],Y=1+this.optimizeRouting*(1+.5*S/this.M);for(let le=0;le<J.length;le++){let{id:ae,distance:re}=J[le],Re=1+this.optimizeRouting*(1+.5*le/this.M);for(let Te=0;Te<A.length;Te++){let{id:Fe,distance:qe}=A[Te];if(Fe===ae){N*Y>qe+re?k=!0:re*Re>N+qe&&(F.push({fromId:Fe,toId:R}),F.push({fromId:R,toId:Fe}));break}}if(k)break}if(k)continue}else if(S>=(E>0?this.M:this.M<<1))continue;A.push({id:R,distance:N});for(let{fromId:k,toId:J}of F){let Y=d(k);Y||(Y=d(k,this.indexStore.get(k)));for(let le=0;le<Y[E].length;le++)if(Y[E][le].id===J){Object.isFrozen(Y[E])&&(Y[E]=Y[E].slice()),Y[E].splice(le,1);break}}let te=c[E],q=te?.find(({id:k})=>k===R);if(q){let k=te?.indexOf(q);te.copied||(te=[...te],te.copied=!0,c[E]=te),te.splice(k,1)}else this.addConnection(R,d(R,O),i,E,N,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...h})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m][0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:p,value:h}of this.indexStore.getRange({start:0,end:1/0}))if(h.level>m){if(l=p,h.level===f)break;m=h.level}}if(l===void 0)this.indexStore.remove(ud);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);Qi.debug?.("setting entry point to",l),this.indexStore.put(ud,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:p}of m){let h=d(p,this.indexStore.get(p));for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:g})=>g!==i),h[E].length===0&&(Qi.info?.("node was left orphaned, will reindex",p),u.set(h.primaryKey,h.vector))}}function d(f,m){let p=a.get(f);return!p&&m&&(p={...m},a.set(f,p)),p}o(d,"updateNode");for(let[f,m]of a)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(ud);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,a=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=a(t,h.vector);if(E<f||u.length<s){let g={id:p,distance:E,node:h};l.push(g),u.push(g)}}u.sort((p,h)=>p.distance-h.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let a=0;switch(i){case"lt":case"le":a=r;case"sort":break;default:throw new dd.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new dd.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=zg;else if(s==="euclidean")c=Wg;else{if(s)throw new dd.ClientError("Unknown distance function");c=this.distance}if(!t)throw new dd.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new dd.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 a&&(d=d.filter(f=>f.distance<a)),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 a=this.indexStore.get(i);if(!a){Qi.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||Qi.info?.("asymmetry detected",a[n])}n++}}addConnection(t,r,n,s,i,a){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){Qi.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=a(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=a(f.id,m),m[s]=m[s].filter(({id:p})=>p!==t),s===0&&m[s].length===0&&Qi.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?Qi.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 a=s.shift(),c=this.indexStore.get(a);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 a=this.distance;s.type&&(a=s.distance==="euclidean"?Wg:zg);let c=a(s.target,t);return i.set(n,c),c}return t}}});var eN,fq=ie(()=>{dq();eN={HNSW:jg}});var mt={};Ie(mt,{database:()=>Zu,databaseEnvs:()=>Ko,databases:()=>Me,dropDatabase:()=>nw,dropTableMeta:()=>foe,getDatabases:()=>at,getDefaultCompression:()=>rS,getTables:()=>coe,onRemovedDB:()=>vp,onUpdatedTable:()=>wl,readMetaDb:()=>Cp,resetDatabases:()=>Ed,table:()=>Xe,tables:()=>pn});function Mp(e,t){let r=eS.OpenDBIObject??eS.default.OpenDBIObject;return new r(e,t)}function coe(){return Zg||at(),pn||{}}function at(){if(Zg)return Me;Zg=!0,pd=new Map;let e=(0,Kt.getHdbBasePath)()&&(0,Bt.join)((0,Kt.getHdbBasePath)(),kc),t=(0,Kt.get)(B.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Kt.get)(B.STORAGE_PATH)||e&&((0,ls.existsSync)(e)?e:(0,Bt.join)((0,Kt.getHdbBasePath)(),QE)),!e)return;if((0,ls.existsSync)(e))for(let n of(0,ls.readdirSync)(e,{withFileTypes:!0})){let s=(0,Bt.basename)(n.name,".mdb");n.isFile()&&(0,Bt.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&Cp((0,Bt.join)(e,n.name),null,s)}if((0,ls.existsSync)((0,md.getBaseSchemaPath)())){for(let n of(0,ls.readdirSync)((0,md.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,Bt.join)((0,md.getBaseSchemaPath)(),n.name),i=(0,Bt.join)((0,md.getTransactionAuditStoreBasePath)(),n.name);for(let a of(0,ls.readdirSync)(s,{withFileTypes:!0}))if(a.isFile()&&(0,Bt.extname)(a.name).toLowerCase()===".mdb"){let c=(0,Bt.join)(i,a.name);Cp((0,Bt.join)(s,a.name),(0,Bt.basename)(a.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,ls.existsSync)(i))for(let c of(0,ls.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,Bt.extname)(c.name).toLowerCase()===".mdb"&&Cp((0,Bt.join)(i,c.name),(0,Bt.basename)(c.name,".mdb"),n);let a=s.tables;if(a)for(let c in a){let l=a[c],u=(0,Bt.join)(l.path,(0,Bt.basename)(c+".mdb"));(0,ls.existsSync)(u)&&Cp(u,c,n,null,!0)}}for(let n in Me){let s=pd.get(n);if(s){let i=Me[n];n.includes("delete")&&Nr.trace(`defined tables ${Array.from(s.keys())}`);for(let a in i)s.has(a)||(Nr.trace(`delete table class ${a}`),delete i[a])}else if(delete Me[n],n==="data"){for(let i in pn)delete pn[i];delete pn[tS]}}let r=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"];if((0,Kt.get)(B.ANALYTICS_REPLICATE)===!1?r.push("hdb_analytics"):(Me.system?.hdb_analytics?.enableAuditing(),Me.system?.hdb_analytics_hostname?.enableAuditing()),Me.system)for(let n of r)Me.system[n]&&(Me.system[n].replicate=!1);return pd=null,Me}function Ed(){Zg=!1;for(let[,e]of Ko)e.needsDeletion=!0;at();for(let[e,t]of Ko)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Ko.delete(e);let r=Me[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete Me[t.databaseName],Pp.forEach(i=>i(t.databaseName));break}}return Me}function Cp(e,t,r=nN,n,s){let i=new tN.default(e,!1);try{let a=Ko.get(e);a?a.needsDeletion=!1:(a=(0,hd.open)(i),Ko.set(e,a));let c=new Mp(!1),l=a.dbisDb||(a.dbisDb=a.openDB(Qg.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,ls.existsSync)(n)&&(i.path=n,u=(0,hd.open)(i),u.isLegacy=!0):u=B_(a));let d=_q(r),f=d[tS],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,g]=p.toString().split("/");g===""?g=h.name:g||(g=E,E=t,h.name||(h.name=g,h.indexed=!h.is_hash_attribute)),f?.add(E);let A=m.get(E);A||m.set(E,A={attributes:[]}),(g==null||h.is_hash_attribute)&&(A.primary=h),g!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:g}=h;if(!g){for(let re of E)if(re.is_hash_attribute||re.isPrimaryKey){g=re;break}if(!g){Nr.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let A=d[p],S={},R=[],N,O,F=typeof g.audit=="boolean"?g.audit:(0,Kt.get)(B.LOGGING_AUDITLOG),te=g.trackDeletes,q=g.expiration,k=g.eviction,J=g.sealed,Y=g.splitSegments,le=g.replicate;if(A)S=A.indices,R=A.attributes,A.schemaVersion++;else{N=g.tableId,N?N>=(l.get(fd)||0)&&(l.putSync(fd,N+1),Nr.info(`Updating next table id (it was out of sync) to ${N+1} for ${p}`)):(g.tableId=N=l.get(fd),N||(N=1),Nr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(fd,N+1),l.putSync(g.key,g));let re=new Mp(!g.is_hash_attribute,g.is_hash_attribute);if(re.compression=g.compression,re.compression){let Re=(0,Kt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||Eq;re.compression.threshold=Re}O=j_(a.openDB(g.key,re),a),a.databaseName=r,O.tableId=N}let ae;for(let re of E){re.attribute=re.name;try{if(!re.is_hash_attribute&&(re.indexed||re.attribute&&!re.name)){if(!S[re.name]){let Te=Sq(re.key,a,re);S[re.name]=Te,S[re.name].indexNulls=re.indexNulls}let Re=R.find(Te=>Te.name===re.name);Re?R.splice(R.indexOf(Re),1,re):R.push(re),ae=!0}}catch(Re){Nr.error("Error trying to update attribute",re,R,S,Re)}}for(let re of R)if(!E.find(Te=>Te.name===re.name)){if(re.is_hash_attribute){Nr.error("Unable to remove existing primary key attribute",re);continue}re.indexed&&(R.splice(R.indexOf(re),1),ae=!0)}if(A)ae&&(A.schemaVersion++,A.updatedAttributes());else{A=gq(d,p,Yg({primaryStore:O,auditStore:u,audit:F,sealed:J,splitSegments:Y,replicate:le,expirationMS:q&&q*1e3,evictionMS:k&&k*1e3,trackDeletes:te,tableName:p,tableId:N,primaryKey:g.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:g.schemaDefined,dbisDB:l})),A.schemaVersion=1;for(let re of Op)re(A)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function _q(e){let t=Me[e];if(t||(e==="data"?t=Me[e]=pn:e==="system"?Object.defineProperty(Me,"system",{value:t=Object.create(null),configurable:!0}):t=Me[e]=Object.create(null)),pd&&!pd.has(e)){let r=new Set;t[tS]=r,pd.set(e,r)}return t}function gq(e,t,r){return e[t]=r,r}function Zu({database:e,table:t}){e||(e=nN),at();let r=_q(e),n=(0,Bt.join)((0,Kt.getHdbBasePath)(),kc),s=(0,Kt.get)(B.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,Kt.get)(B.STORAGE_PATH)||((0,ls.existsSync)(n)?n:(0,Bt.join)((0,Kt.getHdbBasePath)(),QE));let a=(0,Bt.join)(n,(i?t:e)+".mdb"),c=Ko.get(a);if(!c||c.status==="closed"){let l=new tN.default(a,!1);c=(0,hd.open)(l),Ko.set(a,c)}return c.auditStore||(c.auditStore=B_(c)),c}async function nw(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,Ko.delete(r.path),r.status==="open"&&(await r.close(),await Lp.remove(r.path));if(r||(r=Zu({database:e,table:null}),r.status==="open"&&(await r.close(),await Lp.remove(r.path))),e==="data"){for(let n in pn)delete pn[n];delete pn[tS]}delete Me[e],Pp.forEach(n=>n(e)),await rb(r)}function Sq(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&eN[r.indexed.type]?.useObjectStore,s=new Mp(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=eN[r.indexed.type];a?i.customIndex=new a(i,r.indexed):Nr.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function Xe(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:a,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=nN);let h=Zu({database:r,table:t}),E=Me[r];Nr.trace(`Defining ${t} in ${r}`);let g=E?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let A,S,R;m==null&&(m=!0);let N=new Mp(!1);for(let Y of a)Y.attribute&&!Y.name?(Y.name=Y.attribute,Y.indexed=!0):Y.attribute=Y.name,Y.expiresAt&&(Y.indexed=!0);let O,F;if(g){if(A=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...a)}else{let Y=h.auditStore;S=a.find(Re=>Re.isPrimaryKey)||{},A=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=rS(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,Kt.get)(B.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]),Nr.trace(`${t} table loading, opening primary store`);let le=new Mp(!1,!0);le.compression=S.compression;let ae=t+"/";if(R=h.dbisDb=h.openDB(Qg.INTERNAL_DBIS_NAME,N),J(),R.get(ae))return F&&F(),Ed(),Xe(e);let re=j_(h.openDB(ae,le),h);h.databaseName=r,re.tableId=R.get(fd),Nr.trace(`Assigning new table id ${re.tableId} for ${t}`),re.tableId||(re.tableId=1),R.put(fd,re.tableId+1),S.tableId=re.tableId,g=gq(E,t,Yg({primaryStore:re,auditStore:Y,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:A,tableName:t,tableId:re.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:R})),g.schemaVersion=1,O=!0,R.put(ae,S)}let te=g.indices;R=R||(h.dbisDb=h.openDB(Qg.INTERNAL_DBIS_NAME,N)),g.dbisDB=R;let q=[];for(let{key:Y,value:le}of R.getRange({start:!0})){let[ae,re]=Y.toString().split("/");if(re===""&&(re=le.name),re){if(ae!==t)continue}else continue;let Re=a.find(Fe=>Fe.name===re),Te=!Re?.indexed&&le.indexed&&!le.isPrimaryKey;if((!Re||Te)&&(J(),O=!0,Re||R.remove(Y),Te)){let Fe=g.indices[ae];Fe&&q.push(Fe)}}let k=[];try{for(let Y of a||[]){if((Y.relationship||Y.computed)&&(O=!0,Y.relationship))continue;let le=t+"/"+(Y.name||"");Object.defineProperty(Y,"key",{value:le,configurable:!0});let ae=R.get(le);if(Y.isPrimaryKey){if(ae=ae||R.get(le=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+ae.expiration||void 0)||(+s||void 0)!==(+ae.eviction||void 0)||Y.type!==ae.type){let Re={...ae};typeof c=="boolean"&&(c&&g.enableAuditing(c),Re.audit=c),n&&(Re.expiration=+n),s&&(Re.eviction=+s),l!==void 0&&(Re.sealed=l),d!==void 0&&(Re.replicate=d),Y.type&&(Re.type=Y.type),O=!0,J(),R.put(le,Re)}continue}ae?.attribute&&!ae.name&&(ae.indexed=!0);let re=!ae||ae.type!==Y.type||JSON.stringify(ae.indexed)!==JSON.stringify(Y.indexed)||ae.nullable!==Y.nullable||ae.version!==Y.version||JSON.stringify(ae.properties)!==JSON.stringify(Y.properties)||JSON.stringify(ae.elements)!==JSON.stringify(Y.elements);if(Y.indexed){let Re=Sq(le,h,Y);(re||ae.indexingPID&&ae.indexingPID!==process.pid||ae.restartNumber<Dp.workerData?.restartNumber)&&(O=!0,J(),ae=R.get(le),(re||ae.indexingPID&&ae.indexingPID!==process.pid||ae.restartNumber<Dp.workerData?.restartNumber)&&(O=!0,Y.indexNulls===void 0&&(Y.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(Y.lastIndexedKey=ae?.lastIndexedKey??void 0,Y.indexingPID=process.pid,Re.isIndexing=!0,Object.defineProperty(Y,"dbi",{value:Re}),k.push(Y))),R.put(le,Y)),ae?.indexNulls&&Y.indexNulls===void 0&&(Y.indexNulls=!0),Re.indexNulls=Y.indexNulls,te[Y.name]=Re}else re&&(O=!0,J(),R.put(le,Y))}}finally{F&&F()}if(O&&(g.schemaVersion++,g.updatedAttributes()),Nr.trace(`${t} table loading, running index`),k.length>0||q.length>0?g.indexingOperation=doe(g,k,q):O&&Jg.signalSchemaChange(new Xg.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=p,O)for(let Y of Op)Y(g,p!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Nr.trace(`${t} table loaded`),g;function J(){F||h.transactionSync(()=>({then(Y){F=Y}}))}o(J,"startTxn")}async function doe(e,t,r){try{Nr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await Jg.signalSchemaChange(new Xg.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,a={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,hd.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:p}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,p,()=>{for(let h=0;h<l;h++){let E=t[h],g=E.name,A=E.dbi;try{let S=E.resolve,R=m&&(S?S(m):m[g]);if(A.customIndex){A.customIndex.index(f,R);continue}let N=(0,mq.getIndexedValues)(R);if(N)for(let O=0,F=N.length;O<F;O++)A.put(N[O],f)}catch(S){a[g]||(a[g]=!0,Nr.error(`Error indexing attribute ${g}`,S))}}}),s.then(()=>d--,h=>{d--,Nr.error(h)}),Dp.workerData&&Dp.workerData.restartNumber!==hq.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>loe?await s:d>uoe&&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 Jg.signalSchemaChange(new Xg.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Nr.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Nr.error("Error in indexing",n)}}function foe({table:e,database:t}){let r=Zu({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 wl(e){return Op.push(e),{remove(){let t=Op.indexOf(e);t>-1&&Op.splice(t,1)}}}function vp(e){return Pp.push(e),{remove(){let t=Pp.indexOf(e);t>-1&&Pp.splice(t,1)}}}function rS(){let e=(0,Kt.get)(B.STORAGE_COMPRESSION),t=(0,Kt.get)(B.STORAGE_COMPRESSION_DICTIONARY),r=(0,Kt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||Eq,n={startingOffset:32};return t&&(n.dictionary=Lp.readFileSync(t)),r&&(n.threshold=r),e&&n}var Kt,Qg,hd,Bt,ls,md,tN,Lp,rN,mq,Jg,Xg,Dp,pq,hq,eS,aoe,Nr,nN,tS,Eq,pn,Me,fd,Op,Pp,Zg,Ko,pd,loe,uoe,Oe=ie(()=>{Kt=w(ue()),Qg=w($t()),hd=require("lmdb"),Bt=require("path"),ls=require("fs"),md=w(Rt());eg();tN=w($m());H();Lp=w(require("fs-extra")),rN=w(ii()),mq=w(Cn()),Jg=w(ko()),Xg=w(ns()),Dp=require("worker_threads"),pq=w(Q()),hq=w(nt());Io();el();Ns();fq();eS=w(Gm()),{forComponent:aoe}=pq.default;o(Mp,"OpenDBIObject");Nr=aoe("storage"),nN="data",tS=Symbol("defined-tables"),Eq=((0,Kt.get)(B.STORAGE_PAGESIZE)||4096)-60;(0,Kt.initSync)();pn=Object.create(null),Me=Object.create(null);(0,rN._assignPackageExport)("databases",Me);(0,rN._assignPackageExport)("tables",pn);fd=Symbol.for("next-table-id"),Op=[],Pp=[],Ko=new Map;o(coe,"getTables");o(at,"getDatabases");o(Ed,"resetDatabases");o(Cp,"readMetaDb");o(_q,"ensureDB");o(gq,"setTable");o(Zu,"database");o(nw,"dropDatabase");o(Sq,"openIndex");o(Xe,"table");loe=1e3,uoe=10;o(doe,"runIndexing");o(foe,"dropTableMeta");o(wl,"onUpdatedTable");o(vp,"onRemovedDB");o(rS,"getDefaultCompression")});var oN={};Ie(oN,{loadGQLSchema:()=>hoe,start:()=>iN,startOnMainThread:()=>poe});function iN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:a,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=a(new c(r.toString(),s)),m=new Map,p=[],h;for(let A of f.definitions)switch(A.kind){case l.OBJECT_TYPE_DEFINITION:let F=function(q){if(q.kind==="NonNullType"){let Y=F(q.type);return Y.nullable=!1,Y}if(q.kind==="ListType")return{type:"array",elements:F(q.type)};let J={type:q.name?.value};return Object.defineProperty(J,"location",{value:q.loc.startToken}),J};o(F,"getProperty");let S=A.name.value,R=[],N={table:null,database:null,properties:R};m.set(S,N),i.allTypes.set(S,N);for(let q of A.directives){if(q.name.value==="table"){for(let J of q.arguments)N[J.name.value]=J.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=S),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,p.push(N)}if(q.name.value==="sealed"&&(N.sealed=!0),q.name.value==="splitSegments"&&(N.splitSegments=!0),q.name.value==="replicate"&&(N.replicate=!0),q.name.value==="export"){N.export=!0;for(let J of q.arguments)typeof N.export!="object"&&(N.export={}),N.export[J.name.value]=J.value.value}}let O=!1,te={};for(let q of A.fields){let k=F(q.type);k.name=q.name.value,R.push(k),te[k.name]=void 0;for(let J of q.directives){let Y=J.name.value;if(Y==="primaryKey")O?console.warn("Can not define two attributes as a primary key at",J.loc):(k.isPrimaryKey=!0,O=!0);else if(Y==="indexed"){let le={};for(let ae of J.arguments||[])le[ae.name.value]=ae.value.value;k.indexed=le}else if(Y==="computed"){for(let le of J.arguments||[])if(le.name.value==="from"){let ae=le.value.value;k.computed={from:g(ae,le,te)},k.version==null&&(k.version=ae)}else le.name.value==="version"&&(k.version=le.value.value);k.computed=k.computed||!0}else if(Y==="relationship"){let le={};for(let ae of J.arguments)le[ae.name.value]=ae.value.value;k.relationship=le}else if(Y==="createdTime")k.assignCreatedTime=!0;else if(Y==="updatedTime")k.assignUpdatedTime=!0;else if(Y==="expiresAt")k.expiresAt=!0;else if(Y==="allow"){let le=k.authorizedRoles=[];for(let ae of J.arguments)ae.name.value==="role"&&le.push(ae.value.value)}else server.knownGraphQLDirectives.includes(Y)&&console.warn(`@${Y} is an unknown directive, at`,J.loc)}}N.type=S,S==="Query"&&(h=N)}function E(A){let S=m.get(A.type);S?(Object.defineProperty(A,"properties",{value:S.properties}),Object.defineProperty(A,"definition",{value:S})):A.type==="array"?E(A.elements):moe.includes(A.type)||(0,yq.getWorkerIndex)()===0&&console.error(`The type ${A.type} is unknown at line ${A.location.line}, column ${A.location.column}, in ${s}`)}o(E,"connectPropertyType");for(let A of m.values())for(let S of A.properties)E(S);for(let A of p)A.tableClass=e(A),A.export&&(A.export.name===""?i.set((0,sN.dirname)(n),A.tableClass):i.set((0,sN.dirname)(n)+"/"+(A.export.name||A.type),A.tableClass,A.export));function g(A,S,R){return new Tq.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${A}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(R)}o(g,"createComputedFrom")}}var sN,Tq,yq,moe,poe,hoe,Rq=ie(()=>{sN=require("path"),Tq=require("node:vm");Oe();yq=w(nt());xa();moe=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);o(iN,"start");poe=iN,hoe=o(e=>iN({ensureTable:Xe}).handleFile(e,null,null,new $u),"loadGQLSchema")});var cN={};Ie(cN,{start:()=>boe});function Eoe(e){if(e.kind!==He.Kind.OPERATION_DEFINITION&&e.kind!==He.Kind.FRAGMENT_DEFINITION)throw new qr(`Unexpected non-executable definition type ${e.kind}.`)}function Aq(e){if(typeof e!="object"||e===null)throw new Ji("Request body must be an object.");if(!("query"in e))throw new Ji("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Ji("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Ji("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Ji("Request body `operationName` field must be a string.")}function aN(e){return parseInt(e.value,10)}function Iq(e){return parseFloat(e.value)}function wq(e,t,r){let n=r.get(e.name.value);return Nq(n)?Cq(n,t):{attribute:t,value:n}}function Nq(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function Cq(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],Nq(n)?Cq(n,t):{attribute:t,value:n}))}function _oe(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case He.Kind.NULL:return{attribute:t,value:null};case He.Kind.INT:return{attribute:t,value:aN(e.value)};case He.Kind.FLOAT:return{attribute:t,value:Iq(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:t,value:e.value.value};case He.Kind.VARIABLE:return wq(e.value,t,r);case He.Kind.OBJECT:return Oq(e.value,t,r);case He.Kind.LIST:case He.Kind.ENUM:default:throw new qr(`Value type, ${e.value.kind}, is not supported.`)}}function Oq(e,t,r){return e.fields.flatMap(n=>_oe(n,t,r))}function goe(e,t){switch(e.value.kind){case He.Kind.NULL:return{attribute:e.name.value,value:null};case He.Kind.INT:return{attribute:e.name.value,value:aN(e.value)};case He.Kind.FLOAT:return{attribute:e.name.value,value:Iq(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case He.Kind.VARIABLE:return wq(e.value,e.name.value,t);case He.Kind.OBJECT:return Oq(e.value,[e.name.value],t);case He.Kind.LIST:case He.Kind.ENUM:default:throw new qr(`Argument type, ${e.value.kind}, is not supported.`)}}function Soe(e,t){return e.flatMap(r=>goe(r,t))}function nS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case He.Kind.FIELD:return r;case He.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new qr(`Fragment \`${n}\` not found.`);return nS(s.selectionSet,t)}case He.Kind.INLINE_FRAGMENT:return nS(r.selectionSet,t)}})}function Pq(e,t){return nS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:Pq(r.selectionSet,t)}:r.name.value)}async function Toe(e,t,r,n){let s=Ds.getMatch(e.name.value,"graphql");if(s===void 0)throw new qr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,a={select:Pq(e.selectionSet,r),conditions:Soe(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(a,n))c.push(l);return[e.name.value,c]}function Lq(e){switch(e.kind){case He.Kind.NULL:return null;case He.Kind.INT:return aN(e);case He.Kind.FLOAT:return parseFloat(e.value);case He.Kind.STRING:case He.Kind.BOOLEAN:return e.value;case He.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:Lq(r.value),...t}),{});case He.Kind.LIST:case He.Kind.ENUM:default:throw new qr(`Value type, ${e.kind}, is not supported.`)}}function yoe(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=Lq(n.defaultValue)),n.type.kind===He.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new qr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function Roe(e,t,r,n){if(e.operation===He.OperationTypeNode.SUBSCRIPTION)throw new qr("Subscriptions are not supported.");if(e.operation===He.OperationTypeNode.MUTATION)throw new qr("Mutations are not supported yet.");let s=yoe(e.variableDefinitions,t),i=await Promise.all(nS(e.selectionSet,r).map(c=>Toe(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function bq({query:e,variables:t={},operationName:r},n){let s=He.parse(e),i=new Map,a=new Map;for(let u of s.definitions)if(Eoe(u),u.kind===He.Kind.FRAGMENT_DEFINITION)a.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new qr("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 qr(`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 qr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new qr(`Operation \`${r}\` not found.`);let l=await Roe(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Aoe(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 Aq(r),bq(r,e)}case"POST":{let r=await Oo(e.headers.get("content-type"),!0)(e._nodeRequest);return Aq(r),bq(r,e)}default:throw new Ji("Method Not Allowed",405,{Allow:"GET, POST"})}}function boe(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Aoe(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Ji)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof He.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof qr)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 Ji)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof He.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof qr)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var He,qr,Ji,Dq=ie(()=>{He=w(require("graphql"));Po();xa();o(Eoe,"assertExecutableDefinitionNode");o(Aq,"assertRequestParams");o(aN,"processIntValueNode");o(Iq,"processFloatValueNode");o(wq,"processVariableNode");o(Nq,"isObject");o(Cq,"transformObjectIntoQueryCondition");o(_oe,"processObjectFieldNode");o(Oq,"processObjectValueNode");o(goe,"processArgumentNode");o(Soe,"buildConditionsQuery");o(nS,"fillInFragments");o(Pq,"buildSelectQuery");o(Toe,"processFieldNode");o(Lq,"processConstValueNode");o(yoe,"resolveVariables");o(Roe,"executeOperation");o(bq,"resolver");qr=class extends Error{static{o(this,"GraphQLQueryingError")}},Ji=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(Aoe,"graphqlQueryingHandler");o(boe,"start")});var Fq=M((ive,Bq)=>{var _d=require("validate.js"),vq=ft(),gd=(H(),D(W)),{handleHDBError:Ioe,hdbErrors:woe}=_e(),{HDB_ERROR_MSGS:nr,HTTP_STATUS_CODES:Noe}=woe,lN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Coe={STRUCTURE_USER:"structure_user"},Mq=Object.values(gd.ROLE_TYPES_ENUM),Ooe="attribute_permissions",Poe="attribute_name",{PERMS_CRUD_ENUM:Sd}=gd,Loe=[Ooe,...Object.values(Sd)],Uq=[Sd.READ,Sd.INSERT,Sd.UPDATE],Doe=[Poe,...Uq];function Moe(e){let t=lN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,xq(e,t)}o(Moe,"addRoleValidation");function voe(e){let t=lN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,xq(e,t)}o(voe,"alterRoleValidation");function Uoe(e){let t=lN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,vq.validateObject(e,t)}o(Uoe,"dropRoleValidation");var xoe=["operation","role","id","permission","hdb_user","access"];function xq(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)xoe.includes(n[a])||s.push(n[a]);s.length>0&&mr(nr.INVALID_ROLE_JSON_KEYS(s),r);let i=vq.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{mr(a,r)}),e.permission){let a=Boe(e);a&&mr(a,r),Mq.forEach(c=>{e.permission[c]&&!_d.isBoolean(e.permission[c])&&mr(nr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(Mq.indexOf(a)<0){if(a===Coe.STRUCTURE_USER){let l=e.permission[a];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]||mr(nr.SCHEMA_NOT_FOUND(f),r)}continue}mr(nr.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){mr(nr.SCHEMA_NOT_FOUND(a),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[a][l]){mr(nr.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{Loe.includes(d)||mr(nr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(Sd).forEach(d=>{_d.isDefined(u[d])?_d.isBoolean(u[d])||mr(nr.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):mr(nr.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){mr(nr.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){mr(nr.ATTR_PERMS_NOT_ARRAY,r,a,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[a][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=>{!Doe.includes(E)&&E!==Sd.DELETE&&mr(nr.INVALID_ATTR_PERM_KEY(E),r,a,l)}),!_d.isDefined(p.attribute_name)){mr(nr.ATTR_PERM_MISSING_NAME,r,a,l);continue}let h=p.attribute_name;if(!d.includes(h)){mr(nr.INVALID_ATTRIBUTE_IN_PERMS(h),r,a,l);continue}Uq.forEach(E=>{_d.isDefined(p[E])?_d.isBoolean(p[E])||mr(nr.ATTR_PERM_NOT_BOOLEAN(E,h),r,a,l):mr(nr.ATTR_PERM_MISSING(E,h),r,a,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=`${a}.${l}`;mr(nr.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return Foe(r)}o(xq,"customValidate");Bq.exports={addRoleValidation:Moe,alterRoleValidation:voe,dropRoleValidation:Uoe};function Boe(e){let{operation:t,permission:r}=e;if(t===gd.OPERATIONS_ENUM.ADD_ROLE||t===gd.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 nr.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?gd.ROLE_TYPES_ENUM.SUPER_USER:gd.ROLE_TYPES_ENUM.CLUSTER_USER;return nr.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(Boe,"validateNoSUPerms");function Foe(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:nr.ROLE_PERMS_ERROR,...e};return Ioe(new Error,n,Noe.BAD_REQUEST)}else return null}o(Foe,"generateRolePermResponse");function mr(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]}}o(mr,"addPermError")});var xp=M((cve,Gq)=>{"use strict";var kq=Bn(),Hq=fn(),koe=gl(),dN=Fq(),fN=ko(),ave=require("uuid").v4,Hoe=require("util"),sS=(H(),D(W)),qoe=oe(),mN=Hq.searchByValue,Goe=Hq.searchByHash,$oe=Hoe.promisify(koe.delete),Voe=di(),Koe=Ju(),{hdbErrors:Yoe,handleHDBError:Nl}=_e(),{HDB_ERROR_MSGS:qq,HTTP_STATUS_CODES:Up}=Yoe,{UserEventMsg:pN}=ns();Gq.exports={addRole:Woe,alterRole:zoe,dropRole:joe,listRoles:Qoe};function uN(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}o(uN,"scrubRoleDetails");async function Woe(e){let t=dN.addRoleValidation(e);if(t)throw t;e=uN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await mN(r)||[])}catch(i){throw Nl(i)}if(n&&n.length>0)throw Nl(new Error,qq.ROLE_ALREADY_EXISTS(e.role),Up.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 kq.insert(s),fN.signalUserChange(new pN(process.pid)),e=uN(e),e}o(Woe,"addRole");async function zoe(e){let t=dN.alterRoleValidation(e);if(t)throw t;e=uN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await kq.update(r)}catch(s){throw Nl(s)}if(n&&n?.message==="updated 0 of 1 records")throw Nl(new Error,"Invalid role id",Up.BAD_REQUEST,void 0,void 0,!0);return await fN.signalUserChange(new pN(process.pid)),e}o(zoe,"alterRole");async function joe(e){let t=dN.dropRoleValidation(e);if(t)throw Nl(new Error,t,Up.BAD_REQUEST,void 0,void 0,!0);let r=new Koe(sS.SYSTEM_SCHEMA_NAME,sS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Goe(r));if(n.length===0)throw Nl(new Error,qq.ROLE_NOT_FOUND,Up.NOT_FOUND,void 0,void 0,!0);let s=new Voe(sS.SYSTEM_SCHEMA_NAME,sS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await mN(s)),a=!1;if(qoe.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){a=!0;break}}if(a===!0)throw Nl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Up.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await $oe(c),fN.signalUserChange(new pN(process.pid)),`${n[0].role} successfully deleted`}o(joe,"dropRole");async function Qoe(){return mN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}o(Qoe,"listRoles")});var hN={};Ie(hN,{start:()=>Kq,startOnMainThread:()=>Zoe});function Kq({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,$q.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 a in i.permission){if(Joe.includes(a))continue;let c=i.permission[a];c.tables||(i.permission[a]=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 Xoe(i)}}}async function Xoe(e){let t=at().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,Vq.isEqual)(i,e)?void 0:(e.id=r.id,(0,iS.alterRole)(e))}return(0,iS.addRole)(e)}var iS,$q,Vq,Joe,Zoe,Yq=ie(()=>{Oe();iS=w(xp()),$q=require("yaml"),Vq=require("lodash"),Joe=["super_user","cluster_user","structure_user"];o(Kq,"start");o(Xoe,"ensureRole");Zoe=Kq});async function oS(e){let t=(0,jq.pathToFileURL)(e).toString();if(eae)return Bp||(Bp=tae(nae)),(await(await Bp).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function tae(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Bp=new Compartment({console,Math,Date,fetch:rae,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,zq.extname)(r)||(r+=".js"),r)},importHook:o(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Fr,s.tables=pn,s.databases=Me}};let n=await(0,Wq.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Bp}function rae(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 nae(){return{Resource:Fr,tables:pn}}var Wq,zq,jq,eae,Bp,EN=ie(()=>{Ua();Oe();Wq=require("fs/promises"),zq=require("path"),jq=require("url"),eae=!1;o(oS,"secureImport");o(tae,"getCompartment");o(rae,"secureOnlyFetch");o(nae,"getGlobalVars")});var _N={};Ie(_N,{handleApplication:()=>sae,suppressHandleApplicationWarning:()=>iae});function Qq(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function sae(e){e.handleEntry(t=>{if(t.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${t.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(t.eventType!=="add"){e.requestRestart();return}oS(t.absolutePath).then(r=>{let n=(0,aS.dirname)(t.urlPath);Qq(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),Jq(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function Jq(e,t,r){for(let n in t){let s=t[n],i=(0,aS.join)(r,n);Qq(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&Jq(e,s,i)}}var aS,iae,Xq=ie(()=>{EN();aS=require("path");o(Qq,"isResource");o(sae,"handleApplication");o(Jq,"recurseForResources");iae=!0});var SN={};Ie(SN,{start:()=>oae});function oae({resources:e}){e.set("login",gN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var gN,Zq=ie(()=>{Ua();o(oae,"start");gN=class extends Fr{static{o(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:a}=r;return{data:await n.login(s,i)}}}});function iG(e){let t={openapi:aae,info:{title:"HarperDB HTTP REST interface",version:nG.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}],n=o(s=>{if(s.type&&!t.components.schemas[s.type]){t.components.schemas[s.type]={};let i={},a=[];for(let c of s.properties)cS[c.type]?i[c.name]=new yN(cS[c.type],c.type):c.properties?(i[c.name]=new oG(c.type),n(c)):c.elements?.properties&&(i[c.name]=new mae(c.elements.type),n(c.elements)),c.nullable===!1&&a.push(c.name);t.components.schemas[s.type]=new rG(i,!s.sealed,a)}},"includeDefinitionInSchema");for(let[,s]of e){if(!s.path||s.Resource.isError)continue;let{path:i}=s,a=i.split("/").pop(),{attributes:c,sealed:l}=s.Resource,{prototype:u,primaryKey:d="id"}=s.Resource;if(!c&&e.allTypes.has(s.path)){let te=e.allTypes.get(s.path);l=te.sealed,c=te.properties}if(!d)continue;let f={},m=[],p=[];if(c)for(let{type:te,name:q,elements:k,relationship:J,definition:Y,nullable:le}of c){let ae=Y??k?.definition;ae&&n(ae),le===!1&&p.push(q),J?te==="array"?f[q]={type:"array",items:{$ref:Fs+k.type}}:f[q]={$ref:Fs+te}:ae?te==="array"?f[q]={type:"array",items:{$ref:Fs+ae.type}}:f[q]={$ref:Fs+ae.type}:te==="array"?k.type==="Any"?f[q]={type:"array",items:{format:k.type}}:f[q]={type:"array",items:new yN(cS[k.type],k.type)}:te==="Any"?f[q]={format:te}:f[q]=new yN(cS[te],te),m.push(new RN(q,"query",f[q]))}let h=Object.keys(f),E=new RN(d,"path",{type:"string",format:"ID"});E.required=!0,E.description="primary key of record";let g=new RN("property","path",{enum:h});g.required=!0,t.components.schemas[a]=new rG(f,!l,p);let A=u.post!==Resource.prototype.post||u.update,S=typeof u.put=="function",R=typeof u.get=="function",N=typeof u.delete=="function",O=typeof u.patch=="function",F="/"+i+"/";A&&(t.paths[F]={},t.paths[F].post=new cae(a,r,{200:new Td({$ref:Fs+a},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),R&&(t.paths[F]||(t.paths[F]={}),t.paths[F].get=new TN(m,r,{200:new Td({type:"array",items:{$ref:Fs+a}})},"search for records by the specified property name and value pairs")),t.paths[F]||(t.paths[F]={}),t.paths[F].options=new lae(m,r,{200:new uae},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),N&&(t.paths[F]||(t.paths[F]={}),t.paths[F].delete=new tG(m,r,"delete all the records that match the provided query",{204:new eG})),F="/"+i+"/{"+d+"}",R&&(t.paths[F]={},t.paths[F].get=new TN([E],r,{200:new Td({$ref:Fs+a})},"retrieve a record by its primary key")),S&&(t.paths[F]||(t.paths[F]={}),t.paths[F].put=new dae([E],r,a,{200:new Td({$ref:Fs+a})},"create or update the record with the URL path that maps to the record's primary key")),O&&(t.paths[F]||(t.paths[F]={}),t.paths[F].patch=new fae([E],r,a,{200:new Td({$ref:Fs+a})},"patch the record with the URL path that maps to the record's primary key")),N&&(t.paths[F]||(t.paths[F]={}),t.paths[F].delete=new tG([E],r,"delete a record with the given primary key",{204:new eG})),R&&g.schema.enum.length>0&&(F="/"+i+"/{"+d+"}.{property}",t.paths[F]={},t.paths[F].get=new TN([E,g],r,{200:new Td({enum:h})},"used to retrieve the specified property of the specified record"))}for(let[,s]of e.allTypes)n(s),s.sealed&&t.components.schemas[s.type].additionalProperties&&(t.components.schemas[s.type].additionalProperties=!1);return t}function cae(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Fs+e}}}},this.security=t,this.responses=r}function TN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function lae(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function uae(){this.description=sG,this.headers={},this.content={}}function Td(e,t){this.description=sG,this.content={"application/json":{schema:e}},this.headers=t}function eG(){this.description="successfully processed request, no content returned to client"}function dae(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Fs+r}}}},this.responses=n}function fae(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Fs+r}}}},this.responses=n}function tG(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function rG(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function yN(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function oG(e){this.$ref=`#/components/schemas/${e}`}function mae(e){this.type="array",this.items=new oG(e)}function RN(e,t,r){this.name=e,this.in=t,this.schema=r}var nG,aae,cS,Fs,sG,aG=ie(()=>{nG=w(Tt()),aae="3.0.3",cS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Fs="#/components/schemas/",sG="successful operation";o(iG,"generateJsonApi");o(cae,"Post");o(TN,"Get");o(lae,"Options");o(uae,"ResponseOptions200");o(Td,"Response200");o(eG,"Response204");o(dae,"Put");o(fae,"Patch");o(tG,"Delete");o(rG,"ResourceSchema");o(yN,"Type");o(oG,"Ref");o(mae,"ArrayRef");o(RN,"Parameter")});var lG={};Ie(lG,{Request:()=>ja,createReuseportFd:()=>lS});var cG,ja,AN,bN,lS,Fp=ie(()=>{cG=require("os"),ja=class{static{o(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 bN(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 AN(this._nodeRequest))}get host(){return this._nodeRequest.authority||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)}},AN=class{static{o(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)}},bN=class{static{o(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,cG.platform)()!="win32"&&(lS=require("node-unix-socket").createReuseportFd)});var dS={};Ie(dS,{parseHeaderValue:()=>wN,start:()=>Eae});async function hae(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&X_(e);let i=new Us;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==uG){let g=uS.getMatch(a,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new ci(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let A=wN(g);for(let S of A)switch(S.name){case"max-age":e.expiresAt=S.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=wN(u).map(A=>(A.next?.name==="confirm"&&A.next.value>=0&&(e.replicatedConfirmation=+A.next.value),A.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await At(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Oo(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new yd.ClientError(g,400)}if(e.authorize=!0,a===uG&&s==="GET"){if(e?.user?.role?.permission?.super_user)return iG(uS);throw new yd.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 yd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new yd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,IN.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let g=WH(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=ym(f.data,e,f)),f}else if(isFinite(p)){pae[0]=p;let g=String.fromCharCode(34,(Jr[0]&63)+62,(Jr[0]>>6)+(Jr[1]<<2&63)+62,(Jr[1]>>4)+(Jr[2]<<4&63)+62,(Jr[2]>>2)+62,(Jr[3]&63)+62,(Jr[3]>>6)+(Jr[4]<<2&63)+62,(Jr[4]>>4)+(Jr[5]<<4&63)+62,(Jr[5]>>2)+62,(Jr[6]&63)+62,(Jr[6]>>6)+(Jr[7]<<2&63)+62,34),A=r["if-none-match"];A&&g==A?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),IN.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=ym(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(a){a.statusCode?a.statusCode===500?Ei.warn(a):Ei.info(a):Ei.error(a),a.statusCode===405&&(a.method&&(a.message+=` to handle HTTP method ${a.method.toUpperCase()||""}`),a.allow&&(a.allow.push("trace","head","options"),i.setIfNone("Allow",a.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:a.statusCode||500,headers:i,body:void 0};return c.body=ym(a.contentType?a:mG(a),e,c),c}}function Eae(e){IN=e,e.includeExpensiveRecordCountEstimates&&(ja.prototype.includeExpensiveRecordCountEstimates=!0),!dG&&(dG=!0,uS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return hae(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{kp++;let s=new Xn;fG||(fG=!0,Bm(l=>{kp>0&&l.push({metric:"ws-connections",connections:kp,byThread:!0})}));let i;t.on("error",l=>{i=!0,Ei.warn(l)});let a;t.on("message",o(function(u){a||(a=Oo(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=a(u);Je(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{kp--,zr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=uS.getMatch(l,"ws");if(zr(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,Je(h=>({count:h.count,total:kp}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new ci(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await At(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await Co(p.value,r);t.send(h),Je(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?Ei.warn(l):Ei.info(l):Ei.error(l),t.close(_ae[l.statusCode]||1011,mG(l))}t.close()},e))}function wN(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,a]=s.trim().split("=");i=i.trim(),a&&(a=a.trim()),r={name:i.toLowerCase(),value:a,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var Ei,yd,mG,Jr,pae,IN,uG,dG,uS,fG,kp,_ae,pG=ie(()=>{Po();Ps();Ei=w(Q()),yd=w(_e());Z_();Nu();Ca();bp();aG();Fp();tg();({errorToString:mG}=Ei),Jr=new Uint8Array(8),pae=new Float64Array(Jr.buffer,0,1),IN={},uG="openapi";o(hae,"http");kp=0;o(Eae,"start");_ae={401:3e3,403:3003};o(wN,"parseHeaderValue")});var NN=M((vve,EG)=>{var{recordAction:fS,recordActionBinary:hG}=(Ps(),D(V_)),gae=require("fastify-plugin"),Sae=200;EG.exports=gae(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let a=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),fS(a,"duration",u,f,d),hG(s.raw.statusCode<400,"success",u,f,d),hG(1,"response_"+s.raw.statusCode,u,f,d);let m=Sae;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{fS(performance.now()-c,"transfer",u,f,d),fS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,fS(m,"bytes-sent",u,f,d));let p=a.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 gG=M((Uve,_G)=>{var Tae=ft(),yae={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};_G.exports=function(e){return Tae.validateObject(e,yae)}});var mS=M((xve,SG)=>{"use strict";var Rae=(H(),D(W)).OPERATIONS_ENUM,CN=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Rae.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};SG.exports=CN});var Gp={};Ie(Gp,{createTokens:()=>LN,getJWTRSAKeys:()=>gS,refreshOperationToken:()=>DN,validateOperationToken:()=>MN,validateRefreshToken:()=>SS});async function gS(){if(pS)return pS;try{let e=Hp.default.join(qp.default.getHdbBasePath(),gA),t=await hS.default.readFile(Hp.default.join(e,em.JWT_PASSPHRASE_NAME),"utf8"),r=await hS.default.readFile(Hp.default.join(e,em.JWT_PRIVATE_KEY_NAME),"utf8");return pS={publicKey:await hS.default.readFile(Hp.default.join(e,em.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},pS}catch(e){throw _S.default.error(e),new _i.ClientError(Ad.NO_ENCRYPTION_KEYS,Rd.INTERNAL_SERVER_ERROR)}}async function LN(e){let t=(0,ON.validateBySchema)(e,Xi.default.object({username:Xi.default.string().optional(),password:Xi.default.string().optional(),role:Xi.default.string().optional(),expires_in:Xi.default.alternatives(Xi.default.string(),Xi.default.number()).optional()}));if(t)throw new _i.ClientError(t.message);let r;try{let f=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,f=!1),r=await(0,PN.findAndValidateUser)(e.username,e.password,f)}catch(f){throw _S.default.error(f),new _i.ClientError(Ad.INVALID_CREDENTIALS,Rd.UNAUTHORIZED)}if(!r)throw new _i.ClientError(Ad.INVALID_CREDENTIALS,Rd.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 a=await gS(),c=await bd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??bG,algorithm:ES,subject:Id.OPERATION}),l=await bd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:Aae,algorithm:ES,subject:Id.REFRESH}),u=hw(l,kr.SHA256);if((await(0,TG.update)(new yG.default(Xf,Ru.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new _i.ClientError(Ad.REFRESH_TOKEN_SAVE_FAILED,Rd.INTERNAL_SERVER_ERROR);return RG.default.signalUserChange(new AG.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function DN(e){let t=(0,ON.validateBySchema)(e,Xi.default.object({refresh_token:Xi.default.string().required()}).required());if(t)throw new _i.ClientError(t.message);let{refresh_token:r}=e;await SS(r);let n=await gS(),s=await bd.default.decode(r);return{operation_token:await bd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:bG,algorithm:ES,subject:Id.OPERATION})}}async function MN(e){return IG(e,Id.OPERATION)}async function SS(e){return IG(e,Id.REFRESH)}async function IG(e,t){try{let r=await gS(),n=await bd.default.verify(e,r.publicKey,{algorithms:ES,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,PN.findAndValidateUser)(n.username,void 0,!1);if(t===Id.REFRESH&&!Ew(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw _S.default.warn(r),r?.name==="TokenExpiredError"?new _i.ClientError(Ad.TOKEN_EXPIRED,Rd.FORBIDDEN):new _i.ClientError(Ad.INVALID_TOKEN,Rd.UNAUTHORIZED)}}var bd,hS,Hp,Xi,ON,_i,_S,PN,TG,yG,RG,AG,qp,Rd,Ad,bG,Aae,ES,Id,pS,wd=ie(()=>{bd=w(require("jsonwebtoken")),hS=w(require("fs-extra")),Hp=w(require("node:path")),Xi=w(require("joi")),ON=w(ft());H();_i=w(_e()),_S=w(Q());gw();PN=w(kn()),TG=w(Bn()),yG=w(mS()),RG=w(ko()),AG=w(ns()),qp=w(ue()),{HTTP_STATUS_CODES:Rd,AUTHENTICATION_ERROR_MSGS:Ad}=_i.hdbErrors;qp.default.initSync();bG=qp.default.get(B.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Aae=qp.default.get(B.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",ES="RS256",Id={OPERATION:"operation",REFRESH:"refresh"};o(gS,"getJWTRSAKeys");o(LN,"createTokens");o(DN,"refreshOperationToken");o(MN,"validateOperationToken");o(SS,"validateRefreshToken");o(IG,"validateToken")});var vN=M((qve,CG)=>{"use strict";var bae=gG(),Nd=require("passport"),Iae=require("passport-local").Strategy,wae=require("passport-http").BasicStrategy,Nae=require("util"),Cae=kn(),NG=Nae.callbackify(Cae.findAndValidateUser),Hve=Kr(),Oae=(H(),D(W)),wG=(wd(),D(Gp));Nd.use(new Iae(function(e,t,r){NG(e,t,r)}));Nd.use(new wae(function(e,t,r){NG(e,t,r)}));Nd.serializeUser(function(e,t){t(null,e)});Nd.deserializeUser(function(e,t){t(null,e)});function Pae(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let a=e.headers.authorization.split(" ");n=a[0],s=a[1]}function i(a,c){return a?r(a):c?r(null,c):r("Must login")}switch(o(i,"handleResponse"),n){case"Basic":Nd.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Oae.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?wG.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):wG.validateOperationToken(s).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:Nd.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(Pae,"authorize");function Lae(e,t){let r=bae(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 a=i[e.schema].tables[e.table].attribute_permissions;for(let c in a)e.attributes.indexOf(a[c].attribute_name)>-1&&!a[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${a[c].attribute_name} `))}return t(null,n)}o(Lae,"checkPermissions");CG.exports={authorize:Pae,checkPermissions:Lae}});var TS=M(($ve,OG)=>{"use strict";var Dae=os();OG.exports={writeTransaction:Mae};function Mae(e,t,r){return Dae.writeTransaction(e,t,r)}o(Mae,"writeTransaction")});var MG=M((Yve,DG)=>{"use strict";var vae=fn(),Uae=mi(),PG=Q(),xae=Bn(),Kve=TS(),Bae=require("clone"),xN=require("alasql"),Fae=Dg(),LG=require("util"),kae=LG.promisify(Uae.getTableSchema),Hae=LG.promisify(vae.search),qae=(H(),D(W)),UN=oe();Fae(xN);DG.exports={update:$ae};var Gae="There was a problem performing this update. Please check the logs and try again.";async function $ae({statement:e,hdb_user:t}){let r=await kae(e.table.databaseid,e.table.tableid),n=Vae(e.columns);UN.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=Bae(s),c=UN.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=xN.parse(l).statements[0],d=await Hae(u),f=Kae(n,d);return Yae(a,f,t)}o($ae,"update");function Vae(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=xN.compile(`SELECT ${r.expression.toString()} AS [${qae.FUNC_VAL}] FROM ?`)}),t}catch(t){throw PG.error(t),new Error(Gae)}}o(Vae,"createUpdateRecord");function Kae(e,t){return UN.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(Kae,"buildUpdateRecords");async function Yae(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await xae.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){PG.error(`Error delete new_attributes from update response: ${i}`)}return s}o(Yae,"updateRecords")});var UG=M((Qve,vG)=>{var Wae=require("alasql"),zae=fn(),jae=Q(),Qae=os(),FN=require("util"),BN=oe(),Jae=(H(),D(W)),Xae=mi(),zve=TS(),jve=Bn(),Zae="record",ece="successfully deleted",tce=FN.callbackify(ice),rce=FN.promisify(zae.search),nce=FN.promisify(Xae.getTableSchema);vG.exports={convertDelete:tce};function sce(e){return`${e.deleted_hashes.length} ${Zae}${e.deleted_hashes.length===1?"":"s"} ${ece}`}o(sce,"generateReturnMessage");async function ice({statement:e,hdb_user:t}){let r=await nce(e.table.databaseid,e.table.tableid);BN.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=BN.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Wae.parse(a).statements[0],l={operation:Jae.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await rce(c);let u=await Qae.deleteRecords(l);return BN.isEmptyOrZeroLength(u.message)&&(u.message=sce(u)),delete u.txn_time,u}catch(u){throw jae.error(u),u.hdb_code?u.message:u}}o(ice,"convertDelete")});var Ol=M((Zve,kG)=>{"use strict";var Xve=fn(),$p=Q(),{validateBySchema:xG}=ft(),Cl=require("joi"),oce=Wi(),yS=oe(),{handleHDBError:RS,hdbErrors:ace,ClientError:BG}=_e(),{HDB_ERROR_MSGS:AS,HTTP_STATUS_CODES:kN}=ace,FG=ue();FG.initSync();var{getDatabases:HN}=(Oe(),D(mt)),cce=require("fs-extra"),lce=(H(),D(W));kG.exports={describeAll:uce,describeTable:bS,describeSchema:dce};async function uce(e={}){try{let t=yS.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=HN(),a={},c={},l=[],u=e?.exact_count;for(let f in i){a[f]=!0,!t&&!s&&!r&&(c[f]=e.hdb_user?.role?.permission[f]?.describe);let m=i[f];for(let p in m)try{let h;if(t||s||r)h=await bS({schema:f,table:p,exactCount:u});else if(n&&n[f].describe&&n[f].tables[p].describe){let E=n[f].tables[p].attribute_permissions;h=await bS({schema:f,table:p,exactCount:u},E)}h&&l.push(h)}catch(h){$p.error(h)}}let d={};for(let f in l)t||s||r?(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]):c[l[f].schema]&&(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]);for(let f in a)t||s||r?d[f]={}:c[f]&&(d[f]={});return d}catch(t){return $p.error("Got an error in describeAll"),$p.error(t),RS(new Error,AS.DESCRIBE_ALL_ERR)}}o(uce,"describeAll");async function bS(e,t){yS.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=xG(e,Cl.object({database:Cl.string(),table:Cl.string().required(),exact_count:Cl.boolean().strict()}));if(i)throw new BG(i.message);let c=HN()[r];if(!c)throw RS(new Error,AS.SCHEMA_NOT_FOUND(e.schema),kN.NOT_FOUND);let l=c[n];if(!l)throw RS(new Error,AS.TABLE_NOT_FOUND(e.schema,e.table),kN.NOT_FOUND);function u(p){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,properties:p.properties?p.properties.map(h=>({type:h.type,name:h.name})):void 0})}o(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 cce.stat(l.primaryStore.env.path)).size}catch(p){$p.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")),FG.get(lce.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=oce.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){$p.warn(`unable to stat table dbi due to ${p}`)}return m}o(bS,"descTable");async function dce(e){yS.transformReq(e);let t=xG(e,Cl.object({database:Cl.string(),exact_count:Cl.boolean().strict()}));if(t)throw new BG(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=HN()[n];if(!i)throw RS(new Error,AS.SCHEMA_NOT_FOUND(e.schema),kN.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),yS.isEmpty(l)||l.describe){let u=await bS({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(a[u.name]=u)}}return a}o(dce,"describeSchema")});var VG=M((tUe,$G)=>{"use strict";var fce=Ol(),{hdbErrors:HG}=_e(),{getDatabases:qG}=(Oe(),D(mt));$G.exports={checkSchemaExists:GG,checkSchemaTableExists:mce,schemaDescribe:fce};async function GG(e){if(!qG()[e])return HG.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(GG,"checkSchemaExists");async function mce(e,t){let r=await GG(e);if(r)return r;if(!qG()[e][t])return HG.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(mce,"checkSchemaTableExists")});var KN=M((oUe,r$)=>{"use strict";var{decode:pce}=require("msgpackr"),{isMainThread:nUe,parentPort:sUe,threadId:iUe}=require("worker_threads"),NS=sr(),Cd=wt(),$N=(H(),D(W)),hn=Q(),GN=ue(),hce=(H(),D(W)),{onMessageByType:Ece}=nt(),zG=Wi(),{recordAction:KG,recordActionBinary:_ce}=(Ps(),D(V_)),{publishToStream:gce}=NS,{ConsumerEvents:YG}=require("nats"),Sce=fn(),{promisify:Tce}=require("util"),{decodeBlobsWithWrites:yce}=(Ns(),D(nb)),jG=Tce(setTimeout),CS=1e4,OS,wS,Rce,Ace,QG,Vp=new Map,Od=new Map;r$.exports={initialize:JG,ingestConsumer:VN,setSubscription:bce,setIgnoreOrigin:Nce,getDatabaseSubscriptions:wce,updateConsumer:XG};async function JG(){Ece($N.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await XG(n)}),QG=!0,hn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await NS.getNATSReferences();OS=e,wS=e.info.server_name,Rce=t,Ace=r}o(JG,"initialize");async function XG(e){if(e.status==="start"){let{js:t,jsm:r}=await ZG(e.node_domain_name);VN(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Vp.get(e.stream_name+e.node_domain_name);t&&(hn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Vp.set(e.stream_name+e.node_domain_name,"close")),Od.get(e.node_domain_name)==="failed"&&Od.set(e.node_domain_name,"close")}}o(XG,"updateConsumer");var PS=new Map;function bce(e,t,r){let n=PS.get(e);n||PS.set(e,n=new Map),n.set(t,r),QG||JG().then(Ice)}o(bce,"setSubscription");async function Ice(){let e=await Sce.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+Cd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await ZG(r),!n))break;let{schema:a,table:c}=i,l=zG.createNatsTableStreamName(a,c);VN(l,n,s,r)}}}o(Ice,"accessConsumers");async function ZG(e){let t,r,n=1;for(;!r;)try{t=await OS.jetstream({domain:e}),r=await OS.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Od.get(e)==="close")break;Od.set(e,"failed"),n%10===1&&hn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<CS?n++*100:CS;await jG(i)}return{js:t,jsm:r}}o(ZG,"connectToRemoteJS");function wce(){return PS}o(wce,"getDatabaseSubscriptions");var e$;function Nce(e){e$=e}o(Nce,"setIgnoreOrigin");var t$=100,WG=new Array(t$),IS=0;async function VN(e,t,r,n){let{connection:s}=await NS.getNATSReferences();OS=s,wS=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,wS),hn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Od.get(n)==="close")break;a%10===1&&hn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(hn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await NS.createConsumer(r,e,wS,new Date(Date.now()).toISOString()));let d=a++*100<CS?a++*100:CS;await jG(d)}let c=!1,l;for(;!c;){if(Vp.get(e+n)==="close"||Od.get(n)==="close"){Vp.delete(e+n),c=!0;continue}l=await i.consume({max_messages:GN.get($N.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Vp.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===YG.ConsumerDeleted&&(await l.close(),c=!0),d.type===YG.HeartbeatsMissed){let f=d.data;hn.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(hn.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 WG[IS],WG[IS]=Cce(d).catch(f=>{hn.error(f)}),++IS>=t$&&(IS=0)}catch(d){d.message==="consumer deleted"?(hn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):hn.error("Error consuming clustering ingest, restarting consumer",d)}}}o(VN,"ingestConsumer");async function Cce(e){let t;await yce(()=>{t=pce(e.data)}),KG(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),hn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=GN.get($N.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Cd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Cd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Cd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!e$),_ce(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Cd.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:a,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:p}=t;hn.trace("processing message:",a,c,u,(d?"records: "+d.map(O=>O?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),hn.trace(`messageProcessor nats msg id: ${e.headers.get(Cd.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(O=>h=O),{timestamp:g,user:A,node_name:S}=m||{},R=PS.get(c)?.get(u);if(!R)throw new Error(`Missing table for replication message: ${u}`);if(a==="define_schema")t.type=a,t.onCommit=h,R.send(t);else if(d.length===1&&!l)R.send({type:qN(a),value:d[0],id:f?.[0],expiresAt:p,timestamp:g,table:u,onCommit:h,user:A,nodeName:S});else{let O=d.map((F,te)=>({type:qN(a),value:F,expiresAt:p,id:f?.[te],table:u}));for(;l;)O.push({type:qN(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;R.send({type:"transaction",writes:O,table:u,timestamp:g,onCommit:h,user:A,nodeName:S})}GN.get(hce.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&gce(e.subject.split(".").slice(0,-1).join("."),zG.createNatsTableStreamName(c,u),e.headers,e.data),await E;let N=Date.now()-g;g&&KG(N,"replication-latency",e.subject,a,"ingest")}catch(a){hn.error(a)}e.ack()}o(Cce,"messageProcessor");function qN(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(qN,"convertOperation")});var sr=M((mUe,S$)=>{"use strict";var Gr=ue();Gr.initSync();var Oce=require("fs-extra"),Pce=require("semver"),Wp=require("path"),{monotonicFactory:Lce}=require("ulidx"),s$=Lce(),Dce=require("util"),i$=require("child_process"),Mce=Dce.promisify(i$.exec),vce=i$.spawn,Xr=wt(),et=(H(),D(W)),{packageJson:Uce,PACKAGE_ROOT:xce}=Tt(),LS=oe(),gi=Q(),DS=Wi(),Bce=TS(),Kp=yt(),{broadcast:Fce,onMessageByType:kce,getWorkerIndex:Hce}=nt(),{isMainThread:o$}=require("worker_threads"),{Encoder:qce,decode:jN}=require("msgpackr"),a$=new qce,{isEmpty:Ml}=LS,c$=kn(),cUe=48*36e11;o$&&kce(et.ITC_EVENT_TYPES.RESTART,()=>{En=void 0,Dl=void 0});var{connect:Gce,StorageType:$ce,RetentionPolicy:Vce,AckPolicy:QN,DeliverPolicy:JN,DiscardPolicy:Kce,NatsConnection:lUe,JetStreamManager:uUe,JetStreamClient:dUe,StringCodec:fUe,JSONCodec:Yce,createInbox:XN,headers:Wce,ErrorCode:n$}=require("nats"),{recordAction:zce}=(Ps(),D(V_)),{encodeBlobsAsBuffers:jce}=(Ns(),D(nb)),l$=Yce(),Qce="clustering",Jce=Uce.engines[Xr.NATS_SERVER_NAME],Xce=Wp.join(xce,"dependencies"),zN=Wp.join(Xce,`${process.platform}-${process.arch}`,Xr.NATS_BINARY_NAME),YN,WN,Yp,Pl,Ll;S$.exports={runCommand:u$,checkNATSServerInstalled:Zce,createConnection:ZN,getConnection:zp,getJetStreamManager:jp,getJetStream:f$,getNATSReferences:Zi,getServerList:tle,createLocalStream:eC,listStreams:m$,deleteLocalStream:rle,getServerConfig:Pd,listRemoteStreams:nle,viewStream:sle,viewStreamIterator:ile,publishToStream:ole,request:lle,reloadNATS:tC,reloadNATSHub:ule,reloadNATSLeaf:dle,extractServerName:cle,requestErrorHandler:fle,createLocalTableStream:_$,createTableStreams:hle,purgeTableStream:g$,purgeSchemaTableStreams:Ele,getStreamInfo:_le,updateLocalStreams:Sle,closeConnection:ele,getJsmServerName:MS,addNatsMsgHeader:p$,clearClientCache:d$,updateRemoteConsumer:mle,createConsumer:h$,updateConsumerIterator:ple};async function u$(e,t=void 0){let{stdout:r,stderr:n}=await Mce(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
16
16
|
`,""));return r.replace(`
|
|
17
|
-
`,"")}o(a$,"runCommand");async function jce(){try{await Ice.access(zN)}catch{return!1}let e=await a$(`${zN} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return wce.eq(t,Wce)}o(jce,"checkNATSServerInstalled");async function ZN(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await i$.getClusterUser();if(Ml(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}gi.trace("create nats connection called");let i=await Fce({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Gr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Gr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Gr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),gi.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(a=>{a&&gi.error("Error with Nats client connection, connection closed",a),i===En&&c$()}),i}o(ZN,"createConnection");function c$(){En=void 0,Pl=void 0,Ll=void 0,Dl=void 0}o(c$,"clearClientCache");async function Qce(){En&&(await En.drain(),En=void 0,Pl=void 0,Ll=void 0,Dl=void 0)}o(Qce,"closeConnection");var En,Dl;async function zp(){return Dl||(Dl=ZN(Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),En=await Dl),En||Dl}o(zp,"getConnection");async function jp(){if(Pl)return Pl;Ml(En)&&await zp();let{domain:e}=Pd(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ml(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Pl=await En.jetstreamManager({domain:e,timeout:6e4}),Pl}o(jp,"getJetStreamManager");async function l$(){if(Ll)return Ll;Ml(En)&&await zp();let{domain:e}=Pd(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ml(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ll=En.jetstream({domain:e,timeout:6e4}),Ll}o(l$,"getJetStream");async function Zi(){let e=En||await zp(),t=Pl||await jp(),r=Ll||await l$();return{connection:e,jsm:t,js:r}}o(Zi,"getNATSReferences");async function Jce(e){let t=Gr.get(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await i$.getClusterUser(),s=await ZN(t,r,n),i=XN(),a=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of a){let f=o$.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 LS.asyncSetTimeout(e),await a.drain(),await s.close(),await u,c}o(Jce,"getServerList");async function eC(e,t){let{jsm:r}=await Zi(),n=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:kce.File,retention:Hce.Limits,subjects:t,discard:qce.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(eC,"createLocalStream");async function u$(){let{jsm:e}=await Zi(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o(u$,"listStreams");async function Xce(e){let{jsm:t}=await Zi();await t.streams.delete(e)}o(Xce,"deleteLocalStream");async function Zce(e){let{connection:t}=await Zi(),r=[],n=XN(),s=t.subscribe(n),i=(async()=>{for await(let a of s)r.push(o$.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}o(Zce,"listRemoteStreams");async function ele(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Zi(),i=t$(),a={durable_name:i,ack_policy:QN.Explicit};t&&(a.deliver_policy=JN.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);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=jN(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(Xr.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}o(ele,"viewStream");async function*tle(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Zi(),i=t$(),a={durable_name:i,ack_policy:QN.Explicit};t&&(a.deliver_policy=JN.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);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=jN(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(Xr.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}o(tle,"viewStreamIterator");async function rle(e,t,r,n){gi.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=d$(n,r);let{js:s}=await Zi(),i=await MS(),a=`${e}.${i}`,c=await Kce(()=>n instanceof Uint8Array?n:s$.encode(n));try{gi.trace(`publishToStream publishing to subject: ${a}`),Vce(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(a,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return m$(async()=>{try{await s.publish(a,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){gi.trace(`publishToStream creating stream: ${t}`);let d=a.split(".");d[2]="*",await eC(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(rle,"publishToStream");function d$(e,t){t===void 0&&(t=$ce());let r=Gr.get(et.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Xr.MSG_HEADERS.ORIGIN)&&r&&t.append(Xr.MSG_HEADERS.ORIGIN,r),t}o(d$,"addNatsMsgHeader");function Pd(e){e=e.toLowerCase();let t=Wp.join(Gr.get(et.CONFIG_PARAMS.ROOTPATH),Yce);if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ml(WN)&&(WN={port:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.HUB,config_file:Xr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Wp.join(t,Xr.PID_FILES.HUB),hdbNatsPath:t}),WN;if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ml(YN)&&(YN={port:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.LEAF,config_file:Xr.NATS_CONFIG_FILES.LEAF_SERVER,domain:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.LEAF,pid_file_path:Wp.join(t,Xr.PID_FILES.LEAF),hdbNatsPath:t}),YN;gi.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(Pd,"getServerConfig");async function f$(e,t,r,n){try{await e.consumers.add(t,{ack_policy:QN.Explicit,durable_name:r,deliver_policy:JN.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(f$,"createConsumer");async function nle(e,t,r){await e.consumers.delete(t,r)}o(nle,"removeConsumer");function sle(e){return e.split(".")[1]}o(sle,"extractServerName");async function ile(e,t,r=6e4,n=XN()){if(!LS.isObject(t))throw new Error("data param must be an object");let s=s$.encode(t),{connection:i}=await Zi(),a={timeout:r};n&&(a.reply=n,a.noMux=!0);let c=await i.request(e,s,a);return jN(c.data)}o(ile,"request");function tC(e){return new Promise(async(t,r)=>{let n=Pce(zN,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",a=>{r(a)}),n.stdout.on("data",a=>{i+=a.toString()}),n.stderr.on("data",a=>{s+=a.toString()}),n.stderr.on("close",a=>{s&&r(s),t(i)})})}o(tC,"reloadNATS");async function ole(){let{pid_file_path:e}=Pd(et.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await tC(e)}o(ole,"reloadNATSHub");async function ale(){let{pid_file_path:e}=Pd(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await tC(e)}o(ale,"reloadNATSLeaf");function cle(e,t,r){let n;switch(e.code){case e$.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case e$.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(cle,"requestErrorHandler");async function lle(e,t){let r=t+Xr.SERVER_SUFFIX.LEAF,{connection:n}=await Zi(),{jsm:s}=await _le(r),{schema:i,table:a}=e,c=DS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await m$(async()=>{if(e.subscribe===!0)await f$(s,c,n.info.server_name,l);else try{await nle(s,c,n.info.server_name)}catch(u){gi.trace(u)}})}o(lle,"updateRemoteConsumer");async function ule(e,t,r,n){let s=DS.createNatsTableStreamName(e,t),i=r+Xr.SERVER_SUFFIX.LEAF,a={type:et.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!n$&&xce()<Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=KN();await c(a)}await vce(a),n==="stop"&&await LS.asyncSetTimeout(1e3)}o(ule,"updateConsumerIterator");function m$(e){return Mce.writeTransaction(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o(m$,"exclusiveLock");async function p$(e,t){let r=DS.createNatsTableStreamName(e,t),n=await MS(),s=ple(e,t,n);await eC(r,[s])}o(p$,"createLocalTableStream");async function dle(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await p$(n,s)}}o(dle,"createTableStreams");async function h$(e,t,r=void 0){if(Gr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=DS.createNatsTableStreamName(e,t),{domain:s}=Pd(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await zp()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")gi.warn(n);else throw n}}o(h$,"purgeTableStream");async function fle(e,t){if(Gr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await h$(e,t[r])}o(fle,"purgeSchemaTableStreams");async function mle(e){return(await jp()).streams.info(e)}o(mle,"getStreamInfo");function ple(e,t,r){return`${Xr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(ple,"createSubjectName");async function MS(){if(Yp)return Yp;if(Yp=(await jp())?.nc?.info?.server_name,Yp===void 0)throw new Error("Unable to get jetstream manager server name");return Yp}o(MS,"getJsmServerName");async function hle(){let e=await jp(),t=await MS(),r=await u$();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=Ele(n),c=i.split(".");if(c[c.length-1]===t&&!a||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");gi.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}o(hle,"updateLocalStreams");function Ele(e){let{config:t}=e,r=!1,n=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Gr.get(et.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}o(Ele,"updateStreamLimits");async function _le(e){let t,r;try{t=await En.jetstream({domain:e}),r=await En.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw gi.error("Unable to connect to:",e),n}return{js:t,jsm:r}}o(_le,"connectToRemoteJS")});function rC(e){let t=e.get(vS),r=t?(0,Ld.unpack)(t):null;r||(r={remoteNameToId:{}});let n=it(),s=!1;r.nodeName=it();let i=r.remoteNameToId;if(i[n]!==0){let a=0,c;for(let l in i){let u=i[l];u===0?c=l:u>a&&(a=u)}if(c){a++,i[c]=a;let l=[Symbol.for("seq"),a];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:Jp(e)??1,nodes:[]})})}i[n]=0,e.putSync(vS,(0,Ld.pack)(r))}return r}function Qp(e){return rC(e).remoteNameToId}function g$(e,t){let r=rC(t),n=r.remoteNameToId,s=new Map,i=!1;for(let a in e){let c=e[a],l=n[a];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[a]=l,i=!0}s.set(c,l)}return i&&t.putSync(vS,(0,Ld.pack)(r)),s}function US(e,t){let r=rC(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let a in n){let c=n[a];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(vS,(0,Ld.pack)(r))}return _$.trace?.("The remote node name map",e,n,s),s}var _$,Ld,vS,nC=ie(()=>{_$=w(Zn());us();Ld=require("msgpackr"),vS=Symbol.for("remote-ids");o(rC,"getIdMappingRecord");o(Qp,"exportIdMapping");o(g$,"remoteToLocalNodeId");o(US,"getIdOfRemoteNode")});var sC={};Ie(sC,{commitsAwaitingReplication:()=>Md,getHDBNodeTable:()=>Yt,getReplicationSharedStatus:()=>vd,iterateRoutes:()=>Zp,shouldReplicateToNode:()=>Xp,subscribeToNodeUpdates:()=>Ud});function Yt(){return S$||(S$=Xe({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function vd(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function Ud(e){Yt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;A$.debug?.("adding node",n,"on node",it()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==it()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Yt().search({}))if(i.shard!=null){let a=s.get(i.shard);a||s.set(i.shard,a=[]),a.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function Xp(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&Yt().primaryStore.get(it())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function gle(){Ud(e=>{Qa({},(t,r)=>{let n=e.name,s=T$.get(n);if(s||T$.set(n,s=new Map),s.has(r))return;let i;for(let a in t)if(i=t[a].auditStore,i)break;if(i){let a=vd(i,r,n,()=>{let c=a[0],l=a.lastTime;for(let{txnTime:u,onConfirm:d}of Md.get(r)||[])u>l&&u<=c&&d();a.lastTime=c});a.lastTime=0,s.set(r,a)}})})}function*Zp(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=Dd.default.get(B.REPLICATION_SECUREPORT)??(!Dd.default.get(B.REPLICATION_PORT)&&Dd.default.get(B.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Dd.default.get(B.REPLICATION_PORT)||Dd.default.get(B.OPERATIONSAPI_NETWORK_PORT);let a=i?.lastIndexOf?.(":");a>0&&(i=+i.slice(a+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){y$.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 y$,R$,Dd,A$,S$,T$,Md,vl=ie(()=>{Oe();us();hm();y$=require("worker_threads"),R$=w(_e()),Dd=w(ue());H();A$=w(Zn());server.nodes=[];o(Yt,"getHDBNodeTable");o(vd,"getReplicationSharedStatus");o(Ud,"subscribeToNodeUpdates");o(Xp,"shouldReplicateToNode");T$=new Map;uU((e,t,r)=>{if(r>server.nodes.length)throw new R$.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Md||(Md=new Map,gle());let n=Md.get(e);return n||(n=[],Md.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:o(()=>{++i===r&&s()},"onConfirm")})})});o(gle,"startSubscriptionToReplications");o(Zp,"iterateRoutes")});var C$={};Ie(C$,{connectedToNode:()=>Ul,disconnectedFromNode:()=>Bd,ensureNode:()=>Yo,requestClusterStatus:()=>N$,startOnMainThread:()=>oC});async function oC(e){let t=0,r=at();for(let i of Object.getOwnPropertyNames(r)){let a=r[i];for(let c in a){let l=a[c];if(l.auditStore){xS.set(i,Jp(l.auditStore));break}}}to.whenThreadsStarted.then(async()=>{let i=[];for await(let l of r.system.hdb_nodes?.search([])||[])i.push(l);let a=it();function c(){let l=Yt().primaryStore.get(a);if(l!==null){let u=e.url??Ja();if(l===void 0||l.url!==u||l.shard!==e.shard)return Yo(a,{name:a,url:u,shard:e.shard,replicates:!0})}}o(c,"ensureThisNode"),Yt().primaryStore.get(a)&&c();for(let l of Zp(e))try{let u=!l.subscriptions;if(u&&await c(),u&&l.replicates==null&&(l.replicates=!0),i.find(d=>d.url===l.url))continue;s(l)}catch(u){console.error(u)}Ud(s)});let n;function s(i,a=i?.name){let c=it()&&a===it()||Ja()&&i?.url===Ja();if(c){let f=!!i?.replicates;if(n!==void 0&&n!==f)for(let m of Yt().search([]))m.replicates&&m.name!==a&&s(m,m.name);n=f}if(ut.trace("Setting up node replication for",i),!i){for(let[f,m]of eo){let p;for(let[h,{worker:E,nodes:g}]of m){let A=g[0];if(A&&A.name==a){p=!0;for(let[S,{worker:R}]of m)m.delete(S),ut.warn("Node was deleted, unsubscribing from node",a,S,f),R?.postMessage({type:"unsubscribe-from-node",node:a,database:S,url:f});break}}if(p){eo.get(f).iterator.remove(),eo.delete(f);return}}return}if(c)return;if(!i.url){ut.info(`Node ${i.name} is missing url`);return}let l=eo.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(ut.info(`Added node ${i.name} at ${i.url} for process ${it()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[f,m]of xd)if(i.url===m.url){xd.delete(f);break}xd.set(i.name,i)}let u=at();if(l||(l=new Map,eo.set(i.url,l)),l.iterator=Qa(e,(f,m,p)=>{p?d(m,!0):d(m,!1)}),i.subscriptions)for(let f of i.subscriptions){let m=f.database||f.schema;u[m]||(ut.warn(`Database ${m} not found for node ${i.name}, making a subscription anyway`),d(m,!1))}function d(f,m){ut.trace("Setting up replication for database",f,"on node",i.name);let p=l.get(f),h,E=[{replicateByDefault:m,...i}];xS.has(f)&&(E.push({replicateByDefault:m,name:it(),startTime:xS.get(f),endTime:Date.now(),replicates:!0}),xS.delete(f));let g=Xp(i,f),A=to.workers.filter(S=>S.name==="http");if(p?(h=p.worker,p.nodes=E):g&&(t=t%A.length,h=A[t++],l.set(f,{worker:h,nodes:E,url:i.url}),h?.on("exit",()=>{l.get(f)?.worker===h&&(l.delete(f),d(f,m))})),g)setTimeout(()=>{let S={type:"subscribe-to-node",database:f,nodes:E};h?h.postMessage(S):eh(S)},Sle);else{ut.info("Node no longer should be used, unsubscribing from node",{replicates:i.replicates,databaseName:f,node:i,subscriptions:i.subscriptions,hasDatabase:!!u[f],thisReplicates:Yt().primaryStore.get(it())?.replicates}),Yt().primaryStore.get(it())?.replicates||(n=!1,ut.info("Disabling replication, this node name",it(),Yt().primaryStore.get(it()),f));let S={type:"unsubscribe-from-node",database:f,url:i.url,name:i.name};h?h.postMessage(S):FS(S)}}o(d,"onDatabase")}o(s,"onNodeUpdate"),Bd=o(function(i){try{ut.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let a=Array.from(xd.keys()),c=a.sort(),l=c.indexOf(i.name||Si(i.url));if(l===-1){ut.warn("Disconnected node not found in node map",i.name,a);return}let u=eo.get(i.url),d=u?.get(i.database);if(!d){ut.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished||!iC.default.get(B.REPLICATION_FAILOVER))return;let f=d.nodes[0];if(!(f.replicates===!0||f.replicates?.sends||f.subscriptions?.length))return;let m=f.shard,p=(l+1)%c.length;for(;l!==p;){let h=c[p],E=xd.get(h);u=eo.get(E.url);let g=u?.get(i.database);if(!g||g.connected===!1||g.nodes[0].shard!==m){p=(p+1)%c.length;continue}let{worker:A,nodes:S}=g,R=!1;for(let N of d.nodes){if(S.some(O=>O.name===N.name)){ut.info(`Disconnected node is already failing over to ${h} for ${i.database}`);continue}N.endTime<Date.now()||(S.push(N),R=!0)}if(d.nodes=[d.nodes[0]],!R){ut.info(`Disconnected node ${i.name} has no nodes to fail over to ${h}`);return}ut.info(`Failing over ${i.database} from ${i.name} to ${h}`),A?A.postMessage({type:"subscribe-to-node",database:i.database,nodes:S}):eh({database:i.database,nodes:S});return}ut.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(a){ut.error("Error failing over node",a)}},"disconnectedFromNode"),Ul=o(function(i){let a=eo.get(i.url),c=a?.get(i.database);if(!c){ut.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,a);return}c.connected=!0,c.latency=i.latency;let l=c.nodes[0];if(!l){ut.warn("Newly connected node has no node subscriptions",i.database,c);return}if(!l.name){ut.debug("Connected node is not named yet",i.database,c);return}c.nodes=[l];let u=!1;for(let d of eo.values()){let f=d.get(i.database);if(!f||f==c)continue;let{worker:m,nodes:p,connected:h}=f;if(p)if(h===!1&&p[0].shard===l.shard)u=!0,c.nodes.push(p[0]);else{let E=p.filter(g=>g&&g.name!==l.name);E.length<p.length&&(f.nodes=E,m.postMessage({type:"subscribe-to-node",database:i.database,nodes:p}))}}u&&c.worker&&c.worker.postMessage({type:"subscribe-to-node",database:i.database,nodes:c.nodes})},"connectedToNode"),(0,to.onMessageByType)("disconnected-from-node",Bd),(0,to.onMessageByType)("connected-to-node",Ul),(0,to.onMessageByType)("request-cluster-status",N$)}function N$(e,t){let r=[];for(let[n,s]of xd)try{let i=eo.get(s.url);ut.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let a=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)a.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(p=>!(p.endTime<Date.now())).map(p=>p.name)});let c=I$(s);c.database_sockets=a,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ut.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function Yo(e,t){let r=Yt();e=e??Si(t.url),t.name=e;try{if(t.ca){let s=new w$.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){ut.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ut.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!iC.default.get(B.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],a=I$(n[s]);for(let c of t[s]){let l=!1;for(let u of a)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=[...a,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ut.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var to,BS,ut,b$,iC,w$,I$,Sle,eo,Bd,Ul,xd,xS,th=ie(()=>{Oe();to=w(nt());us();BS=require("worker_threads");vl();ut=w(Q()),b$=w(require("lodash")),iC=w(ue());H();w$=require("crypto"),{cloneDeep:I$}=b$.default,Sle=200,eo=new Map,xd=new Map,xS=new Map;o(oC,"startOnMainThread");o(N$,"requestClusterStatus");BS.parentPort&&(Bd=o(e=>{BS.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Ul=o(e=>{BS.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,to.onMessageByType)("subscribe-to-node",e=>{eh(e)}),(0,to.onMessageByType)("unsubscribe-from-node",e=>{FS(e)}));o(Yo,"ensureNode")});var fs=M(Wt=>{"use strict";var pr=require("path"),{watch:Tle}=require("chokidar"),Hn=require("fs-extra"),Fd=require("node-forge"),v$=require("net"),{generateKeyPair:aC,X509Certificate:Wo,createPrivateKey:U$}=require("crypto"),yle=require("util");aC=yle.promisify(aC);var Nt=Fd.pki,Ti=require("joi"),{v4:x$}=require("uuid"),{validateBySchema:dC}=ft(),{forComponent:Rle}=Q(),ds=ue(),ks=(H(),D(W)),{CONFIG_PARAMS:Bl}=ks,yi=AA(),{ClientError:Xa}=_e(),HS=require("node:tls"),{relative:B$,join:Ale}=require("node:path"),{CERTIFICATE_VALUES:O$}=yi,ble=Hc(),cC=Tt(),{table:Ile,getDatabases:wle,databases:kS}=(Oe(),D(mt)),{getJWTRSAKeys:P$}=(wd(),D(Gp)),je=Rle("tls").conditional;Wt.generateKeys=pC;Wt.updateConfigCert=K$;Wt.createCsr=Mle;Wt.signCertificate=vle;Wt.setCertTable=kd;Wt.loadCertificates=G$;Wt.reviewSelfSignedCert=EC;Wt.createTLSSelector=W$;Wt.listCertificates=j$;Wt.addCertificate=Hle;Wt.removeCertificate=Gle;Wt.createNatsCerts=Ble;Wt.generateCertsKeys=xle;Wt.getReplicationCert=nh;Wt.getReplicationCertAuth=Dle;Wt.renewSelfSigned=Fle;Wt.hostnamesFromCert=gC;Wt.getKey=$le;Wt.getHostnamesFromCertificate=Vle;Wt.getPrimaryHostName=_C;var{urlToNodeName:F$,getThisNodeUrl:Nle,getThisNodeName:GS,clearThisNodeName:Cle}=(us(),D(zo)),{readFileSync:Ole,statSync:k$}=require("node:fs"),IUe=ue(),{getTicketKeys:Ple,onMessageFromWorkers:Lle}=nt(),{isMainThread:H$}=require("worker_threads"),{TLSSocket:q$,createSecureContext:wUe}=require("node:tls"),fC=3650,rh=["127.0.0.1","localhost","::1"],mC=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];Lle(async e=>{e.type===ks.ITC_EVENT_TYPES.RESTART&&(ds.initSync(!0),await EC())});var Zr;function ec(){return Zr||(Zr=wle().system.hdb_certificate,Zr||(Zr=Ile({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__"}]}))),Zr}o(ec,"getCertTable");async function nh(){let e=W$("operations-api"),t={secureContexts:null,setSecureContext:o(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(GS());if(!r)return;let n=new Wo(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}o(nh,"getReplicationCert");async function Dle(){ec();let e=(await nh()).options.cert,r=new Wo(e).issuer.match(/CN=(.*)/)?.[1];return Zr.get(r)}o(Dle,"getReplicationCertAuth");var L$,Za=new Map;function G$(){if(L$)return;L$=!0;let e=[{configKey:Bl.TLS},{configKey:Bl.OPERATIONSAPI_TLS}];ec();let t=pr.dirname(cC.getConfigFilePath()),r;for(let{configKey:n}of e){let s=cC.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&B$(Ale(t,"keys"),a);c&&D$(a,l=>{Za.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&H$){let d;D$(u,f=>{if(O$.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=Y$(u),h=new Wo(p),E;try{E=_C(h)}catch(R){je.error?.("error extracting host name from certificate",R);return}if(E==null){je.error?.("No host name found on certificate");return}if(h.checkIssued(new Wo(O$.cert)))return;let g=Zr.primaryStore.get(E),A=k$(u).mtimeMs,S=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&A<=S){A<S&&je.info?.(`Certificate ${E} at ${u} is older (${new Date(A)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=Zr.put({name:E,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:p,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:A,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}o(G$,"loadCertificates");function D$(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&H$&&je.warn?.(`Reloading ${r}:`,i),n=c,t(Y$(i)))}catch(c){je.error?.(`Error loading ${r}:`,i,c)}},"loadFile");Hn.existsSync(e)?s(e,k$(e)):je.error?.(`${r} file not found:`,e),Tle(e,{persistent:!1}).on("change",s)}o(D$,"loadAndWatch");function lC(){let e=Nle();if(e==null){let t=rh[0];return je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return F$(e)}o(lC,"getHost");function qS(){let e=GS();if(e==null){let t=rh[0];return je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}o(qS,"getCommonName");async function Mle(){let e=await nh(),t=Nt.certificateFromPem(e.options.cert),r=Nt.privateKeyFromPem(e.options.key);je.info?.("Creating CSR with cert named:",e.name);let n=Nt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:qS()},...mC];je.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:$$()}];return je.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Fd.pki.certificationRequestToPem(n)}o(Mle,"createCsr");function $$(){let e=rh.includes(qS())?rh:[...rh,qS()];return e.includes(lC())||e.push(lC()),[{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=>v$.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o($$,"certExtensions");async function vle(e){let t={},r=pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;ec();for await(let d of Zr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(Za.has(d.private_key_name)){n=Za.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await Hn.exists(pr.join(r,d.private_key_name))){n=Hn.readFile(pr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await uC();s=d.ca,n=d.private_key}n=Nt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Nt.certificateFromPem(s.certificate);je.info?.("Signing CSR with cert named",s.name);let a=Nt.certificationRequestFromPem(e.csr);try{a.verify()}catch(d){return je.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=Fd.pki.createCertificate();c.serialNumber="0"+Math.random().toString().slice(2,9),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+fC),je.info?.("sign cert setting validity:",c.validity),je.info?.("sign cert setting subject from CSR:",a.subject.attributes),c.setSubject(a.subject.attributes),je.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=a.getAttribute({name:"extensionRequest"}).extensions;je.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=a.publicKey,c.sign(n,Fd.md.sha256.create()),t.certificate=Nt.certificateToPem(c)}else je.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}o(vle,"signCertificate");async function Ule(e,t){await kd({name:GS(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await kd({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Nt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}o(Ule,"createCertificateTable");async function kd(e){let t;try{t=new Wo(e.certificate)}catch(r){je.error?.(`Failed to parse certificate for ${e.name}:`,r.message),je.debug?.("Certificate record details:",JSON.stringify(e,null,2));let n=new Error(`Invalid certificate format for ${e.name}: ${r.message}. This may be due to corrupted certificate data during transfer or encoding issues.`);throw n.code="INVALID_CERTIFICATE_FORMAT",n.cause=r,n}e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject?.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},ec(),await Zr.patch(e)}o(kd,"setCertTable");async function pC(){let e=await aC("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Nt.publicKeyFromPem(e.publicKey),privateKey:Nt.privateKeyFromPem(e.privateKey)}}o(pC,"generateKeys");async function hC(e,t,r){let n=Nt.createCertificate();if(!t){let a=await nh();t=Nt.certificateFromPem(a.options.cert).publicKey}n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+fC);let i=[{name:"commonName",value:qS()},...mC];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions($$()),n.sign(e,Fd.md.sha256.create()),Nt.certificateToPem(n)}o(hC,"generateCertificates");async function uC(){let e=await j$(),t;for(let r of e){if(!r.is_authority)continue;let n=await z$(r.private_key_name);if(r.private_key_name&&n&&new Wo(r.certificate).checkPrivateKey(U$(n))){je.trace?.(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;je.trace?.("No CA found with matching private key")}o(uC,"getCertAuthority");async function V$(e,t,r=!0){let n=Nt.createCertificate();n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+fC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${ds.get(Bl.REPLICATION_HOSTNAME)??F$(ds.get(Bl.REPLICATION_URL))??x$().split("-")[0]}`},...mC];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,Fd.md.sha256.create());let a=pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),c=pr.join(a,yi.PRIVATEKEY_PEM_NAME);return r&&await Hn.writeFile(c,Nt.privateKeyToPem(e)),n}o(V$,"generateCertAuthority");async function xle(){let{privateKey:e,publicKey:t}=await pC(),r=await V$(e,t),n=await hC(e,t,r);await Ule(n,r),K$()}o(xle,"generateCertsKeys");async function Ble(){let e=await hC(Nt.privateKeyFromPem(yi.CERTIFICATE_VALUES.key),void 0,Nt.certificateFromPem(yi.CERTIFICATE_VALUES.cert)),t=pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),r=pr.join(t,yi.NATS_CERTIFICATE_PEM_NAME);await Hn.exists(r)||await Hn.writeFile(r,e);let n=pr.join(t,yi.NATS_CA_PEM_NAME);await Hn.exists(n)||await Hn.writeFile(n,yi.CERTIFICATE_VALUES.cert)}o(Ble,"createNatsCerts");async function Fle(){ec();for await(let e of Zr.search([{attribute:"is_self_signed",value:!0}]))await Zr.delete(e.name);await EC()}o(Fle,"renewSelfSigned");async function EC(){Cle(),await G$(),ec();let e=await uC();if(!e){je.notify?.("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=o(u=>{try{return{key:Nt.privateKeyFromPem(Hn.readFileSync(u)),keyPath:u}}catch(d){return je.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=ds.get(Bl.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=ds.get(Bl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let a=pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),c=B$(a,i);s||(je.warn?.("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await pC(),Hn.existsSync(pr.join(a,yi.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${x$().split("-")[0]}.pem`),await Hn.writeFile(pr.join(a,c),Nt.privateKeyToPem(s)));let l=await V$(s,Nt.setRsaPublicKey(s.n,s.e),!1);await kd({name:l.subject.getField("CN").value,uses:["https"],certificate:Nt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await nh()){let r=GS();je.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await uC();let n=Nt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await hC(Nt.privateKeyFromPem(e.private_key),s,n);await kd({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}o(EC,"reviewSelfSignedCert");function K$(){let e=ble(Object.keys(ks.CONFIG_PARAM_MAP),!0),t=pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),r=pr.join(t,yi.PRIVATEKEY_PEM_NAME),n=pr.join(t,yi.NATS_CERTIFICATE_PEM_NAME),s=pr.join(t,yi.NATS_CA_PEM_NAME),i=ks.CONFIG_PARAMS,a={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(a[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(a[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,a[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,a[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),cC.updateConfigValue(void 0,void 0,a,!1,!0)}o(K$,"updateConfigCert");function Y$(e){return e.startsWith("-----BEGIN")?e:Ole(e,"utf8")}o(Y$,"readPEM");var M$=HS.createSecureContext;HS.createSecureContext=function(e){if(!e.cert||!e.key)return M$(e);let t={...e};delete t.key,delete t.cert;let r=M$(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var kle=q$.prototype._init;q$.prototype._init=function(e,t){kle.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,a)=>{this.sni_context=a?.context||a,this.certCbDone()})}};var xl=new Map;function W$(e,t){let r=new Map,n,s=!1;return i.initialize=a=>i.ready?i.ready:(a&&(a.secureContexts=r,a.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),xl.clear();let d=0;if(kS===void 0){c();return}for await(let f of kS.system.hdb_certificate.search([])){let m=f.certificate,p=new Wo(m);f.is_authority&&(p.asString=m,xl.set(p.subject,m))}for await(let f of kS.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",p=f.is_self_signed?1:2;m&&f.uses?.includes?.("operations")&&(p+=1);let h=await z$(f.private_key_name),E=f.certificate,g=new Wo(E);if(xl.has(g.issuer)&&(E+=`
|
|
18
|
-
`+xl.get(g.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let A={ciphers:f.ciphers,ticketKeys:Ple(),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};a&&(A.sessionIdContext=a.sessionIdContext);let S=HS.createSecureContext(A);S.name=f.name,S.options=A,S.quality=p,S.certificateAuthorities=Array.from(xl),S.certStart=E.toString().slice(0,100);let R=f.hostnames??gC(g);Array.isArray(R)||(R=[R]);let N;for(let O of R)if(O){O[0]==="*"&&(s=!0,O=O.slice(1)),O===lC()&&(p+=2),v$.isIP(O)&&(N=!0);let F=r.get(O)?.quality??0;p>F&&r.set(O,S)}else je.error?.("No hostname found for certificate at",HS.certificate);je.trace?.("Adding TLS",S.name,"for",a.ports||"client","cert named",f.name,"hostnames",R,"quality",p,"best quality",d),p>d&&(i.defaultContext=n=S,d=p,a&&(a.defaultContext=S))}catch(m){je.error?.("Error applying TLS for",f.name,m)}a?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}o(u,"updateTLS"),kS?.system.hdb_certificate.subscribe({listener:o(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(a,c){je.info?.("TLS requested for",a||"(no SNI)");let l=a;for(;;){let d=r.get(l);if(d)return je.debug?.("Found certificate for",a,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}a?je.debug?.("No certificate found to match",a,"using the default certificate"):je.debug?.("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):je.info?.("No default certificate found"),c(null,u)}o(i,"SNICallback")}o(W$,"createTLSSelector");async function z$(e){let t=Za.get(e);return!t&&e?await Hn.readFile(pr.join(ds.get(Bl.ROOTPATH),ks.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(z$,"getPrivateKeyByName");async function j$(){ec();let e=[];for await(let t of Zr.search([]))e.push(t);return e}o(j$,"listCertificates");async function Hle(e){let t=dC(e,Ti.object({name:Ti.string().required(),certificate:Ti.string().required(),is_authority:Ti.boolean().required(),private_key:Ti.string(),hosts:Ti.array(),uses:Ti.array()}));if(t)throw new Xa(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,a=new Wo(n),c=!1,l=!1,u;for(let[p,h]of Za)!s&&!c&&a.checkPrivateKey(U$(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new Xa("A suitable private key was not found for this certificate");let d;if(!r){try{d=_C(a)}catch(p){je.error?.(p)}if(d==null)throw new Xa("Error extracting certificate host name, please provide a name parameter")}let f=qle(r??d);s&&!c&&!l&&(await Hn.writeFile(pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME,f+".pem"),s),Za.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 kd(m),"Successfully added certificate: "+f}o(Hle,"addCertificate");function qle(e){return e.replace(/[^a-z0-9\.]/gi,"-")}o(qle,"sanitizeName");async function Gle(e){let t=dC(e,Ti.object({name:Ti.string().required()}));if(t)throw new Xa(t.message);let{name:r}=e;ec();let n=await Zr.get(r);if(!n)throw new Xa(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Zr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(je.info?.("Removing private key named",s),await Hn.remove(pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME,s)))}return await Zr.delete(r),"Successfully removed "+r}o(Gle,"removeCertificate");function _C(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||gC(e)[0]}o(_C,"getPrimaryHostName");function gC(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]:[]}o(gC,"hostnamesFromCert");async function $le(e){if(e.bypass_auth!==!0)throw new Xa("Unauthorized","401");let t=dC(e,Ti.object({name:Ti.string().required()}));if(t)throw new Xa(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await P$()).privateKey;if(r===".jwtPublic")return(await P$()).publicKey;if(Za.get(r))return Za.get(e.name);throw new Xa("Key not found")}o($le,"getKey");function Vle(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o(Vle,"getHostnamesFromCertificate")});var SV={};Ie(SV,{CONFIRMATION_STATUS_POSITION:()=>EV,LATENCY_POSITION:()=>jS,NodeReplicationConnection:()=>qd,OPERATION_REQUEST:()=>AC,RECEIVED_TIME_POSITION:()=>IC,RECEIVED_VERSION_POSITION:()=>bC,RECEIVING_STATUS_POSITION:()=>wC,RECEIVING_STATUS_RECEIVING:()=>gV,RECEIVING_STATUS_WAITING:()=>_V,SENDING_TIME_POSITION:()=>sh,createWebSocket:()=>QS,databaseSubscriptions:()=>rc,replicateOverWS:()=>ih,tableUpdateListeners:()=>CC});async function QS(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=it(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!yC){let l=(0,dV.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),yC=u.secureContexts}if(i=yC.get(s),i&&ce.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 a={};r&&(a.Authorization=r);let c={headers:a,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,mV.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(zS?.caCount!==jo.size&&(zS=fV.createSecureContext({...i.options,ca:[...jo,...i.options.availableCAs.values()]}),zS.caCount=jo.size),c.secureContext=zS),new cV.WebSocket(e,"harperdb-replication-v1",c)}function ih(e,t,r){let n=t.port||t.securePort,s=Fl.pid%1e3+"-"+lV.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);ce.debug?.(s,"Initializing replication connection",r);let i=0,a=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(a.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||rc,f,m,p=!1,h=t.subscription;h?.then&&h.then(y=>{h=y,h.auditStore&&(f=h.auditStore)});let E=t.tables||u&&at()[u],g,A=new Map,S=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let R,N,O,F,ee,q,k,J=6e4,Y,le=0,ae=0,re=0,Re=aV.default.get(B.REPLICATION_BLOBTIMEOUT)??12e4,Te=new Map,Fe=[],qe=0,Rr;if(t.url){let y=o(()=>{ee&&ae===e._socket?.bytesRead&&re===e._socket?.bytesWritten?e.terminate():(ee=performance.now(),e.ping(),ae=e._socket?.bytesRead,re=e._socket?.bytesWritten)},"sendPing");O=setInterval(y,iV).unref(),y()}else Zt();e._socket?.setMaxListeners(200);function Zt(){clearTimeout(F),ae=e._socket?.bytesRead,re=e._socket?.bytesWritten,F=setTimeout(()=>{ae===e._socket?.bytesRead&&re===e._socket?.bytesWritten&&(ce.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},iV*2).unref()}o(Zt,"resetPingTimer");function Ht(){if(!(!g||!u))return m||(m=vd(f,u,g)),m}o(Ht,"getSharedStatus"),u&&Uc(u);let er,qf,Mc=[],qt=[],Gf,$f=[],qE=[],GE=[],aA=150,Vf=25,Le=0,$E=0,Kf=!1,To,Mr,Ar,Yf;e.on("message",cA);async function cA(y){if(r=await r,!r){ce.error?.(s,"No authorization provided"),Vr(1008,"Unauthorized");return}vc(y),e.off("message",cA),e.on("message",vc)}o(cA,"onWSMessageWhenAuthorized");function vc(y){le=performance.now();try{let b=y.dataView=new Qc(y.buffer,y.byteOffset,y.byteLength);if(y[0]>127){let U=(0,ot.decode)(y),[L,x,G]=U;switch(L){case J$:{if(x){if(g){if(g!==x){ce.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${x}, disconnecting`),e.send((0,ot.encode)([Hd])),Vr(1008,"Node name mismatch");return}}else if(g=x,t.connection?.tentativeNode){let de=t.connection.tentativeNode;de.name=g,t.connection.tentativeNode=null,Yo(g,de)}if(t.connection&&(t.connection.nodeName=g),ce.debug?.(s,"received node name:",g,"db:",u??U[2]),!u)try{Uc(u=U[2]),u==="system"&&(er=Qa(t,(de,z)=>{Su(z)&&Tu(z)}),e.on("close",()=>{er?.remove()}))}catch(de){ce.warn?.(s,"Error setting database",de),e.send((0,ot.encode)([Hd])),Vr(1008,de.message);return}Wf()}break}case nV:{ce.debug?.(s,"Received table definitions for",x.map(de=>de.table));for(let de of x){let z=U[2];de.database=z;let ne;if(Su(z)){if(u==="system")Me[z]?.[de.table]||(ne=C(de,Me[z]?.[de.table]));else{if(z!=="data"&&!Me[z]){ce.warn?.("Database not found",z);return}ne=C(de,Me[z]?.[de.table])}f||(f=ne?.auditStore),E||(E=at()?.[z])}}break}case Hd:Vr();break;case AC:try{let de=r?.replicates||r?.subscribers||r?.name;ce.debug?.("Received operation request",x,"from",g),server.operation(x,{user:r},!de).then(z=>{ce.debug?.("Requested request from finished",g,z),Array.isArray(z)&&(z={results:z}),z.requestId=x.requestId,e.send((0,ot.encode)([VS,z]))},z=>{ce.debug?.("Failed requested operation from",g,z),e.send((0,ot.encode)([VS,{requestId:x.requestId,error:SC(z)}]))})}catch(de){e.send((0,ot.encode)([VS,{requestId:x.requestId,error:SC(de)}]))}break;case VS:let{resolve:j,reject:X}=A.get(x.requestId);ce.debug?.("Received completed operation request",g,x),x.error?X(new Error(x.error)):j(x),A.delete(x.requestId);break;case TC:let $=U[3];if(!E){u?ce.error?.(s,"No database found for",u):ce.error?.(s,"Database name never received"),Vr();return}let be=E[$];be=C({table:$,database:u,attributes:x.attributes,schemaDefined:x.schemaDefined},be),Mc[G]={name:$,decoder:new ot.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:x.typedStructs,structures:x.structures}),getEntry(de){return be.primaryStore.getEntry(de)},rootStore:be.primaryStore.rootStore};break;case X$:Yf=f?g$(x,f):new Map,Gf=U[2],ce.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${Gf}`);break;case Z$:let pe=G;GE[pe]=x;break;case rV:Ht()[EV]=x,ce.trace?.(s,"received and broadcasting committed update",x),Ht().buffer.notify();break;case tV:R=x,h.send({type:"end_txn",localTime:R,remoteNodeIds:S});break;case KS:{let de=U[1],{fileId:z,size:ne,finished:me,error:Ee}=de,fe=Te.get(z);ce.debug?.("Received blob",z,"has stream",!!fe,"connectedToBlob",!!fe?.connectedToBlob,"length",U[2].length,"finished",me),fe||(fe=new RC.PassThrough,fe.expectedSize=ne,Te.set(z,fe)),fe.lastChunk=Date.now();let De=U[2];Je(De.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{me?(Ee?(fe.on("error",()=>{}),fe.destroy(new Error("Blob error: "+Ee+" for record "+(fe.recordId??"unknown")+" from "+remote_node_name))):fe.end(De),fe.connectedToBlob&&Te.delete(z)):fe.write(De)}catch(ve){ce.error?.(`Error receiving blob for ${fe.recordId} from ${g} and streaming to storage`,ve),Te.delete(z)}break}case eV:{let de=x,z;try{let ne=U[3],me=qt[G]||(qt[G]=E[U[4]]);if(!me)return ce.warn?.("Unknown table id trying to handle record request",G);let Ee=me.primaryStore.getBinaryFast(Symbol.for("structures")),fe=Ee?.length??0;if(fe>0&&fe!==$E){$E=fe;let ve=(0,ot.decode)(Ee);e.send((0,ot.encode)([TC,{typedStructs:ve.typed,structures:ve.named},G,me.tableName]))}let De=me.primaryStore.getBinaryFast(ne);if(De){let ve=me.primaryStore.decoder.decode(De,{valueAsBuffer:!0}),$e=ct||{};$e.version=(0,pV.getLastVersion)(),ct&&ct[vu]&Ln&&(ve=Buffer.from(ve),wm(()=>me.primaryStore.decoder.decode(De),vr=>br(vr,ne),me.primaryStore.rootStore)),z=(0,ot.encode)([$S,de,{value:ve,expiresAt:$e.expiresAt,version:$e.version,residencyId:$e.residencyId,nodeId:$e.nodeId,user:$e.user}])}else z=(0,ot.encode)([$S,de])}catch(ne){z=(0,ot.encode)([$S,de,{error:ne.message}])}e.send(z);break}case $S:{let{resolve:de,reject:z,tableId:ne,key:me}=A.get(U[1]),Ee=U[2];if(Ee?.error)z(new Error(Ee.error));else if(Ee){let fe;P_(()=>{let De=Mc[ne].decoder.decode(Ee.value);Ee.value=De,Ee.key=me,de(Ee)||fe&&setTimeout(()=>fe.forEach(N_),6e4).unref()},De=>{let ve=gu(De,me);return fe||(fe=[]),fe.push(ve),ve})}else de();A.delete(U[1]);break}case Q$:{Ar=x;let de,z,ne=!1;if(h){if(u!==h.databaseName&&!h.then){ce.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(ce.debug?.(s,"received subscription request for",u,"at",Ar),!h){let Ne;h=new Promise(Gt=>{ce.debug?.("Waiting for subscription to database "+u),Ne=Gt}),h.ready=Ne,rc.set(u,h)}if(r.name)z=Yt().subscribe(r.name),z.then(async Ne=>{de=Ne;for await(let Gt of de){let Dt=Gt.value;if(!(Dt?.replicates===!0||Dt?.replicates?.receives||Dt?.subscriptions?.some(Ur=>(Ur.database||Ur.schema)===u&&Ur.publish!==!1))){ne=!0,e.send((0,ot.encode)([Hd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}}},Ne=>{ce.error?.(s,"Error subscribing to HDB nodes",Ne)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,ot.encode)([Hd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}if(Mr&&(ce.debug?.(s,"stopping previous subscription",u),Mr.emit("close")),Ar.length===0)return;let me=Ar[0],Ee=o(Ne=>{if(Ne&&(me.replicateByDefault?!me.tables.includes(Ne.tableName):me.tables.includes(Ne.tableName)))return{table:Ne}},"tableToTableEntry"),fe={txnTime:0},De,ve,$e=1/0,vr,zn=o((Ne,Gt)=>{if(Ne.type==="end_txn"){fe.txnTime&&(a[i]!==66&&ce.error?.("Invalid encoding of message"),yo(9),yo(H_),_(vr=Gt),vi()),i=c,fe.txnTime=0;return}let Dt=Ne.nodeId,Ur=Ne.tableId,Mt=ve[Ur];if(!Mt&&(Mt=ve[Ur]=Ee(h.tableById[Ur]),!Mt))return ce.debug?.("Not subscribed to table",Ur);let bs=Mt.table,vt=bs.primaryStore,ri=vt.encoder;(Ne.extendedType&z_||!ri.typedStructs)&&(ri._mergeStructures(ri.getStructures()),ri.typedStructs&&(ri.lastTypedStructuresLength=ri.typedStructs.length));let yu=De[Dt];if(!(yu&&yu.startTime<Gt&&(!yu.endTime||yu.endTime>Gt)))return WS&&ce.trace?.(s,"skipping replication update",Ne.recordId,"to:",g,"from:",Dt,"subscribed:",De),qM();WS&&ce.trace?.(s,"sending replication update",Ne.recordId,"to:",g,"from:",Dt,"subscribed:",De);let lA=Ne.version;fe.txnTime!==lA&&(fe.txnTime&&(WS&&ce.trace?.(s,"new txn time, sending queued txn",fe.txnTime),a[i]!==66&&ce.error?.("Invalid encoding of message"),vi()),fe.txnTime=lA,i=c,_(lA));let Fc=Ne.residencyId,uA=Aa(Fc,bs),KE;if(uA&&!uA.includes(g)){let ni=Aa(Ne.previousResidencyId,bs);if(ni&&!ni.includes(g)&&(Ne.type==="put"||Ne.type==="patch")||bs.getResidencyById)return qM();let zf=Ne.recordId;ce.trace?.(s,"sending invalidation",zf,g,"from",Dt);let jf=0;Fc&&(jf|=Jc),Ne.previousResidencyId&&(jf|=Xc);let mA,YE=null;for(let GM in bs.indices){if(!YE){if(mA=Ne.getValue(vt,!0),!mA)break;YE={}}YE[GM]=mA[GM]}KE=Zc(Ne.version,Ur,zf,null,Dt,Ne.user,Ne.type==="put"||Ne.type==="patch"?"invalidate":Ne.type,ri.encode(YE),jf,Fc,Ne.previousResidencyId,Ne.expiresAt)}function qM(){return ce.trace?.(s,"skipping audit record",Ne.recordId),q||(q=setTimeout(()=>{q=null,(vr||0)+sV/2<$e&&(WS&&ce.trace?.(s,"sending skipped sequence update",$e),e.send((0,ot.encode)([tV,$e])))},sV).unref()),new Promise(setImmediate)}o(qM,"skipAuditRecord");let dA=ri.typedStructs,fA=ri.structures;if((dA?.length!=Mt.typed_length||fA?.length!=Mt.structure_length)&&(Mt.typed_length=dA?.length,Mt.structure_length=fA.length,ce.debug?.(s,"send table struct",Mt.typed_length,Mt.structure_length),Mt.sentName||(Mt.sentName=!0),e.send((0,ot.encode)([TC,{typedStructs:dA,structures:fA,attributes:bs.attributes,schemaDefined:bs.schemaDefined},Ur,Mt.table.tableName]))),Fc&&!qE[Fc]&&(e.send((0,ot.encode)([Z$,uA,Fc])),qE[Fc]=!0),KE)yo(KE.length),K(KE);else{let ni=Ne.encoded;Ne.extendedType&Ln&&wm(()=>Ne.getValue(vt),jf=>br(jf,Ne.recordId),vt.rootStore);let zf=ni[0]===66?8:0;yo(ni.length-zf),K(ni,zf),ce.trace?.("wrote record",Ne.recordId,"length:",ni.length)}return e._socket.writableNeedDrain?new Promise(ni=>{ce.debug?.(`Waiting for remote node ${g} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",ni)}):qe>Vf?new Promise(ni=>{Rr=ni}):new Promise(setImmediate)},"sendAuditRecord"),vi=o(()=>{c-i>8?(e.send(a.subarray(i,c)),ce.debug?.(s,"Sent message, size:",c-i),u!=="system"&&Je(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):ce.debug?.(s,"skipping empty transaction")},"sendQueuedData");Mr=new NC.EventEmitter,Mr.once("close",()=>{ne=!0,de?.end()});for(let{startTime:Ne}of Ar)Ne<$e&&($e=Ne);(z||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,ve=h.tableById.map(Ee),De=[];for(let{name:Gt,startTime:Dt,endTime:Ur}of Ar){let Mt=US(Gt,f);ce.debug?.("subscription to",Gt,"using local id",Mt,"starting",Dt),De[Mt]={startTime:Dt,endTime:Ur}}Tu(u),er||(er=wl(Gt=>{Gt.databaseName===u&&Tu(u)}),qf=vp(Gt=>{Gt===u&&(e.send((0,ot.encode)([Hd])),Vr())}),e.on("close",()=>{er?.remove(),qf?.remove()})),e.send((0,ot.encode)([X$,Qp(h.auditStore),Ar.map(({name:Gt})=>Gt)]));let Ne=!0;do{isFinite($e)||(ce.warn?.("Invalid sequence id "+$e),Vr(1008,"Invalid sequence id"+$e));let Gt;if(Ne&&!ne&&(Ne=!1,$e===0)){ce.info?.("Replicating all tables to",g);let Dt=$e,Ur=JS(f);for(let Mt in E){if(!Ee(Mt))continue;let bs=E[Mt];for(let vt of bs.primaryStore.getRange({snapshot:!1,versions:!0})){if(ne)return;if(vt.localTime>=$e){ce.trace?.(s,"Copying record from",u,Mt,vt.key,vt.localTime),Dt=Math.max(vt.localTime,Dt),Gt=!0,Ht()[sh]=1;let ri=Zc(vt.version,bs.tableId,vt.key,null,Ur,null,"put",wm(()=>bs.primaryStore.encoder.encode(vt.value),yu=>br(yu,vt.key)),vt.metadataFlags&-256,vt.residencyId,null,vt.expiresAt);await zn({recordId:vt.key,tableId:bs.tableId,type:"put",getValue(){return vt.value},encoded:ri,version:vt.version,residencyId:vt.residencyId,nodeId:Ur,extendedType:vt.metadataFlags},vt.localTime)}}}Gt&&zn({type:"end_txn"},$e),Ht()[sh]=0,$e=Dt}for(let{key:Dt,value:Ur}of f.getRange({start:$e||1,exclusiveStart:!0,snapshot:!1})){if(ne)return;let Mt=xt(Ur);ce.debug?.("sending audit record",new Date(Dt)),Ht()[sh]=Dt,$e=Dt,await zn(Mt,Dt),Mr.startTime=Dt,Gt=!0}Gt&&zn({type:"end_txn"},$e),Ht()[sh]=0,await Zx(f)}while(!ne)}).catch(Ne=>{ce.error?.(s,"Error handling subscription to node",Ne),Vr(1008,"Error handling subscription to node")});break}}return}b.position=8;let P=!0,I,v;do{Ht();let U=b.readInt();if(U===9&&b.getUint8(b.position)==H_){b.position++,R=v=b.readFloat64(),m[bC]=R,m[IC]=Date.now(),m[wC]=_V,ce.trace?.("received remote sequence update",R,u);break}let L=b.position,x=xt(y,L,L+U),G=Mc[x.tableId];G||ce.error?.(`No table found with an id of ${x.tableId}`);let j;x.residencyId&&(j=GE[x.residencyId],ce.trace?.(s,"received residency list",j,x.type,x.recordId));try{let X=x.recordId;P_(()=>{I={table:G.name,id:x.recordId,type:x.type,nodeId:Yf.get(x.nodeId),residencyList:j,timestamp:x.version,value:x.getValue(G),user:x.user,beginTxn:P,expiresAt:x.expiresAt}},$=>gu($,X))}catch(X){throw X.message+="typed structures for current decoder"+JSON.stringify(G.decoder.typedStructs),X}P=!1,ce.trace?.(s,"received replication message",x.type,"id",I.id,"version",new Date(x.version),"nodeId",I.nodeId),m[bC]=x.version,m[IC]=Date.now(),m[wC]=gV,h.send(I),b.position=L+U}while(b.position<y.byteLength);Le++,u!=="system"&&Je(y.byteLength,"bytes-received",`${g}.${u}.${I?.table||"unknown_table"}`,"replication","ingest"),Le>aA&&!Kf&&(Kf=!0,e.pause(),ce.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),h.send({type:"end_txn",localTime:R,remoteNodeIds:S,async onCommit(){if(I){let U=Date.now()-I.timestamp;u!=="system"&&Je(U,"replication-latency",g+"."+u+"."+I.table,I.type,"ingest")}Le--,Kf&&(Kf=!1,e.resume(),ce.debug?.(`Replication resuming ${g}`)),Fe.length>0&&await Promise.all(Fe),ce.trace?.("All blobs finished"),!N&&v&&(ce.trace?.(s,"queuing confirmation of a commit at",v),setTimeout(()=>{e.send((0,ot.encode)([rV,N])),ce.trace?.(s,"sent confirmation of a commit at",N),N=null},Wle)),N=v,ce.debug?.("last sequence committed",new Date(v),u)}})}catch(b){ce.error?.(s,"Error handling incoming replication message",b)}}o(vc,"onWSMessage"),e.on("ping",Zt),e.on("pong",()=>{if(t.connection){let y=performance.now()-ee;t.connection.latency=y,Ht()&&(m[jS]=y),t.isSubscriptionConnection&&Ul({name:g,database:u,url:t.url,latency:y})}ee=null}),e.on("close",(y,b)=>{clearInterval(O),clearTimeout(F),clearInterval(k),Mr&&Mr.emit("close"),To&&To.end();for(let[P,{reject:I}]of A)I(new Error(`Connection closed ${b?.toString()} ${y}`));ce.debug?.(s,"closed",y,b?.toString())});function Vr(y,b){try{e.isFinished=!0,ce.debug?.(s,"closing",g,u,y,b),e.close(y,b),t.connection?.emit("finished")}catch(P){ce.error?.(s,"Error closing connection",P)}}o(Vr,"close");let Ra=new Set;async function br(y,b){let P=C_(y);if(Ra.has(P)){ce.debug?.("Blob already being sent",P);return}Ra.add(P);try{let I;qe++;for await(let v of y.stream())I&&(ce.debug?.("Sending blob chunk",P,"length",I.length),e.send((0,ot.encode)([KS,{fileId:P,size:y.size},I]))),I=v,e._socket.writableNeedDrain&&(ce.debug?.("draining",P),await new Promise(U=>e._socket.once("drain",U)),ce.debug?.("drained",P)),Je(v.length,"bytes-sent",`${g}.${u}`,"replication","blob");ce.debug?.("Sending final blob chunk",P,"length",I.length),e.send((0,ot.encode)([KS,{fileId:P,size:y.size,finished:!0},I]))}catch(I){ce.warn?.("Error sending blob",I,"blob id",P,"for record",b),e.send((0,ot.encode)([KS,{fileId:P,finished:!0,error:SC(I)},Buffer.alloc(0)]))}finally{Ra.delete(P),qe--,qe<Vf&&Rr?.()}}o(br,"sendBlobs");function gu(y,b){let P=C_(y),I=Te.get(P);ce.debug?.("Received transaction with blob",P,"has stream",!!I,"ended",!!I?.writableEnded),I?I.writableEnded&&Te.delete(P):(I=new RC.PassThrough,Te.set(P,I)),I.connectedToBlob=!0,I.lastChunk=Date.now(),I.recordId=b,y.size===void 0&&I.expectedSize&&(y.size=I.expectedSize);let v=I.blob??createBlob(I,y);I.blob=v;let U=v.save({primaryStore:h.auditStore});return U&&(U.blobId=P,Fe.push(U),U.finally(()=>{ce.debug?.(`Finished receiving blob stream ${P}`),Fe.splice(Fe.indexOf(U),1)})),v}o(gu,"receiveBlobs");function Wf(){if(p||(p=!0,t.connection?.on("subscriptions-updated",Wf)),!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 y=new Map;f||(f=h?.auditStore);try{for(let I of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let v of I.value.nodes||[])v.lastTxnTime>(y.get(v.id)??0)&&y.set(v.id,v.lastTxnTime)}catch(I){if(!I.message.includes("Can not re"))throw I}let b=t.connection?.nodeSubscriptions?.[0];S=[];let P=t.connection?.nodeSubscriptions.map((I,v)=>{let U=[],{replicateByDefault:L}=I;if(I.subscriptions){for(let X of I.subscriptions)if(X.subscribe&&(X.schema||X.database)===u){let $=X.table;E?.[$]?.replicate!==!1&&U.push($)}L=!1}else for(let X in E)(L?E[X].replicate===!1:E[X].replicate)&&U.push(X);let x=f&&US(I.name,f),G=h?.dbisDB?.get([Symbol.for("seq"),x])??1,j=Math.max(G?.seqId??1,(typeof I.startTime=="string"?new Date(I.startTime).getTime():I.startTime)??1);if(ce.debug?.("Starting time recorded in db",I.name,x,u,G?.seqId,"start time:",j,new Date(j)),b!==I){let X=f&&US(b.name,f),$=h?.dbisDB?.get([Symbol.for("seq"),X])??1;for(let be of $?.nodes||[])be.name===I.name&&(j=be.seqId,ce.debug?.("Using sequence id from proxy node",b.name,j))}if(x===void 0?ce.warn("Starting subscription request from node",I,"but no node id found"):S.push(x),y.get(x)>j&&(j=y.get(x),ce.debug?.("Updating start time from more recent txn recorded",b.name,j)),j===1&&YS)try{new URL(YS).hostname===I.name?(ce.warn?.(`Requesting full copy of database ${u} from ${YS}`),j=0):j=Date.now()-6e4}catch(X){ce.error?.("Error parsing leader URL",YS,X)}return ce.trace?.(s,"defining subscription request",I.name,u,new Date(j)),{name:I.name,replicateByDefault:L,tables:U,startTime:j,endTime:I.endTime}});if(P)if(ce.debug?.(s,"sending subscription request",P,h?.dbisDB?.path),clearTimeout(Y),P.length>0)e.send((0,ot.encode)([Q$,P]));else{let I=o(()=>{let v=performance.now();Y=setTimeout(()=>{le<=v?Vr(1008,"Connection has no subscriptions and is no longer used"):I()},J).unref()},"scheduleClose");I()}}o(Wf,"sendSubscriptionRequestUpdate");function Aa(y,b){if(!y)return;let P=$f[y];return P||(P=b.getResidencyRecord(y),$f[y]=P),P}o(Aa,"getResidence");function Su(y){return!(tc&&tc!="*"&&!tc[y]&&!tc.includes?.(y)&&!tc.some?.(b=>b.name===y))}o(Su,"checkDatabaseAccess");function Uc(y){if(h=h||d.get(y),!Su(y))throw new Error(`Access to database "${y}" is not permitted`);h||ce.warn?.(`No database named "${y}" was declared and registered`),f=h?.auditStore,E||(E=at()?.[y]);let b=it();if(b===g)throw b?new Error("Should not connect to self",b):new Error("Node name not defined");return xc(b,y),!0}o(Uc,"setDatabase");function xc(y,b){let P=at()?.[b],I=[];for(let v in P){let U=P[v];I.push({table:v,schemaDefined:U.schemaDefined,attributes:U.attributes.map(L=>({name:L.name,type:L.type,isPrimaryKey:L.isPrimaryKey}))})}ce.trace?.("Sending database info for node",y,"database name",b),e.send((0,ot.encode)([J$,y,b,I]))}o(xc,"sendNodeDBName");function Tu(y){let b=at()?.[y],P=[];for(let I in b){if(Ar&&!Ar.some(U=>U.replicateByDefault?!U.tables.includes(I):U.tables.includes(I)))continue;let v=b[I];P.push({table:I,schemaDefined:v.schemaDefined,attributes:v.attributes.map(U=>({name:U.name,type:U.type,isPrimaryKey:U.isPrimaryKey}))})}e.send((0,ot.encode)([nV,P,y]))}o(Tu,"sendDBSchema"),k=setInterval(()=>{for(let[y,b]of Te)b.lastChunk+Re<Date.now()&&(ce.warn?.(`Timeout waiting for blob stream to finish ${y} for record ${b.recordId??"unknown"} from ${g}`),Te.delete(y),b.end())},Re).unref();let VE=1,Bc=[];return{end(){To&&To.end(),Mr&&Mr.emit("close")},getRecord(y){let b=VE++;return new Promise((P,I)=>{let v=[eV,b,y.table.tableId,y.id];Bc[y.table.tableId]||(v.push(y.table.tableName),Bc[y.table.tableId]=!0),e.send((0,ot.encode)(v)),le=performance.now(),A.set(b,{tableId:y.table.tableId,key:y.id,resolve(U){let{table:L,entry:x}=y;if(P(U),U)return L._recordRelocate(x,U)},reject:I})})},sendOperation(y){let b=VE++;return y.requestId=b,e.send((0,ot.encode)([AC,y])),new Promise((P,I)=>{A.set(b,{resolve:P,reject:I})})}};function yo(y){T(5),y<128?a[c++]=y:y<16384?(l.setUint16(c,y|32768),c+=2):y<1056964608?(l.setUint32(c,y|3221225472),c+=4):(a[c]=255,l.setUint32(c+1,y),c+=5)}function K(y,b=0,P=y.length){let I=P-b;T(I),y.copy(a,c,b,P),c+=I}function _(y){T(8),l.setFloat64(c,y),c+=8}function T(y){if(y+16>a.length-c){let b=Buffer.allocUnsafeSlow(c+y-i+65536>>10<<11);a.copy(b,0,i,c),c=c-i,i=0,a=b,l=new DataView(a.buffer,0,a.length)}}function C(y,b){let P=y.database??"data";b||(b={});let I=b.schemaDefined,v=!1,U=y.schemaDefined,L=b.attributes||[];for(let x=0;x<y.attributes?.length;x++){let G=y.attributes[x],j=L.find(X=>X.name===G.name);(!j||j.type!==G.type)&&(I?ce.error?.(`Schema for '${u}.${y.table}' is defined locally, but attribute '${G.name}: ${G.type}' from '${g}' does not match local attribute ${j?"'"+j.name+": "+j.type+"'":"which does not exist"}`):(v=!0,U||(G.indexed=!0),j?L[L.indexOf(j)]=G:L.push(G)))}return v?(ce.debug?.("(Re)creating",y),Xe({table:y.table,database:y.database,schemaDefined:y.schemaDefined,attributes:L,...b})):b}}var aV,ot,cV,lV,uV,NC,dV,fV,Fl,mV,RC,pV,hV,Kle,SC,ce,Q$,J$,X$,Hd,Z$,TC,eV,$S,AC,VS,tV,rV,nV,KS,EV,bC,IC,sh,jS,wC,_V,gV,Yle,YS,CC,rc,WS,sV,Wle,iV,yC,zS,oV,qd,OC=ie(()=>{Oe();Io();nC();Vb();us();aV=w(ue());H();el();ot=require("msgpackr"),cV=require("ws"),lV=require("worker_threads"),uV=w(Q());th();NC=require("events"),dV=w(fs()),fV=w(require("node:tls"));vl();Fl=w(require("node:process")),mV=require("node:net");Ps();Ns();RC=require("node:stream"),pV=require("lmdb"),hV=w(require("minimist")),{forComponent:Kle,errorToString:SC}=uV.default,ce=Kle("replication").conditional,Q$=129,J$=140,X$=141,Hd=142,Z$=130,TC=132,eV=133,$S=134,AC=136,VS=137,tV=143,rV=144,nV=145,KS=146,EV=0,bC=1,IC=2,sh=3,jS=4,wC=5,_V=0,gV=1,Yle=(0,hV.default)(Fl.argv),YS=Yle.HDB_LEADER_URL??Fl.env.HDB_LEADER_URL,CC=new Map,rc=new Map,WS=!0,sV=300,Wle=2,iV=3e4;o(QS,"createWebSocket");oV=500,qd=class extends NC.EventEmitter{static{o(this,"NodeReplicationConnection")}socket;startTime;retryTime=oV;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??Si(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await QS(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;ce.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${Fl.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),ce[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=oV,this.nodeSubscriptions&&Ul({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=ih(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"?(ce.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"?ce.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`):ce.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&&Bd({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();ce.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))}};o(ih,"replicateOverWS")});function oh(e){return e===yV||e===zle}function jle(e){return e===RV||e===AV}function PC(e){return e===yV?RV:AV}function Qle(){if(TV)return;TV=!0;let e=kl.CryptoEngine.prototype,t=kl.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 oh(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return oh(s)?{name:PC(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return jle(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=kl.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(oh(i)){let a=PC(i);return s.importKey("spki",this.subjectPublicKeyInfo.toSchema().toBER(!1),a,!0,["verify"])}return r.getPublicKey.call(this,...n)},t.verify=async function(...n){let[s]=n;if(oh(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),a=s.toSchema().toBER(!1),c=new ah.X509Certificate(Buffer.from(i)),l=new ah.X509Certificate(Buffer.from(a));return c.verify(l.publicKey)}catch{return!1}return r.certificateVerify.call(this,...n)},r.verifyWithPublicKey&&(e.verifyWithPublicKey=async function(...n){let[s,i,a]=n,c=a.algorithm.algorithmId;if(oh(c)){let l=PC(c);try{let u=this.crypto?.subtle||this.subtle||kl.getCrypto(!0)?.subtle||ah.webcrypto?.subtle;if(!u)throw new Error("No crypto.subtle available");let d=await u.importKey("spki",a.toSchema().toBER(!1),l,!1,["verify"]),f=i.valueBlock.valueHexView;return 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 kl,ah,yV,zle,RV,AV,TV,bV=ie(()=>{kl=w(require("pkijs")),ah=require("node:crypto"),yV="1.3.101.112",zle="1.3.101.113",RV="Ed25519",AV="Ed448",TV=!1;o(oh,"isEd25519OrEd448");o(jle,"isEdDSAAlgorithmName");o(PC,"getEdDSAAlgorithmName");o(Qle,"applyEd25519Patch");Qle()});function Jle(){return XS||(XS=Xe({table:"hdb_certificate_cache",database:"system",attributes:[{name:"certificate_id",isPrimaryKey:!0},{name:"status"},{name:"reason"},{name:"checked_at"},{name:"expiresAt",expiresAt:!0,indexed:!0},{name:"method"}]}),XS.sourcedFrom(LC)),XS}function Xle(e){if(zt.trace?.("getCertificateVerificationConfig called with:",{mtlsConfig:e}),!e)return!1;if(e===!0)return zt.debug?.("mTLS enabled with default certificate verification"),{};let t=e.certificateVerification;return zt.trace?.("Certificate verification config:",{verificationConfig:t}),t==null?{}:t===!1?!1:t===!0?{}:t}async function Gd(e,t){zt.debug?.("verifyCertificate called for:",e.subject?.CN||"unknown");let r=Xle(t);if(r===!1)return zt.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=tue(e);return zt.trace?.("Certificate chain length:",n.length),n.length===1&&!n[0].issuer?(zt.debug?.("Certificate without issuer - cannot perform OCSP check"),{valid:!0,status:"no-issuer-cert",method:"disabled"}):n.length<2||!n[0].issuer?(zt.debug?.("Certificate chain too short for revocation checking"),{valid:!0,status:"insufficient-chain",method:"disabled"}):Zle(n[0].cert,n[0].issuer,r)}async function Zle(e,t,r){zt.debug?.("verifyOCSP called");try{Buffer.isBuffer(e)&&(e=IV(e,"CERTIFICATE")),Buffer.isBuffer(t)&&(t=IV(t,"CERTIFICATE"));let n={certPem:e,issuerPem:t,method:"ocsp"},i=`ocsp:${(0,NV.createHash)("sha256").update(JSON.stringify(n)).digest("hex")}`;zt.trace?.("OCSP cache key:",i);let c=await Jle().get(i,{certPem:e,issuerPem:t,config:r||{}});if(!c)return(r?.failureMode??ch.failureMode)==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"ocsp"}:(zt.warn?.("OCSP cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"});let l=c,u=c.wasLoadedFromSource?.();return zt.trace?.(`OCSP ${u?"source fetch":"cache hit"} for certificate`),{valid:l.status==="good",status:l.status,cached:!u,method:l.method||"ocsp"}}catch(n){return zt.error?.("OCSP verification error:",n),(r?.failureMode??ch.failureMode)==="fail-closed"?{valid:!1,status:"error",error:n.message,method:"ocsp"}:(zt.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"})}}async function eue(e,t,r){zt.trace?.("Calling getCertStatus with timeout:",r);let n=await(0,wV.getCertStatus)(e,{ca:t,timeout:r});return zt.debug?.("OCSP response from easy-ocsp:",{status:n.status,revocationReason:n.revocationReason,responseData:n}),n.status==="good"?{status:"good"}:n.status==="revoked"?{status:"revoked",reason:n.revocationReason?.toString()||"unspecified"}:{status:"unknown",reason:"unknown-status"}}function IV(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 tue(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}var wV,NV,CV,zt,LC,ch,XS,ZS=ie(()=>{bV();wV=require("easy-ocsp"),NV=require("node:crypto"),CV=w(Zn());Oe();Ua();zt=(0,CV.loggerWithTag)("cert-verification"),LC=class extends Fr{static{o(this,"CertificateVerificationSource")}async get(t){zt.debug?.("CertificateVerificationSource.get called for:",t);let r=this.getContext(),n=r?.requestContext;if(!n||!n.certPem||!n.issuerPem)throw new Error(`No certificate data provided for cache key: ${t}`);let{certPem:s,issuerPem:i,config:a}=n;zt.trace?.("Performing OCSP check with config:",a);try{let c=a?.timeout??ch.timeout,l=await Promise.race([eue(s,i,c),new Promise((d,f)=>setTimeout(()=>f(new Error("OCSP timeout")),c))]);zt.debug?.("OCSP check result:",l);let u=a?.cacheTtl??ch.cacheTtl;return r&&(r.expiresAt=Date.now()+u),{certificate_id:t,status:l.status,reason:l.reason,checked_at:Date.now(),expiresAt:Date.now()+u,method:"ocsp"}}catch(c){return zt.error?.("OCSP verification error:",c),(a?.failureMode??ch.failureMode)==="fail-closed"?(r&&(r.expiresAt=Date.now()+3e5),{certificate_id:t,status:"unknown",reason:c.message,checked_at:Date.now(),expiresAt:Date.now()+3e5,method:"ocsp"}):(zt.warn?.("OCSP check failed, allowing connection (fail-open mode)"),null)}}},ch={timeout:5e3,cacheTtl:36e5,failureMode:"fail-open"};o(Jle,"getCertificateCacheTable");o(Xle,"getCertificateVerificationConfig");o(Gd,"verifyCertificate");o(Zle,"verifyOCSP");o(eue,"performOCSPCheck");o(IV,"bufferToPem");o(tue,"extractCertificateChain")});var zo={};Ie(zo,{clearThisNodeName:()=>uue,disableReplication:()=>iue,enabledDatabases:()=>tc,forEachReplicatedDatabase:()=>Qa,getThisNodeId:()=>JS,getThisNodeName:()=>it,getThisNodeUrl:()=>Ja,hostnameToUrl:()=>nT,lastTimeInAuditStore:()=>Jp,monitorNodeCAs:()=>BV,replicateOperation:()=>fue,replicationCertificateAuthorities:()=>jo,sendOperationToNode:()=>lh,servers:()=>nue,setReplicator:()=>kV,start:()=>sue,startOnMainThread:()=>oC,subscribeToNode:()=>eh,unsubscribeFromNode:()=>FS,urlToNodeName:()=>Si});function sue(e){if(!e.port&&!e.securePort&&(e.port=Hs.default.get(B.OPERATIONSAPI_NETWORK_PORT),e.securePort=Hs.default.get(B.OPERATIONSAPI_NETWORK_SECUREPORT)),!it())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let s of Zp(e))t.set(Si(s.url),s);oue(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=Ue.ws(async(s,i,a,c)=>{if(At.debug("Incoming WS connection received "+i.url),i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,a);s._socket.unref(),ih(s,e,a.then(()=>i?.user)),s.on("error",l=>{l.code!=="ECONNREFUSED"&&At.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,Ue.http(async(s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){At.debug("Incoming replication WS connection received, authorized: "+s.authorized),!s.authorized&&s._nodeRequest.socket.authorizationError&&At.error(`Incoming client connection from ${s.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`,s._nodeRequest.socket.authorizationError);let a=Yt().primaryStore;if(s.authorized&&s.peerCertificate.subjectaltname){let c=(0,UV.getHostnamesFromCertificate)(s.peerCertificate),l;for(let u of c)if(l=u&&(a.get(u)||t.get(u)),l)break;if(l){let u=await Gd(s.peerCertificate,e);if(!u.valid){At.warn("Certificate verification failed:",u.status,"for node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}if(l?.revoked_certificates?.includes(s.peerCertificate.serialNumber)){At.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l}else At.warn(`No node found for certificate common name/SANs: ${c}, available nodes are ${Array.from(a.getRange({}).filter(({value:u})=>u).map(({key:u})=>u)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let c=a.get(s.ip)||t.get(s.ip);c?s.user=c:At.warn(`No node found for IP address ${s.ip}, available nodes are ${Array.from(new Set([...a.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return i(s)},e);let n=[];for(let s of r)if(s.secureContexts){let i=o(()=>{let a=new Set(s.secureContexts.values());s.defaultContext&&a.add(s.defaultContext);for(let c of a)try{let l=Array.from(jo);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=rT.createSecureContext(u)}catch(l){At.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),Hs.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1&&i()}BV(()=>{for(let s of n)s()})}function BV(e){let t=0;Ud(r=>{r?.ca&&(jo.add(r.ca),jo.size!==t&&(t=jo.size,e?.()))})}function iue(e=!0){xV=e}function oue(e){xV||(at(),tc=e.databases,Qa(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||rc;for(let[s,i]of tT){let a=i.get(r);a&&(a.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];kV(r,s,e),CC.get(s)?.forEach(i=>i(s))}}))}function kV(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 FV extends Fr{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||rc,a=i.get(e),c=a?.tableById||[];c[t.tableId]=t;let l=a?.ready;if(At.trace("Setting up replicator subscription to database",e),!a?.auditStore)return this.subscription=a=new Xn,i.set(e,a),a.tableById=c,a.auditStore=t.auditStore,a.dbisDB=t.dbisDB,a.databaseName=e,l&&l(a),a;this.subscription=a}static subscribeOnThisThread(i,a){return!0}static async load(i){if(i){let a=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),a]);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=cue(h,FV.subscription,e);if(E?.isConnected){let g=vd(t.auditStore,e,h)[jS];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new MV.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:rue++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;At.warn("Error in load from node",Hl,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function aue(e,t,r,n,s){let i=tT.get(e);i||tT.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new qd(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function cue(e,t,r){let n=OV.get(Hl);n||(n=new Map,OV.set(Hl,n));let s=n.get(r);if(s)return s;let i=Yt().primaryStore.get(e);return i?.url&&(s=new qd(i.url,t,r,Hl,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function lh(e,t,r){r||(r={}),r.serverName=e.name;let n=await QS(e.url,r),s=ih(n,{},{});return new Promise((i,a)=>{n.on("open",()=>{At.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{a(c)}),n.on("close",c=>{At.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function eh(e){try{vV.isMainThread&&At.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=rc.get(e.database);if(!t){let n;t=new Promise(s=>{At.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,rc.set(e.database,t)}let r=aue(e.nodes[0].url,t,e.database,e.nodes[0].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=>Xp(n,e.database)),e.replicateByDefault)}catch(t){At.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function FS({name:e,url:t,database:r}){At.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(Yt().primaryStore.getRange({})));let n=tT.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function lue(){if(DC!==void 0)return DC;let e=Hs.default.get(B.OPERATIONSAPI_TLS_CERTIFICATE)||Hs.default.get(B.TLS_CERTIFICATE);if(e)return DC=new LV.X509Certificate((0,DV.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function it(){return Hl||(Hl=Hs.default.get("replication_hostname")??Si(Hs.default.get("replication_url"))??lue()??PV("operationsapi_network_secureport")??PV("operationsapi_network_port")??"127.0.0.1")}function uue(){Hl=void 0}function PV(e){let t=Hs.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function eT(e){let t=Hs.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function JS(e){return Qp(e)?.[it()]}function Ja(){let e=Hs.default.get("replication_url");return e||nT(it())}function nT(e){let t=eT("replication_port");if(t)return`ws://${e}:${t}`;if(t=eT("replication_secureport"),t)return`wss://${e}:${t}`;if(t=eT("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=eT("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Si(e){if(e)return new URL(e).hostname}function Qa(e,t){for(let n of Object.getOwnPropertyNames(Me))r(n);return vp(n=>{r(n)}),wl((n,s)=>{r(n.databaseName)});function r(n){let s=Me[n];At.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):due(n)&&t(s,n,!1)}o(r,"forDatabase")}function due(e){let t=Me[e];for(let r in t)if(t[r].replicate)return!0}function Jp(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function fue(e){let t={message:""};if(e.replicated){e.replicated=!1,At.trace?.("Replicating operation",e.operation,"to nodes",Ue.nodes.map(n=>n.name));let r=await Promise.allSettled(Ue.nodes.map(n=>lh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Ue.nodes[s]?.name,i})}return t}var Hs,At,LV,DV,rT,MV,vV,UV,xV,rue,nue,jo,tc,tT,OV,DC,Hl,us=ie(()=>{Oe();Ua();Nu();OC();xr();Hs=w(ue()),At=w(Q()),LV=require("crypto");ZS();DV=require("fs");th();vl();H();nC();rT=w(require("node:tls")),MV=w(_e()),vV=require("worker_threads"),UV=w(fs()),rue=1,nue=[],jo=Hs.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1?new Set(rT.rootCertificates):new Set;o(sue,"start");o(BV,"monitorNodeCAs");o(iue,"disableReplication");o(oue,"assignReplicationSource");o(kV,"setReplicator");tT=new Map;o(aue,"getSubscriptionConnection");OV=new Map;o(cue,"getRetrievalConnectionByName");o(lh,"sendOperationToNode");o(eh,"subscribeToNode");o(FS,"unsubscribeFromNode");o(lue,"getCommonNameFromCert");o(it,"getThisNodeName");o(uue,"clearThisNodeName");Object.defineProperty(Ue,"hostname",{get(){return it()}});o(PV,"getHostFromListeningPort");o(eT,"getPortFromListeningPort");o(JS,"getThisNodeId");Ue.replication={getThisNodeId:JS,exportIdMapping:Qp};o(Ja,"getThisNodeUrl");o(nT,"hostnameToUrl");o(Si,"urlToNodeName");o(Qa,"forEachReplicatedDatabase");o(due,"hasExplicitlyReplicatedTable");o(Jp,"lastTimeInAuditStore");o(fue,"replicateOperation")});var cT=M((ixe,VV)=>{"use strict";var $d=qG(),{validateBySchema:uh}=ft(),{commonValidators:Vd,schemaRegex:MC}=qi(),hr=require("joi"),mue=Q(),pue=require("uuid").v4,oT=ko(),Kd=(H(),D(W)),hue=require("util"),nc=os(),{handleHDBError:Qo,hdbErrors:Eue,ClientError:dh}=_e(),{HDB_ERROR_MSGS:sT,HTTP_STATUS_CODES:Jo}=Eue,{SchemaEventMsg:aT}=ns(),HV=sr(),{getDatabases:_ue}=(Oe(),D(mt)),{transformReq:Yd}=oe(),{replicateOperation:qV}=(us(),D(zo)),iT=hr.string().min(1).max(Vd.schema_length.maximum).pattern(MC).messages({"string.pattern.base":"{:#label} "+Vd.schema_format.message}),gue=hr.string().min(1).max(Vd.schema_length.maximum).pattern(MC).messages({"string.pattern.base":"{:#label} "+Vd.schema_format.message}).required(),Sue=hr.string().min(1).max(Vd.schema_length.maximum).pattern(MC).messages({"string.pattern.base":"{:#label} "+Vd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();VV.exports={createSchema:Tue,createSchemaStructure:GV,createTable:yue,createTableStructure:$V,createAttribute:wue,dropSchema:Rue,dropTable:Aue,dropAttribute:bue,getBackup:Nue};async function Tue(e){let t=await GV(e);return oT.signalSchemaChange(new aT(process.pid,e.operation,e.schema)),t}o(Tue,"createSchema");async function GV(e){let t=uh(e,hr.object({database:iT,schema:iT}));if(t)throw new dh(t.message);if(Yd(e),!await $d.checkSchemaExists(e.schema))throw Qo(new Error,sT.SCHEMA_EXISTS_ERR(e.schema),Jo.BAD_REQUEST,Kd.LOG_LEVELS.ERROR,sT.SCHEMA_EXISTS_ERR(e.schema),!0);return await nc.createSchema(e),`database '${e.schema}' successfully created`}o(GV,"createSchemaStructure");async function yue(e){return Yd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await $V(e)}o(yue,"createTable");async function $V(e){let t=uh(e,hr.object({database:iT,schema:iT,table:gue,residence:hr.array().items(hr.string().min(1)).optional(),hash_attribute:Sue}));if(t)throw new dh(t.message);if(!await $d.checkSchemaTableExists(e.schema,e.table))throw Qo(new Error,sT.TABLE_EXISTS_ERR(e.schema,e.table),Jo.BAD_REQUEST,Kd.LOG_LEVELS.ERROR,sT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:pue(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await nc.createTable(n,e);else throw Qo(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Jo.BAD_REQUEST);else await nc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o($V,"createTableStructure");async function Rue(e){let t=uh(e,hr.object({database:hr.string(),schema:hr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new dh(t.message);Yd(e);let r=await $d.checkSchemaExists(e.schema);if(r)throw Qo(new Error,r,Jo.NOT_FOUND,Kd.LOG_LEVELS.ERROR,r,!0);let n=await $d.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await nc.dropSchema(e),oT.signalSchemaChange(new aT(process.pid,e.operation,e.schema)),await HV.purgeSchemaTableStreams(e.schema,s);let i=await qV(e);return i.message=`successfully deleted '${e.schema}'`,i}o(Rue,"dropSchema");async function Aue(e){let t=uh(e,hr.object({database:hr.string(),schema:hr.string(),table:hr.string().required()}));if(t)throw new dh(t.message);Yd(e);let r=await $d.checkSchemaTableExists(e.schema,e.table);if(r)throw Qo(new Error,r,Jo.NOT_FOUND,Kd.LOG_LEVELS.ERROR,r,!0);await nc.dropTable(e),await HV.purgeTableStream(e.schema,e.table);let n=await qV(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(Aue,"dropTable");async function bue(e){let t=uh(e,hr.object({database:hr.string(),schema:hr.string(),table:hr.string().required(),attribute:hr.string().required()}));if(t)throw new dh(t.message);Yd(e);let r=await $d.checkSchemaTableExists(e.schema,e.table);if(r)throw Qo(new Error,r,Jo.NOT_FOUND,Kd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Qo(new Error,"You cannot drop a hash attribute",Jo.BAD_REQUEST,void 0,void 0,!0);if(Kd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Qo(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Jo.BAD_REQUEST,void 0,void 0,!0);try{return await nc.dropAttribute(e),Iue(e),oT.signalSchemaChange(new aT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw mue.error(`Got an error deleting attribute ${hue.inspect(e)}.`),n}}o(bue,"dropAttribute");function Iue(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)}o(Iue,"dropAttributeFromGlobal");async function wue(e){Yd(e);let t=_ue()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Qo(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Jo.BAD_REQUEST,void 0,void 0,!0);return await nc.createAttribute(e),oT.signalSchemaChange(new aT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(wue,"createAttribute");function Nue(e){return nc.getBackup(e)}o(Nue,"getBackup")});var YV=M((axe,KV)=>{"use strict";var{OPERATIONS_ENUM:Cue}=(H(),D(W)),vC=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Cue.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};KV.exports=vC});var UC=M((uxe,JV)=>{"use strict";var Oue=os(),lxe=YV(),lT=oe(),uT=(H(),D(W)),Pue=ue(),{handleHDBError:WV,hdbErrors:Lue}=_e(),{HDB_ERROR_MSGS:zV,HTTP_STATUS_CODES:jV}=Lue,Due=Object.values(uT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),QV="To use this operation audit log must be enabled in harperdb-config.yaml";JV.exports=Mue;async function Mue(e){if(lT.isEmpty(e.schema))throw new Error(zV.SCHEMA_REQUIRED_ERR);if(lT.isEmpty(e.table))throw new Error(zV.TABLE_REQUIRED_ERR);if(!Pue.get(uT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw WV(new Error,QV,jV.BAD_REQUEST,uT.LOG_LEVELS.ERROR,QV,!0);let t=lT.checkSchemaTableExist(e.schema,e.table);if(t)throw WV(new Error,t,jV.NOT_FOUND,uT.LOG_LEVELS.ERROR,t,!0);if(!lT.isEmpty(e.search_type)&&Due.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await Oue.readAuditLog(e)}o(Mue,"readAuditLog")});var ZV=M((fxe,XV)=>{"use strict";var{OPERATIONS_ENUM:vue}=(H(),D(W)),xC=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=vue.GET_BACKUP,this.schema=t,this.table=r}};XV.exports=xC});var r1=M((Exe,t1)=>{"use strict";var Uue=os(),pxe=ZV(),BC=oe(),xue=(H(),D(W)),hxe=ue(),{handleHDBError:Bue,hdbErrors:Fue}=_e(),{HDB_ERROR_MSGS:e1,HTTP_STATUS_CODES:kue}=Fue;t1.exports=Hue;async function Hue(e){if(BC.isEmpty(e.schema))throw new Error(e1.SCHEMA_REQUIRED_ERR);if(BC.isEmpty(e.table))throw new Error(e1.TABLE_REQUIRED_ERR);let t=BC.checkSchemaTableExist(e.schema,e.table);if(t)throw Bue(new Error,t,kue.NOT_FOUND,xue.LOG_LEVELS.ERROR,t,!0);return await Uue.getBackup(readAuditLogObject)}o(Hue,"getBackup")});var o1=M((gxe,i1)=>{"use strict";var que=ue(),sc=require("joi"),Gue=ft(),n1=require("moment"),$ue=require("fs-extra"),FC=require("path"),Vue=require("lodash"),fh=(H(),D(W)),{LOG_LEVELS:ql}=(H(),D(W)),Kue="YYYY-MM-DD hh:mm:ss",Yue=FC.resolve(__dirname,"../logs");i1.exports=function(e){return Gue.validateBySchema(e,Wue)};var Wue=sc.object({from:sc.custom(s1),until:sc.custom(s1),level:sc.valid(ql.NOTIFY,ql.FATAL,ql.ERROR,ql.WARN,ql.INFO,ql.DEBUG,ql.TRACE),order:sc.valid("asc","desc"),limit:sc.number().min(1),start:sc.number().min(0),log_name:sc.custom(zue)});function s1(e,t){if(n1(e,n1.ISO_8601).format(Kue)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(s1,"validateDatetime");function zue(e,t){if(Vue.invert(fh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=que.get(fh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?fh.LOG_NAMES.HDB:e,i=s===fh.LOG_NAMES.INSTALL?FC.join(Yue,fh.LOG_NAMES.INSTALL):FC.join(n,s);return $ue.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(zue,"validateReadLogPath")});var HC=M((Txe,c1)=>{"use strict";var dT=(H(),D(W)),jue=Q(),Que=ue(),Jue=o1(),kC=require("path"),a1=require("fs-extra"),{once:Xue}=require("events"),{handleHDBError:Zue,hdbErrors:ede}=_e(),{PACKAGE_ROOT:tde}=bt(),{replicateOperation:rde}=(us(),D(zo)),nde=kC.join(tde,"logs"),sde=1e3,ide=200;c1.exports=ode;async function ode(e){let t=Jue(e);if(t)throw Zue(t,t.message,ede.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=rde(e),n=Que.get(dT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?dT.LOG_NAMES.HDB:e.log_name,i=s===dT.LOG_NAMES.INSTALL?kC.join(nde,dT.LOG_NAMES.INSTALL):kC.join(n,s),a=e.level!==void 0,c=a?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.until!==void 0,f=d?new Date(e.until):void 0,m=e.limit===void 0?sde:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,g=0;p==="desc"&&!u&&!f&&(g=Math.max(a1.statSync(i).size-(E+5)*ide,0));let A=a1.createReadStream(i,{start:g});A.on("error",q=>{jue.error(q)});let S=0,R=[],N="",O;A.on("data",q=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;q=N+q;let J=0,Y;for(;(Y=k.exec(q))&&!A.destroyed;){O&&(O.message=q.slice(J,Y.index),F(O));let[le,ae,re]=Y,Re=re.split("] ["),Te=Re[0],Fe=Re[1];Re.splice(0,2),O={timestamp:ae,thread:Te,level:Fe,tags:Re,message:""},J=Y.index+le.length}N=q.slice(J)}),A.on("end",q=>{A.destroyed||O&&(O.message=N.trim(),F(O))}),A.resume();function F(q){let k,J,Y;switch(!0){case(a&&l&&d):k=new Date(q.timestamp),J=new Date(u),Y=new Date(f),q.level===c&&k>=J&&k<=Y&&S<h?S++:q.level===c&&k>=J&&k<=Y&&(ro(q,p,R),S++,S===E&&A.destroy());break;case(a&&l):k=new Date(q.timestamp),J=new Date(u),q.level===c&&k>=J&&S<h?S++:q.level===c&&k>=J&&(ro(q,p,R),S++,S===E&&A.destroy());break;case(a&&d):k=new Date(q.timestamp),Y=new Date(f),q.level===c&&k<=Y&&S<h?S++:q.level===c&&k<=Y&&(ro(q,p,R),S++,S===E&&A.destroy());break;case(l&&d):k=new Date(q.timestamp),J=new Date(u),Y=new Date(f),k>=J&&k<=Y&&S<h?S++:k>=J&&k<=Y&&(ro(q,p,R),S++,S===E&&A.destroy());break;case a:q.level===c&&S<h?S++:q.level===c&&(ro(q,p,R),S++,S===E&&A.destroy());break;case l:k=new Date(q.timestamp),J=new Date(u),k>=J&&S<h?S++:k>=J&&S>=h&&(ro(q,p,R),S++,S===E&&A.destroy());break;case d:k=new Date(q.timestamp),Y=new Date(f),k<=Y&&S<h?S++:k<=Y&&S>=h&&(ro(q,p,R),S++,S===E&&A.destroy());break;default:S<h?S++:(ro(q,p,R),S++,S===E&&A.destroy())}}o(F,"onLogMessage"),await Xue(A,"close");let ee=await r;if(ee.replicated){for(let q of R)q.node=server.hostname;for(let q of ee.replicated){let k=q.node;if(q.status==="failed")ro({timestamp:new Date().toISOString(),level:"error",node:k,message:`Error retrieving logs: ${q.reason}`},p,R);else for(let J of q.results)J.node=k,ro(J,p,R)}}return R}o(ode,"readLog");function ro(e,t,r){t==="desc"?ade(e,r):t==="asc"?cde(e,r):r.push(e)}o(ro,"pushLineToResult");function ade(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)}o(ade,"insertDescending");function cde(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)}o(cde,"insertAscending")});var fT=M((wxe,f1)=>{"use strict";var qC=require("joi"),{string:Wd,boolean:l1,date:lde}=qC.types(),ude=ft(),{validateSchemaExists:Rxe,validateTableExists:Axe,validateSchemaName:bxe}=qi(),dde=(H(),D(W)),fde=wt(),u1=ue();u1.initSync();var Ixe=Wd.invalid(u1.get(dde.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(fde.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),d1={operation:Wd.valid("add_node","update_node","set_node_replication"),node_name:Wd.optional(),subscriptions:qC.array().items({table:Wd.optional(),schema:Wd.optional(),database:Wd.optional(),subscribe:l1.required(),publish:l1.required().custom(pde),start_time:lde.iso()})};function mde(e){return ude.validateBySchema(e,qC.object(d1))}o(mde,"addUpdateNodeValidator");function pde(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`)}o(pde,"checkForFalsy");f1.exports={addUpdateNodeValidator:mde,validationSchema:d1}});var zd=M((Cxe,m1)=>{"use strict";var GC=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},$C=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};m1.exports={Node:GC,NodeSubscription:$C}});var h1=M((Pxe,p1)=>{"use strict";var hde=(H(),D(W)).OPERATIONS_ENUM,VC=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=hde.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};p1.exports=VC});var mh=M((Dxe,E1)=>{"use strict";var KC=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},YC=class{static{o(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,a,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=a,c!==void 0&&(this.attributes=c)}};E1.exports={RemotePayloadObject:KC,RemotePayloadSubscription:YC}});var g1=M((vxe,_1)=>{"use strict";var WC=class{static{o(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,a=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=a}};_1.exports=WC});var T1=M((Hxe,S1)=>{"use strict";var Ede=g1(),xxe=$t(),Bxe=_t(),_de=Q(),{getSchemaPath:Fxe,getTransactionAuditStorePath:kxe}=yt(),{getDatabases:gde}=(Oe(),D(mt));S1.exports=Sde;async function Sde(e){let t=new Ede;try{let r=gde()[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){_de.warn(`unable to stat table dbi due to ${r}`)}return t}o(Sde,"lmdbGetTableSize")});var R1=M((Gxe,y1)=>{"use strict";var zC=class{static{o(this,"SystemInformationObject")}constructor(t,r,n,s,i,a,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=a,this.harperdb_processes=c}};y1.exports=zC});var Qd=M((zxe,w1)=>{"use strict";var Tde=require("fs-extra"),yde=require("path"),_n=require("systeminformation"),ic=Q(),A1=sr(),Vxe=wt(),jd=(H(),D(W)),Rde=T1(),Ade=Ol(),{getThreadInfo:b1}=nt(),ph=ue();ph.initSync();var bde=R1(),{openEnvironment:Kxe}=_t(),{getSchemaPath:Yxe}=yt(),{database:Wxe,databases:jC}=(Oe(),D(mt)),mT;w1.exports={getHDBProcessInfo:ZC,getNetworkInfo:tO,getDiskInfo:eO,getMemoryInfo:XC,getCPUInfo:JC,getTimeInfo:QC,getSystemInformation:rO,systemInformation:Ide,getTableSize:nO,getMetrics:sO};function QC(){return _n.time()}o(QC,"getTimeInfo");async function JC(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await _n.cpu();d.cpu_speed=await _n.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:g,cpus:A,...S}=await _n.currentLoad();return S.cpus=[],A.forEach(R=>{let{rawLoad:N,rawLoadIdle:O,rawLoadIrq:F,rawLoadNice:ee,rawLoadSystem:q,rawLoadUser:k,...J}=R;S.cpus.push(J)}),d.current_load=S,d}catch(e){return ic.error(`error in getCPUInfo: ${e}`),{}}}o(JC,"getCPUInfo");async function XC(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await _n.mem();return Object.assign(s,process.memoryUsage())}catch(e){return ic.error(`error in getMemoryInfo: ${e}`),{}}}o(XC,"getMemoryInfo");async function ZC(){let e={core:[],clustering:[]};try{let t=await _n.processes(),r;try{r=Number.parseInt(await Tde.readFile(yde.join(ph.get(jd.CONFIG_PARAMS.ROOTPATH),jd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===jd.NODE_ERROR_CODES.ENOENT)ic.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 ic.error(`error in getHDBProcessInfo: ${t}`),e}}o(ZC,"getHDBProcessInfo");async function eO(){let e={};try{if(!ph.get(jd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await _n.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await _n.fsStats();return e.read_write=u,e.size=await _n.fsSize(),e}catch(t){return ic.error(`error in getDiskInfo: ${t}`),e}}o(eO,"getDiskInfo");async function tO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return ph.get(jd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await _n.networkInterfaceDefault(),e.latency=await _n.inetChecksite("google.com"),(await _n.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:a,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await _n.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return ic.error(`error in getNetworkInfo: ${t}`),e}}o(tO,"getNetworkInfo");async function rO(){if(mT!==void 0)return mT;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await _n.osInfo();e=c;let l=await _n.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,mT=e,mT}catch(t){return ic.error(`error in getSystemInformation: ${t}`),e}}o(rO,"getSystemInformation");async function nO(){let e=[],t=await Ade.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Rde(n));return e}o(nO,"getTableSize");async function sO(){let e={};for(let t in jC){let r=e[t]={},n=r.tables={};for(let s in jC[t])try{let i=jC[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 a=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=a[l];n[s]=c}catch(i){ic.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(sO,"getMetrics");async function I1(){if(ph.get(jd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await A1.getNATSReferences(),t=await A1.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 a={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(a)}return r}}o(I1,"getNatsStreamInfo");async function Ide(e){let t=new bde;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await rO(),t.time=QC(),t.cpu=await JC(),t.memory=await XC(),t.disk=await eO(),t.network=await tO(),t.harperdb_processes=await ZC(),t.table_size=await nO(),t.metrics=await sO(),t.threads=await b1(),t.replication=await I1(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await rO();break;case"time":t.time=QC();break;case"cpu":t.cpu=await JC();break;case"memory":t.memory=await XC();break;case"disk":t.disk=await eO();break;case"network":t.network=await tO();break;case"harperdb_processes":t.harperdb_processes=await ZC();break;case"table_size":t.table_size=await nO();break;case"database_metrics":case"metrics":t.metrics=await sO();break;case"threads":t.threads=await b1();break;case"replication":t.replication=await I1();break;default:break}return t}o(Ide,"systemInformation")});var Xo=M((Zxe,P1)=>{"use strict";var wde=Bn(),iO=oe(),Nde=require("util"),Gl=(H(),D(W)),N1=ue();N1.initSync();var Cde=vN(),C1=fn(),{Node:Qxe,NodeSubscription:Jxe}=zd(),Ode=Ju(),Pde=h1(),{RemotePayloadObject:Lde,RemotePayloadSubscription:Dde}=mh(),{handleHDBError:Mde,hdbErrors:vde}=_e(),{HTTP_STATUS_CODES:Ude,HDB_ERROR_MSGS:xde}=vde,Bde=di(),Fde=Qd(),{packageJson:kde}=bt(),{getDatabases:Hde}=(Oe(),D(mt)),Xxe=Nde.promisify(Cde.authorize),qde=C1.searchByHash,Gde=C1.searchByValue;P1.exports={isEmpty:$de,getNodeRecord:Vde,upsertNodeRecord:Kde,buildNodePayloads:Yde,checkClusteringEnabled:Wde,getAllNodeRecords:zde,getSystemInfo:jde,reverseSubscription:O1};function $de(e){return e==null}o($de,"isEmpty");async function Vde(e){let t=new Ode(Gl.SYSTEM_SCHEMA_NAME,Gl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return qde(t)}o(Vde,"getNodeRecord");async function Kde(e){let t=new Pde(Gl.SYSTEM_SCHEMA_NAME,Gl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return wde.upsert(t)}o(Kde,"upsertNodeRecord");function O1(e){if(iO.isEmpty(e.subscribe)||iO.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}o(O1,"reverseSubscription");function Yde(e,t,r,n){let s=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:l,table:u}=c,d=iO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=O1(c),p=Hde()[l]?.[u],h=new Dde(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new Lde(r,t,s,n)}o(Yde,"buildNodePayloads");function Wde(){if(!N1.get(Gl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Mde(new Error,xde.CLUSTERING_NOT_ENABLED,Ude.BAD_REQUEST,void 0,void 0,!0)}o(Wde,"checkClusteringEnabled");async function zde(){let e=new Bde(Gl.SYSTEM_SCHEMA_NAME,Gl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Gde(e))}o(zde,"getAllNodeRecords");async function jde(){let e=await Fde.getSystemInformation();return{hdb_version:kde.version,node_version:e.node_version,platform:e.platform}}o(jde,"getSystemInfo")});var oO=M((t0e,F1)=>{"use strict";var pT=sr(),L1=oe(),D1=wt(),M1=(H(),D(W)),hT=Q(),v1=cT(),Qde=rp(),{RemotePayloadObject:Jde}=mh(),{handleHDBError:U1,hdbErrors:Xde}=_e(),{HTTP_STATUS_CODES:x1}=Xde,{NodeSubscription:B1}=zd();F1.exports=Zde;async function Zde(e,t){let r;try{r=await pT.request(`${t}.${D1.REQUEST_SUFFIX}`,new Jde(M1.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),hT.trace("Response from remote describe all request:",r)}catch(a){hT.error(`addNode received error from describe all request to remote node: ${a}`);let c=pT.requestErrorHandler(a,"add_node",t);throw U1(new Error,c,x1.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===D1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw U1(new Error,a,x1.INTERNAL_SERVER_ERROR,"error",a)}let n=r.message,s=[],i=[];for(let a of e){let{table:c}=a,l=a.database??a.schema??"data";if(l===M1.SYSTEM_SCHEMA_NAME){await pT.createLocalTableStream(l,c);let h=new B1(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h);continue}let u=L1.doesSchemaExist(l),d=n[l]!==void 0,f=c?L1.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(hT.trace(`addNode creating schema: ${l}`),await v1.createSchema({operation:"create_schema",schema:l})),!f&&m){hT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Qde(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await v1.createTable(h)}await pT.createLocalTableStream(l,c);let p=new B1(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p)}return{added:i,skipped:s}}o(Zde,"reviewSubscriptions")});var Jd={};Ie(Jd,{addNodeBack:()=>aO,removeNodeBack:()=>cO,setNode:()=>nfe});async function nfe(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=Si(t)):t=nT(r);let n=(0,H1.validateBySchema)(e,rfe);if(n)throw(0,Zo.handleHDBError)(n,n.message,tfe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new Zo.ClientError("url or hostname is required for remove_node operation");let p=r,h=Yt(),E=await h.get(p);if(!E)throw new Zo.ClientError(p+" does not exist");try{await lh({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?it():p},void 0)}catch(g){ms.warn(`Error removing node from target node ${p}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new Zo.ClientError("url required for this operation");let s=Ja();if(s==null)throw new Zo.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,qs.getReplicationCert)();let p=await(0,qs.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(a=await(0,qs.createCsr)(),ms.info("Sending CSR to target node:",t)):p&&(c=p.certificate,ms.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,ac.get)(B.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,ac.get)(B.REPLICATION_SHARD)!==void 0&&(l.shard=(0,ac.get)(B.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(k1):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=k1(e);l.subscribe=p.subscribe,l.publish=p.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await lh({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,ms.warn("Error adding node:",t,"to cluster:",p),d=p}if(a&&(!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)}`);a&&(ms.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,qs.setCertTable)({name:efe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,qs.setCertTable)({name:it(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let p={url:s,ca:c,replicates:!0,subscriptions:null};(0,ac.get)(B.REPLICATION_SHARD)!==void 0&&(p.shard=(0,ac.get)(B.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await Yo(it(),p)}await Yo(u?u.nodeName:f.name??Si(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 aO(e){ms.trace("addNodeBack received request:",e);let t=await(0,qs.signCertificate)(e),r;e.csr?(r=t.signingCA,ms.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,ms.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,qs.getReplicationCertAuth)();if(n.replicates){let i={url:Ja(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,ac.get)(B.REPLICATION_SHARD)!==void 0&&(i.shard=(0,ac.get)(B.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Yo(it(),i)}return await Yo(e.hostname,n),t.nodeName=it(),t.usingCA=s?.certificate,ms.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function cO(e){ms.trace("removeNodeBack received request:",e),await Yt().delete(e.name)}function k1(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var qs,H1,oc,ac,ms,Zo,efe,tfe,rfe,Xd=ie(()=>{qs=w(fs()),H1=w(ft()),oc=w(require("joi")),ac=w(ue());H();th();vl();us();ms=w(Q()),Zo=w(_e()),{pki:efe}=require("node-forge"),{HTTP_STATUS_CODES:tfe}=Zo.hdbErrors,rfe=oc.default.object({hostname:oc.default.string(),verify_tls:oc.default.boolean(),replicates:oc.default.boolean(),subscriptions:oc.default.array(),revoked_certificates:oc.default.array(),shard:oc.default.number()});o(nfe,"setNode");o(aO,"addNodeBack");o(cO,"removeNodeBack");o(k1,"reverseSubscription")});var TT=M((u0e,G1)=>{"use strict";var{handleHDBError:ET,hdbErrors:sfe}=_e(),{HTTP_STATUS_CODES:_T}=sfe,{addUpdateNodeValidator:ife}=fT(),gT=Q(),ST=(H(),D(W)),q1=wt(),ofe=oe(),hh=sr(),Eh=Xo(),lO=ue(),afe=oO(),{Node:cfe,NodeSubscription:lfe}=zd(),{broadcast:ufe}=nt(),{setNode:dfe}=(Xd(),D(Jd)),c0e=ue(),l0e=(H(),D(W)),ffe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",mfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",pfe=lO.get(ST.CONFIG_PARAMS.CLUSTERING_NODENAME);G1.exports=hfe;async function hfe(e,t=!1){if(gT.trace("addNode called with:",e),lO.get(ST.CONFIG_PARAMS.REPLICATION_URL)||lO.get(ST.CONFIG_PARAMS.REPLICATION_HOSTNAME))return dfe(e);Eh.checkClusteringEnabled();let r=ife(e);if(r)throw ET(r,r.message,_T.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await Eh.getNodeRecord(n);if(!ofe.isEmptyOrZeroLength(f))throw ET(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,_T.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await afe(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=ffe,a;let c=Eh.buildNodePayloads(s,pfe,ST.OPERATIONS_ENUM.ADD_NODE,await Eh.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 lfe(p.schema,p.table,p.publish,p.subscribe))}gT.trace("addNode sending remote payload:",c);let u;try{u=await hh.request(`${n}.${q1.REQUEST_SUFFIX}`,c)}catch(f){gT.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 hh.updateRemoteConsumer(E,n)}let m=hh.requestErrorHandler(f,"add_node",n);throw ET(new Error,m,_T.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===q1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw ET(new Error,f,_T.INTERNAL_SERVER_ERROR,"error",f)}gT.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await hh.updateRemoteConsumer(p,n),p.subscribe===!0&&await hh.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new cfe(n,l,u.system_info);return await Eh.upsertNodeRecord(d),ufe({type:"nats_update"}),i.length>0?a.message=mfe:a.message=`Successfully added '${n}' to manifest`,a}o(hfe,"addNode")});var mO=M((m0e,V1)=>{"use strict";var{handleHDBError:uO,hdbErrors:Efe}=_e(),{HTTP_STATUS_CODES:dO}=Efe,{addUpdateNodeValidator:_fe}=fT(),_h=Q(),yT=(H(),D(W)),$1=wt(),f0e=oe(),gh=sr(),Sh=Xo(),fO=ue(),{cloneDeep:gfe}=require("lodash"),Sfe=oO(),{Node:Tfe,NodeSubscription:yfe}=zd(),{broadcast:Rfe}=nt(),{setNode:Afe}=(Xd(),D(Jd)),bfe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Ife="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",wfe=fO.get(yT.CONFIG_PARAMS.CLUSTERING_NODENAME);V1.exports=Nfe;async function Nfe(e){if(_h.trace("updateNode called with:",e),fO.get(yT.CONFIG_PARAMS.REPLICATION_URL)??fO.get(yT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Afe(e);Sh.checkClusteringEnabled();let t=_fe(e);if(t)throw uO(t,t.message,dO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Sh.getNodeRecord(r);s.length>0&&(n=gfe(s));let{added:i,skipped:a}=await Sfe(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=bfe,c;let l=Sh.buildNodePayloads(i,wfe,yT.OPERATIONS_ENUM.UPDATE_NODE,await Sh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];_h.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}_h.trace("updateNode sending remote payload:",l);let u;try{u=await gh.request(`${r}.${$1.REQUEST_SUFFIX}`,l)}catch(d){_h.error(`updateNode received error from request: ${d}`);let f=gh.requestErrorHandler(d,"update_node",r);throw uO(new Error,f,dO.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===$1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw uO(new Error,d,dO.INTERNAL_SERVER_ERROR,"error",d)}_h.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await gh.updateRemoteConsumer(m,r),m.subscribe===!0?await gh.updateConsumerIterator(m.schema,m.table,r,"start"):await gh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new Tfe(r,[],u.system_info)]),await Cfe(n[0],i,u.system_info),a.length>0?c.message=Ife:c.message=`Successfully updated '${r}'`,c}o(Nfe,"updateNode");async function Cfe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let a=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===a.schema&&d.table===a.table){d.publish=a.publish,d.subscribe=a.subscribe,c=!0;break}}c||n.subscriptions.push(new yfe(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await Sh.upsertNodeRecord(n),Rfe({type:"nats_update"})}o(Cfe,"updateNodeTable")});var j1=M((h0e,z1)=>{"use strict";var W1=require("joi"),{string:K1}=W1.types(),Ofe=ft(),Y1=(H(),D(W)),Pfe=ue(),Lfe=wt();z1.exports=Dfe;function Dfe(e){let t=K1.invalid(Pfe.get(Y1.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Lfe.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=W1.object({operation:K1.valid(Y1.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Ofe.validateBySchema(e,r)}o(Dfe,"removeNodeValidator")});var RT=M((_0e,eK)=>{"use strict";var{handleHDBError:Q1,hdbErrors:Mfe}=_e(),{HTTP_STATUS_CODES:J1}=Mfe,vfe=j1(),Th=Q(),X1=Xo(),Ufe=oe(),Zd=(H(),D(W)),Z1=wt(),pO=sr(),hO=ue(),{RemotePayloadObject:xfe}=mh(),{NodeSubscription:Bfe}=zd(),Ffe=tp(),kfe=gl(),{broadcast:Hfe}=nt(),{setNode:qfe}=(Xd(),D(Jd)),Gfe=hO.get(Zd.CONFIG_PARAMS.CLUSTERING_NODENAME);eK.exports=$fe;async function $fe(e){if(Th.trace("removeNode called with:",e),hO.get(Zd.CONFIG_PARAMS.REPLICATION_URL)??hO.get(Zd.CONFIG_PARAMS.REPLICATION_HOSTNAME))return qfe(e);X1.checkClusteringEnabled();let t=vfe(e);if(t)throw Q1(t,t.message,J1.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await X1.getNodeRecord(r);if(Ufe.isEmptyOrZeroLength(n))throw Q1(new Error,`Node '${r}' was not found.`,J1.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new xfe(Zd.OPERATIONS_ENUM.REMOVE_NODE,Gfe,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await pO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await pO.updateRemoteConsumer(new Bfe(d.schema,d.table,!1,!1),r)}catch(f){Th.error(f)}}try{i=await pO.request(`${r}.${Z1.REQUEST_SUFFIX}`,s),Th.trace("Remove node reply from remote node:",r,i)}catch(l){Th.error("removeNode received error from request:",l),a=!0}let c=new Ffe(Zd.SYSTEM_SCHEMA_NAME,Zd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await kfe.deleteRecord(c),Hfe({type:"nats_update"}),i?.status===Z1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(Th.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`}o($fe,"removeNode")});var nK=M((S0e,rK)=>{"use strict";var tK=require("joi"),{string:Vfe,array:Kfe}=tK.types(),Yfe=ft(),Wfe=fT();rK.exports=zfe;function zfe(e){let t=tK.object({operation:Vfe.valid("configure_cluster").required(),connections:Kfe.items(Wfe.validationSchema).required()});return Yfe.validateBySchema(e,t)}o(zfe,"configureClusterValidator")});var EO=M((y0e,cK)=>{"use strict";var sK=(H(),D(W)),AT=Q(),jfe=oe(),Qfe=ue(),Jfe=RT(),Xfe=TT(),Zfe=Xo(),eme=nK(),{handleHDBError:iK,hdbErrors:tme}=_e(),{HTTP_STATUS_CODES:oK}=tme,rme="Configure cluster complete.",nme="Failed to configure the cluster. Check the logs for more details.",sme="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";cK.exports=ime;async function ime(e){AT.trace("configure cluster called with:",e);let t=eme(e);if(t)throw iK(t,t.message,oK.BAD_REQUEST,void 0,void 0,!0);let r=await Zfe.getAllNodeRecords(),n=[];if(Qfe.get(sK.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await aK(Jfe,{operation:sK.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}AT.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 aK(Xfe,f,f.node_name);s.push(m)}AT.trace("All results from configure_cluster add node:",s);let a=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(AT.error(m.node_name,m?.error?.message,m?.error?.stack),a.includes(m.node_name)||a.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(jfe.isEmptyOrZeroLength(a))return{message:rme,connections:c};if(l)return{message:sme,failed_nodes:a,connections:c};throw iK(new Error,nme,oK.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(ime,"configureCluster");async function aK(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(aK,"functionWrapper")});var fK=M((A0e,dK)=>{"use strict";var yh=require("joi"),ome=ft(),{validateSchemaExists:lK,validateTableExists:ame,validateSchemaName:uK}=qi(),cme=yh.object({operation:yh.string().valid("purge_stream"),schema:yh.string().custom(lK).custom(uK).optional(),database:yh.string().custom(lK).custom(uK).optional(),table:yh.string().custom(ame).required()});function lme(e){return ome.validateBySchema(e,cme)}o(lme,"purgeStreamValidator");dK.exports=lme});var _O=M((I0e,mK)=>{"use strict";var{handleHDBError:ume,hdbErrors:dme}=_e(),{HTTP_STATUS_CODES:fme}=dme,mme=fK(),pme=sr(),hme=Xo();mK.exports=Eme;async function Eme(e){e.schema=e.schema??e.database;let t=mme(e);if(t)throw ume(t,t.message,fme.BAD_REQUEST,void 0,void 0,!0);hme.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await pme.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(Eme,"purgeStream")});var TO=M((N0e,TK)=>{"use strict";var SO=Xo(),_me=sr(),IT=ue(),ef=(H(),D(W)),$l=wt(),gme=oe(),gO=Q(),{RemotePayloadObject:Sme}=mh(),{ErrorCode:pK}=require("nats"),{parentPort:hK}=require("worker_threads"),{onMessageByType:Tme}=nt(),{getThisNodeName:yme}=(us(),D(zo)),{requestClusterStatus:Rme}=(th(),D(C$)),{getReplicationSharedStatus:Ame,getHDBNodeTable:bme}=(vl(),D(sC)),{CONFIRMATION_STATUS_POSITION:Ime,RECEIVED_VERSION_POSITION:wme,RECEIVED_TIME_POSITION:Nme,SENDING_TIME_POSITION:Cme,RECEIVING_STATUS_POSITION:Ome,RECEIVING_STATUS_RECEIVING:Pme}=(OC(),D(SV)),EK=IT.get(ef.CONFIG_PARAMS.CLUSTERING_ENABLED),_K=IT.get(ef.CONFIG_PARAMS.CLUSTERING_NODENAME);TK.exports={clusterStatus:Lme,buildNodeStatus:SK};var gK;Tme("cluster-status",async e=>{gK(e)});async function Lme(){if(IT.get(ef.CONFIG_PARAMS.REPLICATION_URL)||IT.get(ef.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(hK){hK.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{gK=i});for(let i of n.connections){let a=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=Ame(u,l,a);c.lastCommitConfirmed=bT(d[Ime]),c.lastReceivedRemoteTime=bT(d[wme]),c.lastReceivedLocalTime=bT(d[Nme]),c.sendingMessage=bT(d[Cme]),c.lastReceivedStatus=d[Ome]===Pme?"Receiving":"Waiting"}}}else n=Rme();n.node_name=yme();let s=bme().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:_K,is_enabled:EK,connections:[]};if(!EK)return e;let t=await SO.getAllNodeRecords();if(gme.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(SK(t[n],e.connections));return await Promise.allSettled(r),e}o(Lme,"clusterStatus");function bT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(bT,"asDate");async function SK(e,t){let r=e.name,n=new Sme(ef.OPERATIONS_ENUM.CLUSTER_STATUS,_K,void 0,await SO.getSystemInfo()),s,i,a=$l.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await _me.request($l.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===$l.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=$l.CLUSTER_STATUS_STATUSES.CLOSED,gO.error(`Error getting node status from ${r} `,s))}catch(l){gO.warn(`Error getting node status from ${r}`,l),l.code===pK.NoResponders?a=$l.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===pK.Timeout?a=$l.CLUSTER_STATUS_STATUSES.TIMEOUT:a=$l.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Dme(r,a,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!==ef.PRE_4_0_0_VERSION&&await SO.upsertNodeRecord(l)}catch(l){gO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(SK,"buildNodeStatus");function Dme(e,t,r,n,s,i,a,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=a,this.system_info=c}o(Dme,"NodeStatusObject")});var RO=M((O0e,yK)=>{"use strict";var{handleHDBError:Mme,hdbErrors:vme}=_e(),{HTTP_STATUS_CODES:Ume}=vme,xme=sr(),Bme=Xo(),yO=oe(),wT=require("joi"),Fme=ft(),kme=2e3,Hme=wT.object({timeout:wT.number().min(1),connected_nodes:wT.boolean(),routes:wT.boolean()});yK.exports=qme;async function qme(e){Bme.checkClusteringEnabled();let t=Fme.validateBySchema(e,Hme);if(t)throw Mme(t,t.message,Ume.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||yO.autoCastBoolean(n),a=s===void 0||yO.autoCastBoolean(s),c={nodes:[]},l=await xme.getServerList(r??kme),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))})),a&&(h.routes=p.cluster?.urls?p.cluster?.urls.map(E=>({host:E.split(":")[0],port:yO.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}o(qme,"clusterNetwork")});var IK=M((L0e,bK)=>{"use strict";var AO=require("joi"),RK=ft(),{routeConstraints:AK}=IA();bK.exports={setRoutesValidator:Gme,deleteRoutesValidator:$me};function Gme(e){let t=AO.object({server:AO.valid("hub","leaf"),routes:AK.required()});return RK.validateBySchema(e,t)}o(Gme,"setRoutesValidator");function $me(e){let t=AO.object({routes:AK.required()});return RK.validateBySchema(e,t)}o($me,"deleteRoutesValidator")});var NT=M((M0e,DK)=>{"use strict";var ea=Tt(),bO=oe(),Gs=(H(),D(W)),tf=ue(),wK=IK(),{handleHDBError:NK,hdbErrors:Vme}=_e(),{HTTP_STATUS_CODES:CK}=Vme,OK="cluster routes successfully set",PK="cluster routes successfully deleted";DK.exports={setRoutes:Yme,getRoutes:Wme,deleteRoutes:zme};function Kme(e){let t=ea.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 a=0,c=e.routes.length;a<c;a++){let l=e.routes[a];l.port=bO.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"?ea.updateConfigValue(Gs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):ea.updateConfigValue(Gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:OK,set:i,skipped:s}}o(Kme,"setRoutesNats");function Yme(e){let t=wK.setRoutesValidator(e);if(t)throw NK(t,t.message,CK.BAD_REQUEST,void 0,void 0,!0);if(tf.get(Gs.CONFIG_PARAMS.CLUSTERING_ENABLED))return Kme(e);let r=[],n=[],s=tf.get(Gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{LK(s,i)?n.push(i):(s.push(i),r.push(i))}),ea.updateConfigValue(Gs.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:OK,set:r,skipped:n}}o(Yme,"setRoutes");function LK(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}o(LK,"existsInArray");function Wme(){if(tf.get(Gs.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=ea.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return tf.get(Gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(Wme,"getRoutes");function zme(e){let t=wK.deleteRoutesValidator(e);if(t)throw NK(t,t.message,CK.BAD_REQUEST,void 0,void 0,!0);if(tf.get(Gs.CONFIG_PARAMS.CLUSTERING_ENABLED))return jme(e);let r=[],n=[],s=tf.get(Gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{LK(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),ea.updateConfigValue(Gs.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:PK,deleted:r,skipped:n}}o(zme,"deleteRoutes");function jme(e){let t=ea.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],a=!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,a=!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 a&&(r=bO.isEmptyOrZeroLength(r)?null:r,ea.updateConfigValue(Gs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=bO.isEmptyOrZeroLength(n)?null:n,ea.updateConfigValue(Gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:PK,deleted:s,skipped:i}}o(jme,"deleteRoutesNats")});var vK=M((U0e,MK)=>{"use strict";var Rh=require("alasql"),Vl=require("recursive-iterator"),Ri=Q(),Qme=oe(),Ah=(H(),D(W)),IO=class{static{o(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,Xme(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=>Ah.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=>!Ah.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,a=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[a]&&t[i].tables[a][Ah.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=Jme(t[i].tables[a].attribute_permissions):c=global.hdb_schema[i][a].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(a).filter(u=>!Ah.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new Rh.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(a,l)}}),this.ast}};function Jme(e){return e.filter(t=>t[Ah.PERMS_CRUD_ENUM.READ])}o(Jme,"filterReadRestrictedAttrs");function Xme(e,t,r,n,s){Zme(e,t,r,n,s)}o(Xme,"interpretAST");function bh(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,a=e.tableid;e.as&&(a=e.as),s.set(a,i)}}o(bh,"addSchemaTableToMap");function Zme(e,t,r,n,s){if(!e){Ri.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Rh.yy.Insert?npe(e,t,r):e instanceof Rh.yy.Select?epe(e,t,r,n,s):e instanceof Rh.yy.Update?tpe(e,t,r):e instanceof Rh.yy.Delete?rpe(e,t,r):Ri.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(Zme,"getRecordAttributesAST");function epe(e,t,r,n,s){if(!e){Ri.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Qme.isEmptyOrZeroLength(i)){Ri.error("No schema specified");return}e.from.forEach(c=>{bh(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),bh(c.table,t,r,n,s)});let a=new Vl(e.columns);for(let{node:c}of a)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{Ri.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 Vl(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{Ri.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 Vl(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{Ri.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 Vl(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{Ri.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)}}}o(epe,"getSelectAttributes");function tpe(e,t,r){if(!e){Ri.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Vl(e.columns),s=e.table.databaseid;bh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&wO(e.table.tableid,s,i.columnid,t,r)}o(tpe,"getUpdateAttributes");function rpe(e,t,r){if(!e){Ri.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Vl(e.where),s=e.table.databaseid;bh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&wO(e.table.tableid,s,i.columnid,t,r)}o(rpe,"getDeleteAttributes");function npe(e,t,r){if(!e){Ri.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Vl(e.columns),s=e.into.databaseid;bh(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&wO(e.into.tableid,s,i.columnid,t,r)}o(npe,"getInsertAttributes");function wO(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)}o(wO,"pushAttribute");MK.exports=IO});var xK=M((B0e,UK)=>{"use strict";var spe=wt(),NO=class{static{o(this,"HubConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f,m,p,h){this.port=t,a===null&&(a=void 0),this.server_name=r+spe.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:a,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};UK.exports=NO});var kK=M((k0e,FK)=>{"use strict";var BK=wt(),CO=class{static{o(this,"LeafConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+BK.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+BK.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:a,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};FK.exports=CO});var qK=M((q0e,HK)=>{"use strict";var OO=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};HK.exports=OO});var $K=M(($0e,GK)=>{"use strict";var ipe=wt(),PO=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+ipe.SERVER_SUFFIX.ADMIN,this.password=r}};GK.exports=PO});var LT=M((K0e,YK)=>{"use strict";var Kl=require("path"),Yl=require("fs-extra"),ope=xK(),ape=kK(),cpe=qK(),lpe=$K(),LO=kn(),nf=oe(),qn=Tt(),OT=(H(),D(W)),Ih=wt(),{CONFIG_PARAMS:ir}=OT,sf=Q(),wh=ue(),VK=Wi(),DO=sr(),upe=fs(),rf="clustering",dpe=1e4,KK=50;YK.exports={generateNatsConfig:mpe,removeNatsConfig:ppe,getHubConfigPath:fpe};function fpe(){let e=wh.get(ir.ROOTPATH);return Kl.join(e,rf,Ih.NATS_CONFIG_FILES.HUB_SERVER)}o(fpe,"getHubConfigPath");async function mpe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=wh.get(ir.ROOTPATH);Yl.ensureDirSync(Kl.join(r,"clustering","leaf")),wh.initSync();let n=qn.getConfigFromFile(ir.CLUSTERING_TLS_CERT_AUTH),s=qn.getConfigFromFile(ir.CLUSTERING_TLS_PRIVATEKEY),i=qn.getConfigFromFile(ir.CLUSTERING_TLS_CERTIFICATE);!await Yl.exists(i)&&!await Yl.exists(!n)&&await upe.createNatsCerts();let a=Kl.join(r,rf,Ih.PID_FILES.HUB),c=Kl.join(r,rf,Ih.PID_FILES.LEAF),l=qn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=Kl.join(r,rf,Ih.NATS_CONFIG_FILES.HUB_SERVER),d=Kl.join(r,rf,Ih.NATS_CONFIG_FILES.LEAF_SERVER),f=qn.getConfigFromFile(ir.CLUSTERING_TLS_INSECURE),m=qn.getConfigFromFile(ir.CLUSTERING_TLS_VERIFY),p=qn.getConfigFromFile(ir.CLUSTERING_NODENAME),h=qn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await DO.checkNATSServerInstalled()||PT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await LO.listUsers(),g=qn.getConfigFromFile(ir.CLUSTERING_USER),A=await LO.getClusterUser();(nf.isEmpty(A)||A.active!==!0)&&PT(`Invalid cluster user '${cluster_username}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await CT(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await CT(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await CT(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),await CT(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],R=[];for(let[J,Y]of E.entries())Y.role?.role===OT.ROLE_TYPES_ENUM.CLUSTER_USER&&Y.active&&(S.push(new lpe(Y.username,VK.decrypt(Y.hash))),R.push(new cpe(Y.username,VK.decrypt(Y.hash))));let N=[],{hub_routes:O}=qn.getClusteringRoutes();if(!nf.isEmptyOrZeroLength(O))for(let J of O)N.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${J.host}:${J.port}`);let F=new ope(qn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),p,a,i,s,n,f,m,h,qn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NAME),qn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,S,R);n==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=nf.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===OT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Yl.writeJson(u,F),sf.trace(`Hub server config written to ${u}`));let ee=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,q=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,k=new ape(qn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[ee],[q],S,R,i,s,n,f);n==null&&delete k.tls.ca_file,(t===void 0||t===OT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Yl.writeJson(d,k),sf.trace(`Leaf server config written to ${d}`))}o(mpe,"generateNatsConfig");async function CT(e){let t=wh.get(e);return nf.isEmpty(t)&&PT(`port undefined for '${e}'`),await nf.isPortTaken(t)&&PT(`'${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}o(CT,"isPortAvailable");function PT(e){let t=`Error generating clustering config: ${e}`;sf.error(t),console.error(t),process.exit(1)}o(PT,"generateNatsConfigError");async function ppe(e){let{port:t,config_file:r}=DO.getServerConfig(e),{username:n,decrypt_hash:s}=await LO.getClusterUser(),i=0,a=2e3;for(;i<KK;){try{let d=await DO.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){sf.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=KK)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=a*(i*2);u>3e4&&sf.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(dpe),l=Kl.join(wh.get(ir.ROOTPATH),rf,r);await Yl.writeFile(l,c),await Yl.remove(l),sf.notify(e,"started.")}o(ppe,"removeNatsConfig")});var XK=M((W0e,JK)=>{"use strict";var ps=ue(),Qe=(H(),D(W)),Nh=wt(),ta=require("path"),{PACKAGE_ROOT:MT}=bt(),WK=ue(),DT=oe(),of="/dev/null",hpe=ta.join(MT,"launchServiceScripts"),zK=ta.join(MT,"utility/scripts"),Epe=ta.join(zK,Qe.HDB_RESTART_SCRIPT),jK=ta.resolve(MT,"dependencies",`${process.platform}-${process.arch}`,Nh.NATS_BINARY_NAME);function QK(){let e={[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return DT.noBootFile()&&(e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=DT.getEnvCliRootPath()),{name:Qe.PROCESS_DESCRIPTORS.HDB,script:Qe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,cwd:MT}}o(QK,"generateMainServerConfig");var _pe=9930;function gpe(){ps.initSync(!0);let e=ps.get(Qe.CONFIG_PARAMS.ROOTPATH),t=ta.join(e,"clustering",Nh.NATS_CONFIG_FILES.HUB_SERVER),r=ta.join(ps.get(Qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Qe.LOG_NAMES.HDB),n=WK.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Nh.LOG_LEVEL_FLAGS[ps.get(Qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==_pe?"-"+n:""),script:jK,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return ps.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=of,i.error_file=of),i}o(gpe,"generateNatsHubServerConfig");var Spe=9940;function Tpe(){ps.initSync(!0);let e=ps.get(Qe.CONFIG_PARAMS.ROOTPATH),t=ta.join(e,"clustering",Nh.NATS_CONFIG_FILES.LEAF_SERVER),r=ta.join(ps.get(Qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Qe.LOG_NAMES.HDB),n=WK.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Nh.LOG_LEVEL_FLAGS[ps.get(Qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Spe?"-"+n:""),script:jK,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return ps.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=of,i.error_file=of),i}o(Tpe,"generateNatsLeafServerConfig");function ype(){ps.initSync();let e=ta.join(ps.get(Qe.CONFIG_PARAMS.LOGGING_ROOT),Qe.LOG_NAMES.HDB),t={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Qe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:hpe,autorestart:!1};return ps.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=of,t.error_file=of),t}o(ype,"generateClusteringUpgradeV4ServiceConfig");function Rpe(){let e={[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.RESTART_HDB};return DT.noBootFile()&&(e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=DT.getEnvCliRootPath()),{...{name:Qe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:zK},script:Epe}}o(Rpe,"generateRestart");function Ape(){return{apps:[QK()]}}o(Ape,"generateAllServiceConfigs");JK.exports={generateAllServiceConfigs:Ape,generateMainServerConfig:QK,generateRestart:Rpe,generateNatsHubServerConfig:gpe,generateNatsLeafServerConfig:Tpe,generateClusteringUpgradeV4ServiceConfig:ype}});var Oh=M((Q0e,fY)=>{"use strict";var dt=(H(),D(W)),bpe=oe(),na=LT(),vT=sr(),ra=wt(),cc=XK(),UT=ue(),Wl=Q(),Ipe=Xo(),{startWorker:ZK,onMessageFromWorkers:wpe}=nt(),Npe=Qd(),j0e=require("util"),Cpe=require("child_process"),Ope=require("fs"),{execFile:Ppe}=Cpe,tt;fY.exports={enterPM2Mode:Lpe,start:lc,stop:MO,reload:tY,restart:rY,list:vO,describe:iY,connect:sa,kill:xpe,startAllServices:Bpe,startService:UO,getUniqueServicesList:oY,restartAllServices:Fpe,isServiceRegistered:aY,reloadStopStart:cY,restartHdb:sY,deleteProcess:vpe,startClusteringProcesses:uY,startClusteringThreads:dY,isHdbRestartRunning:Upe,isClusteringRunning:Hpe,stopClustering:kpe,reloadClustering:qpe,expectedRestartOfChildren:nY};var Ch=!1;wpe(e=>{e.type==="restart"&&UT.initSync(!0)});function Lpe(){Ch=!0}o(Lpe,"enterPM2Mode");function sa(){return tt||(tt=require("pm2")),new Promise((e,t)=>{tt.connect((r,n)=>{r&&t(r),e(n)})})}o(sa,"connect");var gn,Dpe=10,eY;function lc(e,t=!1){if(Ch)return Mpe(e);let r=Ppe(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let a=gn.indexOf(r);a>-1&&gn.splice(a,1),!eY&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Dpe&&(Ope.existsSync(na.getHubConfigPath())?lc(e):(await na.generateNatsConfig(!0),lc(e),await new Promise(c=>setTimeout(c,3e3)),await na.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await na.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let a=UT.get(dt.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,d;for(;l=c.exec(i);){if(l.index&&ra.LOG_LEVEL_HIERARCHY[a]>=ra.LOG_LEVEL_HIERARCHY[d||"info"]){let p=d===ra.LOG_LEVELS.ERR||d===ra.LOG_LEVELS.WRN?Wl.OUTPUTS.STDERR:Wl.OUTPUTS.STDOUT;Wl.logCustomLevel(d||"info",p,n,i.slice(u,l.index).trim())}let[f,m]=l;u=l.index+f.length,d=ra.LOG_LEVELS[m]}if(ra.LOG_LEVEL_HIERARCHY[a]>=ra.LOG_LEVEL_HIERARCHY[d||"info"]){let f=d===ra.LOG_LEVELS.ERR||d===ra.LOG_LEVELS.WRN?Wl.OUTPUTS.STDERR:Wl.OUTPUTS.STDOUT;Wl.logCustomLevel(d||"info",f,n,i.slice(u).trim())}}if(o(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!gn&&(gn=[],!t)){let i=o(()=>{eY=!0,gn&&(gn.map(a=>a.kill()),process.exit(0))},"killChildren");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}gn.push(r)}o(lc,"start");function Mpe(e){return new Promise(async(t,r)=>{try{await sa()}catch(n){r(n)}tt.start(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(Mpe,"startWithPM2");function MO(e){if(!Ch){for(let t of gn||[])t.name===e&&(gn.splice(gn.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await sa()}catch(n){r(n)}tt.stop(e,async(n,s)=>{n&&(tt.disconnect(),r(n)),tt.delete(e,(i,a)=>{i&&(tt.disconnect(),r(n)),tt.disconnect(),t(a)})})})}o(MO,"stop");function tY(e){return new Promise(async(t,r)=>{try{await sa()}catch(n){r(n)}tt.reload(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(tY,"reload");function rY(e){if(!Ch){nY();for(let t of gn||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await sa()}catch(n){r(n)}tt.restart(e,(n,s)=>{tt.disconnect(),t(s)})})}o(rY,"restart");function nY(){for(let e of gn||[])e.config&&(e.config.restarts=0)}o(nY,"expectedRestartOfChildren");function vpe(e){return new Promise(async(t,r)=>{try{await sa()}catch(n){r(n)}tt.delete(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(vpe,"deleteProcess");async function sY(){await lc(cc.generateRestart())}o(sY,"restartHdb");async function Upe(){let e=await vO();for(let t in e)if(e[t].name===dt.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(Upe,"isHdbRestartRunning");function vO(){return new Promise(async(e,t)=>{try{await sa()}catch(r){t(r)}tt.list((r,n)=>{r&&(tt.disconnect(),t(r)),tt.disconnect(),e(n)})})}o(vO,"list");function iY(e){return new Promise(async(t,r)=>{try{await sa()}catch(n){r(n)}tt.describe(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(iY,"describe");function xpe(){if(!Ch){for(let e of gn||[])e.kill();gn=[];return}return new Promise(async(e,t)=>{try{await sa()}catch(r){t(r)}tt.killDaemon((r,n)=>{r&&(tt.disconnect(),t(r)),tt.disconnect(),e(n)})})}o(xpe,"kill");async function Bpe(){try{await uY(),await dY(),await lc(cc.generateAllServiceConfigs())}catch(e){throw tt?.disconnect(),e}}o(Bpe,"startAllServices");async function UO(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case dt.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=cc.generateMainServerConfig();break;case dt.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=cc.generateNatsIngestServiceConfig();break;case dt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=cc.generateNatsReplyServiceConfig();break;case dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=cc.generateNatsHubServerConfig(),await lc(r,t),await na.removeNatsConfig(e);return;case dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=cc.generateNatsLeafServerConfig(),await lc(r,t),await na.removeNatsConfig(e);return;case dt.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=cc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await lc(r)}catch(r){throw tt?.disconnect(),r}}o(UO,"startService");async function oY(){try{let e=await vO(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw tt?.disconnect(),e}}o(oY,"getUniqueServicesList");async function Fpe(e=[]){try{let t=!1,r=await oY();for(let n=0,s=Object.values(r).length;n<s;n++){let a=Object.values(r)[n].name;e.includes(a)||(a===dt.PROCESS_DESCRIPTORS.HDB?t=!0:await rY(a))}t&&await cY(dt.PROCESS_DESCRIPTORS.HDB)}catch(t){throw tt?.disconnect(),t}}o(Fpe,"restartAllServices");async function aY(e){if(gn?.find(r=>r.name===e))return!0;let t=await Npe.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}o(aY,"isServiceRegistered");async function cY(e){let t=UT.get(dt.CONFIG_PARAMS.THREADS_COUNT)??UT.get(dt.CONFIG_PARAMS.THREADS),r=await iY(e),n=bpe.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await MO(e),await UO(e)):e===dt.PROCESS_DESCRIPTORS.HDB?await sY():await tY(e)}o(cY,"reloadStopStart");var lY;async function uY(e=!1){for(let t in dt.CLUSTERING_PROCESSES){let r=dt.CLUSTERING_PROCESSES[t];await UO(r,e)}}o(uY,"startClusteringProcesses");async function dY(){lY=ZK(dt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:dt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await vT.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await vT.updateLocalStreams();let e=await Ipe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===dt.PRE_4_0_0_VERSION){Wl.info("Starting clustering upgrade 4.0.0 process"),ZK(dt.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(dY,"startClusteringThreads");async function kpe(){for(let e in dt.CLUSTERING_PROCESSES)if(e!==dt.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===dt.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await lY.terminate();else{let t=dt.CLUSTERING_PROCESSES[e];await MO(t)}}o(kpe,"stopClustering");async function Hpe(){for(let e in dt.CLUSTERING_PROCESSES){let t=dt.CLUSTERING_PROCESSES[e];if(await aY(t)===!1)return!1}return!0}o(Hpe,"isClusteringRunning");async function qpe(){await na.generateNatsConfig(!0),await vT.reloadNATSHub(),await vT.reloadNATSLeaf(),await na.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await na.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(qpe,"reloadClustering")});var FO={};Ie(FO,{compactOnStart:()=>Gpe,copyDb:()=>gY});async function Gpe(){uc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,xO.get)(B.ROOTPATH),t=new Map,r=at();(0,BO.updateConfigValue)(B.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,xT.join)(e,"backup",n+".mdb"),a=(0,xT.join)(e,kc,n+"-copy.mdb"),c=0;try{c=await mY(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){uc.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:a,backupDest:i,recordCount:c}),await gY(n,a),console.log("Backing up",n,"to",i);try{await(0,zl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{Ed()}catch(n){uc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{dbPath:s,copyDest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,zl.move)(i,s,{overwrite:!0}),await(0,zl.remove)((0,xT.join)(e,kc,`${n}-copy.mdb-lock`));try{Ed()}catch(n){uc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){uc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,BO.updateConfigValue)(B.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:a}]of t){console.error("Moving backup database",a,"back to",i);try{await(0,zl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw Ed(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=!0,c=await mY(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){a=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
17
|
+
`,"")}o(u$,"runCommand");async function Zce(){try{await Oce.access(zN)}catch{return!1}let e=await u$(`${zN} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Pce.eq(t,Jce)}o(Zce,"checkNATSServerInstalled");async function ZN(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await c$.getClusterUser();if(Ml(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}gi.trace("create nats connection called");let i=await Gce({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Gr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Gr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Gr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),gi.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(a=>{a&&gi.error("Error with Nats client connection, connection closed",a),i===En&&d$()}),i}o(ZN,"createConnection");function d$(){En=void 0,Pl=void 0,Ll=void 0,Dl=void 0}o(d$,"clearClientCache");async function ele(){En&&(await En.drain(),En=void 0,Pl=void 0,Ll=void 0,Dl=void 0)}o(ele,"closeConnection");var En,Dl;async function zp(){return Dl||(Dl=ZN(Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),En=await Dl),En||Dl}o(zp,"getConnection");async function jp(){if(Pl)return Pl;Ml(En)&&await zp();let{domain:e}=Pd(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ml(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Pl=await En.jetstreamManager({domain:e,timeout:6e4}),Pl}o(jp,"getJetStreamManager");async function f$(){if(Ll)return Ll;Ml(En)&&await zp();let{domain:e}=Pd(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ml(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ll=En.jetstream({domain:e,timeout:6e4}),Ll}o(f$,"getJetStream");async function Zi(){let e=En||await zp(),t=Pl||await jp(),r=Ll||await f$();return{connection:e,jsm:t,js:r}}o(Zi,"getNATSReferences");async function tle(e){let t=Gr.get(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await c$.getClusterUser(),s=await ZN(t,r,n),i=XN(),a=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of a){let f=l$.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 LS.asyncSetTimeout(e),await a.drain(),await s.close(),await u,c}o(tle,"getServerList");async function eC(e,t){let{jsm:r}=await Zi(),n=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:$ce.File,retention:Vce.Limits,subjects:t,discard:Kce.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(eC,"createLocalStream");async function m$(){let{jsm:e}=await Zi(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o(m$,"listStreams");async function rle(e){let{jsm:t}=await Zi();await t.streams.delete(e)}o(rle,"deleteLocalStream");async function nle(e){let{connection:t}=await Zi(),r=[],n=XN(),s=t.subscribe(n),i=(async()=>{for await(let a of s)r.push(l$.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}o(nle,"listRemoteStreams");async function sle(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Zi(),i=s$(),a={durable_name:i,ack_policy:QN.Explicit};t&&(a.deliver_policy=JN.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);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=jN(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(Xr.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}o(sle,"viewStream");async function*ile(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Zi(),i=s$(),a={durable_name:i,ack_policy:QN.Explicit};t&&(a.deliver_policy=JN.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);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=jN(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(Xr.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}o(ile,"viewStreamIterator");async function ole(e,t,r,n){gi.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=p$(n,r);let{js:s}=await Zi(),i=await MS(),a=`${e}.${i}`,c=await jce(()=>n instanceof Uint8Array?n:a$.encode(n));try{gi.trace(`publishToStream publishing to subject: ${a}`),zce(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(a,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return E$(async()=>{try{await s.publish(a,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){gi.trace(`publishToStream creating stream: ${t}`);let d=a.split(".");d[2]="*",await eC(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(ole,"publishToStream");function p$(e,t){t===void 0&&(t=Wce());let r=Gr.get(et.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Xr.MSG_HEADERS.ORIGIN)&&r&&t.append(Xr.MSG_HEADERS.ORIGIN,r),t}o(p$,"addNatsMsgHeader");function Pd(e){e=e.toLowerCase();let t=Wp.join(Gr.get(et.CONFIG_PARAMS.ROOTPATH),Qce);if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ml(WN)&&(WN={port:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.HUB,config_file:Xr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Wp.join(t,Xr.PID_FILES.HUB),hdbNatsPath:t}),WN;if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ml(YN)&&(YN={port:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.LEAF,config_file:Xr.NATS_CONFIG_FILES.LEAF_SERVER,domain:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.LEAF,pid_file_path:Wp.join(t,Xr.PID_FILES.LEAF),hdbNatsPath:t}),YN;gi.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(Pd,"getServerConfig");async function h$(e,t,r,n){try{await e.consumers.add(t,{ack_policy:QN.Explicit,durable_name:r,deliver_policy:JN.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(h$,"createConsumer");async function ale(e,t,r){await e.consumers.delete(t,r)}o(ale,"removeConsumer");function cle(e){return e.split(".")[1]}o(cle,"extractServerName");async function lle(e,t,r=6e4,n=XN()){if(!LS.isObject(t))throw new Error("data param must be an object");let s=a$.encode(t),{connection:i}=await Zi(),a={timeout:r};n&&(a.reply=n,a.noMux=!0);let c=await i.request(e,s,a);return jN(c.data)}o(lle,"request");function tC(e){return new Promise(async(t,r)=>{let n=vce(zN,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",a=>{r(a)}),n.stdout.on("data",a=>{i+=a.toString()}),n.stderr.on("data",a=>{s+=a.toString()}),n.stderr.on("close",a=>{s&&r(s),t(i)})})}o(tC,"reloadNATS");async function ule(){let{pid_file_path:e}=Pd(et.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await tC(e)}o(ule,"reloadNATSHub");async function dle(){let{pid_file_path:e}=Pd(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await tC(e)}o(dle,"reloadNATSLeaf");function fle(e,t,r){let n;switch(e.code){case n$.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case n$.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(fle,"requestErrorHandler");async function mle(e,t){let r=t+Xr.SERVER_SUFFIX.LEAF,{connection:n}=await Zi(),{jsm:s}=await yle(r),{schema:i,table:a}=e,c=DS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await E$(async()=>{if(e.subscribe===!0)await h$(s,c,n.info.server_name,l);else try{await ale(s,c,n.info.server_name)}catch(u){gi.trace(u)}})}o(mle,"updateRemoteConsumer");async function ple(e,t,r,n){let s=DS.createNatsTableStreamName(e,t),i=r+Xr.SERVER_SUFFIX.LEAF,a={type:et.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!o$&&Hce()<Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=KN();await c(a)}await Fce(a),n==="stop"&&await LS.asyncSetTimeout(1e3)}o(ple,"updateConsumerIterator");function E$(e){return Bce.writeTransaction(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o(E$,"exclusiveLock");async function _$(e,t){let r=DS.createNatsTableStreamName(e,t),n=await MS(),s=gle(e,t,n);await eC(r,[s])}o(_$,"createLocalTableStream");async function hle(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await _$(n,s)}}o(hle,"createTableStreams");async function g$(e,t,r=void 0){if(Gr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=DS.createNatsTableStreamName(e,t),{domain:s}=Pd(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await zp()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")gi.warn(n);else throw n}}o(g$,"purgeTableStream");async function Ele(e,t){if(Gr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await g$(e,t[r])}o(Ele,"purgeSchemaTableStreams");async function _le(e){return(await jp()).streams.info(e)}o(_le,"getStreamInfo");function gle(e,t,r){return`${Xr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(gle,"createSubjectName");async function MS(){if(Yp)return Yp;if(Yp=(await jp())?.nc?.info?.server_name,Yp===void 0)throw new Error("Unable to get jetstream manager server name");return Yp}o(MS,"getJsmServerName");async function Sle(){let e=await jp(),t=await MS(),r=await m$();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=Tle(n),c=i.split(".");if(c[c.length-1]===t&&!a||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");gi.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}o(Sle,"updateLocalStreams");function Tle(e){let{config:t}=e,r=!1,n=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Gr.get(et.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}o(Tle,"updateStreamLimits");async function yle(e){let t,r;try{t=await En.jetstream({domain:e}),r=await En.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw gi.error("Unable to connect to:",e),n}return{js:t,jsm:r}}o(yle,"connectToRemoteJS")});function rC(e){let t=e.get(vS),r=t?(0,Ld.unpack)(t):null;r||(r={remoteNameToId:{}});let n=it(),s=!1;r.nodeName=it();let i=r.remoteNameToId;if(i[n]!==0){let a=0,c;for(let l in i){let u=i[l];u===0?c=l:u>a&&(a=u)}if(c){a++,i[c]=a;let l=[Symbol.for("seq"),a];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:Jp(e)??1,nodes:[]})})}i[n]=0,e.putSync(vS,(0,Ld.pack)(r))}return r}function Qp(e){return rC(e).remoteNameToId}function y$(e,t){let r=rC(t),n=r.remoteNameToId,s=new Map,i=!1;for(let a in e){let c=e[a],l=n[a];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[a]=l,i=!0}s.set(c,l)}return i&&t.putSync(vS,(0,Ld.pack)(r)),s}function US(e,t){let r=rC(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let a in n){let c=n[a];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(vS,(0,Ld.pack)(r))}return T$.trace?.("The remote node name map",e,n,s),s}var T$,Ld,vS,nC=ie(()=>{T$=w(Zn());us();Ld=require("msgpackr"),vS=Symbol.for("remote-ids");o(rC,"getIdMappingRecord");o(Qp,"exportIdMapping");o(y$,"remoteToLocalNodeId");o(US,"getIdOfRemoteNode")});var sC={};Ie(sC,{commitsAwaitingReplication:()=>Md,getHDBNodeTable:()=>Yt,getReplicationSharedStatus:()=>vd,iterateRoutes:()=>Zp,shouldReplicateToNode:()=>Xp,subscribeToNodeUpdates:()=>Ud});function Yt(){return R$||(R$=Xe({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function vd(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function Ud(e){Yt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;w$.debug?.("adding node",n,"on node",it()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==it()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Yt().search({}))if(i.shard!=null){let a=s.get(i.shard);a||s.set(i.shard,a=[]),a.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function Xp(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&Yt().primaryStore.get(it())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function Rle(){Ud(e=>{Qa({},(t,r)=>{let n=e.name,s=A$.get(n);if(s||A$.set(n,s=new Map),s.has(r))return;let i;for(let a in t)if(i=t[a].auditStore,i)break;if(i){let a=vd(i,r,n,()=>{let c=a[0],l=a.lastTime;for(let{txnTime:u,onConfirm:d}of Md.get(r)||[])u>l&&u<=c&&d();a.lastTime=c});a.lastTime=0,s.set(r,a)}})})}function*Zp(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=Dd.default.get(B.REPLICATION_SECUREPORT)??(!Dd.default.get(B.REPLICATION_PORT)&&Dd.default.get(B.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Dd.default.get(B.REPLICATION_PORT)||Dd.default.get(B.OPERATIONSAPI_NETWORK_PORT);let a=i?.lastIndexOf?.(":");a>0&&(i=+i.slice(a+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){b$.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 b$,I$,Dd,w$,R$,A$,Md,vl=ie(()=>{Oe();us();hm();b$=require("worker_threads"),I$=w(_e()),Dd=w(ue());H();w$=w(Zn());server.nodes=[];o(Yt,"getHDBNodeTable");o(vd,"getReplicationSharedStatus");o(Ud,"subscribeToNodeUpdates");o(Xp,"shouldReplicateToNode");A$=new Map;mU((e,t,r)=>{if(r>server.nodes.length)throw new I$.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Md||(Md=new Map,Rle());let n=Md.get(e);return n||(n=[],Md.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:o(()=>{++i===r&&s()},"onConfirm")})})});o(Rle,"startSubscriptionToReplications");o(Zp,"iterateRoutes")});var L$={};Ie(L$,{connectedToNode:()=>Ul,disconnectedFromNode:()=>Bd,ensureNode:()=>Yo,requestClusterStatus:()=>P$,startOnMainThread:()=>oC});async function oC(e){let t=0,r=at();for(let i of Object.getOwnPropertyNames(r)){let a=r[i];for(let c in a){let l=a[c];if(l.auditStore){xS.set(i,Jp(l.auditStore));break}}}to.whenThreadsStarted.then(async()=>{let i=[];for await(let l of r.system.hdb_nodes?.search([])||[])i.push(l);let a=it();function c(){let l=Yt().primaryStore.get(a);if(l!==null){let u=e.url??Ja();if(l===void 0||l.url!==u||l.shard!==e.shard)return Yo(a,{name:a,url:u,shard:e.shard,replicates:!0})}}o(c,"ensureThisNode"),Yt().primaryStore.get(a)&&c();for(let l of Zp(e))try{let u=!l.subscriptions;if(u&&await c(),u&&l.replicates==null&&(l.replicates=!0),i.find(d=>d.url===l.url))continue;s(l)}catch(u){console.error(u)}Ud(s)});let n;function s(i,a=i?.name){let c=it()&&a===it()||Ja()&&i?.url===Ja();if(c){let f=!!i?.replicates;if(n!==void 0&&n!==f)for(let m of Yt().search([]))m.replicates&&m.name!==a&&s(m,m.name);n=f}if(ut.trace("Setting up node replication for",i),!i){for(let[f,m]of eo){let p;for(let[h,{worker:E,nodes:g}]of m){let A=g[0];if(A&&A.name==a){p=!0;for(let[S,{worker:R}]of m)m.delete(S),ut.warn("Node was deleted, unsubscribing from node",a,S,f),R?.postMessage({type:"unsubscribe-from-node",node:a,database:S,url:f});break}}if(p){eo.get(f).iterator.remove(),eo.delete(f);return}}return}if(c)return;if(!i.url){ut.info(`Node ${i.name} is missing url`);return}let l=eo.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(ut.info(`Added node ${i.name} at ${i.url} for process ${it()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[f,m]of xd)if(i.url===m.url){xd.delete(f);break}xd.set(i.name,i)}let u=at();if(l||(l=new Map,eo.set(i.url,l)),l.iterator=Qa(e,(f,m,p)=>{p?d(m,!0):d(m,!1)}),i.subscriptions)for(let f of i.subscriptions){let m=f.database||f.schema;u[m]||(ut.warn(`Database ${m} not found for node ${i.name}, making a subscription anyway`),d(m,!1))}function d(f,m){ut.trace("Setting up replication for database",f,"on node",i.name);let p=l.get(f),h,E=[{replicateByDefault:m,...i}];xS.has(f)&&(E.push({replicateByDefault:m,name:it(),startTime:xS.get(f),endTime:Date.now(),replicates:!0}),xS.delete(f));let g=Xp(i,f),A=to.workers.filter(S=>S.name==="http");if(p?(h=p.worker,p.nodes=E):g&&(t=t%A.length,h=A[t++],l.set(f,{worker:h,nodes:E,url:i.url}),h?.on("exit",()=>{l.get(f)?.worker===h&&(l.delete(f),d(f,m))})),g)setTimeout(()=>{let S={type:"subscribe-to-node",database:f,nodes:E};h?h.postMessage(S):eh(S)},Ale);else{ut.info("Node no longer should be used, unsubscribing from node",{replicates:i.replicates,databaseName:f,node:i,subscriptions:i.subscriptions,hasDatabase:!!u[f],thisReplicates:Yt().primaryStore.get(it())?.replicates}),Yt().primaryStore.get(it())?.replicates||(n=!1,ut.info("Disabling replication, this node name",it(),Yt().primaryStore.get(it()),f));let S={type:"unsubscribe-from-node",database:f,url:i.url,name:i.name};h?h.postMessage(S):FS(S)}}o(d,"onDatabase")}o(s,"onNodeUpdate"),Bd=o(function(i){try{ut.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let a=Array.from(xd.keys()),c=a.sort(),l=c.indexOf(i.name||Si(i.url));if(l===-1){ut.warn("Disconnected node not found in node map",i.name,a);return}let u=eo.get(i.url),d=u?.get(i.database);if(!d){ut.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished||!iC.default.get(B.REPLICATION_FAILOVER))return;let f=d.nodes[0];if(!(f.replicates===!0||f.replicates?.sends||f.subscriptions?.length))return;let m=f.shard,p=(l+1)%c.length;for(;l!==p;){let h=c[p],E=xd.get(h);u=eo.get(E.url);let g=u?.get(i.database);if(!g||g.connected===!1||g.nodes[0].shard!==m){p=(p+1)%c.length;continue}let{worker:A,nodes:S}=g,R=!1;for(let N of d.nodes){if(S.some(O=>O.name===N.name)){ut.info(`Disconnected node is already failing over to ${h} for ${i.database}`);continue}N.endTime<Date.now()||(S.push(N),R=!0)}if(d.nodes=[d.nodes[0]],!R){ut.info(`Disconnected node ${i.name} has no nodes to fail over to ${h}`);return}ut.info(`Failing over ${i.database} from ${i.name} to ${h}`),A?A.postMessage({type:"subscribe-to-node",database:i.database,nodes:S}):eh({database:i.database,nodes:S});return}ut.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(a){ut.error("Error failing over node",a)}},"disconnectedFromNode"),Ul=o(function(i){let a=eo.get(i.url),c=a?.get(i.database);if(!c){ut.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,a);return}c.connected=!0,c.latency=i.latency;let l=c.nodes[0];if(!l){ut.warn("Newly connected node has no node subscriptions",i.database,c);return}if(!l.name){ut.debug("Connected node is not named yet",i.database,c);return}c.nodes=[l];let u=!1;for(let d of eo.values()){let f=d.get(i.database);if(!f||f==c)continue;let{worker:m,nodes:p,connected:h}=f;if(p)if(h===!1&&p[0].shard===l.shard)u=!0,c.nodes.push(p[0]);else{let E=p.filter(g=>g&&g.name!==l.name);E.length<p.length&&(f.nodes=E,m.postMessage({type:"subscribe-to-node",database:i.database,nodes:p}))}}u&&c.worker&&c.worker.postMessage({type:"subscribe-to-node",database:i.database,nodes:c.nodes})},"connectedToNode"),(0,to.onMessageByType)("disconnected-from-node",Bd),(0,to.onMessageByType)("connected-to-node",Ul),(0,to.onMessageByType)("request-cluster-status",P$)}function P$(e,t){let r=[];for(let[n,s]of xd)try{let i=eo.get(s.url);ut.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let a=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)a.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(p=>!(p.endTime<Date.now())).map(p=>p.name)});let c=C$(s);c.database_sockets=a,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ut.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function Yo(e,t){let r=Yt();e=e??Si(t.url),t.name=e;try{if(t.ca){let s=new O$.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){ut.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ut.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!iC.default.get(B.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],a=C$(n[s]);for(let c of t[s]){let l=!1;for(let u of a)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=[...a,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ut.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var to,BS,ut,N$,iC,O$,C$,Ale,eo,Bd,Ul,xd,xS,th=ie(()=>{Oe();to=w(nt());us();BS=require("worker_threads");vl();ut=w(Q()),N$=w(require("lodash")),iC=w(ue());H();O$=require("crypto"),{cloneDeep:C$}=N$.default,Ale=200,eo=new Map,xd=new Map,xS=new Map;o(oC,"startOnMainThread");o(P$,"requestClusterStatus");BS.parentPort&&(Bd=o(e=>{BS.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Ul=o(e=>{BS.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,to.onMessageByType)("subscribe-to-node",e=>{eh(e)}),(0,to.onMessageByType)("unsubscribe-from-node",e=>{FS(e)}));o(Yo,"ensureNode")});var fs=M(Wt=>{"use strict";var pr=require("path"),{watch:ble}=require("chokidar"),Hn=require("fs-extra"),Fd=require("node-forge"),B$=require("net"),{generateKeyPair:aC,X509Certificate:Wo,createPrivateKey:F$}=require("crypto"),Ile=require("util");aC=Ile.promisify(aC);var Nt=Fd.pki,Ti=require("joi"),{v4:k$}=require("uuid"),{validateBySchema:dC}=ft(),{forComponent:wle}=Q(),ds=ue(),ks=(H(),D(W)),{CONFIG_PARAMS:Bl}=ks,yi=AA(),{ClientError:Xa}=_e(),HS=require("node:tls"),{relative:H$,join:Nle}=require("node:path"),{CERTIFICATE_VALUES:D$}=yi,Cle=Hc(),cC=yt(),{table:Ole,getDatabases:Ple,databases:kS}=(Oe(),D(mt)),{getJWTRSAKeys:M$}=(wd(),D(Gp)),je=wle("tls").conditional;Wt.generateKeys=pC;Wt.updateConfigCert=z$;Wt.createCsr=Ble;Wt.signCertificate=Fle;Wt.setCertTable=kd;Wt.loadCertificates=K$;Wt.reviewSelfSignedCert=EC;Wt.createTLSSelector=Q$;Wt.listCertificates=X$;Wt.addCertificate=Vle;Wt.removeCertificate=Yle;Wt.createNatsCerts=qle;Wt.generateCertsKeys=Hle;Wt.getReplicationCert=nh;Wt.getReplicationCertAuth=xle;Wt.renewSelfSigned=Gle;Wt.hostnamesFromCert=gC;Wt.getKey=Wle;Wt.getHostnamesFromCertificate=zle;Wt.getPrimaryHostName=_C;var{urlToNodeName:q$,getThisNodeUrl:Lle,getThisNodeName:GS,clearThisNodeName:Dle}=(us(),D(zo)),{readFileSync:Mle,statSync:G$}=require("node:fs"),PUe=ue(),{getTicketKeys:vle,onMessageFromWorkers:Ule}=nt(),{isMainThread:$$}=require("worker_threads"),{TLSSocket:V$,createSecureContext:LUe}=require("node:tls"),fC=3650,rh=["127.0.0.1","localhost","::1"],mC=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];Ule(async e=>{e.type===ks.ITC_EVENT_TYPES.RESTART&&(ds.initSync(!0),await EC())});var Zr;function ec(){return Zr||(Zr=Ple().system.hdb_certificate,Zr||(Zr=Ole({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__"}]}))),Zr}o(ec,"getCertTable");async function nh(){let e=Q$("operations-api"),t={secureContexts:null,setSecureContext:o(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(GS());if(!r)return;let n=new Wo(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}o(nh,"getReplicationCert");async function xle(){ec();let e=(await nh()).options.cert,r=new Wo(e).issuer.match(/CN=(.*)/)?.[1];return Zr.get(r)}o(xle,"getReplicationCertAuth");var v$,Za=new Map;function K$(){if(v$)return;v$=!0;let e=[{configKey:Bl.TLS},{configKey:Bl.OPERATIONSAPI_TLS}];ec();let t=pr.dirname(cC.getConfigFilePath()),r;for(let{configKey:n}of e){let s=cC.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&H$(Nle(t,"keys"),a);c&&U$(a,l=>{Za.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&$$){let d;U$(u,f=>{if(D$.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=j$(u),h=new Wo(p),E;try{E=_C(h)}catch(R){je.error?.("error extracting host name from certificate",R);return}if(E==null){je.error?.("No host name found on certificate");return}if(h.checkIssued(new Wo(D$.cert)))return;let g=Zr.primaryStore.get(E),A=G$(u).mtimeMs,S=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&A<=S){A<S&&je.info?.(`Certificate ${E} at ${u} is older (${new Date(A)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=Zr.put({name:E,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:p,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:A,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}o(K$,"loadCertificates");function U$(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&$$&&je.warn?.(`Reloading ${r}:`,i),n=c,t(j$(i)))}catch(c){je.error?.(`Error loading ${r}:`,i,c)}},"loadFile");Hn.existsSync(e)?s(e,G$(e)):je.error?.(`${r} file not found:`,e),ble(e,{persistent:!1}).on("change",s)}o(U$,"loadAndWatch");function lC(){let e=Lle();if(e==null){let t=rh[0];return je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return q$(e)}o(lC,"getHost");function qS(){let e=GS();if(e==null){let t=rh[0];return je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}o(qS,"getCommonName");async function Ble(){let e=await nh(),t=Nt.certificateFromPem(e.options.cert),r=Nt.privateKeyFromPem(e.options.key);je.info?.("Creating CSR with cert named:",e.name);let n=Nt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:qS()},...mC];je.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:Y$()}];return je.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Fd.pki.certificationRequestToPem(n)}o(Ble,"createCsr");function Y$(){let e=rh.includes(qS())?rh:[...rh,qS()];return e.includes(lC())||e.push(lC()),[{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=>B$.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o(Y$,"certExtensions");async function Fle(e){let t={},r=pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;ec();for await(let d of Zr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(Za.has(d.private_key_name)){n=Za.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await Hn.exists(pr.join(r,d.private_key_name))){n=Hn.readFile(pr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await uC();s=d.ca,n=d.private_key}n=Nt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Nt.certificateFromPem(s.certificate);je.info?.("Signing CSR with cert named",s.name);let a=Nt.certificationRequestFromPem(e.csr);try{a.verify()}catch(d){return je.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=Fd.pki.createCertificate();c.serialNumber="0"+Math.random().toString().slice(2,9),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+fC),je.info?.("sign cert setting validity:",c.validity),je.info?.("sign cert setting subject from CSR:",a.subject.attributes),c.setSubject(a.subject.attributes),je.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=a.getAttribute({name:"extensionRequest"}).extensions;je.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=a.publicKey,c.sign(n,Fd.md.sha256.create()),t.certificate=Nt.certificateToPem(c)}else je.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}o(Fle,"signCertificate");async function kle(e,t){await kd({name:GS(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await kd({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Nt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}o(kle,"createCertificateTable");async function kd(e){let t;try{t=new Wo(e.certificate)}catch(r){je.error?.(`Failed to parse certificate for ${e.name}:`,r.message),je.debug?.("Certificate record details:",JSON.stringify(e,null,2));let n=new Error(`Invalid certificate format for ${e.name}: ${r.message}. This may be due to corrupted certificate data during transfer or encoding issues.`);throw n.code="INVALID_CERTIFICATE_FORMAT",n.cause=r,n}e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject?.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},ec(),await Zr.patch(e)}o(kd,"setCertTable");async function pC(){let e=await aC("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Nt.publicKeyFromPem(e.publicKey),privateKey:Nt.privateKeyFromPem(e.privateKey)}}o(pC,"generateKeys");async function hC(e,t,r){let n=Nt.createCertificate();if(!t){let a=await nh();t=Nt.certificateFromPem(a.options.cert).publicKey}n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+fC);let i=[{name:"commonName",value:qS()},...mC];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(Y$()),n.sign(e,Fd.md.sha256.create()),Nt.certificateToPem(n)}o(hC,"generateCertificates");async function uC(){let e=await X$(),t;for(let r of e){if(!r.is_authority)continue;let n=await J$(r.private_key_name);if(r.private_key_name&&n&&new Wo(r.certificate).checkPrivateKey(F$(n))){je.trace?.(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;je.trace?.("No CA found with matching private key")}o(uC,"getCertAuthority");async function W$(e,t,r=!0){let n=Nt.createCertificate();n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+fC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${ds.get(Bl.REPLICATION_HOSTNAME)??q$(ds.get(Bl.REPLICATION_URL))??k$().split("-")[0]}`},...mC];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,Fd.md.sha256.create());let a=pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),c=pr.join(a,yi.PRIVATEKEY_PEM_NAME);return r&&await Hn.writeFile(c,Nt.privateKeyToPem(e)),n}o(W$,"generateCertAuthority");async function Hle(){let{privateKey:e,publicKey:t}=await pC(),r=await W$(e,t),n=await hC(e,t,r);await kle(n,r),z$()}o(Hle,"generateCertsKeys");async function qle(){let e=await hC(Nt.privateKeyFromPem(yi.CERTIFICATE_VALUES.key),void 0,Nt.certificateFromPem(yi.CERTIFICATE_VALUES.cert)),t=pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),r=pr.join(t,yi.NATS_CERTIFICATE_PEM_NAME);await Hn.exists(r)||await Hn.writeFile(r,e);let n=pr.join(t,yi.NATS_CA_PEM_NAME);await Hn.exists(n)||await Hn.writeFile(n,yi.CERTIFICATE_VALUES.cert)}o(qle,"createNatsCerts");async function Gle(){ec();for await(let e of Zr.search([{attribute:"is_self_signed",value:!0}]))await Zr.delete(e.name);await EC()}o(Gle,"renewSelfSigned");async function EC(){Dle(),await K$(),ec();let e=await uC();if(!e){je.notify?.("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=o(u=>{try{return{key:Nt.privateKeyFromPem(Hn.readFileSync(u)),keyPath:u}}catch(d){return je.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=ds.get(Bl.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=ds.get(Bl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let a=pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),c=H$(a,i);s||(je.warn?.("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await pC(),Hn.existsSync(pr.join(a,yi.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${k$().split("-")[0]}.pem`),await Hn.writeFile(pr.join(a,c),Nt.privateKeyToPem(s)));let l=await W$(s,Nt.setRsaPublicKey(s.n,s.e),!1);await kd({name:l.subject.getField("CN").value,uses:["https"],certificate:Nt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await nh()){let r=GS();je.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await uC();let n=Nt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await hC(Nt.privateKeyFromPem(e.private_key),s,n);await kd({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}o(EC,"reviewSelfSignedCert");function z$(){let e=Cle(Object.keys(ks.CONFIG_PARAM_MAP),!0),t=pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),r=pr.join(t,yi.PRIVATEKEY_PEM_NAME),n=pr.join(t,yi.NATS_CERTIFICATE_PEM_NAME),s=pr.join(t,yi.NATS_CA_PEM_NAME),i=ks.CONFIG_PARAMS,a={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(a[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(a[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,a[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,a[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),cC.updateConfigValue(void 0,void 0,a,!1,!0)}o(z$,"updateConfigCert");function j$(e){return e.startsWith("-----BEGIN")?e:Mle(e,"utf8")}o(j$,"readPEM");var x$=HS.createSecureContext;HS.createSecureContext=function(e){if(!e.cert||!e.key)return x$(e);let t={...e};delete t.key,delete t.cert;let r=x$(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var $le=V$.prototype._init;V$.prototype._init=function(e,t){$le.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,a)=>{this.sni_context=a?.context||a,this.certCbDone()})}};var xl=new Map;function Q$(e,t){let r=new Map,n,s=!1;return i.initialize=a=>i.ready?i.ready:(a&&(a.secureContexts=r,a.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),xl.clear();let d=0;if(kS===void 0){c();return}for await(let f of kS.system.hdb_certificate.search([])){let m=f.certificate,p=new Wo(m);f.is_authority&&(p.asString=m,xl.set(p.subject,m))}for await(let f of kS.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",p=f.is_self_signed?1:2;m&&f.uses?.includes?.("operations")&&(p+=1);let h=await J$(f.private_key_name),E=f.certificate,g=new Wo(E);if(xl.has(g.issuer)&&(E+=`
|
|
18
|
+
`+xl.get(g.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let A={ciphers:f.ciphers,ticketKeys:vle(),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};a&&(A.sessionIdContext=a.sessionIdContext);let S=HS.createSecureContext(A);S.name=f.name,S.options=A,S.quality=p,S.certificateAuthorities=Array.from(xl),S.certStart=E.toString().slice(0,100);let R=f.hostnames??gC(g);Array.isArray(R)||(R=[R]);let N;for(let O of R)if(O){O[0]==="*"&&(s=!0,O=O.slice(1)),O===lC()&&(p+=2),B$.isIP(O)&&(N=!0);let F=r.get(O)?.quality??0;p>F&&r.set(O,S)}else je.error?.("No hostname found for certificate at",HS.certificate);je.trace?.("Adding TLS",S.name,"for",a.ports||"client","cert named",f.name,"hostnames",R,"quality",p,"best quality",d),p>d&&(i.defaultContext=n=S,d=p,a&&(a.defaultContext=S))}catch(m){je.error?.("Error applying TLS for",f.name,m)}a?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}o(u,"updateTLS"),kS?.system.hdb_certificate.subscribe({listener:o(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(a,c){je.info?.("TLS requested for",a||"(no SNI)");let l=a;for(;;){let d=r.get(l);if(d)return je.debug?.("Found certificate for",a,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}a?je.debug?.("No certificate found to match",a,"using the default certificate"):je.debug?.("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):je.info?.("No default certificate found"),c(null,u)}o(i,"SNICallback")}o(Q$,"createTLSSelector");async function J$(e){let t=Za.get(e);return!t&&e?await Hn.readFile(pr.join(ds.get(Bl.ROOTPATH),ks.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(J$,"getPrivateKeyByName");async function X$(){ec();let e=[];for await(let t of Zr.search([]))e.push(t);return e}o(X$,"listCertificates");async function Vle(e){let t=dC(e,Ti.object({name:Ti.string().required(),certificate:Ti.string().required(),is_authority:Ti.boolean().required(),private_key:Ti.string(),hosts:Ti.array(),uses:Ti.array()}));if(t)throw new Xa(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,a=new Wo(n),c=!1,l=!1,u;for(let[p,h]of Za)!s&&!c&&a.checkPrivateKey(F$(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new Xa("A suitable private key was not found for this certificate");let d;if(!r){try{d=_C(a)}catch(p){je.error?.(p)}if(d==null)throw new Xa("Error extracting certificate host name, please provide a name parameter")}let f=Kle(r??d);s&&!c&&!l&&(await Hn.writeFile(pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME,f+".pem"),s),Za.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 kd(m),"Successfully added certificate: "+f}o(Vle,"addCertificate");function Kle(e){return e.replace(/[^a-z0-9\.]/gi,"-")}o(Kle,"sanitizeName");async function Yle(e){let t=dC(e,Ti.object({name:Ti.string().required()}));if(t)throw new Xa(t.message);let{name:r}=e;ec();let n=await Zr.get(r);if(!n)throw new Xa(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Zr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(je.info?.("Removing private key named",s),await Hn.remove(pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME,s)))}return await Zr.delete(r),"Successfully removed "+r}o(Yle,"removeCertificate");function _C(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||gC(e)[0]}o(_C,"getPrimaryHostName");function gC(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]:[]}o(gC,"hostnamesFromCert");async function Wle(e){if(e.bypass_auth!==!0)throw new Xa("Unauthorized","401");let t=dC(e,Ti.object({name:Ti.string().required()}));if(t)throw new Xa(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await M$()).privateKey;if(r===".jwtPublic")return(await M$()).publicKey;if(Za.get(r))return Za.get(e.name);throw new Xa("Key not found")}o(Wle,"getKey");function zle(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o(zle,"getHostnamesFromCertificate")});var RV={};Ie(RV,{CONFIRMATION_STATUS_POSITION:()=>SV,LATENCY_POSITION:()=>jS,NodeReplicationConnection:()=>qd,OPERATION_REQUEST:()=>AC,RECEIVED_TIME_POSITION:()=>IC,RECEIVED_VERSION_POSITION:()=>bC,RECEIVING_STATUS_POSITION:()=>wC,RECEIVING_STATUS_RECEIVING:()=>yV,RECEIVING_STATUS_WAITING:()=>TV,SENDING_TIME_POSITION:()=>sh,createWebSocket:()=>QS,databaseSubscriptions:()=>rc,replicateOverWS:()=>ih,tableUpdateListeners:()=>CC});async function QS(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=it(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!yC){let l=(0,pV.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),yC=u.secureContexts}if(i=yC.get(s),i&&ce.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 a={};r&&(a.Authorization=r);let c={headers:a,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,EV.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(zS?.caCount!==jo.size&&(zS=hV.createSecureContext({...i.options,ca:[...jo,...i.options.availableCAs.values()]}),zS.caCount=jo.size),c.secureContext=zS),new dV.WebSocket(e,"harperdb-replication-v1",c)}function ih(e,t,r){let n=t.port||t.securePort,s=Fl.pid%1e3+"-"+fV.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);ce.debug?.(s,"Initializing replication connection",r);let i=0,a=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(a.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||rc,f,m,p=!1,h=t.subscription;h?.then&&h.then(y=>{h=y,h.auditStore&&(f=h.auditStore)});let E=t.tables||u&&at()[u],g,A=new Map,S=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let R,N,O,F,te,q,k,J=6e4,Y,le=0,ae=0,re=0,Re=uV.default.get(B.REPLICATION_BLOBTIMEOUT)??12e4,Te=new Map,Fe=[],qe=0,Rr;if(t.url){let y=o(()=>{te&&ae===e._socket?.bytesRead&&re===e._socket?.bytesWritten?e.terminate():(te=performance.now(),e.ping(),ae=e._socket?.bytesRead,re=e._socket?.bytesWritten)},"sendPing");O=setInterval(y,cV).unref(),y()}else Zt();e._socket?.setMaxListeners(200);function Zt(){clearTimeout(F),ae=e._socket?.bytesRead,re=e._socket?.bytesWritten,F=setTimeout(()=>{ae===e._socket?.bytesRead&&re===e._socket?.bytesWritten&&(ce.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},cV*2).unref()}o(Zt,"resetPingTimer");function Ht(){if(!(!g||!u))return m||(m=vd(f,u,g)),m}o(Ht,"getSharedStatus"),u&&Uc(u);let er,qf,Mc=[],qt=[],Gf,$f=[],qE=[],GE=[],aA=150,Vf=25,Le=0,$E=0,Kf=!1,To,Mr,Ar,Yf;e.on("message",cA);async function cA(y){if(r=await r,!r){ce.error?.(s,"No authorization provided"),Vr(1008,"Unauthorized");return}vc(y),e.off("message",cA),e.on("message",vc)}o(cA,"onWSMessageWhenAuthorized");function vc(y){le=performance.now();try{let b=y.dataView=new Qc(y.buffer,y.byteOffset,y.byteLength);if(y[0]>127){let U=(0,ot.decode)(y),[L,x,G]=U;switch(L){case eV:{if(x){if(g){if(g!==x){ce.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${x}, disconnecting`),e.send((0,ot.encode)([Hd])),Vr(1008,"Node name mismatch");return}}else if(g=x,t.connection?.tentativeNode){let de=t.connection.tentativeNode;de.name=g,t.connection.tentativeNode=null,Yo(g,de)}if(t.connection&&(t.connection.nodeName=g),ce.debug?.(s,"received node name:",g,"db:",u??U[2]),!u)try{Uc(u=U[2]),u==="system"&&(er=Qa(t,(de,z)=>{Su(z)&&Tu(z)}),e.on("close",()=>{er?.remove()}))}catch(de){ce.warn?.(s,"Error setting database",de),e.send((0,ot.encode)([Hd])),Vr(1008,de.message);return}Wf()}break}case oV:{ce.debug?.(s,"Received table definitions for",x.map(de=>de.table));for(let de of x){let z=U[2];de.database=z;let ne;if(Su(z)){if(u==="system")Me[z]?.[de.table]||(ne=C(de,Me[z]?.[de.table]));else{if(z!=="data"&&!Me[z]){ce.warn?.("Database not found",z);return}ne=C(de,Me[z]?.[de.table])}f||(f=ne?.auditStore),E||(E=at()?.[z])}}break}case Hd:Vr();break;case AC:try{let de=r?.replicates||r?.subscribers||r?.name;ce.debug?.("Received operation request",x,"from",g),server.operation(x,{user:r},!de).then(z=>{ce.debug?.("Requested request from finished",g,z),Array.isArray(z)&&(z={results:z}),z.requestId=x.requestId,e.send((0,ot.encode)([VS,z]))},z=>{ce.debug?.("Failed requested operation from",g,z),e.send((0,ot.encode)([VS,{requestId:x.requestId,error:SC(z)}]))})}catch(de){e.send((0,ot.encode)([VS,{requestId:x.requestId,error:SC(de)}]))}break;case VS:let{resolve:j,reject:X}=A.get(x.requestId);ce.debug?.("Received completed operation request",g,x),x.error?X(new Error(x.error)):j(x),A.delete(x.requestId);break;case TC:let $=U[3];if(!E){u?ce.error?.(s,"No database found for",u):ce.error?.(s,"Database name never received"),Vr();return}let be=E[$];be=C({table:$,database:u,attributes:x.attributes,schemaDefined:x.schemaDefined},be),Mc[G]={name:$,decoder:new ot.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:x.typedStructs,structures:x.structures}),getEntry(de){return be.primaryStore.getEntry(de)},rootStore:be.primaryStore.rootStore};break;case tV:Yf=f?y$(x,f):new Map,Gf=U[2],ce.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${Gf}`);break;case rV:let pe=G;GE[pe]=x;break;case iV:Ht()[SV]=x,ce.trace?.(s,"received and broadcasting committed update",x),Ht().buffer.notify();break;case sV:R=x,h.send({type:"end_txn",localTime:R,remoteNodeIds:S});break;case KS:{let de=U[1],{fileId:z,size:ne,finished:me,error:Ee}=de,fe=Te.get(z);ce.debug?.("Received blob",z,"has stream",!!fe,"connectedToBlob",!!fe?.connectedToBlob,"length",U[2].length,"finished",me),fe||(fe=new RC.PassThrough,fe.expectedSize=ne,Te.set(z,fe)),fe.lastChunk=Date.now();let De=U[2];Je(De.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{me?(Ee?(fe.on("error",()=>{}),fe.destroy(new Error("Blob error: "+Ee+" for record "+(fe.recordId??"unknown")+" from "+remote_node_name))):fe.end(De),fe.connectedToBlob&&Te.delete(z)):fe.write(De)}catch(ve){ce.error?.(`Error receiving blob for ${fe.recordId} from ${g} and streaming to storage`,ve),Te.delete(z)}break}case nV:{let de=x,z;try{let ne=U[3],me=qt[G]||(qt[G]=E[U[4]]);if(!me)return ce.warn?.("Unknown table id trying to handle record request",G);let Ee=me.primaryStore.getBinaryFast(Symbol.for("structures")),fe=Ee?.length??0;if(fe>0&&fe!==$E){$E=fe;let ve=(0,ot.decode)(Ee);e.send((0,ot.encode)([TC,{typedStructs:ve.typed,structures:ve.named},G,me.tableName]))}let De=me.primaryStore.getBinaryFast(ne);if(De){let ve=me.primaryStore.decoder.decode(De,{valueAsBuffer:!0}),$e=ct||{};$e.version=(0,_V.getLastVersion)(),ct&&ct[vu]&Ln&&(ve=Buffer.from(ve),wm(()=>me.primaryStore.decoder.decode(De),vr=>br(vr,ne),me.primaryStore.rootStore)),z=(0,ot.encode)([$S,de,{value:ve,expiresAt:$e.expiresAt,version:$e.version,residencyId:$e.residencyId,nodeId:$e.nodeId,user:$e.user}])}else z=(0,ot.encode)([$S,de])}catch(ne){z=(0,ot.encode)([$S,de,{error:ne.message}])}e.send(z);break}case $S:{let{resolve:de,reject:z,tableId:ne,key:me}=A.get(U[1]),Ee=U[2];if(Ee?.error)z(new Error(Ee.error));else if(Ee){let fe;P_(()=>{let De=Mc[ne].decoder.decode(Ee.value);Ee.value=De,Ee.key=me,de(Ee)||fe&&setTimeout(()=>fe.forEach(N_),6e4).unref()},De=>{let ve=gu(De,me);return fe||(fe=[]),fe.push(ve),ve})}else de();A.delete(U[1]);break}case Z$:{Ar=x;let de,z,ne=!1;if(h){if(u!==h.databaseName&&!h.then){ce.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(ce.debug?.(s,"received subscription request for",u,"at",Ar),!h){let Ne;h=new Promise(Gt=>{ce.debug?.("Waiting for subscription to database "+u),Ne=Gt}),h.ready=Ne,rc.set(u,h)}if(r.name)z=Yt().subscribe(r.name),z.then(async Ne=>{de=Ne;for await(let Gt of de){let Dt=Gt.value;if(!(Dt?.replicates===!0||Dt?.replicates?.receives||Dt?.subscriptions?.some(Ur=>(Ur.database||Ur.schema)===u&&Ur.publish!==!1))){ne=!0,e.send((0,ot.encode)([Hd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}}},Ne=>{ce.error?.(s,"Error subscribing to HDB nodes",Ne)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,ot.encode)([Hd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}if(Mr&&(ce.debug?.(s,"stopping previous subscription",u),Mr.emit("close")),Ar.length===0)return;let me=Ar[0],Ee=o(Ne=>{if(Ne&&(me.replicateByDefault?!me.tables.includes(Ne.tableName):me.tables.includes(Ne.tableName)))return{table:Ne}},"tableToTableEntry"),fe={txnTime:0},De,ve,$e=1/0,vr,zn=o((Ne,Gt)=>{if(Ne.type==="end_txn"){fe.txnTime&&(a[i]!==66&&ce.error?.("Invalid encoding of message"),yo(9),yo(H_),_(vr=Gt),vi()),i=c,fe.txnTime=0;return}let Dt=Ne.nodeId,Ur=Ne.tableId,Mt=ve[Ur];if(!Mt&&(Mt=ve[Ur]=Ee(h.tableById[Ur]),!Mt))return ce.debug?.("Not subscribed to table",Ur);let bs=Mt.table,vt=bs.primaryStore,ri=vt.encoder;(Ne.extendedType&z_||!ri.typedStructs)&&(ri._mergeStructures(ri.getStructures()),ri.typedStructs&&(ri.lastTypedStructuresLength=ri.typedStructs.length));let yu=De[Dt];if(!(yu&&yu.startTime<Gt&&(!yu.endTime||yu.endTime>Gt)))return WS&&ce.trace?.(s,"skipping replication update",Ne.recordId,"to:",g,"from:",Dt,"subscribed:",De),VM();WS&&ce.trace?.(s,"sending replication update",Ne.recordId,"to:",g,"from:",Dt,"subscribed:",De);let lA=Ne.version;fe.txnTime!==lA&&(fe.txnTime&&(WS&&ce.trace?.(s,"new txn time, sending queued txn",fe.txnTime),a[i]!==66&&ce.error?.("Invalid encoding of message"),vi()),fe.txnTime=lA,i=c,_(lA));let Fc=Ne.residencyId,uA=Aa(Fc,bs),KE;if(uA&&!uA.includes(g)){let ni=Aa(Ne.previousResidencyId,bs);if(ni&&!ni.includes(g)&&(Ne.type==="put"||Ne.type==="patch")||bs.getResidencyById)return VM();let zf=Ne.recordId;ce.trace?.(s,"sending invalidation",zf,g,"from",Dt);let jf=0;Fc&&(jf|=Jc),Ne.previousResidencyId&&(jf|=Xc);let mA,YE=null;for(let KM in bs.indices){if(!YE){if(mA=Ne.getValue(vt,!0),!mA)break;YE={}}YE[KM]=mA[KM]}KE=Zc(Ne.version,Ur,zf,null,Dt,Ne.user,Ne.type==="put"||Ne.type==="patch"?"invalidate":Ne.type,ri.encode(YE),jf,Fc,Ne.previousResidencyId,Ne.expiresAt)}function VM(){return ce.trace?.(s,"skipping audit record",Ne.recordId),q||(q=setTimeout(()=>{q=null,(vr||0)+aV/2<$e&&(WS&&ce.trace?.(s,"sending skipped sequence update",$e),e.send((0,ot.encode)([sV,$e])))},aV).unref()),new Promise(setImmediate)}o(VM,"skipAuditRecord");let dA=ri.typedStructs,fA=ri.structures;if((dA?.length!=Mt.typed_length||fA?.length!=Mt.structure_length)&&(Mt.typed_length=dA?.length,Mt.structure_length=fA.length,ce.debug?.(s,"send table struct",Mt.typed_length,Mt.structure_length),Mt.sentName||(Mt.sentName=!0),e.send((0,ot.encode)([TC,{typedStructs:dA,structures:fA,attributes:bs.attributes,schemaDefined:bs.schemaDefined},Ur,Mt.table.tableName]))),Fc&&!qE[Fc]&&(e.send((0,ot.encode)([rV,uA,Fc])),qE[Fc]=!0),KE)yo(KE.length),K(KE);else{let ni=Ne.encoded;Ne.extendedType&Ln&&wm(()=>Ne.getValue(vt),jf=>br(jf,Ne.recordId),vt.rootStore);let zf=ni[0]===66?8:0;yo(ni.length-zf),K(ni,zf),ce.trace?.("wrote record",Ne.recordId,"length:",ni.length)}return e._socket.writableNeedDrain?new Promise(ni=>{ce.debug?.(`Waiting for remote node ${g} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",ni)}):qe>Vf?new Promise(ni=>{Rr=ni}):new Promise(setImmediate)},"sendAuditRecord"),vi=o(()=>{c-i>8?(e.send(a.subarray(i,c)),ce.debug?.(s,"Sent message, size:",c-i),u!=="system"&&Je(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):ce.debug?.(s,"skipping empty transaction")},"sendQueuedData");Mr=new NC.EventEmitter,Mr.once("close",()=>{ne=!0,de?.end()});for(let{startTime:Ne}of Ar)Ne<$e&&($e=Ne);(z||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,ve=h.tableById.map(Ee),De=[];for(let{name:Gt,startTime:Dt,endTime:Ur}of Ar){let Mt=US(Gt,f);ce.debug?.("subscription to",Gt,"using local id",Mt,"starting",Dt),De[Mt]={startTime:Dt,endTime:Ur}}Tu(u),er||(er=wl(Gt=>{Gt.databaseName===u&&Tu(u)}),qf=vp(Gt=>{Gt===u&&(e.send((0,ot.encode)([Hd])),Vr())}),e.on("close",()=>{er?.remove(),qf?.remove()})),e.send((0,ot.encode)([tV,Qp(h.auditStore),Ar.map(({name:Gt})=>Gt)]));let Ne=!0;do{isFinite($e)||(ce.warn?.("Invalid sequence id "+$e),Vr(1008,"Invalid sequence id"+$e));let Gt;if(Ne&&!ne&&(Ne=!1,$e===0)){ce.info?.("Replicating all tables to",g);let Dt=$e,Ur=JS(f);for(let Mt in E){if(!Ee(Mt))continue;let bs=E[Mt];for(let vt of bs.primaryStore.getRange({snapshot:!1,versions:!0})){if(ne)return;if(vt.localTime>=$e){ce.trace?.(s,"Copying record from",u,Mt,vt.key,vt.localTime),Dt=Math.max(vt.localTime,Dt),Gt=!0,Ht()[sh]=1;let ri=Zc(vt.version,bs.tableId,vt.key,null,Ur,null,"put",wm(()=>bs.primaryStore.encoder.encode(vt.value),yu=>br(yu,vt.key)),vt.metadataFlags&-256,vt.residencyId,null,vt.expiresAt);await zn({recordId:vt.key,tableId:bs.tableId,type:"put",getValue(){return vt.value},encoded:ri,version:vt.version,residencyId:vt.residencyId,nodeId:Ur,extendedType:vt.metadataFlags},vt.localTime)}}}Gt&&zn({type:"end_txn"},$e),Ht()[sh]=0,$e=Dt}for(let{key:Dt,value:Ur}of f.getRange({start:$e||1,exclusiveStart:!0,snapshot:!1})){if(ne)return;let Mt=xt(Ur);ce.debug?.("sending audit record",new Date(Dt)),Ht()[sh]=Dt,$e=Dt,await zn(Mt,Dt),Mr.startTime=Dt,Gt=!0}Gt&&zn({type:"end_txn"},$e),Ht()[sh]=0,await r0(f)}while(!ne)}).catch(Ne=>{ce.error?.(s,"Error handling subscription to node",Ne),Vr(1008,"Error handling subscription to node")});break}}return}b.position=8;let P=!0,I,v;do{Ht();let U=b.readInt();if(U===9&&b.getUint8(b.position)==H_){b.position++,R=v=b.readFloat64(),m[bC]=R,m[IC]=Date.now(),m[wC]=TV,ce.trace?.("received remote sequence update",R,u);break}let L=b.position,x=xt(y,L,L+U),G=Mc[x.tableId];G||ce.error?.(`No table found with an id of ${x.tableId}`);let j;x.residencyId&&(j=GE[x.residencyId],ce.trace?.(s,"received residency list",j,x.type,x.recordId));try{let X=x.recordId;P_(()=>{I={table:G.name,id:x.recordId,type:x.type,nodeId:Yf.get(x.nodeId),residencyList:j,timestamp:x.version,value:x.getValue(G),user:x.user,beginTxn:P,expiresAt:x.expiresAt}},$=>gu($,X))}catch(X){throw X.message+="typed structures for current decoder"+JSON.stringify(G.decoder.typedStructs),X}P=!1,ce.trace?.(s,"received replication message",x.type,"id",I.id,"version",new Date(x.version),"nodeId",I.nodeId),m[bC]=x.version,m[IC]=Date.now(),m[wC]=yV,h.send(I),b.position=L+U}while(b.position<y.byteLength);Le++,u!=="system"&&Je(y.byteLength,"bytes-received",`${g}.${u}.${I?.table||"unknown_table"}`,"replication","ingest"),Le>aA&&!Kf&&(Kf=!0,e.pause(),ce.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),h.send({type:"end_txn",localTime:R,remoteNodeIds:S,async onCommit(){if(I){let U=Date.now()-I.timestamp;u!=="system"&&Je(U,"replication-latency",g+"."+u+"."+I.table,I.type,"ingest")}Le--,Kf&&(Kf=!1,e.resume(),ce.debug?.(`Replication resuming ${g}`)),Fe.length>0&&await Promise.all(Fe),ce.trace?.("All blobs finished"),!N&&v&&(ce.trace?.(s,"queuing confirmation of a commit at",v),setTimeout(()=>{e.send((0,ot.encode)([iV,N])),ce.trace?.(s,"sent confirmation of a commit at",N),N=null},Jle)),N=v,ce.debug?.("last sequence committed",new Date(v),u)}})}catch(b){ce.error?.(s,"Error handling incoming replication message",b)}}o(vc,"onWSMessage"),e.on("ping",Zt),e.on("pong",()=>{if(t.connection){let y=performance.now()-te;t.connection.latency=y,Ht()&&(m[jS]=y),t.isSubscriptionConnection&&Ul({name:g,database:u,url:t.url,latency:y})}te=null}),e.on("close",(y,b)=>{clearInterval(O),clearTimeout(F),clearInterval(k),Mr&&Mr.emit("close"),To&&To.end();for(let[P,{reject:I}]of A)I(new Error(`Connection closed ${b?.toString()} ${y}`));ce.debug?.(s,"closed",y,b?.toString())});function Vr(y,b){try{e.isFinished=!0,ce.debug?.(s,"closing",g,u,y,b),e.close(y,b),t.connection?.emit("finished")}catch(P){ce.error?.(s,"Error closing connection",P)}}o(Vr,"close");let Ra=new Set;async function br(y,b){let P=C_(y);if(Ra.has(P)){ce.debug?.("Blob already being sent",P);return}Ra.add(P);try{let I;qe++;for await(let v of y.stream())I&&(ce.debug?.("Sending blob chunk",P,"length",I.length),e.send((0,ot.encode)([KS,{fileId:P,size:y.size},I]))),I=v,e._socket.writableNeedDrain&&(ce.debug?.("draining",P),await new Promise(U=>e._socket.once("drain",U)),ce.debug?.("drained",P)),Je(v.length,"bytes-sent",`${g}.${u}`,"replication","blob");ce.debug?.("Sending final blob chunk",P,"length",I.length),e.send((0,ot.encode)([KS,{fileId:P,size:y.size,finished:!0},I]))}catch(I){ce.warn?.("Error sending blob",I,"blob id",P,"for record",b),e.send((0,ot.encode)([KS,{fileId:P,finished:!0,error:SC(I)},Buffer.alloc(0)]))}finally{Ra.delete(P),qe--,qe<Vf&&Rr?.()}}o(br,"sendBlobs");function gu(y,b){let P=C_(y),I=Te.get(P);ce.debug?.("Received transaction with blob",P,"has stream",!!I,"ended",!!I?.writableEnded),I?I.writableEnded&&Te.delete(P):(I=new RC.PassThrough,Te.set(P,I)),I.connectedToBlob=!0,I.lastChunk=Date.now(),I.recordId=b,y.size===void 0&&I.expectedSize&&(y.size=I.expectedSize);let v=I.blob??createBlob(I,y);I.blob=v;let U=v.save({primaryStore:h.auditStore});return U&&(U.blobId=P,Fe.push(U),U.finally(()=>{ce.debug?.(`Finished receiving blob stream ${P}`),Fe.splice(Fe.indexOf(U),1)})),v}o(gu,"receiveBlobs");function Wf(){if(p||(p=!0,t.connection?.on("subscriptions-updated",Wf)),!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 y=new Map;f||(f=h?.auditStore);try{for(let I of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let v of I.value.nodes||[])v.lastTxnTime>(y.get(v.id)??0)&&y.set(v.id,v.lastTxnTime)}catch(I){if(!I.message.includes("Can not re"))throw I}let b=t.connection?.nodeSubscriptions?.[0];S=[];let P=t.connection?.nodeSubscriptions.map((I,v)=>{let U=[],{replicateByDefault:L}=I;if(I.subscriptions){for(let X of I.subscriptions)if(X.subscribe&&(X.schema||X.database)===u){let $=X.table;E?.[$]?.replicate!==!1&&U.push($)}L=!1}else for(let X in E)(L?E[X].replicate===!1:E[X].replicate)&&U.push(X);let x=f&&US(I.name,f),G=h?.dbisDB?.get([Symbol.for("seq"),x])??1,j=Math.max(G?.seqId??1,(typeof I.startTime=="string"?new Date(I.startTime).getTime():I.startTime)??1);if(ce.debug?.("Starting time recorded in db",I.name,x,u,G?.seqId,"start time:",j,new Date(j)),b!==I){let X=f&&US(b.name,f),$=h?.dbisDB?.get([Symbol.for("seq"),X])??1;for(let be of $?.nodes||[])be.name===I.name&&(j=be.seqId,ce.debug?.("Using sequence id from proxy node",b.name,j))}if(x===void 0?ce.warn("Starting subscription request from node",I,"but no node id found"):S.push(x),y.get(x)>j&&(j=y.get(x),ce.debug?.("Updating start time from more recent txn recorded",b.name,j)),j===1&&YS)try{new URL(YS).hostname===I.name?(ce.warn?.(`Requesting full copy of database ${u} from ${YS}`),j=0):j=Date.now()-6e4}catch(X){ce.error?.("Error parsing leader URL",YS,X)}return ce.trace?.(s,"defining subscription request",I.name,u,new Date(j)),{name:I.name,replicateByDefault:L,tables:U,startTime:j,endTime:I.endTime}});if(P)if(ce.debug?.(s,"sending subscription request",P,h?.dbisDB?.path),clearTimeout(Y),P.length>0)e.send((0,ot.encode)([Z$,P]));else{let I=o(()=>{let v=performance.now();Y=setTimeout(()=>{le<=v?Vr(1008,"Connection has no subscriptions and is no longer used"):I()},J).unref()},"scheduleClose");I()}}o(Wf,"sendSubscriptionRequestUpdate");function Aa(y,b){if(!y)return;let P=$f[y];return P||(P=b.getResidencyRecord(y),$f[y]=P),P}o(Aa,"getResidence");function Su(y){return!(tc&&tc!="*"&&!tc[y]&&!tc.includes?.(y)&&!tc.some?.(b=>b.name===y))}o(Su,"checkDatabaseAccess");function Uc(y){if(h=h||d.get(y),!Su(y))throw new Error(`Access to database "${y}" is not permitted`);h||ce.warn?.(`No database named "${y}" was declared and registered`),f=h?.auditStore,E||(E=at()?.[y]);let b=it();if(b===g)throw b?new Error("Should not connect to self",b):new Error("Node name not defined");return xc(b,y),!0}o(Uc,"setDatabase");function xc(y,b){let P=at()?.[b],I=[];for(let v in P){let U=P[v];I.push({table:v,schemaDefined:U.schemaDefined,attributes:U.attributes.map(L=>({name:L.name,type:L.type,isPrimaryKey:L.isPrimaryKey}))})}ce.trace?.("Sending database info for node",y,"database name",b),e.send((0,ot.encode)([eV,y,b,I]))}o(xc,"sendNodeDBName");function Tu(y){let b=at()?.[y],P=[];for(let I in b){if(Ar&&!Ar.some(U=>U.replicateByDefault?!U.tables.includes(I):U.tables.includes(I)))continue;let v=b[I];P.push({table:I,schemaDefined:v.schemaDefined,attributes:v.attributes.map(U=>({name:U.name,type:U.type,isPrimaryKey:U.isPrimaryKey}))})}e.send((0,ot.encode)([oV,P,y]))}o(Tu,"sendDBSchema"),k=setInterval(()=>{for(let[y,b]of Te)b.lastChunk+Re<Date.now()&&(ce.warn?.(`Timeout waiting for blob stream to finish ${y} for record ${b.recordId??"unknown"} from ${g}`),Te.delete(y),b.end())},Re).unref();let VE=1,Bc=[];return{end(){To&&To.end(),Mr&&Mr.emit("close")},getRecord(y){let b=VE++;return new Promise((P,I)=>{let v=[nV,b,y.table.tableId,y.id];Bc[y.table.tableId]||(v.push(y.table.tableName),Bc[y.table.tableId]=!0),e.send((0,ot.encode)(v)),le=performance.now(),A.set(b,{tableId:y.table.tableId,key:y.id,resolve(U){let{table:L,entry:x}=y;if(P(U),U)return L._recordRelocate(x,U)},reject:I})})},sendOperation(y){let b=VE++;return y.requestId=b,e.send((0,ot.encode)([AC,y])),new Promise((P,I)=>{A.set(b,{resolve:P,reject:I})})}};function yo(y){T(5),y<128?a[c++]=y:y<16384?(l.setUint16(c,y|32768),c+=2):y<1056964608?(l.setUint32(c,y|3221225472),c+=4):(a[c]=255,l.setUint32(c+1,y),c+=5)}function K(y,b=0,P=y.length){let I=P-b;T(I),y.copy(a,c,b,P),c+=I}function _(y){T(8),l.setFloat64(c,y),c+=8}function T(y){if(y+16>a.length-c){let b=Buffer.allocUnsafeSlow(c+y-i+65536>>10<<11);a.copy(b,0,i,c),c=c-i,i=0,a=b,l=new DataView(a.buffer,0,a.length)}}function C(y,b){let P=y.database??"data";b||(b={});let I=b.schemaDefined,v=!1,U=y.schemaDefined,L=b.attributes||[];for(let x=0;x<y.attributes?.length;x++){let G=y.attributes[x],j=L.find(X=>X.name===G.name);(!j||j.type!==G.type)&&(I?ce.error?.(`Schema for '${u}.${y.table}' is defined locally, but attribute '${G.name}: ${G.type}' from '${g}' does not match local attribute ${j?"'"+j.name+": "+j.type+"'":"which does not exist"}`):(v=!0,U||(G.indexed=!0),j?L[L.indexOf(j)]=G:L.push(G)))}return v?(ce.debug?.("(Re)creating",y),Xe({table:y.table,database:y.database,schemaDefined:y.schemaDefined,attributes:L,...b})):b}}var uV,ot,dV,fV,mV,NC,pV,hV,Fl,EV,RC,_V,gV,jle,SC,ce,Z$,eV,tV,Hd,rV,TC,nV,$S,AC,VS,sV,iV,oV,KS,SV,bC,IC,sh,jS,wC,TV,yV,Qle,YS,CC,rc,WS,aV,Jle,cV,yC,zS,lV,qd,OC=ie(()=>{Oe();Io();nC();Vb();us();uV=w(ue());H();el();ot=require("msgpackr"),dV=require("ws"),fV=require("worker_threads"),mV=w(Q());th();NC=require("events"),pV=w(fs()),hV=w(require("node:tls"));vl();Fl=w(require("node:process")),EV=require("node:net");Ps();Ns();RC=require("node:stream"),_V=require("lmdb"),gV=w(require("minimist")),{forComponent:jle,errorToString:SC}=mV.default,ce=jle("replication").conditional,Z$=129,eV=140,tV=141,Hd=142,rV=130,TC=132,nV=133,$S=134,AC=136,VS=137,sV=143,iV=144,oV=145,KS=146,SV=0,bC=1,IC=2,sh=3,jS=4,wC=5,TV=0,yV=1,Qle=(0,gV.default)(Fl.argv),YS=Qle.HDB_LEADER_URL??Fl.env.HDB_LEADER_URL,CC=new Map,rc=new Map,WS=!0,aV=300,Jle=2,cV=3e4;o(QS,"createWebSocket");lV=500,qd=class extends NC.EventEmitter{static{o(this,"NodeReplicationConnection")}socket;startTime;retryTime=lV;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??Si(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await QS(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;ce.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${Fl.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),ce[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=lV,this.nodeSubscriptions&&Ul({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=ih(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"?(ce.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"?ce.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`):ce.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&&Bd({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();ce.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))}};o(ih,"replicateOverWS")});function oh(e){return e===bV||e===Xle}function Zle(e){return e===IV||e===wV}function PC(e){return e===bV?IV:wV}function eue(){if(AV)return;AV=!0;let e=kl.CryptoEngine.prototype,t=kl.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 oh(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return oh(s)?{name:PC(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return Zle(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=kl.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(oh(i)){let a=PC(i);return s.importKey("spki",this.subjectPublicKeyInfo.toSchema().toBER(!1),a,!0,["verify"])}return r.getPublicKey.call(this,...n)},t.verify=async function(...n){let[s]=n;if(oh(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),a=s.toSchema().toBER(!1),c=new ah.X509Certificate(Buffer.from(i)),l=new ah.X509Certificate(Buffer.from(a));return c.verify(l.publicKey)}catch{return!1}return r.certificateVerify.call(this,...n)},r.verifyWithPublicKey&&(e.verifyWithPublicKey=async function(...n){let[s,i,a]=n,c=a.algorithm.algorithmId;if(oh(c)){let l=PC(c);try{let u=this.crypto?.subtle||this.subtle||kl.getCrypto(!0)?.subtle||ah.webcrypto?.subtle;if(!u)throw new Error("No crypto.subtle available");let d=await u.importKey("spki",a.toSchema().toBER(!1),l,!1,["verify"]),f=i.valueBlock.valueHexView;return 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 kl,ah,bV,Xle,IV,wV,AV,NV=ie(()=>{kl=w(require("pkijs")),ah=require("node:crypto"),bV="1.3.101.112",Xle="1.3.101.113",IV="Ed25519",wV="Ed448",AV=!1;o(oh,"isEd25519OrEd448");o(Zle,"isEdDSAAlgorithmName");o(PC,"getEdDSAAlgorithmName");o(eue,"applyEd25519Patch");eue()});function tue(){return XS||(XS=Xe({table:"hdb_certificate_cache",database:"system",attributes:[{name:"certificate_id",isPrimaryKey:!0},{name:"status"},{name:"reason"},{name:"checked_at"},{name:"expiresAt",expiresAt:!0,indexed:!0},{name:"method"}]}),XS.sourcedFrom(LC)),XS}function rue(e){if(zt.trace?.("getCertificateVerificationConfig called with:",{mtlsConfig:e}),!e)return!1;if(e===!0)return zt.debug?.("mTLS enabled with default certificate verification"),{};let t=e.certificateVerification;return zt.trace?.("Certificate verification config:",{verificationConfig:t}),t==null?{}:t===!1?!1:t===!0?{}:t}async function Gd(e,t){zt.debug?.("verifyCertificate called for:",e.subject?.CN||"unknown");let r=rue(t);if(r===!1)return zt.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=iue(e);return zt.trace?.("Certificate chain length:",n.length),n.length===1&&!n[0].issuer?(zt.debug?.("Certificate without issuer - cannot perform OCSP check"),{valid:!0,status:"no-issuer-cert",method:"disabled"}):n.length<2||!n[0].issuer?(zt.debug?.("Certificate chain too short for revocation checking"),{valid:!0,status:"insufficient-chain",method:"disabled"}):nue(n[0].cert,n[0].issuer,r)}async function nue(e,t,r){zt.debug?.("verifyOCSP called");try{Buffer.isBuffer(e)&&(e=CV(e,"CERTIFICATE")),Buffer.isBuffer(t)&&(t=CV(t,"CERTIFICATE"));let n={certPem:e,issuerPem:t,method:"ocsp"},i=`ocsp:${(0,PV.createHash)("sha256").update(JSON.stringify(n)).digest("hex")}`;zt.trace?.("OCSP cache key:",i);let c=await tue().get(i,{certPem:e,issuerPem:t,config:r||{}});if(!c)return(r?.failureMode??ch.failureMode)==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"ocsp"}:(zt.warn?.("OCSP cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"});let l=c,u=c.wasLoadedFromSource?.();return zt.trace?.(`OCSP ${u?"source fetch":"cache hit"} for certificate`),{valid:l.status==="good",status:l.status,cached:!u,method:l.method||"ocsp"}}catch(n){return zt.error?.("OCSP verification error:",n),(r?.failureMode??ch.failureMode)==="fail-closed"?{valid:!1,status:"error",error:n.message,method:"ocsp"}:(zt.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"})}}async function sue(e,t,r){zt.trace?.("Calling getCertStatus with timeout:",r);let n=await(0,OV.getCertStatus)(e,{ca:t,timeout:r});return zt.debug?.("OCSP response from easy-ocsp:",{status:n.status,revocationReason:n.revocationReason,responseData:n}),n.status==="good"?{status:"good"}:n.status==="revoked"?{status:"revoked",reason:n.revocationReason?.toString()||"unspecified"}:{status:"unknown",reason:"unknown-status"}}function CV(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 iue(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}var OV,PV,LV,zt,LC,ch,XS,ZS=ie(()=>{NV();OV=require("easy-ocsp"),PV=require("node:crypto"),LV=w(Zn());Oe();Ua();zt=(0,LV.loggerWithTag)("cert-verification"),LC=class extends Fr{static{o(this,"CertificateVerificationSource")}async get(t){zt.debug?.("CertificateVerificationSource.get called for:",t);let r=this.getContext(),n=r?.requestContext;if(!n||!n.certPem||!n.issuerPem)throw new Error(`No certificate data provided for cache key: ${t}`);let{certPem:s,issuerPem:i,config:a}=n;zt.trace?.("Performing OCSP check with config:",a);try{let c=a?.timeout??ch.timeout,l=await Promise.race([sue(s,i,c),new Promise((d,f)=>setTimeout(()=>f(new Error("OCSP timeout")),c))]);zt.debug?.("OCSP check result:",l);let u=a?.cacheTtl??ch.cacheTtl;return r&&(r.expiresAt=Date.now()+u),{certificate_id:t,status:l.status,reason:l.reason,checked_at:Date.now(),expiresAt:Date.now()+u,method:"ocsp"}}catch(c){return zt.error?.("OCSP verification error:",c),(a?.failureMode??ch.failureMode)==="fail-closed"?(r&&(r.expiresAt=Date.now()+3e5),{certificate_id:t,status:"unknown",reason:c.message,checked_at:Date.now(),expiresAt:Date.now()+3e5,method:"ocsp"}):(zt.warn?.("OCSP check failed, allowing connection (fail-open mode)"),null)}}},ch={timeout:5e3,cacheTtl:36e5,failureMode:"fail-open"};o(tue,"getCertificateCacheTable");o(rue,"getCertificateVerificationConfig");o(Gd,"verifyCertificate");o(nue,"verifyOCSP");o(sue,"performOCSPCheck");o(CV,"bufferToPem");o(iue,"extractCertificateChain")});var zo={};Ie(zo,{clearThisNodeName:()=>pue,disableReplication:()=>lue,enabledDatabases:()=>tc,forEachReplicatedDatabase:()=>Qa,getThisNodeId:()=>JS,getThisNodeName:()=>it,getThisNodeUrl:()=>Ja,hostnameToUrl:()=>nT,lastTimeInAuditStore:()=>Jp,monitorNodeCAs:()=>HV,replicateOperation:()=>Eue,replicationCertificateAuthorities:()=>jo,sendOperationToNode:()=>lh,servers:()=>aue,setReplicator:()=>GV,start:()=>cue,startOnMainThread:()=>oC,subscribeToNode:()=>eh,unsubscribeFromNode:()=>FS,urlToNodeName:()=>Si});function cue(e){if(!e.port&&!e.securePort&&(e.port=Hs.default.get(B.OPERATIONSAPI_NETWORK_PORT),e.securePort=Hs.default.get(B.OPERATIONSAPI_NETWORK_SECUREPORT)),!it())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let s of Zp(e))t.set(Si(s.url),s);uue(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=Ue.ws(async(s,i,a,c)=>{if(bt.debug("Incoming WS connection received "+i.url),i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,a);s._socket.unref(),ih(s,e,a.then(()=>i?.user)),s.on("error",l=>{l.code!=="ECONNREFUSED"&&bt.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,Ue.http(async(s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){bt.debug("Incoming replication WS connection received, authorized: "+s.authorized),!s.authorized&&s._nodeRequest.socket.authorizationError&&bt.error(`Incoming client connection from ${s.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`,s._nodeRequest.socket.authorizationError);let a=Yt().primaryStore;if(s.authorized&&s.peerCertificate.subjectaltname){let c=(0,FV.getHostnamesFromCertificate)(s.peerCertificate),l;for(let u of c)if(l=u&&(a.get(u)||t.get(u)),l)break;if(l){let u=await Gd(s.peerCertificate,e);if(!u.valid){bt.warn("Certificate verification failed:",u.status,"for node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}if(l?.revoked_certificates?.includes(s.peerCertificate.serialNumber)){bt.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l}else bt.warn(`No node found for certificate common name/SANs: ${c}, available nodes are ${Array.from(a.getRange({}).filter(({value:u})=>u).map(({key:u})=>u)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let c=a.get(s.ip)||t.get(s.ip);c?s.user=c:bt.warn(`No node found for IP address ${s.ip}, available nodes are ${Array.from(new Set([...a.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return i(s)},e);let n=[];for(let s of r)if(s.secureContexts){let i=o(()=>{let a=new Set(s.secureContexts.values());s.defaultContext&&a.add(s.defaultContext);for(let c of a)try{let l=Array.from(jo);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=rT.createSecureContext(u)}catch(l){bt.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),Hs.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1&&i()}HV(()=>{for(let s of n)s()})}function HV(e){let t=0;Ud(r=>{r?.ca&&(jo.add(r.ca),jo.size!==t&&(t=jo.size,e?.()))})}function lue(e=!0){kV=e}function uue(e){kV||(at(),tc=e.databases,Qa(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||rc;for(let[s,i]of tT){let a=i.get(r);a&&(a.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];GV(r,s,e),CC.get(s)?.forEach(i=>i(s))}}))}function GV(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 qV extends Fr{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||rc,a=i.get(e),c=a?.tableById||[];c[t.tableId]=t;let l=a?.ready;if(bt.trace("Setting up replicator subscription to database",e),!a?.auditStore)return this.subscription=a=new Xn,i.set(e,a),a.tableById=c,a.auditStore=t.auditStore,a.dbisDB=t.dbisDB,a.databaseName=e,l&&l(a),a;this.subscription=a}static subscribeOnThisThread(i,a){return!0}static async load(i){if(i){let a=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),a]);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=fue(h,qV.subscription,e);if(E?.isConnected){let g=vd(t.auditStore,e,h)[jS];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new xV.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:oue++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;bt.warn("Error in load from node",Hl,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function due(e,t,r,n,s){let i=tT.get(e);i||tT.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new qd(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function fue(e,t,r){let n=DV.get(Hl);n||(n=new Map,DV.set(Hl,n));let s=n.get(r);if(s)return s;let i=Yt().primaryStore.get(e);return i?.url&&(s=new qd(i.url,t,r,Hl,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function lh(e,t,r){r||(r={}),r.serverName=e.name;let n=await QS(e.url,r),s=ih(n,{},{});return new Promise((i,a)=>{n.on("open",()=>{bt.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{a(c)}),n.on("close",c=>{bt.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function eh(e){try{BV.isMainThread&&bt.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=rc.get(e.database);if(!t){let n;t=new Promise(s=>{bt.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,rc.set(e.database,t)}let r=due(e.nodes[0].url,t,e.database,e.nodes[0].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=>Xp(n,e.database)),e.replicateByDefault)}catch(t){bt.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function FS({name:e,url:t,database:r}){bt.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(Yt().primaryStore.getRange({})));let n=tT.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function mue(){if(DC!==void 0)return DC;let e=Hs.default.get(B.OPERATIONSAPI_TLS_CERTIFICATE)||Hs.default.get(B.TLS_CERTIFICATE);if(e)return DC=new vV.X509Certificate((0,UV.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function it(){return Hl||(Hl=Hs.default.get("replication_hostname")??Si(Hs.default.get("replication_url"))??mue()??MV("operationsapi_network_secureport")??MV("operationsapi_network_port")??"127.0.0.1")}function pue(){Hl=void 0}function MV(e){let t=Hs.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function eT(e){let t=Hs.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function JS(e){return Qp(e)?.[it()]}function Ja(){let e=Hs.default.get("replication_url");return e||nT(it())}function nT(e){let t=eT("replication_port");if(t)return`ws://${e}:${t}`;if(t=eT("replication_secureport"),t)return`wss://${e}:${t}`;if(t=eT("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=eT("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Si(e){if(e)return new URL(e).hostname}function Qa(e,t){for(let n of Object.getOwnPropertyNames(Me))r(n);return vp(n=>{r(n)}),wl((n,s)=>{r(n.databaseName)});function r(n){let s=Me[n];bt.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):hue(n)&&t(s,n,!1)}o(r,"forDatabase")}function hue(e){let t=Me[e];for(let r in t)if(t[r].replicate)return!0}function Jp(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function Eue(e){let t={message:""};if(e.replicated){e.replicated=!1,bt.trace?.("Replicating operation",e.operation,"to nodes",Ue.nodes.map(n=>n.name));let r=await Promise.allSettled(Ue.nodes.map(n=>lh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Ue.nodes[s]?.name,i})}return t}var Hs,bt,vV,UV,rT,xV,BV,FV,kV,oue,aue,jo,tc,tT,DV,DC,Hl,us=ie(()=>{Oe();Ua();Nu();OC();xr();Hs=w(ue()),bt=w(Q()),vV=require("crypto");ZS();UV=require("fs");th();vl();H();nC();rT=w(require("node:tls")),xV=w(_e()),BV=require("worker_threads"),FV=w(fs()),oue=1,aue=[],jo=Hs.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1?new Set(rT.rootCertificates):new Set;o(cue,"start");o(HV,"monitorNodeCAs");o(lue,"disableReplication");o(uue,"assignReplicationSource");o(GV,"setReplicator");tT=new Map;o(due,"getSubscriptionConnection");DV=new Map;o(fue,"getRetrievalConnectionByName");o(lh,"sendOperationToNode");o(eh,"subscribeToNode");o(FS,"unsubscribeFromNode");o(mue,"getCommonNameFromCert");o(it,"getThisNodeName");o(pue,"clearThisNodeName");Object.defineProperty(Ue,"hostname",{get(){return it()}});o(MV,"getHostFromListeningPort");o(eT,"getPortFromListeningPort");o(JS,"getThisNodeId");Ue.replication={getThisNodeId:JS,exportIdMapping:Qp};o(Ja,"getThisNodeUrl");o(nT,"hostnameToUrl");o(Si,"urlToNodeName");o(Qa,"forEachReplicatedDatabase");o(hue,"hasExplicitlyReplicatedTable");o(Jp,"lastTimeInAuditStore");o(Eue,"replicateOperation")});var cT=M((uxe,WV)=>{"use strict";var $d=VG(),{validateBySchema:uh}=ft(),{commonValidators:Vd,schemaRegex:MC}=qi(),hr=require("joi"),_ue=Q(),gue=require("uuid").v4,oT=ko(),Kd=(H(),D(W)),Sue=require("util"),nc=os(),{handleHDBError:Qo,hdbErrors:Tue,ClientError:dh}=_e(),{HDB_ERROR_MSGS:sT,HTTP_STATUS_CODES:Jo}=Tue,{SchemaEventMsg:aT}=ns(),$V=sr(),{getDatabases:yue}=(Oe(),D(mt)),{transformReq:Yd}=oe(),{replicateOperation:VV}=(us(),D(zo)),iT=hr.string().min(1).max(Vd.schema_length.maximum).pattern(MC).messages({"string.pattern.base":"{:#label} "+Vd.schema_format.message}),Rue=hr.string().min(1).max(Vd.schema_length.maximum).pattern(MC).messages({"string.pattern.base":"{:#label} "+Vd.schema_format.message}).required(),Aue=hr.string().min(1).max(Vd.schema_length.maximum).pattern(MC).messages({"string.pattern.base":"{:#label} "+Vd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();WV.exports={createSchema:bue,createSchemaStructure:KV,createTable:Iue,createTableStructure:YV,createAttribute:Pue,dropSchema:wue,dropTable:Nue,dropAttribute:Cue,getBackup:Lue};async function bue(e){let t=await KV(e);return oT.signalSchemaChange(new aT(process.pid,e.operation,e.schema)),t}o(bue,"createSchema");async function KV(e){let t=uh(e,hr.object({database:iT,schema:iT}));if(t)throw new dh(t.message);if(Yd(e),!await $d.checkSchemaExists(e.schema))throw Qo(new Error,sT.SCHEMA_EXISTS_ERR(e.schema),Jo.BAD_REQUEST,Kd.LOG_LEVELS.ERROR,sT.SCHEMA_EXISTS_ERR(e.schema),!0);return await nc.createSchema(e),`database '${e.schema}' successfully created`}o(KV,"createSchemaStructure");async function Iue(e){return Yd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await YV(e)}o(Iue,"createTable");async function YV(e){let t=uh(e,hr.object({database:iT,schema:iT,table:Rue,residence:hr.array().items(hr.string().min(1)).optional(),hash_attribute:Aue}));if(t)throw new dh(t.message);if(!await $d.checkSchemaTableExists(e.schema,e.table))throw Qo(new Error,sT.TABLE_EXISTS_ERR(e.schema,e.table),Jo.BAD_REQUEST,Kd.LOG_LEVELS.ERROR,sT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:gue(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await nc.createTable(n,e);else throw Qo(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Jo.BAD_REQUEST);else await nc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(YV,"createTableStructure");async function wue(e){let t=uh(e,hr.object({database:hr.string(),schema:hr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new dh(t.message);Yd(e);let r=await $d.checkSchemaExists(e.schema);if(r)throw Qo(new Error,r,Jo.NOT_FOUND,Kd.LOG_LEVELS.ERROR,r,!0);let n=await $d.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await nc.dropSchema(e),oT.signalSchemaChange(new aT(process.pid,e.operation,e.schema)),await $V.purgeSchemaTableStreams(e.schema,s);let i=await VV(e);return i.message=`successfully deleted '${e.schema}'`,i}o(wue,"dropSchema");async function Nue(e){let t=uh(e,hr.object({database:hr.string(),schema:hr.string(),table:hr.string().required()}));if(t)throw new dh(t.message);Yd(e);let r=await $d.checkSchemaTableExists(e.schema,e.table);if(r)throw Qo(new Error,r,Jo.NOT_FOUND,Kd.LOG_LEVELS.ERROR,r,!0);await nc.dropTable(e),await $V.purgeTableStream(e.schema,e.table);let n=await VV(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(Nue,"dropTable");async function Cue(e){let t=uh(e,hr.object({database:hr.string(),schema:hr.string(),table:hr.string().required(),attribute:hr.string().required()}));if(t)throw new dh(t.message);Yd(e);let r=await $d.checkSchemaTableExists(e.schema,e.table);if(r)throw Qo(new Error,r,Jo.NOT_FOUND,Kd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Qo(new Error,"You cannot drop a hash attribute",Jo.BAD_REQUEST,void 0,void 0,!0);if(Kd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Qo(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Jo.BAD_REQUEST,void 0,void 0,!0);try{return await nc.dropAttribute(e),Oue(e),oT.signalSchemaChange(new aT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw _ue.error(`Got an error deleting attribute ${Sue.inspect(e)}.`),n}}o(Cue,"dropAttribute");function Oue(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)}o(Oue,"dropAttributeFromGlobal");async function Pue(e){Yd(e);let t=yue()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Qo(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Jo.BAD_REQUEST,void 0,void 0,!0);return await nc.createAttribute(e),oT.signalSchemaChange(new aT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(Pue,"createAttribute");function Lue(e){return nc.getBackup(e)}o(Lue,"getBackup")});var jV=M((fxe,zV)=>{"use strict";var{OPERATIONS_ENUM:Due}=(H(),D(W)),vC=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Due.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};zV.exports=vC});var UC=M((hxe,e1)=>{"use strict";var Mue=os(),pxe=jV(),lT=oe(),uT=(H(),D(W)),vue=ue(),{handleHDBError:QV,hdbErrors:Uue}=_e(),{HDB_ERROR_MSGS:JV,HTTP_STATUS_CODES:XV}=Uue,xue=Object.values(uT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),ZV="To use this operation audit log must be enabled in harperdb-config.yaml";e1.exports=Bue;async function Bue(e){if(lT.isEmpty(e.schema))throw new Error(JV.SCHEMA_REQUIRED_ERR);if(lT.isEmpty(e.table))throw new Error(JV.TABLE_REQUIRED_ERR);if(!vue.get(uT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw QV(new Error,ZV,XV.BAD_REQUEST,uT.LOG_LEVELS.ERROR,ZV,!0);let t=lT.checkSchemaTableExist(e.schema,e.table);if(t)throw QV(new Error,t,XV.NOT_FOUND,uT.LOG_LEVELS.ERROR,t,!0);if(!lT.isEmpty(e.search_type)&&xue.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await Mue.readAuditLog(e)}o(Bue,"readAuditLog")});var r1=M((_xe,t1)=>{"use strict";var{OPERATIONS_ENUM:Fue}=(H(),D(W)),xC=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Fue.GET_BACKUP,this.schema=t,this.table=r}};t1.exports=xC});var i1=M((yxe,s1)=>{"use strict";var kue=os(),Sxe=r1(),BC=oe(),Hue=(H(),D(W)),Txe=ue(),{handleHDBError:que,hdbErrors:Gue}=_e(),{HDB_ERROR_MSGS:n1,HTTP_STATUS_CODES:$ue}=Gue;s1.exports=Vue;async function Vue(e){if(BC.isEmpty(e.schema))throw new Error(n1.SCHEMA_REQUIRED_ERR);if(BC.isEmpty(e.table))throw new Error(n1.TABLE_REQUIRED_ERR);let t=BC.checkSchemaTableExist(e.schema,e.table);if(t)throw que(new Error,t,$ue.NOT_FOUND,Hue.LOG_LEVELS.ERROR,t,!0);return await kue.getBackup(readAuditLogObject)}o(Vue,"getBackup")});var l1=M((Axe,c1)=>{"use strict";var Kue=ue(),sc=require("joi"),Yue=ft(),o1=require("moment"),Wue=require("fs-extra"),FC=require("path"),zue=require("lodash"),fh=(H(),D(W)),{LOG_LEVELS:ql}=(H(),D(W)),jue="YYYY-MM-DD hh:mm:ss",Que=FC.resolve(__dirname,"../logs");c1.exports=function(e){return Yue.validateBySchema(e,Jue)};var Jue=sc.object({from:sc.custom(a1),until:sc.custom(a1),level:sc.valid(ql.NOTIFY,ql.FATAL,ql.ERROR,ql.WARN,ql.INFO,ql.DEBUG,ql.TRACE),order:sc.valid("asc","desc"),limit:sc.number().min(1),start:sc.number().min(0),log_name:sc.custom(Xue)});function a1(e,t){if(o1(e,o1.ISO_8601).format(jue)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(a1,"validateDatetime");function Xue(e,t){if(zue.invert(fh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Kue.get(fh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?fh.LOG_NAMES.HDB:e,i=s===fh.LOG_NAMES.INSTALL?FC.join(Que,fh.LOG_NAMES.INSTALL):FC.join(n,s);return Wue.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(Xue,"validateReadLogPath")});var HC=M((Ixe,d1)=>{"use strict";var dT=(H(),D(W)),Zue=Q(),ede=ue(),tde=l1(),kC=require("path"),u1=require("fs-extra"),{once:rde}=require("events"),{handleHDBError:nde,hdbErrors:sde}=_e(),{PACKAGE_ROOT:ide}=Tt(),{replicateOperation:ode}=(us(),D(zo)),ade=kC.join(ide,"logs"),cde=1e3,lde=200;d1.exports=ude;async function ude(e){let t=tde(e);if(t)throw nde(t,t.message,sde.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=ode(e),n=ede.get(dT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?dT.LOG_NAMES.HDB:e.log_name,i=s===dT.LOG_NAMES.INSTALL?kC.join(ade,dT.LOG_NAMES.INSTALL):kC.join(n,s),a=e.level!==void 0,c=a?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.until!==void 0,f=d?new Date(e.until):void 0,m=e.limit===void 0?cde:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,g=0;p==="desc"&&!u&&!f&&(g=Math.max(u1.statSync(i).size-(E+5)*lde,0));let A=u1.createReadStream(i,{start:g});A.on("error",q=>{Zue.error(q)});let S=0,R=[],N="",O;A.on("data",q=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;q=N+q;let J=0,Y;for(;(Y=k.exec(q))&&!A.destroyed;){O&&(O.message=q.slice(J,Y.index),F(O));let[le,ae,re]=Y,Re=re.split("] ["),Te=Re[0],Fe=Re[1];Re.splice(0,2),O={timestamp:ae,thread:Te,level:Fe,tags:Re,message:""},J=Y.index+le.length}N=q.slice(J)}),A.on("end",q=>{A.destroyed||O&&(O.message=N.trim(),F(O))}),A.resume();function F(q){let k,J,Y;switch(!0){case(a&&l&&d):k=new Date(q.timestamp),J=new Date(u),Y=new Date(f),q.level===c&&k>=J&&k<=Y&&S<h?S++:q.level===c&&k>=J&&k<=Y&&(ro(q,p,R),S++,S===E&&A.destroy());break;case(a&&l):k=new Date(q.timestamp),J=new Date(u),q.level===c&&k>=J&&S<h?S++:q.level===c&&k>=J&&(ro(q,p,R),S++,S===E&&A.destroy());break;case(a&&d):k=new Date(q.timestamp),Y=new Date(f),q.level===c&&k<=Y&&S<h?S++:q.level===c&&k<=Y&&(ro(q,p,R),S++,S===E&&A.destroy());break;case(l&&d):k=new Date(q.timestamp),J=new Date(u),Y=new Date(f),k>=J&&k<=Y&&S<h?S++:k>=J&&k<=Y&&(ro(q,p,R),S++,S===E&&A.destroy());break;case a:q.level===c&&S<h?S++:q.level===c&&(ro(q,p,R),S++,S===E&&A.destroy());break;case l:k=new Date(q.timestamp),J=new Date(u),k>=J&&S<h?S++:k>=J&&S>=h&&(ro(q,p,R),S++,S===E&&A.destroy());break;case d:k=new Date(q.timestamp),Y=new Date(f),k<=Y&&S<h?S++:k<=Y&&S>=h&&(ro(q,p,R),S++,S===E&&A.destroy());break;default:S<h?S++:(ro(q,p,R),S++,S===E&&A.destroy())}}o(F,"onLogMessage"),await rde(A,"close");let te=await r;if(te.replicated){for(let q of R)q.node=server.hostname;for(let q of te.replicated){let k=q.node;if(q.status==="failed")ro({timestamp:new Date().toISOString(),level:"error",node:k,message:`Error retrieving logs: ${q.reason}`},p,R);else for(let J of q.results)J.node=k,ro(J,p,R)}}return R}o(ude,"readLog");function ro(e,t,r){t==="desc"?dde(e,r):t==="asc"?fde(e,r):r.push(e)}o(ro,"pushLineToResult");function dde(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)}o(dde,"insertDescending");function fde(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)}o(fde,"insertAscending")});var fT=M((Lxe,h1)=>{"use strict";var qC=require("joi"),{string:Wd,boolean:f1,date:mde}=qC.types(),pde=ft(),{validateSchemaExists:Nxe,validateTableExists:Cxe,validateSchemaName:Oxe}=qi(),hde=(H(),D(W)),Ede=wt(),m1=ue();m1.initSync();var Pxe=Wd.invalid(m1.get(hde.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(Ede.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),p1={operation:Wd.valid("add_node","update_node","set_node_replication"),node_name:Wd.optional(),subscriptions:qC.array().items({table:Wd.optional(),schema:Wd.optional(),database:Wd.optional(),subscribe:f1.required(),publish:f1.required().custom(gde),start_time:mde.iso()})};function _de(e){return pde.validateBySchema(e,qC.object(p1))}o(_de,"addUpdateNodeValidator");function gde(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`)}o(gde,"checkForFalsy");h1.exports={addUpdateNodeValidator:_de,validationSchema:p1}});var zd=M((Mxe,E1)=>{"use strict";var GC=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},$C=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};E1.exports={Node:GC,NodeSubscription:$C}});var g1=M((Uxe,_1)=>{"use strict";var Sde=(H(),D(W)).OPERATIONS_ENUM,VC=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Sde.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};_1.exports=VC});var mh=M((Bxe,S1)=>{"use strict";var KC=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},YC=class{static{o(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,a,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=a,c!==void 0&&(this.attributes=c)}};S1.exports={RemotePayloadObject:KC,RemotePayloadSubscription:YC}});var y1=M((kxe,T1)=>{"use strict";var WC=class{static{o(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,a=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=a}};T1.exports=WC});var A1=M((Kxe,R1)=>{"use strict";var Tde=y1(),qxe=$t(),Gxe=_t(),yde=Q(),{getSchemaPath:$xe,getTransactionAuditStorePath:Vxe}=Rt(),{getDatabases:Rde}=(Oe(),D(mt));R1.exports=Ade;async function Ade(e){let t=new Tde;try{let r=Rde()[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){yde.warn(`unable to stat table dbi due to ${r}`)}return t}o(Ade,"lmdbGetTableSize")});var I1=M((Wxe,b1)=>{"use strict";var zC=class{static{o(this,"SystemInformationObject")}constructor(t,r,n,s,i,a,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=a,this.harperdb_processes=c}};b1.exports=zC});var Qd=M((Zxe,O1)=>{"use strict";var bde=require("fs-extra"),Ide=require("path"),_n=require("systeminformation"),ic=Q(),w1=sr(),jxe=wt(),jd=(H(),D(W)),wde=A1(),Nde=Ol(),{getThreadInfo:N1}=nt(),ph=ue();ph.initSync();var Cde=I1(),{openEnvironment:Qxe}=_t(),{getSchemaPath:Jxe}=Rt(),{database:Xxe,databases:jC}=(Oe(),D(mt)),mT;O1.exports={getHDBProcessInfo:ZC,getNetworkInfo:tO,getDiskInfo:eO,getMemoryInfo:XC,getCPUInfo:JC,getTimeInfo:QC,getSystemInformation:rO,systemInformation:Ode,getTableSize:nO,getMetrics:sO};function QC(){return _n.time()}o(QC,"getTimeInfo");async function JC(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await _n.cpu();d.cpu_speed=await _n.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:g,cpus:A,...S}=await _n.currentLoad();return S.cpus=[],A.forEach(R=>{let{rawLoad:N,rawLoadIdle:O,rawLoadIrq:F,rawLoadNice:te,rawLoadSystem:q,rawLoadUser:k,...J}=R;S.cpus.push(J)}),d.current_load=S,d}catch(e){return ic.error(`error in getCPUInfo: ${e}`),{}}}o(JC,"getCPUInfo");async function XC(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await _n.mem();return Object.assign(s,process.memoryUsage())}catch(e){return ic.error(`error in getMemoryInfo: ${e}`),{}}}o(XC,"getMemoryInfo");async function ZC(){let e={core:[],clustering:[]};try{let t=await _n.processes(),r;try{r=Number.parseInt(await bde.readFile(Ide.join(ph.get(jd.CONFIG_PARAMS.ROOTPATH),jd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===jd.NODE_ERROR_CODES.ENOENT)ic.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 ic.error(`error in getHDBProcessInfo: ${t}`),e}}o(ZC,"getHDBProcessInfo");async function eO(){let e={};try{if(!ph.get(jd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await _n.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await _n.fsStats();return e.read_write=u,e.size=await _n.fsSize(),e}catch(t){return ic.error(`error in getDiskInfo: ${t}`),e}}o(eO,"getDiskInfo");async function tO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return ph.get(jd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await _n.networkInterfaceDefault(),e.latency=await _n.inetChecksite("google.com"),(await _n.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:a,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await _n.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return ic.error(`error in getNetworkInfo: ${t}`),e}}o(tO,"getNetworkInfo");async function rO(){if(mT!==void 0)return mT;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await _n.osInfo();e=c;let l=await _n.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,mT=e,mT}catch(t){return ic.error(`error in getSystemInformation: ${t}`),e}}o(rO,"getSystemInformation");async function nO(){let e=[],t=await Nde.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await wde(n));return e}o(nO,"getTableSize");async function sO(){let e={};for(let t in jC){let r=e[t]={},n=r.tables={};for(let s in jC[t])try{let i=jC[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 a=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=a[l];n[s]=c}catch(i){ic.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(sO,"getMetrics");async function C1(){if(ph.get(jd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await w1.getNATSReferences(),t=await w1.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 a={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(a)}return r}}o(C1,"getNatsStreamInfo");async function Ode(e){let t=new Cde;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await rO(),t.time=QC(),t.cpu=await JC(),t.memory=await XC(),t.disk=await eO(),t.network=await tO(),t.harperdb_processes=await ZC(),t.table_size=await nO(),t.metrics=await sO(),t.threads=await N1(),t.replication=await C1(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await rO();break;case"time":t.time=QC();break;case"cpu":t.cpu=await JC();break;case"memory":t.memory=await XC();break;case"disk":t.disk=await eO();break;case"network":t.network=await tO();break;case"harperdb_processes":t.harperdb_processes=await ZC();break;case"table_size":t.table_size=await nO();break;case"database_metrics":case"metrics":t.metrics=await sO();break;case"threads":t.threads=await N1();break;case"replication":t.replication=await C1();break;default:break}return t}o(Ode,"systemInformation")});var Xo=M((s0e,M1)=>{"use strict";var Pde=Bn(),iO=oe(),Lde=require("util"),Gl=(H(),D(W)),P1=ue();P1.initSync();var Dde=vN(),L1=fn(),{Node:t0e,NodeSubscription:r0e}=zd(),Mde=Ju(),vde=g1(),{RemotePayloadObject:Ude,RemotePayloadSubscription:xde}=mh(),{handleHDBError:Bde,hdbErrors:Fde}=_e(),{HTTP_STATUS_CODES:kde,HDB_ERROR_MSGS:Hde}=Fde,qde=di(),Gde=Qd(),{packageJson:$de}=Tt(),{getDatabases:Vde}=(Oe(),D(mt)),n0e=Lde.promisify(Dde.authorize),Kde=L1.searchByHash,Yde=L1.searchByValue;M1.exports={isEmpty:Wde,getNodeRecord:zde,upsertNodeRecord:jde,buildNodePayloads:Qde,checkClusteringEnabled:Jde,getAllNodeRecords:Xde,getSystemInfo:Zde,reverseSubscription:D1};function Wde(e){return e==null}o(Wde,"isEmpty");async function zde(e){let t=new Mde(Gl.SYSTEM_SCHEMA_NAME,Gl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Kde(t)}o(zde,"getNodeRecord");async function jde(e){let t=new vde(Gl.SYSTEM_SCHEMA_NAME,Gl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Pde.upsert(t)}o(jde,"upsertNodeRecord");function D1(e){if(iO.isEmpty(e.subscribe)||iO.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}o(D1,"reverseSubscription");function Qde(e,t,r,n){let s=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:l,table:u}=c,d=iO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=D1(c),p=Vde()[l]?.[u],h=new xde(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new Ude(r,t,s,n)}o(Qde,"buildNodePayloads");function Jde(){if(!P1.get(Gl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Bde(new Error,Hde.CLUSTERING_NOT_ENABLED,kde.BAD_REQUEST,void 0,void 0,!0)}o(Jde,"checkClusteringEnabled");async function Xde(){let e=new qde(Gl.SYSTEM_SCHEMA_NAME,Gl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Yde(e))}o(Xde,"getAllNodeRecords");async function Zde(){let e=await Gde.getSystemInformation();return{hdb_version:$de.version,node_version:e.node_version,platform:e.platform}}o(Zde,"getSystemInfo")});var oO=M((o0e,q1)=>{"use strict";var pT=sr(),v1=oe(),U1=wt(),x1=(H(),D(W)),hT=Q(),B1=cT(),efe=rp(),{RemotePayloadObject:tfe}=mh(),{handleHDBError:F1,hdbErrors:rfe}=_e(),{HTTP_STATUS_CODES:k1}=rfe,{NodeSubscription:H1}=zd();q1.exports=nfe;async function nfe(e,t){let r;try{r=await pT.request(`${t}.${U1.REQUEST_SUFFIX}`,new tfe(x1.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),hT.trace("Response from remote describe all request:",r)}catch(a){hT.error(`addNode received error from describe all request to remote node: ${a}`);let c=pT.requestErrorHandler(a,"add_node",t);throw F1(new Error,c,k1.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===U1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw F1(new Error,a,k1.INTERNAL_SERVER_ERROR,"error",a)}let n=r.message,s=[],i=[];for(let a of e){let{table:c}=a,l=a.database??a.schema??"data";if(l===x1.SYSTEM_SCHEMA_NAME){await pT.createLocalTableStream(l,c);let h=new H1(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h);continue}let u=v1.doesSchemaExist(l),d=n[l]!==void 0,f=c?v1.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(hT.trace(`addNode creating schema: ${l}`),await B1.createSchema({operation:"create_schema",schema:l})),!f&&m){hT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new efe(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await B1.createTable(h)}await pT.createLocalTableStream(l,c);let p=new H1(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p)}return{added:i,skipped:s}}o(nfe,"reviewSubscriptions")});var Jd={};Ie(Jd,{addNodeBack:()=>aO,removeNodeBack:()=>cO,setNode:()=>afe});async function afe(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=Si(t)):t=nT(r);let n=(0,$1.validateBySchema)(e,ofe);if(n)throw(0,Zo.handleHDBError)(n,n.message,ife.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new Zo.ClientError("url or hostname is required for remove_node operation");let p=r,h=Yt(),E=await h.get(p);if(!E)throw new Zo.ClientError(p+" does not exist");try{await lh({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?it():p},void 0)}catch(g){ms.warn(`Error removing node from target node ${p}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new Zo.ClientError("url required for this operation");let s=Ja();if(s==null)throw new Zo.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,qs.getReplicationCert)();let p=await(0,qs.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(a=await(0,qs.createCsr)(),ms.info("Sending CSR to target node:",t)):p&&(c=p.certificate,ms.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,ac.get)(B.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,ac.get)(B.REPLICATION_SHARD)!==void 0&&(l.shard=(0,ac.get)(B.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(G1):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=G1(e);l.subscribe=p.subscribe,l.publish=p.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await lh({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,ms.warn("Error adding node:",t,"to cluster:",p),d=p}if(a&&(!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)}`);a&&(ms.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,qs.setCertTable)({name:sfe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,qs.setCertTable)({name:it(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let p={url:s,ca:c,replicates:!0,subscriptions:null};(0,ac.get)(B.REPLICATION_SHARD)!==void 0&&(p.shard=(0,ac.get)(B.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await Yo(it(),p)}await Yo(u?u.nodeName:f.name??Si(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 aO(e){ms.trace("addNodeBack received request:",e);let t=await(0,qs.signCertificate)(e),r;e.csr?(r=t.signingCA,ms.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,ms.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,qs.getReplicationCertAuth)();if(n.replicates){let i={url:Ja(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,ac.get)(B.REPLICATION_SHARD)!==void 0&&(i.shard=(0,ac.get)(B.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Yo(it(),i)}return await Yo(e.hostname,n),t.nodeName=it(),t.usingCA=s?.certificate,ms.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function cO(e){ms.trace("removeNodeBack received request:",e),await Yt().delete(e.name)}function G1(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var qs,$1,oc,ac,ms,Zo,sfe,ife,ofe,Xd=ie(()=>{qs=w(fs()),$1=w(ft()),oc=w(require("joi")),ac=w(ue());H();th();vl();us();ms=w(Q()),Zo=w(_e()),{pki:sfe}=require("node-forge"),{HTTP_STATUS_CODES:ife}=Zo.hdbErrors,ofe=oc.default.object({hostname:oc.default.string(),verify_tls:oc.default.boolean(),replicates:oc.default.boolean(),subscriptions:oc.default.array(),revoked_certificates:oc.default.array(),shard:oc.default.number()});o(afe,"setNode");o(aO,"addNodeBack");o(cO,"removeNodeBack");o(G1,"reverseSubscription")});var TT=M((h0e,K1)=>{"use strict";var{handleHDBError:ET,hdbErrors:cfe}=_e(),{HTTP_STATUS_CODES:_T}=cfe,{addUpdateNodeValidator:lfe}=fT(),gT=Q(),ST=(H(),D(W)),V1=wt(),ufe=oe(),hh=sr(),Eh=Xo(),lO=ue(),dfe=oO(),{Node:ffe,NodeSubscription:mfe}=zd(),{broadcast:pfe}=nt(),{setNode:hfe}=(Xd(),D(Jd)),m0e=ue(),p0e=(H(),D(W)),Efe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",_fe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",gfe=lO.get(ST.CONFIG_PARAMS.CLUSTERING_NODENAME);K1.exports=Sfe;async function Sfe(e,t=!1){if(gT.trace("addNode called with:",e),lO.get(ST.CONFIG_PARAMS.REPLICATION_URL)||lO.get(ST.CONFIG_PARAMS.REPLICATION_HOSTNAME))return hfe(e);Eh.checkClusteringEnabled();let r=lfe(e);if(r)throw ET(r,r.message,_T.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await Eh.getNodeRecord(n);if(!ufe.isEmptyOrZeroLength(f))throw ET(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,_T.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await dfe(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=Efe,a;let c=Eh.buildNodePayloads(s,gfe,ST.OPERATIONS_ENUM.ADD_NODE,await Eh.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 mfe(p.schema,p.table,p.publish,p.subscribe))}gT.trace("addNode sending remote payload:",c);let u;try{u=await hh.request(`${n}.${V1.REQUEST_SUFFIX}`,c)}catch(f){gT.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 hh.updateRemoteConsumer(E,n)}let m=hh.requestErrorHandler(f,"add_node",n);throw ET(new Error,m,_T.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===V1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw ET(new Error,f,_T.INTERNAL_SERVER_ERROR,"error",f)}gT.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await hh.updateRemoteConsumer(p,n),p.subscribe===!0&&await hh.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new ffe(n,l,u.system_info);return await Eh.upsertNodeRecord(d),pfe({type:"nats_update"}),i.length>0?a.message=_fe:a.message=`Successfully added '${n}' to manifest`,a}o(Sfe,"addNode")});var mO=M((g0e,W1)=>{"use strict";var{handleHDBError:uO,hdbErrors:Tfe}=_e(),{HTTP_STATUS_CODES:dO}=Tfe,{addUpdateNodeValidator:yfe}=fT(),_h=Q(),yT=(H(),D(W)),Y1=wt(),_0e=oe(),gh=sr(),Sh=Xo(),fO=ue(),{cloneDeep:Rfe}=require("lodash"),Afe=oO(),{Node:bfe,NodeSubscription:Ife}=zd(),{broadcast:wfe}=nt(),{setNode:Nfe}=(Xd(),D(Jd)),Cfe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Ofe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Pfe=fO.get(yT.CONFIG_PARAMS.CLUSTERING_NODENAME);W1.exports=Lfe;async function Lfe(e){if(_h.trace("updateNode called with:",e),fO.get(yT.CONFIG_PARAMS.REPLICATION_URL)??fO.get(yT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Nfe(e);Sh.checkClusteringEnabled();let t=yfe(e);if(t)throw uO(t,t.message,dO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Sh.getNodeRecord(r);s.length>0&&(n=Rfe(s));let{added:i,skipped:a}=await Afe(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=Cfe,c;let l=Sh.buildNodePayloads(i,Pfe,yT.OPERATIONS_ENUM.UPDATE_NODE,await Sh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];_h.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}_h.trace("updateNode sending remote payload:",l);let u;try{u=await gh.request(`${r}.${Y1.REQUEST_SUFFIX}`,l)}catch(d){_h.error(`updateNode received error from request: ${d}`);let f=gh.requestErrorHandler(d,"update_node",r);throw uO(new Error,f,dO.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===Y1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw uO(new Error,d,dO.INTERNAL_SERVER_ERROR,"error",d)}_h.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await gh.updateRemoteConsumer(m,r),m.subscribe===!0?await gh.updateConsumerIterator(m.schema,m.table,r,"start"):await gh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new bfe(r,[],u.system_info)]),await Dfe(n[0],i,u.system_info),a.length>0?c.message=Ofe:c.message=`Successfully updated '${r}'`,c}o(Lfe,"updateNode");async function Dfe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let a=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===a.schema&&d.table===a.table){d.publish=a.publish,d.subscribe=a.subscribe,c=!0;break}}c||n.subscriptions.push(new Ife(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await Sh.upsertNodeRecord(n),wfe({type:"nats_update"})}o(Dfe,"updateNodeTable")});var X1=M((T0e,J1)=>{"use strict";var Q1=require("joi"),{string:z1}=Q1.types(),Mfe=ft(),j1=(H(),D(W)),vfe=ue(),Ufe=wt();J1.exports=xfe;function xfe(e){let t=z1.invalid(vfe.get(j1.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Ufe.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=Q1.object({operation:z1.valid(j1.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Mfe.validateBySchema(e,r)}o(xfe,"removeNodeValidator")});var RT=M((R0e,nK)=>{"use strict";var{handleHDBError:Z1,hdbErrors:Bfe}=_e(),{HTTP_STATUS_CODES:eK}=Bfe,Ffe=X1(),Th=Q(),tK=Xo(),kfe=oe(),Zd=(H(),D(W)),rK=wt(),pO=sr(),hO=ue(),{RemotePayloadObject:Hfe}=mh(),{NodeSubscription:qfe}=zd(),Gfe=tp(),$fe=gl(),{broadcast:Vfe}=nt(),{setNode:Kfe}=(Xd(),D(Jd)),Yfe=hO.get(Zd.CONFIG_PARAMS.CLUSTERING_NODENAME);nK.exports=Wfe;async function Wfe(e){if(Th.trace("removeNode called with:",e),hO.get(Zd.CONFIG_PARAMS.REPLICATION_URL)??hO.get(Zd.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Kfe(e);tK.checkClusteringEnabled();let t=Ffe(e);if(t)throw Z1(t,t.message,eK.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await tK.getNodeRecord(r);if(kfe.isEmptyOrZeroLength(n))throw Z1(new Error,`Node '${r}' was not found.`,eK.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Hfe(Zd.OPERATIONS_ENUM.REMOVE_NODE,Yfe,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await pO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await pO.updateRemoteConsumer(new qfe(d.schema,d.table,!1,!1),r)}catch(f){Th.error(f)}}try{i=await pO.request(`${r}.${rK.REQUEST_SUFFIX}`,s),Th.trace("Remove node reply from remote node:",r,i)}catch(l){Th.error("removeNode received error from request:",l),a=!0}let c=new Gfe(Zd.SYSTEM_SCHEMA_NAME,Zd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await $fe.deleteRecord(c),Vfe({type:"nats_update"}),i?.status===rK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(Th.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`}o(Wfe,"removeNode")});var oK=M((b0e,iK)=>{"use strict";var sK=require("joi"),{string:zfe,array:jfe}=sK.types(),Qfe=ft(),Jfe=fT();iK.exports=Xfe;function Xfe(e){let t=sK.object({operation:zfe.valid("configure_cluster").required(),connections:jfe.items(Jfe.validationSchema).required()});return Qfe.validateBySchema(e,t)}o(Xfe,"configureClusterValidator")});var EO=M((w0e,dK)=>{"use strict";var aK=(H(),D(W)),AT=Q(),Zfe=oe(),eme=ue(),tme=RT(),rme=TT(),nme=Xo(),sme=oK(),{handleHDBError:cK,hdbErrors:ime}=_e(),{HTTP_STATUS_CODES:lK}=ime,ome="Configure cluster complete.",ame="Failed to configure the cluster. Check the logs for more details.",cme="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";dK.exports=lme;async function lme(e){AT.trace("configure cluster called with:",e);let t=sme(e);if(t)throw cK(t,t.message,lK.BAD_REQUEST,void 0,void 0,!0);let r=await nme.getAllNodeRecords(),n=[];if(eme.get(aK.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await uK(tme,{operation:aK.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}AT.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 uK(rme,f,f.node_name);s.push(m)}AT.trace("All results from configure_cluster add node:",s);let a=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(AT.error(m.node_name,m?.error?.message,m?.error?.stack),a.includes(m.node_name)||a.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(Zfe.isEmptyOrZeroLength(a))return{message:ome,connections:c};if(l)return{message:cme,failed_nodes:a,connections:c};throw cK(new Error,ame,lK.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(lme,"configureCluster");async function uK(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(uK,"functionWrapper")});var hK=M((C0e,pK)=>{"use strict";var yh=require("joi"),ume=ft(),{validateSchemaExists:fK,validateTableExists:dme,validateSchemaName:mK}=qi(),fme=yh.object({operation:yh.string().valid("purge_stream"),schema:yh.string().custom(fK).custom(mK).optional(),database:yh.string().custom(fK).custom(mK).optional(),table:yh.string().custom(dme).required()});function mme(e){return ume.validateBySchema(e,fme)}o(mme,"purgeStreamValidator");pK.exports=mme});var _O=M((P0e,EK)=>{"use strict";var{handleHDBError:pme,hdbErrors:hme}=_e(),{HTTP_STATUS_CODES:Eme}=hme,_me=hK(),gme=sr(),Sme=Xo();EK.exports=Tme;async function Tme(e){e.schema=e.schema??e.database;let t=_me(e);if(t)throw pme(t,t.message,Eme.BAD_REQUEST,void 0,void 0,!0);Sme.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await gme.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(Tme,"purgeStream")});var TO=M((D0e,AK)=>{"use strict";var SO=Xo(),yme=sr(),IT=ue(),ef=(H(),D(W)),$l=wt(),Rme=oe(),gO=Q(),{RemotePayloadObject:Ame}=mh(),{ErrorCode:_K}=require("nats"),{parentPort:gK}=require("worker_threads"),{onMessageByType:bme}=nt(),{getThisNodeName:Ime}=(us(),D(zo)),{requestClusterStatus:wme}=(th(),D(L$)),{getReplicationSharedStatus:Nme,getHDBNodeTable:Cme}=(vl(),D(sC)),{CONFIRMATION_STATUS_POSITION:Ome,RECEIVED_VERSION_POSITION:Pme,RECEIVED_TIME_POSITION:Lme,SENDING_TIME_POSITION:Dme,RECEIVING_STATUS_POSITION:Mme,RECEIVING_STATUS_RECEIVING:vme}=(OC(),D(RV)),SK=IT.get(ef.CONFIG_PARAMS.CLUSTERING_ENABLED),TK=IT.get(ef.CONFIG_PARAMS.CLUSTERING_NODENAME);AK.exports={clusterStatus:Ume,buildNodeStatus:RK};var yK;bme("cluster-status",async e=>{yK(e)});async function Ume(){if(IT.get(ef.CONFIG_PARAMS.REPLICATION_URL)||IT.get(ef.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(gK){gK.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{yK=i});for(let i of n.connections){let a=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=Nme(u,l,a);c.lastCommitConfirmed=bT(d[Ome]),c.lastReceivedRemoteTime=bT(d[Pme]),c.lastReceivedLocalTime=bT(d[Lme]),c.sendingMessage=bT(d[Dme]),c.lastReceivedStatus=d[Mme]===vme?"Receiving":"Waiting"}}}else n=wme();n.node_name=Ime();let s=Cme().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:TK,is_enabled:SK,connections:[]};if(!SK)return e;let t=await SO.getAllNodeRecords();if(Rme.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(RK(t[n],e.connections));return await Promise.allSettled(r),e}o(Ume,"clusterStatus");function bT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(bT,"asDate");async function RK(e,t){let r=e.name,n=new Ame(ef.OPERATIONS_ENUM.CLUSTER_STATUS,TK,void 0,await SO.getSystemInfo()),s,i,a=$l.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await yme.request($l.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===$l.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=$l.CLUSTER_STATUS_STATUSES.CLOSED,gO.error(`Error getting node status from ${r} `,s))}catch(l){gO.warn(`Error getting node status from ${r}`,l),l.code===_K.NoResponders?a=$l.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===_K.Timeout?a=$l.CLUSTER_STATUS_STATUSES.TIMEOUT:a=$l.CLUSTER_STATUS_STATUSES.CLOSED}let c=new xme(r,a,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!==ef.PRE_4_0_0_VERSION&&await SO.upsertNodeRecord(l)}catch(l){gO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(RK,"buildNodeStatus");function xme(e,t,r,n,s,i,a,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=a,this.system_info=c}o(xme,"NodeStatusObject")});var RO=M((v0e,bK)=>{"use strict";var{handleHDBError:Bme,hdbErrors:Fme}=_e(),{HTTP_STATUS_CODES:kme}=Fme,Hme=sr(),qme=Xo(),yO=oe(),wT=require("joi"),Gme=ft(),$me=2e3,Vme=wT.object({timeout:wT.number().min(1),connected_nodes:wT.boolean(),routes:wT.boolean()});bK.exports=Kme;async function Kme(e){qme.checkClusteringEnabled();let t=Gme.validateBySchema(e,Vme);if(t)throw Bme(t,t.message,kme.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||yO.autoCastBoolean(n),a=s===void 0||yO.autoCastBoolean(s),c={nodes:[]},l=await Hme.getServerList(r??$me),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))})),a&&(h.routes=p.cluster?.urls?p.cluster?.urls.map(E=>({host:E.split(":")[0],port:yO.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}o(Kme,"clusterNetwork")});var CK=M((x0e,NK)=>{"use strict";var AO=require("joi"),IK=ft(),{routeConstraints:wK}=IA();NK.exports={setRoutesValidator:Yme,deleteRoutesValidator:Wme};function Yme(e){let t=AO.object({server:AO.valid("hub","leaf"),routes:wK.required()});return IK.validateBySchema(e,t)}o(Yme,"setRoutesValidator");function Wme(e){let t=AO.object({routes:wK.required()});return IK.validateBySchema(e,t)}o(Wme,"deleteRoutesValidator")});var NT=M((F0e,UK)=>{"use strict";var ea=yt(),bO=oe(),Gs=(H(),D(W)),tf=ue(),OK=CK(),{handleHDBError:PK,hdbErrors:zme}=_e(),{HTTP_STATUS_CODES:LK}=zme,DK="cluster routes successfully set",MK="cluster routes successfully deleted";UK.exports={setRoutes:Qme,getRoutes:Jme,deleteRoutes:Xme};function jme(e){let t=ea.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 a=0,c=e.routes.length;a<c;a++){let l=e.routes[a];l.port=bO.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"?ea.updateConfigValue(Gs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):ea.updateConfigValue(Gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:DK,set:i,skipped:s}}o(jme,"setRoutesNats");function Qme(e){let t=OK.setRoutesValidator(e);if(t)throw PK(t,t.message,LK.BAD_REQUEST,void 0,void 0,!0);if(tf.get(Gs.CONFIG_PARAMS.CLUSTERING_ENABLED))return jme(e);let r=[],n=[],s=tf.get(Gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{vK(s,i)?n.push(i):(s.push(i),r.push(i))}),ea.updateConfigValue(Gs.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:DK,set:r,skipped:n}}o(Qme,"setRoutes");function vK(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}o(vK,"existsInArray");function Jme(){if(tf.get(Gs.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=ea.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return tf.get(Gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(Jme,"getRoutes");function Xme(e){let t=OK.deleteRoutesValidator(e);if(t)throw PK(t,t.message,LK.BAD_REQUEST,void 0,void 0,!0);if(tf.get(Gs.CONFIG_PARAMS.CLUSTERING_ENABLED))return Zme(e);let r=[],n=[],s=tf.get(Gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{vK(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),ea.updateConfigValue(Gs.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:MK,deleted:r,skipped:n}}o(Xme,"deleteRoutes");function Zme(e){let t=ea.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],a=!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,a=!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 a&&(r=bO.isEmptyOrZeroLength(r)?null:r,ea.updateConfigValue(Gs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=bO.isEmptyOrZeroLength(n)?null:n,ea.updateConfigValue(Gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:MK,deleted:s,skipped:i}}o(Zme,"deleteRoutesNats")});var BK=M((H0e,xK)=>{"use strict";var Rh=require("alasql"),Vl=require("recursive-iterator"),Ri=Q(),epe=oe(),Ah=(H(),D(W)),IO=class{static{o(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,rpe(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=>Ah.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=>!Ah.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,a=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[a]&&t[i].tables[a][Ah.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=tpe(t[i].tables[a].attribute_permissions):c=global.hdb_schema[i][a].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(a).filter(u=>!Ah.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new Rh.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(a,l)}}),this.ast}};function tpe(e){return e.filter(t=>t[Ah.PERMS_CRUD_ENUM.READ])}o(tpe,"filterReadRestrictedAttrs");function rpe(e,t,r,n,s){npe(e,t,r,n,s)}o(rpe,"interpretAST");function bh(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,a=e.tableid;e.as&&(a=e.as),s.set(a,i)}}o(bh,"addSchemaTableToMap");function npe(e,t,r,n,s){if(!e){Ri.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Rh.yy.Insert?ape(e,t,r):e instanceof Rh.yy.Select?spe(e,t,r,n,s):e instanceof Rh.yy.Update?ipe(e,t,r):e instanceof Rh.yy.Delete?ope(e,t,r):Ri.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(npe,"getRecordAttributesAST");function spe(e,t,r,n,s){if(!e){Ri.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(epe.isEmptyOrZeroLength(i)){Ri.error("No schema specified");return}e.from.forEach(c=>{bh(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),bh(c.table,t,r,n,s)});let a=new Vl(e.columns);for(let{node:c}of a)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{Ri.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 Vl(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{Ri.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 Vl(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{Ri.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 Vl(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{Ri.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)}}}o(spe,"getSelectAttributes");function ipe(e,t,r){if(!e){Ri.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Vl(e.columns),s=e.table.databaseid;bh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&wO(e.table.tableid,s,i.columnid,t,r)}o(ipe,"getUpdateAttributes");function ope(e,t,r){if(!e){Ri.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Vl(e.where),s=e.table.databaseid;bh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&wO(e.table.tableid,s,i.columnid,t,r)}o(ope,"getDeleteAttributes");function ape(e,t,r){if(!e){Ri.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Vl(e.columns),s=e.into.databaseid;bh(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&wO(e.into.tableid,s,i.columnid,t,r)}o(ape,"getInsertAttributes");function wO(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)}o(wO,"pushAttribute");xK.exports=IO});var kK=M((G0e,FK)=>{"use strict";var cpe=wt(),NO=class{static{o(this,"HubConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f,m,p,h){this.port=t,a===null&&(a=void 0),this.server_name=r+cpe.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:a,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};FK.exports=NO});var GK=M((V0e,qK)=>{"use strict";var HK=wt(),CO=class{static{o(this,"LeafConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+HK.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+HK.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:a,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};qK.exports=CO});var VK=M((Y0e,$K)=>{"use strict";var OO=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};$K.exports=OO});var YK=M((z0e,KK)=>{"use strict";var lpe=wt(),PO=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+lpe.SERVER_SUFFIX.ADMIN,this.password=r}};KK.exports=PO});var LT=M((Q0e,jK)=>{"use strict";var Kl=require("path"),Yl=require("fs-extra"),upe=kK(),dpe=GK(),fpe=VK(),mpe=YK(),LO=kn(),nf=oe(),qn=yt(),OT=(H(),D(W)),Ih=wt(),{CONFIG_PARAMS:ir}=OT,sf=Q(),wh=ue(),WK=Wi(),DO=sr(),ppe=fs(),rf="clustering",hpe=1e4,zK=50;jK.exports={generateNatsConfig:_pe,removeNatsConfig:gpe,getHubConfigPath:Epe};function Epe(){let e=wh.get(ir.ROOTPATH);return Kl.join(e,rf,Ih.NATS_CONFIG_FILES.HUB_SERVER)}o(Epe,"getHubConfigPath");async function _pe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=wh.get(ir.ROOTPATH);Yl.ensureDirSync(Kl.join(r,"clustering","leaf")),wh.initSync();let n=qn.getConfigFromFile(ir.CLUSTERING_TLS_CERT_AUTH),s=qn.getConfigFromFile(ir.CLUSTERING_TLS_PRIVATEKEY),i=qn.getConfigFromFile(ir.CLUSTERING_TLS_CERTIFICATE);!await Yl.exists(i)&&!await Yl.exists(!n)&&await ppe.createNatsCerts();let a=Kl.join(r,rf,Ih.PID_FILES.HUB),c=Kl.join(r,rf,Ih.PID_FILES.LEAF),l=qn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=Kl.join(r,rf,Ih.NATS_CONFIG_FILES.HUB_SERVER),d=Kl.join(r,rf,Ih.NATS_CONFIG_FILES.LEAF_SERVER),f=qn.getConfigFromFile(ir.CLUSTERING_TLS_INSECURE),m=qn.getConfigFromFile(ir.CLUSTERING_TLS_VERIFY),p=qn.getConfigFromFile(ir.CLUSTERING_NODENAME),h=qn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await DO.checkNATSServerInstalled()||PT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await LO.listUsers(),g=qn.getConfigFromFile(ir.CLUSTERING_USER),A=await LO.getClusterUser();(nf.isEmpty(A)||A.active!==!0)&&PT(`Invalid cluster user '${cluster_username}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await CT(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await CT(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await CT(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),await CT(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],R=[];for(let[J,Y]of E.entries())Y.role?.role===OT.ROLE_TYPES_ENUM.CLUSTER_USER&&Y.active&&(S.push(new mpe(Y.username,WK.decrypt(Y.hash))),R.push(new fpe(Y.username,WK.decrypt(Y.hash))));let N=[],{hub_routes:O}=qn.getClusteringRoutes();if(!nf.isEmptyOrZeroLength(O))for(let J of O)N.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${J.host}:${J.port}`);let F=new upe(qn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),p,a,i,s,n,f,m,h,qn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NAME),qn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,S,R);n==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=nf.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===OT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Yl.writeJson(u,F),sf.trace(`Hub server config written to ${u}`));let te=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,q=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,k=new dpe(qn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[te],[q],S,R,i,s,n,f);n==null&&delete k.tls.ca_file,(t===void 0||t===OT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Yl.writeJson(d,k),sf.trace(`Leaf server config written to ${d}`))}o(_pe,"generateNatsConfig");async function CT(e){let t=wh.get(e);return nf.isEmpty(t)&&PT(`port undefined for '${e}'`),await nf.isPortTaken(t)&&PT(`'${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}o(CT,"isPortAvailable");function PT(e){let t=`Error generating clustering config: ${e}`;sf.error(t),console.error(t),process.exit(1)}o(PT,"generateNatsConfigError");async function gpe(e){let{port:t,config_file:r}=DO.getServerConfig(e),{username:n,decrypt_hash:s}=await LO.getClusterUser(),i=0,a=2e3;for(;i<zK;){try{let d=await DO.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){sf.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=zK)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=a*(i*2);u>3e4&&sf.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(hpe),l=Kl.join(wh.get(ir.ROOTPATH),rf,r);await Yl.writeFile(l,c),await Yl.remove(l),sf.notify(e,"started.")}o(gpe,"removeNatsConfig")});var tY=M((X0e,eY)=>{"use strict";var ps=ue(),Qe=(H(),D(W)),Nh=wt(),ta=require("path"),{PACKAGE_ROOT:MT}=Tt(),QK=ue(),DT=oe(),of="/dev/null",Spe=ta.join(MT,"launchServiceScripts"),JK=ta.join(MT,"utility/scripts"),Tpe=ta.join(JK,Qe.HDB_RESTART_SCRIPT),XK=ta.resolve(MT,"dependencies",`${process.platform}-${process.arch}`,Nh.NATS_BINARY_NAME);function ZK(){let e={[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return DT.noBootFile()&&(e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=DT.getEnvCliRootPath()),{name:Qe.PROCESS_DESCRIPTORS.HDB,script:Qe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,cwd:MT}}o(ZK,"generateMainServerConfig");var ype=9930;function Rpe(){ps.initSync(!0);let e=ps.get(Qe.CONFIG_PARAMS.ROOTPATH),t=ta.join(e,"clustering",Nh.NATS_CONFIG_FILES.HUB_SERVER),r=ta.join(ps.get(Qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Qe.LOG_NAMES.HDB),n=QK.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Nh.LOG_LEVEL_FLAGS[ps.get(Qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==ype?"-"+n:""),script:XK,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return ps.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=of,i.error_file=of),i}o(Rpe,"generateNatsHubServerConfig");var Ape=9940;function bpe(){ps.initSync(!0);let e=ps.get(Qe.CONFIG_PARAMS.ROOTPATH),t=ta.join(e,"clustering",Nh.NATS_CONFIG_FILES.LEAF_SERVER),r=ta.join(ps.get(Qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Qe.LOG_NAMES.HDB),n=QK.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Nh.LOG_LEVEL_FLAGS[ps.get(Qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Ape?"-"+n:""),script:XK,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return ps.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=of,i.error_file=of),i}o(bpe,"generateNatsLeafServerConfig");function Ipe(){ps.initSync();let e=ta.join(ps.get(Qe.CONFIG_PARAMS.LOGGING_ROOT),Qe.LOG_NAMES.HDB),t={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Qe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Spe,autorestart:!1};return ps.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=of,t.error_file=of),t}o(Ipe,"generateClusteringUpgradeV4ServiceConfig");function wpe(){let e={[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.RESTART_HDB};return DT.noBootFile()&&(e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=DT.getEnvCliRootPath()),{...{name:Qe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:JK},script:Tpe}}o(wpe,"generateRestart");function Npe(){return{apps:[ZK()]}}o(Npe,"generateAllServiceConfigs");eY.exports={generateAllServiceConfigs:Npe,generateMainServerConfig:ZK,generateRestart:wpe,generateNatsHubServerConfig:Rpe,generateNatsLeafServerConfig:bpe,generateClusteringUpgradeV4ServiceConfig:Ipe}});var Oh=M((tBe,hY)=>{"use strict";var dt=(H(),D(W)),Cpe=oe(),na=LT(),vT=sr(),ra=wt(),cc=tY(),UT=ue(),Wl=Q(),Ope=Xo(),{startWorker:rY,onMessageFromWorkers:Ppe}=nt(),Lpe=Qd(),eBe=require("util"),Dpe=require("child_process"),Mpe=require("fs"),{execFile:vpe}=Dpe,tt;hY.exports={enterPM2Mode:Upe,start:lc,stop:MO,reload:sY,restart:iY,list:vO,describe:cY,connect:sa,kill:Hpe,startAllServices:qpe,startService:UO,getUniqueServicesList:lY,restartAllServices:Gpe,isServiceRegistered:uY,reloadStopStart:dY,restartHdb:aY,deleteProcess:Fpe,startClusteringProcesses:mY,startClusteringThreads:pY,isHdbRestartRunning:kpe,isClusteringRunning:Vpe,stopClustering:$pe,reloadClustering:Kpe,expectedRestartOfChildren:oY};var Ch=!1;Ppe(e=>{e.type==="restart"&&UT.initSync(!0)});function Upe(){Ch=!0}o(Upe,"enterPM2Mode");function sa(){return tt||(tt=require("pm2")),new Promise((e,t)=>{tt.connect((r,n)=>{r&&t(r),e(n)})})}o(sa,"connect");var gn,xpe=10,nY;function lc(e,t=!1){if(Ch)return Bpe(e);let r=vpe(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let a=gn.indexOf(r);a>-1&&gn.splice(a,1),!nY&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<xpe&&(Mpe.existsSync(na.getHubConfigPath())?lc(e):(await na.generateNatsConfig(!0),lc(e),await new Promise(c=>setTimeout(c,3e3)),await na.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await na.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let a=UT.get(dt.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,d;for(;l=c.exec(i);){if(l.index&&ra.LOG_LEVEL_HIERARCHY[a]>=ra.LOG_LEVEL_HIERARCHY[d||"info"]){let p=d===ra.LOG_LEVELS.ERR||d===ra.LOG_LEVELS.WRN?Wl.OUTPUTS.STDERR:Wl.OUTPUTS.STDOUT;Wl.logCustomLevel(d||"info",p,n,i.slice(u,l.index).trim())}let[f,m]=l;u=l.index+f.length,d=ra.LOG_LEVELS[m]}if(ra.LOG_LEVEL_HIERARCHY[a]>=ra.LOG_LEVEL_HIERARCHY[d||"info"]){let f=d===ra.LOG_LEVELS.ERR||d===ra.LOG_LEVELS.WRN?Wl.OUTPUTS.STDERR:Wl.OUTPUTS.STDOUT;Wl.logCustomLevel(d||"info",f,n,i.slice(u).trim())}}if(o(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!gn&&(gn=[],!t)){let i=o(()=>{nY=!0,gn&&(gn.map(a=>a.kill()),process.exit(0))},"killChildren");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}gn.push(r)}o(lc,"start");function Bpe(e){return new Promise(async(t,r)=>{try{await sa()}catch(n){r(n)}tt.start(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(Bpe,"startWithPM2");function MO(e){if(!Ch){for(let t of gn||[])t.name===e&&(gn.splice(gn.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await sa()}catch(n){r(n)}tt.stop(e,async(n,s)=>{n&&(tt.disconnect(),r(n)),tt.delete(e,(i,a)=>{i&&(tt.disconnect(),r(n)),tt.disconnect(),t(a)})})})}o(MO,"stop");function sY(e){return new Promise(async(t,r)=>{try{await sa()}catch(n){r(n)}tt.reload(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(sY,"reload");function iY(e){if(!Ch){oY();for(let t of gn||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await sa()}catch(n){r(n)}tt.restart(e,(n,s)=>{tt.disconnect(),t(s)})})}o(iY,"restart");function oY(){for(let e of gn||[])e.config&&(e.config.restarts=0)}o(oY,"expectedRestartOfChildren");function Fpe(e){return new Promise(async(t,r)=>{try{await sa()}catch(n){r(n)}tt.delete(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(Fpe,"deleteProcess");async function aY(){await lc(cc.generateRestart())}o(aY,"restartHdb");async function kpe(){let e=await vO();for(let t in e)if(e[t].name===dt.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(kpe,"isHdbRestartRunning");function vO(){return new Promise(async(e,t)=>{try{await sa()}catch(r){t(r)}tt.list((r,n)=>{r&&(tt.disconnect(),t(r)),tt.disconnect(),e(n)})})}o(vO,"list");function cY(e){return new Promise(async(t,r)=>{try{await sa()}catch(n){r(n)}tt.describe(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(cY,"describe");function Hpe(){if(!Ch){for(let e of gn||[])e.kill();gn=[];return}return new Promise(async(e,t)=>{try{await sa()}catch(r){t(r)}tt.killDaemon((r,n)=>{r&&(tt.disconnect(),t(r)),tt.disconnect(),e(n)})})}o(Hpe,"kill");async function qpe(){try{await mY(),await pY(),await lc(cc.generateAllServiceConfigs())}catch(e){throw tt?.disconnect(),e}}o(qpe,"startAllServices");async function UO(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case dt.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=cc.generateMainServerConfig();break;case dt.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=cc.generateNatsIngestServiceConfig();break;case dt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=cc.generateNatsReplyServiceConfig();break;case dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=cc.generateNatsHubServerConfig(),await lc(r,t),await na.removeNatsConfig(e);return;case dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=cc.generateNatsLeafServerConfig(),await lc(r,t),await na.removeNatsConfig(e);return;case dt.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=cc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await lc(r)}catch(r){throw tt?.disconnect(),r}}o(UO,"startService");async function lY(){try{let e=await vO(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw tt?.disconnect(),e}}o(lY,"getUniqueServicesList");async function Gpe(e=[]){try{let t=!1,r=await lY();for(let n=0,s=Object.values(r).length;n<s;n++){let a=Object.values(r)[n].name;e.includes(a)||(a===dt.PROCESS_DESCRIPTORS.HDB?t=!0:await iY(a))}t&&await dY(dt.PROCESS_DESCRIPTORS.HDB)}catch(t){throw tt?.disconnect(),t}}o(Gpe,"restartAllServices");async function uY(e){if(gn?.find(r=>r.name===e))return!0;let t=await Lpe.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}o(uY,"isServiceRegistered");async function dY(e){let t=UT.get(dt.CONFIG_PARAMS.THREADS_COUNT)??UT.get(dt.CONFIG_PARAMS.THREADS),r=await cY(e),n=Cpe.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await MO(e),await UO(e)):e===dt.PROCESS_DESCRIPTORS.HDB?await aY():await sY(e)}o(dY,"reloadStopStart");var fY;async function mY(e=!1){for(let t in dt.CLUSTERING_PROCESSES){let r=dt.CLUSTERING_PROCESSES[t];await UO(r,e)}}o(mY,"startClusteringProcesses");async function pY(){fY=rY(dt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:dt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await vT.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await vT.updateLocalStreams();let e=await Ope.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===dt.PRE_4_0_0_VERSION){Wl.info("Starting clustering upgrade 4.0.0 process"),rY(dt.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(pY,"startClusteringThreads");async function $pe(){for(let e in dt.CLUSTERING_PROCESSES)if(e!==dt.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===dt.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await fY.terminate();else{let t=dt.CLUSTERING_PROCESSES[e];await MO(t)}}o($pe,"stopClustering");async function Vpe(){for(let e in dt.CLUSTERING_PROCESSES){let t=dt.CLUSTERING_PROCESSES[e];if(await uY(t)===!1)return!1}return!0}o(Vpe,"isClusteringRunning");async function Kpe(){await na.generateNatsConfig(!0),await vT.reloadNATSHub(),await vT.reloadNATSLeaf(),await na.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await na.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(Kpe,"reloadClustering")});var FO={};Ie(FO,{compactOnStart:()=>Ype,copyDb:()=>yY});async function Ype(){uc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,xO.get)(B.ROOTPATH),t=new Map,r=at();(0,BO.updateConfigValue)(B.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,xT.join)(e,"backup",n+".mdb"),a=(0,xT.join)(e,kc,n+"-copy.mdb"),c=0;try{c=await EY(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){uc.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:a,backupDest:i,recordCount:c}),await yY(n,a),console.log("Backing up",n,"to",i);try{await(0,zl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{Ed()}catch(n){uc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{dbPath:s,copyDest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,zl.move)(i,s,{overwrite:!0}),await(0,zl.remove)((0,xT.join)(e,kc,`${n}-copy.mdb-lock`));try{Ed()}catch(n){uc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){uc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,BO.updateConfigValue)(B.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:a}]of t){console.error("Moving backup database",a,"back to",i);try{await(0,zl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw Ed(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=!0,c=await EY(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){a=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
20
20
|
Total record count before compaction: ${i}, total after: ${c}.
|
|
21
|
-
Database backup has not been removed and can be found here: ${s}`;uc.error(l),console.error(l)}(0,xO.get)(B.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||a===!1||(console.log("Removing backup",s),await(0,zl.remove)(s))}}async function
|
|
22
|
-
${r.stack}`;throw VO.error(n),wY(new Error)}}}o(ihe,"getRolePermissions");function ohe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Gn.SYSTEM_SCHEMA_NAME]=n[Gn.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]=ahe(t[i]);return}r[i]=PY(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(a=>{if(n[i].tables[a]){let c=n[i].tables[a],l=t[i][a],u=che(c,l);r[i].describe||DY.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[a]=u}else r[i].tables[a]=KO()})):Object.keys(t[i]).forEach(a=>{r[i].tables[a]=KO()})}),r}o(ohe,"translateRolePermissions");function ahe(e){let t=PY(!0);return Object.keys(e).forEach(r=>{t.tables[r]=KO(!0,!0,!0,!0,!0)}),t}o(ahe,"createStructureUserPermissions");function che(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 Gn.TIME_STAMP_NAMES.includes(f)&&(m=CY(f,d[Mh])),u[f]=m,u},{}),a=t.primaryKey||t.hash_attribute,c=!!i[a],l=NY(a);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=vY(d),s.attribute_permissions.push(d),c||lhe(d,l)}else if(u!==a){let d;Gn.TIME_STAMP_NAMES.includes(u)?d=CY(u):d=NY(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=OY(s),s}else return e.describe=OY(e),e}o(che,"getTableAttrPerms");function OY(e){return DY.filter(t=>e[t]).length>0}o(OY,"getSchemaTableDescribePerm");function vY(e){return MY.filter(t=>e[t]).length>0}o(vY,"getAttributeDescribePerm");function lhe(e,t){MY.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}o(lhe,"checkForHashPerms")});var vh={};Ie(vh,{authentication:()=>KY,bypassAuth:()=>yhe,login:()=>jO,logout:()=>QO,start:()=>Rhe});function yhe(){VY=!0}async function KY(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,a=[];try{if(i){let p=e.isOperationsServer?_he?Ehe:[]:hhe?phe:[];if(p.includes(i)||p.includes("*")){if(e.method==="OPTIONS"){let h=Sn.get(B.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",E=new Us([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",h],["Access-Control-Allow-Origin",i]]);return GT&&E.set("Access-Control-Allow-Credentials","true"),{status:200,headers:E}}a.push("Access-Control-Allow-Origin",i),GT&&a.push("Access-Control-Allow-Credentials","true")}}let l,u;if(GT){i||(i=r.host);let p=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let E of h)if(E.startsWith(p)){let g=E.indexOf(";");l=E.slice(p.length,g===-1?E.length:g),u=await BY.get(l);break}e.session=u||(u={})}let d=o((p,h,E)=>{let g=new dhe(p,h,ba.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=E,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),h===si.SUCCESS?qT.info?.(g):qT.error?.(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&qT.error?.("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let p=await Gd(e.peerCertificate,e.mtlsConfig);if(!p.valid)return qT.error?.("Certificate verification failed:",p.status,"for",e.peerCertificate.subject.CN),c({status:401,body:Co({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,si.SUCCESS,"mTLS")):mhe("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=Ql.get(n),!f){let p=n.indexOf(" "),h=n.slice(0,p),E=n.slice(p+1),g,A;try{switch(h){case"Basic":let S=atob(E),R=S.indexOf(":");g=S.slice(0,R),A=S.slice(R+1),f=g||A?await Ue.getUser(g,A,e):null;break;case"Bearer":try{f=await MN(E)}catch(N){if(N.message==="invalid token")try{return await SS(E),c({status:-1})}catch{throw N}}break}}catch(S){return She&&(Ql.get(E)||(Ql.set(E,E),d(g,si.FAILURE,h))),c({status:401,body:Co({error:S.message},e)})}Ql.set(n,f),ghe&&d(f.username,si.SUCCESS,h)}e.user=f}else u?.user?e.user=await Ue.getUser(u.user,null,e):(VY&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,kY.getSuperUser)());GT&&(e.session.update=function(p){let h=Sn.get(B.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,HY.v4)();let g=Sn.get(B.AUTHENTICATION_COOKIE_DOMAINS),A=h?new Date(Date.now()+(0,zO.convertToMS)(h)).toUTCString():The,S=r.host&&g?.find(O=>{O.startsWith(".")&&(O=O.slice(1));let F=r.host.indexOf(":");return(F!==-1?r.host.slice(0,F):r.host).endsWith(O)}),N=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${A}; HttpOnly`;S&&(N+=`; Domain=${S}`),E&&(N+="; SameSite=None; Secure"),a?a.push("Set-Cookie",N):m?.headers?.set&&m.headers.set("Set-Cookie",N)}return E&&(a?(i&&a.push("Access-Control-Expose-Headers","X-Hdb-Session"),a.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,BY.put(p,{expiresAt:h?Date.now()+(0,zO.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")&&Ds.loginPath?(m.status=302,m.headers.set("Location",Ds.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=a.length;if(u>0){let d=l.headers;d||(l.headers=d=new Us);for(let f=0;f<u;){let m=a[f++];d.set(m,a[f++])}}return a=null,l}o(c,"applyResponseHeaders")}function Rhe({server:e,port:t,securePort:r}){e.http(KY,t||r?{port:t,securePort:r}:{port:"all"}),FY||(FY=!0,setInterval(()=>{Ql=new Map},Sn.get(B.AUTHENTICATION_CACHETTL)).unref(),fhe.addListener(()=>{Ql=new Map}))}async function jO(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 QO(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var kY,HY,Sn,qY,GY,zO,uhe,dhe,fhe,$Y,mhe,qT,phe,hhe,Ehe,_he,BY,GT,VY,ghe,She,The,Ql,FY,$T=ie(()=>{kY=w(kn());xr();xa();wd();Oe();HY=require("uuid"),Sn=w(ue());H();qY=w(Q()),GY=w(yp());bp();zO=w(oe());ZS();Po();({forComponent:uhe,AuthAuditLog:dhe}=qY.default),{user:fhe}=GY.default,$Y=uhe("authentication"),{debug:mhe}=$Y,qT=$Y.withTag("auth-event");Sn.initSync();phe=Sn.get(B.HTTP_CORSACCESSLIST),hhe=Sn.get(B.HTTP_CORS),Ehe=Sn.get(B.OPERATIONSAPI_NETWORK_CORSACCESSLIST),_he=Sn.get(B.OPERATIONSAPI_NETWORK_CORS),BY=Xe({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),GT=Sn.get(B.AUTHENTICATION_ENABLESESSIONS)??!0,VY=process.env.AUTHENTICATION_AUTHORIZELOCAL??Sn.get(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,ghe=Sn.get(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,She=Sn.get(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,The="Tue, 01 Oct 8307 19:33:20 GMT",Ql=new Map;Ue.onInvalidatedUser(()=>{Ql=new Map});o(yhe,"bypassAuth");o(KY,"authentication");o(Rhe,"start");o(jO,"login");o(QO,"logout")});var XY=M((SBe,JY)=>{"use strict";var Ce=require("joi"),YY=require("fs-extra"),WY=require("path"),hs=ft(),zY=ue(),jY=(H(),D(W)),QY=Q(),{hdbErrors:Ahe}=_e(),{HDB_ERROR_MSGS:Tn}=Ahe,ia=/^[a-zA-Z0-9-_]+$/,bhe=/^[a-zA-Z0-9-_]+$/;JY.exports={getDropCustomFunctionValidator:whe,setCustomFunctionValidator:Nhe,addComponentValidator:Lhe,dropCustomFunctionProjectValidator:Dhe,packageComponentValidator:Mhe,deployComponentValidator:vhe,setComponentFileValidator:Che,getComponentFileValidator:Phe,dropComponentFileValidator:Ohe,addSSHKeyValidator:Uhe,updateSSHKeyValidator:xhe,deleteSSHKeyValidator:Bhe,setSSHKnownHostsValidator:Fhe};function VT(e,t,r){try{let n=zY.get(jY.CONFIG_PARAMS.COMPONENTSROOT),s=WY.join(n,t);return YY.existsSync(s)?e?t:r.message(Tn.PROJECT_EXISTS):e?r.message(Tn.NO_PROJECT):t}catch(n){return QY.error(n),r.message(Tn.VALIDATION_ERR)}}o(VT,"checkProjectExists");function Uh(e,t){return e.includes("..")?t.message("Invalid file path"):e}o(Uh,"checkFilePath");function Ihe(e,t,r,n){try{let s=zY.get(jY.CONFIG_PARAMS.COMPONENTSROOT),i=WY.join(s,e,t,r+".js");return YY.existsSync(i)?r:n.message(Tn.NO_FILE)}catch(s){return QY.error(s),n.message(Tn.VALIDATION_ERR)}}o(Ihe,"checkFileExists");function whe(e){let t=Ce.object({project:Ce.string().pattern(ia).custom(VT.bind(null,!0)).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(ia).custom(Ihe.bind(null,e.project,e.type)).custom(Uh).required().messages({"string.pattern.base":Tn.BAD_FILE_NAME})});return hs.validateBySchema(e,t)}o(whe,"getDropCustomFunctionValidator");function Nhe(e){let t=Ce.object({project:Ce.string().pattern(ia).custom(VT.bind(null,!0)).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(Uh).required(),function_content:Ce.string().required()});return hs.validateBySchema(e,t)}o(Nhe,"setCustomFunctionValidator");function Che(e){let t=Ce.object({project:Ce.string().pattern(ia).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),file:Ce.string().custom(Uh).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return hs.validateBySchema(e,t)}o(Che,"setComponentFileValidator");function Ohe(e){let t=Ce.object({project:Ce.string().pattern(ia).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),file:Ce.string().custom(Uh).optional()});return hs.validateBySchema(e,t)}o(Ohe,"dropComponentFileValidator");function Phe(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(Uh).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return hs.validateBySchema(e,t)}o(Phe,"getComponentFileValidator");function Lhe(e){let t=Ce.object({project:Ce.string().pattern(ia).custom(VT.bind(null,!1)).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME})});return hs.validateBySchema(e,t)}o(Lhe,"addComponentValidator");function Dhe(e){let t=Ce.object({project:Ce.string().pattern(ia).custom(VT.bind(null,!0)).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME})});return hs.validateBySchema(e,t)}o(Dhe,"dropCustomFunctionProjectValidator");function Mhe(e){let t=Ce.object({project:Ce.string().pattern(ia).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean(),skip_symlinks:Ce.boolean()});return hs.validateBySchema(e,t)}o(Mhe,"packageComponentValidator");function vhe(e){let t=Ce.object({project:Ce.string().pattern(ia).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),package:Ce.string().optional(),restart:Ce.alternatives().try(Ce.boolean(),Ce.string().valid("rolling")).optional()});return hs.validateBySchema(e,t)}o(vhe,"deployComponentValidator");function Uhe(e){let t=Ce.object({name:Ce.string().pattern(bhe).required().messages({"string.pattern.base":Tn.BAD_SSH_KEY_NAME}),key:Ce.string().required(),host:Ce.string().required(),hostname:Ce.string().required(),known_hosts:Ce.string().optional()});return hs.validateBySchema(e,t)}o(Uhe,"addSSHKeyValidator");function xhe(e){let t=Ce.object({name:Ce.string().required(),key:Ce.string().required()});return hs.validateBySchema(e,t)}o(xhe,"updateSSHKeyValidator");function Bhe(e){let t=Ce.object({name:Ce.string().required()});return hs.validateBySchema(e,t)}o(Bhe,"deleteSSHKeyValidator");function Fhe(e){let t=Ce.object({known_hosts:Ce.string().required()});return hs.validateBySchema(e,t)}o(Fhe,"setSSHKnownHostsValidator")});var Fh=M((yBe,nW)=>{"use strict";var KT=require("joi"),dc=require("path"),lf=require("fs-extra"),{exec:khe,spawn:Hhe}=require("child_process"),qhe=require("util"),Ghe=qhe.promisify(khe),uf=(H(),D(W)),{PACKAGE_ROOT:$he}=bt(),{handleHDBError:xh,hdbErrors:Vhe}=_e(),{HTTP_STATUS_CODES:Bh}=Vhe,Jl=ue(),Khe=ft(),fc=Q(),{once:Yhe}=require("events");Jl.initSync();var JO=Jl.get(uf.CONFIG_PARAMS.COMPONENTSROOT),ZY="npm install --force --omit=dev --json",Whe=`${ZY} --dry-run`,zhe=Jl.get(uf.CONFIG_PARAMS.ROOTPATH),YT=dc.join(zhe,"ssh");nW.exports={installModules:Xhe,auditModules:Zhe,installAllRootModules:jhe,uninstallRootModule:Qhe,linkHarperdb:Jhe,runCommand:df};async function jhe(e=!1,t=Jl.get(uf.CONFIG_PARAMS.ROOTPATH)){await WT();let r=!1,n=process.env;lf.pathExistsSync(YT)&&lf.readdirSync(YT).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+dc.join(YT,"config")+" -o UserKnownHostsFile="+dc.join(YT,"known_hosts"),...process.env},r=!0)});try{let s=Jl.get(uf.CONFIG_PARAMS.ROOTPATH),i=dc.join(s,"node_modules","harperdb");lf.lstatSync(i).isSymbolicLink()&&lf.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&fc.error("Error removing symlink:",s)}await df(e?"npm install --force --ignore-scripts":"npm install --force",t,n)}o(jhe,"installAllRootModules");async function Qhe(e){await df(`npm uninstall ${e}`,Jl.get(uf.CONFIG_PARAMS.ROOTPATH))}o(Qhe,"uninstallRootModule");async function Jhe(){await WT(),await df(`npm link ${$he}`,Jl.get(uf.CONFIG_PARAMS.ROOTPATH))}o(Jhe,"linkHarperdb");async function df(e,t=void 0,r=process.env){fc.debug({tagName:"npm_run_command"},`running command: \`${e}\``);let n=Hhe(e,{shell:!0,cwd:t,env:r,stdio:["ignore","pipe","pipe"]}),s="",i="";n.stdout.on("data",c=>{let l=c.toString();fc.debug({tagName:"npm_run_command:stdout"},l),s+=l}),n.stderr.on("data",c=>{let l=c.toString();fc.error({tagName:"npm_run_command:stderr"},l),i+=l});let[a]=await Yhe(n,"close");if(a!==0)throw new Error(`Command \`${e}\` exited with code ${a}.${i===""?"":` Error: ${i}`}`);return s||void 0}o(df,"runCommand");async function Xhe(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";fc.warn(t,e.projects);let r=rW(e);if(r)throw xh(r,r.message,Bh.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=s===!0?Whe:ZY;await WT(),await tW(n);let a={};for(let c=0,l=n.length;c<l;c++){let u=n[c];a[u]={npm_output:null,npm_error:null};let d=dc.join(JO,u),f,m=null;try{let{stdout:p,stderr:h}=await Ghe(i,{cwd:d});f=p?p.replace(`
|
|
21
|
+
Database backup has not been removed and can be found here: ${s}`;uc.error(l),console.error(l)}(0,xO.get)(B.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||a===!1||(console.log("Removing backup",s),await(0,zl.remove)(s))}}async function EY(e){let t=await(0,TY.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function yY(e,t){console.log("copyDb start");let r=at()[e],n;for(let f in r){n=r[f].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,a=(0,_Y.open)(new gY.default(t)),c=a.openDB(BT.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:m,value:p}of s.getRange({transaction:d})){let h=p.is_hash_attribute||p.isPrimaryKey,E,g;if(h&&(E=p.compression,g=rS(),g?p.compression=g:delete p.compression,E?.dictionary?.toString()===g?.dictionary?.toString()&&(E=null,g=null)),c.put(m,p),!(h||p.indexed))continue;let A=new SY.OpenDBIObject(!h,h);A.encoding="binary",A.compression=E;let S=n.openDB(m,A);S.decoder=null,S.decoderCopies=!1,S.encoding="binary",A.compression=g;let R=a.openDB(m,A);R.encoder=null,console.log("copying",m,"from",e,"to",t),await f(S,R,h,d)}if(i){let m=n.openDB(BT.AUDIT_STORE_NAME,Pm);console.log("copying audit log for",e,"to",t),f(i,m,!1,d)}async function f(m,p,h,E){let g=0,A=0,S=1e7,R=null;for(;S-- >0;)try{for(let N of m.getKeys({start:R,transaction:E}))try{R=N;let{value:O,version:F}=m.getEntry(N,{transaction:E});l=p.put(N,O,h?F:void 0),g++,E.openTimer&&(E.openTimer=0),A+=(N?.length||10)+O.length,u++>5e3&&(await l,console.log("copied",g,"entries",A,"bytes"),u=0)}catch(O){console.error("Error copying record",typeof N=="symbol"?"symbol":N,"from",e,"to",t,O)}console.log("finish copying, copied",g,"entries",A,"bytes");return}catch{if(typeof R=="string"){if(R==="z")return console.error("Reached end of dbi",R,"for",e,"to",t);R=R.slice(0,-2)+"z"}else if(typeof R=="number")R++;else return console.error("Unknown key type",R,"for",e,"to",t)}}o(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),a.close()}}var _Y,xT,zl,xO,gY,SY,BT,TY,BO,uc,kO=ie(()=>{Oe();_Y=require("lmdb"),xT=require("path"),zl=require("fs-extra"),xO=w(ue()),gY=w($m()),SY=w(Gm()),BT=w($t());H();Io();TY=w(Ol()),BO=w(yt()),uc=w(Q());o(Ype,"compactOnStart");o(EY,"getTotalDBRecordCount");o(yY,"copyDb")});var cf=M((uBe,CY)=>{"use strict";var Wpe=require("minimist"),{isMainThread:qO,parentPort:Lh,threadId:aBe}=require("worker_threads"),pt=(H(),D(W)),no=Q(),GO=oe(),kT=LT(),FT=sr(),cBe=wt(),IY=yt(),Ai=Oh(),RY=Qd(),{compactOnStart:zpe}=(kO(),D(FO)),jpe=Hc(),{restartWorkers:HT,onMessageByType:Qpe}=nt(),{handleHDBError:Jpe,hdbErrors:Xpe}=_e(),{HTTP_STATUS_CODES:Zpe}=Xpe,Dh=ue(),{sendOperationToNode:AY,getThisNodeName:ehe,monitorNodeCAs:the}=(us(),D(zo)),{getHDBNodeTable:lBe}=(vl(),D(sC));Dh.initSync();var Ph=`Restarting HarperDB. This may take up to ${pt.RESTART_TIMEOUT_MS/1e3} seconds.`,rhe="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",bY="Clustering is not enabled so cannot be restarted",nhe="Invalid service",af,$s;CY.exports={restart:wY,restartService:$O};qO&&Qpe(pt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await $O({service:e.workerType}):wY({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function wY(e){$s=Object.keys(e).length===0,af=await Ai.isServiceRegistered(pt.PROCESS_DESCRIPTORS.HDB);let t=Wpe(process.argv);if(t.service){await $O(t);return}if($s&&!af){console.error(rhe);return}if($s&&console.log(Ph),af){Ai.enterPM2Mode(),no.notify(Ph);let r=jpe(Object.keys(pt.CONFIG_PARAM_MAP),!0);return GO.isEmptyOrZeroLength(Object.keys(r))||IY.updateConfigValue(void 0,void 0,r,!0,!0),she(),Ph}return qO?(no.notify(Ph),Dh.get(pt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await zpe(),process.env.HARPER_EXIT_ON_RESTART&&process.exit(0),setTimeout(()=>{HT()},50)):Lh.postMessage({type:pt.ITC_EVENT_TYPES.RESTART}),Ph}o(wY,"restart");async function $O(e){let{service:t}=e;if(pt.HDB_PROCESS_SERVICES[t]===void 0)throw Jpe(new Error,nhe,Zpe.BAD_REQUEST,void 0,void 0,!0);if(Ai.expectedRestartOfChildren(),af=await Ai.isServiceRegistered(pt.PROCESS_DESCRIPTORS.HDB),!qO){e.replicated&&the(),Lh.postMessage({type:pt.ITC_EVENT_TYPES.RESTART,workerType:t}),Lh.ref(),await new Promise(s=>{Lh.on("message",i=>{i.type==="restart-complete"&&(s(),Lh.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===ehe())continue;let i;try{({job_id:i}=await AY(s,e))}catch(a){n.push({node:s.name,message:a.message});continue}n.push(await new Promise((a,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 AY(s,{operation:"get_job",id:i})).results[0];if(m.status==="COMPLETE"&&(clearInterval(d),a({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 pt.HDB_PROCESS_SERVICES.clustering:if(!Dh.get(pt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=bY;break}$s&&console.log("Restarting clustering"),no.notify("Restarting clustering"),await NY();break;case pt.HDB_PROCESS_SERVICES.clustering_config:case pt.HDB_PROCESS_SERVICES["clustering config"]:if(!Dh.get(pt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=bY;break}$s&&console.log("Restarting clusteringConfig"),no.notify("Restarting clustering_config"),await Ai.reloadClustering();break;case"custom_functions":case"custom functions":case pt.HDB_PROCESS_SERVICES.harperdb:case pt.HDB_PROCESS_SERVICES.http_workers:case pt.HDB_PROCESS_SERVICES.http:if($s&&!af){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}$s&&console.log("Restarting httpWorkers"),no.notify("Restarting http_workers"),$s?await Ai.restart(pt.PROCESS_DESCRIPTORS.HDB):await HT("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(no.error(r),$s&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}o($O,"restartService");async function she(){await NY(),await Ai.restart(pt.PROCESS_DESCRIPTORS.HDB),await GO.asyncSetTimeout(2e3),Dh.get(pt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await HO(),$s&&(await FT.closeConnection(),process.exit(0))}o(she,"restartPM2Mode");async function NY(){if(!IY.getConfigFromFile(pt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await RY.getHDBProcessInfo()).clustering.length===0)no.trace("Clustering not running, restart will start clustering services"),await kT.generateNatsConfig(!0),await Ai.startClusteringProcesses(),await Ai.startClusteringThreads(),await HO(),$s&&await FT.closeConnection();else{await kT.generateNatsConfig(!0),af?(no.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Ai.restart(pt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ai.restart(pt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await RY.getHDBProcessInfo()).clustering.forEach(s=>{no.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await GO.asyncSetTimeout(3e3),await HO(),await FT.updateLocalStreams(),$s&&await FT.closeConnection(),no.trace("Restart clustering restarting ingest and reply service threads");let t=HT(pt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=HT(pt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}o(NY,"restartClustering");async function HO(){await kT.removeNatsConfig(pt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await kT.removeNatsConfig(pt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}o(HO,"removeNatsConfig")});var kY=M((mBe,FY)=>{"use strict";var fBe=require("lodash"),Gn=(H(),D(W)),{handleHDBError:OY,hdbErrors:ihe}=_e(),{HDB_ERROR_MSGS:ohe,HTTP_STATUS_CODES:ahe}=ihe,VO=Q();FY.exports={getRolePermissions:lhe};var jl=Object.create(null),che=o(e=>({key:e,perms:{}}),"permsTemplateObj"),MY=o((e=!1)=>({describe:e,tables:{}}),"schemaPermsTemplate"),vY=o((e=!1,t=!1,r=!1,n=!1)=>({[Gn.PERMS_CRUD_ENUM.READ]:e,[Gn.PERMS_CRUD_ENUM.INSERT]:t,[Gn.PERMS_CRUD_ENUM.UPDATE]:r,[Gn.PERMS_CRUD_ENUM.DELETE]:n}),"permissionsTemplate"),KO=o((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...vY(t,r,n,s)}),"tablePermsTemplate"),PY=o((e,t=vY())=>({attribute_name:e,describe:BY(t),[Mh]:t[Mh],[YO]:t[YO],[WO]:t[WO]}),"attrPermsTemplate"),LY=o((e,t=!1)=>({attribute_name:e,describe:t,[Mh]:t}),"timestampAttrPermsTemplate"),{READ:Mh,INSERT:YO,UPDATE:WO}=Gn.PERMS_CRUD_ENUM,UY=Object.values(Gn.PERMS_CRUD_ENUM),xY=[Mh,YO,WO];function lhe(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[Gn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(jl[t]&&jl[t].key===n)return jl[t].perms;let s=uhe(e,r);return jl[t]?jl[t].key=n:jl[t]=che(n),jl[t].perms=s,s}catch(r){if(!e[Gn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Gn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Gn.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 VO.error(n),VO.debug(r),OY(new Error,ohe.OUTDATED_PERMS_TRANSLATION_ERROR,ahe.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
|
|
22
|
+
${r.stack}`;throw VO.error(n),OY(new Error)}}}o(lhe,"getRolePermissions");function uhe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Gn.SYSTEM_SCHEMA_NAME]=n[Gn.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]=dhe(t[i]);return}r[i]=MY(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(a=>{if(n[i].tables[a]){let c=n[i].tables[a],l=t[i][a],u=fhe(c,l);r[i].describe||UY.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[a]=u}else r[i].tables[a]=KO()})):Object.keys(t[i]).forEach(a=>{r[i].tables[a]=KO()})}),r}o(uhe,"translateRolePermissions");function dhe(e){let t=MY(!0);return Object.keys(e).forEach(r=>{t.tables[r]=KO(!0,!0,!0,!0,!0)}),t}o(dhe,"createStructureUserPermissions");function fhe(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 Gn.TIME_STAMP_NAMES.includes(f)&&(m=LY(f,d[Mh])),u[f]=m,u},{}),a=t.primaryKey||t.hash_attribute,c=!!i[a],l=PY(a);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=BY(d),s.attribute_permissions.push(d),c||mhe(d,l)}else if(u!==a){let d;Gn.TIME_STAMP_NAMES.includes(u)?d=LY(u):d=PY(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=DY(s),s}else return e.describe=DY(e),e}o(fhe,"getTableAttrPerms");function DY(e){return UY.filter(t=>e[t]).length>0}o(DY,"getSchemaTableDescribePerm");function BY(e){return xY.filter(t=>e[t]).length>0}o(BY,"getAttributeDescribePerm");function mhe(e,t){xY.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}o(mhe,"checkForHashPerms")});var vh={};Ie(vh,{authentication:()=>zY,bypassAuth:()=>Ihe,login:()=>jO,logout:()=>QO,start:()=>whe});function Ihe(){WY=!0}async function zY(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,a=[];try{if(i){let p=e.isOperationsServer?yhe?The:[]:She?ghe:[];if(p.includes(i)||p.includes("*")){if(e.method==="OPTIONS"){let h=Sn.get(B.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",E=new Us([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",h],["Access-Control-Allow-Origin",i]]);return GT&&E.set("Access-Control-Allow-Credentials","true"),{status:200,headers:E}}a.push("Access-Control-Allow-Origin",i),GT&&a.push("Access-Control-Allow-Credentials","true")}}let l,u;if(GT){i||(i=r.host);let p=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let E of h)if(E.startsWith(p)){let g=E.indexOf(";");l=E.slice(p.length,g===-1?E.length:g),u=await HY.get(l);break}e.session=u||(u={})}let d=o((p,h,E)=>{let g=new hhe(p,h,ba.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=E,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),h===si.SUCCESS?qT.info?.(g):qT.error?.(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&qT.error?.("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let p=await Gd(e.peerCertificate,e.mtlsConfig);if(!p.valid)return qT.error?.("Certificate verification failed:",p.status,"for",e.peerCertificate.subject.CN),c({status:401,body:Co({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,si.SUCCESS,"mTLS")):_he("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=Ql.get(n),!f){let p=n.indexOf(" "),h=n.slice(0,p),E=n.slice(p+1),g,A;try{switch(h){case"Basic":let S=atob(E),R=S.indexOf(":");g=S.slice(0,R),A=S.slice(R+1),f=g||A?await Ue.getUser(g,A,e):null;break;case"Bearer":try{f=await MN(E)}catch(N){if(N.message==="invalid token")try{return await SS(E),c({status:-1})}catch{throw N}}break}}catch(S){return Ahe&&(Ql.get(E)||(Ql.set(E,E),d(g,si.FAILURE,h))),c({status:401,body:Co({error:S.message},e)})}Ql.set(n,f),Rhe&&d(f.username,si.SUCCESS,h)}e.user=f}else u?.user?e.user=await Ue.getUser(u.user,null,e):(WY&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,GY.getSuperUser)());GT&&(e.session.update=function(p){let h=Sn.get(B.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,$Y.v4)();let g=Sn.get(B.AUTHENTICATION_COOKIE_DOMAINS),A=h?new Date(Date.now()+(0,zO.convertToMS)(h)).toUTCString():bhe,S=r.host&&g?.find(O=>{O.startsWith(".")&&(O=O.slice(1));let F=r.host.indexOf(":");return(F!==-1?r.host.slice(0,F):r.host).endsWith(O)}),N=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${A}; HttpOnly`;S&&(N+=`; Domain=${S}`),E&&(N+="; SameSite=None; Secure"),a?a.push("Set-Cookie",N):m?.headers?.set&&m.headers.set("Set-Cookie",N)}return E&&(a?(i&&a.push("Access-Control-Expose-Headers","X-Hdb-Session"),a.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,HY.put(p,{expiresAt:h?Date.now()+(0,zO.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")&&Ds.loginPath?(m.status=302,m.headers.set("Location",Ds.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=a.length;if(u>0){let d=l.headers;d||(l.headers=d=new Us);for(let f=0;f<u;){let m=a[f++];d.set(m,a[f++])}}return a=null,l}o(c,"applyResponseHeaders")}function whe({server:e,port:t,securePort:r}){e.http(zY,t||r?{port:t,securePort:r}:{port:"all"}),qY||(qY=!0,setInterval(()=>{Ql=new Map},Sn.get(B.AUTHENTICATION_CACHETTL)).unref(),Ehe.addListener(()=>{Ql=new Map}))}async function jO(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 QO(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var GY,$Y,Sn,VY,KY,zO,phe,hhe,Ehe,YY,_he,qT,ghe,She,The,yhe,HY,GT,WY,Rhe,Ahe,bhe,Ql,qY,$T=ie(()=>{GY=w(kn());xr();xa();wd();Oe();$Y=require("uuid"),Sn=w(ue());H();VY=w(Q()),KY=w(yp());bp();zO=w(oe());ZS();Po();({forComponent:phe,AuthAuditLog:hhe}=VY.default),{user:Ehe}=KY.default,YY=phe("authentication"),{debug:_he}=YY,qT=YY.withTag("auth-event");Sn.initSync();ghe=Sn.get(B.HTTP_CORSACCESSLIST),She=Sn.get(B.HTTP_CORS),The=Sn.get(B.OPERATIONSAPI_NETWORK_CORSACCESSLIST),yhe=Sn.get(B.OPERATIONSAPI_NETWORK_CORS),HY=Xe({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),GT=Sn.get(B.AUTHENTICATION_ENABLESESSIONS)??!0,WY=process.env.AUTHENTICATION_AUTHORIZELOCAL??Sn.get(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Rhe=Sn.get(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Ahe=Sn.get(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,bhe="Tue, 01 Oct 8307 19:33:20 GMT",Ql=new Map;Ue.onInvalidatedUser(()=>{Ql=new Map});o(Ihe,"bypassAuth");o(zY,"authentication");o(whe,"start");o(jO,"login");o(QO,"logout")});var tW=M((bBe,eW)=>{"use strict";var Ce=require("joi"),jY=require("fs-extra"),QY=require("path"),hs=ft(),JY=ue(),XY=(H(),D(W)),ZY=Q(),{hdbErrors:Nhe}=_e(),{HDB_ERROR_MSGS:Tn}=Nhe,ia=/^[a-zA-Z0-9-_]+$/,Che=/^[a-zA-Z0-9-_]+$/;eW.exports={getDropCustomFunctionValidator:Phe,setCustomFunctionValidator:Lhe,addComponentValidator:Uhe,dropCustomFunctionProjectValidator:xhe,packageComponentValidator:Bhe,deployComponentValidator:Fhe,setComponentFileValidator:Dhe,getComponentFileValidator:vhe,dropComponentFileValidator:Mhe,addSSHKeyValidator:khe,updateSSHKeyValidator:Hhe,deleteSSHKeyValidator:qhe,setSSHKnownHostsValidator:Ghe};function VT(e,t,r){try{let n=JY.get(XY.CONFIG_PARAMS.COMPONENTSROOT),s=QY.join(n,t);return jY.existsSync(s)?e?t:r.message(Tn.PROJECT_EXISTS):e?r.message(Tn.NO_PROJECT):t}catch(n){return ZY.error(n),r.message(Tn.VALIDATION_ERR)}}o(VT,"checkProjectExists");function Uh(e,t){return e.includes("..")?t.message("Invalid file path"):e}o(Uh,"checkFilePath");function Ohe(e,t,r,n){try{let s=JY.get(XY.CONFIG_PARAMS.COMPONENTSROOT),i=QY.join(s,e,t,r+".js");return jY.existsSync(i)?r:n.message(Tn.NO_FILE)}catch(s){return ZY.error(s),n.message(Tn.VALIDATION_ERR)}}o(Ohe,"checkFileExists");function Phe(e){let t=Ce.object({project:Ce.string().pattern(ia).custom(VT.bind(null,!0)).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(ia).custom(Ohe.bind(null,e.project,e.type)).custom(Uh).required().messages({"string.pattern.base":Tn.BAD_FILE_NAME})});return hs.validateBySchema(e,t)}o(Phe,"getDropCustomFunctionValidator");function Lhe(e){let t=Ce.object({project:Ce.string().pattern(ia).custom(VT.bind(null,!0)).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(Uh).required(),function_content:Ce.string().required()});return hs.validateBySchema(e,t)}o(Lhe,"setCustomFunctionValidator");function Dhe(e){let t=Ce.object({project:Ce.string().pattern(ia).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),file:Ce.string().custom(Uh).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return hs.validateBySchema(e,t)}o(Dhe,"setComponentFileValidator");function Mhe(e){let t=Ce.object({project:Ce.string().pattern(ia).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),file:Ce.string().custom(Uh).optional()});return hs.validateBySchema(e,t)}o(Mhe,"dropComponentFileValidator");function vhe(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(Uh).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return hs.validateBySchema(e,t)}o(vhe,"getComponentFileValidator");function Uhe(e){let t=Ce.object({project:Ce.string().pattern(ia).custom(VT.bind(null,!1)).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME})});return hs.validateBySchema(e,t)}o(Uhe,"addComponentValidator");function xhe(e){let t=Ce.object({project:Ce.string().pattern(ia).custom(VT.bind(null,!0)).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME})});return hs.validateBySchema(e,t)}o(xhe,"dropCustomFunctionProjectValidator");function Bhe(e){let t=Ce.object({project:Ce.string().pattern(ia).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean(),skip_symlinks:Ce.boolean()});return hs.validateBySchema(e,t)}o(Bhe,"packageComponentValidator");function Fhe(e){let t=Ce.object({project:Ce.string().pattern(ia).required().messages({"string.pattern.base":Tn.BAD_PROJECT_NAME}),package:Ce.string().optional(),restart:Ce.alternatives().try(Ce.boolean(),Ce.string().valid("rolling")).optional()});return hs.validateBySchema(e,t)}o(Fhe,"deployComponentValidator");function khe(e){let t=Ce.object({name:Ce.string().pattern(Che).required().messages({"string.pattern.base":Tn.BAD_SSH_KEY_NAME}),key:Ce.string().required(),host:Ce.string().required(),hostname:Ce.string().required(),known_hosts:Ce.string().optional()});return hs.validateBySchema(e,t)}o(khe,"addSSHKeyValidator");function Hhe(e){let t=Ce.object({name:Ce.string().required(),key:Ce.string().required()});return hs.validateBySchema(e,t)}o(Hhe,"updateSSHKeyValidator");function qhe(e){let t=Ce.object({name:Ce.string().required()});return hs.validateBySchema(e,t)}o(qhe,"deleteSSHKeyValidator");function Ghe(e){let t=Ce.object({known_hosts:Ce.string().required()});return hs.validateBySchema(e,t)}o(Ghe,"setSSHKnownHostsValidator")});var Fh=M((wBe,oW)=>{"use strict";var KT=require("joi"),dc=require("path"),lf=require("fs-extra"),{exec:$he,spawn:Vhe}=require("child_process"),Khe=require("util"),Yhe=Khe.promisify($he),uf=(H(),D(W)),{PACKAGE_ROOT:Whe}=Tt(),{handleHDBError:xh,hdbErrors:zhe}=_e(),{HTTP_STATUS_CODES:Bh}=zhe,Jl=ue(),jhe=ft(),fc=Q(),{once:Qhe}=require("events");Jl.initSync();var JO=Jl.get(uf.CONFIG_PARAMS.COMPONENTSROOT),rW="npm install --force --omit=dev --json",Jhe=`${rW} --dry-run`,Xhe=Jl.get(uf.CONFIG_PARAMS.ROOTPATH),YT=dc.join(Xhe,"ssh");oW.exports={installModules:rEe,auditModules:nEe,installAllRootModules:Zhe,uninstallRootModule:eEe,linkHarperdb:tEe,runCommand:df};async function Zhe(e=!1,t=Jl.get(uf.CONFIG_PARAMS.ROOTPATH)){await WT();let r=!1,n=process.env;lf.pathExistsSync(YT)&&lf.readdirSync(YT).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+dc.join(YT,"config")+" -o UserKnownHostsFile="+dc.join(YT,"known_hosts"),...process.env},r=!0)});try{let s=Jl.get(uf.CONFIG_PARAMS.ROOTPATH),i=dc.join(s,"node_modules","harperdb");lf.lstatSync(i).isSymbolicLink()&&lf.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&fc.error("Error removing symlink:",s)}await df(e?"npm install --force --ignore-scripts":"npm install --force",t,n)}o(Zhe,"installAllRootModules");async function eEe(e){await df(`npm uninstall ${e}`,Jl.get(uf.CONFIG_PARAMS.ROOTPATH))}o(eEe,"uninstallRootModule");async function tEe(){await WT(),await df(`npm link ${Whe}`,Jl.get(uf.CONFIG_PARAMS.ROOTPATH))}o(tEe,"linkHarperdb");async function df(e,t=void 0,r=process.env){fc.debug({tagName:"npm_run_command"},`running command: \`${e}\``);let n=Vhe(e,{shell:!0,cwd:t,env:r,stdio:["ignore","pipe","pipe"]}),s="",i="";n.stdout.on("data",c=>{let l=c.toString();fc.debug({tagName:"npm_run_command:stdout"},l),s+=l}),n.stderr.on("data",c=>{let l=c.toString();fc.error({tagName:"npm_run_command:stderr"},l),i+=l});let[a]=await Qhe(n,"close");if(a!==0)throw new Error(`Command \`${e}\` exited with code ${a}.${i===""?"":` Error: ${i}`}`);return s||void 0}o(df,"runCommand");async function rEe(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";fc.warn(t,e.projects);let r=iW(e);if(r)throw xh(r,r.message,Bh.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=s===!0?Jhe:rW;await WT(),await sW(n);let a={};for(let c=0,l=n.length;c<l;c++){let u=n[c];a[u]={npm_output:null,npm_error:null};let d=dc.join(JO,u),f,m=null;try{let{stdout:p,stderr:h}=await Yhe(i,{cwd:d});f=p?p.replace(`
|
|
23
23
|
`,""):null,m=h?h.replace(`
|
|
24
|
-
`,""):null}catch(p){p.stderr?a[u].npm_error=
|
|
25
|
-
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}o(eW,"parseNPMStdErr");async function Zhe(e){fc.info(`starting auditModules for request: ${e}`);let t=rW(e);if(t)throw xh(t,t.message,Bh.BAD_REQUEST);let{projects:r}=e;await WT(),await tW(r);let n={};for(let s=0,i=r.length;s<i;s++){let a=r[s],c=dc.join(JO,a);n[a]={npm_output:null,npm_error:null};try{let l=await df("npm audit --json",c);n[a].npm_output=JSON.parse(l)}catch(l){n[a].npm_error=eW(l.stderr)}}return fc.info(`finished auditModules with response ${n}`),n}o(Zhe,"auditModules");async function WT(){return await df("npm -v"),!0}o(WT,"checkNPMInstalled");async function tW(e){if(!Array.isArray(e)||e.length===0)throw xh(new Error,"projects argument must be an array with at least 1 element",Bh.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],a=dc.join(JO,i.toString());if(!await lf.pathExists(a)){t.push(i);continue}let l=dc.join(a,"package.json");await lf.pathExists(l)||r.push(i)}if(t.length>0)throw xh(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Bh.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw xh(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Bh.BAD_REQUEST,void 0,void 0,!0)}o(tW,"checkProjectPaths");function rW(e){let t=KT.object({projects:KT.array().min(1).items(KT.string()).required(),dry_run:KT.boolean().default(!1)});return Khe.validateBySchema(e,t)}o(rW,"modulesValidator")});var ZO=M((ABe,lW)=>{"use strict";var Vs=require("fs-extra"),Hh=require("path"),kh=Q(),sW=oe(),{PACKAGE_ROOT:eEe}=bt(),XO=(H(),D(W)),cW=ue(),tEe=Tt();lW.exports=rEe;async function rEe(){let e=nEe(),t=cW.get(XO.CONFIG_PARAMS.ROOTPATH),r=Hh.join(t,"package.json"),n={dependencies:{harperdb:"file:"+eEe}},s=Hh.join(t,"node_modules");Vs.ensureDirSync(s);let i,a=!0,c=!1;try{i=Vs.readJsonSync(r)}catch(l){if(sW.isEmptyOrZeroLength(e))return;if(l.code!==XO.NODE_ERROR_CODES.ENOENT)throw l;a=!1}if(!sW.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let d=oW(u);n.dependencies[l]=d+u}if(!a){kh.notify("Installing components"),await aW(r,n,null),await iW(t,e);return}for(let{name:l,package:u}of e){let d=i.dependencies[l],f=oW(u);if(d===void 0||d!==f+u){c=!0;break}if(u.startsWith("file:"))try{if(Vs.statSync(new URL(u+"/package.json")).mtimeMs>Vs.statSync(r).mtimeMs){c=!0;break}}catch(m){kh.info(`Error checking ${u}/package.json modification time`,m);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(kh.notify("Removing component",l),c=!0);c&&(kh.notify("Updating components."),await aW(r,n,i),await iW(t,e))}o(rEe,"installComponents");function iW(e,t){return Promise.all(t.map(({name:r})=>{let n=Hh.join(e,"node_modules",r),s=Hh.join(e,"components",r);if(Vs.existsSync(n)&&Vs.lstatSync(n).isDirectory())return Vs.move(n,s,{overwrite:!0}).then(()=>{Vs.symlink(s,n)})}))}o(iW,"moveModuleToComponents");function nEe(){let e=tEe.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}o(nEe,"getComponentsConfig");function oW(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":Hh.extname(e)||Vs.existsSync(e)?"file:":"github:"}o(oW,"getPkgPrefix");async function aW(e,t,r){kh.trace("npm installing components package.json",t),Vs.writeFileSync(e,JSON.stringify(t,null," "));try{await Fh().installAllRootModules(cW.get(XO.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?Vs.writeFileSync(e,JSON.stringify(r,null," ")):Vs.unlinkSync(e),n}}o(aW,"installPackages")});var mW={};Ie(mW,{packageDirectory:()=>sEe});function sEe(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];dW.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,uW.join)("cache","webpack")):void 0,map:o(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,fW.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var uW,dW,fW,pW=ie(()=>{uW=require("path"),dW=w(require("tar-fs")),fW=require("node:zlib");o(sEe,"packageDirectory")});var rP=M(ar=>{"use strict";var we=require("fs-extra"),eP=require("fast-glob"),Pe=require("path"),iEe=require("tar-fs"),oEe=require("gunzip-maybe"),tP=require("normalize-path"),$n=XY(),Ft=Q(),ht=(H(),D(W)),or=ue(),zT=Tt(),aEe=oe(),{PACKAGE_ROOT:cEe}=bt(),{handleHDBError:jt,hdbErrors:lEe}=_e(),{basename:wBe}=require("path"),uEe=ZO(),EW=ue(),{Readable:dEe}=require("stream"),{isMainThread:fEe}=require("worker_threads"),{HDB_ERROR_MSGS:Xl,HTTP_STATUS_CODES:Qt}=lEe,_W=nt(),{replicateOperation:bi}=(us(),D(zo)),{packageDirectory:mEe}=(pW(),D(mW)),hW=Fh(),pEe=Pe.join(cEe,"application-template"),hEe=or.get(ht.CONFIG_PARAMS.ROOTPATH),mc=Pe.join(hEe,"ssh"),oa=Pe.join(mc,"known_hosts"),{Resources:EEe}=(xa(),D(Hb));function _Ee(){Ft.trace("getting custom api status");let e={};try{e={port:or.get(ht.CONFIG_PARAMS.HTTP_PORT),directory:or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw jt(new Error,Xl.FUNCTION_STATUS,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,t)}return e}o(_Ee,"customFunctionsStatus");function gEe(){Ft.trace("getting custom api endpoints");let e={},t=or.get(ht.CONFIG_PARAMS.COMPONENTSROOT);try{eP.sync(tP(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:eP.sync(tP(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:eP.sync(tP(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw jt(new Error,Xl.GET_FUNCTIONS,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,r)}return e}o(gEe,"getCustomFunctions");function SEe(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.parse(e.file).name);let t=$n.getDropCustomFunctionValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);Ft.trace("getting custom api endpoint file content");let r=or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,a=Pe.join(r,n,s,i+".js");try{return we.readFileSync(a,{encoding:"utf8"})}catch(c){throw jt(new Error,Xl.GET_FUNCTION,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,c)}}o(SEe,"getCustomFunction");async function TEe(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.parse(e.file).name);let t=$n.setCustomFunctionValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);Ft.trace("setting custom function file content");let r=or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:a}=e;try{we.outputFileSync(Pe.join(r,n,s,i+".js"),a);let c=await bi(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw jt(new Error,Xl.SET_FUNCTION,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,c)}}o(TEe,"setCustomFunction");async function yEe(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.parse(e.file).name);let t=$n.getDropCustomFunctionValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);Ft.trace("dropping custom function file");let r=or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{we.unlinkSync(Pe.join(r,n,s,i+".js"));let a=await bi(e);return a.message=`Successfully deleted custom function: ${i}.js`,a}catch(a){throw jt(new Error,Xl.DROP_FUNCTION,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,a)}}o(yEe,"dropCustomFunction");async function REe(e){e.project&&(e.project=Pe.parse(e.project).name);let t=$n.addComponentValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);Ft.trace("adding component");let r=or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Pe.join(r,n);we.mkdirSync(s,{recursive:!0}),we.copySync(pEe,s);let i=await bi(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw jt(new Error,Xl.ADD_FUNCTION,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,s)}}o(REe,"addComponent");async function AEe(e){e.project&&(e.project=Pe.parse(e.project).name);let t=$n.dropCustomFunctionProjectValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);Ft.trace("dropping custom function project");let r=or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=or.get(ht.CONFIG_PARAMS.APPS);if(!aEe.isEmptyOrZeroLength(s)){let i=!1;for(let[a,c]of s.entries())if(c.name===n){s.splice(a,1),i=!0;break}if(i)return zT.updateConfigValue(ht.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Pe.join(r,n);we.rmSync(i,{recursive:!0});let a=await bi(e);return a.message=`Successfully deleted project: ${n}`,a}catch(i){throw jt(new Error,Xl.DROP_FUNCTION_PROJECT,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,i)}}o(AEe,"dropCustomFunctionProject");async function bEe(e){e.project&&(e.project=Pe.parse(e.project).name);let t=$n.packageComponentValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let r=or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Ft.trace("packaging component",n);let s;try{s=await we.realpath(Pe.join(r,n))}catch(a){if(a.code!==ht.NODE_ERROR_CODES.ENOENT)throw a;try{s=await we.realpath(Pe.join(or.get(ht.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===ht.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await mEe(s,e)).toString("base64");return{project:n,payload:i}}o(bEe,"packageComponent");async function IEe(e){e.project?e.project=Pe.parse(e.project).name:e.package&&(e.project=wEe(e.package));let t=$n.deployComponentValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let r=or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:a}=e;if(Ft.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=Pe.join(r,n),i="file:"+c,await we.emptyDir(c);let p=dEe.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((g,A)=>{p.pipe(oEe()).pipe(iEe.extract(c,{finish:g})).on("error",A)});let h=await we.readdir(c);h.length===1&&h[0]==="package"&&(await we.copy(Pe.join(c,"package"),c),await we.remove(Pe.join(c,"package")));let E=Pe.join(c,"node_modules");a?await hW.runCommand(a,c):we.existsSync(E)||await hW.installAllRootModules(!1,c)}else{await zT.addConfig(n,{package:i}),await uEe();let p=EW.get(ht.CONFIG_PARAMS.ROOTPATH);c=Pe.join(p,"node_modules",n)}if(fEe)return;let l=new EEe;l.isWorker=!0;let u=(qh(),D(JT)),d;if(u.setErrorReporter(p=>d=p),await u.loadComponent(c,l),d)throw d;Ft.info("Installed component");let f=e.restart==="rolling";e.restart=f?!1:e.restart;let m=await bi(e);if(e.restart===!0)_W.restartWorkers("http"),m.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(f){let h=await(QT(),D(jT)).executeJob({operation:"restart_service",service:"http",replicated:!0});m.restartJobId=h.job_id,m.message=`Successfully deployed: ${n}, restarting HarperDB`}else m.message=`Successfully deployed: ${n}`;return m}o(IEe,"deployComponent");function wEe(e){if(e.startsWith("git+ssh://"))return Pe.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return Pe.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(we.readFileSync(Pe.join(e,"package.json"),"utf8"));return Pe.basename(t)}catch{}return Pe.basename(e)}o(wEe,"getProjectNameFromPackage");async function NEe(){let e=o(async(s,i)=>{try{let a=await we.readdir(s,{withFileTypes:!0});for(let c of a){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=Pe.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let d={name:l,entries:[]};i.entries.push(d),await e(u,d)}else{let d=await we.stat(u),f={name:Pe.basename(l),mtime:d.mtime,size:d.size};i.entries.push(f)}}return i}catch(a){return Ft.warn("Error loading package",a),{error:a.toString(),entries:[]}}},"walkDir"),t=await e(or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{name:or.get(ht.CONFIG_PARAMS.COMPONENTSROOT).split(Pe.sep).slice(-1).pop(),entries:[]}),{internal:r}=(Sp(),D(Yw)),n;try{n=await r.ComponentStatusRegistry.getAggregatedFromAllThreads(r.componentStatusRegistry)}catch(s){Ft.debug(`Failed to get component status from threads: ${s.message}`)}for(let s of t.entries){let i=n?.get(s.name);i?s.status=structuredClone(i):s.status={status:"unknown",message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}}}return t}o(NEe,"getComponents");async function CEe(e){let t=$n.getComponentFileValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let n=zT.getConfigObj()[e.project]||e.project==="harperdb"?Pe.join(EW.get(ht.CONFIG_PARAMS.ROOTPATH),"node_modules"):or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await we.stat(Pe.join(n,e.project,e.file));return{message:await we.readFile(Pe.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===ht.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Pe.join(e.project,e.file)}'`):i}}o(CEe,"getComponentFile");async function OEe(e){let t=$n.setComponentFileValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Pe.join(or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await we.ensureFile(n),await we.outputFile(n,e.payload,r)):await we.ensureDir(n);let s=await bi(e);return s.message="Successfully set component: "+e.file,s}o(OEe,"setComponentFile");async function PEe(e){let t=$n.dropComponentFileValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?Pe.join(r,n):r,i=Pe.join(or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),s),a=Pe.join(or.get(ht.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await we.pathExists(a)&&await we.unlink(a),await we.pathExists(i)&&await we.remove(i);let c=Pe.join(or.get(ht.CONFIG_PARAMS.ROOTPATH),"package.json");if(await we.pathExists(c)){let u=JSON.parse(await we.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await we.writeFile(c,JSON.stringify(u,null,2),"utf8")}zT.deleteConfigFromFile([r]);let l=await bi(e);return e.restart===!0?(_W.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}o(PEe,"dropComponent");async function LEe(e){let t=$n.addSSHKeyValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:a}=e;Ft.trace("adding ssh key",r);let c=Pe.join(mc,r+".key"),l=Pe.join(mc,"config");if(await we.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await we.outputFile(c,n),await we.chmod(c,"0600");let u=`#${r}
|
|
24
|
+
`,""):null}catch(p){p.stderr?a[u].npm_error=nW(p.stderr):a[u].npm_error=p.message;continue}try{a[u].npm_output=JSON.parse(f)}catch{a[u].npm_output=f}try{a[u].npm_error=JSON.parse(m)}catch{a[u].npm_error=m}}return fc.info(`finished installModules with response ${a}`),a.warning=t,a}o(rEe,"installModules");function nW(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
|
|
25
|
+
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}o(nW,"parseNPMStdErr");async function nEe(e){fc.info(`starting auditModules for request: ${e}`);let t=iW(e);if(t)throw xh(t,t.message,Bh.BAD_REQUEST);let{projects:r}=e;await WT(),await sW(r);let n={};for(let s=0,i=r.length;s<i;s++){let a=r[s],c=dc.join(JO,a);n[a]={npm_output:null,npm_error:null};try{let l=await df("npm audit --json",c);n[a].npm_output=JSON.parse(l)}catch(l){n[a].npm_error=nW(l.stderr)}}return fc.info(`finished auditModules with response ${n}`),n}o(nEe,"auditModules");async function WT(){return await df("npm -v"),!0}o(WT,"checkNPMInstalled");async function sW(e){if(!Array.isArray(e)||e.length===0)throw xh(new Error,"projects argument must be an array with at least 1 element",Bh.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],a=dc.join(JO,i.toString());if(!await lf.pathExists(a)){t.push(i);continue}let l=dc.join(a,"package.json");await lf.pathExists(l)||r.push(i)}if(t.length>0)throw xh(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Bh.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw xh(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Bh.BAD_REQUEST,void 0,void 0,!0)}o(sW,"checkProjectPaths");function iW(e){let t=KT.object({projects:KT.array().min(1).items(KT.string()).required(),dry_run:KT.boolean().default(!1)});return jhe.validateBySchema(e,t)}o(iW,"modulesValidator")});var ZO=M((CBe,fW)=>{"use strict";var Vs=require("fs-extra"),Hh=require("path"),kh=Q(),aW=oe(),{PACKAGE_ROOT:sEe}=Tt(),XO=(H(),D(W)),dW=ue(),iEe=yt();fW.exports=oEe;async function oEe(){let e=aEe(),t=dW.get(XO.CONFIG_PARAMS.ROOTPATH),r=Hh.join(t,"package.json"),n={dependencies:{harperdb:"file:"+sEe}},s=Hh.join(t,"node_modules");Vs.ensureDirSync(s);let i,a=!0,c=!1;try{i=Vs.readJsonSync(r)}catch(l){if(aW.isEmptyOrZeroLength(e))return;if(l.code!==XO.NODE_ERROR_CODES.ENOENT)throw l;a=!1}if(!aW.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let d=lW(u);n.dependencies[l]=d+u}if(!a){kh.notify("Installing components"),await uW(r,n,null),await cW(t,e);return}for(let{name:l,package:u}of e){let d=i.dependencies[l],f=lW(u);if(d===void 0||d!==f+u){c=!0;break}if(u.startsWith("file:"))try{if(Vs.statSync(new URL(u+"/package.json")).mtimeMs>Vs.statSync(r).mtimeMs){c=!0;break}}catch(m){kh.info(`Error checking ${u}/package.json modification time`,m);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(kh.notify("Removing component",l),c=!0);c&&(kh.notify("Updating components."),await uW(r,n,i),await cW(t,e))}o(oEe,"installComponents");function cW(e,t){return Promise.all(t.map(({name:r})=>{let n=Hh.join(e,"node_modules",r),s=Hh.join(e,"components",r);if(Vs.existsSync(n)&&Vs.lstatSync(n).isDirectory())return Vs.move(n,s,{overwrite:!0}).then(()=>{Vs.symlink(s,n)})}))}o(cW,"moveModuleToComponents");function aEe(){let e=iEe.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}o(aEe,"getComponentsConfig");function lW(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":Hh.extname(e)||Vs.existsSync(e)?"file:":"github:"}o(lW,"getPkgPrefix");async function uW(e,t,r){kh.trace("npm installing components package.json",t),Vs.writeFileSync(e,JSON.stringify(t,null," "));try{await Fh().installAllRootModules(dW.get(XO.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?Vs.writeFileSync(e,JSON.stringify(r,null," ")):Vs.unlinkSync(e),n}}o(uW,"installPackages")});var EW={};Ie(EW,{packageDirectory:()=>cEe});function cEe(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];pW.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,mW.join)("cache","webpack")):void 0,map:o(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,hW.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var mW,pW,hW,_W=ie(()=>{mW=require("path"),pW=w(require("tar-fs")),hW=require("node:zlib");o(cEe,"packageDirectory")});var rP=M(ar=>{"use strict";var we=require("fs-extra"),eP=require("fast-glob"),Pe=require("path"),lEe=require("tar-fs"),uEe=require("gunzip-maybe"),tP=require("normalize-path"),$n=tW(),Ft=Q(),ht=(H(),D(W)),or=ue(),zT=yt(),dEe=oe(),{PACKAGE_ROOT:fEe}=Tt(),{handleHDBError:jt,hdbErrors:mEe}=_e(),{basename:LBe}=require("path"),pEe=ZO(),SW=ue(),{Readable:hEe}=require("stream"),{isMainThread:EEe}=require("worker_threads"),{HDB_ERROR_MSGS:Xl,HTTP_STATUS_CODES:Qt}=mEe,TW=nt(),{replicateOperation:bi}=(us(),D(zo)),{packageDirectory:_Ee}=(_W(),D(EW)),gW=Fh(),gEe=Pe.join(fEe,"application-template"),SEe=or.get(ht.CONFIG_PARAMS.ROOTPATH),mc=Pe.join(SEe,"ssh"),oa=Pe.join(mc,"known_hosts"),{Resources:TEe}=(xa(),D(Hb));function yEe(){Ft.trace("getting custom api status");let e={};try{e={port:or.get(ht.CONFIG_PARAMS.HTTP_PORT),directory:or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw jt(new Error,Xl.FUNCTION_STATUS,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,t)}return e}o(yEe,"customFunctionsStatus");function REe(){Ft.trace("getting custom api endpoints");let e={},t=or.get(ht.CONFIG_PARAMS.COMPONENTSROOT);try{eP.sync(tP(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:eP.sync(tP(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:eP.sync(tP(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw jt(new Error,Xl.GET_FUNCTIONS,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,r)}return e}o(REe,"getCustomFunctions");function AEe(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.parse(e.file).name);let t=$n.getDropCustomFunctionValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);Ft.trace("getting custom api endpoint file content");let r=or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,a=Pe.join(r,n,s,i+".js");try{return we.readFileSync(a,{encoding:"utf8"})}catch(c){throw jt(new Error,Xl.GET_FUNCTION,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,c)}}o(AEe,"getCustomFunction");async function bEe(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.parse(e.file).name);let t=$n.setCustomFunctionValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);Ft.trace("setting custom function file content");let r=or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:a}=e;try{we.outputFileSync(Pe.join(r,n,s,i+".js"),a);let c=await bi(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw jt(new Error,Xl.SET_FUNCTION,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,c)}}o(bEe,"setCustomFunction");async function IEe(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.parse(e.file).name);let t=$n.getDropCustomFunctionValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);Ft.trace("dropping custom function file");let r=or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{we.unlinkSync(Pe.join(r,n,s,i+".js"));let a=await bi(e);return a.message=`Successfully deleted custom function: ${i}.js`,a}catch(a){throw jt(new Error,Xl.DROP_FUNCTION,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,a)}}o(IEe,"dropCustomFunction");async function wEe(e){e.project&&(e.project=Pe.parse(e.project).name);let t=$n.addComponentValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);Ft.trace("adding component");let r=or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Pe.join(r,n);we.mkdirSync(s,{recursive:!0}),we.copySync(gEe,s);let i=await bi(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw jt(new Error,Xl.ADD_FUNCTION,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,s)}}o(wEe,"addComponent");async function NEe(e){e.project&&(e.project=Pe.parse(e.project).name);let t=$n.dropCustomFunctionProjectValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);Ft.trace("dropping custom function project");let r=or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=or.get(ht.CONFIG_PARAMS.APPS);if(!dEe.isEmptyOrZeroLength(s)){let i=!1;for(let[a,c]of s.entries())if(c.name===n){s.splice(a,1),i=!0;break}if(i)return zT.updateConfigValue(ht.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Pe.join(r,n);we.rmSync(i,{recursive:!0});let a=await bi(e);return a.message=`Successfully deleted project: ${n}`,a}catch(i){throw jt(new Error,Xl.DROP_FUNCTION_PROJECT,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,i)}}o(NEe,"dropCustomFunctionProject");async function CEe(e){e.project&&(e.project=Pe.parse(e.project).name);let t=$n.packageComponentValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let r=or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Ft.trace("packaging component",n);let s;try{s=await we.realpath(Pe.join(r,n))}catch(a){if(a.code!==ht.NODE_ERROR_CODES.ENOENT)throw a;try{s=await we.realpath(Pe.join(or.get(ht.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===ht.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await _Ee(s,e)).toString("base64");return{project:n,payload:i}}o(CEe,"packageComponent");async function OEe(e){e.project?e.project=Pe.parse(e.project).name:e.package&&(e.project=PEe(e.package));let t=$n.deployComponentValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let r=or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:a}=e;if(Ft.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=Pe.join(r,n),i="file:"+c,await we.emptyDir(c);let p=hEe.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((g,A)=>{p.pipe(uEe()).pipe(lEe.extract(c,{finish:g})).on("error",A)});let h=await we.readdir(c);h.length===1&&h[0]==="package"&&(await we.copy(Pe.join(c,"package"),c),await we.remove(Pe.join(c,"package")));let E=Pe.join(c,"node_modules");a?await gW.runCommand(a,c):we.existsSync(E)||await gW.installAllRootModules(!1,c)}else{await zT.addConfig(n,{package:i}),await pEe();let p=SW.get(ht.CONFIG_PARAMS.ROOTPATH);c=Pe.join(p,"node_modules",n)}if(EEe)return;let l=new TEe;l.isWorker=!0;let u=(qh(),D(JT)),d;if(u.setErrorReporter(p=>d=p),await u.loadComponent(c,l),d)throw d;Ft.info("Installed component");let f=e.restart==="rolling";e.restart=f?!1:e.restart;let m=await bi(e);if(e.restart===!0)TW.restartWorkers("http"),m.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(f){let h=await(QT(),D(jT)).executeJob({operation:"restart_service",service:"http",replicated:!0});m.restartJobId=h.job_id,m.message=`Successfully deployed: ${n}, restarting HarperDB`}else m.message=`Successfully deployed: ${n}`;return m}o(OEe,"deployComponent");function PEe(e){if(e.startsWith("git+ssh://"))return Pe.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return Pe.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(we.readFileSync(Pe.join(e,"package.json"),"utf8"));return Pe.basename(t)}catch{}return Pe.basename(e)}o(PEe,"getProjectNameFromPackage");async function LEe(){let e=o(async(s,i)=>{try{let a=await we.readdir(s,{withFileTypes:!0});for(let c of a){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=Pe.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let d={name:l,entries:[]};i.entries.push(d),await e(u,d)}else{let d=await we.stat(u),f={name:Pe.basename(l),mtime:d.mtime,size:d.size};i.entries.push(f)}}return i}catch(a){return Ft.warn("Error loading package",a),{error:a.toString(),entries:[]}}},"walkDir"),t=await e(or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{name:or.get(ht.CONFIG_PARAMS.COMPONENTSROOT).split(Pe.sep).slice(-1).pop(),entries:[]}),{internal:r}=(Sp(),D(Yw)),n;try{n=await r.ComponentStatusRegistry.getAggregatedFromAllThreads(r.componentStatusRegistry)}catch(s){Ft.debug(`Failed to get component status from threads: ${s.message}`)}for(let s of t.entries){let i=n?.get(s.name);i?s.status=structuredClone(i):s.status={status:"unknown",message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}}}return t}o(LEe,"getComponents");async function DEe(e){let t=$n.getComponentFileValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let n=zT.getConfigObj()[e.project]||e.project==="harperdb"?Pe.join(SW.get(ht.CONFIG_PARAMS.ROOTPATH),"node_modules"):or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await we.stat(Pe.join(n,e.project,e.file));return{message:await we.readFile(Pe.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===ht.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Pe.join(e.project,e.file)}'`):i}}o(DEe,"getComponentFile");async function MEe(e){let t=$n.setComponentFileValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Pe.join(or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await we.ensureFile(n),await we.outputFile(n,e.payload,r)):await we.ensureDir(n);let s=await bi(e);return s.message="Successfully set component: "+e.file,s}o(MEe,"setComponentFile");async function vEe(e){let t=$n.dropComponentFileValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?Pe.join(r,n):r,i=Pe.join(or.get(ht.CONFIG_PARAMS.COMPONENTSROOT),s),a=Pe.join(or.get(ht.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await we.pathExists(a)&&await we.unlink(a),await we.pathExists(i)&&await we.remove(i);let c=Pe.join(or.get(ht.CONFIG_PARAMS.ROOTPATH),"package.json");if(await we.pathExists(c)){let u=JSON.parse(await we.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await we.writeFile(c,JSON.stringify(u,null,2),"utf8")}zT.deleteConfigFromFile([r]);let l=await bi(e);return e.restart===!0?(TW.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}o(vEe,"dropComponent");async function UEe(e){let t=$n.addSSHKeyValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:a}=e;Ft.trace("adding ssh key",r);let c=Pe.join(mc,r+".key"),l=Pe.join(mc,"config");if(await we.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await we.outputFile(c,n),await we.chmod(c,"0600");let u=`#${r}
|
|
26
26
|
Host ${s}
|
|
27
27
|
HostName ${i}
|
|
28
28
|
User git
|
|
29
29
|
IdentityFile ${c}
|
|
30
30
|
IdentitiesOnly yes`;await we.pathExists(l)?await we.appendFile(l,`
|
|
31
31
|
`+u):await we.outputFile(l,u);let d="";if(await we.pathExists(oa)||(await we.writeFile(oa,""),await we.chmod(oa,"0600")),i=="github.com"&&!(await we.readFile(oa,"utf8")).includes("github.com"))try{let E=(await(await fetch("https://api.github.com/meta")).json()).ssh_keys;for(let g of E)we.appendFile(oa,"github.com "+g+`
|
|
32
|
-
`)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}a&&await we.appendFile(oa,a);let f=await bi(e);return f.message=`Added ssh key: ${r}${d}`,f}o(LEe,"addSSHKey");async function DEe(e){let t=$n.updateSSHKeyValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let{name:r,key:n}=e;Ft.trace("updating ssh key",r);let s=Pe.join(mc,r+".key");if(!await we.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await we.outputFile(s,n);let i=await bi(e);return i.message=`Updated ssh key: ${r}`,i}o(DEe,"updateSSHKey");async function MEe(e){let t=$n.deleteSSHKeyValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let{name:r}=e;Ft.trace("deleting ssh key",r);let n=Pe.join(mc,r+".key"),s=Pe.join(mc,"config");if(!await we.pathExists(n))throw new Error("Key does not exist");let i=await we.readFile(s,"utf8"),a=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(a,""),await we.outputFile(s,i),we.removeSync(n);let c=await bi(e);return c.message=`Deleted ssh key: ${r}`,c}o(MEe,"deleteSSHKey");async function vEe(e){let t=[];return await we.pathExists(mc)&&(await we.readdir(mc)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}o(vEe,"listSSHKeys");async function UEe(e){let t=$n.setSSHKnownHostsValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let{known_hosts:r}=e;await we.outputFile(oa,r);let n=await bi(e);return n.message="Known hosts successfully set",n}o(UEe,"setSSHKnownHosts");async function xEe(e){return await we.pathExists(oa)?{known_hosts:await we.readFile(oa,"utf8")}:{known_hosts:null}}o(xEe,"getSSHKnownHosts");ar.customFunctionsStatus=_Ee;ar.getCustomFunctions=gEe;ar.getCustomFunction=SEe;ar.setCustomFunction=TEe;ar.dropCustomFunction=yEe;ar.addComponent=REe;ar.dropCustomFunctionProject=AEe;ar.packageComponent=bEe;ar.deployComponent=IEe;ar.getComponents=NEe;ar.getComponentFile=CEe;ar.setComponentFile=OEe;ar.dropComponent=PEe;ar.addSSHKey=LEe;ar.updateSSHKey=DEe;ar.deleteSSHKey=MEe;ar.listSSHKeys=vEe;ar.setSSHKnownHosts=UEe;ar.getSSHKnownHosts=xEe});var nP=M((OBe,SW)=>{"use strict";var Ks=require("joi"),gW=ft();SW.exports={readTransactionLogValidator:BEe,deleteTransactionLogsBeforeValidator:FEe};function BEe(e){let t=Ks.object({schema:Ks.string(),database:Ks.string(),table:Ks.string().required(),from:Ks.date().timestamp(),to:Ks.date().timestamp(),limit:Ks.number().min(1)});return gW.validateBySchema(e,t)}o(BEe,"readTransactionLogValidator");function FEe(e){let t=Ks.object({schema:Ks.string(),database:Ks.string(),table:Ks.string().required(),timestamp:Ks.date().timestamp().required()});return gW.validateBySchema(e,t)}o(FEe,"deleteTransactionLogsBeforeValidator")});var ey=M((LBe,IW)=>{"use strict";var sP=(H(),D(W)),Gh=sr(),TW=oe(),yW=ue(),RW=Wi(),AW=Q(),{handleHDBError:XT,hdbErrors:kEe}=_e(),{HTTP_STATUS_CODES:ZT}=kEe,{readTransactionLogValidator:HEe,deleteTransactionLogsBeforeValidator:qEe}=nP(),bW=os(),GEe="Logs successfully deleted from transaction log.",$Ee="All logs successfully deleted from transaction log.";IW.exports={readTransactionLog:VEe,deleteTransactionLogsBefore:YEe};async function VEe(e){let t=HEe(e);if(t)throw XT(t,t.message,ZT.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=TW.checkSchemaTableExist(e.database,e.table);if(r)throw XT(new Error,r,ZT.NOT_FOUND,void 0,void 0,!0);return yW.get(sP.CONFIG_PARAMS.CLUSTERING_ENABLED)?await KEe(e):(AW.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)),bW.readAuditLog(e))}o(VEe,"readTransactionLog");async function*KEe(e){let t=RW.createNatsTableStreamName(e.database,e.table),r=await Gh.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===sP.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}o(KEe,"readTransactionLogNats");async function YEe(e){let t=qEe(e);if(t)throw XT(t,t.message,ZT.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!yW.get(sP.CONFIG_PARAMS.CLUSTERING_ENABLED))return AW.info("Delete transaction logs called for Plexus"),bW.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=TW.checkSchemaTableExist(r,n);if(i)throw XT(new Error,i,ZT.NOT_FOUND,void 0,void 0,!0);let a=RW.createNatsTableStreamName(r,n),{jsm:c}=await Gh.getNATSReferences(),l=await Gh.getStreamInfo(a),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=GEe,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=$Ee):f=(await Gh.viewStream(a,parseInt(s),1))[0].nats_sequence,await Gh.purgeTableStream(r,n,{seq:f}),d}o(YEe,"deleteTransactionLogsBefore")});var cP={};Ie(cP,{describeMetric:()=>LW,describeMetricOp:()=>aP,get:()=>OW,getOp:()=>iP,listMetrics:()=>PW,listMetricsOp:()=>oP});async function zEe(e){return(await q_().get(e)).hostname}function wW(e,t){return e.length===0||e.includes(t)}function iP(e){return $h.trace?.("get_analytics request:",e),OW(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function CW(e){return"conditions"in e?{...e,conditions:e.conditions.map(CW)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function OW(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(CW));let a=t??[];wW(a,"id")||a.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};return a.length>0&&(c.select=a),$h.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],wW(a,"node")&&($h.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await zEe(d)),$h.trace?.("get_analytics result:",JSON.stringify(u)),u})}function oP(e){return PW(e.metric_types)}async function PW(e=["builtin"]){let t=[],r=Object.values(vo);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,a=await databases.system.hdb_analytics.search(s);for await(let c of a)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function aP(e){return LW(e.metric)}async function LW(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 a in s)n.push({name:a,type:typeof s[a]});let i={attributes:n};return $h.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var NW,WEe,$h,lP=ie(()=>{NW=w(Q());_b();gb();({forComponent:WEe}=NW.default),$h=WEe("analytics").conditional;o(zEe,"lookupHostname");o(wW,"isSelected");o(iP,"getOp");o(CW,"conformCondition");o(OW,"get");o(oP,"listMetricsOp");o(PW,"listMetrics");o(aP,"describeMetricOp");o(LW,"describeMetric")});var ty,ry,Vh,ny=ie(()=>{ty={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},ry=Object.keys(ty),Vh="primary"});function MW(e){return DW.validateBySchema(e,XEe)}var Kh,DW,jEe,QEe,JEe,XEe,vW=ie(()=>{Kh=w(require("joi")),DW=w(ft());ny();jEe=ry,QEe=Object.entries(ty).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),JEe=o(()=>{let e=Kh.default.string().min(1).max(512);return Object.entries(ty).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:Kh.default.string().valid(...r.allowedValues).messages({"any.only":QEe[t]})}))}),e.required()},"createStatusValidationSchema"),XEe=Kh.default.object({id:Kh.default.string().valid(...jEe).required(),status:JEe()});o(MW,"validateStatus")});function UW(){uP||(uP=aa.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),dP=new Uint8Array(uP))}function xW(){UW(),dP[0]=1}function BW(){return UW(),dP[0]===1}var uP,dP,fP=ie(()=>{Yh();o(UW,"ensureInitialized");o(xW,"requestRestart");o(BW,"restartNeeded")});var _P={};Ie(_P,{DEFAULT_STATUS_ID:()=>Vh,STATUS_IDS:()=>ry,Status:()=>aa,clear:()=>pP,get:()=>hP,set:()=>EP});function zh(){return mP||(mP=Xe({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),mP}function pP({id:e}){return Wh.debug?.("clearStatus",e),zh().delete(e)}async function e_e(){Wh.debug?.("getAllStatus");let e=zh().get({}),t=await gp.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=BW();return{systemStatus:e,componentStatus:r,restartRequired:n}}function hP({id:e}){return e?(Wh.debug?.("getStatus",e),zh().get(e)):(Wh.debug?.("getStatus","all"),e_e())}function EP({status:e,id:t=Vh}){let r=MW({status:e,id:t});if(r)throw(0,sy.handleHDBError)(r,r.message,ZEe.BAD_REQUEST);return Wh.debug?.("setStatus",t,e),zh().put(t,{status:e})}var sy,FW,ZEe,mP,aa,Wh,Yh=ie(()=>{Oe();sy=w(_e()),FW=w(Zn());vW();ny();Sp();fP();ny();({HTTP_STATUS_CODES:ZEe}=sy.hdbErrors);o(zh,"getStatusTable");aa={get primaryStore(){return zh().primaryStore}},Wh=(0,FW.loggerWithTag)("status");o(pP,"clearStatus");o(e_e,"getAllStatus");o(hP,"getStatus");o(EP,"setStatus")});function r_e(e){if(typeof e!="string")throw new iy(`License must be a string; received ${typeof e}: ${e}`);let t;try{t=e.split(".")}catch(l){let u=new iy(`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=t_e.getKey();if(!(0,ay.verify)(null,Buffer.from(r+"."+n,"utf8"),i,Buffer.from(s,"base64url")))throw new SP("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 n_e(e){if(e?.typ!=="Harper-License")throw new jh(`Invalid license header; typ must be 'Harper-License'; got: ${e?.typ}`);if(e?.alg!=="EdDSA")throw new jh(`Invalid license header; alg must be 'EdDSA'; got: ${e?.alg}`)}function s_e(e,t){return e.required?typeof t===e.type:typeof t>"u"||typeof t===e.type}function i_e(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(!s_e(t[r],e[r]))throw new oy(`Invalid license payload; ${i} must be a ${s}; got: ${typeof e[r]}`)}}function HW(e){let{header:t,payload:r}=r_e(e),n;try{n=JSON.parse(t)}catch(i){let a=new jh;throw a.cause=i,a}n_e(n);let s;try{s=JSON.parse(r)}catch(i){let a=new oy;throw a.cause=i,a}return i_e(s),s}var ay,kW,gP,iy,ff,SP,jh,oy,t_e,qW=ie(()=>{ay=require("node:crypto"),kW=w(ue());H();gP=class{static{o(this,"PublicKey")}pem;constructor(t){t&&(t==="test"||t==="development")?this.pem=`-----BEGIN PUBLIC KEY-----
|
|
32
|
+
`)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}a&&await we.appendFile(oa,a);let f=await bi(e);return f.message=`Added ssh key: ${r}${d}`,f}o(UEe,"addSSHKey");async function xEe(e){let t=$n.updateSSHKeyValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let{name:r,key:n}=e;Ft.trace("updating ssh key",r);let s=Pe.join(mc,r+".key");if(!await we.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await we.outputFile(s,n);let i=await bi(e);return i.message=`Updated ssh key: ${r}`,i}o(xEe,"updateSSHKey");async function BEe(e){let t=$n.deleteSSHKeyValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let{name:r}=e;Ft.trace("deleting ssh key",r);let n=Pe.join(mc,r+".key"),s=Pe.join(mc,"config");if(!await we.pathExists(n))throw new Error("Key does not exist");let i=await we.readFile(s,"utf8"),a=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(a,""),await we.outputFile(s,i),we.removeSync(n);let c=await bi(e);return c.message=`Deleted ssh key: ${r}`,c}o(BEe,"deleteSSHKey");async function FEe(e){let t=[];return await we.pathExists(mc)&&(await we.readdir(mc)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}o(FEe,"listSSHKeys");async function kEe(e){let t=$n.setSSHKnownHostsValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let{known_hosts:r}=e;await we.outputFile(oa,r);let n=await bi(e);return n.message="Known hosts successfully set",n}o(kEe,"setSSHKnownHosts");async function HEe(e){return await we.pathExists(oa)?{known_hosts:await we.readFile(oa,"utf8")}:{known_hosts:null}}o(HEe,"getSSHKnownHosts");ar.customFunctionsStatus=yEe;ar.getCustomFunctions=REe;ar.getCustomFunction=AEe;ar.setCustomFunction=bEe;ar.dropCustomFunction=IEe;ar.addComponent=wEe;ar.dropCustomFunctionProject=NEe;ar.packageComponent=CEe;ar.deployComponent=OEe;ar.getComponents=LEe;ar.getComponentFile=DEe;ar.setComponentFile=MEe;ar.dropComponent=vEe;ar.addSSHKey=UEe;ar.updateSSHKey=xEe;ar.deleteSSHKey=BEe;ar.listSSHKeys=FEe;ar.setSSHKnownHosts=kEe;ar.getSSHKnownHosts=HEe});var nP=M((vBe,RW)=>{"use strict";var Ks=require("joi"),yW=ft();RW.exports={readTransactionLogValidator:qEe,deleteTransactionLogsBeforeValidator:GEe};function qEe(e){let t=Ks.object({schema:Ks.string(),database:Ks.string(),table:Ks.string().required(),from:Ks.date().timestamp(),to:Ks.date().timestamp(),limit:Ks.number().min(1)});return yW.validateBySchema(e,t)}o(qEe,"readTransactionLogValidator");function GEe(e){let t=Ks.object({schema:Ks.string(),database:Ks.string(),table:Ks.string().required(),timestamp:Ks.date().timestamp().required()});return yW.validateBySchema(e,t)}o(GEe,"deleteTransactionLogsBeforeValidator")});var ey=M((xBe,CW)=>{"use strict";var sP=(H(),D(W)),Gh=sr(),AW=oe(),bW=ue(),IW=Wi(),wW=Q(),{handleHDBError:XT,hdbErrors:$Ee}=_e(),{HTTP_STATUS_CODES:ZT}=$Ee,{readTransactionLogValidator:VEe,deleteTransactionLogsBeforeValidator:KEe}=nP(),NW=os(),YEe="Logs successfully deleted from transaction log.",WEe="All logs successfully deleted from transaction log.";CW.exports={readTransactionLog:zEe,deleteTransactionLogsBefore:QEe};async function zEe(e){let t=VEe(e);if(t)throw XT(t,t.message,ZT.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=AW.checkSchemaTableExist(e.database,e.table);if(r)throw XT(new Error,r,ZT.NOT_FOUND,void 0,void 0,!0);return bW.get(sP.CONFIG_PARAMS.CLUSTERING_ENABLED)?await jEe(e):(wW.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)),NW.readAuditLog(e))}o(zEe,"readTransactionLog");async function*jEe(e){let t=IW.createNatsTableStreamName(e.database,e.table),r=await Gh.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===sP.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}o(jEe,"readTransactionLogNats");async function QEe(e){let t=KEe(e);if(t)throw XT(t,t.message,ZT.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!bW.get(sP.CONFIG_PARAMS.CLUSTERING_ENABLED))return wW.info("Delete transaction logs called for Plexus"),NW.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=AW.checkSchemaTableExist(r,n);if(i)throw XT(new Error,i,ZT.NOT_FOUND,void 0,void 0,!0);let a=IW.createNatsTableStreamName(r,n),{jsm:c}=await Gh.getNATSReferences(),l=await Gh.getStreamInfo(a),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=YEe,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=WEe):f=(await Gh.viewStream(a,parseInt(s),1))[0].nats_sequence,await Gh.purgeTableStream(r,n,{seq:f}),d}o(QEe,"deleteTransactionLogsBefore")});var cP={};Ie(cP,{describeMetric:()=>vW,describeMetricOp:()=>aP,get:()=>DW,getOp:()=>iP,listMetrics:()=>MW,listMetricsOp:()=>oP});async function XEe(e){return(await q_().get(e)).hostname}function OW(e,t){return e.length===0||e.includes(t)}function iP(e){return $h.trace?.("get_analytics request:",e),DW(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function LW(e){return"conditions"in e?{...e,conditions:e.conditions.map(LW)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function DW(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(LW));let a=t??[];OW(a,"id")||a.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};return a.length>0&&(c.select=a),$h.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],OW(a,"node")&&($h.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await XEe(d)),$h.trace?.("get_analytics result:",JSON.stringify(u)),u})}function oP(e){return MW(e.metric_types)}async function MW(e=["builtin"]){let t=[],r=Object.values(vo);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,a=await databases.system.hdb_analytics.search(s);for await(let c of a)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function aP(e){return vW(e.metric)}async function vW(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 a in s)n.push({name:a,type:typeof s[a]});let i={attributes:n};return $h.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var PW,JEe,$h,lP=ie(()=>{PW=w(Q());_b();gb();({forComponent:JEe}=PW.default),$h=JEe("analytics").conditional;o(XEe,"lookupHostname");o(OW,"isSelected");o(iP,"getOp");o(LW,"conformCondition");o(DW,"get");o(oP,"listMetricsOp");o(MW,"listMetrics");o(aP,"describeMetricOp");o(vW,"describeMetric")});var ty,ry,Vh,ny=ie(()=>{ty={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},ry=Object.keys(ty),Vh="primary"});function xW(e){return UW.validateBySchema(e,r_e)}var Kh,UW,ZEe,e_e,t_e,r_e,BW=ie(()=>{Kh=w(require("joi")),UW=w(ft());ny();ZEe=ry,e_e=Object.entries(ty).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),t_e=o(()=>{let e=Kh.default.string().min(1).max(512);return Object.entries(ty).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:Kh.default.string().valid(...r.allowedValues).messages({"any.only":e_e[t]})}))}),e.required()},"createStatusValidationSchema"),r_e=Kh.default.object({id:Kh.default.string().valid(...ZEe).required(),status:t_e()});o(xW,"validateStatus")});function FW(){uP||(uP=aa.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),dP=new Uint8Array(uP))}function kW(){FW(),dP[0]=1}function HW(){return FW(),dP[0]===1}var uP,dP,fP=ie(()=>{Yh();o(FW,"ensureInitialized");o(kW,"requestRestart");o(HW,"restartNeeded")});var _P={};Ie(_P,{DEFAULT_STATUS_ID:()=>Vh,STATUS_IDS:()=>ry,Status:()=>aa,clear:()=>pP,get:()=>hP,set:()=>EP});function zh(){return mP||(mP=Xe({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),mP}function pP({id:e}){return Wh.debug?.("clearStatus",e),zh().delete(e)}async function s_e(){Wh.debug?.("getAllStatus");let e=zh().get({}),t=await gp.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=HW();return{systemStatus:e,componentStatus:r,restartRequired:n}}function hP({id:e}){return e?(Wh.debug?.("getStatus",e),zh().get(e)):(Wh.debug?.("getStatus","all"),s_e())}function EP({status:e,id:t=Vh}){let r=xW({status:e,id:t});if(r)throw(0,sy.handleHDBError)(r,r.message,n_e.BAD_REQUEST);return Wh.debug?.("setStatus",t,e),zh().put(t,{status:e})}var sy,qW,n_e,mP,aa,Wh,Yh=ie(()=>{Oe();sy=w(_e()),qW=w(Zn());BW();ny();Sp();fP();ny();({HTTP_STATUS_CODES:n_e}=sy.hdbErrors);o(zh,"getStatusTable");aa={get primaryStore(){return zh().primaryStore}},Wh=(0,qW.loggerWithTag)("status");o(pP,"clearStatus");o(s_e,"getAllStatus");o(hP,"getStatus");o(EP,"setStatus")});function o_e(e){if(typeof e!="string")throw new iy(`License must be a string; received ${typeof e}: ${e}`);let t;try{t=e.split(".")}catch(l){let u=new iy(`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=i_e.getKey();if(!(0,ay.verify)(null,Buffer.from(r+"."+n,"utf8"),i,Buffer.from(s,"base64url")))throw new SP("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 a_e(e){if(e?.typ!=="Harper-License")throw new jh(`Invalid license header; typ must be 'Harper-License'; got: ${e?.typ}`);if(e?.alg!=="EdDSA")throw new jh(`Invalid license header; alg must be 'EdDSA'; got: ${e?.alg}`)}function c_e(e,t){return e.required?typeof t===e.type:typeof t>"u"||typeof t===e.type}function l_e(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(!c_e(t[r],e[r]))throw new oy(`Invalid license payload; ${i} must be a ${s}; got: ${typeof e[r]}`)}}function $W(e){let{header:t,payload:r}=o_e(e),n;try{n=JSON.parse(t)}catch(i){let a=new jh;throw a.cause=i,a}a_e(n);let s;try{s=JSON.parse(r)}catch(i){let a=new oy;throw a.cause=i,a}return l_e(s),s}var ay,GW,gP,iy,ff,SP,jh,oy,i_e,VW=ie(()=>{ay=require("node:crypto"),GW=w(ue());H();gP=class{static{o(this,"PublicKey")}pem;constructor(t){t&&(t==="test"||t==="development")?this.pem=`-----BEGIN PUBLIC KEY-----
|
|
33
33
|
MCowBQYDK2VwAyEAO301jvpO12znGdK/Izrre518pgmQNk9hSMXf4wDMucM=
|
|
34
34
|
-----END PUBLIC KEY-----
|
|
35
35
|
`:this.pem=`-----BEGIN PUBLIC KEY-----
|
|
36
36
|
MCowBQYDK2VwAyEAMtpzMn9YfS0fGaDLcAmYQx2OH8kVevwbNyQ1RIj5cvw=
|
|
37
37
|
-----END PUBLIC KEY-----
|
|
38
|
-
`}getKey(){return(0,ay.createPublicKey)(this.pem)}toString(){return this.pem}},iy=class extends TypeError{static{o(this,"LicenseEncodingError")}},ff=class extends TypeError{static{o(this,"InvalidLicenseError")}},SP=class extends ff{static{o(this,"InvalidLicenseSignatureError")}},jh=class extends ff{static{o(this,"InvalidHeaderError")}},oy=class extends ff{static{o(this,"InvalidPayloadError")}},t_e=new gP(kW.get(B.LICENSE_MODE));o(r_e,"validateLicenseSignature");o(n_e,"validateLicenseHeader");o(s_e,"valid");o(i_e,"validateLicensePayload");o(HW,"validateLicense")});var cy={};Ie(cy,{getActiveLicense:()=>bP,getUsageLicenses:()=>JW,getUsageLicensesOp:()=>wP,installUsageLicense:()=>AP,installUsageLicenseOp:()=>RP,isActiveLicense:()=>jW,isLicensed:()=>IP,loadAndWatchLicensesDir:()=>c_e,recordUsage:()=>QW});async function RP(e){let t=e.license;try{await AP(t)}catch(r){let n=new VW.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function AP(e){let t=HW(e),{id:r}=t;if(await Me.system.hdb_license.get(r))throw new yP(`A usage license with ${r} already exists`);return en.info?.("Installing usage license:",t),Me.system.hdb_license.put(r,t)}function jW(e){return(e.usedReads??0)<e.reads&&(e.usedReadBytes??0)<e.readBytes&&(e.usedWrites??0)<e.writes&&(e.usedWriteBytes??0)<e.writeBytes&&(e.usedRealTimeMessages??0)<e.realTimeMessages&&(e.usedRealTimeBytes??0)<e.realTimeBytes&&(e.usedCpuTime??0)<e.cpuTime&&(e.usedStorage??0)<e.storage||e.reads===-1&&e.readBytes===-1&&e.writes===-1&&e.writeBytes===-1&&e.realTimeMessages===-1&&e.realTimeBytes===-1&&e.cpuTime===-1&&e.storage===-1}async function bP(){let e=KW.get(B.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(jW(n))return n}async function IP(){return await bP()!==void 0}async function QW(e){en.trace?.("Recording usage into license from analytics");let t,r=(await bP())?.id;if(r){en.trace?.("Found license to record usage into:",r);let n={};Rt(n,()=>{t=Me.system.hdb_license.update(r,n);for(let s of e)switch(en.trace?.("Processing analytics record:",s),s.metric){case"db-read":en.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":en.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":en.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"&&(en.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count));break;default:en.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.";GW||(console.error(n),GW=!0),$W===void 0&&($W=setInterval(()=>{en.notify(n)},o_e).unref())}}function wP(e){let t={};return e.region&&(t.region=e.region),JW(t)}function JW(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 a_e(e){en.trace?.("Loading usage license from file:",e);let t=await WW.readFile(e,{encoding:"utf-8"});try{await AP(t)}catch(r){en.error?.("Failed to install usage license from file:",e,r)}}function c_e(){let e=TP.default.join(TP.default.dirname(YW.getConfigFilePath()),"licenses");(0,zW.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:o((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",a_e)}var VW,en,KW,TP,YW,WW,zW,yP,GW,$W,o_e,Qh=ie(()=>{qW();VW=w(_e()),en=w(Q());Ps();Ca();KW=w(ue());H();Oe();TP=w(require("node:path")),YW=w(Tt()),WW=w(require("node:fs/promises")),zW=require("chokidar"),yP=class extends Error{static{o(this,"ExistingLicenseError")}};o(RP,"installUsageLicenseOp");o(AP,"installUsageLicense");GW=!1,o_e=6e5;o(jW,"isActiveLicense");o(bP,"getActiveLicense");o(IP,"isLicensed");o(QW,"recordUsage");Ib(QW);o(wP,"getUsageLicensesOp");o(JW,"getUsageLicenses");o(a_e,"loadLicenseFile");o(c_e,"loadAndWatchLicensesDir")});var ZW=M((nFe,XW)=>{"use strict";var NP=class{static{o(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};XW.exports=NP});var tz=M((iFe,ez)=>{"use strict";var CP=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};ez.exports=CP});var PP=M((aFe,nz)=>{"use strict";var rz=ZW(),l_e=tz(),{HDB_ERROR_MSGS:u_e}=Kr(),OP=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=u_e.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 rz(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new l_e(c,s[c]);i.push(l)});let a=`${r}_${n}`;if(this.unauthorized_access[a])this.unauthorized_access[a].required_attribute_permissions=i;else{let c=new rz(r,n,[],i);this.unauthorized_access[a]=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}};nz.exports=OP});var fy=M((lFe,yz)=>{"use strict";var LP=Bn(),ly=fn(),Ys=cT(),Zh=Ol(),DP=gl(),d_e=UC(),f_e=r1(),eE=kn(),uy=xp(),Cr=Q(),m_e=HC(),p_e=TT(),h_e=mO(),E_e=RT(),__e=EO(),g_e=_O(),S_e=TO(),T_e=RO(),MP=NT(),ca=oe(),y_e=vK(),oz=cf(),yn=(H(),D(W)),az=xY(),R_e=Qd(),cz=(wd(),D(Gp)),lz=($T(),D(vh)),uz=Tt(),Er=rP(),A_e=require("alasql"),dz=ey(),fz=Fh(),mf=fs(),mz=(Xd(),D(Jd)),vP=(lP(),D(cP)),UP=(Yh(),D(_P)),pz=(Qh(),D(cy)),hz=PP(),{handleHDBError:Vn,hdbErrors:Ez}=_e(),{HDB_ERROR_MSGS:tn,HTTP_STATUS_CODES:Jh}=Ez,te=new Map,_z="delete",pc="insert",Ws="read",Zl="update",Xh="describe",sz=Zh.describeSchema.name,iz=Zh.describeTable.name,gz={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},b_e={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},I_e="catchup",w_e="handleGetJob",N_e="handleGetJobsByStartDate",dy={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},C_e=[Ys.createTable.name,Ys.createAttribute.name,Ys.dropTable.name,Ys.dropAttribute.name],Sz={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},se=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};te.set(LP.insert.name,new se(!1,[pc]));te.set(LP.update.name,new se(!1,[Zl]));te.set(LP.upsert.name,new se(!1,[pc,Zl]));te.set(ly.searchByConditions.name,new se(!1,[Ws]));te.set(ly.searchByHash.name,new se(!1,[Ws]));te.set(ly.searchByValue.name,new se(!1,[Ws]));te.set(ly.search.name,new se(!1,[Ws]));te.set(Ys.createSchema.name,new se(!0,[]));te.set(Ys.createTable.name,new se(!0,[]));te.set(Ys.createAttribute.name,new se(!1,[pc]));te.set(Ys.dropSchema.name,new se(!0,[]));te.set(Ys.dropTable.name,new se(!0,[]));te.set(Ys.dropAttribute.name,new se(!0,[]));te.set(Zh.describeSchema.name,new se(!1,[Ws]));te.set(Zh.describeTable.name,new se(!1,[Ws]));te.set(DP.deleteRecord.name,new se(!1,[_z]));te.set(eE.addUser.name,new se(!0,[]));te.set(eE.alterUser.name,new se(!0,[]));te.set(eE.dropUser.name,new se(!0,[]));te.set(eE.listUsersExternal.name,new se(!0,[]));te.set(uy.listRoles.name,new se(!0,[]));te.set(uy.addRole.name,new se(!0,[]));te.set(uy.alterRole.name,new se(!0,[]));te.set(uy.dropRole.name,new se(!0,[]));te.set(m_e.name,new se(!0,[]));te.set(p_e.name,new se(!0,[]));te.set(h_e.name,new se(!0,[]));te.set(E_e.name,new se(!0,[]));te.set(__e.name,new se(!0,[]));te.set(g_e.name,new se(!0,[]));te.set(MP.setRoutes.name,new se(!0,[]));te.set(MP.getRoutes.name,new se(!0,[]));te.set(MP.deleteRoutes.name,new se(!0,[]));te.set(uz.setConfiguration.name,new se(!0,[]));te.set(S_e.clusterStatus.name,new se(!0,[]));te.set(T_e.name,new se(!0,[]));te.set(DP.deleteFilesBefore.name,new se(!0,[]));te.set(DP.deleteAuditLogsBefore.name,new se(!0,[]));te.set(oz.restart.name,new se(!0,[]));te.set(oz.restartService.name,new se(!0,[]));te.set(d_e.name,new se(!0,[]));te.set(f_e.name,new se(!0,[Ws]));te.set(R_e.systemInformation.name,new se(!0,[]));te.set(uz.getConfiguration.name,new se(!0,[]));te.set(dz.readTransactionLog.name,new se(!0,[]));te.set(dz.deleteTransactionLogsBefore.name,new se(!0,[]));te.set(fz.installModules.name,new se(!0,[]));te.set(fz.auditModules.name,new se(!0,[]));te.set(mf.createCsr.name,new se(!0,[]));te.set(mf.signCertificate.name,new se(!0,[]));te.set(mf.listCertificates.name,new se(!0,[]));te.set(mf.addCertificate.name,new se(!0,[]));te.set(mf.removeCertificate.name,new se(!0,[]));te.set(mf.getKey.name,new se(!0,[]));te.set(mz.addNodeBack.name,new se(!0,[]));te.set(mz.removeNodeBack.name,new se(!0,[]));te.set(vP.getOp.name,new se(!1,[Ws]));te.set(vP.listMetricsOp.name,new se(!1,[Ws]));te.set(vP.describeMetricOp.name,new se(!1,[Ws]));te.set(UP.clear.name,new se(!0,[]));te.set(UP.get.name,new se(!0,[]));te.set(UP.set.name,new se(!0,[]));te.set(pz.installUsageLicenseOp.name,new se(!0,[]));te.set(pz.getUsageLicensesOp.name,new se(!0,[]));te.set(cz.createTokens.name,new se(!1,[]));te.set(cz.refreshOperationToken.name,new se(!1,[]));te.set(lz.login.name,new se(!1,[]));te.set(lz.logout.name,new se(!1,[]));te.set(Er.customFunctionsStatus.name,new se(!0,[]));te.set(Er.getCustomFunctions.name,new se(!0,[]));te.set(Er.getComponents.name,new se(!0,[]));te.set(Er.getComponentFile.name,new se(!0,[]));te.set(Er.setComponentFile.name,new se(!0,[]));te.set(Er.dropComponent.name,new se(!0,[]));te.set(Er.getCustomFunction.name,new se(!0,[]));te.set(Er.setCustomFunction.name,new se(!0,[]));te.set(Er.dropCustomFunction.name,new se(!0,[]));te.set(Er.addComponent.name,new se(!0,[]));te.set(Er.dropCustomFunctionProject.name,new se(!0,[]));te.set(Er.packageComponent.name,new se(!0,[]));te.set(Er.deployComponent.name,new se(!0,[]));te.set(Er.addSSHKey.name,new se(!0,[]));te.set(Er.updateSSHKey.name,new se(!0,[]));te.set(Er.deleteSSHKey.name,new se(!0,[]));te.set(Er.listSSHKeys.name,new se(!0,[]));te.set(Er.setSSHKnownHosts.name,new se(!0,[]));te.set(Er.getSSHKnownHosts.name,new se(!0,[]));te.set(eE.userInfo.name,new se(!1,[]));te.set(Zh.describeAll.name,new se(!1,[]));te.set(w_e,new se(!1,[]));te.set(N_e,new se(!0,[]));te.set(I_e,new se(!0,[]));te.set(dy.CSV_DATA_LOAD,new se(!1,[pc,Zl]));te.set(dy.CSV_URL_LOAD,new se(!1,[pc,Zl]));te.set(dy.CSV_FILE_LOAD,new se(!1,[pc,Zl]));te.set(dy.IMPORT_FROM_S3,new se(!1,[pc,Zl]));te.set(Sz.EXPORT_TO_S3,new se(!0,[]));te.set(Sz.EXPORT_LOCAL,new se(!0,[]));te.set(yn.VALID_SQL_OPS_ENUM.DELETE,new se(!1,[_z]));te.set(yn.VALID_SQL_OPS_ENUM.SELECT,new se(!1,[Ws]));te.set(yn.VALID_SQL_OPS_ENUM.INSERT,new se(!1,[pc]));te.set(yn.VALID_SQL_OPS_ENUM.UPDATE,new se(!1,[Zl]));yz.exports={verifyPerms:P_e,verifyPermsAst:O_e,verifyBulkLoadAttributePerms:D_e};function O_e(e,t,r){if(ca.isEmptyOrZeroLength(e))throw Cr.info("verify_perms_ast has an empty user parameter"),Vn(new Error);if(ca.isEmptyOrZeroLength(t))throw Cr.info("verify_perms_ast has an empty user parameter"),Vn(new Error);if(ca.isEmptyOrZeroLength(r))throw Cr.info("verify_perms_ast has a null operation parameter"),Vn(new Error);try{let n=new hz,s=new y_e(e),i=s.getSchemas(),a=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Cr.info("No schemas defined in verifyPermsAst(), will not continue."),Vn(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&gz[r])throw Vn(new Error,tn.DROP_SYSTEM,Jh.FORBIDDEN);if(c&&!l)return null;let u=az.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof A_e.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let f=0;f<i.length;f++){let m=s.getTablesBySchemaName(i[f]);m&&a.set(i[f],m)}let d=Tz(t,r,a,n);return d||(a.forEach((f,m)=>{for(let p=0;p<f.length;p++){let h=s.getAttributesBySchemaTableName(m,f[p]),E=BP(t.role.permission,m,f[p]);xP(h,E,r,f[p],m,n)}}),n.getPermsResponse())}catch(n){throw Vn(n)}}o(O_e,"verifyPermsAst");function P_e(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Cr.info("null required parameter in verifyPerms"),Vn(new Error,tn.DEFAULT_INVALID_REQUEST,Jh.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,a=new Map;s&&i&&a.set(s,[i]);let c=new hz;if(ca.isEmptyOrZeroLength(e.hdb_user?.role)||ca.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Cr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(tn.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=a.has(yn.SYSTEM_SCHEMA_NAME)||s===yn.SYSTEM_SCHEMA_NAME;if(l&&d&&b_e[e.operation]&&(i===yn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===yn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===yn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&gz[r])throw Vn(new Error,tn.DROP_SYSTEM,Jh.FORBIDDEN);if(l&&!d||u===!0&&(r===Ys.createSchema.name||r===Ys.dropSchema.name))return null;if(C_e.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=az.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===sz||r===iz)&&!f.super_user){if(s===yn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(tn.SCHEMA_PERM_ERROR(s));if(r===sz&&(!f[s]||!f[s][Xh]))return c.handleInvalidItem(tn.SCHEMA_NOT_FOUND(s));if(r===iz&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][Xh]))return c.handleInvalidItem(tn.TABLE_NOT_FOUND(s,i))}let m=Tz(e.hdb_user,r,a,c,n);if(m)return m;if(te.get(r)&&te.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&yn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],g=f[s].tables[i];g[yn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(S=>S[yn.PERMS_CRUD_ENUM.READ]).forEach(S=>{E.push(S.attribute_name)}):E=global.hdb_schema[s][i].attributes.map(A=>A.attribute),e.get_attributes=E)}let p=L_e(e),h=BP(e.hdb_user?.role?.permission,s,i);return xP(p,h,r,i,s,c,n),c.getPermsResponse()}o(P_e,"verifyPerms");function Tz(e,t,r,n,s){if(ca.arrayHasEmptyValues([e,t,r]))throw Cr.info("hasPermissions has an invalid parameter"),Vn(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||te.get(t).requires_su))return null;if(!te.get(t))throw Cr.info(`operation ${t} not found.`),Vn(new Error,tn.OP_NOT_FOUND(t),Jh.BAD_REQUEST);if(te.get(t)&&te.get(t).requires_su)return Cr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(tn.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!a[l]||a[l][Xh]===!1){n.addInvalidItem(tn.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(tn.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=a[l].tables[d];if(!f||f[Xh]===!1)n.addInvalidItem(tn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=te.get(t).perms;!ca.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],g=f[E];(g==null||g===!1)&&(Cr.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=tn.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Cr.error(p),Cr.error(m),Vn(Ez.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}o(Tz,"hasPermissions");function xP(e,t,r,n,s,i,a){if(!e||!t)throw Cr.info("no attributes specified in checkAttributePerms."),Vn(new Error);let c=te.get(r).perms;if(!c||c==="")throw Cr.info(`no permissions found for ${r} in checkAttributePerms().`),Vn(new Error);if(ca.isEmptyOrZeroLength(t))return Cr.info("No role permissions set (this is OK)."),null;a&&c.includes(a)&&(c=[a]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[Xh]===!1){i.addInvalidItem(tn.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(yn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Ws)throw Vn(new Error,tn.SYSTEM_TIMESTAMP_PERMS_ERR,Jh.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(tn.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}o(xP,"checkAttributePerms");function L_e(e){let t=new Set;try{if(e.action)return t;if(e.operation===yn.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){Cr.info(r)}return t}o(L_e,"getRecordAttributes");function BP(e,t,r){let n=new Map;if(ca.isEmpty(e))return Cr.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{Cr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}o(BP,"getAttributePermissions");function D_e(e,t,r,n,s,i,a){let c=new Set(i),l=BP(e,n,s);xP(c,l,t,s,n,a,r)}o(D_e,"verifyBulkLoadAttributePerms")});var py=M((dFe,wz)=>{"use strict";wz.exports={evaluateSQL:K_e,processAST:Iz,convertSQLToAST:bz,checkASTPermissions:Az};var M_e=Bn(),Rz=require("util"),v_e=Rz.callbackify(M_e.insert),U_e=fn().search,x_e=PG().update,B_e=Rz.callbackify(x_e),F_e=DG().convertDelete,hc=require("alasql"),k_e=fy(),my=Q(),H_e=Dg(),q_e=oe(),tE=(H(),D(W)),{hdbErrors:G_e,handleHDBError:FP}=_e(),{HTTP_STATUS_CODES:kP}=G_e;H_e(hc);var $_e=403,V_e="There was a problem performing this insert. Please check the logs and try again.",HP=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function K_e(e,t){let r=e.parsed_sql_object;if(!r){r=bz(e.sql);let n,s=r.ast.statements[0];if(s instanceof hc.yy.Insert?n=s.into.databaseid:s instanceof hc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof hc.yy.Update||s instanceof hc.yy.Delete?n=s.table.databaseid:my.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof hc.yy.Select)&&q_e.isEmptyOrZeroLength(n))return t("No schema specified",null)}Iz(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(K_e,"evaluateSQL");function Az(e,t){let r;try{r=k_e.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(Az,"checkASTPermissions");function bz(e){let t=new HP;if(!e)throw FP(new Error,"The 'sql' parameter is missing from the request body",kP.BAD_REQUEST);try{let r=e.trim(),n=hc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
39
|
-
`);throw n[1]?FP(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,kP.BAD_REQUEST):FP(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",kP.BAD_REQUEST)}return t}o(bz,"convertSQLToAST");function Iz(e,t,r){try{let n=Y_e;if(!e.bypass_auth&&!t.permissions_checked){let i=Az(e,t);if(i&&i.length>0)return r($_e,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case tE.VALID_SQL_OPS_ENUM.SELECT:n=U_e,s=t.ast.statements[0];break;case tE.VALID_SQL_OPS_ENUM.INSERT:n=W_e;break;case tE.VALID_SQL_OPS_ENUM.UPDATE:n=B_e;break;case tE.VALID_SQL_OPS_ENUM.DELETE:n=F_e;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,a)=>{if(i){r(i);return}r(null,a)})}catch(n){return r(n)}}o(Iz,"processAST");function Y_e(e,t){my.info(e),t("unknown sql statement")}o(Y_e,"nullFunction");function W_e({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(a=>a.columnid);try{s.records=z_e(i,e.values)}catch(a){return r(a)}v_e(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){my.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(W_e,"convertInsert");function z_e(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]]=hc.compile(`SELECT ${s.toString()} AS [${tE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw my.error(r),new Error(V_e)}}o(z_e,"createDataObjects")});var YP=M((hFe,Pz)=>{var gy=require("clone"),Sy=ft(),j_e=oe(),Ey=(H(),D(W)),mFe=Q(),qP=require("fs"),$P=require("joi"),{string:_y}=$P.types(),{hdbErrors:Q_e,handleHDBError:hy}=_e(),{HDB_ERROR_MSGS:pFe,HTTP_STATUS_CODES:GP}=Q_e,{commonValidators:pf}=qi(),Nz=" is required",J_e=["insert","update","upsert"],VP={database:{presence:!1,format:pf.schema_format,length:pf.schema_length},schema:{presence:!1,format:pf.schema_format,length:pf.schema_length},table:{presence:!0,format:pf.schema_format,length:pf.schema_length},action:{inclusion:{within:J_e,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},X_e={schema:_y.required(),table:_y.required(),action:_y.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Z_e,AWS_SECRET:ege,AWS_BUCKET:tge,AWS_FILE_KEY:rge,REGION:nge}=Ey.S3_BUCKET_AUTH_KEYS,sge={s3:{presence:!0},[`s3.${Z_e}`]:{presence:!0,type:"String"},[`s3.${ege}`]:{presence:!0,type:"String"},[`s3.${tge}`]:{presence:!0,type:"String"},[`s3.${rge}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${nge}`]:{presence:!0,type:"String"}},Cz=gy(VP);Cz.data.presence={message:Nz};var Oz=gy(VP);Oz.file_path.presence={message:Nz};var ige=Object.assign(gy(VP),sge),KP=gy(X_e);KP.csv_url=_y.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();KP.passthrough_headers=$P.object();function oge(e){let t=Sy.validateObject(e,Cz);return Ty(e,t)}o(oge,"dataObject");function age(e){let t=Sy.validateBySchema(e,$P.object(KP));return Ty(e,t)}o(age,"urlObject");function cge(e){let t=Sy.validateObject(e,Oz);return Ty(e,t)}o(cge,"fileObject");function lge(e){let t=Sy.validateObject(e,ige);return Ty(e,t)}o(lge,"s3FileObject");function Ty(e,t){if(!t){let r=j_e.checkGlobalSchemaTable(e.schema,e.table);if(r)return hy(new Error,r,GP.BAD_REQUEST);if(e.operation===Ey.OPERATIONS_ENUM.CSV_FILE_LOAD)try{qP.accessSync(e.file_path,qP.constants.R_OK|qP.constants.F_OK)}catch(n){return n.code===Ey.NODE_ERROR_CODES.ENOENT?hy(n,`No such file or directory ${n.path}`,GP.BAD_REQUEST):n.code===Ey.NODE_ERROR_CODES.EACCES?hy(n,`Permission denied ${n.path}`,GP.BAD_REQUEST):hy(n)}}return t}o(Ty,"postValidateChecks");Pz.exports={dataObject:oge,urlObject:age,fileObject:cge,s3FileObject:lge}});var WP=M((_Fe,Lz)=>{"use strict";var rE=Q(),yy=(H(),D(W));async function uge(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===yy.OPERATIONS_ENUM.INSERT||t.operation===yy.OPERATIONS_ENUM.UPDATE||t.operation===yy.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===yy.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(rE.info(i.message),i):i.http_resp_msg?(rE.error(`Error calling operation: ${e.name}`),rE.error(i.http_resp_msg),i):(rE.error(`Error calling operation: ${e.name}`),rE.error(i),i)}}o(uge,"callOperationFunctionAsAwait");Lz.exports={callOperationFunctionAsAwait:uge}});var zP=M((SFe,Mz)=>{"use strict";var{S3:dge,GetObjectCommand:fge}=require("@aws-sdk/client-s3");Mz.exports={getFileStreamFromS3:mge,getS3AuthObj:Dz};async function mge(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await Dz(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new fge(r))).Body}o(mge,"getFileStreamFromS3");function Dz(e,t,r){return new dge({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(Dz,"getS3AuthObj")});var Uz=M((yFe,vz)=>{"use strict";var jP=class{static{o(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,a,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=a,this.role_perms=c}},QP=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};vz.exports={BulkLoadFileObject:jP,BulkLoadDataObject:QP}});var XP=M((AFe,xz)=>{"use strict";var JP=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};xz.exports=JP});var sL=M((OFe,Zz)=>{"use strict";var Ry=Bn(),by=YP(),pge=require("needle"),Ii=(H(),D(W)),IFe=wt(),hf=oe(),{handleHDBError:Jt,hdbErrors:Kz}=_e(),{HTTP_STATUS_CODES:rn,HDB_ERROR_MSGS:Or,CHECK_LOGS_WRAPPER:tu}=Kz,Ef=Q(),ZP=require("papaparse");hf.promisifyPapaParse();var wi=require("fs-extra"),hge=require("path"),{chain:Bz}=require("stream-chain"),Fz=require("stream-json/streamers/StreamArray"),kz=require("stream-json/utils/Batch"),Hz=require("stream-chain/utils/comp"),{finished:qz}=require("stream"),Ege=ue(),Yz=WP(),_ge=zP(),{BulkLoadFileObject:tL,BulkLoadDataObject:gge}=Uz(),rL=PP(),{verifyBulkLoadAttributePerms:Wz}=fy(),wFe=XP(),NFe=sr(),CFe=Wi(),{databases:Sge}=(Oe(),D(mt)),{coerceType:Tge}=(eg(),D(sq)),Gz="No records parsed from csv file.",eu=`${Ege.get("HDB_ROOT")}/tmp`,{schemaRegex:yge}=qi(),$z=1024*1024*2,Vz=5e3,Rge={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};Zz.exports={csvDataLoad:Age,csvURLLoad:bge,csvFileLoad:Ige,importFromS3:wge};async function Age(e,t){let r=by.dataObject(e);if(r)throw Jt(r,r.message,rn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=Qz(e.schema,e.table),i=ZP.parse(e.data,{header:!0,skipEmptyLines:!0,transform:eL.bind(null,s),dynamicTyping:!1}),a=new rL;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&Wz(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,a);let c=a.getPermsResponse();if(c)throw Jt(new Error,c,rn.BAD_REQUEST,void 0,void 0,!0);let l=new gge(e.action,e.schema,e.table,i.data);return n=await Yz.callOperationFunctionAsAwait(Jz,l,null),n.message===Gz?Gz:Xz(n.records,n.number_written)}catch(s){throw ru(s)}}o(Age,"csvDataLoad");async function bge(e){let t=by.urlObject(e);if(t)throw Jt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${eu}/${r}`;try{await Nge(e,r)}catch(s){throw Ef.error(Or.DOWNLOAD_FILE_ERR(r)+" - "+s),Jt(s,tu(Or.DOWNLOAD_FILE_ERR(r)))}try{let s=new tL(this.job_operation_function.name,e.action,e.schema,e.table,n,Ii.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await nL(s);return await Ay(n),i}catch(s){throw await Ay(n),ru(s)}}o(bge,"csvURLLoad");async function Ige(e){let t=by.fileObject(e);if(t)throw Jt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r=new tL(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Ii.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await nL(r)}catch(n){throw ru(n)}}o(Ige,"csvFileLoad");async function wge(e){let t=by.s3FileObject(e);if(t)throw Jt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=hge.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${eu}/${s}`;let i=new tL(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await Cge(s,e);let a=await nL(i);return await Ay(r),a}catch(n){throw await Ay(r),ru(n)}}o(wge,"importFromS3");async function Nge(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await pge("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 Jt(n,s,n.statusCode,Ii.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Pge(r,e.csv_url),await Oge(t,r.raw)}o(Nge,"downloadCSVFile");async function Cge(e,t){try{let r=`${eu}/${e}`;await wi.mkdirp(eu),await wi.writeFile(`${eu}/${e}`,"",{flag:"a+"});let n=await wi.createWriteStream(r),s=await _ge.getFileStreamFromS3(t);await new Promise((i,a)=>{s.on("error",function(c){a(c)}),s.pipe(n).on("error",function(c){a(c)}).on("close",function(){Ef.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Ef.error(Or.S3_DOWNLOAD_ERR+" - "+r),Jt(r,tu(Or.S3_DOWNLOAD_ERR))}}o(Cge,"downloadFileFromS3");async function Oge(e,t){try{await wi.mkdirp(eu),await wi.writeFile(`${eu}/${e}`,t)}catch(r){throw Ef.error(Or.WRITE_TEMP_FILE_ERR),Jt(r,tu(Or.DEFAULT_BULK_LOAD_ERR))}}o(Oge,"writeFileToTempFolder");async function Ay(e){if(e)try{await wi.access(e),await wi.unlink(e)}catch{Ef.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(Ay,"deleteTempFile");function Pge(e,t){if(e.statusCode!==Kz.HTTP_STATUS_CODES.OK)throw Jt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,rn.BAD_REQUEST);if(!Rge[e.headers["content-type"]])throw Jt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,rn.BAD_REQUEST);if(!e.raw)throw Jt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,rn.BAD_REQUEST)}o(Pge,"validateURLResponse");async function nL(e){try{let t;switch(e.file_type){case Ii.VALID_S3_FILE_TYPES.CSV:t=await Lge(e);break;case Ii.VALID_S3_FILE_TYPES.JSON:t=await Dge(e);break;default:throw Jt(new Error,Or.DEFAULT_BULK_LOAD_ERR,rn.BAD_REQUEST,Ii.LOG_LEVELS.ERROR,Or.INVALID_FILE_EXT_ERR(e))}return Xz(t.records,t.number_written)}catch(t){throw ru(t)}}o(nL,"fileLoad");async function zz(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let a={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await Ry.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&Wz(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Jt(c);r(l)}}o(zz,"validateChunk");async function jz(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;hf.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!hf.isEmpty(c)&&!hf.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),a=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await Yz.callOperationFunctionAsAwait(Jz,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Jt(c,tu(Or.INSERT_CSV_ERR),rn.INTERNAL_SERVER_ERROR,Ii.LOG_LEVELS.ERROR,Or.INSERT_CSV_ERR+" - "+c);r(l)}}o(jz,"insertChunk");async function Lge(e){let t={records:0,number_written:0},r=Qz(e.schema,e.table);try{let n=new rL,s=wi.createReadStream(e.file_path,{highWaterMark:$z});s.setEncoding("utf8"),await ZP.parsePromise(s,zz.bind(null,e,n),eL.bind(null,r));let i=n.getPermsResponse();if(i)throw Jt(new Error,i,rn.BAD_REQUEST);return s=wi.createReadStream(e.file_path,{highWaterMark:$z}),s.setEncoding("utf8"),await ZP.parsePromise(s,jz.bind(null,e,t),eL.bind(null,r)),s.destroy(),t}catch(n){throw Jt(n,tu(Or.PAPA_PARSE_ERR),rn.INTERNAL_SERVER_ERROR,Ii.LOG_LEVELS.ERROR,Or.PAPA_PARSE_ERR+n)}}o(Lge,"callPapaParse");function Qz(e,t){let r=Sge[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>Tge(i,s));return n}o(Qz,"createTransformMap");function eL(e,t,r){let n=e.get(r);return n?n(t):hf.autoCast(t)}o(eL,"typeFunction");async function Dge(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new rL,s=Bz([wi.createReadStream(e.file_path,{encoding:"utf-8"}),Fz.withParser(),c=>c.value,new kz({batchSize:Vz}),Hz(async c=>{await zz(e,n,r,c)})]);await new Promise((c,l)=>{qz(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Jt(new Error,i,rn.BAD_REQUEST);let a=Bz([wi.createReadStream(e.file_path,{encoding:"utf-8"}),Fz.withParser(),c=>c.value,new kz({batchSize:Vz}),Hz(async c=>{await jz(e,t,r,c)})]);return await new Promise((c,l)=>{qz(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw Jt(n,tu(Or.INSERT_JSON_ERR),rn.INTERNAL_SERVER_ERROR,Ii.LOG_LEVELS.ERROR,Or.INSERT_JSON_ERR+n)}}o(Dge,"insertJson");async function Jz(e){let t={};try{e.data&&e.data.length>0&&Mge(e.data[0])?t=await vge(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Ef.info(t.message))}catch(r){throw ru(r)}return t}o(Jz,"callBulkFileLoad");function Mge(e){let t=Object.keys(e);for(let r of t)if(!yge.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(Mge,"validateColumnNames");async function vge(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=Ry.insert;break;case"update":i=Ry.update;break;case"upsert":i=Ry.upsert;break;default:throw Jt(new Error,Or.INVALID_ACTION_PARAM_ERR(n),rn.BAD_REQUEST,Ii.LOG_LEVELS.ERROR,Or.INVALID_ACTION_PARAM_ERR(n))}try{let a=await i(s),c;switch(n){case"insert":c=a.inserted_hashes;break;case"update":c=a.update_hashes;break;case"upsert":c=a.upserted_hashes;break;default:break}if(Array.isArray(a.skipped_hashes)&&a.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)a.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=hf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw ru(a)}}o(vge,"bulkFileLoad");function Xz(e,t){return`successfully loaded ${t} of ${e} records`}o(Xz,"buildResponseMsg");function ru(e){return Jt(e,tu(Or.DEFAULT_BULK_LOAD_ERR),rn.INTERNAL_SERVER_ERROR,Ii.LOG_LEVELS.ERROR,Or.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(ru,"buildTopLevelErrMsg")});var aL=M((LFe,aj)=>{"use strict";var oL=fn(),Uge=zP(),{AsyncParser:xge}=require("json2csv"),Iy=require("stream"),Es=oe(),iL=require("fs-extra"),Bge=require("path"),zs=Q(),{promisify:rj}=require("util"),nE=oe(),{handleHDBError:_r,hdbErrors:Fge}=_e(),{HDB_ERROR_MSGS:Kn,HTTP_STATUS_CODES:gr}=Fge,{streamAsJSON:kge}=(KA(),D(yU)),{Upload:Hge}=require("@aws-sdk/lib-storage"),{toCsvStream:qge}=(Po(),D(LU)),ej=["search_by_value","search_by_hash","sql","search_by_conditions"],tj=["json","csv"],nj="json",sj="csv",Gge="Successfully exported JSON locally.",$ge="Successfully exported CSV locally.",Vge=1e3,Kge=oL.searchByHash,Yge=oL.searchByValue,Wge=rj(Iy.finished);aj.exports={export_to_s3:Jge,export_local:zge};async function zge(e){zs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=ij(e);if(!Es.isEmpty(t))throw zs.error(t),_r(new Error,t,gr.BAD_REQUEST,void 0,void 0,!0);if(Es.isEmpty(e.path))throw zs.error(Kn.MISSING_VALUE("path")),_r(new Error,Kn.MISSING_VALUE("path"),gr.BAD_REQUEST,void 0,void 0,!0);let r=(Es.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Bge.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Es.buildFolderPath(e.path,r);await jge(e.path);let s=await oj(e);return await Qge(n,e.format,s)}o(zge,"export_local");async function jge(e){if(zs.trace("in confirmPath"),Es.isEmptyOrZeroLength(e))throw _r(new Error,`Invalid path: ${e}`,gr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await iL.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),_r(new Error,n,gr.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),_r(new Error,r,gr.BAD_REQUEST,void 0,void 0,!0)}return!0}o(jge,"confirmPath");async function Qge(e,t,r){if(zs.trace("in saveToLocal"),nE.isEmptyOrZeroLength(e))throw _r(new Error,Kn.INVALID_VALUE("file_path"),gr.BAD_REQUEST,void 0,void 0,!0);if(nE.isEmptyOrZeroLength(t))throw _r(new Error,Kn.INVALID_VALUE("Source format"),gr.BAD_REQUEST,void 0,void 0,!0);if(nE.isEmpty(r))throw _r(new Error,Kn.NOT_FOUND("Data"),gr.BAD_REQUEST,void 0,void 0,!0);if(t===nj){let n=iL.createWriteStream(e);return kge(r).pipe(n),await Wge(n),{message:Gge,path:e}}else if(t===sj){let n=iL.createWriteStream(e),s=Iy.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new xge(i,c).fromInput(s).toOutput(n).promise(!1),{message:$ge,path:e}}throw _r(new Error,Kn.INVALID_VALUE("format"),gr.BAD_REQUEST)}o(Qge,"saveToLocal");async function Jge(e){if(!e.s3||Object.keys(e.s3).length===0)throw _r(new Error,Kn.MISSING_VALUE("S3 object"),gr.BAD_REQUEST);if(Es.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw _r(new Error,Kn.MISSING_VALUE("aws_access_key_id"),gr.BAD_REQUEST);if(Es.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw _r(new Error,Kn.MISSING_VALUE("aws_secret_access_key"),gr.BAD_REQUEST);if(Es.isEmptyOrZeroLength(e.s3.bucket))throw _r(new Error,Kn.MISSING_VALUE("bucket"),gr.BAD_REQUEST);if(Es.isEmptyOrZeroLength(e.s3.key))throw _r(new Error,Kn.MISSING_VALUE("key"),gr.BAD_REQUEST);if(Es.isEmptyOrZeroLength(e.s3.region))throw _r(new Error,Kn.MISSING_VALUE("region"),gr.BAD_REQUEST);let t=ij(e);if(!Es.isEmpty(t))throw _r(new Error,t,gr.BAD_REQUEST);zs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await oj(e)}catch(l){throw zs.error(l),l}let n,s=await Uge.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new Iy.PassThrough;if(e.format===sj){i=e.s3.key+".csv";let l=qge(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===nj){i=e.s3.key+".json";let l=new Iy.Readable;l.pipe(a),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%Vge===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw _r(new Error,Kn.INVALID_VALUE("format"),gr.BAD_REQUEST);return new Hge({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(Jge,"export_to_s3");function ij(e){if(zs.trace("in exportCoreValidation"),Es.isEmpty(e.format))return"format missing";if(tj.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${tj.join(", ")}`;let t=e.search_operation.operation;if(Es.isEmpty(t))return"search_operation.operation missing";if(ej.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${ej.join(", ")}`}o(ij,"exportCoreValidation");async function oj(e){zs.trace("in getRecords");let t,r;if(nE.isEmpty(e.search_operation)||nE.isEmptyOrZeroLength(e.search_operation.operation))throw _r(new Error,Kn.INVALID_VALUE("Search operation"),gr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Yge;break;case"search_by_hash":t=Kge;break;case"search_by_conditions":t=oL.searchByConditions;break;case"sql":{let n=py();t=rj(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,zs.error(r),_r(new Error,r,gr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}o(oj,"getRecords")});var lj=M((MFe,cj)=>{"use strict";var cL=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};cj.exports=cL});var fj=M((UFe,dj)=>{"use strict";var Xge=(H(),D(W)),uj=require("moment"),Zge=require("uuid").v4,lL=class{static{o(this,"JobObject")}constructor(){this.id=Zge(),this.type=void 0,this.start_datetime=uj().valueOf(),this.created_datetime=uj().valueOf(),this.end_datetime=void 0,this.status=Xge.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};dj.exports=lL});var Ny=M((BFe,Tj)=>{"use strict";var eSe=require("uuid").v4,_j=Bn(),gj=fn(),tSe=di(),rSe=Ju(),nSe=lj(),Ct=(H(),D(W)),sSe=fj(),iSe=mS(),Ni=Q(),oSe=fm(),_f=oe(),{promisify:aSe}=require("util"),nu=require("moment"),cSe=py(),wy=YP(),mj=iw(),{deleteTransactionLogsBeforeValidator:lSe}=nP(),{handleHDBError:pj,hdbErrors:uSe,ClientError:dSe}=_e(),{HTTP_STATUS_CODES:hj}=uSe,Ej=gj.searchByValue,fSe=gj.searchByHash,mSe=_j.insert,pSe=aSe(cSe.evaluateSQL),hSe=_j.update;Tj.exports={addJob:gSe,updateJob:TSe,handleGetJob:ESe,handleGetJobsByStartDate:_Se,getJobById:Sj};async function ESe(e){if(e.id===void 0)throw new dSe("'id' is required");let t=await Sj(e.id);return _f.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}o(ESe,"handleGetJob");async function _Se(e){try{let t=await SSe(e);if(Ni.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=nu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=nu(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 Ni.error(r),new Error(r)}}o(_Se,"handleGetJobsByStartDate");async function gSe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||_f.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Ni.info(d),t.error=d,t}if(!Ct.JOB_TYPE_ENUM[e.operation])return Ni.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ct.OPERATIONS_ENUM.CSV_FILE_LOAD:n=wy.fileObject(e);break;case Ct.OPERATIONS_ENUM.CSV_URL_LOAD:n=wy.urlObject(e);break;case Ct.OPERATIONS_ENUM.CSV_DATA_LOAD:n=wy.dataObject(e);break;case Ct.OPERATIONS_ENUM.IMPORT_FROM_S3:n=wy.s3FileObject(e);break;case Ct.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ct.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=mj(e,"date");break;case Ct.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=mj(e,"timestamp");break;case Ct.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=lSe(e);break;case Ct.OPERATIONS_ENUM.RESTART_SERVICE:if(Ct.HDB_PROCESS_SERVICES[e.service]===void 0)throw pj(new Error,"Invalid service",hj.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw pj(n,n.message,hj.BAD_REQUEST,void 0,void 0,!0);let s=new sSe;s.type=e.operation===Ct.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ct.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new tSe(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await Ej(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ni.error(f),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){s.id=eSe();try{a=await Ej(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ni.error(f),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return Ni.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new oSe(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await mSe(l)}catch(d){return Ni.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,Ni.trace(d)}return t}o(gSe,"addJob");async function SSe(e){let t=nu(e.from_date,nu.ISO_8601),r=nu(e.to_date,nu.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 nSe(n,e.hdb_user);try{return await pSe(s)}catch(i){throw Ni.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.")}}o(SSe,"getJobsInDateRange");async function Sj(e){if(_f.isEmptyOrZeroLength(e))return _f.errorizeMessage("Invalid job ID specified.");let t=new rSe(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await fSe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Ni.error(n),_f.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o(Sj,"getJobById");async function TSe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(_f.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ct.JOB_STATUS_ENUM.COMPLETE||e.status===Ct.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=nu().valueOf());let t=new iSe(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await hSe(t),r}o(TSe,"updateJob")});var Cj=M((kFe,Nj)=>{"use strict";var yj=oe(),Pr=(H(),D(W)),ySe=require("moment"),Cy=sL(),sE=Q(),Rj=Ny(),Aj=aL(),bj=gl(),Ij=nt(),RSe=ey(),ASe=cf(),{parentPort:bSe,isMainThread:wj}=require("worker_threads"),{onMessageByType:ISe}=nt(),uL=class{static{o(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function wSe(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(yj.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(yj.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Pr.JOB_TYPE_ENUM.csv_file_load:await so(e,Cy.csvFileLoad);break;case Pr.JOB_TYPE_ENUM.csv_url_load:await so(e,Cy.csvURLLoad);break;case Pr.JOB_TYPE_ENUM.csv_data_load:await so(e,Cy.csvDataLoad);break;case Pr.JOB_TYPE_ENUM.import_from_s3:await so(e,Cy.importFromS3);break;case Pr.JOB_TYPE_ENUM.empty_trash:break;case Pr.JOB_TYPE_ENUM.export_local:await so(e,Aj.export_local);break;case Pr.JOB_TYPE_ENUM.export_to_s3:await so(e,Aj.export_to_s3);break;case Pr.JOB_TYPE_ENUM.delete_files_before:case Pr.JOB_TYPE_ENUM.delete_records_before:await so(e,bj.deleteFilesBefore);break;case Pr.JOB_TYPE_ENUM.delete_audit_logs_before:await so(e,bj.deleteAuditLogsBefore);break;case Pr.JOB_TYPE_ENUM.delete_transaction_logs_before:await so(e,RSe.deleteTransactionLogsBefore);break;case Pr.JOB_TYPE_ENUM.restart_service:return await so(e,ASe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o(wSe,"parseMessage");async function so(e,t){try{e.job.status=Pr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=ySe().valueOf(),await Rj.updateJob(e.job),await NSe(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):sE.error(`There was an error running ${t.name} job with id ${e.job.id}`),sE.error(n),e.job.message=n,e.job.status=Pr.JOB_STATUS_ENUM.ERROR;try{await Rj.updateJob(e.job)}catch(s){throw sE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(so,"runJob");async function NSe(e){sE.trace("launching job thread:",e),wj?Ij.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Pr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):bSe.postMessage({type:Pr.ITC_EVENT_TYPES.START_JOB,jobId:e})}o(NSe,"launchJobThread");wj&&ISe(Pr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{Ij.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Pr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){sE.error(r)}});Nj.exports={parseMessage:wSe,RunnerMessage:uL}});var Pj=M((qFe,Oj)=>{"use strict";var CSe=oe(),dL=ue(),Ec=(H(),D(W)),OSe=wt(),PSe=sr(),io=Q(),LSe=XP(),DSe=Wi();dL.initSync();Oj.exports={postOperationHandler:vSe,sendOperationTransaction:iE};async function iE(e,t,r,n){if(e.schema===Ec.SYSTEM_SCHEMA_NAME)return;let s=MSe(e,t,r);s&&(io.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await PSe.publishToStream(`${OSe.SUBJECT_PREFIXES.TXN}.${e.schema}`,DSe.createNatsTableStreamName(e.schema,e.table),n,s))}o(iE,"sendOperationTransaction");function MSe(e,t,r){if(CSe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Ec.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(MSe,"convertCRUDOperationToTransaction");async function vSe(e,t,r){if(!dL.get(Ec.CONFIG_PARAMS.CLUSTERING_ENABLED))return;io.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=dL.get(Ec.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new LSe(t.txn_time,n,s);switch(e.operation){case Ec.OPERATIONS_ENUM.INSERT:try{await iE(e,t.inserted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for insert."),io.error(a)}break;case Ec.OPERATIONS_ENUM.DELETE:try{await iE(e,t.deleted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for delete."),io.error(a)}break;case Ec.OPERATIONS_ENUM.UPDATE:try{await iE(e,t.update_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for update."),io.error(a)}break;case Ec.OPERATIONS_ENUM.UPSERT:try{await iE(e,t.upserted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for upsert."),io.error(a)}break;default:break}return t}o(vSe,"postOperationHandler")});var Z,Lj=ie(()=>{Z=class{static{o(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var jT={};Ie(jT,{chooseOperation:()=>Qj,executeJob:()=>js,getOperationFunction:()=>Jj,operation:()=>TL,processLocalTransaction:()=>jj});async function jj(e,t){try{if(e.body.operation!=="read_log"&&(lE.default.log_level===Jf.INFO||lE.default.log_level===Jf.DEBUG||lE.default.log_level===Jf.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:a,...c}=e.body;Rn.info(c)}}catch(n){Rn.error(n)}let r=await Wj.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return FSe[e.body.operation]&&$j.default.setSchemaDataToGlobal(n=>{n&&Rn.error(n)}),r}function Qj(e){let t;try{t=Jj(e)}catch(s){throw Rn.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=Py.default.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let a=Py.default.checkASTPermissions(e,i);if(a)throw Rn.error(`${Dj.FORBIDDEN} from operation ${e.operation}`),Rn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,Qs.handleHDBError)(new Error,a,Qs.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 a=Gj.default.verifyPerms(i,s);if(a)throw Rn.error(`${Dj.FORBIDDEN} from operation ${e.operation}`),Rn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,Qs.handleHDBError)(new Error,a,Qs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,Qs.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function Jj(e){if(Rn.trace(`getOperationFunction with operation: ${e.operation}`),Mj.has(e.operation))return Mj.get(e.operation);throw(0,Qs.handleHDBError)(new Error,Qs.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Qs.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function TL(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=Qj(e);return jj({body:e},n)}async function kSe(e){Rn.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[TA]=!0;let a;switch(i.operation){case V.INSERT:a=await iu.default.insert(i);break;case V.UPDATE:a=await iu.default.update(i);break;case V.UPSERT:a=await iu.default.upsert(i);break;case V.DELETE:a=await Tf.default.deleteRecord(i);break;default:Rn.warn("invalid operation in catchup");break}await USe.postOperationHandler(i,a,e)}catch(a){Rn.info("Invalid operation in transaction"),Rn.error(a)}}async function js(e){(0,Yj.transformReq)(e);let t,r;try{if(r=await Ly.default.addJob(e),r){t=r.createdJob,Rn.info("addJob result",r);let n=new hL.default.RunnerMessage(t,e);return{message:await hL.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 Rn.error(i),(0,Qs.handleHDBError)(n,i)}}function HSe(){let e=new Map;return e.set(V.INSERT,new Z(iu.default.insert)),e.set(V.UPDATE,new Z(iu.default.update)),e.set(V.UPSERT,new Z(iu.default.upsert)),e.set(V.SEARCH_BY_CONDITIONS,new Z(Sf.default.searchByConditions)),e.set(V.SEARCH_BY_HASH,new Z(Sf.default.searchByHash)),e.set(V.SEARCH_BY_ID,new Z(Sf.default.searchByHash)),e.set(V.SEARCH_BY_VALUE,new Z(Sf.default.searchByValue)),e.set(V.SEARCH,new Z(xSe)),e.set(V.SQL,new Z(BSe)),e.set(V.CSV_DATA_LOAD,new Z(js,oE.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new Z(js,oE.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new Z(js,oE.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new Z(js,oE.default.importFromS3)),e.set(V.CREATE_SCHEMA,new Z(oo.default.createSchema)),e.set(V.CREATE_DATABASE,new Z(oo.default.createSchema)),e.set(V.CREATE_TABLE,new Z(oo.default.createTable)),e.set(V.CREATE_ATTRIBUTE,new Z(oo.default.createAttribute)),e.set(V.DROP_SCHEMA,new Z(oo.default.dropSchema)),e.set(V.DROP_DATABASE,new Z(oo.default.dropSchema)),e.set(V.DROP_TABLE,new Z(oo.default.dropTable)),e.set(V.DROP_ATTRIBUTE,new Z(oo.default.dropAttribute)),e.set(V.DESCRIBE_SCHEMA,new Z(aE.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new Z(aE.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new Z(aE.default.describeTable)),e.set(V.DESCRIBE_ALL,new Z(aE.default.describeAll)),e.set(V.DELETE,new Z(Tf.default.deleteRecord)),e.set(V.ADD_USER,new Z(gf.default.addUser)),e.set(V.ALTER_USER,new Z(gf.default.alterUser)),e.set(V.DROP_USER,new Z(gf.default.dropUser)),e.set(V.LIST_USERS,new Z(gf.default.listUsersExternal)),e.set(V.LIST_ROLES,new Z(cE.default.listRoles)),e.set(V.ADD_ROLE,new Z(cE.default.addRole)),e.set(V.ALTER_ROLE,new Z(cE.default.alterRole)),e.set(V.DROP_ROLE,new Z(cE.default.dropRole)),e.set(V.USER_INFO,new Z(gf.default.userInfo)),e.set(V.READ_LOG,new Z(Uj.default)),e.set(V.ADD_NODE,new Z(xj.default)),e.set(V.UPDATE_NODE,new Z(fL.default)),e.set(V.SET_NODE_REPLICATION,new Z(fL.default)),e.set(V.REMOVE_NODE,new Z(Bj.default)),e.set(V.CONFIGURE_CLUSTER,new Z(Fj.default)),e.set(V.PURGE_STREAM,new Z(kj.default)),e.set(V.SET_CONFIGURATION,new Z(EL.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new Z(Hj.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new Z(qj.default)),e.set(V.CLUSTER_SET_ROUTES,new Z(Oy.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new Z(Oy.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new Z(Oy.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new Z(js,mL.default.export_to_s3)),e.set(V.CREATE_CSR,new Z(su.default.createCsr)),e.set(V.SIGN_CERTIFICATE,new Z(su.default.signCertificate)),e.set(V.LIST_CERTIFICATES,new Z(su.default.listCertificates)),e.set(V.ADD_CERTIFICATES,new Z(su.default.addCertificate)),e.set(V.REMOVE_CERTIFICATE,new Z(su.default.removeCertificate)),e.set(V.GET_KEY,new Z(su.default.getKey)),e.set(V.ADD_NODE_BACK,new Z(aO)),e.set(V.REMOVE_NODE_BACK,new Z(cO)),e.set(V.DELETE_FILES_BEFORE,new Z(js,Tf.default.deleteFilesBefore)),e.set(V.DELETE_RECORDS_BEFORE,new Z(js,Tf.default.deleteFilesBefore)),e.set(V.EXPORT_LOCAL,new Z(js,mL.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new Z(Ly.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new Z(Ly.default.handleGetJob)),e.set(V.RESTART,new Z(pL.default.restart)),e.set(V.RESTART_SERVICE,new Z(js,pL.default.restartService)),e.set(V.CATCHUP,new Z(kSe)),e.set(V.SYSTEM_INFORMATION,new Z(Vj.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new Z(js,Tf.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new Z(vj.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new Z(LN)),e.set(V.REFRESH_OPERATION_TOKEN,new Z(DN)),e.set(V.LOGIN,new Z(jO)),e.set(V.LOGOUT,new Z(QO)),e.set(V.GET_CONFIGURATION,new Z(EL.default.getConfiguration)),e.set(V.CUSTOM_FUNCTIONS_STATUS,new Z(Ot.default.customFunctionsStatus)),e.set(V.GET_CUSTOM_FUNCTIONS,new Z(Ot.default.getCustomFunctions)),e.set(V.GET_COMPONENT_FILE,new Z(Ot.default.getComponentFile)),e.set(V.GET_COMPONENTS,new Z(Ot.default.getComponents)),e.set(V.SET_COMPONENT_FILE,new Z(Ot.default.setComponentFile)),e.set(V.DROP_COMPONENT,new Z(Ot.default.dropComponent)),e.set(V.GET_CUSTOM_FUNCTION,new Z(Ot.default.getCustomFunction)),e.set(V.SET_CUSTOM_FUNCTION,new Z(Ot.default.setCustomFunction)),e.set(V.DROP_CUSTOM_FUNCTION,new Z(Ot.default.dropCustomFunction)),e.set(V.ADD_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.addComponent)),e.set(V.ADD_COMPONENT,new Z(Ot.default.addComponent)),e.set(V.DROP_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.dropCustomFunctionProject)),e.set(V.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.packageComponent)),e.set(V.PACKAGE_COMPONENT,new Z(Ot.default.packageComponent)),e.set(V.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.deployComponent)),e.set(V.DEPLOY_COMPONENT,new Z(Ot.default.deployComponent)),e.set(V.READ_TRANSACTION_LOG,new Z(_L.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new Z(js,_L.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new Z(gL.default.installModules)),e.set(V.AUDIT_NODE_MODULES,new Z(gL.default.auditModules)),e.set(V.GET_BACKUP,new Z(oo.default.getBackup)),e.set(V.ADD_SSH_KEY,new Z(Ot.default.addSSHKey)),e.set(V.UPDATE_SSH_KEY,new Z(Ot.default.updateSSHKey)),e.set(V.DELETE_SSH_KEY,new Z(Ot.default.deleteSSHKey)),e.set(V.LIST_SSH_KEYS,new Z(Ot.default.listSSHKeys)),e.set(V.SET_SSH_KNOWN_HOSTS,new Z(Ot.default.setSSHKnownHosts)),e.set(V.GET_SSH_KNOWN_HOSTS,new Z(Ot.default.getSSHKnownHosts)),e.set(V.GET_ANALYTICS,new Z(iP)),e.set(V.LIST_METRICS,new Z(oP)),e.set(V.DESCRIBE_METRIC,new Z(aP)),e.set(V.GET_STATUS,new Z(hP)),e.set(V.SET_STATUS,new Z(EP)),e.set(V.CLEAR_STATUS,new Z(pP)),e.set(V.INSTALL_USAGE_LICENSE,new Z(RP)),e.set(V.GET_USAGE_LICENSES,new Z(wP)),e}var Sf,Py,oE,oo,aE,Tf,vj,gf,cE,Ot,lE,Uj,xj,fL,Bj,Fj,kj,Hj,qj,Oy,mL,Gj,Ly,Qs,pL,SL,iu,$j,Vj,hL,EL,_L,gL,Kj,Yj,su,Wj,zj,Dj,Rn,USe,xSe,BSe,FSe,Mj,QT=ie(()=>{Sf=w(fn()),Py=w(py()),oE=w(sL()),oo=w(cT()),aE=w(Ol()),Tf=w(gl()),vj=w(UC()),gf=w(kn()),cE=w(xp()),Ot=w(rP()),lE=w(Q()),Uj=w(HC()),xj=w(TT()),fL=w(mO()),Bj=w(RT()),Fj=w(EO()),kj=w(_O()),Hj=w(TO()),qj=w(RO()),Oy=w(NT()),mL=w(aL()),Gj=w(fy()),Ly=w(Ny());H();Qs=w(_e()),pL=w(cf()),SL=w(require("util")),iu=w(Bn()),$j=w(mi()),Vj=w(Qd()),hL=w(Cj());wd();$T();EL=w(Tt()),_L=w(ey()),gL=w(Fh()),Kj=w(ii()),Yj=w(oe());xr();su=w(fs());Xd();lP();Wj=w(WP()),zj=w(Pj());Yh();Qh();Lj();({HTTP_STATUS_CODES:Dj}=Qs.hdbErrors),Rn=lE.default.loggerWithTag("operation"),{transactToClusteringUtils:USe}=zj.default,xSe=SL.promisify(Sf.default.search),BSe=SL.promisify(Py.default.evaluateSQL),FSe={[V.CREATE_ATTRIBUTE]:!0,[V.CREATE_TABLE]:!0,[V.CREATE_SCHEMA]:!0,[V.DROP_ATTRIBUTE]:!0,[V.DROP_TABLE]:!0,[V.DROP_SCHEMA]:!0};o(jj,"processLocalTransaction");Mj=HSe();Ue.operation=TL;o(Qj,"chooseOperation");o(Jj,"getOperationFunction");(0,Kj._assignPackageExport)("operation",TL);o(TL,"operation");o(kSe,"catchup");o(js,"executeJob");o(HSe,"initializeOperationFunctionMap")});var vy=M((zFe,e2)=>{"use strict";var Dy=(H(),D(W)),qSe=oe(),uE=Q(),{handleHDBError:yL,hdbErrors:My}=_e(),{isMainThread:GSe}=require("worker_threads"),{Readable:$Se}=require("stream"),Xj=require("os"),VSe=require("util"),KSe=vN(),YSe=VSe.promisify(KSe.authorize),Zj=(QT(),D(jT)),{createGzip:WSe,constants:zSe}=require("zlib"),jSe=[Dy.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,Dy.OPERATIONS_ENUM.LOGIN,Dy.OPERATIONS_ENUM.LOGOUT];function QSe(e){let t=`Found an uncaught exception with message: ${e.message}. ${Xj.EOL}Stack: ${e.stack} ${Xj.EOL}Terminating ${GSe?"HDB":"thread"}.`;console.error(t),uE.fatal(t),process.exit(1)}o(QSe,"handleServerUncaughtException");function JSe(e,t,r){if(uE[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:My.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)}o(JSe,"serverErrorHandler");function XSe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=yL(new Error,"Invalid JSON.",My.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(qSe.isEmpty(e.body.operation)){let n=yL(new Error,"Request body must include an 'operation' property.",My.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o(XSe,"reqBodyValidationHandler");function ZSe(e,t,r){let n;!jSe.includes(e.body.operation)||e.body.operation===Dy.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?YSe(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{uE.warn(i),uE.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(yL(i,a,My.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}o(ZSe,"authHandler");async function eTe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=Zj.chooseOperation(e.body);let s=await Zj.processLocalTransaction(e,n);if(s instanceof $Se&&s.headers){for(let[i,a]of s.headers)t.header(i,a);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(WSe({level:zSe.Z_BEST_SPEED})))}return s}catch(s){throw uE.error(s),s}}o(eTe,"handlePostRequest");e2.exports={authHandler:ZSe,handlePostRequest:eTe,handleServerUncaughtException:QSe,serverErrorHandler:JSe,reqBodyValidationHandler:XSe}});var s2=M((QFe,n2)=>{"use strict";var tTe=require("fastify-plugin"),{handlePostRequest:t2,authHandler:rTe,reqBodyValidationHandler:nTe}=vy();async function sTe(e){e.decorate("hdbCore",{preValidation:[nTe,rTe],request:o(t=>r2(t2(t,response)),"request"),requestWithoutAuthentication:o((t,r)=>r2(t2(t,r,!0)),"requestWithoutAuthentication")})}o(sTe,"hdbCore");async function r2(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}o(r2,"convertAsyncIterators");n2.exports=tTe(sTe)});var o2=M((ZFe,i2)=>{"use strict";var XFe=require("fs"),Uy=ue();Uy.initSync();var{CONFIG_PARAMS:RL}=(H(),D(W)),iTe=1024*1024*1024;function oTe(e){let t=Uy.get(RL.HTTP_TIMEOUT),r=Uy.get(RL.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:iTe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:Uy.get(RL.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o(oTe,"getServerOptions");i2.exports=oTe});var l2=M((tke,c2)=>{"use strict";var AL=ue();AL.initSync();var{CONFIG_PARAMS:a2}=(H(),D(W));function aTe(){let e=AL.get(a2.HTTP_CORSACCESSLIST),t=AL.get(a2.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}o(aTe,"getCORSOptions");c2.exports=aTe});var f2=M((nke,d2)=>{"use strict";var u2=ue();u2.initSync();var cTe=(H(),D(W));function lTe(){return u2.get(cTe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o(lTe,"getHeaderTimeoutConfig");d2.exports=lTe});var IL={};Ie(IL,{customFunctionsServer:()=>fTe,ready:()=>w2,start:()=>dTe});function dTe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){la||(la=I2(t),Ue.http((await la).server));let a=await la,c=(0,bL.dirname)(s),l=(0,bL.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!m2.has(c)){m2.add(c);try{a.register(pTe(c,l))}catch(u){if(u.message==="Root plugin has already booted")gt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:w2}}async function fTe(){try{gt.info("In Custom Functions Fastify server"+process.cwd()),gt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),gt.debug(`Custom Functions server process ${process.pid} starting up.`),await mTe();let e=S2.get(B.HTTP_SECUREPORT)>0,t;try{t=la=await I2(e)}catch(r){throw gt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw gt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){gt.error(`Custom Functions ${process.pid} Error: ${e}`),gt.error(e),process.exit(1)}}async function mTe(){try{gt.info("Custom Functions starting configuration."),await T2.setUsersWithRolesCache(),gt.info("Custom Functions completed configuration.")}catch(e){gt.error(e)}}function pTe(e,t){return async function(r){try{gt.info("Custom Functions starting buildRoutes"),gt.trace("Loading fastify routes folder "+e),(0,p2.existsSync)(e)&&r.register(g2.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:gt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,a)=>{s?.message?gt.error(s.message):s&>.error(s),a()})}catch(n){gt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function I2(e){gt.info("Custom Functions starting buildServer.");let t=(0,y2.default)(e),r=(0,h2.default)(t);r.server.headersTimeout=(0,A2.default)(),r.setErrorHandler(b2.serverErrorHandler);let n=(0,R2.default)();return n&&r.register(E2.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(_2.default),await r.register(uTe),await r.after(),Tm(r),gt.info("Custom Functions completed buildServer."),r}function w2(){if(la)return la.then?la.then(e=>e.ready()):la.ready()}var bL,p2,h2,E2,_2,g2,S2,gt,uTe,T2,y2,R2,A2,b2,la,m2,N2=ie(()=>{bL=require("path"),p2=require("fs"),h2=w(require("fastify")),E2=w(require("@fastify/cors")),_2=w(NN()),g2=w(require("@fastify/autoload")),S2=w(ue());H();gt=w(Q()),uTe=w(s2()),T2=w(kn()),y2=w(o2()),R2=w(l2()),A2=w(f2()),b2=w(vy());Po();xr();m2=new Set;o(dTe,"start");o(fTe,"customFunctionsServer");o(mTe,"setUp");o(pTe,"buildRouteFolder");o(I2,"buildServer");o(w2,"ready")});var NL={};Ie(NL,{handleApplication:()=>hTe,suppressHandleApplicationWarning:()=>ETe});function hTe(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,Rf.join)(n.absolutePath,"index.html");(0,yf.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,Rf.dirname)(n.urlPath),n.absolutePath);break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,Rf.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 a=t.get(n.pathname);if(!a){let d=e.options.get(["index"])??!1;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);d&&(a=r.get(n.pathname))}if(!a){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(a=t.get(`${n.pathname}.${f}`),a)break}if(a)return{handlesHeaders:!0,body:(0,wL.default)(n,(0,yf.realpathSync)(a))};if(i)return s(n);let c=e.options.get(["notFound"]);if(_Te(c),!c)return{status:404,body:"File not found"};let l=(0,Rf.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,yf.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,wL.default)(n,(0,yf.realpathSync)(l))}},{runFirst:!0})}function _Te(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 yf,Rf,wL,ETe,C2=ie(()=>{yf=require("node:fs"),Rf=require("node:path"),wL=w(require("send"));o(hTe,"handleApplication");ETe=!0;o(_Te,"validateNotFoundOption")});var CL={};Ie(CL,{start:()=>gTe});function gTe({override:e}){return{handleFile:o((t,r,n)=>{xy.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,O2.parse)(t))){if(process.env[s]!==void 0)if(xy.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)xy.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var O2,xy,P2=ie(()=>{O2=require("dotenv"),xy=w(Q());o(gTe,"start")});var OL={};Ie(OL,{DataLoaderError:()=>_s,DataLoaderResult:()=>Af,EmptyFileError:()=>ky,FileParseError:()=>Fy,InvalidPropertyTypeError:()=>Hy,MissingRequiredPropertyError:()=>dE,RecordProcessingError:()=>fE,SystemDatabaseError:()=>qy,UnsupportedFileExtensionError:()=>By,handleApplication:()=>TTe,loadDataFile:()=>U2,suppressHandleApplicationWarning:()=>STe});function TTe(e){if((0,D2.getWorkerIndex)()!==0){ao.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||U2(t,pn,Me).then(r=>{ao.debug?.("Data loader processed file: %s: %s",(0,ua.basename)(t.absolutePath),r.message)})})}async function U2({contents:e,absolutePath:t,stats:r},n,s){let i=(0,ua.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,L2.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new By(t,i);a.mtime=r.mtimeMs}catch(f){throw f instanceof _s?f:new Fy(t,f)}if(!a)throw new ky(t);let{database:c,table:l,records:u}=a;if(!l)throw new dE(t,"table");if(!u)throw new dE(t,"records");if(!Array.isArray(u))throw new Hy(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new qy(c,l);try{let f;if(c&&s[c]&&s[c][l])ao.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])ao.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{ao.debug?.(`Table ${d} not found, creating new table`);let A=[];if(u.length>0){let S=u[0];Object.keys(S).map(R=>{let N={name:R,type:typeof S[R]};return R==="id"&&(N.isPrimaryKey=!0),N}).forEach(R=>{A.push(R)})}f=await Xe({database:c,table:l,attributes:A})}let m=u.length,p=0,h=0,E=0,g=100;for(let A=0;A<u.length;A+=g){let S=u.slice(A,A+g),R=[];for(let N of S)R.push(async()=>{try{let O=null,F=N.id;if(F!==void 0&&(O=await f.get(F)),!O)return p++,f.put(N);let ee=O.getUpdatedTime();return a.mtime>ee?(h++,f.put(N)):(E++,Promise.resolve({inserted:0,updated:0}))}catch(O){if(O instanceof _s)ao.error?.(`Record processing error: ${O.message}`);else{let F=new fE(d,O);ao.error?.(`Record processing error: ${F.message}`)}return Promise.resolve({inserted:0,updated:0,error:O.message})}});await Promise.all(R.map(N=>N()))}if(p>0||h>0){let A=`Loaded ${p} new and updated ${h} records in ${d}`;return E>0&&(A+=` (${E} records skipped)`),ao.info?.(A),new Af(t,c,l,"success",p+h,A)}else if(E>0){let A=`All ${E} records in ${d} already up-to-date`;return ao.info?.(A),new Af(t,c,l,"skipped",m,A)}else{let A=`No records to process in ${d}`;return ao.info?.(A),new Af(t,c,l,"success",0,A)}}catch(f){throw f instanceof _s?f:new fE(d,f)}}var ua,L2,D2,da,M2,v2,ao,STe,_s,By,Fy,ky,dE,Hy,qy,fE,Af,x2=ie(()=>{ua=require("node:path"),L2=require("yaml");Oe();D2=w(nt()),da=w(Kr()),M2=w(_e()),v2=w(Q()),ao=v2.default.forComponent("dataLoader"),STe=!0;o(TTe,"handleApplication");o(U2,"loadDataFile");_s=class extends M2.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=da.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},By=class extends _s{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,ua.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,da.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},Fy=class extends _s{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,ua.basename)(t)}: ${r.message}`,da.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},ky=class extends _s{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,ua.basename)(t)} is empty or invalid`,da.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},dE=class extends _s{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,ua.basename)(t)} is missing required "${r}" property`,da.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},Hy=class extends _s{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,ua.basename)(t)} has invalid "${r}" property, expected ${n}`,da.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},qy=class extends _s{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,da.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},fE=class extends _s{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,da.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},Af=class{static{o(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,a){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=a}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#r}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#r,status:this.#n,count:this.#s,message:this.#i}}}});var LL=M((hke,B2)=>{"use strict";var mE=ue();mE.initSync();var bf=require("fs-extra"),PL=require("path"),If=(H(),D(W)),yTe=require("crypto"),RTe=require("uuid").v4;B2.exports=ATe;function ATe(){if(mE.getHdbBasePath()!==void 0){let e=PL.join(mE.getHdbBasePath(),If.LICENSE_KEY_DIR_NAME,If.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=PL.join(mE.getHdbBasePath(),If.LICENSE_KEY_DIR_NAME,If.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=PL.join(mE.getHdbBasePath(),If.LICENSE_KEY_DIR_NAME,If.JWT_ENUM.JWT_PASSPHRASE_NAME);try{bf.accessSync(r),bf.accessSync(e),bf.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=RTe(),i=yTe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});bf.writeFileSync(r,s),bf.writeFileSync(e,i.privateKey),bf.writeFileSync(t,i.publicKey)}else throw n}}}o(ATe,"checkJWTTokenExist")});var k2=M((_ke,F2)=>{"use strict";var DL=class{static{o(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};F2.exports={HdbInfoInsertObject:DL}});var G2=M((Ske,q2)=>{"use strict";var H2=(H(),D(W)),ML=class{static{o(this,"UpgradeObject")}constructor(t,r){this[H2.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[H2.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};q2.exports={UpgradeObject:ML}});var Gy=M((yke,V2)=>{"use strict";var Js=require("prompt"),wf=require("chalk"),$2=Q(),Ci=require("os"),vL=Hc(),UL=["yes","y"];async function bTe(e){let t=`${Ci.EOL}`+wf.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Ci.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ci.EOL}${Ci.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Ci.EOL}`;Js.override=vL(["CONFIRM_UPGRADE"]),Js.start(),Js.message=t;let r={properties:{CONFIRM_UPGRADE:{description:wf.magenta(`${Ci.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 $2.error("There was an error when prompting user about an upgrade."),$2.error(s),!1}return UL.includes(n.CONFIRM_UPGRADE)}o(bTe,"forceUpdatePrompt");async function ITe(e){let t=`${Ci.EOL}`+wf.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.${Ci.EOL}`);Js.override=vL(["CONFIRM_DOWNGRADE"]),Js.start(),Js.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:wf.magenta(`${Ci.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 UL.includes(n.CONFIRM_DOWNGRADE)}o(ITe,"forceDowngradePrompt");async function wTe(){let e=`${Ci.EOL}`+wf.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=vL(["GENERATE_CERTS"]),Js.start(),Js.message=e;let t={properties:{GENERATE_CERTS:{description:wf.magenta(`${Ci.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 UL.includes(r.GENERATE_CERTS)}o(wTe,"upgradeCertsPrompt");V2.exports={forceUpdatePrompt:bTe,forceDowngradePrompt:ITe,upgradeCertsPrompt:wTe}});var $y=M((Ake,K2)=>{"use strict";var xL=class{static{o(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};K2.exports=xL});var W2=M((Oke,Y2)=>{"use strict";var NTe=oe(),CTe=Tt(),Ike=Q(),wke=require("path"),Nke=require("fs"),Cke=(H(),D(W));Y2.exports={getOldPropsValue:OTe};function OTe(e,t,r=!1){let n=t.getRaw(e);return NTe.isNotEmptyAndHasValue(n)?n:r?CTe.getDefaultConfig(e):""}o(OTe,"getOldPropsValue")});var J2=M((Lke,Q2)=>{"use strict";var _c=require("path"),gc=require("fs-extra"),PTe=require("properties-reader"),LTe=$y(),Sr=Q(),{getOldPropsValue:St}=W2(),{HDB_SETTINGS_NAMES:Se,CONFIG_PARAMS:ou}=(H(),D(W)),au=Tt(),Vy=ue(),z2=oe(),co=(H(),D(W)),BL=new LTe("3.1.0"),j2=[];function DTe(){let e=PTe(Vy.get(Se.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Sr.info(t);let r=` ;Settings for the HarperDB process.
|
|
38
|
+
`}getKey(){return(0,ay.createPublicKey)(this.pem)}toString(){return this.pem}},iy=class extends TypeError{static{o(this,"LicenseEncodingError")}},ff=class extends TypeError{static{o(this,"InvalidLicenseError")}},SP=class extends ff{static{o(this,"InvalidLicenseSignatureError")}},jh=class extends ff{static{o(this,"InvalidHeaderError")}},oy=class extends ff{static{o(this,"InvalidPayloadError")}},i_e=new gP(GW.get(B.LICENSE_MODE));o(o_e,"validateLicenseSignature");o(a_e,"validateLicenseHeader");o(c_e,"valid");o(l_e,"validateLicensePayload");o($W,"validateLicense")});var cy={};Ie(cy,{getActiveLicense:()=>bP,getUsageLicenses:()=>ez,getUsageLicensesOp:()=>wP,installUsageLicense:()=>AP,installUsageLicenseOp:()=>RP,isActiveLicense:()=>XW,isLicensed:()=>IP,loadAndWatchLicensesDir:()=>f_e,recordUsage:()=>ZW});async function RP(e){let t=e.license;try{await AP(t)}catch(r){let n=new WW.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function AP(e){let t=$W(e),{id:r}=t;if(await Me.system.hdb_license.get(r))throw new yP(`A usage license with ${r} already exists`);return en.info?.("Installing usage license:",t),Me.system.hdb_license.put(r,t)}function XW(e){return(e.usedReads??0)<e.reads&&(e.usedReadBytes??0)<e.readBytes&&(e.usedWrites??0)<e.writes&&(e.usedWriteBytes??0)<e.writeBytes&&(e.usedRealTimeMessages??0)<e.realTimeMessages&&(e.usedRealTimeBytes??0)<e.realTimeBytes&&(e.usedCpuTime??0)<e.cpuTime&&(e.usedStorage??0)<e.storage||e.reads===-1&&e.readBytes===-1&&e.writes===-1&&e.writeBytes===-1&&e.realTimeMessages===-1&&e.realTimeBytes===-1&&e.cpuTime===-1&&e.storage===-1}async function bP(){let e=zW.get(B.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(XW(n))return n}async function IP(){return await bP()!==void 0}async function ZW(e){en.trace?.("Recording usage into license from analytics");let t,r=(await bP())?.id;if(r){en.trace?.("Found license to record usage into:",r);let n={};At(n,()=>{t=Me.system.hdb_license.update(r,n);for(let s of e)switch(en.trace?.("Processing analytics record:",s),s.metric){case"db-read":en.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":en.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":en.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"&&(en.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count));break;default:en.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.";KW||(console.error(n),KW=!0),YW===void 0&&(YW=setInterval(()=>{en.notify(n)},u_e).unref())}}function wP(e){let t={};return e.region&&(t.region=e.region),ez(t)}function ez(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 d_e(e){en.trace?.("Loading usage license from file:",e);let t=await QW.readFile(e,{encoding:"utf-8"});try{await AP(t)}catch(r){en.error?.("Failed to install usage license from file:",e,r)}}function f_e(){let e=TP.default.join(TP.default.dirname(jW.getConfigFilePath()),"licenses");(0,JW.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:o((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",d_e)}var WW,en,zW,TP,jW,QW,JW,yP,KW,YW,u_e,Qh=ie(()=>{VW();WW=w(_e()),en=w(Q());Ps();Ca();zW=w(ue());H();Oe();TP=w(require("node:path")),jW=w(yt()),QW=w(require("node:fs/promises")),JW=require("chokidar"),yP=class extends Error{static{o(this,"ExistingLicenseError")}};o(RP,"installUsageLicenseOp");o(AP,"installUsageLicense");KW=!1,u_e=6e5;o(XW,"isActiveLicense");o(bP,"getActiveLicense");o(IP,"isLicensed");o(ZW,"recordUsage");Ib(ZW);o(wP,"getUsageLicensesOp");o(ez,"getUsageLicenses");o(d_e,"loadLicenseFile");o(f_e,"loadAndWatchLicensesDir")});var CP={};Ie(CP,{getRegistrationInfo:()=>NP});function NP(){return{version:tz.packageJson.version,deprecated:!0}}var tz,OP=ie(()=>{tz=w(Tt());o(NP,"getRegistrationInfo")});var nz=M((lFe,rz)=>{"use strict";var PP=class{static{o(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};rz.exports=PP});var iz=M((dFe,sz)=>{"use strict";var LP=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};sz.exports=LP});var MP=M((mFe,az)=>{"use strict";var oz=nz(),m_e=iz(),{HDB_ERROR_MSGS:p_e}=Kr(),DP=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=p_e.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 oz(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new m_e(c,s[c]);i.push(l)});let a=`${r}_${n}`;if(this.unauthorized_access[a])this.unauthorized_access[a].required_attribute_permissions=i;else{let c=new oz(r,n,[],i);this.unauthorized_access[a]=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}};az.exports=DP});var fy=M((hFe,Iz)=>{"use strict";var vP=Bn(),ly=fn(),Ys=cT(),Zh=Ol(),UP=gl(),h_e=UC(),E_e=i1(),eE=kn(),uy=xp(),Cr=Q(),__e=HC(),g_e=TT(),S_e=mO(),T_e=RT(),y_e=EO(),R_e=_O(),A_e=TO(),b_e=RO(),xP=NT(),ca=oe(),I_e=BK(),uz=cf(),yn=(H(),D(W)),dz=kY(),w_e=Qd(),fz=(wd(),D(Gp)),mz=($T(),D(vh)),pz=yt(),Er=rP(),N_e=require("alasql"),hz=ey(),Ez=Fh(),mf=fs(),_z=(Xd(),D(Jd)),BP=(lP(),D(cP)),FP=(Yh(),D(_P)),gz=(Qh(),D(cy)),C_e=(OP(),D(CP)),Sz=MP(),{handleHDBError:Vn,hdbErrors:Tz}=_e(),{HDB_ERROR_MSGS:tn,HTTP_STATUS_CODES:Jh}=Tz,ee=new Map,yz="delete",pc="insert",Ws="read",Zl="update",Xh="describe",cz=Zh.describeSchema.name,lz=Zh.describeTable.name,Rz={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},O_e={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},P_e="catchup",L_e="handleGetJob",D_e="handleGetJobsByStartDate",dy={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},M_e=[Ys.createTable.name,Ys.createAttribute.name,Ys.dropTable.name,Ys.dropAttribute.name],Az={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},se=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};ee.set(vP.insert.name,new se(!1,[pc]));ee.set(vP.update.name,new se(!1,[Zl]));ee.set(vP.upsert.name,new se(!1,[pc,Zl]));ee.set(ly.searchByConditions.name,new se(!1,[Ws]));ee.set(ly.searchByHash.name,new se(!1,[Ws]));ee.set(ly.searchByValue.name,new se(!1,[Ws]));ee.set(ly.search.name,new se(!1,[Ws]));ee.set(Ys.createSchema.name,new se(!0,[]));ee.set(Ys.createTable.name,new se(!0,[]));ee.set(Ys.createAttribute.name,new se(!1,[pc]));ee.set(Ys.dropSchema.name,new se(!0,[]));ee.set(Ys.dropTable.name,new se(!0,[]));ee.set(Ys.dropAttribute.name,new se(!0,[]));ee.set(Zh.describeSchema.name,new se(!1,[Ws]));ee.set(Zh.describeTable.name,new se(!1,[Ws]));ee.set(UP.deleteRecord.name,new se(!1,[yz]));ee.set(eE.addUser.name,new se(!0,[]));ee.set(eE.alterUser.name,new se(!0,[]));ee.set(eE.dropUser.name,new se(!0,[]));ee.set(eE.listUsersExternal.name,new se(!0,[]));ee.set(uy.listRoles.name,new se(!0,[]));ee.set(uy.addRole.name,new se(!0,[]));ee.set(uy.alterRole.name,new se(!0,[]));ee.set(uy.dropRole.name,new se(!0,[]));ee.set(__e.name,new se(!0,[]));ee.set(g_e.name,new se(!0,[]));ee.set(S_e.name,new se(!0,[]));ee.set(T_e.name,new se(!0,[]));ee.set(y_e.name,new se(!0,[]));ee.set(R_e.name,new se(!0,[]));ee.set(xP.setRoutes.name,new se(!0,[]));ee.set(xP.getRoutes.name,new se(!0,[]));ee.set(xP.deleteRoutes.name,new se(!0,[]));ee.set(pz.setConfiguration.name,new se(!0,[]));ee.set(A_e.clusterStatus.name,new se(!0,[]));ee.set(b_e.name,new se(!0,[]));ee.set(UP.deleteFilesBefore.name,new se(!0,[]));ee.set(UP.deleteAuditLogsBefore.name,new se(!0,[]));ee.set(uz.restart.name,new se(!0,[]));ee.set(uz.restartService.name,new se(!0,[]));ee.set(h_e.name,new se(!0,[]));ee.set(E_e.name,new se(!0,[Ws]));ee.set(w_e.systemInformation.name,new se(!0,[]));ee.set(pz.getConfiguration.name,new se(!0,[]));ee.set(hz.readTransactionLog.name,new se(!0,[]));ee.set(hz.deleteTransactionLogsBefore.name,new se(!0,[]));ee.set(Ez.installModules.name,new se(!0,[]));ee.set(Ez.auditModules.name,new se(!0,[]));ee.set(mf.createCsr.name,new se(!0,[]));ee.set(mf.signCertificate.name,new se(!0,[]));ee.set(mf.listCertificates.name,new se(!0,[]));ee.set(mf.addCertificate.name,new se(!0,[]));ee.set(mf.removeCertificate.name,new se(!0,[]));ee.set(mf.getKey.name,new se(!0,[]));ee.set(_z.addNodeBack.name,new se(!0,[]));ee.set(_z.removeNodeBack.name,new se(!0,[]));ee.set(BP.getOp.name,new se(!1,[Ws]));ee.set(BP.listMetricsOp.name,new se(!1,[Ws]));ee.set(BP.describeMetricOp.name,new se(!1,[Ws]));ee.set(FP.clear.name,new se(!0,[]));ee.set(FP.get.name,new se(!0,[]));ee.set(FP.set.name,new se(!0,[]));ee.set(gz.installUsageLicenseOp.name,new se(!0,[]));ee.set(gz.getUsageLicensesOp.name,new se(!0,[]));ee.set(fz.createTokens.name,new se(!1,[]));ee.set(fz.refreshOperationToken.name,new se(!1,[]));ee.set(mz.login.name,new se(!1,[]));ee.set(mz.logout.name,new se(!1,[]));ee.set(Er.customFunctionsStatus.name,new se(!0,[]));ee.set(Er.getCustomFunctions.name,new se(!0,[]));ee.set(Er.getComponents.name,new se(!0,[]));ee.set(Er.getComponentFile.name,new se(!0,[]));ee.set(Er.setComponentFile.name,new se(!0,[]));ee.set(Er.dropComponent.name,new se(!0,[]));ee.set(Er.getCustomFunction.name,new se(!0,[]));ee.set(Er.setCustomFunction.name,new se(!0,[]));ee.set(Er.dropCustomFunction.name,new se(!0,[]));ee.set(Er.addComponent.name,new se(!0,[]));ee.set(Er.dropCustomFunctionProject.name,new se(!0,[]));ee.set(Er.packageComponent.name,new se(!0,[]));ee.set(Er.deployComponent.name,new se(!0,[]));ee.set(Er.addSSHKey.name,new se(!0,[]));ee.set(Er.updateSSHKey.name,new se(!0,[]));ee.set(Er.deleteSSHKey.name,new se(!0,[]));ee.set(Er.listSSHKeys.name,new se(!0,[]));ee.set(Er.setSSHKnownHosts.name,new se(!0,[]));ee.set(Er.getSSHKnownHosts.name,new se(!0,[]));ee.set(C_e.getRegistrationInfo.name,new se(!1,[]));ee.set(eE.userInfo.name,new se(!1,[]));ee.set(Zh.describeAll.name,new se(!1,[]));ee.set(L_e,new se(!1,[]));ee.set(D_e,new se(!0,[]));ee.set(P_e,new se(!0,[]));ee.set(dy.CSV_DATA_LOAD,new se(!1,[pc,Zl]));ee.set(dy.CSV_URL_LOAD,new se(!1,[pc,Zl]));ee.set(dy.CSV_FILE_LOAD,new se(!1,[pc,Zl]));ee.set(dy.IMPORT_FROM_S3,new se(!1,[pc,Zl]));ee.set(Az.EXPORT_TO_S3,new se(!0,[]));ee.set(Az.EXPORT_LOCAL,new se(!0,[]));ee.set(yn.VALID_SQL_OPS_ENUM.DELETE,new se(!1,[yz]));ee.set(yn.VALID_SQL_OPS_ENUM.SELECT,new se(!1,[Ws]));ee.set(yn.VALID_SQL_OPS_ENUM.INSERT,new se(!1,[pc]));ee.set(yn.VALID_SQL_OPS_ENUM.UPDATE,new se(!1,[Zl]));Iz.exports={verifyPerms:U_e,verifyPermsAst:v_e,verifyBulkLoadAttributePerms:B_e};function v_e(e,t,r){if(ca.isEmptyOrZeroLength(e))throw Cr.info("verify_perms_ast has an empty user parameter"),Vn(new Error);if(ca.isEmptyOrZeroLength(t))throw Cr.info("verify_perms_ast has an empty user parameter"),Vn(new Error);if(ca.isEmptyOrZeroLength(r))throw Cr.info("verify_perms_ast has a null operation parameter"),Vn(new Error);try{let n=new Sz,s=new I_e(e),i=s.getSchemas(),a=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Cr.info("No schemas defined in verifyPermsAst(), will not continue."),Vn(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&Rz[r])throw Vn(new Error,tn.DROP_SYSTEM,Jh.FORBIDDEN);if(c&&!l)return null;let u=dz.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof N_e.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let f=0;f<i.length;f++){let m=s.getTablesBySchemaName(i[f]);m&&a.set(i[f],m)}let d=bz(t,r,a,n);return d||(a.forEach((f,m)=>{for(let p=0;p<f.length;p++){let h=s.getAttributesBySchemaTableName(m,f[p]),E=HP(t.role.permission,m,f[p]);kP(h,E,r,f[p],m,n)}}),n.getPermsResponse())}catch(n){throw Vn(n)}}o(v_e,"verifyPermsAst");function U_e(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Cr.info("null required parameter in verifyPerms"),Vn(new Error,tn.DEFAULT_INVALID_REQUEST,Jh.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,a=new Map;s&&i&&a.set(s,[i]);let c=new Sz;if(ca.isEmptyOrZeroLength(e.hdb_user?.role)||ca.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Cr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(tn.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=a.has(yn.SYSTEM_SCHEMA_NAME)||s===yn.SYSTEM_SCHEMA_NAME;if(l&&d&&O_e[e.operation]&&(i===yn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===yn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===yn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&Rz[r])throw Vn(new Error,tn.DROP_SYSTEM,Jh.FORBIDDEN);if(l&&!d||u===!0&&(r===Ys.createSchema.name||r===Ys.dropSchema.name))return null;if(M_e.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=dz.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===cz||r===lz)&&!f.super_user){if(s===yn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(tn.SCHEMA_PERM_ERROR(s));if(r===cz&&(!f[s]||!f[s][Xh]))return c.handleInvalidItem(tn.SCHEMA_NOT_FOUND(s));if(r===lz&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][Xh]))return c.handleInvalidItem(tn.TABLE_NOT_FOUND(s,i))}let m=bz(e.hdb_user,r,a,c,n);if(m)return m;if(ee.get(r)&&ee.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&yn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],g=f[s].tables[i];g[yn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(S=>S[yn.PERMS_CRUD_ENUM.READ]).forEach(S=>{E.push(S.attribute_name)}):E=global.hdb_schema[s][i].attributes.map(A=>A.attribute),e.get_attributes=E)}let p=x_e(e),h=HP(e.hdb_user?.role?.permission,s,i);return kP(p,h,r,i,s,c,n),c.getPermsResponse()}o(U_e,"verifyPerms");function bz(e,t,r,n,s){if(ca.arrayHasEmptyValues([e,t,r]))throw Cr.info("hasPermissions has an invalid parameter"),Vn(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||ee.get(t).requires_su))return null;if(!ee.get(t))throw Cr.info(`operation ${t} not found.`),Vn(new Error,tn.OP_NOT_FOUND(t),Jh.BAD_REQUEST);if(ee.get(t)&&ee.get(t).requires_su)return Cr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(tn.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!a[l]||a[l][Xh]===!1){n.addInvalidItem(tn.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(tn.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=a[l].tables[d];if(!f||f[Xh]===!1)n.addInvalidItem(tn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=ee.get(t).perms;!ca.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],g=f[E];(g==null||g===!1)&&(Cr.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=tn.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Cr.error(p),Cr.error(m),Vn(Tz.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}o(bz,"hasPermissions");function kP(e,t,r,n,s,i,a){if(!e||!t)throw Cr.info("no attributes specified in checkAttributePerms."),Vn(new Error);let c=ee.get(r).perms;if(!c||c==="")throw Cr.info(`no permissions found for ${r} in checkAttributePerms().`),Vn(new Error);if(ca.isEmptyOrZeroLength(t))return Cr.info("No role permissions set (this is OK)."),null;a&&c.includes(a)&&(c=[a]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[Xh]===!1){i.addInvalidItem(tn.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(yn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Ws)throw Vn(new Error,tn.SYSTEM_TIMESTAMP_PERMS_ERR,Jh.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(tn.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}o(kP,"checkAttributePerms");function x_e(e){let t=new Set;try{if(e.action)return t;if(e.operation===yn.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){Cr.info(r)}return t}o(x_e,"getRecordAttributes");function HP(e,t,r){let n=new Map;if(ca.isEmpty(e))return Cr.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{Cr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}o(HP,"getAttributePermissions");function B_e(e,t,r,n,s,i,a){let c=new Set(i),l=HP(e,n,s);kP(c,l,t,s,n,a,r)}o(B_e,"verifyBulkLoadAttributePerms")});var py=M((_Fe,Pz)=>{"use strict";Pz.exports={evaluateSQL:Q_e,processAST:Oz,convertSQLToAST:Cz,checkASTPermissions:Nz};var F_e=Bn(),wz=require("util"),k_e=wz.callbackify(F_e.insert),H_e=fn().search,q_e=MG().update,G_e=wz.callbackify(q_e),$_e=UG().convertDelete,hc=require("alasql"),V_e=fy(),my=Q(),K_e=Dg(),Y_e=oe(),tE=(H(),D(W)),{hdbErrors:W_e,handleHDBError:qP}=_e(),{HTTP_STATUS_CODES:GP}=W_e;K_e(hc);var z_e=403,j_e="There was a problem performing this insert. Please check the logs and try again.",$P=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Q_e(e,t){let r=e.parsed_sql_object;if(!r){r=Cz(e.sql);let n,s=r.ast.statements[0];if(s instanceof hc.yy.Insert?n=s.into.databaseid:s instanceof hc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof hc.yy.Update||s instanceof hc.yy.Delete?n=s.table.databaseid:my.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof hc.yy.Select)&&Y_e.isEmptyOrZeroLength(n))return t("No schema specified",null)}Oz(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(Q_e,"evaluateSQL");function Nz(e,t){let r;try{r=V_e.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(Nz,"checkASTPermissions");function Cz(e){let t=new $P;if(!e)throw qP(new Error,"The 'sql' parameter is missing from the request body",GP.BAD_REQUEST);try{let r=e.trim(),n=hc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
39
|
+
`);throw n[1]?qP(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,GP.BAD_REQUEST):qP(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",GP.BAD_REQUEST)}return t}o(Cz,"convertSQLToAST");function Oz(e,t,r){try{let n=J_e;if(!e.bypass_auth&&!t.permissions_checked){let i=Nz(e,t);if(i&&i.length>0)return r(z_e,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case tE.VALID_SQL_OPS_ENUM.SELECT:n=H_e,s=t.ast.statements[0];break;case tE.VALID_SQL_OPS_ENUM.INSERT:n=X_e;break;case tE.VALID_SQL_OPS_ENUM.UPDATE:n=G_e;break;case tE.VALID_SQL_OPS_ENUM.DELETE:n=$_e;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,a)=>{if(i){r(i);return}r(null,a)})}catch(n){return r(n)}}o(Oz,"processAST");function J_e(e,t){my.info(e),t("unknown sql statement")}o(J_e,"nullFunction");function X_e({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(a=>a.columnid);try{s.records=Z_e(i,e.values)}catch(a){return r(a)}k_e(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){my.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(X_e,"convertInsert");function Z_e(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]]=hc.compile(`SELECT ${s.toString()} AS [${tE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw my.error(r),new Error(j_e)}}o(Z_e,"createDataObjects")});var jP=M((yFe,vz)=>{var gy=require("clone"),Sy=ft(),ege=oe(),Ey=(H(),D(W)),SFe=Q(),VP=require("fs"),YP=require("joi"),{string:_y}=YP.types(),{hdbErrors:tge,handleHDBError:hy}=_e(),{HDB_ERROR_MSGS:TFe,HTTP_STATUS_CODES:KP}=tge,{commonValidators:pf}=qi(),Lz=" is required",rge=["insert","update","upsert"],WP={database:{presence:!1,format:pf.schema_format,length:pf.schema_length},schema:{presence:!1,format:pf.schema_format,length:pf.schema_length},table:{presence:!0,format:pf.schema_format,length:pf.schema_length},action:{inclusion:{within:rge,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},nge={schema:_y.required(),table:_y.required(),action:_y.valid("insert","update","upsert")},{AWS_ACCESS_KEY:sge,AWS_SECRET:ige,AWS_BUCKET:oge,AWS_FILE_KEY:age,REGION:cge}=Ey.S3_BUCKET_AUTH_KEYS,lge={s3:{presence:!0},[`s3.${sge}`]:{presence:!0,type:"String"},[`s3.${ige}`]:{presence:!0,type:"String"},[`s3.${oge}`]:{presence:!0,type:"String"},[`s3.${age}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${cge}`]:{presence:!0,type:"String"}},Dz=gy(WP);Dz.data.presence={message:Lz};var Mz=gy(WP);Mz.file_path.presence={message:Lz};var uge=Object.assign(gy(WP),lge),zP=gy(nge);zP.csv_url=_y.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();zP.passthrough_headers=YP.object();function dge(e){let t=Sy.validateObject(e,Dz);return Ty(e,t)}o(dge,"dataObject");function fge(e){let t=Sy.validateBySchema(e,YP.object(zP));return Ty(e,t)}o(fge,"urlObject");function mge(e){let t=Sy.validateObject(e,Mz);return Ty(e,t)}o(mge,"fileObject");function pge(e){let t=Sy.validateObject(e,uge);return Ty(e,t)}o(pge,"s3FileObject");function Ty(e,t){if(!t){let r=ege.checkGlobalSchemaTable(e.schema,e.table);if(r)return hy(new Error,r,KP.BAD_REQUEST);if(e.operation===Ey.OPERATIONS_ENUM.CSV_FILE_LOAD)try{VP.accessSync(e.file_path,VP.constants.R_OK|VP.constants.F_OK)}catch(n){return n.code===Ey.NODE_ERROR_CODES.ENOENT?hy(n,`No such file or directory ${n.path}`,KP.BAD_REQUEST):n.code===Ey.NODE_ERROR_CODES.EACCES?hy(n,`Permission denied ${n.path}`,KP.BAD_REQUEST):hy(n)}}return t}o(Ty,"postValidateChecks");vz.exports={dataObject:dge,urlObject:fge,fileObject:mge,s3FileObject:pge}});var QP=M((AFe,Uz)=>{"use strict";var rE=Q(),yy=(H(),D(W));async function hge(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===yy.OPERATIONS_ENUM.INSERT||t.operation===yy.OPERATIONS_ENUM.UPDATE||t.operation===yy.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===yy.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(rE.info(i.message),i):i.http_resp_msg?(rE.error(`Error calling operation: ${e.name}`),rE.error(i.http_resp_msg),i):(rE.error(`Error calling operation: ${e.name}`),rE.error(i),i)}}o(hge,"callOperationFunctionAsAwait");Uz.exports={callOperationFunctionAsAwait:hge}});var JP=M((IFe,Bz)=>{"use strict";var{S3:Ege,GetObjectCommand:_ge}=require("@aws-sdk/client-s3");Bz.exports={getFileStreamFromS3:gge,getS3AuthObj:xz};async function gge(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await xz(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new _ge(r))).Body}o(gge,"getFileStreamFromS3");function xz(e,t,r){return new Ege({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(xz,"getS3AuthObj")});var kz=M((NFe,Fz)=>{"use strict";var XP=class{static{o(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,a,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=a,this.role_perms=c}},ZP=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};Fz.exports={BulkLoadFileObject:XP,BulkLoadDataObject:ZP}});var tL=M((OFe,Hz)=>{"use strict";var eL=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};Hz.exports=eL});var aL=M((UFe,nj)=>{"use strict";var Ry=Bn(),by=jP(),Sge=require("needle"),Ii=(H(),D(W)),LFe=wt(),hf=oe(),{handleHDBError:Jt,hdbErrors:jz}=_e(),{HTTP_STATUS_CODES:rn,HDB_ERROR_MSGS:Or,CHECK_LOGS_WRAPPER:tu}=jz,Ef=Q(),rL=require("papaparse");hf.promisifyPapaParse();var wi=require("fs-extra"),Tge=require("path"),{chain:qz}=require("stream-chain"),Gz=require("stream-json/streamers/StreamArray"),$z=require("stream-json/utils/Batch"),Vz=require("stream-chain/utils/comp"),{finished:Kz}=require("stream"),yge=ue(),Qz=QP(),Rge=JP(),{BulkLoadFileObject:sL,BulkLoadDataObject:Age}=kz(),iL=MP(),{verifyBulkLoadAttributePerms:Jz}=fy(),DFe=tL(),MFe=sr(),vFe=Wi(),{databases:bge}=(Oe(),D(mt)),{coerceType:Ige}=(eg(),D(aq)),Yz="No records parsed from csv file.",eu=`${yge.get("HDB_ROOT")}/tmp`,{schemaRegex:wge}=qi(),Wz=1024*1024*2,zz=5e3,Nge={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};nj.exports={csvDataLoad:Cge,csvURLLoad:Oge,csvFileLoad:Pge,importFromS3:Lge};async function Cge(e,t){let r=by.dataObject(e);if(r)throw Jt(r,r.message,rn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=ej(e.schema,e.table),i=rL.parse(e.data,{header:!0,skipEmptyLines:!0,transform:nL.bind(null,s),dynamicTyping:!1}),a=new iL;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&Jz(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,a);let c=a.getPermsResponse();if(c)throw Jt(new Error,c,rn.BAD_REQUEST,void 0,void 0,!0);let l=new Age(e.action,e.schema,e.table,i.data);return n=await Qz.callOperationFunctionAsAwait(tj,l,null),n.message===Yz?Yz:rj(n.records,n.number_written)}catch(s){throw ru(s)}}o(Cge,"csvDataLoad");async function Oge(e){let t=by.urlObject(e);if(t)throw Jt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${eu}/${r}`;try{await Dge(e,r)}catch(s){throw Ef.error(Or.DOWNLOAD_FILE_ERR(r)+" - "+s),Jt(s,tu(Or.DOWNLOAD_FILE_ERR(r)))}try{let s=new sL(this.job_operation_function.name,e.action,e.schema,e.table,n,Ii.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await oL(s);return await Ay(n),i}catch(s){throw await Ay(n),ru(s)}}o(Oge,"csvURLLoad");async function Pge(e){let t=by.fileObject(e);if(t)throw Jt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r=new sL(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Ii.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await oL(r)}catch(n){throw ru(n)}}o(Pge,"csvFileLoad");async function Lge(e){let t=by.s3FileObject(e);if(t)throw Jt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Tge.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${eu}/${s}`;let i=new sL(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await Mge(s,e);let a=await oL(i);return await Ay(r),a}catch(n){throw await Ay(r),ru(n)}}o(Lge,"importFromS3");async function Dge(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Sge("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 Jt(n,s,n.statusCode,Ii.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Uge(r,e.csv_url),await vge(t,r.raw)}o(Dge,"downloadCSVFile");async function Mge(e,t){try{let r=`${eu}/${e}`;await wi.mkdirp(eu),await wi.writeFile(`${eu}/${e}`,"",{flag:"a+"});let n=await wi.createWriteStream(r),s=await Rge.getFileStreamFromS3(t);await new Promise((i,a)=>{s.on("error",function(c){a(c)}),s.pipe(n).on("error",function(c){a(c)}).on("close",function(){Ef.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Ef.error(Or.S3_DOWNLOAD_ERR+" - "+r),Jt(r,tu(Or.S3_DOWNLOAD_ERR))}}o(Mge,"downloadFileFromS3");async function vge(e,t){try{await wi.mkdirp(eu),await wi.writeFile(`${eu}/${e}`,t)}catch(r){throw Ef.error(Or.WRITE_TEMP_FILE_ERR),Jt(r,tu(Or.DEFAULT_BULK_LOAD_ERR))}}o(vge,"writeFileToTempFolder");async function Ay(e){if(e)try{await wi.access(e),await wi.unlink(e)}catch{Ef.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(Ay,"deleteTempFile");function Uge(e,t){if(e.statusCode!==jz.HTTP_STATUS_CODES.OK)throw Jt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,rn.BAD_REQUEST);if(!Nge[e.headers["content-type"]])throw Jt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,rn.BAD_REQUEST);if(!e.raw)throw Jt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,rn.BAD_REQUEST)}o(Uge,"validateURLResponse");async function oL(e){try{let t;switch(e.file_type){case Ii.VALID_S3_FILE_TYPES.CSV:t=await xge(e);break;case Ii.VALID_S3_FILE_TYPES.JSON:t=await Bge(e);break;default:throw Jt(new Error,Or.DEFAULT_BULK_LOAD_ERR,rn.BAD_REQUEST,Ii.LOG_LEVELS.ERROR,Or.INVALID_FILE_EXT_ERR(e))}return rj(t.records,t.number_written)}catch(t){throw ru(t)}}o(oL,"fileLoad");async function Xz(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let a={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await Ry.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&Jz(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Jt(c);r(l)}}o(Xz,"validateChunk");async function Zz(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;hf.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!hf.isEmpty(c)&&!hf.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),a=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await Qz.callOperationFunctionAsAwait(tj,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Jt(c,tu(Or.INSERT_CSV_ERR),rn.INTERNAL_SERVER_ERROR,Ii.LOG_LEVELS.ERROR,Or.INSERT_CSV_ERR+" - "+c);r(l)}}o(Zz,"insertChunk");async function xge(e){let t={records:0,number_written:0},r=ej(e.schema,e.table);try{let n=new iL,s=wi.createReadStream(e.file_path,{highWaterMark:Wz});s.setEncoding("utf8"),await rL.parsePromise(s,Xz.bind(null,e,n),nL.bind(null,r));let i=n.getPermsResponse();if(i)throw Jt(new Error,i,rn.BAD_REQUEST);return s=wi.createReadStream(e.file_path,{highWaterMark:Wz}),s.setEncoding("utf8"),await rL.parsePromise(s,Zz.bind(null,e,t),nL.bind(null,r)),s.destroy(),t}catch(n){throw Jt(n,tu(Or.PAPA_PARSE_ERR),rn.INTERNAL_SERVER_ERROR,Ii.LOG_LEVELS.ERROR,Or.PAPA_PARSE_ERR+n)}}o(xge,"callPapaParse");function ej(e,t){let r=bge[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>Ige(i,s));return n}o(ej,"createTransformMap");function nL(e,t,r){let n=e.get(r);return n?n(t):hf.autoCast(t)}o(nL,"typeFunction");async function Bge(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new iL,s=qz([wi.createReadStream(e.file_path,{encoding:"utf-8"}),Gz.withParser(),c=>c.value,new $z({batchSize:zz}),Vz(async c=>{await Xz(e,n,r,c)})]);await new Promise((c,l)=>{Kz(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Jt(new Error,i,rn.BAD_REQUEST);let a=qz([wi.createReadStream(e.file_path,{encoding:"utf-8"}),Gz.withParser(),c=>c.value,new $z({batchSize:zz}),Vz(async c=>{await Zz(e,t,r,c)})]);return await new Promise((c,l)=>{Kz(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw Jt(n,tu(Or.INSERT_JSON_ERR),rn.INTERNAL_SERVER_ERROR,Ii.LOG_LEVELS.ERROR,Or.INSERT_JSON_ERR+n)}}o(Bge,"insertJson");async function tj(e){let t={};try{e.data&&e.data.length>0&&Fge(e.data[0])?t=await kge(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Ef.info(t.message))}catch(r){throw ru(r)}return t}o(tj,"callBulkFileLoad");function Fge(e){let t=Object.keys(e);for(let r of t)if(!wge.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(Fge,"validateColumnNames");async function kge(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=Ry.insert;break;case"update":i=Ry.update;break;case"upsert":i=Ry.upsert;break;default:throw Jt(new Error,Or.INVALID_ACTION_PARAM_ERR(n),rn.BAD_REQUEST,Ii.LOG_LEVELS.ERROR,Or.INVALID_ACTION_PARAM_ERR(n))}try{let a=await i(s),c;switch(n){case"insert":c=a.inserted_hashes;break;case"update":c=a.update_hashes;break;case"upsert":c=a.upserted_hashes;break;default:break}if(Array.isArray(a.skipped_hashes)&&a.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)a.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=hf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw ru(a)}}o(kge,"bulkFileLoad");function rj(e,t){return`successfully loaded ${t} of ${e} records`}o(rj,"buildResponseMsg");function ru(e){return Jt(e,tu(Or.DEFAULT_BULK_LOAD_ERR),rn.INTERNAL_SERVER_ERROR,Ii.LOG_LEVELS.ERROR,Or.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(ru,"buildTopLevelErrMsg")});var uL=M((BFe,dj)=>{"use strict";var lL=fn(),Hge=JP(),{AsyncParser:qge}=require("json2csv"),Iy=require("stream"),Es=oe(),cL=require("fs-extra"),Gge=require("path"),zs=Q(),{promisify:oj}=require("util"),nE=oe(),{handleHDBError:_r,hdbErrors:$ge}=_e(),{HDB_ERROR_MSGS:Kn,HTTP_STATUS_CODES:gr}=$ge,{streamAsJSON:Vge}=(KA(),D(bU)),{Upload:Kge}=require("@aws-sdk/lib-storage"),{toCsvStream:Yge}=(Po(),D(vU)),sj=["search_by_value","search_by_hash","sql","search_by_conditions"],ij=["json","csv"],aj="json",cj="csv",Wge="Successfully exported JSON locally.",zge="Successfully exported CSV locally.",jge=1e3,Qge=lL.searchByHash,Jge=lL.searchByValue,Xge=oj(Iy.finished);dj.exports={export_to_s3:rSe,export_local:Zge};async function Zge(e){zs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=lj(e);if(!Es.isEmpty(t))throw zs.error(t),_r(new Error,t,gr.BAD_REQUEST,void 0,void 0,!0);if(Es.isEmpty(e.path))throw zs.error(Kn.MISSING_VALUE("path")),_r(new Error,Kn.MISSING_VALUE("path"),gr.BAD_REQUEST,void 0,void 0,!0);let r=(Es.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Gge.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Es.buildFolderPath(e.path,r);await eSe(e.path);let s=await uj(e);return await tSe(n,e.format,s)}o(Zge,"export_local");async function eSe(e){if(zs.trace("in confirmPath"),Es.isEmptyOrZeroLength(e))throw _r(new Error,`Invalid path: ${e}`,gr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await cL.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),_r(new Error,n,gr.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),_r(new Error,r,gr.BAD_REQUEST,void 0,void 0,!0)}return!0}o(eSe,"confirmPath");async function tSe(e,t,r){if(zs.trace("in saveToLocal"),nE.isEmptyOrZeroLength(e))throw _r(new Error,Kn.INVALID_VALUE("file_path"),gr.BAD_REQUEST,void 0,void 0,!0);if(nE.isEmptyOrZeroLength(t))throw _r(new Error,Kn.INVALID_VALUE("Source format"),gr.BAD_REQUEST,void 0,void 0,!0);if(nE.isEmpty(r))throw _r(new Error,Kn.NOT_FOUND("Data"),gr.BAD_REQUEST,void 0,void 0,!0);if(t===aj){let n=cL.createWriteStream(e);return Vge(r).pipe(n),await Xge(n),{message:Wge,path:e}}else if(t===cj){let n=cL.createWriteStream(e),s=Iy.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new qge(i,c).fromInput(s).toOutput(n).promise(!1),{message:zge,path:e}}throw _r(new Error,Kn.INVALID_VALUE("format"),gr.BAD_REQUEST)}o(tSe,"saveToLocal");async function rSe(e){if(!e.s3||Object.keys(e.s3).length===0)throw _r(new Error,Kn.MISSING_VALUE("S3 object"),gr.BAD_REQUEST);if(Es.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw _r(new Error,Kn.MISSING_VALUE("aws_access_key_id"),gr.BAD_REQUEST);if(Es.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw _r(new Error,Kn.MISSING_VALUE("aws_secret_access_key"),gr.BAD_REQUEST);if(Es.isEmptyOrZeroLength(e.s3.bucket))throw _r(new Error,Kn.MISSING_VALUE("bucket"),gr.BAD_REQUEST);if(Es.isEmptyOrZeroLength(e.s3.key))throw _r(new Error,Kn.MISSING_VALUE("key"),gr.BAD_REQUEST);if(Es.isEmptyOrZeroLength(e.s3.region))throw _r(new Error,Kn.MISSING_VALUE("region"),gr.BAD_REQUEST);let t=lj(e);if(!Es.isEmpty(t))throw _r(new Error,t,gr.BAD_REQUEST);zs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await uj(e)}catch(l){throw zs.error(l),l}let n,s=await Hge.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new Iy.PassThrough;if(e.format===cj){i=e.s3.key+".csv";let l=Yge(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===aj){i=e.s3.key+".json";let l=new Iy.Readable;l.pipe(a),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%jge===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw _r(new Error,Kn.INVALID_VALUE("format"),gr.BAD_REQUEST);return new Kge({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(rSe,"export_to_s3");function lj(e){if(zs.trace("in exportCoreValidation"),Es.isEmpty(e.format))return"format missing";if(ij.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${ij.join(", ")}`;let t=e.search_operation.operation;if(Es.isEmpty(t))return"search_operation.operation missing";if(sj.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${sj.join(", ")}`}o(lj,"exportCoreValidation");async function uj(e){zs.trace("in getRecords");let t,r;if(nE.isEmpty(e.search_operation)||nE.isEmptyOrZeroLength(e.search_operation.operation))throw _r(new Error,Kn.INVALID_VALUE("Search operation"),gr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Jge;break;case"search_by_hash":t=Qge;break;case"search_by_conditions":t=lL.searchByConditions;break;case"sql":{let n=py();t=oj(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,zs.error(r),_r(new Error,r,gr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}o(uj,"getRecords")});var mj=M((kFe,fj)=>{"use strict";var dL=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};fj.exports=dL});var Ej=M((qFe,hj)=>{"use strict";var nSe=(H(),D(W)),pj=require("moment"),sSe=require("uuid").v4,fL=class{static{o(this,"JobObject")}constructor(){this.id=sSe(),this.type=void 0,this.start_datetime=pj().valueOf(),this.created_datetime=pj().valueOf(),this.end_datetime=void 0,this.status=nSe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};hj.exports=fL});var Ny=M(($Fe,bj)=>{"use strict";var iSe=require("uuid").v4,yj=Bn(),Rj=fn(),oSe=di(),aSe=Ju(),cSe=mj(),Ct=(H(),D(W)),lSe=Ej(),uSe=mS(),Ni=Q(),dSe=fm(),_f=oe(),{promisify:fSe}=require("util"),nu=require("moment"),mSe=py(),wy=jP(),_j=iw(),{deleteTransactionLogsBeforeValidator:pSe}=nP(),{handleHDBError:gj,hdbErrors:hSe,ClientError:ESe}=_e(),{HTTP_STATUS_CODES:Sj}=hSe,Tj=Rj.searchByValue,_Se=Rj.searchByHash,gSe=yj.insert,SSe=fSe(mSe.evaluateSQL),TSe=yj.update;bj.exports={addJob:ASe,updateJob:ISe,handleGetJob:ySe,handleGetJobsByStartDate:RSe,getJobById:Aj};async function ySe(e){if(e.id===void 0)throw new ESe("'id' is required");let t=await Aj(e.id);return _f.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}o(ySe,"handleGetJob");async function RSe(e){try{let t=await bSe(e);if(Ni.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=nu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=nu(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 Ni.error(r),new Error(r)}}o(RSe,"handleGetJobsByStartDate");async function ASe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||_f.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Ni.info(d),t.error=d,t}if(!Ct.JOB_TYPE_ENUM[e.operation])return Ni.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ct.OPERATIONS_ENUM.CSV_FILE_LOAD:n=wy.fileObject(e);break;case Ct.OPERATIONS_ENUM.CSV_URL_LOAD:n=wy.urlObject(e);break;case Ct.OPERATIONS_ENUM.CSV_DATA_LOAD:n=wy.dataObject(e);break;case Ct.OPERATIONS_ENUM.IMPORT_FROM_S3:n=wy.s3FileObject(e);break;case Ct.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ct.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=_j(e,"date");break;case Ct.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=_j(e,"timestamp");break;case Ct.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=pSe(e);break;case Ct.OPERATIONS_ENUM.RESTART_SERVICE:if(Ct.HDB_PROCESS_SERVICES[e.service]===void 0)throw gj(new Error,"Invalid service",Sj.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw gj(n,n.message,Sj.BAD_REQUEST,void 0,void 0,!0);let s=new lSe;s.type=e.operation===Ct.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ct.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new oSe(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await Tj(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ni.error(f),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){s.id=iSe();try{a=await Tj(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ni.error(f),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return Ni.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new dSe(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await gSe(l)}catch(d){return Ni.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,Ni.trace(d)}return t}o(ASe,"addJob");async function bSe(e){let t=nu(e.from_date,nu.ISO_8601),r=nu(e.to_date,nu.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 cSe(n,e.hdb_user);try{return await SSe(s)}catch(i){throw Ni.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.")}}o(bSe,"getJobsInDateRange");async function Aj(e){if(_f.isEmptyOrZeroLength(e))return _f.errorizeMessage("Invalid job ID specified.");let t=new aSe(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await _Se(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Ni.error(n),_f.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o(Aj,"getJobById");async function ISe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(_f.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ct.JOB_STATUS_ENUM.COMPLETE||e.status===Ct.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=nu().valueOf());let t=new uSe(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await TSe(t),r}o(ISe,"updateJob")});var Dj=M((KFe,Lj)=>{"use strict";var Ij=oe(),Pr=(H(),D(W)),wSe=require("moment"),Cy=aL(),sE=Q(),wj=Ny(),Nj=uL(),Cj=gl(),Oj=nt(),NSe=ey(),CSe=cf(),{parentPort:OSe,isMainThread:Pj}=require("worker_threads"),{onMessageByType:PSe}=nt(),mL=class{static{o(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function LSe(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(Ij.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Ij.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Pr.JOB_TYPE_ENUM.csv_file_load:await so(e,Cy.csvFileLoad);break;case Pr.JOB_TYPE_ENUM.csv_url_load:await so(e,Cy.csvURLLoad);break;case Pr.JOB_TYPE_ENUM.csv_data_load:await so(e,Cy.csvDataLoad);break;case Pr.JOB_TYPE_ENUM.import_from_s3:await so(e,Cy.importFromS3);break;case Pr.JOB_TYPE_ENUM.empty_trash:break;case Pr.JOB_TYPE_ENUM.export_local:await so(e,Nj.export_local);break;case Pr.JOB_TYPE_ENUM.export_to_s3:await so(e,Nj.export_to_s3);break;case Pr.JOB_TYPE_ENUM.delete_files_before:case Pr.JOB_TYPE_ENUM.delete_records_before:await so(e,Cj.deleteFilesBefore);break;case Pr.JOB_TYPE_ENUM.delete_audit_logs_before:await so(e,Cj.deleteAuditLogsBefore);break;case Pr.JOB_TYPE_ENUM.delete_transaction_logs_before:await so(e,NSe.deleteTransactionLogsBefore);break;case Pr.JOB_TYPE_ENUM.restart_service:return await so(e,CSe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o(LSe,"parseMessage");async function so(e,t){try{e.job.status=Pr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=wSe().valueOf(),await wj.updateJob(e.job),await DSe(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):sE.error(`There was an error running ${t.name} job with id ${e.job.id}`),sE.error(n),e.job.message=n,e.job.status=Pr.JOB_STATUS_ENUM.ERROR;try{await wj.updateJob(e.job)}catch(s){throw sE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(so,"runJob");async function DSe(e){sE.trace("launching job thread:",e),Pj?Oj.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Pr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):OSe.postMessage({type:Pr.ITC_EVENT_TYPES.START_JOB,jobId:e})}o(DSe,"launchJobThread");Pj&&PSe(Pr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{Oj.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Pr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){sE.error(r)}});Lj.exports={parseMessage:LSe,RunnerMessage:mL}});var vj=M((WFe,Mj)=>{"use strict";var MSe=oe(),pL=ue(),Ec=(H(),D(W)),vSe=wt(),USe=sr(),io=Q(),xSe=tL(),BSe=Wi();pL.initSync();Mj.exports={postOperationHandler:kSe,sendOperationTransaction:iE};async function iE(e,t,r,n){if(e.schema===Ec.SYSTEM_SCHEMA_NAME)return;let s=FSe(e,t,r);s&&(io.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await USe.publishToStream(`${vSe.SUBJECT_PREFIXES.TXN}.${e.schema}`,BSe.createNatsTableStreamName(e.schema,e.table),n,s))}o(iE,"sendOperationTransaction");function FSe(e,t,r){if(MSe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Ec.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(FSe,"convertCRUDOperationToTransaction");async function kSe(e,t,r){if(!pL.get(Ec.CONFIG_PARAMS.CLUSTERING_ENABLED))return;io.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=pL.get(Ec.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new xSe(t.txn_time,n,s);switch(e.operation){case Ec.OPERATIONS_ENUM.INSERT:try{await iE(e,t.inserted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for insert."),io.error(a)}break;case Ec.OPERATIONS_ENUM.DELETE:try{await iE(e,t.deleted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for delete."),io.error(a)}break;case Ec.OPERATIONS_ENUM.UPDATE:try{await iE(e,t.update_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for update."),io.error(a)}break;case Ec.OPERATIONS_ENUM.UPSERT:try{await iE(e,t.upserted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for upsert."),io.error(a)}break;default:break}return t}o(kSe,"postOperationHandler")});var Z,Uj=ie(()=>{Z=class{static{o(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var jT={};Ie(jT,{chooseOperation:()=>e2,executeJob:()=>js,getOperationFunction:()=>t2,operation:()=>AL,processLocalTransaction:()=>Zj});async function Zj(e,t){try{if(e.body.operation!=="read_log"&&(lE.default.log_level===Jf.INFO||lE.default.log_level===Jf.DEBUG||lE.default.log_level===Jf.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:a,...c}=e.body;Rn.info(c)}}catch(n){Rn.error(n)}let r=await Jj.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return $Se[e.body.operation]&&Wj.default.setSchemaDataToGlobal(n=>{n&&Rn.error(n)}),r}function e2(e){let t;try{t=t2(e)}catch(s){throw Rn.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=Py.default.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let a=Py.default.checkASTPermissions(e,i);if(a)throw Rn.error(`${xj.FORBIDDEN} from operation ${e.operation}`),Rn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,Qs.handleHDBError)(new Error,a,Qs.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 a=Yj.default.verifyPerms(i,s);if(a)throw Rn.error(`${xj.FORBIDDEN} from operation ${e.operation}`),Rn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,Qs.handleHDBError)(new Error,a,Qs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,Qs.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function t2(e){if(Rn.trace(`getOperationFunction with operation: ${e.operation}`),Bj.has(e.operation))return Bj.get(e.operation);throw(0,Qs.handleHDBError)(new Error,Qs.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Qs.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function AL(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=e2(e);return Zj({body:e},n)}async function VSe(e){Rn.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[TA]=!0;let a;switch(i.operation){case V.INSERT:a=await iu.default.insert(i);break;case V.UPDATE:a=await iu.default.update(i);break;case V.UPSERT:a=await iu.default.upsert(i);break;case V.DELETE:a=await Tf.default.deleteRecord(i);break;default:Rn.warn("invalid operation in catchup");break}await HSe.postOperationHandler(i,a,e)}catch(a){Rn.info("Invalid operation in transaction"),Rn.error(a)}}async function js(e){(0,Qj.transformReq)(e);let t,r;try{if(r=await Ly.default.addJob(e),r){t=r.createdJob,Rn.info("addJob result",r);let n=new gL.default.RunnerMessage(t,e);return{message:await gL.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 Rn.error(i),(0,Qs.handleHDBError)(n,i)}}function KSe(){let e=new Map;return e.set(V.INSERT,new Z(iu.default.insert)),e.set(V.UPDATE,new Z(iu.default.update)),e.set(V.UPSERT,new Z(iu.default.upsert)),e.set(V.SEARCH_BY_CONDITIONS,new Z(Sf.default.searchByConditions)),e.set(V.SEARCH_BY_HASH,new Z(Sf.default.searchByHash)),e.set(V.SEARCH_BY_ID,new Z(Sf.default.searchByHash)),e.set(V.SEARCH_BY_VALUE,new Z(Sf.default.searchByValue)),e.set(V.SEARCH,new Z(qSe)),e.set(V.SQL,new Z(GSe)),e.set(V.CSV_DATA_LOAD,new Z(js,oE.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new Z(js,oE.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new Z(js,oE.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new Z(js,oE.default.importFromS3)),e.set(V.CREATE_SCHEMA,new Z(oo.default.createSchema)),e.set(V.CREATE_DATABASE,new Z(oo.default.createSchema)),e.set(V.CREATE_TABLE,new Z(oo.default.createTable)),e.set(V.CREATE_ATTRIBUTE,new Z(oo.default.createAttribute)),e.set(V.DROP_SCHEMA,new Z(oo.default.dropSchema)),e.set(V.DROP_DATABASE,new Z(oo.default.dropSchema)),e.set(V.DROP_TABLE,new Z(oo.default.dropTable)),e.set(V.DROP_ATTRIBUTE,new Z(oo.default.dropAttribute)),e.set(V.DESCRIBE_SCHEMA,new Z(aE.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new Z(aE.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new Z(aE.default.describeTable)),e.set(V.DESCRIBE_ALL,new Z(aE.default.describeAll)),e.set(V.DELETE,new Z(Tf.default.deleteRecord)),e.set(V.ADD_USER,new Z(gf.default.addUser)),e.set(V.ALTER_USER,new Z(gf.default.alterUser)),e.set(V.DROP_USER,new Z(gf.default.dropUser)),e.set(V.LIST_USERS,new Z(gf.default.listUsersExternal)),e.set(V.LIST_ROLES,new Z(cE.default.listRoles)),e.set(V.ADD_ROLE,new Z(cE.default.addRole)),e.set(V.ALTER_ROLE,new Z(cE.default.alterRole)),e.set(V.DROP_ROLE,new Z(cE.default.dropRole)),e.set(V.USER_INFO,new Z(gf.default.userInfo)),e.set(V.READ_LOG,new Z(kj.default)),e.set(V.ADD_NODE,new Z(Hj.default)),e.set(V.UPDATE_NODE,new Z(hL.default)),e.set(V.SET_NODE_REPLICATION,new Z(hL.default)),e.set(V.REMOVE_NODE,new Z(qj.default)),e.set(V.CONFIGURE_CLUSTER,new Z(Gj.default)),e.set(V.PURGE_STREAM,new Z($j.default)),e.set(V.SET_CONFIGURATION,new Z(SL.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new Z(Vj.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new Z(Kj.default)),e.set(V.CLUSTER_SET_ROUTES,new Z(Oy.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new Z(Oy.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new Z(Oy.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new Z(js,EL.default.export_to_s3)),e.set(V.CREATE_CSR,new Z(su.default.createCsr)),e.set(V.SIGN_CERTIFICATE,new Z(su.default.signCertificate)),e.set(V.LIST_CERTIFICATES,new Z(su.default.listCertificates)),e.set(V.ADD_CERTIFICATES,new Z(su.default.addCertificate)),e.set(V.REMOVE_CERTIFICATE,new Z(su.default.removeCertificate)),e.set(V.GET_KEY,new Z(su.default.getKey)),e.set(V.ADD_NODE_BACK,new Z(aO)),e.set(V.REMOVE_NODE_BACK,new Z(cO)),e.set(V.DELETE_FILES_BEFORE,new Z(js,Tf.default.deleteFilesBefore)),e.set(V.DELETE_RECORDS_BEFORE,new Z(js,Tf.default.deleteFilesBefore)),e.set(V.EXPORT_LOCAL,new Z(js,EL.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new Z(Ly.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new Z(Ly.default.handleGetJob)),e.set(V.GET_REGISTRATION_INFO,new Z(NP)),e.set(V.RESTART,new Z(_L.default.restart)),e.set(V.RESTART_SERVICE,new Z(js,_L.default.restartService)),e.set(V.CATCHUP,new Z(VSe)),e.set(V.SYSTEM_INFORMATION,new Z(zj.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new Z(js,Tf.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new Z(Fj.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new Z(LN)),e.set(V.REFRESH_OPERATION_TOKEN,new Z(DN)),e.set(V.LOGIN,new Z(jO)),e.set(V.LOGOUT,new Z(QO)),e.set(V.GET_CONFIGURATION,new Z(SL.default.getConfiguration)),e.set(V.CUSTOM_FUNCTIONS_STATUS,new Z(Ot.default.customFunctionsStatus)),e.set(V.GET_CUSTOM_FUNCTIONS,new Z(Ot.default.getCustomFunctions)),e.set(V.GET_COMPONENT_FILE,new Z(Ot.default.getComponentFile)),e.set(V.GET_COMPONENTS,new Z(Ot.default.getComponents)),e.set(V.SET_COMPONENT_FILE,new Z(Ot.default.setComponentFile)),e.set(V.DROP_COMPONENT,new Z(Ot.default.dropComponent)),e.set(V.GET_CUSTOM_FUNCTION,new Z(Ot.default.getCustomFunction)),e.set(V.SET_CUSTOM_FUNCTION,new Z(Ot.default.setCustomFunction)),e.set(V.DROP_CUSTOM_FUNCTION,new Z(Ot.default.dropCustomFunction)),e.set(V.ADD_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.addComponent)),e.set(V.ADD_COMPONENT,new Z(Ot.default.addComponent)),e.set(V.DROP_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.dropCustomFunctionProject)),e.set(V.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.packageComponent)),e.set(V.PACKAGE_COMPONENT,new Z(Ot.default.packageComponent)),e.set(V.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.deployComponent)),e.set(V.DEPLOY_COMPONENT,new Z(Ot.default.deployComponent)),e.set(V.READ_TRANSACTION_LOG,new Z(TL.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new Z(js,TL.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new Z(yL.default.installModules)),e.set(V.AUDIT_NODE_MODULES,new Z(yL.default.auditModules)),e.set(V.GET_BACKUP,new Z(oo.default.getBackup)),e.set(V.ADD_SSH_KEY,new Z(Ot.default.addSSHKey)),e.set(V.UPDATE_SSH_KEY,new Z(Ot.default.updateSSHKey)),e.set(V.DELETE_SSH_KEY,new Z(Ot.default.deleteSSHKey)),e.set(V.LIST_SSH_KEYS,new Z(Ot.default.listSSHKeys)),e.set(V.SET_SSH_KNOWN_HOSTS,new Z(Ot.default.setSSHKnownHosts)),e.set(V.GET_SSH_KNOWN_HOSTS,new Z(Ot.default.getSSHKnownHosts)),e.set(V.GET_ANALYTICS,new Z(iP)),e.set(V.LIST_METRICS,new Z(oP)),e.set(V.DESCRIBE_METRIC,new Z(aP)),e.set(V.GET_STATUS,new Z(hP)),e.set(V.SET_STATUS,new Z(EP)),e.set(V.CLEAR_STATUS,new Z(pP)),e.set(V.INSTALL_USAGE_LICENSE,new Z(RP)),e.set(V.GET_USAGE_LICENSES,new Z(wP)),e}var Sf,Py,oE,oo,aE,Tf,Fj,gf,cE,Ot,lE,kj,Hj,hL,qj,Gj,$j,Vj,Kj,Oy,EL,Yj,Ly,Qs,_L,RL,iu,Wj,zj,gL,SL,TL,yL,jj,Qj,su,Jj,Xj,xj,Rn,HSe,qSe,GSe,$Se,Bj,QT=ie(()=>{Sf=w(fn()),Py=w(py()),oE=w(aL()),oo=w(cT()),aE=w(Ol()),Tf=w(gl()),Fj=w(UC()),gf=w(kn()),cE=w(xp()),Ot=w(rP()),lE=w(Q()),kj=w(HC()),Hj=w(TT()),hL=w(mO()),qj=w(RT()),Gj=w(EO()),$j=w(_O()),Vj=w(TO()),Kj=w(RO()),Oy=w(NT()),EL=w(uL()),Yj=w(fy()),Ly=w(Ny());H();Qs=w(_e()),_L=w(cf()),RL=w(require("util")),iu=w(Bn()),Wj=w(mi()),zj=w(Qd()),gL=w(Dj());wd();$T();SL=w(yt()),TL=w(ey()),yL=w(Fh()),jj=w(ii()),Qj=w(oe());xr();su=w(fs());Xd();lP();Jj=w(QP()),Xj=w(vj());Yh();Qh();OP();Uj();({HTTP_STATUS_CODES:xj}=Qs.hdbErrors),Rn=lE.default.loggerWithTag("operation"),{transactToClusteringUtils:HSe}=Xj.default,qSe=RL.promisify(Sf.default.search),GSe=RL.promisify(Py.default.evaluateSQL),$Se={[V.CREATE_ATTRIBUTE]:!0,[V.CREATE_TABLE]:!0,[V.CREATE_SCHEMA]:!0,[V.DROP_ATTRIBUTE]:!0,[V.DROP_TABLE]:!0,[V.DROP_SCHEMA]:!0};o(Zj,"processLocalTransaction");Bj=KSe();Ue.operation=AL;o(e2,"chooseOperation");o(t2,"getOperationFunction");(0,jj._assignPackageExport)("operation",AL);o(AL,"operation");o(VSe,"catchup");o(js,"executeJob");o(KSe,"initializeOperationFunctionMap")});var vy=M((eke,s2)=>{"use strict";var Dy=(H(),D(W)),YSe=oe(),uE=Q(),{handleHDBError:bL,hdbErrors:My}=_e(),{isMainThread:WSe}=require("worker_threads"),{Readable:zSe}=require("stream"),r2=require("os"),jSe=require("util"),QSe=vN(),JSe=jSe.promisify(QSe.authorize),n2=(QT(),D(jT)),{createGzip:XSe,constants:ZSe}=require("zlib"),eTe=[Dy.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,Dy.OPERATIONS_ENUM.LOGIN,Dy.OPERATIONS_ENUM.LOGOUT];function tTe(e){let t=`Found an uncaught exception with message: ${e.message}. ${r2.EOL}Stack: ${e.stack} ${r2.EOL}Terminating ${WSe?"HDB":"thread"}.`;console.error(t),uE.fatal(t),process.exit(1)}o(tTe,"handleServerUncaughtException");function rTe(e,t,r){if(uE[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:My.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)}o(rTe,"serverErrorHandler");function nTe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=bL(new Error,"Invalid JSON.",My.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(YSe.isEmpty(e.body.operation)){let n=bL(new Error,"Request body must include an 'operation' property.",My.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o(nTe,"reqBodyValidationHandler");function sTe(e,t,r){let n;!eTe.includes(e.body.operation)||e.body.operation===Dy.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?JSe(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{uE.warn(i),uE.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(bL(i,a,My.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}o(sTe,"authHandler");async function iTe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=n2.chooseOperation(e.body);let s=await n2.processLocalTransaction(e,n);if(s instanceof zSe&&s.headers){for(let[i,a]of s.headers)t.header(i,a);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(XSe({level:ZSe.Z_BEST_SPEED})))}return s}catch(s){throw uE.error(s),s}}o(iTe,"handlePostRequest");s2.exports={authHandler:sTe,handlePostRequest:iTe,handleServerUncaughtException:tTe,serverErrorHandler:rTe,reqBodyValidationHandler:nTe}});var c2=M((rke,a2)=>{"use strict";var oTe=require("fastify-plugin"),{handlePostRequest:i2,authHandler:aTe,reqBodyValidationHandler:cTe}=vy();async function lTe(e){e.decorate("hdbCore",{preValidation:[cTe,aTe],request:o(t=>o2(i2(t,response)),"request"),requestWithoutAuthentication:o((t,r)=>o2(i2(t,r,!0)),"requestWithoutAuthentication")})}o(lTe,"hdbCore");async function o2(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}o(o2,"convertAsyncIterators");a2.exports=oTe(lTe)});var u2=M((ike,l2)=>{"use strict";var ske=require("fs"),Uy=ue();Uy.initSync();var{CONFIG_PARAMS:IL}=(H(),D(W)),uTe=1024*1024*1024;function dTe(e){let t=Uy.get(IL.HTTP_TIMEOUT),r=Uy.get(IL.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:uTe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:Uy.get(IL.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o(dTe,"getServerOptions");l2.exports=dTe});var m2=M((ake,f2)=>{"use strict";var wL=ue();wL.initSync();var{CONFIG_PARAMS:d2}=(H(),D(W));function fTe(){let e=wL.get(d2.HTTP_CORSACCESSLIST),t=wL.get(d2.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}o(fTe,"getCORSOptions");f2.exports=fTe});var E2=M((lke,h2)=>{"use strict";var p2=ue();p2.initSync();var mTe=(H(),D(W));function pTe(){return p2.get(mTe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o(pTe,"getHeaderTimeoutConfig");h2.exports=pTe});var CL={};Ie(CL,{customFunctionsServer:()=>_Te,ready:()=>P2,start:()=>ETe});function ETe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){la||(la=O2(t),Ue.http((await la).server));let a=await la,c=(0,NL.dirname)(s),l=(0,NL.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!_2.has(c)){_2.add(c);try{a.register(STe(c,l))}catch(u){if(u.message==="Root plugin has already booted")gt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:P2}}async function _Te(){try{gt.info("In Custom Functions Fastify server"+process.cwd()),gt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),gt.debug(`Custom Functions server process ${process.pid} starting up.`),await gTe();let e=A2.get(B.HTTP_SECUREPORT)>0,t;try{t=la=await O2(e)}catch(r){throw gt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw gt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){gt.error(`Custom Functions ${process.pid} Error: ${e}`),gt.error(e),process.exit(1)}}async function gTe(){try{gt.info("Custom Functions starting configuration."),await b2.setUsersWithRolesCache(),gt.info("Custom Functions completed configuration.")}catch(e){gt.error(e)}}function STe(e,t){return async function(r){try{gt.info("Custom Functions starting buildRoutes"),gt.trace("Loading fastify routes folder "+e),(0,g2.existsSync)(e)&&r.register(R2.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:gt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,a)=>{s?.message?gt.error(s.message):s&>.error(s),a()})}catch(n){gt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function O2(e){gt.info("Custom Functions starting buildServer.");let t=(0,I2.default)(e),r=(0,S2.default)(t);r.server.headersTimeout=(0,N2.default)(),r.setErrorHandler(C2.serverErrorHandler);let n=(0,w2.default)();return n&&r.register(T2.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(y2.default),await r.register(hTe),await r.after(),Tm(r),gt.info("Custom Functions completed buildServer."),r}function P2(){if(la)return la.then?la.then(e=>e.ready()):la.ready()}var NL,g2,S2,T2,y2,R2,A2,gt,hTe,b2,I2,w2,N2,C2,la,_2,L2=ie(()=>{NL=require("path"),g2=require("fs"),S2=w(require("fastify")),T2=w(require("@fastify/cors")),y2=w(NN()),R2=w(require("@fastify/autoload")),A2=w(ue());H();gt=w(Q()),hTe=w(c2()),b2=w(kn()),I2=w(u2()),w2=w(m2()),N2=w(E2()),C2=w(vy());Po();xr();_2=new Set;o(ETe,"start");o(_Te,"customFunctionsServer");o(gTe,"setUp");o(STe,"buildRouteFolder");o(O2,"buildServer");o(P2,"ready")});var PL={};Ie(PL,{handleApplication:()=>TTe,suppressHandleApplicationWarning:()=>yTe});function TTe(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,Rf.join)(n.absolutePath,"index.html");(0,yf.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,Rf.dirname)(n.urlPath),n.absolutePath);break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,Rf.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 a=t.get(n.pathname);if(!a){let d=e.options.get(["index"])??!1;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);d&&(a=r.get(n.pathname))}if(!a){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(a=t.get(`${n.pathname}.${f}`),a)break}if(a)return{handlesHeaders:!0,body:(0,OL.default)(n,(0,yf.realpathSync)(a))};if(i)return s(n);let c=e.options.get(["notFound"]);if(RTe(c),!c)return{status:404,body:"File not found"};let l=(0,Rf.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,yf.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,OL.default)(n,(0,yf.realpathSync)(l))}},{runFirst:!0})}function RTe(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 yf,Rf,OL,yTe,D2=ie(()=>{yf=require("node:fs"),Rf=require("node:path"),OL=w(require("send"));o(TTe,"handleApplication");yTe=!0;o(RTe,"validateNotFoundOption")});var LL={};Ie(LL,{start:()=>ATe});function ATe({override:e}){return{handleFile:o((t,r,n)=>{xy.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,M2.parse)(t))){if(process.env[s]!==void 0)if(xy.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)xy.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var M2,xy,v2=ie(()=>{M2=require("dotenv"),xy=w(Q());o(ATe,"start")});var DL={};Ie(DL,{DataLoaderError:()=>_s,DataLoaderResult:()=>Af,EmptyFileError:()=>ky,FileParseError:()=>Fy,InvalidPropertyTypeError:()=>Hy,MissingRequiredPropertyError:()=>dE,RecordProcessingError:()=>fE,SystemDatabaseError:()=>qy,UnsupportedFileExtensionError:()=>By,handleApplication:()=>ITe,loadDataFile:()=>k2,suppressHandleApplicationWarning:()=>bTe});function ITe(e){if((0,x2.getWorkerIndex)()!==0){ao.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||k2(t,pn,Me).then(r=>{ao.debug?.("Data loader processed file: %s: %s",(0,ua.basename)(t.absolutePath),r.message)})})}async function k2({contents:e,absolutePath:t,stats:r},n,s){let i=(0,ua.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,U2.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new By(t,i);a.mtime=r.mtimeMs}catch(f){throw f instanceof _s?f:new Fy(t,f)}if(!a)throw new ky(t);let{database:c,table:l,records:u}=a;if(!l)throw new dE(t,"table");if(!u)throw new dE(t,"records");if(!Array.isArray(u))throw new Hy(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new qy(c,l);try{let f;if(c&&s[c]&&s[c][l])ao.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])ao.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{ao.debug?.(`Table ${d} not found, creating new table`);let A=[];if(u.length>0){let S=u[0];Object.keys(S).map(R=>{let N={name:R,type:typeof S[R]};return R==="id"&&(N.isPrimaryKey=!0),N}).forEach(R=>{A.push(R)})}f=await Xe({database:c,table:l,attributes:A})}let m=u.length,p=0,h=0,E=0,g=100;for(let A=0;A<u.length;A+=g){let S=u.slice(A,A+g),R=[];for(let N of S)R.push(async()=>{try{let O=null,F=N.id;if(F!==void 0&&(O=await f.get(F)),!O)return p++,f.put(N);let te=O.getUpdatedTime();return a.mtime>te?(h++,f.put(N)):(E++,Promise.resolve({inserted:0,updated:0}))}catch(O){if(O instanceof _s)ao.error?.(`Record processing error: ${O.message}`);else{let F=new fE(d,O);ao.error?.(`Record processing error: ${F.message}`)}return Promise.resolve({inserted:0,updated:0,error:O.message})}});await Promise.all(R.map(N=>N()))}if(p>0||h>0){let A=`Loaded ${p} new and updated ${h} records in ${d}`;return E>0&&(A+=` (${E} records skipped)`),ao.info?.(A),new Af(t,c,l,"success",p+h,A)}else if(E>0){let A=`All ${E} records in ${d} already up-to-date`;return ao.info?.(A),new Af(t,c,l,"skipped",m,A)}else{let A=`No records to process in ${d}`;return ao.info?.(A),new Af(t,c,l,"success",0,A)}}catch(f){throw f instanceof _s?f:new fE(d,f)}}var ua,U2,x2,da,B2,F2,ao,bTe,_s,By,Fy,ky,dE,Hy,qy,fE,Af,H2=ie(()=>{ua=require("node:path"),U2=require("yaml");Oe();x2=w(nt()),da=w(Kr()),B2=w(_e()),F2=w(Q()),ao=F2.default.forComponent("dataLoader"),bTe=!0;o(ITe,"handleApplication");o(k2,"loadDataFile");_s=class extends B2.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=da.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},By=class extends _s{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,ua.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,da.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},Fy=class extends _s{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,ua.basename)(t)}: ${r.message}`,da.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},ky=class extends _s{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,ua.basename)(t)} is empty or invalid`,da.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},dE=class extends _s{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,ua.basename)(t)} is missing required "${r}" property`,da.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},Hy=class extends _s{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,ua.basename)(t)} has invalid "${r}" property, expected ${n}`,da.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},qy=class extends _s{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,da.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},fE=class extends _s{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,da.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},Af=class{static{o(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,a){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=a}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#r}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#r,status:this.#n,count:this.#s,message:this.#i}}}});var vL=M((yke,q2)=>{"use strict";var mE=ue();mE.initSync();var bf=require("fs-extra"),ML=require("path"),If=(H(),D(W)),wTe=require("crypto"),NTe=require("uuid").v4;q2.exports=CTe;function CTe(){if(mE.getHdbBasePath()!==void 0){let e=ML.join(mE.getHdbBasePath(),If.LICENSE_KEY_DIR_NAME,If.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=ML.join(mE.getHdbBasePath(),If.LICENSE_KEY_DIR_NAME,If.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=ML.join(mE.getHdbBasePath(),If.LICENSE_KEY_DIR_NAME,If.JWT_ENUM.JWT_PASSPHRASE_NAME);try{bf.accessSync(r),bf.accessSync(e),bf.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=NTe(),i=wTe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});bf.writeFileSync(r,s),bf.writeFileSync(e,i.privateKey),bf.writeFileSync(t,i.publicKey)}else throw n}}}o(CTe,"checkJWTTokenExist")});var $2=M((Ake,G2)=>{"use strict";var UL=class{static{o(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};G2.exports={HdbInfoInsertObject:UL}});var Y2=M((Ike,K2)=>{"use strict";var V2=(H(),D(W)),xL=class{static{o(this,"UpgradeObject")}constructor(t,r){this[V2.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[V2.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};K2.exports={UpgradeObject:xL}});var Gy=M((Nke,z2)=>{"use strict";var Js=require("prompt"),wf=require("chalk"),W2=Q(),Ci=require("os"),BL=Hc(),FL=["yes","y"];async function OTe(e){let t=`${Ci.EOL}`+wf.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Ci.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ci.EOL}${Ci.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Ci.EOL}`;Js.override=BL(["CONFIRM_UPGRADE"]),Js.start(),Js.message=t;let r={properties:{CONFIRM_UPGRADE:{description:wf.magenta(`${Ci.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 W2.error("There was an error when prompting user about an upgrade."),W2.error(s),!1}return FL.includes(n.CONFIRM_UPGRADE)}o(OTe,"forceUpdatePrompt");async function PTe(e){let t=`${Ci.EOL}`+wf.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.${Ci.EOL}`);Js.override=BL(["CONFIRM_DOWNGRADE"]),Js.start(),Js.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:wf.magenta(`${Ci.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)}o(PTe,"forceDowngradePrompt");async function LTe(){let e=`${Ci.EOL}`+wf.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=BL(["GENERATE_CERTS"]),Js.start(),Js.message=e;let t={properties:{GENERATE_CERTS:{description:wf.magenta(`${Ci.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)}o(LTe,"upgradeCertsPrompt");z2.exports={forceUpdatePrompt:OTe,forceDowngradePrompt:PTe,upgradeCertsPrompt:LTe}});var $y=M((Oke,j2)=>{"use strict";var kL=class{static{o(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};j2.exports=kL});var J2=M((Uke,Q2)=>{"use strict";var DTe=oe(),MTe=yt(),Lke=Q(),Dke=require("path"),Mke=require("fs"),vke=(H(),D(W));Q2.exports={getOldPropsValue:vTe};function vTe(e,t,r=!1){let n=t.getRaw(e);return DTe.isNotEmptyAndHasValue(n)?n:r?MTe.getDefaultConfig(e):""}o(vTe,"getOldPropsValue")});var tQ=M((Bke,eQ)=>{"use strict";var _c=require("path"),gc=require("fs-extra"),UTe=require("properties-reader"),xTe=$y(),Sr=Q(),{getOldPropsValue:St}=J2(),{HDB_SETTINGS_NAMES:Se,CONFIG_PARAMS:ou}=(H(),D(W)),au=yt(),Vy=ue(),X2=oe(),co=(H(),D(W)),HL=new xTe("3.1.0"),Z2=[];function BTe(){let e=UTe(Vy.get(Se.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Sr.info(t);let r=` ;Settings for the HarperDB process.
|
|
40
40
|
|
|
41
41
|
;The directory selected during install where the database files reside.
|
|
42
42
|
${Se.HDB_ROOT_KEY} = ${St(Se.HDB_ROOT_KEY,e)}
|
|
@@ -105,12 +105,12 @@ ${Se.CUSTOM_FUNCTIONS_PORT_KEY} = ${au.getDefaultConfig(ou.HTTP_PORT)}
|
|
|
105
105
|
${Se.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${_c.join(St(Se.HDB_ROOT_KEY,e),"custom_functions")}
|
|
106
106
|
;Set the max number of processes HarperDB will start for the Custom Functions server
|
|
107
107
|
${Se.MAX_CUSTOM_FUNCTION_PROCESSES} = ${au.getDefaultConfig(ou.HTTP_THREADS)}
|
|
108
|
-
`,n=Vy.get("settings_path"),s=_c.dirname(n),i=_c.join(s,"3_1_0_upgrade_settings.bak");try{Sr.info(`Backing up old settings file to: ${i}`),gc.copySync(n,i)}catch(c){throw Sr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Sr.info("New settings file values for 3.1.0 upgrade:",r),Sr.info(`Creating new/upgraded settings file at '${n}'`),gc.writeFileSync(n,r),Sr.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."),Sr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Sr.error(c),gc.copySync(i,n),c}Vy.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),Sr.info(a),a}o(
|
|
108
|
+
`,n=Vy.get("settings_path"),s=_c.dirname(n),i=_c.join(s,"3_1_0_upgrade_settings.bak");try{Sr.info(`Backing up old settings file to: ${i}`),gc.copySync(n,i)}catch(c){throw Sr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Sr.info("New settings file values for 3.1.0 upgrade:",r),Sr.info(`Creating new/upgraded settings file at '${n}'`),gc.writeFileSync(n,r),Sr.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."),Sr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Sr.error(c),gc.copySync(i,n),c}Vy.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),Sr.info(a),a}o(BTe,"updateSettingsFile310");function FTe(){let e=_c.join(X2.getHomeDir(),co.HDB_HOME_DIR_NAME,co.LICENSE_KEY_DIR_NAME,co.LICENSE_FILE_NAME),t=_c.join(X2.getHomeDir(),co.HDB_HOME_DIR_NAME,co.LICENSE_KEY_DIR_NAME,co.REG_KEY_FILE_NAME),r=_c.join(Vy.getHdbBasePath(),co.LICENSE_KEY_DIR_NAME,co.LICENSE_FILE_NAME),n=_c.join(r,co.LICENSE_FILE_NAME),s=_c.join(r,co.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Sr.info(i);let a="Creating .license directory";console.log(a),Sr.info(a),gc.mkdirpSync(r);try{gc.accessSync(e);try{let c="Moving licence file";console.log(c),Sr.info(c),gc.moveSync(e,n);let l="License file successfully moved.";console.log(l),Sr.info(l)}catch{let l="moving license file failed";console.error(l),Sr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Sr.warn(l)}try{gc.accessSync(t);try{let c="Moving registration file";console.log(c),Sr.info(c),gc.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Sr.info(l)}catch{let l="moving registration file failed";console.error(l),Sr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Sr.warn(l)}}o(FTe,"moveLicenseFiles");HL.sync_functions.push(BTe);HL.sync_functions.push(FTe);Z2.push(HL);eQ.exports=Z2});var oQ=M((kke,iQ)=>{"use strict";var gs=_t(),{insertRecords:kTe}=al(),HTe=Cn(),Sc=$t(),qTe=oe(),fa=Q(),GTe=oe(),lo=require("fs-extra"),ma=require("path"),$Te=require("cli-progress"),pE=require("assert"),VTe=require("pino"),KTe=ue();iQ.exports=YTe;var Ky,rQ,Yy,qL,An,hE=!1;async function YTe(e=!0){return Ky=KTe.getHdbBasePath(),rQ=ma.join(Ky,"schema"),Yy=ma.join(Ky,"4_0_0_upgrade_tmp"),qL=ma.join(Ky,"transactions"),console.info("Reindexing upgrade started for schemas"),fa.notify("Reindexing upgrade started for schemas"),await nQ(rQ,!1,e),await lo.pathExists(qL)&&(console.info(`
|
|
109
109
|
|
|
110
|
-
Reindexing upgrade started for transaction logs`),fa.notify("Reindexing upgrade started for transaction logs"),await
|
|
111
|
-
install_user = ${l}`;try{Tc.writeFileSync(a,u)}catch(f){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),f}try{kL.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{Tc.removeSync(r),console.log(d),cu.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}}o(aye,"updateSettingsFile400");gE.async_functions.push(aye);gE.async_functions.push(iye);gE.async_functions.push(nye);gE.async_functions.push(oye);iQ.push(gE);oQ.exports=iQ});var dQ=M((Fke,uQ)=>{var cye=$y(),{databases:lye,table:uye}=(Oe(),D(mt)),dye=$i(),HL=Q(),cQ=new cye("4.7.0"),lQ=[];async function fye(){let e=lye.system?.hdb_license;if(!e){HL.debug?.("system.hdb_license table not found; no migration necessary");return}return HL.debug?.("Dropping existing system.hdb_license table"),await e.dropTable(),HL.debug?.("Creating new usage block system.hdb_license table"),uye(dye.hdb_license)}o(fye,"convertToUsageBlockLicenses");cQ.async_functions.push(fye);lQ.push(cQ);uQ.exports=lQ});var qL=M((Hke,EQ)=>{"use strict";var lu=oe(),mye=(H(),D(W)),fQ=Q(),{DATA_VERSION:pye,UPGRADE_VERSION:hye}=mye.UPGRADE_JSON_FIELD_NAMES_ENUM,mQ=J2(),jy=aQ(),pQ=dQ(),yc=new Map;mQ&&mQ.forEach(e=>{yc.set(e.version,e)});jy&&jy.forEach(e=>{yc.set(e.version,e)});jy&&jy.forEach(e=>{yc.set(e.version,e)});pQ&&pQ.forEach(e=>{yc.set(e.version,e)});function Eye(){return[...yc.keys()].sort(lu.compareVersions)}o(Eye,"getSortedVersions");function hQ(e){let t=e[pye],r=e[hye];return lu.isEmptyOrZeroLength(t)||lu.isEmptyOrZeroLength(r)?(fQ.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),fQ.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."),[]):[...yc.keys()].sort(lu.compareVersions).filter(function(n){return lu.compareVersions(n,t)>0&&lu.compareVersions(n,r)<=0})}o(hQ,"getVersionsForUpgrade");function _ye(e){return hQ(e).length>0}o(_ye,"hasUpgradesRequired");function gye(e){return lu.isEmptyOrZeroLength(e)?null:yc.has(e)?yc.get(e):null}o(gye,"getDirectiveByVersion");EQ.exports={getSortedVersions:Eye,getDirectiveByVersion:gye,getVersionsForUpgrade:hQ,hasUpgradesRequired:_ye}});var Jy=M((Gke,yQ)=>{"use strict";var Sye=require("util"),GL=require("chalk"),Tye=require("os"),gQ=Bn(),yye=fn(),Ss=(H(),D(W)),SQ=k2(),VL=uw(),{UpgradeObject:_Q}=G2(),{forceDowngradePrompt:Rye}=Gy(),{packageJson:Aye}=bt(),Qy=Q(),Nf=oe(),KL=mi(),bye=(Oe(),D(mt)),Iye=qL(),wye=Sye.promisify(KL.setSchemaDataToGlobal),Nye=yye.searchByValue,Cye="info_id",Oye="2.9.9",Pye="3.0.0";async function Lye(e){let t=new SQ.HdbInfoInsertObject(1,e,e),r=new VL.InsertObject(Ss.OPERATIONS_ENUM.INSERT,Ss.SYSTEM_SCHEMA_NAME,Ss.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ss.INFO_TABLE_HASH_ATTRIBUTE,[t]);return KL.setSchemaDataToGlobal(),gQ.insert(r)}o(Lye,"insertHdbInstallInfo");async function $L(e){let t,r=await TQ(),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 SQ.HdbInfoInsertObject(i,e,e);let a=new VL.InsertObject(Ss.OPERATIONS_ENUM.INSERT,Ss.SYSTEM_SCHEMA_NAME,Ss.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ss.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await wye(),gQ.insert(a)}o($L,"insertHdbUpgradeInfo");async function TQ(){let e=new VL.NoSQLSeachObject(Ss.SYSTEM_SCHEMA_NAME,Ss.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Cye,Ss.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Nye(e))}catch(r){console.error(r)}return t}o(TQ,"getAllHdbInfoRecords");async function Dye(){let e=await TQ();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}o(Dye,"getLatestHdbInfoRecord");async function Mye(){Qy.info("Checking if HDB software has been updated");try{let e=Aye.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await Dye(),r;if(Nf.isEmpty(t))r=Oye;else if(r=t.data_version_num,Nf.compareVersions(r.toString(),e.toString())>0){if(!Nf.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(GL.yellow(`This instance's data was last run on version ${r}`)),console.error(GL.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.${Tye.EOL}${Ss.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Nf.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(GL.yellow(`This instance's data was last run on version ${r}`)),await Rye(new _Q(r,e))?await $L(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(KL.setSchemaDataToGlobal(),vye(r),e.toString()===r.toString())return;let n=new _Q(r,e);if(Iye.hasUpgradesRequired(n))return n;Nf.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await $L(n.upgrade_version),Qy.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw Qy.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Qy.fatal(e),e}}o(Mye,"getVersionUpdateInfo");function vye(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 ${Ss.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in bye.databases.system))throw console.log(t),new Error(t);if(!Nf.isEmpty(e)&&e<Pye)throw console.log(t),new Error(t)}o(vye,"checkIfInstallIsSupported");yQ.exports={insertHdbInstallInfo:Lye,insertHdbUpgradeInfo:$L,getVersionUpdateInfo:Mye}});var IQ=M((Vke,bQ)=>{"use strict";var Xy=require("joi"),{boolean:Uye,string:YL,number:xye}=Xy.types(),RQ=require("fs-extra"),SE=(H(),D(W)),AQ=require("path"),Bye=ft();bQ.exports=Fye;function Fye(e){let t=YL.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=Xy.object({[SE.INSTALL_PROMPTS.ROOTPATH]:Xy.custom(kye),[SE.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:Xy.alternatives([xye.min(0),YL]).allow("null",null),[SE.INSTALL_PROMPTS.TC_AGREEMENT]:YL.valid("yes","YES","Yes"),[SE.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[SE.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Uye});return Bye.validateBySchema(e,r)}o(Fye,"installValidator");function kye(e,t){if(RQ.existsSync(AQ.join(e,"system/hdb_user/data.mdb"))||RQ.existsSync(AQ.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(kye,"validateRootAvailable")});var NQ=M((Yke,wQ)=>{"use strict";var{mkdirpSync:Hye,copySync:qye}=require("fs-extra"),Rc=require("path"),TE=(H(),D(W)),{PACKAGE_ROOT:Gye}=bt(),zL=Q(),$ye=os(),WL=$i(),Vye=yt();wQ.exports=Kye;async function Kye(e){zL.trace("Mounting HarperDB"),uu(e),uu(Rc.join(e,"backup")),uu(Rc.join(e,"keys")),uu(Rc.join(e,"keys",TE.LICENSE_FILE_NAME)),uu(Rc.join(e,"log")),uu(Rc.join(e,"database")),uu(Rc.join(e,"components")),qye(Rc.resolve(Gye,"./utility/install/README.md"),Rc.join(e,"README.md")),await Yye()}o(Kye,"mountHdb");async function Yye(){let e=rp(),t=Object.keys(WL);for(let r of t){let n=WL[r].hash_attribute;try{Vye.initSystemSchemaPaths(TE.SYSTEM_SCHEMA_NAME,r);let s=new e(TE.SYSTEM_SCHEMA_NAME,r,n);s.attributes=WL[r].attributes;let i=s.attributes.find(({attribute:a})=>a===n);i.isPrimaryKey=!0,["hdb_user","hdb_role","hdb_nodes"].includes(r)&&(s.audit=!0),await $ye.createTable(r,s)}catch(s){throw zL.error(`issue creating environment for ${TE.SYSTEM_SCHEMA_NAME}.${r}: ${s}`),s}}}o(Yye,"createLMDBTables");function uu(e){Hye(e,{mode:TE.HDB_FILE_PERMISSIONS}),zL.info(`Directory ${e} created`)}o(uu,"makeDirectory")});var qQ=M((Qke,HQ)=>{"use strict";var JL=require("os"),DQ=require("inquirer"),Zs=require("fs-extra"),Wye=require("properties-reader"),fu=require("chalk"),fo=require("path"),zye=require("human-readable-ids").hri,jL,jye=require("yaml"),Tr=Q(),Ac=ue(),yE=oe(),eR=Hc(),MQ=Jy(),{packageJson:vQ}=bt(),he=(H(),D(W)),{CONFIG_PARAM_MAP:zke,CONFIG_PARAMS:kt}=he,Qye=IQ(),Jye=NQ(),XL=Tt(),Xye=kn(),Zye=xp(),eRe=LL(),tRe=mi(),rRe=require("util").promisify,nRe=rRe(tRe.setSchemaDataToGlobal),CQ=fs(),du=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),sn=o(e=>fu.magenta.bold(e),"HDB_PROMPT_MSG"),sRe="https://harperdb.io/legal/end-user-license-agreement",bc=JL.EOL,pa="",iRe="yes",OQ="Starting HarperDB install...",PQ="HarperDB installation was successful.",LQ="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",oRe="An out of date version of HarperDB is already installed.",QL="It appears that HarperDB is already installed. Exiting install...",aRe="Aborting install",jke=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])$/),cRe=new RegExp(/^[^\s.,*>]+$/),lRe=JL.homedir(),uRe=fo.join(lRe,he.HDB_ROOT_DIR_NAME),dRe="HDB_ADMIN",fRe="CLUSTER_USER",mRe="dev",pRe="localhost",Zy={[kt.HTTP_CORS]:!0,[kt.HTTP_CORSACCESSLIST]:["*"],[kt.HTTP_PORT]:9926,[kt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[kt.THREADS_COUNT]:1,[kt.THREADS_DEBUG]:!0,[kt.LOGGING_STDSTREAMS]:!0,[kt.LOGGING_LEVEL]:"info",[kt.OPERATIONSAPI_NETWORK_PORT]:9925,[kt.LOCALSTUDIO_ENABLED]:!0},nn={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:"},Ic=eR([he.INSTALL_PROMPTS.HDB_CONFIG]),uo,UQ=!1,ZL=!1,xQ=!1;HQ.exports={install:BQ,updateConfigEnv:IRe,setIgnoreExisting:wRe};BQ.createSuperUser=kQ;async function BQ(){console.log(sn(bc+OQ+bc)),Tr.notify(OQ);let e;Ic[he.INSTALL_PROMPTS.HDB_CONFIG]&&(e=hRe());let t=_Re();Object.assign(t,e),t[he.INSTALL_PROMPTS.TC_AGREEMENT]&&t[he.INSTALL_PROMPTS.ROOTPATH]&&t[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[he.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(xQ=!0,t[he.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=Qye(t);if(r)throw r.message;await gRe(),await SRe(t);let n=await ERe(t);uo=n[he.INSTALL_PROMPTS.ROOTPATH],Ic[he.INSTALL_PROMPTS.HDB_CONFIG]&&fo.dirname(Ic[he.INSTALL_PROMPTS.HDB_CONFIG])===uo&&(UQ=!0),!ZL&&!Ic[he.INSTALL_PROMPTS.HDB_CONFIG]&&await Zs.pathExists(fo.join(uo,he.HDB_CONFIG_FILE))&&(console.error(QL),process.exit()),jL||(jL=(await import("ora")).default);let s=jL({prefixText:sn("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),yE.isEmpty(uo))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Ac.setHdbBasePath(uo),await Jye(uo),await TRe(),await yRe(n),Tr.initLogSettings(!0),await kQ(n),await ARe(n),await CQ.updateConfigCert(),await CQ.generateCertsKeys(),await bRe(),eRe(),s.stop(),console.log(sn(bc+PQ+bc)),Tr.notify(PQ)}o(BQ,"install");function hRe(){let e=jye.parseDocument(Zs.readFileSync(Ic[he.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=XL.flattenConfig(e.toJSON());return t[he.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[he.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}o(hRe,"getConfigFromFile");async function ERe(e){Tr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:du,when:ha(e[he.INSTALL_PROMPTS.ROOTPATH],nn.DESTINATION),name:he.INSTALL_PROMPTS.ROOTPATH,prefix:pa,default:uRe,validate:o(async s=>Xs(s)?Xs(s):await Zs.pathExists(fo.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:sn(nn.DESTINATION)},{type:"input",transformer:du,when:ha(e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],nn.HDB_USERNAME),name:he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:pa,default:dRe,validate:o(s=>Xs(s)?Xs(s):(t=s,!0),"validate"),message:sn(nn.HDB_USERNAME)},{type:"password",when:ha(e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],nn.HDB_PASS),name:he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:pa,validate:o(s=>Xs(s)?Xs(s):!0,"validate"),message:sn(nn.HDB_PASS)},{type:"input",transformer:du,when:ha(e[he.INSTALL_PROMPTS.DEFAULTS_MODE],nn.DEFAULTS_MODE),name:he.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:pa,default:mRe,validate:o(s=>Xs(s)?Xs(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:sn(nn.DEFAULTS_MODE)}];if(xQ||r.push({type:"input",name:he.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:du,when:ha(e[he.INSTALL_PROMPTS.REPLICATION_HOSTNAME],nn.REPLICATION_HOSTNAME),prefix:pa,default:pRe,message:sn(nn.REPLICATION_HOSTNAME)}),yE.autoCastBoolean(e[he.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:du,when:ha(e[he.INSTALL_PROMPTS.CLUSTERING_NODENAME],nn.NODE_NAME),name:he.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:pa,default:zye.random(),validate:o(i=>cRe.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:sn(nn.NODE_NAME)},{type:"input",transformer:du,when:ha(e[he.INSTALL_PROMPTS.CLUSTERING_USER],nn.CLUSTER_USERNAME),name:he.INSTALL_PROMPTS.CLUSTERING_USER,prefix:pa,default:fRe,validate:o(i=>Xs(i)?Xs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:sn(nn.CLUSTER_USERNAME)},{type:"password",when:ha(e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD],nn.CLUSTER_PASS),name:he.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:pa,validate:o(i=>Xs(i)?Xs(i):!0,"validate"),message:sn(nn.CLUSTER_PASS)}];r.push(...s)}let n=await DQ.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}o(ERe,"installPrompts");function ha(e,t){return e!==void 0?(t.includes("password")?(console.log(`${sn(t)} ${fu.gray("[hidden]")}`),Tr.trace(`${sn(t)} [hidden]`)):(console.log(`${sn(t)} ${e}`),Tr.trace(`${sn(t)} ${e}`)),!1):!0}o(ha,"displayCmdEnvVar");function Xs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Xs,"checkForEmptyValue");function _Re(){let e=Object.keys(he.INSTALL_PROMPTS),t=eR(e),r=eR(Object.keys(he.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=he.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}o(_Re,"checkForPromptOverride");async function gRe(){Tr.trace("Checking for existing install.");let e=yE.getPropsFilePath(),t=await Zs.pathExists(e),r;if(t){Tr.trace(`Install found an existing boot prop file at:${e}`);let n=Wye(e),s=XL.getConfigValue(he.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(he.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Zs.pathExists(s)}if(!t&&yE.noBootFile()&&(r=!0),r&&!ZL){if(Tr.trace(`Install found existing HDB config at:${e}`),await MQ.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${vQ.version}. Exiting install...`;console.log(bc+fu.magenta.bold(oRe)),console.log(fu.magenta.bold(s)),Tr.error(s)}else console.log(bc+fu.magenta.bold(QL)),Tr.error(QL);process.exit(0)}}o(gRe,"checkForExistingInstall");async function SRe(e){Tr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${sRe}${bc}and can be viewed by typing or copying and pasting the URL into your web browser.${bc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:pa,transformer:du,when:ha(e[he.INSTALL_PROMPTS.TC_AGREEMENT],t),name:he.INSTALL_PROMPTS.TC_AGREEMENT,message:sn(t),validate:o(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:fu.yellow("Please enter 'yes' or 'no'"),"validate")},n=await DQ.prompt([r]);n[he.INSTALL_PROMPTS.TC_AGREEMENT]&&n[he.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==iRe&&(console.log(fu.yellow(LQ)),Tr.error(LQ),process.exit(0))}o(SRe,"termsAgreement");async function TRe(){let e=fo.join(uo,he.HDB_CONFIG_FILE),t;try{t=JL.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}
|
|
112
|
-
install_user = ${t}`,n=yE.getHomeDir(),s=fo.join(n,he.HDB_HOME_DIR_NAME),i=fo.join(s,he.LICENSE_KEY_DIR_NAME);try{Zs.mkdirpSync(s,{mode:he.HDB_FILE_PERMISSIONS}),Zs.mkdirpSync(i,{mode:he.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${he.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let a=fo.join(s,he.BOOT_PROPS_FILE_NAME);try{await Zs.writeFile(a,r)}catch(c){throw Tr.error(`There was an error creating the boot file at path: ${a}`),c}Ac.setProperty(he.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Ac.setProperty(he.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Ac.setProperty(Ac.BOOT_PROPS_FILE_PATH,a)}}o(
|
|
113
|
-
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),a=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:
|
|
110
|
+
Reindexing upgrade started for transaction logs`),fa.notify("Reindexing upgrade started for transaction logs"),await nQ(qL,!0,e)),fa.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(hE?", but errors occurred":"")}o(YTe,"reindexUpgrade");async function nQ(e,t,r){let n=await lo.readdir(e),s=n.length;for(let i=0;i<s;i++){let a=n[i],c=ma.join(e,a.toString());if(a===".DS_Store")continue;let l=await lo.readdir(c),u=l.length;for(let d=0;d<u;d++){let f=l[d];if(f!==".DS_Store"&&lo.statSync(ma.join(c,f)).isDirectory())try{await WTe(a,f,t),An.info(`Reindexing started for ${a}.${f}`),fa.notify(`${t?"Transaction":"Schema"} reindexing started for ${a}.${f}`),await jTe(a,f,c,t,r),An.info(`Reindexing completed for ${a}.${f}`),fa.notify(`Reindexing completed for ${a}.${f}`)}catch(m){hE=!0,m.schema_path=c,m.table_name=f,fa.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),fa.error(m),An.error(m),console.error(m)}}}if(!hE)try{await lo.rm(Yy,{recursive:!0})}catch{}}o(nQ,"processTables");async function WTe(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=ma.join(Yy,s);await lo.ensureDir(Yy),await lo.writeFile(i,""),An=VTe({level:"debug",formatters:{bindings(){}}},i)}o(WTe,"initPinoLogger");var zTe=20;async function jTe(e,t,r,n,s){let i;try{i=await gs.openEnvironment(r,t,n)}catch(S){if(S.message==="MDB_INVALID: File is not an LMDB file"){fa.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`),An.error(S);return}throw S}let a=XTe(i.dbis),c=gs.openDBI(i,a),l=Object.keys(i.dbis),u=gs.statDBI(i,a);An.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new $Te.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 gs.createEnvironment(r,t,!1);gs.createDBI(f,a,!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>zTe&&await p();await p()}catch(S){throw hE=!0,An.error(S),S}async function p(){let S,R=m.map(({value:O})=>O);n?S=await Promise.all(R.map(O=>QTe(f,O))):S=await kTe(f,a,l.filter(O=>O!=="__blob__"),R,!1);for(let O=0,F=m.length;O<F;O++){let{key:te,value:q}=m[O];An.info(`Record hash value: ${te} hash: ${a}`);let k;n?k=S[O]:k=S.written_hashes.indexOf(te)>-1,pE(k,!0),JTe(f,a,q[a],n),An.info(`Insert success, written hashes: ${S.written_hashes}`),d.increment()}m=[],d.value/d.total*100%10===0&&fa.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),An.info(`${d.value}/${d.total} records inserted`)}o(p,"finishOutstanding"),d.stop();let h=gs.statDBI(i,a),E=gs.statDBI(f,a);if(An.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${E.entryCount}`),pE.deepStrictEqual(h.entryCount,E.entryCount),await gs.closeEnvironment(i),await gs.closeEnvironment(f),delete global.lmdb_map[`${e}.${t}`],s){let S=ma.join(r,t),R=ma.join(S,"data.mdb"),N=ma.join(S,"lock.mdb");await lo.unlink(R),await lo.unlink(N),await lo.rmdir(S),An.info(`Deleted old environment files from schema folder: ${R}, ${N}`)}let g=await gs.openEnvironment(r,t),A=gs.statDBI(g,a);An.info(`New stats: ${JSON.stringify(E)}. New stats after move: ${JSON.stringify(A)}`),pE.deepStrictEqual(A.entryCount,E.entryCount),await gs.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}o(jTe,"processTable");async function QTe(e,t){gs.initializeDBIs(e,Sc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Sc.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Sc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Sc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),GTe.isEmpty(t.user_name)||e.dbis[Sc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Sc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}o(QTe,"insertTransaction");function JTe(e,t,r,n){let i=e.dbis[t].get(r);pE.deepStrictEqual(typeof i,"object");let a;if(n){let c={[Sc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Sc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};a=Object.entries(c)}else a=Object.entries(i);for(let[c,l]of a)if(c!==t&&e.dbis[c]!==void 0&&!qTe.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let f=l[u];sQ(e,c,f,r)}else sQ(e,c,l,r)}o(JTe,"validateIndices");function sQ(e,t,r,n){try{let s=!1,i=HTe.getIndexedValues(r);if(!i)return;for(let a of i)s=e.dbis[t].doesExist(a,n),s||An.info(`Validate indices did not find value in new DBI: ${a}. Hash: ${n}`),pE.deepStrictEqual(s,!0)}catch(s){hE=!0,An.error(s),console.error(s)}}o(sQ,"validateIndex");function XTe(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}o(XTe,"getHashDBI")});var dQ=M((Gke,uQ)=>{"use strict";var Wy=require("path"),Tc=require("fs-extra"),ZTe=$y(),cu=Q(),aQ=yt(),GL=ue(),Oi=(H(),D(W)),zy=oe(),eye=require("properties-reader"),tye=di(),rye=mS(),nye=fn(),qke=require("util"),sye=nye.searchByValue,iye=Bn(),oye=NT(),aye=wt(),cye=oQ(),cQ=fs(),lye=Gy(),gE=new ZTe("4.0.0"),lQ=[],EE,_E;async function uye(){try{if(await lye.upgradeCertsPrompt()){if(console.log("Generating new certificates."),EE){let t=zy.changeExtension(EE,".bak");await Tc.move(EE,t)}if(_E){let t=zy.changeExtension(_E,".bak");await Tc.move(_E,t)}await cQ.generateKeys()}else console.log("Using existing certificates."),cQ.updateConfigCert(EE,_E,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}o(uye,"generateNewKeys");async function dye(){console.log("Updating HarperDB nodes."),cu.info("Updating HarperDB nodes.");let e=[];try{let t=new tye(Oi.SYSTEM_SCHEMA_NAME,Oi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await sye(t)),n=[];for(let i=0,a=r.length;i<a;i++){let c=r[i];if(!aye.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:Oi.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(zy.isEmptyOrZeroLength(n))return;let s=new rye(Oi.SYSTEM_SCHEMA_NAME,Oi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await iye.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{oye.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}}o(dye,"updateNodes");async function fye(){let e=GL.get(Oi.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(Wy.join("config","settings.js"))){cu.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),cu.info(t);let r=Wy.dirname(e),n=GL.get(Oi.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=Wy.join(n,"backup","4_0_0_upgrade_settings.bak"),i=Wy.join(n,Oi.HDB_CONFIG_FILE);try{cu.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Tc.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{cu.info(`Creating new/upgraded settings file at '${new_settings_path}'`),console.log(`Creating new/upgraded settings file at '${new_settings_path}'`),cu.info("Updating env variables with new settings values");let f=aQ.initOldConfig(e);EE=f[Oi.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],_E=f[Oi.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],aQ.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 a=zy.getPropsFilePath();Tc.accessSync(a,Tc.constants.F_OK|Tc.constants.R_OK);let l=eye(a).get(Oi.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
|
|
111
|
+
install_user = ${l}`;try{Tc.writeFileSync(a,u)}catch(f){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),f}try{GL.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{Tc.removeSync(r),console.log(d),cu.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}}o(fye,"updateSettingsFile400");gE.async_functions.push(fye);gE.async_functions.push(uye);gE.async_functions.push(cye);gE.async_functions.push(dye);lQ.push(gE);uQ.exports=lQ});var hQ=M((Vke,pQ)=>{var mye=$y(),{databases:pye,table:hye}=(Oe(),D(mt)),Eye=$i(),$L=Q(),fQ=new mye("4.7.0"),mQ=[];async function _ye(){let e=pye.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"),hye(Eye.hdb_license)}o(_ye,"convertToUsageBlockLicenses");fQ.async_functions.push(_ye);mQ.push(fQ);pQ.exports=mQ});var VL=M((Yke,TQ)=>{"use strict";var lu=oe(),gye=(H(),D(W)),EQ=Q(),{DATA_VERSION:Sye,UPGRADE_VERSION:Tye}=gye.UPGRADE_JSON_FIELD_NAMES_ENUM,_Q=tQ(),jy=dQ(),gQ=hQ(),yc=new Map;_Q&&_Q.forEach(e=>{yc.set(e.version,e)});jy&&jy.forEach(e=>{yc.set(e.version,e)});jy&&jy.forEach(e=>{yc.set(e.version,e)});gQ&&gQ.forEach(e=>{yc.set(e.version,e)});function yye(){return[...yc.keys()].sort(lu.compareVersions)}o(yye,"getSortedVersions");function SQ(e){let t=e[Sye],r=e[Tye];return lu.isEmptyOrZeroLength(t)||lu.isEmptyOrZeroLength(r)?(EQ.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),EQ.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."),[]):[...yc.keys()].sort(lu.compareVersions).filter(function(n){return lu.compareVersions(n,t)>0&&lu.compareVersions(n,r)<=0})}o(SQ,"getVersionsForUpgrade");function Rye(e){return SQ(e).length>0}o(Rye,"hasUpgradesRequired");function Aye(e){return lu.isEmptyOrZeroLength(e)?null:yc.has(e)?yc.get(e):null}o(Aye,"getDirectiveByVersion");TQ.exports={getSortedVersions:yye,getDirectiveByVersion:Aye,getVersionsForUpgrade:SQ,hasUpgradesRequired:Rye}});var Jy=M((zke,IQ)=>{"use strict";var bye=require("util"),KL=require("chalk"),Iye=require("os"),RQ=Bn(),wye=fn(),Ss=(H(),D(W)),AQ=$2(),WL=uw(),{UpgradeObject:yQ}=Y2(),{forceDowngradePrompt:Nye}=Gy(),{packageJson:Cye}=Tt(),Qy=Q(),Nf=oe(),zL=mi(),Oye=(Oe(),D(mt)),Pye=VL(),Lye=bye.promisify(zL.setSchemaDataToGlobal),Dye=wye.searchByValue,Mye="info_id",vye="2.9.9",Uye="3.0.0";async function xye(e){let t=new AQ.HdbInfoInsertObject(1,e,e),r=new WL.InsertObject(Ss.OPERATIONS_ENUM.INSERT,Ss.SYSTEM_SCHEMA_NAME,Ss.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ss.INFO_TABLE_HASH_ATTRIBUTE,[t]);return zL.setSchemaDataToGlobal(),RQ.insert(r)}o(xye,"insertHdbInstallInfo");async function YL(e){let t,r=await bQ(),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 AQ.HdbInfoInsertObject(i,e,e);let a=new WL.InsertObject(Ss.OPERATIONS_ENUM.INSERT,Ss.SYSTEM_SCHEMA_NAME,Ss.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ss.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await Lye(),RQ.insert(a)}o(YL,"insertHdbUpgradeInfo");async function bQ(){let e=new WL.NoSQLSeachObject(Ss.SYSTEM_SCHEMA_NAME,Ss.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Mye,Ss.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Dye(e))}catch(r){console.error(r)}return t}o(bQ,"getAllHdbInfoRecords");async function Bye(){let e=await bQ();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}o(Bye,"getLatestHdbInfoRecord");async function Fye(){Qy.info("Checking if HDB software has been updated");try{let e=Cye.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await Bye(),r;if(Nf.isEmpty(t))r=vye;else if(r=t.data_version_num,Nf.compareVersions(r.toString(),e.toString())>0){if(!Nf.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(KL.yellow(`This instance's data was last run on version ${r}`)),console.error(KL.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.${Iye.EOL}${Ss.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Nf.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(KL.yellow(`This instance's data was last run on version ${r}`)),await Nye(new yQ(r,e))?await YL(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(zL.setSchemaDataToGlobal(),kye(r),e.toString()===r.toString())return;let n=new yQ(r,e);if(Pye.hasUpgradesRequired(n))return n;Nf.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await YL(n.upgrade_version),Qy.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw Qy.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Qy.fatal(e),e}}o(Fye,"getVersionUpdateInfo");function kye(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 ${Ss.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in Oye.databases.system))throw console.log(t),new Error(t);if(!Nf.isEmpty(e)&&e<Uye)throw console.log(t),new Error(t)}o(kye,"checkIfInstallIsSupported");IQ.exports={insertHdbInstallInfo:xye,insertHdbUpgradeInfo:YL,getVersionUpdateInfo:Fye}});var OQ=M((Qke,CQ)=>{"use strict";var Xy=require("joi"),{boolean:Hye,string:jL,number:qye}=Xy.types(),wQ=require("fs-extra"),SE=(H(),D(W)),NQ=require("path"),Gye=ft();CQ.exports=$ye;function $ye(e){let t=jL.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=Xy.object({[SE.INSTALL_PROMPTS.ROOTPATH]:Xy.custom(Vye),[SE.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:Xy.alternatives([qye.min(0),jL]).allow("null",null),[SE.INSTALL_PROMPTS.TC_AGREEMENT]:jL.valid("yes","YES","Yes"),[SE.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[SE.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Hye});return Gye.validateBySchema(e,r)}o($ye,"installValidator");function Vye(e,t){if(wQ.existsSync(NQ.join(e,"system/hdb_user/data.mdb"))||wQ.existsSync(NQ.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(Vye,"validateRootAvailable")});var LQ=M((Xke,PQ)=>{"use strict";var{mkdirpSync:Kye,copySync:Yye}=require("fs-extra"),Rc=require("path"),TE=(H(),D(W)),{PACKAGE_ROOT:Wye}=Tt(),JL=Q(),zye=os(),QL=$i(),jye=Rt();PQ.exports=Qye;async function Qye(e){JL.trace("Mounting HarperDB"),uu(e),uu(Rc.join(e,"backup")),uu(Rc.join(e,"keys")),uu(Rc.join(e,"keys",TE.LICENSE_FILE_NAME)),uu(Rc.join(e,"log")),uu(Rc.join(e,"database")),uu(Rc.join(e,"components")),Yye(Rc.resolve(Wye,"./utility/install/README.md"),Rc.join(e,"README.md")),await Jye()}o(Qye,"mountHdb");async function Jye(){let e=rp(),t=Object.keys(QL);for(let r of t){let n=QL[r].hash_attribute;try{jye.initSystemSchemaPaths(TE.SYSTEM_SCHEMA_NAME,r);let s=new e(TE.SYSTEM_SCHEMA_NAME,r,n);s.attributes=QL[r].attributes;let i=s.attributes.find(({attribute:a})=>a===n);i.isPrimaryKey=!0,["hdb_user","hdb_role","hdb_nodes"].includes(r)&&(s.audit=!0),await zye.createTable(r,s)}catch(s){throw JL.error(`issue creating environment for ${TE.SYSTEM_SCHEMA_NAME}.${r}: ${s}`),s}}}o(Jye,"createLMDBTables");function uu(e){Kye(e,{mode:TE.HDB_FILE_PERMISSIONS}),JL.info(`Directory ${e} created`)}o(uu,"makeDirectory")});var KQ=M((rHe,VQ)=>{"use strict";var eD=require("os"),xQ=require("inquirer"),Zs=require("fs-extra"),Xye=require("properties-reader"),fu=require("chalk"),fo=require("path"),Zye=require("human-readable-ids").hri,XL,eRe=require("yaml"),Tr=Q(),Ac=ue(),yE=oe(),eR=Hc(),BQ=Jy(),{packageJson:FQ}=Tt(),he=(H(),D(W)),{CONFIG_PARAM_MAP:eHe,CONFIG_PARAMS:kt}=he,tRe=OQ(),rRe=LQ(),tD=yt(),nRe=kn(),sRe=xp(),iRe=vL(),oRe=mi(),aRe=require("util").promisify,cRe=aRe(oRe.setSchemaDataToGlobal),DQ=fs(),du=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),sn=o(e=>fu.magenta.bold(e),"HDB_PROMPT_MSG"),lRe="https://harperdb.io/legal/end-user-license-agreement",bc=eD.EOL,pa="",uRe="yes",MQ="Starting HarperDB install...",vQ="HarperDB installation was successful.",UQ="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",dRe="An out of date version of HarperDB is already installed.",ZL="It appears that HarperDB is already installed. Exiting install...",fRe="Aborting install",tHe=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])$/),mRe=new RegExp(/^[^\s.,*>]+$/),pRe=eD.homedir(),hRe=fo.join(pRe,he.HDB_ROOT_DIR_NAME),ERe="HDB_ADMIN",_Re="CLUSTER_USER",gRe="dev",SRe="localhost",Zy={[kt.HTTP_CORS]:!0,[kt.HTTP_CORSACCESSLIST]:["*"],[kt.HTTP_PORT]:9926,[kt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[kt.THREADS_COUNT]:1,[kt.THREADS_DEBUG]:!0,[kt.LOGGING_STDSTREAMS]:!0,[kt.LOGGING_LEVEL]:"info",[kt.OPERATIONSAPI_NETWORK_PORT]:9925,[kt.LOCALSTUDIO_ENABLED]:!0},nn={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:"},Ic=eR([he.INSTALL_PROMPTS.HDB_CONFIG]),uo,kQ=!1,rD=!1,HQ=!1;VQ.exports={install:qQ,updateConfigEnv:PRe,setIgnoreExisting:LRe};qQ.createSuperUser=$Q;async function qQ(){console.log(sn(bc+MQ+bc)),Tr.notify(MQ);let e;Ic[he.INSTALL_PROMPTS.HDB_CONFIG]&&(e=TRe());let t=RRe();Object.assign(t,e),t[he.INSTALL_PROMPTS.TC_AGREEMENT]&&t[he.INSTALL_PROMPTS.ROOTPATH]&&t[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[he.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(HQ=!0,t[he.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=tRe(t);if(r)throw r.message;await ARe(),await bRe(t);let n=await yRe(t);uo=n[he.INSTALL_PROMPTS.ROOTPATH],Ic[he.INSTALL_PROMPTS.HDB_CONFIG]&&fo.dirname(Ic[he.INSTALL_PROMPTS.HDB_CONFIG])===uo&&(kQ=!0),!rD&&!Ic[he.INSTALL_PROMPTS.HDB_CONFIG]&&await Zs.pathExists(fo.join(uo,he.HDB_CONFIG_FILE))&&(console.error(ZL),process.exit()),XL||(XL=(await import("ora")).default);let s=XL({prefixText:sn("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),yE.isEmpty(uo))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Ac.setHdbBasePath(uo),await rRe(uo),await IRe(),await wRe(n),Tr.initLogSettings(!0),await $Q(n),await CRe(n),await DQ.updateConfigCert(),await DQ.generateCertsKeys(),await ORe(),iRe(),s.stop(),console.log(sn(bc+vQ+bc)),Tr.notify(vQ)}o(qQ,"install");function TRe(){let e=eRe.parseDocument(Zs.readFileSync(Ic[he.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=tD.flattenConfig(e.toJSON());return t[he.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[he.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}o(TRe,"getConfigFromFile");async function yRe(e){Tr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:du,when:ha(e[he.INSTALL_PROMPTS.ROOTPATH],nn.DESTINATION),name:he.INSTALL_PROMPTS.ROOTPATH,prefix:pa,default:hRe,validate:o(async s=>Xs(s)?Xs(s):await Zs.pathExists(fo.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:sn(nn.DESTINATION)},{type:"input",transformer:du,when:ha(e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],nn.HDB_USERNAME),name:he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:pa,default:ERe,validate:o(s=>Xs(s)?Xs(s):(t=s,!0),"validate"),message:sn(nn.HDB_USERNAME)},{type:"password",when:ha(e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],nn.HDB_PASS),name:he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:pa,validate:o(s=>Xs(s)?Xs(s):!0,"validate"),message:sn(nn.HDB_PASS)},{type:"input",transformer:du,when:ha(e[he.INSTALL_PROMPTS.DEFAULTS_MODE],nn.DEFAULTS_MODE),name:he.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:pa,default:gRe,validate:o(s=>Xs(s)?Xs(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:sn(nn.DEFAULTS_MODE)}];if(HQ||r.push({type:"input",name:he.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:du,when:ha(e[he.INSTALL_PROMPTS.REPLICATION_HOSTNAME],nn.REPLICATION_HOSTNAME),prefix:pa,default:SRe,message:sn(nn.REPLICATION_HOSTNAME)}),yE.autoCastBoolean(e[he.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:du,when:ha(e[he.INSTALL_PROMPTS.CLUSTERING_NODENAME],nn.NODE_NAME),name:he.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:pa,default:Zye.random(),validate:o(i=>mRe.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:sn(nn.NODE_NAME)},{type:"input",transformer:du,when:ha(e[he.INSTALL_PROMPTS.CLUSTERING_USER],nn.CLUSTER_USERNAME),name:he.INSTALL_PROMPTS.CLUSTERING_USER,prefix:pa,default:_Re,validate:o(i=>Xs(i)?Xs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:sn(nn.CLUSTER_USERNAME)},{type:"password",when:ha(e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD],nn.CLUSTER_PASS),name:he.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:pa,validate:o(i=>Xs(i)?Xs(i):!0,"validate"),message:sn(nn.CLUSTER_PASS)}];r.push(...s)}let n=await xQ.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}o(yRe,"installPrompts");function ha(e,t){return e!==void 0?(t.includes("password")?(console.log(`${sn(t)} ${fu.gray("[hidden]")}`),Tr.trace(`${sn(t)} [hidden]`)):(console.log(`${sn(t)} ${e}`),Tr.trace(`${sn(t)} ${e}`)),!1):!0}o(ha,"displayCmdEnvVar");function Xs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Xs,"checkForEmptyValue");function RRe(){let e=Object.keys(he.INSTALL_PROMPTS),t=eR(e),r=eR(Object.keys(he.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=he.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}o(RRe,"checkForPromptOverride");async function ARe(){Tr.trace("Checking for existing install.");let e=yE.getPropsFilePath(),t=await Zs.pathExists(e),r;if(t){Tr.trace(`Install found an existing boot prop file at:${e}`);let n=Xye(e),s=tD.getConfigValue(he.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(he.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Zs.pathExists(s)}if(!t&&yE.noBootFile()&&(r=!0),r&&!rD){if(Tr.trace(`Install found existing HDB config at:${e}`),await BQ.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${FQ.version}. Exiting install...`;console.log(bc+fu.magenta.bold(dRe)),console.log(fu.magenta.bold(s)),Tr.error(s)}else console.log(bc+fu.magenta.bold(ZL)),Tr.error(ZL);process.exit(0)}}o(ARe,"checkForExistingInstall");async function bRe(e){Tr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${lRe}${bc}and can be viewed by typing or copying and pasting the URL into your web browser.${bc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:pa,transformer:du,when:ha(e[he.INSTALL_PROMPTS.TC_AGREEMENT],t),name:he.INSTALL_PROMPTS.TC_AGREEMENT,message:sn(t),validate:o(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:fu.yellow("Please enter 'yes' or 'no'"),"validate")},n=await xQ.prompt([r]);n[he.INSTALL_PROMPTS.TC_AGREEMENT]&&n[he.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==uRe&&(console.log(fu.yellow(UQ)),Tr.error(UQ),process.exit(0))}o(bRe,"termsAgreement");async function IRe(){let e=fo.join(uo,he.HDB_CONFIG_FILE),t;try{t=eD.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}
|
|
112
|
+
install_user = ${t}`,n=yE.getHomeDir(),s=fo.join(n,he.HDB_HOME_DIR_NAME),i=fo.join(s,he.LICENSE_KEY_DIR_NAME);try{Zs.mkdirpSync(s,{mode:he.HDB_FILE_PERMISSIONS}),Zs.mkdirpSync(i,{mode:he.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${he.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let a=fo.join(s,he.BOOT_PROPS_FILE_NAME);try{await Zs.writeFile(a,r)}catch(c){throw Tr.error(`There was an error creating the boot file at path: ${a}`),c}Ac.setProperty(he.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Ac.setProperty(he.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Ac.setProperty(Ac.BOOT_PROPS_FILE_PATH,a)}}o(IRe,"createBootPropertiesFile");async function wRe(e){Tr.trace("Creating HarperDB config file");let t=eR(Object.keys(he.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[he.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in Zy){if(r===kt.HTTP_PORT&&t[kt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??Zy[r],t[kt.HTTP_SECUREPORT]=null;continue}else if(r===kt.HTTP_PORT)continue;if(r===kt.OPERATIONSAPI_NETWORK_PORT&&t[kt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??Zy[r],t[kt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===kt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=Zy[r])}}else t[kt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[kt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[kt.HTTP_PORT.toLowerCase()]&&(t[kt.HTTP_SECUREPORT]=null);try{Ic[he.INSTALL_PROMPTS.HDB_CONFIG]||tD.createConfigFile(t),Ac.initSync()}catch(r){NRe(r)}}o(wRe,"createConfigFile");function NRe(e){Tr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(fRe);let t=fo.resolve(Ac.get(Ac.BOOT_PROPS_FILE_PATH),"../");t&&Zs.removeSync(t),uo&&(kQ?Zs.readdirSync(uo,{withFileTypes:!0}).forEach(n=>{let s=fo.join(n.path,n.name);s!==Ic[he.INSTALL_PROMPTS.HDB_CONFIG]&&Zs.removeSync(s)}):Zs.removeSync(uo)),process.exit(1)}o(NRe,"rollbackInstall");async function GQ(e,t){Tr.trace("Creating admin user"),await cRe();let r;try{r=await sRe.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 nRe.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}o(GQ,"createAdminUser");async function $Q(e){Tr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await GQ(t,r),delete e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o($Q,"createSuperUser");async function CRe(e){Tr.trace("Creating Cluster user.");let t;e[he.INSTALL_PROMPTS.CLUSTERING_USER]&&e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[he.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await GQ({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[he.INSTALL_PROMPTS.CLUSTERING_USER],delete e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(CRe,"createClusterUser");async function ORe(){let e=FQ.version;if(e)await BQ.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(ORe,"insertHdbVersionInfo");function PRe(e){Ic[he.INSTALL_PROMPTS.HDB_CONFIG]=e}o(PRe,"updateConfigEnv");function LRe(e){rD=e}o(LRe,"setIgnoreExisting")});var sD={};Ie(sD,{isHdbInstalled:()=>DRe});function DRe(e,t){try{nD.default.statSync((0,tR.getPropsFilePath)()),nD.default.statSync(e.get(Zf.SETTINGS_PATH_KEY))}catch(r){if((0,tR.noBootFile)())return!0;if(r.code==="ENOENT")return!1;throw t.error(`Error checking for HDB install - ${r}`),r}return!0}var nD,tR,iD=ie(()=>{H();nD=w(require("node:fs")),tR=w(oe());o(DRe,"isHdbInstalled")});var zQ=M((iHe,WQ)=>{"use strict";var oD=oe(),Ts=Q(),YQ=VL();WQ.exports={processDirectives:MRe};async function MRe(e){console.log("Starting upgrade process...");let t=YQ.getVersionsForUpgrade(e),r=xRe(t),n=[],s=r.length;for(let i=0;i<s;i++){let a=r[i],c=`Running upgrade for version ${a.version}`;Ts.notify(c),console.log(c);let l=[],u=[];try{l=vRe(a.sync_functions)}catch(d){throw Ts.error(`Error while running an upgrade script for ${a.version}`),d}try{u=await URe(a.async_functions)}catch(d){throw Ts.error(`Error while running an upgrade script for ${a.version}`),d}n.push(...l,...u)}return n}o(MRe,"processDirectives");function vRe(e){if(oD.isEmptyOrZeroLength(e))return Ts.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Ts.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Ts.info(`Running function ${r.name}`),!(r instanceof Function)){Ts.info("Variable being processed is not a function");continue}let n=r();Ts.info(n),t.push(n)}return t}o(vRe,"runSyncFunctions");async function URe(e){if(oD.isEmptyOrZeroLength(e))return Ts.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Ts.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(Ts.info(`Running function ${s.name}`),!(s instanceof Function)){Ts.info("Variable being processed is not a function");continue}let i=await s();Ts.info(i),t.push(i)}return t}o(URe,"runAsyncFunctions");function xRe(e){if(oD.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=YQ.getDirectiveByVersion(r);n&&t.push(n)}return t}o(xRe,"getUpgradeDirectivesToInstall")});var aD=M((aHe,jQ)=>{"use strict";var BRe=require("util"),FRe=require("path"),kRe=require("child_process"),HRe=BRe.promisify(kRe.execFile),qRe=1e3*1e3*10;jQ.exports={findPs:GRe};async function GRe(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await HRe("ps",["wwxo",`pid,${r}`],{maxBuffer:qRe});for(let s of n.trim().split(`
|
|
113
|
+
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),a=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:FRe.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}o(GRe,"findPs")});var r4=M((lHe,t4)=>{"use strict";var XQ=ue();XQ.initSync();var ZQ=require("chalk"),mo=Q(),mu=(H(),D(W)),$Re=zQ(),cD=oe(),VRe=(iD(),D(sD)),e4=Jy(),KRe=Gy(),QQ=aD(),YRe=mi(),{packageJson:JQ}=Tt(),WRe=require("util").promisify,zRe=WRe(YRe.setSchemaDataToGlobal),lD,{UPGRADE_VERSION:uD}=mu.UPGRADE_JSON_FIELD_NAMES_ENUM;t4.exports={upgrade:jRe};async function jRe(e){await zRe(),lD===void 0&&(lD=Oh()),VRe.isHdbInstalled(XQ,mo)||(rR("Harper is not installed. Harper must be installed before running an upgrade.",mu.LOG_LEVELS.ERROR),process.exit(1));let r=e;r||(r=await e4.getVersionUpdateInfo(),r||(console.log("HarperDB version is current"),process.exit(0))),rR(`This version of HarperDB is ${JQ.version}`,mu.LOG_LEVELS.INFO);let n=r[uD]??JQ.version;n||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${mu.HDB_SUPPORT_ADDRESS}`),mo.notify("Missing new version field from upgrade info object"),process.exit(1)),await QRe();let s,i=0;try{s=await KRe.forceUpdatePrompt(r)}catch(a){mo.error("There was an error when prompting user about upgrade."),mo.error(a),s=!1,i=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(i)),mo.info(`Starting upgrade to version ${n}`),await JRe(r),rR(`HarperDB was successfully upgraded to version ${r[uD]}`,mu.LOG_LEVELS.INFO)}o(jRe,"upgrade");async function QRe(){let e=!1,t=await QQ.findPs(mu.HDB_PROC_NAME);if(cD.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await QQ.findPs("hdb_express");cD.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await lD.list();cD.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(ZQ.red(r)),mo.error(r),process.exit(1)}}o(QRe,"checkIfRunning");async function JRe(e){try{await $Re.processDirectives(e)}catch(t){throw rR("There was an error during the data upgrade. Please check the logs.",mu.LOG_LEVELS.ERROR),t}try{await e4.insertHdbUpgradeInfo(e[uD])}catch(t){mo.error("Error updating the 'hdb_info' system table."),mo.error(t)}}o(JRe,"runUpgrade");function rR(e,t=void 0){t||(t=mo.info),mo[t](e),console.log(ZQ.magenta(e))}o(rR,"printToLogAndConsole")});var c4=M(sR=>{"use strict";var ye=ue();ye.initSync();cf();var yr=(H(),D(W)),{CONFIG_PARAMS:Be}=yr,Yn=Q(),pu=require("fs-extra"),Ea=require("path"),XRe=vL(),{install:ZRe}=KQ(),dD=require("chalk"),{packageJson:eAe,PACKAGE_ROOT:tAe}=Tt(),hu=oe(),rAe=(iD(),D(sD)),fD=yt(),s4=Hc(),n4=LT(),nAe=r4(),{compactOnStart:sAe}=(kO(),D(FO)),iAe=require("minimist"),oAe=fs(),{startHTTPThreads:aAe}=(mD(),D(l4)),cAe=Jy(),{isMainThread:lAe}=require("worker_threads"),dHe=$i(),fHe=Ol(),mHe=BI(),pHe=rp(),nR=(H(),D(W)),po,Cf,i4=!1,uAe="Upgrade complete. Starting HarperDB.",dAe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",fAe="HarperDB not found, starting install process.",mAe="There was an error during install, check install_log.log for more details. Exiting.",pAe="HarperDB successfully started.";function hAe(){process.on("unhandledRejection",(e,t)=>{Yn.error("Unhandled promise rejection: Promise",t,"reason:",e)})}o(hAe,"addUnhandleRejectionListener");function EAe(){if(!i4){let e=o(()=>{pu.removeSync(Ea.join(ye.get(yr.CONFIG_PARAMS.ROOTPATH),yr.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}o(EAe,"addExitListeners");async function o4(e=!1,t=!1){if(console.log(dD.magenta("Starting HarperDB...")),hAe(),Yn.suppressLogging?.(()=>{console.log(dD.magenta(""+pu.readFileSync(Ea.join(tAe,"utility/install/ascii_logo.txt"))))}),rAe.isHdbInstalled(ye,Yn)===!1){console.log(fAe);try{await ZRe()}catch(l){console.error(mAe,l),Yn.error(l),process.exit(1)}}if(!e){let l=s4(Object.keys(yr.CONFIG_PARAM_MAP),!0);!hu.isEmpty(l)&&!hu.isEmptyOrZeroLength(Object.keys(l))&&fD.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=Cf?.service==="clustering";Cf?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=Ea.join(ye.get(yr.CONFIG_PARAMS.ROOTPATH),yr.HDB_PID_FILE),i=yAe(s);i&&i!==1&&RAe(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),po===void 0&&(po=Oh()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),ye.get(yr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await n4.generateNatsConfig(),await po.startClusteringProcesses(!0),process.exit()),EAe(),await pu.writeFile(Ea.join(ye.get(nR.CONFIG_PARAMS.ROOTPATH),nR.HDB_PID_FILE),`${process.pid}`),Yn.info("HarperDB PID",process.pid);let a;try{let l=await cAe.getVersionUpdateInfo();l!==void 0&&(a=l[yr.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await nAe.upgrade(l),console.log(uAe))}catch(l){a?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${a}. Exiting HarperDB.`,l),Yn.error(l)):(console.error(dAe,l),Yn.error(l)),process.exit(1)}XRe(),SAe(),await oAe.reviewSelfSignedCert(),hu.autoCastBoolean(ye.get(yr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&lAe&&await n4.generateNatsConfig(t)}o(o4,"initialize");async function _Ae(e=!1){try{Cf=iAe(process.argv),Cf.ROOTPATH&&fD.updateConfigObject("settings_path",Ea.join(Cf.ROOTPATH,yr.HDB_CONFIG_FILE)),await o4(e,!0),ye.get(yr.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await sAe();let t=process.env.IS_SCRIPTED_SERVICE&&!Cf.service;hu.autoCastBoolean(ye.get(yr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await po.startClusteringProcesses(),await po.startClusteringThreads()),await aAe(process.env.DEV_MODE?1:ye.get(nR.CONFIG_PARAMS.THREADS_COUNT)??ye.get(nR.CONFIG_PARAMS.THREADS)),t||a4()}catch(t){console.error(t),Yn.error(t),process.exit(1)}}o(_Ae,"main");function a4(){Yn.suppressLogging(()=>{console.log(dD.magenta(`HarperDB ${eAe.version} successfully started`))}),Yn.notify(pAe)}o(a4,"started");async function gAe(e=!0){i4=!e;try{po===void 0&&(po=Oh()),po.enterPM2Mode(),await o4(),hu.autoCastBoolean(ye.get(yr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await po.startClusteringProcesses(),await po.startService(yr.PROCESS_DESCRIPTORS.HDB),a4(),e&&process.exit(0)}catch(t){console.error(t),Yn.error(t),process.exit(1)}}o(gAe,"launch");function SAe(){let e=Ea.join(ye.get(yr.CONFIG_PARAMS.ROOTPATH),yr.LICENSE_KEY_DIR_NAME,yr.LICENSE_FILE_NAME),t=Ea.join(e,yr.LICENSE_FILE_NAME),r=Ea.join(e,yr.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=s4(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(hu.isEmpty(n)||hu.isEmpty(s))return;pu.mkdirpSync(e),pu.writeFileSync(r,n),pu.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),Yn.error(s)}}o(SAe,"writeLicenseFromVars");sR.launch=gAe;sR.main=_Ae;sR.startupLog=TAe;function TAe(e){let r=o(p=>p.padEnd(20),"pad"),n=`
|
|
114
114
|
`;ye.get(Be.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${ye.get(Be.REPLICATION_HOSTNAME)}
|
|
115
115
|
`),ye.get(Be.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${ye.get(Be.REPLICATION_URL)}
|
|
116
116
|
`),n+=`${r("Worker Threads:")}${ye.get(Be.THREADS_COUNT)}
|
|
@@ -123,16 +123,16 @@ Reindexing upgrade started for transaction logs`),fa.notify("Reindexing upgrade
|
|
|
123
123
|
`,n+=r("MQTT:"),n+=ye.get(Be.MQTT_NETWORK_PORT)?`TCP: ${ye.get(Be.MQTT_NETWORK_PORT)}, `:"",n+=ye.get(Be.MQTT_NETWORK_SECUREPORT)?`TLS: ${ye.get(Be.MQTT_NETWORK_SECUREPORT)}`:"",n+=ye.get(Be.MQTT_WEBSOCKET)&&ye.get(Be.HTTP_PORT)?`, WS: ${ye.get(Be.HTTP_PORT)}`:"",n+=ye.get(Be.MQTT_WEBSOCKET)&&ye.get(Be.HTTP_SECUREPORT)?`, WSS: ${ye.get(Be.HTTP_SECUREPORT)}
|
|
124
124
|
`:`
|
|
125
125
|
`;let i=ye.get(Be.REPLICATION_PORT)??ye.get(Be.OPERATIONSAPI_NETWORK_PORT),a=ye.get(Be.REPLICATION_SECUREPORT)??ye.get(Be.OPERATIONSAPI_NETWORK_SECUREPORT),c=r("Replication:");c+=i?`WS: ${i}, `:"",c+=a?`WSS: ${a} `:"",n+=`${c.slice(0,-2)}
|
|
126
|
-
`;let l=[],u=
|
|
126
|
+
`;let l=[],u=fD.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 g=E.name;g==="rest"&&(f+=`${E.protocol_name}: ${p}, `),l.includes(g)&&(d[g]?d[g]+=`${E.protocol_name}: ${p}, `:d[g]=`${E.protocol_name}: ${p}, `)}f.length>21&&(f=f.slice(0,-2),n+=`${f}
|
|
127
127
|
`);let m=ye.get(Be.HTTP_PORT)?`HTTP: ${ye.get(Be.HTTP_PORT)}, `:"";m+=ye.get(Be.HTTP_SECUREPORT)?`HTTPS: ${ye.get(Be.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)}
|
|
128
128
|
`:n+=`${r(p+": ")}${m}
|
|
129
|
-
`;console.log(n),ye.get(Be.LOGGING_STDSTREAMS)&&Yn.logsAtLevel("info")&&Yn.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.`)})}o(
|
|
130
|
-
`),bE(e,404,0,e.requestId)}function bE(e,t,r,n){let s=IE.logging;if(s){
|
|
129
|
+
`;console.log(n),ye.get(Be.LOGGING_STDSTREAMS)&&Yn.logsAtLevel("info")&&Yn.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.`)})}o(TAe,"startupLog");function yAe(e){try{return Number.parseInt(pu.readFileSync(e,"utf8"),10)}catch{return null}}o(yAe,"readPidFile");function RAe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}o(RAe,"isProcessRunning")});var u4={};Ie(u4,{SERVERS:()=>Of,portServer:()=>pD,setPortServerMap:()=>iR});function iR(e,t){let r=pD.get(e)??[];pD.set(e,[...r,t])}var Of,pD,hD=ie(()=>{Of={},pD=new Map;o(iR,"setPortServerMap")});var dR={};Ie(dR,{deliverSocket:()=>R4,getHttpOptions:()=>wAe,getRequestId:()=>w4,handleApplication:()=>IAe,httpServer:()=>AD,logRequest:()=>bE,proxyRequest:()=>NAe,registerServer:()=>yD,suppressHandleApplicationWarning:()=>bAe});function IAe(e){IE=e.options.getAll(),e.options.on("change",t=>{IE=e.options.getAll()})}function wAe(){return IE}function R4(e,t,r){let n=e?.read?e:new h4.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Of[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=o(a=>{setTimeout(()=>{let c=Of[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):a<5?i(a+1):(_a.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function NAe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=d4.get(s),r){case"connection":i=R4(void 0,t),d4.set(s,i),i.write=(c,l,u)=>(aR.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(aR.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let a=i.destroy;i.destroy=()=>{a.call(i),aR.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 yD(e,t,r=!0){t||(t=Lr.default.get(B.HTTP_PORT));let n=Of[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",p4),s.on("unhandled",(i,a)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,a)}),n.lastServer=e}else Of[t]=e;e.on("unhandled",p4)}function RD(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(B.HTTP_PORT)!=null&&t.push({port:Lr.default.get(B.HTTP_PORT),secure:Lr.default.get(B.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Lr.default.get(B.HTTP_SECUREPORT)!=null&&t.push({port:Lr.default.get(B.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Lr.default.get(B.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,E4.resolvePath)(Lr.default.get(B.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function AD(e,t){let r=[];for(let{port:n,secure:s}of RD(t))r.push(A4(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?SD[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,yD(e,n,!1)),cR[n]=lR(SD,n);return r}function A4(e,t,r,n){if(iR(e,{protocol_name:t?"HTTPS":"HTTP",name:fR()}),!oR[e]){let s=r?"operationsApi_network":"http",i=Lr.default.get(s+"_keepAliveTimeout"),a=Lr.default.get(s+"_timeout"),c=Lr.default.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:a,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Lr.default.get(B.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,_4.getTicketKeys)(),SNICallback:(0,g4.createTLSSelector)(r?"operations-api":"server",u),ciphers:E.ciphers??E[0]?.ciphers})}let m=o(async(E,g)=>{let A=performance.now(),S=0;try{let N=new ja(E,g);r&&(N.isOperationsServer=!0),IE.logging?.id&&(N.requestId=S=w4());let O=await cR[e](N);if(!O){if(N._nodeResponse.statusCode){bE(E,N._nodeResponse.statusCode,S,performance.now()-A);return}O=b4(N)}if(O.headers?.set||(O.headers=new Us(O.headers)),await IP()?O.headers.set("Server","HarperDB"):O.headers.set("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"),O.status===-1){for(let re of O.headers||[])g.setHeader(re[0],re[1]);return E.baseRequest=N,g.baseResponse=O,oR[e].emit("unhandled",E,g)}let F=O.status||200;g.statusCode=F;let te=performance.now(),q=te-A,k=O.body,J,Y=!1;if(!O.handlesHeaders){let re=O.headers||new Us;k?k.length>=0?(typeof k=="string"?re.set("Content-Length",Buffer.byteLength(k)):re.set("Content-Length",k.length),J=!0):k instanceof ws&&(k.size?re.set("Content-Length",k.size):k.on&&(Y=!0,k.on("size",Te=>{g.headersSent||g.setHeader("Content-Length",Te)})),k=k.stream()):(re.set("Content-Length","0"),J=!0);let Re=`hdb;dur=${q.toFixed(2)}`;if(O.wasCacheMiss&&(Re+=", miss"),Ap(re,"Server-Timing",Re,!0),!g.headersSent)if(Y){if(re)if(re[Symbol.iterator])for(let[Te,Fe]of re)g.setHeader(Te,Fe);else for(let Te in re)g.setHeader(Te,re[Te])}else g.writeHead(F,re&&(re[Symbol.iterator]?Array.from(re):re));J&&g.end(k)}let le=N.handlerPath,ae=N.method;if(Je(q,"duration",le,ae,O.wasCacheMiss==null?void 0:O.wasCacheMiss?"cache-miss":"cache-hit"),zr(F<400,"success",le,ae),zr(1,"response_"+F,le,ae),bE(E,F,S,q),!J)if(k instanceof ReadableStream&&(k=gD.Readable.fromWeb(k)),(k[Symbol.iterator]||k[Symbol.asyncIterator])&&(k=gD.Readable.from(k)),k?.pipe){k.pipe(g),k.destroy&&g.on("close",()=>{k.destroy()});let re=0;k.on("data",Re=>{re+=Re.length}),k.on("end",()=>{Je(performance.now()-te,"transfer",le,ae),Je(re,"bytes-sent",le,ae)})}else k?.then?k.then(re=>{g.end(re)},R):g.end(k)}catch(N){R(N)}function R(N){let O=N.headers,F=N.statusCode||500;g.writeHead(F,O&&(O[Symbol.iterator]?Array.from(O):O)),g.end(AAe(N)),bE(E,F,S,performance.now()-A),N.statusCode?N.statusCode===500?_a.default.warn(N):_a.default.info(N):_a.default.error(N)}o(R,"onError")},"requestHandler"),p=Gg(m,(E,g)=>{g.statusCode=503,g.end("Service unavailable, exceeded request queue limit"),Je(!0,"service-unavailable",e)},Lr.default.get(s+"_requestQueueLimit")),h=oR[e]=(t?f?S4.createSecureServer:T4.createServer:uR.createServer)(l,(E,g)=>{let A=E.method;A==="GET"||A==="OPTIONS"||A==="HEAD"?m(E,g):p(E,g)});i>=0&&(h.keepAliveTimeout=i),c>=0&&(h.headersTimeout=c),t&&(h.ports||(h.ports=[]),h.ports.push(e),l.SNICallback.initialize(h),u&&(h.mtlsConfig=u),h.on("secureConnection",E=>{E._parent.startTime&&Je(performance.now()-E._parent.startTime,"tls-handshake",e),Je(E.isSessionReused(),"tls-reused",e)}),h.isSecure=!0),yD(h,e)}return oR[e]}function lR(e,t){let r=b4;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let a=r;r=o((...c)=>s(...c,a),"nextCallback")}}return r}function b4(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Us}}function CAe(e,t){AD(e,{requestOnly:!0,...t})}function I4(e,t){for(let{port:r}of RD(t))f4[t?.runFirst?"unshift":"push"]({listener:e,port:r}),TD[r]=lR(f4,r)}function OAe(e,t){let r=[];for(let{port:n,secure:s}of RD(t)){iR(n,{protocol_name:s?"WSS":"WS",name:fR()});let i=A4(n,s,t?.isOperationsServer,t?.mtls);RE[n]||(RE[n]=new y4.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),RE[n].on("connection",(a,c)=>{try{let l=new ja(c);l.isWebSocket=!0;let u=cR[n](l);_a.default.debug("Received WS connection, calling listeners",ED),m4[n](a,l,u)}catch(l){_a.default.warn("Error in handling WS connection",l)}}),I4((a,c,l,u)=>a.__harperdbRequestUpgraded?u(a,c,l):RE[n].handleUpgrade(a,c,l,d=>{a.__harperdbRequestUpgraded=!0,u(a,c,l),RE[n].emit("connection",d,a)}),{port:n}),i.on("upgrade",(a,c,l)=>{TD[n]&&TD[n](a,c,l)})),r.push(i),ED[t?.runFirst?"unshift":"push"]({listener:e,port:n}),m4[n]=lR(ED,n),cR[n]=lR(SD,n)}return r}function p4(e,t){t.writeHead(404),t.end(`Not found
|
|
130
|
+
`),bE(e,404,0,e.requestId)}function bE(e,t,r,n){let s=IE.logging;if(s){_D||(_D=_a.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";_D[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+PAe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function PAe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function w4(){return AE||(AE=new BigInt64Array([1n]),AE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",AE.buffer))),Number(Atomics.add(AE,0,1n))}var h4,_a,aR,Lr,E4,_4,g4,S4,T4,uR,gD,y4,AAe,RE,oR,cR,SD,IE,bAe,d4,f4,TD,ED,m4,_D,AE,bD=ie(()=>{h4=require("node:net"),_a=w(Q()),aR=require("node:worker_threads"),Lr=w(ue());H();E4=w(yt()),_4=w(nt()),g4=w(fs()),S4=require("node:http2"),T4=require("node:https"),uR=require("node:http");Fp();bp();Ns();Ps();gD=require("node:stream");xr();hD();qh();Jw();y4=require("ws");Qh();({errorToString:AAe}=_a.default);Ue.http=AD;Ue.request=CAe;Ue.ws=OAe;Ue.upgrade=I4;RE={},oR={},cR={},SD=[],IE={},bAe=!0;o(IAe,"handleApplication");o(wAe,"getHttpOptions");o(R4,"deliverSocket");d4=new Map;o(NAe,"proxyRequest");o(yD,"registerServer");o(RD,"getPorts");o(AD,"httpServer");o(A4,"getHTTPServer");o(lR,"makeCallbackChain");o(b4,"unhandled");o(CAe,"onRequest");Object.defineProperty(uR.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){}});f4=[],TD={};o(I4,"onUpgrade");ED=[],m4={};o(OAe,"onWebSocket");o(p4,"defaultNotFound");o(bE,"logRequest");o(PAe,"headersToString");o(w4,"getRequestId")});var wD=M(NE=>{"use strict";WE();var{isMainThread:ID,parentPort:N4,threadId:mR,workerData:LAe}=require("node:worker_threads"),{createServer:DAe}=require("node:net"),{unlinkSync:O4,existsSync:MAe}=require("fs"),P4;NE.whenComponentsLoaded=new Promise(e=>{P4=e});var Pi=Q(),ei=ue(),ys=(H(),D(W)),{server:vAe}=(xr(),D(rm)),{createServer:UAe}=require("node:tls"),{restartNumber:xAe,getWorkerIndex:Pf}=nt(),{createReuseportFd:wE}=(Fp(),D(lG)),{createTLSSelector:BAe}=fs(),{resolvePath:FAe}=yt(),{startupLog:kAe}=c4(),{SERVERS:Lf,setPortServerMap:C4,portServer:HAe}=(hD(),D(u4)),qAe=(bD(),D(dR)),GAe=ii(),L4=ei.get(ys.CONFIG_PARAMS.THREADS_DEBUG),$Ae=ei.get(ys.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);vAe.socket=VAe;if(L4){let e;if(ID)e=ei.get(ys.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Pi.info("Could not close debugger",t)}});else{let t=ei.get(ys.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Pf()>=0&&(e=t+Pf())}if(e){let t=ei.get(ys.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=ei.get(ys.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Pi.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&ID)try{require("inspector").open(9229)}catch(e){xAe<=1&&Pi.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"&&Pi.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:CHe,CONFIG_PARAMS:OHe}=ys;ei.initSync();NE.globals=GAe;NE.listenOnPorts=M4;NE.startServers=D4;function D4(){let e=ei.get(ys.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=pR().loadRootComponents(!0).then(()=>{N4?.on("message",n=>{let{port:s,fd:i,data:a}=n;if(i)deliverSocket(i,s,a);else if(n.requestId)qAe.proxyRequest(n);else if(n.type===ys.ITC_EVENT_TYPES.SHUTDOWN){Pi.trace("received shutdown request",mR);for(let c in Lf){let l=Lf[c],u;if(l.closeIdleConnections){let f=Object.getOwnPropertySymbols(l).find(h=>h.description.includes("connections")),m=0,p=setInterval(()=>{m++;let h=m>=100,E=l[f][h?"all":"idle"]();if(E.length===0){h&&clearInterval(p);return}m===1?Pi.info(`Closing ${E.length} idle connections`):h&&Pi.warn(`Forcefully closing ${E.length} active connections`);for(let g=0,A=E.length;g<A;g++){let S=E[g].socket;S._httpMessage&&!S._httpMessage.finished&&!h||(h?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
|
|
131
131
|
Connection: close\r
|
|
132
132
|
\r
|
|
133
|
-
`))}},25).unref()}l.close?.(()=>{if(ei.get(ys.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Pf()==0)try{I4(MAe(ei.get(ys.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,mR),l.cantCleanupProperly||Pi.warn("Had to forcefully exit the thread",mR),process.exit(0)},5e3).unref()})}if(N4||process.env.DEV_MODE)try{require("inspector").close()}catch(c){Pi.info("Could not close debugger",c)}}}).ref();let r;wE&&!FAe&&(r=O4()),Promise.resolve(r).then(()=>{if(Pf()===0)try{vAe(UAe)}catch(n){console.error("Error displaying start-up log",n)}A4?.postMessage({type:ys.ITC_EVENT_TYPES.CHILD_STARTED})})});return w4(t),t}o(C4,"startServers");function O4(){let e=[];for(let t in Lf){let r=Lf[t];if(t.includes?.("/")&&Pf()==0){CAe(t)&&I4(t),e.push(new Promise((a,c)=>{r.listen({path:t},()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),Pi.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=ei.get(ys.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let a=typeof s=="string"?s.split("-"):s,c=Pf();if(c<a[0]||c>a[1])continue}let i;try{let a=t.lastIndexOf(":");a>0?wE?n={fd:wE(+t.slice(a+1).replace(/[\[\]]/g,""),t.slice(0,a))}:n={host:+t.slice(a+1).replace(/[\[\]]/g,""),port:t.slice(0,a)}:wE?n={fd:wE(+t,"::")}:n={port:t}}catch(a){console.error(`Unable to bind to port ${t}`,a);continue}e.push(new Promise((a,c)=>{r.listen(n,()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),Pi.trace("Listening on port "+t,mR)}).on("error",c)}))}return Promise.all(e)}o(O4,"listenOnPorts");!RD&&!wAe?.noServerStart&&C4();function kAe(e,t){let r=(qh(),D(JT)).getComponentName,n;if(t.securePort){b4(t.securePort,{protocol_name:"TLS",name:r()});let s=DAe("server",t.mtls),i=ei.get("tls");n=PAe({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),Lf[t.securePort]=n}return t.port&&(b4(t.port,{protocol_name:"TCP",name:r()}),n=NAe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),Lf[t.port]=n),n}o(kAe,"onSocket")});var i4={};Ie(i4,{startHTTPThreads:()=>HAe,startSocketServer:()=>ND,updateWorkerIdleness:()=>x4});async function HAe(e=2,t){Ab().catch(r=>_R.error?.("Error recording hostname for analytics:",r));try{if(t)ID(0,1,!0);else{let{loadRootComponents:r}=pR();if(e===0)return(0,ho.setMainIsWorker)(!0),await AD().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)ID(r,e);return Promise.all(U4)}finally{(0,ho.threadsHaveStarted)()}}function ID(e,t=1,r){if(bD++,(0,ho.startWorker)("server/threads/threadServer.js",{name:RA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((a,c)=>{function l(u){u.type===SA.CHILD_STARTED&&(n.removeListener("message",l),a(n))}o(l,"onMessage"),n.on("message",l),n.on("error",c)});U4.push(s),await s,Df.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",a=>{if(a.requestId){let c=ER.get(a.requestId);c&&c(a)}}),n.on("exit",i),n.on("shutdown",i);function i(){let a=Df.indexOf(n);a>-1&&Df.splice(a,1)}if(o(i,"removeWorker"),Mf){let a=Mf;Mf=[];for(let c of a)v4[c.localPort](null,c)}}}),r){let n=setInterval(()=>{wD?wD=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,ho.shutdownWorkers)(),bD=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function ND(e=0,t){if(typeof e=="string")try{(0,gR.existsSync)(e)&&(0,gR.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=qAe:r=GAe(t):r=CD;let n=(0,vf.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=v4[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),wD=!0,r(i,(a,c)=>{if(!a){if(P4){let u=i._socket||new vf.Socket({handle:i,writable:!0,readable:!0});P4.deliverSocket(u,e,c),u.resume()}else bD>0?(Mf.length===0&&setTimeout(()=>{Mf.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,Mf.push(i)):(console.log("start up a dynamic thread to handle request"),ID(0));Je(!1,"socket-routed");return}a.requests++;let l=i.fd;if(l>=0)a.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new vf.Socket({handle:i,writable:!0,readable:!0});KAe(u,a,e)}Je(!0,"socket-routed")})},_R.info(`HarperDB ${M4.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 Df){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=hR)return hR=i,t(r);n=i}hR=0,t(r)}function qAe(e,t){let r={};e.getpeername(r);let n=r.address,s=Uf.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);CD(e,a=>{Uf.set(n,{worker:a,lastUsed:i}),t(a)})}function GAe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new vf.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",a=>{n.readStop();let l=a.toString("latin1").match(t)?.[1],u=Uf.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);CD(n,f=>{Uf.set(l,{worker:f,lastUsed:d}),s(f,a)})})}o(r,"findByHeaderAffinity")}function x4(){hR=0;for(let e of Df)e.expectedIdle=e.recentELU.idle+$Ae,e.requests=1;Df.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function KAe(e,t,r){let n=VAe++;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(),ER.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")),ER.delete(n)),s.event=="destroy"&&(e.destroy(),ER.delete(n))})}var ho,vf,_R,gR,D4,M4,Df,Mf,v4,P4,bD,U4,wD,hR,L4,Uf,$Ae,ER,VAe,uD=ie(()=>{ho=w(nt()),vf=require("net");H();_R=w(Q()),gR=require("fs");Ps();D4=require("worker_threads"),M4=w(bt()),Df=[],Mf=[],v4=[],bD=0,U4=[];D4.isMainThread&&process.on("uncaughtException",e=>{e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)});o(HAe,"startHTTPThreads");o(ID,"startHTTPWorker");o(ND,"startSocketServer");hR=0;o(CD,"findMostIdleWorker");L4=36e5,Uf=new Map;o(qAe,"findByRemoteAddressAffinity");o(GAe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Uf)r.lastUsed+L4<e&&Uf.delete(t)},L4).unref();$Ae=1e3;o(x4,"updateWorkerIdleness");(0,ho.setMonitorListener)(x4);ER=new Map,VAe=1;o(KAe,"proxySocket")});var OD={};Ie(OD,{hdbServer:()=>jAe,start:()=>jAe});async function jAe(e){try{Eo.default.debug("In Fastify server"+process.cwd()),Eo.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Eo.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=B4.default.isMaster,await QAe();let t=e.securePort>0;xf=JAe(t),await xf.ready(),e||(e={}),e.isOperationsServer=!0;try{Ue.http(xf.server,e),xf.server.closeIdleConnections||await xf.listen({port:0,host:"::"})}catch(r){throw xf.close(),Eo.default.error(r),Eo.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Eo.default.fatal(t),process.exit(1)}}async function QAe(){return Eo.default.trace("Configuring HarperDB process."),K4.default.setSchemaDataToGlobal(),W4.default.setUsersWithRolesCache()}function JAe(e){Eo.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=XAe(e),r=(0,F4.default)(t);r.server.headersTimeout=ebe(),r.setErrorHandler(Nc.serverErrorHandler);let n=ZAe();n&&r.register(k4.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(G4.default),r.register(H4.default),r.register(q4.default,{root:$4.default.join(V4.PACKAGE_ROOT,"studio/build-local")}),Tm(r);let s=wc.default.get(Zf.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!Y4.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.sendFile("running.html")}),r.post("/",{preValidation:[Nc.reqBodyValidationHandler,Nc.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,Nc.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),Eo.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function XAe(e){let t=wc.default.get(CE.OPERATIONSAPI_NETWORK_TIMEOUT),r=wc.default.get(CE.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:WAe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}function ZAe(){let e=wc.default.get(CE.OPERATIONSAPI_NETWORK_CORS),t=wc.default.get(CE.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===zAe)&&(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 ebe(){return wc.default.get(CE.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??YAe}var B4,wc,Eo,F4,k4,H4,q4,G4,$4,V4,K4,Y4,W4,Nc,YAe,WAe,zAe,CE,xf,z4=ie(()=>{B4=w(require("cluster")),wc=w(ue());H();Eo=w(Q()),F4=w(require("fastify")),k4=w(require("@fastify/cors")),H4=w(require("@fastify/compress")),q4=w(require("@fastify/static")),G4=w(NN()),$4=w(require("path")),V4=w(bt()),K4=w(mi()),Y4=w(oe()),W4=w(kn());xr();Nc=w(vy());Po();wc.default.initSync();YAe=6e4,WAe=1024*1024*1024,zAe="TRUE",{CONFIG_PARAMS:CE}=W;o(jAe,"operationsServer");o(QAe,"setUp");o(JAe,"buildServer");o(XAe,"getServerOptions");o(ZAe,"getCORSOpts");o(ebe,"getHeaderTimeoutConfig")});var RR={};Ie(RR,{disableNATS:()=>rbe,publishToStream:()=>yR,setNATSReplicator:()=>PD,setPublishToStream:()=>nbe,setSubscription:()=>vD,start:()=>tbe});function tbe(){OE.default.get(B.CLUSTERING_ENABLED)&&ibe()}function rbe(e=!0){Z4=e}function nbe(e,t){yR=e,vD=t}function ibe(){if(Z4||process.env._DISABLE_NATS)return;let e=at(),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];PD(s,r,i)}}wl((r,n)=>{PD(r.tableName,r.databaseName,r),n&&tJ(r)}),!j4&&(j4=!0)}function PD(e,t,r){if(t==="system"&&obe.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 Fr{static{o(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){tJ(i)}static subscribe(){let i=new Xn;return vD(t,e,i),i}static subscribeOnThisThread(i){return i<(OE.default.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??sbe)}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 SR(s.transaction,s);let a=s.transaction;for(;a.next;)a=a.next;a.next=s.transaction.nats,i.user=s.user,i.context=s}else i=eJ;return i}o(n,"getNATSTransaction")}function tJ(e){let t=OE.default.get(B.CLUSTERING_NODENAME);yR(`${DD.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,MD.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 Q4,DD,MD,J4,X4,OE,TR,Z4,yR,vD,sbe,eJ,j4,obe,SR,LD,UD=ie(()=>{Oe();Ua();Q4=w(sr()),DD=w(wt()),MD=w(Wi());Nu();J4=w(KN()),X4=w(Cn()),OE=w(ue());H();TR=w(Q());o(tbe,"start");o(rbe,"disableNATS");yR=Q4.publishToStream,vD=J4.setSubscription;o(nbe,"setPublishToStream");sbe=2;o(ibe,"assignReplicationSource");obe=["hdb_job","hdb_raw_analytics","hdb_info"];o(PD,"setNATSReplicator");o(tJ,"publishSchema");SR=class{constructor(t,r){this.transaction=t;this.options=r}static{o(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=OE.default.get(B.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let a=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(TR.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=a)),l.table===f&&l.operation===m?(a.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(yR(`${DD.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,MD.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw TR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},LD=class extends SR{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,X4.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};eJ=new LD});async function oJ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await xD.get(e,{returnNonexistent:!0});i=new kD(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await xD.get(e);a&&a.delete()}i=new bR(e,t)}return n&&(n.id=e,n.user={username:t?.username},PE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function BD(){return AR++,AR>65500&&(AR=1),AR}function FD(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=Ds.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 a=new ci(i.relativeURL);a.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return Rt(r,()=>s?t===void 0?c.delete(a,r):c.put(a,e.data,r):c.publish(a,e.data,r))}var nJ,Cc,sJ,iJ,rJ,xD,PE,AR,bR,kD,aJ=ie(()=>{Oe();xa();nJ=w(Cn()),Cc=w(Q());Ca();sJ=w(nt()),iJ=w(AD());xr();tg();rJ=100,xD=Xe({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),PE=Xe({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,sJ.getWorkerIndex)()===0&&(async()=>{await iJ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of PE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Ue.getUser(r.user.username));try{await FD(r,t,r)}catch{(0,Cc.warn)("Failed to publish will",t)}PE.delete(e.id)}})();o(oJ,"getSession");AR=1;o(BD,"getNextMessageId");bR=class{static{o(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:a}=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:a,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};a&&(0,Cc.trace)("Resuming subscription from",s,"from",a);let p=Ds.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 R=S.split("/"),N;for(let ee=0;ee<R.length;ee++)if(R[ee].indexOf("+")>-1)if(R[ee]==="+")N=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&N)throw new Error("Filters can not be combined");let O=!0;R[R.length-1]==="#"&&(R.length--,O=!1),N&&(n=o(ee=>{let q=ee.id;if(!Array.isArray(q))if(q?.indexOf?.("/")>-1)q=q.split("/");else return!1;if(O&&q.length!==R.length)return!1;for(let k=0;k<R.length;k++)if(R[k]!=="+"&&R[k]!==q[k])return!1;return!0},"filter"));let F=R.indexOf("+");m.url="/"+(F>-1?R.slice(0,F):R).concat("").join("/")}}else m.isCollection=!1;let E=p.path,g=p.Resource,A=await Rt(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let R=await g.subscribe(m,S);if(!R)return;if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let N=(async()=>{for await(let O of R)try{let F;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"&&O.type!=="patch"||n&&!n(O))continue;r?(O.topic=s,F=this.needsAcknowledge(O)):(O.acknowledge?.(),F=BD());let ee=O.id;if(Array.isArray(ee)&&(ee=Vu(ee)),ee==null&&(ee=""),await this.listener(E+"/"+ee,O.value,F,t)===!1)break;this.awaitingAcks?.size>rJ?await new Promise(k=>setTimeout(k,this.awaitingAcks.size-rJ)):await new Promise(setImmediate)}catch(F){(0,Cc.warn)(F)}})();return R});if(A)return A.topic=s,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){let r=BD();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 FD(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();Rt(r,async()=>{try{if(!t){let n=await PE.get(this.sessionId);n?.doesExist()&&await FD(n,n.data,r)}}finally{await PE.delete(this.sessionId)}}).catch(n=>{(0,Cc.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))}};o(FD,"publish");kD=class extends bR{static{o(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=BD(),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,Cc.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,nJ.getNextMonotonicTime)()),(0,Cc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),xD.put(this.sessionRecord)}}});var HD={};Ie(HD,{bypassAuth:()=>abe,start:()=>lbe});function abe(){pJ=!0}function lbe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new mJ.EventEmitter},e.mqtt.events.on("error",()=>{}));let a=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);a.events.emit("connection",u),Xt.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=lJ(u,E=>{u.send(E)},d,Promise.resolve(f).then(()=>d?.user),a);u.on("message",p),u.on("close",h),u.on("error",E=>{Xt.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(a.events.emit("connection",u),Xt.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 Gd(p,l);if(!E.valid)throw Xt.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,Bf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&wR.notify?.({username:d?.username,status:si.SUCCESS,type:ba.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,Bf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&wR.error?.({username:h,status:si.FAILURE,type:ba.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else Xt.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){a.events.emit("error",p,u),Xt.error?.(p)}else if(l.required)return Xt.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&cbe(u.remoteAddress)&&(d=await(0,uJ.getSuperUser)(),Xt.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=lJ(u,p=>u.write(p),null,d,a);u.on("data",f),u.on("close",m),u.on("error",p=>{Xt.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function lJ(e,t,r,n,s){cJ||(cJ=!0,Bm(f=>{IR>0&&f.push({metric:"mqtt-connections",connections:IR,byThread:!0})}));let i;IR++;let a,c={protocolVersion:4},l=(0,NR.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){IR--,i||(i=!0,a?.disconnect?.(),s.events.emit("disconnected",a,e),s.sessions.delete(a),zr(!1,"connection","mqtt","disconnect"),Xt.debug?.("MQTT connection was closed",e.remoteAddress))}return o(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(R){e.close?.(1008,"Unauthorized"),Xt.info?.(R);return}let m=f.cmd;if(a)a.then&&await a;else if(m!=="connect"){Xt.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;Je(f.length,"bytes-received",E,A(f),"mqtt");try{switch(a?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Ue.getUser(f.username,f.password.toString(),r),(0,Bf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&wR.notify?.({username:n?.username,status:si.SUCCESS,type:ba.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(J){return(0,Bf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&wR.error?.({username:f.username,status:si.FAILURE,type:ba.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,J),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let J=e.deserialize||(e.deserialize=Oo(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?J(f.will.payload):void 0,delete f.will.payload}a=oJ({user:n,...f}),a=await a,a.socket=e,r&&(a.request=r),s.sessions.add(a)}catch(J){return Xt.error?.(J),s.events.emit("auth-failed",f,e,J),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:J.code||5,returnCode:J.code||128})}s.events.emit("connected",a,e),zr(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:a.sessionWasPresent,reasonCode:0,returnCode:0});let R=o(async(J,Y,le,ae)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",J);let re=J.indexOf("/",1),Re=re>0?J.slice(0,re):J;g({cmd:"publish",topic:J,payload:await S(Y),messageId:le||Math.floor(Math.random()*1e8),qos:ae.qos},Re);let Te=e._socket??e;return Te.writableNeedDrain?new Promise(Fe=>Te.once("drain",Fe)):!Te.closed}catch(re){return Xt.error?.(re),a?.disconnect(),s.sessions.delete(a),!1}},"listener");a.setListener(R),a.sessionWasPresent&&await a.resume();break;case"subscribe":let N=[];for(let J of f.subscriptions){let Y;try{let le=await a.addSubscription(J,J.qos>=1);Y=le?le.qos||0:c.protocolVersion<5?128:143}catch(le){s.events.emit("error",le,e,J,a),le.statusCode?le.statusCode===500?Xt.warn?.(le):Xt.info?.(le):Xt.error?.(le),Y=c.protocolVersion<5?128:le.statusCode===403?135:le.statusCode===404?143:128}N.push(Y)}await a.committed,g({cmd:"suback",granted:N,messageId:f.messageId});break;case"unsubscribe":{let J=[];for(let Y of f.unsubscriptions)J.push(a.removeSubscription(Y)?0:17);g({cmd:"unsuback",granted:J,messageId:f.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let O=f.qos===2?"pubrec":"puback",F=e.deserialize||(e.deserialize=Oo(r?.headers.get?.("content-type"))),q=(f.payload?.length||0)>0?F(f.payload):void 0,k;try{k=await a.publish(f,q)}catch(J){s.events.emit("error",J,e,f,a),Xt.warn?.(J),f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:k===!1?144:0},f.topic);break;case"pubrec":g({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":a.acknowledge(f.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,a?.disconnect(!0),s.events.emit("disconnected",a,e),s.sessions.delete(a),zr(!0,"connection","mqtt","disconnect"),Xt.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(R){s.events.emit("error",R,e,f,a),Xt.error?.(R),g({cmd:"disconnect"})}function g(R,N){let O=(0,NR.generate)(R,c);t(O),Je(O.length,"bytes-sent",N,A(R),"mqtt")}o(g,"sendPacket");function A(R){return R.qos>0?R.cmd+",qos="+R.qos:R.cmd}o(A,"packetMethodName");function S(R){return Co(R,r)}o(S,"serialize")}),l.on("error",f=>{Xt.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var NR,uJ,Bf,dJ,fJ,mJ,wR,Xt,pJ,cbe,cJ,IR,hJ=ie(()=>{NR=require("mqtt-packet");aJ();uJ=w(kn());Po();Ps();xr();Bf=w(ue());H();dJ=w(Zn()),fJ=w(Q()),mJ=require("events");ZS();wR=(0,dJ.loggerWithTag)("auth-event"),Xt=(0,fJ.forComponent)("mqtt"),pJ=(0,Bf.get)(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(abe,"bypassAuth");cbe=o(e=>pJ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(lbe,"start");IR=0;o(lJ,"onSocket")});function CR(e,t){if(t?.includes(".."))throw new qD(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var qD,GD=ie(()=>{qD=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(CR,"resolveBaseURLPath")});function EJ(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(a=>a[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var _J=ie(()=>{o(EJ,"deriveCommonPatternBase")});function OR(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=o((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 $D=ie(()=>{o(OR,"deriveGlobOptions")});var gJ,VD,LE,SJ=ie(()=>{GD();_J();$D();gJ=require("micromatch"),VD=class extends Error{static{o(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},LE=class{static{o(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=CR(this.name,this.config.urlPath),this.globOptions=OR(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new VD(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,gJ.scan)(s).base),this.commonPatternBase=EJ(this.patternBases)}}});function TJ(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function Eu(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(TJ(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(TJ(n,t)){t=t.slice(n.length+1);break}}}return(0,yJ.join)(e.baseURLPath,t)}var yJ,KD=ie(()=>{yJ=require("node:path");o(TJ,"pathStartsWithBase");o(Eu,"deriveURLPath")});function RJ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var LR,AJ,bJ,YD,IJ,wJ,PR,NJ=ie(()=>{LR=require("node:events");SJ();AJ=w(Q()),bJ=w(require("chokidar")),YD=require("node:path"),IJ=require("node:fs/promises");KD();wJ=require("micromatch"),PR=class extends LR.EventEmitter{static{o(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new LE(t,r,RJ(n)),this.#r=s||AJ.default.loggerWithTag(t),this.ready=(0,LR.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#n(...[t,r,n]){if(r===""&&(r="/"),!(0,wJ.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,YD.join)(this.directory,r);switch(t){case"add":case"change":{let i=Eu(this.#e,r,"file");(0,IJ.readFile)(s).then(a=>{let c={eventType:t,entryType:"file",contents:a,stats:n,absolutePath:s,urlPath:i};this.emit("all",c),this.emit(t,c)});break}case"unlink":{let i=Eu(this.#e,r,"file"),a={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}case"addDir":case"unlinkDir":{let i=Eu(this.#e,r,"directory"),a={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}}}#s(t){this.emit("error",t)}#i(){this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,YD.join)(this.#e.directory,r));return this.#t=bJ.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:o(r=>r!==this.#e.directory&&t.every(n=>!r.startsWith(n)),"ignored")}).on("all",this.#n.bind(this)).on("error",this.#s.bind(this)).on("ready",this.#i.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new LE(this.name,this.directory,RJ(t)),this.#a()}};o(RJ,"castConfig")});var DR,WD=ie(()=>{DR={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var vR,CJ,OJ,PJ,LJ,DJ,zD,jD,QD,JD,XD,MR,MJ=ie(()=>{vR=require("events"),CJ=w(require("yaml")),OJ=w(require("chokidar")),PJ=require("node:fs/promises"),LJ=require("util"),DJ=w(Q());WD();zD=class extends Error{static{o(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"}},jD=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},QD=class extends Error{static{o(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"}},JD=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},XD=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},MR=class extends vR.EventEmitter{static{o(this,"OptionsWatcher")}#e;#t;#r;#n;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||DJ.default.loggerWithTag(t),this.ready=(0,vR.once)(this,"ready"),this.#t=OJ.default.watch(r,{persistent:!1}).on("add",this.#a.bind(this)).on("change",this.#a.bind(this)).on("error",this.#d.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#a.bind(this))}#a(){(0,PJ.readFile)(this.#e,"utf-8").then(t=>{this.#n=CJ.default.parse(t),this.#n&&this.#s in this.#n?this.#r?this.#f(this.#n[this.#s],this.#r):(this.#r=this.#n[this.#s],this.emit("ready",this.#r)):this.#r&&(this.#r=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#n?(this.#o(),this.emit("remove")):(this.#o(),this.emit("ready"));return}this.emit("error",t)})}#d(t){this.emit("error",new zD(this.#e,t))}#c(t){this.#i.warn(`Configuration file ${t} was deleted. Reverting to default configuration. Recreate it to restore the options watcher.`),this.#o(),this.emit("remove")}#o(){this.#n=DR,this.#r=this.#n[this.#s]}#f(t,r,n=[]){if(!this.#l(r)||!this.#l(t)){this.#u(n,t);return}for(let s of Object.keys(r))s in t||this.#u(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let a=n.concat(s),c=this.#m(a);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#u(a,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#l(c)?this.#f(i,c,a):this.#u(a,i);continue}(0,LJ.isDeepStrictEqual)(i,c)||this.#u(a,i)}}#l(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#m(t){let r=this.#r;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#u(t,r){if(!this.#r)throw new jD;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new QD(t,r);let n=this.#r;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new JD(t,s);n=n[s]}if(n==null||typeof n!="object")throw new XD(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#r)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#r?this.#m(t):void 0}getAll(){return structuredClone(this.#r)}getRoot(){return this.#n}}});var BR,vJ,UR,xR,UJ=ie(()=>{BR=require("node:events");NJ();MJ();vJ=w(Q());fP();UR=class extends Error{static{o(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},xR=class extends BR.EventEmitter{static{o(this,"Scope")}#e;#t;#r;#n;#s;#i;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#r=t,this.#t=r,this.#e=n,this.#i=(0,vJ.loggerWithTag)(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,BR.once)(this,"ready"),this.options=new MR(t,n,this.#i).on("error",this.#d.bind(this)).on("change",this.#f.bind(this)()).on("ready",this.#a.bind(this))}get logger(){return this.#i}get name(){return this.#r}get directory(){return this.#t}#a(){this.emit("ready")}#d(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#c(t){let r=new PR(this.#r,this.#t,t,this.#i).on("error",this.#d.bind(this)).on("add",this.#o("add")).on("change",this.#o("change")).on("unlink",this.#o("unlink")).on("addDir",this.#o("addDir")).on("unlinkDir",this.#o("unlinkDir"));return this.#s.push(r),r}#o(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#f(){let t=this;return o(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#n){t.#n=t.#c(i);return}t.#n.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#l(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return t.files}handleEntry(t,r){if(t===void 0){if(this.#n)return this.#n;let s=this.#l();if(s)return this.#n=this.#c(s),this.#n;this.emit("error",new UR);return}if(typeof t=="function"){if(this.#n)return this.#n.on("all",t);let s=this.#l();if(s)return this.#n=this.#c(s),this.#n.on("all",t);this.emit("error",new UR);return}let n=this.#c(t);return r?n.on("all",r):n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),xW()}}});function _u(e){return typeof e=="string"&&e.trim()!==""}function ZD(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>_u(t))}function kJ(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function ube(e){e.config.root&&DE.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 oM(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(kJ(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let a=(0,ME.join)(e.directory,i);FR.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,a,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,a,e.resources))}return s}async function HJ(e){let t=!1;if(t=await ube(e),t)return t;let r=await(0,xJ.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,ME.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=Eu(e,n.path,"directory");FR.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=Eu(e,n.path,"file"),a=await(0,BJ.readFile)(s);FR.isMainThread&&e.module.setupFile?(await e.module.setupFile(a,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(a,i,s,e.resources),t=!0)}else DE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var FR,xJ,DE,ME,BJ,FJ,kR,Li,eM,tM,rM,nM,sM,iM,oM,aM,cM,qJ=ie(()=>{FR=require("node:worker_threads"),xJ=w(require("fast-glob")),DE=w(Q());GD();$D();ME=require("node:path"),BJ=require("node:fs/promises");KD();FJ=require("micromatch"),kR=class{static{o(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,!_u(this.config.files)&&!ZD(this.config.files)&&!kJ(this.config.files))throw new eM(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!ZD(this.config.files.source)&&!_u(this.config.files.source))throw new tM(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new rM(this);if(this.config.files.ignore!==void 0&&!ZD(this.config.files.ignore)&&!_u(this.config.files.ignore))throw new nM(this)}if(this.config.root!==void 0&&!_u(this.config.root))throw new iM(this);if(this.config.path!==void 0&&!_u(this.config.path))throw new aM(this);if(this.config.path&&(DE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!_u(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new cM(this);this.globOptions=OR(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new sM(this,r);return r.startsWith("/")&&(DE.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,FJ.scan)(r).base),this.baseURLPath=CR(this.name,this.config.urlPath)}},Li=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,ME.basename)(r.directory)}) ${t}`)}},eM=class extends Li{static{o(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},tM=class extends Li{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},rM=class extends Li{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},nM=class extends Li{static{o(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},sM=class extends Li{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},iM=class extends Li{static{o(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},oM=class extends Li{static{o(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)}},aM=class extends Li{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},cM=class extends Li{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(_u,"isNonEmptyString");o(ZD,"isArrayOfNonEmptyStrings");o(kJ,"isObject");o(ube,"handleRoots");o(HJ,"processResourceExtensionComponent")});var JT={};Ie(JT,{getComponentName:()=>fR,loadComponent:()=>$R,loadComponentDirectories:()=>VJ,setErrorReporter:()=>fbe});function VJ(e,t){t&&(uM=t),e&&(pM=e);let r=[];if((0,Pt.existsSync)(lM)){let s=(0,Pt.readdirSync)(lM,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,on.join)(lM,a);r.push($R(c,uM,hA,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push($R(n,uM,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{$J=!0})}function fbe(e){qR=e}function mbe(e,t){return new Promise((r,n)=>{let s=setTimeout(()=>{aa.primaryStore.unlock(e,0),n(new Error("symlinking harperdb module timed out"))},1e4);if(aa.primaryStore.attemptLock(e,0,()=>{clearTimeout(s),r()}))try{(0,Pt.rmSync)(t,{recursive:!0,force:!0}),(0,Pt.existsSync)((0,on.join)(e,"node_modules"))||(0,Pt.mkdirSync)((0,on.join)(e,"node_modules")),(0,Pt.symlinkSync)(EM.PACKAGE_ROOT,t,"dir"),r()}finally{aa.primaryStore.unlock(e,0)}})}function KJ(e,t){return e.ready.then(()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.name}. Expected a number, received: ${typeof r}`);let n,s;return aa.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(KJ(e,t))})?Promise.race([t.handleApplication(e),new Promise((i,a)=>setTimeout(()=>a(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{aa.primaryStore.unlock(e.name,0)}):new Promise((i,a)=>{n=i,s=setTimeout(()=>{a(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)})})}async function $R(e,t,r,n,s,i){let a=(0,Pt.realpathSync)(e);if(HR.has(a))return HR.get(a);HR.set(a,!0),s&&(pM=s);try{let c,l=(0,on.join)(e,"harperdb-config.yaml");(0,Pt.existsSync)(l)?c=n?(0,VR.getConfigObj)():(0,fM.parseDocument)((0,Pt.readFileSync)(l,"utf8")).toJSON():!n&&(0,Pt.existsSync)(l=(0,on.join)(e,"config.yaml"))?c=(0,fM.parseDocument)((0,Pt.readFileSync)(l,"utf8")).toJSON():c=DR;try{let m=(0,on.join)(e,"node_modules","harperdb");(n||((0,Pt.existsSync)(m)||!e.startsWith((0,mM.getHdbBasePath)()))&&(!(0,Pt.existsSync)(m)||(0,Pt.realpathSync)(EM.PACKAGE_ROOT)!==(0,Pt.realpathSync)(m)))&&await mbe(e,m)}catch(m){ga.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&ga.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=GR,d={};for(let m in c){let p=`${(0,on.basename)(e)}.${m}`;GR=m;let h=c[m];if(!h)continue;let E,g=h.package;try{if(g){let O=e,F;for(;!(0,Pt.existsSync)(F=(0,on.join)(O,"node_modules",m));)if(O=(0,on.dirname)(O),O.length<(0,mM.getHdbBasePath)().length){F=null;break}if(F)E=await $R(F,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${g}`)}else E=dbe[m];if(!E)continue;Vo.loading(p);let A=o(O=>(O.origin=r,Xe(O)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,R=S?.securePort||S?.https&&S.port,N=!S?.https&&S?.port;if("handleApplication"in E&&("start"in E||"startOnMainThread"in E||"handleFile"in E||"handleDirectory"in E||"setupFile"in E||"setupDirectory"in E)){let O=new Error(`Plugin ${m} is exporting old extension APIs. Remove them.`);throw Vo.failed(p,O,`Component '${p}' failed to load`),O}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&ga.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let O=new xR(m,e,l,t,Ue);await KJ(O,E),Vo.loaded(p,`Component '${p}' loaded successfully`);continue}if(dM.isMainThread&&(E=await E.startOnMainThread?.({server:Ue,ensureTable:A,port:N,securePort:R,resources:t,...h})||E,n&&S))for(let O of[N,R])try{if(+O&&!GJ.includes(O)){let F=hM.get(B.HTTP_SESSIONAFFINITY);F&&ga.default.warn("Session affinity is not recommended and may cause memory leaks"),(F||!lS)&&(GJ.push(O),ND(O,F))}}catch(F){console.error("Error listening on socket",O,F,m)}if(t.isWorker&&(E=await E.start?.({server:Ue,ensureTable:A,port:N,securePort:R,resources:t,...h})||E),pM.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let O=new kR({config:h,name:m,directory:e,module:E,resources:t});d[m]=await HJ(O)}Vo.loaded(p,`Component '${p}' loaded successfully`)}catch(A){A.message=`Could not load component '${m}' for application '${(0,on.basename)(e)}' due to: ${A.message}`,qR?.(A),((0,vE.getWorkerIndex)()===0?console:ga.default).error(A),t.set(h.path||"/",new il(A),null,!0),Vo.failed(p,A,`Could not load component '${p}'`)}}if(GR=u,dM.isMainThread&&!$J&&i&&(0,vE.watchDir)(e,async()=>VJ()),c.extensionModule||c.pluginModule){let m=await oS((0,on.join)(e,c.extensionModule||c.pluginModule));return HR.set(a,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?`;qR?.(new Error(m)),((0,vE.getWorkerIndex)()===0?console:ga.default).error(m),Vo.failed((0,on.basename)(e),m)}for(let[m,p]of Object.entries(d))p||ga.default.warn(`Component ${m} from (${(0,on.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}`,qR?.(c),t.set("",new il(c))}}var Pt,on,dM,fM,hM,EM,ga,vE,mM,VR,lM,pM,$J,uM,dbe,GJ,HR,qR,GR,fR,qh=ie(()=>{Pt=require("node:fs"),on=require("node:path"),dM=require("node:worker_threads"),fM=require("yaml"),hM=w(ue()),EM=w(bt());H();Sq();Oq();$q();jq();Qq();dG();N2();C2();P2();ga=w(Q());x2();vE=w(nt());EN();xr();Oe();uD();mM=w(ue());z4();$T();UD();us();hJ();VR=w(Tt());Fp();kb();UJ();qJ();yD();Yh();Sp();WD();lM=(0,VR.resolvePath)(hM.get(B.COMPONENTSROOT)),pM=new Map;o(VJ,"loadComponentDirectories");dbe={REST:dS,rest:dS,graphql:cN,graphqlSchema:oN,roles:hN,jsResource:_N,fastifyRoutes:IL,login:SN,static:NL,operationsApi:OD,customFunctions:{},http:dR,clustering:RR,replication:zo,authentication:vh,mqtt:HD,loadEnv:CL,logging:ga.default,dataLoader:OL},GJ=[],HR=new Map;o(fbe,"setErrorReporter");fR=o(()=>GR,"getComponentName");o(mbe,"symlinkHarperModule");o(KJ,"sequentiallyHandleApplication");o($R,"loadComponent")});var pR=M((Xqe,YJ)=>{var{isMainThread:_M}=require("worker_threads"),{getTables:pbe,getDatabases:Qqe,table:Jqe}=(Oe(),D(mt)),{loadComponentDirectories:hbe,loadComponent:Ebe}=(qh(),D(JT)),{resetResources:_be}=(xa(),D(Hb)),gbe=ZO(),Sbe=Tt(),{dirname:Tbe}=require("path"),{getConnection:ybe}=sr(),Rbe=ue(),{CONFIG_PARAMS:Abe}=(H(),D(W)),{loadCertificates:bbe}=fs(),{loadAndWatchLicensesDir:Ibe}=(Qh(),D(cy)),gM=new Map;async function wbe(e=!1){!_M&&Rbe.get(Abe.CLUSTERING_ENABLED)&&ybe();try{_M&&await gbe()}catch(n){console.error(n)}let t=_be();pbe(),t.isWorker=e,_M&&Ibe(),await bbe(),await Ebe(Tbe(Sbe.getConfigFilePath()),t,"hdb",!0,gM),await hbe(gM,t);let r=[];for(let[n]of gM)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o(wbe,"loadRootComponents");YJ.exports.loadRootComponents=wbe});var nt=M((eGe,Mi)=>{"use strict";WE();var{Worker:Nbe,MessageChannel:Cbe,parentPort:_o,isMainThread:AM,threadId:Obe,workerData:go}=require("worker_threads"),{PACKAGE_ROOT:Pbe}=bt(),{join:QJ,isAbsolute:Lbe,extname:Dbe}=require("path"),{server:JJ}=(xr(),D(rm)),{watch:Mbe,readdir:vbe}=require("fs/promises"),{totalmem:WJ}=require("os"),Ff=(H(),D(W)),XJ=ue(),Di=Q(),{randomBytes:Ube}=require("crypto"),{_assignPackageExport:xbe}=ii(),zJ=1024*1024,Oc=[],ti=[],Bbe=50,bM=1e4,Fbe="restart",ZJ="request_thread_info",e3="resource_report",t3="thread_info",r3="added-port",kbe="ack",SM;xbe("threads",ti);Mi.exports={startWorker:TM,restartWorkers:wM,shutdownWorkers:Vbe,workers:Oc,setMonitorListener:Xbe,onMessageFromWorkers:Kbe,onMessageByType:l3,broadcast:Wbe,broadcastWithAcknowledgement:jbe,setChildListenerByType:$be,getWorkerIndex:n3,getWorkerCount:s3,getTicketKeys:o3,setMainIsWorker:qbe,setTerminateTimeout:Hbe,restartNumber:go?.restartNumber||1};ti.onMessageByType=l3;ti.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=ti.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Mi.exports.whenThreadsStarted=new Promise(e=>{Mi.exports.threadsHaveStarted=e});var IM;function Hbe(e){bM=e}o(Hbe,"setTerminateTimeout");function n3(){return go?go.workerIndex:IM?0:void 0}o(n3,"getWorkerIndex");function s3(){return go?go.workerCount:IM?1:void 0}o(s3,"getWorkerCount");function qbe(e){IM=e,Mi.exports.threadsHaveStarted()}o(qbe,"setMainIsWorker");var i3=1,KR;function o3(){return KR||(KR=AM?Ube(48):go.ticketKeys,KR)}o(o3,"getTicketKeys");Object.defineProperty(JJ,"workerIndex",{get(){return n3()}});Object.defineProperty(JJ,"workerCount",{get(){return s3()}});var a3={[ZJ](e,t){Qbe(t)},[e3](e,t){Jbe(t,e)}};function TM(e,t={}){let r=process.constrainedMemory?.()||WJ();r=Math.min(r,WJ(),2e4*zJ);let n=XJ.get(Ff.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/zJ/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],a=[];for(let l of ti){let u=new Cbe;u.existingPort=l,i.push(u),a.push(u.port2)}Dbe(e)||(e+=".js");let c=new Nbe(Lbe(e)?e:QJ(Pbe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps","--expose-internals"],argv:process.argv.slice(2),workerData:{addPorts:a,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:i3=t.threadCount,name:t.name,restartNumber:Mi.exports.restartNumber,ticketKeys:o3()},transferList:a,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:r3,port:l,threadId:c.threadId},[l]);return WR(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>TM(e,t),c.on("error",l=>{Di.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{Oc.splice(Oc.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Bbe?(t.unexpectedRestarts=c.unexpectedRestarts+1,TM(e,t)):Di.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{a3[l.type]?.(l,c)}),Oc.push(c),eIe(),t.onStarted&&t.onStarted(c),c.name=t.name,c}o(TM,"startWorker");var Gbe=[Ff.THREAD_TYPES.HTTP];async function wM(e=null,t=Math.max(i3>3,1),r=!0){if(AM){try{process.chdir(process.cwd())}catch(a){Di.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=pR();await a()}Mi.exports.restartNumber++,t<1&&(t=t*Oc.length);let n=[],s=[];for(let a of Oc.slice(0)){if(e&&a.name!==e||a.wasShutdown)continue;Di.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:Mi.exports.restartNumber,type:Ff.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=Gbe.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Di.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},bM*2).unref();a.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&a.startCopy(),u()})});if(n.push(l),c&&r){let u=a.startCopy(),d=new Promise(f=>{let m=o(p=>{p.type===Ff.ITC_EVENT_TYPES.CHILD_STARTED&&(Di.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Di.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}=cf();r&&(e==="http"||!e)&&XJ.get(Ff.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else _o.postMessage({type:Fbe,workerType:e})}o(wM,"restartWorkers");function $be(e,t){a3[e]=t}o($be,"setChildListenerByType");function Vbe(e){return wM(e,1/0,!1)}o(Vbe,"shutdownWorkers");var c3=[];function Kbe(e){c3.push(e)}o(Kbe,"onMessageFromWorkers");var yM=new Map;function l3(e,t){let r=yM.get(e);r||yM.set(e,r=[]),r.push(t)}o(l3,"onMessageByType");var Ybe=10;async function Wbe(e,t){let r=0;for(let n of ti)try{n.postMessage(e),r++>Ybe&&(r=0,await new Promise(setImmediate))}catch(s){Di.error("Unable to send message to worker",s)}t&&d3(e,null)}o(Wbe,"broadcast");var YR=new Map,zbe=1;function jbe(e){return new Promise(t=>{let r=0;for(let n of ti)try{let s=zbe++,i=o(()=>{YR.delete(s),--r===0&&t(),n!==_o&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,YR.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of YR)a.port===n&&a()})),n.postMessage(e),r++}catch(s){Di.error("Unable to send message to worker",s)}r===0&&t()})}o(jbe,"broadcastWithAcknowledgement");function Qbe(e){e.postMessage({type:t3,workers:u3()})}o(Qbe,"sendThreadInfo");function u3(){let e=Date.now();return Oc.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}))}o(u3,"getChildWorkerInfo");function Jbe(e,t){e.resources=t,e.resources.updated=Date.now()}o(Jbe,"recordResourceReport");var RM;function Xbe(e){RM=e}o(Xbe,"setMonitorListener");var Zbe=1e3,jJ=!1;function eIe(){jJ||(jJ=!0,setInterval(()=>{for(let e of Oc){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}RM&&RM()},Zbe).unref())}o(eIe,"startMonitoring");var tIe=1e3;if(_o&&go?.addPorts){WR(_o);for(let e=0,t=go.addPorts.length;e<t;e++){let r=go.addPorts[e];r.threadId=go.addThreadIds[e],WR(r)}setInterval(()=>{let e=process.memoryUsage();_o.postMessage({type:e3,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},tIe).unref(),SM=o(()=>new Promise((e,t)=>{_o.on("message",r),_o.postMessage({type:ZJ});function r(n){n.type===t3&&(_o.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else SM=u3;Mi.exports.getThreadInfo=SM;function WR(e,t){ti.push(e),e.on("message",r=>{if(r.type===r3)r.port.threadId=r.threadId,WR(r.port);else if(r.type===kbe){let n=YR.get(r.id);n&&n()}else d3(r,e)}).on("close",()=>{ti.splice(ti.indexOf(e),1)}).on("exit",()=>{ti.splice(ti.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(WR,"addPort");function d3(e,t){for(let n of c3)n(e,t);let r=yM.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Di.error(s)}}o(d3,"notifyMessageListeners");if(AM){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await vbe(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(QJ(s,a.name));try{for await(let{filename:a}of Mbe(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await wM(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(a){console.warn("Error trying to watch component directory",s,a)}},"watchDir");Mi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else _o.on("message",async e=>{let{type:t}=e;t===Ff.ITC_EVENT_TYPES.SHUTDOWN&&(Mi.exports.restartNumber=e.restartNumber,_o.unref(),setTimeout(()=>{Di.warn("Thread did not voluntarily terminate",Obe),process.exit(0)},bM).unref())})});var _3=M((sGe,E3)=>{"use strict";var{promises:kf,createReadStream:rIe,createWriteStream:nIe}=require("fs"),{createGzip:sIe}=require("zlib"),{promisify:iIe}=require("util"),{pipeline:oIe}=require("stream"),aIe=iIe(oIe),CM=require("path"),h3=ue();h3.initSync();var zR=Q(),{CONFIG_PARAMS:cIe,ITC_EVENT_TYPES:rGe}=(H(),D(W)),{onMessageFromWorkers:nGe}=nt(),{convertToMS:f3}=oe(),{onStorageReclamation:lIe}=(v_(),D(YU)),uIe=6e4,dIe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",fIe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",NM,m3;E3.exports=mIe;function mIe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(lIe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(dIe);if(!i)throw new Error(fIe);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=f3(r));let d;return NM=Date.now(),zR.trace("Log rotate enabled, maxSize:",t,"interval:",r),m3=setInterval(async()=>{if(l){let f;f=await kf.stat(e.path),f.size>=l&&(d=await p3(e.path,i))}if(u&&Date.now()-NM>=u&&(d=await p3(e.path,i),NM=Date.now()),n||c){let f=f3(n??"1M")/(1+c);c=0;let m=await kf.readdir(i);for(let p of m)try{let h=await kf.stat(CM.join(i,p));Date.now()-h.mtimeMs>f&&await kf.unlink(CM.join(i,p))}catch(h){zR.error("Error trying to remove log",p,h)}}},a??uIe).unref(),{end(){clearInterval(m3)},getLastRotatedLogPath(){return d}}}o(mIe,"logRotator");async function p3(e,t){let r=h3.get(cIe.LOGGING_ROTATION_COMPRESS),n=CM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await kf.rename(e,n),r&&(e=n,n+=".gz",await aIe(rIe(e),sIe(),nIe(n)),await kf.unlink(e)),zR.closeLogFile(),zR.notify(`hdb.log rotated, old log moved to ${n}`),n}o(p3,"moveLogFile")});var R3={};Ie(R3,{RootConfigWatcher:()=>OM});var g3,S3,T3,jR,y3,OM,A3=ie(()=>{g3=w(require("chokidar")),S3=require("node:fs/promises"),T3=w(Tt()),jR=require("node:stream"),y3=require("yaml"),OM=class extends jR.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;ready;constructor(){super(),this.#e=(0,T3.getConfigFilePath)(),this.ready=(0,jR.once)(this,"ready"),this.#t=g3.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,S3.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,y3.parse)(t);if(!this.#r){this.#r=r,this.emit("ready",this.#r);return}this.emit("change",this.#r=r)}).catch(t=>{})}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var Q=M((lGe,nA)=>{"use strict";var Ta=require("fs-extra"),{workerData:pIe,threadId:hIe,isMainThread:P3}=require("worker_threads"),BE=require("path"),L3=require("yaml"),D3=require("properties-reader"),$r=(H(),D(W)),b3=Hc(),EIe=require("os"),{PACKAGE_ROOT:xM}=bt(),{_assignPackageExport:_Ie}=ii(),{Console:gIe}=require("console"),I3=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),w3=new Map,{join:ya}=BE,N3=1e4,cr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},SIe={STDOUT:"stdOut",STDERR:"stdErr"},cGe=ya(xM,"logs"),TIe=ya(xM,"config/yaml/",$r.HDB_DEFAULT_CONFIG_FILE),yIe=1e4,FE,kE,QR,Sa,LM,PM,XR,Lt,Rs,ZR,eA,Hf,xE,UE;function JR(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=BE.dirname(n)):t.root?n=ya(t.root,LM):(n=Lt.path,t.root||(t.root=BE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=cr[t.level]??Lt?.level??cr.info,M3(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Lt.path===e.path&&r)}o(JR,"updateLogger");function M3(e){let t=e.conditional??(e.conditional={});t.notify=cr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=cr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=cr.error>=e.level?e.error.bind(e):void 0,t.warn=cr.warn>=e.level?e.warn.bind(e):void 0,t.info=cr.info>=e.level?e.info.bind(e):void 0,t.debug=cr.debug>=e.level?e.debug.bind(e):void 0,t.trace=cr.trace>=e.level?e.trace.bind(e):void 0}o(M3,"updateConditional");async function DM(){UE||(UE=new kIe,await UE.ready,UE.on("change",DM));let e=UE.config,t=e.logging??{};JR(Lt,t),XR=Lt.path,FE=t.console??!1,t.external&&JR(Rs,t.external);for(let r in e){let n=e[r];n.logging?JR(Lt.forComponent(r),n.logging,r):Lt.hasComponent(r)&&JR(Lt.forComponent(r),t,r)}}o(DM,"updateLogSettings");var MM=class extends gIe{static{o(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){bn="trace",this.level<=cr.trace&&super.info(...t),bn="info"}debug(...t){bn="debug",this.level<=cr.debug&&super.info(...t),bn="info"}info(...t){bn="info",this.level<=cr.info&&super.info(...t),bn="info"}warn(...t){bn="warn",this.level<=cr.warn&&super.warn(...t),bn="info"}error(...t){bn="error",this.level<=cr.error&&super.error(...t),bn="info"}fatal(...t){Hf=!0;try{bn="fatal",this.level<=cr.fatal&&super.error(...t),bn="info"}finally{Hf=!1}}notify(...t){Hf=!0;try{bn="notify",this.level<=cr.notify&&super.info(...t),bn="info"}finally{Hf=!1}}withTag(t){return U3(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};xE===void 0&&v3();nA.exports={notify:OIe,fatal:PIe,error:UM,warn:LIe,info:wIe,debug:CIe,trace:NIe,logLevel:Sa,loggerWithTag:U3,suppressLogging:bIe,initLogSettings:v3,logCustomLevel:DIe,closeLogFile:x3,createLogger:rA,logsAtLevel:RIe,getLogFilePath:o(()=>XR,"getLogFilePath"),forComponent:o(e=>Lt.forComponent(e),"forComponent"),setMainLogger:BIe,OUTPUTS:SIe,AuthAuditLog:FIe,start:DM,startOnMainThread:DM,errorToString:xIe};nA.exports.externalLogger={notify(...e){Rs.notify(...e)},fatal(...e){Rs.fatal(...e)},error(...e){Rs.error(...e)},warn(...e){Rs.warn(...e)},info(...e){Rs.info(...e)},debug(...e){Rs.debug(...e)},trace(...e){Rs.trace(...e)},withTag(e){return Rs.withTag(e)}};_Ie("logger",nA.exports.externalLogger);function RIe(e){return cr[Sa]<=cr[e]}o(RIe,"logsAtLevel");function v3(e=!1){try{if(xE===void 0||e){x3();let t=MIe(),r=b3(["ROOTPATH"]);try{xE=D3(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Ta.pathExistsSync(ya(r.ROOTPATH,$r.HDB_CONFIG_FILE)))throw s}let n;if({level:Sa,configLogPath:PM,toFile:kE,logConsole:FE,rotation:n,toStream:QR}=vIe(r.ROOTPATH?ya(r.ROOTPATH,$r.HDB_CONFIG_FILE):xE.get("settings_path")),LM=$r.LOG_NAMES.HDB,XR=ya(PM,LM),Lt=rA({path:XR,level:Sa,stdStreams:QR,rotation:n}),Rs=Lt.forComponent("external"),Rs.tag=null,P3)try{require("segfault-handler").registerHandler(ya(PM,"crash.log"))}catch{}}}catch(t){if(xE=void 0,t.code===$r.NODE_ERROR_CODES.ENOENT||t.code===$r.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=b3(Object.keys($r.CONFIG_PARAM_MAP),!0);for(let s in r){let i=$r.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let a=r[s];if(i===$r.CONFIG_PARAMS.LOGGING_LEVEL){Sa=a;continue}i===$r.CONFIG_PARAMS.LOGGING_CONSOLE&&(FE=i)}let{defaultLevel:n}=UIe();kE=!1,QR=!0,Sa=Sa===void 0?n:Sa,Lt=rA({level:Sa}),Rs=Lt.forComponent("external"),Rs.tag=null;return}throw UM("Error initializing log settings"),UM(t),t}process.env.DEV_MODE&&(QR=!0),AIe()}o(v3,"initLogSettings");var Pc=!0;function AIe(){kE&&(process.stdout.write=function(e){return typeof e=="string"&&Pc&&FE&&(e=e.toString(),e[e.length-1]===`
|
|
134
|
-
`&&(e=e.slice(0,-1)),eA(e)),
|
|
135
|
-
`&&(e=e.slice(0,-1)),eA(e)),
|
|
133
|
+
`))}},25).unref()}l.close?.(()=>{if(ei.get(ys.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Pf()==0)try{O4(FAe(ei.get(ys.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,mR),l.cantCleanupProperly||Pi.warn("Had to forcefully exit the thread",mR),process.exit(0)},5e3).unref()})}if(L4||process.env.DEV_MODE)try{require("inspector").close()}catch(c){Pi.info("Could not close debugger",c)}}}).ref();let r;wE&&!$Ae&&(r=M4()),Promise.resolve(r).then(()=>{if(Pf()===0)try{kAe(HAe)}catch(n){console.error("Error displaying start-up log",n)}N4?.postMessage({type:ys.ITC_EVENT_TYPES.CHILD_STARTED})})});return P4(t),t}o(D4,"startServers");function M4(){let e=[];for(let t in Lf){let r=Lf[t];if(t.includes?.("/")&&Pf()==0){MAe(t)&&O4(t),e.push(new Promise((a,c)=>{r.listen({path:t},()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),Pi.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=ei.get(ys.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let a=typeof s=="string"?s.split("-"):s,c=Pf();if(c<a[0]||c>a[1])continue}let i;try{let a=t.lastIndexOf(":");a>0?wE?n={fd:wE(+t.slice(a+1).replace(/[\[\]]/g,""),t.slice(0,a))}:n={host:+t.slice(a+1).replace(/[\[\]]/g,""),port:t.slice(0,a)}:wE?n={fd:wE(+t,"::")}:n={port:t}}catch(a){console.error(`Unable to bind to port ${t}`,a);continue}e.push(new Promise((a,c)=>{r.listen(n,()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),Pi.trace("Listening on port "+t,mR)}).on("error",c)}))}return Promise.all(e)}o(M4,"listenOnPorts");!ID&&!LAe?.noServerStart&&D4();function VAe(e,t){let r=(qh(),D(JT)).getComponentName,n;if(t.securePort){C4(t.securePort,{protocol_name:"TLS",name:r()});let s=BAe("server",t.mtls),i=ei.get("tls");n=UAe({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),Lf[t.securePort]=n}return t.port&&(C4(t.port,{protocol_name:"TCP",name:r()}),n=DAe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),Lf[t.port]=n),n}o(VAe,"onSocket")});var l4={};Ie(l4,{startHTTPThreads:()=>KAe,startSocketServer:()=>PD,updateWorkerIdleness:()=>H4});async function KAe(e=2,t){Ab().catch(r=>_R.error?.("Error recording hostname for analytics:",r));try{if(t)CD(0,1,!0);else{let{loadRootComponents:r}=pR();if(e===0)return(0,ho.setMainIsWorker)(!0),await wD().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)CD(r,e);return Promise.all(k4)}finally{(0,ho.threadsHaveStarted)()}}function CD(e,t=1,r){if(ND++,(0,ho.startWorker)("server/threads/threadServer.js",{name:RA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((a,c)=>{function l(u){u.type===SA.CHILD_STARTED&&(n.removeListener("message",l),a(n))}o(l,"onMessage"),n.on("message",l),n.on("error",c)});k4.push(s),await s,Df.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",a=>{if(a.requestId){let c=ER.get(a.requestId);c&&c(a)}}),n.on("exit",i),n.on("shutdown",i);function i(){let a=Df.indexOf(n);a>-1&&Df.splice(a,1)}if(o(i,"removeWorker"),Mf){let a=Mf;Mf=[];for(let c of a)F4[c.localPort](null,c)}}}),r){let n=setInterval(()=>{OD?OD=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,ho.shutdownWorkers)(),ND=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function PD(e=0,t){if(typeof e=="string")try{(0,gR.existsSync)(e)&&(0,gR.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=YAe:r=WAe(t):r=LD;let n=(0,vf.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=F4[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),OD=!0,r(i,(a,c)=>{if(!a){if(v4){let u=i._socket||new vf.Socket({handle:i,writable:!0,readable:!0});v4.deliverSocket(u,e,c),u.resume()}else ND>0?(Mf.length===0&&setTimeout(()=>{Mf.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,Mf.push(i)):(console.log("start up a dynamic thread to handle request"),CD(0));Je(!1,"socket-routed");return}a.requests++;let l=i.fd;if(l>=0)a.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new vf.Socket({handle:i,writable:!0,readable:!0});QAe(u,a,e)}Je(!0,"socket-routed")})},_R.info(`HarperDB ${B4.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 LD(e,t){let r,n=0;for(let s of Df){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=hR)return hR=i,t(r);n=i}hR=0,t(r)}function YAe(e,t){let r={};e.getpeername(r);let n=r.address,s=Uf.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);LD(e,a=>{Uf.set(n,{worker:a,lastUsed:i}),t(a)})}function WAe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new vf.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",a=>{n.readStop();let l=a.toString("latin1").match(t)?.[1],u=Uf.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);LD(n,f=>{Uf.set(l,{worker:f,lastUsed:d}),s(f,a)})})}o(r,"findByHeaderAffinity")}function H4(){hR=0;for(let e of Df)e.expectedIdle=e.recentELU.idle+zAe,e.requests=1;Df.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function QAe(e,t,r){let n=jAe++;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(),ER.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")),ER.delete(n)),s.event=="destroy"&&(e.destroy(),ER.delete(n))})}var ho,vf,_R,gR,x4,B4,Df,Mf,F4,v4,ND,k4,OD,hR,U4,Uf,zAe,ER,jAe,mD=ie(()=>{ho=w(nt()),vf=require("net");H();_R=w(Q()),gR=require("fs");Ps();x4=require("worker_threads"),B4=w(Tt()),Df=[],Mf=[],F4=[],ND=0,k4=[];x4.isMainThread&&process.on("uncaughtException",e=>{e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)});o(KAe,"startHTTPThreads");o(CD,"startHTTPWorker");o(PD,"startSocketServer");hR=0;o(LD,"findMostIdleWorker");U4=36e5,Uf=new Map;o(YAe,"findByRemoteAddressAffinity");o(WAe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Uf)r.lastUsed+U4<e&&Uf.delete(t)},U4).unref();zAe=1e3;o(H4,"updateWorkerIdleness");(0,ho.setMonitorListener)(H4);ER=new Map,jAe=1;o(QAe,"proxySocket")});var DD={};Ie(DD,{hdbServer:()=>ebe,start:()=>ebe});async function ebe(e){try{Eo.default.debug("In Fastify server"+process.cwd()),Eo.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Eo.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=q4.default.isMaster,await tbe();let t=e.securePort>0;xf=rbe(t),await xf.ready(),e||(e={}),e.isOperationsServer=!0;try{Ue.http(xf.server,e),xf.server.closeIdleConnections||await xf.listen({port:0,host:"::"})}catch(r){throw xf.close(),Eo.default.error(r),Eo.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Eo.default.fatal(t),process.exit(1)}}async function tbe(){return Eo.default.trace("Configuring HarperDB process."),j4.default.setSchemaDataToGlobal(),J4.default.setUsersWithRolesCache()}function rbe(e){Eo.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=nbe(e),r=(0,G4.default)(t);r.server.headersTimeout=ibe(),r.setErrorHandler(Nc.serverErrorHandler);let n=sbe();n&&r.register($4.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(Y4.default),r.register(V4.default),r.register(K4.default,{root:W4.default.join(z4.PACKAGE_ROOT,"studio/build-local")}),Tm(r);let s=wc.default.get(Zf.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!Q4.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.sendFile("running.html")}),r.post("/",{preValidation:[Nc.reqBodyValidationHandler,Nc.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,Nc.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),Eo.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function nbe(e){let t=wc.default.get(CE.OPERATIONSAPI_NETWORK_TIMEOUT),r=wc.default.get(CE.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:XAe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}function sbe(){let e=wc.default.get(CE.OPERATIONSAPI_NETWORK_CORS),t=wc.default.get(CE.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===ZAe)&&(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 ibe(){return wc.default.get(CE.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??JAe}var q4,wc,Eo,G4,$4,V4,K4,Y4,W4,z4,j4,Q4,J4,Nc,JAe,XAe,ZAe,CE,xf,X4=ie(()=>{q4=w(require("cluster")),wc=w(ue());H();Eo=w(Q()),G4=w(require("fastify")),$4=w(require("@fastify/cors")),V4=w(require("@fastify/compress")),K4=w(require("@fastify/static")),Y4=w(NN()),W4=w(require("path")),z4=w(Tt()),j4=w(mi()),Q4=w(oe()),J4=w(kn());xr();Nc=w(vy());Po();wc.default.initSync();JAe=6e4,XAe=1024*1024*1024,ZAe="TRUE",{CONFIG_PARAMS:CE}=W;o(ebe,"operationsServer");o(tbe,"setUp");o(rbe,"buildServer");o(nbe,"getServerOptions");o(sbe,"getCORSOpts");o(ibe,"getHeaderTimeoutConfig")});var RR={};Ie(RR,{disableNATS:()=>abe,publishToStream:()=>yR,setNATSReplicator:()=>MD,setPublishToStream:()=>cbe,setSubscription:()=>BD,start:()=>obe});function obe(){OE.default.get(B.CLUSTERING_ENABLED)&&ube()}function abe(e=!0){nJ=e}function cbe(e,t){yR=e,BD=t}function ube(){if(nJ||process.env._DISABLE_NATS)return;let e=at(),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];MD(s,r,i)}}wl((r,n)=>{MD(r.tableName,r.databaseName,r),n&&iJ(r)}),!Z4&&(Z4=!0)}function MD(e,t,r){if(t==="system"&&dbe.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 Fr{static{o(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){iJ(i)}static subscribe(){let i=new Xn;return BD(t,e,i),i}static subscribeOnThisThread(i){return i<(OE.default.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??lbe)}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 SR(s.transaction,s);let a=s.transaction;for(;a.next;)a=a.next;a.next=s.transaction.nats,i.user=s.user,i.context=s}else i=sJ;return i}o(n,"getNATSTransaction")}function iJ(e){let t=OE.default.get(B.CLUSTERING_NODENAME);yR(`${UD.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,xD.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 eJ,UD,xD,tJ,rJ,OE,TR,nJ,yR,BD,lbe,sJ,Z4,dbe,SR,vD,FD=ie(()=>{Oe();Ua();eJ=w(sr()),UD=w(wt()),xD=w(Wi());Nu();tJ=w(KN()),rJ=w(Cn()),OE=w(ue());H();TR=w(Q());o(obe,"start");o(abe,"disableNATS");yR=eJ.publishToStream,BD=tJ.setSubscription;o(cbe,"setPublishToStream");lbe=2;o(ube,"assignReplicationSource");dbe=["hdb_job","hdb_raw_analytics","hdb_info"];o(MD,"setNATSReplicator");o(iJ,"publishSchema");SR=class{constructor(t,r){this.transaction=t;this.options=r}static{o(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=OE.default.get(B.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let a=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(TR.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=a)),l.table===f&&l.operation===m?(a.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(yR(`${UD.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,xD.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw TR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},vD=class extends SR{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,rJ.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};sJ=new vD});async function uJ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await kD.get(e,{returnNonexistent:!0});i=new GD(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await kD.get(e);a&&a.delete()}i=new bR(e,t)}return n&&(n.id=e,n.user={username:t?.username},PE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function HD(){return AR++,AR>65500&&(AR=1),AR}function qD(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=Ds.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 a=new ci(i.relativeURL);a.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return At(r,()=>s?t===void 0?c.delete(a,r):c.put(a,e.data,r):c.publish(a,e.data,r))}var aJ,Cc,cJ,lJ,oJ,kD,PE,AR,bR,GD,dJ=ie(()=>{Oe();xa();aJ=w(Cn()),Cc=w(Q());Ca();cJ=w(nt()),lJ=w(wD());xr();tg();oJ=100,kD=Xe({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),PE=Xe({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,cJ.getWorkerIndex)()===0&&(async()=>{await lJ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of PE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Ue.getUser(r.user.username));try{await qD(r,t,r)}catch{(0,Cc.warn)("Failed to publish will",t)}PE.delete(e.id)}})();o(uJ,"getSession");AR=1;o(HD,"getNextMessageId");bR=class{static{o(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:a}=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:a,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};a&&(0,Cc.trace)("Resuming subscription from",s,"from",a);let p=Ds.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 R=S.split("/"),N;for(let te=0;te<R.length;te++)if(R[te].indexOf("+")>-1)if(R[te]==="+")N=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&N)throw new Error("Filters can not be combined");let O=!0;R[R.length-1]==="#"&&(R.length--,O=!1),N&&(n=o(te=>{let q=te.id;if(!Array.isArray(q))if(q?.indexOf?.("/")>-1)q=q.split("/");else return!1;if(O&&q.length!==R.length)return!1;for(let k=0;k<R.length;k++)if(R[k]!=="+"&&R[k]!==q[k])return!1;return!0},"filter"));let F=R.indexOf("+");m.url="/"+(F>-1?R.slice(0,F):R).concat("").join("/")}}else m.isCollection=!1;let E=p.path,g=p.Resource,A=await At(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let R=await g.subscribe(m,S);if(!R)return;if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let N=(async()=>{for await(let O of R)try{let F;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"&&O.type!=="patch"||n&&!n(O))continue;r?(O.topic=s,F=this.needsAcknowledge(O)):(O.acknowledge?.(),F=HD());let te=O.id;if(Array.isArray(te)&&(te=Vu(te)),te==null&&(te=""),await this.listener(E+"/"+te,O.value,F,t)===!1)break;this.awaitingAcks?.size>oJ?await new Promise(k=>setTimeout(k,this.awaitingAcks.size-oJ)):await new Promise(setImmediate)}catch(F){(0,Cc.warn)(F)}})();return R});if(A)return A.topic=s,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){let r=HD();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 qD(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();At(r,async()=>{try{if(!t){let n=await PE.get(this.sessionId);n?.doesExist()&&await qD(n,n.data,r)}}finally{await PE.delete(this.sessionId)}}).catch(n=>{(0,Cc.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))}};o(qD,"publish");GD=class extends bR{static{o(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=HD(),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,Cc.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,aJ.getNextMonotonicTime)()),(0,Cc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),kD.put(this.sessionRecord)}}});var $D={};Ie($D,{bypassAuth:()=>fbe,start:()=>pbe});function fbe(){gJ=!0}function pbe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new _J.EventEmitter},e.mqtt.events.on("error",()=>{}));let a=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);a.events.emit("connection",u),Xt.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=mJ(u,E=>{u.send(E)},d,Promise.resolve(f).then(()=>d?.user),a);u.on("message",p),u.on("close",h),u.on("error",E=>{Xt.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(a.events.emit("connection",u),Xt.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 Gd(p,l);if(!E.valid)throw Xt.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,Bf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&wR.notify?.({username:d?.username,status:si.SUCCESS,type:ba.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,Bf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&wR.error?.({username:h,status:si.FAILURE,type:ba.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else Xt.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){a.events.emit("error",p,u),Xt.error?.(p)}else if(l.required)return Xt.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&mbe(u.remoteAddress)&&(d=await(0,pJ.getSuperUser)(),Xt.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=mJ(u,p=>u.write(p),null,d,a);u.on("data",f),u.on("close",m),u.on("error",p=>{Xt.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function mJ(e,t,r,n,s){fJ||(fJ=!0,Bm(f=>{IR>0&&f.push({metric:"mqtt-connections",connections:IR,byThread:!0})}));let i;IR++;let a,c={protocolVersion:4},l=(0,NR.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){IR--,i||(i=!0,a?.disconnect?.(),s.events.emit("disconnected",a,e),s.sessions.delete(a),zr(!1,"connection","mqtt","disconnect"),Xt.debug?.("MQTT connection was closed",e.remoteAddress))}return o(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(R){e.close?.(1008,"Unauthorized"),Xt.info?.(R);return}let m=f.cmd;if(a)a.then&&await a;else if(m!=="connect"){Xt.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;Je(f.length,"bytes-received",E,A(f),"mqtt");try{switch(a?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Ue.getUser(f.username,f.password.toString(),r),(0,Bf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&wR.notify?.({username:n?.username,status:si.SUCCESS,type:ba.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(J){return(0,Bf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&wR.error?.({username:f.username,status:si.FAILURE,type:ba.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,J),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let J=e.deserialize||(e.deserialize=Oo(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?J(f.will.payload):void 0,delete f.will.payload}a=uJ({user:n,...f}),a=await a,a.socket=e,r&&(a.request=r),s.sessions.add(a)}catch(J){return Xt.error?.(J),s.events.emit("auth-failed",f,e,J),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:J.code||5,returnCode:J.code||128})}s.events.emit("connected",a,e),zr(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:a.sessionWasPresent,reasonCode:0,returnCode:0});let R=o(async(J,Y,le,ae)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",J);let re=J.indexOf("/",1),Re=re>0?J.slice(0,re):J;g({cmd:"publish",topic:J,payload:await S(Y),messageId:le||Math.floor(Math.random()*1e8),qos:ae.qos},Re);let Te=e._socket??e;return Te.writableNeedDrain?new Promise(Fe=>Te.once("drain",Fe)):!Te.closed}catch(re){return Xt.error?.(re),a?.disconnect(),s.sessions.delete(a),!1}},"listener");a.setListener(R),a.sessionWasPresent&&await a.resume();break;case"subscribe":let N=[];for(let J of f.subscriptions){let Y;try{let le=await a.addSubscription(J,J.qos>=1);Y=le?le.qos||0:c.protocolVersion<5?128:143}catch(le){s.events.emit("error",le,e,J,a),le.statusCode?le.statusCode===500?Xt.warn?.(le):Xt.info?.(le):Xt.error?.(le),Y=c.protocolVersion<5?128:le.statusCode===403?135:le.statusCode===404?143:128}N.push(Y)}await a.committed,g({cmd:"suback",granted:N,messageId:f.messageId});break;case"unsubscribe":{let J=[];for(let Y of f.unsubscriptions)J.push(a.removeSubscription(Y)?0:17);g({cmd:"unsuback",granted:J,messageId:f.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let O=f.qos===2?"pubrec":"puback",F=e.deserialize||(e.deserialize=Oo(r?.headers.get?.("content-type"))),q=(f.payload?.length||0)>0?F(f.payload):void 0,k;try{k=await a.publish(f,q)}catch(J){s.events.emit("error",J,e,f,a),Xt.warn?.(J),f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:k===!1?144:0},f.topic);break;case"pubrec":g({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":a.acknowledge(f.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,a?.disconnect(!0),s.events.emit("disconnected",a,e),s.sessions.delete(a),zr(!0,"connection","mqtt","disconnect"),Xt.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(R){s.events.emit("error",R,e,f,a),Xt.error?.(R),g({cmd:"disconnect"})}function g(R,N){let O=(0,NR.generate)(R,c);t(O),Je(O.length,"bytes-sent",N,A(R),"mqtt")}o(g,"sendPacket");function A(R){return R.qos>0?R.cmd+",qos="+R.qos:R.cmd}o(A,"packetMethodName");function S(R){return Co(R,r)}o(S,"serialize")}),l.on("error",f=>{Xt.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var NR,pJ,Bf,hJ,EJ,_J,wR,Xt,gJ,mbe,fJ,IR,SJ=ie(()=>{NR=require("mqtt-packet");dJ();pJ=w(kn());Po();Ps();xr();Bf=w(ue());H();hJ=w(Zn()),EJ=w(Q()),_J=require("events");ZS();wR=(0,hJ.loggerWithTag)("auth-event"),Xt=(0,EJ.forComponent)("mqtt"),gJ=(0,Bf.get)(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(fbe,"bypassAuth");mbe=o(e=>gJ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(pbe,"start");IR=0;o(mJ,"onSocket")});function CR(e,t){if(t?.includes(".."))throw new VD(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var VD,KD=ie(()=>{VD=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(CR,"resolveBaseURLPath")});function TJ(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(a=>a[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var yJ=ie(()=>{o(TJ,"deriveCommonPatternBase")});function OR(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=o((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 YD=ie(()=>{o(OR,"deriveGlobOptions")});var RJ,WD,LE,AJ=ie(()=>{KD();yJ();YD();RJ=require("micromatch"),WD=class extends Error{static{o(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},LE=class{static{o(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=CR(this.name,this.config.urlPath),this.globOptions=OR(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new WD(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,RJ.scan)(s).base),this.commonPatternBase=TJ(this.patternBases)}}});function bJ(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function Eu(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(bJ(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(bJ(n,t)){t=t.slice(n.length+1);break}}}return(0,IJ.join)(e.baseURLPath,t)}var IJ,zD=ie(()=>{IJ=require("node:path");o(bJ,"pathStartsWithBase");o(Eu,"deriveURLPath")});function wJ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var LR,NJ,CJ,jD,OJ,PJ,PR,LJ=ie(()=>{LR=require("node:events");AJ();NJ=w(Q()),CJ=w(require("chokidar")),jD=require("node:path"),OJ=require("node:fs/promises");zD();PJ=require("micromatch"),PR=class extends LR.EventEmitter{static{o(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new LE(t,r,wJ(n)),this.#r=s||NJ.default.loggerWithTag(t),this.ready=(0,LR.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#n(...[t,r,n]){if(r===""&&(r="/"),!(0,PJ.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,jD.join)(this.directory,r);switch(t){case"add":case"change":{let i=Eu(this.#e,r,"file");(0,OJ.readFile)(s).then(a=>{let c={eventType:t,entryType:"file",contents:a,stats:n,absolutePath:s,urlPath:i};this.emit("all",c),this.emit(t,c)});break}case"unlink":{let i=Eu(this.#e,r,"file"),a={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}case"addDir":case"unlinkDir":{let i=Eu(this.#e,r,"directory"),a={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}}}#s(t){this.emit("error",t)}#i(){this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,jD.join)(this.#e.directory,r));return this.#t=CJ.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:o(r=>r!==this.#e.directory&&t.every(n=>!r.startsWith(n)),"ignored")}).on("all",this.#n.bind(this)).on("error",this.#s.bind(this)).on("ready",this.#i.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new LE(this.name,this.directory,wJ(t)),this.#a()}};o(wJ,"castConfig")});var DR,QD=ie(()=>{DR={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var vR,DJ,MJ,vJ,UJ,xJ,JD,XD,ZD,eM,tM,MR,BJ=ie(()=>{vR=require("events"),DJ=w(require("yaml")),MJ=w(require("chokidar")),vJ=require("node:fs/promises"),UJ=require("util"),xJ=w(Q());QD();JD=class extends Error{static{o(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"}},XD=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},ZD=class extends Error{static{o(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"}},eM=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},tM=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},MR=class extends vR.EventEmitter{static{o(this,"OptionsWatcher")}#e;#t;#r;#n;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||xJ.default.loggerWithTag(t),this.ready=(0,vR.once)(this,"ready"),this.#t=MJ.default.watch(r,{persistent:!1}).on("add",this.#a.bind(this)).on("change",this.#a.bind(this)).on("error",this.#d.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#a.bind(this))}#a(){(0,vJ.readFile)(this.#e,"utf-8").then(t=>{this.#n=DJ.default.parse(t),this.#n&&this.#s in this.#n?this.#r?this.#f(this.#n[this.#s],this.#r):(this.#r=this.#n[this.#s],this.emit("ready",this.#r)):this.#r&&(this.#r=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#n?(this.#o(),this.emit("remove")):(this.#o(),this.emit("ready"));return}this.emit("error",t)})}#d(t){this.emit("error",new JD(this.#e,t))}#c(t){this.#i.warn(`Configuration file ${t} was deleted. Reverting to default configuration. Recreate it to restore the options watcher.`),this.#o(),this.emit("remove")}#o(){this.#n=DR,this.#r=this.#n[this.#s]}#f(t,r,n=[]){if(!this.#l(r)||!this.#l(t)){this.#u(n,t);return}for(let s of Object.keys(r))s in t||this.#u(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let a=n.concat(s),c=this.#m(a);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#u(a,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#l(c)?this.#f(i,c,a):this.#u(a,i);continue}(0,UJ.isDeepStrictEqual)(i,c)||this.#u(a,i)}}#l(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#m(t){let r=this.#r;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#u(t,r){if(!this.#r)throw new XD;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new ZD(t,r);let n=this.#r;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new eM(t,s);n=n[s]}if(n==null||typeof n!="object")throw new tM(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#r)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#r?this.#m(t):void 0}getAll(){return structuredClone(this.#r)}getRoot(){return this.#n}}});var BR,FJ,UR,xR,kJ=ie(()=>{BR=require("node:events");LJ();BJ();FJ=w(Q());fP();UR=class extends Error{static{o(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},xR=class extends BR.EventEmitter{static{o(this,"Scope")}#e;#t;#r;#n;#s;#i;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#r=t,this.#t=r,this.#e=n,this.#i=(0,FJ.loggerWithTag)(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,BR.once)(this,"ready"),this.options=new MR(t,n,this.#i).on("error",this.#d.bind(this)).on("change",this.#f.bind(this)()).on("ready",this.#a.bind(this))}get logger(){return this.#i}get name(){return this.#r}get directory(){return this.#t}#a(){this.emit("ready")}#d(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#c(t){let r=new PR(this.#r,this.#t,t,this.#i).on("error",this.#d.bind(this)).on("add",this.#o("add")).on("change",this.#o("change")).on("unlink",this.#o("unlink")).on("addDir",this.#o("addDir")).on("unlinkDir",this.#o("unlinkDir"));return this.#s.push(r),r}#o(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#f(){let t=this;return o(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#n){t.#n=t.#c(i);return}t.#n.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#l(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return t.files}handleEntry(t,r){if(t===void 0){if(this.#n)return this.#n;let s=this.#l();if(s)return this.#n=this.#c(s),this.#n;this.emit("error",new UR);return}if(typeof t=="function"){if(this.#n)return this.#n.on("all",t);let s=this.#l();if(s)return this.#n=this.#c(s),this.#n.on("all",t);this.emit("error",new UR);return}let n=this.#c(t);return r?n.on("all",r):n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),kW()}}});function _u(e){return typeof e=="string"&&e.trim()!==""}function rM(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>_u(t))}function $J(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function hbe(e){e.config.root&&DE.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 lM(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($J(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let a=(0,ME.join)(e.directory,i);FR.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,a,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,a,e.resources))}return s}async function VJ(e){let t=!1;if(t=await hbe(e),t)return t;let r=await(0,HJ.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,ME.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=Eu(e,n.path,"directory");FR.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=Eu(e,n.path,"file"),a=await(0,qJ.readFile)(s);FR.isMainThread&&e.module.setupFile?(await e.module.setupFile(a,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(a,i,s,e.resources),t=!0)}else DE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var FR,HJ,DE,ME,qJ,GJ,kR,Li,nM,sM,iM,oM,aM,cM,lM,uM,dM,KJ=ie(()=>{FR=require("node:worker_threads"),HJ=w(require("fast-glob")),DE=w(Q());KD();YD();ME=require("node:path"),qJ=require("node:fs/promises");zD();GJ=require("micromatch"),kR=class{static{o(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,!_u(this.config.files)&&!rM(this.config.files)&&!$J(this.config.files))throw new nM(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!rM(this.config.files.source)&&!_u(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 iM(this);if(this.config.files.ignore!==void 0&&!rM(this.config.files.ignore)&&!_u(this.config.files.ignore))throw new oM(this)}if(this.config.root!==void 0&&!_u(this.config.root))throw new cM(this);if(this.config.path!==void 0&&!_u(this.config.path))throw new uM(this);if(this.config.path&&(DE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!_u(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new dM(this);this.globOptions=OR(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new aM(this,r);return r.startsWith("/")&&(DE.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,GJ.scan)(r).base),this.baseURLPath=CR(this.name,this.config.urlPath)}},Li=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,ME.basename)(r.directory)}) ${t}`)}},nM=class extends Li{static{o(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 Li{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},iM=class extends Li{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},oM=class extends Li{static{o(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},aM=class extends Li{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},cM=class extends Li{static{o(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},lM=class extends Li{static{o(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)}},uM=class extends Li{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},dM=class extends Li{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(_u,"isNonEmptyString");o(rM,"isArrayOfNonEmptyStrings");o($J,"isObject");o(hbe,"handleRoots");o(VJ,"processResourceExtensionComponent")});var JT={};Ie(JT,{getComponentName:()=>fR,loadComponent:()=>$R,loadComponentDirectories:()=>zJ,setErrorReporter:()=>_be});function zJ(e,t){t&&(mM=t),e&&(_M=e);let r=[];if((0,Pt.existsSync)(fM)){let s=(0,Pt.readdirSync)(fM,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,on.join)(fM,a);r.push($R(c,mM,hA,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push($R(n,mM,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{WJ=!0})}function _be(e){qR=e}function gbe(e,t){return new Promise((r,n)=>{let s=setTimeout(()=>{aa.primaryStore.unlock(e,0),n(new Error("symlinking harperdb module timed out"))},1e4);if(aa.primaryStore.attemptLock(e,0,()=>{clearTimeout(s),r()}))try{(0,Pt.rmSync)(t,{recursive:!0,force:!0}),(0,Pt.existsSync)((0,on.join)(e,"node_modules"))||(0,Pt.mkdirSync)((0,on.join)(e,"node_modules")),(0,Pt.symlinkSync)(SM.PACKAGE_ROOT,t,"dir"),r()}finally{aa.primaryStore.unlock(e,0)}})}function jJ(e,t){return e.ready.then(()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.name}. Expected a number, received: ${typeof r}`);let n,s;return aa.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(jJ(e,t))})?Promise.race([t.handleApplication(e),new Promise((i,a)=>setTimeout(()=>a(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{aa.primaryStore.unlock(e.name,0)}):new Promise((i,a)=>{n=i,s=setTimeout(()=>{a(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)})})}async function $R(e,t,r,n,s,i){let a=(0,Pt.realpathSync)(e);if(HR.has(a))return HR.get(a);HR.set(a,!0),s&&(_M=s);try{let c,l=(0,on.join)(e,"harperdb-config.yaml");(0,Pt.existsSync)(l)?c=n?(0,VR.getConfigObj)():(0,hM.parseDocument)((0,Pt.readFileSync)(l,"utf8")).toJSON():!n&&(0,Pt.existsSync)(l=(0,on.join)(e,"config.yaml"))?c=(0,hM.parseDocument)((0,Pt.readFileSync)(l,"utf8")).toJSON():c=DR;try{let m=(0,on.join)(e,"node_modules","harperdb");(n||((0,Pt.existsSync)(m)||!e.startsWith((0,EM.getHdbBasePath)()))&&(!(0,Pt.existsSync)(m)||(0,Pt.realpathSync)(SM.PACKAGE_ROOT)!==(0,Pt.realpathSync)(m)))&&await gbe(e,m)}catch(m){ga.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&ga.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=GR,d={};for(let m in c){let p=`${(0,on.basename)(e)}.${m}`;GR=m;let h=c[m];if(!h)continue;let E,g=h.package;try{if(g){let O=e,F;for(;!(0,Pt.existsSync)(F=(0,on.join)(O,"node_modules",m));)if(O=(0,on.dirname)(O),O.length<(0,EM.getHdbBasePath)().length){F=null;break}if(F)E=await $R(F,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${g}`)}else E=Ebe[m];if(!E)continue;Vo.loading(p);let A=o(O=>(O.origin=r,Xe(O)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,R=S?.securePort||S?.https&&S.port,N=!S?.https&&S?.port;if("handleApplication"in E&&("start"in E||"startOnMainThread"in E||"handleFile"in E||"handleDirectory"in E||"setupFile"in E||"setupDirectory"in E)){let O=new Error(`Plugin ${m} is exporting old extension APIs. Remove them.`);throw Vo.failed(p,O,`Component '${p}' failed to load`),O}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&ga.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let O=new xR(m,e,l,t,Ue);await jJ(O,E),Vo.loaded(p,`Component '${p}' loaded successfully`);continue}if(pM.isMainThread&&(E=await E.startOnMainThread?.({server:Ue,ensureTable:A,port:N,securePort:R,resources:t,...h})||E,n&&S))for(let O of[N,R])try{if(+O&&!YJ.includes(O)){let F=gM.get(B.HTTP_SESSIONAFFINITY);F&&ga.default.warn("Session affinity is not recommended and may cause memory leaks"),(F||!lS)&&(YJ.push(O),PD(O,F))}}catch(F){console.error("Error listening on socket",O,F,m)}if(t.isWorker&&(E=await E.start?.({server:Ue,ensureTable:A,port:N,securePort:R,resources:t,...h})||E),_M.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let O=new kR({config:h,name:m,directory:e,module:E,resources:t});d[m]=await VJ(O)}Vo.loaded(p,`Component '${p}' loaded successfully`)}catch(A){A.message=`Could not load component '${m}' for application '${(0,on.basename)(e)}' due to: ${A.message}`,qR?.(A),((0,vE.getWorkerIndex)()===0?console:ga.default).error(A),t.set(h.path||"/",new il(A),null,!0),Vo.failed(p,A,`Could not load component '${p}'`)}}if(GR=u,pM.isMainThread&&!WJ&&i&&(0,vE.watchDir)(e,async()=>zJ()),c.extensionModule||c.pluginModule){let m=await oS((0,on.join)(e,c.extensionModule||c.pluginModule));return HR.set(a,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?`;qR?.(new Error(m)),((0,vE.getWorkerIndex)()===0?console:ga.default).error(m),Vo.failed((0,on.basename)(e),m)}for(let[m,p]of Object.entries(d))p||ga.default.warn(`Component ${m} from (${(0,on.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}`,qR?.(c),t.set("",new il(c))}}var Pt,on,pM,hM,gM,SM,ga,vE,EM,VR,fM,_M,WJ,mM,Ebe,YJ,HR,qR,GR,fR,qh=ie(()=>{Pt=require("node:fs"),on=require("node:path"),pM=require("node:worker_threads"),hM=require("yaml"),gM=w(ue()),SM=w(Tt());H();Rq();Dq();Yq();Xq();Zq();pG();L2();D2();v2();ga=w(Q());H2();vE=w(nt());EN();xr();Oe();mD();EM=w(ue());X4();$T();FD();us();SJ();VR=w(yt());Fp();kb();kJ();KJ();bD();Yh();Sp();QD();fM=(0,VR.resolvePath)(gM.get(B.COMPONENTSROOT)),_M=new Map;o(zJ,"loadComponentDirectories");Ebe={REST:dS,rest:dS,graphql:cN,graphqlSchema:oN,roles:hN,jsResource:_N,fastifyRoutes:CL,login:SN,static:PL,operationsApi:DD,customFunctions:{},http:dR,clustering:RR,replication:zo,authentication:vh,mqtt:$D,loadEnv:LL,logging:ga.default,dataLoader:DL},YJ=[],HR=new Map;o(_be,"setErrorReporter");fR=o(()=>GR,"getComponentName");o(gbe,"symlinkHarperModule");o(jJ,"sequentiallyHandleApplication");o($R,"loadComponent")});var pR=M((sGe,QJ)=>{var{isMainThread:TM}=require("worker_threads"),{getTables:Sbe,getDatabases:rGe,table:nGe}=(Oe(),D(mt)),{loadComponentDirectories:Tbe,loadComponent:ybe}=(qh(),D(JT)),{resetResources:Rbe}=(xa(),D(Hb)),Abe=ZO(),bbe=yt(),{dirname:Ibe}=require("path"),{getConnection:wbe}=sr(),Nbe=ue(),{CONFIG_PARAMS:Cbe}=(H(),D(W)),{loadCertificates:Obe}=fs(),{loadAndWatchLicensesDir:Pbe}=(Qh(),D(cy)),yM=new Map;async function Lbe(e=!1){!TM&&Nbe.get(Cbe.CLUSTERING_ENABLED)&&wbe();try{TM&&await Abe()}catch(n){console.error(n)}let t=Rbe();Sbe(),t.isWorker=e,TM&&Pbe(),await Obe(),await ybe(Ibe(bbe.getConfigFilePath()),t,"hdb",!0,yM),await Tbe(yM,t);let r=[];for(let[n]of yM)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o(Lbe,"loadRootComponents");QJ.exports.loadRootComponents=Lbe});var nt=M((oGe,Mi)=>{"use strict";WE();var{Worker:Dbe,MessageChannel:Mbe,parentPort:_o,isMainThread:wM,threadId:vbe,workerData:go}=require("worker_threads"),{PACKAGE_ROOT:Ube}=Tt(),{join:e3,isAbsolute:xbe,extname:Bbe}=require("path"),{server:t3}=(xr(),D(rm)),{watch:Fbe,readdir:kbe}=require("fs/promises"),{totalmem:JJ}=require("os"),Ff=(H(),D(W)),r3=ue(),Di=Q(),{randomBytes:Hbe}=require("crypto"),{_assignPackageExport:qbe}=ii(),XJ=1024*1024,Oc=[],ti=[],Gbe=50,NM=1e4,$be="restart",n3="request_thread_info",s3="resource_report",i3="thread_info",o3="added-port",Vbe="ack",RM;qbe("threads",ti);Mi.exports={startWorker:AM,restartWorkers:OM,shutdownWorkers:jbe,workers:Oc,setMonitorListener:nIe,onMessageFromWorkers:Qbe,onMessageByType:m3,broadcast:Xbe,broadcastWithAcknowledgement:eIe,setChildListenerByType:zbe,getWorkerIndex:a3,getWorkerCount:c3,getTicketKeys:u3,setMainIsWorker:Ybe,setTerminateTimeout:Kbe,restartNumber:go?.restartNumber||1};ti.onMessageByType=m3;ti.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=ti.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Mi.exports.whenThreadsStarted=new Promise(e=>{Mi.exports.threadsHaveStarted=e});var CM;function Kbe(e){NM=e}o(Kbe,"setTerminateTimeout");function a3(){return go?go.workerIndex:CM?0:void 0}o(a3,"getWorkerIndex");function c3(){return go?go.workerCount:CM?1:void 0}o(c3,"getWorkerCount");function Ybe(e){CM=e,Mi.exports.threadsHaveStarted()}o(Ybe,"setMainIsWorker");var l3=1,KR;function u3(){return KR||(KR=wM?Hbe(48):go.ticketKeys,KR)}o(u3,"getTicketKeys");Object.defineProperty(t3,"workerIndex",{get(){return a3()}});Object.defineProperty(t3,"workerCount",{get(){return c3()}});var d3={[n3](e,t){tIe(t)},[s3](e,t){rIe(t,e)}};function AM(e,t={}){let r=process.constrainedMemory?.()||JJ();r=Math.min(r,JJ(),2e4*XJ);let n=r3.get(Ff.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/XJ/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],a=[];for(let l of ti){let u=new Mbe;u.existingPort=l,i.push(u),a.push(u.port2)}Bbe(e)||(e+=".js");let c=new Dbe(xbe(e)?e:e3(Ube,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps","--expose-internals"],argv:process.argv.slice(2),workerData:{addPorts:a,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:l3=t.threadCount,name:t.name,restartNumber:Mi.exports.restartNumber,ticketKeys:u3()},transferList:a,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:o3,port:l,threadId:c.threadId},[l]);return WR(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>AM(e,t),c.on("error",l=>{Di.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{Oc.splice(Oc.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Gbe?(t.unexpectedRestarts=c.unexpectedRestarts+1,AM(e,t)):Di.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{d3[l.type]?.(l,c)}),Oc.push(c),iIe(),t.onStarted&&t.onStarted(c),c.name=t.name,c}o(AM,"startWorker");var Wbe=[Ff.THREAD_TYPES.HTTP];async function OM(e=null,t=Math.max(l3>3,1),r=!0){if(wM){try{process.chdir(process.cwd())}catch(a){Di.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=pR();await a()}Mi.exports.restartNumber++,t<1&&(t=t*Oc.length);let n=[],s=[];for(let a of Oc.slice(0)){if(e&&a.name!==e||a.wasShutdown)continue;Di.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:Mi.exports.restartNumber,type:Ff.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=Wbe.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Di.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},NM*2).unref();a.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&a.startCopy(),u()})});if(n.push(l),c&&r){let u=a.startCopy(),d=new Promise(f=>{let m=o(p=>{p.type===Ff.ITC_EVENT_TYPES.CHILD_STARTED&&(Di.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Di.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}=cf();r&&(e==="http"||!e)&&r3.get(Ff.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else _o.postMessage({type:$be,workerType:e})}o(OM,"restartWorkers");function zbe(e,t){d3[e]=t}o(zbe,"setChildListenerByType");function jbe(e){return OM(e,1/0,!1)}o(jbe,"shutdownWorkers");var f3=[];function Qbe(e){f3.push(e)}o(Qbe,"onMessageFromWorkers");var bM=new Map;function m3(e,t){let r=bM.get(e);r||bM.set(e,r=[]),r.push(t)}o(m3,"onMessageByType");var Jbe=10;async function Xbe(e,t){let r=0;for(let n of ti)try{n.postMessage(e),r++>Jbe&&(r=0,await new Promise(setImmediate))}catch(s){Di.error("Unable to send message to worker",s)}t&&h3(e,null)}o(Xbe,"broadcast");var YR=new Map,Zbe=1;function eIe(e){return new Promise(t=>{let r=0;for(let n of ti)try{let s=Zbe++,i=o(()=>{YR.delete(s),--r===0&&t(),n!==_o&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,YR.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of YR)a.port===n&&a()})),n.postMessage(e),r++}catch(s){Di.error("Unable to send message to worker",s)}r===0&&t()})}o(eIe,"broadcastWithAcknowledgement");function tIe(e){e.postMessage({type:i3,workers:p3()})}o(tIe,"sendThreadInfo");function p3(){let e=Date.now();return Oc.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}))}o(p3,"getChildWorkerInfo");function rIe(e,t){e.resources=t,e.resources.updated=Date.now()}o(rIe,"recordResourceReport");var IM;function nIe(e){IM=e}o(nIe,"setMonitorListener");var sIe=1e3,ZJ=!1;function iIe(){ZJ||(ZJ=!0,setInterval(()=>{for(let e of Oc){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}IM&&IM()},sIe).unref())}o(iIe,"startMonitoring");var oIe=1e3;if(_o&&go?.addPorts){WR(_o);for(let e=0,t=go.addPorts.length;e<t;e++){let r=go.addPorts[e];r.threadId=go.addThreadIds[e],WR(r)}setInterval(()=>{let e=process.memoryUsage();_o.postMessage({type:s3,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},oIe).unref(),RM=o(()=>new Promise((e,t)=>{_o.on("message",r),_o.postMessage({type:n3});function r(n){n.type===i3&&(_o.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else RM=p3;Mi.exports.getThreadInfo=RM;function WR(e,t){ti.push(e),e.on("message",r=>{if(r.type===o3)r.port.threadId=r.threadId,WR(r.port);else if(r.type===Vbe){let n=YR.get(r.id);n&&n()}else h3(r,e)}).on("close",()=>{ti.splice(ti.indexOf(e),1)}).on("exit",()=>{ti.splice(ti.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(WR,"addPort");function h3(e,t){for(let n of f3)n(e,t);let r=bM.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Di.error(s)}}o(h3,"notifyMessageListeners");if(wM){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await kbe(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(e3(s,a.name));try{for await(let{filename:a}of Fbe(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await OM(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(a){console.warn("Error trying to watch component directory",s,a)}},"watchDir");Mi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else _o.on("message",async e=>{let{type:t}=e;t===Ff.ITC_EVENT_TYPES.SHUTDOWN&&(Mi.exports.restartNumber=e.restartNumber,_o.unref(),setTimeout(()=>{Di.warn("Thread did not voluntarily terminate",vbe),process.exit(0)},NM).unref())})});var y3=M((uGe,T3)=>{"use strict";var{promises:kf,createReadStream:aIe,createWriteStream:cIe}=require("fs"),{createGzip:lIe}=require("zlib"),{promisify:uIe}=require("util"),{pipeline:dIe}=require("stream"),fIe=uIe(dIe),LM=require("path"),S3=ue();S3.initSync();var zR=Q(),{CONFIG_PARAMS:mIe,ITC_EVENT_TYPES:cGe}=(H(),D(W)),{onMessageFromWorkers:lGe}=nt(),{convertToMS:E3}=oe(),{onStorageReclamation:pIe}=(v_(),D(jU)),hIe=6e4,EIe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",_Ie="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",PM,_3;T3.exports=gIe;function gIe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(pIe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(EIe);if(!i)throw new Error(_Ie);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=E3(r));let d;return PM=Date.now(),zR.trace("Log rotate enabled, maxSize:",t,"interval:",r),_3=setInterval(async()=>{if(l){let f;f=await kf.stat(e.path),f.size>=l&&(d=await g3(e.path,i))}if(u&&Date.now()-PM>=u&&(d=await g3(e.path,i),PM=Date.now()),n||c){let f=E3(n??"1M")/(1+c);c=0;let m=await kf.readdir(i);for(let p of m)try{let h=await kf.stat(LM.join(i,p));Date.now()-h.mtimeMs>f&&await kf.unlink(LM.join(i,p))}catch(h){zR.error("Error trying to remove log",p,h)}}},a??hIe).unref(),{end(){clearInterval(_3)},getLastRotatedLogPath(){return d}}}o(gIe,"logRotator");async function g3(e,t){let r=S3.get(mIe.LOGGING_ROTATION_COMPRESS),n=LM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await kf.rename(e,n),r&&(e=n,n+=".gz",await fIe(aIe(e),lIe(),cIe(n)),await kf.unlink(e)),zR.closeLogFile(),zR.notify(`hdb.log rotated, old log moved to ${n}`),n}o(g3,"moveLogFile")});var w3={};Ie(w3,{RootConfigWatcher:()=>DM});var R3,A3,b3,jR,I3,DM,N3=ie(()=>{R3=w(require("chokidar")),A3=require("node:fs/promises"),b3=w(yt()),jR=require("node:stream"),I3=require("yaml"),DM=class extends jR.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;ready;constructor(){super(),this.#e=(0,b3.getConfigFilePath)(),this.ready=(0,jR.once)(this,"ready"),this.#t=R3.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,A3.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,I3.parse)(t);if(!this.#r){this.#r=r,this.emit("ready",this.#r);return}this.emit("change",this.#r=r)}).catch(t=>{})}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var Q=M((hGe,nA)=>{"use strict";var Ta=require("fs-extra"),{workerData:SIe,threadId:TIe,isMainThread:v3}=require("worker_threads"),BE=require("path"),U3=require("yaml"),x3=require("properties-reader"),$r=(H(),D(W)),C3=Hc(),yIe=require("os"),{PACKAGE_ROOT:kM}=Tt(),{_assignPackageExport:RIe}=ii(),{Console:AIe}=require("console"),O3=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),P3=new Map,{join:ya}=BE,L3=1e4,cr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},bIe={STDOUT:"stdOut",STDERR:"stdErr"},pGe=ya(kM,"logs"),IIe=ya(kM,"config/yaml/",$r.HDB_DEFAULT_CONFIG_FILE),wIe=1e4,FE,kE,QR,Sa,vM,MM,XR,Lt,Rs,ZR,eA,Hf,xE,UE;function JR(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=BE.dirname(n)):t.root?n=ya(t.root,vM):(n=Lt.path,t.root||(t.root=BE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=cr[t.level]??Lt?.level??cr.info,B3(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Lt.path===e.path&&r)}o(JR,"updateLogger");function B3(e){let t=e.conditional??(e.conditional={});t.notify=cr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=cr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=cr.error>=e.level?e.error.bind(e):void 0,t.warn=cr.warn>=e.level?e.warn.bind(e):void 0,t.info=cr.info>=e.level?e.info.bind(e):void 0,t.debug=cr.debug>=e.level?e.debug.bind(e):void 0,t.trace=cr.trace>=e.level?e.trace.bind(e):void 0}o(B3,"updateConditional");async function UM(){UE||(UE=new VIe,await UE.ready,UE.on("change",UM));let e=UE.config,t=e.logging??{};JR(Lt,t),XR=Lt.path,FE=t.console??!1,t.external&&JR(Rs,t.external);for(let r in e){let n=e[r];n.logging?JR(Lt.forComponent(r),n.logging,r):Lt.hasComponent(r)&&JR(Lt.forComponent(r),t,r)}}o(UM,"updateLogSettings");var xM=class extends AIe{static{o(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){bn="trace",this.level<=cr.trace&&super.info(...t),bn="info"}debug(...t){bn="debug",this.level<=cr.debug&&super.info(...t),bn="info"}info(...t){bn="info",this.level<=cr.info&&super.info(...t),bn="info"}warn(...t){bn="warn",this.level<=cr.warn&&super.warn(...t),bn="info"}error(...t){bn="error",this.level<=cr.error&&super.error(...t),bn="info"}fatal(...t){Hf=!0;try{bn="fatal",this.level<=cr.fatal&&super.error(...t),bn="info"}finally{Hf=!1}}notify(...t){Hf=!0;try{bn="notify",this.level<=cr.notify&&super.info(...t),bn="info"}finally{Hf=!1}}withTag(t){return k3(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};xE===void 0&&F3();nA.exports={notify:vIe,fatal:UIe,error:FM,warn:xIe,info:LIe,debug:MIe,trace:DIe,logLevel:Sa,loggerWithTag:k3,suppressLogging:OIe,initLogSettings:F3,logCustomLevel:BIe,closeLogFile:H3,createLogger:rA,logsAtLevel:NIe,getLogFilePath:o(()=>XR,"getLogFilePath"),forComponent:o(e=>Lt.forComponent(e),"forComponent"),setMainLogger:GIe,OUTPUTS:bIe,AuthAuditLog:$Ie,start:UM,startOnMainThread:UM,errorToString:qIe};nA.exports.externalLogger={notify(...e){Rs.notify(...e)},fatal(...e){Rs.fatal(...e)},error(...e){Rs.error(...e)},warn(...e){Rs.warn(...e)},info(...e){Rs.info(...e)},debug(...e){Rs.debug(...e)},trace(...e){Rs.trace(...e)},withTag(e){return Rs.withTag(e)}};RIe("logger",nA.exports.externalLogger);function NIe(e){return cr[Sa]<=cr[e]}o(NIe,"logsAtLevel");function F3(e=!1){try{if(xE===void 0||e){H3();let t=FIe(),r=C3(["ROOTPATH"]);try{xE=x3(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Ta.pathExistsSync(ya(r.ROOTPATH,$r.HDB_CONFIG_FILE)))throw s}let n;if({level:Sa,configLogPath:MM,toFile:kE,logConsole:FE,rotation:n,toStream:QR}=kIe(r.ROOTPATH?ya(r.ROOTPATH,$r.HDB_CONFIG_FILE):xE.get("settings_path")),vM=$r.LOG_NAMES.HDB,XR=ya(MM,vM),Lt=rA({path:XR,level:Sa,stdStreams:QR,rotation:n}),Rs=Lt.forComponent("external"),Rs.tag=null,v3)try{require("segfault-handler").registerHandler(ya(MM,"crash.log"))}catch{}}}catch(t){if(xE=void 0,t.code===$r.NODE_ERROR_CODES.ENOENT||t.code===$r.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=C3(Object.keys($r.CONFIG_PARAM_MAP),!0);for(let s in r){let i=$r.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let a=r[s];if(i===$r.CONFIG_PARAMS.LOGGING_LEVEL){Sa=a;continue}i===$r.CONFIG_PARAMS.LOGGING_CONSOLE&&(FE=i)}let{defaultLevel:n}=HIe();kE=!1,QR=!0,Sa=Sa===void 0?n:Sa,Lt=rA({level:Sa}),Rs=Lt.forComponent("external"),Rs.tag=null;return}throw FM("Error initializing log settings"),FM(t),t}process.env.DEV_MODE&&(QR=!0),CIe()}o(F3,"initLogSettings");var Pc=!0;function CIe(){kE&&(process.stdout.write=function(e){return typeof e=="string"&&Pc&&FE&&(e=e.toString(),e[e.length-1]===`
|
|
134
|
+
`&&(e=e.slice(0,-1)),eA(e)),O3.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Pc&&FE&&(e[e.length-1]===`
|
|
135
|
+
`&&(e=e.slice(0,-1)),eA(e)),O3.apply(process.stderr,arguments)})}o(CIe,"stdioLogging");function k3(e,t,r=Lt){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<=cr[i]?function(...a){tA=e;try{return s.call(r,...a)}finally{tA=void 0}}:null}o(n,"logWithTag")}o(k3,"loggerWithTag");function OIe(e){try{Pc=!1,e()}finally{Pc=!0}}o(OIe,"suppressLogging");var PIe=SIe?.name?.replace(/ /g,"-")||"main",bn="info",BM,tA;function rA({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:a}){t||(t="info");let c=cr[t],l;function u(p){if(kE)if(l.logToStdstreams){f(p.replace(/\x1b\[[0-9;]*m/g,"")),Pc=!1;try{process.stdout.write(p)}finally{Pc=!0}}else f(p);else r&&process.stdout.write(p)}o(u,"logStdOut");function d(p){if(kE){if(f(p),r){Pc=!1;try{process.stderr.write(p)}finally{Pc=!0}}}else r&&process.stderr.write(p)}o(d,"logStdErr");let f=e&&M3(e,n,s);function m(p){return{write(h){let E=[bn];E.unshift(BM||PIe+"/"+TIe),tA&&E.push(tA),l.tag&&E.push(l.tag),p(`[${E.join("] [")}]: ${h}`)}}}if(o(m,"logPrepend"),s&&(eA=f),l=new xM({stdout:m(i??u),stderr:m(i??d),colorMode:r??!1},c),B3(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(p){e=p,f=M3(e,l.rotation,s),s&&(eA=f)},enumerable:!0}),l.closeLogFile=f?.closeLogFile,l.logToStdstreams=r,!a){let p=new Map;l.forComponent=function(h){let E=p.get(h);return E||(E=rA({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}o(rA,"createLogger");var D3=100;function M3(e,t,r){let n=P3.get(e),s,i,a,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,P3.set(e,n)),v3&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let h=y3();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
|
-
`}`;c?(c.length<
|
|
138
|
-
`),Hf&&(clearTimeout(a),f())):Hf||l<performance.now()+C3?f(E):(l=Math.min(l,performance.now()+C3),c=[E],a=setTimeout(f,1))}function f(h){if(p(),s){let E=performance.now();Ta.appendFileSync(s,c?c.join(""):h);let g=performance.now();l=Math.max(g,l)+(g-E)*50}else i||console.log(c?c.join(""):h);c&&(c=null)}function m(){try{Ta.closeSync(s)}catch{}s=null,r&&(ZR=null)}function p(h){if(!s){try{s=Ta.openSync(e,"a"),r&&(ZR=s)}catch(E){if(E.code==="ENOENT"&&!h)return Ta.mkdirpSync(BE.dirname(e)),p(!0);i||(i=!0,console.error(E))}setTimeout(()=>{m()},yIe).unref()}}}o(O3,"getFileLogger");function wIe(...e){Lt.info(...e)}o(wIe,"info");function NIe(...e){Lt.trace(...e)}o(NIe,"trace");function UM(...e){Lt.error(...e)}o(UM,"error");function CIe(...e){Lt.debug(...e)}o(CIe,"debug");function OIe(...e){Lt.notify(...e)}o(OIe,"notify");function PIe(...e){Lt.fatal(...e)}o(PIe,"fatal");function LIe(...e){Lt.warn(...e)}o(LIe,"warn");function DIe(e,t,r,...n){vM=r.service_name;try{Lt[e](...n)}finally{vM=void 0}}o(DIe,"logCustomLevel");function MIe(){let e;try{e=EIe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ya(e,$r.HDB_HOME_DIR_NAME,$r.BOOT_PROPS_FILE_NAME);return Ta.existsSync(t)||(t=ya(xM,"utility/hdb_boot_properties.file")),t}o(MIe,"getPropsFilePath");function vIe(e){try{if(e.includes("config/settings.js")){let l=D3(e);return{level:l.get($r.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:BE.dirname(l.get($r.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:l.get($r.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:l.get($r.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=L3.parseDocument(Ta.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),a=t.getIn(["logging","console"]),c=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:a,rotation:c}}catch(t){if(t.code===$r.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(vIe,"getLogConfig");function UIe(){try{let e=L3.parseDocument(Ta.readFileSync(TIe,"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)}}o(UIe,"getDefaultConfig");function xIe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}o(xIe,"errorToString");function BIe(e){Lt=e}o(BIe,"setMainLogger");function x3(){try{Ta.closeSync(ZR)}catch{}ZR=null}o(x3,"closeLogFile");function FIe(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}o(FIe,"AuthAuditLog");var{RootConfigWatcher:kIe}=(A3(),D(R3))});var oe=M(Ae=>{"use strict";var Lc=require("path"),q3=require("fs-extra"),Wn=Q(),B3=require("fs-extra"),sA=require("os"),HIe=require("net"),qIe=require("recursive-iterator"),Dr=(H(),D(W)),{PACKAGE_ROOT:GIe}=bt(),$Ie=sD(),F3=require("papaparse"),iA=require("moment"),{inspect:VIe}=require("util"),k3=require("is-number"),KIe=require("minimist"),YIe=require("https"),WIe=require("http"),zIe=/^((\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)))$/,G3=require("util").promisify(setTimeout),jIe=100,QIe=5,JIe="",XIe=4,H3={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Ae.isEmpty=As;Ae.isEmptyOrZeroLength=So;Ae.arrayHasEmptyValues=twe;Ae.arrayHasEmptyOrZeroLengthValues=rwe;Ae.buildFolderPath=nwe;Ae.isBoolean=$3;Ae.errorizeMessage=ZIe;Ae.stripFileExtension=iwe;Ae.autoCast=owe;Ae.autoCastJSON=V3;Ae.autoCastJSONDeep=FM;Ae.removeDir=awe;Ae.compareVersions=cwe;Ae.isCompatibleDataVersion=lwe;Ae.escapeRawValue=uwe;Ae.unescapeValue=dwe;Ae.stringifyProps=fwe;Ae.timeoutPromise=pwe;Ae.isClusterOperation=Ewe;Ae.getClusterUser=gwe;Ae.checkGlobalSchemaTable=_we;Ae.getHomeDir=Y3;Ae.getPropsFilePath=mwe;Ae.promisifyPapaParse=Swe;Ae.removeBOM=W3;Ae.createEventPromise=Twe;Ae.checkProcessRunning=ywe;Ae.checkSchemaTableExist=Rwe;Ae.checkSchemaExists=z3;Ae.checkTableExists=j3;Ae.getStartOfTomorrowInSeconds=Awe;Ae.getLimitKey=bwe;Ae.isObject=swe;Ae.isNotEmptyAndHasValue=ewe;Ae.autoCasterIsNumberCheck=K3;Ae.backtickASTSchemaItems=Iwe;Ae.isPortTaken=hwe;Ae.createForkArgs=wwe;Ae.autoCastBoolean=Nwe;Ae.asyncSetTimeout=G3;Ae.getTableHashAttribute=Cwe;Ae.doesSchemaExist=Owe;Ae.doesTableExist=Pwe;Ae.stringifyObj=Lwe;Ae.ms_to_time=Dwe;Ae.changeExtension=Mwe;Ae.getEnvCliRootPath=kM;Ae.noBootFile=vwe;Ae.httpRequest=Uwe;Ae.transformReq=xwe;Ae.convertToMS=Bwe;Ae.PACKAGE_ROOT=GIe;function ZIe(e){return e instanceof Error?e:new Error(e)}o(ZIe,"errorizeMessage");function As(e){return e==null}o(As,"isEmpty");function ewe(e){return!As(e)&&(e||e===0||e===""||$3(e))}o(ewe,"isNotEmptyAndHasValue");function So(e){return As(e)||e.length===0||e.size===0}o(So,"isEmptyOrZeroLength");function twe(e){if(As(e))return!0;for(let t=0;t<e.length;t++)if(As(e[t]))return!0;return!1}o(twe,"arrayHasEmptyValues");function rwe(e){if(So(e))return!0;for(let t=0;t<e.length;t++)if(So(e[t]))return!0;return!1}o(rwe,"arrayHasEmptyOrZeroLengthValues");function nwe(...e){try{return e.join(Lc.sep)}catch{console.error(e)}}o(nwe,"buildFolderPath");function $3(e){return As(e)?!1:e===!0||e===!1}o($3,"isBoolean");function swe(e){return As(e)?!1:typeof e=="object"}o(swe,"isObject");function iwe(e){return So(e)?JIe:e.slice(0,-XIe)}o(iwe,"stripFileExtension");function owe(e){return As(e)||e===""||typeof e!="string"?e:H3[e]!==void 0?H3[e]:K3(e)===!0?Number(e):zIe.test(e)?new Date(e):e}o(owe,"autoCast");function V3(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(V3,"autoCastJSON");function FM(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=FM(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=FM(r);n!==r&&(e[t]=n)}return e}else return V3(e)}o(FM,"autoCastJSONDeep");function K3(e){if(e.startsWith("0.")&&k3(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&k3(e))}o(K3,"autoCasterIsNumberCheck");async function awe(e){if(So(e))throw new Error(`Directory path: ${e} does not exist`);try{await B3.emptyDir(e),await B3.remove(e)}catch(t){throw Wn.error(`Error removing files in ${e} -- ${t}`),t}}o(awe,"removeDir");function cwe(e,t){if(So(e)){Wn.info("Invalid current version sent as parameter.");return}if(So(t)){Wn.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,a=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(a.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(a[u],10)-parseInt(c[u],10),r)return r;return a.length-c.length}o(cwe,"compareVersions");function lwe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}o(lwe,"isCompatibleDataVersion");function uwe(e){if(As(e))return e;let t=String(e);return t==="."?Dr.UNICODE_PERIOD:t===".."?Dr.UNICODE_PERIOD+Dr.UNICODE_PERIOD:t.replace(Dr.FORWARD_SLASH_REGEX,Dr.UNICODE_FORWARD_SLASH)}o(uwe,"escapeRawValue");function dwe(e){if(As(e))return e;let t=String(e);return t===Dr.UNICODE_PERIOD?".":t===Dr.UNICODE_PERIOD+Dr.UNICODE_PERIOD?"..":String(e).replace(Dr.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(dwe,"unescapeValue");function fwe(e,t){if(As(e))return Wn.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let a of i)r+=";"+a+sA.EOL}!So(n)&&n[0]===";"?r+=" "+n+s+sA.EOL:So(n)||(r+=n+"="+s+sA.EOL)}catch{Wn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}o(fwe,"stringifyProps");function Y3(){let e;try{e=sA.homedir()}catch{e=process.env.HOME}return e}o(Y3,"getHomeDir");function mwe(){let e=Lc.join(Y3(),Dr.HDB_HOME_DIR_NAME,Dr.BOOT_PROPS_FILE_NAME);return q3.existsSync(e)||(e=Lc.join(__dirname,"../","hdb_boot_properties.file")),e}o(mwe,"getPropsFilePath");function pwe(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:o(function(){clearTimeout(r)},"cancel")}}o(pwe,"timeoutPromise");async function hwe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=HIe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}o(hwe,"isPortTaken");function Ewe(e){try{return Dr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Wn.error(`Error checking operation against cluster ops ${t}`)}return!1}o(Ewe,"isClusterOperation");function _we(e,t){let r=(Oe(),D(mt)).getDatabases();if(!r[e])return oA.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return oA.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(_we,"checkGlobalSchemaTable");function gwe(e,t){if(As(t)){Wn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(As(e)||So(e)){Wn.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){Wn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Wn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(gwe,"getClusterUser");function Swe(){F3.parsePromise=function(e,t,r){return new Promise(function(n,s){F3.parse(e,{header:!0,transformHeader:W3,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}o(Swe,"promisifyPapaParse");function W3(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(W3,"removeBOM");function Twe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Wn.info(`Got cluster status event response: ${VIe(s)}`);try{i.cancel()}catch{Wn.error("Error trying to cancel timeout.")}n(s)})})}o(Twe,"createEventPromise");async function ywe(e){let t=!0,r=0;do await G3(jIe*r++),(await $Ie.findPs(e)).length>0&&(t=!1);while(t&&r<QIe);if(t)throw new Error(`process ${e} was not started`)}o(ywe,"checkProcessRunning");function Rwe(e,t){let r=z3(e);if(r)return r;let n=j3(e,t);if(n)return n}o(Rwe,"checkSchemaTableExist");function z3(e){let{getDatabases:t}=(Oe(),D(mt));if(!t()[e])return oA.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(z3,"checkSchemaExists");function j3(e,t){let{getDatabases:r}=(Oe(),D(mt));if(!r()[e][t])return oA.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(j3,"checkTableExists");function Awe(){let e=iA().utc().add(1,"d").startOf("d").unix(),t=iA().utc().unix();return e-t}o(Awe,"getStartOfTomorrowInSeconds");function bwe(){return iA().utc().format("DD-MM-YYYY")}o(bwe,"getLimitKey");function Iwe(e){try{let t=new qIe(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){Wn.error("Got an error back ticking items."),Wn.error(t)}}o(Iwe,"backtickASTSchemaItems");function wwe(e){return[e]}o(wwe,"createForkArgs");function Nwe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(Nwe,"autoCastBoolean");function Cwe(e,t){let{getDatabases:r}=(Oe(),D(mt)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}o(Cwe,"getTableHashAttribute");function Owe(e){let{getDatabases:t}=(Oe(),D(mt));return t()[e]!==void 0}o(Owe,"doesSchemaExist");function Pwe(e,t){let{getDatabases:r}=(Oe(),D(mt));return r()[e]?.[t]!==void 0}o(Pwe,"doesTableExist");function Lwe(e){try{return JSON.stringify(e)}catch{return e}}o(Lwe,"stringifyObj");function Dwe(e){let t=iA.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}o(Dwe,"ms_to_time");function Mwe(e,t){let r=Lc.basename(e,Lc.extname(e));return Lc.join(Lc.dirname(e),r+t)}o(Mwe,"changeExtension");function kM(){if(process.env[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=KIe(process.argv);if(e[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}o(kM,"getEnvCliRootPath");var BM;function vwe(){if(BM)return BM;let e=kM();if(kM()&&q3.pathExistsSync(Lc.join(e,Dr.HDB_CONFIG_FILE)))return BM=!0,!0}o(vwe,"noBootFile");function Uwe(e,t){let r;return e.protocol==="http:"?r=WIe:r=YIe,new Promise((n,s)=>{let i=r.request(e,a=>{a.setEncoding("utf8"),a.body="",a.on("data",c=>{a.body+=c}),a.on("end",()=>{n(a)})});i.on("error",a=>{s(a)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}o(Uwe,"httpRequest");function xwe(e){if(!e.schema&&!e.database){e.schema=Dr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}o(xwe,"transformReq");function Bwe(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}o(Bwe,"convertToMS");var oA=Kr()});WE();var HM=(H(),D(W)),Q3=oe(),HE=Q(),Fwe=mi(),kwe=kn(),Hwe=(QT(),D(jT)),{start:qwe}=(UD(),D(RR)),{closeConnection:Gwe}=sr(),J3=require("moment"),X3=Ny(),{cloneDeep:$we}=require("lodash"),Vwe=process.env[HM.PROCESS_NAME_ENV_PROP],Dc=Vwe.substring(4);o((async function(){let t={id:Dc,request:void 0},r=0;try{HE.notify("Starting job:",Dc),qwe(),Fwe.setSchemaDataToGlobal(),await kwe.setUsersWithRolesCache();let n=await X3.getJobById(Dc);if(Q3.isEmptyOrZeroLength(n))throw new Error(`Unable to find a record in hdbJob for job: ${Dc}`);let{request:s}=n[0];if(Q3.isEmptyOrZeroLength(s))throw new Error("Did not find job request in hdb_job table, unable to proceed");s=$we(s);let i=Hwe.getOperationFunction(s);HE.trace("Running operation:",s.operation,"for job",Dc);let a=await i.job_operation_function(s);HE.trace("Result from job:",Dc,a),t.status=HM.JOB_STATUS_ENUM.COMPLETE,typeof a=="string"?t.message=a:(t.result=a,t.message="Successfully completed job: "+Dc),t.end_datetime=J3().valueOf(),HE.notify("Successfully completed job:",Dc)}catch(n){r=1,HE.error(n),t.status=HM.JOB_STATUS_ENUM.ERROR,t.message=n.message?n.message:n,t.end_datetime=J3().valueOf()}finally{await X3.updateJob(t),await Gwe(),setTimeout(()=>{process.exit(r)},3e3).unref()}}),"job")();
|
|
137
|
+
`}`;c?(c.length<L3?c.push(E):c.length===L3&&c.push(`Maximum log buffer rate reached, logs will be throttled
|
|
138
|
+
`),Hf&&(clearTimeout(a),f())):Hf||l<performance.now()+D3?f(E):(l=Math.min(l,performance.now()+D3),c=[E],a=setTimeout(f,1))}function f(h){if(p(),s){let E=performance.now();Ta.appendFileSync(s,c?c.join(""):h);let g=performance.now();l=Math.max(g,l)+(g-E)*50}else i||console.log(c?c.join(""):h);c&&(c=null)}function m(){try{Ta.closeSync(s)}catch{}s=null,r&&(ZR=null)}function p(h){if(!s){try{s=Ta.openSync(e,"a"),r&&(ZR=s)}catch(E){if(E.code==="ENOENT"&&!h)return Ta.mkdirpSync(BE.dirname(e)),p(!0);i||(i=!0,console.error(E))}setTimeout(()=>{m()},wIe).unref()}}}o(M3,"getFileLogger");function LIe(...e){Lt.info(...e)}o(LIe,"info");function DIe(...e){Lt.trace(...e)}o(DIe,"trace");function FM(...e){Lt.error(...e)}o(FM,"error");function MIe(...e){Lt.debug(...e)}o(MIe,"debug");function vIe(...e){Lt.notify(...e)}o(vIe,"notify");function UIe(...e){Lt.fatal(...e)}o(UIe,"fatal");function xIe(...e){Lt.warn(...e)}o(xIe,"warn");function BIe(e,t,r,...n){BM=r.service_name;try{Lt[e](...n)}finally{BM=void 0}}o(BIe,"logCustomLevel");function FIe(){let e;try{e=yIe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ya(e,$r.HDB_HOME_DIR_NAME,$r.BOOT_PROPS_FILE_NAME);return Ta.existsSync(t)||(t=ya(kM,"utility/hdb_boot_properties.file")),t}o(FIe,"getPropsFilePath");function kIe(e){try{if(e.includes("config/settings.js")){let l=x3(e);return{level:l.get($r.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:BE.dirname(l.get($r.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:l.get($r.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:l.get($r.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=U3.parseDocument(Ta.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),a=t.getIn(["logging","console"]),c=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:a,rotation:c}}catch(t){if(t.code===$r.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(kIe,"getLogConfig");function HIe(){try{let e=U3.parseDocument(Ta.readFileSync(IIe,"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)}}o(HIe,"getDefaultConfig");function qIe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}o(qIe,"errorToString");function GIe(e){Lt=e}o(GIe,"setMainLogger");function H3(){try{Ta.closeSync(ZR)}catch{}ZR=null}o(H3,"closeLogFile");function $Ie(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}o($Ie,"AuthAuditLog");var{RootConfigWatcher:VIe}=(N3(),D(w3))});var oe=M(Ae=>{"use strict";var Lc=require("path"),K3=require("fs-extra"),Wn=Q(),q3=require("fs-extra"),sA=require("os"),KIe=require("net"),YIe=require("recursive-iterator"),Dr=(H(),D(W)),{PACKAGE_ROOT:WIe}=Tt(),zIe=aD(),G3=require("papaparse"),iA=require("moment"),{inspect:jIe}=require("util"),$3=require("is-number"),QIe=require("minimist"),JIe=require("https"),XIe=require("http"),ZIe=/^((\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)))$/,Y3=require("util").promisify(setTimeout),ewe=100,twe=5,rwe="",nwe=4,V3={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Ae.isEmpty=As;Ae.isEmptyOrZeroLength=So;Ae.arrayHasEmptyValues=owe;Ae.arrayHasEmptyOrZeroLengthValues=awe;Ae.buildFolderPath=cwe;Ae.isBoolean=W3;Ae.errorizeMessage=swe;Ae.stripFileExtension=uwe;Ae.autoCast=dwe;Ae.autoCastJSON=z3;Ae.autoCastJSONDeep=qM;Ae.removeDir=fwe;Ae.compareVersions=mwe;Ae.isCompatibleDataVersion=pwe;Ae.escapeRawValue=hwe;Ae.unescapeValue=Ewe;Ae.stringifyProps=_we;Ae.timeoutPromise=Swe;Ae.isClusterOperation=ywe;Ae.getClusterUser=Awe;Ae.checkGlobalSchemaTable=Rwe;Ae.getHomeDir=Q3;Ae.getPropsFilePath=gwe;Ae.promisifyPapaParse=bwe;Ae.removeBOM=J3;Ae.createEventPromise=Iwe;Ae.checkProcessRunning=wwe;Ae.checkSchemaTableExist=Nwe;Ae.checkSchemaExists=X3;Ae.checkTableExists=Z3;Ae.getStartOfTomorrowInSeconds=Cwe;Ae.getLimitKey=Owe;Ae.isObject=lwe;Ae.isNotEmptyAndHasValue=iwe;Ae.autoCasterIsNumberCheck=j3;Ae.backtickASTSchemaItems=Pwe;Ae.isPortTaken=Twe;Ae.createForkArgs=Lwe;Ae.autoCastBoolean=Dwe;Ae.asyncSetTimeout=Y3;Ae.getTableHashAttribute=Mwe;Ae.doesSchemaExist=vwe;Ae.doesTableExist=Uwe;Ae.stringifyObj=xwe;Ae.ms_to_time=Bwe;Ae.changeExtension=Fwe;Ae.getEnvCliRootPath=GM;Ae.noBootFile=kwe;Ae.httpRequest=Hwe;Ae.transformReq=qwe;Ae.convertToMS=Gwe;Ae.PACKAGE_ROOT=WIe;function swe(e){return e instanceof Error?e:new Error(e)}o(swe,"errorizeMessage");function As(e){return e==null}o(As,"isEmpty");function iwe(e){return!As(e)&&(e||e===0||e===""||W3(e))}o(iwe,"isNotEmptyAndHasValue");function So(e){return As(e)||e.length===0||e.size===0}o(So,"isEmptyOrZeroLength");function owe(e){if(As(e))return!0;for(let t=0;t<e.length;t++)if(As(e[t]))return!0;return!1}o(owe,"arrayHasEmptyValues");function awe(e){if(So(e))return!0;for(let t=0;t<e.length;t++)if(So(e[t]))return!0;return!1}o(awe,"arrayHasEmptyOrZeroLengthValues");function cwe(...e){try{return e.join(Lc.sep)}catch{console.error(e)}}o(cwe,"buildFolderPath");function W3(e){return As(e)?!1:e===!0||e===!1}o(W3,"isBoolean");function lwe(e){return As(e)?!1:typeof e=="object"}o(lwe,"isObject");function uwe(e){return So(e)?rwe:e.slice(0,-nwe)}o(uwe,"stripFileExtension");function dwe(e){return As(e)||e===""||typeof e!="string"?e:V3[e]!==void 0?V3[e]:j3(e)===!0?Number(e):ZIe.test(e)?new Date(e):e}o(dwe,"autoCast");function z3(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(z3,"autoCastJSON");function qM(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=qM(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=qM(r);n!==r&&(e[t]=n)}return e}else return z3(e)}o(qM,"autoCastJSONDeep");function j3(e){if(e.startsWith("0.")&&$3(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&$3(e))}o(j3,"autoCasterIsNumberCheck");async function fwe(e){if(So(e))throw new Error(`Directory path: ${e} does not exist`);try{await q3.emptyDir(e),await q3.remove(e)}catch(t){throw Wn.error(`Error removing files in ${e} -- ${t}`),t}}o(fwe,"removeDir");function mwe(e,t){if(So(e)){Wn.info("Invalid current version sent as parameter.");return}if(So(t)){Wn.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,a=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(a.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(a[u],10)-parseInt(c[u],10),r)return r;return a.length-c.length}o(mwe,"compareVersions");function pwe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}o(pwe,"isCompatibleDataVersion");function hwe(e){if(As(e))return e;let t=String(e);return t==="."?Dr.UNICODE_PERIOD:t===".."?Dr.UNICODE_PERIOD+Dr.UNICODE_PERIOD:t.replace(Dr.FORWARD_SLASH_REGEX,Dr.UNICODE_FORWARD_SLASH)}o(hwe,"escapeRawValue");function Ewe(e){if(As(e))return e;let t=String(e);return t===Dr.UNICODE_PERIOD?".":t===Dr.UNICODE_PERIOD+Dr.UNICODE_PERIOD?"..":String(e).replace(Dr.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(Ewe,"unescapeValue");function _we(e,t){if(As(e))return Wn.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let a of i)r+=";"+a+sA.EOL}!So(n)&&n[0]===";"?r+=" "+n+s+sA.EOL:So(n)||(r+=n+"="+s+sA.EOL)}catch{Wn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}o(_we,"stringifyProps");function Q3(){let e;try{e=sA.homedir()}catch{e=process.env.HOME}return e}o(Q3,"getHomeDir");function gwe(){let e=Lc.join(Q3(),Dr.HDB_HOME_DIR_NAME,Dr.BOOT_PROPS_FILE_NAME);return K3.existsSync(e)||(e=Lc.join(__dirname,"../","hdb_boot_properties.file")),e}o(gwe,"getPropsFilePath");function Swe(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:o(function(){clearTimeout(r)},"cancel")}}o(Swe,"timeoutPromise");async function Twe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=KIe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}o(Twe,"isPortTaken");function ywe(e){try{return Dr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Wn.error(`Error checking operation against cluster ops ${t}`)}return!1}o(ywe,"isClusterOperation");function Rwe(e,t){let r=(Oe(),D(mt)).getDatabases();if(!r[e])return oA.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return oA.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Rwe,"checkGlobalSchemaTable");function Awe(e,t){if(As(t)){Wn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(As(e)||So(e)){Wn.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){Wn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Wn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(Awe,"getClusterUser");function bwe(){G3.parsePromise=function(e,t,r){return new Promise(function(n,s){G3.parse(e,{header:!0,transformHeader:J3,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}o(bwe,"promisifyPapaParse");function J3(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(J3,"removeBOM");function Iwe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Wn.info(`Got cluster status event response: ${jIe(s)}`);try{i.cancel()}catch{Wn.error("Error trying to cancel timeout.")}n(s)})})}o(Iwe,"createEventPromise");async function wwe(e){let t=!0,r=0;do await Y3(ewe*r++),(await zIe.findPs(e)).length>0&&(t=!1);while(t&&r<twe);if(t)throw new Error(`process ${e} was not started`)}o(wwe,"checkProcessRunning");function Nwe(e,t){let r=X3(e);if(r)return r;let n=Z3(e,t);if(n)return n}o(Nwe,"checkSchemaTableExist");function X3(e){let{getDatabases:t}=(Oe(),D(mt));if(!t()[e])return oA.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(X3,"checkSchemaExists");function Z3(e,t){let{getDatabases:r}=(Oe(),D(mt));if(!r()[e][t])return oA.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Z3,"checkTableExists");function Cwe(){let e=iA().utc().add(1,"d").startOf("d").unix(),t=iA().utc().unix();return e-t}o(Cwe,"getStartOfTomorrowInSeconds");function Owe(){return iA().utc().format("DD-MM-YYYY")}o(Owe,"getLimitKey");function Pwe(e){try{let t=new YIe(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){Wn.error("Got an error back ticking items."),Wn.error(t)}}o(Pwe,"backtickASTSchemaItems");function Lwe(e){return[e]}o(Lwe,"createForkArgs");function Dwe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(Dwe,"autoCastBoolean");function Mwe(e,t){let{getDatabases:r}=(Oe(),D(mt)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}o(Mwe,"getTableHashAttribute");function vwe(e){let{getDatabases:t}=(Oe(),D(mt));return t()[e]!==void 0}o(vwe,"doesSchemaExist");function Uwe(e,t){let{getDatabases:r}=(Oe(),D(mt));return r()[e]?.[t]!==void 0}o(Uwe,"doesTableExist");function xwe(e){try{return JSON.stringify(e)}catch{return e}}o(xwe,"stringifyObj");function Bwe(e){let t=iA.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}o(Bwe,"ms_to_time");function Fwe(e,t){let r=Lc.basename(e,Lc.extname(e));return Lc.join(Lc.dirname(e),r+t)}o(Fwe,"changeExtension");function GM(){if(process.env[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=QIe(process.argv);if(e[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}o(GM,"getEnvCliRootPath");var HM;function kwe(){if(HM)return HM;let e=GM();if(GM()&&K3.pathExistsSync(Lc.join(e,Dr.HDB_CONFIG_FILE)))return HM=!0,!0}o(kwe,"noBootFile");function Hwe(e,t){let r;return e.protocol==="http:"?r=XIe:r=JIe,new Promise((n,s)=>{let i=r.request(e,a=>{a.setEncoding("utf8"),a.body="",a.on("data",c=>{a.body+=c}),a.on("end",()=>{n(a)})});i.on("error",a=>{s(a)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}o(Hwe,"httpRequest");function qwe(e){if(!e.schema&&!e.database){e.schema=Dr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}o(qwe,"transformReq");function Gwe(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}o(Gwe,"convertToMS");var oA=Kr()});WE();var $M=(H(),D(W)),eX=oe(),HE=Q(),$we=mi(),Vwe=kn(),Kwe=(QT(),D(jT)),{start:Ywe}=(FD(),D(RR)),{closeConnection:Wwe}=sr(),tX=require("moment"),rX=Ny(),{cloneDeep:zwe}=require("lodash"),jwe=process.env[$M.PROCESS_NAME_ENV_PROP],Dc=jwe.substring(4);o((async function(){let t={id:Dc,request:void 0},r=0;try{HE.notify("Starting job:",Dc),Ywe(),$we.setSchemaDataToGlobal(),await Vwe.setUsersWithRolesCache();let n=await rX.getJobById(Dc);if(eX.isEmptyOrZeroLength(n))throw new Error(`Unable to find a record in hdbJob for job: ${Dc}`);let{request:s}=n[0];if(eX.isEmptyOrZeroLength(s))throw new Error("Did not find job request in hdb_job table, unable to proceed");s=zwe(s);let i=Kwe.getOperationFunction(s);HE.trace("Running operation:",s.operation,"for job",Dc);let a=await i.job_operation_function(s);HE.trace("Result from job:",Dc,a),t.status=$M.JOB_STATUS_ENUM.COMPLETE,typeof a=="string"?t.message=a:(t.result=a,t.message="Successfully completed job: "+Dc),t.end_datetime=tX().valueOf(),HE.notify("Successfully completed job:",Dc)}catch(n){r=1,HE.error(n),t.status=$M.JOB_STATUS_ENUM.ERROR,t.message=n.message?n.message:n,t.end_datetime=tX().valueOf()}finally{await rX.updateJob(t),await Wwe(),setTimeout(()=>{process.exit(r)},3e3).unref()}}),"job")();
|