harperdb 4.7.6 → 4.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +23 -23
- package/bin/lite.js +23 -23
- package/launchServiceScripts/launchNatsIngestService.js +22 -22
- package/launchServiceScripts/launchNatsReplyService.js +22 -22
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +21 -21
- package/npm-shrinkwrap.json +34 -34
- package/package.json +1 -1
- package/server/jobs/jobProcess.js +21 -21
- package/server/threads/threadServer.js +23 -23
- package/studio/web/assets/{index-DgL-lCXW.js → index-BPK8BWbv.js} +7 -30
- package/studio/web/assets/{index-D1uPa1Br.js → index-D5pQ8QQg.js} +1 -1
- package/studio/web/assets/index-DaQmCsN4.js +192 -0
- package/studio/web/assets/index-DnA-_HBI.css +1 -0
- package/studio/web/assets/{index.lazy-C2OrP2F_.js → index.lazy-D_uzntq0.js} +9 -31
- package/studio/web/assets/profiler-Cm_P0Kov.js +1 -0
- package/studio/web/assets/react-redux-4LNT8IKN.js +5 -0
- package/studio/web/assets/startRecording-CFKbezKY.js +2 -0
- package/studio/web/index.html +2 -2
- package/utility/scripts/restartHdb.js +21 -21
- package/studio/web/assets/index-CAHya1gn.js +0 -601
- package/studio/web/assets/index-DV97RPv8.css +0 -4
- package/studio/web/assets/profiler-Nd-IJd-3.js +0 -1
- package/studio/web/assets/react-redux-wSW3CjjP.js +0 -13
- package/studio/web/assets/startRecording-CTxWO2nY.js +0 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";var zX=Object.create;var _m=Object.defineProperty;var JX=Object.getOwnPropertyDescriptor;var QX=Object.getOwnPropertyNames;var XX=Object.getPrototypeOf,ZX=Object.prototype.hasOwnProperty;var a=(e,t)=>_m(e,"name",{value:t,configurable:!0});var se=(e,t)=>()=>(e&&(t=e(e=0)),t);var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ye=(e,t)=>{for(var r in t)_m(e,r,{get:t[r],enumerable:!0})},oU=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of QX(t))!ZX.call(e,s)&&s!==r&&_m(e,s,{get:()=>t[s],enumerable:!(n=JX(t,s))||n.enumerable});return e};var b=(e,t,r)=>(r=e!=null?zX(XX(e)):{},oU(t||!e||!e.__esModule?_m(r,"default",{value:e,enumerable:!0}):r,e)),D=e=>oU(_m({},"__esModule",{value:!0}),e);var yt=M((jCe,lU)=>{var{join:e5,dirname:aU}=require("node:path"),{existsSync:t5,readFileSync:r5}=require("node:fs");function n5(){let t=__dirname,r,n=0;for(;!t5(r=e5(t,"package.json"));)if(t===(t=aU(t))||n++>10)throw new Error("Could not find package root");return r}a(n5,"findPackageJson");var cU=n5(),s5=JSON.parse(r5(cU,"utf8")),i5=aU(cU);lU.exports={packageJson:s5,PACKAGE_ROOT:i5}});var j={};ye(j,{AUTH_AUDIT_STATUS:()=>oi,AUTH_AUDIT_TYPES:()=>Ya,BACKUP_DIR_NAME:()=>tA,BOOT_PROPS_FILE_NAME:()=>C5,BOOT_PROP_PARAMS:()=>fU,CLUSTERING_FLAG:()=>nA,CLUSTERING_PROCESSES:()=>h5,CLUSTER_MESSAGE_TYPE_ENUM:()=>rA,CLUSTER_OPERATIONS:()=>V5,CONFIG_PARAMS:()=>x,CONFIG_PARAM_MAP:()=>mU,DATABASES_DIR_NAME:()=>tl,DATABASES_PARAM_CONFIG:()=>j5,DEFAULT_DATABASE_NAME:()=>_5,ESCAPED_FORWARD_SLASH_REGEX:()=>w5,FORWARD_SLASH_REGEX:()=>A5,FUNC_VAL:()=>i8,GEO_CONVERSION_ENUM:()=>Y5,HDB_COMPONENT_CONFIG_FILE:()=>c5,HDB_CONFIG_FILE:()=>o5,HDB_DEFAULT_CONFIG_FILE:()=>a5,HDB_FILE_PERMISSIONS:()=>P5,HDB_HOME_DIR_NAME:()=>N5,HDB_PID_FILE:()=>E5,HDB_PROCESS_SERVICES:()=>p5,HDB_PROC_NAME:()=>l5,HDB_RESTART_SCRIPT:()=>u5,HDB_ROOT_DIR_NAME:()=>Qb,HDB_SETTINGS_NAMES:()=>Tm,HDB_SUPPORT_ADDRESS:()=>dU,INFO_TABLE_HASH_ATTRIBUTE:()=>x5,INSERT_MAX_CHARACTER_SIZE:()=>M5,INSTALL_PROMPTS:()=>v5,ITC_EVENT_TYPES:()=>b_,JOB_STATUS_ENUM:()=>H5,JOB_TYPE_ENUM:()=>z5,JWT_ENUM:()=>ym,LAUNCH_SERVICE_SCRIPTS:()=>S5,LEGACY_CONFIG_PARAMS:()=>W5,LEGACY_DATABASES_DIR_NAME:()=>T_,LICENSE_FILE_NAME:()=>k5,LICENSE_KEY_DIR_NAME:()=>eA,LICENSE_VALUES:()=>J5,LOG_LEVELS:()=>gm,LOG_NAMES:()=>g5,METADATA_PROPERTY:()=>Z5,NODE_ERROR_CODES:()=>X5,OPERATIONS_ENUM:()=>V,PERMS_CRUD_ENUM:()=>n8,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>r8,PRE_4_0_0_VERSION:()=>o8,PROCESS_DESCRIPTORS:()=>m5,PROCESS_NAME_ENV_PROP:()=>D5,RAM_ALLOCATION_ENUM:()=>Q5,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>R_,REG_KEY_FILE_NAME:()=>F5,RESTART_TIMEOUT_MS:()=>O5,ROLE_TYPES_ENUM:()=>T5,S3_BUCKET_AUTH_KEYS:()=>q5,SEARCH_NOT_FOUND_MESSAGE:()=>R5,SEARCH_WILDCARDS:()=>s8,SERVICE_ACTIONS_ENUM:()=>K5,SUPPORT_HELP_MSG:()=>y5,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>B5,SYSTEM_SCHEMA_NAME:()=>Sm,SYSTEM_TABLE_NAMES:()=>Fu,THREAD_TYPES:()=>iA,TIME_STAMP_NAMES:()=>t8,TIME_STAMP_NAMES_ENUM:()=>e8,TRANSACTIONS_DIR_NAME:()=>L5,UNICODE_FORWARD_SLASH:()=>I5,UNICODE_PERIOD:()=>b5,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>U5,VALID_S3_FILE_TYPES:()=>G5,VALID_SQL_OPS_ENUM:()=>$5,VALUE_SEARCH_COMPARATORS:()=>y_,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>sA});var g_,S_,o5,a5,Qb,c5,l5,u5,uU,Jb,Xb,Zb,d5,f5,m5,p5,h5,E5,_5,g5,gm,S5,T5,dU,y5,R5,b5,A5,I5,w5,Sm,N5,eA,C5,O5,P5,tl,T_,L5,tA,D5,fU,v5,M5,U5,Fu,x5,B5,F5,k5,H5,V,G5,q5,$5,V5,K5,Y5,Tm,W5,x,mU,j5,z5,rA,J5,Q5,X5,Z5,nA,pU,hU,e8,t8,r8,y_,sA,n8,s8,i8,R_,ym,b_,iA,o8,oi,Ya,G=se(()=>{g_=require("node:path"),S_=b(yt()),o5="harperdb-config.yaml",a5="defaultConfig.yaml",Qb="hdb",c5="config.yaml",l5="harperdb.js",u5="restartHdb.js",uU="HarperDB",Jb="Custom Functions",Xb="Clustering Hub",Zb="Clustering Leaf",d5="Clustering Ingest Service",f5="Clustering Reply Service",m5={HDB:uU,CLUSTERING_HUB:Xb,CLUSTERING_LEAF:Zb,CLUSTERING_INGEST_SERVICE:d5,CLUSTERING_REPLY_SERVICE:f5,CUSTOM_FUNCTIONS:Jb,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"},p5={harperdb:uU,"clustering hub":Xb,"clustering leaf":Zb,"custom functions":Jb,custom_functions:Jb,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},h5={CLUSTERING_HUB_PROC_DESCRIPTOR:Xb,CLUSTERING_LEAF_PROC_DESCRIPTOR:Zb},E5="hdb.pid",_5="data",g5={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},gm={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},S5={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,g_.join)(S_.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,g_.join)(S_.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,g_.join)(S_.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},T5={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},dU="support@harperdb.io",y5=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${dU}`,R5="None of the specified records were found.",b5="U+002E",A5=/\//g,I5="U+002F",w5=/U\+002F/g,Sm="system",N5=".harperdb",eA="keys",C5="hdb_boot_properties.file",O5=6e4,P5=448,tl="database",T_="schema",L5="transactions",tA="backup",D5="PROCESS_NAME",fU={SETTINGS_PATH_KEY:"settings_path"},v5={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"},M5=250,U5={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Fu={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"},x5="info_id",B5={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"},F5="060493.ks",k5=".license",H5={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},V={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DESCRIBE_METRIC:"describe_metric",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_REGISTRATION_INFO:"registration_info",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup",CLEANUP_ORPHAN_BLOBS:"cleanup_orphan_blobs",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",GET_SSH_KEY:"get_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status",INSTALL_USAGE_LICENSE:"install_usage_license",GET_USAGE_LICENSES:"get_usage_licenses"},G5={CSV:".csv",JSON:".json"},q5={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},$5={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},V5={[V.INSERT]:V.INSERT,[V.UPDATE]:V.UPDATE,[V.UPSERT]:V.UPSERT,[V.DELETE]:V.DELETE},K5={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"},Y5={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Tm={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},W5={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},x={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",ANALYTICS_REPLICATE:"analytics_replicate",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_COOKIE_DOMAINS:"authentication_cookie_domains",AUTHENTICATION_COOKIE_EXPIRES:"authentication_cookie_expires",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",THREADS_HEAPSNAPSHOTNEARLIMIT:"threads_heapSnapshotNearLimit",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MTLS_CERTIFICATEVERIFICATION:"http_mtls_certificateVerification",HTTP_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"http_mtls_certificateVerification_failureMode",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL:"http_mtls_certificateVerification_crl",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_TIMEOUT:"http_mtls_certificateVerification_crl_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_CACHETTL:"http_mtls_certificateVerification_crl_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_FAILUREMODE:"http_mtls_certificateVerification_crl_failureMode",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_GRACEPERIOD:"http_mtls_certificateVerification_crl_gracePeriod",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP:"http_mtls_certificateVerification_ocsp",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_TIMEOUT:"http_mtls_certificateVerification_ocsp_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_CACHETTL:"http_mtls_certificateVerification_ocsp_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_ERRORCACHETTL:"http_mtls_certificateVerification_ocsp_errorCacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_FAILUREMODE:"http_mtls_certificateVerification_ocsp_failureMode",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_REQUESTQUEUELIMIT:"http_requestQueueLimit",HTTP_HTTP2:"http_http2",LICENSE_MODE:"license_mode",LICENSE_REGION:"license_region",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_COLORS:"logging_colors",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_EXTERNAL_LEVEL:"logging_external_level",LOGGING_EXTERNAL_TAG:"logging_external_tag",LOGGING_EXTERNAL_PATH:"logging_external_path",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_MTLS_CERTIFICATEVERIFICATION:"replication_mtls_certificateVerification",REPLICATION_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"replication_mtls_certificateVerification_failureMode",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL:"replication_mtls_certificateVerification_crl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_TIMEOUT:"replication_mtls_certificateVerification_crl_timeout",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_CACHETTL:"replication_mtls_certificateVerification_crl_cacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_FAILUREMODE:"replication_mtls_certificateVerification_crl_failureMode",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_GRACEPERIOD:"replication_mtls_certificateVerification_crl_gracePeriod",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP:"replication_mtls_certificateVerification_ocsp",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_TIMEOUT:"replication_mtls_certificateVerification_ocsp_timeout",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_CACHETTL:"replication_mtls_certificateVerification_ocsp_cacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_ERRORCACHETTL:"replication_mtls_certificateVerification_ocsp_errorCacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_FAILUREMODE:"replication_mtls_certificateVerification_ocsp_failureMode",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",REPLICATION_FAILOVER:"replication_failOver",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_MAXTRANSACTIONOPENTIME:"storage_maxTransactionOpenTime",STORAGE_DEBUGLONGTRANSACTIONS:"storage_debugLongTransactions",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_BLOBCLEANUPSPEED:"storage_blobCleanupSpeed",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},mU={settings_path:fU.SETTINGS_PATH_KEY,hdb_root_key:x.ROOTPATH,hdb_root:x.ROOTPATH,rootpath:x.ROOTPATH,server_port_key:x.OPERATIONSAPI_NETWORK_PORT,server_port:x.OPERATIONSAPI_NETWORK_PORT,cert_key:x.TLS_CERTIFICATE,certificate:x.TLS_CERTIFICATE,private_key_key:x.TLS_PRIVATEKEY,private_key:x.TLS_PRIVATEKEY,http_secure_enabled_key:x.OPERATIONSAPI_NETWORK_HTTPS,https_on:x.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:x.OPERATIONSAPI_NETWORK_CORS,cors_on:x.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:x.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:x.LOGGING_LEVEL,log_level:x.LOGGING_LEVEL,log_path_key:x.LOGGING_ROOT,log_path:x.LOGGING_ROOT,clustering_node_name_key:x.CLUSTERING_NODENAME,node_name:x.CLUSTERING_NODENAME,clustering_enabled_key:x.CLUSTERING_ENABLED,clustering:x.CLUSTERING_ENABLED,max_http_threads:x.THREADS_COUNT,max_hdb_processes:x.THREADS_COUNT,server_timeout_key:x.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:x.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:x.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:x.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:x.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:x.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:x.LOGGING_AUDITLOG,disable_transaction_log:x.LOGGING_AUDITLOG,operation_token_timeout_key:x.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:x.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:x.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:x.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:x.HTTP_PORT,custom_functions_port:x.HTTP_PORT,custom_functions_directory_key:x.COMPONENTSROOT,custom_functions_directory:x.COMPONENTSROOT,max_custom_function_processes:x.THREADS_COUNT,logging_console:x.LOGGING_CONSOLE,log_to_file:x.LOGGING_FILE,log_to_stdstreams:x.LOGGING_STDSTREAMS,local_studio_on:x.LOCALSTUDIO_ENABLED,clustering_port:x.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:x.CLUSTERING_USER,customfunctions_network_port:x.HTTP_PORT,customfunctions_tls_certificate:x.TLS_CERTIFICATE,customfunctions_network_cors:x.HTTP_CORS,customfunctions_network_corsaccesslist:x.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:x.HTTP_HEADERSTIMEOUT,customfunctions_network_https:x.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:x.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:x.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:x.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:x.HTTP_TIMEOUT,customfunctions_tls:x.TLS,http_threads:x.THREADS_COUNT,threads:x.THREADS_COUNT,threads_count:x.THREADS_COUNT,customfunctions_processes:x.THREADS_COUNT,customfunctions_root:x.COMPONENTSROOT,operationsapi_root:x.ROOTPATH};for(let e in x){let t=x[e];mU[t.toLowerCase()]=t}j5={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},z5={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"},rA={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"},J5={VERSION_DEFAULT:"2.2.0"},Q5={DEVELOPMENT:8192,DEFAULT:512},X5={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},Z5=Symbol("metadata"),nA="__clustering__",pU="__createdtime__",hU="__updatedtime__",e8={CREATED_TIME:pU,UPDATED_TIME:hU},t8=[pU,hU],r8=15984864e5,y_={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},sA={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},n8={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},s8=["*","%"],i8="func_val",R_={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},ym={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},b_={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update",COMPONENT_STATUS_REQUEST:"component_status_request",COMPONENT_STATUS_RESPONSE:"component_status_response"},iA={HTTP:"http"},o8="3.x.x",oi={SUCCESS:"success",FAILURE:"failure"},Ya={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var rl=M((JCe,gU)=>{"use strict";var EU=require("minimist");gU.exports=a8;function a8(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=_U(process.env),n=_U(EU(process.argv))):(r=process.env,n=EU(process.argv));let s={};for(let i=0,o=e.length;i<o;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}a(a8,"assignCMDENVVariables");function _U(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(_U,"objKeysToLowerCase")});var ai=M(ts=>{"use strict";global.Resource=ts.Resource=void 0;global.tables=ts.tables={};global.databases=ts.databases={};global.getUser=ts.getUser=void 0;global.authenticateUser=ts.authenticateUser=void 0;global.server=ts.server={};global.contentTypes=ts.contentTypes=null;global.threads=ts.threads=[];global.logger={};global.RequestTarget=ts.RequestTarget=void 0;global.operation=ts.operation=void 0;ts._assignPackageExport=(e,t)=>{global[e]=ts[e]=t}});var oA=M(hn=>{"use strict";var c8={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
|
|
2
2
|
`),key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
|
|
3
3
|
`)},l8="certificate.pem",u8="privateKey.pem",d8="caCertificate.pem",f8="natsCertificate.pem",m8="natsCaCertificate.pem",Ot={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},p8={tls_certificate:Ot.SERVER,tlsCertificateAuthority:Ot.CA,customFunctions_tls_certificate:Ot.SERVER,customFunctionsTlsCertificateAuthority:Ot.CA,operationsApi_tls_certificate:Ot["OPERATIONS-API"],operationsApiTlsCertificateAuthority:Ot["OPERATIONS-CA"]},h8={[Ot.SERVER]:2,[Ot.DEFAULT]:1},E8={[Ot["OPERATIONS-API"]]:3,[Ot.SERVER]:2,[Ot.DEFAULT]:1},_8={[Ot["OPERATIONS-API"]]:3,[Ot.SERVER]:2,[Ot.DEFAULT]:1},g8={[Ot["OPERATIONS-CA"]]:3,[Ot.CA]:2,[Ot["DEFAULT-CA"]]:1},S8={[Ot["OPERATIONS-CA"]]:3,[Ot.CA]:2,[Ot["DEFAULT-CA"]]:1},T8={[Ot.CA]:2,[Ot["DEFAULT-CA"]]:1};hn.CERTIFICATE_PEM_NAME=l8;hn.PRIVATEKEY_PEM_NAME=u8;hn.CA_PEM_NAME=d8;hn.CERT_NAME=Ot;hn.CERT_CONFIG_NAME_MAP=p8;hn.CERT_PREFERENCE_APP=h8;hn.CERT_PREFERENCE_OPS=E8;hn.CERT_PREFERENCE_REP=_8;hn.CA_CERT_PREFERENCE_REP=g8;hn.CA_CERT_PREFERENCE_OPS=S8;hn.CA_CERT_PREFERENCE_APP=T8;hn.CERTIFICATE_VALUES=c8;hn.NATS_CERTIFICATE_PEM_NAME=f8;hn.NATS_CA_PEM_NAME=m8});var ft=M((eOe,SU)=>{"use strict";var vn=require("validate.js");vn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||vn.validators.type.checks[t](e)?null:` must be a '${t}' value`};vn.validators.type.checks={Object:a(function(e){return vn.isObject(e)&&!vn.isArray(e)},"Object"),Array:vn.isArray,Integer:vn.isInteger,Number:vn.isNumber,String:vn.isString,Date:vn.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};vn.validators.hasValidFileExt=function(e,t){return vn.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};SU.exports={validateObject:y8,validateObjectAsync:R8,validateBySchema:b8};function y8(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=vn(e,t,{format:"flat"});return r?new Error(r):null}a(y8,"validateObject");async function R8(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await vn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(R8,"validateObjectAsync");function b8(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(b8,"validateBySchema")});var cA=M((nOe,IU)=>{"use strict";var bU=require("fs-extra"),Re=require("joi"),A8=require("os"),{boolean:Ye,string:Et,number:mr,array:Wa}=Re.types(),{totalmem:TU}=require("os"),nl=require("path"),I8=Q(),aA=ae(),rOe=oA(),yU=(G(),D(j)),w8=ft(),RU="log",N8="components",C8="Invalid logging.rotation.maxSize unit. Available units are G, M or K",O8="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",P8="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",L8="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",D8="rootPath config parameter is undefined",Mn=Re.alternatives([mr.min(0),Et]).optional().empty(null),A_=Re.alternatives([Wa.items(Et,{host:Et.required(),port:Mn},{hostname:Et.required(),port:Mn}).empty(null),Wa.items(Et)]),Vi,AU=!1;IU.exports={configValidator:v8,routesValidator:k8,routeConstraints:A_};function v8(e,t=!1){if(AU=t,Vi=e.rootPath,aA.isEmpty(Vi))throw D8;let r=Ye.optional(),n=mr.min(0).max(1e3).empty(null).default(F8),s=Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Rm),i=Et.optional().empty(null),o=Et.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=Re.string().empty(null).default(Rm),l=Re.custom(U8).empty(null).default(Rm),u=e.clustering?.enabled,d=Re.object({certificate:i,certificateAuthority:i,privateKey:i}),f;return u===!0?f=Re.object({enabled:r,hubServer:Re.object({cluster:Re.object({name:Re.required().empty(null),network:Re.object({port:Mn,routes:A_}).required()}).required(),leafNodes:Re.object({network:Re.object({port:Mn}).required()}).required(),network:Re.object({port:Mn}).required()}).required(),leafServer:Re.object({network:Re.object({port:Mn,routes:A_}).required(),streams:Re.object({maxAge:mr.min(120).allow(null).optional(),maxBytes:mr.min(1).allow(null).optional(),maxMsgs:mr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:Re.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:Ye.optional(),databaseLevel:Ye.optional(),tls:Re.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ye.required(),verify:Ye.optional()}),user:Et.optional().empty(null)}).optional():f=Re.object({enabled:r,tls:Re.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ye.optional()})}).optional(),Re.object({authentication:Re.alternatives(Re.object({authorizeLocal:Ye,cacheTTL:mr.required(),cookie:Re.object({domains:Wa.items(Et).optional(),expires:Et.optional()}),enableSessions:Ye,hashFunction:Et.valid("md5","sha256","argon2id").optional().empty(null)}),Ye).optional(),analytics:Re.object({aggregatePeriod:mr,replicate:Ye.optional()}),replication:Re.object({hostname:Re.alternatives(Et,mr).optional().empty(null),url:Et.optional().empty(null),port:Mn,securePort:Mn,routes:Wa.optional().empty(null),databases:Re.alternatives(Et,Wa),enableRootCAs:Ye.optional(),copyTablesToCatchUp:Ye.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:Re.object({enabled:r}).required(),logging:Re.object({auditAuthEvents:Re.object({logFailed:Ye,logSuccessful:Ye}),file:Ye.required(),level:Re.valid("notify","fatal","error","warn","info","debug","trace"),rotation:Re.object({enabled:Ye.optional(),compress:Ye.optional(),interval:Et.custom(B8).optional().empty(null),maxSize:Et.custom(x8).optional().empty(null),path:Et.optional().empty(null).default(Rm)}).required(),root:s,stdStreams:Ye.required(),auditLog:Ye.required()}).required(),operationsApi:Re.object({network:Re.object({cors:Ye.optional(),corsAccessList:Wa.optional(),headersTimeout:mr.min(1).optional(),keepAliveTimeout:mr.min(1).optional(),port:Mn,domainSocket:Re.optional().empty("hdb/operations-server").default(Rm),securePort:Mn,timeout:mr.min(1).optional()}).optional(),tls:Re.alternatives([Re.array().items(d),d])}).required(),rootPath:Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:Re.object({network:Re.object({port:Mn,securePort:Mn,mtls:Re.alternatives([Ye.optional(),Re.object({user:Et.optional(),certificateAuthority:i,required:Ye.optional()})])}).required(),webSocket:Ye.optional(),requireAuthentication:Ye.optional()}),http:Re.object({compressionThreshold:mr.optional(),cors:Ye.optional(),corsAccessList:Wa.optional(),headersTimeout:mr.min(1).optional(),port:Mn,securePort:Mn,maxHeaderSize:mr.optional(),mtls:Re.alternatives([Ye.optional(),Re.object({user:Et.optional(),certificateAuthority:i,required:Ye.optional()})]),threadRange:Re.alternatives([Wa.optional(),Et.optional()])}).required(),threads:Re.alternatives(n.optional(),Re.object({count:n.optional(),debug:Re.alternatives(Ye.optional(),Re.object({startingPort:mr.min(1).optional(),host:Et.optional(),waitForDebugger:Ye.optional()})),maxHeapMemory:mr.min(0).optional()})),storage:Re.object({writeAsync:Ye.required(),overlappingSync:Ye.optional(),caching:Ye.optional(),compression:Re.alternatives([Ye.optional(),Re.object({dictionary:Et.optional(),threshold:mr.optional()})]),compactOnStart:Ye.optional(),compactOnStartKeepBackup:Ye.optional(),noReadAhead:Ye.optional(),path:l,prefetchWrites:Ye.optional(),maxFreeSpaceToLoad:mr.optional(),maxFreeSpaceToRetain:mr.optional()}).required(),ignoreScripts:Ye.optional(),tls:Re.alternatives([Re.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(v8,"configValidator");function M8(e){return AU||bU.existsSync(e)?null:`Specified path ${e} does not exist.`}a(M8,"doesPathExist");function U8(e,t){Re.assert(e,Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=M8(e);if(r)return t.message(r)}a(U8,"validatePath");function x8(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(C8);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(P8):e}a(x8,"validateRotationMaxSize");function B8(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(O8);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(L8):e}a(B8,"validateRotationInterval");function F8(e,t){let r=t.state.path.join("."),n=A8.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||TU();return i=Math.round(Math.min(i,TU())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),I8.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(F8,"setDefaultThreads");function Rm(e,t){let r=t.state.path.join(".");if(!aA.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(aA.isEmpty(Vi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return nl.join(Vi,N8);case"logging.root":return nl.join(Vi,RU);case"clustering.leafServer.streams.path":return nl.join(Vi,"clustering","leaf");case"storage.path":let n=nl.join(Vi,yU.LEGACY_DATABASES_DIR_NAME);return bU.existsSync(n)?n:nl.join(Vi,yU.DATABASES_DIR_NAME);case"logging.rotation.path":return nl.join(Vi,RU);case"operationsApi.network.domainSocket":return r==null?null:nl.join(Vi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Rm,"setDefaultRoot");function k8(e){let t=Re.object({routes:A_});return w8.validateBySchema({routes:e},t)}a(k8,"routesValidator")});var Jt=M((iOe,NU)=>{"use strict";var H8="__dbis__",G8="__txns__",q8="__environment_name__",$8="__dbi_defintion__",V8={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"},K8=["__createdtime__","__updatedtime__"],Y8="\uFFFF",wU={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},W8=Object.values(wU);NU.exports={AUDIT_STORE_NAME:G8,INTERNAL_DBIS_NAME:H8,DBI_DEFINITION_NAME:$8,SEARCH_TYPES:V8,TIMESTAMP_NAMES:K8,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:q8,TRANSACTIONS_DBI_NAMES_ENUM:wU,TRANSACTIONS_DBIS:W8,OVERFLOW_MARKER:Y8}});var Jr=M((oOe,xU)=>{"use strict";var CU=(G(),D(j)),OU=Jt(),PU={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},LU=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),DU={500:LU("There was an error processing your request."),400:"Invalid request"},j8=DU[PU.INTERNAL_SERVER_ERROR],z8={OP_NOT_SUPPORTED_FOR_FS:a(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:a(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:a(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:a(e=>`${e} not found.`,"NOT_FOUND")},J8={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},Q8={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:a(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:a(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:a(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:a((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:a(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},X8={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 ${OU.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${OU.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"},Z8={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${CU.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 ${CU.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"},vU={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"},eZ={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:a(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:a(e=>`Operation '${e}' not found`,"OP_NOT_FOUND"),SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:a((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:a(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},tZ={ATTR_PERM_MISSING:a((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:a((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_BOOLEAN"),ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:a(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:a(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:a(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:a(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:a(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:a(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:a(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:a((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:a(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:a(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:a(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:a(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:a(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},rZ={ATTR_NOT_FOUND:a((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:a((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:a(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:a(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:a(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:a((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:a((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},nZ={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},sZ={ALTER_USER_DUP_ROLES:a(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:a(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:a(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:a(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:a(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:a(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},MU={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:a(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},UU={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:a(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},iZ={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"},oZ={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},aZ={...vU,...Q8,...z8,...eZ,...tZ,...rZ,...nZ,...sZ,...Z8,...MU,...UU,...iZ,...oZ,...J8};xU.exports={CHECK_LOGS_WRAPPER:LU,HDB_ERROR_MSGS:aZ,DEFAULT_ERROR_MSGS:DU,DEFAULT_ERROR_RESP:j8,HTTP_STATUS_CODES:PU,LMDB_ERRORS_ENUM:X8,AUTHENTICATION_ERROR_MSGS:vU,VALIDATION_ERROR_MSGS:MU,ITC_ERRORS:UU}});var Ee=M((cOe,kU)=>{"use strict";var ku=Jr(),cZ=(G(),D(j)),I_=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,BU),this.statusCode=n||ku.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(ku.DEFAULT_ERROR_MSGS[n]?ku.DEFAULT_ERROR_MSGS[n]:ku.DEFAULT_ERROR_MSGS[ku.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&Q()[s](i)}},lA=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},uA=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function BU(e,t,r,n=cZ.LOG_LEVELS.ERROR,s=null,i=!1){if(FU(e))return e;let o=new I_(e,t,r,n,s);return i&&delete o.stack,o}a(BU,"handleHDBError");function Hu(e){this.message=e}a(Hu,"Violation");Hu.prototype=Object.create(Error.prototype);Hu.prototype.constructor=Hu;Hu.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var dA=class extends Hu{static{a(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function FU(e){return e.__proto__.constructor.name===I_.name}a(FU,"isHDBError");kU.exports={isHDBError:FU,handleHDBError:BU,ClientError:lA,ServerError:uA,AccessViolation:dA,Violation:Hu,hdbErrors:ku}});var bm={};ye(bm,{server:()=>Ue});var HU,Ue,Hr=se(()=>{HU=b(ai()),Ue={};(0,HU._assignPackageExport)("server",Ue)});var qU={};ye(qU,{getBackupDirPath:()=>w_});function w_(e){return GU.join(e,tA)}var GU,fA=se(()=>{GU=b(require("node:path"));G();a(w_,"getBackupDirPath")});var ir=M(C_=>{var N_=Q();for(let e of["trace","debug","info","warn","error","fatal","notify"])N_.logsAtLevel(e)&&(C_[e]=N_[e]);C_.loggerWithTag=e=>N_.loggerWithTag(e,!0);C_.setLogLevel=N_.setLogLevel});var jU={};ye(jU,{ConfigEnvVarError:()=>Gu,applyRuntimeEnvConfig:()=>_Z});function pA(){let{loggerWithTag:e}=ir();return e("env-config")}function O_(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&Object.prototype.toString.call(e)==="[object Object]"}function Am(e,t=""){let r={};for(let n in e){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let s=e[n],i=t?`${t}.${n}`:n;O_(s)?Object.assign(r,Am(s,i)):r[i]=s}return r}function Im(e,t){let r=t.split("."),n=e;for(let s of r){if(n==null)return;n=n[s]}return n}function wm(e,t,r){let n=t.split("."),s=e;for(let i=0;i<n.length-1;i++){let o=n[i];O_(s[o])||(s[o]={}),s=s[o]}s[n[n.length-1]]=r}function hA(e,t){let r=t.split("."),n=e;for(let s=0;s<r.length-1;s++){let i=r[s];if(!O_(n[i]))return;n=n[i]}delete n[r[r.length-1]]}function lZ(e){let t=a(n=>n===null||typeof n!="object"?JSON.stringify(n):Array.isArray(n)?"["+n.map(t).join(",")+"]":"{"+Object.keys(n).sort().map(o=>JSON.stringify(o)+":"+t(n[o])).join(",")+"}","sortedStringify"),r=t(e);return YU.createHash("sha256").update(r).digest("hex")}function uZ(e,t){if(!e||e.trim()==="")return null;try{let r=JSON.parse(e.trim());if(!O_(r))throw new Gu(`${t} must be a JSON object, got: ${typeof r}`,t);return r}catch(r){throw r instanceof Gu?r:new Gu(`Invalid JSON syntax in ${t}: ${r.message}`,t,r)}}function dZ(e){let t=mA.join(w_(e),WU);if(!ja.existsSync(t))return{version:"1.0",sources:{},originalValues:{},snapshots:{}};try{let r=ja.readJsonSync(t);return r.originalValues||(r.originalValues={}),r}catch(r){return pA().warn(`Failed to load config state file, starting fresh: ${r.message}`),{version:"1.0",sources:{},originalValues:{},snapshots:{}}}}function fZ(e,t){let r=w_(e),n=mA.join(r,WU);ja.ensureDirSync(r),ja.writeJsonSync(n,t,{spaces:2})}function mZ(e,t){let r=[];for(let[n,s]of Object.entries(t.sources)){if(s!=="HARPER_DEFAULT_CONFIG"&&s!=="HARPER_SET_CONFIG")continue;let i=t.snapshots[s];if(!i)continue;let o=Im(e,n),c=Im(i.config,n);JSON.stringify(o)!==JSON.stringify(c)&&r.push(n)}return r}function $U(e,t,r,n,s={}){let{respectSources:i=[],storeOriginals:o=!1}=s,c=Am(r);for(let[l,u]of Object.entries(c)){let d=t.sources[l],f=Im(e,l);d&&i.includes(d)||(o&&!d&&f!==void 0&&f!==null&&(l in t.originalValues||(t.originalValues[l]=f)),wm(e,l,u),t.sources[l]=n)}}function pZ(e,t,r,n,s){let i=Object.keys(Am(r)),o=Object.keys(Am(n)),c=i.filter(l=>!o.includes(l));for(let l of c)t.sources[l]===s&&((s==="HARPER_DEFAULT_CONFIG"||s==="HARPER_SET_CONFIG")&&l in t.originalValues?(wm(e,l,t.originalValues[l]),delete t.originalValues[l]):hA(e,l),delete t.sources[l])}function hZ(e,t,r){let n=Object.keys(t.sources).filter(s=>t.sources[s]===r);for(let s of n)hA(e,s),delete t.sources[s]}function EZ(e,t,r){let n={};for(let s in t.sources)if(t.sources[s]===r){let i=Im(e,s);i!==void 0&&wm(n,s,i)}return n}function VU(e,t,r,n,s={}){let i=process.env[r];if(!i)return;let o=pA(),c=uZ(i,r);if(!c)return;let l=lZ(c),u=t.snapshots[n];if(n==="HARPER_SET_CONFIG")$U(e,t,c,n,{respectSources:[],storeOriginals:!0});else if(n==="HARPER_DEFAULT_CONFIG")if(s.isInstall)$U(e,t,c,n,{respectSources:["HARPER_SET_CONFIG","user"],storeOriginals:!0});else{let m=Am(c);for(let[p,h]of Object.entries(m)){let E=t.sources[p],_=Im(e,p);if(!(E&&E!=="HARPER_DEFAULT_CONFIG")){if(!E&&_!=null){p in t.originalValues||(t.originalValues[p]=_);continue}wm(e,p,h),t.sources[p]=n}}}u&&u.hash!==l&&pZ(e,t,u.config,c,n);let d=EZ(e,t,n);t.snapshots[n]={hash:l,config:d};let f=s.isInstall?"installation":"runtime";o.debug?.(`Applied ${r} at ${f}`)}function KU(e,t,r,n){if(!t.snapshots[n])return;let s=pA();if(n==="HARPER_DEFAULT_CONFIG"||n==="HARPER_SET_CONFIG"){let i=Object.keys(t.sources).filter(o=>t.sources[o]===n);for(let o of i)o in t.originalValues?(wm(e,o,t.originalValues[o]),delete t.originalValues[o]):hA(e,o),delete t.sources[o]}else hZ(e,t,n);delete t.snapshots[n],s.debug?.(`${r} removed, cleaned up values`)}function _Z(e,t,r={}){let n=process.env.HARPER_DEFAULT_CONFIG,s=process.env.HARPER_SET_CONFIG,i=dZ(t);if(!n&&!s&&Object.keys(i.snapshots).length===0)return e;if(!r.isInstall){let o=mZ(e,i);for(let c of o)i.sources[c]="user"}return VU(e,i,"HARPER_DEFAULT_CONFIG","HARPER_DEFAULT_CONFIG",r),n||KU(e,i,"HARPER_DEFAULT_CONFIG","HARPER_DEFAULT_CONFIG"),VU(e,i,"HARPER_SET_CONFIG","HARPER_SET_CONFIG",r),s||KU(e,i,"HARPER_SET_CONFIG","HARPER_SET_CONFIG"),fZ(t,i),e}var ja,mA,YU,WU,Gu,zU=se(()=>{ja=b(require("fs-extra")),mA=b(require("node:path")),YU=b(require("node:crypto"));fA();WU=".harper-config-state.json";a(pA,"getLogger");Gu=class extends Error{static{a(this,"ConfigEnvVarError")}envVarName;originalError;constructor(t,r,n){super(t),this.name="ConfigEnvVarError",this.envVarName=r,this.originalError=n}};a(O_,"isPlainObject");a(Am,"flattenObject");a(Im,"getNestedValue");a(wm,"setNestedValue");a(hA,"deleteNestedValue");a(lZ,"hashConfig");a(uZ,"parseConfigEnvVar");a(dZ,"loadConfigState");a(fZ,"saveConfigState");a(mZ,"detectConfigDrift");a($U,"applyConfigLayer");a(pZ,"handleDeletions");a(hZ,"removeValuesWithSource");a(EZ,"buildSnapshot");a(VU,"processEnvVar");a(KU,"cleanupRemovedEnvVar");a(_Z,"applyRuntimeEnvConfig")});var _t=M(or=>{"use strict";var Ds=(G(),D(j)),wr=ae(),Pt=Q(),{configValidator:gZ,routesValidator:JU}=cA(),Qr=require("fs-extra"),D_=require("yaml"),ns=require("path"),SZ=require("is-number"),XU=require("properties-reader"),TZ=require("lodash"),{handleHDBError:yZ}=Ee(),{HTTP_STATUS_CODES:RZ,HDB_ERROR_MSGS:qu}=Jr(),{server:bZ}=(Hr(),D(bm)),{PACKAGE_ROOT:ZU}=yt(),{getBackupDirPath:AZ}=(fA(),D(qU)),{DATABASES_PARAM_CONFIG:Nm,CONFIG_PARAMS:rs,CONFIG_PARAM_MAP:ci}=Ds,IZ="Unable to get config value because config is uninitialized",wZ="Config successfully initialized",NZ="Error backing up config file",CZ="Empty parameter sent to getConfigValue",ex=ns.join(ZU,"config","yaml",Ds.HDB_DEFAULT_CONFIG_FILE),OZ=ns.join(ZU,"config","yaml","defaultNatsConfig.yaml"),PZ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",QU={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},P_,kt,L_;or.createConfigFile=LZ;or.getDefaultConfig=DZ;or.getConfigValue=rx;or.initConfig=v_;or.flattenConfig=$u;or.updateConfigValue=nx;or.updateConfigObject=MZ;or.getConfiguration=BZ;or.setConfiguration=FZ;or.readConfigFile=SA;or.getClusteringRoutes=kZ;or.initOldConfig=ix;or.getConfigFromFile=HZ;or.getConfigFilePath=sl;or.addConfig=GZ;or.deleteConfigFromFile=qZ;or.getConfigObj=$Z;or.resolvePath=EA;or.getFlatConfigObj=VZ;function EA(e){if(e?.startsWith("~/"))return ns.join(wr.getHomeDir(),e.slice(1));let t=fe();try{return ns.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}a(EA,"resolvePath");function LZ(e,t=!1){let r=za(ex);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=D_.parseDocument(Qr.readFileSync(OZ,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}P_=$u(r.toJSON());let n;for(let c in e){let l=ci[c.toLowerCase()];if(l===rs.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=_A(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{u.length>1&&typeof r.getIn(u.slice(0,-1))=="boolean"&&r.deleteIn(u.slice(0,-1)),r.setIn([...u],d)}catch(f){Pt.error(f)}}}n&&tx(r,n),gA(r,t),sx(r,null,{isInstall:!0});let s=r.toJSON();kt=$u(s);let i=r.getIn(["rootPath"]),o=ns.join(i,Ds.HDB_CONFIG_FILE);if(Qr.createFileSync(o),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);Qr.writeFileSync(o,String(r)),Pt.trace(`Config file written to ${o}`)}a(LZ,"createConfigFile");function tx(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!wr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Nm.TABLES))for(let i in n[s][Nm.TABLES])for(let o in n[s][Nm.TABLES][i]){let c=n[s][Nm.TABLES][i][o],l=[rs.DATABASES,s,Nm.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[rs.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Pt.error("Error parsing schemas CLI/env config arguments",n)}}a(tx,"setSchemasConfig");function DZ(e){if(P_===void 0){let r=za(ex);P_=$u(r.toJSON())}let t=ci[e.toLowerCase()];if(t!==void 0)return P_[t.toLowerCase()]}a(DZ,"getDefaultConfig");function rx(e){if(e==null){Pt.info(CZ);return}if(kt===void 0){Pt.trace(IZ);return}let t=ci[e.toLowerCase()];if(t!==void 0)return kt[t.toLowerCase()]}a(rx,"getConfigValue");function sl(e=wr.getPropsFilePath()){let t=wr.getEnvCliRootPath();if(t)return EA(ns.join(t,Ds.HDB_CONFIG_FILE));let r=XU(e);return EA(r.get(Ds.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(sl,"getConfigFilePath");function v_(e=!1){if(kt===void 0||e){let t;if(!wr.noBootFile()){t=wr.getPropsFilePath();try{Qr.accessSync(t,Qr.constants.F_OK|Qr.constants.R_OK)}catch(i){throw Pt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=sl(t),n;if(r.includes("config/settings.js"))try{ix(r);return}catch(i){if(i.code!==Ds.NODE_ERROR_CODES.ENOENT)throw i}try{n=za(r)}catch(i){if(i.code===Ds.NODE_ERROR_CODES.ENOENT){Pt.trace(`HarperDB config file not found at ${r}.
|
|
4
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw Pt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}vZ(n,r),sx(n,r),gA(n);let s=n.toJSON();if(bZ.config=s,kt=$u(s),kt.logging_rotation_rotate)for(let i in QU)kt[i]&&Pt.error(`Config ${QU[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Pt.trace(wZ)}}a(v_,"initConfig");function vZ(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ns.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ns.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60,replicate:!1}),n=!0),n){if(Pt.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);Qr.writeFileSync(t,String(e))}}a(vZ,"checkForUpdatedConfig");function gA(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 qu.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 qu.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=gZ(r,t);if(n.error)throw qu.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(gA,"validateConfig");function MZ(e,t){kt===void 0&&(kt={});let r=ci[e.toLowerCase()];if(r===void 0){Pt.trace(`Unable to update config object because config param '${e}' does not exist`);return}kt[r.toLowerCase()]=t}a(MZ,"updateConfigObject");function nx(e,t,r=void 0,n=!1,s=!1,i=!1){kt===void 0&&v_();let o=rx(ci.hdb_root),c=ns.join(o,Ds.HDB_CONFIG_FILE),l=za(c),u;if(r&&kt){let m=!1;for(let p in r)if(r[p]!=kt[p.toLowerCase()]){m=!0;break}if(!m){Pt.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===rs.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=ci[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=_A(m,t);l.setIn([...p],h)}else for(let m in r){let p=ci[m.toLowerCase()];if(p===rs.HTTP_SECUREPORT&&r[m]===kt[rs.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===rs.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===kt[rs.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===rs.DATABASES){u=r[m];continue}if(p?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!p&&(m.endsWith("_package")||m.endsWith("_port"))&&(p=m),p!==void 0){let h=p.split("_"),E=Ds.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let _=_A(p,r[m]);p==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],_)}catch(R){Pt.error(R)}}}u&&tx(l,u),gA(l);let d=l.getIn(["rootPath"]),f=ns.join(d,Ds.HDB_CONFIG_FILE);if(n===!0&&UZ(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);Qr.writeFileSync(f,String(l)),s&&(kt=$u(l.toJSON())),Pt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(nx,"updateConfigValue");function UZ(e,t){try{let r=ns.join(AZ(t),`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${Ds.HDB_CONFIG_FILE}.bak`);Qr.copySync(e,r),Pt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Pt.error(NZ),Pt.error(r)}}a(UZ,"backupConfigFile");var xZ=["databases"];function $u(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),L_=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!xZ.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!rs[l.toUpperCase()]&&ci[l]&&(s[ci[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a($u,"flattenConfig");function _A(e,t){if(e===rs.CLUSTERING_NODENAME||e===rs.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(SZ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||wr.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return wr.autoCast(t)}a(_A,"castConfigValue");function BZ(){let e=wr.getPropsFilePath(),t=sl(e);return za(t).toJSON()}a(BZ,"getConfiguration");async function FZ(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return nx(void 0,void 0,s,!0),PZ}catch(i){throw typeof i=="string"||i instanceof String?yZ(i,i,RZ.BAD_REQUEST,void 0,void 0,!0):i}}a(FZ,"setConfiguration");function SA(){let e=wr.getPropsFilePath();try{Qr.accessSync(e,Qr.constants.F_OK|Qr.constants.R_OK)}catch(n){if(!wr.noBootFile())throw Pt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=sl(e);return za(t).toJSON()}a(SA,"readConfigFile");function za(e){return D_.parseDocument(Qr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(za,"parseYamlDoc");function sx(e,t,r={}){let n=process.env.HARPER_DEFAULT_CONFIG,s=process.env.HARPER_SET_CONFIG;if(!n&&!s)return;let{applyRuntimeEnvConfig:i}=(zU(),D(jU)),o=e.getIn(["rootPath"]);if(!o){Pt.warn("Cannot apply runtime env config: rootPath not found in config");return}let c=e.toJSON();try{i(c,o,r);let l=D_.parseDocument(D_.stringify(c),{simpleKeys:!0});Object.assign(e,l)}catch(l){throw Pt.error(`Failed to apply runtime env config: ${l.message}`),l}if(t)try{if(e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml: ${e.errors}`);Qr.writeFileSync(t,String(e)),Pt.debug("Config file updated with runtime env var values")}catch(l){throw Pt.error(`Failed to write config file after applying runtime env vars: ${l.message}`),l}}a(sx,"applyRuntimeEnvVarConfig");function kZ(){let e=SA(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=wr.isEmptyOrZeroLength(t)?[]:t;let r=JU(t);if(r)throw qu.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=wr.isEmptyOrZeroLength(n)?[]:n;let s=JU(n);if(s)throw qu.CONFIG_VALIDATION(s.message);if(!wr.isEmptyOrZeroLength(n)&&!wr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!wr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw qu.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(kZ,"getClusteringRoutes");function ix(e){let t=XU(e);kt={};for(let r in ci){let n=t.get(r.toUpperCase());if(wr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ci[r].toLowerCase();s===rs.LOGGING_ROOT?kt[s]=ns.dirname(n):kt[s]=n}return kt}a(ix,"initOldConfig");function HZ(e){let t=SA();return TZ.get(t,e.replaceAll("_","."))}a(HZ,"getConfigFromFile");async function GZ(e,t){let r=za(sl());if(r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);await Qr.writeFile(sl(),String(r))}a(GZ,"addConfig");function qZ(e){let t=sl(wr.getPropsFilePath()),r=za(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ns.join(n,Ds.HDB_CONFIG_FILE);Qr.writeFileSync(s,String(r))}a(qZ,"deleteConfigFromFile");function $Z(){return L_||(v_(),L_)}a($Z,"getConfigObj");function VZ(){return kt||v_(),kt}a(VZ,"getFlatConfigObj")});var fe=M((lx,ux)=>{"use strict";var TA=require("fs-extra"),il=require("path"),ox=require("os"),KZ=require("properties-reader"),Om=Q(),Cm=ae(),Ge=(G(),D(j)),M_=_t(),YZ="Error initializing environment manager",U_="BOOT_PROPS_FILE_PATH",ax=!1,WZ={[Ge.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Bo={};Object.assign(lx,ux.exports={BOOT_PROPS_FILE_PATH:U_,getHdbBasePath:jZ,setHdbBasePath:zZ,get:cx,initSync:QZ,setProperty:tt,initTestEnvironment:XZ});function jZ(){return Bo[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(jZ,"getHdbBasePath");function zZ(e){Bo[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(zZ,"setHdbBasePath");function cx(e){let t=M_.getConfigValue(e);return t===void 0?Bo[e]:t}a(cx,"get");function tt(e,t){WZ[e]&&(Bo[e]=t),M_.updateConfigObject(e,t)}a(tt,"setProperty");function JZ(){let e;try{e=Cm.getPropsFilePath(),TA.accessSync(e,TA.constants.F_OK|TA.constants.R_OK),ax=!0;let t=KZ(e);return Bo[Ge.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Ge.HDB_SETTINGS_NAMES.INSTALL_USER),Bo[Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Bo[U_]=e,!0}catch{return Om.trace(`Environment manager found no properties file at ${e}`),!1}}a(JZ,"doesPropFileExist");function QZ(e=!1){try{(ax||JZ()||Cm.noBootFile()||e)&&(M_.initConfig(e),Bo[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=M_.getConfigValue(Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Om.error(YZ),Om.error(t),console.error(t),process.exit(1)}}a(QZ,"initSync");function XZ(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=il.join(__dirname,"../../","unitTests");Bo[U_]=il.join(l,"hdb_boot_properties.file"),tt(Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,il.join(l,"settings.test")),tt(Ge.HDB_SETTINGS_NAMES.INSTALL_USER,ox.userInfo()?ox.userInfo().username:void 0),tt(Ge.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),tt(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY,il.join(l,"envDir","log")),tt(Ge.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),tt(Ge.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),tt(Ge.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),tt(Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,il.join(l,"envDir")),tt(Ge.CONFIG_PARAMS.STORAGE_PATH,il.join(l,"envDir")),s&&(tt(Ge.CONFIG_PARAMS.HTTP_SECUREPORT,cx(Ge.CONFIG_PARAMS.HTTP_PORT)),tt(Ge.CONFIG_PARAMS.HTTP_PORT,null)),tt(Ge.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),tt(Ge.CONFIG_PARAMS.HTTP_PORT,9926),tt(Ge.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),tt(Ge.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),tt(Ge.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Cm.isEmpty(i)?!1:i),tt(Ge.CONFIG_PARAMS.HTTP_CORS,Cm.isEmpty(i)?!1:i),tt(Ge.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),tt(Ge.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),tt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),tt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),tt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,il.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),tt(Ge.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Cm.isEmpty(c)?!1:c),o&&(tt("CORS_ACCESSLIST",o),tt(Ge.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(tt(Ge.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),tt(Ge.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(tt(Ge.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),tt(Ge.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(tt(Ge.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),tt(Ge.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${U_}. Please check your boot props and settings files`;Om.fatal(r),Om.error(t)}}a(XZ,"initTestEnvironment")});var yA=M((_Oe,dx)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n,basename:s}=require("node:path"),{existsSync:i,statSync:o,readFileSync:c,writeFileSync:l,unlinkSync:u}=require("node:fs"),{isMainThread:d}=require("node:worker_threads"),{spawnSync:f,spawn:m}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:p}=yt(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],E="ts-build";if(d){let S=!1,y=!1;if(y=i(n(p,E))){let w=new Set;e.sync(h.map(I=>`${I}/**/*.ts`),{cwd:p}).forEach(I=>{let H=0,X=0;try{w.add(I),H=o(n(p,I)).mtimeMs-5e3,X=o(n(p,E,I.replace(/.ts$/,".js"))).mtimeMs}catch{}H>X&&(S=!0)}),e.sync(h.map(I=>`${I}/**/*.js`),{cwd:n(p,E)}).forEach(I=>{if(!w.has(I.replace(/.js$/,".ts")))try{u(n(p,E,I))}catch{}})}else S=!0;if(S){console.log("Compiling TypeScript...");let w=f("npx",["tsc"],{cwd:p});if(w.stdout?.length&&console.log(w.stdout.toString()),w.stderr?.length&&console.log(w.stderr.toString()),y){let I=n(t(),"harperdb-tsc.pid"),H=!1;if(i(I))try{process.kill(+c(I,"utf8"),0),H=!0}catch{}if(!H){console.log("Starting background TypeScript compilation...");let X=m("npx",["tsc","--watch"],{detached:!0,cwd:p,stdio:"ignore"});X.on("error",q=>{console.error("Error trying to compile TypeScript",q)}),X.pid&&l(I,String(X.pid),"utf-8"),X.unref()}}}}let _=dx.constructor,R=_._findPath;_._findPath=function(S,y,w){if(S.startsWith(".")&&!w&&y.length===1&&y[0].startsWith(p)&&!y[0].includes("node_modules")){let I=r(p,y[0]),H;I.startsWith(E)?H=n(p,r(E,I)):H=n(p,E,I),(S.endsWith(".js")||S.endsWith(".ts"))&&(S=S.slice(0,-3));let X=n(H,S),q=X+".js";if(i(q))return q;if(s(X).includes(".")&&i(X))return X}return R(S,y,w)}}});var Rt=M((gOe,gx)=>{"use strict";var Mm=(G(),D(j)),ZZ=ae(),Un=fe(),Um=require("path"),e9=require("minimist"),fx=require("fs-extra"),mx=require("lodash");Un.initSync();var{CONFIG_PARAMS:Ja,DATABASES_PARAM_CONFIG:Pm,SYSTEM_SCHEMA_NAME:x_}=Mm,Lm,Dm,vm;function px(){if(Lm!==void 0)return Lm;if(Un.getHdbBasePath()!==void 0)return Lm=Un.get(Ja.STORAGE_PATH)||Um.join(Un.getHdbBasePath(),Mm.DATABASES_DIR_NAME),Lm}a(px,"getBaseSchemaPath");function hx(){if(Dm!==void 0)return Dm;if(Un.getHdbBasePath()!==void 0)return Dm=_x(x_),Dm}a(hx,"getSystemSchemaPath");function Ex(){if(vm!==void 0)return vm;if(Un.getHdbBasePath()!==void 0)return vm=Un.get(Mm.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Um.join(Un.getHdbBasePath(),Mm.TRANSACTIONS_DIR_NAME),vm}a(Ex,"getTransactionAuditStoreBasePath");function t9(e,t){let r=Un.get(Ja.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Um.join(Ex(),e.toString())}a(t9,"getTransactionAuditStorePath");function _x(e,t){e=e.toString(),t=t&&t.toString();let r=Un.get(Mm.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Um.join(px(),e)}a(_x,"getSchemaPath");function r9(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,e9(process.argv));let n=r[Ja.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!ZZ.isObject(n))throw o;i=n}for(let o of i){let c=o[x_];if(!c)continue;let l=Un.get(Ja.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Pm.PATH];if(u)return mx.set(l,[x_,Pm.TABLES,t,Pm.PATH],u),Un.setProperty(Ja.DATABASES,l),u;let d=c?.[Pm.PATH];if(d)return mx.set(l,[x_,Pm.PATH],d),Un.setProperty(Ja.DATABASES,l),d}}let s=r[Ja.STORAGE_PATH.toUpperCase()];if(s){if(!fx.pathExistsSync(s))throw new Error(s+" does not exist");let i=Um.join(s,e);return fx.mkdirsSync(i),Un.setProperty(Ja.STORAGE_PATH,s),i}return hx()}a(r9,"initSystemSchemaPaths");function n9(){Lm=void 0,Dm=void 0,vm=void 0}a(n9,"resetPaths");gx.exports={getBaseSchemaPath:px,getSystemSchemaPath:hx,getTransactionAuditStorePath:t9,getTransactionAuditStoreBasePath:Ex,getSchemaPath:_x,initSystemSchemaPaths:r9,resetPaths:n9}});var xn=M((ROe,bx)=>{"use strict";var s9=Jr().LMDB_ERRORS_ENUM,TOe=require("lmdb"),i9=Jt(),yOe=require("buffer").Buffer,{OVERFLOW_MARKER:Sx,MAX_SEARCH_KEY_LENGTH:B_}=i9,Tx=["number","string","symbol","boolean","bigint"];function o9(e){if(e=e?.primaryStore||e,!e)throw new Error(s9.ENV_REQUIRED)}a(o9,"validateEnv");function a9(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(a9,"stringifyData");function c9(e){return e instanceof Date?e.valueOf():e}a(c9,"convertKeyValueToWrite");function l9(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(Tx.includes(typeof e))return e.length>B_?[e.slice(0,B_)+Sx]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(Tx.includes(typeof i))i.length>B_?r.push(i.slice(0,B_)+Sx):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(l9,"getIndexedValues");var F_=0,yx=0;function Rx(){yx=Date.now()-performance.now()}a(Rx,"adjustStartTime");Rx();var u9=6e4;setInterval(Rx,u9).unref();function d9(){let e=performance.now()+yx;return e>F_?(F_=e,e):(F_+=488e-6,F_)}a(d9,"getNextMonotonicTime");bx.exports={validateEnv:o9,stringifyData:a9,convertKeyValueToWrite:c9,getNextMonotonicTime:d9,getIndexedValues:l9}});var xm=M((AOe,Ax)=>{"use strict";var f9=(G(),D(j)).OPERATIONS_ENUM,RA=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=f9.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Ax.exports=RA});var Bm=M((NOe,Cx)=>{"use strict";var wOe=xm(),k_=(G(),D(j)),bA=ae(),Ix=Q(),m9=require("uuid"),{handleHDBError:H_,hdbErrors:p9}=Ee(),{HDB_ERROR_MSGS:G_,HTTP_STATUS_CODES:q_}=p9;Cx.exports=wx;function wx(e,t,r){for(let s=0;s<t.length;s++)Nx(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];h9(i,r,e.operation)}}a(wx,"processRows");wx.validateAttribute=Nx;function Nx(e){if(Buffer.byteLength(String(e))>k_.INSERT_MAX_CHARACTER_SIZE)throw H_(new Error,G_.ATTR_NAME_LENGTH_ERR(e),q_.BAD_REQUEST,void 0,void 0,!0);if(bA.isEmptyOrZeroLength(e)||bA.isEmpty(e.trim()))throw H_(new Error,G_.ATTR_NAME_NULLISH_ERR,q_.BAD_REQUEST,void 0,void 0,!0)}a(Nx,"validateAttribute");function h9(e,t,r){if(!e.hasOwnProperty(t)||bA.isEmptyOrZeroLength(e[t])){if(r===k_.OPERATIONS_ENUM.INSERT||r===k_.OPERATIONS_ENUM.UPSERT){e[t]=m9.v4();return}throw Ix.error("Update transaction aborted due to record with no hash value:",e),H_(new Error,G_.RECORD_MISSING_HASH_ERR,q_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>k_.INSERT_MAX_CHARACTER_SIZE)throw Ix.error(e),H_(new Error,G_.HASH_VAL_LENGTH_ERR,q_.BAD_REQUEST,void 0,void 0,!0)}a(h9,"validateHash")});function Mx(e){wA=e}function g9(){_9=setInterval(function(){for(let e of AA)if(e.timeout<=0){let t=e.getContext()?.url;Dx.error(`Transaction was open too long and has been committed, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`,...e.startedFrom?[`was started from ${e.startedFrom.resourceName}.${e.startedFrom.method}`]:[],...IA?["starting stack trace",e.stackTraces]:[]),e.commit(),e.timeout=$_}else e.timeout-=$_},$_).unref()}var NA,Lx,Dx,Y_,vx,Ox,AA,E9,IA,Fo,Fm,Px,wA,$_,V_,ko,K_,_9,km=se(()=>{NA=b(xn()),Lx=b(Ee()),Dx=b(Q()),Y_=b(fe());G();vx=b(ae()),Ox=100,AA=new Set,E9=(0,vx.convertToMS)(Y_.get(x.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,IA=Y_.get(x.STORAGE_DEBUGLONGTRANSACTIONS),Fo={CLOSED:0,OPEN:1,LINGERING:2};a(Mx,"replicationConfirmation");$_=Y_.get(x.STORAGE_MAXTRANSACTIONOPENTIME)??3e4,V_=class extends Error{static{a(this,"StartedTransaction")}},ko=class e{static{a(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;timeout;validated=0;timestamp=0;overloadChecked;open=Fo.OPEN;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.timeout=$_,this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===Fo.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,IA&&(this.stackTraces=[new V_]),this.readTxn.openTimer&&(this.readTxn.openTimer=0),AA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,IA&&this.stackTraces.push(new V_),this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(AA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Fm&&!this.overloadChecked&&performance.now()-Px>E9)throw new Lx.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===Fo.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===Fo.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,NA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let f=this.validated;this.validated=this.writes.length;for(let p=f;p<this.validated;p++)this.writes[p]?.validate?.(this.timestamp);let m;for(let p=f;p<this.validated;p++){let h=this.writes[p];h&&(h.before||h.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let p=0;p<2;p++){let h;for(let E=f;E<this.validated;E++){let _=this.writes[E];if(!_)continue;let R=_[p===0?"before":"beforeIntermediate"];if(R){let S=R();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(p){throw this.abort(),p}return this.commit(t)})()}catch(f){throw this.abort(),f}n||this.doneReadTxn(),this.open=t?.doneWriting?Fo.LINGERING:Fo.OPEN;let s,i=[],o=0;this.writes=this.writes.filter(f=>f);let c=a(f=>{f.commit(r,f.entry,n)},"doWrite"),l=a(()=>{let f=this.writes[o++];if(f)if(f.key){(n>0||!f.entry)&&(f.entry=f.store.getEntry(f.key));let m=f.store.ifVersion(f.key,f.entry?.version??null,l);s=s||m}else l();else for(let m of this.writes)c(m)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<Ox>>n?l():s=this.writes[0].store.transaction(()=>{for(let f of this.writes)f.entry=f.store.getEntry(f.key),c(f);return!0})),s)return Fm||(Fm=s,Px=performance.now(),Fm.then(()=>{Fm=null})),s.then(f=>{if(f){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let m=this.writes[0].store.rootStore.databaseName,p=this.writes[this.writes.length-1];wA&&p&&i.push(wA(m,p.store.getEntry(p.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,this.timestamp=0,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+Ox/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=Fo.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},K_=class extends ko{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,NA.getNextMonotonicTime)())}getReadTxn(){}};a(g9,"startMonitoringTxns");g9()});var Ux,ss,CA,Vu=se(()=>{Ux=require("events"),ss=class extends Ux.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext=null;queue;hasDataListeners;drainCloseListener;currentDrainResolver=null;[Symbol.asyncIterator](){let t=new CA;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)}},CA=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0,value:void 0}}}});function bt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===Fo.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 ko;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var xx,Qa=se(()=>{xx=b(ai());km();a(bt,"transaction");(0,xx._assignPackageExport)("transaction",bt);bt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};bt.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var PA={};ye(PA,{add:()=>W_,applyReverse:()=>Bx,getRecordAtTime:()=>OA,rebuildUpdateBefore:()=>j_});function W_(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function j_(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let o=e[s];if(o?.__op__)if(o.__op__===i.__op__)n||(n={}),n[s]=o;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=o,W_(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function Bx(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=S9[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=Fx}}function OA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=At(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":Bx(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===Fx&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=At(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)o[f]&&(s[f]=d[f],o[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var S9,Fx,z_=se(()=>{Ki();a(W_,"add");W_.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};S9={add:W_};a(j_,"rebuildUpdateBefore");a(Bx,"applyReverse");Fx={};a(OA,"getRecordAtTime")});var Kx={};ye(Kx,{parse:()=>vA,streamAsJSON:()=>Gm,stringify:()=>ol});function Gm(e){return new LA({value:e})}function kx(e){return console.error(e),JSON.stringify(Hm(e))}function Hx(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function ol(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===$x)return Vx(e);if(t.resolution)return t.resolution.then(()=>ol(e));throw t}}function Vx(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+=Vx(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+ol(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function vA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),R9.test(e)?T9.parse(e):JSON.parse(e)):null}var Gx,DA,qx,T9,y9,$x,Hm,LA,R9,MA=se(()=>{Gx=require("stream"),DA=b(Q()),qx=b(require("json-bigint-fixes")),T9=(0,qx.default)({useNativeBigInt:!0}),y9=1e4,$x={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw $x};({errorToString:Hm}=DA);a(Gm,"streamAsJSON");LA=class extends Gx.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(DA.warn("Error serializing in stream",c),o={done:!1,value:{error:Hm(c)}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:Hm(c)}},i={next:a(()=>({done:!0}),"next")}}if(o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),kx)}catch(s){yield kx(s)}else yield ol(t)}else yield ol(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);Hx(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(Hm(t)),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>y9?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 Hx(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(Hm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(kx,"handleError");a(Hx,"when");a(ol,"stringify");a(Vx,"jsStringify");R9=/[[,:]\s*-?\d{16,}/;a(vA,"parse")});var t0={};ye(t0,{asyncSerialization:()=>kA,contentTypes:()=>FA,findBestSerializer:()=>Q_,getDeserializer:()=>$o,hasAsyncSerialization:()=>HA,registerContentHandlers:()=>Vm,serialize:()=>Km,serializeMessage:()=>qo,toCsvStream:()=>J_});function b9(e){try{return e?.[0]===123?BA(e):e}catch{return e}}function Vm(e){e.register(A9,{serializers:[{regex:/^application\/json$/,serializer:Gm},{regex:/^application\/cbor$/,serializer:a(function(t){return new al.EncoderStream($m).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?cl.Readable.from((0,Yi.encodeIter)(t,$m)):(0,Yi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),J_(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Yi.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,al.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function Q_(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...d]=l.split(/\s*;\s*/),f=1,m={q:1};for(let h of d){let E=h.indexOf("=");m[h.substring(0,E)]=h.substring(E+1)}f=+m.q;let p=En.get(u);if(p){let h=(p.q||1)*f;h>s&&(n=p,i=p.type||u,s=h,o=m)}}if(!n){if(r)throw new jx.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(En.keys()).join(", "),406);n=En.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function Km(e,t,r){let n=Wx&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array||e instanceof vs)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=Q_(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&e&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){if(e.mapError){let c=e.getColumns;e=e.mapError(l=>(l.toJSON=()=>({error:l.name,message:l.message,...l.partialObject}),xA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Go.createBrotliCompress)({params:{[Go.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Go.constants.BROTLI_MODE_TEXT:Go.constants.BROTLI_MODE_GENERIC,[Go.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>Wx?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Go.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function qo(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;Ho=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=Q_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=qm(e);return Ho?.length>0?(Ho.length===1?Ho[0]:Promise.all(Ho)).then(()=>qo(e,t,!0)):n}finally{Ho=void 0}}function kA(e){if(Ho)Ho.push(e);else throw new Error("Unable to serialize asynchronously")}function HA(){return!!Ho}function I9(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 N9(e){return w9.includes(e)}function C9(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,o]=s.split("=");r[i.trim()]=o.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function $o(e="",t=!1){let r=C9(e),n=r.type&&En.get(r.type)?.deserialize||O9(r);return t?s=>I9(s).then(n):n}function O9(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!N9(e.parameters.charset)&&xA.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 BA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function P9(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}function J_(e,t){let r=cl.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new Qx.Transform(n,s);return r.pipe(i)}var Yi,al,Go,jx,cl,zx,UA,Jx,xA,Qx,Xx,Zx,qm,BA,$m,En,FA,Yx,e0,A9,Wx,Ho,w9,Vo=se(()=>{MA();Yi=require("msgpackr"),al=require("cbor-x"),Go=require("zlib"),jx=b(Ee()),cl=b(require("stream"));Hr();zx=b(ai()),UA=b(fe());G();Jx=b(require("yaml")),xA=b(ir());is();Qx=require("json2csv"),Xx=b(require("fastify-plugin")),Zx=UA.default.get(x.SERIALIZATION_BIGINT)!==!1,qm=Zx?ol:JSON.stringify,BA=Zx?vA:JSON.parse,$m={useRecords:!1,useToJSON:!0},En=new Map,FA=En;Ue.contentTypes=FA;(0,zx._assignPackageExport)("contentTypes",FA);En.set("application/json",{serializeStream:Gm,serialize:qm,deserialize(e){return BA(e)},q:.8});Yx=new al.Encoder($m);En.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new al.EncoderStream($m).end(e)},serialize:Yx.encode,deserialize:Yx.decode,q:1});En.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?cl.Readable.from((0,Yi.encodeIter)(e,$m)):(0,Yi.pack)(e)},serialize:Yi.pack,deserialize:Yi.unpack,q:.9});En.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),J_(e,e?.getColumns?.())},serialize(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),e&&!e[Symbol.iterator]&&(e=[e.toJSON?e.toJSON():e]),J_(e,e?.getColumns?.())},q:.1});En.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return cl.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});En.set("text/yaml",{serialize(e){return Jx.stringify(e,{aliasDuplicateObjects:!1})},q:.7});En.set("text/event-stream",{serializeStream:a(function(e){return cl.Readable.from(P9(e,this.serialize))},"serializeStream"),serialize:a(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
4
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw Pt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}vZ(n,r),sx(n,r),gA(n);let s=n.toJSON();if(bZ.config=s,kt=$u(s),kt.logging_rotation_rotate)for(let i in QU)kt[i]&&Pt.error(`Config ${QU[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Pt.trace(wZ)}}a(v_,"initConfig");function vZ(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ns.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ns.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60,replicate:!1}),n=!0),n){if(Pt.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);Qr.writeFileSync(t,String(e))}}a(vZ,"checkForUpdatedConfig");function gA(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 qu.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 qu.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=gZ(r,t);if(n.error)throw qu.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(gA,"validateConfig");function MZ(e,t){kt===void 0&&(kt={});let r=ci[e.toLowerCase()];if(r===void 0){Pt.trace(`Unable to update config object because config param '${e}' does not exist`);return}kt[r.toLowerCase()]=t}a(MZ,"updateConfigObject");function nx(e,t,r=void 0,n=!1,s=!1,i=!1){kt===void 0&&v_();let o=rx(ci.hdb_root),c=ns.join(o,Ds.HDB_CONFIG_FILE),l=za(c),u;if(r&&kt){let m=!1;for(let p in r)if(r[p]!=kt[p.toLowerCase()]){m=!0;break}if(!m){Pt.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===rs.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=ci[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=_A(m,t);l.setIn([...p],h)}else for(let m in r){let p=ci[m.toLowerCase()];if(p===rs.HTTP_SECUREPORT&&r[m]===kt[rs.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===rs.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===kt[rs.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===rs.DATABASES){u=r[m];continue}if(p?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!p&&(m.endsWith("_package")||m.endsWith("_port"))&&(p=m),p!==void 0){let h=p.split("_"),E=Ds.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let _=_A(p,r[m]);p==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],_)}catch(R){Pt.error(R)}}}u&&tx(l,u),gA(l);let d=l.getIn(["rootPath"]),f=ns.join(d,Ds.HDB_CONFIG_FILE);if(n===!0&&UZ(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);Qr.writeFileSync(f,String(l)),s&&(kt=$u(l.toJSON())),Pt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(nx,"updateConfigValue");function UZ(e,t){try{let r=ns.join(AZ(t),`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${Ds.HDB_CONFIG_FILE}.bak`);Qr.copySync(e,r),Pt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Pt.error(NZ),Pt.error(r)}}a(UZ,"backupConfigFile");var xZ=["databases"];function $u(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),L_=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!xZ.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!rs[l.toUpperCase()]&&ci[l]&&(s[ci[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a($u,"flattenConfig");function _A(e,t){if(e===rs.CLUSTERING_NODENAME||e===rs.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(SZ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||wr.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return wr.autoCast(t)}a(_A,"castConfigValue");function BZ(){let e=wr.getPropsFilePath(),t=sl(e);return za(t).toJSON()}a(BZ,"getConfiguration");async function FZ(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return nx(void 0,void 0,s,!0),PZ}catch(i){throw typeof i=="string"||i instanceof String?yZ(i,i,RZ.BAD_REQUEST,void 0,void 0,!0):i}}a(FZ,"setConfiguration");function SA(){let e=wr.getPropsFilePath();try{Qr.accessSync(e,Qr.constants.F_OK|Qr.constants.R_OK)}catch(n){if(!wr.noBootFile())throw Pt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=sl(e);return za(t).toJSON()}a(SA,"readConfigFile");function za(e){return D_.parseDocument(Qr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(za,"parseYamlDoc");function sx(e,t,r={}){let n=process.env.HARPER_DEFAULT_CONFIG,s=process.env.HARPER_SET_CONFIG;if(!n&&!s)return;let{applyRuntimeEnvConfig:i}=(zU(),D(jU)),o=e.getIn(["rootPath"]);if(!o){Pt.warn("Cannot apply runtime env config: rootPath not found in config");return}let c=e.toJSON();try{i(c,o,r);let l=D_.parseDocument(D_.stringify(c),{simpleKeys:!0});Object.assign(e,l)}catch(l){throw Pt.error(`Failed to apply runtime env config: ${l.message}`),l}if(t)try{if(e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml: ${e.errors}`);Qr.writeFileSync(t,String(e)),Pt.debug("Config file updated with runtime env var values")}catch(l){throw Pt.error(`Failed to write config file after applying runtime env vars: ${l.message}`),l}}a(sx,"applyRuntimeEnvVarConfig");function kZ(){let e=SA(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=wr.isEmptyOrZeroLength(t)?[]:t;let r=JU(t);if(r)throw qu.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=wr.isEmptyOrZeroLength(n)?[]:n;let s=JU(n);if(s)throw qu.CONFIG_VALIDATION(s.message);if(!wr.isEmptyOrZeroLength(n)&&!wr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!wr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw qu.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(kZ,"getClusteringRoutes");function ix(e){let t=XU(e);kt={};for(let r in ci){let n=t.get(r.toUpperCase());if(wr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ci[r].toLowerCase();s===rs.LOGGING_ROOT?kt[s]=ns.dirname(n):kt[s]=n}return kt}a(ix,"initOldConfig");function HZ(e){let t=SA();return TZ.get(t,e.replaceAll("_","."))}a(HZ,"getConfigFromFile");async function GZ(e,t){let r=za(sl());if(r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);await Qr.writeFile(sl(),String(r))}a(GZ,"addConfig");function qZ(e){let t=sl(wr.getPropsFilePath()),r=za(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ns.join(n,Ds.HDB_CONFIG_FILE);Qr.writeFileSync(s,String(r))}a(qZ,"deleteConfigFromFile");function $Z(){return L_||(v_(),L_)}a($Z,"getConfigObj");function VZ(){return kt||v_(),kt}a(VZ,"getFlatConfigObj")});var fe=M((lx,ux)=>{"use strict";var TA=require("fs-extra"),il=require("path"),ox=require("os"),KZ=require("properties-reader"),Om=Q(),Cm=ae(),Ge=(G(),D(j)),M_=_t(),YZ="Error initializing environment manager",U_="BOOT_PROPS_FILE_PATH",ax=!1,WZ={[Ge.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Fo={};Object.assign(lx,ux.exports={BOOT_PROPS_FILE_PATH:U_,getHdbBasePath:jZ,setHdbBasePath:zZ,get:cx,initSync:QZ,setProperty:tt,initTestEnvironment:XZ});function jZ(){return Fo[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(jZ,"getHdbBasePath");function zZ(e){Fo[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(zZ,"setHdbBasePath");function cx(e){let t=M_.getConfigValue(e);return t===void 0?Fo[e]:t}a(cx,"get");function tt(e,t){WZ[e]&&(Fo[e]=t),M_.updateConfigObject(e,t)}a(tt,"setProperty");function JZ(){let e;try{e=Cm.getPropsFilePath(),TA.accessSync(e,TA.constants.F_OK|TA.constants.R_OK),ax=!0;let t=KZ(e);return Fo[Ge.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Ge.HDB_SETTINGS_NAMES.INSTALL_USER),Fo[Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Fo[U_]=e,!0}catch{return Om.trace(`Environment manager found no properties file at ${e}`),!1}}a(JZ,"doesPropFileExist");function QZ(e=!1){try{(ax||JZ()||Cm.noBootFile()||e)&&(M_.initConfig(e),Fo[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=M_.getConfigValue(Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Om.error(YZ),Om.error(t),console.error(t),process.exit(1)}}a(QZ,"initSync");function XZ(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=il.join(__dirname,"../../","unitTests");Fo[U_]=il.join(l,"hdb_boot_properties.file"),tt(Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,il.join(l,"settings.test")),tt(Ge.HDB_SETTINGS_NAMES.INSTALL_USER,ox.userInfo()?ox.userInfo().username:void 0),tt(Ge.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),tt(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY,il.join(l,"envDir","log")),tt(Ge.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),tt(Ge.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),tt(Ge.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),tt(Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,il.join(l,"envDir")),tt(Ge.CONFIG_PARAMS.STORAGE_PATH,il.join(l,"envDir")),s&&(tt(Ge.CONFIG_PARAMS.HTTP_SECUREPORT,cx(Ge.CONFIG_PARAMS.HTTP_PORT)),tt(Ge.CONFIG_PARAMS.HTTP_PORT,null)),tt(Ge.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),tt(Ge.CONFIG_PARAMS.HTTP_PORT,9926),tt(Ge.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),tt(Ge.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),tt(Ge.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Cm.isEmpty(i)?!1:i),tt(Ge.CONFIG_PARAMS.HTTP_CORS,Cm.isEmpty(i)?!1:i),tt(Ge.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),tt(Ge.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),tt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),tt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),tt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,il.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),tt(Ge.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Cm.isEmpty(c)?!1:c),o&&(tt("CORS_ACCESSLIST",o),tt(Ge.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(tt(Ge.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),tt(Ge.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(tt(Ge.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),tt(Ge.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(tt(Ge.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),tt(Ge.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${U_}. Please check your boot props and settings files`;Om.fatal(r),Om.error(t)}}a(XZ,"initTestEnvironment")});var yA=M((_Oe,dx)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n,basename:s}=require("node:path"),{existsSync:i,statSync:o,readFileSync:c,writeFileSync:l,unlinkSync:u}=require("node:fs"),{isMainThread:d}=require("node:worker_threads"),{spawnSync:f,spawn:m}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:p}=yt(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],E="ts-build";if(d){let S=!1,y=!1;if(y=i(n(p,E))){let w=new Set;e.sync(h.map(I=>`${I}/**/*.ts`),{cwd:p}).forEach(I=>{let H=0,X=0;try{w.add(I),H=o(n(p,I)).mtimeMs-5e3,X=o(n(p,E,I.replace(/.ts$/,".js"))).mtimeMs}catch{}H>X&&(S=!0)}),e.sync(h.map(I=>`${I}/**/*.js`),{cwd:n(p,E)}).forEach(I=>{if(!w.has(I.replace(/.js$/,".ts")))try{u(n(p,E,I))}catch{}})}else S=!0;if(S){console.log("Compiling TypeScript...");let w=f("npx",["tsc"],{cwd:p});if(w.stdout?.length&&console.log(w.stdout.toString()),w.stderr?.length&&console.log(w.stderr.toString()),y){let I=n(t(),"harperdb-tsc.pid"),H=!1;if(i(I))try{process.kill(+c(I,"utf8"),0),H=!0}catch{}if(!H){console.log("Starting background TypeScript compilation...");let X=m("npx",["tsc","--watch"],{detached:!0,cwd:p,stdio:"ignore"});X.on("error",q=>{console.error("Error trying to compile TypeScript",q)}),X.pid&&l(I,String(X.pid),"utf-8"),X.unref()}}}}let _=dx.constructor,R=_._findPath;_._findPath=function(S,y,w){if(S.startsWith(".")&&!w&&y.length===1&&y[0].startsWith(p)&&!y[0].includes("node_modules")){let I=r(p,y[0]),H;I.startsWith(E)?H=n(p,r(E,I)):H=n(p,E,I),(S.endsWith(".js")||S.endsWith(".ts"))&&(S=S.slice(0,-3));let X=n(H,S),q=X+".js";if(i(q))return q;if(s(X).includes(".")&&i(X))return X}return R(S,y,w)}}});var Rt=M((gOe,gx)=>{"use strict";var Mm=(G(),D(j)),ZZ=ae(),Un=fe(),Um=require("path"),e9=require("minimist"),fx=require("fs-extra"),mx=require("lodash");Un.initSync();var{CONFIG_PARAMS:Ja,DATABASES_PARAM_CONFIG:Pm,SYSTEM_SCHEMA_NAME:x_}=Mm,Lm,Dm,vm;function px(){if(Lm!==void 0)return Lm;if(Un.getHdbBasePath()!==void 0)return Lm=Un.get(Ja.STORAGE_PATH)||Um.join(Un.getHdbBasePath(),Mm.DATABASES_DIR_NAME),Lm}a(px,"getBaseSchemaPath");function hx(){if(Dm!==void 0)return Dm;if(Un.getHdbBasePath()!==void 0)return Dm=_x(x_),Dm}a(hx,"getSystemSchemaPath");function Ex(){if(vm!==void 0)return vm;if(Un.getHdbBasePath()!==void 0)return vm=Un.get(Mm.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Um.join(Un.getHdbBasePath(),Mm.TRANSACTIONS_DIR_NAME),vm}a(Ex,"getTransactionAuditStoreBasePath");function t9(e,t){let r=Un.get(Ja.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Um.join(Ex(),e.toString())}a(t9,"getTransactionAuditStorePath");function _x(e,t){e=e.toString(),t=t&&t.toString();let r=Un.get(Mm.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Um.join(px(),e)}a(_x,"getSchemaPath");function r9(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,e9(process.argv));let n=r[Ja.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!ZZ.isObject(n))throw o;i=n}for(let o of i){let c=o[x_];if(!c)continue;let l=Un.get(Ja.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Pm.PATH];if(u)return mx.set(l,[x_,Pm.TABLES,t,Pm.PATH],u),Un.setProperty(Ja.DATABASES,l),u;let d=c?.[Pm.PATH];if(d)return mx.set(l,[x_,Pm.PATH],d),Un.setProperty(Ja.DATABASES,l),d}}let s=r[Ja.STORAGE_PATH.toUpperCase()];if(s){if(!fx.pathExistsSync(s))throw new Error(s+" does not exist");let i=Um.join(s,e);return fx.mkdirsSync(i),Un.setProperty(Ja.STORAGE_PATH,s),i}return hx()}a(r9,"initSystemSchemaPaths");function n9(){Lm=void 0,Dm=void 0,vm=void 0}a(n9,"resetPaths");gx.exports={getBaseSchemaPath:px,getSystemSchemaPath:hx,getTransactionAuditStorePath:t9,getTransactionAuditStoreBasePath:Ex,getSchemaPath:_x,initSystemSchemaPaths:r9,resetPaths:n9}});var xn=M((ROe,bx)=>{"use strict";var s9=Jr().LMDB_ERRORS_ENUM,TOe=require("lmdb"),i9=Jt(),yOe=require("buffer").Buffer,{OVERFLOW_MARKER:Sx,MAX_SEARCH_KEY_LENGTH:B_}=i9,Tx=["number","string","symbol","boolean","bigint"];function o9(e){if(e=e?.primaryStore||e,!e)throw new Error(s9.ENV_REQUIRED)}a(o9,"validateEnv");function a9(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(a9,"stringifyData");function c9(e){return e instanceof Date?e.valueOf():e}a(c9,"convertKeyValueToWrite");function l9(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(Tx.includes(typeof e))return e.length>B_?[e.slice(0,B_)+Sx]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(Tx.includes(typeof i))i.length>B_?r.push(i.slice(0,B_)+Sx):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(l9,"getIndexedValues");var F_=0,yx=0;function Rx(){yx=Date.now()-performance.now()}a(Rx,"adjustStartTime");Rx();var u9=6e4;setInterval(Rx,u9).unref();function d9(){let e=performance.now()+yx;return e>F_?(F_=e,e):(F_+=488e-6,F_)}a(d9,"getNextMonotonicTime");bx.exports={validateEnv:o9,stringifyData:a9,convertKeyValueToWrite:c9,getNextMonotonicTime:d9,getIndexedValues:l9}});var xm=M((AOe,Ax)=>{"use strict";var f9=(G(),D(j)).OPERATIONS_ENUM,RA=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=f9.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Ax.exports=RA});var Bm=M((NOe,Cx)=>{"use strict";var wOe=xm(),k_=(G(),D(j)),bA=ae(),Ix=Q(),m9=require("uuid"),{handleHDBError:H_,hdbErrors:p9}=Ee(),{HDB_ERROR_MSGS:G_,HTTP_STATUS_CODES:q_}=p9;Cx.exports=wx;function wx(e,t,r){for(let s=0;s<t.length;s++)Nx(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];h9(i,r,e.operation)}}a(wx,"processRows");wx.validateAttribute=Nx;function Nx(e){if(Buffer.byteLength(String(e))>k_.INSERT_MAX_CHARACTER_SIZE)throw H_(new Error,G_.ATTR_NAME_LENGTH_ERR(e),q_.BAD_REQUEST,void 0,void 0,!0);if(bA.isEmptyOrZeroLength(e)||bA.isEmpty(e.trim()))throw H_(new Error,G_.ATTR_NAME_NULLISH_ERR,q_.BAD_REQUEST,void 0,void 0,!0)}a(Nx,"validateAttribute");function h9(e,t,r){if(!e.hasOwnProperty(t)||bA.isEmptyOrZeroLength(e[t])){if(r===k_.OPERATIONS_ENUM.INSERT||r===k_.OPERATIONS_ENUM.UPSERT){e[t]=m9.v4();return}throw Ix.error("Update transaction aborted due to record with no hash value:",e),H_(new Error,G_.RECORD_MISSING_HASH_ERR,q_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>k_.INSERT_MAX_CHARACTER_SIZE)throw Ix.error(e),H_(new Error,G_.HASH_VAL_LENGTH_ERR,q_.BAD_REQUEST,void 0,void 0,!0)}a(h9,"validateHash")});function Mx(e){wA=e}function g9(){_9=setInterval(function(){for(let e of AA)if(e.timeout<=0){let t=e.getContext()?.url;Dx.error(`Transaction was open too long and has been committed, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`,...e.startedFrom?[`was started from ${e.startedFrom.resourceName}.${e.startedFrom.method}`]:[],...IA?["starting stack trace",e.stackTraces]:[]),e.commit(),e.timeout=$_}else e.timeout-=$_},$_).unref()}var NA,Lx,Dx,Y_,vx,Ox,AA,E9,IA,ko,Fm,Px,wA,$_,V_,Ho,K_,_9,km=se(()=>{NA=b(xn()),Lx=b(Ee()),Dx=b(Q()),Y_=b(fe());G();vx=b(ae()),Ox=100,AA=new Set,E9=(0,vx.convertToMS)(Y_.get(x.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,IA=Y_.get(x.STORAGE_DEBUGLONGTRANSACTIONS),ko={CLOSED:0,OPEN:1,LINGERING:2};a(Mx,"replicationConfirmation");$_=Y_.get(x.STORAGE_MAXTRANSACTIONOPENTIME)??3e4,V_=class extends Error{static{a(this,"StartedTransaction")}},Ho=class e{static{a(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;timeout;validated=0;timestamp=0;overloadChecked;open=ko.OPEN;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.timeout=$_,this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===ko.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,IA&&(this.stackTraces=[new V_]),this.readTxn.openTimer&&(this.readTxn.openTimer=0),AA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,IA&&this.stackTraces.push(new V_),this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(AA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Fm&&!this.overloadChecked&&performance.now()-Px>E9)throw new Lx.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===ko.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===ko.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,NA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let f=this.validated;this.validated=this.writes.length;for(let p=f;p<this.validated;p++)this.writes[p]?.validate?.(this.timestamp);let m;for(let p=f;p<this.validated;p++){let h=this.writes[p];h&&(h.before||h.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let p=0;p<2;p++){let h;for(let E=f;E<this.validated;E++){let _=this.writes[E];if(!_)continue;let R=_[p===0?"before":"beforeIntermediate"];if(R){let S=R();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(p){throw this.abort(),p}return this.commit(t)})()}catch(f){throw this.abort(),f}n||this.doneReadTxn(),this.open=t?.doneWriting?ko.LINGERING:ko.OPEN;let s,i=[],o=0;this.writes=this.writes.filter(f=>f);let c=a(f=>{f.commit(r,f.entry,n)},"doWrite"),l=a(()=>{let f=this.writes[o++];if(f)if(f.key){(n>0||!f.entry)&&(f.entry=f.store.getEntry(f.key));let m=f.store.ifVersion(f.key,f.entry?.version??null,l);s=s||m}else l();else for(let m of this.writes)c(m)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<Ox>>n?l():s=this.writes[0].store.transaction(()=>{for(let f of this.writes)f.entry=f.store.getEntry(f.key),c(f);return!0})),s)return Fm||(Fm=s,Px=performance.now(),Fm.then(()=>{Fm=null})),s.then(f=>{if(f){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let m=this.writes[0].store.rootStore.databaseName,p=this.writes[this.writes.length-1];wA&&p&&i.push(wA(m,p.store.getEntry(p.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,this.timestamp=0,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+Ox/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=ko.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},K_=class extends Ho{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,NA.getNextMonotonicTime)())}getReadTxn(){}};a(g9,"startMonitoringTxns");g9()});var Ux,ss,CA,Vu=se(()=>{Ux=require("events"),ss=class extends Ux.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext=null;queue;hasDataListeners;drainCloseListener;currentDrainResolver=null;[Symbol.asyncIterator](){let t=new CA;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)}},CA=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0,value:void 0}}}});function bt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===ko.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 Ho;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var xx,Qa=se(()=>{xx=b(ai());km();a(bt,"transaction");(0,xx._assignPackageExport)("transaction",bt);bt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};bt.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var PA={};ye(PA,{add:()=>W_,applyReverse:()=>Bx,getRecordAtTime:()=>OA,rebuildUpdateBefore:()=>j_});function W_(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function j_(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let o=e[s];if(o?.__op__)if(o.__op__===i.__op__)n||(n={}),n[s]=o;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=o,W_(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function Bx(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=S9[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=Fx}}function OA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=At(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":Bx(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===Fx&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=At(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)o[f]&&(s[f]=d[f],o[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var S9,Fx,z_=se(()=>{Ki();a(W_,"add");W_.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};S9={add:W_};a(j_,"rebuildUpdateBefore");a(Bx,"applyReverse");Fx={};a(OA,"getRecordAtTime")});var Kx={};ye(Kx,{parse:()=>vA,streamAsJSON:()=>Gm,stringify:()=>ol});function Gm(e){return new LA({value:e})}function kx(e){return console.error(e),JSON.stringify(Hm(e))}function Hx(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function ol(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===$x)return Vx(e);if(t.resolution)return t.resolution.then(()=>ol(e));throw t}}function Vx(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+=Vx(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+ol(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function vA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),R9.test(e)?T9.parse(e):JSON.parse(e)):null}var Gx,DA,qx,T9,y9,$x,Hm,LA,R9,MA=se(()=>{Gx=require("stream"),DA=b(Q()),qx=b(require("json-bigint-fixes")),T9=(0,qx.default)({useNativeBigInt:!0}),y9=1e4,$x={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw $x};({errorToString:Hm}=DA);a(Gm,"streamAsJSON");LA=class extends Gx.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(DA.warn("Error serializing in stream",c),o={done:!1,value:{error:Hm(c)}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:Hm(c)}},i={next:a(()=>({done:!0}),"next")}}if(o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),kx)}catch(s){yield kx(s)}else yield ol(t)}else yield ol(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);Hx(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(Hm(t)),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>y9?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 Hx(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(Hm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(kx,"handleError");a(Hx,"when");a(ol,"stringify");a(Vx,"jsStringify");R9=/[[,:]\s*-?\d{16,}/;a(vA,"parse")});var t0={};ye(t0,{asyncSerialization:()=>kA,contentTypes:()=>FA,findBestSerializer:()=>Q_,getDeserializer:()=>Vo,hasAsyncSerialization:()=>HA,registerContentHandlers:()=>Vm,serialize:()=>Km,serializeMessage:()=>$o,toCsvStream:()=>J_});function b9(e){try{return e?.[0]===123?BA(e):e}catch{return e}}function Vm(e){e.register(A9,{serializers:[{regex:/^application\/json$/,serializer:Gm},{regex:/^application\/cbor$/,serializer:a(function(t){return new al.EncoderStream($m).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?cl.Readable.from((0,Yi.encodeIter)(t,$m)):(0,Yi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),J_(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Yi.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,al.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function Q_(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...d]=l.split(/\s*;\s*/),f=1,m={q:1};for(let h of d){let E=h.indexOf("=");m[h.substring(0,E)]=h.substring(E+1)}f=+m.q;let p=En.get(u);if(p){let h=(p.q||1)*f;h>s&&(n=p,i=p.type||u,s=h,o=m)}}if(!n){if(r)throw new jx.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(En.keys()).join(", "),406);n=En.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function Km(e,t,r){let n=Wx&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array||e instanceof vs)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=Q_(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&e&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){if(e.mapError){let c=e.getColumns;e=e.mapError(l=>(l.toJSON=()=>({error:l.name,message:l.message,...l.partialObject}),xA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,qo.createBrotliCompress)({params:{[qo.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?qo.constants.BROTLI_MODE_TEXT:qo.constants.BROTLI_MODE_GENERIC,[qo.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>Wx?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,qo.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function $o(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;Go=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=Q_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=qm(e);return Go?.length>0?(Go.length===1?Go[0]:Promise.all(Go)).then(()=>$o(e,t,!0)):n}finally{Go=void 0}}function kA(e){if(Go)Go.push(e);else throw new Error("Unable to serialize asynchronously")}function HA(){return!!Go}function I9(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 N9(e){return w9.includes(e)}function C9(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,o]=s.split("=");r[i.trim()]=o.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function Vo(e="",t=!1){let r=C9(e),n=r.type&&En.get(r.type)?.deserialize||O9(r);return t?s=>I9(s).then(n):n}function O9(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!N9(e.parameters.charset)&&xA.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 BA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function P9(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}function J_(e,t){let r=cl.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new Qx.Transform(n,s);return r.pipe(i)}var Yi,al,qo,jx,cl,zx,UA,Jx,xA,Qx,Xx,Zx,qm,BA,$m,En,FA,Yx,e0,A9,Wx,Go,w9,Ko=se(()=>{MA();Yi=require("msgpackr"),al=require("cbor-x"),qo=require("zlib"),jx=b(Ee()),cl=b(require("stream"));Hr();zx=b(ai()),UA=b(fe());G();Jx=b(require("yaml")),xA=b(ir());is();Qx=require("json2csv"),Xx=b(require("fastify-plugin")),Zx=UA.default.get(x.SERIALIZATION_BIGINT)!==!1,qm=Zx?ol:JSON.stringify,BA=Zx?vA:JSON.parse,$m={useRecords:!1,useToJSON:!0},En=new Map,FA=En;Ue.contentTypes=FA;(0,zx._assignPackageExport)("contentTypes",FA);En.set("application/json",{serializeStream:Gm,serialize:qm,deserialize(e){return BA(e)},q:.8});Yx=new al.Encoder($m);En.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new al.EncoderStream($m).end(e)},serialize:Yx.encode,deserialize:Yx.decode,q:1});En.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?cl.Readable.from((0,Yi.encodeIter)(e,$m)):(0,Yi.pack)(e)},serialize:Yi.pack,deserialize:Yi.unpack,q:.9});En.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),J_(e,e?.getColumns?.())},serialize(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),e&&!e[Symbol.iterator]&&(e=[e.toJSON?e.toJSON():e]),J_(e,e?.getColumns?.())},q:.1});En.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return cl.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});En.set("text/yaml",{serialize(e){return Jx.stringify(e,{aliasDuplicateObjects:!1})},q:.7});En.set("text/event-stream",{serializeStream:a(function(e){return cl.Readable.from(P9(e,this.serialize))},"serializeStream"),serialize:a(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
5
5
|
`),e.data){let r=e.data;typeof r=="object"&&(r=qm(r)),t+="data: "+r+`
|
|
6
6
|
`}return e.id&&(t+="id: "+e.id+`
|
|
7
7
|
`),e.retry&&(t+="retry: "+e.retry+`
|
|
@@ -10,15 +10,15 @@
|
|
|
10
10
|
|
|
11
11
|
`:`data: ${e}
|
|
12
12
|
|
|
13
|
-
`},"serialize"),compressible:!1,q:.8});En.set("application/x-www-form-urlencoded",{deserialize(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):e,r={};for(let[n,s]of new URLSearchParams(t))if(r.hasOwnProperty(n)){let i=r[n];Array.isArray(i)?i.push(s):r.key=[i,s]}else r[n]=s;return r},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});e0={type:"application/json",serializeStream:Gm,serialize:qm,deserialize:b9,q:.5};En.set("*/*",e0);En.set("",e0);a(b9,"tryJSONParse");a(Vm,"registerContentHandlers");A9=(0,Xx.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Q_(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&o.serializeStream){if(l.mapError){let d=l.getColumns;l=l.mapError(f=>(f.toJSON=()=>({error:f.name,message:f.message,...f.partialObject}),f)),l.getColumns=d}u=o.serializeStream}else u=o.serialize;return u(l,{headers:{set:a((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});a(Q_,"findBestSerializer");Wx=UA.default.get(x.HTTP_COMPRESSIONTHRESHOLD);a(Km,"serialize");a(qo,"serializeMessage");a(kA,"asyncSerialization");a(HA,"hasAsyncSerialization");a(I9,"streamToBuffer");w9=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(N9,"isBufferEncoding");a(C9,"parseContentType");a($o,"getDeserializer");a(O9,"deserializerUnknownType");a(P9,"transformIterable");a(J_,"toCsvStream")});var ig={};ye(ig,{Blob:()=>vs,blobsWereEncoded:()=>ul,cleanupOrphans:()=>V9,databasePaths:()=>qA,decodeBlobsWithWrites:()=>sg,decodeFromDatabase:()=>Yo,decodeWithBlobCallback:()=>zm,deleteBlob:()=>tg,deleteBlobsInObject:()=>Za,deleteRootBlobPathsForDB:()=>KA,encodeBlobsAsBuffers:()=>G9,encodeBlobsWithFilePath:()=>ng,findBlobsInObject:()=>ll,getFileId:()=>rg,getFilePathForBlob:()=>d0,getRootBlobPathsForDB:()=>zu,isSaving:()=>U9,saveBlob:()=>jm,setDeletionDelay:()=>M9,startPreCommitBlobsForRecord:()=>YA});function l0(){}function tg(e){let t=d0(e);t&&setTimeout(()=>{(0,je.unlink)(t,r=>{r&&Lt.default.debug?.("Error trying to remove blob file",r)})},u0)}function M9(e){u0=e}function jm(e,t=!1){let r=Gr.get(e);if(!r)r={storageIndex:0,fileId:null,store:Bn},Gr.set(e,r);else{if(r.fileId)return r;r.store=Bn}return r.deleteOnFailure=t,B9(r),r.source?GA(e,r.source,r):r.contentBuffer?x9(e,r):GA(e,Xa.Readable.from(e.stream()),r),r}function GA(e,t,r){let{filePath:n,fileId:s,store:i,compress:o,flush:c}=r;return r.saving=new Promise((l,u)=>{let d=s+":blob";if(!i.attemptLock(d,0))throw new Error(`Unable to get lock for blob file ${s}`);let f=(0,je.createWriteStream)(n,{autoClose:!1,flags:"w"}),m=!1;e.size!==void 0&&(f.write(h(e.size)),m=!0);let p;o?(m||f.write(D9),p=(0,eg.createDeflate)(),(0,Xa.pipeline)(t,p,f,E)):(m||f.write(L9),(0,Xa.pipeline)(t,f,E));function h(_){let R=BigInt(_),S=new Uint8Array(Nr),y=new DataView(S.buffer);return R|=BigInt(o?VA:c0)<<48n,y.setBigInt64(0,R),S}a(h,"createHeader");function E(_){let R=f.fd;if(_){if(i.unlock(d,0),R&&((0,je.close)(R),f.fd=null),r.deleteOnFailure)(0,je.unlink)(n,S=>{S&&Lt.default.debug?.("Error while deleting aborted blob file",S)});else try{if((0,je.statSync)(n).size===0){let S=Buffer.from(_.toString());(0,je.writeFile)(n,Buffer.concat([h(BigInt(S.length)+0xff000000000000n),S]),y=>{y&&Lt.default.debug?.("Error write error message to blob file",y)})}}catch(S){Lt.default.debug?.("Error checking blob file after abort",S)}u(_)}else{if(!m){m=!0;let S=p?p.bytesWritten:f.bytesWritten-Nr;e.size=S,(0,je.write)(R,h(S),0,Nr,0,E);return}i.unlock(d,0),c?(0,je.fdatasync)(R,S=>{S&&u(S),l(),(0,je.close)(R),f.fd=null}):(l(),(0,je.close)(R),f.fd=null)}}a(E,"finished")}),e}function rg(e){return Gr.get(e)?.fileId}function U9(e){return Gr.get(e)?.saving}function d0(e){let t=Gr.get(e);return t?.fileId&&ju(t)}function zu(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=qA.get(e);if(!t){if(!e.databaseName)return Lt.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,Wm.get)(x.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,ji.join)(n,e.databaseName)):t=[(0,ji.join)((0,Wm.getHdbBasePath)(),"blobs",e.databaseName)],qA.set(e,t)}return t}async function KA(e){let t=zu(e);t&&await Promise.all(t.map(r=>f0(r)))}async function f0(e){if((0,je.existsSync)(e)){for(let t of await(0,Fn.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await f0((0,ji.join)(e,t.name));else try{await(0,Fn.unlink)((0,ji.join)(e,t.name))}catch(r){Lt.default.warn?.("Error deleting file",r)}try{await(0,Fn.rmdir)(e)}catch(t){Lt.default.warn?.("Error deleting directory",t)}}}function ju({storageIndex:e,fileId:t,store:r}){let n=zu(r);return(0,ji.join)(n[e],t.slice(-9,-6)||"0",t.slice(-6,-3)||"0",t.length<=9?t.slice(-3):t.slice(0,-9)+t.slice(-3))}function x9(e,t){let r=t.contentBuffer,n=r.length;if(!(n<a0))return e.size=n,GA(e,Xa.Readable.from([r]),t)}function B9(e){let t=zu(e.store),r=F9(),n=t?.length>1?k9(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=ju(e),o=(0,ji.dirname)(i);(0,je.existsSync)(o)||(0,$A.ensureDirSync)(o),e.filePath=i}function F9(){let e=i0.get(Bn);if(!e){let t=0,r=zu(Bn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let o=0;if((0,je.existsSync)(n))for(let c of(0,je.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>o&&(o=l)}s+=o,n=(0,ji.join)(n,o.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(Bn.getUserSharedBuffer("blob-file-id",e.buffer)),i0.set(Bn,e)}return Number(Atomics.add(e,0,1n))}function k9(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(Z_);for(let i=0;i<s.length;i++)s[i]=i%e.length;e.frequencyTable=s}return(e.lastUpdated??0)+6e4<r&&(e.lastUpdated=r,H9(e)),e.frequencyTable[t%Z_]}async function H9(e){if(!Fn.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let o;try{o=await(0,Fn.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,$A.ensureDirSync)(s),o=await(0,Fn.statfs)(s)}let c=o.bavail*o.bsize;return Math.pow(c,.8)})),r=new Array(Z_),n=t.map(s=>1/s);for(let s=0;s<Z_;s++){let i=1/0,o=0;for(let c=0;c<n.length;c++)n[c]<i&&(o=c,i=n[c]);n[o]+=1/t[o],r[s]=o}e.frequencyTable=r}function ng(e,t,r){Ku=t,Bn=r,ul=!1;try{return e()}finally{Ku=void 0,Bn=void 0}}function G9(e){Xr=[];let t;try{t=e()}catch(n){throw Xr=void 0,n}let r=Xr.length<2?Xr[0]:Promise.all(Xr);return Xr=void 0,r?r.then(()=>e()):t}function sg(e,t,r){try{Xr=[],Ko=r,Bn=t,e()}catch(s){throw Ko=void 0,Xr=void 0,s}Ko=void 0;let n=Xr.length<2?Xr[0]:Promise.all(Xr);return Xr=void 0,n}function zm(e,t,r){Bn=r;try{return Ko=t,e()}finally{Ko=void 0}}function Yo(e,t){return Bn=t,e()}function Za(e){ll(e,t=>{tg(t)})}function ll(e,t){if(e instanceof vs)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&ll(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&ll(e[r],t)}}function YA(e,t){let r;for(let n in e){let s=e[n];if(s instanceof Wu&&s.saveBeforeCommit){Bn=t;let i=jm(s,!0).saving??Promise.resolve();r=r?Promise.all(r,i):i}}return r}function $9(){return class{static{a(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}async function V9(e,t){let r,n,s=0;for(let d in e){let f=e[d];if(r=f.primaryStore.rootStore,n=f.auditStore,n)break}let i=new Set,o=zu(r);if(o)for(let d of o)await c(d);return await l(),Lt.default.warn?.(`Cleaned Orphan Blobs from ${t??"database"}, deleted ${s} blobs)`),s;async function c(d){try{if(!(0,je.existsSync)(d))return;for(let f of await(0,Fn.readdir)(d,{withFileTypes:!0})){let m=(0,ji.join)(d,f.name);if(f.isDirectory())await c(m);else if(i.size%1e6===0&&Lt.default.info?.("Finding all blobs for orphan check, paths accumulated",i.size),i.add(m),i.size%2e3===0){let p=(0,o0.getHeapStatistics)();p.used_heap_size>p.heap_size_limit*(.8-i.size/16e6)&&await l()}}}catch(f){Lt.default.error?.("Error searching path for blobs",d,f)}}a(c,"searchPath");async function l(){let d=0,f=Math.floor(((0,Wm.get)(x.STORAGE_BLOBCLEANUPSPEED)??1e4)/1e3+1);for(let m in e){Lt.default.warn?.("Checking for references to potential orphaned blobs in table",m);let p=e[m];for(let h of p.primaryStore.getRange({versions:!0,snapshot:!1,lazy:!0}))try{h.metadataFlags&Zr&&h.value&&u(h.value),d++%f===0?await(0,Yu.setTimeout)(1):await(0,Yu.setImmediate)()}catch(E){Lt.default.error?.("Error searching table",m," for references to potential orphaned blobs failed",E)}}Lt.default.warn?.("Checking for references to potential orphaned blobs in the audit log");for(let{value:m}of n.getRange({start:1,snapshot:!1,lazy:!0}))try{let p=At(m),h=n.tableStores[p.tableId],E=h?.getEntry(p.recordId);(!E||E.version!==p.version||!E.value)&&u(p.getValue(h)),d++%f===0?await(0,Yu.setTimeout)(1):await(0,Yu.setImmediate)()}catch(p){Lt.default.error?.("Error searching audit log for references to potential orphaned blobs failed",p)}Lt.default.warn?.("Deleting",i.size,"orphaned blobs"),s+=i.size;for(let m of i)try{await(0,Fn.unlink)(m)}catch(p){Lt.default.warn?.("Error deleting file",p)}Lt.default.warn?.("Finished deleting",i.size,"orphaned blobs"),i.clear()}a(l,"removePathsThatAreNotReferenced");function u(d){ll(d,f=>{if(f instanceof Wu){let m=Gr.get(f);if(m.fileId!=null){let p=ju(m);i.has(p)&&i.delete(p)}}})}a(u,"checkObjectForReferences")}var Wi,Fn,je,eg,Xa,$A,Wm,ji,Lt,o0,Yu,a0,Nr,c0,VA,r0,L9,D9,n0,Gr,Ko,vs,Ku,Xr,Bn,ul,Ym,X_,v9,s0,Wu,u0,qA,i0,Z_,q9,is=se(()=>{Wi=require("msgpackr"),Fn=require("node:fs/promises"),je=require("node:fs"),eg=require("node:zlib"),Xa=require("node:stream"),$A=require("fs-extra"),Wm=b(fe());G();ji=require("path"),Lt=b(ir());Vo();Ki();o0=require("node:v8"),Yu=require("node:timers/promises"),a0=8192,Nr=8,c0=0,VA=1,r0=255,L9=new Uint8Array([0,c0,255,255,255,255,255,255]),D9=new Uint8Array([0,VA,255,255,255,255,255,255]),n0=0xffffffffffff,Gr=new WeakMap,vs=global.Blob||$9(),ul=!1,Ym=new Uint8Array(8),X_=new DataView(Ym.buffer),v9=6e4;a(l0,"InstanceOfBlobWithNoConstructor");l0.prototype=vs.prototype;s0=!1,Wu=class e extends l0{static{a(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size),t?.saveBeforeCommit!=null&&(this.saveBeforeCommit=t.saveBeforeCommit)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=Gr.get(this),{start:r,end:n,contentBuffer:s,asString:i}=t;return i||(s&&(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),s?(t.asString=s.toString(),t.asString):(HA()&&kA(this.bytes().then(o=>t.contentBuffer=o)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=Gr.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=ju(t),o,c=a(async()=>{let l,u=Nr;try{if(l=await(0,Fn.readFile)(i),l.length>=Nr){l.copy(Ym,0,0,Nr);let f=X_.getBigUint64(0);if(Number(f>>48n)===r0)throw new Error("Error in blob: "+l.subarray(Nr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<n0&&(this.size=u,this.#t))for(let m of this.#t)m(u)}}catch(f){if(f.code!=="ENOENT")throw f;l=Buffer.alloc(0)}function d(f){if(u>f.length){let m=t.store,p=t.fileId+":blob";if(o)throw new Error(`Incomplete blob for ${i}`);return new Promise((h,E)=>{if(m.attemptLock(p,0,()=>(o=!0,h(c()))))return o=!0,m.unlock(p,0),h(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return a(d,"checkCompletion"),l[1]===VA?new Promise((f,m)=>{(0,eg.deflate)(l.subarray(Nr),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(Nr))},"readContents");return c()}async arrayBuffer(){let t=await this.bytes(),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),r}stream(){let t=Gr.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(E){E.enqueue(r),E.close()}});let i=ju(t),o,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,_=a((R,S)=>{(0,je.open)(i,"r",(y,w)=>{if(y){if(y.code==="ENOENT"&&f!==!1&&(Lt.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),_(R,S)},20).unref();S(y),p.#e?.forEach(I=>I(y))}else o=w,R(w)})},"openFile");return new Promise(_)},pull:a(E=>{let _=0,R=100;return new Promise(a(function S(y,w){function I(X){(0,je.close)(o),clearTimeout(d),u&&u.close(),w(X),p.#e?.forEach(q=>q(X))}a(I,"onError");let H=Buffer.allocUnsafe(262144);(0,je.read)(o,H,0,H.length,c,(X,q,k)=>{if(l+=q,X)return I(X);if(c===0){if(q<Nr){R-- >0&&f!==!1?(h(),Lt.default.debug?.("File was empty, waiting for data to be written",i,R),setTimeout(()=>S(y,w),20).unref()):(Lt.default.debug?.("File was empty, throwing error",i,R),I(new Error(`Blob ${t.fileId} was empty`)));return}k.copy(Ym,0,0,Nr);let z=X_.getBigUint64(0);if(Number(z>>48n)===r0)return I(new Error("Error in blob: "+k.subarray(Nr,q)));if(_=Number(z&0xffffffffffffn),_<n0&&p.size!==_&&(p.size=_,p.#t))for(let Y of p.#t)Y(_);k=k.subarray(Nr,q),l-=Nr}else if(q===0){let z=Buffer.allocUnsafe(8);return(0,je.read)(o,z,0,Nr,0,Y=>{if(Y)return I(Y);if(Ym.set(z),_=Number(X_.getBigUint64(0)&0xffffffffffffn),_>l){h()?u?d=setTimeout(()=>{I(new Error(`File read timed out reading from ${i}`))},v9).unref():(u=(0,je.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(y,w))}),S(y,w)):m?I(new Error("Blob is incomplete")):(m=!0,S(y,w));return}(0,je.close)(o),E.close(),y()})}else k=k.subarray(0,q);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=q,S(y,w);s&&l>=s&&(l>s&&(k=k.subarray(0,s-c)),l=_=s),n&&n>c&&(k=k.subarray(n-c))}c+=q;try{E.enqueue(k)}catch(z){return Lt.default.debug?.("Error enqueuing chunk",z),y()}l===_&&((0,je.close)(o),E.close()),y()})},"readMore"))},"pull"),cancel(){(0,je.close)(o),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,_=t.fileId+":blob";f=!E.attemptLock(_,0,()=>{f=!1}),f||E.unlock(_,0)}return f}}slice(t,r,n){let s=Gr.get(this),i=new e(n&&{type:n});if(s?.fileId){let o={...s,start:t,end:r};Gr.set(i,o),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let o={...s,contentBuffer:s.contentBuffer.subarray(t,r)};Gr.set(i,o),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(){return s0||(s0=!0,Lt.default.warn?.("save() method on Blob is deprecated, use the 'saveBeforeCommit' flag on the Blob constructor instead")),this.saveBeforeCommit=!0,Promise.resolve()}get written(){return Gr.get(this)?.saving??Promise.resolve()}},u0=500;a(tg,"deleteBlob");a(M9,"setDeletionDelay");global.createBlob=function(e,t){let r=new Wu(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(Gr.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Xa.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Xa.Readable.from(e);else throw new Error("Invalid source type");return r};a(jm,"saveBlob");a(GA,"writeBlobWithStream");a(rg,"getFileId");a(U9,"isSaving");a(d0,"getFilePathForBlob");qA=new Map;a(zu,"getRootBlobPathsForDB");a(KA,"deleteRootBlobPathsForDB");a(f0,"rimrafSteadily");a(ju,"getFilePath");a(x9,"writeBlobWithBuffer");a(B9,"generateFilePath");i0=new Map;a(F9,"getNextFileId");Z_=128;a(k9,"getNextStorageIndex");a(H9,"createFrequencyTableForStoragePaths");a(ng,"encodeBlobsWithFilePath");a(G9,"encodeBlobsAsBuffers");a(sg,"decodeBlobsWithWrites");a(zm,"decodeWithBlobCallback");a(Yo,"decodeFromDatabase");a(Za,"deleteBlobsInObject");a(ll,"findBlobsInObject");a(YA,"startPreCommitBlobsForRecord");q9=new Wi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Wi.addExtension)({Class:vs,type:11,unpack:a(function(e){let t=q9.unpack(e),r=new Wu;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(Gr.set(r,{storageIndex:t[1],fileId:t[2],store:Bn}),Ko)return Ko(r)??r;if(!Bn)throw new Error("No store specified, cannot load blob from storage")}else Gr.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:a(function(e){let t=Gr.get(e);if(Ku!==void 0&&(ul=!0,t?.recordId!==void 0&&t.recordId!==Ku))throw new Error("Cannot use the same blob in two different records");let r={...e};if(e.type&&(r.type=e.type),e.size!==void 0&&(r.size=e.size),t){if(t.storageBuffer)return t.storageBuffer;if(t.contentBuffer?.length<a0)return r.size=t.contentBuffer.length,(0,Wi.pack)([r,t.contentBuffer])}if(Ku!==void 0){if(t=jm(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Ku,(0,Wi.pack)([r,t.storageIndex,t.fileId])}if(t){if(Ko)return Ko(e),(0,Wi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,je.readFileSync)(ju(t));if(n.length>=Nr&&(n.copy(Ym,0,0,Nr),Number(X_.getBigUint64(0)&0xffffffffffffn)===n.length-Nr))return Buffer.concat([(0,Wi.pack)([r]),n]);if(Xr)Xr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Xr)return Xr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Wi.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});a($9,"polyfillBlob");a(V9,"cleanupOrphans")});var _0={};ye(_0,{onStorageReclamation:()=>Jm,runReclamationHandlers:()=>JA,setAvailableSpaceRatioGetter:()=>Y9});function Jm(e,t,r){(r||(0,ag.getWorkerIndex)()===(0,ag.getWorkerCount)()-1)&&(og.has(e)||og.set(e,[]),og.get(e).push({priority:0,handler:t}),zA||(zA=setTimeout(JA,p0).unref()))}async function JA(){for(let[e,t]of og)try{let r=await E0(e),n=K9/r;for(let s of t){let{priority:i,handler:o}=s;if(s.priority=n,n>1||i>1){let c=o(n>1?n:0);c&&(jA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){jA.default.error?.("Error running storage reclamation handlers",r)}zA=setTimeout(JA,p0).unref()}function Y9(e){E0=e??h0}var WA,ag,jA,cg,m0,og,K9,p0,zA,h0,E0,lg=se(()=>{WA=require("node:fs/promises"),ag=b(st()),jA=b(ir());G();cg=b(fe()),m0=b(ae());cg.default.initSync();og=new Map,K9=cg.default.get(x.STORAGE_RECLAMATION_THRESHOLD)??.4,p0=(0,m0.convertToMS)(cg.default.get(x.STORAGE_RECLAMATION_INTERVAL))||36e5;a(Jm,"onStorageReclamation");h0=a(async e=>{if(WA.statfs){let t=await(0,WA.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"),E0=h0;a(JA,"runReclamationHandlers");a(Y9,"setAvailableSpaceRatioGetter")});var P0={};ye(P0,{ACTION_32_BIT:()=>pg,ACTION_64_BIT:()=>J9,AUDIT_STORE_OPTIONS:()=>Zm,Decoder:()=>fl,HAS_BLOBS:()=>Zr,HAS_CURRENT_RESIDENCY_ID:()=>ml,HAS_EXPIRATION_EXTENDED_TYPE:()=>rp,HAS_ORIGINATING_OPERATION:()=>tp,HAS_PREVIOUS_RESIDENCY_ID:()=>pl,REMOTE_SEQUENCE_UPDATE:()=>hg,createAuditEntry:()=>hl,getLastRemoved:()=>j9,openAuditStore:()=>fg,readAuditEntry:()=>At,removeAuditEntry:()=>mg,setAuditRetention:()=>z9,transactionKeyEncoder:()=>w0});function fg(e){let t=e.auditStore=e.openDB(QA.AUDIT_STORE_NAME,{create:!1,...Zm});t||(t=e.auditStore=e.openDB(QA.AUDIT_STORE_NAME,Zm),S0(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,o=ZA;Jm(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(o=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,p;try{for(let{key:h,value:E}of t.getRange({start:1,snapshot:!1,end:Date.now()-XA/(1+i*i)})){try{m=mg(t,h,E)}catch(_){Ju.warn("Error removing audit entry",_)}if(p=h,await new Promise(setImmediate),++f>=W9){o=10;break}}await m}finally{f===0?o=Math.min(o<<1,XA/10):(S0(t,p),o>100&&(o=o>>1)),d(void 0),c()}},o).unref()});return u}if(a(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,Xm.getWorkerIndex)()===(0,Xm.getWorkerCount)()-1&&c(),(0,Xm.getWorkerIndex)()===0&&!g0)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(g0=!0,Ju.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function mg(e,t,r){let n=Q9(r),s;if(n&Zr){s=At(r);let i=e.tableStores[s.tableId];if(i){let o=s.type==="message"?null:i?.getEntry(s.recordId);(!o||o.version!==s.version||!o.value)&&Yo(()=>Za(s.getValue(i)),i.rootStore)}}if((n&15)===eI){s=s||At(r);let i=s.tableId;e.tableStores[s.tableId]?.getEntry(s.recordId)?.version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function S0(e,t){tI[0]=t,e.put(Symbol.for("last-removed"),N0)}function j9(e){let t=e.get(Symbol.for("last-removed"));if(t)return N0.set(t),tI[0]}function z9(e,t=ZA){XA=e,ZA=t}function hl(e,t,r,n,s,i,o,c,l,u,d,f,m){let p=C0[o];if(!p)throw new Error(`Invalid audit entry type ${o}`);let h=1;if(n&&(n>1?ec.setFloat64(0,n):Ms.set(rI),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}R(s),R(t),_(r),ec.setFloat64(h,e),h+=8,l&ml&&R(u),l&pl&&R(d),l&rp&&(ec.setFloat64(h,f),h+=8),l&tp&&R(O0[m]),i?_(i):Ms[h++]=0,l?ec.setUint32(n?8:0,p|l|3221225472):Ms[n?8:0]=p;let E=Ms.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function _(S){let y=h;h+=1,h=(0,dl.writeKey)(S,Ms,h);let w=h-y-1;w>127?w>16383?(Ju.error("Key or username was too large for audit entry",S),h=y+1,Ms[y]=0):(Ms.copyWithin(y+2,y+1,h),ec.setUint16(y,w|32768),h++):Ms[y]=w}function R(S){S<128?Ms[h++]=S:S<16384?(ec.setUint16(h,S|32768),h+=2):S<1056964608?(ec.setUint32(h,S|3221225472),h+=4):(Ms[h]=255,ec.setUint32(h+1,S),h+=5)}}function Q9(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new fl(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function At(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new fl(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),o=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,p,h,E;if(i&ml&&(m=n.readInt()),i&pl&&(p=n.readInt()),i&rp&&(h=n.readFloat64()),i&tp){let y=n.readInt();E=O0[y]}l=n.readInt();let _=n.position,R=n.position+=l,S;return{type:C0[i&7],tableId:c,nodeId:o,get recordId(){return(0,dl.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return R>_?(0,dl.readKey)(e,_,R):void 0},get encoded(){return t?e.subarray(t,r):e},get size(){return t!==void 0&&r!==void 0?r-t:e.byteLength},getValue(y,w,I){if(i&ug||i&Qm&&!w)return S||(S=Yo(()=>y.decoder.decode(e.subarray(n.position,r)),y.rootStore)),S;if(i&Qm&&I)return OA(y.getEntry(this.recordId),I,y)},getBinaryValue(){return i&(ug|Qm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return Ju.error("Reading audit entry error",n,e),{}}}var dl,dg,QA,Xm,I0,Ju,Ms,ec,w0,Zm,XA,W9,tI,N0,ZA,g0,ug,Qm,T0,eI,y0,R0,b0,A0,pg,J9,hg,ml,pl,tp,rp,Zr,C0,O0,fl,Ki=se(()=>{dl=require("ordered-binary"),dg=b(fe()),QA=b(Jt());G();Xm=b(st()),I0=b(ae());El();Ju=b(Q());z_();is();lg();(0,dg.initSync)();Ms=Buffer.alloc(2816),ec=new DataView(Ms.buffer,Ms.byteOffset,2816),w0={writeKey(e,t,r){return e===ep?(t.set(ep,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,dl.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,dl.readKey)(e,t,r)}},Zm={encoding:"binary",keyEncoder:w0},XA=(0,I0.convertToMS)((0,dg.get)(x.LOGGING_AUDITRETENTION))||86400*3,W9=1e3,tI=new Float64Array(1),N0=new Uint8Array(tI.buffer),ZA=1e4,g0=!1;a(fg,"openAuditStore");a(mg,"removeAuditEntry");a(S0,"updateLastRemoved");a(j9,"getLastRemoved");a(z9,"setAuditRetention");ug=16,Qm=32,T0=1,eI=2,y0=3,R0=4,b0=5,A0=6,pg=14,J9=15,hg=11,ml=512,pl=1024,tp=2048,rp=4096,Zr=8192,C0={put:T0|ug,[T0]:"put",delete:eI,[eI]:"delete",message:y0|ug,[y0]:"message",invalidate:R0|Qm,[R0]:"invalidate",patch:b0|Qm,[b0]:"patch",relocate:A0,[A0]:"relocate"},O0={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(hl,"createAuditEntry");a(Q9,"readAction");a(At,"readAuditEntry");fl=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function Eg(){return nI||(nI=ze({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),nI}function Z9(e){return e=e.replace(X9,t=>{let[r,n,s,i]=t.split(".").map(o=>parseInt(o));return(r<<8|n).toString(16)+":"+(s<<8|i).toString(16)}),e=e.replace("::",":".repeat(10-e.split(":").length)),e.toLowerCase().split(":").map(t=>t.padStart(4,"0")).join(":")}function e7(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 iI(e){let t=L0.default.createHash("shake128",{outputLength:4}),r;return(0,D0.isIPv6)(e)?r=Z9(e):r=e.toLowerCase(),e7(Uint8Array.from(t.update(r).digest()))}var L0,D0,sI,nI,X9,oI=se(()=>{Oe();L0=b(require("crypto")),D0=require("node:net"),sI=new Map;a(Eg,"getAnalyticsHostnameTable");X9=/(\d{1,3}\.){3}\d{1,3}$/;a(Z9,"normalizeIPv6");a(e7,"nodeHashToNumber");a(iI,"stableNodeId")});var Wo,aI=se(()=>{Wo={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 F0={};ye(F0,{captureProfile:()=>lI,userCodeFolders:()=>_g});async function lI(e){let r=B0/1e6,n=new Map,s=new Map,i=new Map,o=0,c=0;try{let u=cI.time.stop(!0),d=u.stringTable.strings;for(let f of u.function)s.set(f.id,d[f.filename]);for(let f of u.location)n.set(f.id,f.line[0]);for(let f of u.sample)l(f);We(c*r,"cpu-usage","harper"),We(o*r,"cpu-usage","user");for(let[f,m]of i)if(m>100){let p=n.get(f),h=s.get(p.functionId)+":"+p.line;We(m*r,"cpu-usage",h)}}catch(u){x0.error?.("analytics profiler error:",u)}finally{e&&setTimeout(()=>{let u=((0,np.get)(x.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;lI(u)},e).unref()}function l(u){let d=!1;for(let f of u.locationId){let m=s.get(n.get(f).functionId);if(_g.some(p=>m.startsWith(p))){let p=u.value[0];o+=p,d||i.set(f,(i.get(f)??0)+p);return}if(m.startsWith(M0.PACKAGE_ROOT)){let p=u.value[0];c+=p,d||(i.set(f,(i.get(f)??0)+p),d=!0)}}}a(l,"getUserHitCount")}var np,M0,U0,cI,x0,v0,_g,B0,k0=se(()=>{os();np=b(fe());G();M0=b(yt()),U0=require("node:fs"),cI=require("@datadog/pprof"),x0=b(Q()),v0=(0,np.getHdbBasePath)(),_g=v0?[v0]:[];process.env.RUN_HDB_APP&&_g.push((0,U0.realpathSync)(process.env.RUN_HDB_APP));B0=5e4;(async()=>{if(_g.length===0)return;cI.time.start({intervalMicros:B0});let e=((0,np.get)(x.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;setTimeout(()=>{lI(e)},e).unref()})();a(lI,"captureProfile")});var Tg={};ye(Tg,{addAnalyticsListener:()=>ap,analyticsDelay:()=>mI,calculateCPUUtilization:()=>nB,diffResourceUsage:()=>sB,onAnalyticsAggregate:()=>EI,recordAction:()=>We,recordActionBinary:()=>tn,recordHostname:()=>pI,setAnalyticsEnabled:()=>n7});function n7(e){X0=e,clearTimeout(ip),ip=null}function s7(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 i7(e,t,r,n,s,i){let o={};if(typeof t=="number")o.total=t,o.values=new Float32Array(4),o.values.index=1,o.values[0]=t,o.total=t;else if(typeof t=="boolean")o.total=t?1:0,o.count=1;else if(typeof t=="function")o.count=1,o.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);o.description={metric:r,path:n,method:s,type:i},Sg.set(e,o)}function We(e,t,r,n,s){if(!X0)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Sg.get(i);o?s7(e,o):i7(i,e,t,r,n,s),ip||o7()}function tn(e,t,r,n,s){We(!!e,t,r,n,s)}function ap(e){eB.push(e)}function o7(){uI||=performance.now(),ip=setTimeout(async()=>{ip=null;let e=performance.now()-uI;uI=0;let t=[],r={time:Date.now(),period:e,threadId:_l.threadId,metrics:t};for(let[s,i]of Sg){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],d;for(let f of rB){let m=Math.floor(c*f),p=o[m-1];if(m>l){let h=m-l;if(p===d){let E=u[u.length-1];typeof E=="number"?u[u.length-1]={value:E,count:1+h}:E.count+=h}else u.push(h>1?{value:p,count:h}:p),d=p;l=m}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await iB()}let n=process.memoryUsage();t.push({metric:"memory",threadId:_l.threadId,byThread:!0,...n});for(let s of eB)s(t);Sg=new Map,_l.parentPort?_l.parentPort.postMessage({type:Z0,report:r}):cB({report:r})},mI).unref()}async function pI(){let e=Ue.hostname;en.trace?.("recordHostname server.hostname:",e);let t=iI(e);en.trace?.("recordHostname nodeId:",t);let r=Eg();if(!await r.get(t)){let s={id:t,hostname:e};en.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function Qu(e,t){let r=Ue.hostname,n=sI.get(r);n?en.trace?.("storeMetric cached nodeId:",n):(n=iI(r),en.trace?.("storeMetric new nodeId:",n),sI.set(r,n));let s={id:[(0,fI.getNextMonotonicTime)(),n],...t};en.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function nB(e,t){let r=e.userCPUTime+e.systemCPUTime;return en.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function sB(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 a7(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={metric:Wo.TABLE_SIZE,database:t,table:s,size:c};en.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),Qu(e,l),n+=c}return n}function H0(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=Q0.statSync(s.primaryStore.env.path).size,c=a7(e,r,n),l=o-c,u={metric:Wo.DATABASE_SIZE,database:r,size:o,used:c,free:l,audit:i};Qu(e,u),en.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){en.warn?.("Error getting DB size metrics",s)}}function G0(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let o={metric:Wo.STORAGE_VOLUME,database:r,...i};Qu(e,o),en.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){en.warn?.("Error getting DB volume metrics",s)}}async function c7(e,t=6e4){let r=hI(),n=oB(),s=new Promise(y=>{let w=performance.now();setImmediate(()=>{let I=performance.now();I-w>5e3&&en.warn?.("Unusually high event queue latency on the main thread of "+Math.round(I-w)+"ms"),w=performance.now()}),n.primaryStore.prefetch([1],()=>{let I=performance.now();I-w>5e3&&en.warn?.("Unusually high task queue latency on the main thread of "+Math.round(I-w)+"ms"),y(I-w)})}),i;for(let y of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(y.value?.time){i=y.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],d;for(let{key:y,value:w}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!w)continue;if(o){if(y>o+t)break}else o=y;d=y;let{metrics:I,threadId:H}=w;for(let X of I||[]){let{path:q,method:k,type:z,metric:Y,count:ce,total:de,distribution:te,threads:Se,...Ne}=X;ce||(ce=1);let Ke=Y+(q?"-"+q:"");k!==void 0&&(Ke+="-"+k),z!==void 0&&(Ke+="-"+z);let $e=c.get(Ke);if($e){if($e.threads){let nr=$e.threads[H];if(nr)$e=nr;else{$e.threads[H]={...Ne};continue}}$e.count||($e.count=1);let Ir=$e.count;for(let nr in Ne){let zr=Ne[nr];typeof zr=="number"&&($e[nr]=($e[nr]*Ir+zr*ce)/(Ir+ce))}$e.count+=ce,de>=0&&($e.total+=de,$e.ratio=$e.total/$e.count)}else $e={period:t,...X},delete $e.distribution,c.set(Ke,$e),$e.byThread&&($e.threads=[],$e.threads[H]={...Ne},u.push($e));if(te){te=te.map(nr=>typeof nr=="number"?{value:nr,count:1}:nr);let Ir=l.get(Ke);Ir?Ir.push(...te):l.set(Ke,te)}}await iB()}for(let y of u){let{path:w,method:I,type:H,metric:X,count:q,total:k,distribution:z,threads:Y,...ce}=y;Y=Y.filter(de=>de);for(let de in ce){if(typeof y[de]!="number")continue;let te=0;for(let Se of Y){let Ne=Se[de];typeof Ne=="number"&&(te+=Ne)}y[de]=te}y.count=Y.length,delete y.threads,delete y.byThread}for(let[y,w]of l){let I=c.get(y);w.sort((nr,zr)=>nr.value>zr.value?1:-1);let H=I.count-1,X=[],q=0,k=0,z;for(let nr of rB){let zr=H*nr;for(;q<zr;)z=w[k++],q+=z.count,k===1&&q--;let xr=w[k>1?k-2:0];z||(z=w[0]),X.push(z.value-(z.value-xr.value)*(q-zr)/z.count)}let[Y,ce,de,te,Se,Ne,Ke,$e,Ir]=X;Object.assign(I,{p1:Y,p10:ce,p25:de,median:te,p75:Se,p90:Ne,p95:Ke,p99:$e,p999:Ir})}let f;for(let[,y]of c)y.time=d,Qu(n,y),f=!0;if(f)for(let y of tB)y(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let y={metric:Wo.MAIN_THREAD_UTILIZATION,idle:p-q0,active:h-$0,taskQueueLatency:await s,time:m,...process.memoryUsage()};Qu(n,y)}q0=p,$0=h;let E=process.resourceUsage();E.time=m,E.userCPUTime=E.userCPUTime/1e3,E.systemCPUTime=E.systemCPUTime/1e3,en.trace?.(`process.resourceUsage: ${JSON.stringify(E)}`);let _=sB(gg,E);en.trace?.(`diffed resourceUsage: ${JSON.stringify(_)}`),_.time=m,_.period=gg.time?m-gg.time:t,_.cpuUtilization=nB(_,_.period);let R={metric:Wo.RESOURCE_USAGE,..._};Qu(n,R),gg=E;let S=lt();H0(n,S),H0(n,{system:S.system}),G0(n,S),G0(n,{system:S.system})}async function V0(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function hI(){return K0||(K0=ze({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function oB(){return Y0||(Y0=ze({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function d7(){aB=!0;let e=(0,op.get)(x.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await c7(mI,e),await V0(hI(),l7),await V0(oB(),u7)},Math.min(e/2,2147483647)).unref()}function cB(e,t){let r=e.report;r.threadId=t?.threadId||_l.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(W0+=n.mean*n.count);r.totalBytesProcessed=W0,t&&(r.metrics.push({metric:Wo.UTILIZATION,...t.performance.eventLoopUtilization(j0.get(t))}),j0.set(t,t.performance.eventLoopUtilization())),r.id=(0,fI.getNextMonotonicTime)(),hI().primaryStore.put(r.id,r),aB||d7(),f7&&(lB=p7(r))}async function p7(e){if(await lB,!tc){let r=(0,sp.dirname)(t7());try{tc=await(0,dI.open)((0,sp.join)(r,"analytics.log"),"r+")}catch{tc=await(0,dI.open)((0,sp.join)(r,"analytics.log"),"w+")}}let t=(await tc.stat()).size;if(t>m7){let r=Buffer.alloc(t);await tc.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await tc.write(r,{position:0}),await tc.truncate(r.length),t=r.length}await tc.write(JSON.stringify(e)+`
|
|
14
|
-
`,t)}function EI(e){e&&tB.push(e)}var _l,z0,J0,sp,dI,fI,op,Q0,t7,r7,en,Sg,X0,ip,uI,mI,Z0,eB,tB,rB,q0,$0,gg,iB,l7,u7,K0,Y0,aB,W0,j0,f7,lB,tc,m7,os=se(()=>{_l=require("worker_threads"),z0=b(st());Oe();J0=b(Q()),sp=require("path"),dI=require("fs/promises"),fI=b(xn()),op=b(fe());G();Hr();Q0=b(require("node:fs"));oI();aI();({getLogFilePath:t7,forComponent:r7}=J0.default);setTimeout(()=>{Promise.resolve().then(()=>k0())},1e3);en=r7("analytics").conditional;(0,op.initSync)();Sg=new Map,X0=(0,op.get)(x.ANALYTICS_AGGREGATEPERIOD)>-1;a(n7,"setAnalyticsEnabled");a(s7,"recordExistingAction");a(i7,"recordNewAction");a(We,"recordAction");Ue.recordAnalytics=We;a(tn,"recordActionBinary");uI=0,mI=1e3,Z0="analytics-report",eB=[],tB=[];a(ap,"addAnalyticsListener");rB=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(o7,"sendAnalytics");a(pI,"recordHostname");a(Qu,"storeMetric");a(nB,"calculateCPUUtilization");a(sB,"diffResourceUsage");a(a7,"storeTableSizeMetrics");a(H0,"storeDBSizeMetrics");a(G0,"storeVolumeMetrics");a(c7,"aggregation");q0=0,$0=0,gg={userCPUTime:0,systemCPUTime:0},iB=a(()=>new Promise(setImmediate),"rest");a(V0,"cleanup");l7=36e5,u7=31536e6;a(hI,"getRawAnalyticsTable");a(oB,"getAnalyticsTable");(0,z0.setChildListenerByType)(Z0,cB);a(d7,"startScheduledTasks");W0=0,j0=new Map,f7=!1;a(cB,"recordAnalytics");m7=1e6;a(p7,"logAnalytics");a(EI,"onAnalyticsAggregate")});var pB={};ye(pB,{ENTRY:()=>E7,HAS_EXPIRATION:()=>Ag,HAS_RESIDENCY_ID:()=>yI,HAS_STRUCTURE_UPDATE:()=>Ig,LAST_TIMESTAMP_PLACEHOLDER:()=>ep,LOCAL_TIMESTAMP:()=>h7,METADATA:()=>Zu,NEW_TIMESTAMP_PLACEHOLDER:()=>dB,NO_TIMESTAMP:()=>Rg,PENDING_LOCAL_TIME:()=>RI,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>rI,RecordEncoder:()=>TI,TIMESTAMP_ASSIGN_LAST:()=>g7,TIMESTAMP_ASSIGN_NEW:()=>fB,TIMESTAMP_ASSIGN_PREVIOUS:()=>mB,TIMESTAMP_PLACEHOLDER:()=>yg,TIMESTAMP_RECORD_PREVIOUS:()=>_I,entryMap:()=>rc,handleLocalTimeForGets:()=>wg,lastMetadata:()=>ut,recordUpdater:()=>bI,removeEntry:()=>Tl});function y7(){return lp[0]=lp[0]^64,_7.getFloat64(0)}function wg(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(o,c){e.readCount++,ut=null;let l=r.call(this,o,c);return l&&(ut&&(l.metadataFlags=ut[Zu],l.localTime=ut.localTime,l.residencyId=ut.residencyId,l.size=ut.size,ut.expiresAt>=0&&(l.expiresAt=ut.expiresAt),ut=null),l.value&&rc.set(l.value,l),l.key=o),l};let n=e.get;e.get=function(o,c){ut=null;let l=n.call(this,o,c);return ut&&l&&(rc.set(l,ut),ut=null),l};let s=e.getRange;e.getRange=function(o){let c=s.call(this,o);return o.valuesForKey?c.map(l=>l?.value):o.values===!1||o.onlyCount?c:c.map(l=>(ut&&(l.metadataFlags=ut[Zu],l.localTime=ut.localTime,l.residencyId=ut.residencyId,ut.expiresAt>=0&&(l.expiresAt=ut.expiresAt),ut=null),l))};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let o=i.constructor,c=i.use,l=i.done;o.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Sl.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Sl.length;u++){let d=Sl[u].deref();(!d||d.isDone||d.isCommitted)&&Sl.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function bI(e,t,r){return function(n,s,i,o,c=-1,l,u,d="put",f,m){l==null?gl=Rg:f?gl=i?.localTime?_I|mB:Rg:gl=l?i?.localTime?_I|16384:fB|16384:Rg;let p=u?.expiresAt;if(p>=0&&(c|=Ag),cp=c,gI=p,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:gl>0},E,_=0;try{let R=i?.residencyId,S=u?.residencyId;S&&(SI=S,cp|=yI,_|=ml),R!==S&&(_|=pl,R||(R=0)),c&Ag&&(_|=rp),u?.originatingOperation&&(_|=tp),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&d!=="message"&&i.metadataFlags&Zr&&(!i.localTime||!r.getBinaryFast(i.localTime))&&Za(i.value);let y;if(s!==void 0&&(y=ng(()=>e.put(n,s,h),n,e.rootStore),ul&&(_|=Zr)),l){let w=u?.user?.username;if(m&&(ng(()=>e.encoder.encode(m),n,e.rootStore),ul&&(_|=Zr)),e.encoder.hasStructureUpdate&&(_|=Ig,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let I=i?.localTime,H=r.get(I);if(H){let X=At(H).previousLocalTime;return y=r.put(I,hl(o,t,n,X,u?.nodeId??server.replication.getThisNodeId(r)??0,w,d,Xu,_,S,R,p),{ifVersion:E}),y}}y=r.put(s===void 0?dB:ep,hl(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,w,d,Xu,_,S,R,p,u?.originatingOperation),{instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&S7.has(d)&&We(Xu?.length??1,"db-write",u.tableToTrack,null),y}catch(R){throw R.message+=" id: "+n+" options: "+h,R}}}function Tl(e,t,r){if(t)return t.value&&t.metadataFlags&Zr&&!e.auditStore?.getBinaryFast(t.localTime)&&Za(t.value),e.remove(t.key,r)}var uB,bg,yg,ep,rI,dB,h7,Zu,E7,lp,_7,Rg,fB,g7,mB,_I,Ag,yI,RI,Ig,S7,rc,T7,Xu,gl,cp,gI,SI,ut,TI,Sl,El=se(()=>{uB=require("msgpackr");Ki();bg=b(Q());is();is();os();yg=new Uint8Array([1,1,1,1,4,64,0,0]),ep=new Uint8Array([1,1,1,1,1,0,0,0]),rI=new Uint8Array([1,1,1,1,3,64,0,0]),dB=new Uint8Array([1,1,1,1,0,64,0,0]),h7=Symbol("local-timestamp"),Zu=Symbol("metadata"),E7=Symbol("entry"),lp=new Uint8Array(8),_7=new DataView(lp.buffer,0,8),Rg=0,fB=0,g7=1,mB=3,_I=4,Ag=16,yI=32,RI=1,Ig=256,S7=new Set(["put","patch","delete","message","publish"]),rc=new WeakMap,gl=0,cp=-1,gI=-1,SI=0,ut=null,TI=class extends uB.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{a(this,"RecordObject")}getUpdatedTime(){return rc.get(this)?.version}getExpiresAt(){return rc.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,o){if(gl||cp>=0){let c=0,l=gl;l&&(c+=8,gl=0);let u=cp,d=gI,f=SI;u>=0&&(c+=4,cp=-1,d>=0&&(c+=8,gI=-1),f&&(c+=4,SI=0));let m=T7=n.call(this,i,o|2048|c);Xu=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(yg[4]=l,yg[5]=l>>8,m.set(yg,p),p+=8),ul&&(u|=Zr),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|pg<<24),p+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(p,d),p+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,f)),m}else return Xu=n.call(this,i,o),Xu};let s=this.saveStructures;this.saveStructures=function(i,o){let c=s.call(this,i,o);return this.hasStructureUpdate=!0,c}}decode(t,r){ut=null;let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(lp,0,c),c+=8;else for(let m=0;m<8;m++)lp[m]=t[c++];l=y7(),i=t[c]}let u,d;i<32&&(i===pg?(o=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(o=i|t[c+1]<<5,c+=2),o&Ag&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&yI&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Yo(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return ut={localTime:l,[Zu]:o,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:Yo(()=>super.decode(t,r),this.rootStore)}catch(c){return bg.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(y7,"getTimestamp");a(wg,"handleLocalTimeForGets");Sl=[];setInterval(()=>{for(let e=0;e<Sl.length;e++){let t=Sl[e].deref();!t||t.isDone||t.isCommitted?Sl.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(bg.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):bg.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();a(bI,"recordUpdater");a(Tl,"removeEntry")});function wI(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let f=u(l);for(let p=1;p<e.length;p++){let h=e[p],E=u(h);f=f.concat(E)}let m=new Set;return f.filter(p=>{let h=p.key??p;return m.has(h)?!1:(m.add(h),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?o(f,m):f}function u(f){return f.conditions?wI(f.conditions,f.operator,r,n,s,i,o,c):nd(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}a(u,"executeCondition");function d(f,m,p){return f.map((h,E)=>{if(h.conditions){let S=h.operator==="or",y=d(h.conditions,!S,p);return S?(w,I)=>y.some(H=>H(w,I)):(w,I)=>y.every(H=>H(w,I))}let _=(h.attribute||h[0])===r.primaryKey,R=dp(h,r,i,c,_,p);return m&&E<f.length-1&&p&&(p=P7(r.primaryStore,h.estimated_count,p)),R}).filter(Boolean)}a(d,"mapConditionsToFilters")}function nd(e,t,r,n,s,i,o){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new rn.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let y=c[0],w=Ji(n.attributes,y);if(w.relationship){if(c.length<2)throw new rn.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let I=w.definition?.tableClass||w.elements?.definition?.tableClass,H=new Map,X=nd({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,I,s,H);if(w.relationship.to){i[c[0]]=H;let q=!!Ji(I.attributes,w.relationship.to)?.elements;X=w7(X,w,I.primaryStore,q,H)}if(w.relationship.from){let q=a(k=>(k?.key!==void 0&&(k=k.key),nd({attribute:w.relationship.from,value:k},t,r,n,s,H)),"searchEntry");w.elements?(i[c[0]]=H,X=N7(X,w,I.primaryStore,H,q)):X=X.flatMap(q)}return X}else if(c.length===1)c=c[0];else throw new rn.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,p,h,E;l instanceof Date&&(l=l.getTime());let _;switch(NI[u]||u){case"lt":m=!0,p=l;break;case"le":m=!0,p=l,h=!0;break;case"gt":m=l,E=!0;break;case"ge":m=l;break;case"prefix":Array.isArray(l)?l[l.length-1]!=null&&(l=l.concat(null)):l=[l,null],m=l,p=l.slice(0),p[p.length-1]=zi.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),p=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),p=l[1],p instanceof Date&&(p=p.getTime()),h=u==="gele"||u==="gtle"||u==="between",E=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,p=l,h=!0;break;case"ne":if(l===null){m=l,E=!0;break}case"sort":case"contains":case"ends_with":m=!0,_=!0;break;default:throw new rn.ClientError(`Unknown query comparator "${u}"`)}let R;if(typeof m=="string"&&m.length>Us.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,Us.MAX_SEARCH_KEY_LENGTH)+Us.OVERFLOW_MARKER,E=!1,R=dp(e,n,null,i,d)),typeof p=="string"&&p.length>Us.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,Us.MAX_SEARCH_KEY_LENGTH)+Us.OVERFLOW_MARKER,h=!0,R=R??dp(e,n,null,i,d)),r){let y=m;m=p,p=y,y=!E,E=!h,h=y}if(!f||f.isIndexing||_||l===null&&!f.indexNulls){if(s===!1&&!f)throw new rn.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&_)throw new rn.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${c}`,403);if(f?.isIndexing)throw new rn.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new rn.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(R=R??dp(e,n,null,i,d),!R)throw new rn.ClientError(`Unknown search operator ${e.comparator}`)}let S={start:m,end:p,inclusiveEnd:h,exclusiveStart:E,values:!0,versions:d,transaction:t,reverse:r};if(d){let y=f.getRange(S).map(R?function({key:w,value:I}){return this?.isSync?I&&R(I)?w:nc.SKIP:new Promise((H,X)=>setImmediate(()=>{try{H(I&&R(I)?w:nc.SKIP)}catch(q){X(q)}}))}:w=>w.value==null&&!(w.metadataFlags&(kn|yl))?nc.SKIP:(o?._freezeRecords&&Object.freeze(w.value),w));return y.hasEntries=!0,y}else return f?f.customIndex?f.customIndex.search(e,o).map(y=>{if(typeof y=="object"&&y){let{key:w,...I}=y,H=n.primaryStore.getEntry(w);return o?._freezeRecords&&Object.freeze(H?.value),{...I,...H}}return y}):f.getRange(S).map(R?function({key:y,value:w}){let I;return typeof y=="string"&&y.length>Us.MAX_SEARCH_KEY_LENGTH?I=n.primaryStore.get(w):I={[c]:y},this.isSync?R(I)?w:nc.SKIP:new Promise((H,X)=>setImmediate(()=>{try{H(R(I)?w:nc.SKIP)}catch(q){X(q)}}))}:({value:y})=>y):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:y,value:w}){return this.isSync?w&&R(w)?y:nc.SKIP:new Promise((I,H)=>setImmediate(()=>{try{I(w&&R(w)?y:nc.SKIP)}catch(X){H(X)}}))})}function Ji(e,t){if(Array.isArray(t))if(t.length>1){let r=Ji(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?Ji(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function w7(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=a((u,d)=>{let f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let o=i.next();return o.done?o:{value:o.value}},return(){if(i?.return)return i.return()}}}})}function N7(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(o=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function dp(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],f=Ji(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=dp({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},m,r,p?.[d]?.joined,c[1]===m.primaryKey,i);if(!h)return;if(p){p.filters||(p.filters=[]),p.filters.push(h);return}let E=t.propertyResolvers?.[d];E.to&&(h.to=E.to);let _,R=a((y,w)=>{let I,H;return E?E.returnDirect?(I=E(y,r,w),H=ut):(H=E(y,r,w,!0),Array.isArray(H)?(I=H.map(X=>X.value),H=null):I=H?.value):I=y[d],{subObject:I,subEntry:H}},"getSubObject"),S=a((y,w)=>{if(E&&h.idFilter){if(!_)if(h.idFilter.idSet?.size===1){for(let k of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:k};_=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else _=u(E.from??t.primaryKey,h.idFilter,!1,!0);let q=_(y);return _.idFilter&&(S.idFilter=_.idFilter),q}let{subObject:I,subEntry:H}=R(y,w);return I?Array.isArray(I)?(!n?.[d]&&n&&(n[d]={fromRecord(q){let k=R(q).subObject;return Array.isArray(k)?k.filter(h).map(z=>z[m.primaryKey]):k}}),I.some(h)):h(I,H):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),NI[o]||o){case Us.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let f=0,m=l.length;f<m;f++)if(d[f]!==l[f])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,zi.compareKeys)(d,l[0])>=0&&(0,zi.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,zi.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,zi.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,zi.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,zi.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,zi.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new rn.ClientError(`Unknown query comparator "${o}"`)}function u(d,f,m,p){let h;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&Cg(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,_=3;function R(S){let y=S[d],w;if(typeof y!="object"||!y||p?w=f(y):Array.isArray(y)?w=y.some(f):y instanceof Date&&(w=f(y.getTime())),m&&(_++,!w&&!R.idFilter&&++E/_*i>h)){let I=nd(e,r.transaction.getReadTxn(),!1,t),H;R.to?H=I.flatMap(q=>t.primaryStore.get(q)[R.to]):H=I.map(sd);let X=new Set(H);R.idFilter=q=>X.has(sd(q)),R.idFilter.idSet=X}return w}return a(R,"recordFilter"),s&&(R.idFilter=f),R}a(u,"attributeComparator")}function Cg(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/jo(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=NI[n]||n,n===Us.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=Ji(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=Cg(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*jo(e.indices[i.relationship.from])/(jo(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=jo(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=A7*jo(e.primaryStore)+1;else if(n==="between")r.estimated_count=b7*jo(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=jo(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=R7*jo(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function Og(e,t){if(e)if(zo=e,ed.lastIndex=0,C7.test(e))try{if(t&&(t.conditions=[]),li=t??new rd,up(li,""),qr!==zo.length&&Qt("Unable to parse query, unexpected end of query"),li.parseErrorMessage&&(li.parseError=new AI(t.parseErrorMessage),!t))throw li.parseError;return li}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${qr} in '${zo}'`,li.parseErrorMessage&&(r.message+=", "+li.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Qt(e){let t=`${e} at position ${qr}`;li.parseErrorMessage=li.parseErrorMessage?li.parseErrorMessage+", "+t:t}function up(e,t){let r=ed,n,s,i,o,c,l=decodeURIComponent,u;for(;n=r.exec(zo);){qr=r.lastIndex;let[,d,f]=n;o?(d&&Qt(`expected operator, but encountered '${d}'`),o=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Qt(`invalid FIQL operator ${d}`),l=hB):(l=decodeURIComponent,i="equals",d||Qt("attribute must be specified before equality comparator"),s=td(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=I7[f],l=II[i]?hB:decodeURIComponent,d||Qt(`attribute must be specified before comparator ${f}`),s=td(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Qt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Qt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Qt("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&EB(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else Ng(e,u),e.conditions.push(h)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?Qt("conditions/comparisons are not allowed in a property list"):e.push(td(d)),s=void 0;break;case"(":ed.lastIndex=qr;let p=up(d?[]:new rd,")");switch(d){case"":Ng(e,u),e.conditions.push(p);break;case"limit":switch(p.length){case 1:e.limit=+p[0];break;case 2:e.offset=+p[0],e.limit=p[1]-e.offset;break;default:Qt("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(p[0])&&p.length===1&&!p[0].name?(e.select=p[0],e.select.asArray=!0):p.length===1?e.select=p[0]:p.length===2&&p[1]===""?e.select=p.slice(0,1):e.select=p;break;case"group-by":Qt("group by is not implemented yet");case"sort":e.sort=_B(p);break;default:Qt(`unknown query function call ${d}`)}zo[qr]===","?r.lastIndex=++qr:o=!0,s=null;break;case"{":e.conditions&&Qt("property sets are not allowed in a queries"),d||Qt("property sets must have a defined parent property name"),ed.lastIndex=qr,m=up([],"}"),m.name=d,e.push(m),zo[qr]===","?r.lastIndex=++qr:o=!0;break;case"[":if(ed.lastIndex=qr,d?(m=up(new rd,"]"),m.name=d):m=up(e.conditions?new rd:[],"]"),e.conditions)if(Ng(e,u),zo[qr]==="="){l=decodeURIComponent,i="equals",s=td(d),r.lastIndex=++qr;break}else e.conditions.push(m),s=null;else e.push(m);zo[qr]===","?r.lastIndex=++qr:o=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let h={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&EB(h,d),Ng(e,u),e.conditions.push(h)}else d&&Qt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(td(d));return e}else Qt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Qt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?O7:ed,r.lastIndex=qr),qr===zo.length)return e}t&&Qt(`expected '${t}', but encountered end of string`)}function Ng(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Qt("Can not mix operators within a condition grouping"):e.operator=t)}function td(e){return e.indexOf(".")>-1?e.split(".").map(td):decodeURIComponent(e)}function hB(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new rn.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function EB(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new rn.ClientError("wildcard can only be used at the end of a string")}function _B(e){let t=gB(e[0]);return e.length>1&&(t.next=_B(e.slice(1))),t}function gB(e){if(Array.isArray(e)){let t=gB(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}Qt(`Unknown sort type ${e}`)}function sd(e){return Array.isArray(e)?e.join("\0"):e}function jo(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function P7(e,t,r){return t*r/jo(e)}var rn,Us,zi,nc,R7,b7,A7,I7,II,NI,AI,C7,ed,O7,qr,li,zo,rd,Pg=se(()=>{rn=b(Ee()),Us=b(Jt()),zi=require("ordered-binary"),nc=require("lmdb");Lg();El();R7=.3,b7=.1,A7=.05,I7={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},II={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(wI,"executeConditions");a(nd,"searchByIndex");a(Ji,"findAttribute");a(w7,"joinTo");a(N7,"joinFrom");NI={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(dp,"filterByType");a(Cg,"estimateCondition");AI=class extends rn.Violation{static{a(this,"SyntaxViolation")}},C7=/[()[\]|!<>.]|(=\w*=)/,ed=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,O7=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(Og,"parseQuery");a(Qt,"recordError");a(up,"parseBlock");a(Ng,"assignOperator");a(td,"decodeProperty");a(hB,"typedDecoding");a(EB,"wildcardDecoding");a(_B,"toSortObject");a(gB,"toSortEntry");rd=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};a(sd,"flattenKey");a(jo,"estimatedEntryCount");a(P7,"intersectionEstimate")});var SB,xs,Dg=se(()=>{SB=b(ai());Qi();xs=class extends URLSearchParams{static{a(this,"RequestTarget")}#e;pathname;search;id;isCollection;constructor(t){let r,n;if(t&&(r=t.indexOf("?"))>-1){n=t.slice(0,r);let s=t.slice(r+1);super(s),this.search=s}else super(),n=t;this.pathname=n??"",this.#e=t}toString(){return this.#e?this.#e:this.size>0?this.pathname+"?"+super.toString():this.pathname}get url(){return this.toString()}delete(t){super.delete(t),this.conditions&&(this.conditions=this.conditions.filter(r=>r.attribute!==t)),this.#e=void 0}set(t,r){this.delete(t),super.set(t,r),this.conditions?.push({attribute:t,value:r})}append(t,r){super.append(t,r),this.#e=void 0,this.conditions?.push({attribute:t,value:r})}};(0,SB._assignPackageExport)("Resource",Xt)});var IB={};ye(IB,{MultiPartId:()=>vg,Resource:()=>Xt,contextStorage:()=>od,snakeCase:()=>D7,transformForSelect:()=>ad});function D7(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function TB(e,t){if(Rl=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(Rl=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new vg;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){Rl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return Rl=!0,null;e[e.length-1]==="/"&&(Rl=!0)}return t.coerceId(decodeURIComponent(e))}function Hn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,u,d;if(r){if(o)d=i,o=o.getContext?.()||o;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,o=i.getContext?.()||i):i?.transaction instanceof ko?o=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new id.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?o?(d=i,o=o.getContext?.()||o):o=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let E=c.indexOf("?");E>-1&&(l=this.parseQuery(c.slice(E+1),s),c=c.slice(0,E),c===""&&(u=!0));let _=this.parsePath(c,o,l);_?.id!==void 0?(_.query&&(l?l=Object.assign(_.query,l):l=_.query),u=_.isCollection,c=_.id):c=_,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new xs,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new xs,l.id=c,c==null&&(t.method==="get"&&AB.default.warn?.(`Using an argument with a value of ${c} for ${t.method}, is deprecated`,new Error("Invalid id")),u=!0);l||(l=new xs,l.id=c),u&&(l.isCollection=!0);let f;o||(o=od.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,p=h;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(p=a(E=>od.run(o,()=>h(E)),"runAction")),o?.transaction){let E=this.getResource(c,o,f);return E.then?E.then(p):p(E)}else return bt(o,()=>{o.transaction.startedFrom={resourceName:this.name,method:t.method};let E=this.getResource(c,o,f);return E.then?E.then(p):p(E)},f);function h(E){if(o.authorize&&(o.authorize=!1,m!==!1)){let _=t.type==="read"?E.allowRead(o.user,l,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,d,o):E.allowUpdate(o.user,d,o):t.type==="create"?E.allowCreate(o.user,d,o):E.allowDelete(o.user,l,o);if(_?.then)return _.then(R=>{if(!R)throw new id.AccessViolation(o.user);return typeof d?.then=="function"?d.then(S=>e(E,l,o,S)):e(E,l,o,d)});if(!_)throw new id.AccessViolation(o.user)}return typeof d?.then=="function"?d.then(_=>e(E,l,o,_)):e(E,l,o,d)}a(h,"authorizeActionOnResource")}}function as(e,t){let r=new id.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function CI(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function ad(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):CI(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(CI(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(CI(l,r,n)),f;for(let m of e){let p=d(m);p===void 0&&o&&(p=null),p?.then?(f||(f=[]),f.push(p.then(h=>u[m.name||m]=h))):u[m.name||m]=p}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=ad(c.select||c,d)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var yB,RB,id,bB,AB,od,L7,Xt,Rl,vg,Qi=se(()=>{yB=require("crypto");km();Vu();RB=b(ai()),id=b(Ee());Qa();Pg();bB=require("async_hooks");Dg();AB=b(ir()),od=new bB.AsyncLocalStorage,L7={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Xt=class{static{a(this,"Resource")}#e;#t;#n;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=Hn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=ad(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0,method:"get"});static put=Hn(function(t,r,n,s){if(Array.isArray(s)&&t.#n&&t.constructor.loadAsInstance!==!1){let i=[];for(let o of s){let c=t.constructor,l=o[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(o,n))):i.push(u.put(o,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):as(t,"put")},{hasContent:!0,type:"update",method:"put"});static patch=Hn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):as(t,"patch")},{hasContent:!0,type:"update",method:"patch"});static delete=Hn(function(t,r,n,s){return t.delete?t.delete(r):as(t,"delete")},{hasContent:!1,type:"delete",method:"delete"});static getNewId(){return(0,yB.randomUUID)()}static create(t,r,n){let s;return this.loadAsInstance===!1?typeof t=="object"&&t&&!n?(n=r,r=t,s=new xs,s.isCollection=!0):s=t:t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),n?n.getContext&&(n=n.getContext()):n=od.getStore()??{},bt(n,async()=>{n.transaction.startedFrom??={resourceName:this.name,method:"create"};let i=new this(s,n),o=await i.create?i.create(s,r):as(i,"create");return n.newLocation=s??o?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?o:i})}static invalidate=Hn(function(t,r,n,s){return t.invalidate?t.invalidate(r):as(t,"delete")},{hasContent:!1,type:"update",method:"invalidate"});static post=Hn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create",method:"post"});static update=Hn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update",method:"update"});static connect=Hn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):as(t,"connect")},{hasContent:!0,type:"read",method:"connect"});static subscribe=Hn(function(t,r,n,s){return t.subscribe?t.subscribe(r):as(t,"subscribe")},{type:"read",method:"subscribe"});static publish=Hn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.constructor.loadAsInstance===!1?t.publish(r,s):t.publish(s,r):as(t,"publish")},{hasContent:!0,type:"create",method:"publish"});static search=Hn(function(t,r,n){let s=t.search?t.search(r):as(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let o=ad(i,t.constructor);return s.map(o)}return s},{type:"read",method:"search"});static query=Hn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):as(t,"search")},{hasContent:!0,type:"read",method:"query"});static copy=Hn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):as(t,"copy")},{hasContent:!0,type:"create",method:"copy"});static move=Hn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):as(t,"move")},{hasContent:!0,type:"delete",method:"move"});async post(t,r){if(this.constructor.loadAsInstance===!1){if(t.isCollection&&this.create)return r=await this.create(t,r),r?.[this.constructor.primaryKey]}else if(this.#n)return(await this.constructor.create(this.#e,t,this.#t)).#e;as(this,"post")}static isCollection(t){return t&&t.#n}get isCollection(){return this.#n}static coerceId(t){return t}static parseQuery(t,r){return Og(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1),c=r?.headers&&L7[o];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===o))if(t=t.slice(0,s),n)n.property=o;else return{query:{property:o},id:TB(t,this),isCollection:Rl}}let i=TB(t,this);return Rl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return o&&(s.#n=!0),s}subscribe(t){return new ss}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new ss}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,RB._assignPackageExport)("Resource",Xt);a(D7,"snakeCase");a(TB,"pathToId");vg=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(Hn,"transactional");a(as,"missingMethod");a(CI,"selectFromObject");a(ad,"transformForSelect")});var bl,OI=se(()=>{bl=class{static{a(this,"ErrorResource")}error;constructor(t){this.error=t}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var PI={};ye(PI,{Resources:()=>cd,keyArrayToString:()=>ld,resetResources:()=>v7,resources:()=>Bs});function v7(){return Bs=new cd,Ue.resources=Bs,Bs}function ld(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var wB,NB,cd,Bs,sc=se(()=>{Qa();OI();wB=b(Q()),NB=b(Ee());Hr();cd=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;allTypes=new Map;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new NB.ServerError(`Conflicting paths for ${t}`);wB.default.error(c),i.Resource=new bl(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,o=t.length;for(;n<o;){s=n,n=t.indexOf("/",n),n===-1&&(n=o);let u=n===o?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===o&&(f=u.indexOf("?",s),f!==-1)){let m=u.slice(0,f);d=this.get(m)}if(d&&(!r||d.exportTypes?.[r]!==!1)){if(d.relativeURL=t.slice(f!==-1?f:n),!d.hasSubPaths)return d;i=d}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return bt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(v7,"resetResources");a(ld,"keyArrayToString")});function vI(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=OB,M7(e.primaryStore,e.auditStore)):(c=CB,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{PB(CB[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[o];u||(u=l[o]=new Map,u.envs=l,u.tableId=o,u.store=e.primaryStore),t=ld(t);let d=new DI(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 PB(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),LB(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=At(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=ld(c),u=0;do{let d=o.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,LI.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,LI.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 M7(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let l=OB[s];if(!l)return;let u=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{PB(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function LB(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function DB(e){return e.nextTransaction||(vI({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),LB(e)),e.nextTransaction}var LI,CB,OB,DI,MI=se(()=>{LI=b(Q());Vu();sc();Ki();CB=Object.create(null),OB=Object.create(null);a(vI,"addSubscription");DI=class extends ss{static{a(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(PB,"notifyFromTransactionData");a(M7,"listenToCommits");a(LB,"nextTransaction");a(DB,"whenNextTransaction")});var MB=M((jPe,vB)=>{"use strict";var UI=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};vB.exports=UI});var xB=M((JPe,UB)=>{"use strict";var xI=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};UB.exports=xI});var fp=M(FB=>{"use strict";var BB=fe(),U7=(G(),D(j)),{RecordEncoder:x7}=(El(),D(pB));BB.initSync();var B7=BB.get(U7.CONFIG_PARAMS.STORAGE_CACHING)!==!1,BI=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=B7&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:x7})}};FB.OpenDBIObject=BI});var mp=M((eLe,kB)=>{"use strict";var cs=fe(),Fs=(G(),D(j));cs.initSync();var Mg=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=cs.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||cs.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||cs.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",cs.get(Fs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=cs.get(Fs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),cs.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=cs.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),cs.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=cs.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),cs.get(Fs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=cs.get(Fs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=cs.get(Fs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};kB.exports=Mg;Mg.MAX_DBS=1e4});var gt=M((rLe,zB)=>{"use strict";var kI=require("lmdb"),ui=require("fs-extra"),ls=require("path"),Ug=xn(),qB=Q(),Gn=Jr().LMDB_ERRORS_ENUM,xg=xB(),{OpenDBIObject:HI}=fp(),$B=mp(),ic=Jt(),HB=(G(),D(j)),{table:F7,resetDatabases:k7}=(Oe(),D(mt)),GB=fe(),di=ic.INTERNAL_DBIS_NAME,VB=ic.DBI_DEFINITION_NAME,H7="data.mdb",G7="lock.mdb",pp=".mdb",q7="-lock",FI=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ks(t,r),this.key_type=this.dbi[ic.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[ic.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new kI.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Bg(e,t){if(e===void 0)throw new Error(Gn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Gn.ENV_NAME_REQUIRED)}a(Bg,"pathEnvNameValidation");async function GI(e,t,r=!0){try{await ui.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Gn.INVALID_BASE_PATH):n}try{let n=ls.join(e,t+pp);return await ui.access(n,ui.constants.R_OK|ui.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await ui.access(ls.join(e,t,H7),ui.constants.R_OK|ui.constants.F_OK),ls.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Gn.INVALID_ENVIRONMENT)}else throw new Error(Gn.INVALID_ENVIRONMENT);throw n}}a(GI,"validateEnvironmentPath");function Fg(e,t){if(Ug.validateEnv(e),t===void 0)throw new Error(Gn.DBI_NAME_REQUIRED)}a(Fg,"validateEnvDBIName");async function $7(e,t,r=!1,n=!1){Bg(e,t);let s=ls.basename(e);t=t.toString();let i=GB.get(HB.CONFIG_PARAMS.DATABASES);i||GB.setProperty(HB.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await GI(e,t,n),KB(e,t,r)}catch(o){if(o.message===Gn.INVALID_ENVIRONMENT){let c=ls.join(e,t);await ui.mkdirp(n?c:e);let l=new $B(n?c:c+pp,!1),u=kI.open(l);u.dbis=Object.create(null);let d=new HI(!1);u.openDB(di,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=qI(e,t,r);return u[ic.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw o}}a($7,"createEnvironment");async function V7(e,t,r,n=!0){Bg(e,t),t=t.toString();let s=ls.join(e,t);return F7({table:t,database:ls.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(V7,"copyEnvironment");async function KB(e,t,r=!1){Bg(e,t),t=t.toString();let n=qI(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 GI(e,t),i=ls.join(e,t+pp),o=s!=i,c=new $B(s,o),l=kI.open(c);l.dbis=Object.create(null);let u=WB(l);for(let d=0;d<u.length;d++)ks(l,u[d]);return l[ic.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(KB,"openEnvironment");async function K7(e,t,r=!1){Bg(e,t),t=t.toString();let n=ls.join(e,t+pp),s=await GI(e,t);if(global.lmdb_map!==void 0){let i=qI(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await YB(o),delete global.lmdb_map[i]}}await ui.remove(s),await ui.remove(s===n?s+q7:ls.join(ls.dirname(s),G7))}a(K7,"deleteEnvironment");async function YB(e){Ug.validateEnv(e);let t=e[ic.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(YB,"closeEnvironment");function qI(e,t,r=!1){let s=`${ls.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(qI,"getCachedEnvironmentName");function Y7(e){Ug.validateEnv(e);let t=Object.create(null),r=ks(e,di);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==di)try{t[n]=Object.assign(new xg,s)}catch{qB.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(Y7,"listDBIDefinitions");function WB(e){Ug.validateEnv(e);let t=[],r=ks(e,di);for(let{key:n}of r.getRange({start:!1}))n!==di&&t.push(n);return t}a(WB,"listDBIs");function W7(e,t){let n=ks(e,di).getEntry(t),s=new xg;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{qB.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(W7,"getDBIDefinition");function jB(e,t,r,n=!r){if(Fg(e,t),t=t.toString(),t===di)throw new Error(Gn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ks(e,t)}catch(s){if(s.message===Gn.DBI_DOES_NOT_EXIST){let i=new HI(r,n===!0),o=e.openDB(t,i),c=new xg(r===!0,n);return o[VB]=c,ks(e,di).putSync(t,c),e.dbis[t]=o,o}throw s}}a(jB,"createDBI");function ks(e,t){if(Fg(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==di?r=W7(e,t):r=new xg,r===void 0)throw new Error(Gn.DBI_DOES_NOT_EXIST);let n;try{let s=new HI(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(Gn.DBI_DOES_NOT_EXIST):s}return n[VB]=r,e.dbis[t]=n,n}a(ks,"openDBI");function j7(e,t){Fg(e,t),t=t.toString();let r=ks(e,t),n=r.getStats();return r[ic.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(j7,"statDBI");async function z7(e,t){try{let r=ls.join(e,t+pp);return(await ui.stat(r)).size}catch{throw new Error(Gn.INVALID_ENVIRONMENT)}}a(z7,"environmentDataSize");function J7(e,t){if(Fg(e,t),t=t.toString(),t===di)throw new Error(Gn.CANNOT_DROP_INTERNAL_DBIS_NAME);ks(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ks(e,di).removeSync(t)}a(J7,"dropDBI");function Q7(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{ks(e,i)}catch(o){if(o.message===Gn.DBI_DOES_NOT_EXIST)jB(e,i,i!==t,i===t),n=!0;else throw o}}n&&k7()}a(Q7,"initializeDBIs");zB.exports={openDBI:ks,openEnvironment:KB,createEnvironment:$7,listDBIs:WB,listDBIDefinitions:Y7,createDBI:jB,dropDBI:J7,statDBI:j7,deleteEnvironment:K7,initializeDBIs:Q7,TransactionCursor:FI,environmentDataSize:z7,copyEnvironment:V7,closeEnvironment:YB}});var XB=M((sLe,QB)=>{"use strict";var $I=gt(),X7=Q(),JB=Jr().LMDB_ERRORS_ENUM;QB.exports=Z7;async function Z7(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await $I.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==JB.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await $I.closeEnvironment(global.lmdb_map[n]),await $I.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==JB.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){X7.error(t)}}a(Z7,"cleanLMDBMap")});var Zi=M((oLe,eF)=>{"use strict";var ZB=ae(),eee=(G(),D(j)),ud=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Xi=require("joi"),oc={schema_format:{pattern:ud,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},tee=Xi.alternatives(Xi.string().min(1).max(oc.schema_length.maximum).pattern(ud).messages({"string.pattern.base":"{:#label} "+oc.schema_format.message}),Xi.number(),Xi.array()).required(),ree=Xi.alternatives(Xi.string().min(1).max(oc.schema_length.maximum).pattern(ud).messages({"string.pattern.base":"{:#label} "+oc.schema_format.message}),Xi.number()),nee=Xi.alternatives(Xi.string().min(1).max(oc.schema_length.maximum).pattern(ud).messages({"string.pattern.base":"{:#label} "+oc.schema_format.message}),Xi.number()).required();function see(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>oc.schema_length.maximum?`'${property_name}' maximum of 250 characters`:ud.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}a(see,"checkValidTable");function iee(e,t){return ZB.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(iee,"validateSchemaExists");function oee(e,t){let r=t.state.ancestors[0].schema;return ZB.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(oee,"validateTableExists");function aee(e,t){return e.toLowerCase()===eee.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(aee,"validateSchemaName");eF.exports={commonValidators:oc,schemaRegex:ud,hdbSchemaTable:tee,validateSchemaExists:iee,validateTableExists:oee,validateSchemaName:aee,checkValidTable:see,hdbDatabase:ree,hdbTable:nee}});var KI=M((cLe,rF)=>{var{hdbTable:cee,hdbDatabase:tF}=Zi(),lee=ft(),VI=require("joi"),uee={undefined:"undefined",null:"null"},dee=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||uee[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"customRecordsVal"),fee=VI.object({database:tF,schema:tF,table:cee,records:VI.array().items(VI.object().custom(dee)).required()});rF.exports=function(e){return lee.validateBySchema(e,fee)}});var sF=M((uLe,nF)=>{"use strict";var YI=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};nF.exports=YI});var oF=M((fLe,iF)=>{"use strict";var WI=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};iF.exports=WI});var cF=M((pLe,aF)=>{"use strict";var jI=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};aF.exports=jI});var uF=M((ELe,lF)=>{"use strict";var zI=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};lF.exports=zI});var Il=M((yLe,mF)=>{"use strict";var mee=gt(),pee=oF(),hee=cF(),Eee=uF(),eo=xn(),hp=Jr().LMDB_ERRORS_ENUM,_ee=Jt(),Jo=(G(),D(j)),gee=ae(),See=require("uuid"),gLe=require("lmdb"),{handleHDBError:Tee,hdbErrors:yee}=Ee(),{OVERFLOW_MARKER:SLe,MAX_SEARCH_KEY_LENGTH:TLe}=_ee,dF=fe();dF.initSync();var kg=dF.get(Jo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),JI=Jo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Al=Jo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Ree(e,t,r,n,s=eo.getNextMonotonicTime()){ew(e,t,r,n),QI(e,t,r);let i=new pee,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];fF(u,!0,s);let d=bee(e,t,r,u),f=u[t];o.push(d),c.push(f)}return XI(o,c,n,i,s)}a(Ree,"insertRecords");function bee(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][Jo.FUNC_VAL],n[o]=c)}let l=eo.getIndexedValues(c),u=e.dbis[o];if(l){kg&&u.prefetch(l.map(d=>({key:d,value:s})),Hg);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}kg&&e.dbis[t].prefetch([s],Hg),e.dbis[t].put(s,n,n[Al])})}a(bee,"insertRecord");function Aee(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(Aee,"removeSkippedRecords");function fF(e,t,r){let n=r>0;(n||!Number.isInteger(e[Al]))&&(e[Al]=r||(r=eo.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[JI]))&&(e[JI]=r||eo.getNextMonotonicTime()):delete e[JI]}a(fF,"setTimestamps");function QI(e,t,r){r.indexOf(Jo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Jo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Jo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Jo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),mee.initializeDBIs(e,t,r)}a(QI,"initializeTransaction");async function Iee(e,t,r,n,s=eo.getNextMonotonicTime()){ew(e,t,r,n),QI(e,t,r);let i=new hee,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=ZI(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),o.push(u);continue}c.push(m),l.push(f)}return XI(c,l,n,i,s,o)}a(Iee,"updateRecords");async function wee(e,t,r,n,s=eo.getNextMonotonicTime()){try{ew(e,t,r,n)}catch(l){throw Tee(l,l.message,yee.HTTP_STATUS_CODES.BAD_REQUEST)}QI(e,t,r);let i=new Eee,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;gee.isEmpty(u[t])?(d=See.v4(),u[t]=d):d=u[t];let f=ZI(e,t,u,d,i,!1,s);o.push(f),c.push(d)}return XI(o,c,n,i,s)}a(wee,"upsertRecords");async function XI(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||eo.getNextMonotonicTime(),Aee(r,i),n}a(XI,"finalizeWrite");function ZI(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(fF(r,!d,o),Number.isInteger(r[Al])&&u[Al]>r[Al])return!1;d&&s.original_records.push(u);let f,m=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let E=r[h],_=e.dbis[h];if(_===void 0)continue;let R=u[h];if(typeof E=="function"){let y=E([[u]]);Array.isArray(y)&&(E=y[0][Jo.FUNC_VAL],r[h]=E)}if(E===R)continue;let S=eo.getIndexedValues(R);if(S){kg&&_.prefetch(S.map(y=>({key:y,value:n})),Hg);for(let y=0,w=S.length;y<w;y++)_.remove(S[y],n)}if(S=eo.getIndexedValues(E),S){kg&&_.prefetch(S.map(y=>({key:y,value:n})),Hg);for(let y=0,w=S.length;y<w;y++)_.put(S[y],n)}}let p={...u,...r};c.put(n,p,p[Al])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:ZI(e,t,r,n,s,i,o))}a(ZI,"updateUpsertRecord");function Nee(e,t,r){if(eo.validateEnv(e),t===void 0)throw new Error(hp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(hp.WRITE_ATTRIBUTES_REQUIRED):new Error(hp.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Nee,"validateBasic");function ew(e,t,r,n){if(Nee(e,t,r),!Array.isArray(n))throw n===void 0?new Error(hp.RECORDS_REQUIRED):new Error(hp.RECORDS_MUST_BE_ARRAY)}a(ew,"validateWrite");function Hg(){}a(Hg,"noop");mF.exports={insertRecords:Ree,updateRecords:Iee,upsertRecords:wee}});var to=M((bLe,Cee)=>{Cee.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"hash_function"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"id",table:"hdb_license",database:"system",audit:!0,attributes:[{attribute:"id"},{name:"level"},{name:"region",indexed:!0},{name:"reads"},{name:"writes"},{name:"readBytes"},{name:"writeBytes"},{name:"realTimeMessages"},{name:"realTimeBytes"},{name:"cpuTime"},{name:"storage"},{name:"usedReads"},{name:"usedWrites"},{name:"usedReadBytes"},{name:"usedWriteBytes"},{name:"usedRealTimeMessages"},{name:"usedRealTimeBytes"},{name:"usedCpuTime"},{name:"usedStorage"},{name:"expiration"},{name:"autoRenew"},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics_hostname:{hash_attribute:"id",name:"hdb_analytics_hostname",schema:"system",attributes:[{attribute:"id"},{attribute:"hostname"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]},hdb_certificate_cache:{hash_attribute:"certificate_id",name:"hdb_certificate_cache",schema:"system",attributes:[{attribute:"certificate_id"}]},hdb_crl_cache:{hash_attribute:"distribution_point",name:"hdb_crl_cache",schema:"system",attributes:[{attribute:"distribution_point"}]},hdb_revoked_certificates:{hash_attribute:"composite_id",name:"hdb_revoked_certificates",schema:"system",attributes:[{attribute:"composite_id"}]}}});var hF=M((ALe,pF)=>{"use strict";var Oee=require("uuid"),tw=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||Oee.v4(),this.schema_table=`${this.schema}.${this.table}`}};pF.exports=tw});var Gg=M((wLe,EF)=>{"use strict";var Pee=hF(),rw=class extends Pee{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};EF.exports=rw});var gF=M((CLe,_F)=>{"use strict";_F.exports=Dee;var Lee="inserted";function Dee(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===Lee?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(Dee,"returnObject")});var qg=M((LLe,TF)=>{"use strict";var vee=(G(),D(j)),nw=gt(),Mee=Il(),{getSystemSchemaPath:Uee,getSchemaPath:xee}=Rt(),PLe=to(),{validateBySchema:Bee}=ft(),Ep=require("joi"),Fee=Gg(),kee=gF(),{handleHDBError:Hee,hdbErrors:Gee,ClientError:qee}=Ee(),SF=ae(),{HTTP_STATUS_CODES:$ee}=Gee,Vee="inserted";TF.exports=Kee;async function Kee(e){let t=Bee(e,Ep.object({database:Ep.string(),schema:Ep.string(),table:Ep.string().required(),attribute:Ep.string().required()}));if(t)throw new qee(t.message);let r=!e.skip_table_check&&SF.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Hee(new Error,r,$ee.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=SF.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 Fee(e.schema,e.table,e.attribute,e.id);try{let i=await nw.openEnvironment(xee(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}`);nw.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await nw.openEnvironment(Uee(),vee.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await Mee.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return kee(Vee,c,{records:[s]},l)}catch(i){throw i}}a(Kee,"lmdbCreateAttribute")});var _p=M((MLe,RF)=>{"use strict";var Qo=ae(),yF=Q(),vLe=KI(),{getDatabases:Yee}=(Oe(),D(mt)),{ClientError:wl}=Ee();RF.exports=Wee;function Wee(e){if(Qo.isEmpty(e))throw new wl("invalid update parameters defined.");if(Qo.isEmptyOrZeroLength(e.schema))throw new wl("invalid schema specified.");if(Qo.isEmptyOrZeroLength(e.table))throw new wl("invalid table specified.");if(!Array.isArray(e.records))throw new wl("records must be an array");let t=Yee()[e.schema]?.[e.table];if(Qo.isEmpty(t))throw new wl(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&Qo.isEmptyOrZeroLength(o[r]))throw yF.error("a valid hash attribute must be provided with update record:",o),new wl("a valid hash attribute must be provided with update record, check log for more info");if(!Qo.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw yF.error(`a valid hash value must be provided with ${e.operation} record:`,o),new wl(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Qo.isEmpty(o[r])&&o[r]!==""&&n.has(Qo.autoCast(o[r]))&&(o.skip=!0),n.add(Qo.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(Wee,"insertUpdateValidate")});var $g=M((xLe,AF)=>{"use strict";var bF=ae(),jee=(G(),D(j)),zee=Q(),Jee=qg(),Qee=Gg(),Xee=Xo(),{SchemaEventMsg:Zee}=us(),ete="already exists in";AF.exports=tte;async function tte(e,t,r){if(bF.isEmptyOrZeroLength(r))return r;let n=[];bF.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 rte(e,t.schema,t.name,i)})),s}a(tte,"lmdbCheckForNewAttributes");async function rte(e,t,r,n){let s=new Qee(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await nte(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(ete))zee.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(rte,"createNewAttribute");async function nte(e){let t;return t=await Jee(e),Xee.signalSchemaChange(new Zee(process.pid,jee.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(nte,"createAttribute")});var dd=M((FLe,IF)=>{"use strict";var sw=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};IF.exports=sw});var NF=M((HLe,wF)=>{"use strict";var ste=dd(),ite=(G(),D(j)).OPERATIONS_ENUM,iw=class extends ste{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(ite.INSERT,r,n,s,i),this.records=t}};wF.exports=iw});var OF=M((qLe,CF)=>{"use strict";var ote=dd(),ate=(G(),D(j)).OPERATIONS_ENUM,ow=class extends ote{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(ate.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};CF.exports=ow});var LF=M((VLe,PF)=>{"use strict";var cte=dd(),lte=(G(),D(j)).OPERATIONS_ENUM,aw=class extends cte{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(lte.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};PF.exports=aw});var vF=M((YLe,DF)=>{"use strict";var ute=dd(),dte=(G(),D(j)).OPERATIONS_ENUM,cw=class extends ute{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(dte.DELETE,n,s,t,i),this.original_records=r}};DF.exports=cw});var gp=M((zLe,BF)=>{"use strict";var jLe=require("path"),MF=gt(),fte=NF(),mte=OF(),pte=LF(),hte=vF(),fd=Jt(),UF=ae(),{CONFIG_PARAMS:Ete}=(G(),D(j)),xF=fe();xF.initSync();var Vg=(G(),D(j)).OPERATIONS_ENUM,{getTransactionAuditStorePath:_te}=Rt();BF.exports=gte;async function gte(e,t){if(xF.get(Ete.LOGGING_AUDITLOG)===!1)return;let r=_te(e.schema,e.table),n=await MF.openEnvironment(r,e.table,!0),s=Ste(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){MF.initializeDBIs(n,fd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,fd.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[fd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[fd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),UF.isEmpty(s.user_name)||n.dbis[fd.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[fd.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(gte,"writeTransaction");function Ste(e,t){let r=UF.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Vg.INSERT)return new fte(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vg.UPDATE)return new mte(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vg.UPSERT)return new pte(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vg.DELETE)return new hte(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Ste,"createTransactionObject")});var lw=M((XLe,FF)=>{"use strict";var Tte=_p(),QLe=xm(),Sp=(G(),D(j)),yte=Bm(),Rte=Il().insertRecords,bte=gt(),Ate=Q(),Ite=$g(),{getSchemaPath:wte}=Rt(),Nte=gp();FF.exports=Cte;async function Cte(e){try{let{schemaTable:t,attributes:r}=Tte(e);yte(e,r,t.hash_attribute),e.schema!==Sp.SYSTEM_SCHEMA_NAME&&(r.includes(Sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Ite(e.hdb_auth_header,t,r),s=wte(e.schema,e.table),i=await bte.openEnvironment(s,e.table),o=await Rte(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Nte(e,o)}catch(c){Ate.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(Cte,"lmdbCreateRecords")});var GF=M((eDe,HF)=>{"use strict";var kF=(G(),D(j)),Ote=lw(),Pte=xm(),Lte=require("fs-extra"),{getSchemaPath:Dte}=Rt();HF.exports=vte;async function vte(e){let t=[{name:e.schema,createddate:Date.now()}],r=new Pte(kF.SYSTEM_SCHEMA_NAME,kF.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Ote(r),await Lte.mkdirp(Dte(e.schema))}a(vte,"lmdbCreateSchema")});var $F=M((rDe,qF)=>{"use strict";var uw=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};qF.exports=uw});var WF=M((aDe,YF)=>{"use strict";var VF=gt(),dw=xn(),fw=Jr().LMDB_ERRORS_ENUM,Mte=Jt(),KF=Q(),sDe=ae(),Ute=require("lmdb"),xte=$F(),Bte=(G(),D(j)),{OVERFLOW_MARKER:iDe,MAX_SEARCH_KEY_LENGTH:oDe}=Mte,Fte=Bte.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function kte(e,t,r,n){if(dw.validateEnv(e),t===void 0)throw new Error(fw.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(fw.IDS_REQUIRED):new Error(fw.IDS_MUST_BE_ITERABLE);try{let s=VF.listDBIs(e);VF.initializeDBIs(e,t,s);let i=new xte,o,c=[],l=[];for(let m=0,p=r.length;m<p;m++)try{o=r[m];let h=e.dbis[t].get(o);if(!h||n&&h[Fte]>n){i.skipped.push(o);continue}let E=e.dbis[t].ifVersion(o,Ute.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let _=0;_<s.length;_++){let R=s[_];if(!h.hasOwnProperty(R)||R===t)continue;let S=e.dbis[R],y=h[R];if(y!=null)try{let w=dw.getIndexedValues(y);if(w)for(let I=0,H=w.length;I<H;I++)S.remove(w[I],o)}catch{KF.warn(`cannot delete from attribute: ${R}, ${y}:${o}`)}}});c.push(E),l.push(o),i.original_records.push(h)}catch(h){KF.warn(h),i.skipped.push(o)}let u=[],d=await Promise.all(c);for(let m=0,p=d.length;m<p;m++)d[m]===!0?i.deleted.push(l[m]):(i.skipped.push(l[m]),u.push(m));let f=0;for(let m=0;m<u.length;m++){let p=u[m];i.original_records.splice(p-f,1),f++}return i.txn_time=dw.getNextMonotonicTime(),i}catch(s){throw s}}a(kte,"deleteRecords");YF.exports={deleteRecords:kte}});var Tp=M((lDe,zF)=>{"use strict";var md=ae(),Hte=WF(),Gte=gt(),{getSchemaPath:qte}=Rt(),$te=gp(),Vte=Q();zF.exports=Kte;async function Kte(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(md.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(md.isEmptyOrZeroLength(e.hash_values)&&!md.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];md.isEmpty(l)||e.hash_values.push(l)}}if(md.isEmptyOrZeroLength(e.hash_values))return jF([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(md.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=qte(e.schema,e.table),i=await Gte.openEnvironment(s,e.table),o=await Hte.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await $te(e,o)}catch(c){Vte.error(`unable to write transaction due to ${c.message}`)}return jF(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(Kte,"lmdbDeleteRecords");function jF(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(jF,"createDeleteResponse")});var pw=M((fDe,JF)=>{"use strict";var Yte=(G(),D(j)),dDe=xn();function mw(e,t){let r=Object.create(null);if(t.length===1&&Yte.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(mw,"parseRow");function Wte(e,t,r,n){let s=mw(r,e);n.push(s)}a(Wte,"searchAll");function jte(e,t,r,n){let s=mw(r,e);n[t]=s}a(jte,"searchAllToMap");function zte(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(zte,"iterateDBI");function Nl(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Nl,"pushResults");function Jte(e,t,r,n,s,i){t.toString().endsWith(e)&&Nl(t,r,n,s,i)}a(Jte,"endsWith");function Qte(e,t,r,n,s,i){t.toString().includes(e)&&Nl(t,r,n,s,i)}a(Qte,"contains");function Xte(e,t,r,n,s,i){t>e&&Nl(t,r,n,s,i)}a(Xte,"greaterThanCompare");function Zte(e,t,r,n,s,i){t>=e&&Nl(t,r,n,s,i)}a(Zte,"greaterThanEqualCompare");function ere(e,t,r,n,s,i){t<e&&Nl(t,r,n,s,i)}a(ere,"lessThanCompare");function tre(e,t,r,n,s,i){t<=e&&Nl(t,r,n,s,i)}a(tre,"lessThanEqualCompare");JF.exports={parseRow:mw,searchAll:Wte,searchAllToMap:jte,iterateDBI:zte,endsWith:Jte,contains:Qte,greaterThanCompare:Xte,greaterThanEqualCompare:Zte,lessThanCompare:ere,lessThanEqualCompare:tre,pushResults:Nl}});var pd=M((_De,nk)=>{"use strict";var ac=gt(),pDe=Q(),ds=xn(),Kg=Jt(),ar=Jr().LMDB_ERRORS_ENUM,hDe=ae(),rre=(G(),D(j)),Yg=pw(),{parseRow:nre}=Yg,EDe=require("lmdb"),{OVERFLOW_MARKER:QF,MAX_SEARCH_KEY_LENGTH:sre}=Kg;function XF(e,t,r,n=!1,s=void 0,i=void 0){return Cl(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(XF,"iterateFullIndex");function yp(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return Cl(e,t,r,(d,f,m,p)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return p===r?(S.values=!1,f.getRange(S).map(y=>({value:y}))):f.getRange(S)})}a(yp,"iterateRangeBetween");function Cl(e,t,r,n){let s=e.database||e,i=ac.openDBI(s,r);i[Kg.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ac.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Cl,"setupTransaction");function ZF(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(QF)){if(!s)if(r)s=ac.openDBI(e,r);else{let l=ac.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=ac.openDBI(e,l[u]),!s[Kg.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(ZF,"getOverflowCheck");function ire(e,t,r,n=!1,s=void 0,i=void 0){if(ds.validateEnv(e),t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);return Cl(e,t,t,(o,c,l)=>(Wg(r),r=Rp(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>nre(u.value,r))))}a(ire,"searchAll");function ore(e,t,r,n=!1,s=void 0,i=void 0){if(ds.validateEnv(e),t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);Wg(r),r=Rp(e.database||e,r);let o=new Map;for(let{key:c,value:l}of XF(e,t,t,n,s,i))o.set(c,Yg.parseRow(l,r));return o}a(ore,"searchAllToMap");function are(e,t,r=!1,n=void 0,s=void 0){if(ds.validateEnv(e),t===void 0)throw new Error(ar.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=XF(e,void 0,t,r,n,s),c=o.transaction,l=ZF(c.database,c,void 0,t);for(let{key:u,value:d}of o){let f=l(u,d);i[f]===void 0&&(i[f]=[]),i[f].push(d)}return i}a(are,"iterateDBI");function cre(e,t){if(ds.validateEnv(e),t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);return ac.statDBI(e,t).entryCount}a(cre,"countAll");function lre(e,t,r,n,s=!1,i=void 0,o=void 0){return cc(e,r,n),Cl(e,t,r,(c,l,u,d)=>(n=ds.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(f=>({key:n,value:f}))))}a(lre,"equals");function ure(e,t,r){return cc(e,t,r),ac.openDBI(e,t).getValuesCount(r)}a(ure,"count");function dre(e,t,r,n,s=!1,i=void 0,o=void 0){return cc(e,r,n),Cl(e,null,r,(c,l)=>{n=ds.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(o)?o++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:o}).map(m=>{let{key:p}=m;if(p!==f){if(p.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}a(dre,"startsWith");function fre(e,t,r,n,s=!1,i=void 0,o=void 0){return ek(e,t,r,n,s,i,o,!0)}a(fre,"endsWith");function ek(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return cc(e,r,n),Cl(e,null,r,(l,u,d,f)=>{let m=ZF(d,l,f,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(p=>{let h=p.toString();return h.endsWith(QF)?u.getValues(p,{transaction:l}).map(E=>{let _=m(p,E);if(c?_.endsWith(n):_.includes(n))return{key:_,value:E}}).filter(E=>E):(c?h.endsWith(n):h.includes(n))?u[Kg.DBI_DEFINITION_NAME].is_hash_attribute?{key:p,value:p}:u.getValues(p,{transaction:l}).map(E=>({key:p,value:E})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(ek,"contains");function mre(e,t,r,n,s=!1,i=void 0,o=void 0){cc(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),yp(e,t,r,n,l,s,i,o,!0,!1)}a(mre,"greaterThan");function pre(e,t,r,n,s=!1,i=void 0,o=void 0){cc(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),yp(e,t,r,n,l,s,i,o,!1,!1)}a(pre,"greaterThanEqual");function hre(e,t,r,n,s=!1,i=void 0,o=void 0){cc(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),yp(e,t,r,l,n,s,i,o,!1,!0)}a(hre,"lessThan");function Ere(e,t,r,n,s=!1,i=void 0,o=void 0){cc(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),yp(e,t,r,l,n,s,i,o,!1,!1)}a(Ere,"lessThanEqual");function _re(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(ds.validateEnv(e),r===void 0)throw new Error(ar.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ar.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ar.END_VALUE_REQUIRED);if(n=ds.convertKeyValueToWrite(n),s=ds.convertKeyValueToWrite(s),n>s)throw new Error(ar.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return yp(e,t,r,n,s,i,o,c)}a(_re,"between");function gre(e,t,r,n){ds.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);if(Wg(r),r=Rp(s,r),n===void 0)throw new Error(ar.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Yg.parseRow(c,r)),o}a(gre,"searchByHash");function Sre(e,t,r){ds.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ar.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(Sre,"checkHashExists");function Tre(e,t,r,n,s=[]){return rk(e,t,r,n,s),tk(e,t,r,n,s).map(i=>i[1])}a(Tre,"batchSearchByHash");function yre(e,t,r,n,s=[]){rk(e,t,r,n,s);let i=new Map;for(let[o,c]of tk(e,t,r,n,s))i.set(o,c);return i}a(yre,"batchSearchByHashToMap");function tk(e,t,r,n,s=[]){return Cl(e,t,t,(i,o,c)=>{r=Rp(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,Yg.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(tk,"batchHashSearch");function rk(e,t,r,n,s){if(ds.validateEnv(e),t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);if(Wg(r),n==null)throw new Error(ar.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ar.IDS_MUST_BE_ITERABLE)}a(rk,"initializeBatchSearchByHash");function Wg(e){if(!Array.isArray(e))throw e===void 0?new Error(ar.FETCH_ATTRIBUTES_REQUIRED):new Error(ar.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Wg,"validateFetchAttributes");function cc(e,t,r){if(ds.validateEnv(e),t===void 0)throw new Error(ar.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ar.SEARCH_VALUE_REQUIRED);if(r?.length>sre)throw new Error(ar.SEARCH_VALUE_TOO_LARGE)}a(cc,"validateComparisonFunctions");function Rp(e,t){return t.length===1&&rre.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ac.listDBIs(e)),t}a(Rp,"setGetWholeRowAttributes");nk.exports={searchAll:ire,searchAllToMap:ore,count:ure,countAll:cre,equals:lre,startsWith:dre,endsWith:fre,contains:ek,searchByHash:gre,setGetWholeRowAttributes:Rp,batchSearchByHash:Tre,batchSearchByHashToMap:yre,checkHashExists:Sre,iterateDBI:are,greaterThan:mre,greaterThanEqual:pre,lessThan:hre,lessThanEqual:Ere,between:_re}});var hd=M((SDe,ck)=>{var sk=require("lodash"),ik=ft(),Je=require("joi"),Rre=ae(),{hdbSchemaTable:bp,checkValidTable:ok,hdbTable:ak,hdbDatabase:jg}=Zi(),{handleHDBError:bre,hdbErrors:Are}=Ee(),{getDatabases:Ire}=(Oe(),D(mt)),{HTTP_STATUS_CODES:wre}=Are,Nre=Je.object({database:jg,schema:jg,table:ak,attribute:bp,value:Je.any().required(),get_attributes:Je.array().min(1).items(Je.alternatives(bp,Je.object())).optional(),desc:Je.bool(),limit:Je.number().integer().min(1),offset:Je.number().integer().min(0)}),Cre=Je.object({database:jg,schema:jg,table:ak,operator:Je.string().valid("and","or").default("and").lowercase(),offset:Je.number().integer().min(0),limit:Je.number().integer().min(1),get_attributes:Je.array().min(1).items(Je.alternatives(bp,Je.object())).optional(),sort:Je.object({attribute:Je.alternatives(bp,Je.array().min(1)),descending:Je.bool().optional()}).optional(),conditions:Je.array().min(1).items(Je.alternatives(Je.object({operator:Je.string().valid("and","or").default("and").lowercase(),conditions:Je.array()}),Je.object({attribute:Je.alternatives(bp,Je.array().min(1)),comparator:Je.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),value:Je.when("comparator",{switch:[{is:"equals",then:Je.any()},{is:"between",then:Je.array().items(Je.alternatives([Je.string(),Je.number()])).length(2)}],otherwise:Je.alternatives(Je.string(),Je.number())}).required()}))).required()});ck.exports=function(e,t){let r=null;switch(t){case"value":r=ik.validateBySchema(e,Nre);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(ok("database",e.schema)),i(ok("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=ik.validateBySchema(e,Cre);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Rre.checkGlobalSchemaTable(e.schema,e.table);if(s)return bre(new Error,s,wre.NOT_FOUND);let o=Ire()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.attribute);let l=a(d=>{for(let f of d.conditions)f.conditions?l(f):c.push(f.attribute)},"addConditions");t==="conditions"&&l(e);let u=sk.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!sk.some(o,f=>f===d||f.attribute===d||f.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var hw=M((yDe,lk)=>{"use strict";var Ore=gt(),Pre=hd(),{getSchemaPath:Lre}=Rt();lk.exports=Dre;function Dre(e){let t=Pre(e,"hashes");if(t)throw t;let r=Lre(e.schema,e.table);return Ore.openEnvironment(r,e.table)}a(Dre,"initialize")});var Ew=M((bDe,uk)=>{"use strict";var vre=pd(),Mre=hw();uk.exports=Ure;async function Ure(e){let t=await Mre(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return vre.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Ure,"lmdbGetDataByHash")});var Ed=M((IDe,dk)=>{"use strict";var _w=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};dk.exports=_w});var mk=M((CDe,fk)=>{"use strict";var NDe=Ed(),xre=pd(),Bre=hw();fk.exports=Fre;async function Fre(e){let t=await Bre(e),r=global.hdb_schema[e.schema][e.table];return xre.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Fre,"lmdbSearchByHash")});var fi=M((PDe,pk)=>{"use strict";var gw=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.attribute=n,this.value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};pk.exports=gw});var zg=M((DDe,Tk)=>{"use strict";var _n=pd(),kre=gt(),Hre=ae(),Qe=Jt(),Ol=(G(),D(j)),Gre=to(),hk=Jr().LMDB_ERRORS_ENUM,{getSchemaPath:qre}=Rt(),Zo=Ol.SEARCH_WILDCARDS;async function $re(e,t,r){let n;e.schema===Ol.SYSTEM_SCHEMA_NAME?n=Gre[e.table]:n=global.hdb_schema[e.schema][e.table];let s=Sk(e,n.hash_attribute,r,t);return _k(e,s,n.hash_attribute,r)}a($re,"prepSearch");async function _k(e,t,r,n){let s=qre(e.schema,e.table),i=await kre.openEnvironment(s,e.table),o=gk(i,e,t,r),c=o.transaction||i;if([Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Qe.SEARCH_TYPES.SEARCH_ALL,Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Vre(e,r)===!1){let d=e.attribute;if(d===r)return n?Ek(o,()=>!0):o.map(m=>({[r]:m.key}));let f=a(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?Ek(o,f):o.map(f)}let u=e.attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?_n.batchSearchByHashToMap(c,r,e.get_attributes,u):_n.batchSearchByHash(c,r,e.get_attributes,u)}a(_k,"executeSearch");function gk(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case Qe.SEARCH_TYPES.EQUALS:s=_n.equals(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.CONTAINS:s=_n.contains(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.ENDS_WITH:case Qe.SEARCH_TYPES._ENDS_WITH:s=_n.endsWith(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.STARTS_WITH:case Qe.SEARCH_TYPES._STARTS_WITH:s=_n.startsWith(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return _n.batchSearchByHash(e,t.attribute,t.get_attributes,[t.value]);case Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return _n.batchSearchByHashToMap(e,t.attribute,t.get_attributes,[t.value]);case Qe.SEARCH_TYPES.SEARCH_ALL:return _n.searchAll(e,n,t.get_attributes,o,c,l);case Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return _n.searchAllToMap(e,n,t.get_attributes,o,c,l);case Qe.SEARCH_TYPES.BETWEEN:s=_n.between(e,i,t.attribute,t.value,t.end_value,o,c,l);break;case Qe.SEARCH_TYPES.GREATER_THAN:case Qe.SEARCH_TYPES._GREATER_THAN:s=_n.greaterThan(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.GREATER_THAN_EQUAL:case Qe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=_n.greaterThanEqual(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.LESS_THAN:case Qe.SEARCH_TYPES._LESS_THAN:s=_n.lessThan(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.LESS_THAN_EQUAL:case Qe.SEARCH_TYPES._LESS_THAN_EQUAL:s=_n.lessThanEqual(e,i,t.attribute,t.value,o,c,l);break;default:return Object.create(null)}return s}a(gk,"searchByType");function Ek(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(Ek,"createMapFromIterable");function Vre(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(Vre,"checkToFetchMore");function Sk(e,t,r,n){if(Hre.isEmpty(n)){let s=e.value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.attribute===t&&(c=!0),Zo.indexOf(s)>-1)return r===!0?Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Qe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Zo[0])<0&&s.indexOf(Zo[1])<0)return c===!0?r===!0?Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Qe.SEARCH_TYPES.EQUALS;if(Zo.indexOf(i)>=0&&Zo.indexOf(o)>=0)return e.value=e.value.slice(1,-1),Qe.SEARCH_TYPES.CONTAINS;if(Zo.indexOf(i)>=0)return e.value=e.value.substr(1),Qe.SEARCH_TYPES.ENDS_WITH;if(Zo.indexOf(o)>=0)return e.value=e.value.slice(0,-1),Qe.SEARCH_TYPES.STARTS_WITH;if(s.includes(Zo[0])||s.includes(Zo[1]))return Qe.SEARCH_TYPES.EQUALS;throw new Error(hk.UNKNOWN_SEARCH_TYPE)}else switch(n){case Ol.VALUE_SEARCH_COMPARATORS.BETWEEN:return Qe.SEARCH_TYPES.BETWEEN;case Ol.VALUE_SEARCH_COMPARATORS.GREATER:return Qe.SEARCH_TYPES.GREATER_THAN;case Ol.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Qe.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ol.VALUE_SEARCH_COMPARATORS.LESS:return Qe.SEARCH_TYPES.LESS_THAN;case Ol.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Qe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(hk.UNKNOWN_SEARCH_TYPE)}}a(Sk,"createSearchTypeFromSearchObject");Tk.exports={executeSearch:_k,createSearchTypeFromSearchObject:Sk,prepSearch:$re,searchByType:gk}});var Rk=M((UDe,yk)=>{"use strict";var MDe=fi(),Kre=hd(),Yre=ae(),Wre=(G(),D(j)),jre=zg();yk.exports=zre;function zre(e,t){if(!Yre.isEmpty(t)&&Wre.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Kre(e,"value");if(n)throw n;return jre.prepSearch(e,t,!0)}a(zre,"lmdbGetDataByValue")});var Ap=M((FDe,bk)=>{"use strict";var BDe=fi(),Jre=hd(),Qre=ae(),Xre=(G(),D(j)),Zre=zg();bk.exports=ene;async function ene(e,t){if(!Qre.isEmpty(t)&&Xre.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Jre(e,"value");if(n)throw n;return Zre.prepSearch(e,t,!1)}a(ene,"lmdbSearchByValue")});var Ik=M((GDe,Ak)=>{"use strict";var HDe=Jt(),Sw=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},Tw=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},yw=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Ak.exports={SearchByConditionsObject:Sw,SearchCondition:Tw,SortAttribute:yw}});var Pk=M((YDe,Ok)=>{"use strict";var{SearchByConditionsObject:$De,SearchCondition:VDe}=Ik(),tne=fi(),rne=hd(),Rw=pd(),Jg=Jt(),{Resource:KDe}=(Qi(),D(IB)),Ck=zg(),nne=pw(),sne=require("lodash"),{getSchemaPath:ine}=Rt(),wk=gt(),{handleHDBError:one,hdbErrors:ane}=Ee(),{HTTP_STATUS_CODES:cne}=ane,lne=1e8;Ok.exports=une;async function une(e){let t=rne(e,"conditions");if(t)throw one(t,t.message,cne.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=ine(e.schema,e.table),n=await wk.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)wk.openDBI(n,u.attribute);let i=sne.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===Jg.SEARCH_TYPES.EQUALS?u.estimated_count=Rw.count(n,u.attribute,u.value):d===Jg.SEARCH_TYPES.CONTAINS||d===Jg.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=lne}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await Nk(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(Ck.filterByType),f=d.length,m=Rw.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(p=>u.get(p,{transaction:o,lazy:!0})),f>0&&(l=l.filter(p=>{for(let h=0;h<f;h++)if(!d[h](p))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(p=>nne.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await Nk(o,e,m,s.hash_attribute);c=c.concat(p)}let u=new Set,d=e.offset||0;c=c.filter(f=>u.has(f)?!1:(u.add(f),!0)).slice(d,e.limit&&e.limit+d),l=Rw.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(une,"lmdbSearchByConditions");async function Nk(e,t,r,n){let s=new tne(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.comparator;return s.attribute=r.attribute,i===Jg.SEARCH_TYPES.BETWEEN?(s.value=r.value[0],s.end_value=r.value[1]):s.value=r.value,Ck.searchByType(e,s,i,n).map(o=>o.value)}a(Nk,"executeConditionSearch")});var Ip=M((jDe,Lk)=>{"use strict";var dne=(G(),D(j)).OPERATIONS_ENUM,bw=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=dne.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};Lk.exports=bw});var Aw=M((JDe,kk)=>{"use strict";var Uk=fi(),xk=Ip(),Bk=Ap(),Fk=Tp(),qn=(G(),D(j)),Dk=ae(),vk=gt(),{getTransactionAuditStorePath:fne,getSchemaPath:mne}=Rt(),Mk=Q();kk.exports=pne;async function pne(e){try{if(Dk.isEmpty(global.hdb_schema[e.schema])||Dk.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await hne(e),await Ene(e);let t=mne(e.schema,e.table);try{await vk.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Mk.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=fne(e.schema,e.table);await vk.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Mk.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(pne,"lmdbDropTable");async function hne(e){let t=new Uk(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Bk(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new xk(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await Fk(s)}a(hne,"deleteAttributesFromSystem");async function Ene(e){let t=new Uk(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await Bk(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new xk(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await Fk(s)}catch(i){throw i}}a(Ene,"dropTableFromSystem")});var Gk=M((XDe,Hk)=>{"use strict";var _ne=require("fs-extra"),gne=fi(),Sne=Ed(),Tne=Ip(),yne=Aw(),Rne=Tp(),bne=Ew(),Ane=Ap(),ea=(G(),D(j)),{getSchemaPath:Ine}=Rt(),{handleHDBError:wne,hdbErrors:Nne}=Ee(),{HDB_ERROR_MSGS:Cne,HTTP_STATUS_CODES:One}=Nne;Hk.exports=Pne;async function Pne(e){let t;try{t=await Lne(e.schema);let r=new gne(ea.SYSTEM_SCHEMA_NAME,ea.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ea.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ea.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await Ane(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await yne(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new Tne(ea.SYSTEM_SCHEMA_NAME,ea.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Rne(s);let i=Ine(t);await _ne.remove(i)}catch(r){throw r}}a(Pne,"lmdbDropSchema");async function Lne(e){let t=new Sne(ea.SYSTEM_SCHEMA_NAME,ea.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ea.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await bne(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw wne(new Error,Cne.SCHEMA_NOT_FOUND(e),One.NOT_FOUND,void 0,void 0,!0);return n}a(Lne,"validateDropSchema")});var wp=M((eve,qk)=>{"use strict";var Iw=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};qk.exports=Iw});var Nw=M((nve,$k)=>{"use strict";var Dne=require("fs-extra"),Qg=gt(),{getTransactionAuditStorePath:vne}=Rt(),ww=Jt(),rve=wp();$k.exports=Mne;async function Mne(e){let t;try{let r=vne(e.schema,e.table);await Dne.mkdirp(r),t=await Qg.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{Qg.createDBI(t,ww.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Qg.createDBI(t,ww.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Qg.createDBI(t,ww.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(Mne,"createTransactionsAuditEnvironment")});var Yk=M((ove,Kk)=>{"use strict";var Cw=(G(),D(j)),Vk=gt(),Une=Il(),{getSystemSchemaPath:xne,getSchemaPath:Bne}=Rt(),ive=to(),Fne=qg(),Ow=Gg(),kne=Q(),Hne=Nw();Kk.exports=Gne;async function Gne(e,t){let r=Bne(t.schema,t.table),n=new Ow(t.schema,t.table,Cw.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Ow(t.schema,t.table,Cw.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Ow(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Vk.createEnvironment(r,t.table),e!==void 0){let o=await Vk.openEnvironment(xne(),Cw.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Une.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdbTableAttributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Pw(n),await Pw(s),await Pw(i)}await Hne(t)}catch(o){throw o}}a(Gne,"lmdbCreateTable");async function Pw(e){try{await Fne(e)}catch(t){kne.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Pw,"createAttribute")});var jk=M((cve,Wk)=>{"use strict";var qne=_p(),$ne=Bm(),Vne=$g(),Np=(G(),D(j)),Kne=Il().updateRecords,Yne=gt(),{getSchemaPath:Wne}=Rt(),jne=gp(),zne=Q();Wk.exports=Jne;async function Jne(e){try{let{schemaTable:t,attributes:r}=qne(e);$ne(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 Vne(e.hdb_auth_header,t,r),s=Wne(e.schema,e.table),i=await Yne.openEnvironment(s,e.table),o=await Kne(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await jne(e,o)}catch(c){zne.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(Jne,"lmdbUpdateRecords")});var Jk=M((uve,zk)=>{"use strict";var Qne=(G(),D(j)).OPERATIONS_ENUM,Lw=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Qne.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};zk.exports=Lw});var Xk=M((mve,Qk)=>{"use strict";var fve=Jk(),Xne=_p(),Zne=Bm(),ese=$g(),Cp=(G(),D(j)),tse=Il().upsertRecords,rse=gt(),{getSchemaPath:nse}=Rt(),sse=gp(),ise=Q(),{handleHDBError:ose,hdbErrors:ase}=Ee();Qk.exports=cse;async function cse(e){let t;try{t=Xne(e)}catch(l){throw ose(l,l.message,ase.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;Zne(e,n,r.hash_attribute),e.schema!==Cp.SYSTEM_SCHEMA_NAME&&(n.includes(Cp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Cp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Cp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Cp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await ese(e.hdb_auth_header,r,n),i=nse(e.schema,e.table),o=await rse.openEnvironment(i,e.table),c=await tse(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await sse(e,c)}catch(l){ise.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schemaTable:r,new_attributes:s,txn_time:c.txn_time}}a(cse,"lmdbUpsertRecords")});var eH=M((hve,Zk)=>{"use strict";var Dw=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};Zk.exports=Dw});var rH=M((_ve,tH)=>{"use strict";var vw=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};tH.exports=vw});var iH=M((Tve,sH)=>{"use strict";var Mw=gt(),{getTransactionAuditStorePath:lse}=Rt(),Sve=eH(),Op=Jt(),use=ae(),nH=rH(),dse=require("util").promisify,fse=dse(setTimeout),mse=1e4,pse=100;sH.exports=hse;async function hse(e){let t=lse(e.schema,e.table),r=await Mw.openEnvironment(t,e.table,!0),n=Mw.listDBIs(r);Mw.initializeDBIs(r,Op.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new nH;do s=await Ese(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 fse(pse);while(s.transactions_deleted>0);return i}a(hse,"deleteAuditLogsBefore");async function Ese(e,t){let r=new nH;try{let n=e.dbis[Op.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[Op.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];use.isEmpty(c)||(s=e.dbis[Op.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Op.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>mse)break}return await s,r}catch(n){throw n}}a(Ese,"deleteTransactions")});var aH=M((Rve,oH)=>{"use strict";var Uw=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};oH.exports=Uw});var lH=M((Ive,cH)=>{"use strict";var _se=fi(),gse=Ip(),Ave=aH(),ro=(G(),D(j)),Sse=ae(),xw=gt(),Tse=to(),yse=Ap(),Rse=Tp(),{getSchemaPath:bse}=Rt();cH.exports=Ase;async function Ase(e,t=!0){let r;e.schema===ro.SYSTEM_SCHEMA_NAME?r=Tse[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await wse(e),s=bse(e.schema,e.table),i=await xw.openEnvironment(s,e.table);return t===!0&&await Ise(e,i,r.hash_attribute),xw.dropDBI(i,e.attribute),n}a(Ase,"lmdbDropAttribute");async function Ise(e,t,r){let n=xw.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(o,u,l)}await s}a(Ise,"removeAttributeFromAllObjects");async function wse(e){let t=new _se(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await yse(t)).filter(o=>o[ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Sse.isEmptyOrZeroLength(n))throw new Error(`Attribute '${drop_attribute_obj.attribute}' was not found in '${drop_attribute_obj.schema}.${drop_attribute_obj.table}'`);let s=n.map(o=>o[ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new gse(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Rse(i)}a(wse,"dropAttributeFromSystem")});var hH=M((Cve,pH)=>{"use strict";var Bw=gt(),_d=Jt(),Nve=xn(),Fw=(G(),D(j)),uH=ae(),{getTransactionAuditStorePath:Nse}=Rt(),Cse=pd(),Xg=dd(),Ose=Q();pH.exports=Pse;async function Pse(e){let t=Nse(e.schema,e.table),r=await Bw.openEnvironment(t,e.table,!0),n=Bw.listDBIs(r);Bw.initializeDBIs(r,_d.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Fw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return dH(r,e.search_values);case Fw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,Dse(r,e.search_values,s);case Fw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Lse(r,e.search_values);default:return dH(r)}}a(Pse,"readAuditLog");function dH(e,t=[0,Date.now()]){uH.isEmpty(t[0])&&(t[0]=0),uH.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[_d.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new Xg,s))}a(dH,"searchTransactionsByTimestamp");function Lse(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[_d.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,mH(e,i))}return Object.fromEntries(r)}a(Lse,"searchTransactionsByUsername");function Dse(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=Cse.equals(e,_d.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,_d.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=mH(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);fH(l,"records",r,d,o),fH(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(Dse,"searchTransactionsByHashValues");function fH(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let f=new Xg(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new Xg(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(fH,"loopRecords");function mH(e,t){let r=[];try{let n=e.dbis[_d.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new Xg,i);r.push(o)}}catch(i){Ose.warn(i)}return r}catch(n){throw n}}a(mH,"batchSearchTransactions")});var _H=M((Dve,EH)=>{"use strict";var{getSchemaPath:Pve}=Rt(),Lve=gt(),{database:vse}=(Oe(),D(mt));EH.exports={writeTransaction:Mse};async function Mse(e,t,r){return vse({database:e,table:t}).transaction(r)}a(Mse,"writeTransaction")});var yH=M((Mve,TH)=>{"use strict";var{getSchemaPath:gH}=Rt(),SH=gt();TH.exports={flush:Use,resetReadTxn:xse};async function Use(e,t){return(await SH.openEnvironment(gH(e,t),t.toString())).flushed}a(Use,"flush");async function xse(e,t){try{(await SH.openEnvironment(gH(e,t),t.toString())).resetReadTxn()}catch{}}a(xse,"resetReadTxn")});var IH=M((xve,AH)=>{"use strict";var{Readable:Bse}=require("stream"),{getDatabases:Fse}=(Oe(),D(mt)),{readSync:kse,openSync:Hse,createReadStream:RH}=require("fs"),{open:Gse}=require("lmdb"),{OpenDBIObject:bH}=fp(),qse=mp(),{AUDIT_STORE_OPTIONS:$se}=(Ki(),D(P0)),{INTERNAL_DBIS_NAME:Vse,AUDIT_STORE_NAME:Kse}=Jt();AH.exports=Wse;var kw=32768,Yse=100;async function Wse(e){let t=e.database||e.schema||"data",r=Fse()[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=Gse({noSync:!0,maxDbs:qse.MAX_DBS}),m,p=f.openDB(Vse,new bH(!1)),h=d.useReadTransaction(),E=0,_=a(async function(S,y){y.encoding="binary",y.encoder=void 0;let w=f.openDB(S,y),I=d.openDB(S,y);for(let{key:H,version:X,value:q}of I.getRange({start:null,transaction:h,versions:I.useVersions}))m=w.put(H,q,X),E++%Yse===0&&(await new Promise(k=>setTimeout(k,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:y}of d.getRange({transaction:h,start:!1}))if(s.some(w=>S.startsWith?.(w+"/"))){p.put(S,y);let[,w]=S.split("/"),I=!w,H=new bH(!I,I);await _(S,H)}e.include_audit&&await _(Kse,{...$se}),await m;let R=RH(f.path);return R.headers=l(),R.on("close",()=>{h.done(),f.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=Hse(o.path);return o.transaction(()=>{let u=Buffer.alloc(kw);kse(c,u,0,kw),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let f=RH(null,{fd:c,start:kw}),m=new Bse.from((async function*(){yield u;for await(let p of f)d.openTimer&&(d.openTimer=0),yield p;d.done()})());return m.headers=l(),m});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(Wse,"getBackup")});var CH=M((Fve,NH)=>{"use strict";var jse=Q(),{handleHDBError:zse}=Ee(),Jse=sF(),Qse=qg(),Xse=lw(),Zse=GF(),eie=Tp(),tie=Ew(),rie=mk(),nie=Rk(),sie=Ap(),iie=Pk(),oie=Gk(),aie=Yk(),cie=jk(),lie=Xk(),uie=iH(),die=Aw(),fie=lH(),mie=hH(),pie=_H(),wH=yH(),hie=IH(),Hw=class extends Jse{static{a(this,"LMDBBridge")}async searchByConditions(t){return iie(t)}async getDataByHash(t){return await tie(t)}async searchByHash(t){return await rie(t)}async getDataByValue(t,r){return await nie(t,r)}async searchByValue(t){return await sie(t)}async createSchema(t){return await Zse(t)}async dropSchema(t){return await oie(t)}async createTable(t,r){return await aie(t,r)}async dropTable(t){return await die(t)}async createAttribute(t){return await Qse(t)}async createRecords(t){return await Xse(t)}async updateRecords(t){return await cie(t)}async upsertRecords(t){try{return await lie(t)}catch(r){throw zse(r,null,null,jse.ERR,r)}}async deleteRecords(t){return await eie(t)}async dropAttribute(t){return await fie(t)}async deleteAuditLogsBefore(t){return await uie(t)}async readAuditLog(t){return await mie(t)}writeTransaction(t,r,n){return pie.writeTransaction(t,r,n)}flush(t,r){return wH.flush(t,r)}resetReadTxn(t,r){return wH.resetReadTxn(t,r)}getBackup(t){return hie(t)}};NH.exports=Hw});function $n(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function Lp(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=a(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new fs.ClientError(`${u} must be a string, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"ID":d=a(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(p=>typeof p=="string")||m==null&&l.nullable!==!1))throw new fs.ClientError(`${u} must be a string, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Float":case"Number":d=a(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="number"||m==null&&l.nullable!==!1))throw new fs.ClientError(`${u} must be a number, attempt to assign ${p}`);$n(this)[u]=m},"set");break;case"Int":d=a(function(m){let p=m?.__op__?m.value:m;if(!(p>>0===p||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs((p>>0)-p)<=1)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new fs.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Long":d=a(function(m){let p=m?.__op__?m.value:m;if(!(Math.round(p)===m&&Math.abs(p)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs(p)<=9007199254740992)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new fs.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"BigInt":d=a(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="bigint"||m==null&&l.nullable!==!1))if(typeof p=="string"||typeof p=="number")p=BigInt(p),m?.__op__?m.value=p:m=p;else throw new fs.ClientError(`${u} must be a number, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Boolean":d=a(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new fs.ClientError(`${u} must be a boolean, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Date":d=a(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new fs.ClientError(`${u} must be a Date, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Bytes":d=a(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new fs.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Blob":d=a(function(m){if(!(m instanceof vs||m==null&&l.nullable!==!1))throw new fs.ClientError(`${u} must be a Blob, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Any":case void 0:d=a(function(m){$n(this)[u]=m},"set");break;default:d=a(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new fs.ClientError(`${u} must be an object, attempt to assign ${m}`);$n(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let h=m[u];if(h?.__op__){let E=this.getRecord()?.[u];return h.update(E)}return h}let p=this.getRecord()?.[u];if(p&&typeof p=="object"){let h=Gw(p,l);if(h)return m||this._setChanges(m=Object.create(null)),m[u]=h}return p},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}o("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),o("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new fs.ClientError("Can not add a property to a sealed table schema");$n(this)[l]=u}),o("deleteProperty",function(l){$n(this)[l]=void 0}),o("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let p=u[f];m=m.update(p)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||o("get",n.getProperty),n.delete||o("delete",n.deleteProperty),n.then||o("then",null);function o(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}a(o,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?LH:PH);break}c=l}while(c&&c!==PH&&c!==LH)}function DH(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(OH[t])return OH[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=Gw(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function Eie(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 Gw(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends Ll{static{a(this,"TrackedObject")}},Lp(r,t)),new r(e)):new Ll(e);case Array:let n=new eS(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=Gw(o,t?.elements)),n[s]=o}return n;default:return e}}function tS(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=tS(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=e.getRecord?{...e.getRecord()}:{}),Object.assign(r,e)),r||e.getRecord?.()||e}function Dl(e,t=e.getChanges?.()){let r;if(!e)return t;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Dl(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e.getRecord?e.getRecord():e});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=PA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Dl(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)_ie.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function Zg(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Pl]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.getRecord?.()===s){if(Zg(i))return!0}else return!0}}else{let r=e.getChanges?.();if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s.getRecord?.()===i){if(Zg(s))return!0}else return!0}else return!0}}return!1}var fs,OH,PH,LH,Ll,_ie,Pl,eS,Pp,qw=se(()=>{fs=b(Ee());z_();is();a($n,"getChanges");a(Lp,"assignTrackedAccessors");OH=Object.prototype,PH=new Proxy({},{get:DH}),LH=new Proxy({},{get:DH,set:Eie});a(DH,"getProxiedProperty");a(Eie,"setProxiedProperty");a(Gw,"trackObject");Ll=class{static{a(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};Lp(Ll,{},!0);a(tS,"collapseData");_ie=Object.prototype.hasOwnProperty;a(Dl,"updateAndFreeze");a(Zg,"hasChanges");Pl=Symbol.for("has-array-changes"),eS=class extends Array{static{a(this,"TrackedArray")}#e;[Pl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Pl]=!0,super.splice(...t)}push(...t){return this[Pl]=!0,super.push(...t)}pop(){return this[Pl]=!0,super.pop()}unshift(...t){return this[Pl]=!0,super.unshift(...t)}shift(){return this[Pl]=!0,super.shift()}};eS.prototype.constructor=Array;Pp=class{static{a(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var HH={};ye(HH,{ResourceBridge:()=>Kw});function Yw({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 vH(e,t){let r=no(e),n=Yw(e,r);if(!r)throw new mi.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;bt(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&tS(d)}catch(f){d={message:(0,kH.errorToString)(f)}}return t?{value:{key:u,value:d}}:{value:d}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function no(e){let t=e.database||e.schema||Sie,r=lt()[t];if(!r)throw(0,mi.handleHDBError)(new Error,gie.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function MH(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*UH(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var xH,rS,mi,BH,$w,Vw,FH,kH,gie,Sie,Tie,yie,Kw,GH=se(()=>{xH=b(CH()),rS=b(hd()),mi=b(Ee());Oe();BH=b(_p());G();$w=b(Xo()),Vw=b(us()),FH=b(ae());Qa();qw();kH=b(Q()),{HDB_ERROR_MSGS:gie}=mi.hdbErrors,Sie="data",Tie=1e4,yie=10,Kw=class extends xH.default{static{a(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=no(t);if(!r)throw new mi.ClientError(`Table ${t.table} not found`);t.conditions=t.conditions.map(n);function n(i){if("conditions"in i&&i.conditions)return i.conditions=i.conditions.map(n),i;{let o=i;return{attribute:o.attribute??o.search_attribute,comparator:o.comparator??o.search_type,value:o.value!==void 0?o.value:o.search_value}}}a(n,"mapCondition");let s=(0,rS.default)(t,"conditions");if(s)throw(0,mi.handleHDBError)(s,s.message,400,void 0,void 0,!0);return r.search({conditions:t.conditions,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Yw(t,r),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new mi.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ze({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await no(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=no(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:d,version:f}=r.primaryStore.getEntry(o);return i(o,d,f)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){return no(t).dropTable()}createSchema(t){return gd({database:t.schema,table:null}),$w.signalSchemaChange(new Vw.SchemaEventMsg(process.pid,V.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Ww(t.schema),$w.signalSchemaChange(new Vw.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,BH.default)(t),s,i=lt()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),bt(o,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(m=>m.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let f=d[i.primaryKey],m=f!=null&&await i.get(f,o);if(t.requires_existing&&!m||t.requires_no_existing&&m){u.push(d[i.primaryKey]);continue}m&&(m=tS(m));for(let p in d)if(Object.prototype.hasOwnProperty.call(d,p)){let h=d[p];if(typeof h=="function")try{let E=h([[m]]);Array.isArray(E)&&(h=E[0].func_val,d[p]=h)}catch(E){throw E.message+="Trying to set key "+p+" on object"+JSON.stringify(d),E}}if(m)for(let p in m)Object.prototype.hasOwnProperty.call(d,p)||(d[p]=m[p]);await(f==null?i.create(d,o):i.put(d,o)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=lt()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),bt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return MH(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=lt()[t.schema][t.table];if(!r.createdTimeProperty)throw new mi.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:y_.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),o.push(...d.skipped_hashes),await(0,FH.asyncSetTimeout)(yie),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%Tie===0&&await u();return l.length>0&&await u(),s?MH(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,rS.default)(t,"hashes");if(r)throw r;return vH(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of vH(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&sA[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.search_attribute!==void 0&&(t.attribute=t.search_attribute),t.search_value!==void 0&&(t.value=t.search_value);let n=(0,rS.default)(t,"value");if(n)throw n;let s=no(t);if(!s)throw new mi.ClientError(`Table ${t.table} not found`);let i=t.value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===y_.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:Yw(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=no(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){no({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return no(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=no(t),n={};switch(t.search_type){case R_.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let o=i.operation??i.type;return o==="put"&&(o="upsert"),{operation:o,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case R_.USERNAME:{let s=t.search_values;for await(let i of UH(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return UH(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(Yw,"getSelect");a(vH,"getRecords");a(no,"getTable");a(MH,"createDeleteResponse");a(UH,"groupRecordsInHistory")});var ms=M((zve,qH)=>{"use strict";var{ResourceBridge:Rie}=(GH(),D(HH)),bie=fe();bie.initSync();var nS;function Aie(){return nS||(nS=new Rie,nS)}a(Aie,"getBridge");qH.exports=Aie()});var pi=M((Qve,KH)=>{var Iie=to(),{promisify:wie}=require("util"),{getDatabases:VH}=(Oe(),D(mt));KH.exports={setSchemaDataToGlobal:$H,getTableSchema:Nie,getSystemSchema:Cie,setSchemaDataToGlobalAsync:wie($H)};function $H(e){global.hdb_schema=VH(),e&&e()}a($H,"setSchemaDataToGlobal");function Nie(e,t,r){let n=VH()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(Nie,"getTableSchema");function Cie(){return Iie}a(Cie,"getSystemSchema")});var Vn=M((Zve,zH)=>{"use strict";var iS=KI(),nn=ae(),Oie=require("util"),oS=ms(),Pie=pi(),YH=Q(),{handleHDBError:vl,hdbErrors:Lie}=Ee(),{HTTP_STATUS_CODES:Ml}=Lie,Die=Oie.promisify(Pie.getTableSchema),vie="updated",WH="inserted",jH="upserted";zH.exports={insert:Uie,update:xie,upsert:Bie,validation:Mie,flush:Fie};async function Mie(e){if(nn.isEmpty(e))throw new Error("invalid update parameters defined.");if(nn.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(nn.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Die(e.schema,e.table),r=iS(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&nn.isEmptyOrZeroLength(c[n]))throw YH.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!nn.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw YH.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!nn.isEmpty(c[n])&&c[n]!==""&&s.has(nn.autoCast(c[n]))&&(c.skip=!0),s.add(nn.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(Mie,"validation");async function Uie(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=iS(e);if(t)throw vl(new Error,t.message,Ml.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw vl(new Error,r,Ml.BAD_REQUEST);let n=await oS.createRecords(e);return sS(WH,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(Uie,"insertData");async function xie(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=iS(e);if(t)throw vl(new Error,t.message,Ml.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw vl(new Error,r,Ml.BAD_REQUEST);let n=await oS.updateRecords(e);return nn.isEmpty(n.existing_rows)?sS(vie,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):sS(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(xie,"updateData");async function Bie(e){if(e.operation!=="upsert")throw vl(new Error,"invalid operation, must be upsert",Ml.INTERNAL_SERVER_ERROR);let t=iS(e);if(t)throw vl(new Error,t.message,Ml.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw vl(new Error,r,Ml.BAD_REQUEST);let n=await oS.upsertRecords(e);return sS(jH,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(Bie,"upsertData");function sS(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===WH?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===jH?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(sS,"returnObject");function Fie(e){return nn.transformReq(e),oS.flush(e.schema,e.table)}a(Fie,"flush")});var zw=M((tMe,XH)=>{var kie=ft(),jw=require("joi"),{hdbTable:Hie,hdbDatabase:JH}=Zi(),QH={schema:JH,database:JH,table:Hie},Gie={date:jw.date().iso().required()},qie={timestamp:jw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};XH.exports=function(e,t){let r=t==="timestamp"?{...QH,...qie}:{...QH,...Gie},n=jw.object(r);return kie.validateBySchema(e,n)}});var tG=M((rMe,eG)=>{var $ie=ft(),Jw=require("joi"),{hdbTable:Vie,hdbDatabase:ZH}=Zi(),Kie=Jw.object({schema:ZH,database:ZH,table:Vie,hash_values:Jw.array().required(),ids:Jw.array()});eG.exports=function(e){return $ie.validateBySchema(e,Kie)}});var eN=M((nMe,rG)=>{"use strict";var Qw=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},Xw=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.attribute=n,this.hash_attribute=s,this.get_attributes=i,this.value=o}},Zw=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};rG.exports={InsertObject:Qw,NoSQLSeachObject:Xw,DeleteResponseObject:Zw}});var Bl=M((iMe,aG)=>{"use strict";var sG=zw(),Yie=tG(),Ul=ae(),nG=require("moment"),iG=Q(),{promisify:Wie,callbackify:jie}=require("util"),xl=(G(),D(j)),zie=pi(),tN=Wie(zie.getTableSchema),rN=ms(),{DeleteResponseObject:Jie}=eN(),{handleHDBError:lc,hdbErrors:Qie}=Ee(),{HDB_ERROR_MSGS:aS,HTTP_STATUS_CODES:uc}=Qie,Xie="records successfully deleted",Zie=jie(oG);aG.exports={delete:Zie,deleteRecord:oG,deleteFilesBefore:eoe,deleteAuditLogsBefore:toe};async function eoe(e){let t=sG(e,"date");if(t)throw lc(t,t.message,uc.BAD_REQUEST,void 0,void 0,!0);if(Ul.transformReq(e),!nG(e.date,nG.ISO_8601).isValid())throw lc(new Error,aS.INVALID_DATE,uc.BAD_REQUEST,xl.LOG_LEVELS.ERROR,aS.INVALID_DATE,!0);let n=Ul.checkSchemaTableExist(e.schema,e.table);if(n)throw lc(new Error,n,uc.NOT_FOUND,xl.LOG_LEVELS.ERROR,n,!0);let s=await rN.deleteRecordsBefore(e);if(await tN(e.schema,e.table),iG.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(eoe,"deleteFilesBefore");async function toe(e){let t=sG(e,"timestamp");if(t)throw lc(t,t.message,uc.BAD_REQUEST,void 0,void 0,!0);if(Ul.transformReq(e),isNaN(e.timestamp))throw lc(new Error,aS.INVALID_VALUE("Timestamp"),uc.BAD_REQUEST,xl.LOG_LEVELS.ERROR,aS.INVALID_VALUE("Timestamp"),!0);let r=Ul.checkSchemaTableExist(e.schema,e.table);if(r)throw lc(new Error,r,uc.NOT_FOUND,xl.LOG_LEVELS.ERROR,r,!0);let n=await rN.deleteAuditLogsBefore(e);return await tN(e.schema,e.table),iG.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(toe,"deleteAuditLogsBefore");async function oG(e){e.ids&&(e.hash_values=e.ids);let t=Yie(e);if(t)throw lc(t,t.message,uc.BAD_REQUEST,void 0,void 0,!0);Ul.transformReq(e);let r=Ul.checkSchemaTableExist(e.schema,e.table);if(r)throw lc(new Error,r,uc.NOT_FOUND,xl.LOG_LEVELS.ERROR,r,!0);try{await tN(e.schema,e.table);let n=await rN.deleteRecords(e);return Ul.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Xie}`),n}catch(n){if(n.message===xl.SEARCH_NOT_FOUND_MESSAGE){let s=new Jie;return s.message=xl.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(oG,"deleteRecord")});var aN={};ye(aN,{HASH_FUNCTION:()=>$r,hash:()=>iN,validate:()=>oN});function nN(e=vp){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Dp.randomBytes(e)).map(r=>t[r%t.length]).join("")}function iN(e,t=$r[lG?.toUpperCase()]??$r.SHA256){return sN[t](e)}function oN(e,t,r=$r[lG?.toUpperCase()]??$r.SHA256){return e?roe[r](e,t):!1}var Dp,Sd,cG,lG,vp,uG,$r,sN,roe,cN=se(()=>{Dp=b(require("node:crypto")),Sd=b(require("argon2")),cG=b(fe());G();lG=(0,cG.get)(x.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),vp=16,uG=9,$r={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};a(nN,"generateSalt");sN={[$r.MD5]:(e,t=void 0)=>{t=t??nN(uG);let r=Dp.createHash($r.MD5).update(e+t).digest("hex");return t+r},[$r.SHA256]:(e,t=void 0)=>{t=t??nN(vp);let r=Dp.createHash($r.SHA256).update(e+t).digest("hex");return t+r},[$r.ARGON2ID]:async e=>{let t=nN(vp),r=await Sd.hash(e,{type:Sd.argon2id,salt:Buffer.from(t)});return t+r}},roe={[$r.MD5]:(e,t)=>{let r=e.slice(0,uG);return e===sN[$r.MD5](t,r)},[$r.SHA256]:(e,t)=>{let r=e.slice(0,vp);return e===sN[$r.SHA256](t,r)},[$r.ARGON2ID]:async(e,t)=>await Sd.verify(e.slice(vp),t)};a(iN,"hash");a(oN,"validate")});var fG=M((lMe,dG)=>{var lN=ft(),gn={username:{presence:!0,exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function noe(e){return gn.password.presence=!0,gn.username.presence=!0,gn.role.presence=!0,gn.active.presence=!0,lN.validateObject(e,gn)}a(noe,"addUserValidation");function soe(e){return gn.password.presence=!1,gn.username.presence=!0,gn.role.presence=!1,gn.active.presence=!1,lN.validateObject(e,gn)}a(soe,"alterUserValidation");function ioe(e){return gn.password.presence=!1,gn.username.presence=!0,gn.role.presence=!1,gn.active.presence=!1,lN.validateObject(e,gn)}a(ioe,"dropUserValidation");dG.exports={addUserValidation:noe,alterUserValidation:soe,dropUserValidation:ioe}});var IG=M((fMe,AG)=>{"use strict";var uN=require("recursive-iterator"),ooe=require("alasql"),dN=require("clone"),mG=ae(),{handleHDBError:pG,hdbErrors:aoe}=Ee(),{HDB_ERROR_MSGS:hG,HTTP_STATUS_CODES:EG}=aoe,{getDatabases:coe}=(Oe(),D(mt)),loe=["DISTINCT_ARRAY"],_G=Symbol("validateTables"),fN=Symbol("validateTable"),dMe=Symbol("getAllColumns"),gG=Symbol("validateAllColumns"),cS=Symbol("findColumn"),SG=Symbol("validateOrderBy"),Mp=Symbol("validateSegment"),mN=Symbol("validateColumn"),TG=Symbol("setColumnsForTable"),yG=Symbol("checkColumnsForAsterisk"),RG=Symbol("validateGroupBy"),bG=Symbol("hasColumns"),pN=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[_G](),this[yG](),this[gG]()}[_G](){if(this[bG]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[fN](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[fN](t.table)})}}[bG](){let t=!1,r=new uN(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[fN](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=coe();if(!r[t.databaseid])throw pG(new Error,hG.SCHEMA_NOT_FOUND(t.databaseid),EG.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw pG(new Error,hG.TABLE_NOT_FOUND(t.databaseid,t.tableid),EG.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=dN(s);i.table=dN(t),this.attributes.push(i)})}[cS](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[yG](){let t=new uN(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[TG](r.tableid)}[TG](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new ooe.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[gG](){this[Mp](this.statement.columns,!1),this[Mp](this.statement.joins,!1),this[Mp](this.statement.where,!1),this[RG](this.statement.group,!1),this[Mp](this.statement.order,!0)}[Mp](t,r){if(!t)return;let n=new uN(t),s=[];for(let{node:i,path:o}of n)!mG.isEmpty(i)&&!mG.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[SG](i):s.push(this[mN](i)));return s}[RG](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&loe.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=dN(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[cS](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[cS](n);if(!i||i.length===0)throw`unknown column '${group_column.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${group_column.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${group_column.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[SG](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[mN](t)}[mN](t){let r=this[cS](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};AG.exports=pN});var OG=M((pMe,CG)=>{"use strict";var wG=require("lodash"),Up=require("mathjs"),uoe=require("jsonata"),NG=ae();CG.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?wG.uniqWith(e,wG.isEqual):e,"distinct_array"),searchJSON:doe,mad:xp.bind(null,Up.mad),mean:xp.bind(null,Up.mean),mode:xp.bind(null,Up.mode),prod:xp.bind(null,Up.prod),median:xp.bind(null,Up.median)};function xp(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(xp,"aggregateFunction");function doe(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(NG.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),NG.isEmpty(this.__ala__.res[r])){let n=uoe(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(doe,"searchJSON")});var LG=M((EMe,PG)=>{"use strict";var pr=require("moment"),hN="YYYY-MM-DDTHH:mm:ss.SSSZZ";pr.suppressDeprecationWarnings=!0;PG.exports={current_date:a(()=>pr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>pr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return pr(e).utc().format("YYYY");case"month":return pr(e).utc().format("MM");case"day":return pr(e).utc().format("DD");case"hour":return pr(e).utc().format("HH");case"minute":return pr(e).utc().format("mm");case"second":return pr(e).utc().format("ss");case"millisecond":return pr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>pr(e).utc().format(hN),"date"),date_format:a((e,t)=>pr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>pr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>pr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=pr(e).utc(),s=pr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>pr().utc().valueOf(),"now"),get_server_time:a(()=>pr().format(hN),"get_server_time"),offset_utc:a((e,t)=>pr(e).utc().utcOffset(t).format(hN),"offset_utc")}});var UG=M((gMe,MG)=>{"use strict";var foe=require("@turf/area"),moe=require("@turf/length"),poe=require("@turf/circle"),hoe=require("@turf/difference"),Eoe=require("@turf/distance"),_oe=require("@turf/boolean-contains"),goe=require("@turf/boolean-equal"),Soe=require("@turf/boolean-disjoint"),Toe=require("@turf/helpers"),DG=(G(),D(j)),Ze=ae(),ta=Q();MG.exports={geoArea:yoe,geoLength:Roe,geoCircle:boe,geoDifference:Aoe,geoDistance:vG,geoNear:Ioe,geoContains:woe,geoEqual:Noe,geoCrosses:Coe,geoConvert:Ooe};function yoe(e){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return foe.default(e)}catch(t){return ta.trace(t,e),NaN}}a(yoe,"geoArea");function Roe(e,t){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return moe.default(e,{units:t||"kilometers"})}catch(r){return ta.trace(r,e),NaN}}a(Roe,"geoLength");function boe(e,t,r){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return poe.default(e,t,{units:r||"kilometers"})}catch(n){return ta.trace(n,e,t),NaN}}a(boe,"geoCircle");function Aoe(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 hoe(e,t)}catch(r){return ta.trace(r,e,t),NaN}}a(Aoe,"geoDifference");function vG(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 Eoe.default(e,t,{units:r||"kilometers"})}catch(n){return ta.trace(n,e,t),NaN}}a(vG,"geoDistance");function Ioe(e,t,r,n){if(Ze.isEmpty(e)||Ze.isEmpty(t))return!1;if(Ze.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return vG(e,t,n)<=r}catch(s){return ta.trace(s,e,t),!1}}a(Ioe,"geoNear");function woe(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 _oe.default(e,t)}catch(r){return ta.trace(r,e,t),!1}}a(woe,"geoContains");function Noe(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 goe.default(e,t)}catch(r){return ta.trace(r,e,t),!1}}a(Noe,"geoEqual");function Coe(e,t){if(Ze.isEmpty(e)||Ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return!Soe.default(e,t)}catch(r){return ta.trace(r,e,t),!1}}a(Coe,"geoCrosses");function Ooe(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(DG.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(DG.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ze.autoCastJSON(e)),Toe[t](e,r)}a(Ooe,"geoConvert")});var lS=M((TMe,xG)=>{var Fl=OG(),ps=LG(),so=UG();xG.exports=e=>{e.aggr.mad=e.aggr.MAD=Fl.mad,e.aggr.mean=e.aggr.MEAN=Fl.mean,e.aggr.mode=e.aggr.MODE=Fl.mode,e.aggr.prod=e.aggr.PROD=Fl.prod,e.aggr.median=e.aggr.MEDIAN=Fl.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Fl.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Fl.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ps.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ps.current_time,e.fn.extract=e.fn.EXTRACT=ps.extract,e.fn.date=e.fn.DATE=ps.date,e.fn.date_format=e.fn.DATE_FORMAT=ps.date_format,e.fn.date_add=e.fn.DATE_ADD=ps.date_add,e.fn.date_sub=e.fn.DATE_SUB=ps.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ps.date_diff,e.fn.now=e.fn.NOW=ps.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ps.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ps.get_server_time,e.fn.getdate=e.fn.GETDATE=ps.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ps.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=so.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=so.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=so.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=so.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=so.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=so.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=so.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=so.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=so.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=so.geoNear}});var HG=M((yMe,kG)=>{"use strict";var Bp=require("lodash"),Kn=require("alasql");Kn.options.cache=!1;var Poe=lS(),BG=require("clone"),uS=require("recursive-iterator"),Ve=Q(),it=ae(),Td=ms(),Loe=(G(),D(j)),{hdbErrors:Doe}=Ee(),{getDatabases:FG}=(Oe(),D(mt)),voe="IS NULL",hi="There was a problem performing this search. Please check the logs and try again.";Poe(Kn);var EN=class{static{a(this,"SQLSearch")}constructor(t,r){if(it.isEmpty(t))throw Ve.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),it.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!it.isEmptyOrZeroLength(n))return Ve.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ve.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ve.error(n),new Error(hi)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ve.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ve.error(n),new Error(hi)}if(Object.keys(this.data).length===0)return Ve.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ve.error("Error thrown from processJoins in SQLSearch class method search."),Ve.error(n),new Error(hi)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ve.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ve.error(n),new Error(hi)}try{return t=await this._finalSQL(),t}catch(n){throw Ve.error("Error thrown from finalSQL in SQLSearch class method search."),Ve.error(n),new Error(hi)}}_getColumns(){let t=new uS(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(BG(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Bp.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hashName=FG()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(it.isEmpty(this.statement.where)){Ve.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new uS(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!it.isEmpty(r)&&r.right)if(it.isNotEmptyAndHasValue(r.right.value)){let n=it.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Kn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=it.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Kn.yy.LogicValue({value:i}):n instanceof Kn.yy.StringValue&&it.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Kn.yy.NumValue({value:i}))});if(t){Ve.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new uS(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!it.isEmpty(Loe.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(it.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(it.isEmptyOrZeroLength(r.left.columnid)||it.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,value:r.right.value})}continue}if(it.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!it.isEmpty(r.right.value)||!it.isEmpty(r.left.value)?n.add(it.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(it.isEmptyOrZeroLength(this.all_table_attributes)&&it.isEmptyOrZeroLength(this.statement.from)&&it.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Bp.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(it.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);it.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(it.isEmptyOrZeroLength(this.all_table_attributes)&&!it.isEmptyOrZeroLength(this.columns.columns))return t;if(it.isEmptyOrZeroLength(this.all_table_attributes)&&it.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Kn.promise(r)}catch(r){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ve.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(BG(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__mergedAttributes.push(r),this.data[t].__mergedAttrMap[r]=this.data[t].__mergedAttributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__mergedData[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__mergedAttrMap[n];this.data[t].__mergedData[r].splice(i,1,s)}async _getFetchAttributeValues(){if(it.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(voe)>-1&&this.tables.forEach(s=>{let i={columnid:FG()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Bp.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hashName;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hashName,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!it.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!it.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await 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(hi)}else try{c.attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let f={...c};f.value=d;let m=await 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(hi)}else if(!it.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!it.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let f=0,m=d.length;f<m;f++){let p=d[f];c.attribute=p.attribute,c.value=p.value;let h=await 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,_]of h)this.data[i].__mergedData[E]?this._updateMergedAttribute(i,E,s.attribute,_[s.attribute]):(this.data[i].__mergedData[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,_[s.attribute]),this._setMergedHashAttribute(i,E))}}catch(d){throw Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ve.error(d),new Error(hi)}else try{c.attribute=s.attribute,c.value="*";let d=await 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(hi)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Kn.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Kn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Kn.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new Kn.yy.FuncValue:new Kn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__mergedData)),this.statement.joins&&this.statement.joins.forEach(p=>{p.joinmode&&p.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(p.table);let h=p.joinmode+" JOIN ? AS "+(p.as?p.as:p.table.tableid);p.on&&(h+=" ON "+p.on.toString()),i.push(h),t.push(Object.values(this.data[`${p.table.databaseid_orig}_${p.table.as?p.table.as_orig:p.table.tableid_orig}`].__mergedData))});let o=[],c={};s.forEach(p=>{let h=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__hashName,E=p.as?p.as_orig:p.tableid_orig;o.push({key:`'${E}.${h}'`,schema:p.databaseid_orig,table:p.as?p.as_orig:p.tableid_orig,keys:new Set}),r.push(`${p.as?p.as:p.tableid}.\`${h}\` AS "${E}.${h}"`),c[p.as?p.as_orig:p.tableid_orig]=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__mergedAttributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(p=>{p.is_func?r.push(p.initial_select_column.toString()):p.initial_select_column.tableid?r.push(`${p.initial_select_column.tableid}.${p.initial_select_column.columnid} AS ${p.expression.columnid}`):r.push(`${p.initial_select_column.columnid} AS ${p.expression.columnid}`)}));let d="",f="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",f=this.statement.offset?"OFFSET "+this.statement.offset:"");let m=[];try{let p=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,h=this._convertColumnsToIndexes(p,s);m=await Kn.promise(h,t),t=null}catch(p){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ve.error(p),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let p=0,h=m.length;p<h;p++){let E=m[p];o.forEach(_=>{E[_.key]!==null&&E[_.key]!==void 0&&_.keys.add(E[_.key])})}o.forEach(p=>{let h=Object.keys(this.data[`${p.schema}_${p.table}`].__mergedData),E=Bp.difference(h,[...p.keys].map(_=>_.toString()));for(let _=0,R=E.length;_<R;_++){let S=E[_];delete this.data[`${p.schema}_${p.table}`].__mergedData[S]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new uS(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=Bp.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw Ve.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ve.error(i),new Error(hi)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__mergedData,o=[];for(let d in i)o.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await Td.getDataByHash(c),u=s.columns.length;for(let d=0,f=o.length;d<f;d++){let m=o[d],p=l.get(m);for(let h=0;h<u;h++){let E=s.columns[h],_=p[E]===void 0?null:p[E];this.data[n].__mergedData[m].push(_)}}}}catch(r){throw Ve.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ve.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__mergedData)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__mergedData)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Ve.trace(`Final SQL: ${s}`),n=await Kn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ve.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ve.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return Ve.error(Doe.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ve.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__mergedAttributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.attribute=n.attribute,i.value="*";let o=await Td.getDataByValue(i);for(let[c,l]of o)this.data[s].__mergedData[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__mergedData[c]={...r[s]}),this.data[s].__mergedData[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Ve.error("There was an error when processing this SQL operation. Check your logs"),Ve.error(o),new Error(hi)}}return Object.values(Object.values(this.data)[0].__mergedData)}};kG.exports=EN});var Sn=M((bMe,GG)=>{"use strict";GG.exports={searchByConditions:Moe,searchByHash:Uoe,searchByValue:xoe,search:Boe};var _N=ms(),{transformReq:gN}=ae();async function Moe(e){return gN(e),_N.searchByConditions(e)}a(Moe,"searchByConditions");async function Uoe(e){gN(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of _N.searchByHash(e))r&&t.push(r);return t}a(Uoe,"searchByHash");async function xoe(e){gN(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of _N.searchByValue(e))t.push(r);return t}a(xoe,"searchByValue");function Boe(e,t){try{let r=IG(),n=HG(),s=new r(e);s.validate(),new n(s.statement,s.attributes).search().then(o=>{t(null,o)}).catch(o=>{t(o,null)})}catch(r){return t(r)}}a(Boe,"search")});var io=M((IMe,KG)=>{"use strict";var Fp=require("crypto"),Foe=fe(),{CONFIG_PARAMS:koe}=(G(),D(j)),$G="aes-256-cbc",Hoe=32,Goe=16,SN=64,VG=32,qoe=SN+VG,qG=new Map;KG.exports={encrypt:$oe,decrypt:Voe,createNatsTableStreamName:Koe};function $oe(e){let t=Fp.randomBytes(Hoe),r=Fp.randomBytes(Goe),n=Fp.createCipheriv($G,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a($oe,"encrypt");function Voe(e){let t=e.substr(0,SN),r=e.substr(SN,VG),n=e.substr(qoe,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Fp.createDecipheriv($G,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Voe,"decrypt");function Koe(e,t){let r=Foe.get(koe.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=qG.get(r);return n||(n=Fp.createHash("md5").update(r).digest("hex"),qG.set(r,n)),n}a(Koe,"createNatsTableStreamName")});var Dt=M((CMe,WG)=>{"use strict";var{platform:NMe}=require("os"),Yoe="nats-server.zip",TN="nats-server",Woe=process.platform==="win32"?`${TN}.exe`:TN,joe=/^[^\s.,*>]+$/,YG="__request__",zoe=a(e=>`${e}.${YG}`,"REQUEST_SUBJECT"),Joe={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Qoe={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Xoe={HUB:"hub.pid",LEAF:"leaf.pid"},Zoe={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},eae={SUCCESS:"success",ERROR:"error"},tae={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},rae={TXN:"txn",MSGID:"msgid"},yd={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},nae={[yd.ERR]:1,[yd.WRN]:2,[yd.INF]:3,[yd.DBG]:4,[yd.TRC]:5},sae={debug:"-D",trace:"-DVV"};WG.exports={NATS_SERVER_ZIP:Yoe,NATS_SERVER_NAME:TN,NATS_BINARY_NAME:Woe,PID_FILES:Xoe,NATS_CONFIG_FILES:Qoe,SERVER_SUFFIX:Zoe,NATS_TERM_CONSTRAINTS_RX:joe,REQUEST_SUFFIX:YG,UPDATE_REMOTE_RESPONSE_STATUSES:eae,CLUSTER_STATUS_STATUSES:tae,REQUEST_SUBJECT:zoe,SUBJECT_PREFIXES:rae,MSG_HEADERS:Joe,LOG_LEVELS:yd,LOG_LEVEL_FLAGS:sae,LOG_LEVEL_HIERARCHY:nae}});var co={};ye(co,{ACTIVE_BOOLEAN:()=>eq,ALTERUSER_NOTHING_TO_UPDATE:()=>QG,EMPTY_PASSWORD:()=>XG,EMPTY_ROLE:()=>ZG,USERNAME_REQUIRED:()=>JG,addUser:()=>CN,alterUser:()=>ON,dropUser:()=>PN,findAndValidateUser:()=>bd,getClusterUser:()=>Eae,getSuperUser:()=>Gp,getUsersWithRolesCache:()=>hae,listUsers:()=>mS,listUsersExternal:()=>DN,setUsersWithRolesCache:()=>_i,userInfo:()=>LN});async function CN(e){let t=nq.cleanAttributes(e,sq),r=rq.addUserValidation(t);if(r)throw new Ei(r.message);let n=await Hp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new Ei(Rd.ROLE_NAME_NOT_FOUND(t.role),ra.NOT_FOUND);if(n.length>1)throw new Ei(Rd.DUP_ROLES_FOUND(t.role),ra.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=wN.encrypt(t.password)),t.password=await kp.hash(t.password,dS),t.hash_function=dS,t.role=n[0].id;let s=await tq.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(IN.debug(s),await _i(),s.skipped_hashes.length===1)throw new Ei(Rd.USER_ALREADY_EXISTS(t.username),ra.CONFLICT);return AN.signalUserChange(new NN(process.pid)),`${t.username} successfully added`}async function ON(e){let t=nq.cleanAttributes(e,sq);if(oo.isEmptyOrZeroLength(t.username))throw new Error(JG);if(oo.isEmptyOrZeroLength(t.password)&&oo.isEmptyOrZeroLength(t.role)&&oo.isEmptyOrZeroLength(t.active))throw new Error(QG);if(!oo.isEmpty(t.password)&&oo.isEmptyOrZeroLength(t.password.trim()))throw new Error(XG);if(!oo.isEmpty(t.active)&&!oo.isBoolean(t.active))throw new Error(eq);if(!oo.isEmpty(t.password)&&!oo.isEmptyOrZeroLength(t.password.trim())&&(mae(t.username)&&(t.hash=wN.encrypt(t.password)),t.password=await kp.hash(t.password,dS),t.hash_function=dS),t.role==="")throw new Error(ZG);if(t.role){let n=await Hp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Ei(Rd.ALTER_USER_ROLE_NOT_FOUND(t.role),ra.NOT_FOUND);if(n.length>1)throw new Ei(Rd.DUP_ROLES_FOUND(t.role),ra.CONFLICT);t.role=n[0].id}let r=await tq.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await _i(),AN.signalUserChange(new NN(process.pid)),r}function mae(e){let t=!1,r=ao.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}async function PN(e){let t=rq.dropUserValidation(e);if(t)throw new Ei(t.message);if(ao.get(e.username)===void 0)throw new Ei(Rd.USER_NOT_EXIST(e.username),ra.NOT_FOUND);let r=await fae({table:"hdb_user",schema:"system",hash_values:[e.username]});return IN.debug(r),await _i(),AN.signalUserChange(new NN(process.pid)),`${e.username} successfully deleted`}async function LN(e){if(!e||!e.hdb_user)return"There was no user info in the body";let t=bN.cloneDeep(e.hdb_user),r=await Hp.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}async function DN(){let e=await mS();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}async function mS(){let e=await Hp.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=bN.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Hp.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=bN.cloneDeep(s),s.role=t[s.role],pae(s.role),n.set(s.username,s);return n}function pae(e){if(!e){IN.error("invalid user role found.");return}e.permission.system||(e.permission.system={tables:{}}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(lae)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}async function _i(e=void 0){e?ao=e:ao=await mS()}async function hae(){return ao||await _i(),ao}async function bd(e,t,r=!0){ao||await _i();let n=ao.get(e);if(!n){if(!r)return{username:e};throw new Ei(yN.GENERIC_AUTH_FAIL,ra.UNAUTHORIZED)}if(n&&!n.active)throw new Ei(yN.USER_INACTIVE,ra.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(zG.get(t)===n.password)return s;{let i=kp.validate(n.password,t,n.hash_function||kp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)zG.set(t,n.password);else throw new Ei(yN.GENERIC_AUTH_FAIL,ra.UNAUTHORIZED)}}return s}async function Gp(){ao||await _i();for(let[,e]of ao)if(e.role.role==="super_user")return e}async function Eae(){let e=await mS(),t=aae.getConfigFromFile(RN.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(r==null||r?.role?.role!==RN.ROLE_TYPES_ENUM.CLUSTER_USER)return;let n=wN.decrypt(r.hash);return r.decrypt_hash=n,r.uri_encoded_d_hash=encodeURIComponent(n),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+jG.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+jG.SERVER_SUFFIX.ADMIN,r}var JG,QG,XG,ZG,eq,tq,iae,kp,rq,Hp,AN,oo,nq,IN,oae,wN,RN,jG,aae,cae,lae,uae,Ei,ra,yN,Rd,NN,bN,fS,dae,sq,zG,fae,dS,ao,iq,hs=se(()=>{"use strict";JG="username is required",QG="nothing to update, must supply active, role or password to update",XG="password cannot be an empty string",ZG="If role is specified, it cannot be empty.",eq="active must be true or false",tq=Vn(),iae=Bl(),kp=(cN(),D(aN)),rq=fG(),Hp=Sn(),AN=Xo(),oo=ae(),nq=require("validate.js"),IN=Q(),{promisify:oae}=require("util"),wN=io(),RN=(G(),D(j)),jG=Dt(),aae=_t(),cae=fe(),lae=to(),{hdbErrors:uae,ClientError:Ei}=Ee(),{HTTP_STATUS_CODES:ra,AUTHENTICATION_ERROR_MSGS:yN,HDB_ERROR_MSGS:Rd}=uae,{UserEventMsg:NN}=us(),bN=require("lodash"),{server:fS}=(Hr(),D(bm)),dae=Q();fS.getUser=(e,t)=>bd(e,t,t!=null);fS.authenticateUser=(e,t)=>bd(e,t);sq={username:!0,active:!0,role:!0,password:!0},zG=new Map,fae=oae(iae.delete),dS=cae.get(RN.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??kp.HASH_FUNCTION.SHA256;a(CN,"addUser");a(ON,"alterUser");a(mae,"isClusterUser");a(PN,"dropUser");a(LN,"userInfo");a(DN,"listUsersExternal");a(mS,"listUsers");a(pae,"appendSystemTablesToRole");a(_i,"setUsersWithRolesCache");a(hae,"getUsersWithRolesCache");a(bd,"findAndValidateUser");a(Gp,"getSuperUser");a(Eae,"getClusterUser");iq=[];fS.invalidateUser=function(e){for(let t of iq)try{t(e)}catch(r){dae.error("Error invalidating user",r)}};fS.onInvalidatedUser=function(e){iq.push(e)}});var Pe,Ad=se(()=>{Pe={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var Id,vN=se(()=>{Ad();Id=class{static{a(this,"ComponentStatus")}lastChecked;status;message;error;constructor(t,r,n){this.lastChecked=new Date,this.status=t,this.message=r,this.error=n}updateStatus(t,r){this.status=t,this.message=r,this.lastChecked=new Date,t!==Pe.ERROR&&(this.error=void 0)}markHealthy(t){this.updateStatus(Pe.HEALTHY,t||"Component is healthy")}markError(t,r){this.status=Pe.ERROR,this.error=t,this.message=r||(typeof t=="string"?t:t.message),this.lastChecked=new Date}markWarning(t){this.updateStatus(Pe.WARNING,t)}markLoading(t){this.updateStatus(Pe.LOADING,t||"Component is loading")}isHealthy(){return this.status===Pe.HEALTHY}hasError(){return this.status===Pe.ERROR}isLoading(){return this.status===Pe.LOADING}hasWarning(){return this.status===Pe.WARNING}getSummary(){let t=this.status.toUpperCase(),r=this.message?`: ${this.message}`:"";return`${t}${r}`}}});var kl,dc,MN,wd,UN,Nd,xN,pS=se(()=>{kl=b(Jr()),dc=class extends Error{static{a(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=kl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},MN=class extends dc{static{a(this,"CrossThreadTimeoutError")}requestId;timeoutMs;collectedCount;constructor(t,r,n){super(`Component status collection timeout after ${r}ms. Collected ${n} responses for request ${t}.`,kl.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},wd=class extends dc{static{a(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,kl.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},UN=class extends dc{static{a(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,kl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},Nd=class extends dc{static{a(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,kl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},xN=class extends dc{static{a(this,"CrossThreadCollectionError")}result;constructor(t){let r=t.success?`Partial collection success: ${t.collectedFromThreads} threads responded`+(t.timedOutThreads.length>0?`, ${t.timedOutThreads.length} timed out`:""):`Collection failed: ${t.errors.map(n=>n.message).join(", ")}`;super(r,kl.HTTP_STATUS_CODES.OK),this.name="CrossThreadCollectionError",this.result=t}getDiagnostics(){let t=[`Cross-thread collection ${this.result.success?"partially succeeded":"failed"}`,`Threads responded: ${this.result.collectedFromThreads}`];return this.result.expectedThreads&&t.push(`Expected threads: ${this.result.expectedThreads}`),this.result.timedOutThreads.length>0&&t.push(`Timed out threads: ${this.result.timedOutThreads.join(", ")}`),this.result.errors.length>0&&(t.push("Errors:"),this.result.errors.forEach((r,n)=>{t.push(` ${n+1}. ${r.name}: ${r.message}`)})),t.join(`
|
|
15
|
-
`)}}});var oq,Hl,aq,fc,qp,Cd,_ae,hS,BN=se(()=>{oq=b(us()),Hl=b(st());G();aq=b(ir());Ad();pS();fc=(0,aq.loggerWithTag)("componentStatus.crossThread"),qp=class{static{a(this,"CrossThreadStatusCollector")}awaitingResponses=new Map;responseCheckers=new Map;nextRequestId=1;listenerAttached=!1;timeout;cleanupTimer=null;constructor(t=5e3){this.timeout=t}attachListener(){this.listenerAttached||((0,Hl.onMessageByType)(b_.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;fc.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&&(fc.debug?.(`Cleaning up ${this.awaitingResponses.size} stale pending requests`),this.awaitingResponses.clear()),this.cleanupTimer=null},3e4))}async collect(t){try{this.attachListener(),this.scheduleCleanup();let r=this.nextRequestId++,n=[];this.awaitingResponses.set(r,n);let o=((0,Hl.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,_=a(()=>{let y=this.awaitingResponses.get(r);y&&y.length>=o&&!E&&(E=!0,S(),fc.trace?.(`Collected all ${y.length} expected responses for request ${r}`),p(y))},"checkComplete"),R=setTimeout(()=>{if(!E){E=!0;let y=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),fc.debug?.(`Collection timeout for request ${r}: collected ${y.length}/${o} responses`),p(y)}},this.timeout),S=a(()=>{this.awaitingResponses.delete(r),clearTimeout(R)},"cleanup");this.responseCheckers.set(r,_),(0,oq.sendItcEvent)({type:b_.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{_()}).catch(y=>{E=!0,S(),this.responseCheckers.delete(r),h(new wd("sendItcEvent",y))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,Hl.getWorkerIndex)(),m=f===void 0?"main":`worker-${f}`;for(let[p,h]of d)u.set(`${p}@${m}`,{...h,workerIndex:f});for(let p of l)for(let[h,E]of p.statuses){let _=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${_}`,{...E,workerIndex:p.workerIndex})}return fc.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof wd?fc.error?.(`ITC failure during component status collection: ${r.message}`):fc.warn?.("Failed to collect component status from all threads:",r),fc.debug?.(`Collection failed for request. Error: ${r instanceof Error?r.message:"Unknown error"}`),this.getLocalStatusOnly(t)}}getLocalStatusOnly(t){let r=t.getAllStatuses(),n=new Map,s=(0,Hl.getWorkerIndex)(),i=s===void 0?"main":`worker-${s}`;for(let[o,c]of r)n.set(`${o}@${i}`,{...c,workerIndex:s});return n}cleanup(){this.awaitingResponses.clear(),this.responseCheckers.clear(),this.cleanupTimer&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null)}},Cd=class{static{a(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let o=s.indexOf("@"),c=o!==-1?s.substring(0,o):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let o=this.aggregateComponentGroup(s,i);r.set(s,o)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,o,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",_=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=_;else if(E&&E.startsWith("worker-")){let R=parseInt(E.substring(7));isNaN(R)||(n.workers[R]=_)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==Pe.HEALTHY&&p.message&&(!i||_>s)&&(s=_,i=p.message),p.error&&!o&&(o=p.error)}let u=this.determineOverallStatus(c);if(Array.from(c.keys()).length>1)for(let[m,p]of r)p.status!==u&&l.set(m,{workerIndex:p.workerIndex!==void 0?p.workerIndex:-1,status:p.status,message:p.message,error:p.error});let f={componentName:t,status:u,lastChecked:n,latestMessage:i,error:o};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[Pe.ERROR,Pe.WARNING,Pe.LOADING,Pe.UNKNOWN,Pe.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return Pe.UNKNOWN}},_ae=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),hS=new qp(_ae)});var mc,ES=se(()=>{vN();Ad();BN();pS();mc=class e{static{a(this,"ComponentStatusRegistry")}statusMap=new Map;reset(){this.statusMap=new Map}setStatus(t,r,n,s){if(!t||typeof t!="string")throw new Nd(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Pe).includes(r))throw new Nd(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Pe).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,Pe.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,Pe.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,Pe.WARNING,r)}initializeLoading(t,r){this.setStatus(t,Pe.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,Pe.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,Pe.ERROR,n,r)}getComponentsByStatus(t){let r=[];for(let[n,s]of this.statusMap)s.status===t&&r.push({name:n,status:s});return r}getStatusSummary(){let t={[Pe.HEALTHY]:0,[Pe.ERROR]:0,[Pe.WARNING]:0,[Pe.LOADING]:0,[Pe.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await hS.collect(t);return Cd.aggregate(r)}async getAggregatedStatusFor(t,r){r||(r=await e.getAggregatedFromAllThreads(this));let n=[],s=t+".",i=r.get(t);i&&n.push({key:t,...i});for(let[f,m]of r)f.startsWith(s)&&n.push({key:f,...m});if(n.length===0)return{status:Pe.UNKNOWN,message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}};let o=n.some(f=>f.status===Pe.ERROR),c=n.some(f=>f.status===Pe.LOADING),l=o?Pe.ERROR:c?Pe.LOADING:Pe.HEALTHY,u="All components loaded successfully",d={};if(o||c){u=n.filter(m=>m.status===Pe.ERROR||m.status===Pe.LOADING).map(m=>`${m.key}: ${m.latestMessage||m.status}`).join("; ");for(let m of n)m.status!==Pe.HEALTHY&&(d[m.key]={status:m.status,message:m.latestMessage})}return{status:l,message:u,...Object.keys(d).length>0&&{details:d},lastChecked:n[0]?.lastChecked||{workers:{}}}}}});var hr,_S=se(()=>{ES();hr=new mc});function lq(e){let t=cq.get(e);return t||(t=new FN(e),cq.set(e,t)),t}function uq(){hr.reset()}var FN,cq,lo,dq,fq=se(()=>{_S();Ad();FN=class{static{a(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return hr.setStatus(this.componentName,Pe.HEALTHY,t),this}warning(t){return hr.setStatus(this.componentName,Pe.WARNING,t),this}error(t,r){return hr.setStatus(this.componentName,Pe.ERROR,t,r),this}loading(t){return hr.setStatus(this.componentName,Pe.LOADING,t||"Loading..."),this}unknown(t){return hr.setStatus(this.componentName,Pe.UNKNOWN,t),this}get(){return hr.getStatus(this.componentName)}},cq=new Map;a(lq,"statusForComponent");lo={loading(e,t){hr.initializeLoading(e,t)},loaded(e,t){hr.markLoaded(e,t)},failed(e,t,r){hr.markFailed(e,t,r)}};a(uq,"reset");dq=Pe});var $p={};ye($p,{AggregationError:()=>UN,COMPONENT_STATUS_LEVELS:()=>Pe,ComponentStatus:()=>Id,ComponentStatusError:()=>dc,ComponentStatusOperationError:()=>Nd,ComponentStatusRegistry:()=>mc,CrossThreadCollectionError:()=>xN,CrossThreadStatusCollector:()=>qp,CrossThreadTimeoutError:()=>MN,ITCError:()=>wd,StatusAggregator:()=>Cd,componentStatusRegistry:()=>hr,crossThreadCollector:()=>hS,query:()=>gae});var gae,mq=se(()=>{_S();ES();vN();ES();BN();_S();pS();Ad();gae={get(e){return hr.getStatus(e)},all(){return hr.getAllStatuses()},byStatus(e){return hr.getComponentsByStatus(e)},summary(){return hr.getStatusSummary()},async allThreads(){return mc.getAggregatedFromAllThreads(hr)}}});var kN={};ye(kN,{STATUS:()=>dq,internal:()=>$p,lifecycle:()=>lo,reset:()=>uq,statusForComponent:()=>lq});var Vp=se(()=>{fq();mq()});var Yp=M((lUe,Eq)=>{"use strict";var Es=Q(),Tn=(G(),D(j)),Sae=XB(),Tae=(hs(),D(co)),{validateEvent:HN}=us(),Kp=ms(),yae=require("process"),{resetDatabases:Rae}=(Oe(),D(mt)),bae={[Tn.ITC_EVENT_TYPES.SCHEMA]:Aae,[Tn.ITC_EVENT_TYPES.USER]:hq,[Tn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:wae};async function Aae(e){let t=HN(e);if(t){Es.error(t);return}Es.trace("ITC schemaHandler received schema event:",e),await Sae(e.message),await Iae(e.message)}a(Aae,"schemaHandler");async function Iae(e){try{Kp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Kp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Kp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=Rae();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Es.error(t)}}a(Iae,"syncSchemaMetadata");var pq=[];async function hq(e){try{try{Kp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Kp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Es.warn(r)}let t=HN(e);if(t){Es.error(t);return}Es.trace(`ITC userHandler ${Tn.HDB_ITC_CLIENT_PREFIX}${yae.pid} received user event:`,e),await Tae.setUsersWithRolesCache();for(let r of pq)r()}catch(t){Es.error(t)}}a(hq,"userHandler");hq.addListener=function(e){pq.push(e)};async function wae(e){try{let t=HN(e);if(t){Es.error(t);return}Es.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Vp(),D(kN)),{getWorkerIndex:n}=st(),{sendItcEvent:s}=us(),i=r.componentStatusRegistry.getAllStatuses(),o=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:Tn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:o,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?Es.trace(`Sent component status response directly to thread ${u}`):(u===void 0?Es.debug("No originator threadId, falling back to broadcast"):Es.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){Es.error("Error handling component status request:",t)}}a(wae,"componentStatusRequestHandler");Eq.exports=bae});var us=M((hUe,gq)=>{"use strict";var dUe=Q(),GN=ae(),Nae=(G(),D(j)),{ITC_ERRORS:Wp}=Jr(),{parentPort:fUe,threadId:Cae,isMainThread:Oae,workerData:mUe}=require("worker_threads"),{onMessageFromWorkers:Pae,broadcast:pUe,broadcastWithAcknowledgement:Lae}=st();gq.exports={sendItcEvent:Dae,validateEvent:_q,SchemaEventMsg:vae,UserEventMsg:Mae};var gS;Pae(async(e,t)=>{gS=gS||Yp(),_q(e),gS[e.type]&&await gS[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Dae(e){return!Oae&&e.message&&(e.message.originator=Cae),Lae(e)}a(Dae,"sendItcEvent");function _q(e){if(typeof e!="object")return Wp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||GN.isEmpty(e.type))return Wp.MISSING_TYPE;if(!e.hasOwnProperty("message")||GN.isEmpty(e.message))return Wp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||GN.isEmpty(e.message.originator))return Wp.MISSING_ORIGIN;if(Nae.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Wp.INVALID_EVENT(e.type)}a(_q,"validateEvent");function vae(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(vae,"SchemaEventMsg");function Mae(e){this.originator=e}a(Mae,"UserEventMsg")});var Xo=M((gUe,Rq)=>{"use strict";var Sq=(G(),D(j)),_Ue=ae(),SS=Q(),Tq=MB(),Od,{sendItcEvent:yq}=us();function Uae(e){try{SS.debug("signalSchemaChange called with message:",e),Od=Od||Yp();let t=new Tq(Sq.ITC_EVENT_TYPES.SCHEMA,e);return Od.schema(t),yq(t)}catch(t){SS.error(t)}}a(Uae,"signalSchemaChange");function xae(e){try{SS.trace("signalUserChange called with message:",e),Od=Od||Yp();let t=new Tq(Sq.ITC_EVENT_TYPES.USER,e);return Od.user(t),yq(t)}catch(t){SS.error(t)}}a(xae,"signalUserChange");Rq.exports={signalSchemaChange:Uae,signalUserChange:xae}});function jp(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}function bq(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Hs(e));for(let[r,n]of t)e.has(r)?r.toLowerCase()==="set-cookie"&&e.append?.(r,n,!0):e.set(r,n);return e}var Hs,zp=se(()=>{Hs=class extends Map{static{a(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(jp,"appendHeader");a(bq,"mergeHeaders")});function TS(e,t,r=Fae){let n;return function(...i){return n?n.length*qN>r?t(...i):new Promise((o,c)=>{n.push({args:i,fn(){try{let l=e(...i);o(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,o){setImmediate(()=>{let c=performance.now();qN=(qN*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var wq,Bae,Fae,Aq,kae,$N,Iq,qN,VN=se(()=>{wq=b(ir()),Bae=3e3,Fae=2e4,Aq=0,kae=3e4,$N=3e3,Iq=performance.now()+$N,qN=0;a(TS,"throttle");setInterval(()=>{let e=performance.now();e-Iq-$N>Bae&&Aq+kae<e&&(wq.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"),Aq=e),Iq=e},$N).unref()});var Bq={};ye(Bq,{EVICTED:()=>yl,INVALIDATED:()=>kn,coerceType:()=>RS,makeTable:()=>bS});function bS(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:p}=e,{expirationMS:h,evictionMS:E,audit:_,trackDeletes:R}=e;E??=0;let{attributes:S}=e;S||(S=[]);let y=bI(i,n,l),w,I,H={},X=Promise.resolve(),q,k,z;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(q=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(k=K),K.expiresAt&&(z=K),K.isPrimaryKey&&(H=K);let Y,ce=[],de=[],te=1,Se=2,Ne={},Ke={},$e=864e5,Ir=0,nr,zr,xr,Du=!1,Qc,Bt,si,qa=ql.get(x.REPLICATION_DATABASES);if(Array.isArray(qa)){for(let K of qa)if(K.name===c&&K.replicateTo>=0){si=K.replicateTo;break}}let u_=i.getRange({start:!1,end:!1}).constructor,um=10,d_=6;_&&hm(),Jm(i.env.path,K=>{if(I)return Va(K)});class dm extends Ll{static{a(this,"Updatable")}getUpdatedTime(){return rc.get(this.getRecord())?.version}getExpiresAt(){return rc.get(this.getRecord())?.expiresAt}addTo(g,T){if(typeof T=="number"||typeof T=="bigint")this.set(g,new Pp(T));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(g,T){return this.addTo(g,-T)}}class ve extends Xt{#e;#t;#n;#r;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=_;static databasePath=o;static databaseName=c;static attributes=S;static replicate=p;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=q;static updatedTimeProperty=k;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(g,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)g.intermediateSource=!0,this.sources.unshift(g);else{if(this.sources.some(v=>!v.intermediateSource)){if(this.sources.some(v=>v.name===g.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(g)}I=I||g.get&&(!g.get.reliesOnPrototype||g.prototype.get),w=w||g.load;let C=a(v=>{let A=this.sources;if(A=A.filter(U=>U.intermediateSource&&U[v]&&(!U[v].reliesOnPrototype||U.prototype[v])),A.length>0)if(A.length===1){let U=A[0];return(N,L,$)=>{if(N?.source!==U)return U[v](L,$,N)}}else return(U,N,L)=>{let $=[];for(let W of A){if(U?.source===W)break;$.push(W[v](N,L,U))}return Promise.all($)}},"getApplyToIntermediateSource"),P=this.sources[this.sources.length-1];P.intermediateSource&&(P={});let O=a(v=>{if(P[v]&&(!P[v].reliesOnPrototype||P.prototype[v]))return(A,U,N)=>{if(!A?.source)return P[v](U,N,A)}},"getApplyToCanonicalSource");Ne={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},Ke={put:C("put"),patch:C("patch"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")};let B=P.shouldRevalidateEvents;return(async()=>{let v=!1,A,U=a(async(N,L)=>{let $=N.value,W=N.table?Me[c][N.table]:ve;if(c===Sm&&(N.table===Fu.ROLE_TABLE_NAME||N.table===Fu.USER_TABLE_NAME)&&(v=!0),N.id===void 0&&(N.id=$[W.primaryKey],N.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(N));N.source=g;let J={residencyId:Xc(N.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:N.nodeId,async:!0},F=N.id,he=await W.getResource(F,L,J);switch(N.finished&&await N.finished,N.type){case"put":return B?he._writeInvalidate(F,$,J):he._writeUpdate(F,$,!0,J);case"patch":return B?he._writeInvalidate(F,$,J):he._writeUpdate(F,$,!1,J);case"delete":return he._writeDelete(F,J);case"publish":case"message":return he._writePublish(F,$,J);case"invalidate":return he._writeInvalidate(F,$,J);case"relocate":return he._writeRelocate(F,J);default:Fe.default.error?.("Unknown operation",N.type,N.id)}},"writeUpdate");try{let N=g.subscribe;N&&R==null&&(R=!0);let L={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},$=g.subscribeOnThisThread?g.subscribeOnThisThread((0,Gl.getWorkerIndex)(),L):(0,Gl.getWorkerIndex)()===0,W=N&&$&&await g.subscribe?.(L);if(W){let J;for await(let F of W)try{if(!(F.type==="transaction"?F.writes[0]:F)){Fe.default.error?.("Bad subscription event",F);continue}if(F.source=g,F.type==="end_txn"){J?.resolve();let _e;if(F.localTime&&A!==F.localTime&&F.remoteNodeIds?.length>0&&(_e=a(()=>{let re=[Symbol.for("seq"),F.remoteNodeIds[0]],oe=d.get(re),ge=oe?.nodes;ge||(ge=[]);for(let ie of F.remoteNodeIds.slice(1)){let Ce=ge.find(Be=>Be.id===ie);ge=ge.filter(Be=>Be.id!==ie||Be===Ce),Ce||(Ce={id:ie,seqId:0},ge.push(Ce)),Ce.seqId=Math.max(oe?.seqId??1,F.localTime),ie===J?.nodeId&&(Ce.lastTxnTime=F.timestamp)}let me=Math.max(oe?.seqId??1,F.localTime);Fe.default.trace?.("Received txn",c,me,new Date(me),F.localTime,new Date(F.localTime),F.remoteNodeIds),d.put(re,{seqId:me,nodes:ge})},"updateRecordedSequenceId"),A=F.localTime),F.onCommit){let re=J?J.committed.then(F.onCommit):F.onCommit();_e&&(re?.then?re.then(_e):_e())}else _e&&_e();continue}if(J)if(F.beginTxn)J.resolve();else{J.writePromises.push(U(F,J));continue}!F.timestamp&&F.version&&(F.timestamp=F.version);let ue=bt(F,()=>{if(F.type==="transaction"){let _e=[];for(let re of F.writes)try{_e.push(U(re,F))}catch(oe){throw oe.message+=" writing "+JSON.stringify(re)+" of event "+JSON.stringify(F),oe}return Promise.all(_e)}else if(F.type==="define_schema"){let _e=this.attributes.slice(0),re=!1;for(let oe of F.attributes)_e.find(ge=>ge.name===oe.name)||(_e.push(oe),re=!0);re&&(ze({table:s,database:c,attributes:_e,origin:"cluster"}),Qp.signalSchemaChange(new Xp.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return F.beginTxn?(J=F,J.writePromises=[U(F,F)],new Promise(_e=>{J.resolve=()=>_e(Promise.all(J.writePromises))})):U(F,F)});J&&(J.committed=ue),v&&ue&&!ue?.waitingForUserChange&&(ue.then(()=>Qp.signalUserChange(new Xp.UserEventMsg(process.pid))),ue.waitingForUserChange=!0),F.onCommit&&(ue?ue.then(F.onCommit):F.onCommit())}catch(he){Fe.default.error?.("error in subscription handler",he)}}}catch(N){Fe.default.error?.(N)}})(),this}static get isCaching(){return I}static get shouldRevalidateEvents(){return this.prototype.get!==ve.prototype.get}static getResource(g,T,C){let P=super.getResource(g,T,C);if(this.loadAsInstance===!1&&(T._freezeRecords=!0),g!=null&&this.loadAsInstance!==!1){qi(g);try{if(P.getRecord?.())return P;if(typeof g=="object"&&g&&!Array.isArray(g))throw new Error(`Invalid id ${JSON.stringify(g)}`);let O=!C?.async||i.cache?.get?.(g),B=Br(T),v=B.getReadTxn();if(v?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return xo(g,T,{transaction:v,ensureLoaded:C?.ensureLoaded},O,A=>{if(A?ve._updateResource(P,A):P.#e=null,T.onlyIfCached){if(!P.doesExist())throw new dt.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let U=pn(g,A,T,P);if(U)return B?.disregardReadTxn(),P.#i=!0,T.loadedFromSource=!0,Gs(U,N=>(ve._updateResource(P,N),P))}return P})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(g)),O}}return P}static _updateResource(g,T){g.#r=T,g.#e=T?.value??null,g.#n=T?.version}ensureLoaded(){let g=pn(this.getId(),this.#r,this.getContext());if(g)return this.#i=!0,this.getContext().loadedFromSource=!0,Gs(g,T=>{this.#r=T,this.#e=T.value,this.#n=T.version})}static getNewId(){let g=H?.type;if(g==="String"||g==="ID")return super.getNewId();if(!Bt){let O=i.getEntry(Symbol.for("id_allocation")),B=O?.value,v;if(B&&B.nodeName===server.hostname&&(!Qae(i)||B.pid===process.pid)){let A=B.start,U=B.end;v=A;for(let N of i.getKeys({start:U,end:A,limit:1,reverse:!0}))v=N}else B=P(O?.version??null),v=B.start;Bt=new BigInt64Array([BigInt(v)+1n]),Bt=new BigInt64Array(i.getUserSharedBuffer("id",Bt.buffer)),Bt.maxSafeId=B.end}let T=Number(Atomics.add(Bt,0,1n)),C=g==="Int"?512:1048576;if(T+C>=Bt.maxSafeId){let O=a(B=>{Bt.maxSafeId=T+(g==="Int"?1023:4194303);let v=(g==="Int"?Math.pow(2,31):Math.pow(2,49))-1,A=B?void 0:i.useReadTransaction(),U=Number(Bt[0]);for(let $ of i.getKeys({start:U+1,end:v,limit:1,transaction:A}))v=$;A?.done();let{value:N,version:L}=i.getEntry(Symbol.for("id_allocation"));if(Bt.maxSafeId<v){if(N.end>Bt.maxSafeId-100)return;Fe.default.info?.("New id allocation",T,Bt.maxSafeId,L),i.put(Symbol.for("id_allocation"),{start:N.start,end:Bt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),L)}else{Fe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Bt.maxSafeId}, but id of ${v} detected`);let $=P(L);$.alreadyUpdated||Atomics.store(Bt,0,BigInt($.start+1)),Bt.maxSafeId=$.end}},"updateEnd");T+C===Bt.maxSafeId?setImmediate(O):T+100>=Bt.maxSafeId&&(Fe.default.warn?.(`Synchronous id allocation required on table ${s}${g=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>O(!0)))}return T;function P(O){let B=(g==="Int"?Math.pow(2,31):Math.pow(2,49))-1,v=B/4,A,U,N=!1,L,$;do{L=Math.floor(Math.random()*B),$={start:L,end:L+(g==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},A=0;for(let W of i.getKeys({start:L,limit:1,reverse:!0}))A=W;U=B;for(let W of i.getKeys({start:L+1,end:B,limit:1}))U=W;v*=.875,v<1e3&&!N&&(N=!0,Fe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${g==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,L,A,U,v))}while(!(v<U-L&&(v<L-A||A===0)));return i.transactionSync(()=>{let W=i.getEntry(Symbol.for("id_allocation"));return(W?.version??null)==O?(Fe.default.info?.("Allocated new id range",$),i.put(Symbol.for("id_allocation"),$,Date.now()),$):(Fe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...W.value})})}}static setTTLExpiration(g){if(typeof g=="number")h=g*1e3,E||(E=0);else if(g&&typeof g=="object")h=g.expiration*1e3,E=(g.eviction||0)*1e3,$e=g.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");$e=$e||(h+E)/4,Va()}static getResidencyRecord(g){return d.get([Symbol.for("residency_by_id"),g])}static setResidency(g){ve.getResidency=g&&((T,C)=>{try{return g(T,C)}catch(P){throw P.message+=` in residency function for table ${s}`,P}})}static setResidencyById(g){ve.getResidencyById=g&&(T=>{try{return g(T)}catch(C){throw C.message+=` in residency function for table ${s}`,C}})}static getResidency(g,T){if(ve.getResidencyById)return ve.getResidencyById(g[t]);let C=si;if(T.replicateTo!=null){if(Array.isArray(T.replicateTo))return T.replicateTo.includes(server.hostname)?T.replicateTo:[server.hostname,...T.replicateTo];T.replicateTo>=0&&(C=T.replicateTo)}if(C>=0&&server.nodes){let P=[server.hostname];if(T.previousResidency)P.push(...T.previousResidency.slice(0,C));else{let O=server.nodes.map(A=>A.name),B=Math.floor(O.length*Math.random());P.push(...O.slice(B,B+C));let v=B+C-O.length;v>0&&P.push(...O.slice(0,v))}return P}}static enableAuditing(){_||(_=!0,hm(),ve.audit=!0)}static coerceId(g){return g===""?null:RS(g,H)}static async dropTable(){delete Me[c][s];for(let g of i.getRange({versions:!0,snapshot:!1,lazy:!0}))g.metadataFlags&Zr&&g.value&&Za(g.value);if(c===o){for(let g of S)d.remove(ve.tableName+"/"+g.name),r[g.name]?.drop();d.remove(ve.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),YN.default.unlinkSync(i.env.path);Qp.signalSchemaChange(new Xp.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(g){let T=this.constructor;if(typeof g=="string"&&T.loadAsInstance!==!1)return this.getProperty(g);if(fm(g))return this.search(g);if(g&&g.id===void 0&&!g.toString()){let C={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?ve.getRecordCount().then(P=>(C.recordCount=P.recordCount,C.estimatedRecordRange=P.estimatedRange,C)):C}if(g!==void 0&&T.loadAsInstance===!1){let C=this.getContext(),P=Br(C),O=P.getReadTxn();if(O?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let B=Ps(g);qi(B);let v=!0;return g.checkPermission&&(v=this.allowRead(C.user,g)),Gs(Gs(v,A=>{if(!A)throw new dt.AccessViolation(C.user);let U=!0;return xo(B,C,{transaction:O,ensureLoaded:U},!1,N=>{if(C.onlyIfCached){if(!N?.value)throw new dt.ServerError("Entry is not cached",504)}else if(U){let L=pn(B,N,C);if(L)return P?.disregardReadTxn(),C.loadedFromSource=!0,L.then($=>$?.value)}return N?.value})}),A=>{let U=g?.select;return U&&A!=null?ad(U,this.constructor)(A):A})}if(g?.property)return this.getProperty(g.property);if(this.doesExist()||g?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(g,T){let C=Dn(g,T);if(C?.read){if(C.isSuperUser)return!0;let P=C.attribute_permissions,O=T?.select;if(P?.length>0||Du&&O){if(T||(T={}),O){let B=Array.isArray(O)?O:[O],v=P?.length>0&&KN(P,"read");T.select=B.map(A=>{let U=A.name||A;if(!v||v[U]){let N=xr[U]?.definition?.tableClass;if(N){if(A.name||(A={name:A}),!A.checkPermission&&T.checkPermission&&(A.checkPermission=T.checkPermission),!N.prototype.allowRead.call(null,g,A))return!1;if(!A.select)return A.name}return A}}).filter(Boolean)}else T.select=P.filter(B=>B.read&&!xr[B.attribute_name]).map(B=>B.attribute_name);return T}else return!0}}allowUpdate(g,T,C){let P=Dn(g,C);if(P?.update){let O=P.attribute_permissions;if(O?.length>0){let B=KN(O,"update");for(let v in T)if(!B[v])return!1;for(let v of O){let A=v.attribute_name;!v.update&&!(A in T)&&(T[A]=this.getProperty(A))}}return $a(this.getContext())}}allowCreate(g,T,C){if(this.isCollection){let P=Dn(g,C);if(P?.insert){let O=P.attribute_permissions;if(O?.length>0){let B=KN(O,"insert");for(let v in T)if(!B[v])return!1;return $a(this.getContext())}else return $a(this.getContext())}}else return this.allowUpdate(g,{})}allowDelete(g,T){return Dn(g,T)?.delete&&$a(this.getContext())}update(g,T){let C,P=typeof T=="boolean"||T===void 0&&(g==null||typeof g=="object"&&!(g instanceof URLSearchParams)),O=!1;P?(O=T,T=g,C=this.getId()):C=Ps(g);let B=this.getContext();if(!Br(B))throw new Error("Can not update a table resource outside of a transaction");if(T===!1)return this;if(typeof T=="object"&&T)if(O)Object.isFrozen(T)&&(T={...T}),this.#e={},this.#t=T;else if(P){let A=this.#t;A&&(T=Object.assign(A,T)),this.#t=T}else{let A=!0;if(g==null)throw new TypeError("Can not put a record without a target");return g.checkPermission&&(A=this.allowUpdate(B.user,T,g)),Gs(A,U=>{if(!U)throw new dt.AccessViolation(B.user);return Gs(i.get(Ps(g)),N=>{let L=new dm(N);return L._setChanges(T),this._writeUpdate(C,L.getChanges(),!1),L})})}return this._writeUpdate(C,this.#t,O),this}addTo(g,T){if(typeof T=="number"||typeof T=="bigint")this.#s===Cq?this.set(g,(+this.getProperty(g)||0)+T):(this.#s||this.update(),this.set(g,new Pp(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(g,T){if(typeof T=="number")return this.addTo(g,-T);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#r}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(g){this.#t=g}setRecord(g){this.#e=g}invalidate(g){let T=!0,C=this.getContext();return g?.checkPermission&&(T=this.allowDelete(C.user,g,C)),Gs(T,P=>{if(!P)throw new dt.AccessViolation(C.user);this._writeInvalidate(g?Ps(g):this.getId())})}_writeInvalidate(g,T,C){let P=this.getContext();qi(g),Br(this.getContext()).addWrite({key:g,store:i,invalidated:!0,entry:this.#r,before:Ne.invalidate?.bind(this,P,g),beforeIntermediate:xu(T,Ke.invalidate?.bind(this,P,g)),commit:a((B,v)=>{if(!(Fr(B,v,C?.nodeId)<=0)){T??=null;for(let A in r)T||(T={}),T[A]===void 0&&(T[A]=this.getProperty(A));Fe.default.trace?.(`Invalidating entry in ${s} id: ${g}, timestamp: ${new Date(B).toISOString()}`),y(g,T,v,B,kn,_,{user:P?.user,residencyId:C?.residencyId,nodeId:C?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(g,T){let C=this.getContext();qi(g),Br(this.getContext()).addWrite({key:g,store:i,invalidated:!0,entry:this.#r,before:Ne.relocate?.bind(this,C,g),beforeIntermediate:Ke.relocate?.bind(this,C,g),commit:a((O,B)=>{if(Fr(O,B,T?.nodeId)<=0)return;let v=ve.getResidencyRecord(T.residencyId),A=0,U=null,N=B?.value;if(v&&!v.includes(server.hostname)){for(let L in r)U||(U={}),U[L]=N[L];A=kn}else U=N;Fe.default.trace?.(`Relocating entry id: ${g}, timestamp: ${new Date(O).toISOString()}`),y(g,U,B,O,A,_,{user:C.user,residencyId:T.residencyId,nodeId:T.nodeId,expiresAt:T.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(g,T){if(this.getResidencyById)return!1;let C={previousResidency:this.getResidencyRecord(g.residencyId),isRelocation:!0},P=Ka(this.getResidency(T.value,C)),O;if(P){if(!P.includes(server.hostname))return!1;O=Xc(P)}let B=0;Fe.default.debug?.("Performing a relocate of an entry",g.key,T.value,P);let v=y(g.key,T.value,g,g.version,B,!0,{residencyId:O,expiresAt:T.expiresAt},"relocate",!1,null);return!0}static evict(g,T,C){let P=this.Source,O;if(!((I||_)&&(!T||(O=i.getEntry(g),!O||!T)||O.version!==C))){if(I){if(i.hasLock(g,O.version))return;let B;for(let v in r)B||(B={}),B[v]=T[v];if(B)return y(g,B,O,C,yl,null,null,null,!0)}return i.ifVersion(g,C,()=>{vu(g,T,null)}),Tl(i,O??i.getEntry(g),C)}}lock(){throw new Error("Not yet implemented")}static operation(g,T){return g.table||=s,g.schema||=c,global.operation(g,T)}put(g,T){if(T===void 0||T instanceof URLSearchParams)this.update(g,!0);else{let C=!0;if(g==null)throw new TypeError("Can not put a record without a target");let P=this.getContext();return g.checkPermission&&(C=this.allowUpdate(P.user,T,g)),Gs(C,O=>{if(!O)throw new dt.AccessViolation(P.user);if(Array.isArray(T))for(let B of T){let v=B[t];this._writeUpdate(v,B,!0)}else{let B=Ps(g);this._writeUpdate(B,T,!0)}})}}create(g,T){let C=!0,P=this.getContext();if(!T&&!(g instanceof URLSearchParams)&&(T=g,g=void 0),!T||typeof T!="object"||Array.isArray(T))throw new TypeError("Can not create a record without an object");return g?.checkPermission&&(C=this.allowCreate(P.user,T,g)),Gs(C,O=>{if(!O)throw new dt.AccessViolation(P.user);let B=Ps(g)??T[t];if(B===void 0)B=this.constructor.getNewId(),T[t]=B;else if(i.get(B))throw new dt.ClientError("Record already exists",409);return this._writeUpdate(B,T,!0),T})}patch(g,T){if(T===void 0||T instanceof URLSearchParams)this.update(g,!1);else{let C=this.update(g,T);if(C?.then)return C.then(()=>{})}}_writeUpdate(g,T,C,P){let O=this.getContext(),B=Br(O);qi(g);let v=this.#r??i.getEntry(g);this.#s=C?Cq:Wae;let A=a(N=>C?N.put?()=>N.put(O,g,T):null:N.patch?()=>N.patch(O,g,T):N.put?()=>N.put(O,g,Dl(this)):null,"writeToSources"),U={key:g,store:i,entry:v,nodeName:O?.nodeName,validate:a(N=>{T||(T=this.#t),C||T&&Zg(this.#t===T?this:T)?O?.source||(B.checkOverloaded(),this.validate(T,!C),k&&(T[k.name]=k.type==="Date"?new Date(N):k.type==="String"?new Date(N).toISOString():N),C&&(t&&T[t]!==g&&(T[t]=g),q&&(v?.value?T[q.name]=v?.value[q.name]:T[q.name]=q.type==="Date"?new Date(N):q.type==="String"?new Date(N).toISOString():N),T=Dl(T))):B.removeWrite(U)},"validate"),before:A(Ne),beforeIntermediate:xu(T,A(Ke)),commit:a((N,L,$)=>{if($){if(O&&L?.version>(O.lastModified||0)&&(O.lastModified=L.version),this.#r=L,L?.value&&L.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");C||(this.#e=L?.value??null)}this.#t=void 0,this.#n=N;let W=L?.value,J;this.#s=0;let F=!1,he=Fr(N,L,P?.nodeId),ue,_e=C?"put":"patch",re;P?.residencyId!=null&&(re=P.residencyId);let oe=O?.expiresAt??(h?h+Date.now():-1);if(he<=0){if(_){let ie=L.localTime,Ce=L.version;Fe.default.trace?.("Applying CRDT update to record with id: ",g,"txn time",new Date(N),"applying later update from:",new Date(Ce),"local recorded time",new Date(ie));let Be=[];for(;ie>N||Ce>=N&&ie>0;){let He=l.get(ie);if(!He)break;let Te=At(He);if(Ce=Te.version,Ce>=N){if(Ce===N){if(he=Fr(N,{version:Ce,localTime:ie},P?.nodeId),he===0)return me(!1);if(he>0){ie=Te.previousLocalTime;continue}}if(Te.type==="patch")Be.push(Te),ue=T;else if(Te.type==="put"||Te.type==="delete")return me(!1)}ie=Te.previousLocalTime}ie||Fe.default.debug?.("No further audit history, applying incremental updates based on available history",g,"existing version preserved",L),Be.sort((He,Te)=>He.version-Te.version);for(let He of Be){let Te=He.getValue(i);if(Fe.default.debug?.("Rebuilding update with future patch:",new Date(He.version),Te,He),J=j_(J??T,Te,C),!J)return me(!1)}}else{if(C)return me(!1);J=j_(J??T,W,C),Fe.default.debug?.("Rebuilding update without audit:",J)}Fe.default.trace?.("Rebuilt record to save:",J," is full update:",C)}let ge;if(C&&!J?ge=T:this.constructor.loadAsInstance===!1?ge=Dl(W,J??T):(this.#e=W,ge=Dl(this,J??T)),this.#e=ge,ge&&ge.getRecord)throw new Error("Can not assign a record to a record, check for circular references");if(re==null){v?.residencyId&&(O.previousResidency=ve.getResidencyRecord(v.residencyId));let ie=Ka(ve.getResidency(ge,O));if(ie&&!ie.includes(server.hostname))if(ue??=ge,F=!0,ve.getResidencyById)ge=void 0;else{ge=null;for(let Ce in r)ge||(ge={}),ge[Ce]=ue[Ce]}re=Xc(ie)}C||(ue=T),Fe.default.trace?.(`Saving record with id: ${g}, timestamp: ${new Date(N).toISOString()}${oe?", expires at: "+new Date(oe).toISOString():""}${L?", replaces entry from: "+new Date(L.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(ge).slice(0,100)}catch{return""}})()),vu(g,W,ge),me(!0),O.expiresAt&&Va();function me(ie){y(g,ie?ge:void 0,ie?L:{...L,value:void 0},N,F?kn:0,_,{omitLocalRecord:F,user:O?.user,residencyId:re,expiresAt:oe,nodeId:P?.nodeId,originatingOperation:O?.originatingOperation,tableToTrack:c==="system"?null:s},_e,!1,ie?ue:ue??T)}a(me,"writeCommit")},"commit")};B.addWrite(U)}async delete(g){if(fm(g)){g.select=["$id"];for await(let T of this.search(g))this._writeDelete(T.$id);return!0}if(g){let T=!0,C=this.getContext();return g.checkPermission&&(T=this.allowDelete(C.user,g,C)),Gs(T,P=>{if(!P)throw new dt.AccessViolation(C.user);let O=Ps(g);return this._writeDelete(O),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(g,T){let C=Br(this.getContext());qi(g);let P=this.getContext();return C.addWrite({key:g,store:i,entry:this.#r,nodeName:P?.nodeName,before:Ne.delete?.bind(this,P,g),beforeIntermediate:Ke.delete?.bind(this,P,g),commit:a((O,B,v)=>{let A=B?.value;v&&(P&&B?.version>(P.lastModified||0)&&(P.lastModified=B.version),ve._updateResource(this,B)),!(Fr(O,B,T?.nodeId)<=0)&&(vu(this.getId(),A),Fe.default.trace?.(`Deleting record with id: ${g}, txn timestamp: ${new Date(O).toISOString()}`),_||R?(y(g,null,B,O,0,_,{user:P?.user,nodeId:T?.nodeId,tableToTrack:s},"delete"),_||Va()):Tl(i,B))},"commit")}),!0}search(g){let T=this.getContext(),C=Br(T);if(!g)throw new Error("No query provided");if(g.parseError)throw g.parseError;if(g.checkPermission&&!this.allowRead(T.user,g))throw new dt.AccessViolation(T.user);T&&(T.lastModified=$ae);let P=g.conditions;P?P.length===void 0&&(P=P[Symbol.iterator]?Array.from(P):[P]):P=Array.isArray(g)?g:g[Symbol.iterator]?Array.from(g):[];let O=g.id??this.getId();O&&(P=[{attribute:null,comparator:Array.isArray(O)?"prefix":"starts_with",value:O}].concat(P));let B,v={};function A(oe,ge){let me;switch(ge){case"and":case void 0:if(oe.length<1)throw new Error('An "and" operator requires at least one condition');me=!0;break;case"or":if(oe.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ge)}for(let ie of oe){if(ie.conditions){ie.conditions=A(ie.conditions,ie.operator);continue}let Ce=ie[0]??ie.attribute,Be=Ce==null?H:Ji(S,Ce);if(Be)(Be.type||II[ie.comparator])&&(ie[1]===void 0?ie.value=N(ie.value,Be):ie[1]=N(ie[1],Be));else if(Ce!=null&&!g.allowConditionsOnDynamicAttributes)throw(0,dt.handleHDBError)(new Error,`${Ce} is not a defined attribute`,404);if(ie.chainedConditions)if(ie.chainedConditions.length===1&&(!ie.operator||ie.operator=="and")){let He=ie.chainedConditions[0],Te,pt;if(He.comparator==="gt"||He.comparator==="greater_than"||He.comparator==="ge"||He.comparator==="greater_than_equal"?(Te=ie,pt=He):(Te=He,pt=ie),Te.comparator!=="lt"&&Te.comparator!=="less_than"&&Te.comparator!=="le"&&Te.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Nt=pt.comparator==="ge"||pt.comparator==="greater_than_equal",Ft=Te.comparator==="le"||Te.comparator==="less_than_equal";ie.comparator=(Nt?"ge":"gt")+(Ft?"le":"lt"),ie.value=[pt.value,Te.value]}else throw new Error("Multiple chained conditions are not currently supported")}return oe}a(A,"prepareConditions");function U(oe,ge){if(g.enforceExecutionOrder)return oe;for(let me of oe)me.conditions&&(me.conditions=U(me.conditions,me.operator));return oe.length>1&&ge!=="or"?Hae(oe,Cg(ve)):oe}a(U,"orderConditions");function N(oe,ge){return Array.isArray(oe)?oe.map(me=>RS(me,ge)):RS(oe,ge)}a(N,"coerceTypedValues");let L=g.operator;(P.length>0||L)&&(P=A(P,L));let $=typeof g.sort=="object"&&g.sort,W;if($&&L!=="or"){let oe=$.attribute;if(oe==null)throw new dt.ClientError("Sort requires an attribute");if(B=P.find(ge=>sd(ge.attribute)===sd(oe)),!B){let ge=Ji(S,oe);if(!ge)throw(0,dt.handleHDBError)(new Error,`${Array.isArray(oe)?oe.join("."):oe} is not a defined attribute`,404);if(ge.indexed)B={...$,comparator:"sort"},P.push(B);else if(P.length===0&&!g.allowFullScan)throw(0,dt.handleHDBError)(new Error,`${Array.isArray(oe)?oe.join("."):oe} is not indexed and not combined with any other conditions`,404)}B&&(B.descending=!!$.descending)}P=U(P,L),$&&(B&&P[0]===B?$.next&&(W={dbOrderedAttribute:$.attribute,attribute:$.next.attribute,descending:$.next.descending,next:$.next.next}):(B&&P.splice(P.indexOf(B),1),W=$));let J=g.select;if(P.length===0&&(P=[{attribute:t,comparator:"greater_than",value:!0}]),g.explain)return{conditions:P,operator:L,postOrdering:W,selectApplied:!!J};let F=C.useReadTxn(),he=wI(P,L,ve,F,g,T,(oe,ge)=>pm(oe,J,T,F,ge),v),ue=g.ensureLoaded!==!1,_e=ve.transformEntryForSelect(J,T,F,v,ue,!0),re=ve.transformToOrderedSelect(he,J,W,T,F,_e);return(g.offset||g.limit!==void 0)&&(re=re.slice(g.offset,g.limit!==void 0?(g.offset||0)+g.limit:void 0)),re.onDone=()=>{re.onDone=null,C.doneReadTxn()},re.selectApplied=!0,re.getColumns=()=>{if(J){let oe=[];for(let ge of J)ge==="*"?oe.push(...S.map(me=>me.name)):oe.push(ge.name||ge);return oe}return S.filter(oe=>!oe.computed&&!oe.relationship).map(oe=>oe.name)},re}static transformToOrderedSelect(g,T,C,P,O,B){let v=new u_;if(C){g=pm(g,T,P,O,null);let A;v.iterate=function(){let N,L=g[Symbol.asyncIterator]?g[Symbol.asyncIterator]():g[Symbol.iterator](),$,W=C.dbOrderedAttribute,J,F,he=!0;function ue(re){let oe=re.next&&ue(re.next),ge=re.descending;return P.sort=re,(me,ie)=>{let Ce=Mu(me,re.attribute,P),Be=Mu(ie,re.attribute,P),He=ge?(0,$l.compareKeys)(Be,Ce):(0,$l.compareKeys)(Ce,Be);return He===0?oe?.(me,ie)||0:He}}a(ue,"createComparator");let _e=ue(C);return{async next(){let re;if(N)if(re=N.next(),re.done){if($)return v.onDone&&v.onDone(),re}else return{value:await B.call(this,re.value)};A=[],J&&A.push(J);do if(re=await L.next(),re.done){if($=!0,A.length)break;return v.onDone&&v.onDone(),re}else{let oe=re.value;if(oe?.then&&(oe=await oe),W){let ge=Mu(oe,W,P);if(he)he=!1,F=ge;else if(ge!==F){F=ge,J=oe;break}}A.push(oe)}while(!0);return C.isGrouped,A.sort(_e),N=A[Symbol.iterator](),re=N.next(),re.done?(v.onDone&&v.onDone(),re):{value:await B.call(this,re.value)}},return(){return v.onDone&&v.onDone(),L.return()},throw(){return v.onDone&&v.onDone(),L.throw()}}};let U=a(N=>{if(typeof T=="object"&&Array.isArray(N.attribute))for(let L=0;L<T.length;L++){let $=T[L],W;if($.name===N.attribute[0]){for(W=$.sort||($.sort={});W.next;)W=W.next;W.attribute=N.attribute.slice(1),W.descending=N.descending}else $===N.attribute[0]&&(T[L]=W={name:$,sort:{attribute:N.attribute.slice(1),descending:N.descending}})}N.next&&U(N.next)},"applySortingOnSelect");U(C)}else v.iterate=(g[Symbol.asyncIterator]||g[Symbol.iterator]).bind(g),v=v.map(function(A){try{let U=B.call(this,A);return typeof U?.catch=="function"?U.catch(N=>{throw N.partialObject={[t]:A.key},N}):U}catch(U){throw U.partialObject={[t]:A.key},U}});return v}static transformEntryForSelect(g,T,C,P,O,B){let v;O&&I&&!(typeof g=="string"?[g]:g)?.every(N=>{let L;return typeof N=="object"?L=N.name:L=N,r[L]||L===t})&&(v=!0);let A,U=a(function(N){let L;if(T?.transaction?.stale&&(T.transaction.stale=!1),N!=null){if(L=N.deref?N.deref():N.value,!L&&(N.key===void 0||N.deref)||N.metadataFlags&kn){if(N.metadataFlags&kn&&T.replicateFrom===!1&&B&&N.residencyId)return hc.SKIP;if(N=xo(N.key??N,T,{transaction:C,lazy:g?.length<4,ensureLoaded:O},this?.isSync,$=>$),N?.then)return N.then(U.bind(this));L=N?.value}if(v&&N?.metadataFlags&(kn|yl)||N?.expiresAt!=null&&N?.expiresAt<Date.now()){if(T.onlyIfCached)return{[t]:N.key,message:"This entry has expired"};let $=pn(N.key??N,N,T);if($?.then)return $.then(U)}}if(L==null)return B?hc.SKIP:L;if(g&&!(g[0]==="*"&&g.length===1)){let $,W=a((F,he)=>{let ue;typeof F=="object"?ue=F.name:ue=F;let _e=xr?.[ue],re;if(_e){let oe=P?.[ue];if(oe)if(oe.hasMappings){let me=_e.from?L[_e.from]:sd(N.key);re=oe.get(me),re||(re=[])}else re=oe.fromRecord?.(L);else re=_e(L,T,N,!0);let ge=a(me=>{if(_e.directReturn)return he(me,ue);if(me&&typeof me=="object"){let ie=_e.definition?.tableClass||ve;A||(A={});let Ce=A[ue]||(A[ue]=ie.transformEntryForSelect(ue===F?null:F.select||(Array.isArray(F)?F:null),T,C,oe,O));if(Array.isArray(me)){let Be=[],He=ie.transformToOrderedSelect(me,F.select,typeof F.sort=="object"&&F.sort,T,C,Ce)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Te=a(Nt=>{for(;!Nt.done;){if(Nt?.then)return Nt.then(Te);Be.push(Nt.value),Nt=He.next()}he(Be,ue)},"nextValue"),pt=Te(He.next());pt&&($||($=[]),$.push(pt));return}else if(me=Ce.call(this,me),me?.then){$||($=[]),$.push(me.then(Be=>he(Be,ue)));return}}he(me,ue)},"handleResolvedValue");re?.then?($||($=[]),$.push(re.then(ge))):ge(re);return}else re=L[ue],re&&typeof re=="object"&&ue!==F&&(re=ve.transformEntryForSelect(F.select||F,T,C,null)({value:re}));he(re,ue)},"selectAttribute"),J;if(typeof g=="string")W(g,F=>{J=F});else if(Array.isArray(g))if(g.asArray)J=[],g.forEach((F,he)=>{F==="*"?g[he]=L:W(F,ue=>J[he]=ue)});else{J={};let F=g.forceNulls;for(let he of g)if(he==="*")for(let ue in L)J[ue]=L[ue];else W(he,(ue,_e)=>{ue===void 0&&F&&(ue=null),J[_e]=ue})}else throw new dt.ClientError("Invalid select"+g);return $?Promise.all($).then(()=>J):J}return L},"transform");return U}async subscribe(g){if(!l)throw new Error("Can not subscribe to a table without an audit log");_||ze({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),g||(g={});let T=!g.rawEvents,C=[],P=vI(ve,this.getId()??null,function(v,A,U,N){try{let L=A.getValue?.(i,T),$=A.type;if(!L&&$==="patch"&&T){let J=i.getEntry(v);J?.version===A.version?L=J.value:L=A.getValue?.(i,!0,U),$="put"}let W={id:v,localTime:U,value:L,version:A.version,type:$,beginTxn:N};C?C.push(W):(c!=="system"&&We(A.size??1,"db-message",s,null),this.send(W))}catch(L){Fe.default.error?.(L)}},g.startTime||0,g),O=(async()=>{this.isCollection&&(P.includeDescendants=!0,g.onlyChildren&&(P.onlyChildren=!0)),g.supportsTransactions&&(P.supportsTransactions=!0);let v=this.getId(),A=g.previousCount;A>1e3&&(A=1e3);let U=g.startTime;if(this.isCollection){if(U){if(A)throw new dt.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:N,value:L}of l.getRange({start:U,exclusiveStart:!0,snapshot:!1})){let $=At(L);if($.tableId!==n)continue;let W=$.recordId;if(v==null||Dq(v,W)){let J=$.getValue(i,T,N);if(B({id:W,localTime:N,value:J,version:$.version,type:$.type,size:$.size}),P.queue?.length>Pq&&await P.waitForDrain()===!1)return}P.startTime=N}}else if(A){let N=[];for(let{key:L,value:$}of l.getRange({start:"z",end:!1,reverse:!0}))try{let W=At($);if(W.tableId!==n)continue;let J=W.recordId;if(v==null||Dq(v,J)){let F=W.getValue(i,T,L);if(N.push({id:J,localTime:L,value:F,version:W.version,type:W.type}),--A<=0)break}}catch(W){Fe.default.error("Error getting history entry",L,W)}for(let L=N.length;L>0;)B(N[--L]);N[0]&&(P.startTime=N[0].localTime)}else if(!g.omitCurrent){for(let{key:N,value:L,version:$,localTime:W,size:J}of i.getRange({start:v??!1,end:v==null?void 0:[v,$l.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(L&&(B({id:N,localTime:W,value:L,version:$,type:"put",size:J}),P.queue?.length>Pq&&await P.waitForDrain()===!1))return}}else{A&&!U&&(U=0);let N=this.#r?.localTime;if(N===RI&&(i.cache?.delete(v),this.#r=i.getEntry(v),Fe.default.trace?.("re-retrieved record",N,this.#r?.localTime),N=this.#r?.localTime),Fe.default.trace?.("Subscription from",U,"from",v,N),U<N){let L=[],$=N;do{let W=l.get($);if(W){g.omitCurrent=!0;let J=At(W),F=J.getValue(i,T,$);T&&(J.type="put"),L.push({id:v,value:F,localTime:$,...J}),$=J.previousLocalTime}else break;A&&A--}while($>U&&A!==0);for(let W=L.length;W>0;)B(L[--W]);P.startTime=N}!g.omitCurrent&&this.doesExist()&&B({id:v,localTime:N,value:this.#e,version:this.#n,type:"put"})}for(let N of C)B(N);C=null})();function B(v){c!=="system"&&We(v.size??1,"db-message",s,null),P.send(v)}return a(B,"send"),g.listener&&P.on("data",g.listener),P}static subscribeOnThisThread(g,T){return g===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(g,T,C){if(T===void 0||T instanceof URLSearchParams)this._writePublish(this.getId(),g,T);else{let P=!0,O=this.getContext();return g.checkPermission&&(P=this.allowCreate(O.user,g,O)),Gs(P,B=>{if(!B)throw new dt.AccessViolation(O.user);let v=Ps(g);this._writePublish(v,T,C)})}}_writePublish(g,T,C){let P=Br(this.getContext());g??=null,g!==null&&qi(g);let O=this.getContext();P.addWrite({key:g,store:i,entry:this.#r,nodeName:O?.nodeName,validate:a(()=>{O?.source||(P.checkOverloaded(),this.validate(T))},"validate"),before:Ne.publish?.bind(this,O,g,T),beforeIntermediate:xu(T,Ke.publish?.bind(this,O,g,T)),commit:a((B,v,A)=>{v===void 0&&R&&!_&&Va(),Fe.default.trace?.(`Publishing message to id: ${g}, timestamp: ${new Date(B).toISOString()}`),y(g,v?.value??null,v,v?.version||B,0,!0,{user:O?.user,residencyId:C?.residencyId,expiresAt:O?.expiresAt,nodeId:C?.nodeId,tableToTrack:s},"message",!1,T)},"commit")})}validate(g,T){let C,P=a((O,B,v)=>{if(B.type&&O!=null)if(T&&O.__op__&&(O=O.value),B.properties){typeof O!="object"&&(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be an object${B.type?" ("+B.type+")":""}`);let A=B.properties;for(let U=0,N=A.length;U<N;U++){let L=A[U];if(L.relationship||L.computed){g.hasOwnProperty(L.name)&&(C||(C=[])).push(`Computed property ${v}.${L.name} may not be directly assigned a value`);continue}let $=P(O[L.name],L,v+"."+L.name);$&&(O[L.name]=$)}if(B.sealed&&O!=null&&typeof O=="object")for(let U in O)A.find(N=>N.name===U)||(C||(C=[])).push(`Property ${U} is not allowed within object in property ${v}`)}else switch(B.type){case"Int":(typeof O!="number"||O>>0!==O)&&(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(A=>typeof A=="string")||(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be a string`);break;case"Boolean":typeof O!="boolean"&&(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be a bigint`)}break;case"Bytes":if(!(O instanceof Uint8Array)){if(typeof O=="string")return Buffer.from(O);(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(O instanceof vs)){if(typeof O=="string"&&(O=Buffer.from(O)),O instanceof Buffer)return createBlob(O,{type:"text/plain"});(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be a Blob`)}break;case"array":if(Array.isArray(O)){if(B.elements)for(let A=0,U=O.length;A<U;A++){let N=O[A],L=P(N,B.elements,v+"[*]");L&&(O[A]=L)}}else(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be an Array`);break}B.nullable===!1&&O==null&&(C||(C=[])).push(`Property ${v} is required (and not does not allow null values)`)},"validateValue");for(let O=0,B=S.length;O<B;O++){let v=S[O];if(v.relationship||v.computed){Object.hasOwn(g,v.name)&&(C||(C=[])).push(`Computed property ${v.name} may not be directly assigned a value`);continue}if(!T||v.name in g){let A=P(g[v.name],v,v.name);A!==void 0&&(g[v.name]=A)}}if(f)for(let O in g)S.find(B=>B.name===O)||(C||(C=[])).push(`Property ${O} is not allowed`);if(C)throw new dt.ClientError(C.join(". "))}getUpdatedTime(){return this.#n}wasLoadedFromSource(){return I?!!this.#i:void 0}static async addAttributes(g){let T=S.slice(0);for(let C of g){if(!C.name)throw new dt.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new dt.ClientError("Attribute names cannot include backticks or forward slashes");Gae(C.name),T.push(C)}return ze({table:s,database:c,schemaDefined:u,attributes:T}),ve.indexingOperation}static async removeAttributes(g){let T=S.filter(C=>!g.includes(C.name));return ze({table:s,database:c,schemaDefined:u,attributes:T}),ve.indexingOperation}static getSize(){let g=i.getStats();return(g.treeBranchPageCount+g.treeLeafPageCount+g.overflowPages)*g.pageSize}static getAuditSize(){let g=l?.getStats();return g&&(g.treeBranchPageCount+g.treeLeafPageCount+g.overflowPages)*g.pageSize}static getStorageStats(){let g=i.env.path,T=YN.default.statfsSync?.(g)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(g){let T=i.getStats().entryCount,C=1e3/2,P=performance.now(),O=Math.floor(T/2),B=g?.exactCount,v=0,A=0,U;for(let{value:N}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(N!=null&&v++,A++,await pc(),!B&&A<O&&performance.now()-P>C){U=A;break}if(U){let N=v;v=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:U,snapshot:!1}))re!=null&&v++,await pc();let L=U*2,$=(v+N)/L,W=Math.pow((v-N+1)/U/2,2)+$*(1-$)/L,J=Math.max(Math.sqrt(W)*T,1),F=Math.round($*T),he=Math.max(F-1.96*J,v+N),ue=Math.min(F+1.96*J,T),_e=Math.pow(10,Math.round(Math.log10(J)));return _e>F&&(_e=_e/10),v=Math.round(F/_e)*_e,{recordCount:v,estimatedRange:[Math.round(he),Math.round(ue)]}}return{recordCount:v}}static updatedAttributes(){xr=this.propertyResolvers={$id:a((g,T,C)=>({value:C.key}),"$id"),$updatedtime:a((g,T,C)=>C.version,"$updatedtime"),$updatedTime:a((g,T,C)=>C.version,"$updatedTime"),$expiresAt:a((g,T,C)=>C.expiresAt,"$expiresAt"),$record:a((g,T,C)=>C?{value:g}:g,"$record"),$distance:a((g,T,C)=>C&&(C.distance??T?.vectorDistances?.get(C)),"$distance")};for(let g of this.attributes){g.isPrimaryKey&&(H=g),g.resolve=null;let T=g.relationship,C=g.computed;if(T)if(g.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),C&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Du=!0,T.to)g.elements?.definition?(xr[g.name]=g.resolve=(P,O,B,v)=>{let A=P[T.from?T.from:t],U=g.elements.definition.tableClass;return v?nd({attribute:T.to,value:A},Br(O).getReadTxn(),!1,U,!1).map(N=>N&&N.key!==void 0?N:U.primaryStore.getEntry(N,{transaction:Br(O).getReadTxn()})).asArray:U.search([{attribute:T.to,value:A}],O).asArray},g.set=()=>{},g.resolve.definition=g.elements.definition,g.resolve.to=T.to,T.from&&(g.resolve.from=T.from)):console.error(`The one-to-many/many-to-many relationship property "${g.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(T.from){let P=g.definition||g.elements?.definition;P?(xr[g.name]=g.resolve=(O,B,v,A)=>{let U=O[T.from];if(U===void 0)return;if(g.elements){let L,$=U?.map(W=>{let J=P.tableClass.primaryStore[A?"getEntry":"get"](W,{transaction:Br(B).getReadTxn()});return J?.then&&(L=!0),ve.loadAsInstance===!1&&Object.freeze(A?J?.value:J),J});return T.filterMissing?L?Promise.all($).then(W=>W.filter(vq)):$.filter(vq):L?Promise.all($):$}let N=P.tableClass.primaryStore[A?"getEntry":"get"](U,{transaction:Br(B).getReadTxn()});return ve.loadAsInstance===!1&&Object.freeze(A?N?.value:N),N},g.set=(O,B)=>{if(Array.isArray(B)){let v=B.map(A=>A.getId?.()||A[P.tableClass.primaryKey]);O[T.from]=v}else{let v=B.getId?.()||B[P.tableClass.primaryKey];O[T.from]=v}},g.resolve.definition=g.definition||g.elements?.definition,g.resolve.from=T.from):console.error(`The relationship property "${g.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${g.name}" in table "${s}" must use either "from" or "to" arguments`);else if(C)typeof C.from=="function"&&this.setComputedAttribute(g.name,C.from),xr[g.name]=g.resolve=(P,O,B)=>{let v=typeof C.from=="string"?P[C.from]:P,A=this.userResolvers[g.name];if(A)return A(v,O,B);Fe.default.warn(`Computed attribute "${g.name}" does not have a function assigned to it. Please use setComputedAttribute('${g.name}', resolver) to assign a resolver function.`),this.userResolvers[g.name]=()=>{}},g.resolve.directReturn=!0;else if(r[g.name]?.customIndex?.propertyResolver){let P=r[g.name].customIndex;xr[g.name]=(O,B,v)=>{let A=O[g.name];return P.propertyResolver(A,B,v)},xr[g.name].directReturn=!0}}Lp(this,this),Lp(dm,this,!0);for(let g of S){let T=g.name;g.resolve&&(Object.defineProperty(i.encoder.structPrototype,T,{get(){return g.resolve(this,od.getStore())},set(C){return g.set(this,C)},configurable:!0,enumerable:g.enumerable}),g.enumerable&&!i.encoder.structPrototype.toJSON&&Object.defineProperty(i.encoder.structPrototype,"toJSON",{configurable:!0,value(){let C={};for(let P in this)C[P]=this[P];return C}}))}}static setComputedAttribute(g,T){let C=Ji(S,g);if(!C){console.error(`The attribute "${g}" does not exist in the table "${s}"`);return}if(!C.computed){console.error(`The attribute "${g}" is not defined as computed in the table "${s}"`);return}this.userResolvers[g]=T}static async deleteHistory(g=0,T=!1){let C;for(let{key:P,value:O}of l.getRange({start:0,end:g}))await pc(),At(O).tableId===n&&(C=mg(l,P,O));if(T)for(let P of i.getRange({start:0,versions:!0})){let{key:O,value:B,localTime:v}=P;await pc(),B===null&&v<g&&(C=Tl(i,P))}await C}static async*getHistory(g=0,T=1/0){for(let{key:C,value:P}of l.getRange({start:g||1,end:T})){await pc();let O=At(P);O.tableId===n&&(yield{id:O.recordId,localTime:C,version:O.version,type:O.type,value:O.getValue(i,!0,C),user:O.user,operation:O.originatingOperation})}}static async getHistoryOfRecord(g){let T=[];if(g==null)throw new Error("An id is required");let C=i.getEntry(g);if(!C)return T;let P=C.localTime;if(!P)throw new Error("The entry does not have a local audit time");let O=0;do{await pc();let B=l.get(P);if(B){let v=At(B);T.push({id:v.recordId,localTime:P,version:v.version,type:v.type,value:v.getValue(i,!0,P),user:v.user}),P=v.previousLocalTime}else break}while(O<1e3&&P);return T.reverse()}static cleanup(){Y?.remove()}}let f_=TS(async(K,g,T)=>{for(let C of ve.sources)if(C.get&&(!C.get.reliesOnPrototype||C.prototype.get)){if(C.available?.(T)===!1)continue;g.source=C;let P=await C.get(K,g);if(P)return P}},()=>{throw new dt.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});ve.updatedAttributes();let Vb=ve.prototype;return h&&ve.setTTLExpiration(h/1e3),z&&m_(),ve;function vu(K,g,T){let C;for(let P in r){let O=r[P],B=O.isIndexing,v=xr[P],A=T&&(v?v(T):T[P]),U=g&&(v?v(g):g[P]);if(A===U&&!B)continue;if(O.customIndex){O.customIndex.index(K,A,U);continue}C=!0;let N=O.indexNulls,L=(0,Jp.getIndexedValues)(A,N),$=(0,Jp.getIndexedValues)(U,N);if($?.length>0){let W=new Set($);if(L=L?L.filter(J=>{if(W.has(J))W.delete(J);else return!0}):[],$=Array.from(W),($.length>0||L.length>0)&&Nq){let J=$.concat(L).map(F=>({key:F,value:K}));O.prefetch(J,Lq)}for(let J=0,F=$.length;J<F;J++)O.remove($[J],K)}else L?.length>0&&Nq&&O.prefetch(L.map(W=>({key:W,value:K})),Lq);if(L)for(let W=0,J=L.length;W<J;W++)O.put(L[W],K)}return C}a(vu,"updateIndices");function qi(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>Oq)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)throw new Error("Invalid primary key of null");break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,$l.writeKey)(K,jae,0)>Oq)throw new Error("Primary key size is too large: "+K.length);return!0}a(qi,"checkValidId");function Ps(K){return typeof K=="object"&&K?K.id:K}a(Ps,"requestTargetToId");function fm(K){return typeof K=="object"&&K&&K.isCollection}a(fm,"isSearchTarget");function mm(K){}a(mm,"isRequestTarget");function xo(K,g,T,C,P){if(ve.getResidencyById&&T.ensureLoaded&&g?.replicateFrom!==!1){let B=Ka(ve.getResidencyById(K));if(B&&!B.includes(server.hostname)&&w)return w({key:K,residency:B}).then(P)}let O=a(()=>{if(g?.transaction?.stale&&(g.transaction.stale=!1),T.transaction?.isDone)return P(null,K);let B=i.getEntry(K,T);return(c!=="system"||s==="hdb_analytics")&&(xq.default.trace?.("Recording db-read action for",`${c}.${s}`),We(B?.size??1,"db-read",s,null)),g?._freezeRecords&&Object.freeze(B?.value),B?.residencyId&&B.metadataFlags&kn&&w&&T.ensureLoaded&&g?.replicateFrom!==!1?w(B).then(v=>P(v,K),v=>(Fe.default.error?.("Error loading remote record",K,B,T,v),P(null,K))):(B&&g&&(B?.version>(g.lastModified||0)&&(g.lastModified=B.version),B?.localTime&&!g.lastRefreshed&&(g.lastRefreshed=B.localTime)),P(B,K))},"whenPrefetched");return C?O():te>0?(te--,O()):new Promise((B,v)=>{te===0?(te--,i.prefetch([K],()=>{A(),U()})):(ce.push(K),de.push(U),ce.length>d_&&(te--,A()));function A(){if(ce.length>0){let N=de;i.prefetch(ce,()=>{te===-1?A():te++;for(let L of N)L()}),ce=[],de=[],Se>2&&Se--}else te=Se,Se<um&&Se++}a(A,"prefetch");function U(){try{B(O())}catch(N){v(N)}}a(U,"load")})}a(xo,"loadLocalRecord");function Dn(K,g){let T=g?.checkPermission;if(typeof T!="object"){if(!K?.role)return;T=K.role.permission}if(T.super_user)return zae;let C=T[c],P,O=C?.tables;if(O)return O[s];if(c==="data"&&(P=T[s])&&!P.tables)return P}a(Dn,"getTablePermissions");function pn(K,g,T,C){if(I){let P=!1;if(T.noCache?P=!0:(g?(!g.value||g.metadataFlags&(kn|yl)||g.expiresAt!=null&&g.expiresAt<Date.now())&&(P=!0):P=!0,tn(!P,"cache-hit",s)),P){let O=Uu(K,g,T).then(B=>(B?.value&&B?.value.getRecord?.()&&Fe.default.error?.("Can not assign a record that is already a resource"),T&&(B?.version>(T.lastModified||0)&&(T.lastModified=B.version),T.lastRefreshed=Date.now()),B));if(T?.onlyIfCached||g?.value&&C?.allowStaleWhileRevalidate?.(g,K)){if(O.catch(B=>Fe.default.warn?.(B)),T?.onlyIfCached&&!C.doesExist())throw new dt.ServerError("Entry is not cached",504);return}else return O}}else if(g?.value&&g.expiresAt!=null&&g.expiresAt<Date.now())return ve.evict(g.key,g.value,g.version),g.value=null,{then(P){return P(g)}}}a(pn,"ensureLoadedFromSource");function Br(K){let g=K?.transaction;if(g){if(!g.lmdbDb)return g.lmdbDb=i,g;do{if(g.lmdbDb?.path===i.path)return g;let T=g.next;if(!T)return g=g.next=new ko,g.lmdbDb=i,g;g=T}while(!0)}else return new K_}a(Br,"txnForContext");function Mu(K,g,T){if(!K)return;let C=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof g=="object"){let O=xr,B=C;for(let v=0,A=g.length;v<A;v++){let U=g[v],N=O?.[U];B=N&&B?N(B,T,K):B?.[U],K=null,O=N?.definition?.tableClass?.propertyResolvers}return B}let P=xr[g];return P?P(C,T,K):C[g]}a(Mu,"getAttributeValue");function pm(K,g,T,C,P){let O=P?.length,B={transaction:C,lazy:O>0||typeof g=="string"||g?.length<4,alwaysPrefetch:!0},v;function A(U,N){let L=U?.value;if(!L)return hc.SKIP;for(let $=0;$<O;$++)if(!v?.includes($)&&!P[$](L,U))return hc.SKIP;return N!==void 0&&(U.key=N),U}if(a(A,"processEntry"),O>0||!K.hasEntries){let U=K.map(N=>{if(v=null,typeof N=="object"&&N?.key!==void 0)return O>0?A(N):N;if(N==null)return hc.SKIP;for(let L=0;L<O;L++){let W=P[L].idFilter;if(W){if(!W(N))return hc.SKIP;v||(v=[]),v.push(L)}}return xo(N,T,B,!1,A)});return Array.isArray(K)&&(U=U.filter(N=>N!==hc.SKIP)),U.hasEntries=!0,U}return K}a(pm,"transformToEntries");function Fr(K,g,T=server.replication?.getThisNodeId(l)){if(K<=g?.version){if(g?.version===K&&T!==void 0){let C=server.replication?.exportIdMapping(l),P=g.localTime,O=P&&l.get(P);if(O){let B,v,A=At(O);for(let U in C)C[U]===T&&(B=U),C[U]===A.nodeId&&(v=U);if(B>v)return 1;if(B===v)return 0}}return-1}return 1}a(Fr,"precedesExistingVersion");async function Uu(K,g,T){let C=g?.metadataFlags,P=g?.version,O,B;if(!i.attemptLock(K,P,()=>{clearTimeout(B);let N=i.getEntry(K);!N||!N.value||N.metadataFlags&(kn|yl)?O(Uu(K,i.getEntry(K),T)):O(N)}))return new Promise(N=>{O=N,B=setTimeout(()=>{i.unlock(K,P)},Yae)});let v=g?.value,A={requestContext:T,replacingRecord:v,replacingEntry:g,replacingVersion:P,noCacheStore:!1,source:null,resourceCache:T?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},U=T?.responseHeaders;return new Promise((N,L)=>{let $;Gs(bt(A,async W=>{let J=performance.now(),F,he,ue;try{F=await f_(K,A,g),ue=C&kn;let re=A.lastModified||ue&&P;re||(re=(0,Jp.getNextMonotonicTime)()),he=ue||re>P||!v;let oe=performance.now()-J;if(We(oe,"cache-resolution",s,null,"success"),U&&jp(U,"Server-Timing",`cache-resolve;dur=${oe.toFixed(2)}`,!0),W.timestamp=re,h&&A.expiresAt==null&&(A.expiresAt=Date.now()+h),F){if(typeof F!="object")throw new Error("Only objects can be cached and stored in tables");if(F.status>0&&F.headers)if(F.status>=300)if(F.status===304)F=v,re=P;else throw new dt.ServerError(F.body||"Error from source",F.status);else F=F.body;typeof F.toJSON=="function"&&(F=F.toJSON()),t&&F[t]!==K&&(F[t]=K)}$=!0,N({key:K,version:re,value:F})}catch(re){re.message+=` while resolving record ${K} for ${s}`,v&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!T?.mustRevalidate||T?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(N({key:K,version:P,value:v}),Fe.default.trace?.(re.message,"(returned stale record)")):L(re);let oe=performance.now()-J;We(oe,"cache-resolution",s,null,"fail"),U&&jp(U,"Server-Timing",`cache-resolve;dur=${oe.toFixed(2)}`,!0),A.transaction.abort();return}if(T?.noCacheStore||A.noCacheStore){A.transaction.abort();return}Br(A).addWrite({key:K,store:i,entry:g,nodeName:"source",before:xu(F),commit:a((re,oe)=>{if(oe?.version!==P)return;let ge=vu(K,v,F);if(F){Ke.put?.(A,K,F),oe&&(T.previousResidency=ve.getResidencyRecord(oe.residencyId));let me,ie=!1,Ce,Be=Ka(ve.getResidency(F,T));if(Be){if(!Be.includes(server.hostname))if(me=F,ie=!0,ve.getResidencyById)F=void 0;else{F=null;for(let He in r)F||(F={}),F[He]=me[He]}Ce=Xc(Be)}Fe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),y(K,F,oe,re,ie?kn:0,_&&(he||ie)||null,{user:A?.user,expiresAt:A.expiresAt,residencyId:Ce,tableToTrack:s},"put",!!ue,me)}else oe&&(Ke.delete?.(A,K),Fe.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),_||R?y(K,null,oe,re,0,_&&he||null,{user:A?.user,tableToTrack:s},"delete",!!ue):Tl(i,oe,P))},"commit")})}),()=>{i.unlock(K,P)},W=>{i.unlock(K,P),$&&Fe.default.error?.("Error committing cache update",W)})})}a(Uu,"getFromSource");function $a(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new dt.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new dt.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}a($a,"checkContextPermissions");function Va(K){let g=!1;if(K&&(K-Ir>1&&(g=!0),Ir=K),!($e===nr&&!g)&&(nr=$e,(0,Gl.getWorkerIndex)()===(0,Gl.getWorkerCount)()-1))return zr&&clearTimeout(zr),$e?new Promise(T=>{let C=new Date;C.setMonth(0),C.setDate(1),C.setHours(0),C.setMinutes(0),C.setSeconds(0);let P=$e/(1+Ir),O=g?Date.now():Math.ceil((Date.now()-C.getTime())/P)*P+C.getTime(),B=a(v=>{Fe.default.trace?.(`Scheduled next cleanup scan at ${new Date(v)}`),zr=setTimeout(()=>X=X.then(async()=>{if(B(Math.max(v+$e,Date.now())),i.rootStore.status!=="open"){clearTimeout(zr);return}let A=50,U=new Array(A),N=0,L=Math.pow(Ir,8)*(ql.get(x.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),$=E/Math.pow(Math.max(Ir,1),4);Fe.default.debug?.(`Starting cleanup scan for ${s}, evict threshold ${L}, adjusted eviction ${$}ms`);function W(J,F,he,ue){let _e=J+$-Date.now();if(_e<0)return!0;if(Ir){let re=i.lastSize;return he&Zr&&ll(ue,oe=>{oe.size&&(re+=oe.size)}),Fe.default.trace?.(`shouldEvict adjusted ${_e} ${re}, ${_e*(J-F)/re} < ${L}`),_e*(J-F)/re<L}return!1}a(W,"shouldEvict");try{let J=0;for(let F of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:he,value:ue,version:_e,expiresAt:re,metadataFlags:oe}=F,ge;ue===null&&!_&&_e+Kae<Date.now()?ge=Tl(i,F,_e):re!=null&&W(re,_e,oe,ue)&&(ge=ve.evict(he,ue,_e),J++),ge&&(await U[N],U[N]=ge.catch(me=>{Fe.default.error?.("Cleanup error",me)}),++N>=A&&(N=0)),await pc()}Fe.default.debug?.(`Finished cleanup scan for ${s}, evicted ${J} entries`)}catch(J){Fe.default.warn?.(`Error in cleanup scan for ${s}:`,J)}T(void 0),Ir=0}),Math.min(v-Date.now(),2147483647)).unref()},"startNextTimer");B(O)}):void 0}a(Va,"scheduleCleanup");function hm(){Y=l?.addDeleteRemovalCallback(n,i,(K,g)=>{i.remove(K,g)})}a(hm,"addDeleteRemoval");function m_(){(0,Gl.getWorkerIndex)()===0&&setInterval(async()=>{if(!Qc){Qc=!0;try{let K=z.name,g=r[K];if(!g)throw new Error(`expiresAt attribute ${z} must be indexed`);for(let T of g.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let C of g.getValues(T)){let P=i.getEntry(C);P?.value?P.value[K]<Date.now()&&ve.evict(C,P.value,P.version):i.ifVersion(C,P?.version,()=>g.remove(T,C))}await pc()}}catch(K){Fe.default.error?.("Error in evicting old records",K)}finally{Qc=!1}}},Vae).unref()}a(m_,"runRecordExpirationEviction");function Ka(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let g=server.shards?.get?.(K);if(g)return Fe.default.trace?.(`Shard ${K} mapped to ${g.map(T=>T.name).join(", ")}`),g.map(T=>T.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}a(Ka,"residencyFromFunction");function Xc(K){if(K){let g=K.join(","),T=d.get([Symbol.for("residency_by_set"),g]);return T||(d.put([Symbol.for("residency_by_set"),g],T=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),T],K),T)}}a(Xc,"getResidencyId");function xu(K,g){let T=YA(K,i.rootStore);if(T){let C=g;return C?async()=>{await C(),await T}:()=>T}return g}a(xu,"preCommitBlobsForRecordBefore")}function KN(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 Lq(){}function RS(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;try{switch(r){case"Int":case"Long":if(e[0]==="$")return yS(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return yS(+e);case"Float":return e==="null"?null:yS(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return(0,Pd.autoCastBooleanStrict)(e);case"Date":if(isNaN(e)){if(e==="null")return null;Jae.test(e)||(e+="Z");let n=new Date(e);return yS(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,Pd.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function yS(e){if(isNaN(e))throw new SyntaxError;return e}function Dq(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t||t.startsWith?.(e);if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function Gs(e,t,r){return e?.then?e.then(t,r):t(e)}function vq(e){return e!=null}function qs(e){try{return JSON.stringify(e)}catch{return e}}function Qae(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var hc,Jp,Mq,Uq,ql,dt,Qp,Xp,Fe,$l,Gl,Pd,YN,xq,Hae,Gae,qae,$ae,Vae,Kae,Nq,Yae,Cq,Wae,kn,yl,jae,Oq,Pq,zae,HUe,Jae,pc,Lg=se(()=>{G();hc=require("lmdb"),Jp=b(xn()),Mq=b(require("lodash")),Uq=b(Bm());Qi();km();ql=b(fe());MI();dt=b(Ee()),Qp=b(Xo()),Xp=b(us());Oe();Pg();Fe=b(ir());qw();Qa();$l=require("ordered-binary"),Gl=b(st());Ki();Pd=b(ae());El();os();z_();zp();YN=b(require("node:fs"));is();lg();xq=b(Q());VN();({sortBy:Hae}=Mq.default),{validateAttribute:Gae}=Uq.default,qae=new Uint8Array(9);qae[8]=192;$ae=1/0,Vae=6e4,Kae=864e5;ql.initSync();Nq=ql.get(x.STORAGE_PREFETCHWRITES),Yae=1e4,Cq=1,Wae=2,kn=1,yl=8,jae=Buffer.allocUnsafeSlow(8192),Oq=1978,Pq=100,zae={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},HUe=(0,Pd.convertToMS)(ql.get(x.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(bS,"makeTable");a(KN,"attributesAsObject");a(Lq,"noop");Jae=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(RS,"coerceType");a(yS,"rejectNaN");a(Dq,"isDescendantId");pc=a(()=>new Promise(setImmediate),"rest");a(Gs,"when");a(vq,"exists");a(qs,"stringify");a(Qae,"hasOtherProcesses")});function AS(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,o=t[s]||0,c=i-o;r+=c*c}return r}function IS(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let o=0;o<i;o++){let c=e[o]||0,l=t[o]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var Fq=se(()=>{a(AS,"euclideanDistance");a(IS,"cosineDistance")});var kq,Hq,Dd,uo,Ld,Xae,Zae,wS,Gq=se(()=>{Fq();kq=require("msgpackr"),Hq=b(ir()),Dd=b(Ee()),uo=(0,Hq.loggerWithTag)("HNSW"),Ld=Symbol.for("entryPoint"),Xae=Symbol.for("key"),Zae=10,wS=class{static{a(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=kq.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?AS:IS,r&&(r.M!==void 0&&(this.M=r.M,this.mL=1/Math.log(this.M)),r.efConstruction!==void 0&&(this.efConstruction=this.efConstructionSearch=r.efConstruction),r.efConstructionSearch!==void 0&&(this.efConstructionSearch=r.efConstructionSearch),r.mL!==void 0&&(this.mL=r.mL),r.optimizeRouting!==void 0&&(this.optimizeRouting=r.optimizeRouting))}index(t,r,n){let s=typeof t=="number"?[Xae,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let o=new Map,c,l=this.indexStore.get(Ld);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f==null){let E=Math.floor(-Math.log(Math.random())*this.mL),_={vector:r,level:E,primaryKey:t};for(let R=0;R<=E;R++)_[R]=[];if(this.indexStore.put(i,_),typeof i!="number")throw new Error("Invalid nodeId: "+i);uo.debug?.("setting entry point to",i),this.indexStore.put(Ld,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),Zae),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);uo.debug?.("setting entry point to",i),this.indexStore.put(Ld,i)}for(;p>m;){let E=this.searchLayer(r,l,f,this.efConstruction,p);E.length>0&&(l=E[0].id,f=E[0].node),p--}let h=new Array(m+1);for(let E=0;E<=m;E++)h[E]=[];for(let E=Math.min(m,p);E>=0;E--){let _=this.searchLayer(r,l,f,this.efConstruction,E);_=_.slice(0,this.M<<1),_.length===0&&E===0&&uo.info?.("should not have zero connections for",l);let R=h[E];for(let S=0;S<_.length;S++){let{id:y,distance:w,node:I}=_[S];if(y===i)continue;let H=[];if(this.optimizeRouting){let k=!1,z=I[E],Y=1+this.optimizeRouting*(1+.5*S/this.M);for(let ce=0;ce<z?.length;ce++){let{id:de,distance:te}=z[ce],Se=1+this.optimizeRouting*(1+.5*ce/this.M);for(let Ne=0;Ne<R.length;Ne++){let{id:Ke,distance:$e}=R[Ne];if(Ke===de){w*Y>$e+te?k=!0:te*Se>w+$e&&(H.push({fromId:Ke,toId:y}),H.push({fromId:y,toId:Ke}));break}}if(k)break}if(k)continue}else if(S>=(E>0?this.M:this.M<<1))continue;R.push({id:y,distance:w});for(let{fromId:k,toId:z}of H){let Y=d(k);Y||(Y=d(k,this.indexStore.get(k)));for(let ce=0;ce<Y[E].length;ce++)if(Y[E][ce].id===z){Object.isFrozen(Y[E])&&(Y[E]=Y[E].slice()),Y[E].splice(ce,1);break}}let X=c[E],q=X?.find(({id:k})=>k===y);if(q){let k=X?.indexOf(q);X.copied||(X=[...X],X.copied=!0,c[E]=X),X.splice(k,1)}else this.addConnection(y,d(y,I),i,E,w,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...h})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m]?.[0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:p,value:h}of this.indexStore.getRange({start:0,end:1/0}))if(h.level>m){if(l=p,h.level===f)break;m=h.level}}if(l===void 0)this.indexStore.remove(Ld);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);uo.debug?.("setting entry point to",l),this.indexStore.put(Ld,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:p}of m){let h=d(p,this.indexStore.get(p));if(h)for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:_})=>_!==i),h[E]?.length===0&&(uo.info?.("node was left orphaned, will reindex",p),u.set(h.primaryKey,h.vector))}}function d(f,m){let p=o.get(f);return!p&&m&&(p={...m},o.set(f,p)),p}a(d,"updateNode");for(let[f,m]of o)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(Ld);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,o=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((p,h)=>p.distance-h.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:p}of m[i]||[]){if(c.has(p)||p===void 0)continue;c.add(p);let h=this.indexStore.get(p);if(!h)continue;this.nodesVisitedCount++;let E=o(t,h.vector);if(E<f||u.length<s){let _={id:p,distance:E,node:h};l.push(_),u.push(_)}}u.sort((p,h)=>p.distance-h.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let o=0;switch(i){case"lt":case"le":o=r;case"sort":break;default:throw new 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=IS;else if(s==="euclidean")c=AS;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 o&&(d=d.filter(f=>f.distance<o)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let o=this.indexStore.get(i);if(!o){uo.info?.("could not find neighbor node",o);continue}o[n]?.find(({id:l})=>l==t)||uo.info?.("asymmetry detected",o[n])}n++}}addConnection(t,r,n,s,i,o){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){uo.debug?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=o(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=o(f.id,m),m[s]=m[s].filter(({id:p})=>p!==t),s===0&&m[s].length===0&&uo.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?uo.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let o=s.shift(),c=this.indexStore.get(o);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let o=this.distance;s.type&&(o=s.distance==="euclidean"?AS:IS);let c=o(s.target,t);return i.set(n,c),c}return t}}});var WN,qq=se(()=>{Gq();WN={HNSW:wS}});var mt={};ye(mt,{NON_REPLICATING_SYSTEM_TABLES:()=>NS,database:()=>gd,databaseEnvs:()=>na,databases:()=>Me,dropDatabase:()=>Ww,dropTableMeta:()=>ice,getDatabases:()=>lt,getDefaultCompression:()=>MS,getTables:()=>tce,onRemovedDB:()=>ih,onUpdatedTable:()=>Vl,readMetaDb:()=>Zp,resetDatabases:()=>Bd,table:()=>ze,tables:()=>yn});function sh(e,t){let r=DS.OpenDBIObject??DS.default.OpenDBIObject;return new r(e,t)}function tce(){return LS||lt(),yn||{}}function lt(){if(LS)return Me;LS=!0,Ud=new Map;let e=(0,Zt.getHdbBasePath)()&&(0,Ht.join)((0,Zt.getHdbBasePath)(),tl),t=(0,Zt.get)(x.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Zt.get)(x.STORAGE_PATH)||e&&((0,_s.existsSync)(e)?e:(0,Ht.join)((0,Zt.getHdbBasePath)(),T_)),!!e){if((0,_s.existsSync)(e))for(let r of(0,_s.readdirSync)(e,{withFileTypes:!0})){let n=(0,Ht.basename)(r.name,".mdb");r.isFile()&&(0,Ht.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Zp((0,Ht.join)(e,r.name),null,n)}if((0,_s.existsSync)((0,Md.getBaseSchemaPath)())){for(let r of(0,_s.readdirSync)((0,Md.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Ht.join)((0,Md.getBaseSchemaPath)(),r.name),s=(0,Ht.join)((0,Md.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,_s.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Ht.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Ht.join)(s,i.name);Zp((0,Ht.join)(n,i.name),(0,Ht.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,_s.existsSync)(s))for(let o of(0,_s.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,Ht.extname)(o.name).toLowerCase()===".mdb"&&Zp((0,Ht.join)(s,o.name),(0,Ht.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,Ht.join)(c.path,(0,Ht.basename)(o+".mdb"));(0,_s.existsSync)(l)&&Zp(l,o,r,null,!0)}}for(let r in Me){let n=Ud.get(r);if(n){let s=Me[r];r.includes("delete")&&Cr.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Cr.trace(`delete table class ${i}`),delete s[i])}else if(delete Me[r],r==="data"){for(let s in yn)delete yn[s];delete yn[vS]}}if((0,Zt.get)(x.ANALYTICS_REPLICATE)===!1?NS.includes("hdb_analytics")||NS.push("hdb_analytics"):(Me.system?.hdb_analytics?.enableAuditing(),Me.system?.hdb_analytics_hostname?.enableAuditing()),Me.system)for(let r of NS)Me.system[r]&&(Me.system[r].replicate=!1);return Ud=null,Me}}function Bd(){LS=!1;for(let[,e]of na)e.needsDeletion=!0;lt();for(let[e,t]of na)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),na.delete(e);let r=Me[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete Me[t.databaseName],th.forEach(i=>i(t.databaseName));break}}return Me}function Zp(e,t,r=JN,n,s){let i=new jN.default(e,!1);try{let o=na.get(e);o?o.needsDeletion=!1:(o=(0,xd.open)(i),na.set(e,o));let c=new sh(!1),l=o.dbisDb||(o.dbisDb=o.openDB(CS.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,_s.existsSync)(n)&&(i.path=n,u=(0,xd.open)(i),u.isLegacy=!0):u=fg(o));let d=Wq(r),f=d[vS],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,_]=p.toString().split("/");_===""?_=h.name:_||(_=E,E=t,h.name||(h.name=_,h.indexed=!h.is_hash_attribute)),f?.add(E);let R=m.get(E);R||m.set(E,R={attributes:[]}),(_==null||h.is_hash_attribute)&&(R.primary=h),_!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:_}=h;if(!_){for(let te of E)if(te.is_hash_attribute||te.isPrimaryKey){_=te;break}if(!_){Cr.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let R=d[p],S={},y=[],w,I,H=typeof _.audit=="boolean"?_.audit:(0,Zt.get)(x.LOGGING_AUDITLOG),X=_.trackDeletes,q=_.expiration,k=_.eviction,z=_.sealed,Y=_.splitSegments,ce=_.replicate;if(R)S=R.indices,y=R.attributes,R.schemaVersion++;else{w=_.tableId,w?w>=(l.get(vd)||0)&&(l.putSync(vd,w+1),Cr.info(`Updating next table id (it was out of sync) to ${w+1} for ${p}`)):(_.tableId=w=l.get(vd),w||(w=1),Cr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(vd,w+1),l.putSync(_.key,_));let te=new sh(!_.is_hash_attribute,_.is_hash_attribute);if(te.compression=_.compression,te.compression){let Se=(0,Zt.get)(x.STORAGE_COMPRESSION_THRESHOLD)||Yq;te.compression.threshold=Se}I=wg(o.openDB(_.key,te),o),o.databaseName=r,I.tableId=w}let de;for(let te of E){te.attribute=te.name;try{if(!te.is_hash_attribute&&(te.indexed||te.attribute&&!te.name)){if(!S[te.name]){let Ne=zq(te.key,o,te);S[te.name]=Ne,S[te.name].indexNulls=te.indexNulls}let Se=y.find(Ne=>Ne.name===te.name);Se?y.splice(y.indexOf(Se),1,te):y.push(te),de=!0}}catch(Se){Cr.error("Error trying to update attribute",te,y,S,Se)}}for(let te of y)if(!E.find(Ne=>Ne.name===te.name)){if(te.is_hash_attribute){Cr.error("Unable to remove existing primary key attribute",te);continue}te.indexed&&(y.splice(y.indexOf(te),1),de=!0)}if(R)de&&(R.schemaVersion++,R.updatedAttributes());else{R=jq(d,p,bS({primaryStore:I,auditStore:u,audit:H,sealed:z,splitSegments:Y,replicate:ce,expirationMS:q&&q*1e3,evictionMS:k&&k*1e3,trackDeletes:X,tableName:p,tableId:w,primaryKey:_.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:_.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let te of eh)te(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Wq(e){let t=Me[e];if(t||(e==="data"?t=Me[e]=yn:e==="system"?Object.defineProperty(Me,"system",{value:t=Object.create(null),configurable:!0}):t=Me[e]=Object.create(null)),Ud&&!Ud.has(e)){let r=new Set;t[vS]=r,Ud.set(e,r)}return t}function jq(e,t,r){return e[t]=r,r}function gd({database:e,table:t}){e||(e=JN),lt();let r=Wq(e),n=(0,Ht.join)((0,Zt.getHdbBasePath)(),tl),s=(0,Zt.get)(x.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,Zt.get)(x.STORAGE_PATH)||((0,_s.existsSync)(n)?n:(0,Ht.join)((0,Zt.getHdbBasePath)(),T_));let o=(0,Ht.join)(n,(i?t:e)+".mdb"),c=na.get(o);if(!c||c.status==="closed"){let l=new jN.default(o,!1);c=(0,xd.open)(l),na.set(o,c)}return c.auditStore||(c.auditStore=fg(c)),c}async function Ww(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,na.delete(r.path),r.status==="open"&&(await r.close(),await rh.remove(r.path));if(r||(r=gd({database:e,table:null}),r.status==="open"&&(await r.close(),await rh.remove(r.path))),e==="data"){for(let n in yn)delete yn[n];delete yn[vS]}delete Me[e],th.forEach(n=>n(e)),await KA(r)}function zq(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&WN[r.indexed.type]?.useObjectStore,s=new sh(!n,n),i=t.openDB(e,s);if(r.indexed.type){let o=WN[r.indexed.type];o?i.customIndex=new o(i,r.indexed):Cr.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function ze(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:o,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=JN);let h=gd({database:r,table:t}),E=Me[r];Cr.trace(`Defining ${t} in ${r}`);let _=E?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let R,S,y;m==null&&(m=!0);let w=new sh(!1);for(let Y of o)Y.attribute&&!Y.name?(Y.name=Y.attribute,Y.indexed=!0):Y.attribute=Y.name,Y.expiresAt&&(Y.indexed=!0);let I,H;if(_){if(R=_.primaryKey,_.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=_.splitSegments),_.attributes.splice(0,_.attributes.length,...o)}else{let Y=h.auditStore;S=o.find(Se=>Se.isPrimaryKey)||{},R=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=MS(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,Zt.get)(x.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),u??=!1,S.splitSegments=u,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),p&&(S.origins?S.origins.includes(p)||S.origins.push(p):S.origins=[p]),Cr.trace(`${t} table loading, opening primary store`);let ce=new sh(!1,!0);ce.compression=S.compression;let de=t+"/";if(y=h.dbisDb=h.openDB(CS.INTERNAL_DBIS_NAME,w),z(),y.get(de))return H&&H(),Bd(),ze(e);let te=wg(h.openDB(de,ce),h);h.databaseName=r,te.tableId=y.get(vd),Cr.trace(`Assigning new table id ${te.tableId} for ${t}`),te.tableId||(te.tableId=1),y.put(vd,te.tableId+1),S.tableId=te.tableId,_=jq(E,t,bS({primaryStore:te,auditStore:Y,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:R,tableName:t,tableId:te.tableId,databasePath:r,databaseName:r,indices:{},attributes:o,schemaDefined:m,dbisDB:y})),_.schemaVersion=1,I=!0,y.put(de,S)}let X=_.indices;y=y||(h.dbisDb=h.openDB(CS.INTERNAL_DBIS_NAME,w)),_.dbisDB=y;let q=[];for(let{key:Y,value:ce}of y.getRange({start:!0})){let[de,te]=Y.toString().split("/");if(te===""&&(te=ce.name),te){if(de!==t)continue}else continue;let Se=o.find(Ke=>Ke.name===te),Ne=!Se?.indexed&&ce.indexed&&!ce.isPrimaryKey;if((!Se||Ne)&&(z(),I=!0,Se||y.remove(Y),Ne)){let Ke=_.indices[de];Ke&&q.push(Ke)}}let k=[];try{for(let Y of o||[]){if((Y.relationship||Y.computed)&&(I=!0,Y.relationship))continue;let ce=t+"/"+(Y.name||"");Object.defineProperty(Y,"key",{value:ce,configurable:!0});let de=y.get(ce);if(Y.isPrimaryKey){if(de=de||y.get(ce=t+"/")||{},c!==void 0&&c!==_.audit||l!==void 0&&l!==_.sealed||d!==void 0&&d!==_.replicate||(+n||void 0)!==(+de.expiration||void 0)||(+s||void 0)!==(+de.eviction||void 0)||Y.type!==de.type){let Se={...de};typeof c=="boolean"&&(c&&_.enableAuditing(c),Se.audit=c),n&&(Se.expiration=+n),s&&(Se.eviction=+s),l!==void 0&&(Se.sealed=l),d!==void 0&&(Se.replicate=d),Y.type&&(Se.type=Y.type),I=!0,z(),y.put(ce,Se)}continue}de?.attribute&&!de.name&&(de.indexed=!0);let te=!de||de.type!==Y.type||JSON.stringify(de.indexed)!==JSON.stringify(Y.indexed)||de.nullable!==Y.nullable||de.version!==Y.version||de.enumerable!==Y.enumerable||JSON.stringify(de.properties)!==JSON.stringify(Y.properties)||JSON.stringify(de.elements)!==JSON.stringify(Y.elements);if(Y.indexed){let Se=zq(ce,h,Y);(te||de.indexingPID&&de.indexingPID!==process.pid||de.restartNumber<nh.workerData?.restartNumber)&&(I=!0,z(),de=y.get(ce),(te||de.indexingPID&&de.indexingPID!==process.pid||de.restartNumber<nh.workerData?.restartNumber)&&(I=!0,Y.indexNulls===void 0&&(Y.indexNulls=!0),_.primaryStore.getStats().entryCount>0&&(Y.lastIndexedKey=de?.lastIndexedKey??void 0,Y.indexingPID=process.pid,Se.isIndexing=!0,Object.defineProperty(Y,"dbi",{value:Se}),k.push(Y))),y.put(ce,Y)),de?.indexNulls&&Y.indexNulls===void 0&&(Y.indexNulls=!0),Se.indexNulls=Y.indexNulls,X[Y.name]=Se}else te&&(I=!0,z(),y.put(ce,Y))}}finally{H&&H()}if(I&&(_.schemaVersion++,_.updatedAttributes()),Cr.trace(`${t} table loading, running index`),k.length>0||q.length>0?_.indexingOperation=sce(_,k,q):I&&OS.signalSchemaChange(new PS.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=p,I)for(let Y of eh)Y(_,p!=="cluster");return(n||s||i)&&_.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Cr.trace(`${t} table loaded`),_;function z(){H||h.transactionSync(()=>({then(Y){H=Y}}))}a(z,"startTxn")}async function sce(e,t,r){try{Cr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await OS.signalSchemaChange(new PS.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,xd.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:p}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,p,()=>{for(let h=0;h<l;h++){let E=t[h],_=E.name,R=E.dbi;try{let S=E.resolve,y=m&&(S?S(m):m[_]);if(R.customIndex){R.customIndex.index(f,y);continue}let w=(0,$q.getIndexedValues)(y,R.indexNulls);if(w)for(let I=0,H=w.length;I<H;I++)R.put(w[I],f)}catch(S){o[_]||(o[_]=!0,Cr.error(`Error indexing attribute ${_}`,S))}}}),s.then(()=>d--,h=>{d--,Cr.error(h)}),nh.workerData&&nh.workerData.restartNumber!==Kq.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>rce?await s:d>nce&&await new Promise(h=>setImmediate(h))}for(let f of t)delete f.lastIndexedKey,delete f.indexingPID,f.dbi.isIndexing=!1,s=e.dbisDB.put(f.key,f)}await s,await OS.signalSchemaChange(new PS.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Cr.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Cr.error("Error in indexing",n)}}function ice({table:e,database:t}){let r=gd({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function Vl(e){return eh.push(e),{remove(){let t=eh.indexOf(e);t>-1&&eh.splice(t,1)}}}function ih(e){return th.push(e),{remove(){let t=th.indexOf(e);t>-1&&th.splice(t,1)}}}function MS(){let e=(0,Zt.get)(x.STORAGE_COMPRESSION),t=(0,Zt.get)(x.STORAGE_COMPRESSION_DICTIONARY),r=(0,Zt.get)(x.STORAGE_COMPRESSION_THRESHOLD)||Yq,n={startingOffset:32};return t&&(n.dictionary=rh.readFileSync(t)),r&&(n.threshold=r),e&&n}var Zt,CS,xd,Ht,_s,Md,jN,rh,zN,$q,OS,PS,nh,Vq,Kq,DS,ece,Cr,JN,vS,Yq,NS,yn,Me,vd,eh,th,LS,na,Ud,rce,nce,Oe=se(()=>{Zt=b(fe()),CS=b(Jt()),xd=require("lmdb"),Ht=require("path"),_s=require("fs"),Md=b(Rt());Lg();jN=b(mp());G();rh=b(require("fs-extra")),zN=b(ai()),$q=b(xn()),OS=b(Xo()),PS=b(us()),nh=require("worker_threads"),Vq=b(Q()),Kq=b(st());Ki();El();is();qq();DS=b(fp()),{forComponent:ece}=Vq.default;a(sh,"OpenDBIObject");Cr=ece("storage"),JN="data",vS=Symbol("defined-tables"),Yq=((0,Zt.get)(x.STORAGE_PAGESIZE)||4096)-60;(0,Zt.initSync)();NS=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"],yn=Object.create(null),Me=Object.create(null);(0,zN._assignPackageExport)("databases",Me);(0,zN._assignPackageExport)("tables",yn);vd=Symbol.for("next-table-id"),eh=[],th=[],na=new Map;a(tce,"getTables");a(lt,"getDatabases");a(Bd,"resetDatabases");a(Zp,"readMetaDb");a(Wq,"ensureDB");a(jq,"setTable");a(gd,"database");a(Ww,"dropDatabase");a(zq,"openIndex");a(ze,"table");rce=1e3,nce=10;a(sce,"runIndexing");a(ice,"dropTableMeta");a(Vl,"onUpdatedTable");a(ih,"onRemovedDB");a(MS,"getDefaultCompression")});var ZN={};ye(ZN,{loadGQLSchema:()=>cce,start:()=>XN,startOnMainThread:()=>ace});function XN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=o(new c(r.toString(),s)),m=new Map,p=[],h;for(let R of f.definitions)switch(R.kind){case l.OBJECT_TYPE_DEFINITION:let H=function(q){if(q.kind==="NonNullType"){let Y=H(q.type);return Y.nullable=!1,Y}if(q.kind==="ListType")return{type:"array",elements:H(q.type)};let z={type:q.name?.value};return Object.defineProperty(z,"location",{value:q.loc.startToken}),z};a(H,"getProperty");let S=R.name.value,y=[],w={table:null,database:null,properties:y};m.set(S,w),i.allTypes.set(S,w);for(let q of R.directives){if(q.name.value==="table"){for(let z of q.arguments)w[z.name.value]=z.value.value;w.schema&&(w.database=w.schema),w.table||(w.table=S),w.audit&&(w.audit=w.audit!=="false"),w.attributes=w.properties,p.push(w)}if(q.name.value==="sealed"&&(w.sealed=!0),q.name.value==="splitSegments"&&(w.splitSegments=!0),q.name.value==="replicate"&&(w.replicate=!0),q.name.value==="export"){w.export=!0;for(let z of q.arguments)typeof w.export!="object"&&(w.export={}),w.export[z.name.value]=z.value.value}}let I=!1,X={};for(let q of R.fields){let k=H(q.type);k.name=q.name.value,y.push(k),X[k.name]=void 0;for(let z of q.directives){let Y=z.name.value;if(Y==="primaryKey")I?console.warn("Can not define two attributes as a primary key at",z.loc):(k.isPrimaryKey=!0,I=!0);else if(Y==="indexed"){let ce={};for(let de of z.arguments||[])ce[de.name.value]=de.value.value;k.indexed=ce}else if(Y==="computed"){for(let ce of z.arguments||[])if(ce.name.value==="from"){let de=ce.value.value;k.computed={from:_(de,ce,X)},k.version==null&&(k.version=de)}else ce.name.value==="version"&&(k.version=ce.value.value);k.computed=k.computed||!0}else if(Y==="relationship"){let ce={};for(let de of z.arguments)ce[de.name.value]=de.value.value;k.relationship=ce}else if(Y==="createdTime")k.assignCreatedTime=!0;else if(Y==="updatedTime")k.assignUpdatedTime=!0;else if(Y==="expiresAt")k.expiresAt=!0;else if(Y==="enumerable")k.enumerable=!0;else if(Y==="allow"){let ce=k.authorizedRoles=[];for(let de of z.arguments)de.name.value==="role"&&ce.push(de.value.value)}else server.knownGraphQLDirectives.includes(Y)&&console.warn(`@${Y} is an unknown directive, at`,z.loc)}}w.type=S,S==="Query"&&(h=w)}function E(R){let S=m.get(R.type);S?(Object.defineProperty(R,"properties",{value:S.properties}),Object.defineProperty(R,"definition",{value:S})):R.type==="array"?E(R.elements):oce.includes(R.type)||(0,Qq.getWorkerIndex)()===0&&console.error(`The type ${R.type} is unknown at line ${R.location.line}, column ${R.location.column}, in ${s}`)}a(E,"connectPropertyType");for(let R of m.values())for(let S of R.properties)E(S);for(let R of p)R.tableClass=e(R),R.export&&(R.export.name===""?i.set((0,QN.dirname)(n),R.tableClass):i.set((0,QN.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function _(R,S,y){return new Jq.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${R}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(y)}a(_,"createComputedFrom")}}var QN,Jq,Qq,oce,ace,cce,Xq=se(()=>{QN=require("path"),Jq=require("node:vm");Oe();Qq=b(st());sc();oce=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives||(server.knownGraphQLDirectives=[]);server.knownGraphQLDirectives.push("table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow","enumerable");a(XN,"start");ace=XN,cce=a(e=>XN({ensureTable:ze}).handleFile(e,null,null,new cd),"loadGQLSchema")});var tC={};ye(tC,{start:()=>_ce});function lce(e){if(e.kind!==qe.Kind.OPERATION_DEFINITION&&e.kind!==qe.Kind.FRAGMENT_DEFINITION)throw new Vr(`Unexpected non-executable definition type ${e.kind}.`)}function Zq(e){if(typeof e!="object"||e===null)throw new fo("Request body must be an object.");if(!("query"in e))throw new fo("Request body must contain a `query` field.");if(typeof e.query!="string")throw new fo("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new fo("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new fo("Request body `operationName` field must be a string.")}function eC(e){return parseInt(e.value,10)}function t$(e){return parseFloat(e.value)}function r$(e,t,r){let n=r.get(e.name.value);return n$(n)?s$(n,t):{attribute:t,value:n}}function n$(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function s$(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],n$(n)?s$(n,t):{attribute:t,value:n}))}function uce(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case qe.Kind.NULL:return{attribute:t,value:null};case qe.Kind.INT:return{attribute:t,value:eC(e.value)};case qe.Kind.FLOAT:return{attribute:t,value:t$(e.value)};case qe.Kind.BOOLEAN:case qe.Kind.STRING:return{attribute:t,value:e.value.value};case qe.Kind.VARIABLE:return r$(e.value,t,r);case qe.Kind.OBJECT:return i$(e.value,t,r);case qe.Kind.LIST:case qe.Kind.ENUM:default:throw new Vr(`Value type, ${e.value.kind}, is not supported.`)}}function i$(e,t,r){return e.fields.flatMap(n=>uce(n,t,r))}function dce(e,t){switch(e.value.kind){case qe.Kind.NULL:return{attribute:e.name.value,value:null};case qe.Kind.INT:return{attribute:e.name.value,value:eC(e.value)};case qe.Kind.FLOAT:return{attribute:e.name.value,value:t$(e.value)};case qe.Kind.BOOLEAN:case qe.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case qe.Kind.VARIABLE:return r$(e.value,e.name.value,t);case qe.Kind.OBJECT:return i$(e.value,[e.name.value],t);case qe.Kind.LIST:case qe.Kind.ENUM:default:throw new Vr(`Argument type, ${e.value.kind}, is not supported.`)}}function fce(e,t){return e.flatMap(r=>dce(r,t))}function US(e,t){return e.selections.flatMap(r=>{switch(r.kind){case qe.Kind.FIELD:return r;case qe.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Vr(`Fragment \`${n}\` not found.`);return US(s.selectionSet,t)}case qe.Kind.INLINE_FRAGMENT:return US(r.selectionSet,t)}})}function o$(e,t){return US(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:o$(r.selectionSet,t)}:r.name.value)}async function mce(e,t,r,n){let s=Bs.getMatch(e.name.value,"graphql");if(s===void 0)throw new Vr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:o$(e.selectionSet,r),conditions:fce(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(o,n))c.push(l);return[e.name.value,c]}function a$(e){switch(e.kind){case qe.Kind.NULL:return null;case qe.Kind.INT:return eC(e);case qe.Kind.FLOAT:return parseFloat(e.value);case qe.Kind.STRING:case qe.Kind.BOOLEAN:return e.value;case qe.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:a$(r.value),...t}),{});case qe.Kind.LIST:case qe.Kind.ENUM:default:throw new Vr(`Value type, ${e.kind}, is not supported.`)}}function pce(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=a$(n.defaultValue)),n.type.kind===qe.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Vr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function hce(e,t,r,n){if(e.operation===qe.OperationTypeNode.SUBSCRIPTION)throw new Vr("Subscriptions are not supported.");if(e.operation===qe.OperationTypeNode.MUTATION)throw new Vr("Mutations are not supported yet.");let s=pce(e.variableDefinitions,t),i=await Promise.all(US(e.selectionSet,r).map(c=>mce(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function e$({query:e,variables:t={},operationName:r},n){let s=qe.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(lce(u),u.kind===qe.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Vr("Unnamed operations are only allowed when there is a single operation in the document.");let d=u.name?.value??"Unnamed Query";if(i.has(d))throw new Vr(`Duplicate operation definition: ${d}`);i.set(d,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new Vr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Vr(`Operation \`${r}\` not found.`);let l=await hce(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Ece(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 Zq(r),e$(r,e)}case"POST":{let r=await $o(e.headers.get("content-type"),!0)(e._nodeRequest);return Zq(r),e$(r,e)}default:throw new fo("Method Not Allowed",405,{Allow:"GET, POST"})}}function _ce(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Ece(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof fo)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof qe.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Vr)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof fo)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof qe.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Vr)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var qe,Vr,fo,c$=se(()=>{qe=b(require("graphql"));Vo();sc();a(lce,"assertExecutableDefinitionNode");a(Zq,"assertRequestParams");a(eC,"processIntValueNode");a(t$,"processFloatValueNode");a(r$,"processVariableNode");a(n$,"isObject");a(s$,"transformObjectIntoQueryCondition");a(uce,"processObjectFieldNode");a(i$,"processObjectValueNode");a(dce,"processArgumentNode");a(fce,"buildConditionsQuery");a(US,"fillInFragments");a(o$,"buildSelectQuery");a(mce,"processFieldNode");a(a$,"processConstValueNode");a(pce,"resolveVariables");a(hce,"executeOperation");a(e$,"resolver");Vr=class extends Error{static{a(this,"GraphQLQueryingError")}},fo=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(Ece,"graphqlQueryingHandler");a(_ce,"start")});var p$=M((cxe,m$)=>{var Fd=require("validate.js"),u$=ft(),kd=(G(),D(j)),{handleHDBError:gce,hdbErrors:Sce}=Ee(),{HDB_ERROR_MSGS:cr,HTTP_STATUS_CODES:Tce}=Sce,rC=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),yce={STRUCTURE_USER:"structure_user"},l$=Object.values(kd.ROLE_TYPES_ENUM),Rce="attribute_permissions",bce="attribute_name",{PERMS_CRUD_ENUM:Hd}=kd,Ace=[Rce,...Object.values(Hd)],d$=[Hd.READ,Hd.INSERT,Hd.UPDATE],Ice=[bce,...d$];function wce(e){let t=rC();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,f$(e,t)}a(wce,"addRoleValidation");function Nce(e){let t=rC();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,f$(e,t)}a(Nce,"alterRoleValidation");function Cce(e){let t=rC();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,u$.validateObject(e,t)}a(Cce,"dropRoleValidation");var Oce=["operation","role","id","permission","hdb_user","access"];function f$(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Oce.includes(n[o])||s.push(n[o]);s.length>0&&Er(cr.INVALID_ROLE_JSON_KEYS(s),r);let i=u$.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Er(o,r)}),e.permission){let o=Pce(e);o&&Er(o,r),l$.forEach(c=>{e.permission[c]&&!Fd.isBoolean(e.permission[c])&&Er(cr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(l$.indexOf(o)<0){if(o===yce.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||Er(cr.SCHEMA_NOT_FOUND(f),r)}continue}Er(cr.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Er(cr.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[o][l]){Er(cr.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(d=>{Ace.includes(d)||Er(cr.INVALID_PERM_KEY(d),r,o,l)}),Object.values(Hd).forEach(d=>{Fd.isDefined(u[d])?Fd.isBoolean(u[d])||Er(cr.TABLE_PERM_NOT_BOOLEAN(d),r,o,l):Er(cr.TABLE_PERM_MISSING(d),r,o,l)}),u.attribute_permissions===void 0){Er(cr.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){Er(cr.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[o][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let p=u.attribute_permissions[m];if(Object.keys(p).forEach(E=>{!Ice.includes(E)&&E!==Hd.DELETE&&Er(cr.INVALID_ATTR_PERM_KEY(E),r,o,l)}),!Fd.isDefined(p.attribute_name)){Er(cr.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=p.attribute_name;if(!d.includes(h)){Er(cr.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}d$.forEach(E=>{Fd.isDefined(p[E])?Fd.isBoolean(p[E])||Er(cr.ATTR_PERM_NOT_BOOLEAN(E,h),r,o,l):Er(cr.ATTR_PERM_MISSING(E,h),r,o,l)}),!f.read&&p.read===!0&&(f.read=!0),!f.insert&&p.insert===!0&&(f.insert=!0),!f.update&&p.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${o}.${l}`;Er(cr.MISMATCHED_TABLE_ATTR_PERMS(m),r,o,l)}}}}return Lce(r)}a(f$,"customValidate");m$.exports={addRoleValidation:wce,alterRoleValidation:Nce,dropRoleValidation:Cce};function Pce(e){let{operation:t,permission:r}=e;if(t===kd.OPERATIONS_ENUM.ADD_ROLE||t===kd.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return cr.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?kd.ROLE_TYPES_ENUM.SUPER_USER:kd.ROLE_TYPES_ENUM.CLUSTER_USER;return cr.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(Pce,"validateNoSUPerms");function Lce(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:cr.ROLE_PERMS_ERROR,...e};return gce(new Error,n,Tce.BAD_REQUEST)}else return null}a(Lce,"generateRolePermResponse");function Er(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(Er,"addPermError")});var ah=M((dxe,g$)=>{"use strict";var h$=Vn(),E$=Sn(),Dce=Bl(),sC=p$(),iC=Xo(),uxe=require("uuid").v4,vce=require("util"),xS=(G(),D(j)),Mce=ae(),oC=E$.searchByValue,Uce=E$.searchByHash,xce=vce.promisify(Dce.delete),Bce=fi(),Fce=Ed(),{hdbErrors:kce,handleHDBError:Kl}=Ee(),{HDB_ERROR_MSGS:_$,HTTP_STATUS_CODES:oh}=kce,{UserEventMsg:aC}=us();g$.exports={addRole:Hce,alterRole:Gce,dropRole:qce,listRoles:$ce};function nC(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(nC,"scrubRoleDetails");async function Hce(e){let t=sC.addRoleValidation(e);if(t)throw t;e=nC(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await oC(r)||[])}catch(i){throw Kl(i)}if(n&&n.length>0)throw Kl(new Error,_$.ROLE_ALREADY_EXISTS(e.role),oh.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await h$.insert(s),iC.signalUserChange(new aC(process.pid)),e=nC(e),e}a(Hce,"addRole");async function Gce(e){let t=sC.alterRoleValidation(e);if(t)throw t;e=nC(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await h$.update(r)}catch(s){throw Kl(s)}if(n&&n?.message==="updated 0 of 1 records")throw Kl(new Error,"Invalid role id",oh.BAD_REQUEST,void 0,void 0,!0);return await iC.signalUserChange(new aC(process.pid)),e}a(Gce,"alterRole");async function qce(e){let t=sC.dropRoleValidation(e);if(t)throw Kl(new Error,t,oh.BAD_REQUEST,void 0,void 0,!0);let r=new Fce(xS.SYSTEM_SCHEMA_NAME,xS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Uce(r));if(n.length===0)throw Kl(new Error,_$.ROLE_NOT_FOUND,oh.NOT_FOUND,void 0,void 0,!0);let s=new Bce(xS.SYSTEM_SCHEMA_NAME,xS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await oC(s)),o=!1;if(Mce.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Kl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,oh.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await xce(c),iC.signalUserChange(new aC(process.pid)),`${n[0].role} successfully deleted`}a(qce,"dropRole");async function $ce(){return oC({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}a($ce,"listRoles")});var cC={};ye(cC,{start:()=>y$,startOnMainThread:()=>Yce});function y$({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,S$.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let o in i.permission){if(Vce.includes(o))continue;let c=i.permission[o];c.tables||(i.permission[o]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await Kce(i)}}}async function Kce(e){let t=lt().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,T$.isEqual)(i,e)?void 0:(e.id=r.id,(0,BS.alterRole)(e))}return(0,BS.addRole)(e)}var BS,S$,T$,Vce,Yce,R$=se(()=>{Oe();BS=b(ah()),S$=require("yaml"),T$=require("lodash"),Vce=["super_user","cluster_user","structure_user"];a(y$,"start");a(Kce,"ensureRole");Yce=y$});async function FS(e){let t=(0,I$.pathToFileURL)(e).toString();if(Wce)return ch||(ch=jce(Jce)),(await(await ch).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function jce(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ch=new Compartment({console,Math,Date,fetch:zce,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,A$.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Xt,s.tables=yn,s.databases=Me}};let n=await(0,b$.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),ch}function zce(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 Jce(){return{Resource:Xt,tables:yn}}var b$,A$,I$,Wce,ch,lC=se(()=>{Qi();Oe();b$=require("fs/promises"),A$=require("path"),I$=require("url"),Wce=!1;a(FS,"secureImport");a(jce,"getCompartment");a(zce,"secureOnlyFetch");a(Jce,"getGlobalVars")});var uC={};ye(uC,{ResourceLoadError:()=>kS,handleApplication:()=>Qce,suppressHandleApplicationWarning:()=>Xce});function N$(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Qce(e){e.handleEntry(a(async function(r){if(r.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${r.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(r.eventType!=="add"){e.requestRestart();return}try{let n=await FS(r.absolutePath),s=(0,w$.dirname)(r.urlPath).replace(/\\/g,"/").replace(/^\/$/,"");N$(n.default)&&(e.resources.set(s,n.default),e.logger.debug(`Registered root resource: ${s}`)),C$(e,n,s)}catch(n){throw new kS(r.absolutePath,n)}},"handleResourceEntry"))}function C$(e,t,r){for(let n in t){let s=t[n],i=`${r}/${n}`;N$(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&C$(e,s,i)}}var w$,kS,Xce,O$=se(()=>{lC();w$=require("path");a(N$,"isResource");kS=class extends Error{static{a(this,"ResourceLoadError")}filePath;cause;constructor(t,r){super(`Failed to load resource module ${t}${r?`: ${r.message}`:""}`),this.name="ResourceLoadError",this.filePath=t,this.cause=r}};a(Qce,"handleApplication");a(C$,"recurseForResources");Xce=!0});var fC={};ye(fC,{start:()=>Zce});function Zce({resources:e}){e.set("login",dC),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var dC,P$=se(()=>{Qi();a(Zce,"start");dC=class extends Xt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});function GS(e,t){let r={openapi:ele,info:{title:"HarperDB HTTP REST interface",version:x$.packageJson.version},servers:[{description:"REST API",url:t}],paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},n=[{basicAuth:[],bearerAuth:[]}],s=a(i=>{if(i.type&&!r.components.schemas[i.type]){r.components.schemas[i.type]={};let o={},c=[];for(let l of i.properties)HS[l.type]?o[l.name]=new pC(HS[l.type],l.type):l.properties?(o[l.name]=new F$(l.type),s(l)):l.elements?.properties&&(o[l.name]=new sle(l.elements.type),s(l.elements)),l.nullable===!1&&c.push(l.name);r.components.schemas[i.type]=new U$(o,!i.sealed,c)}},"includeDefinitionInSchema");for(let[,i]of e){if(!i.path||i.Resource.isError)continue;let{path:o}=i,c=o.split("/").pop(),{attributes:l,sealed:u}=i.Resource,{prototype:d,primaryKey:f="id"}=i.Resource;if(!l&&e.allTypes.has(i.path)){let k=e.allTypes.get(i.path);u=k.sealed,l=k.properties}if(!f)continue;let m={},p=[],h=[];if(l)for(let{type:k,name:z,elements:Y,relationship:ce,definition:de,nullable:te}of l){let Se=de??Y?.definition;Se&&s(Se),te===!1&&h.push(z),ce?k==="array"?m[z]={type:"array",items:{$ref:$s+Y.type}}:m[z]={$ref:$s+k}:Se?k==="array"?m[z]={type:"array",items:{$ref:$s+Se.type}}:m[z]={$ref:$s+Se.type}:k==="array"?Y.type==="Any"?m[z]={type:"array",items:{format:Y.type}}:m[z]={type:"array",items:new pC(HS[Y.type],Y.type)}:k==="Any"?m[z]={format:k}:m[z]=new pC(HS[k],k),p.push(new hC(z,"query",m[z]))}let E=Object.keys(m),_=new hC(f,"path",{type:"string",format:"ID"});_.required=!0,_.description="primary key of record";let R=new hC("property","path",{enum:E});R.required=!0,r.components.schemas[c]=new U$(m,!u,h);let S=d.post!==Resource.prototype.post||d.update,y=typeof d.put=="function",w=typeof d.get=="function",I=typeof d.delete=="function",H=typeof d.patch=="function",X=`/${o}/`;r.paths[X]||(r.paths[X]={}),S&&(r.paths[X].post=new tle(c,n,{200:new Gd({$ref:$s+c},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),r.paths[X].options=new L$(p,n,{200:new D$},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),w&&(r.paths[X].get=new mC(p,n,{200:new Gd({type:"array",items:{$ref:$s+c}})},"search for records by the specified property name and value pairs")),I&&(r.paths[X].delete=new M$(p,n,"delete all the records that match the provided query",{204:new v$}));let q="/"+o+"/{"+f+"}";if(r.paths[q]||(r.paths[q]={}),r.paths[q].options=new L$(p,n,{200:new D$},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),w&&(r.paths[q].get=new mC([_],n,{200:new Gd({$ref:$s+c})},"retrieve a record by its primary key")),y&&(r.paths[q].put=new rle([_],n,c,{200:new Gd({$ref:$s+c})},"create or update the record with the URL path that maps to the record's primary key")),H&&(r.paths[q].patch=new nle([_],n,c,{200:new Gd({$ref:$s+c})},"patch the record with the URL path that maps to the record's primary key")),I&&(r.paths[q].delete=new M$([_],n,"delete a record with the given primary key",{204:new v$})),w&&R.schema.enum.length>0){let k=`/${o}/{${f}}.{property}`;r.paths[k]||(r.paths[k]={}),r.paths[k].get=new mC([_,R],n,{200:new Gd({enum:E})},"used to retrieve the specified property of the specified record")}}for(let[,i]of e.allTypes)s(i),i.sealed&&r.components.schemas[i.type].additionalProperties&&(r.components.schemas[i.type].additionalProperties=!1);return r}function tle(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:$s+e}}}},this.security=t,this.responses=r}function mC(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function L$(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function D$(){this.description=B$,this.headers={},this.content={}}function Gd(e,t){this.description=B$,this.content={"application/json":{schema:e}},this.headers=t}function v$(){this.description="successfully processed request, no content returned to client"}function rle(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:$s+r}}}},this.responses=n}function nle(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:$s+r}}}},this.responses=n}function M$(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function U$(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function pC(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function F$(e){this.$ref=`#/components/schemas/${e}`}function sle(e){this.type="array",this.items=new F$(e)}function hC(e,t,r){this.name=e,this.in=t,this.schema=r}var x$,ele,HS,$s,B$,EC=se(()=>{x$=b(yt()),ele="3.0.3",HS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},$s="#/components/schemas/",B$="successful operation";a(GS,"generateJsonApi");a(tle,"Post");a(mC,"Get");a(L$,"Options");a(D$,"ResponseOptions200");a(Gd,"Response200");a(v$,"Response204");a(rle,"Put");a(nle,"Patch");a(M$,"Delete");a(U$,"ResourceSchema");a(pC,"Type");a(F$,"Ref");a(sle,"ArrayRef");a(hC,"Parameter")});var H$={};ye(H$,{Request:()=>Ec,createReuseportFd:()=>qS});var k$,Ec,_C,gC,qS,lh=se(()=>{k$=require("os"),Ec=class{static{a(this,"Request")}#e;#t;_nodeRequest;_nodeResponse;method;url;headers;isWebSocket;user;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new gC(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 _C(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get hostname(){return this._nodeRequest.headers.host}get httpVersion(){return this._nodeRequest.httpVersion}get isAborted(){return!1}get nodeRequest(){return this._nodeRequest}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},_C=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},gC=class{static{a(this,"Headers")}asObject;constructor(t){this.asObject=t}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return Object.prototype.hasOwnProperty.call(this.asObject,t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,k$.platform)()!="win32"&&(qS=require("node-unix-socket").createReuseportFd)});var VS={};ye(VS,{parseHeaderValue:()=>TC,start:()=>ale});async function ole(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&Og(e);let i=new Hs;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==G$){let _=$S.getMatch(o,n?"sse":"rest");if(!_)return t(e);e.handlerPath=_.path,c=new xs(_.relativeURL),c.async=!0,l=_.Resource}if(l?.isCaching){let _=r["cache-control"];if(_){let R=TC(_);for(let S of R)switch(S.name){case"max-age":e.expiresAt=S.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let _=TC(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.name));e.replicateTo=_.length===1&&+_[0]>=0?+_[0]:_[0]==="*"?void 0:_}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await bt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=$o(r["content-type"],!0)(e.body,e.headers)}catch(_){throw new qd.ClientError(_,400)}if(e.authorize=!0,o===G$&&s==="GET"){if(e?.user?.role?.permission?.super_user)return GS($S,`${e.protocol}://${e.hostname}`);throw new qd.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 qd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new qd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,SC.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let _=bq(f.headers,i);return f.headers!==_&&(f.headers=_),f.data!==void 0&&(f.body=Km(f.data,e,f)),f}else if(isFinite(p)){ile[0]=p;let _=String.fromCharCode(34,(sn[0]&63)+62,(sn[0]>>6)+(sn[1]<<2&63)+62,(sn[1]>>4)+(sn[2]<<4&63)+62,(sn[2]>>2)+62,(sn[3]&63)+62,(sn[3]>>6)+(sn[4]<<2&63)+62,(sn[4]>>4)+(sn[5]<<4&63)+62,(sn[5]>>2)+62,(sn[6]&63)+62,(sn[6]>>6)+(sn[7]<<2&63)+62,34),R=r["if-none-match"];R&&_==R?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",_),SC.lastModified&&i.setIfNone("Last-Modified",new Date(p).toUTCString())}e.createdResource&&(m=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let h={status:m,headers:i,body:void 0},E=e.loadedFromSource??f?.wasLoadedFromSource?.();return E!==void 0&&(h.wasCacheMiss=E,!E&&isFinite(p)&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||p))/1e3))),f!==void 0&&(h.body=Km(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(o){o.statusCode?o.statusCode===500?gi.warn(o):gi.info(o):gi.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.setIfNone("Allow",o.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:o.statusCode||500,headers:i,body:void 0};return c.body=Km(o.contentType?o:V$(o),e,c),c}}function ale(e){SC=e,e.includeExpensiveRecordCountEstimates&&(Ec.prototype.includeExpensiveRecordCountEstimates=!0),!q$&&(q$=!0,$S=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return ole(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{uh++;let s=new ss;$$||($$=!0,ap(l=>{uh>0&&l.push({metric:"ws-connections",connections:uh,byThread:!0})}));let i;t.on("error",l=>{i=!0,gi.warn(l)});let o;t.on("message",a(function(u){o||(o=$o(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=o(u);We(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{uh--,tn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=$S.getMatch(l,"ws");if(tn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,We(h=>({count:h.count,total:uh}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new xs(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await bt(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await qo(p.value,r);t.send(h),We(h.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(E=>t._socket.once("drain",E))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?gi.warn(l):gi.info(l):gi.error(l),t.close(cle[l.statusCode]||1011,V$(l))}t.close()},e))}function TC(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,o]=s.trim().split("=");i=i.trim(),o&&(o=o.trim()),r={name:i.toLowerCase(),value:o,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var gi,qd,V$,sn,ile,SC,G$,q$,$S,$$,uh,cle,K$=se(()=>{Vo();os();gi=b(Q()),qd=b(Ee());Pg();Vu();Qa();zp();EC();lh();Dg();({errorToString:V$}=gi),sn=new Uint8Array(8),ile=new Float64Array(sn.buffer,0,1),SC={},G$="openapi";a(ole,"http");uh=0;a(ale,"start");cle={401:3e3,403:3003};a(TC,"parseHeaderValue")});var yC=M((Bxe,W$)=>{var{recordAction:KS,recordActionBinary:Y$}=(os(),D(Tg)),lle=require("fastify-plugin"),ule=200;W$.exports=lle(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,d,f;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",f=l.method),KS(o,"duration",u,f,d),Y$(s.raw.statusCode<400,"success",u,f,d),Y$(1,"response_"+s.raw.statusCode,u,f,d);let m=ule;i?.pipe?(i.on("data",_=>{m+=_.length}),i.on("end",()=>{KS(performance.now()-c,"transfer",u,f,d),KS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,KS(m,"bytes-sent",u,f,d));let p=o.toFixed(3),h=s.getHeader("Server-Timing"),E=`db;dur=${p}`;s.header("Server-Timing",h?`${h}, ${E}`:E)}),r()},{name:"hdb-request-time"})});var z$=M((Fxe,j$)=>{var dle=ft(),fle={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};j$.exports=function(e){return dle.validateObject(e,fle)}});var YS=M((kxe,J$)=>{"use strict";var mle=(G(),D(j)).OPERATIONS_ENUM,RC=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=mle.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};J$.exports=RC});var mh={};ye(mh,{createTokens:()=>AC,getJWTRSAKeys:()=>QS,refreshOperationToken:()=>IC,validateOperationToken:()=>wC,validateRefreshToken:()=>XS});async function QS(){if(WS)return WS;try{let e=dh.default.join(fh.default.getHdbBasePath(),eA),t=await jS.default.readFile(dh.default.join(e,ym.JWT_PASSPHRASE_NAME),"utf8"),r=await jS.default.readFile(dh.default.join(e,ym.JWT_PRIVATE_KEY_NAME),"utf8");return WS={publicKey:await jS.default.readFile(dh.default.join(e,ym.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},WS}catch(e){throw JS.default.error(e),new Si.ClientError(Vd.NO_ENCRYPTION_KEYS,$d.INTERNAL_SERVER_ERROR)}}async function AC(e){let t=(0,bC.validateBySchema)(e,mo.default.object({username:mo.default.string().optional(),password:mo.default.string().optional(),role:mo.default.string().optional(),expires_in:mo.default.alternatives(mo.default.string(),mo.default.number()).optional()}));if(t)throw new Si.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 bd(e.username,e.password,f)}catch(f){throw JS.default.error(f),new Si.ClientError(Vd.INVALID_CREDENTIALS,$d.UNAUTHORIZED)}if(!r)throw new Si.ClientError(Vd.INVALID_CREDENTIALS,$d.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let o=await QS(),c=await Kd.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??tV,algorithm:zS,subject:Yd.OPERATION}),l=await Kd.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:ple,algorithm:zS,subject:Yd.REFRESH}),u=iN(l,$r.SHA256);if((await(0,Q$.update)(new X$.default(Sm,Fu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new Si.ClientError(Vd.REFRESH_TOKEN_SAVE_FAILED,$d.INTERNAL_SERVER_ERROR);return Z$.default.signalUserChange(new eV.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function IC(e){let t=(0,bC.validateBySchema)(e,mo.default.object({refresh_token:mo.default.string().required()}).required());if(t)throw new Si.ClientError(t.message);let{refresh_token:r}=e;await XS(r);let n=await QS(),s=await Kd.default.decode(r);return{operation_token:await Kd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:tV,algorithm:zS,subject:Yd.OPERATION})}}async function wC(e){return rV(e,Yd.OPERATION)}async function XS(e){return rV(e,Yd.REFRESH)}async function rV(e,t){try{let r=await QS(),n=await Kd.default.verify(e,r.publicKey,{algorithms:zS,subject:t});if(n.role)throw new Error("Invalid token");let s=await bd(n.username,void 0,!1);if(t===Yd.REFRESH&&!oN(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw JS.default.warn(r),r?.name==="TokenExpiredError"?new Si.ClientError(Vd.TOKEN_EXPIRED,$d.FORBIDDEN):new Si.ClientError(Vd.INVALID_TOKEN,$d.UNAUTHORIZED)}}var Kd,jS,dh,mo,bC,Si,JS,Q$,X$,Z$,eV,fh,$d,Vd,tV,ple,zS,Yd,WS,Wd=se(()=>{Kd=b(require("jsonwebtoken")),jS=b(require("fs-extra")),dh=b(require("node:path")),mo=b(require("joi")),bC=b(ft());G();Si=b(Ee()),JS=b(Q());cN();hs();Q$=b(Vn()),X$=b(YS()),Z$=b(Xo()),eV=b(us()),fh=b(fe()),{HTTP_STATUS_CODES:$d,AUTHENTICATION_ERROR_MSGS:Vd}=Si.hdbErrors;fh.default.initSync();tV=fh.default.get(x.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",ple=fh.default.get(x.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",zS="RS256",Yd={OPERATION:"operation",REFRESH:"refresh"};a(QS,"getJWTRSAKeys");a(AC,"createTokens");a(IC,"refreshOperationToken");a(wC,"validateOperationToken");a(XS,"validateRefreshToken");a(rV,"validateToken")});var NC=M((Kxe,iV)=>{"use strict";var hle=z$(),jd=require("passport"),Ele=require("passport-local").Strategy,_le=require("passport-http").BasicStrategy,gle=require("util"),Sle=(hs(),D(co)),sV=gle.callbackify(Sle.findAndValidateUser),Vxe=Jr(),Tle=(G(),D(j)),nV=(Wd(),D(mh)),{AccessViolation:yle}=Ee();jd.use(new Ele(function(e,t,r){sV(e,t,r)}));jd.use(new _le(function(e,t,r){sV(e,t,r)}));jd.serializeUser(function(e,t){t(null,e)});jd.deserializeUser(function(e,t){t(null,e)});function Rle(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r(new yle)}switch(a(i,"handleResponse"),n){case"Basic":jd.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Tle.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?nV.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):nV.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:jd.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Rle,"authorize");function ble(e,t){let r=hle(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(ble,"checkPermissions");iV.exports={authorize:Rle,checkPermissions:ble}});var vC=M((zxe,lV)=>{var rT=require("clone"),nT=ft(),Ale=ae(),eT=(G(),D(j)),Wxe=Q(),CC=require("fs"),PC=require("joi"),{string:tT}=PC.types(),{hdbErrors:Ile,handleHDBError:ZS}=Ee(),{HDB_ERROR_MSGS:jxe,HTTP_STATUS_CODES:OC}=Ile,{commonValidators:zd}=Zi(),oV=" is required",wle=["insert","update","upsert"],LC={database:{presence:!1,format:zd.schema_format,length:zd.schema_length},schema:{presence:!1,format:zd.schema_format,length:zd.schema_length},table:{presence:!0,format:zd.schema_format,length:zd.schema_length},action:{inclusion:{within:wle,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Nle={schema:tT.required(),table:tT.required(),action:tT.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Cle,AWS_SECRET:Ole,AWS_BUCKET:Ple,AWS_FILE_KEY:Lle,REGION:Dle}=eT.S3_BUCKET_AUTH_KEYS,vle={s3:{presence:!0},[`s3.${Cle}`]:{presence:!0,type:"String"},[`s3.${Ole}`]:{presence:!0,type:"String"},[`s3.${Ple}`]:{presence:!0,type:"String"},[`s3.${Lle}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Dle}`]:{presence:!0,type:"String"}},aV=rT(LC);aV.data.presence={message:oV};var cV=rT(LC);cV.file_path.presence={message:oV};var Mle=Object.assign(rT(LC),vle),DC=rT(Nle);DC.csv_url=tT.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();DC.passthrough_headers=PC.object();function Ule(e){let t=nT.validateObject(e,aV);return sT(e,t)}a(Ule,"dataObject");function xle(e){let t=nT.validateBySchema(e,PC.object(DC));return sT(e,t)}a(xle,"urlObject");function Ble(e){let t=nT.validateObject(e,cV);return sT(e,t)}a(Ble,"fileObject");function Fle(e){let t=nT.validateObject(e,Mle);return sT(e,t)}a(Fle,"s3FileObject");function sT(e,t){if(!t){let r=Ale.checkGlobalSchemaTable(e.schema,e.table);if(r)return ZS(new Error,r,OC.BAD_REQUEST);if(e.operation===eT.OPERATIONS_ENUM.CSV_FILE_LOAD)try{CC.accessSync(e.file_path,CC.constants.R_OK|CC.constants.F_OK)}catch(n){return n.code===eT.NODE_ERROR_CODES.ENOENT?ZS(n,`No such file or directory ${n.path}`,OC.BAD_REQUEST):n.code===eT.NODE_ERROR_CODES.EACCES?ZS(n,`Permission denied ${n.path}`,OC.BAD_REQUEST):ZS(n)}}return t}a(sT,"postValidateChecks");lV.exports={dataObject:Ule,urlObject:xle,fileObject:Ble,s3FileObject:Fle}});var MC=M((Qxe,uV)=>{"use strict";var ph=Q(),iT=(G(),D(j));async function kle(e,t,r,n=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let s;try{return s=await e(t),r&&await r(t,s,n),t.operation===iT.OPERATIONS_ENUM.INSERT||t.operation===iT.OPERATIONS_ENUM.UPDATE||t.operation===iT.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===iT.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(ph.info(i.message),i):i.http_resp_msg?(ph.error(`Error calling operation: ${e.name}`),ph.error(i.http_resp_msg),i):(ph.error(`Error calling operation: ${e.name}`),ph.error(i),i)}}a(kle,"callOperationFunctionAsAwait");uV.exports={callOperationFunctionAsAwait:kle}});var UC=M((Zxe,fV)=>{"use strict";var{S3:Hle,GetObjectCommand:Gle}=require("@aws-sdk/client-s3");fV.exports={getFileStreamFromS3:qle,getS3AuthObj:dV};async function qle(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await dV(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Gle(r))).Body}a(qle,"getFileStreamFromS3");function dV(e,t,r){return new Hle({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(dV,"getS3AuthObj")});var pV=M((t0e,mV)=>{"use strict";var xC=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},BC=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};mV.exports={BulkLoadFileObject:xC,BulkLoadDataObject:BC}});var EV=M((n0e,hV)=>{"use strict";var FC=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};hV.exports=FC});var gV=M((i0e,_V)=>{"use strict";var kC=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};_V.exports=kC});var GC=M((a0e,TV)=>{"use strict";var SV=EV(),$le=gV(),{HDB_ERROR_MSGS:Vle}=Jr(),HC=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Vle.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new SV(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new $le(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new SV(r,n,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};TV.exports=HC});var Yl=M((u0e,AV)=>{"use strict";var l0e=Sn(),hh=Q(),{validateBySchema:yV}=ft(),sa=require("joi"),Kle=io(),oT=ae(),{handleHDBError:aT,hdbErrors:Yle,ClientError:RV}=Ee(),{HDB_ERROR_MSGS:cT,HTTP_STATUS_CODES:qC}=Yle,bV=fe();bV.initSync();var{getDatabases:$C}=(Oe(),D(mt)),Wle=require("fs-extra"),jle=(G(),D(j));AV.exports={describeAll:zle,describeTable:lT,describeSchema:Jle};async function zle(e={}){try{let t=oT.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=$C(),o={},c={},l=[],u=e?.exact_count,d=e?.include_computed;for(let m in i){o[m]=!0,!t&&!s&&!r&&(c[m]=e.hdb_user?.role?.permission[m]?.describe);let p=i[m];for(let h in p)try{let E;if(t||s||r)E=await lT({schema:m,table:h,exact_count:u,include_computed:d});else if(n&&n[m].describe&&n[m].tables[h].describe){let _=n[m].tables[h].attribute_permissions;E=await lT({schema:m,table:h,exact_count:u,include_computed:d},_)}E&&l.push(E)}catch(E){hh.error(E)}}let f={};for(let m in l)t||s||r?(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],o[l[m].schema]&&delete o[l[m].schema]):c[l[m].schema]&&(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],o[l[m].schema]&&delete o[l[m].schema]);for(let m in o)t||s||r?f[m]={}:c[m]&&(f[m]={});return f}catch(t){return hh.error("Got an error in describeAll"),hh.error(t),aT(new Error,cT.DESCRIBE_ALL_ERR)}}a(zle,"describeAll");async function lT(e,t){oT.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(s=e.hdb_user?.role?.permission[r]?.tables[n]?.attribute_permissions);let i=yV(e,sa.object({database:sa.string(),table:sa.string().required(),exact_count:sa.boolean().strict(),include_computed:sa.boolean().strict()}));if(i)throw new RV(i.message);let c=$C()[r];if(!c)throw aT(new Error,cT.SCHEMA_NOT_FOUND(e.schema),qC.NOT_FOUND);let l=c[n];if(!l)throw aT(new Error,cT.TABLE_NOT_FOUND(e.schema,e.table),qC.NOT_FOUND);function u(p){(!p.computed||e.include_computed)&&d.push({attribute:p.attribute,type:p.type,elements:p.elements?.type,indexed:p.indexed,is_primary_key:p.isPrimaryKey,assigned_created_time:p.assignCreatedTime,assigned_updated_time:p.assignUpdatedTime,nullable:p.nullable,computed:p.computed?!0:void 0,properties:p.properties?p.properties.map(h=>({type:h.type,name:h.name})):void 0})}a(u,"pushAtt");let d=[];if(s){let p={};s.forEach(h=>{h.describe&&(p[h.attribute_name]=!0)}),l.attributes.forEach(h=>{p[h.name]&&u(h)})}else l.attributes?.forEach(p=>u(p));let f;try{f=(await Wle.stat(l.primaryStore.env.path)).size}catch(p){hh.warn("unable to get database size",p)}let m={schema:r,name:l.tableName,hash_attribute:l.attributes.find(p=>p.isPrimaryKey||p.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:f};l.replicate!==void 0&&(m.replicate=l.replicate),l.expirationMS!==void 0&&(m.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(m.sealed=l.sealed),l.sources?.length>0&&(m.sources=l.sources.map(p=>p.name).filter(p=>p&&p!=="NATSReplicator"&&p!=="Replicator")),bV.get(jle.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Kle.createNatsTableStreamName(m.schema,m.name));try{let p=await l.getRecordCount({exactCount:!!e.exact_count});m.record_count=p.recordCount,m.table_size=l.getSize(),m.db_audit_size=l.getAuditSize(),m.estimated_record_range=p.estimatedRange;let h=l.auditStore;if(h)for(let E of h.getKeys({reverse:!0,limit:1}))m.last_updated_record=E[0];if(!m.last_updated_record&&l.indices.__updatedtime__)for(let E of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))m.last_updated_record=E}catch(p){hh.warn(`unable to stat table dbi due to ${p}`)}return m}a(lT,"descTable");async function Jle(e){oT.transformReq(e);let t=yV(e,sa.object({database:sa.string(),exact_count:sa.boolean().strict(),include_computed:sa.boolean().strict()}));if(t)throw new RV(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=$C()[n];if(!i)throw aT(new Error,cT.SCHEMA_NOT_FOUND(e.schema),qC.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),oT.isEmpty(l)||l.describe){let u=await lT({schema:e.schema,table:c,exact_count:e.exact_count,include_computed:e.include_computed},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(Jle,"describeSchema")});var OV=M((f0e,CV)=>{"use strict";var Qle=Yl(),{hdbErrors:IV}=Ee(),{getDatabases:wV}=(Oe(),D(mt));CV.exports={checkSchemaExists:NV,checkSchemaTableExists:Xle,schemaDescribe:Qle};async function NV(e){if(!wV()[e])return IV.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(NV,"checkSchemaExists");async function Xle(e,t){let r=await NV(e);if(r)return r;if(!wV()[e][t])return IV.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Xle,"checkSchemaTableExists")});var uT=M((p0e,PV)=>{"use strict";var Zle=ms();PV.exports={writeTransaction:eue};function eue(e,t,r){return Zle.writeTransaction(e,t,r)}a(eue,"writeTransaction")});var jC=M((S0e,qV)=>{"use strict";var{decode:tue}=require("msgpackr"),{isMainThread:E0e,parentPort:_0e,threadId:g0e}=require("worker_threads"),mT=_r(),Jd=Dt(),YC=(G(),D(j)),Rn=Q(),KC=fe(),rue=(G(),D(j)),{onMessageByType:nue}=st(),MV=io(),{recordAction:LV,recordActionBinary:sue}=(os(),D(Tg)),{publishToStream:iue}=mT,{ConsumerEvents:DV}=require("nats"),oue=Sn(),{promisify:aue}=require("util"),{decodeBlobsWithWrites:cue}=(is(),D(ig)),UV=aue(setTimeout),pT=1e4,hT,fT,lue,uue,xV,Eh=new Map,Qd=new Map;qV.exports={initialize:BV,ingestConsumer:WC,setSubscription:due,setIgnoreOrigin:pue,getDatabaseSubscriptions:mue,updateConsumer:FV};async function BV(){nue(YC.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await FV(n)}),xV=!0,Rn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await mT.getNATSReferences();hT=e,fT=e.info.server_name,lue=t,uue=r}a(BV,"initialize");async function FV(e){if(e.status==="start"){let{js:t,jsm:r}=await kV(e.node_domain_name);WC(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Eh.get(e.stream_name+e.node_domain_name);t&&(Rn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Eh.set(e.stream_name+e.node_domain_name,"close")),Qd.get(e.node_domain_name)==="failed"&&Qd.set(e.node_domain_name,"close")}}a(FV,"updateConsumer");var ET=new Map;function due(e,t,r){let n=ET.get(e);n||ET.set(e,n=new Map),n.set(t,r),xV||BV().then(fue)}a(due,"setSubscription");async function fue(){let e=await oue.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+Jd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await kV(r),!n))break;let{schema:o,table:c}=i,l=MV.createNatsTableStreamName(o,c);WC(l,n,s,r)}}}a(fue,"accessConsumers");async function kV(e){let t,r,n=1;for(;!r;)try{t=await hT.jetstream({domain:e}),r=await hT.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Qd.get(e)==="close")break;Qd.set(e,"failed"),n%10===1&&Rn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<pT?n++*100:pT;await UV(i)}return{js:t,jsm:r}}a(kV,"connectToRemoteJS");function mue(){return ET}a(mue,"getDatabaseSubscriptions");var HV;function pue(e){HV=e}a(pue,"setIgnoreOrigin");var GV=100,vV=new Array(GV),dT=0;async function WC(e,t,r,n){let{connection:s}=await mT.getNATSReferences();hT=s,fT=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,fT),Rn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Qd.get(n)==="close")break;o%10===1&&Rn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(Rn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await mT.createConsumer(r,e,fT,new Date(Date.now()).toISOString()));let d=o++*100<pT?o++*100:pT;await UV(d)}let c=!1,l;for(;!c;){if(Eh.get(e+n)==="close"||Qd.get(n)==="close"){Eh.delete(e+n),c=!0;continue}l=await i.consume({max_messages:KC.get(YC.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Eh.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===DV.ConsumerDeleted&&(await l.close(),c=!0),d.type===DV.HeartbeatsMissed){let f=d.data;Rn.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(Rn.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let d of l)await vV[dT],vV[dT]=hue(d).catch(f=>{Rn.error(f)}),++dT>=GV&&(dT=0)}catch(d){d.message==="consumer deleted"?(Rn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):Rn.error("Error consuming clustering ingest, restarting consumer",d)}}}a(WC,"ingestConsumer");async function hue(e){let t;await cue(()=>{t=tue(e.data)}),LV(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Rn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=KC.get(YC.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Jd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Jd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Jd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!HV),sue(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Jd.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:p}=t;Rn.trace("processing message:",o,c,u,(d?"records: "+d.map(I=>I?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),Rn.trace(`messageProcessor nats msg id: ${e.headers.get(Jd.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(I=>h=I),{timestamp:_,user:R,node_name:S}=m||{},y=ET.get(c)?.get(u);if(!y)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=h,y.send(t);else if(d.length===1&&!l)y.send({type:VC(o),value:d[0],id:f?.[0],expiresAt:p,timestamp:_,table:u,onCommit:h,user:R,nodeName:S});else{let I=d.map((H,X)=>({type:VC(o),value:H,expiresAt:p,id:f?.[X],table:u}));for(;l;)I.push({type:VC(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;y.send({type:"transaction",writes:I,table:u,timestamp:_,onCommit:h,user:R,nodeName:S})}KC.get(rue.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&iue(e.subject.split(".").slice(0,-1).join("."),MV.createNatsTableStreamName(c,u),e.headers,e.data),await E;let w=Date.now()-_;_&&LV(w,"replication-latency",e.subject,o,"ingest")}catch(o){Rn.error(o)}e.ack()}a(hue,"messageProcessor");function VC(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(VC,"convertOperation")});var _r=M((w0e,i1)=>{"use strict";var Kr=fe();Kr.initSync();var Eue=require("fs-extra"),_ue=require("semver"),Sh=require("path"),{monotonicFactory:gue}=require("ulidx"),VV=gue(),Sue=require("util"),KV=require("child_process"),Tue=Sue.promisify(KV.exec),yue=KV.spawn,on=Dt(),rt=(G(),D(j)),{packageJson:Rue,PACKAGE_ROOT:bue}=yt(),_T=ae(),Ti=Q(),gT=io(),Aue=uT(),_h=_t(),{broadcast:Iue,onMessageByType:wue,getWorkerIndex:Nue}=st(),{isMainThread:YV}=require("worker_threads"),{Encoder:Cue,decode:XC}=require("msgpackr"),WV=new Cue,{isEmpty:Jl}=_T,jV=(hs(),D(co)),y0e=48*36e11;YV&&wue(rt.ITC_EVENT_TYPES.RESTART,()=>{bn=void 0,zl=void 0});var{connect:Oue,StorageType:Pue,RetentionPolicy:Lue,AckPolicy:ZC,DeliverPolicy:eO,DiscardPolicy:Due,NatsConnection:R0e,JetStreamManager:b0e,JetStreamClient:A0e,StringCodec:I0e,JSONCodec:vue,createInbox:tO,headers:Mue,ErrorCode:$V}=require("nats"),{recordAction:Uue}=(os(),D(Tg)),{encodeBlobsAsBuffers:xue}=(is(),D(ig)),zV=vue(),Bue="clustering",Fue=Rue.engines[on.NATS_SERVER_NAME],kue=Sh.join(bue,"dependencies"),QC=Sh.join(kue,`${process.platform}-${process.arch}`,on.NATS_BINARY_NAME),zC,JC,gh,Wl,jl;i1.exports={runCommand:JV,checkNATSServerInstalled:Hue,createConnection:rO,getConnection:Th,getJetStreamManager:yh,getJetStream:XV,getNATSReferences:po,getServerList:que,createLocalStream:nO,listStreams:ZV,deleteLocalStream:$ue,getServerConfig:Xd,listRemoteStreams:Vue,viewStream:Kue,viewStreamIterator:Yue,publishToStream:Wue,request:Jue,reloadNATS:sO,reloadNATSHub:Que,reloadNATSLeaf:Xue,extractServerName:zue,requestErrorHandler:Zue,createLocalTableStream:n1,createTableStreams:rde,purgeTableStream:s1,purgeSchemaTableStreams:nde,getStreamInfo:sde,updateLocalStreams:ode,closeConnection:Gue,getJsmServerName:ST,addNatsMsgHeader:e1,clearClientCache:QV,updateRemoteConsumer:ede,createConsumer:t1,updateConsumerIterator:tde};async function JV(e,t=void 0){let{stdout:r,stderr:n}=await Tue(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
13
|
+
`},"serialize"),compressible:!1,q:.8});En.set("application/x-www-form-urlencoded",{deserialize(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):e,r={};for(let[n,s]of new URLSearchParams(t))if(r.hasOwnProperty(n)){let i=r[n];Array.isArray(i)?i.push(s):r.key=[i,s]}else r[n]=s;return r},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});e0={type:"application/json",serializeStream:Gm,serialize:qm,deserialize:b9,q:.5};En.set("*/*",e0);En.set("",e0);a(b9,"tryJSONParse");a(Vm,"registerContentHandlers");A9=(0,Xx.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Q_(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&o.serializeStream){if(l.mapError){let d=l.getColumns;l=l.mapError(f=>(f.toJSON=()=>({error:f.name,message:f.message,...f.partialObject}),f)),l.getColumns=d}u=o.serializeStream}else u=o.serialize;return u(l,{headers:{set:a((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});a(Q_,"findBestSerializer");Wx=UA.default.get(x.HTTP_COMPRESSIONTHRESHOLD);a(Km,"serialize");a($o,"serializeMessage");a(kA,"asyncSerialization");a(HA,"hasAsyncSerialization");a(I9,"streamToBuffer");w9=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(N9,"isBufferEncoding");a(C9,"parseContentType");a(Vo,"getDeserializer");a(O9,"deserializerUnknownType");a(P9,"transformIterable");a(J_,"toCsvStream")});var ig={};ye(ig,{Blob:()=>vs,blobsWereEncoded:()=>ul,cleanupOrphans:()=>V9,databasePaths:()=>qA,decodeBlobsWithWrites:()=>sg,decodeFromDatabase:()=>Wo,decodeWithBlobCallback:()=>zm,deleteBlob:()=>tg,deleteBlobsInObject:()=>Za,deleteRootBlobPathsForDB:()=>KA,encodeBlobsAsBuffers:()=>G9,encodeBlobsWithFilePath:()=>ng,findBlobsInObject:()=>ll,getFileId:()=>rg,getFilePathForBlob:()=>d0,getRootBlobPathsForDB:()=>zu,isSaving:()=>U9,saveBlob:()=>jm,setDeletionDelay:()=>M9,startPreCommitBlobsForRecord:()=>YA});function l0(){}function tg(e){let t=d0(e);t&&setTimeout(()=>{(0,je.unlink)(t,r=>{r&&Lt.default.debug?.("Error trying to remove blob file",r)})},u0)}function M9(e){u0=e}function jm(e,t=!1){let r=Gr.get(e);if(!r)r={storageIndex:0,fileId:null,store:Bn},Gr.set(e,r);else{if(r.fileId)return r;r.store=Bn}return r.deleteOnFailure=t,B9(r),r.source?GA(e,r.source,r):r.contentBuffer?x9(e,r):GA(e,Xa.Readable.from(e.stream()),r),r}function GA(e,t,r){let{filePath:n,fileId:s,store:i,compress:o,flush:c}=r;return r.saving=new Promise((l,u)=>{let d=s+":blob";if(!i.attemptLock(d,0))throw new Error(`Unable to get lock for blob file ${s}`);let f=(0,je.createWriteStream)(n,{autoClose:!1,flags:"w"}),m=!1;e.size!==void 0&&(f.write(h(e.size)),m=!0);let p;o?(m||f.write(D9),p=(0,eg.createDeflate)(),(0,Xa.pipeline)(t,p,f,E)):(m||f.write(L9),(0,Xa.pipeline)(t,f,E));function h(_){let R=BigInt(_),S=new Uint8Array(Nr),y=new DataView(S.buffer);return R|=BigInt(o?VA:c0)<<48n,y.setBigInt64(0,R),S}a(h,"createHeader");function E(_){let R=f.fd;if(_){if(i.unlock(d,0),R&&((0,je.close)(R),f.fd=null),r.deleteOnFailure)(0,je.unlink)(n,S=>{S&&Lt.default.debug?.("Error while deleting aborted blob file",S)});else try{if((0,je.statSync)(n).size===0){let S=Buffer.from(_.toString());(0,je.writeFile)(n,Buffer.concat([h(BigInt(S.length)+0xff000000000000n),S]),y=>{y&&Lt.default.debug?.("Error write error message to blob file",y)})}}catch(S){Lt.default.debug?.("Error checking blob file after abort",S)}u(_)}else{if(!m){m=!0;let S=p?p.bytesWritten:f.bytesWritten-Nr;e.size=S,(0,je.write)(R,h(S),0,Nr,0,E);return}i.unlock(d,0),c?(0,je.fdatasync)(R,S=>{S&&u(S),l(),(0,je.close)(R),f.fd=null}):(l(),(0,je.close)(R),f.fd=null)}}a(E,"finished")}),e}function rg(e){return Gr.get(e)?.fileId}function U9(e){return Gr.get(e)?.saving}function d0(e){let t=Gr.get(e);return t?.fileId&&ju(t)}function zu(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=qA.get(e);if(!t){if(!e.databaseName)return Lt.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,Wm.get)(x.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,ji.join)(n,e.databaseName)):t=[(0,ji.join)((0,Wm.getHdbBasePath)(),"blobs",e.databaseName)],qA.set(e,t)}return t}async function KA(e){let t=zu(e);t&&await Promise.all(t.map(r=>f0(r)))}async function f0(e){if((0,je.existsSync)(e)){for(let t of await(0,Fn.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await f0((0,ji.join)(e,t.name));else try{await(0,Fn.unlink)((0,ji.join)(e,t.name))}catch(r){Lt.default.warn?.("Error deleting file",r)}try{await(0,Fn.rmdir)(e)}catch(t){Lt.default.warn?.("Error deleting directory",t)}}}function ju({storageIndex:e,fileId:t,store:r}){let n=zu(r);return(0,ji.join)(n[e],t.slice(-9,-6)||"0",t.slice(-6,-3)||"0",t.length<=9?t.slice(-3):t.slice(0,-9)+t.slice(-3))}function x9(e,t){let r=t.contentBuffer,n=r.length;if(!(n<a0))return e.size=n,GA(e,Xa.Readable.from([r]),t)}function B9(e){let t=zu(e.store),r=F9(),n=t?.length>1?k9(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=ju(e),o=(0,ji.dirname)(i);(0,je.existsSync)(o)||(0,$A.ensureDirSync)(o),e.filePath=i}function F9(){let e=i0.get(Bn);if(!e){let t=0,r=zu(Bn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let o=0;if((0,je.existsSync)(n))for(let c of(0,je.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>o&&(o=l)}s+=o,n=(0,ji.join)(n,o.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(Bn.getUserSharedBuffer("blob-file-id",e.buffer)),i0.set(Bn,e)}return Number(Atomics.add(e,0,1n))}function k9(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(Z_);for(let i=0;i<s.length;i++)s[i]=i%e.length;e.frequencyTable=s}return(e.lastUpdated??0)+6e4<r&&(e.lastUpdated=r,H9(e)),e.frequencyTable[t%Z_]}async function H9(e){if(!Fn.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let o;try{o=await(0,Fn.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,$A.ensureDirSync)(s),o=await(0,Fn.statfs)(s)}let c=o.bavail*o.bsize;return Math.pow(c,.8)})),r=new Array(Z_),n=t.map(s=>1/s);for(let s=0;s<Z_;s++){let i=1/0,o=0;for(let c=0;c<n.length;c++)n[c]<i&&(o=c,i=n[c]);n[o]+=1/t[o],r[s]=o}e.frequencyTable=r}function ng(e,t,r){Ku=t,Bn=r,ul=!1;try{return e()}finally{Ku=void 0,Bn=void 0}}function G9(e){Xr=[];let t;try{t=e()}catch(n){throw Xr=void 0,n}let r=Xr.length<2?Xr[0]:Promise.all(Xr);return Xr=void 0,r?r.then(()=>e()):t}function sg(e,t,r){try{Xr=[],Yo=r,Bn=t,e()}catch(s){throw Yo=void 0,Xr=void 0,s}Yo=void 0;let n=Xr.length<2?Xr[0]:Promise.all(Xr);return Xr=void 0,n}function zm(e,t,r){Bn=r;try{return Yo=t,e()}finally{Yo=void 0}}function Wo(e,t){return Bn=t,e()}function Za(e){ll(e,t=>{tg(t)})}function ll(e,t){if(e instanceof vs)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&ll(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&ll(e[r],t)}}function YA(e,t){let r;for(let n in e){let s=e[n];if(s instanceof Wu&&s.saveBeforeCommit){Bn=t;let i=jm(s,!0).saving??Promise.resolve();r=r?Promise.all(r,i):i}}return r}function $9(){return class{static{a(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}async function V9(e,t){let r,n,s=0;for(let d in e){let f=e[d];if(r=f.primaryStore.rootStore,n=f.auditStore,n)break}let i=new Set,o=zu(r);if(o)for(let d of o)await c(d);return await l(),Lt.default.warn?.(`Cleaned Orphan Blobs from ${t??"database"}, deleted ${s} blobs)`),s;async function c(d){try{if(!(0,je.existsSync)(d))return;for(let f of await(0,Fn.readdir)(d,{withFileTypes:!0})){let m=(0,ji.join)(d,f.name);if(f.isDirectory())await c(m);else if(i.size%1e6===0&&Lt.default.info?.("Finding all blobs for orphan check, paths accumulated",i.size),i.add(m),i.size%2e3===0){let p=(0,o0.getHeapStatistics)();p.used_heap_size>p.heap_size_limit*(.8-i.size/16e6)&&await l()}}}catch(f){Lt.default.error?.("Error searching path for blobs",d,f)}}a(c,"searchPath");async function l(){let d=0,f=Math.floor(((0,Wm.get)(x.STORAGE_BLOBCLEANUPSPEED)??1e4)/1e3+1);for(let m in e){Lt.default.warn?.("Checking for references to potential orphaned blobs in table",m);let p=e[m];for(let h of p.primaryStore.getRange({versions:!0,snapshot:!1,lazy:!0}))try{h.metadataFlags&Zr&&h.value&&u(h.value),d++%f===0?await(0,Yu.setTimeout)(1):await(0,Yu.setImmediate)()}catch(E){Lt.default.error?.("Error searching table",m," for references to potential orphaned blobs failed",E)}}Lt.default.warn?.("Checking for references to potential orphaned blobs in the audit log");for(let{value:m}of n.getRange({start:1,snapshot:!1,lazy:!0}))try{let p=At(m),h=n.tableStores[p.tableId],E=h?.getEntry(p.recordId);(!E||E.version!==p.version||!E.value)&&u(p.getValue(h)),d++%f===0?await(0,Yu.setTimeout)(1):await(0,Yu.setImmediate)()}catch(p){Lt.default.error?.("Error searching audit log for references to potential orphaned blobs failed",p)}Lt.default.warn?.("Deleting",i.size,"orphaned blobs"),s+=i.size;for(let m of i)try{await(0,Fn.unlink)(m)}catch(p){Lt.default.warn?.("Error deleting file",p)}Lt.default.warn?.("Finished deleting",i.size,"orphaned blobs"),i.clear()}a(l,"removePathsThatAreNotReferenced");function u(d){ll(d,f=>{if(f instanceof Wu){let m=Gr.get(f);if(m.fileId!=null){let p=ju(m);i.has(p)&&i.delete(p)}}})}a(u,"checkObjectForReferences")}var Wi,Fn,je,eg,Xa,$A,Wm,ji,Lt,o0,Yu,a0,Nr,c0,VA,r0,L9,D9,n0,Gr,Yo,vs,Ku,Xr,Bn,ul,Ym,X_,v9,s0,Wu,u0,qA,i0,Z_,q9,is=se(()=>{Wi=require("msgpackr"),Fn=require("node:fs/promises"),je=require("node:fs"),eg=require("node:zlib"),Xa=require("node:stream"),$A=require("fs-extra"),Wm=b(fe());G();ji=require("path"),Lt=b(ir());Ko();Ki();o0=require("node:v8"),Yu=require("node:timers/promises"),a0=8192,Nr=8,c0=0,VA=1,r0=255,L9=new Uint8Array([0,c0,255,255,255,255,255,255]),D9=new Uint8Array([0,VA,255,255,255,255,255,255]),n0=0xffffffffffff,Gr=new WeakMap,vs=global.Blob||$9(),ul=!1,Ym=new Uint8Array(8),X_=new DataView(Ym.buffer),v9=6e4;a(l0,"InstanceOfBlobWithNoConstructor");l0.prototype=vs.prototype;s0=!1,Wu=class e extends l0{static{a(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size),t?.saveBeforeCommit!=null&&(this.saveBeforeCommit=t.saveBeforeCommit)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=Gr.get(this),{start:r,end:n,contentBuffer:s,asString:i}=t;return i||(s&&(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),s?(t.asString=s.toString(),t.asString):(HA()&&kA(this.bytes().then(o=>t.contentBuffer=o)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=Gr.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=ju(t),o,c=a(async()=>{let l,u=Nr;try{if(l=await(0,Fn.readFile)(i),l.length>=Nr){l.copy(Ym,0,0,Nr);let f=X_.getBigUint64(0);if(Number(f>>48n)===r0)throw new Error("Error in blob: "+l.subarray(Nr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<n0&&(this.size=u,this.#t))for(let m of this.#t)m(u)}}catch(f){if(f.code!=="ENOENT")throw f;l=Buffer.alloc(0)}function d(f){if(u>f.length){let m=t.store,p=t.fileId+":blob";if(o)throw new Error(`Incomplete blob for ${i}`);return new Promise((h,E)=>{if(m.attemptLock(p,0,()=>(o=!0,h(c()))))return o=!0,m.unlock(p,0),h(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return a(d,"checkCompletion"),l[1]===VA?new Promise((f,m)=>{(0,eg.deflate)(l.subarray(Nr),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(Nr))},"readContents");return c()}async arrayBuffer(){let t=await this.bytes(),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),r}stream(){let t=Gr.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(E){E.enqueue(r),E.close()}});let i=ju(t),o,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,_=a((R,S)=>{(0,je.open)(i,"r",(y,w)=>{if(y){if(y.code==="ENOENT"&&f!==!1&&(Lt.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),_(R,S)},20).unref();S(y),p.#e?.forEach(I=>I(y))}else o=w,R(w)})},"openFile");return new Promise(_)},pull:a(E=>{let _=0,R=100;return new Promise(a(function S(y,w){function I(X){(0,je.close)(o),clearTimeout(d),u&&u.close(),w(X),p.#e?.forEach(q=>q(X))}a(I,"onError");let H=Buffer.allocUnsafe(262144);(0,je.read)(o,H,0,H.length,c,(X,q,k)=>{if(l+=q,X)return I(X);if(c===0){if(q<Nr){R-- >0&&f!==!1?(h(),Lt.default.debug?.("File was empty, waiting for data to be written",i,R),setTimeout(()=>S(y,w),20).unref()):(Lt.default.debug?.("File was empty, throwing error",i,R),I(new Error(`Blob ${t.fileId} was empty`)));return}k.copy(Ym,0,0,Nr);let z=X_.getBigUint64(0);if(Number(z>>48n)===r0)return I(new Error("Error in blob: "+k.subarray(Nr,q)));if(_=Number(z&0xffffffffffffn),_<n0&&p.size!==_&&(p.size=_,p.#t))for(let Y of p.#t)Y(_);k=k.subarray(Nr,q),l-=Nr}else if(q===0){let z=Buffer.allocUnsafe(8);return(0,je.read)(o,z,0,Nr,0,Y=>{if(Y)return I(Y);if(Ym.set(z),_=Number(X_.getBigUint64(0)&0xffffffffffffn),_>l){h()?u?d=setTimeout(()=>{I(new Error(`File read timed out reading from ${i}`))},v9).unref():(u=(0,je.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(y,w))}),S(y,w)):m?I(new Error("Blob is incomplete")):(m=!0,S(y,w));return}(0,je.close)(o),E.close(),y()})}else k=k.subarray(0,q);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=q,S(y,w);s&&l>=s&&(l>s&&(k=k.subarray(0,s-c)),l=_=s),n&&n>c&&(k=k.subarray(n-c))}c+=q;try{E.enqueue(k)}catch(z){return Lt.default.debug?.("Error enqueuing chunk",z),y()}l===_&&((0,je.close)(o),E.close()),y()})},"readMore"))},"pull"),cancel(){(0,je.close)(o),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,_=t.fileId+":blob";f=!E.attemptLock(_,0,()=>{f=!1}),f||E.unlock(_,0)}return f}}slice(t,r,n){let s=Gr.get(this),i=new e(n&&{type:n});if(s?.fileId){let o={...s,start:t,end:r};Gr.set(i,o),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let o={...s,contentBuffer:s.contentBuffer.subarray(t,r)};Gr.set(i,o),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(){return s0||(s0=!0,Lt.default.warn?.("save() method on Blob is deprecated, use the 'saveBeforeCommit' flag on the Blob constructor instead")),this.saveBeforeCommit=!0,Promise.resolve()}get written(){return Gr.get(this)?.saving??Promise.resolve()}},u0=500;a(tg,"deleteBlob");a(M9,"setDeletionDelay");global.createBlob=function(e,t){let r=new Wu(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(Gr.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Xa.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Xa.Readable.from(e);else throw new Error("Invalid source type");return r};a(jm,"saveBlob");a(GA,"writeBlobWithStream");a(rg,"getFileId");a(U9,"isSaving");a(d0,"getFilePathForBlob");qA=new Map;a(zu,"getRootBlobPathsForDB");a(KA,"deleteRootBlobPathsForDB");a(f0,"rimrafSteadily");a(ju,"getFilePath");a(x9,"writeBlobWithBuffer");a(B9,"generateFilePath");i0=new Map;a(F9,"getNextFileId");Z_=128;a(k9,"getNextStorageIndex");a(H9,"createFrequencyTableForStoragePaths");a(ng,"encodeBlobsWithFilePath");a(G9,"encodeBlobsAsBuffers");a(sg,"decodeBlobsWithWrites");a(zm,"decodeWithBlobCallback");a(Wo,"decodeFromDatabase");a(Za,"deleteBlobsInObject");a(ll,"findBlobsInObject");a(YA,"startPreCommitBlobsForRecord");q9=new Wi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Wi.addExtension)({Class:vs,type:11,unpack:a(function(e){let t=q9.unpack(e),r=new Wu;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(Gr.set(r,{storageIndex:t[1],fileId:t[2],store:Bn}),Yo)return Yo(r)??r;if(!Bn)throw new Error("No store specified, cannot load blob from storage")}else Gr.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:a(function(e){let t=Gr.get(e);if(Ku!==void 0&&(ul=!0,t?.recordId!==void 0&&t.recordId!==Ku))throw new Error("Cannot use the same blob in two different records");let r={...e};if(e.type&&(r.type=e.type),e.size!==void 0&&(r.size=e.size),t){if(t.storageBuffer)return t.storageBuffer;if(t.contentBuffer?.length<a0)return r.size=t.contentBuffer.length,(0,Wi.pack)([r,t.contentBuffer])}if(Ku!==void 0){if(t=jm(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Ku,(0,Wi.pack)([r,t.storageIndex,t.fileId])}if(t){if(Yo)return Yo(e),(0,Wi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,je.readFileSync)(ju(t));if(n.length>=Nr&&(n.copy(Ym,0,0,Nr),Number(X_.getBigUint64(0)&0xffffffffffffn)===n.length-Nr))return Buffer.concat([(0,Wi.pack)([r]),n]);if(Xr)Xr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Xr)return Xr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Wi.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});a($9,"polyfillBlob");a(V9,"cleanupOrphans")});var _0={};ye(_0,{onStorageReclamation:()=>Jm,runReclamationHandlers:()=>JA,setAvailableSpaceRatioGetter:()=>Y9});function Jm(e,t,r){(r||(0,ag.getWorkerIndex)()===(0,ag.getWorkerCount)()-1)&&(og.has(e)||og.set(e,[]),og.get(e).push({priority:0,handler:t}),zA||(zA=setTimeout(JA,p0).unref()))}async function JA(){for(let[e,t]of og)try{let r=await E0(e),n=K9/r;for(let s of t){let{priority:i,handler:o}=s;if(s.priority=n,n>1||i>1){let c=o(n>1?n:0);c&&(jA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){jA.default.error?.("Error running storage reclamation handlers",r)}zA=setTimeout(JA,p0).unref()}function Y9(e){E0=e??h0}var WA,ag,jA,cg,m0,og,K9,p0,zA,h0,E0,lg=se(()=>{WA=require("node:fs/promises"),ag=b(st()),jA=b(ir());G();cg=b(fe()),m0=b(ae());cg.default.initSync();og=new Map,K9=cg.default.get(x.STORAGE_RECLAMATION_THRESHOLD)??.4,p0=(0,m0.convertToMS)(cg.default.get(x.STORAGE_RECLAMATION_INTERVAL))||36e5;a(Jm,"onStorageReclamation");h0=a(async e=>{if(WA.statfs){let t=await(0,WA.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"),E0=h0;a(JA,"runReclamationHandlers");a(Y9,"setAvailableSpaceRatioGetter")});var P0={};ye(P0,{ACTION_32_BIT:()=>pg,ACTION_64_BIT:()=>J9,AUDIT_STORE_OPTIONS:()=>Zm,Decoder:()=>fl,HAS_BLOBS:()=>Zr,HAS_CURRENT_RESIDENCY_ID:()=>ml,HAS_EXPIRATION_EXTENDED_TYPE:()=>rp,HAS_ORIGINATING_OPERATION:()=>tp,HAS_PREVIOUS_RESIDENCY_ID:()=>pl,REMOTE_SEQUENCE_UPDATE:()=>hg,createAuditEntry:()=>hl,getLastRemoved:()=>j9,openAuditStore:()=>fg,readAuditEntry:()=>At,removeAuditEntry:()=>mg,setAuditRetention:()=>z9,transactionKeyEncoder:()=>w0});function fg(e){let t=e.auditStore=e.openDB(QA.AUDIT_STORE_NAME,{create:!1,...Zm});t||(t=e.auditStore=e.openDB(QA.AUDIT_STORE_NAME,Zm),S0(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,o=ZA;Jm(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(o=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,p;try{for(let{key:h,value:E}of t.getRange({start:1,snapshot:!1,end:Date.now()-XA/(1+i*i)})){try{m=mg(t,h,E)}catch(_){Ju.warn("Error removing audit entry",_)}if(p=h,await new Promise(setImmediate),++f>=W9){o=10;break}}await m}finally{f===0?o=Math.min(o<<1,XA/10):(S0(t,p),o>100&&(o=o>>1)),d(void 0),c()}},o).unref()});return u}if(a(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,Xm.getWorkerIndex)()===(0,Xm.getWorkerCount)()-1&&c(),(0,Xm.getWorkerIndex)()===0&&!g0)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(g0=!0,Ju.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function mg(e,t,r){let n=Q9(r),s;if(n&Zr){s=At(r);let i=e.tableStores[s.tableId];if(i){let o=s.type==="message"?null:i?.getEntry(s.recordId);(!o||o.version!==s.version||!o.value)&&Wo(()=>Za(s.getValue(i)),i.rootStore)}}if((n&15)===eI){s=s||At(r);let i=s.tableId;e.tableStores[s.tableId]?.getEntry(s.recordId)?.version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function S0(e,t){tI[0]=t,e.put(Symbol.for("last-removed"),N0)}function j9(e){let t=e.get(Symbol.for("last-removed"));if(t)return N0.set(t),tI[0]}function z9(e,t=ZA){XA=e,ZA=t}function hl(e,t,r,n,s,i,o,c,l,u,d,f,m){let p=C0[o];if(!p)throw new Error(`Invalid audit entry type ${o}`);let h=1;if(n&&(n>1?ec.setFloat64(0,n):Ms.set(rI),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}R(s),R(t),_(r),ec.setFloat64(h,e),h+=8,l&ml&&R(u),l&pl&&R(d),l&rp&&(ec.setFloat64(h,f),h+=8),l&tp&&R(O0[m]),i?_(i):Ms[h++]=0,l?ec.setUint32(n?8:0,p|l|3221225472):Ms[n?8:0]=p;let E=Ms.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function _(S){let y=h;h+=1,h=(0,dl.writeKey)(S,Ms,h);let w=h-y-1;w>127?w>16383?(Ju.error("Key or username was too large for audit entry",S),h=y+1,Ms[y]=0):(Ms.copyWithin(y+2,y+1,h),ec.setUint16(y,w|32768),h++):Ms[y]=w}function R(S){S<128?Ms[h++]=S:S<16384?(ec.setUint16(h,S|32768),h+=2):S<1056964608?(ec.setUint32(h,S|3221225472),h+=4):(Ms[h]=255,ec.setUint32(h+1,S),h+=5)}}function Q9(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new fl(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function At(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new fl(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),o=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,p,h,E;if(i&ml&&(m=n.readInt()),i&pl&&(p=n.readInt()),i&rp&&(h=n.readFloat64()),i&tp){let y=n.readInt();E=O0[y]}l=n.readInt();let _=n.position,R=n.position+=l,S;return{type:C0[i&7],tableId:c,nodeId:o,get recordId(){return(0,dl.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return R>_?(0,dl.readKey)(e,_,R):void 0},get encoded(){return t?e.subarray(t,r):e},get size(){return t!==void 0&&r!==void 0?r-t:e.byteLength},getValue(y,w,I){if(i&ug||i&Qm&&!w)return S||(S=Wo(()=>y.decoder.decode(e.subarray(n.position,r)),y.rootStore)),S;if(i&Qm&&I)return OA(y.getEntry(this.recordId),I,y)},getBinaryValue(){return i&(ug|Qm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return Ju.error("Reading audit entry error",n,e),{}}}var dl,dg,QA,Xm,I0,Ju,Ms,ec,w0,Zm,XA,W9,tI,N0,ZA,g0,ug,Qm,T0,eI,y0,R0,b0,A0,pg,J9,hg,ml,pl,tp,rp,Zr,C0,O0,fl,Ki=se(()=>{dl=require("ordered-binary"),dg=b(fe()),QA=b(Jt());G();Xm=b(st()),I0=b(ae());El();Ju=b(Q());z_();is();lg();(0,dg.initSync)();Ms=Buffer.alloc(2816),ec=new DataView(Ms.buffer,Ms.byteOffset,2816),w0={writeKey(e,t,r){return e===ep?(t.set(ep,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,dl.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,dl.readKey)(e,t,r)}},Zm={encoding:"binary",keyEncoder:w0},XA=(0,I0.convertToMS)((0,dg.get)(x.LOGGING_AUDITRETENTION))||86400*3,W9=1e3,tI=new Float64Array(1),N0=new Uint8Array(tI.buffer),ZA=1e4,g0=!1;a(fg,"openAuditStore");a(mg,"removeAuditEntry");a(S0,"updateLastRemoved");a(j9,"getLastRemoved");a(z9,"setAuditRetention");ug=16,Qm=32,T0=1,eI=2,y0=3,R0=4,b0=5,A0=6,pg=14,J9=15,hg=11,ml=512,pl=1024,tp=2048,rp=4096,Zr=8192,C0={put:T0|ug,[T0]:"put",delete:eI,[eI]:"delete",message:y0|ug,[y0]:"message",invalidate:R0|Qm,[R0]:"invalidate",patch:b0|Qm,[b0]:"patch",relocate:A0,[A0]:"relocate"},O0={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(hl,"createAuditEntry");a(Q9,"readAction");a(At,"readAuditEntry");fl=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function Eg(){return nI||(nI=ze({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),nI}function Z9(e){return e=e.replace(X9,t=>{let[r,n,s,i]=t.split(".").map(o=>parseInt(o));return(r<<8|n).toString(16)+":"+(s<<8|i).toString(16)}),e=e.replace("::",":".repeat(10-e.split(":").length)),e.toLowerCase().split(":").map(t=>t.padStart(4,"0")).join(":")}function e7(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 iI(e){let t=L0.default.createHash("shake128",{outputLength:4}),r;return(0,D0.isIPv6)(e)?r=Z9(e):r=e.toLowerCase(),e7(Uint8Array.from(t.update(r).digest()))}var L0,D0,sI,nI,X9,oI=se(()=>{Oe();L0=b(require("crypto")),D0=require("node:net"),sI=new Map;a(Eg,"getAnalyticsHostnameTable");X9=/(\d{1,3}\.){3}\d{1,3}$/;a(Z9,"normalizeIPv6");a(e7,"nodeHashToNumber");a(iI,"stableNodeId")});var jo,aI=se(()=>{jo={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 F0={};ye(F0,{captureProfile:()=>lI,userCodeFolders:()=>_g});async function lI(e){let r=B0/1e6,n=new Map,s=new Map,i=new Map,o=0,c=0;try{let u=cI.time.stop(!0),d=u.stringTable.strings;for(let f of u.function)s.set(f.id,d[f.filename]);for(let f of u.location)n.set(f.id,f.line[0]);for(let f of u.sample)l(f);We(c*r,"cpu-usage","harper"),We(o*r,"cpu-usage","user");for(let[f,m]of i)if(m>100){let p=n.get(f),h=s.get(p.functionId)+":"+p.line;We(m*r,"cpu-usage",h)}}catch(u){x0.error?.("analytics profiler error:",u)}finally{e&&setTimeout(()=>{let u=((0,np.get)(x.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;lI(u)},e).unref()}function l(u){let d=!1;for(let f of u.locationId){let m=s.get(n.get(f).functionId);if(_g.some(p=>m.startsWith(p))){let p=u.value[0];o+=p,d||i.set(f,(i.get(f)??0)+p);return}if(m.startsWith(M0.PACKAGE_ROOT)){let p=u.value[0];c+=p,d||(i.set(f,(i.get(f)??0)+p),d=!0)}}}a(l,"getUserHitCount")}var np,M0,U0,cI,x0,v0,_g,B0,k0=se(()=>{os();np=b(fe());G();M0=b(yt()),U0=require("node:fs"),cI=require("@datadog/pprof"),x0=b(Q()),v0=(0,np.getHdbBasePath)(),_g=v0?[v0]:[];process.env.RUN_HDB_APP&&_g.push((0,U0.realpathSync)(process.env.RUN_HDB_APP));B0=5e4;(async()=>{if(_g.length===0)return;cI.time.start({intervalMicros:B0});let e=((0,np.get)(x.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;setTimeout(()=>{lI(e)},e).unref()})();a(lI,"captureProfile")});var Tg={};ye(Tg,{addAnalyticsListener:()=>ap,analyticsDelay:()=>mI,calculateCPUUtilization:()=>nB,diffResourceUsage:()=>sB,onAnalyticsAggregate:()=>EI,recordAction:()=>We,recordActionBinary:()=>tn,recordHostname:()=>pI,setAnalyticsEnabled:()=>n7});function n7(e){X0=e,clearTimeout(ip),ip=null}function s7(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 i7(e,t,r,n,s,i){let o={};if(typeof t=="number")o.total=t,o.values=new Float32Array(4),o.values.index=1,o.values[0]=t,o.total=t;else if(typeof t=="boolean")o.total=t?1:0,o.count=1;else if(typeof t=="function")o.count=1,o.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);o.description={metric:r,path:n,method:s,type:i},Sg.set(e,o)}function We(e,t,r,n,s){if(!X0)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Sg.get(i);o?s7(e,o):i7(i,e,t,r,n,s),ip||o7()}function tn(e,t,r,n,s){We(!!e,t,r,n,s)}function ap(e){eB.push(e)}function o7(){uI||=performance.now(),ip=setTimeout(async()=>{ip=null;let e=performance.now()-uI;uI=0;let t=[],r={time:Date.now(),period:e,threadId:_l.threadId,metrics:t};for(let[s,i]of Sg){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],d;for(let f of rB){let m=Math.floor(c*f),p=o[m-1];if(m>l){let h=m-l;if(p===d){let E=u[u.length-1];typeof E=="number"?u[u.length-1]={value:E,count:1+h}:E.count+=h}else u.push(h>1?{value:p,count:h}:p),d=p;l=m}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await iB()}let n=process.memoryUsage();t.push({metric:"memory",threadId:_l.threadId,byThread:!0,...n});for(let s of eB)s(t);Sg=new Map,_l.parentPort?_l.parentPort.postMessage({type:Z0,report:r}):cB({report:r})},mI).unref()}async function pI(){let e=Ue.hostname;en.trace?.("recordHostname server.hostname:",e);let t=iI(e);en.trace?.("recordHostname nodeId:",t);let r=Eg();if(!await r.get(t)){let s={id:t,hostname:e};en.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function Qu(e,t){let r=Ue.hostname,n=sI.get(r);n?en.trace?.("storeMetric cached nodeId:",n):(n=iI(r),en.trace?.("storeMetric new nodeId:",n),sI.set(r,n));let s={id:[(0,fI.getNextMonotonicTime)(),n],...t};en.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function nB(e,t){let r=e.userCPUTime+e.systemCPUTime;return en.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function sB(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 a7(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={metric:jo.TABLE_SIZE,database:t,table:s,size:c};en.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),Qu(e,l),n+=c}return n}function H0(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=Q0.statSync(s.primaryStore.env.path).size,c=a7(e,r,n),l=o-c,u={metric:jo.DATABASE_SIZE,database:r,size:o,used:c,free:l,audit:i};Qu(e,u),en.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){en.warn?.("Error getting DB size metrics",s)}}function G0(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let o={metric:jo.STORAGE_VOLUME,database:r,...i};Qu(e,o),en.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){en.warn?.("Error getting DB volume metrics",s)}}async function c7(e,t=6e4){let r=hI(),n=oB(),s=new Promise(y=>{let w=performance.now();setImmediate(()=>{let I=performance.now();I-w>5e3&&en.warn?.("Unusually high event queue latency on the main thread of "+Math.round(I-w)+"ms"),w=performance.now()}),n.primaryStore.prefetch([1],()=>{let I=performance.now();I-w>5e3&&en.warn?.("Unusually high task queue latency on the main thread of "+Math.round(I-w)+"ms"),y(I-w)})}),i;for(let y of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(y.value?.time){i=y.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],d;for(let{key:y,value:w}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!w)continue;if(o){if(y>o+t)break}else o=y;d=y;let{metrics:I,threadId:H}=w;for(let X of I||[]){let{path:q,method:k,type:z,metric:Y,count:ce,total:de,distribution:te,threads:Se,...Ne}=X;ce||(ce=1);let Ke=Y+(q?"-"+q:"");k!==void 0&&(Ke+="-"+k),z!==void 0&&(Ke+="-"+z);let $e=c.get(Ke);if($e){if($e.threads){let nr=$e.threads[H];if(nr)$e=nr;else{$e.threads[H]={...Ne};continue}}$e.count||($e.count=1);let Ir=$e.count;for(let nr in Ne){let zr=Ne[nr];typeof zr=="number"&&($e[nr]=($e[nr]*Ir+zr*ce)/(Ir+ce))}$e.count+=ce,de>=0&&($e.total+=de,$e.ratio=$e.total/$e.count)}else $e={period:t,...X},delete $e.distribution,c.set(Ke,$e),$e.byThread&&($e.threads=[],$e.threads[H]={...Ne},u.push($e));if(te){te=te.map(nr=>typeof nr=="number"?{value:nr,count:1}:nr);let Ir=l.get(Ke);Ir?Ir.push(...te):l.set(Ke,te)}}await iB()}for(let y of u){let{path:w,method:I,type:H,metric:X,count:q,total:k,distribution:z,threads:Y,...ce}=y;Y=Y.filter(de=>de);for(let de in ce){if(typeof y[de]!="number")continue;let te=0;for(let Se of Y){let Ne=Se[de];typeof Ne=="number"&&(te+=Ne)}y[de]=te}y.count=Y.length,delete y.threads,delete y.byThread}for(let[y,w]of l){let I=c.get(y);w.sort((nr,zr)=>nr.value>zr.value?1:-1);let H=I.count-1,X=[],q=0,k=0,z;for(let nr of rB){let zr=H*nr;for(;q<zr;)z=w[k++],q+=z.count,k===1&&q--;let xr=w[k>1?k-2:0];z||(z=w[0]),X.push(z.value-(z.value-xr.value)*(q-zr)/z.count)}let[Y,ce,de,te,Se,Ne,Ke,$e,Ir]=X;Object.assign(I,{p1:Y,p10:ce,p25:de,median:te,p75:Se,p90:Ne,p95:Ke,p99:$e,p999:Ir})}let f;for(let[,y]of c)y.time=d,Qu(n,y),f=!0;if(f)for(let y of tB)y(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let y={metric:jo.MAIN_THREAD_UTILIZATION,idle:p-q0,active:h-$0,taskQueueLatency:await s,time:m,...process.memoryUsage()};Qu(n,y)}q0=p,$0=h;let E=process.resourceUsage();E.time=m,E.userCPUTime=E.userCPUTime/1e3,E.systemCPUTime=E.systemCPUTime/1e3,en.trace?.(`process.resourceUsage: ${JSON.stringify(E)}`);let _=sB(gg,E);en.trace?.(`diffed resourceUsage: ${JSON.stringify(_)}`),_.time=m,_.period=gg.time?m-gg.time:t,_.cpuUtilization=nB(_,_.period);let R={metric:jo.RESOURCE_USAGE,..._};Qu(n,R),gg=E;let S=lt();H0(n,S),H0(n,{system:S.system}),G0(n,S),G0(n,{system:S.system})}async function V0(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function hI(){return K0||(K0=ze({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function oB(){return Y0||(Y0=ze({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function d7(){aB=!0;let e=(0,op.get)(x.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await c7(mI,e),await V0(hI(),l7),await V0(oB(),u7)},Math.min(e/2,2147483647)).unref()}function cB(e,t){let r=e.report;r.threadId=t?.threadId||_l.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(W0+=n.mean*n.count);r.totalBytesProcessed=W0,t&&(r.metrics.push({metric:jo.UTILIZATION,...t.performance.eventLoopUtilization(j0.get(t))}),j0.set(t,t.performance.eventLoopUtilization())),r.id=(0,fI.getNextMonotonicTime)(),hI().primaryStore.put(r.id,r),aB||d7(),f7&&(lB=p7(r))}async function p7(e){if(await lB,!tc){let r=(0,sp.dirname)(t7());try{tc=await(0,dI.open)((0,sp.join)(r,"analytics.log"),"r+")}catch{tc=await(0,dI.open)((0,sp.join)(r,"analytics.log"),"w+")}}let t=(await tc.stat()).size;if(t>m7){let r=Buffer.alloc(t);await tc.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await tc.write(r,{position:0}),await tc.truncate(r.length),t=r.length}await tc.write(JSON.stringify(e)+`
|
|
14
|
+
`,t)}function EI(e){e&&tB.push(e)}var _l,z0,J0,sp,dI,fI,op,Q0,t7,r7,en,Sg,X0,ip,uI,mI,Z0,eB,tB,rB,q0,$0,gg,iB,l7,u7,K0,Y0,aB,W0,j0,f7,lB,tc,m7,os=se(()=>{_l=require("worker_threads"),z0=b(st());Oe();J0=b(Q()),sp=require("path"),dI=require("fs/promises"),fI=b(xn()),op=b(fe());G();Hr();Q0=b(require("node:fs"));oI();aI();({getLogFilePath:t7,forComponent:r7}=J0.default);setTimeout(()=>{Promise.resolve().then(()=>k0())},1e3);en=r7("analytics").conditional;(0,op.initSync)();Sg=new Map,X0=(0,op.get)(x.ANALYTICS_AGGREGATEPERIOD)>-1;a(n7,"setAnalyticsEnabled");a(s7,"recordExistingAction");a(i7,"recordNewAction");a(We,"recordAction");Ue.recordAnalytics=We;a(tn,"recordActionBinary");uI=0,mI=1e3,Z0="analytics-report",eB=[],tB=[];a(ap,"addAnalyticsListener");rB=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(o7,"sendAnalytics");a(pI,"recordHostname");a(Qu,"storeMetric");a(nB,"calculateCPUUtilization");a(sB,"diffResourceUsage");a(a7,"storeTableSizeMetrics");a(H0,"storeDBSizeMetrics");a(G0,"storeVolumeMetrics");a(c7,"aggregation");q0=0,$0=0,gg={userCPUTime:0,systemCPUTime:0},iB=a(()=>new Promise(setImmediate),"rest");a(V0,"cleanup");l7=36e5,u7=31536e6;a(hI,"getRawAnalyticsTable");a(oB,"getAnalyticsTable");(0,z0.setChildListenerByType)(Z0,cB);a(d7,"startScheduledTasks");W0=0,j0=new Map,f7=!1;a(cB,"recordAnalytics");m7=1e6;a(p7,"logAnalytics");a(EI,"onAnalyticsAggregate")});var pB={};ye(pB,{ENTRY:()=>E7,HAS_EXPIRATION:()=>Ag,HAS_RESIDENCY_ID:()=>yI,HAS_STRUCTURE_UPDATE:()=>Ig,LAST_TIMESTAMP_PLACEHOLDER:()=>ep,LOCAL_TIMESTAMP:()=>h7,METADATA:()=>Zu,NEW_TIMESTAMP_PLACEHOLDER:()=>dB,NO_TIMESTAMP:()=>Rg,PENDING_LOCAL_TIME:()=>RI,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>rI,RecordEncoder:()=>TI,TIMESTAMP_ASSIGN_LAST:()=>g7,TIMESTAMP_ASSIGN_NEW:()=>fB,TIMESTAMP_ASSIGN_PREVIOUS:()=>mB,TIMESTAMP_PLACEHOLDER:()=>yg,TIMESTAMP_RECORD_PREVIOUS:()=>_I,entryMap:()=>rc,handleLocalTimeForGets:()=>wg,lastMetadata:()=>ut,recordUpdater:()=>bI,removeEntry:()=>Tl});function y7(){return lp[0]=lp[0]^64,_7.getFloat64(0)}function wg(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(o,c){e.readCount++,ut=null;let l=r.call(this,o,c);return l&&(ut&&(l.metadataFlags=ut[Zu],l.localTime=ut.localTime,l.residencyId=ut.residencyId,l.size=ut.size,ut.expiresAt>=0&&(l.expiresAt=ut.expiresAt),ut=null),l.value&&rc.set(l.value,l),l.key=o),l};let n=e.get;e.get=function(o,c){ut=null;let l=n.call(this,o,c);return ut&&l&&(rc.set(l,ut),ut=null),l};let s=e.getRange;e.getRange=function(o){let c=s.call(this,o);return o.valuesForKey?c.map(l=>l?.value):o.values===!1||o.onlyCount?c:c.map(l=>(ut&&(l.metadataFlags=ut[Zu],l.localTime=ut.localTime,l.residencyId=ut.residencyId,ut.expiresAt>=0&&(l.expiresAt=ut.expiresAt),ut=null),l))};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let o=i.constructor,c=i.use,l=i.done;o.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Sl.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Sl.length;u++){let d=Sl[u].deref();(!d||d.isDone||d.isCommitted)&&Sl.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function bI(e,t,r){return function(n,s,i,o,c=-1,l,u,d="put",f,m){l==null?gl=Rg:f?gl=i?.localTime?_I|mB:Rg:gl=l?i?.localTime?_I|16384:fB|16384:Rg;let p=u?.expiresAt;if(p>=0&&(c|=Ag),cp=c,gI=p,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:gl>0},E,_=0;try{let R=i?.residencyId,S=u?.residencyId;S&&(SI=S,cp|=yI,_|=ml),R!==S&&(_|=pl,R||(R=0)),c&Ag&&(_|=rp),u?.originatingOperation&&(_|=tp),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&d!=="message"&&i.metadataFlags&Zr&&(!i.localTime||!r.getBinaryFast(i.localTime))&&Za(i.value);let y;if(s!==void 0&&(y=ng(()=>e.put(n,s,h),n,e.rootStore),ul&&(_|=Zr)),l){let w=u?.user?.username;if(m&&(ng(()=>e.encoder.encode(m),n,e.rootStore),ul&&(_|=Zr)),e.encoder.hasStructureUpdate&&(_|=Ig,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let I=i?.localTime,H=r.get(I);if(H){let X=At(H).previousLocalTime;return y=r.put(I,hl(o,t,n,X,u?.nodeId??server.replication.getThisNodeId(r)??0,w,d,Xu,_,S,R,p),{ifVersion:E}),y}}y=r.put(s===void 0?dB:ep,hl(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,w,d,Xu,_,S,R,p,u?.originatingOperation),{instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&S7.has(d)&&We(Xu?.length??1,"db-write",u.tableToTrack,null),y}catch(R){throw R.message+=" id: "+n+" options: "+h,R}}}function Tl(e,t,r){if(t)return t.value&&t.metadataFlags&Zr&&!e.auditStore?.getBinaryFast(t.localTime)&&Za(t.value),e.remove(t.key,r)}var uB,bg,yg,ep,rI,dB,h7,Zu,E7,lp,_7,Rg,fB,g7,mB,_I,Ag,yI,RI,Ig,S7,rc,T7,Xu,gl,cp,gI,SI,ut,TI,Sl,El=se(()=>{uB=require("msgpackr");Ki();bg=b(Q());is();is();os();yg=new Uint8Array([1,1,1,1,4,64,0,0]),ep=new Uint8Array([1,1,1,1,1,0,0,0]),rI=new Uint8Array([1,1,1,1,3,64,0,0]),dB=new Uint8Array([1,1,1,1,0,64,0,0]),h7=Symbol("local-timestamp"),Zu=Symbol("metadata"),E7=Symbol("entry"),lp=new Uint8Array(8),_7=new DataView(lp.buffer,0,8),Rg=0,fB=0,g7=1,mB=3,_I=4,Ag=16,yI=32,RI=1,Ig=256,S7=new Set(["put","patch","delete","message","publish"]),rc=new WeakMap,gl=0,cp=-1,gI=-1,SI=0,ut=null,TI=class extends uB.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{a(this,"RecordObject")}getUpdatedTime(){return rc.get(this)?.version}getExpiresAt(){return rc.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,o){if(gl||cp>=0){let c=0,l=gl;l&&(c+=8,gl=0);let u=cp,d=gI,f=SI;u>=0&&(c+=4,cp=-1,d>=0&&(c+=8,gI=-1),f&&(c+=4,SI=0));let m=T7=n.call(this,i,o|2048|c);Xu=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(yg[4]=l,yg[5]=l>>8,m.set(yg,p),p+=8),ul&&(u|=Zr),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|pg<<24),p+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(p,d),p+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,f)),m}else return Xu=n.call(this,i,o),Xu};let s=this.saveStructures;this.saveStructures=function(i,o){let c=s.call(this,i,o);return this.hasStructureUpdate=!0,c}}decode(t,r){ut=null;let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(lp,0,c),c+=8;else for(let m=0;m<8;m++)lp[m]=t[c++];l=y7(),i=t[c]}let u,d;i<32&&(i===pg?(o=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(o=i|t[c+1]<<5,c+=2),o&Ag&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&yI&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Wo(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return ut={localTime:l,[Zu]:o,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:Wo(()=>super.decode(t,r),this.rootStore)}catch(c){return bg.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(y7,"getTimestamp");a(wg,"handleLocalTimeForGets");Sl=[];setInterval(()=>{for(let e=0;e<Sl.length;e++){let t=Sl[e].deref();!t||t.isDone||t.isCommitted?Sl.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(bg.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):bg.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();a(bI,"recordUpdater");a(Tl,"removeEntry")});function wI(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let f=u(l);for(let p=1;p<e.length;p++){let h=e[p],E=u(h);f=f.concat(E)}let m=new Set;return f.filter(p=>{let h=p.key??p;return m.has(h)?!1:(m.add(h),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?o(f,m):f}function u(f){return f.conditions?wI(f.conditions,f.operator,r,n,s,i,o,c):nd(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}a(u,"executeCondition");function d(f,m,p){return f.map((h,E)=>{if(h.conditions){let S=h.operator==="or",y=d(h.conditions,!S,p);return S?(w,I)=>y.some(H=>H(w,I)):(w,I)=>y.every(H=>H(w,I))}let _=(h.attribute||h[0])===r.primaryKey,R=dp(h,r,i,c,_,p);return m&&E<f.length-1&&p&&(p=P7(r.primaryStore,h.estimated_count,p)),R}).filter(Boolean)}a(d,"mapConditionsToFilters")}function nd(e,t,r,n,s,i,o){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new rn.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let y=c[0],w=Ji(n.attributes,y);if(w.relationship){if(c.length<2)throw new rn.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let I=w.definition?.tableClass||w.elements?.definition?.tableClass,H=new Map,X=nd({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,I,s,H);if(w.relationship.to){i[c[0]]=H;let q=!!Ji(I.attributes,w.relationship.to)?.elements;X=w7(X,w,I.primaryStore,q,H)}if(w.relationship.from){let q=a(k=>(k?.key!==void 0&&(k=k.key),nd({attribute:w.relationship.from,value:k},t,r,n,s,H)),"searchEntry");w.elements?(i[c[0]]=H,X=N7(X,w,I.primaryStore,H,q)):X=X.flatMap(q)}return X}else if(c.length===1)c=c[0];else throw new rn.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,p,h,E;l instanceof Date&&(l=l.getTime());let _;switch(NI[u]||u){case"lt":m=!0,p=l;break;case"le":m=!0,p=l,h=!0;break;case"gt":m=l,E=!0;break;case"ge":m=l;break;case"prefix":Array.isArray(l)?l[l.length-1]!=null&&(l=l.concat(null)):l=[l,null],m=l,p=l.slice(0),p[p.length-1]=zi.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),p=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),p=l[1],p instanceof Date&&(p=p.getTime()),h=u==="gele"||u==="gtle"||u==="between",E=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,p=l,h=!0;break;case"ne":if(l===null){m=l,E=!0;break}case"sort":case"contains":case"ends_with":m=!0,_=!0;break;default:throw new rn.ClientError(`Unknown query comparator "${u}"`)}let R;if(typeof m=="string"&&m.length>Us.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,Us.MAX_SEARCH_KEY_LENGTH)+Us.OVERFLOW_MARKER,E=!1,R=dp(e,n,null,i,d)),typeof p=="string"&&p.length>Us.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,Us.MAX_SEARCH_KEY_LENGTH)+Us.OVERFLOW_MARKER,h=!0,R=R??dp(e,n,null,i,d)),r){let y=m;m=p,p=y,y=!E,E=!h,h=y}if(!f||f.isIndexing||_||l===null&&!f.indexNulls){if(s===!1&&!f)throw new rn.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&_)throw new rn.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${c}`,403);if(f?.isIndexing)throw new rn.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new rn.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(R=R??dp(e,n,null,i,d),!R)throw new rn.ClientError(`Unknown search operator ${e.comparator}`)}let S={start:m,end:p,inclusiveEnd:h,exclusiveStart:E,values:!0,versions:d,transaction:t,reverse:r};if(d){let y=f.getRange(S).map(R?function({key:w,value:I}){return this?.isSync?I&&R(I)?w:nc.SKIP:new Promise((H,X)=>setImmediate(()=>{try{H(I&&R(I)?w:nc.SKIP)}catch(q){X(q)}}))}:w=>w.value==null&&!(w.metadataFlags&(kn|yl))?nc.SKIP:(o?._freezeRecords&&Object.freeze(w.value),w));return y.hasEntries=!0,y}else return f?f.customIndex?f.customIndex.search(e,o).map(y=>{if(typeof y=="object"&&y){let{key:w,...I}=y,H=n.primaryStore.getEntry(w);return o?._freezeRecords&&Object.freeze(H?.value),{...I,...H}}return y}):f.getRange(S).map(R?function({key:y,value:w}){let I;return typeof y=="string"&&y.length>Us.MAX_SEARCH_KEY_LENGTH?I=n.primaryStore.get(w):I={[c]:y},this.isSync?R(I)?w:nc.SKIP:new Promise((H,X)=>setImmediate(()=>{try{H(R(I)?w:nc.SKIP)}catch(q){X(q)}}))}:({value:y})=>y):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:y,value:w}){return this.isSync?w&&R(w)?y:nc.SKIP:new Promise((I,H)=>setImmediate(()=>{try{I(w&&R(w)?y:nc.SKIP)}catch(X){H(X)}}))})}function Ji(e,t){if(Array.isArray(t))if(t.length>1){let r=Ji(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?Ji(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function w7(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=a((u,d)=>{let f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let o=i.next();return o.done?o:{value:o.value}},return(){if(i?.return)return i.return()}}}})}function N7(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(o=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function dp(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],f=Ji(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=dp({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},m,r,p?.[d]?.joined,c[1]===m.primaryKey,i);if(!h)return;if(p){p.filters||(p.filters=[]),p.filters.push(h);return}let E=t.propertyResolvers?.[d];E.to&&(h.to=E.to);let _,R=a((y,w)=>{let I,H;return E?E.returnDirect?(I=E(y,r,w),H=ut):(H=E(y,r,w,!0),Array.isArray(H)?(I=H.map(X=>X.value),H=null):I=H?.value):I=y[d],{subObject:I,subEntry:H}},"getSubObject"),S=a((y,w)=>{if(E&&h.idFilter){if(!_)if(h.idFilter.idSet?.size===1){for(let k of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:k};_=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else _=u(E.from??t.primaryKey,h.idFilter,!1,!0);let q=_(y);return _.idFilter&&(S.idFilter=_.idFilter),q}let{subObject:I,subEntry:H}=R(y,w);return I?Array.isArray(I)?(!n?.[d]&&n&&(n[d]={fromRecord(q){let k=R(q).subObject;return Array.isArray(k)?k.filter(h).map(z=>z[m.primaryKey]):k}}),I.some(h)):h(I,H):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),NI[o]||o){case Us.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let f=0,m=l.length;f<m;f++)if(d[f]!==l[f])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,zi.compareKeys)(d,l[0])>=0&&(0,zi.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,zi.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,zi.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,zi.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,zi.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,zi.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new rn.ClientError(`Unknown query comparator "${o}"`)}function u(d,f,m,p){let h;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&Cg(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,_=3;function R(S){let y=S[d],w;if(typeof y!="object"||!y||p?w=f(y):Array.isArray(y)?w=y.some(f):y instanceof Date&&(w=f(y.getTime())),m&&(_++,!w&&!R.idFilter&&++E/_*i>h)){let I=nd(e,r.transaction.getReadTxn(),!1,t),H;R.to?H=I.flatMap(q=>t.primaryStore.get(q)[R.to]):H=I.map(sd);let X=new Set(H);R.idFilter=q=>X.has(sd(q)),R.idFilter.idSet=X}return w}return a(R,"recordFilter"),s&&(R.idFilter=f),R}a(u,"attributeComparator")}function Cg(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/zo(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=NI[n]||n,n===Us.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=Ji(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=Cg(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*zo(e.indices[i.relationship.from])/(zo(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=zo(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=A7*zo(e.primaryStore)+1;else if(n==="between")r.estimated_count=b7*zo(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=zo(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=R7*zo(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function Og(e,t){if(e)if(Jo=e,ed.lastIndex=0,C7.test(e))try{if(t&&(t.conditions=[]),li=t??new rd,up(li,""),qr!==Jo.length&&Qt("Unable to parse query, unexpected end of query"),li.parseErrorMessage&&(li.parseError=new AI(t.parseErrorMessage),!t))throw li.parseError;return li}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${qr} in '${Jo}'`,li.parseErrorMessage&&(r.message+=", "+li.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Qt(e){let t=`${e} at position ${qr}`;li.parseErrorMessage=li.parseErrorMessage?li.parseErrorMessage+", "+t:t}function up(e,t){let r=ed,n,s,i,o,c,l=decodeURIComponent,u;for(;n=r.exec(Jo);){qr=r.lastIndex;let[,d,f]=n;o?(d&&Qt(`expected operator, but encountered '${d}'`),o=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Qt(`invalid FIQL operator ${d}`),l=hB):(l=decodeURIComponent,i="equals",d||Qt("attribute must be specified before equality comparator"),s=td(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=I7[f],l=II[i]?hB:decodeURIComponent,d||Qt(`attribute must be specified before comparator ${f}`),s=td(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Qt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Qt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Qt("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&EB(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else Ng(e,u),e.conditions.push(h)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?Qt("conditions/comparisons are not allowed in a property list"):e.push(td(d)),s=void 0;break;case"(":ed.lastIndex=qr;let p=up(d?[]:new rd,")");switch(d){case"":Ng(e,u),e.conditions.push(p);break;case"limit":switch(p.length){case 1:e.limit=+p[0];break;case 2:e.offset=+p[0],e.limit=p[1]-e.offset;break;default:Qt("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(p[0])&&p.length===1&&!p[0].name?(e.select=p[0],e.select.asArray=!0):p.length===1?e.select=p[0]:p.length===2&&p[1]===""?e.select=p.slice(0,1):e.select=p;break;case"group-by":Qt("group by is not implemented yet");case"sort":e.sort=_B(p);break;default:Qt(`unknown query function call ${d}`)}Jo[qr]===","?r.lastIndex=++qr:o=!0,s=null;break;case"{":e.conditions&&Qt("property sets are not allowed in a queries"),d||Qt("property sets must have a defined parent property name"),ed.lastIndex=qr,m=up([],"}"),m.name=d,e.push(m),Jo[qr]===","?r.lastIndex=++qr:o=!0;break;case"[":if(ed.lastIndex=qr,d?(m=up(new rd,"]"),m.name=d):m=up(e.conditions?new rd:[],"]"),e.conditions)if(Ng(e,u),Jo[qr]==="="){l=decodeURIComponent,i="equals",s=td(d),r.lastIndex=++qr;break}else e.conditions.push(m),s=null;else e.push(m);Jo[qr]===","?r.lastIndex=++qr:o=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let h={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&EB(h,d),Ng(e,u),e.conditions.push(h)}else d&&Qt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(td(d));return e}else Qt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Qt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?O7:ed,r.lastIndex=qr),qr===Jo.length)return e}t&&Qt(`expected '${t}', but encountered end of string`)}function Ng(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Qt("Can not mix operators within a condition grouping"):e.operator=t)}function td(e){return e.indexOf(".")>-1?e.split(".").map(td):decodeURIComponent(e)}function hB(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new rn.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function EB(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new rn.ClientError("wildcard can only be used at the end of a string")}function _B(e){let t=gB(e[0]);return e.length>1&&(t.next=_B(e.slice(1))),t}function gB(e){if(Array.isArray(e)){let t=gB(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}Qt(`Unknown sort type ${e}`)}function sd(e){return Array.isArray(e)?e.join("\0"):e}function zo(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function P7(e,t,r){return t*r/zo(e)}var rn,Us,zi,nc,R7,b7,A7,I7,II,NI,AI,C7,ed,O7,qr,li,Jo,rd,Pg=se(()=>{rn=b(Ee()),Us=b(Jt()),zi=require("ordered-binary"),nc=require("lmdb");Lg();El();R7=.3,b7=.1,A7=.05,I7={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},II={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(wI,"executeConditions");a(nd,"searchByIndex");a(Ji,"findAttribute");a(w7,"joinTo");a(N7,"joinFrom");NI={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(dp,"filterByType");a(Cg,"estimateCondition");AI=class extends rn.Violation{static{a(this,"SyntaxViolation")}},C7=/[()[\]|!<>.]|(=\w*=)/,ed=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,O7=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(Og,"parseQuery");a(Qt,"recordError");a(up,"parseBlock");a(Ng,"assignOperator");a(td,"decodeProperty");a(hB,"typedDecoding");a(EB,"wildcardDecoding");a(_B,"toSortObject");a(gB,"toSortEntry");rd=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};a(sd,"flattenKey");a(zo,"estimatedEntryCount");a(P7,"intersectionEstimate")});var SB,xs,Dg=se(()=>{SB=b(ai());Qi();xs=class extends URLSearchParams{static{a(this,"RequestTarget")}#e;pathname;search;id;isCollection;constructor(t){let r,n;if(t&&(r=t.indexOf("?"))>-1){n=t.slice(0,r);let s=t.slice(r+1);super(s),this.search=s}else super(),n=t;this.pathname=n??"",this.#e=t}toString(){return this.#e?this.#e:this.size>0?this.pathname+"?"+super.toString():this.pathname}get url(){return this.toString()}delete(t){super.delete(t),this.conditions&&(this.conditions=this.conditions.filter(r=>r.attribute!==t)),this.#e=void 0}set(t,r){this.delete(t),super.set(t,r),this.conditions?.push({attribute:t,value:r})}append(t,r){super.append(t,r),this.#e=void 0,this.conditions?.push({attribute:t,value:r})}};(0,SB._assignPackageExport)("Resource",Xt)});var IB={};ye(IB,{MultiPartId:()=>vg,Resource:()=>Xt,contextStorage:()=>od,snakeCase:()=>D7,transformForSelect:()=>ad});function D7(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function TB(e,t){if(Rl=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(Rl=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new vg;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){Rl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return Rl=!0,null;e[e.length-1]==="/"&&(Rl=!0)}return t.coerceId(decodeURIComponent(e))}function Hn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,u,d;if(r){if(o)d=i,o=o.getContext?.()||o;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,o=i.getContext?.()||i):i?.transaction instanceof Ho?o=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new id.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?o?(d=i,o=o.getContext?.()||o):o=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let E=c.indexOf("?");E>-1&&(l=this.parseQuery(c.slice(E+1),s),c=c.slice(0,E),c===""&&(u=!0));let _=this.parsePath(c,o,l);_?.id!==void 0?(_.query&&(l?l=Object.assign(_.query,l):l=_.query),u=_.isCollection,c=_.id):c=_,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new xs,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new xs,l.id=c,c==null&&(t.method==="get"&&AB.default.warn?.(`Using an argument with a value of ${c} for ${t.method}, is deprecated`,new Error("Invalid id")),u=!0);l||(l=new xs,l.id=c),u&&(l.isCollection=!0);let f;o||(o=od.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,p=h;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(p=a(E=>od.run(o,()=>h(E)),"runAction")),o?.transaction){let E=this.getResource(c,o,f);return E.then?E.then(p):p(E)}else return bt(o,()=>{o.transaction.startedFrom={resourceName:this.name,method:t.method};let E=this.getResource(c,o,f);return E.then?E.then(p):p(E)},f);function h(E){if(o.authorize&&(o.authorize=!1,m!==!1)){let _=t.type==="read"?E.allowRead(o.user,l,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,d,o):E.allowUpdate(o.user,d,o):t.type==="create"?E.allowCreate(o.user,d,o):E.allowDelete(o.user,l,o);if(_?.then)return _.then(R=>{if(!R)throw new id.AccessViolation(o.user);return typeof d?.then=="function"?d.then(S=>e(E,l,o,S)):e(E,l,o,d)});if(!_)throw new id.AccessViolation(o.user)}return typeof d?.then=="function"?d.then(_=>e(E,l,o,_)):e(E,l,o,d)}a(h,"authorizeActionOnResource")}}function as(e,t){let r=new id.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function CI(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function ad(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):CI(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(CI(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(CI(l,r,n)),f;for(let m of e){let p=d(m);p===void 0&&o&&(p=null),p?.then?(f||(f=[]),f.push(p.then(h=>u[m.name||m]=h))):u[m.name||m]=p}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=ad(c.select||c,d)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var yB,RB,id,bB,AB,od,L7,Xt,Rl,vg,Qi=se(()=>{yB=require("crypto");km();Vu();RB=b(ai()),id=b(Ee());Qa();Pg();bB=require("async_hooks");Dg();AB=b(ir()),od=new bB.AsyncLocalStorage,L7={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Xt=class{static{a(this,"Resource")}#e;#t;#n;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=Hn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=ad(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0,method:"get"});static put=Hn(function(t,r,n,s){if(Array.isArray(s)&&t.#n&&t.constructor.loadAsInstance!==!1){let i=[];for(let o of s){let c=t.constructor,l=o[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(o,n))):i.push(u.put(o,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):as(t,"put")},{hasContent:!0,type:"update",method:"put"});static patch=Hn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):as(t,"patch")},{hasContent:!0,type:"update",method:"patch"});static delete=Hn(function(t,r,n,s){return t.delete?t.delete(r):as(t,"delete")},{hasContent:!1,type:"delete",method:"delete"});static getNewId(){return(0,yB.randomUUID)()}static create(t,r,n){let s;return this.loadAsInstance===!1?typeof t=="object"&&t&&!n?(n=r,r=t,s=new xs,s.isCollection=!0):s=t:t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),n?n.getContext&&(n=n.getContext()):n=od.getStore()??{},bt(n,async()=>{n.transaction.startedFrom??={resourceName:this.name,method:"create"};let i=new this(s,n),o=await i.create?i.create(s,r):as(i,"create");return n.newLocation=s??o?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?o:i})}static invalidate=Hn(function(t,r,n,s){return t.invalidate?t.invalidate(r):as(t,"delete")},{hasContent:!1,type:"update",method:"invalidate"});static post=Hn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create",method:"post"});static update=Hn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update",method:"update"});static connect=Hn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):as(t,"connect")},{hasContent:!0,type:"read",method:"connect"});static subscribe=Hn(function(t,r,n,s){return t.subscribe?t.subscribe(r):as(t,"subscribe")},{type:"read",method:"subscribe"});static publish=Hn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.constructor.loadAsInstance===!1?t.publish(r,s):t.publish(s,r):as(t,"publish")},{hasContent:!0,type:"create",method:"publish"});static search=Hn(function(t,r,n){let s=t.search?t.search(r):as(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let o=ad(i,t.constructor);return s.map(o)}return s},{type:"read",method:"search"});static query=Hn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):as(t,"search")},{hasContent:!0,type:"read",method:"query"});static copy=Hn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):as(t,"copy")},{hasContent:!0,type:"create",method:"copy"});static move=Hn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):as(t,"move")},{hasContent:!0,type:"delete",method:"move"});async post(t,r){if(this.constructor.loadAsInstance===!1){if(t.isCollection&&this.create)return r=await this.create(t,r),r?.[this.constructor.primaryKey]}else if(this.#n)return(await this.constructor.create(this.#e,t,this.#t)).#e;as(this,"post")}static isCollection(t){return t&&t.#n}get isCollection(){return this.#n}static coerceId(t){return t}static parseQuery(t,r){return Og(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1),c=r?.headers&&L7[o];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===o))if(t=t.slice(0,s),n)n.property=o;else return{query:{property:o},id:TB(t,this),isCollection:Rl}}let i=TB(t,this);return Rl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return o&&(s.#n=!0),s}subscribe(t){return new ss}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new ss}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,RB._assignPackageExport)("Resource",Xt);a(D7,"snakeCase");a(TB,"pathToId");vg=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(Hn,"transactional");a(as,"missingMethod");a(CI,"selectFromObject");a(ad,"transformForSelect")});var bl,OI=se(()=>{bl=class{static{a(this,"ErrorResource")}error;constructor(t){this.error=t}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var PI={};ye(PI,{Resources:()=>cd,keyArrayToString:()=>ld,resetResources:()=>v7,resources:()=>Bs});function v7(){return Bs=new cd,Ue.resources=Bs,Bs}function ld(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var wB,NB,cd,Bs,sc=se(()=>{Qa();OI();wB=b(Q()),NB=b(Ee());Hr();cd=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;allTypes=new Map;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new NB.ServerError(`Conflicting paths for ${t}`);wB.default.error(c),i.Resource=new bl(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,o=t.length;for(;n<o;){s=n,n=t.indexOf("/",n),n===-1&&(n=o);let u=n===o?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===o&&(f=u.indexOf("?",s),f!==-1)){let m=u.slice(0,f);d=this.get(m)}if(d&&(!r||d.exportTypes?.[r]!==!1)){if(d.relativeURL=t.slice(f!==-1?f:n),!d.hasSubPaths)return d;i=d}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return bt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(v7,"resetResources");a(ld,"keyArrayToString")});function vI(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=OB,M7(e.primaryStore,e.auditStore)):(c=CB,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{PB(CB[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[o];u||(u=l[o]=new Map,u.envs=l,u.tableId=o,u.store=e.primaryStore),t=ld(t);let d=new DI(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 PB(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),LB(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=At(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=ld(c),u=0;do{let d=o.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,LI.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,LI.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 M7(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let l=OB[s];if(!l)return;let u=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{PB(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function LB(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function DB(e){return e.nextTransaction||(vI({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),LB(e)),e.nextTransaction}var LI,CB,OB,DI,MI=se(()=>{LI=b(Q());Vu();sc();Ki();CB=Object.create(null),OB=Object.create(null);a(vI,"addSubscription");DI=class extends ss{static{a(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(PB,"notifyFromTransactionData");a(M7,"listenToCommits");a(LB,"nextTransaction");a(DB,"whenNextTransaction")});var MB=M((jPe,vB)=>{"use strict";var UI=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};vB.exports=UI});var xB=M((JPe,UB)=>{"use strict";var xI=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};UB.exports=xI});var fp=M(FB=>{"use strict";var BB=fe(),U7=(G(),D(j)),{RecordEncoder:x7}=(El(),D(pB));BB.initSync();var B7=BB.get(U7.CONFIG_PARAMS.STORAGE_CACHING)!==!1,BI=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=B7&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:x7})}};FB.OpenDBIObject=BI});var mp=M((eLe,kB)=>{"use strict";var cs=fe(),Fs=(G(),D(j));cs.initSync();var Mg=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=cs.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||cs.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||cs.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",cs.get(Fs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=cs.get(Fs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),cs.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=cs.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),cs.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=cs.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),cs.get(Fs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=cs.get(Fs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=cs.get(Fs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};kB.exports=Mg;Mg.MAX_DBS=1e4});var gt=M((rLe,zB)=>{"use strict";var kI=require("lmdb"),ui=require("fs-extra"),ls=require("path"),Ug=xn(),qB=Q(),Gn=Jr().LMDB_ERRORS_ENUM,xg=xB(),{OpenDBIObject:HI}=fp(),$B=mp(),ic=Jt(),HB=(G(),D(j)),{table:F7,resetDatabases:k7}=(Oe(),D(mt)),GB=fe(),di=ic.INTERNAL_DBIS_NAME,VB=ic.DBI_DEFINITION_NAME,H7="data.mdb",G7="lock.mdb",pp=".mdb",q7="-lock",FI=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ks(t,r),this.key_type=this.dbi[ic.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[ic.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new kI.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Bg(e,t){if(e===void 0)throw new Error(Gn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Gn.ENV_NAME_REQUIRED)}a(Bg,"pathEnvNameValidation");async function GI(e,t,r=!0){try{await ui.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Gn.INVALID_BASE_PATH):n}try{let n=ls.join(e,t+pp);return await ui.access(n,ui.constants.R_OK|ui.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await ui.access(ls.join(e,t,H7),ui.constants.R_OK|ui.constants.F_OK),ls.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Gn.INVALID_ENVIRONMENT)}else throw new Error(Gn.INVALID_ENVIRONMENT);throw n}}a(GI,"validateEnvironmentPath");function Fg(e,t){if(Ug.validateEnv(e),t===void 0)throw new Error(Gn.DBI_NAME_REQUIRED)}a(Fg,"validateEnvDBIName");async function $7(e,t,r=!1,n=!1){Bg(e,t);let s=ls.basename(e);t=t.toString();let i=GB.get(HB.CONFIG_PARAMS.DATABASES);i||GB.setProperty(HB.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await GI(e,t,n),KB(e,t,r)}catch(o){if(o.message===Gn.INVALID_ENVIRONMENT){let c=ls.join(e,t);await ui.mkdirp(n?c:e);let l=new $B(n?c:c+pp,!1),u=kI.open(l);u.dbis=Object.create(null);let d=new HI(!1);u.openDB(di,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=qI(e,t,r);return u[ic.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw o}}a($7,"createEnvironment");async function V7(e,t,r,n=!0){Bg(e,t),t=t.toString();let s=ls.join(e,t);return F7({table:t,database:ls.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(V7,"copyEnvironment");async function KB(e,t,r=!1){Bg(e,t),t=t.toString();let n=qI(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 GI(e,t),i=ls.join(e,t+pp),o=s!=i,c=new $B(s,o),l=kI.open(c);l.dbis=Object.create(null);let u=WB(l);for(let d=0;d<u.length;d++)ks(l,u[d]);return l[ic.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(KB,"openEnvironment");async function K7(e,t,r=!1){Bg(e,t),t=t.toString();let n=ls.join(e,t+pp),s=await GI(e,t);if(global.lmdb_map!==void 0){let i=qI(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await YB(o),delete global.lmdb_map[i]}}await ui.remove(s),await ui.remove(s===n?s+q7:ls.join(ls.dirname(s),G7))}a(K7,"deleteEnvironment");async function YB(e){Ug.validateEnv(e);let t=e[ic.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(YB,"closeEnvironment");function qI(e,t,r=!1){let s=`${ls.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(qI,"getCachedEnvironmentName");function Y7(e){Ug.validateEnv(e);let t=Object.create(null),r=ks(e,di);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==di)try{t[n]=Object.assign(new xg,s)}catch{qB.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(Y7,"listDBIDefinitions");function WB(e){Ug.validateEnv(e);let t=[],r=ks(e,di);for(let{key:n}of r.getRange({start:!1}))n!==di&&t.push(n);return t}a(WB,"listDBIs");function W7(e,t){let n=ks(e,di).getEntry(t),s=new xg;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{qB.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(W7,"getDBIDefinition");function jB(e,t,r,n=!r){if(Fg(e,t),t=t.toString(),t===di)throw new Error(Gn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ks(e,t)}catch(s){if(s.message===Gn.DBI_DOES_NOT_EXIST){let i=new HI(r,n===!0),o=e.openDB(t,i),c=new xg(r===!0,n);return o[VB]=c,ks(e,di).putSync(t,c),e.dbis[t]=o,o}throw s}}a(jB,"createDBI");function ks(e,t){if(Fg(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==di?r=W7(e,t):r=new xg,r===void 0)throw new Error(Gn.DBI_DOES_NOT_EXIST);let n;try{let s=new HI(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(Gn.DBI_DOES_NOT_EXIST):s}return n[VB]=r,e.dbis[t]=n,n}a(ks,"openDBI");function j7(e,t){Fg(e,t),t=t.toString();let r=ks(e,t),n=r.getStats();return r[ic.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(j7,"statDBI");async function z7(e,t){try{let r=ls.join(e,t+pp);return(await ui.stat(r)).size}catch{throw new Error(Gn.INVALID_ENVIRONMENT)}}a(z7,"environmentDataSize");function J7(e,t){if(Fg(e,t),t=t.toString(),t===di)throw new Error(Gn.CANNOT_DROP_INTERNAL_DBIS_NAME);ks(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ks(e,di).removeSync(t)}a(J7,"dropDBI");function Q7(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{ks(e,i)}catch(o){if(o.message===Gn.DBI_DOES_NOT_EXIST)jB(e,i,i!==t,i===t),n=!0;else throw o}}n&&k7()}a(Q7,"initializeDBIs");zB.exports={openDBI:ks,openEnvironment:KB,createEnvironment:$7,listDBIs:WB,listDBIDefinitions:Y7,createDBI:jB,dropDBI:J7,statDBI:j7,deleteEnvironment:K7,initializeDBIs:Q7,TransactionCursor:FI,environmentDataSize:z7,copyEnvironment:V7,closeEnvironment:YB}});var XB=M((sLe,QB)=>{"use strict";var $I=gt(),X7=Q(),JB=Jr().LMDB_ERRORS_ENUM;QB.exports=Z7;async function Z7(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await $I.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==JB.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await $I.closeEnvironment(global.lmdb_map[n]),await $I.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==JB.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){X7.error(t)}}a(Z7,"cleanLMDBMap")});var Zi=M((oLe,eF)=>{"use strict";var ZB=ae(),eee=(G(),D(j)),ud=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Xi=require("joi"),oc={schema_format:{pattern:ud,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},tee=Xi.alternatives(Xi.string().min(1).max(oc.schema_length.maximum).pattern(ud).messages({"string.pattern.base":"{:#label} "+oc.schema_format.message}),Xi.number(),Xi.array()).required(),ree=Xi.alternatives(Xi.string().min(1).max(oc.schema_length.maximum).pattern(ud).messages({"string.pattern.base":"{:#label} "+oc.schema_format.message}),Xi.number()),nee=Xi.alternatives(Xi.string().min(1).max(oc.schema_length.maximum).pattern(ud).messages({"string.pattern.base":"{:#label} "+oc.schema_format.message}),Xi.number()).required();function see(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>oc.schema_length.maximum?`'${property_name}' maximum of 250 characters`:ud.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}a(see,"checkValidTable");function iee(e,t){return ZB.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(iee,"validateSchemaExists");function oee(e,t){let r=t.state.ancestors[0].schema;return ZB.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(oee,"validateTableExists");function aee(e,t){return e.toLowerCase()===eee.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(aee,"validateSchemaName");eF.exports={commonValidators:oc,schemaRegex:ud,hdbSchemaTable:tee,validateSchemaExists:iee,validateTableExists:oee,validateSchemaName:aee,checkValidTable:see,hdbDatabase:ree,hdbTable:nee}});var KI=M((cLe,rF)=>{var{hdbTable:cee,hdbDatabase:tF}=Zi(),lee=ft(),VI=require("joi"),uee={undefined:"undefined",null:"null"},dee=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||uee[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"customRecordsVal"),fee=VI.object({database:tF,schema:tF,table:cee,records:VI.array().items(VI.object().custom(dee)).required()});rF.exports=function(e){return lee.validateBySchema(e,fee)}});var sF=M((uLe,nF)=>{"use strict";var YI=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};nF.exports=YI});var oF=M((fLe,iF)=>{"use strict";var WI=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};iF.exports=WI});var cF=M((pLe,aF)=>{"use strict";var jI=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};aF.exports=jI});var uF=M((ELe,lF)=>{"use strict";var zI=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};lF.exports=zI});var Il=M((yLe,mF)=>{"use strict";var mee=gt(),pee=oF(),hee=cF(),Eee=uF(),eo=xn(),hp=Jr().LMDB_ERRORS_ENUM,_ee=Jt(),Qo=(G(),D(j)),gee=ae(),See=require("uuid"),gLe=require("lmdb"),{handleHDBError:Tee,hdbErrors:yee}=Ee(),{OVERFLOW_MARKER:SLe,MAX_SEARCH_KEY_LENGTH:TLe}=_ee,dF=fe();dF.initSync();var kg=dF.get(Qo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),JI=Qo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Al=Qo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Ree(e,t,r,n,s=eo.getNextMonotonicTime()){ew(e,t,r,n),QI(e,t,r);let i=new pee,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];fF(u,!0,s);let d=bee(e,t,r,u),f=u[t];o.push(d),c.push(f)}return XI(o,c,n,i,s)}a(Ree,"insertRecords");function bee(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][Qo.FUNC_VAL],n[o]=c)}let l=eo.getIndexedValues(c),u=e.dbis[o];if(l){kg&&u.prefetch(l.map(d=>({key:d,value:s})),Hg);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}kg&&e.dbis[t].prefetch([s],Hg),e.dbis[t].put(s,n,n[Al])})}a(bee,"insertRecord");function Aee(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(Aee,"removeSkippedRecords");function fF(e,t,r){let n=r>0;(n||!Number.isInteger(e[Al]))&&(e[Al]=r||(r=eo.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[JI]))&&(e[JI]=r||eo.getNextMonotonicTime()):delete e[JI]}a(fF,"setTimestamps");function QI(e,t,r){r.indexOf(Qo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Qo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Qo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Qo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),mee.initializeDBIs(e,t,r)}a(QI,"initializeTransaction");async function Iee(e,t,r,n,s=eo.getNextMonotonicTime()){ew(e,t,r,n),QI(e,t,r);let i=new hee,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=ZI(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),o.push(u);continue}c.push(m),l.push(f)}return XI(c,l,n,i,s,o)}a(Iee,"updateRecords");async function wee(e,t,r,n,s=eo.getNextMonotonicTime()){try{ew(e,t,r,n)}catch(l){throw Tee(l,l.message,yee.HTTP_STATUS_CODES.BAD_REQUEST)}QI(e,t,r);let i=new Eee,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;gee.isEmpty(u[t])?(d=See.v4(),u[t]=d):d=u[t];let f=ZI(e,t,u,d,i,!1,s);o.push(f),c.push(d)}return XI(o,c,n,i,s)}a(wee,"upsertRecords");async function XI(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||eo.getNextMonotonicTime(),Aee(r,i),n}a(XI,"finalizeWrite");function ZI(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(fF(r,!d,o),Number.isInteger(r[Al])&&u[Al]>r[Al])return!1;d&&s.original_records.push(u);let f,m=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let E=r[h],_=e.dbis[h];if(_===void 0)continue;let R=u[h];if(typeof E=="function"){let y=E([[u]]);Array.isArray(y)&&(E=y[0][Qo.FUNC_VAL],r[h]=E)}if(E===R)continue;let S=eo.getIndexedValues(R);if(S){kg&&_.prefetch(S.map(y=>({key:y,value:n})),Hg);for(let y=0,w=S.length;y<w;y++)_.remove(S[y],n)}if(S=eo.getIndexedValues(E),S){kg&&_.prefetch(S.map(y=>({key:y,value:n})),Hg);for(let y=0,w=S.length;y<w;y++)_.put(S[y],n)}}let p={...u,...r};c.put(n,p,p[Al])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:ZI(e,t,r,n,s,i,o))}a(ZI,"updateUpsertRecord");function Nee(e,t,r){if(eo.validateEnv(e),t===void 0)throw new Error(hp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(hp.WRITE_ATTRIBUTES_REQUIRED):new Error(hp.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Nee,"validateBasic");function ew(e,t,r,n){if(Nee(e,t,r),!Array.isArray(n))throw n===void 0?new Error(hp.RECORDS_REQUIRED):new Error(hp.RECORDS_MUST_BE_ARRAY)}a(ew,"validateWrite");function Hg(){}a(Hg,"noop");mF.exports={insertRecords:Ree,updateRecords:Iee,upsertRecords:wee}});var to=M((bLe,Cee)=>{Cee.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"hash_function"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"id",table:"hdb_license",database:"system",audit:!0,attributes:[{attribute:"id"},{name:"level"},{name:"region",indexed:!0},{name:"reads"},{name:"writes"},{name:"readBytes"},{name:"writeBytes"},{name:"realTimeMessages"},{name:"realTimeBytes"},{name:"cpuTime"},{name:"storage"},{name:"usedReads"},{name:"usedWrites"},{name:"usedReadBytes"},{name:"usedWriteBytes"},{name:"usedRealTimeMessages"},{name:"usedRealTimeBytes"},{name:"usedCpuTime"},{name:"usedStorage"},{name:"expiration"},{name:"autoRenew"},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics_hostname:{hash_attribute:"id",name:"hdb_analytics_hostname",schema:"system",attributes:[{attribute:"id"},{attribute:"hostname"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]},hdb_certificate_cache:{hash_attribute:"certificate_id",name:"hdb_certificate_cache",schema:"system",attributes:[{attribute:"certificate_id"}]},hdb_crl_cache:{hash_attribute:"distribution_point",name:"hdb_crl_cache",schema:"system",attributes:[{attribute:"distribution_point"}]},hdb_revoked_certificates:{hash_attribute:"composite_id",name:"hdb_revoked_certificates",schema:"system",attributes:[{attribute:"composite_id"}]}}});var hF=M((ALe,pF)=>{"use strict";var Oee=require("uuid"),tw=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||Oee.v4(),this.schema_table=`${this.schema}.${this.table}`}};pF.exports=tw});var Gg=M((wLe,EF)=>{"use strict";var Pee=hF(),rw=class extends Pee{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};EF.exports=rw});var gF=M((CLe,_F)=>{"use strict";_F.exports=Dee;var Lee="inserted";function Dee(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===Lee?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(Dee,"returnObject")});var qg=M((LLe,TF)=>{"use strict";var vee=(G(),D(j)),nw=gt(),Mee=Il(),{getSystemSchemaPath:Uee,getSchemaPath:xee}=Rt(),PLe=to(),{validateBySchema:Bee}=ft(),Ep=require("joi"),Fee=Gg(),kee=gF(),{handleHDBError:Hee,hdbErrors:Gee,ClientError:qee}=Ee(),SF=ae(),{HTTP_STATUS_CODES:$ee}=Gee,Vee="inserted";TF.exports=Kee;async function Kee(e){let t=Bee(e,Ep.object({database:Ep.string(),schema:Ep.string(),table:Ep.string().required(),attribute:Ep.string().required()}));if(t)throw new qee(t.message);let r=!e.skip_table_check&&SF.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Hee(new Error,r,$ee.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=SF.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 Fee(e.schema,e.table,e.attribute,e.id);try{let i=await nw.openEnvironment(xee(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}`);nw.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await nw.openEnvironment(Uee(),vee.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await Mee.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return kee(Vee,c,{records:[s]},l)}catch(i){throw i}}a(Kee,"lmdbCreateAttribute")});var _p=M((MLe,RF)=>{"use strict";var Xo=ae(),yF=Q(),vLe=KI(),{getDatabases:Yee}=(Oe(),D(mt)),{ClientError:wl}=Ee();RF.exports=Wee;function Wee(e){if(Xo.isEmpty(e))throw new wl("invalid update parameters defined.");if(Xo.isEmptyOrZeroLength(e.schema))throw new wl("invalid schema specified.");if(Xo.isEmptyOrZeroLength(e.table))throw new wl("invalid table specified.");if(!Array.isArray(e.records))throw new wl("records must be an array");let t=Yee()[e.schema]?.[e.table];if(Xo.isEmpty(t))throw new wl(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&Xo.isEmptyOrZeroLength(o[r]))throw yF.error("a valid hash attribute must be provided with update record:",o),new wl("a valid hash attribute must be provided with update record, check log for more info");if(!Xo.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw yF.error(`a valid hash value must be provided with ${e.operation} record:`,o),new wl(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Xo.isEmpty(o[r])&&o[r]!==""&&n.has(Xo.autoCast(o[r]))&&(o.skip=!0),n.add(Xo.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(Wee,"insertUpdateValidate")});var $g=M((xLe,AF)=>{"use strict";var bF=ae(),jee=(G(),D(j)),zee=Q(),Jee=qg(),Qee=Gg(),Xee=Zo(),{SchemaEventMsg:Zee}=us(),ete="already exists in";AF.exports=tte;async function tte(e,t,r){if(bF.isEmptyOrZeroLength(r))return r;let n=[];bF.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 rte(e,t.schema,t.name,i)})),s}a(tte,"lmdbCheckForNewAttributes");async function rte(e,t,r,n){let s=new Qee(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await nte(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(ete))zee.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(rte,"createNewAttribute");async function nte(e){let t;return t=await Jee(e),Xee.signalSchemaChange(new Zee(process.pid,jee.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(nte,"createAttribute")});var dd=M((FLe,IF)=>{"use strict";var sw=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};IF.exports=sw});var NF=M((HLe,wF)=>{"use strict";var ste=dd(),ite=(G(),D(j)).OPERATIONS_ENUM,iw=class extends ste{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(ite.INSERT,r,n,s,i),this.records=t}};wF.exports=iw});var OF=M((qLe,CF)=>{"use strict";var ote=dd(),ate=(G(),D(j)).OPERATIONS_ENUM,ow=class extends ote{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(ate.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};CF.exports=ow});var LF=M((VLe,PF)=>{"use strict";var cte=dd(),lte=(G(),D(j)).OPERATIONS_ENUM,aw=class extends cte{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(lte.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};PF.exports=aw});var vF=M((YLe,DF)=>{"use strict";var ute=dd(),dte=(G(),D(j)).OPERATIONS_ENUM,cw=class extends ute{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(dte.DELETE,n,s,t,i),this.original_records=r}};DF.exports=cw});var gp=M((zLe,BF)=>{"use strict";var jLe=require("path"),MF=gt(),fte=NF(),mte=OF(),pte=LF(),hte=vF(),fd=Jt(),UF=ae(),{CONFIG_PARAMS:Ete}=(G(),D(j)),xF=fe();xF.initSync();var Vg=(G(),D(j)).OPERATIONS_ENUM,{getTransactionAuditStorePath:_te}=Rt();BF.exports=gte;async function gte(e,t){if(xF.get(Ete.LOGGING_AUDITLOG)===!1)return;let r=_te(e.schema,e.table),n=await MF.openEnvironment(r,e.table,!0),s=Ste(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){MF.initializeDBIs(n,fd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,fd.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[fd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[fd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),UF.isEmpty(s.user_name)||n.dbis[fd.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[fd.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(gte,"writeTransaction");function Ste(e,t){let r=UF.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Vg.INSERT)return new fte(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vg.UPDATE)return new mte(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vg.UPSERT)return new pte(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vg.DELETE)return new hte(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Ste,"createTransactionObject")});var lw=M((XLe,FF)=>{"use strict";var Tte=_p(),QLe=xm(),Sp=(G(),D(j)),yte=Bm(),Rte=Il().insertRecords,bte=gt(),Ate=Q(),Ite=$g(),{getSchemaPath:wte}=Rt(),Nte=gp();FF.exports=Cte;async function Cte(e){try{let{schemaTable:t,attributes:r}=Tte(e);yte(e,r,t.hash_attribute),e.schema!==Sp.SYSTEM_SCHEMA_NAME&&(r.includes(Sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Ite(e.hdb_auth_header,t,r),s=wte(e.schema,e.table),i=await bte.openEnvironment(s,e.table),o=await Rte(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Nte(e,o)}catch(c){Ate.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(Cte,"lmdbCreateRecords")});var GF=M((eDe,HF)=>{"use strict";var kF=(G(),D(j)),Ote=lw(),Pte=xm(),Lte=require("fs-extra"),{getSchemaPath:Dte}=Rt();HF.exports=vte;async function vte(e){let t=[{name:e.schema,createddate:Date.now()}],r=new Pte(kF.SYSTEM_SCHEMA_NAME,kF.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Ote(r),await Lte.mkdirp(Dte(e.schema))}a(vte,"lmdbCreateSchema")});var $F=M((rDe,qF)=>{"use strict";var uw=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};qF.exports=uw});var WF=M((aDe,YF)=>{"use strict";var VF=gt(),dw=xn(),fw=Jr().LMDB_ERRORS_ENUM,Mte=Jt(),KF=Q(),sDe=ae(),Ute=require("lmdb"),xte=$F(),Bte=(G(),D(j)),{OVERFLOW_MARKER:iDe,MAX_SEARCH_KEY_LENGTH:oDe}=Mte,Fte=Bte.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function kte(e,t,r,n){if(dw.validateEnv(e),t===void 0)throw new Error(fw.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(fw.IDS_REQUIRED):new Error(fw.IDS_MUST_BE_ITERABLE);try{let s=VF.listDBIs(e);VF.initializeDBIs(e,t,s);let i=new xte,o,c=[],l=[];for(let m=0,p=r.length;m<p;m++)try{o=r[m];let h=e.dbis[t].get(o);if(!h||n&&h[Fte]>n){i.skipped.push(o);continue}let E=e.dbis[t].ifVersion(o,Ute.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let _=0;_<s.length;_++){let R=s[_];if(!h.hasOwnProperty(R)||R===t)continue;let S=e.dbis[R],y=h[R];if(y!=null)try{let w=dw.getIndexedValues(y);if(w)for(let I=0,H=w.length;I<H;I++)S.remove(w[I],o)}catch{KF.warn(`cannot delete from attribute: ${R}, ${y}:${o}`)}}});c.push(E),l.push(o),i.original_records.push(h)}catch(h){KF.warn(h),i.skipped.push(o)}let u=[],d=await Promise.all(c);for(let m=0,p=d.length;m<p;m++)d[m]===!0?i.deleted.push(l[m]):(i.skipped.push(l[m]),u.push(m));let f=0;for(let m=0;m<u.length;m++){let p=u[m];i.original_records.splice(p-f,1),f++}return i.txn_time=dw.getNextMonotonicTime(),i}catch(s){throw s}}a(kte,"deleteRecords");YF.exports={deleteRecords:kte}});var Tp=M((lDe,zF)=>{"use strict";var md=ae(),Hte=WF(),Gte=gt(),{getSchemaPath:qte}=Rt(),$te=gp(),Vte=Q();zF.exports=Kte;async function Kte(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(md.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(md.isEmptyOrZeroLength(e.hash_values)&&!md.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];md.isEmpty(l)||e.hash_values.push(l)}}if(md.isEmptyOrZeroLength(e.hash_values))return jF([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(md.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=qte(e.schema,e.table),i=await Gte.openEnvironment(s,e.table),o=await Hte.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await $te(e,o)}catch(c){Vte.error(`unable to write transaction due to ${c.message}`)}return jF(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(Kte,"lmdbDeleteRecords");function jF(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(jF,"createDeleteResponse")});var pw=M((fDe,JF)=>{"use strict";var Yte=(G(),D(j)),dDe=xn();function mw(e,t){let r=Object.create(null);if(t.length===1&&Yte.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(mw,"parseRow");function Wte(e,t,r,n){let s=mw(r,e);n.push(s)}a(Wte,"searchAll");function jte(e,t,r,n){let s=mw(r,e);n[t]=s}a(jte,"searchAllToMap");function zte(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(zte,"iterateDBI");function Nl(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Nl,"pushResults");function Jte(e,t,r,n,s,i){t.toString().endsWith(e)&&Nl(t,r,n,s,i)}a(Jte,"endsWith");function Qte(e,t,r,n,s,i){t.toString().includes(e)&&Nl(t,r,n,s,i)}a(Qte,"contains");function Xte(e,t,r,n,s,i){t>e&&Nl(t,r,n,s,i)}a(Xte,"greaterThanCompare");function Zte(e,t,r,n,s,i){t>=e&&Nl(t,r,n,s,i)}a(Zte,"greaterThanEqualCompare");function ere(e,t,r,n,s,i){t<e&&Nl(t,r,n,s,i)}a(ere,"lessThanCompare");function tre(e,t,r,n,s,i){t<=e&&Nl(t,r,n,s,i)}a(tre,"lessThanEqualCompare");JF.exports={parseRow:mw,searchAll:Wte,searchAllToMap:jte,iterateDBI:zte,endsWith:Jte,contains:Qte,greaterThanCompare:Xte,greaterThanEqualCompare:Zte,lessThanCompare:ere,lessThanEqualCompare:tre,pushResults:Nl}});var pd=M((_De,nk)=>{"use strict";var ac=gt(),pDe=Q(),ds=xn(),Kg=Jt(),ar=Jr().LMDB_ERRORS_ENUM,hDe=ae(),rre=(G(),D(j)),Yg=pw(),{parseRow:nre}=Yg,EDe=require("lmdb"),{OVERFLOW_MARKER:QF,MAX_SEARCH_KEY_LENGTH:sre}=Kg;function XF(e,t,r,n=!1,s=void 0,i=void 0){return Cl(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(XF,"iterateFullIndex");function yp(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return Cl(e,t,r,(d,f,m,p)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return p===r?(S.values=!1,f.getRange(S).map(y=>({value:y}))):f.getRange(S)})}a(yp,"iterateRangeBetween");function Cl(e,t,r,n){let s=e.database||e,i=ac.openDBI(s,r);i[Kg.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ac.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Cl,"setupTransaction");function ZF(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(QF)){if(!s)if(r)s=ac.openDBI(e,r);else{let l=ac.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=ac.openDBI(e,l[u]),!s[Kg.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(ZF,"getOverflowCheck");function ire(e,t,r,n=!1,s=void 0,i=void 0){if(ds.validateEnv(e),t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);return Cl(e,t,t,(o,c,l)=>(Wg(r),r=Rp(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>nre(u.value,r))))}a(ire,"searchAll");function ore(e,t,r,n=!1,s=void 0,i=void 0){if(ds.validateEnv(e),t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);Wg(r),r=Rp(e.database||e,r);let o=new Map;for(let{key:c,value:l}of XF(e,t,t,n,s,i))o.set(c,Yg.parseRow(l,r));return o}a(ore,"searchAllToMap");function are(e,t,r=!1,n=void 0,s=void 0){if(ds.validateEnv(e),t===void 0)throw new Error(ar.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=XF(e,void 0,t,r,n,s),c=o.transaction,l=ZF(c.database,c,void 0,t);for(let{key:u,value:d}of o){let f=l(u,d);i[f]===void 0&&(i[f]=[]),i[f].push(d)}return i}a(are,"iterateDBI");function cre(e,t){if(ds.validateEnv(e),t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);return ac.statDBI(e,t).entryCount}a(cre,"countAll");function lre(e,t,r,n,s=!1,i=void 0,o=void 0){return cc(e,r,n),Cl(e,t,r,(c,l,u,d)=>(n=ds.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(f=>({key:n,value:f}))))}a(lre,"equals");function ure(e,t,r){return cc(e,t,r),ac.openDBI(e,t).getValuesCount(r)}a(ure,"count");function dre(e,t,r,n,s=!1,i=void 0,o=void 0){return cc(e,r,n),Cl(e,null,r,(c,l)=>{n=ds.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(o)?o++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:o}).map(m=>{let{key:p}=m;if(p!==f){if(p.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}a(dre,"startsWith");function fre(e,t,r,n,s=!1,i=void 0,o=void 0){return ek(e,t,r,n,s,i,o,!0)}a(fre,"endsWith");function ek(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return cc(e,r,n),Cl(e,null,r,(l,u,d,f)=>{let m=ZF(d,l,f,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(p=>{let h=p.toString();return h.endsWith(QF)?u.getValues(p,{transaction:l}).map(E=>{let _=m(p,E);if(c?_.endsWith(n):_.includes(n))return{key:_,value:E}}).filter(E=>E):(c?h.endsWith(n):h.includes(n))?u[Kg.DBI_DEFINITION_NAME].is_hash_attribute?{key:p,value:p}:u.getValues(p,{transaction:l}).map(E=>({key:p,value:E})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(ek,"contains");function mre(e,t,r,n,s=!1,i=void 0,o=void 0){cc(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),yp(e,t,r,n,l,s,i,o,!0,!1)}a(mre,"greaterThan");function pre(e,t,r,n,s=!1,i=void 0,o=void 0){cc(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),yp(e,t,r,n,l,s,i,o,!1,!1)}a(pre,"greaterThanEqual");function hre(e,t,r,n,s=!1,i=void 0,o=void 0){cc(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),yp(e,t,r,l,n,s,i,o,!1,!0)}a(hre,"lessThan");function Ere(e,t,r,n,s=!1,i=void 0,o=void 0){cc(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),yp(e,t,r,l,n,s,i,o,!1,!1)}a(Ere,"lessThanEqual");function _re(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(ds.validateEnv(e),r===void 0)throw new Error(ar.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ar.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ar.END_VALUE_REQUIRED);if(n=ds.convertKeyValueToWrite(n),s=ds.convertKeyValueToWrite(s),n>s)throw new Error(ar.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return yp(e,t,r,n,s,i,o,c)}a(_re,"between");function gre(e,t,r,n){ds.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);if(Wg(r),r=Rp(s,r),n===void 0)throw new Error(ar.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Yg.parseRow(c,r)),o}a(gre,"searchByHash");function Sre(e,t,r){ds.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ar.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(Sre,"checkHashExists");function Tre(e,t,r,n,s=[]){return rk(e,t,r,n,s),tk(e,t,r,n,s).map(i=>i[1])}a(Tre,"batchSearchByHash");function yre(e,t,r,n,s=[]){rk(e,t,r,n,s);let i=new Map;for(let[o,c]of tk(e,t,r,n,s))i.set(o,c);return i}a(yre,"batchSearchByHashToMap");function tk(e,t,r,n,s=[]){return Cl(e,t,t,(i,o,c)=>{r=Rp(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,Yg.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(tk,"batchHashSearch");function rk(e,t,r,n,s){if(ds.validateEnv(e),t===void 0)throw new Error(ar.HASH_ATTRIBUTE_REQUIRED);if(Wg(r),n==null)throw new Error(ar.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ar.IDS_MUST_BE_ITERABLE)}a(rk,"initializeBatchSearchByHash");function Wg(e){if(!Array.isArray(e))throw e===void 0?new Error(ar.FETCH_ATTRIBUTES_REQUIRED):new Error(ar.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Wg,"validateFetchAttributes");function cc(e,t,r){if(ds.validateEnv(e),t===void 0)throw new Error(ar.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ar.SEARCH_VALUE_REQUIRED);if(r?.length>sre)throw new Error(ar.SEARCH_VALUE_TOO_LARGE)}a(cc,"validateComparisonFunctions");function Rp(e,t){return t.length===1&&rre.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ac.listDBIs(e)),t}a(Rp,"setGetWholeRowAttributes");nk.exports={searchAll:ire,searchAllToMap:ore,count:ure,countAll:cre,equals:lre,startsWith:dre,endsWith:fre,contains:ek,searchByHash:gre,setGetWholeRowAttributes:Rp,batchSearchByHash:Tre,batchSearchByHashToMap:yre,checkHashExists:Sre,iterateDBI:are,greaterThan:mre,greaterThanEqual:pre,lessThan:hre,lessThanEqual:Ere,between:_re}});var hd=M((SDe,ck)=>{var sk=require("lodash"),ik=ft(),Je=require("joi"),Rre=ae(),{hdbSchemaTable:bp,checkValidTable:ok,hdbTable:ak,hdbDatabase:jg}=Zi(),{handleHDBError:bre,hdbErrors:Are}=Ee(),{getDatabases:Ire}=(Oe(),D(mt)),{HTTP_STATUS_CODES:wre}=Are,Nre=Je.object({database:jg,schema:jg,table:ak,attribute:bp,value:Je.any().required(),get_attributes:Je.array().min(1).items(Je.alternatives(bp,Je.object())).optional(),desc:Je.bool(),limit:Je.number().integer().min(1),offset:Je.number().integer().min(0)}),Cre=Je.object({database:jg,schema:jg,table:ak,operator:Je.string().valid("and","or").default("and").lowercase(),offset:Je.number().integer().min(0),limit:Je.number().integer().min(1),get_attributes:Je.array().min(1).items(Je.alternatives(bp,Je.object())).optional(),sort:Je.object({attribute:Je.alternatives(bp,Je.array().min(1)),descending:Je.bool().optional()}).optional(),conditions:Je.array().min(1).items(Je.alternatives(Je.object({operator:Je.string().valid("and","or").default("and").lowercase(),conditions:Je.array()}),Je.object({attribute:Je.alternatives(bp,Je.array().min(1)),comparator:Je.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),value:Je.when("comparator",{switch:[{is:"equals",then:Je.any()},{is:"between",then:Je.array().items(Je.alternatives([Je.string(),Je.number()])).length(2)}],otherwise:Je.alternatives(Je.string(),Je.number())}).required()}))).required()});ck.exports=function(e,t){let r=null;switch(t){case"value":r=ik.validateBySchema(e,Nre);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(ok("database",e.schema)),i(ok("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=ik.validateBySchema(e,Cre);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Rre.checkGlobalSchemaTable(e.schema,e.table);if(s)return bre(new Error,s,wre.NOT_FOUND);let o=Ire()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.attribute);let l=a(d=>{for(let f of d.conditions)f.conditions?l(f):c.push(f.attribute)},"addConditions");t==="conditions"&&l(e);let u=sk.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!sk.some(o,f=>f===d||f.attribute===d||f.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var hw=M((yDe,lk)=>{"use strict";var Ore=gt(),Pre=hd(),{getSchemaPath:Lre}=Rt();lk.exports=Dre;function Dre(e){let t=Pre(e,"hashes");if(t)throw t;let r=Lre(e.schema,e.table);return Ore.openEnvironment(r,e.table)}a(Dre,"initialize")});var Ew=M((bDe,uk)=>{"use strict";var vre=pd(),Mre=hw();uk.exports=Ure;async function Ure(e){let t=await Mre(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return vre.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Ure,"lmdbGetDataByHash")});var Ed=M((IDe,dk)=>{"use strict";var _w=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};dk.exports=_w});var mk=M((CDe,fk)=>{"use strict";var NDe=Ed(),xre=pd(),Bre=hw();fk.exports=Fre;async function Fre(e){let t=await Bre(e),r=global.hdb_schema[e.schema][e.table];return xre.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Fre,"lmdbSearchByHash")});var fi=M((PDe,pk)=>{"use strict";var gw=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.attribute=n,this.value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};pk.exports=gw});var zg=M((DDe,Tk)=>{"use strict";var _n=pd(),kre=gt(),Hre=ae(),Qe=Jt(),Ol=(G(),D(j)),Gre=to(),hk=Jr().LMDB_ERRORS_ENUM,{getSchemaPath:qre}=Rt(),ea=Ol.SEARCH_WILDCARDS;async function $re(e,t,r){let n;e.schema===Ol.SYSTEM_SCHEMA_NAME?n=Gre[e.table]:n=global.hdb_schema[e.schema][e.table];let s=Sk(e,n.hash_attribute,r,t);return _k(e,s,n.hash_attribute,r)}a($re,"prepSearch");async function _k(e,t,r,n){let s=qre(e.schema,e.table),i=await kre.openEnvironment(s,e.table),o=gk(i,e,t,r),c=o.transaction||i;if([Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Qe.SEARCH_TYPES.SEARCH_ALL,Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Vre(e,r)===!1){let d=e.attribute;if(d===r)return n?Ek(o,()=>!0):o.map(m=>({[r]:m.key}));let f=a(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?Ek(o,f):o.map(f)}let u=e.attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?_n.batchSearchByHashToMap(c,r,e.get_attributes,u):_n.batchSearchByHash(c,r,e.get_attributes,u)}a(_k,"executeSearch");function gk(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case Qe.SEARCH_TYPES.EQUALS:s=_n.equals(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.CONTAINS:s=_n.contains(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.ENDS_WITH:case Qe.SEARCH_TYPES._ENDS_WITH:s=_n.endsWith(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.STARTS_WITH:case Qe.SEARCH_TYPES._STARTS_WITH:s=_n.startsWith(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return _n.batchSearchByHash(e,t.attribute,t.get_attributes,[t.value]);case Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return _n.batchSearchByHashToMap(e,t.attribute,t.get_attributes,[t.value]);case Qe.SEARCH_TYPES.SEARCH_ALL:return _n.searchAll(e,n,t.get_attributes,o,c,l);case Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return _n.searchAllToMap(e,n,t.get_attributes,o,c,l);case Qe.SEARCH_TYPES.BETWEEN:s=_n.between(e,i,t.attribute,t.value,t.end_value,o,c,l);break;case Qe.SEARCH_TYPES.GREATER_THAN:case Qe.SEARCH_TYPES._GREATER_THAN:s=_n.greaterThan(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.GREATER_THAN_EQUAL:case Qe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=_n.greaterThanEqual(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.LESS_THAN:case Qe.SEARCH_TYPES._LESS_THAN:s=_n.lessThan(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.LESS_THAN_EQUAL:case Qe.SEARCH_TYPES._LESS_THAN_EQUAL:s=_n.lessThanEqual(e,i,t.attribute,t.value,o,c,l);break;default:return Object.create(null)}return s}a(gk,"searchByType");function Ek(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(Ek,"createMapFromIterable");function Vre(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(Vre,"checkToFetchMore");function Sk(e,t,r,n){if(Hre.isEmpty(n)){let s=e.value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.attribute===t&&(c=!0),ea.indexOf(s)>-1)return r===!0?Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Qe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ea[0])<0&&s.indexOf(ea[1])<0)return c===!0?r===!0?Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Qe.SEARCH_TYPES.EQUALS;if(ea.indexOf(i)>=0&&ea.indexOf(o)>=0)return e.value=e.value.slice(1,-1),Qe.SEARCH_TYPES.CONTAINS;if(ea.indexOf(i)>=0)return e.value=e.value.substr(1),Qe.SEARCH_TYPES.ENDS_WITH;if(ea.indexOf(o)>=0)return e.value=e.value.slice(0,-1),Qe.SEARCH_TYPES.STARTS_WITH;if(s.includes(ea[0])||s.includes(ea[1]))return Qe.SEARCH_TYPES.EQUALS;throw new Error(hk.UNKNOWN_SEARCH_TYPE)}else switch(n){case Ol.VALUE_SEARCH_COMPARATORS.BETWEEN:return Qe.SEARCH_TYPES.BETWEEN;case Ol.VALUE_SEARCH_COMPARATORS.GREATER:return Qe.SEARCH_TYPES.GREATER_THAN;case Ol.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Qe.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ol.VALUE_SEARCH_COMPARATORS.LESS:return Qe.SEARCH_TYPES.LESS_THAN;case Ol.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Qe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(hk.UNKNOWN_SEARCH_TYPE)}}a(Sk,"createSearchTypeFromSearchObject");Tk.exports={executeSearch:_k,createSearchTypeFromSearchObject:Sk,prepSearch:$re,searchByType:gk}});var Rk=M((UDe,yk)=>{"use strict";var MDe=fi(),Kre=hd(),Yre=ae(),Wre=(G(),D(j)),jre=zg();yk.exports=zre;function zre(e,t){if(!Yre.isEmpty(t)&&Wre.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Kre(e,"value");if(n)throw n;return jre.prepSearch(e,t,!0)}a(zre,"lmdbGetDataByValue")});var Ap=M((FDe,bk)=>{"use strict";var BDe=fi(),Jre=hd(),Qre=ae(),Xre=(G(),D(j)),Zre=zg();bk.exports=ene;async function ene(e,t){if(!Qre.isEmpty(t)&&Xre.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Jre(e,"value");if(n)throw n;return Zre.prepSearch(e,t,!1)}a(ene,"lmdbSearchByValue")});var Ik=M((GDe,Ak)=>{"use strict";var HDe=Jt(),Sw=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},Tw=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},yw=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Ak.exports={SearchByConditionsObject:Sw,SearchCondition:Tw,SortAttribute:yw}});var Pk=M((YDe,Ok)=>{"use strict";var{SearchByConditionsObject:$De,SearchCondition:VDe}=Ik(),tne=fi(),rne=hd(),Rw=pd(),Jg=Jt(),{Resource:KDe}=(Qi(),D(IB)),Ck=zg(),nne=pw(),sne=require("lodash"),{getSchemaPath:ine}=Rt(),wk=gt(),{handleHDBError:one,hdbErrors:ane}=Ee(),{HTTP_STATUS_CODES:cne}=ane,lne=1e8;Ok.exports=une;async function une(e){let t=rne(e,"conditions");if(t)throw one(t,t.message,cne.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=ine(e.schema,e.table),n=await wk.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)wk.openDBI(n,u.attribute);let i=sne.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===Jg.SEARCH_TYPES.EQUALS?u.estimated_count=Rw.count(n,u.attribute,u.value):d===Jg.SEARCH_TYPES.CONTAINS||d===Jg.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=lne}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await Nk(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(Ck.filterByType),f=d.length,m=Rw.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(p=>u.get(p,{transaction:o,lazy:!0})),f>0&&(l=l.filter(p=>{for(let h=0;h<f;h++)if(!d[h](p))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(p=>nne.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await Nk(o,e,m,s.hash_attribute);c=c.concat(p)}let u=new Set,d=e.offset||0;c=c.filter(f=>u.has(f)?!1:(u.add(f),!0)).slice(d,e.limit&&e.limit+d),l=Rw.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(une,"lmdbSearchByConditions");async function Nk(e,t,r,n){let s=new tne(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.comparator;return s.attribute=r.attribute,i===Jg.SEARCH_TYPES.BETWEEN?(s.value=r.value[0],s.end_value=r.value[1]):s.value=r.value,Ck.searchByType(e,s,i,n).map(o=>o.value)}a(Nk,"executeConditionSearch")});var Ip=M((jDe,Lk)=>{"use strict";var dne=(G(),D(j)).OPERATIONS_ENUM,bw=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=dne.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};Lk.exports=bw});var Aw=M((JDe,kk)=>{"use strict";var Uk=fi(),xk=Ip(),Bk=Ap(),Fk=Tp(),qn=(G(),D(j)),Dk=ae(),vk=gt(),{getTransactionAuditStorePath:fne,getSchemaPath:mne}=Rt(),Mk=Q();kk.exports=pne;async function pne(e){try{if(Dk.isEmpty(global.hdb_schema[e.schema])||Dk.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await hne(e),await Ene(e);let t=mne(e.schema,e.table);try{await vk.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Mk.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=fne(e.schema,e.table);await vk.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Mk.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(pne,"lmdbDropTable");async function hne(e){let t=new Uk(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Bk(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new xk(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await Fk(s)}a(hne,"deleteAttributesFromSystem");async function Ene(e){let t=new Uk(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await Bk(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new xk(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await Fk(s)}catch(i){throw i}}a(Ene,"dropTableFromSystem")});var Gk=M((XDe,Hk)=>{"use strict";var _ne=require("fs-extra"),gne=fi(),Sne=Ed(),Tne=Ip(),yne=Aw(),Rne=Tp(),bne=Ew(),Ane=Ap(),ta=(G(),D(j)),{getSchemaPath:Ine}=Rt(),{handleHDBError:wne,hdbErrors:Nne}=Ee(),{HDB_ERROR_MSGS:Cne,HTTP_STATUS_CODES:One}=Nne;Hk.exports=Pne;async function Pne(e){let t;try{t=await Lne(e.schema);let r=new gne(ta.SYSTEM_SCHEMA_NAME,ta.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ta.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ta.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await Ane(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await yne(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new Tne(ta.SYSTEM_SCHEMA_NAME,ta.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Rne(s);let i=Ine(t);await _ne.remove(i)}catch(r){throw r}}a(Pne,"lmdbDropSchema");async function Lne(e){let t=new Sne(ta.SYSTEM_SCHEMA_NAME,ta.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ta.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await bne(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw wne(new Error,Cne.SCHEMA_NOT_FOUND(e),One.NOT_FOUND,void 0,void 0,!0);return n}a(Lne,"validateDropSchema")});var wp=M((eve,qk)=>{"use strict";var Iw=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};qk.exports=Iw});var Nw=M((nve,$k)=>{"use strict";var Dne=require("fs-extra"),Qg=gt(),{getTransactionAuditStorePath:vne}=Rt(),ww=Jt(),rve=wp();$k.exports=Mne;async function Mne(e){let t;try{let r=vne(e.schema,e.table);await Dne.mkdirp(r),t=await Qg.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{Qg.createDBI(t,ww.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Qg.createDBI(t,ww.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Qg.createDBI(t,ww.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(Mne,"createTransactionsAuditEnvironment")});var Yk=M((ove,Kk)=>{"use strict";var Cw=(G(),D(j)),Vk=gt(),Une=Il(),{getSystemSchemaPath:xne,getSchemaPath:Bne}=Rt(),ive=to(),Fne=qg(),Ow=Gg(),kne=Q(),Hne=Nw();Kk.exports=Gne;async function Gne(e,t){let r=Bne(t.schema,t.table),n=new Ow(t.schema,t.table,Cw.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Ow(t.schema,t.table,Cw.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Ow(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Vk.createEnvironment(r,t.table),e!==void 0){let o=await Vk.openEnvironment(xne(),Cw.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Une.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdbTableAttributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Pw(n),await Pw(s),await Pw(i)}await Hne(t)}catch(o){throw o}}a(Gne,"lmdbCreateTable");async function Pw(e){try{await Fne(e)}catch(t){kne.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Pw,"createAttribute")});var jk=M((cve,Wk)=>{"use strict";var qne=_p(),$ne=Bm(),Vne=$g(),Np=(G(),D(j)),Kne=Il().updateRecords,Yne=gt(),{getSchemaPath:Wne}=Rt(),jne=gp(),zne=Q();Wk.exports=Jne;async function Jne(e){try{let{schemaTable:t,attributes:r}=qne(e);$ne(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 Vne(e.hdb_auth_header,t,r),s=Wne(e.schema,e.table),i=await Yne.openEnvironment(s,e.table),o=await Kne(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await jne(e,o)}catch(c){zne.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(Jne,"lmdbUpdateRecords")});var Jk=M((uve,zk)=>{"use strict";var Qne=(G(),D(j)).OPERATIONS_ENUM,Lw=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Qne.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};zk.exports=Lw});var Xk=M((mve,Qk)=>{"use strict";var fve=Jk(),Xne=_p(),Zne=Bm(),ese=$g(),Cp=(G(),D(j)),tse=Il().upsertRecords,rse=gt(),{getSchemaPath:nse}=Rt(),sse=gp(),ise=Q(),{handleHDBError:ose,hdbErrors:ase}=Ee();Qk.exports=cse;async function cse(e){let t;try{t=Xne(e)}catch(l){throw ose(l,l.message,ase.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;Zne(e,n,r.hash_attribute),e.schema!==Cp.SYSTEM_SCHEMA_NAME&&(n.includes(Cp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Cp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Cp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Cp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await ese(e.hdb_auth_header,r,n),i=nse(e.schema,e.table),o=await rse.openEnvironment(i,e.table),c=await tse(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await sse(e,c)}catch(l){ise.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schemaTable:r,new_attributes:s,txn_time:c.txn_time}}a(cse,"lmdbUpsertRecords")});var eH=M((hve,Zk)=>{"use strict";var Dw=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};Zk.exports=Dw});var rH=M((_ve,tH)=>{"use strict";var vw=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};tH.exports=vw});var iH=M((Tve,sH)=>{"use strict";var Mw=gt(),{getTransactionAuditStorePath:lse}=Rt(),Sve=eH(),Op=Jt(),use=ae(),nH=rH(),dse=require("util").promisify,fse=dse(setTimeout),mse=1e4,pse=100;sH.exports=hse;async function hse(e){let t=lse(e.schema,e.table),r=await Mw.openEnvironment(t,e.table,!0),n=Mw.listDBIs(r);Mw.initializeDBIs(r,Op.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new nH;do s=await Ese(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 fse(pse);while(s.transactions_deleted>0);return i}a(hse,"deleteAuditLogsBefore");async function Ese(e,t){let r=new nH;try{let n=e.dbis[Op.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[Op.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];use.isEmpty(c)||(s=e.dbis[Op.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Op.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>mse)break}return await s,r}catch(n){throw n}}a(Ese,"deleteTransactions")});var aH=M((Rve,oH)=>{"use strict";var Uw=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};oH.exports=Uw});var lH=M((Ive,cH)=>{"use strict";var _se=fi(),gse=Ip(),Ave=aH(),ro=(G(),D(j)),Sse=ae(),xw=gt(),Tse=to(),yse=Ap(),Rse=Tp(),{getSchemaPath:bse}=Rt();cH.exports=Ase;async function Ase(e,t=!0){let r;e.schema===ro.SYSTEM_SCHEMA_NAME?r=Tse[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await wse(e),s=bse(e.schema,e.table),i=await xw.openEnvironment(s,e.table);return t===!0&&await Ise(e,i,r.hash_attribute),xw.dropDBI(i,e.attribute),n}a(Ase,"lmdbDropAttribute");async function Ise(e,t,r){let n=xw.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(o,u,l)}await s}a(Ise,"removeAttributeFromAllObjects");async function wse(e){let t=new _se(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await yse(t)).filter(o=>o[ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Sse.isEmptyOrZeroLength(n))throw new Error(`Attribute '${drop_attribute_obj.attribute}' was not found in '${drop_attribute_obj.schema}.${drop_attribute_obj.table}'`);let s=n.map(o=>o[ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new gse(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Rse(i)}a(wse,"dropAttributeFromSystem")});var hH=M((Cve,pH)=>{"use strict";var Bw=gt(),_d=Jt(),Nve=xn(),Fw=(G(),D(j)),uH=ae(),{getTransactionAuditStorePath:Nse}=Rt(),Cse=pd(),Xg=dd(),Ose=Q();pH.exports=Pse;async function Pse(e){let t=Nse(e.schema,e.table),r=await Bw.openEnvironment(t,e.table,!0),n=Bw.listDBIs(r);Bw.initializeDBIs(r,_d.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Fw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return dH(r,e.search_values);case Fw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,Dse(r,e.search_values,s);case Fw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Lse(r,e.search_values);default:return dH(r)}}a(Pse,"readAuditLog");function dH(e,t=[0,Date.now()]){uH.isEmpty(t[0])&&(t[0]=0),uH.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[_d.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new Xg,s))}a(dH,"searchTransactionsByTimestamp");function Lse(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[_d.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,mH(e,i))}return Object.fromEntries(r)}a(Lse,"searchTransactionsByUsername");function Dse(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=Cse.equals(e,_d.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,_d.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=mH(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);fH(l,"records",r,d,o),fH(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(Dse,"searchTransactionsByHashValues");function fH(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let f=new Xg(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new Xg(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(fH,"loopRecords");function mH(e,t){let r=[];try{let n=e.dbis[_d.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new Xg,i);r.push(o)}}catch(i){Ose.warn(i)}return r}catch(n){throw n}}a(mH,"batchSearchTransactions")});var _H=M((Dve,EH)=>{"use strict";var{getSchemaPath:Pve}=Rt(),Lve=gt(),{database:vse}=(Oe(),D(mt));EH.exports={writeTransaction:Mse};async function Mse(e,t,r){return vse({database:e,table:t}).transaction(r)}a(Mse,"writeTransaction")});var yH=M((Mve,TH)=>{"use strict";var{getSchemaPath:gH}=Rt(),SH=gt();TH.exports={flush:Use,resetReadTxn:xse};async function Use(e,t){return(await SH.openEnvironment(gH(e,t),t.toString())).flushed}a(Use,"flush");async function xse(e,t){try{(await SH.openEnvironment(gH(e,t),t.toString())).resetReadTxn()}catch{}}a(xse,"resetReadTxn")});var IH=M((xve,AH)=>{"use strict";var{Readable:Bse}=require("stream"),{getDatabases:Fse}=(Oe(),D(mt)),{readSync:kse,openSync:Hse,createReadStream:RH}=require("fs"),{open:Gse}=require("lmdb"),{OpenDBIObject:bH}=fp(),qse=mp(),{AUDIT_STORE_OPTIONS:$se}=(Ki(),D(P0)),{INTERNAL_DBIS_NAME:Vse,AUDIT_STORE_NAME:Kse}=Jt();AH.exports=Wse;var kw=32768,Yse=100;async function Wse(e){let t=e.database||e.schema||"data",r=Fse()[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=Gse({noSync:!0,maxDbs:qse.MAX_DBS}),m,p=f.openDB(Vse,new bH(!1)),h=d.useReadTransaction(),E=0,_=a(async function(S,y){y.encoding="binary",y.encoder=void 0;let w=f.openDB(S,y),I=d.openDB(S,y);for(let{key:H,version:X,value:q}of I.getRange({start:null,transaction:h,versions:I.useVersions}))m=w.put(H,q,X),E++%Yse===0&&(await new Promise(k=>setTimeout(k,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:y}of d.getRange({transaction:h,start:!1}))if(s.some(w=>S.startsWith?.(w+"/"))){p.put(S,y);let[,w]=S.split("/"),I=!w,H=new bH(!I,I);await _(S,H)}e.include_audit&&await _(Kse,{...$se}),await m;let R=RH(f.path);return R.headers=l(),R.on("close",()=>{h.done(),f.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=Hse(o.path);return o.transaction(()=>{let u=Buffer.alloc(kw);kse(c,u,0,kw),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let f=RH(null,{fd:c,start:kw}),m=new Bse.from((async function*(){yield u;for await(let p of f)d.openTimer&&(d.openTimer=0),yield p;d.done()})());return m.headers=l(),m});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(Wse,"getBackup")});var CH=M((Fve,NH)=>{"use strict";var jse=Q(),{handleHDBError:zse}=Ee(),Jse=sF(),Qse=qg(),Xse=lw(),Zse=GF(),eie=Tp(),tie=Ew(),rie=mk(),nie=Rk(),sie=Ap(),iie=Pk(),oie=Gk(),aie=Yk(),cie=jk(),lie=Xk(),uie=iH(),die=Aw(),fie=lH(),mie=hH(),pie=_H(),wH=yH(),hie=IH(),Hw=class extends Jse{static{a(this,"LMDBBridge")}async searchByConditions(t){return iie(t)}async getDataByHash(t){return await tie(t)}async searchByHash(t){return await rie(t)}async getDataByValue(t,r){return await nie(t,r)}async searchByValue(t){return await sie(t)}async createSchema(t){return await Zse(t)}async dropSchema(t){return await oie(t)}async createTable(t,r){return await aie(t,r)}async dropTable(t){return await die(t)}async createAttribute(t){return await Qse(t)}async createRecords(t){return await Xse(t)}async updateRecords(t){return await cie(t)}async upsertRecords(t){try{return await lie(t)}catch(r){throw zse(r,null,null,jse.ERR,r)}}async deleteRecords(t){return await eie(t)}async dropAttribute(t){return await fie(t)}async deleteAuditLogsBefore(t){return await uie(t)}async readAuditLog(t){return await mie(t)}writeTransaction(t,r,n){return pie.writeTransaction(t,r,n)}flush(t,r){return wH.flush(t,r)}resetReadTxn(t,r){return wH.resetReadTxn(t,r)}getBackup(t){return hie(t)}};NH.exports=Hw});function $n(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function Lp(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=a(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new fs.ClientError(`${u} must be a string, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"ID":d=a(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(p=>typeof p=="string")||m==null&&l.nullable!==!1))throw new fs.ClientError(`${u} must be a string, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Float":case"Number":d=a(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="number"||m==null&&l.nullable!==!1))throw new fs.ClientError(`${u} must be a number, attempt to assign ${p}`);$n(this)[u]=m},"set");break;case"Int":d=a(function(m){let p=m?.__op__?m.value:m;if(!(p>>0===p||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs((p>>0)-p)<=1)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new fs.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Long":d=a(function(m){let p=m?.__op__?m.value:m;if(!(Math.round(p)===m&&Math.abs(p)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs(p)<=9007199254740992)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new fs.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"BigInt":d=a(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="bigint"||m==null&&l.nullable!==!1))if(typeof p=="string"||typeof p=="number")p=BigInt(p),m?.__op__?m.value=p:m=p;else throw new fs.ClientError(`${u} must be a number, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Boolean":d=a(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new fs.ClientError(`${u} must be a boolean, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Date":d=a(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new fs.ClientError(`${u} must be a Date, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Bytes":d=a(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new fs.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Blob":d=a(function(m){if(!(m instanceof vs||m==null&&l.nullable!==!1))throw new fs.ClientError(`${u} must be a Blob, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Any":case void 0:d=a(function(m){$n(this)[u]=m},"set");break;default:d=a(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new fs.ClientError(`${u} must be an object, attempt to assign ${m}`);$n(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let h=m[u];if(h?.__op__){let E=this.getRecord()?.[u];return h.update(E)}return h}let p=this.getRecord()?.[u];if(p&&typeof p=="object"){let h=Gw(p,l);if(h)return m||this._setChanges(m=Object.create(null)),m[u]=h}return p},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}o("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),o("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new fs.ClientError("Can not add a property to a sealed table schema");$n(this)[l]=u}),o("deleteProperty",function(l){$n(this)[l]=void 0}),o("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let p=u[f];m=m.update(p)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||o("get",n.getProperty),n.delete||o("delete",n.deleteProperty),n.then||o("then",null);function o(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}a(o,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?LH:PH);break}c=l}while(c&&c!==PH&&c!==LH)}function DH(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(OH[t])return OH[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=Gw(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function Eie(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 Gw(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends Ll{static{a(this,"TrackedObject")}},Lp(r,t)),new r(e)):new Ll(e);case Array:let n=new eS(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=Gw(o,t?.elements)),n[s]=o}return n;default:return e}}function tS(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=tS(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=e.getRecord?{...e.getRecord()}:{}),Object.assign(r,e)),r||e.getRecord?.()||e}function Dl(e,t=e.getChanges?.()){let r;if(!e)return t;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Dl(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e.getRecord?e.getRecord():e});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=PA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Dl(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)_ie.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function Zg(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Pl]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.getRecord?.()===s){if(Zg(i))return!0}else return!0}}else{let r=e.getChanges?.();if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s.getRecord?.()===i){if(Zg(s))return!0}else return!0}else return!0}}return!1}var fs,OH,PH,LH,Ll,_ie,Pl,eS,Pp,qw=se(()=>{fs=b(Ee());z_();is();a($n,"getChanges");a(Lp,"assignTrackedAccessors");OH=Object.prototype,PH=new Proxy({},{get:DH}),LH=new Proxy({},{get:DH,set:Eie});a(DH,"getProxiedProperty");a(Eie,"setProxiedProperty");a(Gw,"trackObject");Ll=class{static{a(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};Lp(Ll,{},!0);a(tS,"collapseData");_ie=Object.prototype.hasOwnProperty;a(Dl,"updateAndFreeze");a(Zg,"hasChanges");Pl=Symbol.for("has-array-changes"),eS=class extends Array{static{a(this,"TrackedArray")}#e;[Pl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Pl]=!0,super.splice(...t)}push(...t){return this[Pl]=!0,super.push(...t)}pop(){return this[Pl]=!0,super.pop()}unshift(...t){return this[Pl]=!0,super.unshift(...t)}shift(){return this[Pl]=!0,super.shift()}};eS.prototype.constructor=Array;Pp=class{static{a(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var HH={};ye(HH,{ResourceBridge:()=>Kw});function Yw({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 vH(e,t){let r=no(e),n=Yw(e,r);if(!r)throw new mi.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;bt(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&tS(d)}catch(f){d={message:(0,kH.errorToString)(f)}}return t?{value:{key:u,value:d}}:{value:d}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function no(e){let t=e.database||e.schema||Sie,r=lt()[t];if(!r)throw(0,mi.handleHDBError)(new Error,gie.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function MH(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*UH(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var xH,rS,mi,BH,$w,Vw,FH,kH,gie,Sie,Tie,yie,Kw,GH=se(()=>{xH=b(CH()),rS=b(hd()),mi=b(Ee());Oe();BH=b(_p());G();$w=b(Zo()),Vw=b(us()),FH=b(ae());Qa();qw();kH=b(Q()),{HDB_ERROR_MSGS:gie}=mi.hdbErrors,Sie="data",Tie=1e4,yie=10,Kw=class extends xH.default{static{a(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=no(t);if(!r)throw new mi.ClientError(`Table ${t.table} not found`);t.conditions=t.conditions.map(n);function n(i){if("conditions"in i&&i.conditions)return i.conditions=i.conditions.map(n),i;{let o=i;return{attribute:o.attribute??o.search_attribute,comparator:o.comparator??o.search_type,value:o.value!==void 0?o.value:o.search_value}}}a(n,"mapCondition");let s=(0,rS.default)(t,"conditions");if(s)throw(0,mi.handleHDBError)(s,s.message,400,void 0,void 0,!0);return r.search({conditions:t.conditions,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Yw(t,r),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new mi.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ze({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await no(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=no(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:d,version:f}=r.primaryStore.getEntry(o);return i(o,d,f)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){return no(t).dropTable()}createSchema(t){return gd({database:t.schema,table:null}),$w.signalSchemaChange(new Vw.SchemaEventMsg(process.pid,V.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Ww(t.schema),$w.signalSchemaChange(new Vw.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,BH.default)(t),s,i=lt()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),bt(o,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(m=>m.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let f=d[i.primaryKey],m=f!=null&&await i.get(f,o);if(t.requires_existing&&!m||t.requires_no_existing&&m){u.push(d[i.primaryKey]);continue}m&&(m=tS(m));for(let p in d)if(Object.prototype.hasOwnProperty.call(d,p)){let h=d[p];if(typeof h=="function")try{let E=h([[m]]);Array.isArray(E)&&(h=E[0].func_val,d[p]=h)}catch(E){throw E.message+="Trying to set key "+p+" on object"+JSON.stringify(d),E}}if(m)for(let p in m)Object.prototype.hasOwnProperty.call(d,p)||(d[p]=m[p]);await(f==null?i.create(d,o):i.put(d,o)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=lt()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),bt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return MH(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=lt()[t.schema][t.table];if(!r.createdTimeProperty)throw new mi.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:y_.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),o.push(...d.skipped_hashes),await(0,FH.asyncSetTimeout)(yie),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%Tie===0&&await u();return l.length>0&&await u(),s?MH(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,rS.default)(t,"hashes");if(r)throw r;return vH(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of vH(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&sA[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.search_attribute!==void 0&&(t.attribute=t.search_attribute),t.search_value!==void 0&&(t.value=t.search_value);let n=(0,rS.default)(t,"value");if(n)throw n;let s=no(t);if(!s)throw new mi.ClientError(`Table ${t.table} not found`);let i=t.value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===y_.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:Yw(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=no(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){no({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return no(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=no(t),n={};switch(t.search_type){case R_.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let o=i.operation??i.type;return o==="put"&&(o="upsert"),{operation:o,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case R_.USERNAME:{let s=t.search_values;for await(let i of UH(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return UH(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(Yw,"getSelect");a(vH,"getRecords");a(no,"getTable");a(MH,"createDeleteResponse");a(UH,"groupRecordsInHistory")});var ms=M((zve,qH)=>{"use strict";var{ResourceBridge:Rie}=(GH(),D(HH)),bie=fe();bie.initSync();var nS;function Aie(){return nS||(nS=new Rie,nS)}a(Aie,"getBridge");qH.exports=Aie()});var pi=M((Qve,KH)=>{var Iie=to(),{promisify:wie}=require("util"),{getDatabases:VH}=(Oe(),D(mt));KH.exports={setSchemaDataToGlobal:$H,getTableSchema:Nie,getSystemSchema:Cie,setSchemaDataToGlobalAsync:wie($H)};function $H(e){global.hdb_schema=VH(),e&&e()}a($H,"setSchemaDataToGlobal");function Nie(e,t,r){let n=VH()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(Nie,"getTableSchema");function Cie(){return Iie}a(Cie,"getSystemSchema")});var Vn=M((Zve,zH)=>{"use strict";var iS=KI(),nn=ae(),Oie=require("util"),oS=ms(),Pie=pi(),YH=Q(),{handleHDBError:vl,hdbErrors:Lie}=Ee(),{HTTP_STATUS_CODES:Ml}=Lie,Die=Oie.promisify(Pie.getTableSchema),vie="updated",WH="inserted",jH="upserted";zH.exports={insert:Uie,update:xie,upsert:Bie,validation:Mie,flush:Fie};async function Mie(e){if(nn.isEmpty(e))throw new Error("invalid update parameters defined.");if(nn.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(nn.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Die(e.schema,e.table),r=iS(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&nn.isEmptyOrZeroLength(c[n]))throw YH.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!nn.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw YH.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!nn.isEmpty(c[n])&&c[n]!==""&&s.has(nn.autoCast(c[n]))&&(c.skip=!0),s.add(nn.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(Mie,"validation");async function Uie(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=iS(e);if(t)throw vl(new Error,t.message,Ml.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw vl(new Error,r,Ml.BAD_REQUEST);let n=await oS.createRecords(e);return sS(WH,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(Uie,"insertData");async function xie(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=iS(e);if(t)throw vl(new Error,t.message,Ml.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw vl(new Error,r,Ml.BAD_REQUEST);let n=await oS.updateRecords(e);return nn.isEmpty(n.existing_rows)?sS(vie,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):sS(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(xie,"updateData");async function Bie(e){if(e.operation!=="upsert")throw vl(new Error,"invalid operation, must be upsert",Ml.INTERNAL_SERVER_ERROR);let t=iS(e);if(t)throw vl(new Error,t.message,Ml.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw vl(new Error,r,Ml.BAD_REQUEST);let n=await oS.upsertRecords(e);return sS(jH,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(Bie,"upsertData");function sS(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===WH?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===jH?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(sS,"returnObject");function Fie(e){return nn.transformReq(e),oS.flush(e.schema,e.table)}a(Fie,"flush")});var zw=M((tMe,XH)=>{var kie=ft(),jw=require("joi"),{hdbTable:Hie,hdbDatabase:JH}=Zi(),QH={schema:JH,database:JH,table:Hie},Gie={date:jw.date().iso().required()},qie={timestamp:jw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};XH.exports=function(e,t){let r=t==="timestamp"?{...QH,...qie}:{...QH,...Gie},n=jw.object(r);return kie.validateBySchema(e,n)}});var tG=M((rMe,eG)=>{var $ie=ft(),Jw=require("joi"),{hdbTable:Vie,hdbDatabase:ZH}=Zi(),Kie=Jw.object({schema:ZH,database:ZH,table:Vie,hash_values:Jw.array().required(),ids:Jw.array()});eG.exports=function(e){return $ie.validateBySchema(e,Kie)}});var eN=M((nMe,rG)=>{"use strict";var Qw=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},Xw=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.attribute=n,this.hash_attribute=s,this.get_attributes=i,this.value=o}},Zw=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};rG.exports={InsertObject:Qw,NoSQLSeachObject:Xw,DeleteResponseObject:Zw}});var Bl=M((iMe,aG)=>{"use strict";var sG=zw(),Yie=tG(),Ul=ae(),nG=require("moment"),iG=Q(),{promisify:Wie,callbackify:jie}=require("util"),xl=(G(),D(j)),zie=pi(),tN=Wie(zie.getTableSchema),rN=ms(),{DeleteResponseObject:Jie}=eN(),{handleHDBError:lc,hdbErrors:Qie}=Ee(),{HDB_ERROR_MSGS:aS,HTTP_STATUS_CODES:uc}=Qie,Xie="records successfully deleted",Zie=jie(oG);aG.exports={delete:Zie,deleteRecord:oG,deleteFilesBefore:eoe,deleteAuditLogsBefore:toe};async function eoe(e){let t=sG(e,"date");if(t)throw lc(t,t.message,uc.BAD_REQUEST,void 0,void 0,!0);if(Ul.transformReq(e),!nG(e.date,nG.ISO_8601).isValid())throw lc(new Error,aS.INVALID_DATE,uc.BAD_REQUEST,xl.LOG_LEVELS.ERROR,aS.INVALID_DATE,!0);let n=Ul.checkSchemaTableExist(e.schema,e.table);if(n)throw lc(new Error,n,uc.NOT_FOUND,xl.LOG_LEVELS.ERROR,n,!0);let s=await rN.deleteRecordsBefore(e);if(await tN(e.schema,e.table),iG.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(eoe,"deleteFilesBefore");async function toe(e){let t=sG(e,"timestamp");if(t)throw lc(t,t.message,uc.BAD_REQUEST,void 0,void 0,!0);if(Ul.transformReq(e),isNaN(e.timestamp))throw lc(new Error,aS.INVALID_VALUE("Timestamp"),uc.BAD_REQUEST,xl.LOG_LEVELS.ERROR,aS.INVALID_VALUE("Timestamp"),!0);let r=Ul.checkSchemaTableExist(e.schema,e.table);if(r)throw lc(new Error,r,uc.NOT_FOUND,xl.LOG_LEVELS.ERROR,r,!0);let n=await rN.deleteAuditLogsBefore(e);return await tN(e.schema,e.table),iG.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(toe,"deleteAuditLogsBefore");async function oG(e){e.ids&&(e.hash_values=e.ids);let t=Yie(e);if(t)throw lc(t,t.message,uc.BAD_REQUEST,void 0,void 0,!0);Ul.transformReq(e);let r=Ul.checkSchemaTableExist(e.schema,e.table);if(r)throw lc(new Error,r,uc.NOT_FOUND,xl.LOG_LEVELS.ERROR,r,!0);try{await tN(e.schema,e.table);let n=await rN.deleteRecords(e);return Ul.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Xie}`),n}catch(n){if(n.message===xl.SEARCH_NOT_FOUND_MESSAGE){let s=new Jie;return s.message=xl.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(oG,"deleteRecord")});var aN={};ye(aN,{HASH_FUNCTION:()=>$r,hash:()=>iN,validate:()=>oN});function nN(e=vp){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Dp.randomBytes(e)).map(r=>t[r%t.length]).join("")}function iN(e,t=$r[lG?.toUpperCase()]??$r.SHA256){return sN[t](e)}function oN(e,t,r=$r[lG?.toUpperCase()]??$r.SHA256){return e?roe[r](e,t):!1}var Dp,Sd,cG,lG,vp,uG,$r,sN,roe,cN=se(()=>{Dp=b(require("node:crypto")),Sd=b(require("argon2")),cG=b(fe());G();lG=(0,cG.get)(x.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),vp=16,uG=9,$r={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};a(nN,"generateSalt");sN={[$r.MD5]:(e,t=void 0)=>{t=t??nN(uG);let r=Dp.createHash($r.MD5).update(e+t).digest("hex");return t+r},[$r.SHA256]:(e,t=void 0)=>{t=t??nN(vp);let r=Dp.createHash($r.SHA256).update(e+t).digest("hex");return t+r},[$r.ARGON2ID]:async e=>{let t=nN(vp),r=await Sd.hash(e,{type:Sd.argon2id,salt:Buffer.from(t)});return t+r}},roe={[$r.MD5]:(e,t)=>{let r=e.slice(0,uG);return e===sN[$r.MD5](t,r)},[$r.SHA256]:(e,t)=>{let r=e.slice(0,vp);return e===sN[$r.SHA256](t,r)},[$r.ARGON2ID]:async(e,t)=>await Sd.verify(e.slice(vp),t)};a(iN,"hash");a(oN,"validate")});var fG=M((lMe,dG)=>{var lN=ft(),gn={username:{presence:!0,exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function noe(e){return gn.password.presence=!0,gn.username.presence=!0,gn.role.presence=!0,gn.active.presence=!0,lN.validateObject(e,gn)}a(noe,"addUserValidation");function soe(e){return gn.password.presence=!1,gn.username.presence=!0,gn.role.presence=!1,gn.active.presence=!1,lN.validateObject(e,gn)}a(soe,"alterUserValidation");function ioe(e){return gn.password.presence=!1,gn.username.presence=!0,gn.role.presence=!1,gn.active.presence=!1,lN.validateObject(e,gn)}a(ioe,"dropUserValidation");dG.exports={addUserValidation:noe,alterUserValidation:soe,dropUserValidation:ioe}});var IG=M((fMe,AG)=>{"use strict";var uN=require("recursive-iterator"),ooe=require("alasql"),dN=require("clone"),mG=ae(),{handleHDBError:pG,hdbErrors:aoe}=Ee(),{HDB_ERROR_MSGS:hG,HTTP_STATUS_CODES:EG}=aoe,{getDatabases:coe}=(Oe(),D(mt)),loe=["DISTINCT_ARRAY"],_G=Symbol("validateTables"),fN=Symbol("validateTable"),dMe=Symbol("getAllColumns"),gG=Symbol("validateAllColumns"),cS=Symbol("findColumn"),SG=Symbol("validateOrderBy"),Mp=Symbol("validateSegment"),mN=Symbol("validateColumn"),TG=Symbol("setColumnsForTable"),yG=Symbol("checkColumnsForAsterisk"),RG=Symbol("validateGroupBy"),bG=Symbol("hasColumns"),pN=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[_G](),this[yG](),this[gG]()}[_G](){if(this[bG]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[fN](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[fN](t.table)})}}[bG](){let t=!1,r=new uN(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[fN](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=coe();if(!r[t.databaseid])throw pG(new Error,hG.SCHEMA_NOT_FOUND(t.databaseid),EG.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw pG(new Error,hG.TABLE_NOT_FOUND(t.databaseid,t.tableid),EG.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=dN(s);i.table=dN(t),this.attributes.push(i)})}[cS](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[yG](){let t=new uN(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[TG](r.tableid)}[TG](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new ooe.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[gG](){this[Mp](this.statement.columns,!1),this[Mp](this.statement.joins,!1),this[Mp](this.statement.where,!1),this[RG](this.statement.group,!1),this[Mp](this.statement.order,!0)}[Mp](t,r){if(!t)return;let n=new uN(t),s=[];for(let{node:i,path:o}of n)!mG.isEmpty(i)&&!mG.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[SG](i):s.push(this[mN](i)));return s}[RG](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&loe.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=dN(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[cS](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[cS](n);if(!i||i.length===0)throw`unknown column '${group_column.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${group_column.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${group_column.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[SG](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[mN](t)}[mN](t){let r=this[cS](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};AG.exports=pN});var OG=M((pMe,CG)=>{"use strict";var wG=require("lodash"),Up=require("mathjs"),uoe=require("jsonata"),NG=ae();CG.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?wG.uniqWith(e,wG.isEqual):e,"distinct_array"),searchJSON:doe,mad:xp.bind(null,Up.mad),mean:xp.bind(null,Up.mean),mode:xp.bind(null,Up.mode),prod:xp.bind(null,Up.prod),median:xp.bind(null,Up.median)};function xp(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(xp,"aggregateFunction");function doe(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(NG.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),NG.isEmpty(this.__ala__.res[r])){let n=uoe(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(doe,"searchJSON")});var LG=M((EMe,PG)=>{"use strict";var pr=require("moment"),hN="YYYY-MM-DDTHH:mm:ss.SSSZZ";pr.suppressDeprecationWarnings=!0;PG.exports={current_date:a(()=>pr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>pr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return pr(e).utc().format("YYYY");case"month":return pr(e).utc().format("MM");case"day":return pr(e).utc().format("DD");case"hour":return pr(e).utc().format("HH");case"minute":return pr(e).utc().format("mm");case"second":return pr(e).utc().format("ss");case"millisecond":return pr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>pr(e).utc().format(hN),"date"),date_format:a((e,t)=>pr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>pr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>pr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=pr(e).utc(),s=pr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>pr().utc().valueOf(),"now"),get_server_time:a(()=>pr().format(hN),"get_server_time"),offset_utc:a((e,t)=>pr(e).utc().utcOffset(t).format(hN),"offset_utc")}});var UG=M((gMe,MG)=>{"use strict";var foe=require("@turf/area"),moe=require("@turf/length"),poe=require("@turf/circle"),hoe=require("@turf/difference"),Eoe=require("@turf/distance"),_oe=require("@turf/boolean-contains"),goe=require("@turf/boolean-equal"),Soe=require("@turf/boolean-disjoint"),Toe=require("@turf/helpers"),DG=(G(),D(j)),Ze=ae(),ra=Q();MG.exports={geoArea:yoe,geoLength:Roe,geoCircle:boe,geoDifference:Aoe,geoDistance:vG,geoNear:Ioe,geoContains:woe,geoEqual:Noe,geoCrosses:Coe,geoConvert:Ooe};function yoe(e){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return foe.default(e)}catch(t){return ra.trace(t,e),NaN}}a(yoe,"geoArea");function Roe(e,t){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return moe.default(e,{units:t||"kilometers"})}catch(r){return ra.trace(r,e),NaN}}a(Roe,"geoLength");function boe(e,t,r){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return poe.default(e,t,{units:r||"kilometers"})}catch(n){return ra.trace(n,e,t),NaN}}a(boe,"geoCircle");function Aoe(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 hoe(e,t)}catch(r){return ra.trace(r,e,t),NaN}}a(Aoe,"geoDifference");function vG(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 Eoe.default(e,t,{units:r||"kilometers"})}catch(n){return ra.trace(n,e,t),NaN}}a(vG,"geoDistance");function Ioe(e,t,r,n){if(Ze.isEmpty(e)||Ze.isEmpty(t))return!1;if(Ze.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return vG(e,t,n)<=r}catch(s){return ra.trace(s,e,t),!1}}a(Ioe,"geoNear");function woe(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 _oe.default(e,t)}catch(r){return ra.trace(r,e,t),!1}}a(woe,"geoContains");function Noe(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 goe.default(e,t)}catch(r){return ra.trace(r,e,t),!1}}a(Noe,"geoEqual");function Coe(e,t){if(Ze.isEmpty(e)||Ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return!Soe.default(e,t)}catch(r){return ra.trace(r,e,t),!1}}a(Coe,"geoCrosses");function Ooe(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(DG.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(DG.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ze.autoCastJSON(e)),Toe[t](e,r)}a(Ooe,"geoConvert")});var lS=M((TMe,xG)=>{var Fl=OG(),ps=LG(),so=UG();xG.exports=e=>{e.aggr.mad=e.aggr.MAD=Fl.mad,e.aggr.mean=e.aggr.MEAN=Fl.mean,e.aggr.mode=e.aggr.MODE=Fl.mode,e.aggr.prod=e.aggr.PROD=Fl.prod,e.aggr.median=e.aggr.MEDIAN=Fl.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Fl.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Fl.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ps.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ps.current_time,e.fn.extract=e.fn.EXTRACT=ps.extract,e.fn.date=e.fn.DATE=ps.date,e.fn.date_format=e.fn.DATE_FORMAT=ps.date_format,e.fn.date_add=e.fn.DATE_ADD=ps.date_add,e.fn.date_sub=e.fn.DATE_SUB=ps.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ps.date_diff,e.fn.now=e.fn.NOW=ps.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ps.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ps.get_server_time,e.fn.getdate=e.fn.GETDATE=ps.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ps.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=so.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=so.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=so.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=so.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=so.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=so.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=so.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=so.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=so.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=so.geoNear}});var HG=M((yMe,kG)=>{"use strict";var Bp=require("lodash"),Kn=require("alasql");Kn.options.cache=!1;var Poe=lS(),BG=require("clone"),uS=require("recursive-iterator"),Ve=Q(),it=ae(),Td=ms(),Loe=(G(),D(j)),{hdbErrors:Doe}=Ee(),{getDatabases:FG}=(Oe(),D(mt)),voe="IS NULL",hi="There was a problem performing this search. Please check the logs and try again.";Poe(Kn);var EN=class{static{a(this,"SQLSearch")}constructor(t,r){if(it.isEmpty(t))throw Ve.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),it.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!it.isEmptyOrZeroLength(n))return Ve.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ve.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ve.error(n),new Error(hi)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ve.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ve.error(n),new Error(hi)}if(Object.keys(this.data).length===0)return Ve.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ve.error("Error thrown from processJoins in SQLSearch class method search."),Ve.error(n),new Error(hi)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ve.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ve.error(n),new Error(hi)}try{return t=await this._finalSQL(),t}catch(n){throw Ve.error("Error thrown from finalSQL in SQLSearch class method search."),Ve.error(n),new Error(hi)}}_getColumns(){let t=new uS(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(BG(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Bp.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hashName=FG()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(it.isEmpty(this.statement.where)){Ve.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new uS(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!it.isEmpty(r)&&r.right)if(it.isNotEmptyAndHasValue(r.right.value)){let n=it.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Kn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=it.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Kn.yy.LogicValue({value:i}):n instanceof Kn.yy.StringValue&&it.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Kn.yy.NumValue({value:i}))});if(t){Ve.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new uS(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!it.isEmpty(Loe.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(it.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(it.isEmptyOrZeroLength(r.left.columnid)||it.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,value:r.right.value})}continue}if(it.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!it.isEmpty(r.right.value)||!it.isEmpty(r.left.value)?n.add(it.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(it.isEmptyOrZeroLength(this.all_table_attributes)&&it.isEmptyOrZeroLength(this.statement.from)&&it.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Bp.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(it.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);it.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(it.isEmptyOrZeroLength(this.all_table_attributes)&&!it.isEmptyOrZeroLength(this.columns.columns))return t;if(it.isEmptyOrZeroLength(this.all_table_attributes)&&it.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Kn.promise(r)}catch(r){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ve.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(BG(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__mergedAttributes.push(r),this.data[t].__mergedAttrMap[r]=this.data[t].__mergedAttributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__mergedData[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__mergedAttrMap[n];this.data[t].__mergedData[r].splice(i,1,s)}async _getFetchAttributeValues(){if(it.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(voe)>-1&&this.tables.forEach(s=>{let i={columnid:FG()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Bp.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hashName;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hashName,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!it.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!it.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await 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(hi)}else try{c.attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let f={...c};f.value=d;let m=await 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(hi)}else if(!it.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!it.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let f=0,m=d.length;f<m;f++){let p=d[f];c.attribute=p.attribute,c.value=p.value;let h=await 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,_]of h)this.data[i].__mergedData[E]?this._updateMergedAttribute(i,E,s.attribute,_[s.attribute]):(this.data[i].__mergedData[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,_[s.attribute]),this._setMergedHashAttribute(i,E))}}catch(d){throw Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ve.error(d),new Error(hi)}else try{c.attribute=s.attribute,c.value="*";let d=await 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(hi)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Kn.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Kn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Kn.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new Kn.yy.FuncValue:new Kn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__mergedData)),this.statement.joins&&this.statement.joins.forEach(p=>{p.joinmode&&p.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(p.table);let h=p.joinmode+" JOIN ? AS "+(p.as?p.as:p.table.tableid);p.on&&(h+=" ON "+p.on.toString()),i.push(h),t.push(Object.values(this.data[`${p.table.databaseid_orig}_${p.table.as?p.table.as_orig:p.table.tableid_orig}`].__mergedData))});let o=[],c={};s.forEach(p=>{let h=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__hashName,E=p.as?p.as_orig:p.tableid_orig;o.push({key:`'${E}.${h}'`,schema:p.databaseid_orig,table:p.as?p.as_orig:p.tableid_orig,keys:new Set}),r.push(`${p.as?p.as:p.tableid}.\`${h}\` AS "${E}.${h}"`),c[p.as?p.as_orig:p.tableid_orig]=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__mergedAttributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(p=>{p.is_func?r.push(p.initial_select_column.toString()):p.initial_select_column.tableid?r.push(`${p.initial_select_column.tableid}.${p.initial_select_column.columnid} AS ${p.expression.columnid}`):r.push(`${p.initial_select_column.columnid} AS ${p.expression.columnid}`)}));let d="",f="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",f=this.statement.offset?"OFFSET "+this.statement.offset:"");let m=[];try{let p=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,h=this._convertColumnsToIndexes(p,s);m=await Kn.promise(h,t),t=null}catch(p){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ve.error(p),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let p=0,h=m.length;p<h;p++){let E=m[p];o.forEach(_=>{E[_.key]!==null&&E[_.key]!==void 0&&_.keys.add(E[_.key])})}o.forEach(p=>{let h=Object.keys(this.data[`${p.schema}_${p.table}`].__mergedData),E=Bp.difference(h,[...p.keys].map(_=>_.toString()));for(let _=0,R=E.length;_<R;_++){let S=E[_];delete this.data[`${p.schema}_${p.table}`].__mergedData[S]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new uS(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=Bp.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw Ve.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ve.error(i),new Error(hi)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__mergedData,o=[];for(let d in i)o.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await Td.getDataByHash(c),u=s.columns.length;for(let d=0,f=o.length;d<f;d++){let m=o[d],p=l.get(m);for(let h=0;h<u;h++){let E=s.columns[h],_=p[E]===void 0?null:p[E];this.data[n].__mergedData[m].push(_)}}}}catch(r){throw Ve.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ve.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__mergedData)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__mergedData)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Ve.trace(`Final SQL: ${s}`),n=await Kn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ve.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ve.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return Ve.error(Doe.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ve.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__mergedAttributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.attribute=n.attribute,i.value="*";let o=await Td.getDataByValue(i);for(let[c,l]of o)this.data[s].__mergedData[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__mergedData[c]={...r[s]}),this.data[s].__mergedData[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Ve.error("There was an error when processing this SQL operation. Check your logs"),Ve.error(o),new Error(hi)}}return Object.values(Object.values(this.data)[0].__mergedData)}};kG.exports=EN});var Sn=M((bMe,GG)=>{"use strict";GG.exports={searchByConditions:Moe,searchByHash:Uoe,searchByValue:xoe,search:Boe};var _N=ms(),{transformReq:gN}=ae();async function Moe(e){return gN(e),_N.searchByConditions(e)}a(Moe,"searchByConditions");async function Uoe(e){gN(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of _N.searchByHash(e))r&&t.push(r);return t}a(Uoe,"searchByHash");async function xoe(e){gN(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of _N.searchByValue(e))t.push(r);return t}a(xoe,"searchByValue");function Boe(e,t){try{let r=IG(),n=HG(),s=new r(e);s.validate(),new n(s.statement,s.attributes).search().then(o=>{t(null,o)}).catch(o=>{t(o,null)})}catch(r){return t(r)}}a(Boe,"search")});var io=M((IMe,KG)=>{"use strict";var Fp=require("crypto"),Foe=fe(),{CONFIG_PARAMS:koe}=(G(),D(j)),$G="aes-256-cbc",Hoe=32,Goe=16,SN=64,VG=32,qoe=SN+VG,qG=new Map;KG.exports={encrypt:$oe,decrypt:Voe,createNatsTableStreamName:Koe};function $oe(e){let t=Fp.randomBytes(Hoe),r=Fp.randomBytes(Goe),n=Fp.createCipheriv($G,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a($oe,"encrypt");function Voe(e){let t=e.substr(0,SN),r=e.substr(SN,VG),n=e.substr(qoe,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Fp.createDecipheriv($G,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Voe,"decrypt");function Koe(e,t){let r=Foe.get(koe.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=qG.get(r);return n||(n=Fp.createHash("md5").update(r).digest("hex"),qG.set(r,n)),n}a(Koe,"createNatsTableStreamName")});var Dt=M((CMe,WG)=>{"use strict";var{platform:NMe}=require("os"),Yoe="nats-server.zip",TN="nats-server",Woe=process.platform==="win32"?`${TN}.exe`:TN,joe=/^[^\s.,*>]+$/,YG="__request__",zoe=a(e=>`${e}.${YG}`,"REQUEST_SUBJECT"),Joe={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Qoe={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Xoe={HUB:"hub.pid",LEAF:"leaf.pid"},Zoe={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},eae={SUCCESS:"success",ERROR:"error"},tae={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},rae={TXN:"txn",MSGID:"msgid"},yd={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},nae={[yd.ERR]:1,[yd.WRN]:2,[yd.INF]:3,[yd.DBG]:4,[yd.TRC]:5},sae={debug:"-D",trace:"-DVV"};WG.exports={NATS_SERVER_ZIP:Yoe,NATS_SERVER_NAME:TN,NATS_BINARY_NAME:Woe,PID_FILES:Xoe,NATS_CONFIG_FILES:Qoe,SERVER_SUFFIX:Zoe,NATS_TERM_CONSTRAINTS_RX:joe,REQUEST_SUFFIX:YG,UPDATE_REMOTE_RESPONSE_STATUSES:eae,CLUSTER_STATUS_STATUSES:tae,REQUEST_SUBJECT:zoe,SUBJECT_PREFIXES:rae,MSG_HEADERS:Joe,LOG_LEVELS:yd,LOG_LEVEL_FLAGS:sae,LOG_LEVEL_HIERARCHY:nae}});var co={};ye(co,{ACTIVE_BOOLEAN:()=>eq,ALTERUSER_NOTHING_TO_UPDATE:()=>QG,EMPTY_PASSWORD:()=>XG,EMPTY_ROLE:()=>ZG,USERNAME_REQUIRED:()=>JG,addUser:()=>CN,alterUser:()=>ON,dropUser:()=>PN,findAndValidateUser:()=>bd,getClusterUser:()=>Eae,getSuperUser:()=>Gp,getUsersWithRolesCache:()=>hae,listUsers:()=>mS,listUsersExternal:()=>DN,setUsersWithRolesCache:()=>_i,userInfo:()=>LN});async function CN(e){let t=nq.cleanAttributes(e,sq),r=rq.addUserValidation(t);if(r)throw new Ei(r.message);let n=await Hp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new Ei(Rd.ROLE_NAME_NOT_FOUND(t.role),na.NOT_FOUND);if(n.length>1)throw new Ei(Rd.DUP_ROLES_FOUND(t.role),na.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=wN.encrypt(t.password)),t.password=await kp.hash(t.password,dS),t.hash_function=dS,t.role=n[0].id;let s=await tq.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(IN.debug(s),await _i(),s.skipped_hashes.length===1)throw new Ei(Rd.USER_ALREADY_EXISTS(t.username),na.CONFLICT);return AN.signalUserChange(new NN(process.pid)),`${t.username} successfully added`}async function ON(e){let t=nq.cleanAttributes(e,sq);if(oo.isEmptyOrZeroLength(t.username))throw new Error(JG);if(oo.isEmptyOrZeroLength(t.password)&&oo.isEmptyOrZeroLength(t.role)&&oo.isEmptyOrZeroLength(t.active))throw new Error(QG);if(!oo.isEmpty(t.password)&&oo.isEmptyOrZeroLength(t.password.trim()))throw new Error(XG);if(!oo.isEmpty(t.active)&&!oo.isBoolean(t.active))throw new Error(eq);if(!oo.isEmpty(t.password)&&!oo.isEmptyOrZeroLength(t.password.trim())&&(mae(t.username)&&(t.hash=wN.encrypt(t.password)),t.password=await kp.hash(t.password,dS),t.hash_function=dS),t.role==="")throw new Error(ZG);if(t.role){let n=await Hp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Ei(Rd.ALTER_USER_ROLE_NOT_FOUND(t.role),na.NOT_FOUND);if(n.length>1)throw new Ei(Rd.DUP_ROLES_FOUND(t.role),na.CONFLICT);t.role=n[0].id}let r=await tq.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await _i(),AN.signalUserChange(new NN(process.pid)),r}function mae(e){let t=!1,r=ao.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}async function PN(e){let t=rq.dropUserValidation(e);if(t)throw new Ei(t.message);if(ao.get(e.username)===void 0)throw new Ei(Rd.USER_NOT_EXIST(e.username),na.NOT_FOUND);let r=await fae({table:"hdb_user",schema:"system",hash_values:[e.username]});return IN.debug(r),await _i(),AN.signalUserChange(new NN(process.pid)),`${e.username} successfully deleted`}async function LN(e){if(!e||!e.hdb_user)return"There was no user info in the body";let t=bN.cloneDeep(e.hdb_user),r=await Hp.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}async function DN(){let e=await mS();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}async function mS(){let e=await Hp.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=bN.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Hp.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=bN.cloneDeep(s),s.role=t[s.role],pae(s.role),n.set(s.username,s);return n}function pae(e){if(!e){IN.error("invalid user role found.");return}e.permission.system||(e.permission.system={tables:{}}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(lae)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}async function _i(e=void 0){e?ao=e:ao=await mS()}async function hae(){return ao||await _i(),ao}async function bd(e,t,r=!0){ao||await _i();let n=ao.get(e);if(!n){if(!r)return{username:e};throw new Ei(yN.GENERIC_AUTH_FAIL,na.UNAUTHORIZED)}if(n&&!n.active)throw new Ei(yN.USER_INACTIVE,na.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(zG.get(t)===n.password)return s;{let i=kp.validate(n.password,t,n.hash_function||kp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)zG.set(t,n.password);else throw new Ei(yN.GENERIC_AUTH_FAIL,na.UNAUTHORIZED)}}return s}async function Gp(){ao||await _i();for(let[,e]of ao)if(e.role.role==="super_user")return e}async function Eae(){let e=await mS(),t=aae.getConfigFromFile(RN.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(r==null||r?.role?.role!==RN.ROLE_TYPES_ENUM.CLUSTER_USER)return;let n=wN.decrypt(r.hash);return r.decrypt_hash=n,r.uri_encoded_d_hash=encodeURIComponent(n),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+jG.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+jG.SERVER_SUFFIX.ADMIN,r}var JG,QG,XG,ZG,eq,tq,iae,kp,rq,Hp,AN,oo,nq,IN,oae,wN,RN,jG,aae,cae,lae,uae,Ei,na,yN,Rd,NN,bN,fS,dae,sq,zG,fae,dS,ao,iq,hs=se(()=>{"use strict";JG="username is required",QG="nothing to update, must supply active, role or password to update",XG="password cannot be an empty string",ZG="If role is specified, it cannot be empty.",eq="active must be true or false",tq=Vn(),iae=Bl(),kp=(cN(),D(aN)),rq=fG(),Hp=Sn(),AN=Zo(),oo=ae(),nq=require("validate.js"),IN=Q(),{promisify:oae}=require("util"),wN=io(),RN=(G(),D(j)),jG=Dt(),aae=_t(),cae=fe(),lae=to(),{hdbErrors:uae,ClientError:Ei}=Ee(),{HTTP_STATUS_CODES:na,AUTHENTICATION_ERROR_MSGS:yN,HDB_ERROR_MSGS:Rd}=uae,{UserEventMsg:NN}=us(),bN=require("lodash"),{server:fS}=(Hr(),D(bm)),dae=Q();fS.getUser=(e,t)=>bd(e,t,t!=null);fS.authenticateUser=(e,t)=>bd(e,t);sq={username:!0,active:!0,role:!0,password:!0},zG=new Map,fae=oae(iae.delete),dS=cae.get(RN.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??kp.HASH_FUNCTION.SHA256;a(CN,"addUser");a(ON,"alterUser");a(mae,"isClusterUser");a(PN,"dropUser");a(LN,"userInfo");a(DN,"listUsersExternal");a(mS,"listUsers");a(pae,"appendSystemTablesToRole");a(_i,"setUsersWithRolesCache");a(hae,"getUsersWithRolesCache");a(bd,"findAndValidateUser");a(Gp,"getSuperUser");a(Eae,"getClusterUser");iq=[];fS.invalidateUser=function(e){for(let t of iq)try{t(e)}catch(r){dae.error("Error invalidating user",r)}};fS.onInvalidatedUser=function(e){iq.push(e)}});var Pe,Ad=se(()=>{Pe={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var Id,vN=se(()=>{Ad();Id=class{static{a(this,"ComponentStatus")}lastChecked;status;message;error;constructor(t,r,n){this.lastChecked=new Date,this.status=t,this.message=r,this.error=n}updateStatus(t,r){this.status=t,this.message=r,this.lastChecked=new Date,t!==Pe.ERROR&&(this.error=void 0)}markHealthy(t){this.updateStatus(Pe.HEALTHY,t||"Component is healthy")}markError(t,r){this.status=Pe.ERROR,this.error=t,this.message=r||(typeof t=="string"?t:t.message),this.lastChecked=new Date}markWarning(t){this.updateStatus(Pe.WARNING,t)}markLoading(t){this.updateStatus(Pe.LOADING,t||"Component is loading")}isHealthy(){return this.status===Pe.HEALTHY}hasError(){return this.status===Pe.ERROR}isLoading(){return this.status===Pe.LOADING}hasWarning(){return this.status===Pe.WARNING}getSummary(){let t=this.status.toUpperCase(),r=this.message?`: ${this.message}`:"";return`${t}${r}`}}});var kl,dc,MN,wd,UN,Nd,xN,pS=se(()=>{kl=b(Jr()),dc=class extends Error{static{a(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=kl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},MN=class extends dc{static{a(this,"CrossThreadTimeoutError")}requestId;timeoutMs;collectedCount;constructor(t,r,n){super(`Component status collection timeout after ${r}ms. Collected ${n} responses for request ${t}.`,kl.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},wd=class extends dc{static{a(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,kl.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},UN=class extends dc{static{a(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,kl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},Nd=class extends dc{static{a(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,kl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},xN=class extends dc{static{a(this,"CrossThreadCollectionError")}result;constructor(t){let r=t.success?`Partial collection success: ${t.collectedFromThreads} threads responded`+(t.timedOutThreads.length>0?`, ${t.timedOutThreads.length} timed out`:""):`Collection failed: ${t.errors.map(n=>n.message).join(", ")}`;super(r,kl.HTTP_STATUS_CODES.OK),this.name="CrossThreadCollectionError",this.result=t}getDiagnostics(){let t=[`Cross-thread collection ${this.result.success?"partially succeeded":"failed"}`,`Threads responded: ${this.result.collectedFromThreads}`];return this.result.expectedThreads&&t.push(`Expected threads: ${this.result.expectedThreads}`),this.result.timedOutThreads.length>0&&t.push(`Timed out threads: ${this.result.timedOutThreads.join(", ")}`),this.result.errors.length>0&&(t.push("Errors:"),this.result.errors.forEach((r,n)=>{t.push(` ${n+1}. ${r.name}: ${r.message}`)})),t.join(`
|
|
15
|
+
`)}}});var oq,Hl,aq,fc,qp,Cd,_ae,hS,BN=se(()=>{oq=b(us()),Hl=b(st());G();aq=b(ir());Ad();pS();fc=(0,aq.loggerWithTag)("componentStatus.crossThread"),qp=class{static{a(this,"CrossThreadStatusCollector")}awaitingResponses=new Map;responseCheckers=new Map;nextRequestId=1;listenerAttached=!1;timeout;cleanupTimer=null;constructor(t=5e3){this.timeout=t}attachListener(){this.listenerAttached||((0,Hl.onMessageByType)(b_.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;fc.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&&(fc.debug?.(`Cleaning up ${this.awaitingResponses.size} stale pending requests`),this.awaitingResponses.clear()),this.cleanupTimer=null},3e4))}async collect(t){try{this.attachListener(),this.scheduleCleanup();let r=this.nextRequestId++,n=[];this.awaitingResponses.set(r,n);let o=((0,Hl.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,_=a(()=>{let y=this.awaitingResponses.get(r);y&&y.length>=o&&!E&&(E=!0,S(),fc.trace?.(`Collected all ${y.length} expected responses for request ${r}`),p(y))},"checkComplete"),R=setTimeout(()=>{if(!E){E=!0;let y=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),fc.debug?.(`Collection timeout for request ${r}: collected ${y.length}/${o} responses`),p(y)}},this.timeout),S=a(()=>{this.awaitingResponses.delete(r),clearTimeout(R)},"cleanup");this.responseCheckers.set(r,_),(0,oq.sendItcEvent)({type:b_.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{_()}).catch(y=>{E=!0,S(),this.responseCheckers.delete(r),h(new wd("sendItcEvent",y))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,Hl.getWorkerIndex)(),m=f===void 0?"main":`worker-${f}`;for(let[p,h]of d)u.set(`${p}@${m}`,{...h,workerIndex:f});for(let p of l)for(let[h,E]of p.statuses){let _=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${_}`,{...E,workerIndex:p.workerIndex})}return fc.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof wd?fc.error?.(`ITC failure during component status collection: ${r.message}`):fc.warn?.("Failed to collect component status from all threads:",r),fc.debug?.(`Collection failed for request. Error: ${r instanceof Error?r.message:"Unknown error"}`),this.getLocalStatusOnly(t)}}getLocalStatusOnly(t){let r=t.getAllStatuses(),n=new Map,s=(0,Hl.getWorkerIndex)(),i=s===void 0?"main":`worker-${s}`;for(let[o,c]of r)n.set(`${o}@${i}`,{...c,workerIndex:s});return n}cleanup(){this.awaitingResponses.clear(),this.responseCheckers.clear(),this.cleanupTimer&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null)}},Cd=class{static{a(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let o=s.indexOf("@"),c=o!==-1?s.substring(0,o):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let o=this.aggregateComponentGroup(s,i);r.set(s,o)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,o,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",_=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=_;else if(E&&E.startsWith("worker-")){let R=parseInt(E.substring(7));isNaN(R)||(n.workers[R]=_)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==Pe.HEALTHY&&p.message&&(!i||_>s)&&(s=_,i=p.message),p.error&&!o&&(o=p.error)}let u=this.determineOverallStatus(c);if(Array.from(c.keys()).length>1)for(let[m,p]of r)p.status!==u&&l.set(m,{workerIndex:p.workerIndex!==void 0?p.workerIndex:-1,status:p.status,message:p.message,error:p.error});let f={componentName:t,status:u,lastChecked:n,latestMessage:i,error:o};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[Pe.ERROR,Pe.WARNING,Pe.LOADING,Pe.UNKNOWN,Pe.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return Pe.UNKNOWN}},_ae=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),hS=new qp(_ae)});var mc,ES=se(()=>{vN();Ad();BN();pS();mc=class e{static{a(this,"ComponentStatusRegistry")}statusMap=new Map;reset(){this.statusMap=new Map}setStatus(t,r,n,s){if(!t||typeof t!="string")throw new Nd(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Pe).includes(r))throw new Nd(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Pe).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,Pe.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,Pe.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,Pe.WARNING,r)}initializeLoading(t,r){this.setStatus(t,Pe.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,Pe.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,Pe.ERROR,n,r)}getComponentsByStatus(t){let r=[];for(let[n,s]of this.statusMap)s.status===t&&r.push({name:n,status:s});return r}getStatusSummary(){let t={[Pe.HEALTHY]:0,[Pe.ERROR]:0,[Pe.WARNING]:0,[Pe.LOADING]:0,[Pe.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await hS.collect(t);return Cd.aggregate(r)}async getAggregatedStatusFor(t,r){r||(r=await e.getAggregatedFromAllThreads(this));let n=[],s=t+".",i=r.get(t);i&&n.push({key:t,...i});for(let[f,m]of r)f.startsWith(s)&&n.push({key:f,...m});if(n.length===0)return{status:Pe.UNKNOWN,message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}};let o=n.some(f=>f.status===Pe.ERROR),c=n.some(f=>f.status===Pe.LOADING),l=o?Pe.ERROR:c?Pe.LOADING:Pe.HEALTHY,u="All components loaded successfully",d={};if(o||c){u=n.filter(m=>m.status===Pe.ERROR||m.status===Pe.LOADING).map(m=>`${m.key}: ${m.latestMessage||m.status}`).join("; ");for(let m of n)m.status!==Pe.HEALTHY&&(d[m.key]={status:m.status,message:m.latestMessage})}return{status:l,message:u,...Object.keys(d).length>0&&{details:d},lastChecked:n[0]?.lastChecked||{workers:{}}}}}});var hr,_S=se(()=>{ES();hr=new mc});function lq(e){let t=cq.get(e);return t||(t=new FN(e),cq.set(e,t)),t}function uq(){hr.reset()}var FN,cq,lo,dq,fq=se(()=>{_S();Ad();FN=class{static{a(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return hr.setStatus(this.componentName,Pe.HEALTHY,t),this}warning(t){return hr.setStatus(this.componentName,Pe.WARNING,t),this}error(t,r){return hr.setStatus(this.componentName,Pe.ERROR,t,r),this}loading(t){return hr.setStatus(this.componentName,Pe.LOADING,t||"Loading..."),this}unknown(t){return hr.setStatus(this.componentName,Pe.UNKNOWN,t),this}get(){return hr.getStatus(this.componentName)}},cq=new Map;a(lq,"statusForComponent");lo={loading(e,t){hr.initializeLoading(e,t)},loaded(e,t){hr.markLoaded(e,t)},failed(e,t,r){hr.markFailed(e,t,r)}};a(uq,"reset");dq=Pe});var $p={};ye($p,{AggregationError:()=>UN,COMPONENT_STATUS_LEVELS:()=>Pe,ComponentStatus:()=>Id,ComponentStatusError:()=>dc,ComponentStatusOperationError:()=>Nd,ComponentStatusRegistry:()=>mc,CrossThreadCollectionError:()=>xN,CrossThreadStatusCollector:()=>qp,CrossThreadTimeoutError:()=>MN,ITCError:()=>wd,StatusAggregator:()=>Cd,componentStatusRegistry:()=>hr,crossThreadCollector:()=>hS,query:()=>gae});var gae,mq=se(()=>{_S();ES();vN();ES();BN();_S();pS();Ad();gae={get(e){return hr.getStatus(e)},all(){return hr.getAllStatuses()},byStatus(e){return hr.getComponentsByStatus(e)},summary(){return hr.getStatusSummary()},async allThreads(){return mc.getAggregatedFromAllThreads(hr)}}});var kN={};ye(kN,{STATUS:()=>dq,internal:()=>$p,lifecycle:()=>lo,reset:()=>uq,statusForComponent:()=>lq});var Vp=se(()=>{fq();mq()});var Yp=M((lUe,Eq)=>{"use strict";var Es=Q(),Tn=(G(),D(j)),Sae=XB(),Tae=(hs(),D(co)),{validateEvent:HN}=us(),Kp=ms(),yae=require("process"),{resetDatabases:Rae}=(Oe(),D(mt)),bae={[Tn.ITC_EVENT_TYPES.SCHEMA]:Aae,[Tn.ITC_EVENT_TYPES.USER]:hq,[Tn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:wae};async function Aae(e){let t=HN(e);if(t){Es.error(t);return}Es.trace("ITC schemaHandler received schema event:",e),await Sae(e.message),await Iae(e.message)}a(Aae,"schemaHandler");async function Iae(e){try{Kp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Kp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Kp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=Rae();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Es.error(t)}}a(Iae,"syncSchemaMetadata");var pq=[];async function hq(e){try{try{Kp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Kp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Es.warn(r)}let t=HN(e);if(t){Es.error(t);return}Es.trace(`ITC userHandler ${Tn.HDB_ITC_CLIENT_PREFIX}${yae.pid} received user event:`,e),await Tae.setUsersWithRolesCache();for(let r of pq)r()}catch(t){Es.error(t)}}a(hq,"userHandler");hq.addListener=function(e){pq.push(e)};async function wae(e){try{let t=HN(e);if(t){Es.error(t);return}Es.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Vp(),D(kN)),{getWorkerIndex:n}=st(),{sendItcEvent:s}=us(),i=r.componentStatusRegistry.getAllStatuses(),o=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:Tn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:o,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?Es.trace(`Sent component status response directly to thread ${u}`):(u===void 0?Es.debug("No originator threadId, falling back to broadcast"):Es.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){Es.error("Error handling component status request:",t)}}a(wae,"componentStatusRequestHandler");Eq.exports=bae});var us=M((hUe,gq)=>{"use strict";var dUe=Q(),GN=ae(),Nae=(G(),D(j)),{ITC_ERRORS:Wp}=Jr(),{parentPort:fUe,threadId:Cae,isMainThread:Oae,workerData:mUe}=require("worker_threads"),{onMessageFromWorkers:Pae,broadcast:pUe,broadcastWithAcknowledgement:Lae}=st();gq.exports={sendItcEvent:Dae,validateEvent:_q,SchemaEventMsg:vae,UserEventMsg:Mae};var gS;Pae(async(e,t)=>{gS=gS||Yp(),_q(e),gS[e.type]&&await gS[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Dae(e){return!Oae&&e.message&&(e.message.originator=Cae),Lae(e)}a(Dae,"sendItcEvent");function _q(e){if(typeof e!="object")return Wp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||GN.isEmpty(e.type))return Wp.MISSING_TYPE;if(!e.hasOwnProperty("message")||GN.isEmpty(e.message))return Wp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||GN.isEmpty(e.message.originator))return Wp.MISSING_ORIGIN;if(Nae.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Wp.INVALID_EVENT(e.type)}a(_q,"validateEvent");function vae(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(vae,"SchemaEventMsg");function Mae(e){this.originator=e}a(Mae,"UserEventMsg")});var Zo=M((gUe,Rq)=>{"use strict";var Sq=(G(),D(j)),_Ue=ae(),SS=Q(),Tq=MB(),Od,{sendItcEvent:yq}=us();function Uae(e){try{SS.debug("signalSchemaChange called with message:",e),Od=Od||Yp();let t=new Tq(Sq.ITC_EVENT_TYPES.SCHEMA,e);return Od.schema(t),yq(t)}catch(t){SS.error(t)}}a(Uae,"signalSchemaChange");function xae(e){try{SS.trace("signalUserChange called with message:",e),Od=Od||Yp();let t=new Tq(Sq.ITC_EVENT_TYPES.USER,e);return Od.user(t),yq(t)}catch(t){SS.error(t)}}a(xae,"signalUserChange");Rq.exports={signalSchemaChange:Uae,signalUserChange:xae}});function jp(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}function bq(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Hs(e));for(let[r,n]of t)e.has(r)?r.toLowerCase()==="set-cookie"&&e.append?.(r,n,!0):e.set(r,n);return e}var Hs,zp=se(()=>{Hs=class extends Map{static{a(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(jp,"appendHeader");a(bq,"mergeHeaders")});function TS(e,t,r=Fae){let n;return function(...i){return n?n.length*qN>r?t(...i):new Promise((o,c)=>{n.push({args:i,fn(){try{let l=e(...i);o(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,o){setImmediate(()=>{let c=performance.now();qN=(qN*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var wq,Bae,Fae,Aq,kae,$N,Iq,qN,VN=se(()=>{wq=b(ir()),Bae=3e3,Fae=2e4,Aq=0,kae=3e4,$N=3e3,Iq=performance.now()+$N,qN=0;a(TS,"throttle");setInterval(()=>{let e=performance.now();e-Iq-$N>Bae&&Aq+kae<e&&(wq.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"),Aq=e),Iq=e},$N).unref()});var Bq={};ye(Bq,{EVICTED:()=>yl,INVALIDATED:()=>kn,coerceType:()=>RS,makeTable:()=>bS});function bS(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:p}=e,{expirationMS:h,evictionMS:E,audit:_,trackDeletes:R}=e;E??=0;let{attributes:S}=e;S||(S=[]);let y=bI(i,n,l),w,I,H={},X=Promise.resolve(),q,k,z;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(q=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(k=K),K.expiresAt&&(z=K),K.isPrimaryKey&&(H=K);let Y,ce=[],de=[],te=1,Se=2,Ne={},Ke={},$e=864e5,Ir=0,nr,zr,xr,Du=!1,Qc,Bt,si,qa=ql.get(x.REPLICATION_DATABASES);if(Array.isArray(qa)){for(let K of qa)if(K.name===c&&K.replicateTo>=0){si=K.replicateTo;break}}let u_=i.getRange({start:!1,end:!1}).constructor,um=10,d_=6;_&&hm(),Jm(i.env.path,K=>{if(I)return Va(K)});class dm extends Ll{static{a(this,"Updatable")}getUpdatedTime(){return rc.get(this.getRecord())?.version}getExpiresAt(){return rc.get(this.getRecord())?.expiresAt}addTo(g,T){if(typeof T=="number"||typeof T=="bigint")this.set(g,new Pp(T));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(g,T){return this.addTo(g,-T)}}class ve extends Xt{#e;#t;#n;#r;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=_;static databasePath=o;static databaseName=c;static attributes=S;static replicate=p;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=q;static updatedTimeProperty=k;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(g,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)g.intermediateSource=!0,this.sources.unshift(g);else{if(this.sources.some(v=>!v.intermediateSource)){if(this.sources.some(v=>v.name===g.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(g)}I=I||g.get&&(!g.get.reliesOnPrototype||g.prototype.get),w=w||g.load;let C=a(v=>{let A=this.sources;if(A=A.filter(U=>U.intermediateSource&&U[v]&&(!U[v].reliesOnPrototype||U.prototype[v])),A.length>0)if(A.length===1){let U=A[0];return(N,L,$)=>{if(N?.source!==U)return U[v](L,$,N)}}else return(U,N,L)=>{let $=[];for(let W of A){if(U?.source===W)break;$.push(W[v](N,L,U))}return Promise.all($)}},"getApplyToIntermediateSource"),P=this.sources[this.sources.length-1];P.intermediateSource&&(P={});let O=a(v=>{if(P[v]&&(!P[v].reliesOnPrototype||P.prototype[v]))return(A,U,N)=>{if(!A?.source)return P[v](U,N,A)}},"getApplyToCanonicalSource");Ne={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},Ke={put:C("put"),patch:C("patch"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")};let B=P.shouldRevalidateEvents;return(async()=>{let v=!1,A,U=a(async(N,L)=>{let $=N.value,W=N.table?Me[c][N.table]:ve;if(c===Sm&&(N.table===Fu.ROLE_TABLE_NAME||N.table===Fu.USER_TABLE_NAME)&&(v=!0),N.id===void 0&&(N.id=$[W.primaryKey],N.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(N));N.source=g;let J={residencyId:Xc(N.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:N.nodeId,async:!0},F=N.id,he=await W.getResource(F,L,J);switch(N.finished&&await N.finished,N.type){case"put":return B?he._writeInvalidate(F,$,J):he._writeUpdate(F,$,!0,J);case"patch":return B?he._writeInvalidate(F,$,J):he._writeUpdate(F,$,!1,J);case"delete":return he._writeDelete(F,J);case"publish":case"message":return he._writePublish(F,$,J);case"invalidate":return he._writeInvalidate(F,$,J);case"relocate":return he._writeRelocate(F,J);default:Fe.default.error?.("Unknown operation",N.type,N.id)}},"writeUpdate");try{let N=g.subscribe;N&&R==null&&(R=!0);let L={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},$=g.subscribeOnThisThread?g.subscribeOnThisThread((0,Gl.getWorkerIndex)(),L):(0,Gl.getWorkerIndex)()===0,W=N&&$&&await g.subscribe?.(L);if(W){let J;for await(let F of W)try{if(!(F.type==="transaction"?F.writes[0]:F)){Fe.default.error?.("Bad subscription event",F);continue}if(F.source=g,F.type==="end_txn"){J?.resolve();let _e;if(F.localTime&&A!==F.localTime&&F.remoteNodeIds?.length>0&&(_e=a(()=>{let re=[Symbol.for("seq"),F.remoteNodeIds[0]],oe=d.get(re),ge=oe?.nodes;ge||(ge=[]);for(let ie of F.remoteNodeIds.slice(1)){let Ce=ge.find(Be=>Be.id===ie);ge=ge.filter(Be=>Be.id!==ie||Be===Ce),Ce||(Ce={id:ie,seqId:0},ge.push(Ce)),Ce.seqId=Math.max(oe?.seqId??1,F.localTime),ie===J?.nodeId&&(Ce.lastTxnTime=F.timestamp)}let me=Math.max(oe?.seqId??1,F.localTime);Fe.default.trace?.("Received txn",c,me,new Date(me),F.localTime,new Date(F.localTime),F.remoteNodeIds),d.put(re,{seqId:me,nodes:ge})},"updateRecordedSequenceId"),A=F.localTime),F.onCommit){let re=J?J.committed.then(F.onCommit):F.onCommit();_e&&(re?.then?re.then(_e):_e())}else _e&&_e();continue}if(J)if(F.beginTxn)J.resolve();else{J.writePromises.push(U(F,J));continue}!F.timestamp&&F.version&&(F.timestamp=F.version);let ue=bt(F,()=>{if(F.type==="transaction"){let _e=[];for(let re of F.writes)try{_e.push(U(re,F))}catch(oe){throw oe.message+=" writing "+JSON.stringify(re)+" of event "+JSON.stringify(F),oe}return Promise.all(_e)}else if(F.type==="define_schema"){let _e=this.attributes.slice(0),re=!1;for(let oe of F.attributes)_e.find(ge=>ge.name===oe.name)||(_e.push(oe),re=!0);re&&(ze({table:s,database:c,attributes:_e,origin:"cluster"}),Qp.signalSchemaChange(new Xp.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return F.beginTxn?(J=F,J.writePromises=[U(F,F)],new Promise(_e=>{J.resolve=()=>_e(Promise.all(J.writePromises))})):U(F,F)});J&&(J.committed=ue),v&&ue&&!ue?.waitingForUserChange&&(ue.then(()=>Qp.signalUserChange(new Xp.UserEventMsg(process.pid))),ue.waitingForUserChange=!0),F.onCommit&&(ue?ue.then(F.onCommit):F.onCommit())}catch(he){Fe.default.error?.("error in subscription handler",he)}}}catch(N){Fe.default.error?.(N)}})(),this}static get isCaching(){return I}static get shouldRevalidateEvents(){return this.prototype.get!==ve.prototype.get}static getResource(g,T,C){let P=super.getResource(g,T,C);if(this.loadAsInstance===!1&&(T._freezeRecords=!0),g!=null&&this.loadAsInstance!==!1){qi(g);try{if(P.getRecord?.())return P;if(typeof g=="object"&&g&&!Array.isArray(g))throw new Error(`Invalid id ${JSON.stringify(g)}`);let O=!C?.async||i.cache?.get?.(g),B=Br(T),v=B.getReadTxn();if(v?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Bo(g,T,{transaction:v,ensureLoaded:C?.ensureLoaded},O,A=>{if(A?ve._updateResource(P,A):P.#e=null,T.onlyIfCached){if(!P.doesExist())throw new dt.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let U=pn(g,A,T,P);if(U)return B?.disregardReadTxn(),P.#i=!0,T.loadedFromSource=!0,Gs(U,N=>(ve._updateResource(P,N),P))}return P})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(g)),O}}return P}static _updateResource(g,T){g.#r=T,g.#e=T?.value??null,g.#n=T?.version}ensureLoaded(){let g=pn(this.getId(),this.#r,this.getContext());if(g)return this.#i=!0,this.getContext().loadedFromSource=!0,Gs(g,T=>{this.#r=T,this.#e=T.value,this.#n=T.version})}static getNewId(){let g=H?.type;if(g==="String"||g==="ID")return super.getNewId();if(!Bt){let O=i.getEntry(Symbol.for("id_allocation")),B=O?.value,v;if(B&&B.nodeName===server.hostname&&(!Qae(i)||B.pid===process.pid)){let A=B.start,U=B.end;v=A;for(let N of i.getKeys({start:U,end:A,limit:1,reverse:!0}))v=N}else B=P(O?.version??null),v=B.start;Bt=new BigInt64Array([BigInt(v)+1n]),Bt=new BigInt64Array(i.getUserSharedBuffer("id",Bt.buffer)),Bt.maxSafeId=B.end}let T=Number(Atomics.add(Bt,0,1n)),C=g==="Int"?512:1048576;if(T+C>=Bt.maxSafeId){let O=a(B=>{Bt.maxSafeId=T+(g==="Int"?1023:4194303);let v=(g==="Int"?Math.pow(2,31):Math.pow(2,49))-1,A=B?void 0:i.useReadTransaction(),U=Number(Bt[0]);for(let $ of i.getKeys({start:U+1,end:v,limit:1,transaction:A}))v=$;A?.done();let{value:N,version:L}=i.getEntry(Symbol.for("id_allocation"));if(Bt.maxSafeId<v){if(N.end>Bt.maxSafeId-100)return;Fe.default.info?.("New id allocation",T,Bt.maxSafeId,L),i.put(Symbol.for("id_allocation"),{start:N.start,end:Bt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),L)}else{Fe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Bt.maxSafeId}, but id of ${v} detected`);let $=P(L);$.alreadyUpdated||Atomics.store(Bt,0,BigInt($.start+1)),Bt.maxSafeId=$.end}},"updateEnd");T+C===Bt.maxSafeId?setImmediate(O):T+100>=Bt.maxSafeId&&(Fe.default.warn?.(`Synchronous id allocation required on table ${s}${g=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>O(!0)))}return T;function P(O){let B=(g==="Int"?Math.pow(2,31):Math.pow(2,49))-1,v=B/4,A,U,N=!1,L,$;do{L=Math.floor(Math.random()*B),$={start:L,end:L+(g==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},A=0;for(let W of i.getKeys({start:L,limit:1,reverse:!0}))A=W;U=B;for(let W of i.getKeys({start:L+1,end:B,limit:1}))U=W;v*=.875,v<1e3&&!N&&(N=!0,Fe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${g==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,L,A,U,v))}while(!(v<U-L&&(v<L-A||A===0)));return i.transactionSync(()=>{let W=i.getEntry(Symbol.for("id_allocation"));return(W?.version??null)==O?(Fe.default.info?.("Allocated new id range",$),i.put(Symbol.for("id_allocation"),$,Date.now()),$):(Fe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...W.value})})}}static setTTLExpiration(g){if(typeof g=="number")h=g*1e3,E||(E=0);else if(g&&typeof g=="object")h=g.expiration*1e3,E=(g.eviction||0)*1e3,$e=g.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");$e=$e||(h+E)/4,Va()}static getResidencyRecord(g){return d.get([Symbol.for("residency_by_id"),g])}static setResidency(g){ve.getResidency=g&&((T,C)=>{try{return g(T,C)}catch(P){throw P.message+=` in residency function for table ${s}`,P}})}static setResidencyById(g){ve.getResidencyById=g&&(T=>{try{return g(T)}catch(C){throw C.message+=` in residency function for table ${s}`,C}})}static getResidency(g,T){if(ve.getResidencyById)return ve.getResidencyById(g[t]);let C=si;if(T.replicateTo!=null){if(Array.isArray(T.replicateTo))return T.replicateTo.includes(server.hostname)?T.replicateTo:[server.hostname,...T.replicateTo];T.replicateTo>=0&&(C=T.replicateTo)}if(C>=0&&server.nodes){let P=[server.hostname];if(T.previousResidency)P.push(...T.previousResidency.slice(0,C));else{let O=server.nodes.map(A=>A.name),B=Math.floor(O.length*Math.random());P.push(...O.slice(B,B+C));let v=B+C-O.length;v>0&&P.push(...O.slice(0,v))}return P}}static enableAuditing(){_||(_=!0,hm(),ve.audit=!0)}static coerceId(g){return g===""?null:RS(g,H)}static async dropTable(){delete Me[c][s];for(let g of i.getRange({versions:!0,snapshot:!1,lazy:!0}))g.metadataFlags&Zr&&g.value&&Za(g.value);if(c===o){for(let g of S)d.remove(ve.tableName+"/"+g.name),r[g.name]?.drop();d.remove(ve.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),YN.default.unlinkSync(i.env.path);Qp.signalSchemaChange(new Xp.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(g){let T=this.constructor;if(typeof g=="string"&&T.loadAsInstance!==!1)return this.getProperty(g);if(fm(g))return this.search(g);if(g&&g.id===void 0&&!g.toString()){let C={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?ve.getRecordCount().then(P=>(C.recordCount=P.recordCount,C.estimatedRecordRange=P.estimatedRange,C)):C}if(g!==void 0&&T.loadAsInstance===!1){let C=this.getContext(),P=Br(C),O=P.getReadTxn();if(O?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let B=Ps(g);qi(B);let v=!0;return g.checkPermission&&(v=this.allowRead(C.user,g)),Gs(Gs(v,A=>{if(!A)throw new dt.AccessViolation(C.user);let U=!0;return Bo(B,C,{transaction:O,ensureLoaded:U},!1,N=>{if(C.onlyIfCached){if(!N?.value)throw new dt.ServerError("Entry is not cached",504)}else if(U){let L=pn(B,N,C);if(L)return P?.disregardReadTxn(),C.loadedFromSource=!0,L.then($=>$?.value)}return N?.value})}),A=>{let U=g?.select;return U&&A!=null?ad(U,this.constructor)(A):A})}if(g?.property)return this.getProperty(g.property);if(this.doesExist()||g?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(g,T){let C=Dn(g,T);if(C?.read){if(C.isSuperUser)return!0;let P=C.attribute_permissions,O=T?.select;if(P?.length>0||Du&&O){if(T||(T={}),O){let B=Array.isArray(O)?O:[O],v=P?.length>0&&KN(P,"read");T.select=B.map(A=>{let U=A.name||A;if(!v||v[U]){let N=xr[U]?.definition?.tableClass;if(N){if(A.name||(A={name:A}),!A.checkPermission&&T.checkPermission&&(A.checkPermission=T.checkPermission),!N.prototype.allowRead.call(null,g,A))return!1;if(!A.select)return A.name}return A}}).filter(Boolean)}else T.select=P.filter(B=>B.read&&!xr[B.attribute_name]).map(B=>B.attribute_name);return T}else return!0}}allowUpdate(g,T,C){let P=Dn(g,C);if(P?.update){let O=P.attribute_permissions;if(O?.length>0){let B=KN(O,"update");for(let v in T)if(!B[v])return!1;for(let v of O){let A=v.attribute_name;!v.update&&!(A in T)&&(T[A]=this.getProperty(A))}}return $a(this.getContext())}}allowCreate(g,T,C){if(this.isCollection){let P=Dn(g,C);if(P?.insert){let O=P.attribute_permissions;if(O?.length>0){let B=KN(O,"insert");for(let v in T)if(!B[v])return!1;return $a(this.getContext())}else return $a(this.getContext())}}else return this.allowUpdate(g,{})}allowDelete(g,T){return Dn(g,T)?.delete&&$a(this.getContext())}update(g,T){let C,P=typeof T=="boolean"||T===void 0&&(g==null||typeof g=="object"&&!(g instanceof URLSearchParams)),O=!1;P?(O=T,T=g,C=this.getId()):C=Ps(g);let B=this.getContext();if(!Br(B))throw new Error("Can not update a table resource outside of a transaction");if(T===!1)return this;if(typeof T=="object"&&T)if(O)Object.isFrozen(T)&&(T={...T}),this.#e={},this.#t=T;else if(P){let A=this.#t;A&&(T=Object.assign(A,T)),this.#t=T}else{let A=!0;if(g==null)throw new TypeError("Can not put a record without a target");return g.checkPermission&&(A=this.allowUpdate(B.user,T,g)),Gs(A,U=>{if(!U)throw new dt.AccessViolation(B.user);return Gs(i.get(Ps(g)),N=>{let L=new dm(N);return L._setChanges(T),this._writeUpdate(C,L.getChanges(),!1),L})})}return this._writeUpdate(C,this.#t,O),this}addTo(g,T){if(typeof T=="number"||typeof T=="bigint")this.#s===Cq?this.set(g,(+this.getProperty(g)||0)+T):(this.#s||this.update(),this.set(g,new Pp(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(g,T){if(typeof T=="number")return this.addTo(g,-T);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#r}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(g){this.#t=g}setRecord(g){this.#e=g}invalidate(g){let T=!0,C=this.getContext();return g?.checkPermission&&(T=this.allowDelete(C.user,g,C)),Gs(T,P=>{if(!P)throw new dt.AccessViolation(C.user);this._writeInvalidate(g?Ps(g):this.getId())})}_writeInvalidate(g,T,C){let P=this.getContext();qi(g),Br(this.getContext()).addWrite({key:g,store:i,invalidated:!0,entry:this.#r,before:Ne.invalidate?.bind(this,P,g),beforeIntermediate:xu(T,Ke.invalidate?.bind(this,P,g)),commit:a((B,v)=>{if(!(Fr(B,v,C?.nodeId)<=0)){T??=null;for(let A in r)T||(T={}),T[A]===void 0&&(T[A]=this.getProperty(A));Fe.default.trace?.(`Invalidating entry in ${s} id: ${g}, timestamp: ${new Date(B).toISOString()}`),y(g,T,v,B,kn,_,{user:P?.user,residencyId:C?.residencyId,nodeId:C?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(g,T){let C=this.getContext();qi(g),Br(this.getContext()).addWrite({key:g,store:i,invalidated:!0,entry:this.#r,before:Ne.relocate?.bind(this,C,g),beforeIntermediate:Ke.relocate?.bind(this,C,g),commit:a((O,B)=>{if(Fr(O,B,T?.nodeId)<=0)return;let v=ve.getResidencyRecord(T.residencyId),A=0,U=null,N=B?.value;if(v&&!v.includes(server.hostname)){for(let L in r)U||(U={}),U[L]=N[L];A=kn}else U=N;Fe.default.trace?.(`Relocating entry id: ${g}, timestamp: ${new Date(O).toISOString()}`),y(g,U,B,O,A,_,{user:C.user,residencyId:T.residencyId,nodeId:T.nodeId,expiresAt:T.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(g,T){if(this.getResidencyById)return!1;let C={previousResidency:this.getResidencyRecord(g.residencyId),isRelocation:!0},P=Ka(this.getResidency(T.value,C)),O;if(P){if(!P.includes(server.hostname))return!1;O=Xc(P)}let B=0;Fe.default.debug?.("Performing a relocate of an entry",g.key,T.value,P);let v=y(g.key,T.value,g,g.version,B,!0,{residencyId:O,expiresAt:T.expiresAt},"relocate",!1,null);return!0}static evict(g,T,C){let P=this.Source,O;if(!((I||_)&&(!T||(O=i.getEntry(g),!O||!T)||O.version!==C))){if(I){if(i.hasLock(g,O.version))return;let B;for(let v in r)B||(B={}),B[v]=T[v];if(B)return y(g,B,O,C,yl,null,null,null,!0)}return i.ifVersion(g,C,()=>{vu(g,T,null)}),Tl(i,O??i.getEntry(g),C)}}lock(){throw new Error("Not yet implemented")}static operation(g,T){return g.table||=s,g.schema||=c,global.operation(g,T)}put(g,T){if(T===void 0||T instanceof URLSearchParams)this.update(g,!0);else{let C=!0;if(g==null)throw new TypeError("Can not put a record without a target");let P=this.getContext();return g.checkPermission&&(C=this.allowUpdate(P.user,T,g)),Gs(C,O=>{if(!O)throw new dt.AccessViolation(P.user);if(Array.isArray(T))for(let B of T){let v=B[t];this._writeUpdate(v,B,!0)}else{let B=Ps(g);this._writeUpdate(B,T,!0)}})}}create(g,T){let C=!0,P=this.getContext();if(!T&&!(g instanceof URLSearchParams)&&(T=g,g=void 0),!T||typeof T!="object"||Array.isArray(T))throw new TypeError("Can not create a record without an object");return g?.checkPermission&&(C=this.allowCreate(P.user,T,g)),Gs(C,O=>{if(!O)throw new dt.AccessViolation(P.user);let B=Ps(g)??T[t];if(B===void 0)B=this.constructor.getNewId(),T[t]=B;else if(i.get(B))throw new dt.ClientError("Record already exists",409);return this._writeUpdate(B,T,!0),T})}patch(g,T){if(T===void 0||T instanceof URLSearchParams)this.update(g,!1);else{let C=this.update(g,T);if(C?.then)return C.then(()=>{})}}_writeUpdate(g,T,C,P){let O=this.getContext(),B=Br(O);qi(g);let v=this.#r??i.getEntry(g);this.#s=C?Cq:Wae;let A=a(N=>C?N.put?()=>N.put(O,g,T):null:N.patch?()=>N.patch(O,g,T):N.put?()=>N.put(O,g,Dl(this)):null,"writeToSources"),U={key:g,store:i,entry:v,nodeName:O?.nodeName,validate:a(N=>{T||(T=this.#t),C||T&&Zg(this.#t===T?this:T)?O?.source||(B.checkOverloaded(),this.validate(T,!C),k&&(T[k.name]=k.type==="Date"?new Date(N):k.type==="String"?new Date(N).toISOString():N),C&&(t&&T[t]!==g&&(T[t]=g),q&&(v?.value?T[q.name]=v?.value[q.name]:T[q.name]=q.type==="Date"?new Date(N):q.type==="String"?new Date(N).toISOString():N),T=Dl(T))):B.removeWrite(U)},"validate"),before:A(Ne),beforeIntermediate:xu(T,A(Ke)),commit:a((N,L,$)=>{if($){if(O&&L?.version>(O.lastModified||0)&&(O.lastModified=L.version),this.#r=L,L?.value&&L.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");C||(this.#e=L?.value??null)}this.#t=void 0,this.#n=N;let W=L?.value,J;this.#s=0;let F=!1,he=Fr(N,L,P?.nodeId),ue,_e=C?"put":"patch",re;P?.residencyId!=null&&(re=P.residencyId);let oe=O?.expiresAt??(h?h+Date.now():-1);if(he<=0){if(_){let ie=L.localTime,Ce=L.version;Fe.default.trace?.("Applying CRDT update to record with id: ",g,"txn time",new Date(N),"applying later update from:",new Date(Ce),"local recorded time",new Date(ie));let Be=[];for(;ie>N||Ce>=N&&ie>0;){let He=l.get(ie);if(!He)break;let Te=At(He);if(Ce=Te.version,Ce>=N){if(Ce===N){if(he=Fr(N,{version:Ce,localTime:ie},P?.nodeId),he===0)return me(!1);if(he>0){ie=Te.previousLocalTime;continue}}if(Te.type==="patch")Be.push(Te),ue=T;else if(Te.type==="put"||Te.type==="delete")return me(!1)}ie=Te.previousLocalTime}ie||Fe.default.debug?.("No further audit history, applying incremental updates based on available history",g,"existing version preserved",L),Be.sort((He,Te)=>He.version-Te.version);for(let He of Be){let Te=He.getValue(i);if(Fe.default.debug?.("Rebuilding update with future patch:",new Date(He.version),Te,He),J=j_(J??T,Te,C),!J)return me(!1)}}else{if(C)return me(!1);J=j_(J??T,W,C),Fe.default.debug?.("Rebuilding update without audit:",J)}Fe.default.trace?.("Rebuilt record to save:",J," is full update:",C)}let ge;if(C&&!J?ge=T:this.constructor.loadAsInstance===!1?ge=Dl(W,J??T):(this.#e=W,ge=Dl(this,J??T)),this.#e=ge,ge&&ge.getRecord)throw new Error("Can not assign a record to a record, check for circular references");if(re==null){v?.residencyId&&(O.previousResidency=ve.getResidencyRecord(v.residencyId));let ie=Ka(ve.getResidency(ge,O));if(ie&&!ie.includes(server.hostname))if(ue??=ge,F=!0,ve.getResidencyById)ge=void 0;else{ge=null;for(let Ce in r)ge||(ge={}),ge[Ce]=ue[Ce]}re=Xc(ie)}C||(ue=T),Fe.default.trace?.(`Saving record with id: ${g}, timestamp: ${new Date(N).toISOString()}${oe?", expires at: "+new Date(oe).toISOString():""}${L?", replaces entry from: "+new Date(L.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(ge).slice(0,100)}catch{return""}})()),vu(g,W,ge),me(!0),O.expiresAt&&Va();function me(ie){y(g,ie?ge:void 0,ie?L:{...L,value:void 0},N,F?kn:0,_,{omitLocalRecord:F,user:O?.user,residencyId:re,expiresAt:oe,nodeId:P?.nodeId,originatingOperation:O?.originatingOperation,tableToTrack:c==="system"?null:s},_e,!1,ie?ue:ue??T)}a(me,"writeCommit")},"commit")};B.addWrite(U)}async delete(g){if(fm(g)){g.select=["$id"];for await(let T of this.search(g))this._writeDelete(T.$id);return!0}if(g){let T=!0,C=this.getContext();return g.checkPermission&&(T=this.allowDelete(C.user,g,C)),Gs(T,P=>{if(!P)throw new dt.AccessViolation(C.user);let O=Ps(g);return this._writeDelete(O),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(g,T){let C=Br(this.getContext());qi(g);let P=this.getContext();return C.addWrite({key:g,store:i,entry:this.#r,nodeName:P?.nodeName,before:Ne.delete?.bind(this,P,g),beforeIntermediate:Ke.delete?.bind(this,P,g),commit:a((O,B,v)=>{let A=B?.value;v&&(P&&B?.version>(P.lastModified||0)&&(P.lastModified=B.version),ve._updateResource(this,B)),!(Fr(O,B,T?.nodeId)<=0)&&(vu(this.getId(),A),Fe.default.trace?.(`Deleting record with id: ${g}, txn timestamp: ${new Date(O).toISOString()}`),_||R?(y(g,null,B,O,0,_,{user:P?.user,nodeId:T?.nodeId,tableToTrack:s},"delete"),_||Va()):Tl(i,B))},"commit")}),!0}search(g){let T=this.getContext(),C=Br(T);if(!g)throw new Error("No query provided");if(g.parseError)throw g.parseError;if(g.checkPermission&&!this.allowRead(T.user,g))throw new dt.AccessViolation(T.user);T&&(T.lastModified=$ae);let P=g.conditions;P?P.length===void 0&&(P=P[Symbol.iterator]?Array.from(P):[P]):P=Array.isArray(g)?g:g[Symbol.iterator]?Array.from(g):[];let O=g.id??this.getId();O&&(P=[{attribute:null,comparator:Array.isArray(O)?"prefix":"starts_with",value:O}].concat(P));let B,v={};function A(oe,ge){let me;switch(ge){case"and":case void 0:if(oe.length<1)throw new Error('An "and" operator requires at least one condition');me=!0;break;case"or":if(oe.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ge)}for(let ie of oe){if(ie.conditions){ie.conditions=A(ie.conditions,ie.operator);continue}let Ce=ie[0]??ie.attribute,Be=Ce==null?H:Ji(S,Ce);if(Be)(Be.type||II[ie.comparator])&&(ie[1]===void 0?ie.value=N(ie.value,Be):ie[1]=N(ie[1],Be));else if(Ce!=null&&!g.allowConditionsOnDynamicAttributes)throw(0,dt.handleHDBError)(new Error,`${Ce} is not a defined attribute`,404);if(ie.chainedConditions)if(ie.chainedConditions.length===1&&(!ie.operator||ie.operator=="and")){let He=ie.chainedConditions[0],Te,pt;if(He.comparator==="gt"||He.comparator==="greater_than"||He.comparator==="ge"||He.comparator==="greater_than_equal"?(Te=ie,pt=He):(Te=He,pt=ie),Te.comparator!=="lt"&&Te.comparator!=="less_than"&&Te.comparator!=="le"&&Te.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Nt=pt.comparator==="ge"||pt.comparator==="greater_than_equal",Ft=Te.comparator==="le"||Te.comparator==="less_than_equal";ie.comparator=(Nt?"ge":"gt")+(Ft?"le":"lt"),ie.value=[pt.value,Te.value]}else throw new Error("Multiple chained conditions are not currently supported")}return oe}a(A,"prepareConditions");function U(oe,ge){if(g.enforceExecutionOrder)return oe;for(let me of oe)me.conditions&&(me.conditions=U(me.conditions,me.operator));return oe.length>1&&ge!=="or"?Hae(oe,Cg(ve)):oe}a(U,"orderConditions");function N(oe,ge){return Array.isArray(oe)?oe.map(me=>RS(me,ge)):RS(oe,ge)}a(N,"coerceTypedValues");let L=g.operator;(P.length>0||L)&&(P=A(P,L));let $=typeof g.sort=="object"&&g.sort,W;if($&&L!=="or"){let oe=$.attribute;if(oe==null)throw new dt.ClientError("Sort requires an attribute");if(B=P.find(ge=>sd(ge.attribute)===sd(oe)),!B){let ge=Ji(S,oe);if(!ge)throw(0,dt.handleHDBError)(new Error,`${Array.isArray(oe)?oe.join("."):oe} is not a defined attribute`,404);if(ge.indexed)B={...$,comparator:"sort"},P.push(B);else if(P.length===0&&!g.allowFullScan)throw(0,dt.handleHDBError)(new Error,`${Array.isArray(oe)?oe.join("."):oe} is not indexed and not combined with any other conditions`,404)}B&&(B.descending=!!$.descending)}P=U(P,L),$&&(B&&P[0]===B?$.next&&(W={dbOrderedAttribute:$.attribute,attribute:$.next.attribute,descending:$.next.descending,next:$.next.next}):(B&&P.splice(P.indexOf(B),1),W=$));let J=g.select;if(P.length===0&&(P=[{attribute:t,comparator:"greater_than",value:!0}]),g.explain)return{conditions:P,operator:L,postOrdering:W,selectApplied:!!J};let F=C.useReadTxn(),he=wI(P,L,ve,F,g,T,(oe,ge)=>pm(oe,J,T,F,ge),v),ue=g.ensureLoaded!==!1,_e=ve.transformEntryForSelect(J,T,F,v,ue,!0),re=ve.transformToOrderedSelect(he,J,W,T,F,_e);return(g.offset||g.limit!==void 0)&&(re=re.slice(g.offset,g.limit!==void 0?(g.offset||0)+g.limit:void 0)),re.onDone=()=>{re.onDone=null,C.doneReadTxn()},re.selectApplied=!0,re.getColumns=()=>{if(J){let oe=[];for(let ge of J)ge==="*"?oe.push(...S.map(me=>me.name)):oe.push(ge.name||ge);return oe}return S.filter(oe=>!oe.computed&&!oe.relationship).map(oe=>oe.name)},re}static transformToOrderedSelect(g,T,C,P,O,B){let v=new u_;if(C){g=pm(g,T,P,O,null);let A;v.iterate=function(){let N,L=g[Symbol.asyncIterator]?g[Symbol.asyncIterator]():g[Symbol.iterator](),$,W=C.dbOrderedAttribute,J,F,he=!0;function ue(re){let oe=re.next&&ue(re.next),ge=re.descending;return P.sort=re,(me,ie)=>{let Ce=Mu(me,re.attribute,P),Be=Mu(ie,re.attribute,P),He=ge?(0,$l.compareKeys)(Be,Ce):(0,$l.compareKeys)(Ce,Be);return He===0?oe?.(me,ie)||0:He}}a(ue,"createComparator");let _e=ue(C);return{async next(){let re;if(N)if(re=N.next(),re.done){if($)return v.onDone&&v.onDone(),re}else return{value:await B.call(this,re.value)};A=[],J&&A.push(J);do if(re=await L.next(),re.done){if($=!0,A.length)break;return v.onDone&&v.onDone(),re}else{let oe=re.value;if(oe?.then&&(oe=await oe),W){let ge=Mu(oe,W,P);if(he)he=!1,F=ge;else if(ge!==F){F=ge,J=oe;break}}A.push(oe)}while(!0);return C.isGrouped,A.sort(_e),N=A[Symbol.iterator](),re=N.next(),re.done?(v.onDone&&v.onDone(),re):{value:await B.call(this,re.value)}},return(){return v.onDone&&v.onDone(),L.return()},throw(){return v.onDone&&v.onDone(),L.throw()}}};let U=a(N=>{if(typeof T=="object"&&Array.isArray(N.attribute))for(let L=0;L<T.length;L++){let $=T[L],W;if($.name===N.attribute[0]){for(W=$.sort||($.sort={});W.next;)W=W.next;W.attribute=N.attribute.slice(1),W.descending=N.descending}else $===N.attribute[0]&&(T[L]=W={name:$,sort:{attribute:N.attribute.slice(1),descending:N.descending}})}N.next&&U(N.next)},"applySortingOnSelect");U(C)}else v.iterate=(g[Symbol.asyncIterator]||g[Symbol.iterator]).bind(g),v=v.map(function(A){try{let U=B.call(this,A);return typeof U?.catch=="function"?U.catch(N=>{throw N.partialObject={[t]:A.key},N}):U}catch(U){throw U.partialObject={[t]:A.key},U}});return v}static transformEntryForSelect(g,T,C,P,O,B){let v;O&&I&&!(typeof g=="string"?[g]:g)?.every(N=>{let L;return typeof N=="object"?L=N.name:L=N,r[L]||L===t})&&(v=!0);let A,U=a(function(N){let L;if(T?.transaction?.stale&&(T.transaction.stale=!1),N!=null){if(L=N.deref?N.deref():N.value,!L&&(N.key===void 0||N.deref)||N.metadataFlags&kn){if(N.metadataFlags&kn&&T.replicateFrom===!1&&B&&N.residencyId)return hc.SKIP;if(N=Bo(N.key??N,T,{transaction:C,lazy:g?.length<4,ensureLoaded:O},this?.isSync,$=>$),N?.then)return N.then(U.bind(this));L=N?.value}if(v&&N?.metadataFlags&(kn|yl)||N?.expiresAt!=null&&N?.expiresAt<Date.now()){if(T.onlyIfCached)return{[t]:N.key,message:"This entry has expired"};let $=pn(N.key??N,N,T);if($?.then)return $.then(U)}}if(L==null)return B?hc.SKIP:L;if(g&&!(g[0]==="*"&&g.length===1)){let $,W=a((F,he)=>{let ue;typeof F=="object"?ue=F.name:ue=F;let _e=xr?.[ue],re;if(_e){let oe=P?.[ue];if(oe)if(oe.hasMappings){let me=_e.from?L[_e.from]:sd(N.key);re=oe.get(me),re||(re=[])}else re=oe.fromRecord?.(L);else re=_e(L,T,N,!0);let ge=a(me=>{if(_e.directReturn)return he(me,ue);if(me&&typeof me=="object"){let ie=_e.definition?.tableClass||ve;A||(A={});let Ce=A[ue]||(A[ue]=ie.transformEntryForSelect(ue===F?null:F.select||(Array.isArray(F)?F:null),T,C,oe,O));if(Array.isArray(me)){let Be=[],He=ie.transformToOrderedSelect(me,F.select,typeof F.sort=="object"&&F.sort,T,C,Ce)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Te=a(Nt=>{for(;!Nt.done;){if(Nt?.then)return Nt.then(Te);Be.push(Nt.value),Nt=He.next()}he(Be,ue)},"nextValue"),pt=Te(He.next());pt&&($||($=[]),$.push(pt));return}else if(me=Ce.call(this,me),me?.then){$||($=[]),$.push(me.then(Be=>he(Be,ue)));return}}he(me,ue)},"handleResolvedValue");re?.then?($||($=[]),$.push(re.then(ge))):ge(re);return}else re=L[ue],re&&typeof re=="object"&&ue!==F&&(re=ve.transformEntryForSelect(F.select||F,T,C,null)({value:re}));he(re,ue)},"selectAttribute"),J;if(typeof g=="string")W(g,F=>{J=F});else if(Array.isArray(g))if(g.asArray)J=[],g.forEach((F,he)=>{F==="*"?g[he]=L:W(F,ue=>J[he]=ue)});else{J={};let F=g.forceNulls;for(let he of g)if(he==="*")for(let ue in L)J[ue]=L[ue];else W(he,(ue,_e)=>{ue===void 0&&F&&(ue=null),J[_e]=ue})}else throw new dt.ClientError("Invalid select"+g);return $?Promise.all($).then(()=>J):J}return L},"transform");return U}async subscribe(g){if(!l)throw new Error("Can not subscribe to a table without an audit log");_||ze({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),g||(g={});let T=!g.rawEvents,C=[],P=vI(ve,this.getId()??null,function(v,A,U,N){try{let L=A.getValue?.(i,T),$=A.type;if(!L&&$==="patch"&&T){let J=i.getEntry(v);J?.version===A.version?L=J.value:L=A.getValue?.(i,!0,U),$="put"}let W={id:v,localTime:U,value:L,version:A.version,type:$,beginTxn:N};C?C.push(W):(c!=="system"&&We(A.size??1,"db-message",s,null),this.send(W))}catch(L){Fe.default.error?.(L)}},g.startTime||0,g),O=(async()=>{this.isCollection&&(P.includeDescendants=!0,g.onlyChildren&&(P.onlyChildren=!0)),g.supportsTransactions&&(P.supportsTransactions=!0);let v=this.getId(),A=g.previousCount;A>1e3&&(A=1e3);let U=g.startTime;if(this.isCollection){if(U){if(A)throw new dt.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:N,value:L}of l.getRange({start:U,exclusiveStart:!0,snapshot:!1})){let $=At(L);if($.tableId!==n)continue;let W=$.recordId;if(v==null||Dq(v,W)){let J=$.getValue(i,T,N);if(B({id:W,localTime:N,value:J,version:$.version,type:$.type,size:$.size}),P.queue?.length>Pq&&await P.waitForDrain()===!1)return}P.startTime=N}}else if(A){let N=[];for(let{key:L,value:$}of l.getRange({start:"z",end:!1,reverse:!0}))try{let W=At($);if(W.tableId!==n)continue;let J=W.recordId;if(v==null||Dq(v,J)){let F=W.getValue(i,T,L);if(N.push({id:J,localTime:L,value:F,version:W.version,type:W.type}),--A<=0)break}}catch(W){Fe.default.error("Error getting history entry",L,W)}for(let L=N.length;L>0;)B(N[--L]);N[0]&&(P.startTime=N[0].localTime)}else if(!g.omitCurrent){for(let{key:N,value:L,version:$,localTime:W,size:J}of i.getRange({start:v??!1,end:v==null?void 0:[v,$l.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(L&&(B({id:N,localTime:W,value:L,version:$,type:"put",size:J}),P.queue?.length>Pq&&await P.waitForDrain()===!1))return}}else{A&&!U&&(U=0);let N=this.#r?.localTime;if(N===RI&&(i.cache?.delete(v),this.#r=i.getEntry(v),Fe.default.trace?.("re-retrieved record",N,this.#r?.localTime),N=this.#r?.localTime),Fe.default.trace?.("Subscription from",U,"from",v,N),U<N){let L=[],$=N;do{let W=l.get($);if(W){g.omitCurrent=!0;let J=At(W),F=J.getValue(i,T,$);T&&(J.type="put"),L.push({id:v,value:F,localTime:$,...J}),$=J.previousLocalTime}else break;A&&A--}while($>U&&A!==0);for(let W=L.length;W>0;)B(L[--W]);P.startTime=N}!g.omitCurrent&&this.doesExist()&&B({id:v,localTime:N,value:this.#e,version:this.#n,type:"put"})}for(let N of C)B(N);C=null})();function B(v){c!=="system"&&We(v.size??1,"db-message",s,null),P.send(v)}return a(B,"send"),g.listener&&P.on("data",g.listener),P}static subscribeOnThisThread(g,T){return g===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(g,T,C){if(T===void 0||T instanceof URLSearchParams)this._writePublish(this.getId(),g,T);else{let P=!0,O=this.getContext();return g.checkPermission&&(P=this.allowCreate(O.user,g,O)),Gs(P,B=>{if(!B)throw new dt.AccessViolation(O.user);let v=Ps(g);this._writePublish(v,T,C)})}}_writePublish(g,T,C){let P=Br(this.getContext());g??=null,g!==null&&qi(g);let O=this.getContext();P.addWrite({key:g,store:i,entry:this.#r,nodeName:O?.nodeName,validate:a(()=>{O?.source||(P.checkOverloaded(),this.validate(T))},"validate"),before:Ne.publish?.bind(this,O,g,T),beforeIntermediate:xu(T,Ke.publish?.bind(this,O,g,T)),commit:a((B,v,A)=>{v===void 0&&R&&!_&&Va(),Fe.default.trace?.(`Publishing message to id: ${g}, timestamp: ${new Date(B).toISOString()}`),y(g,v?.value??null,v,v?.version||B,0,!0,{user:O?.user,residencyId:C?.residencyId,expiresAt:O?.expiresAt,nodeId:C?.nodeId,tableToTrack:s},"message",!1,T)},"commit")})}validate(g,T){let C,P=a((O,B,v)=>{if(B.type&&O!=null)if(T&&O.__op__&&(O=O.value),B.properties){typeof O!="object"&&(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be an object${B.type?" ("+B.type+")":""}`);let A=B.properties;for(let U=0,N=A.length;U<N;U++){let L=A[U];if(L.relationship||L.computed){g.hasOwnProperty(L.name)&&(C||(C=[])).push(`Computed property ${v}.${L.name} may not be directly assigned a value`);continue}let $=P(O[L.name],L,v+"."+L.name);$&&(O[L.name]=$)}if(B.sealed&&O!=null&&typeof O=="object")for(let U in O)A.find(N=>N.name===U)||(C||(C=[])).push(`Property ${U} is not allowed within object in property ${v}`)}else switch(B.type){case"Int":(typeof O!="number"||O>>0!==O)&&(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(A=>typeof A=="string")||(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be a string`);break;case"Boolean":typeof O!="boolean"&&(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be a bigint`)}break;case"Bytes":if(!(O instanceof Uint8Array)){if(typeof O=="string")return Buffer.from(O);(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(O instanceof vs)){if(typeof O=="string"&&(O=Buffer.from(O)),O instanceof Buffer)return createBlob(O,{type:"text/plain"});(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be a Blob`)}break;case"array":if(Array.isArray(O)){if(B.elements)for(let A=0,U=O.length;A<U;A++){let N=O[A],L=P(N,B.elements,v+"[*]");L&&(O[A]=L)}}else(C||(C=[])).push(`Value ${qs(O)} in property ${v} must be an Array`);break}B.nullable===!1&&O==null&&(C||(C=[])).push(`Property ${v} is required (and not does not allow null values)`)},"validateValue");for(let O=0,B=S.length;O<B;O++){let v=S[O];if(v.relationship||v.computed){Object.hasOwn(g,v.name)&&(C||(C=[])).push(`Computed property ${v.name} may not be directly assigned a value`);continue}if(!T||v.name in g){let A=P(g[v.name],v,v.name);A!==void 0&&(g[v.name]=A)}}if(f)for(let O in g)S.find(B=>B.name===O)||(C||(C=[])).push(`Property ${O} is not allowed`);if(C)throw new dt.ClientError(C.join(". "))}getUpdatedTime(){return this.#n}wasLoadedFromSource(){return I?!!this.#i:void 0}static async addAttributes(g){let T=S.slice(0);for(let C of g){if(!C.name)throw new dt.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new dt.ClientError("Attribute names cannot include backticks or forward slashes");Gae(C.name),T.push(C)}return ze({table:s,database:c,schemaDefined:u,attributes:T}),ve.indexingOperation}static async removeAttributes(g){let T=S.filter(C=>!g.includes(C.name));return ze({table:s,database:c,schemaDefined:u,attributes:T}),ve.indexingOperation}static getSize(){let g=i.getStats();return(g.treeBranchPageCount+g.treeLeafPageCount+g.overflowPages)*g.pageSize}static getAuditSize(){let g=l?.getStats();return g&&(g.treeBranchPageCount+g.treeLeafPageCount+g.overflowPages)*g.pageSize}static getStorageStats(){let g=i.env.path,T=YN.default.statfsSync?.(g)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(g){let T=i.getStats().entryCount,C=1e3/2,P=performance.now(),O=Math.floor(T/2),B=g?.exactCount,v=0,A=0,U;for(let{value:N}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(N!=null&&v++,A++,await pc(),!B&&A<O&&performance.now()-P>C){U=A;break}if(U){let N=v;v=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:U,snapshot:!1}))re!=null&&v++,await pc();let L=U*2,$=(v+N)/L,W=Math.pow((v-N+1)/U/2,2)+$*(1-$)/L,J=Math.max(Math.sqrt(W)*T,1),F=Math.round($*T),he=Math.max(F-1.96*J,v+N),ue=Math.min(F+1.96*J,T),_e=Math.pow(10,Math.round(Math.log10(J)));return _e>F&&(_e=_e/10),v=Math.round(F/_e)*_e,{recordCount:v,estimatedRange:[Math.round(he),Math.round(ue)]}}return{recordCount:v}}static updatedAttributes(){xr=this.propertyResolvers={$id:a((g,T,C)=>({value:C.key}),"$id"),$updatedtime:a((g,T,C)=>C.version,"$updatedtime"),$updatedTime:a((g,T,C)=>C.version,"$updatedTime"),$expiresAt:a((g,T,C)=>C.expiresAt,"$expiresAt"),$record:a((g,T,C)=>C?{value:g}:g,"$record"),$distance:a((g,T,C)=>C&&(C.distance??T?.vectorDistances?.get(C)),"$distance")};for(let g of this.attributes){g.isPrimaryKey&&(H=g),g.resolve=null;let T=g.relationship,C=g.computed;if(T)if(g.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),C&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Du=!0,T.to)g.elements?.definition?(xr[g.name]=g.resolve=(P,O,B,v)=>{let A=P[T.from?T.from:t],U=g.elements.definition.tableClass;return v?nd({attribute:T.to,value:A},Br(O).getReadTxn(),!1,U,!1).map(N=>N&&N.key!==void 0?N:U.primaryStore.getEntry(N,{transaction:Br(O).getReadTxn()})).asArray:U.search([{attribute:T.to,value:A}],O).asArray},g.set=()=>{},g.resolve.definition=g.elements.definition,g.resolve.to=T.to,T.from&&(g.resolve.from=T.from)):console.error(`The one-to-many/many-to-many relationship property "${g.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(T.from){let P=g.definition||g.elements?.definition;P?(xr[g.name]=g.resolve=(O,B,v,A)=>{let U=O[T.from];if(U===void 0)return;if(g.elements){let L,$=U?.map(W=>{let J=P.tableClass.primaryStore[A?"getEntry":"get"](W,{transaction:Br(B).getReadTxn()});return J?.then&&(L=!0),ve.loadAsInstance===!1&&Object.freeze(A?J?.value:J),J});return T.filterMissing?L?Promise.all($).then(W=>W.filter(vq)):$.filter(vq):L?Promise.all($):$}let N=P.tableClass.primaryStore[A?"getEntry":"get"](U,{transaction:Br(B).getReadTxn()});return ve.loadAsInstance===!1&&Object.freeze(A?N?.value:N),N},g.set=(O,B)=>{if(Array.isArray(B)){let v=B.map(A=>A.getId?.()||A[P.tableClass.primaryKey]);O[T.from]=v}else{let v=B.getId?.()||B[P.tableClass.primaryKey];O[T.from]=v}},g.resolve.definition=g.definition||g.elements?.definition,g.resolve.from=T.from):console.error(`The relationship property "${g.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${g.name}" in table "${s}" must use either "from" or "to" arguments`);else if(C)typeof C.from=="function"&&this.setComputedAttribute(g.name,C.from),xr[g.name]=g.resolve=(P,O,B)=>{let v=typeof C.from=="string"?P[C.from]:P,A=this.userResolvers[g.name];if(A)return A(v,O,B);Fe.default.warn(`Computed attribute "${g.name}" does not have a function assigned to it. Please use setComputedAttribute('${g.name}', resolver) to assign a resolver function.`),this.userResolvers[g.name]=()=>{}},g.resolve.directReturn=!0;else if(r[g.name]?.customIndex?.propertyResolver){let P=r[g.name].customIndex;xr[g.name]=(O,B,v)=>{let A=O[g.name];return P.propertyResolver(A,B,v)},xr[g.name].directReturn=!0}}Lp(this,this),Lp(dm,this,!0);for(let g of S){let T=g.name;g.resolve&&(Object.defineProperty(i.encoder.structPrototype,T,{get(){return g.resolve(this,od.getStore())},set(C){return g.set(this,C)},configurable:!0,enumerable:g.enumerable}),g.enumerable&&!i.encoder.structPrototype.toJSON&&Object.defineProperty(i.encoder.structPrototype,"toJSON",{configurable:!0,value(){let C={};for(let P in this)C[P]=this[P];return C}}))}}static setComputedAttribute(g,T){let C=Ji(S,g);if(!C){console.error(`The attribute "${g}" does not exist in the table "${s}"`);return}if(!C.computed){console.error(`The attribute "${g}" is not defined as computed in the table "${s}"`);return}this.userResolvers[g]=T}static async deleteHistory(g=0,T=!1){let C;for(let{key:P,value:O}of l.getRange({start:0,end:g}))await pc(),At(O).tableId===n&&(C=mg(l,P,O));if(T)for(let P of i.getRange({start:0,versions:!0})){let{key:O,value:B,localTime:v}=P;await pc(),B===null&&v<g&&(C=Tl(i,P))}await C}static async*getHistory(g=0,T=1/0){for(let{key:C,value:P}of l.getRange({start:g||1,end:T})){await pc();let O=At(P);O.tableId===n&&(yield{id:O.recordId,localTime:C,version:O.version,type:O.type,value:O.getValue(i,!0,C),user:O.user,operation:O.originatingOperation})}}static async getHistoryOfRecord(g){let T=[];if(g==null)throw new Error("An id is required");let C=i.getEntry(g);if(!C)return T;let P=C.localTime;if(!P)throw new Error("The entry does not have a local audit time");let O=0;do{await pc();let B=l.get(P);if(B){let v=At(B);T.push({id:v.recordId,localTime:P,version:v.version,type:v.type,value:v.getValue(i,!0,P),user:v.user}),P=v.previousLocalTime}else break}while(O<1e3&&P);return T.reverse()}static cleanup(){Y?.remove()}}let f_=TS(async(K,g,T)=>{for(let C of ve.sources)if(C.get&&(!C.get.reliesOnPrototype||C.prototype.get)){if(C.available?.(T)===!1)continue;g.source=C;let P=await C.get(K,g);if(P)return P}},()=>{throw new dt.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});ve.updatedAttributes();let Vb=ve.prototype;return h&&ve.setTTLExpiration(h/1e3),z&&m_(),ve;function vu(K,g,T){let C;for(let P in r){let O=r[P],B=O.isIndexing,v=xr[P],A=T&&(v?v(T):T[P]),U=g&&(v?v(g):g[P]);if(A===U&&!B)continue;if(O.customIndex){O.customIndex.index(K,A,U);continue}C=!0;let N=O.indexNulls,L=(0,Jp.getIndexedValues)(A,N),$=(0,Jp.getIndexedValues)(U,N);if($?.length>0){let W=new Set($);if(L=L?L.filter(J=>{if(W.has(J))W.delete(J);else return!0}):[],$=Array.from(W),($.length>0||L.length>0)&&Nq){let J=$.concat(L).map(F=>({key:F,value:K}));O.prefetch(J,Lq)}for(let J=0,F=$.length;J<F;J++)O.remove($[J],K)}else L?.length>0&&Nq&&O.prefetch(L.map(W=>({key:W,value:K})),Lq);if(L)for(let W=0,J=L.length;W<J;W++)O.put(L[W],K)}return C}a(vu,"updateIndices");function qi(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>Oq)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)throw new Error("Invalid primary key of null");break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,$l.writeKey)(K,jae,0)>Oq)throw new Error("Primary key size is too large: "+K.length);return!0}a(qi,"checkValidId");function Ps(K){return typeof K=="object"&&K?K.id:K}a(Ps,"requestTargetToId");function fm(K){return typeof K=="object"&&K&&K.isCollection}a(fm,"isSearchTarget");function mm(K){}a(mm,"isRequestTarget");function Bo(K,g,T,C,P){if(ve.getResidencyById&&T.ensureLoaded&&g?.replicateFrom!==!1){let B=Ka(ve.getResidencyById(K));if(B&&!B.includes(server.hostname)&&w)return w({key:K,residency:B}).then(P)}let O=a(()=>{if(g?.transaction?.stale&&(g.transaction.stale=!1),T.transaction?.isDone)return P(null,K);let B=i.getEntry(K,T);return(c!=="system"||s==="hdb_analytics")&&(xq.default.trace?.("Recording db-read action for",`${c}.${s}`),We(B?.size??1,"db-read",s,null)),g?._freezeRecords&&Object.freeze(B?.value),B?.residencyId&&B.metadataFlags&kn&&w&&T.ensureLoaded&&g?.replicateFrom!==!1?w(B).then(v=>P(v,K),v=>(Fe.default.error?.("Error loading remote record",K,B,T,v),P(null,K))):(B&&g&&(B?.version>(g.lastModified||0)&&(g.lastModified=B.version),B?.localTime&&!g.lastRefreshed&&(g.lastRefreshed=B.localTime)),P(B,K))},"whenPrefetched");return C?O():te>0?(te--,O()):new Promise((B,v)=>{te===0?(te--,i.prefetch([K],()=>{A(),U()})):(ce.push(K),de.push(U),ce.length>d_&&(te--,A()));function A(){if(ce.length>0){let N=de;i.prefetch(ce,()=>{te===-1?A():te++;for(let L of N)L()}),ce=[],de=[],Se>2&&Se--}else te=Se,Se<um&&Se++}a(A,"prefetch");function U(){try{B(O())}catch(N){v(N)}}a(U,"load")})}a(Bo,"loadLocalRecord");function Dn(K,g){let T=g?.checkPermission;if(typeof T!="object"){if(!K?.role)return;T=K.role.permission}if(T.super_user)return zae;let C=T[c],P,O=C?.tables;if(O)return O[s];if(c==="data"&&(P=T[s])&&!P.tables)return P}a(Dn,"getTablePermissions");function pn(K,g,T,C){if(I){let P=!1;if(T.noCache?P=!0:(g?(!g.value||g.metadataFlags&(kn|yl)||g.expiresAt!=null&&g.expiresAt<Date.now())&&(P=!0):P=!0,tn(!P,"cache-hit",s)),P){let O=Uu(K,g,T).then(B=>(B?.value&&B?.value.getRecord?.()&&Fe.default.error?.("Can not assign a record that is already a resource"),T&&(B?.version>(T.lastModified||0)&&(T.lastModified=B.version),T.lastRefreshed=Date.now()),B));if(T?.onlyIfCached||g?.value&&C?.allowStaleWhileRevalidate?.(g,K)){if(O.catch(B=>Fe.default.warn?.(B)),T?.onlyIfCached&&!C.doesExist())throw new dt.ServerError("Entry is not cached",504);return}else return O}}else if(g?.value&&g.expiresAt!=null&&g.expiresAt<Date.now())return ve.evict(g.key,g.value,g.version),g.value=null,{then(P){return P(g)}}}a(pn,"ensureLoadedFromSource");function Br(K){let g=K?.transaction;if(g){if(!g.lmdbDb)return g.lmdbDb=i,g;do{if(g.lmdbDb?.path===i.path)return g;let T=g.next;if(!T)return g=g.next=new Ho,g.lmdbDb=i,g;g=T}while(!0)}else return new K_}a(Br,"txnForContext");function Mu(K,g,T){if(!K)return;let C=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof g=="object"){let O=xr,B=C;for(let v=0,A=g.length;v<A;v++){let U=g[v],N=O?.[U];B=N&&B?N(B,T,K):B?.[U],K=null,O=N?.definition?.tableClass?.propertyResolvers}return B}let P=xr[g];return P?P(C,T,K):C[g]}a(Mu,"getAttributeValue");function pm(K,g,T,C,P){let O=P?.length,B={transaction:C,lazy:O>0||typeof g=="string"||g?.length<4,alwaysPrefetch:!0},v;function A(U,N){let L=U?.value;if(!L)return hc.SKIP;for(let $=0;$<O;$++)if(!v?.includes($)&&!P[$](L,U))return hc.SKIP;return N!==void 0&&(U.key=N),U}if(a(A,"processEntry"),O>0||!K.hasEntries){let U=K.map(N=>{if(v=null,typeof N=="object"&&N?.key!==void 0)return O>0?A(N):N;if(N==null)return hc.SKIP;for(let L=0;L<O;L++){let W=P[L].idFilter;if(W){if(!W(N))return hc.SKIP;v||(v=[]),v.push(L)}}return Bo(N,T,B,!1,A)});return Array.isArray(K)&&(U=U.filter(N=>N!==hc.SKIP)),U.hasEntries=!0,U}return K}a(pm,"transformToEntries");function Fr(K,g,T=server.replication?.getThisNodeId(l)){if(K<=g?.version){if(g?.version===K&&T!==void 0){let C=server.replication?.exportIdMapping(l),P=g.localTime,O=P&&l.get(P);if(O){let B,v,A=At(O);for(let U in C)C[U]===T&&(B=U),C[U]===A.nodeId&&(v=U);if(B>v)return 1;if(B===v)return 0}}return-1}return 1}a(Fr,"precedesExistingVersion");async function Uu(K,g,T){let C=g?.metadataFlags,P=g?.version,O,B;if(!i.attemptLock(K,P,()=>{clearTimeout(B);let N=i.getEntry(K);!N||!N.value||N.metadataFlags&(kn|yl)?O(Uu(K,i.getEntry(K),T)):O(N)}))return new Promise(N=>{O=N,B=setTimeout(()=>{i.unlock(K,P)},Yae)});let v=g?.value,A={requestContext:T,replacingRecord:v,replacingEntry:g,replacingVersion:P,noCacheStore:!1,source:null,resourceCache:T?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},U=T?.responseHeaders;return new Promise((N,L)=>{let $;Gs(bt(A,async W=>{let J=performance.now(),F,he,ue;try{F=await f_(K,A,g),ue=C&kn;let re=A.lastModified||ue&&P;re||(re=(0,Jp.getNextMonotonicTime)()),he=ue||re>P||!v;let oe=performance.now()-J;if(We(oe,"cache-resolution",s,null,"success"),U&&jp(U,"Server-Timing",`cache-resolve;dur=${oe.toFixed(2)}`,!0),W.timestamp=re,h&&A.expiresAt==null&&(A.expiresAt=Date.now()+h),F){if(typeof F!="object")throw new Error("Only objects can be cached and stored in tables");if(F.status>0&&F.headers)if(F.status>=300)if(F.status===304)F=v,re=P;else throw new dt.ServerError(F.body||"Error from source",F.status);else F=F.body;typeof F.toJSON=="function"&&(F=F.toJSON()),t&&F[t]!==K&&(F[t]=K)}$=!0,N({key:K,version:re,value:F})}catch(re){re.message+=` while resolving record ${K} for ${s}`,v&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!T?.mustRevalidate||T?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(N({key:K,version:P,value:v}),Fe.default.trace?.(re.message,"(returned stale record)")):L(re);let oe=performance.now()-J;We(oe,"cache-resolution",s,null,"fail"),U&&jp(U,"Server-Timing",`cache-resolve;dur=${oe.toFixed(2)}`,!0),A.transaction.abort();return}if(T?.noCacheStore||A.noCacheStore){A.transaction.abort();return}Br(A).addWrite({key:K,store:i,entry:g,nodeName:"source",before:xu(F),commit:a((re,oe)=>{if(oe?.version!==P)return;let ge=vu(K,v,F);if(F){Ke.put?.(A,K,F),oe&&(T.previousResidency=ve.getResidencyRecord(oe.residencyId));let me,ie=!1,Ce,Be=Ka(ve.getResidency(F,T));if(Be){if(!Be.includes(server.hostname))if(me=F,ie=!0,ve.getResidencyById)F=void 0;else{F=null;for(let He in r)F||(F={}),F[He]=me[He]}Ce=Xc(Be)}Fe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),y(K,F,oe,re,ie?kn:0,_&&(he||ie)||null,{user:A?.user,expiresAt:A.expiresAt,residencyId:Ce,tableToTrack:s},"put",!!ue,me)}else oe&&(Ke.delete?.(A,K),Fe.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),_||R?y(K,null,oe,re,0,_&&he||null,{user:A?.user,tableToTrack:s},"delete",!!ue):Tl(i,oe,P))},"commit")})}),()=>{i.unlock(K,P)},W=>{i.unlock(K,P),$&&Fe.default.error?.("Error committing cache update",W)})})}a(Uu,"getFromSource");function $a(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new dt.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new dt.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}a($a,"checkContextPermissions");function Va(K){let g=!1;if(K&&(K-Ir>1&&(g=!0),Ir=K),!($e===nr&&!g)&&(nr=$e,(0,Gl.getWorkerIndex)()===(0,Gl.getWorkerCount)()-1))return zr&&clearTimeout(zr),$e?new Promise(T=>{let C=new Date;C.setMonth(0),C.setDate(1),C.setHours(0),C.setMinutes(0),C.setSeconds(0);let P=$e/(1+Ir),O=g?Date.now():Math.ceil((Date.now()-C.getTime())/P)*P+C.getTime(),B=a(v=>{Fe.default.trace?.(`Scheduled next cleanup scan at ${new Date(v)}`),zr=setTimeout(()=>X=X.then(async()=>{if(B(Math.max(v+$e,Date.now())),i.rootStore.status!=="open"){clearTimeout(zr);return}let A=50,U=new Array(A),N=0,L=Math.pow(Ir,8)*(ql.get(x.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),$=E/Math.pow(Math.max(Ir,1),4);Fe.default.debug?.(`Starting cleanup scan for ${s}, evict threshold ${L}, adjusted eviction ${$}ms`);function W(J,F,he,ue){let _e=J+$-Date.now();if(_e<0)return!0;if(Ir){let re=i.lastSize;return he&Zr&&ll(ue,oe=>{oe.size&&(re+=oe.size)}),Fe.default.trace?.(`shouldEvict adjusted ${_e} ${re}, ${_e*(J-F)/re} < ${L}`),_e*(J-F)/re<L}return!1}a(W,"shouldEvict");try{let J=0;for(let F of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:he,value:ue,version:_e,expiresAt:re,metadataFlags:oe}=F,ge;ue===null&&!_&&_e+Kae<Date.now()?ge=Tl(i,F,_e):re!=null&&W(re,_e,oe,ue)&&(ge=ve.evict(he,ue,_e),J++),ge&&(await U[N],U[N]=ge.catch(me=>{Fe.default.error?.("Cleanup error",me)}),++N>=A&&(N=0)),await pc()}Fe.default.debug?.(`Finished cleanup scan for ${s}, evicted ${J} entries`)}catch(J){Fe.default.warn?.(`Error in cleanup scan for ${s}:`,J)}T(void 0),Ir=0}),Math.min(v-Date.now(),2147483647)).unref()},"startNextTimer");B(O)}):void 0}a(Va,"scheduleCleanup");function hm(){Y=l?.addDeleteRemovalCallback(n,i,(K,g)=>{i.remove(K,g)})}a(hm,"addDeleteRemoval");function m_(){(0,Gl.getWorkerIndex)()===0&&setInterval(async()=>{if(!Qc){Qc=!0;try{let K=z.name,g=r[K];if(!g)throw new Error(`expiresAt attribute ${z} must be indexed`);for(let T of g.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let C of g.getValues(T)){let P=i.getEntry(C);P?.value?P.value[K]<Date.now()&&ve.evict(C,P.value,P.version):i.ifVersion(C,P?.version,()=>g.remove(T,C))}await pc()}}catch(K){Fe.default.error?.("Error in evicting old records",K)}finally{Qc=!1}}},Vae).unref()}a(m_,"runRecordExpirationEviction");function Ka(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let g=server.shards?.get?.(K);if(g)return Fe.default.trace?.(`Shard ${K} mapped to ${g.map(T=>T.name).join(", ")}`),g.map(T=>T.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}a(Ka,"residencyFromFunction");function Xc(K){if(K){let g=K.join(","),T=d.get([Symbol.for("residency_by_set"),g]);return T||(d.put([Symbol.for("residency_by_set"),g],T=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),T],K),T)}}a(Xc,"getResidencyId");function xu(K,g){let T=YA(K,i.rootStore);if(T){let C=g;return C?async()=>{await C(),await T}:()=>T}return g}a(xu,"preCommitBlobsForRecordBefore")}function KN(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 Lq(){}function RS(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;try{switch(r){case"Int":case"Long":if(e[0]==="$")return yS(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return yS(+e);case"Float":return e==="null"?null:yS(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return(0,Pd.autoCastBooleanStrict)(e);case"Date":if(isNaN(e)){if(e==="null")return null;Jae.test(e)||(e+="Z");let n=new Date(e);return yS(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,Pd.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function yS(e){if(isNaN(e))throw new SyntaxError;return e}function Dq(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t||t.startsWith?.(e);if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function Gs(e,t,r){return e?.then?e.then(t,r):t(e)}function vq(e){return e!=null}function qs(e){try{return JSON.stringify(e)}catch{return e}}function Qae(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var hc,Jp,Mq,Uq,ql,dt,Qp,Xp,Fe,$l,Gl,Pd,YN,xq,Hae,Gae,qae,$ae,Vae,Kae,Nq,Yae,Cq,Wae,kn,yl,jae,Oq,Pq,zae,HUe,Jae,pc,Lg=se(()=>{G();hc=require("lmdb"),Jp=b(xn()),Mq=b(require("lodash")),Uq=b(Bm());Qi();km();ql=b(fe());MI();dt=b(Ee()),Qp=b(Zo()),Xp=b(us());Oe();Pg();Fe=b(ir());qw();Qa();$l=require("ordered-binary"),Gl=b(st());Ki();Pd=b(ae());El();os();z_();zp();YN=b(require("node:fs"));is();lg();xq=b(Q());VN();({sortBy:Hae}=Mq.default),{validateAttribute:Gae}=Uq.default,qae=new Uint8Array(9);qae[8]=192;$ae=1/0,Vae=6e4,Kae=864e5;ql.initSync();Nq=ql.get(x.STORAGE_PREFETCHWRITES),Yae=1e4,Cq=1,Wae=2,kn=1,yl=8,jae=Buffer.allocUnsafeSlow(8192),Oq=1978,Pq=100,zae={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},HUe=(0,Pd.convertToMS)(ql.get(x.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(bS,"makeTable");a(KN,"attributesAsObject");a(Lq,"noop");Jae=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(RS,"coerceType");a(yS,"rejectNaN");a(Dq,"isDescendantId");pc=a(()=>new Promise(setImmediate),"rest");a(Gs,"when");a(vq,"exists");a(qs,"stringify");a(Qae,"hasOtherProcesses")});function AS(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,o=t[s]||0,c=i-o;r+=c*c}return r}function IS(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let o=0;o<i;o++){let c=e[o]||0,l=t[o]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var Fq=se(()=>{a(AS,"euclideanDistance");a(IS,"cosineDistance")});var kq,Hq,Dd,uo,Ld,Xae,Zae,wS,Gq=se(()=>{Fq();kq=require("msgpackr"),Hq=b(ir()),Dd=b(Ee()),uo=(0,Hq.loggerWithTag)("HNSW"),Ld=Symbol.for("entryPoint"),Xae=Symbol.for("key"),Zae=10,wS=class{static{a(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=kq.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?AS:IS,r&&(r.M!==void 0&&(this.M=r.M,this.mL=1/Math.log(this.M)),r.efConstruction!==void 0&&(this.efConstruction=this.efConstructionSearch=r.efConstruction),r.efConstructionSearch!==void 0&&(this.efConstructionSearch=r.efConstructionSearch),r.mL!==void 0&&(this.mL=r.mL),r.optimizeRouting!==void 0&&(this.optimizeRouting=r.optimizeRouting))}index(t,r,n){let s=typeof t=="number"?[Xae,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let o=new Map,c,l=this.indexStore.get(Ld);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f==null){let E=Math.floor(-Math.log(Math.random())*this.mL),_={vector:r,level:E,primaryKey:t};for(let R=0;R<=E;R++)_[R]=[];if(this.indexStore.put(i,_),typeof i!="number")throw new Error("Invalid nodeId: "+i);uo.debug?.("setting entry point to",i),this.indexStore.put(Ld,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),Zae),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);uo.debug?.("setting entry point to",i),this.indexStore.put(Ld,i)}for(;p>m;){let E=this.searchLayer(r,l,f,this.efConstruction,p);E.length>0&&(l=E[0].id,f=E[0].node),p--}let h=new Array(m+1);for(let E=0;E<=m;E++)h[E]=[];for(let E=Math.min(m,p);E>=0;E--){let _=this.searchLayer(r,l,f,this.efConstruction,E);_=_.slice(0,this.M<<1),_.length===0&&E===0&&uo.info?.("should not have zero connections for",l);let R=h[E];for(let S=0;S<_.length;S++){let{id:y,distance:w,node:I}=_[S];if(y===i)continue;let H=[];if(this.optimizeRouting){let k=!1,z=I[E],Y=1+this.optimizeRouting*(1+.5*S/this.M);for(let ce=0;ce<z?.length;ce++){let{id:de,distance:te}=z[ce],Se=1+this.optimizeRouting*(1+.5*ce/this.M);for(let Ne=0;Ne<R.length;Ne++){let{id:Ke,distance:$e}=R[Ne];if(Ke===de){w*Y>$e+te?k=!0:te*Se>w+$e&&(H.push({fromId:Ke,toId:y}),H.push({fromId:y,toId:Ke}));break}}if(k)break}if(k)continue}else if(S>=(E>0?this.M:this.M<<1))continue;R.push({id:y,distance:w});for(let{fromId:k,toId:z}of H){let Y=d(k);Y||(Y=d(k,this.indexStore.get(k)));for(let ce=0;ce<Y[E].length;ce++)if(Y[E][ce].id===z){Object.isFrozen(Y[E])&&(Y[E]=Y[E].slice()),Y[E].splice(ce,1);break}}let X=c[E],q=X?.find(({id:k})=>k===y);if(q){let k=X?.indexOf(q);X.copied||(X=[...X],X.copied=!0,c[E]=X),X.splice(k,1)}else this.addConnection(y,d(y,I),i,E,w,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...h})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m]?.[0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:p,value:h}of this.indexStore.getRange({start:0,end:1/0}))if(h.level>m){if(l=p,h.level===f)break;m=h.level}}if(l===void 0)this.indexStore.remove(Ld);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);uo.debug?.("setting entry point to",l),this.indexStore.put(Ld,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:p}of m){let h=d(p,this.indexStore.get(p));if(h)for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:_})=>_!==i),h[E]?.length===0&&(uo.info?.("node was left orphaned, will reindex",p),u.set(h.primaryKey,h.vector))}}function d(f,m){let p=o.get(f);return!p&&m&&(p={...m},o.set(f,p)),p}a(d,"updateNode");for(let[f,m]of o)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(Ld);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,o=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((p,h)=>p.distance-h.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:p}of m[i]||[]){if(c.has(p)||p===void 0)continue;c.add(p);let h=this.indexStore.get(p);if(!h)continue;this.nodesVisitedCount++;let E=o(t,h.vector);if(E<f||u.length<s){let _={id:p,distance:E,node:h};l.push(_),u.push(_)}}u.sort((p,h)=>p.distance-h.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let o=0;switch(i){case"lt":case"le":o=r;case"sort":break;default:throw new 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=IS;else if(s==="euclidean")c=AS;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 o&&(d=d.filter(f=>f.distance<o)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let o=this.indexStore.get(i);if(!o){uo.info?.("could not find neighbor node",o);continue}o[n]?.find(({id:l})=>l==t)||uo.info?.("asymmetry detected",o[n])}n++}}addConnection(t,r,n,s,i,o){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){uo.debug?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=o(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=o(f.id,m),m[s]=m[s].filter(({id:p})=>p!==t),s===0&&m[s].length===0&&uo.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?uo.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let o=s.shift(),c=this.indexStore.get(o);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let o=this.distance;s.type&&(o=s.distance==="euclidean"?AS:IS);let c=o(s.target,t);return i.set(n,c),c}return t}}});var WN,qq=se(()=>{Gq();WN={HNSW:wS}});var mt={};ye(mt,{NON_REPLICATING_SYSTEM_TABLES:()=>NS,database:()=>gd,databaseEnvs:()=>sa,databases:()=>Me,dropDatabase:()=>Ww,dropTableMeta:()=>ice,getDatabases:()=>lt,getDefaultCompression:()=>MS,getTables:()=>tce,onRemovedDB:()=>ih,onUpdatedTable:()=>Vl,readMetaDb:()=>Zp,resetDatabases:()=>Bd,table:()=>ze,tables:()=>yn});function sh(e,t){let r=DS.OpenDBIObject??DS.default.OpenDBIObject;return new r(e,t)}function tce(){return LS||lt(),yn||{}}function lt(){if(LS)return Me;LS=!0,Ud=new Map;let e=(0,Zt.getHdbBasePath)()&&(0,Ht.join)((0,Zt.getHdbBasePath)(),tl),t=(0,Zt.get)(x.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Zt.get)(x.STORAGE_PATH)||e&&((0,_s.existsSync)(e)?e:(0,Ht.join)((0,Zt.getHdbBasePath)(),T_)),!!e){if((0,_s.existsSync)(e))for(let r of(0,_s.readdirSync)(e,{withFileTypes:!0})){let n=(0,Ht.basename)(r.name,".mdb");r.isFile()&&(0,Ht.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Zp((0,Ht.join)(e,r.name),null,n)}if((0,_s.existsSync)((0,Md.getBaseSchemaPath)())){for(let r of(0,_s.readdirSync)((0,Md.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Ht.join)((0,Md.getBaseSchemaPath)(),r.name),s=(0,Ht.join)((0,Md.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,_s.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Ht.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Ht.join)(s,i.name);Zp((0,Ht.join)(n,i.name),(0,Ht.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,_s.existsSync)(s))for(let o of(0,_s.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,Ht.extname)(o.name).toLowerCase()===".mdb"&&Zp((0,Ht.join)(s,o.name),(0,Ht.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,Ht.join)(c.path,(0,Ht.basename)(o+".mdb"));(0,_s.existsSync)(l)&&Zp(l,o,r,null,!0)}}for(let r in Me){let n=Ud.get(r);if(n){let s=Me[r];r.includes("delete")&&Cr.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Cr.trace(`delete table class ${i}`),delete s[i])}else if(delete Me[r],r==="data"){for(let s in yn)delete yn[s];delete yn[vS]}}if((0,Zt.get)(x.ANALYTICS_REPLICATE)===!1?NS.includes("hdb_analytics")||NS.push("hdb_analytics"):(Me.system?.hdb_analytics?.enableAuditing(),Me.system?.hdb_analytics_hostname?.enableAuditing()),Me.system)for(let r of NS)Me.system[r]&&(Me.system[r].replicate=!1);return Ud=null,Me}}function Bd(){LS=!1;for(let[,e]of sa)e.needsDeletion=!0;lt();for(let[e,t]of sa)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),sa.delete(e);let r=Me[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete Me[t.databaseName],th.forEach(i=>i(t.databaseName));break}}return Me}function Zp(e,t,r=JN,n,s){let i=new jN.default(e,!1);try{let o=sa.get(e);o?o.needsDeletion=!1:(o=(0,xd.open)(i),sa.set(e,o));let c=new sh(!1),l=o.dbisDb||(o.dbisDb=o.openDB(CS.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,_s.existsSync)(n)&&(i.path=n,u=(0,xd.open)(i),u.isLegacy=!0):u=fg(o));let d=Wq(r),f=d[vS],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,_]=p.toString().split("/");_===""?_=h.name:_||(_=E,E=t,h.name||(h.name=_,h.indexed=!h.is_hash_attribute)),f?.add(E);let R=m.get(E);R||m.set(E,R={attributes:[]}),(_==null||h.is_hash_attribute)&&(R.primary=h),_!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:_}=h;if(!_){for(let te of E)if(te.is_hash_attribute||te.isPrimaryKey){_=te;break}if(!_){Cr.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let R=d[p],S={},y=[],w,I,H=typeof _.audit=="boolean"?_.audit:(0,Zt.get)(x.LOGGING_AUDITLOG),X=_.trackDeletes,q=_.expiration,k=_.eviction,z=_.sealed,Y=_.splitSegments,ce=_.replicate;if(R)S=R.indices,y=R.attributes,R.schemaVersion++;else{w=_.tableId,w?w>=(l.get(vd)||0)&&(l.putSync(vd,w+1),Cr.info(`Updating next table id (it was out of sync) to ${w+1} for ${p}`)):(_.tableId=w=l.get(vd),w||(w=1),Cr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(vd,w+1),l.putSync(_.key,_));let te=new sh(!_.is_hash_attribute,_.is_hash_attribute);if(te.compression=_.compression,te.compression){let Se=(0,Zt.get)(x.STORAGE_COMPRESSION_THRESHOLD)||Yq;te.compression.threshold=Se}I=wg(o.openDB(_.key,te),o),o.databaseName=r,I.tableId=w}let de;for(let te of E){te.attribute=te.name;try{if(!te.is_hash_attribute&&(te.indexed||te.attribute&&!te.name)){if(!S[te.name]){let Ne=zq(te.key,o,te);S[te.name]=Ne,S[te.name].indexNulls=te.indexNulls}let Se=y.find(Ne=>Ne.name===te.name);Se?y.splice(y.indexOf(Se),1,te):y.push(te),de=!0}}catch(Se){Cr.error("Error trying to update attribute",te,y,S,Se)}}for(let te of y)if(!E.find(Ne=>Ne.name===te.name)){if(te.is_hash_attribute){Cr.error("Unable to remove existing primary key attribute",te);continue}te.indexed&&(y.splice(y.indexOf(te),1),de=!0)}if(R)de&&(R.schemaVersion++,R.updatedAttributes());else{R=jq(d,p,bS({primaryStore:I,auditStore:u,audit:H,sealed:z,splitSegments:Y,replicate:ce,expirationMS:q&&q*1e3,evictionMS:k&&k*1e3,trackDeletes:X,tableName:p,tableId:w,primaryKey:_.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:_.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let te of eh)te(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Wq(e){let t=Me[e];if(t||(e==="data"?t=Me[e]=yn:e==="system"?Object.defineProperty(Me,"system",{value:t=Object.create(null),configurable:!0}):t=Me[e]=Object.create(null)),Ud&&!Ud.has(e)){let r=new Set;t[vS]=r,Ud.set(e,r)}return t}function jq(e,t,r){return e[t]=r,r}function gd({database:e,table:t}){e||(e=JN),lt();let r=Wq(e),n=(0,Ht.join)((0,Zt.getHdbBasePath)(),tl),s=(0,Zt.get)(x.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,Zt.get)(x.STORAGE_PATH)||((0,_s.existsSync)(n)?n:(0,Ht.join)((0,Zt.getHdbBasePath)(),T_));let o=(0,Ht.join)(n,(i?t:e)+".mdb"),c=sa.get(o);if(!c||c.status==="closed"){let l=new jN.default(o,!1);c=(0,xd.open)(l),sa.set(o,c)}return c.auditStore||(c.auditStore=fg(c)),c}async function Ww(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,sa.delete(r.path),r.status==="open"&&(await r.close(),await rh.remove(r.path));if(r||(r=gd({database:e,table:null}),r.status==="open"&&(await r.close(),await rh.remove(r.path))),e==="data"){for(let n in yn)delete yn[n];delete yn[vS]}delete Me[e],th.forEach(n=>n(e)),await KA(r)}function zq(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&WN[r.indexed.type]?.useObjectStore,s=new sh(!n,n),i=t.openDB(e,s);if(r.indexed.type){let o=WN[r.indexed.type];o?i.customIndex=new o(i,r.indexed):Cr.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function ze(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:o,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=JN);let h=gd({database:r,table:t}),E=Me[r];Cr.trace(`Defining ${t} in ${r}`);let _=E?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let R,S,y;m==null&&(m=!0);let w=new sh(!1);for(let Y of o)Y.attribute&&!Y.name?(Y.name=Y.attribute,Y.indexed=!0):Y.attribute=Y.name,Y.expiresAt&&(Y.indexed=!0);let I,H;if(_){if(R=_.primaryKey,_.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=_.splitSegments),_.attributes.splice(0,_.attributes.length,...o)}else{let Y=h.auditStore;S=o.find(Se=>Se.isPrimaryKey)||{},R=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=MS(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,Zt.get)(x.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),u??=!1,S.splitSegments=u,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),p&&(S.origins?S.origins.includes(p)||S.origins.push(p):S.origins=[p]),Cr.trace(`${t} table loading, opening primary store`);let ce=new sh(!1,!0);ce.compression=S.compression;let de=t+"/";if(y=h.dbisDb=h.openDB(CS.INTERNAL_DBIS_NAME,w),z(),y.get(de))return H&&H(),Bd(),ze(e);let te=wg(h.openDB(de,ce),h);h.databaseName=r,te.tableId=y.get(vd),Cr.trace(`Assigning new table id ${te.tableId} for ${t}`),te.tableId||(te.tableId=1),y.put(vd,te.tableId+1),S.tableId=te.tableId,_=jq(E,t,bS({primaryStore:te,auditStore:Y,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:R,tableName:t,tableId:te.tableId,databasePath:r,databaseName:r,indices:{},attributes:o,schemaDefined:m,dbisDB:y})),_.schemaVersion=1,I=!0,y.put(de,S)}let X=_.indices;y=y||(h.dbisDb=h.openDB(CS.INTERNAL_DBIS_NAME,w)),_.dbisDB=y;let q=[];for(let{key:Y,value:ce}of y.getRange({start:!0})){let[de,te]=Y.toString().split("/");if(te===""&&(te=ce.name),te){if(de!==t)continue}else continue;let Se=o.find(Ke=>Ke.name===te),Ne=!Se?.indexed&&ce.indexed&&!ce.isPrimaryKey;if((!Se||Ne)&&(z(),I=!0,Se||y.remove(Y),Ne)){let Ke=_.indices[de];Ke&&q.push(Ke)}}let k=[];try{for(let Y of o||[]){if((Y.relationship||Y.computed)&&(I=!0,Y.relationship))continue;let ce=t+"/"+(Y.name||"");Object.defineProperty(Y,"key",{value:ce,configurable:!0});let de=y.get(ce);if(Y.isPrimaryKey){if(de=de||y.get(ce=t+"/")||{},c!==void 0&&c!==_.audit||l!==void 0&&l!==_.sealed||d!==void 0&&d!==_.replicate||(+n||void 0)!==(+de.expiration||void 0)||(+s||void 0)!==(+de.eviction||void 0)||Y.type!==de.type){let Se={...de};typeof c=="boolean"&&(c&&_.enableAuditing(c),Se.audit=c),n&&(Se.expiration=+n),s&&(Se.eviction=+s),l!==void 0&&(Se.sealed=l),d!==void 0&&(Se.replicate=d),Y.type&&(Se.type=Y.type),I=!0,z(),y.put(ce,Se)}continue}de?.attribute&&!de.name&&(de.indexed=!0);let te=!de||de.type!==Y.type||JSON.stringify(de.indexed)!==JSON.stringify(Y.indexed)||de.nullable!==Y.nullable||de.version!==Y.version||de.enumerable!==Y.enumerable||JSON.stringify(de.properties)!==JSON.stringify(Y.properties)||JSON.stringify(de.elements)!==JSON.stringify(Y.elements);if(Y.indexed){let Se=zq(ce,h,Y);(te||de.indexingPID&&de.indexingPID!==process.pid||de.restartNumber<nh.workerData?.restartNumber)&&(I=!0,z(),de=y.get(ce),(te||de.indexingPID&&de.indexingPID!==process.pid||de.restartNumber<nh.workerData?.restartNumber)&&(I=!0,Y.indexNulls===void 0&&(Y.indexNulls=!0),_.primaryStore.getStats().entryCount>0&&(Y.lastIndexedKey=de?.lastIndexedKey??void 0,Y.indexingPID=process.pid,Se.isIndexing=!0,Object.defineProperty(Y,"dbi",{value:Se}),k.push(Y))),y.put(ce,Y)),de?.indexNulls&&Y.indexNulls===void 0&&(Y.indexNulls=!0),Se.indexNulls=Y.indexNulls,X[Y.name]=Se}else te&&(I=!0,z(),y.put(ce,Y))}}finally{H&&H()}if(I&&(_.schemaVersion++,_.updatedAttributes()),Cr.trace(`${t} table loading, running index`),k.length>0||q.length>0?_.indexingOperation=sce(_,k,q):I&&OS.signalSchemaChange(new PS.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=p,I)for(let Y of eh)Y(_,p!=="cluster");return(n||s||i)&&_.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Cr.trace(`${t} table loaded`),_;function z(){H||h.transactionSync(()=>({then(Y){H=Y}}))}a(z,"startTxn")}async function sce(e,t,r){try{Cr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await OS.signalSchemaChange(new PS.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,xd.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:p}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,p,()=>{for(let h=0;h<l;h++){let E=t[h],_=E.name,R=E.dbi;try{let S=E.resolve,y=m&&(S?S(m):m[_]);if(R.customIndex){R.customIndex.index(f,y);continue}let w=(0,$q.getIndexedValues)(y,R.indexNulls);if(w)for(let I=0,H=w.length;I<H;I++)R.put(w[I],f)}catch(S){o[_]||(o[_]=!0,Cr.error(`Error indexing attribute ${_}`,S))}}}),s.then(()=>d--,h=>{d--,Cr.error(h)}),nh.workerData&&nh.workerData.restartNumber!==Kq.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>rce?await s:d>nce&&await new Promise(h=>setImmediate(h))}for(let f of t)delete f.lastIndexedKey,delete f.indexingPID,f.dbi.isIndexing=!1,s=e.dbisDB.put(f.key,f)}await s,await OS.signalSchemaChange(new PS.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Cr.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Cr.error("Error in indexing",n)}}function ice({table:e,database:t}){let r=gd({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function Vl(e){return eh.push(e),{remove(){let t=eh.indexOf(e);t>-1&&eh.splice(t,1)}}}function ih(e){return th.push(e),{remove(){let t=th.indexOf(e);t>-1&&th.splice(t,1)}}}function MS(){let e=(0,Zt.get)(x.STORAGE_COMPRESSION),t=(0,Zt.get)(x.STORAGE_COMPRESSION_DICTIONARY),r=(0,Zt.get)(x.STORAGE_COMPRESSION_THRESHOLD)||Yq,n={startingOffset:32};return t&&(n.dictionary=rh.readFileSync(t)),r&&(n.threshold=r),e&&n}var Zt,CS,xd,Ht,_s,Md,jN,rh,zN,$q,OS,PS,nh,Vq,Kq,DS,ece,Cr,JN,vS,Yq,NS,yn,Me,vd,eh,th,LS,sa,Ud,rce,nce,Oe=se(()=>{Zt=b(fe()),CS=b(Jt()),xd=require("lmdb"),Ht=require("path"),_s=require("fs"),Md=b(Rt());Lg();jN=b(mp());G();rh=b(require("fs-extra")),zN=b(ai()),$q=b(xn()),OS=b(Zo()),PS=b(us()),nh=require("worker_threads"),Vq=b(Q()),Kq=b(st());Ki();El();is();qq();DS=b(fp()),{forComponent:ece}=Vq.default;a(sh,"OpenDBIObject");Cr=ece("storage"),JN="data",vS=Symbol("defined-tables"),Yq=((0,Zt.get)(x.STORAGE_PAGESIZE)||4096)-60;(0,Zt.initSync)();NS=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"],yn=Object.create(null),Me=Object.create(null);(0,zN._assignPackageExport)("databases",Me);(0,zN._assignPackageExport)("tables",yn);vd=Symbol.for("next-table-id"),eh=[],th=[],sa=new Map;a(tce,"getTables");a(lt,"getDatabases");a(Bd,"resetDatabases");a(Zp,"readMetaDb");a(Wq,"ensureDB");a(jq,"setTable");a(gd,"database");a(Ww,"dropDatabase");a(zq,"openIndex");a(ze,"table");rce=1e3,nce=10;a(sce,"runIndexing");a(ice,"dropTableMeta");a(Vl,"onUpdatedTable");a(ih,"onRemovedDB");a(MS,"getDefaultCompression")});var ZN={};ye(ZN,{loadGQLSchema:()=>cce,start:()=>XN,startOnMainThread:()=>ace});function XN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=o(new c(r.toString(),s)),m=new Map,p=[],h;for(let R of f.definitions)switch(R.kind){case l.OBJECT_TYPE_DEFINITION:let H=function(q){if(q.kind==="NonNullType"){let Y=H(q.type);return Y.nullable=!1,Y}if(q.kind==="ListType")return{type:"array",elements:H(q.type)};let z={type:q.name?.value};return Object.defineProperty(z,"location",{value:q.loc.startToken}),z};a(H,"getProperty");let S=R.name.value,y=[],w={table:null,database:null,properties:y};m.set(S,w),i.allTypes.set(S,w);for(let q of R.directives){if(q.name.value==="table"){for(let z of q.arguments)w[z.name.value]=z.value.value;w.schema&&(w.database=w.schema),w.table||(w.table=S),w.audit&&(w.audit=w.audit!=="false"),w.attributes=w.properties,p.push(w)}if(q.name.value==="sealed"&&(w.sealed=!0),q.name.value==="splitSegments"&&(w.splitSegments=!0),q.name.value==="replicate"&&(w.replicate=!0),q.name.value==="export"){w.export=!0;for(let z of q.arguments)typeof w.export!="object"&&(w.export={}),w.export[z.name.value]=z.value.value}}let I=!1,X={};for(let q of R.fields){let k=H(q.type);k.name=q.name.value,y.push(k),X[k.name]=void 0;for(let z of q.directives){let Y=z.name.value;if(Y==="primaryKey")I?console.warn("Can not define two attributes as a primary key at",z.loc):(k.isPrimaryKey=!0,I=!0);else if(Y==="indexed"){let ce={};for(let de of z.arguments||[])ce[de.name.value]=de.value.value;k.indexed=ce}else if(Y==="computed"){for(let ce of z.arguments||[])if(ce.name.value==="from"){let de=ce.value.value;k.computed={from:_(de,ce,X)},k.version==null&&(k.version=de)}else ce.name.value==="version"&&(k.version=ce.value.value);k.computed=k.computed||!0}else if(Y==="relationship"){let ce={};for(let de of z.arguments)ce[de.name.value]=de.value.value;k.relationship=ce}else if(Y==="createdTime")k.assignCreatedTime=!0;else if(Y==="updatedTime")k.assignUpdatedTime=!0;else if(Y==="expiresAt")k.expiresAt=!0;else if(Y==="enumerable")k.enumerable=!0;else if(Y==="allow"){let ce=k.authorizedRoles=[];for(let de of z.arguments)de.name.value==="role"&&ce.push(de.value.value)}else server.knownGraphQLDirectives.includes(Y)&&console.warn(`@${Y} is an unknown directive, at`,z.loc)}}w.type=S,S==="Query"&&(h=w)}function E(R){let S=m.get(R.type);S?(Object.defineProperty(R,"properties",{value:S.properties}),Object.defineProperty(R,"definition",{value:S})):R.type==="array"?E(R.elements):oce.includes(R.type)||(0,Qq.getWorkerIndex)()===0&&console.error(`The type ${R.type} is unknown at line ${R.location.line}, column ${R.location.column}, in ${s}`)}a(E,"connectPropertyType");for(let R of m.values())for(let S of R.properties)E(S);for(let R of p)R.tableClass=e(R),R.export&&(R.export.name===""?i.set((0,QN.dirname)(n),R.tableClass):i.set((0,QN.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function _(R,S,y){return new Jq.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${R}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(y)}a(_,"createComputedFrom")}}var QN,Jq,Qq,oce,ace,cce,Xq=se(()=>{QN=require("path"),Jq=require("node:vm");Oe();Qq=b(st());sc();oce=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives||(server.knownGraphQLDirectives=[]);server.knownGraphQLDirectives.push("table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow","enumerable");a(XN,"start");ace=XN,cce=a(e=>XN({ensureTable:ze}).handleFile(e,null,null,new cd),"loadGQLSchema")});var tC={};ye(tC,{start:()=>_ce});function lce(e){if(e.kind!==qe.Kind.OPERATION_DEFINITION&&e.kind!==qe.Kind.FRAGMENT_DEFINITION)throw new Vr(`Unexpected non-executable definition type ${e.kind}.`)}function Zq(e){if(typeof e!="object"||e===null)throw new fo("Request body must be an object.");if(!("query"in e))throw new fo("Request body must contain a `query` field.");if(typeof e.query!="string")throw new fo("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new fo("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new fo("Request body `operationName` field must be a string.")}function eC(e){return parseInt(e.value,10)}function t$(e){return parseFloat(e.value)}function r$(e,t,r){let n=r.get(e.name.value);return n$(n)?s$(n,t):{attribute:t,value:n}}function n$(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function s$(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],n$(n)?s$(n,t):{attribute:t,value:n}))}function uce(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case qe.Kind.NULL:return{attribute:t,value:null};case qe.Kind.INT:return{attribute:t,value:eC(e.value)};case qe.Kind.FLOAT:return{attribute:t,value:t$(e.value)};case qe.Kind.BOOLEAN:case qe.Kind.STRING:return{attribute:t,value:e.value.value};case qe.Kind.VARIABLE:return r$(e.value,t,r);case qe.Kind.OBJECT:return i$(e.value,t,r);case qe.Kind.LIST:case qe.Kind.ENUM:default:throw new Vr(`Value type, ${e.value.kind}, is not supported.`)}}function i$(e,t,r){return e.fields.flatMap(n=>uce(n,t,r))}function dce(e,t){switch(e.value.kind){case qe.Kind.NULL:return{attribute:e.name.value,value:null};case qe.Kind.INT:return{attribute:e.name.value,value:eC(e.value)};case qe.Kind.FLOAT:return{attribute:e.name.value,value:t$(e.value)};case qe.Kind.BOOLEAN:case qe.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case qe.Kind.VARIABLE:return r$(e.value,e.name.value,t);case qe.Kind.OBJECT:return i$(e.value,[e.name.value],t);case qe.Kind.LIST:case qe.Kind.ENUM:default:throw new Vr(`Argument type, ${e.value.kind}, is not supported.`)}}function fce(e,t){return e.flatMap(r=>dce(r,t))}function US(e,t){return e.selections.flatMap(r=>{switch(r.kind){case qe.Kind.FIELD:return r;case qe.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Vr(`Fragment \`${n}\` not found.`);return US(s.selectionSet,t)}case qe.Kind.INLINE_FRAGMENT:return US(r.selectionSet,t)}})}function o$(e,t){return US(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:o$(r.selectionSet,t)}:r.name.value)}async function mce(e,t,r,n){let s=Bs.getMatch(e.name.value,"graphql");if(s===void 0)throw new Vr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:o$(e.selectionSet,r),conditions:fce(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(o,n))c.push(l);return[e.name.value,c]}function a$(e){switch(e.kind){case qe.Kind.NULL:return null;case qe.Kind.INT:return eC(e);case qe.Kind.FLOAT:return parseFloat(e.value);case qe.Kind.STRING:case qe.Kind.BOOLEAN:return e.value;case qe.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:a$(r.value),...t}),{});case qe.Kind.LIST:case qe.Kind.ENUM:default:throw new Vr(`Value type, ${e.kind}, is not supported.`)}}function pce(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=a$(n.defaultValue)),n.type.kind===qe.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Vr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function hce(e,t,r,n){if(e.operation===qe.OperationTypeNode.SUBSCRIPTION)throw new Vr("Subscriptions are not supported.");if(e.operation===qe.OperationTypeNode.MUTATION)throw new Vr("Mutations are not supported yet.");let s=pce(e.variableDefinitions,t),i=await Promise.all(US(e.selectionSet,r).map(c=>mce(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function e$({query:e,variables:t={},operationName:r},n){let s=qe.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(lce(u),u.kind===qe.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Vr("Unnamed operations are only allowed when there is a single operation in the document.");let d=u.name?.value??"Unnamed Query";if(i.has(d))throw new Vr(`Duplicate operation definition: ${d}`);i.set(d,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new Vr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Vr(`Operation \`${r}\` not found.`);let l=await hce(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Ece(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 Zq(r),e$(r,e)}case"POST":{let r=await Vo(e.headers.get("content-type"),!0)(e._nodeRequest);return Zq(r),e$(r,e)}default:throw new fo("Method Not Allowed",405,{Allow:"GET, POST"})}}function _ce(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Ece(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof fo)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof qe.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Vr)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof fo)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof qe.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Vr)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var qe,Vr,fo,c$=se(()=>{qe=b(require("graphql"));Ko();sc();a(lce,"assertExecutableDefinitionNode");a(Zq,"assertRequestParams");a(eC,"processIntValueNode");a(t$,"processFloatValueNode");a(r$,"processVariableNode");a(n$,"isObject");a(s$,"transformObjectIntoQueryCondition");a(uce,"processObjectFieldNode");a(i$,"processObjectValueNode");a(dce,"processArgumentNode");a(fce,"buildConditionsQuery");a(US,"fillInFragments");a(o$,"buildSelectQuery");a(mce,"processFieldNode");a(a$,"processConstValueNode");a(pce,"resolveVariables");a(hce,"executeOperation");a(e$,"resolver");Vr=class extends Error{static{a(this,"GraphQLQueryingError")}},fo=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(Ece,"graphqlQueryingHandler");a(_ce,"start")});var p$=M((cxe,m$)=>{var Fd=require("validate.js"),u$=ft(),kd=(G(),D(j)),{handleHDBError:gce,hdbErrors:Sce}=Ee(),{HDB_ERROR_MSGS:cr,HTTP_STATUS_CODES:Tce}=Sce,rC=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),yce={STRUCTURE_USER:"structure_user"},l$=Object.values(kd.ROLE_TYPES_ENUM),Rce="attribute_permissions",bce="attribute_name",{PERMS_CRUD_ENUM:Hd}=kd,Ace=[Rce,...Object.values(Hd)],d$=[Hd.READ,Hd.INSERT,Hd.UPDATE],Ice=[bce,...d$];function wce(e){let t=rC();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,f$(e,t)}a(wce,"addRoleValidation");function Nce(e){let t=rC();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,f$(e,t)}a(Nce,"alterRoleValidation");function Cce(e){let t=rC();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,u$.validateObject(e,t)}a(Cce,"dropRoleValidation");var Oce=["operation","role","id","permission","hdb_user","access"];function f$(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Oce.includes(n[o])||s.push(n[o]);s.length>0&&Er(cr.INVALID_ROLE_JSON_KEYS(s),r);let i=u$.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Er(o,r)}),e.permission){let o=Pce(e);o&&Er(o,r),l$.forEach(c=>{e.permission[c]&&!Fd.isBoolean(e.permission[c])&&Er(cr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(l$.indexOf(o)<0){if(o===yce.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||Er(cr.SCHEMA_NOT_FOUND(f),r)}continue}Er(cr.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Er(cr.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[o][l]){Er(cr.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(d=>{Ace.includes(d)||Er(cr.INVALID_PERM_KEY(d),r,o,l)}),Object.values(Hd).forEach(d=>{Fd.isDefined(u[d])?Fd.isBoolean(u[d])||Er(cr.TABLE_PERM_NOT_BOOLEAN(d),r,o,l):Er(cr.TABLE_PERM_MISSING(d),r,o,l)}),u.attribute_permissions===void 0){Er(cr.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){Er(cr.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[o][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let p=u.attribute_permissions[m];if(Object.keys(p).forEach(E=>{!Ice.includes(E)&&E!==Hd.DELETE&&Er(cr.INVALID_ATTR_PERM_KEY(E),r,o,l)}),!Fd.isDefined(p.attribute_name)){Er(cr.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=p.attribute_name;if(!d.includes(h)){Er(cr.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}d$.forEach(E=>{Fd.isDefined(p[E])?Fd.isBoolean(p[E])||Er(cr.ATTR_PERM_NOT_BOOLEAN(E,h),r,o,l):Er(cr.ATTR_PERM_MISSING(E,h),r,o,l)}),!f.read&&p.read===!0&&(f.read=!0),!f.insert&&p.insert===!0&&(f.insert=!0),!f.update&&p.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${o}.${l}`;Er(cr.MISMATCHED_TABLE_ATTR_PERMS(m),r,o,l)}}}}return Lce(r)}a(f$,"customValidate");m$.exports={addRoleValidation:wce,alterRoleValidation:Nce,dropRoleValidation:Cce};function Pce(e){let{operation:t,permission:r}=e;if(t===kd.OPERATIONS_ENUM.ADD_ROLE||t===kd.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return cr.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?kd.ROLE_TYPES_ENUM.SUPER_USER:kd.ROLE_TYPES_ENUM.CLUSTER_USER;return cr.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(Pce,"validateNoSUPerms");function Lce(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:cr.ROLE_PERMS_ERROR,...e};return gce(new Error,n,Tce.BAD_REQUEST)}else return null}a(Lce,"generateRolePermResponse");function Er(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(Er,"addPermError")});var ah=M((dxe,g$)=>{"use strict";var h$=Vn(),E$=Sn(),Dce=Bl(),sC=p$(),iC=Zo(),uxe=require("uuid").v4,vce=require("util"),xS=(G(),D(j)),Mce=ae(),oC=E$.searchByValue,Uce=E$.searchByHash,xce=vce.promisify(Dce.delete),Bce=fi(),Fce=Ed(),{hdbErrors:kce,handleHDBError:Kl}=Ee(),{HDB_ERROR_MSGS:_$,HTTP_STATUS_CODES:oh}=kce,{UserEventMsg:aC}=us();g$.exports={addRole:Hce,alterRole:Gce,dropRole:qce,listRoles:$ce};function nC(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(nC,"scrubRoleDetails");async function Hce(e){let t=sC.addRoleValidation(e);if(t)throw t;e=nC(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await oC(r)||[])}catch(i){throw Kl(i)}if(n&&n.length>0)throw Kl(new Error,_$.ROLE_ALREADY_EXISTS(e.role),oh.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await h$.insert(s),iC.signalUserChange(new aC(process.pid)),e=nC(e),e}a(Hce,"addRole");async function Gce(e){let t=sC.alterRoleValidation(e);if(t)throw t;e=nC(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await h$.update(r)}catch(s){throw Kl(s)}if(n&&n?.message==="updated 0 of 1 records")throw Kl(new Error,"Invalid role id",oh.BAD_REQUEST,void 0,void 0,!0);return await iC.signalUserChange(new aC(process.pid)),e}a(Gce,"alterRole");async function qce(e){let t=sC.dropRoleValidation(e);if(t)throw Kl(new Error,t,oh.BAD_REQUEST,void 0,void 0,!0);let r=new Fce(xS.SYSTEM_SCHEMA_NAME,xS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Uce(r));if(n.length===0)throw Kl(new Error,_$.ROLE_NOT_FOUND,oh.NOT_FOUND,void 0,void 0,!0);let s=new Bce(xS.SYSTEM_SCHEMA_NAME,xS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await oC(s)),o=!1;if(Mce.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Kl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,oh.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await xce(c),iC.signalUserChange(new aC(process.pid)),`${n[0].role} successfully deleted`}a(qce,"dropRole");async function $ce(){return oC({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}a($ce,"listRoles")});var cC={};ye(cC,{start:()=>y$,startOnMainThread:()=>Yce});function y$({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,S$.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let o in i.permission){if(Vce.includes(o))continue;let c=i.permission[o];c.tables||(i.permission[o]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await Kce(i)}}}async function Kce(e){let t=lt().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,T$.isEqual)(i,e)?void 0:(e.id=r.id,(0,BS.alterRole)(e))}return(0,BS.addRole)(e)}var BS,S$,T$,Vce,Yce,R$=se(()=>{Oe();BS=b(ah()),S$=require("yaml"),T$=require("lodash"),Vce=["super_user","cluster_user","structure_user"];a(y$,"start");a(Kce,"ensureRole");Yce=y$});async function FS(e){let t=(0,I$.pathToFileURL)(e).toString();if(Wce)return ch||(ch=jce(Jce)),(await(await ch).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function jce(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ch=new Compartment({console,Math,Date,fetch:zce,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,A$.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Xt,s.tables=yn,s.databases=Me}};let n=await(0,b$.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),ch}function zce(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 Jce(){return{Resource:Xt,tables:yn}}var b$,A$,I$,Wce,ch,lC=se(()=>{Qi();Oe();b$=require("fs/promises"),A$=require("path"),I$=require("url"),Wce=!1;a(FS,"secureImport");a(jce,"getCompartment");a(zce,"secureOnlyFetch");a(Jce,"getGlobalVars")});var uC={};ye(uC,{ResourceLoadError:()=>kS,handleApplication:()=>Qce,suppressHandleApplicationWarning:()=>Xce});function N$(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Qce(e){e.handleEntry(a(async function(r){if(r.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${r.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(r.eventType!=="add"){e.requestRestart();return}try{let n=await FS(r.absolutePath),s=(0,w$.dirname)(r.urlPath).replace(/\\/g,"/").replace(/^\/$/,"");N$(n.default)&&(e.resources.set(s,n.default),e.logger.debug(`Registered root resource: ${s}`)),C$(e,n,s)}catch(n){throw new kS(r.absolutePath,n)}},"handleResourceEntry"))}function C$(e,t,r){for(let n in t){let s=t[n],i=`${r}/${n}`;N$(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&C$(e,s,i)}}var w$,kS,Xce,O$=se(()=>{lC();w$=require("path");a(N$,"isResource");kS=class extends Error{static{a(this,"ResourceLoadError")}filePath;cause;constructor(t,r){super(`Failed to load resource module ${t}${r?`: ${r.message}`:""}`),this.name="ResourceLoadError",this.filePath=t,this.cause=r}};a(Qce,"handleApplication");a(C$,"recurseForResources");Xce=!0});var fC={};ye(fC,{start:()=>Zce});function Zce({resources:e}){e.set("login",dC),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var dC,P$=se(()=>{Qi();a(Zce,"start");dC=class extends Xt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});function GS(e,t){let r={openapi:ele,info:{title:"HarperDB HTTP REST interface",version:x$.packageJson.version},servers:[{description:"REST API",url:t}],paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},n=[{basicAuth:[],bearerAuth:[]}],s=a(i=>{if(i.type&&!r.components.schemas[i.type]){r.components.schemas[i.type]={};let o={},c=[];for(let l of i.properties)HS[l.type]?o[l.name]=new pC(HS[l.type],l.type):l.properties?(o[l.name]=new F$(l.type),s(l)):l.elements?.properties&&(o[l.name]=new sle(l.elements.type),s(l.elements)),l.nullable===!1&&c.push(l.name);r.components.schemas[i.type]=new U$(o,!i.sealed,c)}},"includeDefinitionInSchema");for(let[,i]of e){if(!i.path||i.Resource.isError)continue;let{path:o}=i,c=o.split("/").pop(),{attributes:l,sealed:u}=i.Resource,{prototype:d,primaryKey:f="id"}=i.Resource;if(!l&&e.allTypes.has(i.path)){let k=e.allTypes.get(i.path);u=k.sealed,l=k.properties}if(!f)continue;let m={},p=[],h=[];if(l)for(let{type:k,name:z,elements:Y,relationship:ce,definition:de,nullable:te}of l){let Se=de??Y?.definition;Se&&s(Se),te===!1&&h.push(z),ce?k==="array"?m[z]={type:"array",items:{$ref:$s+Y.type}}:m[z]={$ref:$s+k}:Se?k==="array"?m[z]={type:"array",items:{$ref:$s+Se.type}}:m[z]={$ref:$s+Se.type}:k==="array"?Y.type==="Any"?m[z]={type:"array",items:{format:Y.type}}:m[z]={type:"array",items:new pC(HS[Y.type],Y.type)}:k==="Any"?m[z]={format:k}:m[z]=new pC(HS[k],k),p.push(new hC(z,"query",m[z]))}let E=Object.keys(m),_=new hC(f,"path",{type:"string",format:"ID"});_.required=!0,_.description="primary key of record";let R=new hC("property","path",{enum:E});R.required=!0,r.components.schemas[c]=new U$(m,!u,h);let S=d.post!==Resource.prototype.post||d.update,y=typeof d.put=="function",w=typeof d.get=="function",I=typeof d.delete=="function",H=typeof d.patch=="function",X=`/${o}/`;r.paths[X]||(r.paths[X]={}),S&&(r.paths[X].post=new tle(c,n,{200:new Gd({$ref:$s+c},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),r.paths[X].options=new L$(p,n,{200:new D$},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),w&&(r.paths[X].get=new mC(p,n,{200:new Gd({type:"array",items:{$ref:$s+c}})},"search for records by the specified property name and value pairs")),I&&(r.paths[X].delete=new M$(p,n,"delete all the records that match the provided query",{204:new v$}));let q="/"+o+"/{"+f+"}";if(r.paths[q]||(r.paths[q]={}),r.paths[q].options=new L$(p,n,{200:new D$},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),w&&(r.paths[q].get=new mC([_],n,{200:new Gd({$ref:$s+c})},"retrieve a record by its primary key")),y&&(r.paths[q].put=new rle([_],n,c,{200:new Gd({$ref:$s+c})},"create or update the record with the URL path that maps to the record's primary key")),H&&(r.paths[q].patch=new nle([_],n,c,{200:new Gd({$ref:$s+c})},"patch the record with the URL path that maps to the record's primary key")),I&&(r.paths[q].delete=new M$([_],n,"delete a record with the given primary key",{204:new v$})),w&&R.schema.enum.length>0){let k=`/${o}/{${f}}.{property}`;r.paths[k]||(r.paths[k]={}),r.paths[k].get=new mC([_,R],n,{200:new Gd({enum:E})},"used to retrieve the specified property of the specified record")}}for(let[,i]of e.allTypes)s(i),i.sealed&&r.components.schemas[i.type].additionalProperties&&(r.components.schemas[i.type].additionalProperties=!1);return r}function tle(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:$s+e}}}},this.security=t,this.responses=r}function mC(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function L$(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function D$(){this.description=B$,this.headers={},this.content={}}function Gd(e,t){this.description=B$,this.content={"application/json":{schema:e}},this.headers=t}function v$(){this.description="successfully processed request, no content returned to client"}function rle(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:$s+r}}}},this.responses=n}function nle(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:$s+r}}}},this.responses=n}function M$(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function U$(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function pC(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function F$(e){this.$ref=`#/components/schemas/${e}`}function sle(e){this.type="array",this.items=new F$(e)}function hC(e,t,r){this.name=e,this.in=t,this.schema=r}var x$,ele,HS,$s,B$,EC=se(()=>{x$=b(yt()),ele="3.0.3",HS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},$s="#/components/schemas/",B$="successful operation";a(GS,"generateJsonApi");a(tle,"Post");a(mC,"Get");a(L$,"Options");a(D$,"ResponseOptions200");a(Gd,"Response200");a(v$,"Response204");a(rle,"Put");a(nle,"Patch");a(M$,"Delete");a(U$,"ResourceSchema");a(pC,"Type");a(F$,"Ref");a(sle,"ArrayRef");a(hC,"Parameter")});var H$={};ye(H$,{Request:()=>Ec,createReuseportFd:()=>qS});var k$,Ec,_C,gC,qS,lh=se(()=>{k$=require("os"),Ec=class{static{a(this,"Request")}#e;#t;_nodeRequest;_nodeResponse;method;url;headers;isWebSocket;user;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new gC(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 _C(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get hostname(){return this._nodeRequest.headers.host}get httpVersion(){return this._nodeRequest.httpVersion}get isAborted(){return!1}get nodeRequest(){return this._nodeRequest}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},_C=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},gC=class{static{a(this,"Headers")}asObject;constructor(t){this.asObject=t}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return Object.prototype.hasOwnProperty.call(this.asObject,t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,k$.platform)()!="win32"&&(qS=require("node-unix-socket").createReuseportFd)});var VS={};ye(VS,{parseHeaderValue:()=>TC,start:()=>ale});async function ole(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&Og(e);let i=new Hs;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==G$){let _=$S.getMatch(o,n?"sse":"rest");if(!_)return t(e);e.handlerPath=_.path,c=new xs(_.relativeURL),c.async=!0,l=_.Resource}if(l?.isCaching){let _=r["cache-control"];if(_){let R=TC(_);for(let S of R)switch(S.name){case"max-age":e.expiresAt=S.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let _=TC(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.name));e.replicateTo=_.length===1&&+_[0]>=0?+_[0]:_[0]==="*"?void 0:_}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await bt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Vo(r["content-type"],!0)(e.body,e.headers)}catch(_){throw new qd.ClientError(_,400)}if(e.authorize=!0,o===G$&&s==="GET"){if(e?.user?.role?.permission?.super_user)return GS($S,`${e.protocol}://${e.hostname}`);throw new qd.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 qd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new qd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,SC.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let _=bq(f.headers,i);return f.headers!==_&&(f.headers=_),f.data!==void 0&&(f.body=Km(f.data,e,f)),f}else if(isFinite(p)){ile[0]=p;let _=String.fromCharCode(34,(sn[0]&63)+62,(sn[0]>>6)+(sn[1]<<2&63)+62,(sn[1]>>4)+(sn[2]<<4&63)+62,(sn[2]>>2)+62,(sn[3]&63)+62,(sn[3]>>6)+(sn[4]<<2&63)+62,(sn[4]>>4)+(sn[5]<<4&63)+62,(sn[5]>>2)+62,(sn[6]&63)+62,(sn[6]>>6)+(sn[7]<<2&63)+62,34),R=r["if-none-match"];R&&_==R?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",_),SC.lastModified&&i.setIfNone("Last-Modified",new Date(p).toUTCString())}e.createdResource&&(m=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let h={status:m,headers:i,body:void 0},E=e.loadedFromSource??f?.wasLoadedFromSource?.();return E!==void 0&&(h.wasCacheMiss=E,!E&&isFinite(p)&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||p))/1e3))),f!==void 0&&(h.body=Km(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(o){o.statusCode?o.statusCode===500?gi.warn(o):gi.info(o):gi.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.setIfNone("Allow",o.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:o.statusCode||500,headers:i,body:void 0};return c.body=Km(o.contentType?o:V$(o),e,c),c}}function ale(e){SC=e,e.includeExpensiveRecordCountEstimates&&(Ec.prototype.includeExpensiveRecordCountEstimates=!0),!q$&&(q$=!0,$S=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return ole(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{uh++;let s=new ss;$$||($$=!0,ap(l=>{uh>0&&l.push({metric:"ws-connections",connections:uh,byThread:!0})}));let i;t.on("error",l=>{i=!0,gi.warn(l)});let o;t.on("message",a(function(u){o||(o=Vo(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=o(u);We(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{uh--,tn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=$S.getMatch(l,"ws");if(tn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,We(h=>({count:h.count,total:uh}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new xs(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await bt(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await $o(p.value,r);t.send(h),We(h.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(E=>t._socket.once("drain",E))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?gi.warn(l):gi.info(l):gi.error(l),t.close(cle[l.statusCode]||1011,V$(l))}t.close()},e))}function TC(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,o]=s.trim().split("=");i=i.trim(),o&&(o=o.trim()),r={name:i.toLowerCase(),value:o,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var gi,qd,V$,sn,ile,SC,G$,q$,$S,$$,uh,cle,K$=se(()=>{Ko();os();gi=b(Q()),qd=b(Ee());Pg();Vu();Qa();zp();EC();lh();Dg();({errorToString:V$}=gi),sn=new Uint8Array(8),ile=new Float64Array(sn.buffer,0,1),SC={},G$="openapi";a(ole,"http");uh=0;a(ale,"start");cle={401:3e3,403:3003};a(TC,"parseHeaderValue")});var yC=M((Bxe,W$)=>{var{recordAction:KS,recordActionBinary:Y$}=(os(),D(Tg)),lle=require("fastify-plugin"),ule=200;W$.exports=lle(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,d,f;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",f=l.method),KS(o,"duration",u,f,d),Y$(s.raw.statusCode<400,"success",u,f,d),Y$(1,"response_"+s.raw.statusCode,u,f,d);let m=ule;i?.pipe?(i.on("data",_=>{m+=_.length}),i.on("end",()=>{KS(performance.now()-c,"transfer",u,f,d),KS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,KS(m,"bytes-sent",u,f,d));let p=o.toFixed(3),h=s.getHeader("Server-Timing"),E=`db;dur=${p}`;s.header("Server-Timing",h?`${h}, ${E}`:E)}),r()},{name:"hdb-request-time"})});var z$=M((Fxe,j$)=>{var dle=ft(),fle={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};j$.exports=function(e){return dle.validateObject(e,fle)}});var YS=M((kxe,J$)=>{"use strict";var mle=(G(),D(j)).OPERATIONS_ENUM,RC=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=mle.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};J$.exports=RC});var mh={};ye(mh,{createTokens:()=>AC,getJWTRSAKeys:()=>QS,refreshOperationToken:()=>IC,validateOperationToken:()=>wC,validateRefreshToken:()=>XS});async function QS(){if(WS)return WS;try{let e=dh.default.join(fh.default.getHdbBasePath(),eA),t=await jS.default.readFile(dh.default.join(e,ym.JWT_PASSPHRASE_NAME),"utf8"),r=await jS.default.readFile(dh.default.join(e,ym.JWT_PRIVATE_KEY_NAME),"utf8");return WS={publicKey:await jS.default.readFile(dh.default.join(e,ym.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},WS}catch(e){throw JS.default.error(e),new Si.ClientError(Vd.NO_ENCRYPTION_KEYS,$d.INTERNAL_SERVER_ERROR)}}async function AC(e){let t=(0,bC.validateBySchema)(e,mo.default.object({username:mo.default.string().optional(),password:mo.default.string().optional(),role:mo.default.string().optional(),expires_in:mo.default.alternatives(mo.default.string(),mo.default.number()).optional()}));if(t)throw new Si.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 bd(e.username,e.password,f)}catch(f){throw JS.default.error(f),new Si.ClientError(Vd.INVALID_CREDENTIALS,$d.UNAUTHORIZED)}if(!r)throw new Si.ClientError(Vd.INVALID_CREDENTIALS,$d.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let o=await QS(),c=await Kd.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??tV,algorithm:zS,subject:Yd.OPERATION}),l=await Kd.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:ple,algorithm:zS,subject:Yd.REFRESH}),u=iN(l,$r.SHA256);if((await(0,Q$.update)(new X$.default(Sm,Fu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new Si.ClientError(Vd.REFRESH_TOKEN_SAVE_FAILED,$d.INTERNAL_SERVER_ERROR);return Z$.default.signalUserChange(new eV.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function IC(e){let t=(0,bC.validateBySchema)(e,mo.default.object({refresh_token:mo.default.string().required()}).required());if(t)throw new Si.ClientError(t.message);let{refresh_token:r}=e;await XS(r);let n=await QS(),s=await Kd.default.decode(r);return{operation_token:await Kd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:tV,algorithm:zS,subject:Yd.OPERATION})}}async function wC(e){return rV(e,Yd.OPERATION)}async function XS(e){return rV(e,Yd.REFRESH)}async function rV(e,t){try{let r=await QS(),n=await Kd.default.verify(e,r.publicKey,{algorithms:zS,subject:t});if(n.role)throw new Error("Invalid token");let s=await bd(n.username,void 0,!1);if(t===Yd.REFRESH&&!oN(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw JS.default.warn(r),r?.name==="TokenExpiredError"?new Si.ClientError(Vd.TOKEN_EXPIRED,$d.FORBIDDEN):new Si.ClientError(Vd.INVALID_TOKEN,$d.UNAUTHORIZED)}}var Kd,jS,dh,mo,bC,Si,JS,Q$,X$,Z$,eV,fh,$d,Vd,tV,ple,zS,Yd,WS,Wd=se(()=>{Kd=b(require("jsonwebtoken")),jS=b(require("fs-extra")),dh=b(require("node:path")),mo=b(require("joi")),bC=b(ft());G();Si=b(Ee()),JS=b(Q());cN();hs();Q$=b(Vn()),X$=b(YS()),Z$=b(Zo()),eV=b(us()),fh=b(fe()),{HTTP_STATUS_CODES:$d,AUTHENTICATION_ERROR_MSGS:Vd}=Si.hdbErrors;fh.default.initSync();tV=fh.default.get(x.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",ple=fh.default.get(x.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",zS="RS256",Yd={OPERATION:"operation",REFRESH:"refresh"};a(QS,"getJWTRSAKeys");a(AC,"createTokens");a(IC,"refreshOperationToken");a(wC,"validateOperationToken");a(XS,"validateRefreshToken");a(rV,"validateToken")});var NC=M((Kxe,iV)=>{"use strict";var hle=z$(),jd=require("passport"),Ele=require("passport-local").Strategy,_le=require("passport-http").BasicStrategy,gle=require("util"),Sle=(hs(),D(co)),sV=gle.callbackify(Sle.findAndValidateUser),Vxe=Jr(),Tle=(G(),D(j)),nV=(Wd(),D(mh)),{AccessViolation:yle}=Ee();jd.use(new Ele(function(e,t,r){sV(e,t,r)}));jd.use(new _le(function(e,t,r){sV(e,t,r)}));jd.serializeUser(function(e,t){t(null,e)});jd.deserializeUser(function(e,t){t(null,e)});function Rle(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r(new yle)}switch(a(i,"handleResponse"),n){case"Basic":jd.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Tle.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?nV.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):nV.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:jd.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Rle,"authorize");function ble(e,t){let r=hle(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(ble,"checkPermissions");iV.exports={authorize:Rle,checkPermissions:ble}});var vC=M((zxe,lV)=>{var rT=require("clone"),nT=ft(),Ale=ae(),eT=(G(),D(j)),Wxe=Q(),CC=require("fs"),PC=require("joi"),{string:tT}=PC.types(),{hdbErrors:Ile,handleHDBError:ZS}=Ee(),{HDB_ERROR_MSGS:jxe,HTTP_STATUS_CODES:OC}=Ile,{commonValidators:zd}=Zi(),oV=" is required",wle=["insert","update","upsert"],LC={database:{presence:!1,format:zd.schema_format,length:zd.schema_length},schema:{presence:!1,format:zd.schema_format,length:zd.schema_length},table:{presence:!0,format:zd.schema_format,length:zd.schema_length},action:{inclusion:{within:wle,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Nle={schema:tT.required(),table:tT.required(),action:tT.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Cle,AWS_SECRET:Ole,AWS_BUCKET:Ple,AWS_FILE_KEY:Lle,REGION:Dle}=eT.S3_BUCKET_AUTH_KEYS,vle={s3:{presence:!0},[`s3.${Cle}`]:{presence:!0,type:"String"},[`s3.${Ole}`]:{presence:!0,type:"String"},[`s3.${Ple}`]:{presence:!0,type:"String"},[`s3.${Lle}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Dle}`]:{presence:!0,type:"String"}},aV=rT(LC);aV.data.presence={message:oV};var cV=rT(LC);cV.file_path.presence={message:oV};var Mle=Object.assign(rT(LC),vle),DC=rT(Nle);DC.csv_url=tT.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();DC.passthrough_headers=PC.object();function Ule(e){let t=nT.validateObject(e,aV);return sT(e,t)}a(Ule,"dataObject");function xle(e){let t=nT.validateBySchema(e,PC.object(DC));return sT(e,t)}a(xle,"urlObject");function Ble(e){let t=nT.validateObject(e,cV);return sT(e,t)}a(Ble,"fileObject");function Fle(e){let t=nT.validateObject(e,Mle);return sT(e,t)}a(Fle,"s3FileObject");function sT(e,t){if(!t){let r=Ale.checkGlobalSchemaTable(e.schema,e.table);if(r)return ZS(new Error,r,OC.BAD_REQUEST);if(e.operation===eT.OPERATIONS_ENUM.CSV_FILE_LOAD)try{CC.accessSync(e.file_path,CC.constants.R_OK|CC.constants.F_OK)}catch(n){return n.code===eT.NODE_ERROR_CODES.ENOENT?ZS(n,`No such file or directory ${n.path}`,OC.BAD_REQUEST):n.code===eT.NODE_ERROR_CODES.EACCES?ZS(n,`Permission denied ${n.path}`,OC.BAD_REQUEST):ZS(n)}}return t}a(sT,"postValidateChecks");lV.exports={dataObject:Ule,urlObject:xle,fileObject:Ble,s3FileObject:Fle}});var MC=M((Qxe,uV)=>{"use strict";var ph=Q(),iT=(G(),D(j));async function kle(e,t,r,n=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let s;try{return s=await e(t),r&&await r(t,s,n),t.operation===iT.OPERATIONS_ENUM.INSERT||t.operation===iT.OPERATIONS_ENUM.UPDATE||t.operation===iT.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===iT.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(ph.info(i.message),i):i.http_resp_msg?(ph.error(`Error calling operation: ${e.name}`),ph.error(i.http_resp_msg),i):(ph.error(`Error calling operation: ${e.name}`),ph.error(i),i)}}a(kle,"callOperationFunctionAsAwait");uV.exports={callOperationFunctionAsAwait:kle}});var UC=M((Zxe,fV)=>{"use strict";var{S3:Hle,GetObjectCommand:Gle}=require("@aws-sdk/client-s3");fV.exports={getFileStreamFromS3:qle,getS3AuthObj:dV};async function qle(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await dV(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Gle(r))).Body}a(qle,"getFileStreamFromS3");function dV(e,t,r){return new Hle({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(dV,"getS3AuthObj")});var pV=M((t0e,mV)=>{"use strict";var xC=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},BC=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};mV.exports={BulkLoadFileObject:xC,BulkLoadDataObject:BC}});var EV=M((n0e,hV)=>{"use strict";var FC=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};hV.exports=FC});var gV=M((i0e,_V)=>{"use strict";var kC=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};_V.exports=kC});var GC=M((a0e,TV)=>{"use strict";var SV=EV(),$le=gV(),{HDB_ERROR_MSGS:Vle}=Jr(),HC=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Vle.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new SV(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new $le(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new SV(r,n,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};TV.exports=HC});var Yl=M((u0e,AV)=>{"use strict";var l0e=Sn(),hh=Q(),{validateBySchema:yV}=ft(),ia=require("joi"),Kle=io(),oT=ae(),{handleHDBError:aT,hdbErrors:Yle,ClientError:RV}=Ee(),{HDB_ERROR_MSGS:cT,HTTP_STATUS_CODES:qC}=Yle,bV=fe();bV.initSync();var{getDatabases:$C}=(Oe(),D(mt)),Wle=require("fs-extra"),jle=(G(),D(j));AV.exports={describeAll:zle,describeTable:lT,describeSchema:Jle};async function zle(e={}){try{let t=oT.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=$C(),o={},c={},l=[],u=e?.exact_count,d=e?.include_computed;for(let m in i){o[m]=!0,!t&&!s&&!r&&(c[m]=e.hdb_user?.role?.permission[m]?.describe);let p=i[m];for(let h in p)try{let E;if(t||s||r)E=await lT({schema:m,table:h,exact_count:u,include_computed:d});else if(n&&n[m].describe&&n[m].tables[h].describe){let _=n[m].tables[h].attribute_permissions;E=await lT({schema:m,table:h,exact_count:u,include_computed:d},_)}E&&l.push(E)}catch(E){hh.error(E)}}let f={};for(let m in l)t||s||r?(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],o[l[m].schema]&&delete o[l[m].schema]):c[l[m].schema]&&(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],o[l[m].schema]&&delete o[l[m].schema]);for(let m in o)t||s||r?f[m]={}:c[m]&&(f[m]={});return f}catch(t){return hh.error("Got an error in describeAll"),hh.error(t),aT(new Error,cT.DESCRIBE_ALL_ERR)}}a(zle,"describeAll");async function lT(e,t){oT.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(s=e.hdb_user?.role?.permission[r]?.tables[n]?.attribute_permissions);let i=yV(e,ia.object({database:ia.string(),table:ia.string().required(),exact_count:ia.boolean().strict(),include_computed:ia.boolean().strict()}));if(i)throw new RV(i.message);let c=$C()[r];if(!c)throw aT(new Error,cT.SCHEMA_NOT_FOUND(e.schema),qC.NOT_FOUND);let l=c[n];if(!l)throw aT(new Error,cT.TABLE_NOT_FOUND(e.schema,e.table),qC.NOT_FOUND);function u(p){(!p.computed||e.include_computed)&&d.push({attribute:p.attribute,type:p.type,elements:p.elements?.type,indexed:p.indexed,is_primary_key:p.isPrimaryKey,assigned_created_time:p.assignCreatedTime,assigned_updated_time:p.assignUpdatedTime,nullable:p.nullable,computed:p.computed?!0:void 0,properties:p.properties?p.properties.map(h=>({type:h.type,name:h.name})):void 0})}a(u,"pushAtt");let d=[];if(s){let p={};s.forEach(h=>{h.describe&&(p[h.attribute_name]=!0)}),l.attributes.forEach(h=>{p[h.name]&&u(h)})}else l.attributes?.forEach(p=>u(p));let f;try{f=(await Wle.stat(l.primaryStore.env.path)).size}catch(p){hh.warn("unable to get database size",p)}let m={schema:r,name:l.tableName,hash_attribute:l.attributes.find(p=>p.isPrimaryKey||p.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:f};l.replicate!==void 0&&(m.replicate=l.replicate),l.expirationMS!==void 0&&(m.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(m.sealed=l.sealed),l.sources?.length>0&&(m.sources=l.sources.map(p=>p.name).filter(p=>p&&p!=="NATSReplicator"&&p!=="Replicator")),bV.get(jle.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Kle.createNatsTableStreamName(m.schema,m.name));try{let p=await l.getRecordCount({exactCount:!!e.exact_count});m.record_count=p.recordCount,m.table_size=l.getSize(),m.db_audit_size=l.getAuditSize(),m.estimated_record_range=p.estimatedRange;let h=l.auditStore;if(h)for(let E of h.getKeys({reverse:!0,limit:1}))m.last_updated_record=E[0];if(!m.last_updated_record&&l.indices.__updatedtime__)for(let E of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))m.last_updated_record=E}catch(p){hh.warn(`unable to stat table dbi due to ${p}`)}return m}a(lT,"descTable");async function Jle(e){oT.transformReq(e);let t=yV(e,ia.object({database:ia.string(),exact_count:ia.boolean().strict(),include_computed:ia.boolean().strict()}));if(t)throw new RV(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=$C()[n];if(!i)throw aT(new Error,cT.SCHEMA_NOT_FOUND(e.schema),qC.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),oT.isEmpty(l)||l.describe){let u=await lT({schema:e.schema,table:c,exact_count:e.exact_count,include_computed:e.include_computed},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(Jle,"describeSchema")});var OV=M((f0e,CV)=>{"use strict";var Qle=Yl(),{hdbErrors:IV}=Ee(),{getDatabases:wV}=(Oe(),D(mt));CV.exports={checkSchemaExists:NV,checkSchemaTableExists:Xle,schemaDescribe:Qle};async function NV(e){if(!wV()[e])return IV.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(NV,"checkSchemaExists");async function Xle(e,t){let r=await NV(e);if(r)return r;if(!wV()[e][t])return IV.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Xle,"checkSchemaTableExists")});var uT=M((p0e,PV)=>{"use strict";var Zle=ms();PV.exports={writeTransaction:eue};function eue(e,t,r){return Zle.writeTransaction(e,t,r)}a(eue,"writeTransaction")});var jC=M((S0e,qV)=>{"use strict";var{decode:tue}=require("msgpackr"),{isMainThread:E0e,parentPort:_0e,threadId:g0e}=require("worker_threads"),mT=_r(),Jd=Dt(),YC=(G(),D(j)),Rn=Q(),KC=fe(),rue=(G(),D(j)),{onMessageByType:nue}=st(),MV=io(),{recordAction:LV,recordActionBinary:sue}=(os(),D(Tg)),{publishToStream:iue}=mT,{ConsumerEvents:DV}=require("nats"),oue=Sn(),{promisify:aue}=require("util"),{decodeBlobsWithWrites:cue}=(is(),D(ig)),UV=aue(setTimeout),pT=1e4,hT,fT,lue,uue,xV,Eh=new Map,Qd=new Map;qV.exports={initialize:BV,ingestConsumer:WC,setSubscription:due,setIgnoreOrigin:pue,getDatabaseSubscriptions:mue,updateConsumer:FV};async function BV(){nue(YC.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await FV(n)}),xV=!0,Rn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await mT.getNATSReferences();hT=e,fT=e.info.server_name,lue=t,uue=r}a(BV,"initialize");async function FV(e){if(e.status==="start"){let{js:t,jsm:r}=await kV(e.node_domain_name);WC(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Eh.get(e.stream_name+e.node_domain_name);t&&(Rn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Eh.set(e.stream_name+e.node_domain_name,"close")),Qd.get(e.node_domain_name)==="failed"&&Qd.set(e.node_domain_name,"close")}}a(FV,"updateConsumer");var ET=new Map;function due(e,t,r){let n=ET.get(e);n||ET.set(e,n=new Map),n.set(t,r),xV||BV().then(fue)}a(due,"setSubscription");async function fue(){let e=await oue.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+Jd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await kV(r),!n))break;let{schema:o,table:c}=i,l=MV.createNatsTableStreamName(o,c);WC(l,n,s,r)}}}a(fue,"accessConsumers");async function kV(e){let t,r,n=1;for(;!r;)try{t=await hT.jetstream({domain:e}),r=await hT.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Qd.get(e)==="close")break;Qd.set(e,"failed"),n%10===1&&Rn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<pT?n++*100:pT;await UV(i)}return{js:t,jsm:r}}a(kV,"connectToRemoteJS");function mue(){return ET}a(mue,"getDatabaseSubscriptions");var HV;function pue(e){HV=e}a(pue,"setIgnoreOrigin");var GV=100,vV=new Array(GV),dT=0;async function WC(e,t,r,n){let{connection:s}=await mT.getNATSReferences();hT=s,fT=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,fT),Rn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Qd.get(n)==="close")break;o%10===1&&Rn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(Rn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await mT.createConsumer(r,e,fT,new Date(Date.now()).toISOString()));let d=o++*100<pT?o++*100:pT;await UV(d)}let c=!1,l;for(;!c;){if(Eh.get(e+n)==="close"||Qd.get(n)==="close"){Eh.delete(e+n),c=!0;continue}l=await i.consume({max_messages:KC.get(YC.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Eh.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===DV.ConsumerDeleted&&(await l.close(),c=!0),d.type===DV.HeartbeatsMissed){let f=d.data;Rn.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(Rn.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let d of l)await vV[dT],vV[dT]=hue(d).catch(f=>{Rn.error(f)}),++dT>=GV&&(dT=0)}catch(d){d.message==="consumer deleted"?(Rn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):Rn.error("Error consuming clustering ingest, restarting consumer",d)}}}a(WC,"ingestConsumer");async function hue(e){let t;await cue(()=>{t=tue(e.data)}),LV(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Rn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=KC.get(YC.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Jd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Jd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Jd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!HV),sue(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Jd.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:p}=t;Rn.trace("processing message:",o,c,u,(d?"records: "+d.map(I=>I?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),Rn.trace(`messageProcessor nats msg id: ${e.headers.get(Jd.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(I=>h=I),{timestamp:_,user:R,node_name:S}=m||{},y=ET.get(c)?.get(u);if(!y)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=h,y.send(t);else if(d.length===1&&!l)y.send({type:VC(o),value:d[0],id:f?.[0],expiresAt:p,timestamp:_,table:u,onCommit:h,user:R,nodeName:S});else{let I=d.map((H,X)=>({type:VC(o),value:H,expiresAt:p,id:f?.[X],table:u}));for(;l;)I.push({type:VC(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;y.send({type:"transaction",writes:I,table:u,timestamp:_,onCommit:h,user:R,nodeName:S})}KC.get(rue.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&iue(e.subject.split(".").slice(0,-1).join("."),MV.createNatsTableStreamName(c,u),e.headers,e.data),await E;let w=Date.now()-_;_&&LV(w,"replication-latency",e.subject,o,"ingest")}catch(o){Rn.error(o)}e.ack()}a(hue,"messageProcessor");function VC(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(VC,"convertOperation")});var _r=M((w0e,i1)=>{"use strict";var Kr=fe();Kr.initSync();var Eue=require("fs-extra"),_ue=require("semver"),Sh=require("path"),{monotonicFactory:gue}=require("ulidx"),VV=gue(),Sue=require("util"),KV=require("child_process"),Tue=Sue.promisify(KV.exec),yue=KV.spawn,on=Dt(),rt=(G(),D(j)),{packageJson:Rue,PACKAGE_ROOT:bue}=yt(),_T=ae(),Ti=Q(),gT=io(),Aue=uT(),_h=_t(),{broadcast:Iue,onMessageByType:wue,getWorkerIndex:Nue}=st(),{isMainThread:YV}=require("worker_threads"),{Encoder:Cue,decode:XC}=require("msgpackr"),WV=new Cue,{isEmpty:Jl}=_T,jV=(hs(),D(co)),y0e=48*36e11;YV&&wue(rt.ITC_EVENT_TYPES.RESTART,()=>{bn=void 0,zl=void 0});var{connect:Oue,StorageType:Pue,RetentionPolicy:Lue,AckPolicy:ZC,DeliverPolicy:eO,DiscardPolicy:Due,NatsConnection:R0e,JetStreamManager:b0e,JetStreamClient:A0e,StringCodec:I0e,JSONCodec:vue,createInbox:tO,headers:Mue,ErrorCode:$V}=require("nats"),{recordAction:Uue}=(os(),D(Tg)),{encodeBlobsAsBuffers:xue}=(is(),D(ig)),zV=vue(),Bue="clustering",Fue=Rue.engines[on.NATS_SERVER_NAME],kue=Sh.join(bue,"dependencies"),QC=Sh.join(kue,`${process.platform}-${process.arch}`,on.NATS_BINARY_NAME),zC,JC,gh,Wl,jl;i1.exports={runCommand:JV,checkNATSServerInstalled:Hue,createConnection:rO,getConnection:Th,getJetStreamManager:yh,getJetStream:XV,getNATSReferences:po,getServerList:que,createLocalStream:nO,listStreams:ZV,deleteLocalStream:$ue,getServerConfig:Xd,listRemoteStreams:Vue,viewStream:Kue,viewStreamIterator:Yue,publishToStream:Wue,request:Jue,reloadNATS:sO,reloadNATSHub:Que,reloadNATSLeaf:Xue,extractServerName:zue,requestErrorHandler:Zue,createLocalTableStream:n1,createTableStreams:rde,purgeTableStream:s1,purgeSchemaTableStreams:nde,getStreamInfo:sde,updateLocalStreams:ode,closeConnection:Gue,getJsmServerName:ST,addNatsMsgHeader:e1,clearClientCache:QV,updateRemoteConsumer:ede,createConsumer:t1,updateConsumerIterator:tde};async function JV(e,t=void 0){let{stdout:r,stderr:n}=await Tue(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
16
16
|
`,""));return r.replace(`
|
|
17
|
-
`,"")}a(JV,"runCommand");async function Hue(){try{await Eue.access(QC)}catch{return!1}let e=await JV(`${QC} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return _ue.eq(t,Fue)}a(Hue,"checkNATSServerInstalled");async function rO(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await jV.getClusterUser();if(Jl(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Ti.trace("create nats connection called");let i=await Oue({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Kr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Kr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Kr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Ti.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Ti.error("Error with Nats client connection, connection closed",o),i===bn&&QV()}),i}a(rO,"createConnection");function QV(){bn=void 0,Wl=void 0,jl=void 0,zl=void 0}a(QV,"clearClientCache");async function Gue(){bn&&(await bn.drain(),bn=void 0,Wl=void 0,jl=void 0,zl=void 0)}a(Gue,"closeConnection");var bn,zl;async function Th(){return zl||(zl=rO(Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),bn=await zl),bn||zl}a(Th,"getConnection");async function yh(){if(Wl)return Wl;Jl(bn)&&await Th();let{domain:e}=Xd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Jl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Wl=await bn.jetstreamManager({domain:e,timeout:6e4}),Wl}a(yh,"getJetStreamManager");async function XV(){if(jl)return jl;Jl(bn)&&await Th();let{domain:e}=Xd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Jl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return jl=bn.jetstream({domain:e,timeout:6e4}),jl}a(XV,"getJetStream");async function po(){let e=bn||await Th(),t=Wl||await yh(),r=jl||await XV();return{connection:e,jsm:t,js:r}}a(po,"getNATSReferences");async function que(e){let t=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await jV.getClusterUser(),s=await rO(t,r,n),i=tO(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let f=zV.decode(d.data);f.response_time=Date.now()-l,c.push(f)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await _T.asyncSetTimeout(e),await o.drain(),await s.close(),await u,c}a(que,"getServerList");async function nO(e,t){let{jsm:r}=await po(),n=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Pue.File,retention:Lue.Limits,subjects:t,discard:Due.Old,maxMsgs:s,maxBytes:i,maxAge:n})}a(nO,"createLocalStream");async function ZV(){let{jsm:e}=await po(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(ZV,"listStreams");async function $ue(e){let{jsm:t}=await po();await t.streams.delete(e)}a($ue,"deleteLocalStream");async function Vue(e){let{connection:t}=await po(),r=[],n=tO(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(zV.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(Vue,"listRemoteStreams");async function Kue(e,t=void 0,r=void 0){let{jsm:n,js:s}=await po(),i=VV(),o={durable_name:i,ack_policy:ZC.Explicit};t&&(o.deliver_policy=eO.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=XC(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(on.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}a(Kue,"viewStream");async function*Yue(e,t=void 0,r=void 0){let{jsm:n,js:s}=await po(),i=VV(),o={durable_name:i,ack_policy:ZC.Explicit};t&&(o.deliver_policy=eO.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=XC(u.data);d[0]||(d=[d]);for(let f of d){let m={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:f};u.headers&&(m.origin=u.headers.get(on.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}a(Yue,"viewStreamIterator");async function Wue(e,t,r,n){Ti.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=e1(n,r);let{js:s}=await po(),i=await ST(),o=`${e}.${i}`,c=await xue(()=>n instanceof Uint8Array?n:WV.encode(n));try{Ti.trace(`publishToStream publishing to subject: ${o}`),Uue(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return r1(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){Ti.trace(`publishToStream creating stream: ${t}`);let d=o.split(".");d[2]="*",await nO(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(Wue,"publishToStream");function e1(e,t){t===void 0&&(t=Mue());let r=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(on.MSG_HEADERS.ORIGIN)&&r&&t.append(on.MSG_HEADERS.ORIGIN,r),t}a(e1,"addNatsMsgHeader");function Xd(e){e=e.toLowerCase();let t=Sh.join(Kr.get(rt.CONFIG_PARAMS.ROOTPATH),Bue);if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Jl(JC)&&(JC={port:_h.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:_h.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.HUB,config_file:on.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Sh.join(t,on.PID_FILES.HUB),hdbNatsPath:t}),JC;if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Jl(zC)&&(zC={port:_h.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:_h.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.LEAF,config_file:on.NATS_CONFIG_FILES.LEAF_SERVER,domain:_h.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.LEAF,pid_file_path:Sh.join(t,on.PID_FILES.LEAF),hdbNatsPath:t}),zC;Ti.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Xd,"getServerConfig");async function t1(e,t,r,n){try{await e.consumers.add(t,{ack_policy:ZC.Explicit,durable_name:r,deliver_policy:eO.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(t1,"createConsumer");async function jue(e,t,r){await e.consumers.delete(t,r)}a(jue,"removeConsumer");function zue(e){return e.split(".")[1]}a(zue,"extractServerName");async function Jue(e,t,r=6e4,n=tO()){if(!_T.isObject(t))throw new Error("data param must be an object");let s=WV.encode(t),{connection:i}=await po(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return XC(c.data)}a(Jue,"request");function sO(e){return new Promise(async(t,r)=>{let n=yue(QC,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(sO,"reloadNATS");async function Que(){let{pid_file_path:e}=Xd(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await sO(e)}a(Que,"reloadNATSHub");async function Xue(){let{pid_file_path:e}=Xd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await sO(e)}a(Xue,"reloadNATSLeaf");function Zue(e,t,r){let n;switch(e.code){case $V.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case $V.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Zue,"requestErrorHandler");async function ede(e,t){let r=t+on.SERVER_SUFFIX.LEAF,{connection:n}=await po(),{jsm:s}=await cde(r),{schema:i,table:o}=e,c=gT.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await r1(async()=>{if(e.subscribe===!0)await t1(s,c,n.info.server_name,l);else try{await jue(s,c,n.info.server_name)}catch(u){Ti.trace(u)}})}a(ede,"updateRemoteConsumer");async function tde(e,t,r,n){let s=gT.createNatsTableStreamName(e,t),i=r+on.SERVER_SUFFIX.LEAF,o={type:rt.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!YV&&Nue()<Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=jC();await c(o)}await Iue(o),n==="stop"&&await _T.asyncSetTimeout(1e3)}a(tde,"updateConsumerIterator");function r1(e){return Aue.writeTransaction(rt.SYSTEM_SCHEMA_NAME,rt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(r1,"exclusiveLock");async function n1(e,t){let r=gT.createNatsTableStreamName(e,t),n=await ST(),s=ide(e,t,n);await nO(r,[s])}a(n1,"createLocalTableStream");async function rde(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await n1(n,s)}}a(rde,"createTableStreams");async function s1(e,t,r=void 0){if(Kr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=gT.createNatsTableStreamName(e,t),{domain:s}=Xd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Th()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Ti.warn(n);else throw n}}a(s1,"purgeTableStream");async function nde(e,t){if(Kr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await s1(e,t[r])}a(nde,"purgeSchemaTableStreams");async function sde(e){return(await yh()).streams.info(e)}a(sde,"getStreamInfo");function ide(e,t,r){return`${on.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(ide,"createSubjectName");async function ST(){if(gh)return gh;if(gh=(await yh())?.nc?.info?.server_name,gh===void 0)throw new Error("Unable to get jetstream manager server name");return gh}a(ST,"getJsmServerName");async function ode(){let e=await yh(),t=await ST(),r=await ZV();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=ade(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");Ti.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(ode,"updateLocalStreams");function ade(e){let{config:t}=e,r=!1,n=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(ade,"updateStreamLimits");async function cde(e){let t,r;try{t=await bn.jetstream({domain:e}),r=await bn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Ti.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(cde,"connectToRemoteJS")});function iO(e){let t=e.get(TT),r=t?(0,Zd.unpack)(t):null;r||(r={remoteNameToId:{}});let n=nt(),s=!1;r.nodeName=nt();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:bh(e)??1,nodes:[]})})}i[n]=0,e.putSync(TT,(0,Zd.pack)(r))}return r}function Rh(e){return iO(e).remoteNameToId}function a1(e,t){let r=iO(t),n=r.remoteNameToId,s=new Map,i=!1;for(let o in e){let c=e[o],l=n[o];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[o]=l,i=!0}s.set(c,l)}return i&&t.putSync(TT,(0,Zd.pack)(r)),s}function yT(e,t){let r=iO(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(TT,(0,Zd.pack)(r))}return o1.trace?.("The remote node name map",e,n,s),s}var o1,Zd,TT,oO=se(()=>{o1=b(ir());gs();Zd=require("msgpackr"),TT=Symbol.for("remote-ids");a(iO,"getIdMappingRecord");a(Rh,"exportIdMapping");a(a1,"remoteToLocalNodeId");a(yT,"getIdOfRemoteNode")});var m1={};ye(m1,{commitsAwaitingReplication:()=>ef,getHDBNodeTable:()=>Gt,getReplicationSharedStatus:()=>tf,iterateRoutes:()=>Ih,shouldReplicateToNode:()=>Ah,subscribeToNodeUpdates:()=>rf});function Gt(){return c1||(c1=ze({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function tf(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(64),n&&{callback:n}))}function rf(e){Gt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;f1.debug?.("adding node",n,"on node",nt()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==nt()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Gt().search({}))if(i.shard!=null){let o=s.get(i.shard);o||s.set(i.shard,o=[]),o.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function Ah(e,t){let r=_c.default.get(x.REPLICATION_DATABASES);return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&(r==="*"||r?.find?.(n=>n.name===t&&(!n.sharded||e.shard===_c.default.get(x.REPLICATION_SHARD))))&&Gt().primaryStore.get(nt())?.replicates||e.subscriptions?.some(n=>(n.database||n.schema)===t&&n.subscribe)}function lde(){rf(e=>{gc({},(t,r)=>{let n=e.name,s=l1.get(n);if(s||l1.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=tf(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of ef.get(r)||[])u>l&&u<=c&&d();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*Ih(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=_c.default.get(x.REPLICATION_SECUREPORT)??(!_c.default.get(x.REPLICATION_PORT)&&_c.default.get(x.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||_c.default.get(x.REPLICATION_PORT)||_c.default.get(x.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){u1.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 u1,d1,_c,f1,c1,l1,ef,nf=se(()=>{Oe();gs();km();u1=require("worker_threads"),d1=b(Ee()),_c=b(fe());G();f1=b(ir());server.nodes=[];a(Gt,"getHDBNodeTable");a(tf,"getReplicationSharedStatus");a(rf,"subscribeToNodeUpdates");a(Ah,"shouldReplicateToNode");l1=new Map;Mx((e,t,r)=>{if(r>server.nodes.length)throw new d1.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);ef||(ef=new Map,lde());let n=ef.get(e);return n||(n=[],ef.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(lde,"startSubscriptionToReplications");a(Ih,"iterateRoutes")});var T1={};ye(T1,{connectedToNode:()=>Ql,disconnectedFromNode:()=>of,ensureNode:()=>ia,requestClusterStatus:()=>S1,startOnMainThread:()=>aO});async function aO(e){let t=0,r=lt();for(let o of Object.getOwnPropertyNames(r)){let c=r[o];for(let l in c){let u=c[l];if(u.auditStore){RT.set(o,bh(u.auditStore));break}}}yi.whenThreadsStarted.then(async()=>{let o=[];for await(let u of r.system.hdb_nodes?.search([])||[])o.push(u);let c=nt();function l(){let u=Gt().primaryStore.get(c);if(u!==null){let d=e.url??Sc();if(u===void 0||u.url!==d||u.shard!==e.shard)return ia(c,{name:c,url:d,shard:e.shard,replicates:!0})}}a(l,"ensureThisNode"),Gt().primaryStore.get(c)&&l();for(let u of Ih(e))try{let d=!u.subscriptions;if(d&&await l(),d&&u.replicates==null&&(u.replicates=!0),p1.push(u),o.find(f=>f.url===u.url))continue;s(u)}catch(d){console.error(d)}rf(s)});let n;function s(o,c=o?.name){let l=nt()&&c===nt()||Sc()&&o?.url===Sc();if(l){let m=!!o?.replicates;if(n!==void 0&&n!==m)for(let p of Gt().search([]))p.replicates&&p.name!==c&&s(p,p.name);n=m}if(ot.trace("Setting up node replication for",o),!o){for(let[m,p]of ho){let h;for(let[E,{worker:_,nodes:R}]of p){let S=R[0];if(S&&S.name==c){h=!0;for(let[y,{worker:w}]of p)p.delete(y),ot.warn("Node was deleted, unsubscribing from node",c,y,m),w?.postMessage({type:"unsubscribe-from-node",node:c,nodes:R,database:y,url:m});break}}if(h){ho.get(m).iterator.remove(),ho.delete(m);return}}return}if(l)return;if(!o.url){ot.info(`Node ${o.name} is missing url`);return}let u=ho.get(o.url);if(u&&u.iterator.remove(),!(o.replicates===!0||o.replicates?.sends)&&!o.subscriptions?.length&&!u)return;if(ot.info(`Added node ${o.name} at ${o.url} for process ${nt()}`),o.replicates&&o.subscriptions&&(o={...o,subscriptions:null}),o.name){for(let[m,p]of sf)if(o.url===p.url){sf.delete(m);break}sf.set(o.name,o)}let d=lt();if(u||(u=new Map,ho.set(o.url,u)),u.iterator=gc(e,(m,p,h)=>{h?f(p,!0):f(p,!1)}),o.subscriptions)for(let m of o.subscriptions){let p=m.database||m.schema;d[p]||(ot.warn(`Database ${p} not found for node ${o.name}, making a subscription anyway`),f(p,!1))}function f(m,p){ot.trace("Setting up replication for database",m,"on node",o.name);let h=u.get(m),E,_=[{replicateByDefault:p,...o}];RT.has(m)&&wh.default.get(x.REPLICATION_FAILOVER)&&(_.push({replicateByDefault:p,name:nt(),startTime:RT.get(m),endTime:Date.now(),replicates:!0}),RT.delete(m));let R=Ah(o,m),S=yi.workers.filter(y=>y.name==="http");if(h){if(E=h.worker,h.nodes=_,R)return}else R&&(t=t%S.length,E=S[t++],E||ot.warn("No http workers available to subscribe to node",o.name,o.url),u.set(m,{worker:E,nodes:_,url:o.url}),E?.on("exit",()=>{u.get(m)?.worker===E&&(u.delete(m),f(m,p))}));if(R){let y=ude.HDB_LEADER_URL??process.env.HDB_LEADER_URL??p1[0]?.url,w=y?new URL(y).hostname:Array.from(Gt().primaryStore.getKeys({}).filter(H=>H!==nt()))[0],I=_[0].name??(_[0].url&&new URL(_[0].url).hostname);ot.warn(`Setting up subscription with leader ${w} for node ${I}`),_[0].isLeader=!w||I===w,setTimeout(()=>{let H={..._[0],type:"subscribe-to-node",database:m,nodes:_};E?E.postMessage(H):Nh(H)},dde)}else{ot.info("Node no longer should be used, unsubscribing from node",{replicates:o.replicates,databaseName:m,node:o,subscriptions:o.subscriptions,hasDatabase:!!d[m],thisReplicates:Gt().primaryStore.get(nt())?.replicates}),Gt().primaryStore.get(nt())?.replicates||(n=!1,ot.info("Disabling replication, this node name",nt(),Gt().primaryStore.get(nt()),m));let y={type:"unsubscribe-from-node",database:m,url:o.url,name:o.name,nodes:_};E?E.postMessage(y):AT(y)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),of=a(function(o){try{ot.info("Disconnected from node",o.name,o.url,"finished",!!o.finished);let c=Array.from(sf.keys()),l=c.sort(),u=l.indexOf(o.name||Ri(o.url));if(u===-1){ot.warn("Disconnected node not found in node map",o.name,c);return}let d=ho.get(o.url),f=d?.get(o.database);if(!f){ot.warn("Disconnected node not found in replication map",o.database,d);return}if(f.connected=!1,o.finished||!wh.default.get(x.REPLICATION_FAILOVER))return;let m=f.nodes[0];if(!(m.replicates===!0||m.replicates?.sends||m.subscriptions?.length))return;let p=m.shard,h=(u+1)%l.length;for(;u!==h;){let E=l[h],_=sf.get(E);d=ho.get(_.url);let R=d?.get(o.database);if(!R||R.connected===!1||R.nodes[0].shard!==p){h=(h+1)%l.length;continue}let{nodes:S}=R,y=!1;for(let w of f.nodes){if(S.some(I=>I.name===w.name)){ot.info(`Disconnected node is already failing over to ${E} for ${o.database}`);continue}w.endTime<Date.now()||(S.push(w),ot.info(`Failing over ${o.database} from ${o.name} to ${E}`),i(w,o.database,R.nodes[0]),y=!0)}f.nodes=[f.nodes[0]],y||ot.info(`Disconnected node ${o.name} has no nodes to fail over to ${E}`);return}ot.warn("Unable to find any other node to fail over to",o.name,o.url)}catch(c){ot.error("Error failing over node",c)}},"disconnectedFromNode"),Ql=a(function(o){let c=ho.get(o.url),l=c?.get(o.database);if(!l){ot.warn("Connected node not found in replication map, this may be because the node is being removed",o.database,c);return}l.connected=!0,l.latency=o.latency;let u=l.nodes[0];if(!u){ot.warn("Newly connected node has no node subscriptions",o.database,l);return}if(!u.name){ot.debug("Connected node is not named yet",o.database,l);return}if(!wh.default.get(x.REPLICATION_FAILOVER))return;l.nodes=[u];let d=!1;for(let f of ho.values()){let m=f.get(o.database);if(!m||m==l)continue;let{worker:p,nodes:h,connected:E}=m;if(h)if(E===!1&&h[0].shard===u.shard&&node.url===u.url)for(let _ of h)i(_,o.database);else{let _=h.filter(R=>{if(R)return R.name===u.name&&R.worker?(R.worker.postMessage({type:"unsubscribe-to-node",database:o.database,url:o.url,nodes:[R]}),!1):!0});_.length<h.length&&(m.nodes=_)}}},"connectedToNode");function i(o,c,l=o){let u=yi.workers.filter(f=>f.name==="http");t=t%u.length;let d=u[t++];Object.defineProperty(o,"worker",{value:d,configurable:!0}),d?d.postMessage({url:l.url,name:l.name,type:"subscribe-to-node",database:c,nodes:[o]}):Nh({url:l.url,name:l.name,database:c,nodes:[o]})}a(i,"connectToNextWorker"),(0,yi.onMessageByType)("disconnected-from-node",of),(0,yi.onMessageByType)("connected-to-node",Ql),(0,yi.onMessageByType)("request-cluster-status",S1)}function S1(e,t){let r=[];for(let[n,s]of sf)try{let i=ho.get(s.url);ot.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)o.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(p=>!(p.endTime<Date.now())).map(p=>p.name)});let c=E1(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ot.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function ia(e,t){let r=Gt();e=e??Ri(t.url),t.name=e;try{if(t.ca){let s=new _1.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){ot.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ot.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!wh.default.get(x.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=E1(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ot.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var yi,bT,ot,h1,wh,_1,g1,E1,ude,dde,ho,of,Ql,sf,RT,p1,Ch=se(()=>{Oe();yi=b(st());gs();bT=require("worker_threads");nf();ot=b(Q()),h1=b(require("lodash")),wh=b(fe());G();_1=require("crypto"),g1=b(require("minimist")),{cloneDeep:E1}=h1.default,ude=(0,g1.default)(process.argv),dde=200,ho=new Map,sf=new Map,RT=new Map,p1=[];a(aO,"startOnMainThread");a(S1,"requestClusterStatus");bT.parentPort&&(of=a(e=>{bT.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Ql=a(e=>{bT.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,yi.onMessageByType)("subscribe-to-node",e=>{Nh(e)}),(0,yi.onMessageByType)("unsubscribe-from-node",e=>{AT(e)}));a(ia,"ensureNode")});var Ts=M(qt=>{"use strict";var gr=require("path"),{watch:fde}=require("chokidar"),Yn=require("fs-extra"),af=require("node-forge"),w1=require("net"),{generateKeyPair:cO,X509Certificate:oa,createPrivateKey:N1,randomBytes:mde}=require("node:crypto"),pde=require("util");cO=pde.promisify(cO);var vt=af.pki,bi=require("joi"),{v4:C1}=require("uuid"),{validateBySchema:fO}=ft(),{forComponent:hde}=Q(),Ss=fe(),Vs=(G(),D(j)),{CONFIG_PARAMS:Zl}=Vs,Ai=oA(),{ClientError:Tc}=Ee(),wT=require("node:tls"),{relative:O1,join:Ede}=require("node:path"),{CERTIFICATE_VALUES:y1}=Ai,_de=rl(),lO=_t(),{table:gde,getDatabases:Sde,databases:IT}=(Oe(),D(mt)),{getJWTRSAKeys:R1}=(Wd(),D(mh)),Xe=hde("tls").conditional;qt.generateKeys=hO;qt.updateConfigCert=B1;qt.createCsr=wde;qt.signCertificate=Nde;qt.setCertTable=cf;qt.loadCertificates=M1;qt.reviewSelfSignedCert=_O;qt.createTLSSelector=k1;qt.listCertificates=G1;qt.addCertificate=vde;qt.removeCertificate=Ude;qt.createNatsCerts=Pde;qt.generateCertsKeys=Ode;qt.getReplicationCert=Ph;qt.getReplicationCertAuth=Ide;qt.renewSelfSigned=Lde;qt.hostnamesFromCert=SO;qt.getKey=xde;qt.getHostnamesFromCertificate=Bde;qt.getPrimaryHostName=gO;qt.generateSerialNumber=OT;var{urlToNodeName:P1,getThisNodeUrl:Tde,getThisNodeName:CT,clearThisNodeName:yde}=(gs(),D(aa)),{readFileSync:Rde,statSync:L1}=require("node:fs"),G0e=fe(),{getTicketKeys:bde,onMessageFromWorkers:Ade}=st(),{isMainThread:D1}=require("worker_threads"),{TLSSocket:v1,createSecureContext:q0e}=require("node:tls"),mO=3650,Oh=["127.0.0.1","localhost","::1"],pO=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];function OT(){let e=mde(8);return e[0]=e[0]&127|1,e.toString("hex")}a(OT,"generateSerialNumber");Ade(async e=>{e.type===Vs.ITC_EVENT_TYPES.RESTART&&(Ss.initSync(!0),await _O())});var an;function Rc(){return an||(an=Sde().system.hdb_certificate,an||(an=gde({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),an}a(Rc,"getCertTable");async function Ph(){let e=k1("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(CT());if(!r)return;let n=new oa(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(Ph,"getReplicationCert");async function Ide(){Rc();let e=(await Ph()).options.cert,r=new oa(e).issuer.match(/CN=(.*)/)?.[1];return an.get(r)}a(Ide,"getReplicationCertAuth");var b1,yc=new Map;function M1(){if(b1)return;b1=!0;let e=[{configKey:Zl.TLS},{configKey:Zl.OPERATIONSAPI_TLS}];Rc();let t=gr.dirname(lO.getConfigFilePath()),r;for(let{configKey:n}of e){let s=lO.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&O1(Ede(t,"keys"),o);c&&A1(o,l=>{yc.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&D1){let d;A1(u,f=>{if(y1.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=F1(u),h=new oa(p),E;try{E=gO(h)}catch(y){Xe.error?.("error extracting host name from certificate",y);return}if(E==null){Xe.error?.("No host name found on certificate");return}if(h.checkIssued(new oa(y1.cert)))return;let _=an.primaryStore.get(E),R=L1(u).mtimeMs,S=!_||_.is_self_signed?1:_.file_timestamp??_.__updatedtime__;if(_&&R<=S){R<S&&Xe.info?.(`Certificate ${E} at ${u} is older (${new Date(R)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=an.put({name:E,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:p,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:R,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject?.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(M1,"loadCertificates");function A1(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&D1&&Xe.warn?.(`Reloading ${r}:`,i),n=c,t(F1(i)))}catch(c){Xe.error?.(`Error loading ${r}:`,i,c)}},"loadFile");Yn.existsSync(e)?s(e,L1(e)):Xe.error?.(`${r} file not found:`,e),fde(e,{persistent:!1}).on("change",s)}a(A1,"loadAndWatch");function uO(){let e=Tde();if(e==null){let t=Oh[0];return Xe.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return P1(e)}a(uO,"getHost");function NT(){let e=CT();if(e==null){let t=Oh[0];return Xe.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(NT,"getCommonName");async function wde(){let e=await Ph(),t=vt.certificateFromPem(e.options.cert),r=vt.privateKeyFromPem(e.options.key);Xe.info?.("Creating CSR with cert named:",e.name);let n=vt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:NT()},...pO];Xe.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:U1()}];return Xe.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),af.pki.certificationRequestToPem(n)}a(wde,"createCsr");function U1(){let e=Oh.includes(NT())?Oh:[...Oh,NT()];return e.includes(uO())||e.push(uO()),[{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=>w1.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(U1,"certExtensions");async function Nde(e){let t={},r=gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;Rc();for await(let d of an.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(yc.has(d.private_key_name)){n=yc.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await Yn.exists(gr.join(r,d.private_key_name))){n=Yn.readFile(gr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await dO();s=d.ca,n=d.private_key}n=vt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=vt.certificateFromPem(s.certificate);Xe.info?.("Signing CSR with cert named",s.name);let o=vt.certificationRequestFromPem(e.csr);try{o.verify()}catch(d){return Xe.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=af.pki.createCertificate();c.serialNumber=OT(),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+mO),Xe.info?.("sign cert setting validity:",c.validity),Xe.info?.("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),Xe.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;Xe.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,af.md.sha256.create()),t.certificate=vt.certificateToPem(c)}else Xe.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(Nde,"signCertificate");async function Cde(e,t){await cf({name:CT(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await cf({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:vt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(Cde,"createCertificateTable");async function cf(e){let t;try{t=new oa(e.certificate)}catch(r){Xe.error?.(`Failed to parse certificate for ${e.name}:`,r.message),Xe.debug?.("Certificate record details:",JSON.stringify(e,null,2));let n=new Error(`Invalid certificate format for ${e.name}: ${r.message}. This may be due to corrupted certificate data during transfer or encoding issues.`);throw n.code="INVALID_CERTIFICATE_FORMAT",n.cause=r,n}e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject?.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},Rc(),await an.patch(e)}a(cf,"setCertTable");async function hO(){let e=await cO("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:vt.publicKeyFromPem(e.publicKey),privateKey:vt.privateKeyFromPem(e.privateKey)}}a(hO,"generateKeys");async function EO(e,t,r){let n=vt.createCertificate();if(!t){let o=await Ph();t=vt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=OT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+mO);let i=[{name:"commonName",value:NT()},...pO];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(U1()),n.sign(e,af.md.sha256.create()),vt.certificateToPem(n)}a(EO,"generateCertificates");async function dO(){let e=await G1(),t;for(let r of e){if(!r.is_authority)continue;let n=await H1(r.private_key_name);if(r.private_key_name&&n&&new oa(r.certificate).checkPrivateKey(N1(n))){Xe.trace?.(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;Xe.trace?.("No CA found with matching private key")}a(dO,"getCertAuthority");async function x1(e,t,r=!0){let n=vt.createCertificate();n.publicKey=t,n.serialNumber=OT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+mO);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${Ss.get(Zl.REPLICATION_HOSTNAME)??P1(Ss.get(Zl.REPLICATION_URL))??C1().split("-")[0]}`},...pO];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,af.md.sha256.create());let o=gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),c=gr.join(o,Ai.PRIVATEKEY_PEM_NAME);return r&&await Yn.writeFile(c,vt.privateKeyToPem(e)),n}a(x1,"generateCertAuthority");async function Ode(){let{privateKey:e,publicKey:t}=await hO(),r=await x1(e,t),n=await EO(e,t,r);await Cde(n,r),B1()}a(Ode,"generateCertsKeys");async function Pde(){let e=await EO(vt.privateKeyFromPem(Ai.CERTIFICATE_VALUES.key),void 0,vt.certificateFromPem(Ai.CERTIFICATE_VALUES.cert)),t=gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),r=gr.join(t,Ai.NATS_CERTIFICATE_PEM_NAME);await Yn.exists(r)||await Yn.writeFile(r,e);let n=gr.join(t,Ai.NATS_CA_PEM_NAME);await Yn.exists(n)||await Yn.writeFile(n,Ai.CERTIFICATE_VALUES.cert)}a(Pde,"createNatsCerts");async function Lde(){Rc();for await(let e of an.search([{attribute:"is_self_signed",value:!0}]))await an.delete(e.name);await _O()}a(Lde,"renewSelfSigned");async function _O(){yde(),await M1(),Rc();let e=await dO();if(!e){Xe.notify?.("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=a(u=>{try{return{key:vt.privateKeyFromPem(Yn.readFileSync(u)),keyPath:u}}catch(d){return Xe.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=Ss.get(Zl.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let d=r(u.privateKey);if(s=d.key,i=d.keyPath,d.key)break}}else{let u=Ss.get(Zl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let o=gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),c=O1(o,i);s||(Xe.warn?.("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await hO(),Yn.existsSync(gr.join(o,Ai.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${C1().split("-")[0]}.pem`),await Yn.writeFile(gr.join(o,c),vt.privateKeyToPem(s)));let l=await x1(s,vt.setRsaPublicKey(s.n,s.e),!1);await cf({name:l.subject.getField("CN").value,uses:["https"],certificate:vt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await Ph()){let r=CT();Xe.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await dO();let n=vt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await EO(vt.privateKeyFromPem(e.private_key),s,n);await cf({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(_O,"reviewSelfSignedCert");function B1(){let e=_de(Object.keys(Vs.CONFIG_PARAM_MAP),!0),t=gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),r=gr.join(t,Ai.PRIVATEKEY_PEM_NAME),n=gr.join(t,Ai.NATS_CERTIFICATE_PEM_NAME),s=gr.join(t,Ai.NATS_CA_PEM_NAME),i=Vs.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),lO.updateConfigValue(void 0,void 0,o,!1,!0)}a(B1,"updateConfigCert");function F1(e){return e.startsWith("-----BEGIN")?e:Rde(e,"utf8")}a(F1,"readPEM");var I1=wT.createSecureContext;wT.createSecureContext=function(e){if(!e.cert||!e.key)return I1(e);let t={...e};delete t.key,delete t.cert;let r=I1(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Dde=v1.prototype._init;v1.prototype._init=function(e,t){Dde.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var Xl=new Map;function k1(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Xl.clear();let d=0;if(IT===void 0){c();return}for await(let f of IT.system.hdb_certificate.search([])){let m=f.certificate,p=new oa(m);f.is_authority&&(p.asString=m,Xl.set(p.subject,m))}for await(let f of IT.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",p=f.is_self_signed?1:3;m&&f.uses?.includes?.("operations")&&(p+=1);let h=await H1(f.private_key_name),E=f.certificate,_=new oa(E);if(Xl.has(_.issuer)&&(E+=`
|
|
18
|
-
`+Xl.get(_.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let R={ciphers:f.ciphers,ticketKeys:bde(),availableCAs:Xl,ca:t&&Array.from(Xl.values()),cert:E,key:h,key_file:f.private_key_name,is_self_signed:f.is_self_signed};o&&(R.sessionIdContext=o.sessionIdContext);let S=f.hostnames??SO(_);Array.isArray(S)||(S=[S]);for(let I of S)I===uO()&&(p+=1);let y=wT.createSecureContext(R);y.name=f.name,y.options=R,y.quality=p,y.certificateAuthorities=Array.from(Xl),y.certStart=E.toString().slice(0,100);let w;for(let I of S)if(I){I[0]==="*"&&(s=!0,I=I.slice(1)),w1.isIP(I)&&(w=!0);let H=r.get(I)?.quality??0;Xe.trace?.("Assigning TLS for hostname",I,"if",p,">",H),p>H&&r.set(I,y)}else Xe.error?.("No hostname found for certificate at",wT.certificate);Xe.trace?.("Adding TLS",y.name,"for",o.ports||"client","cert named",f.name,"hostnames",S,"quality",p,"best quality",d),p>d&&(i.defaultContext=n=y,d=p,o&&(o.defaultContext=y))}catch(m){Xe.error?.("Error applying TLS for",f.name,m)}o?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}a(u,"updateTLS"),IT?.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){Xe.info?.("TLS requested for",o||"(no SNI)");let l=o;for(;;){let d=r.get(l);if(d)return Xe.debug?.("Found certificate for",o,d.certStart),d.updatedContext&&(d=d.updatedContext),c(null,d);if(s&&l){let f=l.indexOf(".",1);f<0?l="":l=l.slice(f)}else break}o?Xe.debug?.("No certificate found to match",o,"using the default certificate"):Xe.debug?.("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):Xe.info?.("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(k1,"createTLSSelector");async function H1(e){let t=yc.get(e);return!t&&e?await Yn.readFile(gr.join(Ss.get(Zl.ROOTPATH),Vs.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(H1,"getPrivateKeyByName");async function G1(){Rc();let e=[];for await(let t of an.search([]))e.push(t);return e}a(G1,"listCertificates");async function vde(e){let t=fO(e,bi.object({name:bi.string().required(),certificate:bi.string().required(),is_authority:bi.boolean().required(),private_key:bi.string(),hosts:bi.array(),uses:bi.array()}));if(t)throw new Tc(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new oa(n),c=!1,l=!1,u;for(let[p,h]of yc)!s&&!c&&o.checkPrivateKey(N1(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new Tc("A suitable private key was not found for this certificate");let d;if(!r){try{d=gO(o)}catch(p){Xe.error?.(p)}if(d==null)throw new Tc("Error extracting certificate host name, please provide a name parameter")}let f=Mde(r??d);s&&!c&&!l&&(await Yn.writeFile(gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME,f+".pem"),s),yc.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 cf(m),"Successfully added certificate: "+f}a(vde,"addCertificate");function Mde(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(Mde,"sanitizeName");async function Ude(e){let t=fO(e,bi.object({name:bi.string().required()}));if(t)throw new Tc(t.message);let{name:r}=e;Rc();let n=await an.get(r);if(!n)throw new Tc(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await an.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(Xe.info?.("Removing private key named",s),await Yn.remove(gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME,s)))}return await an.delete(r),"Successfully removed "+r}a(Ude,"removeCertificate");function gO(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||SO(e)[0]}a(gO,"getPrimaryHostName");function SO(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=e.subject?.match(/CN=(.*)/)?.[1];return t?[t]:[]}a(SO,"hostnamesFromCert");async function xde(e){if(e.bypass_auth!==!0)throw new Tc("Unauthorized","401");let t=fO(e,bi.object({name:bi.string().required()}));if(t)throw new Tc(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await R1()).privateKey;if(r===".jwtPublic")return(await R1()).publicKey;if(yc.get(r))return yc.get(e.name);throw new Tc("Key not found")}a(xde,"getKey");function Bde(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}a(Bde,"getHostnamesFromCertificate")});var dK={};ye(dK,{BACK_PRESSURE_RATIO_POSITION:()=>cK,CONFIRMATION_STATUS_POSITION:()=>aK,LATENCY_POSITION:()=>MT,NodeReplicationConnection:()=>uf,OPERATION_REQUEST:()=>AO,RECEIVED_TIME_POSITION:()=>wO,RECEIVED_VERSION_POSITION:()=>IO,RECEIVING_STATUS_POSITION:()=>NO,RECEIVING_STATUS_RECEIVING:()=>uK,RECEIVING_STATUS_WAITING:()=>lK,SENDING_TIME_POSITION:()=>Dh,createWebSocket:()=>UT,databaseSubscriptions:()=>Ac,replicateOverWS:()=>vh,tableUpdateListeners:()=>PO});async function UT(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=nt(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!RO){let l=(0,nK.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),RO=u.secureContexts}if(i=RO.get(s),i&&le.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let o={};r&&(o.Authorization=r);let c={headers:o,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,iK.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&((lf?.caCount!==ca.size||lf?.derivedFromContext!==i)&&(lf=sK.createSecureContext({...i.options,ca:[...ca,...i.options.availableCAs.values()]}),lf.caCount=ca.size,lf.derivedFromContext=i),c.secureContext=lf),new eK.WebSocket(e,"harperdb-replication-v1",c)}function vh(e,t,r){let n=t.port||t.securePort,s=OO.pid%1e3+"-"+tK.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);le.debug?.(s,"Initializing replication connection",r);let i=0,o=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(o.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||Ac,f,m,p=!1,h=t.subscription;h?.then&&h.then(A=>{h=A,h.auditStore&&(f=h.auditStore)});let E=t.tables||u&<()[u],_,R=new Map,S=[];_=r.name,_&&t.connection&&(t.connection.nodeName=_);let y,w,I,H,X,q,k,z=6e4,Y,ce=0,de=0,te=0,Se=Z1.default.get(x.REPLICATION_BLOBTIMEOUT)??12e4,Ne=new Map,Ke=[],$e=0,Ir;if(t.url){let A=a(()=>{X&&de===e._socket?.bytesRead&&te===e._socket?.bytesWritten?e.terminate():(X=performance.now(),e.ping(),de=e._socket?.bytesRead,te=e._socket?.bytesWritten)},"sendPing");I=setInterval(A,Q1).unref(),A()}else nr();e._socket?.setMaxListeners(200);function nr(){clearTimeout(H),de=e._socket?.bytesRead,te=e._socket?.bytesWritten,H=setTimeout(()=>{de===e._socket?.bytesRead&&te===e._socket?.bytesWritten&&(le.warn?.(`Timeout waiting for ping from ${_}, terminating connection and reconnecting`),e.terminate())},Q1*2).unref()}a(nr,"resetPingTimer");let zr=0,xr=0,Du=!1,Qc=3e4;function Bt(){if(pn?.length>0){let A=performance.now(),U=A-xr;zr=(zr*Qc+(Du?U:0))/(Qc+U),m&&(m[cK]=zr),xr=A}}a(Bt,"updateBackPressureRatio"),setInterval(Bt,Qc).unref();function si(){if(!(!_||!u))return m||(m=tf(f,u,_)),m}a(si,"getSharedStatus"),u&&Xc(u);let qa,u_,um=[],d_=[],dm,ve=[],f_=[],Vb=[],vu=150,qi=25,Ps=0,fm=0,mm=!1,xo,Dn,pn,Br;e.on("message",Mu);async function Mu(A){if(r=await r,!r){le.error?.(s,"No authorization provided"),Fr(1008,"Unauthorized");return}pm(A),e.off("message",Mu),e.on("message",pm)}a(Mu,"onWSMessageWhenAuthorized");function pm(A){ce=performance.now();try{let U=A.dataView=new fl(A.buffer,A.byteOffset,A.byteLength);if(A[0]>127){let W=(0,at.decode)(A),[J,F,he]=W;switch(J){case $1:{if(F){if(_){if(_!==F){le.error?.(s,`Node name mismatch, expecting to connect to ${_}, but peer reported name as ${F}, disconnecting`),e.send((0,at.encode)([Lh])),Fr(1008,"Node name mismatch");return}}else if(_=F,t.connection?.tentativeNode){let me=t.connection.tentativeNode;me.name=_,t.connection.tentativeNode=null,ia(_,me)}if(t.connection&&(t.connection.nodeName=_),le.debug?.(s,"received node name:",_,"db:",u??W[2]),!u)try{Xc(u=W[2]),u==="system"&&(qa=gc(t,(me,ie)=>{Ka(ie)&&K(ie)}),e.on("close",()=>{qa?.remove()}))}catch(me){le.warn?.(s,"Error setting database",me),e.send((0,at.encode)([Lh])),Fr(1008,me.message);return}hm()}break}case z1:{le.debug?.(s,"Received table definitions for",F.map(me=>me.table));for(let me of F){let ie=W[2];me.database=ie;let Ce;if(Ka(ie)){if(u==="system")Me[ie]?.[me.table]||(Ce=v(me,Me[ie]?.[me.table]));else{if(ie!=="data"&&!Me[ie]){le.warn?.("Database not found",ie);return}Ce=v(me,Me[ie]?.[me.table])}f||(f=Ce?.auditStore),E||(E=lt()?.[ie])}}break}case Lh:Fr();break;case AO:try{let me=r?.replicates||r?.subscribers||r?.name;le.debug?.("Received operation request",F,"from",_),server.operation(F,{user:r},!me).then(ie=>{le.debug?.("Requested request from finished",_,ie),Array.isArray(ie)&&(ie={results:ie}),ie.requestId=F.requestId,e.send((0,at.encode)([LT,ie]))},ie=>{le.debug?.("Failed requested operation from",_,ie),e.send((0,at.encode)([LT,{requestId:F.requestId,error:TO(ie)}]))})}catch(me){e.send((0,at.encode)([LT,{requestId:F.requestId,error:TO(me)}]))}break;case LT:let{resolve:ue,reject:_e}=R.get(F.requestId);le.debug?.("Received completed operation request",_,F),F.error?_e(new Error(F.error)):ue(F),R.delete(F.requestId);break;case yO:let re=W[3];if(!E){u?le.error?.(s,"No database found for",u):le.error?.(s,"Database name never received"),Fr();return}let oe=E[re];oe=v({table:re,database:u,attributes:F.attributes,schemaDefined:F.schemaDefined},oe),um[he]={name:re,decoder:new at.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:F.typedStructs,structures:F.structures}),getEntry(me){return oe.primaryStore.getEntry(me)},rootStore:oe.primaryStore.rootStore};break;case V1:Br=f?a1(F,f):new Map,dm=W[2],le.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${dm}`);break;case K1:let ge=he;Vb[ge]=F;break;case j1:si()[aK]=F,le.trace?.(s,"received and broadcasting committed update",F),si().buffer.notify();break;case W1:y=F,h.send({type:"end_txn",localTime:y,remoteNodeIds:S});break;case DT:{let me=W[1],{fileId:ie,size:Ce,finished:Be,error:He}=me,Te=Ne.get(ie);le.debug?.("Received blob",ie,"has stream",!!Te,"connectedToBlob",!!Te?.connectedToBlob,"length",W[2].length,"finished",Be),Te||(Te=new bO.PassThrough,Te.expectedSize=Ce,Ne.set(ie,Te)),Te.lastChunk=Date.now();let pt=W[2];We(pt.byteLength,"bytes-received",`${_}.${u}`,"replication","blob");try{Be?(He?(Te.on("error",()=>{}),Te.destroy(new Error("Blob error: "+He+" for record "+(Te.recordId??"unknown")+" from "+_))):Te.end(pt),Te.connectedToBlob&&Ne.delete(ie)):Te.write(pt)}catch(Nt){le.error?.(`Error receiving blob for ${Te.recordId} from ${_} and streaming to storage`,Nt),Ne.delete(ie)}break}case Y1:{let me=F,ie;try{let Ce=W[3],Be=d_[he]||(d_[he]=E[W[4]]);if(!Be)return le.warn?.("Unknown table id trying to handle record request",he);let He=Be.primaryStore.getBinaryFast(Symbol.for("structures")),Te=He?.length??0;if(Te>0&&Te!==fm){fm=Te;let Nt=(0,at.decode)(He);e.send((0,at.encode)([yO,{typedStructs:Nt.typed,structures:Nt.named},he,Be.tableName]))}let pt=Be.primaryStore.getBinaryFast(Ce);if(pt){let Nt=Be.primaryStore.decoder.decode(pt,{valueAsBuffer:!0}),Ft=ut||{};Ft.version=(0,oK.getLastVersion)(),ut&&ut[Zu]&Zr&&(Nt=Buffer.from(Nt),zm(()=>Be.primaryStore.decoder.decode(pt),p_=>$a(p_,Ce),Be.primaryStore.rootStore)),ie=(0,at.encode)([PT,me,{value:Nt,expiresAt:Ft.expiresAt,version:Ft.version,residencyId:Ft.residencyId,nodeId:Ft.nodeId,user:Ft.user}])}else ie=(0,at.encode)([PT,me])}catch(Ce){ie=(0,at.encode)([PT,me,{error:Ce.message}])}e.send(ie);break}case PT:{let{resolve:me,reject:ie,tableId:Ce,key:Be}=R.get(W[1]),He=W[2];if(He?.error)ie(new Error(He.error));else if(He){let Te;sg(()=>{let pt=um[Ce].decoder.decode(He.value);He.value=pt,He.key=Be,me(He)||Te&&setTimeout(()=>Te.forEach(tg),6e4).unref()},f?.rootStore,pt=>{let Nt=Va(pt,Be);return Te||(Te=[]),Te.push(Nt),Nt})}else me();R.delete(W[1]);break}case q1:{pn=F;let me,ie,Ce=!1;if(h){if(u!==h.databaseName&&!h.then){le.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(le.debug?.(s,"received subscription request for",u,"at",pn),!h){let De;h=new Promise(sr=>{le.debug?.("Waiting for subscription to database "+u),De=sr}),h.ready=De,Ac.set(u,h)}if(r.name)ie=Gt().subscribe(r.name),ie.then(async De=>{me=De;for await(let sr of me){let ht=sr.value;if(!(ht?.replicates===!0||ht?.replicates?.receives||ht?.subscriptions?.some(kr=>(kr.database||kr.schema)===u&&kr.publish!==!1))){Ce=!0,Fr(1008,`Unauthorized database subscription to ${u}`);return}}},De=>{le.error?.(s,"Error subscribing to HDB nodes",De)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,at.encode)([Lh])),Fr(1008,`Unauthorized database subscription to ${u}`);return}if(Dn&&(le.debug?.(s,"stopping previous subscription",u),Dn.emit("close")),pn.length===0)return;let Be=pn[0],He=a(De=>{if(De&&(Be.replicateByDefault?!Be.tables.includes(De.tableName):Be.tables.includes(De.tableName)))return{table:De}},"tableToTableEntry"),Te={txnTime:0},pt,Nt,Ft=1/0,p_,h_=a((De,sr)=>{if(De.type==="end_txn"){Te.txnTime&&(o[i]!==66&&le.error?.("Invalid encoding of message"),C(9),C(hg),O(p_=sr),nU()),i=c,Te.txnTime=0;return}let ht=De.nodeId,kr=De.tableId,Ct=Nt[kr];if(!Ct&&(Ct=Nt[kr]=He(h.tableById[kr]),!Ct))return le.debug?.("Not subscribed to table",kr);let Ls=Ct.table,zt=Ls.primaryStore,ii=zt.encoder;(De.extendedType&Ig||!ii.typedStructs)&&(ii._mergeStructures(ii.getStructures()),ii.typedStructs&&(ii.lastTypedStructuresLength=ii.typedStructs.length));let Bu=pt[ht];if(!(Bu&&Bu.startTime<sr&&(!Bu.endTime||Bu.endTime>sr)))return vT&&le.trace?.(s,"skipping replication update",De.recordId,"to:",_,"from:",ht,"subscribed:",pt),sU();vT&&le.trace?.(s,"sending replication update",De.recordId,"to:",_,"from:",ht,"subscribed:",pt);let Kb=De.version;Te.txnTime!==Kb&&(Te.txnTime&&(vT&&le.trace?.(s,"new txn time, sending queued txn",Te.txnTime),o[i]!==66&&le.error?.("Invalid encoding of message"),nU()),Te.txnTime=Kb,i=c,O(Kb));let Zc=De.residencyId,Yb=m_(Zc,Ls),E_;if(Yb&&!Yb.includes(_)){let $i=m_(De.previousResidencyId,Ls);if($i&&!$i.includes(_)&&(De.type==="put"||De.type==="patch")||Ls.getResidencyById)return sU();let el=De.recordId;le.trace?.(s,"sending invalidation",el,_,"from",ht);let Em=0;Zc&&(Em|=ml),De.previousResidencyId&&(Em|=pl);let zb,__=null;for(let iU in Ls.indices){if(!__){if(zb=De.getValue(zt,!0),!zb)break;__={}}__[iU]=zb[iU]}E_=hl(De.version,kr,el,null,ht,De.user,De.type==="put"||De.type==="patch"?"invalidate":De.type,ii.encode(__),Em,Zc,De.previousResidencyId,De.expiresAt)}function sU(){return le.trace?.(s,"skipping audit record",De.recordId),q||(q=setTimeout(()=>{q=null,(p_||0)+J1/2<Ft&&(vT&&le.trace?.(s,"sending skipped sequence update",Ft),e.send((0,at.encode)([W1,Ft])))},J1).unref()),new Promise(setImmediate)}a(sU,"skipAuditRecord");let Wb=ii.typedStructs,jb=ii.structures;if((Wb?.length!=Ct.typed_length||jb?.length!=Ct.structure_length)&&(Ct.typed_length=Wb?.length,Ct.structure_length=jb.length,le.debug?.(s,"send table struct",Ct.typed_length,Ct.structure_length),Ct.sentName||(Ct.sentName=!0),e.send((0,at.encode)([yO,{typedStructs:Wb,structures:jb,attributes:Ls.attributes,schemaDefined:Ls.schemaDefined},kr,Ct.table.tableName]))),Zc&&!f_[Zc]&&(e.send((0,at.encode)([K1,Yb,Zc])),f_[Zc]=!0),E_)C(E_.length),P(E_);else{let $i=De.encoded;De.extendedType&Zr&&zm(()=>De.getValue(zt),Em=>$a(Em,De.recordId),zt.rootStore);let el=$i[0]===66?8:0;C($i.length-el),P($i,el),le.trace?.("wrote record",De.recordId,"length:",$i.length)}if(e._socket.writableNeedDrain){let $i=performance.now();return Du=!0,Bt(),new Promise(el=>{le.debug?.(`Waiting for remote node ${_} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",()=>{el(),Du=!1,Bt()})})}else return $e>qi?new Promise($i=>{Ir=$i}):new Promise(setImmediate)},"sendAuditRecord"),nU=a(()=>{c-i>8?(e.send(o.subarray(i,c)),le.debug?.(s,"Sent message, size:",c-i),u!=="system"&&We(c-i,"bytes-sent",`${_}.${u}`,"replication","egress")):le.debug?.(s,"skipping empty transaction")},"sendQueuedData");Dn=new CO.EventEmitter,Dn.once("close",()=>{Ce=!0,me?.end()});for(let{startTime:De}of pn)De<Ft&&(Ft=De);(ie||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,Nt=h.tableById.map(He),pt=[];for(let{name:sr,startTime:ht,endTime:kr}of pn){let Ct=yT(sr,f);le.debug?.("subscription to",sr,"using local id",Ct,"starting",ht),pt[Ct]={startTime:ht,endTime:kr}}K(u),qa||(qa=Vl(sr=>{sr.databaseName===u&&K(u)}),u_=ih(sr=>{sr===u&&(e.send((0,at.encode)([Lh])),Fr())}),e.on("close",()=>{qa?.remove(),u_?.remove()})),e.send((0,at.encode)([V1,Rh(h.auditStore),pn.map(({name:sr})=>sr)]));let De=!0;do{isFinite(Ft)||(le.warn?.("Invalid sequence id "+Ft),Fr(1008,"Invalid sequence id"+Ft));let sr;if(De&&!Ce&&(De=!1,Ft===0)){le.info?.("Replicating all tables to",_);let ht=Date.now(),kr=xT(f);for(let Ct in E){if(!He(Ct))continue;let Ls=E[Ct];for(let zt of Ls.primaryStore.getRange({snapshot:!1,versions:!0})){if(Ce)return;le.trace?.(s,"Copying record from",u,Ct,zt.key,zt.localTime),ht=Math.max(zt.localTime??1,ht),sr=!0,si()[Dh]=1;let ii=hl(zt.version,Ls.tableId,zt.key,null,kr,null,"put",zm(()=>Ls.primaryStore.encoder.encode(zt.value),Bu=>$a(Bu,zt.key)),zt.metadataFlags&-256,zt.residencyId,null,zt.expiresAt);await h_({recordId:zt.key,tableId:Ls.tableId,type:"put",getValue(){return zt.value},encoded:ii,version:zt.version,residencyId:zt.residencyId,nodeId:kr,extendedType:zt.metadataFlags},zt.localTime)}}Te.txnTime||(Te.txnTime=ht,O(ht)),h_({type:"end_txn"},ht),si()[Dh]=0,Ft=ht}for(let{key:ht,value:kr}of f.getRange({start:Ft||1,exclusiveStart:!0,snapshot:!1})){if(Ce)return;let Ct=At(kr);le.debug?.("sending audit record",ht,Ct.recordId),si()[Dh]=ht,Ft=ht,await h_(Ct,ht),Dn.startTime=ht,sr=!0}sr&&h_({type:"end_txn"},Ft),si()[Dh]=0,await DB(f)}while(!Ce)}).catch(De=>{le.error?.(s,"Error handling subscription to node",De),Fr(1008,"Error handling subscription to node")});break}}return}U.position=8;let N=!0,L,$;do{si();let W=U.readInt();if(W===9&&U.getUint8(U.position)==hg){U.position++,y=$=U.readFloat64(),m[IO]=y,m[wO]=Date.now(),m[NO]=lK,h.send({type:"end_txn",localTime:y,remoteNodeIds:S}),le.trace?.("received remote sequence update",y,u);break}let J=U.position,F=At(A,J,J+W),he=um[F.tableId];he||le.error?.(`No table found with an id of ${F.tableId}`);let ue;F.residencyId&&(ue=Vb[F.residencyId],le.trace?.(s,"received residency list",ue,F.type,F.recordId));let _e=F.recordId;try{sg(()=>{L={table:he.name,id:F.recordId,type:F.type,nodeId:Br.get(F.nodeId),residencyList:ue,timestamp:F.version,value:F.getValue(he),user:F.user,beginTxn:N,expiresAt:F.expiresAt}},f?.rootStore,re=>Va(re,_e))}catch(re){throw re.message+=" record id: "+_e,re.message+=" typed structures for current decoder"+JSON.stringify(he.decoder.typedStructs),re.message+=" structures for current decoder"+JSON.stringify(he.decoder.structures),re}N=!1,le.debug?.(s,"received replication message",F.type,"id",L.id,"version",new Date(F.version),"nodeId",L.nodeId),m[IO]=F.version,m[wO]=Date.now(),m[NO]=uK,h.send(L),U.position=J+W}while(U.position<A.byteLength);Ps++,u!=="system"&&We(A.byteLength,"bytes-received",`${_}.${u}.${L?.table||"unknown_table"}`,"replication","ingest"),Ps>vu&&!mm&&(mm=!0,e.pause(),le.debug?.(`Commit backlog causing replication back-pressure, requesting that ${_} pause replication`)),h.send({type:"end_txn",localTime:y,remoteNodeIds:S,async onCommit(){if(L){let W=Date.now()-L.timestamp;u!=="system"&&We(W,"replication-latency",_+"."+u+"."+L.table,L.type,"ingest")}Ps--,mm&&(mm=!1,e.resume(),le.debug?.(`Replication resuming ${_}`)),Ke.length>0&&await Promise.all(Ke),le.trace?.("All blobs finished"),!w&&$&&(le.trace?.(s,"queuing confirmation of a commit at",$),setTimeout(()=>{e.send((0,at.encode)([j1,w])),le.trace?.(s,"sent confirmation of a commit at",w),w=null},kde)),w=$,le.debug?.("last sequence committed",new Date($),u)}})}catch(U){le.error?.(s,"Error handling incoming replication message",U)}}a(pm,"onWSMessage"),e.on("ping",nr),e.on("pong",()=>{if(t.connection){let A=performance.now()-X;t.connection.latency=A,si()&&(m[MT]=A),t.isSubscriptionConnection&&Ql({name:_,database:u,url:t.url,latency:A})}X=null}),e.on("close",(A,U)=>{clearInterval(I),clearTimeout(H),clearInterval(k),Dn&&Dn.emit("close"),xo&&xo.end();for(let[N,{reject:L}]of R)L(new Error(`Connection closed ${U?.toString()} ${A}`));le.debug?.(s,"closed",A,U?.toString())});function Fr(A,U){try{e.isFinished=!0,le.debug?.(s,"closing",_,u,A,U),e.close(A,U),t.connection?.emit("finished")}catch(N){le.error?.(s,"Error closing connection",N)}}a(Fr,"close");let Uu=new Set;async function $a(A,U){let N=rg(A);if(Uu.has(N)){le.debug?.("Blob already being sent",N);return}Uu.add(N);try{let L;$e++;for await(let $ of A.stream())L&&(le.debug?.("Sending blob chunk",N,"length",L.length),e.send((0,at.encode)([DT,{fileId:N,size:A.size},L]))),L=$,e._socket.writableNeedDrain&&(le.debug?.("draining",N),await new Promise(W=>e._socket.once("drain",W)),le.debug?.("drained",N)),We($.length,"bytes-sent",`${_}.${u}`,"replication","blob");le.debug?.("Sending final blob chunk",N,"length",L.length),e.send((0,at.encode)([DT,{fileId:N,size:A.size,finished:!0},L]))}catch(L){le.warn?.("Error sending blob",L,"blob id",N,"for record",U),e.send((0,at.encode)([DT,{fileId:N,finished:!0,error:TO(L)},Buffer.alloc(0)]))}finally{Uu.delete(N),$e--,$e<qi&&Ir?.()}}a($a,"sendBlobs");function Va(A,U){let N=rg(A),L=Ne.get(N);le.debug?.("Received transaction with blob",N,"has stream",!!L,"ended",!!L?.writableEnded),L?L.writableEnded&&Ne.delete(N):(L=new bO.PassThrough,Ne.set(N,L)),L.connectedToBlob=!0,L.lastChunk=Date.now(),L.recordId=U,A.size===void 0&&L.expectedSize&&(A.size=L.expectedSize);let $=L.blob??createBlob(L,A);L.blob=$;let W=Yo(()=>jm($).saving,h.auditStore?.rootStore);return W&&(W.blobId=N,Ke.push(W),W.finally(()=>{le.debug?.(`Finished receiving blob stream ${N}`),Ke.splice(Ke.indexOf(W),1)})),$}a(Va,"receiveBlobs");function hm(){if(p||(p=!0,t.connection?.on("subscriptions-updated",hm)),!f&&h&&(f=h.auditStore),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let A=new Map;f||(f=h?.auditStore);try{for(let L of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let $ of L.value.nodes||[])$.lastTxnTime>(A.get($.id)??0)&&A.set($.id,$.lastTxnTime)}catch(L){if(!L.message.includes("Can not re"))throw L}let U=t.connection?.nodeSubscriptions?.[0];S=[];let N=t.connection?.nodeSubscriptions.map((L,$)=>{let W=[],{replicateByDefault:J}=L;if(L.subscriptions){for(let _e of L.subscriptions)if(_e.subscribe&&(_e.schema||_e.database)===u){let re=_e.table;E?.[re]?.replicate!==!1&&W.push(re)}J=!1}else for(let _e in E)(J?E[_e].replicate===!1:E[_e].replicate)&&W.push(_e);let F=f&&yT(L.name,f),he=h?.dbisDB?.get([Symbol.for("seq"),F])??1,ue=Math.max(he?.seqId??1,(typeof L.startTime=="string"?new Date(L.startTime).getTime():L.startTime)??1);if(le.debug?.("Starting time recorded in db",L.name,F,u,he?.seqId,"start time:",ue,new Date(ue)),U!==L){let _e=f&&yT(U.name,f),re=h?.dbisDB?.get([Symbol.for("seq"),_e])??1;for(let oe of re?.nodes||[])oe.name===L.name&&(ue=oe.seqId,le.debug?.("Using sequence id from proxy node",U.name,ue))}return F===void 0?le.warn("Starting subscription request from node",L,"but no node id found"):S.push(F),A.get(F)>ue&&(ue=A.get(F),le.debug?.("Updating start time from more recent txn recorded",U.name,ue)),ue===1&&(L.isLeader?(le.warn?.(`Requesting full copy of database ${u} from ${L.url}`),ue=0):ue=Date.now()-6e4),le.trace?.(s,"defining subscription request",L.name,u,new Date(ue)),{name:L.name,replicateByDefault:J,tables:W,startTime:ue,isLeader:L.isLeader,endTime:L.endTime}});if(N)if(le.debug?.(s,"sending subscription request",N,h?.dbisDB?.path),clearTimeout(Y),N.length>0)e.send((0,at.encode)([q1,N]));else{let L=a(()=>{let $=performance.now();Y=setTimeout(()=>{ce<=$?Fr(1008,"Connection has no subscriptions and is no longer used"):L()},z).unref()},"scheduleClose");L()}}a(hm,"sendSubscriptionRequestUpdate");function m_(A,U){if(!A)return;let N=ve[A];return N||(N=U.getResidencyRecord(A),ve[A]=N),N}a(m_,"getResidence");function Ka(A){return!(bc&&bc!="*"&&!bc[A]&&!bc.includes?.(A)&&!bc.some?.(U=>U.name===A))}a(Ka,"checkDatabaseAccess");function Xc(A){if(h=h||d.get(A),!Ka(A))throw new Error(`Access to database "${A}" is not permitted`);h||le.warn?.(`No database named "${A}" was declared and registered`),f=h?.auditStore,E||(E=lt()?.[A]);let U=nt();if(U===_)throw U?new Error("Should not connect to self",U):new Error("Node name not defined");return xu(U,A),!0}a(Xc,"setDatabase");function xu(A,U){let N=lt()?.[U],L=[];for(let $ in N){let W=N[$];L.push({table:$,schemaDefined:W.schemaDefined,attributes:W.attributes.map(J=>({name:J.name,type:J.type,isPrimaryKey:J.isPrimaryKey}))})}le.trace?.("Sending database info for node",A,"database name",U),e.send((0,at.encode)([$1,A,U,L]))}a(xu,"sendNodeDBName");function K(A){let U=lt()?.[A],N=[];for(let L in U){if(pn&&!pn.some(W=>W.replicateByDefault?!W.tables.includes(L):W.tables.includes(L)))continue;let $=U[L];N.push({table:L,schemaDefined:$.schemaDefined,attributes:$.attributes.map(W=>({name:W.name,type:W.type,isPrimaryKey:W.isPrimaryKey}))})}e.send((0,at.encode)([z1,N,A]))}a(K,"sendDBSchema"),k=setInterval(()=>{for(let[A,U]of Ne)U.lastChunk+Se<Date.now()&&(le.warn?.(`Timeout waiting for blob stream to finish ${A} for record ${U.recordId??"unknown"} from ${_}`),Ne.delete(A),U.end())},Se).unref();let g=1,T=[];return{end(){xo&&xo.end(),Dn&&Dn.emit("close")},getRecord(A){let U=g++;return new Promise((N,L)=>{let $=[Y1,U,A.table.tableId,A.id];T[A.table.tableId]||($.push(A.table.tableName),T[A.table.tableId]=!0),e.send((0,at.encode)($)),ce=performance.now(),R.set(U,{tableId:A.table.tableId,key:A.id,resolve(W){let{table:J,entry:F}=A;if(N(W),W)return J._recordRelocate(F,W)},reject:L})})},sendOperation(A){let U=g++;return A.requestId=U,e.send((0,at.encode)([AO,A])),new Promise((N,L)=>{R.set(U,{resolve:N,reject:L})})}};function C(A){B(5),A<128?o[c++]=A:A<16384?(l.setUint16(c,A|32768),c+=2):A<1056964608?(l.setUint32(c,A|3221225472),c+=4):(o[c]=255,l.setUint32(c+1,A),c+=5)}function P(A,U=0,N=A.length){let L=N-U;B(L),A.copy(o,c,U,N),c+=L}function O(A){B(8),l.setFloat64(c,A),c+=8}function B(A){if(A+16>o.length-c){let U=Buffer.allocUnsafeSlow(c+A-i+65536>>10<<11);o.copy(U,0,i,c),c=c-i,i=0,o=U,l=new DataView(o.buffer,0,o.length)}}function v(A,U){let N=A.database??"data";U||(U={});let L=U.schemaDefined,$=!1,W=A.schemaDefined,J=U.attributes||[];for(let F=0;F<A.attributes?.length;F++){let he=A.attributes[F],ue=J.find(_e=>_e.name===he.name);(!ue||ue.type!==he.type)&&(L?le.error?.(`Schema for '${u}.${A.table}' is defined locally, but attribute '${he.name}: ${he.type}' from '${_}' does not match local attribute ${ue?"'"+ue.name+": "+ue.type+"'":"which does not exist"}`):($=!0,W||(he.indexed=!0),ue?J[J.indexOf(ue)]=he:J.push(he)))}return $?(le.debug?.("(Re)creating",A),ze({table:A.table,database:A.database,schemaDefined:A.schemaDefined,attributes:J,...U})):U}}var Z1,at,eK,tK,rK,CO,nK,sK,OO,iK,bO,oK,Fde,TO,le,q1,$1,V1,Lh,K1,yO,Y1,PT,AO,LT,W1,j1,z1,DT,aK,IO,wO,Dh,MT,NO,cK,lK,uK,PO,Ac,vT,J1,kde,Q1,RO,lf,X1,uf,LO=se(()=>{Oe();Ki();oO();MI();gs();Z1=b(fe());G();El();at=require("msgpackr"),eK=require("ws"),tK=require("worker_threads"),rK=b(Q());Ch();CO=require("events"),nK=b(Ts()),sK=b(require("node:tls"));nf();OO=b(require("node:process")),iK=require("node:net");os();is();bO=require("node:stream"),oK=require("lmdb"),{forComponent:Fde,errorToString:TO}=rK.default,le=Fde("replication").conditional,q1=129,$1=140,V1=141,Lh=142,K1=130,yO=132,Y1=133,PT=134,AO=136,LT=137,W1=143,j1=144,z1=145,DT=146,aK=0,IO=1,wO=2,Dh=3,MT=4,NO=5,cK=6,lK=0,uK=1,PO=new Map,Ac=new Map,vT=!0,J1=300,kde=2,Q1=3e4;a(UT,"createWebSocket");X1=500,uf=class extends CO.EventEmitter{static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=X1;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??Ri(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await UT(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;le.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${OO.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),le[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=X1,this.nodeSubscriptions&&Ql({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=vh(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(le.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),n.isHandled=!0):n.code!=="ECONNREFUSED"&&(n.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?le.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):le.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&of({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();le.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};a(vh,"replicateOverWS")});function Ic(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 mK(e){let t=[],r=e;for(;r?.raw;){let n={cert:r.raw};if(r.issuerCertificate&&r.issuerCertificate!==r&&r.issuerCertificate.raw&&(n.issuer=r.issuerCertificate.raw),t.push(n),r.issuerCertificate&&r.issuerCertificate!==r)r=r.issuerCertificate;else break}return t}function MO(e){try{let t=eu(e),n=Eo.Certificate.fromBER(t).extensions?.find(c=>c.extnID==="2.5.29.31");if(!n)return la.debug?.("Certificate has no CRL Distribution Points extension"),[];let s=ua.fromBER(n.extnValue.valueBlock.valueHexView);if(s.offset===-1)throw new Error("Failed to parse ASN.1 structure in CRL Distribution Points extension");let i=new Eo.CRLDistributionPoints({schema:s.result}),o=[];for(let c of i.distributionPoints)if(c.distributionPoint&&Array.isArray(c.distributionPoint)){for(let l of c.distributionPoint)if(l.type===6&&typeof l.value=="string"){let u=l.value;(u.startsWith("http://")||u.startsWith("https://"))&&o.push(u)}}return la.debug?.(`Found ${o.length} CRL distribution points: ${o}`),o}catch(t){return la.warn?.(`Failed to extract CRL distribution points: ${t}`),[]}}function pK(e){try{let t=eu(e),r=Eo.Certificate.fromBER(t),n=[],s=[];for(let i of r.extensions||[])if(i.extnID==="2.5.29.31")try{let o=ua.fromBER(i.extnValue.valueBlock.valueHexView);if(o.offset!==-1){let c=new Eo.CRLDistributionPoints({schema:o.result});for(let l of c.distributionPoints)if(l.distributionPoint&&Array.isArray(l.distributionPoint)){for(let u of l.distributionPoint)if(u.type===6&&typeof u.value=="string"){let d=u.value;(d.startsWith("http://")||d.startsWith("https://"))&&n.push(d)}}}}catch(o){la.warn?.(`Failed to parse CRL Distribution Points extension: ${o}`)}else if(i.extnID==="1.3.6.1.5.5.7.1.1")try{let o=ua.fromBER(i.extnValue.valueBlock.valueHexView);if(o.offset!==-1&&o.result instanceof ua.Sequence){for(let c of o.result.valueBlock.value)if(c instanceof ua.Sequence&&c.valueBlock.value.length>=2){let l=c.valueBlock.value[0],u=c.valueBlock.value[1];if(l instanceof ua.ObjectIdentifier&&l.valueBlock.toString()==="1.3.6.1.5.5.7.48.1"&&u.idBlock.tagNumber===6){let d=String.fromCharCode(...Array.from(u.valueBlock.valueHexView));(d.startsWith("http://")||d.startsWith("https://"))&&s.push(d)}}}}catch(o){la.warn?.(`Failed to parse Authority Information Access extension: ${o}`)}return la.debug?.(`Found ${n.length} CRL distribution points and ${s.length} OCSP responder URLs`),{crlUrls:n,ocspUrls:s}}catch(t){return la.warn?.(`Failed to extract revocation URLs: ${t}`),{crlUrls:[],ocspUrls:[]}}}function eu(e){let t=e.replace(/-----BEGIN [^-]+-----/g,"").replace(/-----END [^-]+-----/g,"").replace(/\s/g,""),r=atob(t),n=new ArrayBuffer(r.length),s=new Uint8Array(n);for(let i=0;i<r.length;i++)s[i]=r.charCodeAt(i);return n}function BT(e,t,r,n){let s={certPem:e,issuerPem:t,method:r,...n},i=(0,vO.createHash)("sha256").update(JSON.stringify(s)).digest("hex");return`${r}:${i}`}function UO(e,t){return`${e}:${t}`}function hK(e){try{let t=eu(e),n=Eo.Certificate.fromBER(t).serialNumber.valueBlock.valueHexView;return Array.from(n).map(s=>s.toString(16).padStart(2,"0")).join("")}catch(t){throw la.error?.(`Failed to extract serial number: ${t}`),new Error(`Failed to extract certificate serial number: ${t.message}`)}}function xO(e){try{let t=eu(e),r=Eo.Certificate.fromBER(t),n=r.extensions?.find(i=>i.extnID==="2.5.29.35");if(n){let i=new Eo.AuthorityKeyIdentifier({schema:n.parsedValue});if(i.keyIdentifier){let o=i.keyIdentifier.valueBlock.valueHexView;return Array.from(o).map(c=>c.toString(16).padStart(2,"0")).join("")}}let s=r.issuer.typesAndValues.map(i=>`${i.type}=${i.value.valueBlock.value}`).join(",");return(0,vO.createHash)("sha256").update(s).digest("hex")}catch(t){throw la.error?.(`Failed to extract issuer key ID: ${t}`),new Error(`Failed to extract issuer key ID: ${t.message}`)}}function FT(){return DO||(DO=ze({table:"hdb_certificate_cache",database:"system",attributes:[{name:"certificate_id",isPrimaryKey:!0},{name:"status"},{name:"reason"},{name:"checked_at"},{name:"expiresAt",expiresAt:!0,indexed:!0},{name:"method"}]})),DO}var vO,Eo,ua,fK,la,DO,kT=se(()=>{vO=require("node:crypto"),Eo=b(require("pkijs")),ua=b(require("asn1js")),fK=b(ir());Oe();la=(0,fK.loggerWithTag)("cert-verification-utils");a(Ic,"bufferToPem");a(mK,"extractCertificateChain");a(MO,"extractCRLDistributionPoints");a(pK,"extractRevocationUrls");a(eu,"pemToBuffer");a(BT,"createCacheKey");a(UO,"createRevokedCertificateId");a(hK,"extractSerialNumber");a(xO,"extractIssuerKeyId");DO=null;a(FT,"getCertificateCacheTable")});function EK(e){let{error:t,value:r}=$de.validate(e,{abortEarly:!1,allowUnknown:!1});if(t){let n=t.details.map(s=>s.message).join("; ");throw new Error(`Invalid certificate verification configuration: ${n}`)}return r}var Yr,Hde,df,ff,BO,Gde,qde,$de,_K=se(()=>{Yr=b(require("joi")),Hde="fail-closed",df={timeout:5e3,cacheTtl:36e5,errorCacheTtl:3e5,failureMode:"fail-closed"},ff={timeout:1e4,cacheTtl:864e5,failureMode:"fail-closed",gracePeriod:864e5},BO=Yr.default.string().valid("fail-open","fail-closed"),Gde=Yr.default.alternatives().try(Yr.default.boolean().custom(e=>e===!1?{enabled:!1}:{enabled:!0,...ff}),Yr.default.object({enabled:Yr.default.boolean().default(!0),timeout:Yr.default.number().min(1e3).default(ff.timeout).messages({"number.min":"CRL timeout must be at least 1000ms (1 second)"}),cacheTtl:Yr.default.number().min(1e3).default(ff.cacheTtl).messages({"number.min":"CRL cacheTtl must be at least 1000ms (1 second)"}),failureMode:BO.default(ff.failureMode),gracePeriod:Yr.default.number().min(0).default(ff.gracePeriod).messages({"number.min":"CRL gracePeriod must be at least 0ms"})})),qde=Yr.default.alternatives().try(Yr.default.boolean().custom(e=>e===!1?{enabled:!1}:{enabled:!0,...df}),Yr.default.object({enabled:Yr.default.boolean().default(!0),timeout:Yr.default.number().min(1e3).default(df.timeout).messages({"number.min":"OCSP timeout must be at least 1000ms (1 second)"}),cacheTtl:Yr.default.number().min(1e3).default(df.cacheTtl).messages({"number.min":"OCSP cacheTtl must be at least 1000ms (1 second)"}),errorCacheTtl:Yr.default.number().min(1e3).default(df.errorCacheTtl).messages({"number.min":"OCSP errorCacheTtl must be at least 1000ms (1 second)"}),failureMode:BO.default(df.failureMode)})),$de=Yr.default.object({failureMode:BO.default(Hde),crl:Gde.default({enabled:!0,...ff}),ocsp:qde.default({enabled:!0,...df})});a(EK,"validateAndParseCertificateVerificationConfig")});function wK(e){if(typeof e=="boolean"||e==null){if(e===FO&&kO)return _o.trace?.("Using cached validation error result (primitive) - returning disabled"),!1;if(e===FO&&HT!==null)return _o.trace?.("Using cached certificate verification config (primitive)"),HT;_o.trace?.("Parsing and caching certificate verification config (primitive)"),FO=e;try{return HT=TK(e),kO=null,HT}catch(n){return kO=n,_o.error?.(`Certificate verification config validation failed - defaulting to disabled: ${n.message}`),!1}}if(SK.get(e))return _o.trace?.("Using cached validation error result (object) - returning disabled"),!1;let r=gK.get(e);if(r!==void 0)return _o.trace?.("Using cached certificate verification config (object)"),r;_o.trace?.("Parsing and caching certificate verification config (object)");try{let n=TK(e);return gK.set(e,n),n}catch(n){return SK.set(e,n),_o.error?.(`Certificate verification config validation failed - defaulting to disabled: ${n.message}`),!1}}function TK(e){if(_o.trace?.(`getCertificateVerificationConfig called with: ${JSON.stringify({mtlsConfig:e})}`),!e)return!1;let t=e===!0?void 0:e.certificateVerification;return _o.trace?.(`Certificate verification config: ${JSON.stringify({verificationConfig:t})}`),t==null||t===!1?!1:EK(t===!0?{}:t)}var yK,RK,_o,bK,AK,IK,gK,FO,HT,SK,kO,HO=se(()=>{yK=b(ir()),RK=b(yt());_K();_o=(0,yK.loggerWithTag)("cert-verification-config"),bK=10080*60*1e3,AK=3e5,IK=`Harper/${RK.packageJson.version} CRL-Client`,gK=new WeakMap,FO=null,HT=null,SK=new WeakMap,kO=null;a(wK,"getCachedCertificateVerificationConfig");a(TK,"getCertificateVerificationConfig")});function Mh(e){return e===CK||e===Vde}function Kde(e){return e===OK||e===PK}function GO(e){return e===CK?OK:PK}function Yde(){if(NK)return;NK=!0;let e=tu.CryptoEngine.prototype,t=tu.Certificate.prototype,r={getHashAlgorithm:e.getHashAlgorithm,getAlgorithmByOID:e.getAlgorithmByOID,getAlgorithmParameters:e.getAlgorithmParameters,verifyWithPublicKey:e.verifyWithPublicKey,certificateVerify:t.verify,getPublicKey:t.getPublicKey};e.getHashAlgorithm=function(...n){let[s]=n;return Mh(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return Mh(s)?{name:GO(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return Kde(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=tu.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(Mh(i)){let o=GO(i);return s.importKey("spki",this.subjectPublicKeyInfo.toSchema().toBER(!1),o,!0,["verify"])}return r.getPublicKey.call(this,...n)},t.verify=async function(...n){let[s]=n;if(Mh(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),o=s.toSchema().toBER(!1),c=new Uh.X509Certificate(Buffer.from(i)),l=new Uh.X509Certificate(Buffer.from(o));return c.verify(l.publicKey)}catch{return!1}return r.certificateVerify.call(this,...n)},r.verifyWithPublicKey&&(e.verifyWithPublicKey=async function(...n){let[s,i,o]=n,c=o.algorithm.algorithmId;if(Mh(c)){let l=GO(c);try{let u=this.crypto?.subtle||this.subtle||tu.getCrypto(!0)?.subtle||Uh.webcrypto?.subtle;if(!u)throw new Error("No crypto.subtle available");let d=await u.importKey("spki",o.toSchema().toBER(!1),l,!1,["verify"]),f=i.valueBlock.valueHexView;return"unusedBits"in i.valueBlock&&i.valueBlock.unusedBits>0&&(f=f.slice(0,f.length-1)),await u.verify(l,d,f,s)}catch{return!1}}return r.verifyWithPublicKey.call(this,...n)})}var tu,Uh,CK,Vde,OK,PK,NK,LK=se(()=>{tu=b(require("pkijs")),Uh=require("node:crypto"),CK="1.3.101.112",Vde="1.3.101.113",OK="Ed25519",PK="Ed448",NK=!1;a(Mh,"isEd25519OrEd448");a(Kde,"isEdDSAAlgorithmName");a(GO,"getEdDSAAlgorithmName");a(Yde,"applyEd25519Patch");Yde()});var UK={};ye(UK,{CRLSignatureVerificationError:()=>xh,performCRLCheck:()=>zde,verifyCRL:()=>VO});function Wde(){return GT||(GT=FT(),GT.sourcedFrom(mf)),GT}function jde(){return qT||(qT=ze({table:"hdb_crl_cache",database:"system",attributes:[{name:"distribution_point",isPrimaryKey:!0},{name:"issuer_dn"},{name:"crl_blob"},{name:"this_update"},{name:"next_update"},{name:"signature_valid"},{name:"expiresAt",expiresAt:!0,indexed:!0}]}),qT.sourcedFrom($O)),qT}function vK(){return qO||(qO=ze({table:"hdb_revoked_certificates",database:"system",attributes:[{name:"composite_id",isPrimaryKey:!0},{name:"serial_number",indexed:!0},{name:"issuer_key_id",indexed:!0},{name:"revocation_date"},{name:"revocation_reason"},{name:"crl_source",indexed:!0},{name:"crl_next_update"},{name:"expiresAt",expiresAt:!0,indexed:!0}]})),qO}async function VO(e,t,r,n){if(r?.enabled===!1)return{valid:!0,status:"disabled",method:"disabled"};try{let s=Ic(e,"CERTIFICATE"),i=Ic(t,"CERTIFICATE"),o=n??MO(s);if(o.length===0)return{valid:!0,status:"no-crl-distribution-points",method:"crl"};let c=BT(s,i,"crl"),l=await Wde().get(c,{certPem:s,issuerPem:i,distributionPoint:o[0],config:{crl:r??{}}});if(!l)return Or.error?.("Cache fetch returned null - this indicates a source configuration issue"),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"crl"}:(Or.warn?.("CRL cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"crl"});let u=l,d=l.wasLoadedFromSource?.();return Or.trace?.(`CRL ${d?"source fetch":"cache hit"} for certificate`),{valid:u.status==="good",status:u.status,cached:!d,method:u.method||"crl"}}catch(s){return Or.error?.(`CRL verification error: ${s}`),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:s.message,method:"crl"}:(Or.warn?.("CRL check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"crl"})}}async function zde(e,t,r,n){let s=n??MO(e);if(s.length===0)return{status:"good"};let i=hK(e),o=xO(t),c=UO(o,i);try{let u=await vK().get(c);if(u){let f=Date.now(),m=u;return m.crl_next_update>f?{status:"revoked",reason:m.revocation_reason||"unspecified",source:m.crl_source}:m.crl_next_update+r.gracePeriod>f?(Or.warn?.("Using expired CRL data within grace period"),{status:"revoked",reason:m.revocation_reason||"unspecified",source:m.crl_source}):(Or.warn?.("CRL data is too old, treating as unknown"),{status:"unknown",reason:"crl-expired"})}let d=await Jde(s,t,r);return d.upToDate?{status:"good",source:d.source}:(Or.warn?.("CRL data is stale or missing, treating as unknown"),{status:"unknown",reason:d.reason||"crl-unavailable"})}catch(l){return Or.error?.(`CRL lookup error: ${l}`),{status:"unknown",reason:l.message}}}async function Jde(e,t,r){let n=Date.now();for(let s of e)try{let i=jde(),o=null,c=null;try{c=await i.get(s),(c&&c.next_update>n||c&&c.next_update+r.gracePeriod>n)&&(o=c)}catch{}o||(o=await MK(s,t,r.timeout));let l=o.next_update;if(l>n){if(!c)try{await i.put(s,o)}catch{}return{upToDate:!0,source:s}}else return l+r.gracePeriod>n?{upToDate:!0,source:s}:{upToDate:!1,reason:"crl-expired"}}catch(i){if(i instanceof xh)throw i}return{upToDate:!1,reason:"no-current-crl-data"}}async function MK(e,t,r){let n=new AbortController,s=setTimeout(()=>n.abort(),r);try{let i=await fetch(e,{signal:n.signal,headers:{"User-Agent":IK}});if(clearTimeout(s),!i.ok)throw new Error(`CRL download failed: ${i.status}`);let o=Buffer.from(await i.arrayBuffer()),c,l=o.toString("utf8");l.includes("-----BEGIN X509 CRL-----")?c=Buffer.from(eu(l)):c=o;let u=$T.CertificateRevocationList.fromBER(c),d=$T.Certificate.fromBER(eu(t)),f=await u.verify({issuerCertificate:d});if(!f){let _=`CRL signature verification failed for: ${e}`;throw Or.error?.(_),new xh(_)}let m=u.thisUpdate.value.getTime(),p=u.nextUpdate?.value.getTime()??m+bK,h=d.issuer.typesAndValues.map(_=>`${_.type}=${_.value.valueBlock.value}`).join(","),E={distribution_point:e,issuer_dn:h,crl_blob:o,this_update:m,next_update:p,signature_valid:f,expiresAt:p};return Qde(u,t,e,p).catch(_=>{Or.error?.(`Error processing revoked certificates: ${_}`)}),E}finally{clearTimeout(s)}}async function Qde(e,t,r,n){let s=vK(),i=xO(t),o=r;try{await Xde(s,o)}catch(c){Or.warn?.(`Failed to clear existing CRL entries: ${c}`)}if(e.revokedCertificates)for(let c of e.revokedCertificates)try{let l=c.userCertificate.valueBlock.valueHexView;if(!l){Or.warn?.("Could not extract serial number from revoked certificate");continue}let u=Array.from(l).map(h=>h.toString(16).padStart(2,"0")).join(""),d=UO(i,u),f=c.revocationDate.value.getTime(),p={composite_id:d,serial_number:u,issuer_key_id:i,revocation_date:f,revocation_reason:"unspecified",crl_source:o,crl_next_update:n,expiresAt:n};await s.create(p.composite_id,p)}catch(l){Or.warn?.(`Failed to process revoked certificate: ${l}`)}}async function Xde(e,t){try{let r=e.search([{attribute:"crl_source",value:t}]);for await(let n of r)try{await e.delete(n.composite_id)}catch(s){Or.warn?.(`Failed to delete revoked certificate entry: ${s}`)}}catch(r){throw Or.error?.(`Failed to search for existing CRL entries: ${r}`),r}}var $T,DK,xh,Or,GT,$O,qT,qO,KO=se(()=>{$T=b(require("pkijs")),DK=b(ir());Oe();Qi();kT();HO();YO();xh=class extends Error{static{a(this,"CRLSignatureVerificationError")}constructor(t){super(t),this.name="CRLSignatureVerificationError"}},Or=(0,DK.loggerWithTag)("crl-verification");a(Wde,"getCertificateCacheTable");$O=class extends Xt{static{a(this,"CertificateRevocationListSource")}async get(t){let n=this.getContext()?.requestContext;if(!n?.distributionPoint||!n?.issuerPem)throw new Error(`No CRL data provided for cache key: ${t}`);let{distributionPoint:s,issuerPem:i,config:o}=n;try{let c=await MK(s,i,o.timeout),l=c.next_update,u=Date.now()+o.cacheTtl,d=Math.min(l,u);return{...c,expiresAt:d}}catch(c){if(Or.error?.(`CRL fetch error for: ${s} - ${c}`),o.failureMode==="fail-closed"){let l=Date.now()+AK;return{crl_id:t,distribution_point:s,issuer_dn:"unknown",crl_blob:Buffer.alloc(0),this_update:Date.now(),next_update:l,signature_valid:!1,expiresAt:l}}return Or.warn?.("CRL fetch failed, not caching (fail-open mode)"),null}}};a(jde,"getCRLCacheTable");a(vK,"getRevokedCertificateTable");a(VO,"verifyCRL");a(zde,"performCRLCheck");a(Jde,"checkCRLFreshness");a(MK,"downloadAndParseCRL");a(Qde,"processRevokedCertificates");a(Xde,"clearExistingCRLEntries")});async function Zde(){WO||(WO=(await Promise.resolve().then(()=>(KO(),UK))).performCRLCheck),jO||(jO=(await Promise.resolve().then(()=>(zO(),BK))).performOCSPCheck)}var xK,TBe,WO,jO,mf,YO=se(()=>{Qi();xK=b(ir()),TBe=(0,xK.loggerWithTag)("cert-verification-source");a(Zde,"loadVerificationFunctions");mf=class extends Xt{static{a(this,"CertificateVerificationSource")}async get(t){let r=t.id,s=this.getContext()?.requestContext;if(!s||!s.certPem||!s.issuerPem)return null;let{certPem:i,issuerPem:o,ocspUrls:c,config:l}=s,u;r.startsWith("crl:")?u="crl":r.startsWith("ocsp:")?u="ocsp":u="unknown",await Zde();let d,f;if(u==="crl"){f=l.crl;let p=s.distributionPoint?[s.distributionPoint]:void 0;d=await WO(i,o,f,p)}else if(u==="ocsp")f=l.ocsp,d=await jO(i,o,f,c);else throw new Error(`Unsupported verification method: ${u} for ID: ${r}`);let m=Date.now()+f.cacheTtl;return{certificate_id:r,status:d.status,reason:d.reason,checked_at:Date.now(),expiresAt:m,method:u}}}});var BK={};ye(BK,{performOCSPCheck:()=>tfe,verifyOCSP:()=>JO});function efe(){return KT||(KT=FT(),KT.sourcedFrom(mf)),KT}async function JO(e,t,r,n){if(r?.enabled===!1)return{valid:!0,status:"disabled",method:"disabled"};try{let s=Ic(e,"CERTIFICATE"),i=Ic(t,"CERTIFICATE"),o=BT(s,i,"ocsp"),c=await efe().get(o,{certPem:s,issuerPem:i,ocspUrls:n,config:{ocsp:r??{}}});if(!c)return r.failureMode==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"ocsp"}:(VT.warn?.("OCSP cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"});let l=c,u=c.wasLoadedFromSource?.();return VT.trace?.(`OCSP ${u?"source fetch":"cache hit"} for certificate`),{valid:l.status==="good",status:l.status,cached:!u,method:l.method||"ocsp"}}catch(s){return VT.error?.(`OCSP verification error: ${s}`),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:s.message,method:"ocsp"}:(VT.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"})}}async function tfe(e,t,r,n){try{let s=await(0,FK.getCertStatus)(e,{ca:t,timeout:r.timeout,...n?.length&&{ocspUrl:n[0]}});switch(s.status){case"good":return{status:"good"};case"revoked":return{status:"revoked",reason:s.revocationReason?.toString()||"unspecified"};default:return{status:"unknown",reason:"unknown-status"}}}catch(s){return{status:"unknown",reason:s.name==="AbortError"?"timeout":"ocsp-error"}}}var FK,kK,VT,KT,zO=se(()=>{LK();FK=require("easy-ocsp"),kK=b(ir());kT();YO();VT=(0,kK.loggerWithTag)("ocsp-verification");a(efe,"getCertificateCacheTable");a(JO,"verifyOCSP");a(tfe,"performOCSPCheck")});async function pf(e,t){cn.debug?.(`verifyCertificate called for: ${e.subject?.CN||"unknown"}`);let r=wK(t);if(r===!1)return cn.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=mK(e);if(cn.trace?.(`Certificate chain length: ${n.length}`),n.length<2||!n[0].issuer)return cn.debug?.("Certificate chain insufficient for revocation checking - need certificate and issuer"),{valid:!0,status:"no-issuer-cert",method:"disabled"};let s=Ic(n[0].cert,"CERTIFICATE"),{crlUrls:i,ocspUrls:o}=pK(s);if(cn.debug?.(`Certificate extensions: CRL distribution points=${i.length}, OCSP URLs=${o.length}`),i.length>0)if(r.crl.enabled)try{cn.debug?.("Attempting CRL verification");let c=await VO(n[0].cert,n[0].issuer,r.crl,i);if(c.status==="good"||c.status==="revoked")return cn.debug?.(`CRL verification result: ${c.status}`),c;cn.debug?.(`CRL verification inconclusive: ${c.status}, trying OCSP fallback`)}catch(c){cn.warn?.(`CRL verification failed: ${c}`)}else cn.debug?.("Skipping CRL - disabled in configuration");else cn.debug?.("Skipping CRL - no distribution points in certificate");if(o.length>0)if(r.ocsp.enabled)try{cn.debug?.("Attempting OCSP verification");let c=await JO(n[0].cert,n[0].issuer,r.ocsp,o);return cn.debug?.(`OCSP verification result: ${c.status}`),c}catch(c){cn.warn?.(`OCSP verification failed: ${c}`)}else cn.debug?.("Skipping OCSP - disabled in configuration");else cn.debug?.("Skipping OCSP - no responder URLs in certificate");return r.failureMode==="fail-closed"?{valid:!1,status:"no-verification-available",method:"disabled"}:{valid:!0,status:"verification-unavailable-allowed",method:"disabled"}}var HK,cn,YT=se(()=>{HK=b(ir());kT();HO();zO();KO();cn=(0,HK.loggerWithTag)("cert-verification");a(pf,"verifyCertificate")});var aa={};ye(aa,{buildReplicationMtlsConfig:()=>zK,clearThisNodeName:()=>ufe,disableReplication:()=>ife,enabledDatabases:()=>bc,forEachReplicatedDatabase:()=>gc,getThisNodeId:()=>xT,getThisNodeName:()=>nt,getThisNodeUrl:()=>Sc,hostnameToUrl:()=>QT,lastTimeInAuditStore:()=>bh,monitorNodeCAs:()=>JK,replicateOperation:()=>ffe,replicationCertificateAuthorities:()=>ca,sendOperationToNode:()=>Bh,servers:()=>nfe,setReplicator:()=>XK,start:()=>sfe,startOnMainThread:()=>aO,subscribeToNode:()=>Nh,unsubscribeFromNode:()=>AT,urlToNodeName:()=>Ri});function zK(e){return e?.mtls&&typeof e.mtls=="object"?e.mtls:!0}function sfe(e){if(!e.port&&!e.securePort&&(e.port=Ks.default.get(x.OPERATIONSAPI_NETWORK_PORT),e.securePort=Ks.default.get(x.OPERATIONSAPI_NETWORK_SECUREPORT)),!nt())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let i of Ih(e))t.set(Ri(i.url),i);ofe(e);let r=zK(e);e={isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e,mtls:r};let n=Ue.ws(async(i,o,c,l)=>{if(It.debug("Incoming WS connection received "+o.url),o.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return l(i,o,c);i._socket.unref(),vh(i,e,c.then(()=>o?.user)),i.on("error",u=>{u.code!=="ECONNREFUSED"&&It.error("Error in connection to "+this.url,u.message)})},e);e.runFirst=!0,Ue.http(async(i,o)=>{if(i.isWebSocket&&i.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){It.debug("Incoming replication WS connection received, authorized: "+i.authorized),!i.authorized&&i._nodeRequest.socket.authorizationError&&It.error(`Incoming client connection from ${i.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,i._nodeRequest.socket.authorizationError);let c=Gt().primaryStore;if(i.authorized&&i.peerCertificate.subjectaltname){let l=(0,WK.getHostnamesFromCertificate)(i.peerCertificate),u;for(let d of l)if(u=d&&(c.get(d)||t.get(d)),u)break;if(u){let d=await pf(i.peerCertificate,e.mtls);if(!d.valid){It.warn("Certificate verification failed:",d.status,"for node",u.name,"certificate serial number",i.peerCertificate.serialNumber);return}if(u?.revoked_certificates?.includes(i.peerCertificate.serialNumber)){It.warn("Revoked certificate used in attempt to connect to node",u.name,"certificate serial number",i.peerCertificate.serialNumber);return}else i.user=u}else It.warn(`No node found for certificate common name/SANs: ${l}, available nodes are ${Array.from(c.getRange({}).filter(({value:d})=>d).map(({key:d})=>d)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let l=c.get(i.ip)||t.get(i.ip);l?i.user=l:It.warn(`No node found for IP address ${i.ip}, available nodes are ${Array.from(new Set([...c.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return o(i)},e);let s=[];for(let i of n)if(i.secureContexts){let o=a(()=>{let c=new Set(i.secureContexts.values());i.defaultContext&&c.add(i.defaultContext);for(let l of c)try{let u=Array.from(ca);l.options.availableCAs&&u.push(...l.options.availableCAs.values());let d={...l.options,ca:u};l.updatedContext=JT.createSecureContext(d)}catch(u){It.error("Error creating replication TLS config",u)}},"updateContexts");i.secureContextsListeners.push(o),s.push(o),Ks.default.get(x.REPLICATION_ENABLEROOTCAS)!==!1&&o()}JK(()=>{for(let i of s)i()})}function JK(e){let t=0;rf(r=>{r?.ca&&(ca.add(r.ca),ca.size!==t&&(t=ca.size,e?.()))})}function ife(e=!0){jK=e}function ofe(e){jK||(lt(),bc=e.databases,gc(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||Ac;for(let[s,i]of jT){let o=i.get(r);o&&(o.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];XK(r,s,e),PO.get(s)?.forEach(i=>i(s))}}))}function XK(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 QK extends Xt{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||Ac,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(It.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new ss,i.set(e,o),o.tableById=c,o.auditStore=t.auditStore,o.dbisDB=t.dbisDB,o.databaseName=e,l&&l(o),o;this.subscription=o}static subscribeOnThisThread(i,o){return!0}static async load(i){if(i){let o=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),o]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let h of c){if(u.has(h)||h===Ue.hostname)continue;let E=cfe(h,QK.subscription,e);if(E?.isConnected){let _=tf(t.auditStore,e,h)[MT];(!d||_<m)&&(d=E,f=h,m=_)}}if(!d)throw l||new KK.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:rfe++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;It.warn("Error in load from node",zT,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function afe(e,t,r,n,s,i){let o=t+"-"+e,c=jT.get(o);c||(c=new Map,jT.set(o,c));let l=c.get(n);if(l)return l;if(r)return c.set(n,l=new uf(t,r,n,s,i)),l.connect(),l.once("finished",()=>c.delete(n)),l}function cfe(e,t,r){let n=GK.get(e);n||(n=new Map,GK.set(e,n));let s=n.get(r);if(s)return s;let i=Gt().primaryStore.get(e);return i?.url&&(s=new uf(i.url,t,r,e,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function Bh(e,t,r){r||(r={}),r.serverName=e.name;let n=await UT(e.url,r),s=vh(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{It.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{It.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function Nh(e){try{YK.isMainThread&&It.warn("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=Ac.get(e.database);if(!t){let n;t=new Promise(s=>{It.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,Ac.set(e.database,t)}let r=afe(e.nodes[0].url,e.url,t,e.database,e.name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>Ah(n,e.database)),e.replicateByDefault)}catch(t){It.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function AT({url:e,nodes:t,database:r}){It.trace("Unsubscribing from node",e,r,"nodes",Array.from(Gt().primaryStore.getRange({})));let n=e+"-"+(t[0]?.url??e),s=jT.get(n);if(s){let i=s.get(r);i&&(i.unsubscribe(),s.delete(r))}}function lfe(){if(QO!==void 0)return QO;let e=Ks.default.get(x.OPERATIONSAPI_TLS_CERTIFICATE)||Ks.default.get(x.TLS_CERTIFICATE);if(e)return QO=new $K.X509Certificate((0,VK.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function nt(){return zT||(zT=Ks.default.get("replication_hostname")??Ri(Ks.default.get("replication_url"))??lfe()??qK("operationsapi_network_secureport")??qK("operationsapi_network_port")??"127.0.0.1")}function ufe(){zT=void 0}function qK(e){let t=Ks.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function WT(e){let t=Ks.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function xT(e){return Rh(e)?.[nt()]}function Sc(){let e=Ks.default.get("replication_url");return e||QT(nt())}function QT(e){let t=WT("replication_port");if(t)return`ws://${e}:${t}`;if(t=WT("replication_secureport"),t)return`wss://${e}:${t}`;if(t=WT("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=WT("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Ri(e){if(e)return new URL(e).hostname}function gc(e,t){for(let n of Object.getOwnPropertyNames(Me))r(n);return ih(n=>{r(n)}),Vl((n,s)=>{r(n.databaseName)});function r(n){let s=Me[n];It.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):dfe(n)&&t(s,n,!1)}a(r,"forDatabase")}function dfe(e){let t=Me[e];for(let r in t)if(t[r].replicate)return!0}function bh(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function ffe(e){let t={message:""};if(e.replicated){e.replicated=!1,It.trace?.("Replicating operation",e.operation,"to nodes",Ue.nodes.map(n=>n.name));let r=await Promise.allSettled(Ue.nodes.map(n=>Bh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Ue.nodes[s]?.name,i})}return t}var Ks,It,$K,VK,JT,KK,YK,WK,jK,rfe,nfe,ca,bc,jT,GK,QO,zT,gs=se(()=>{Oe();Qi();Vu();LO();Hr();Ks=b(fe()),It=b(Q()),$K=require("crypto");YT();VK=require("fs");Ch();nf();G();oO();JT=b(require("node:tls")),KK=b(Ee()),YK=require("worker_threads"),WK=b(Ts()),rfe=1,nfe=[],ca=Ks.default.get(x.REPLICATION_ENABLEROOTCAS)!==!1?new Set(JT.rootCertificates):new Set;a(zK,"buildReplicationMtlsConfig");a(sfe,"start");a(JK,"monitorNodeCAs");a(ife,"disableReplication");a(ofe,"assignReplicationSource");a(XK,"setReplicator");jT=new Map;a(afe,"getSubscriptionConnection");GK=new Map;a(cfe,"getRetrievalConnectionByName");a(Bh,"sendOperationToNode");a(Nh,"subscribeToNode");a(AT,"unsubscribeFromNode");a(lfe,"getCommonNameFromCert");a(nt,"getThisNodeName");a(ufe,"clearThisNodeName");Object.defineProperty(Ue,"hostname",{get(){return nt()}});a(qK,"getHostFromListeningPort");a(WT,"getPortFromListeningPort");a(xT,"getThisNodeId");Ue.replication={getThisNodeId:xT,exportIdMapping:Rh};a(Sc,"getThisNodeUrl");a(QT,"hostnameToUrl");a(Ri,"urlToNodeName");a(gc,"forEachReplicatedDatabase");a(dfe,"hasExplicitlyReplicatedTable");a(bh,"lastTimeInAuditStore");a(ffe,"replicateOperation")});var ry=M((VBe,nY)=>{"use strict";var hf=OV(),{validateBySchema:Fh}=ft(),{commonValidators:Ef,schemaRegex:XO}=Zi(),Sr=require("joi"),mfe=Q(),pfe=require("uuid").v4,ey=Xo(),_f=(G(),D(j)),hfe=require("util"),wc=ms(),{handleHDBError:da,hdbErrors:Efe,ClientError:ru}=Ee(),{HDB_ERROR_MSGS:XT,HTTP_STATUS_CODES:fa}=Efe,{SchemaEventMsg:ty}=us(),ZK=_r(),{getDatabases:_fe}=(Oe(),D(mt)),{transformReq:gf}=ae(),{replicateOperation:eY}=(gs(),D(aa)),{cleanupOrphans:gfe}=(is(),D(ig)),ZT=Sr.string().min(1).max(Ef.schema_length.maximum).pattern(XO).messages({"string.pattern.base":"{:#label} "+Ef.schema_format.message}),Sfe=Sr.string().min(1).max(Ef.schema_length.maximum).pattern(XO).messages({"string.pattern.base":"{:#label} "+Ef.schema_format.message}).required(),Tfe=Sr.string().min(1).max(Ef.schema_length.maximum).pattern(XO).messages({"string.pattern.base":"{:#label} "+Ef.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();nY.exports={createSchema:yfe,createSchemaStructure:tY,createTable:Rfe,createTableStructure:rY,createAttribute:Nfe,dropSchema:bfe,dropTable:Afe,dropAttribute:Ife,getBackup:Cfe,cleanupOrphanBlobs:Ofe};async function yfe(e){let t=await tY(e);return ey.signalSchemaChange(new ty(process.pid,e.operation,e.schema)),t}a(yfe,"createSchema");async function tY(e){let t=Fh(e,Sr.object({database:ZT,schema:ZT}));if(t)throw new ru(t.message);if(gf(e),!await hf.checkSchemaExists(e.schema))throw da(new Error,XT.SCHEMA_EXISTS_ERR(e.schema),fa.BAD_REQUEST,_f.LOG_LEVELS.ERROR,XT.SCHEMA_EXISTS_ERR(e.schema),!0);return await wc.createSchema(e),`database '${e.schema}' successfully created`}a(tY,"createSchemaStructure");async function Rfe(e){return gf(e),e.hash_attribute=e.primary_key??e.hash_attribute,await rY(e)}a(Rfe,"createTable");async function rY(e){let t=Fh(e,Sr.object({database:ZT,schema:ZT,table:Sfe,residence:Sr.array().items(Sr.string().min(1)).optional(),hash_attribute:Tfe}));if(t)throw new ru(t.message);if(!await hf.checkSchemaTableExists(e.schema,e.table))throw da(new Error,XT.TABLE_EXISTS_ERR(e.schema,e.table),fa.BAD_REQUEST,_f.LOG_LEVELS.ERROR,XT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:pfe(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await wc.createTable(n,e);else throw da(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",fa.BAD_REQUEST);else await wc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(rY,"createTableStructure");async function bfe(e){let t=Fh(e,Sr.object({database:Sr.string(),schema:Sr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new ru(t.message);gf(e);let r=await hf.checkSchemaExists(e.schema);if(r)throw da(new Error,r,fa.NOT_FOUND,_f.LOG_LEVELS.ERROR,r,!0);let n=await hf.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await wc.dropSchema(e),ey.signalSchemaChange(new ty(process.pid,e.operation,e.schema)),await ZK.purgeSchemaTableStreams(e.schema,s);let i=await eY(e);return i.message=`successfully deleted '${e.schema}'`,i}a(bfe,"dropSchema");async function Afe(e){let t=Fh(e,Sr.object({database:Sr.string(),schema:Sr.string(),table:Sr.string().required()}));if(t)throw new ru(t.message);gf(e);let r=await hf.checkSchemaTableExists(e.schema,e.table);if(r)throw da(new Error,r,fa.NOT_FOUND,_f.LOG_LEVELS.ERROR,r,!0);await wc.dropTable(e),await ZK.purgeTableStream(e.schema,e.table);let n=await eY(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(Afe,"dropTable");async function Ife(e){let t=Fh(e,Sr.object({database:Sr.string(),schema:Sr.string(),table:Sr.string().required(),attribute:Sr.string().required()}));if(t)throw new ru(t.message);gf(e);let r=await hf.checkSchemaTableExists(e.schema,e.table);if(r)throw da(new Error,r,fa.NOT_FOUND,_f.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw da(new Error,"You cannot drop a hash attribute",fa.BAD_REQUEST,void 0,void 0,!0);if(_f.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw da(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,fa.BAD_REQUEST,void 0,void 0,!0);try{return await wc.dropAttribute(e),wfe(e),ey.signalSchemaChange(new ty(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw mfe.error(`Got an error deleting attribute ${hfe.inspect(e)}.`),n}}a(Ife,"dropAttribute");function wfe(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(wfe,"dropAttributeFromGlobal");async function Nfe(e){gf(e);let t=_fe()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw da(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,fa.BAD_REQUEST,void 0,void 0,!0);return await wc.createAttribute(e),ey.signalSchemaChange(new ty(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Nfe,"createAttribute");function Cfe(e){return wc.getBackup(e)}a(Cfe,"getBackup");function Ofe(e){if(!e.database)throw new ru('Must provide "database" name for search for orphaned blobs');if(!databases[e.database])throw new ru(`Unknown database '${e.database}'`);return gfe(databases[e.database],e.database),{message:"Orphaned blobs cleanup started, check logs for progress"}}a(Ofe,"cleanupOrphanBlobs")});var iY=M((YBe,sY)=>{"use strict";var{OPERATIONS_ENUM:Pfe}=(G(),D(j)),ZO=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Pfe.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};sY.exports=ZO});var eP=M((zBe,uY)=>{"use strict";var Lfe=ms(),jBe=iY(),ny=ae(),sy=(G(),D(j)),Dfe=fe(),{handleHDBError:oY,hdbErrors:vfe}=Ee(),{HDB_ERROR_MSGS:aY,HTTP_STATUS_CODES:cY}=vfe,Mfe=Object.values(sy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),lY="To use this operation audit log must be enabled in harperdb-config.yaml";uY.exports=Ufe;async function Ufe(e){if(ny.isEmpty(e.schema))throw new Error(aY.SCHEMA_REQUIRED_ERR);if(ny.isEmpty(e.table))throw new Error(aY.TABLE_REQUIRED_ERR);if(!Dfe.get(sy.CONFIG_PARAMS.LOGGING_AUDITLOG))throw oY(new Error,lY,cY.BAD_REQUEST,sy.LOG_LEVELS.ERROR,lY,!0);let t=ny.checkSchemaTableExist(e.schema,e.table);if(t)throw oY(new Error,t,cY.NOT_FOUND,sy.LOG_LEVELS.ERROR,t,!0);if(!ny.isEmpty(e.search_type)&&Mfe.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await Lfe.readAuditLog(e)}a(Ufe,"readAuditLog")});var fY=M((QBe,dY)=>{"use strict";var{OPERATIONS_ENUM:xfe}=(G(),D(j)),tP=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=xfe.GET_BACKUP,this.schema=t,this.table=r}};dY.exports=tP});var hY=M((tFe,pY)=>{"use strict";var Bfe=ms(),ZBe=fY(),rP=ae(),Ffe=(G(),D(j)),eFe=fe(),{handleHDBError:kfe,hdbErrors:Hfe}=Ee(),{HDB_ERROR_MSGS:mY,HTTP_STATUS_CODES:Gfe}=Hfe;pY.exports=qfe;async function qfe(e){if(rP.isEmpty(e.schema))throw new Error(mY.SCHEMA_REQUIRED_ERR);if(rP.isEmpty(e.table))throw new Error(mY.TABLE_REQUIRED_ERR);let t=rP.checkSchemaTableExist(e.schema,e.table);if(t)throw kfe(new Error,t,Gfe.NOT_FOUND,Ffe.LOG_LEVELS.ERROR,t,!0);return await Bfe.getBackup(readAuditLogObject)}a(qfe,"getBackup")});var gY=M((nFe,_Y)=>{"use strict";var $fe=fe(),ma=require("joi"),Vfe=ft(),EY=require("moment"),Kfe=require("fs-extra"),sP=require("path"),Yfe=require("lodash"),kh=(G(),D(j)),{LOG_LEVELS:nu}=(G(),D(j)),Wfe="YYYY-MM-DD hh:mm:ss",jfe=sP.resolve(__dirname,"../logs");_Y.exports=function(e){return Vfe.validateBySchema(e,zfe)};var zfe=ma.object({from:ma.custom(nP),until:ma.custom(nP),to:ma.custom(nP),level:ma.valid(nu.NOTIFY,nu.FATAL,nu.ERROR,nu.WARN,nu.INFO,nu.DEBUG,nu.TRACE),order:ma.valid("asc","desc"),limit:ma.number().min(1),start:ma.number().min(0),log_name:ma.custom(Jfe)});function nP(e,t){if(EY(e,EY.ISO_8601).format(Wfe)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(nP,"validateDatetime");function Jfe(e,t){if(Yfe.invert(kh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=$fe.get(kh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?kh.LOG_NAMES.HDB:e,i=s===kh.LOG_NAMES.INSTALL?sP.join(jfe,kh.LOG_NAMES.INSTALL):sP.join(n,s);return Kfe.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(Jfe,"validateReadLogPath")});var oP=M((iFe,TY)=>{"use strict";var iy=(G(),D(j)),Qfe=Q(),Xfe=fe(),Zfe=gY(),iP=require("path"),SY=require("fs-extra"),{once:eme}=require("events"),{handleHDBError:tme,hdbErrors:rme}=Ee(),{PACKAGE_ROOT:nme}=yt(),{replicateOperation:sme}=(gs(),D(aa)),ime=iP.join(nme,"logs"),ome=1e3,ame=200;TY.exports=cme;async function cme(e){let t=Zfe(e);if(t)throw tme(t,t.message,rme.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=sme(e),n=Xfe.get(iy.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?iy.LOG_NAMES.HDB:e.log_name,i=s===iy.LOG_NAMES.INSTALL?iP.join(ime,iy.LOG_NAMES.INSTALL):iP.join(n,s);e.to===void 0&&e.until!==void 0&&(e.to=e.until);let o=e.level!==void 0,c=o?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.to!==void 0,f=d?new Date(e.to):void 0,m=e.limit===void 0?ome:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,_=0;p==="desc"&&!u&&!f&&(_=Math.max(SY.statSync(i).size-(E+5)*ame,0));let R=SY.createReadStream(i,{start:_});R.on("error",q=>{Qfe.error(q)});let S=0,y=[],w="",I;R.on("data",q=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d.]+Z) \[(.+?)]: /g;q=w+q;let z=0,Y;for(;(Y=k.exec(q))&&!R.destroyed;){I&&(I.message=q.slice(z,Y.index),H(I));let[ce,de,te]=Y,Se=te.split("] ["),Ne=Se[0],Ke=Se[1];Se.splice(0,2),I={timestamp:de,thread:Ne,level:Ke,tags:Se,message:""},z=Y.index+ce.length}w=q.slice(z)}),R.on("end",q=>{R.destroyed||I&&(I.message=w.trim(),H(I))}),R.resume();function H(q){let k,z,Y;switch(!0){case(o&&l&&d):k=new Date(q.timestamp),z=new Date(u),Y=new Date(f),q.level===c&&k>=z&&k<=Y&&S<h?S++:q.level===c&&k>=z&&k<=Y&&(go(q,p,y),S++,S===E&&R.destroy());break;case(o&&l):k=new Date(q.timestamp),z=new Date(u),q.level===c&&k>=z&&S<h?S++:q.level===c&&k>=z&&(go(q,p,y),S++,S===E&&R.destroy());break;case(o&&d):k=new Date(q.timestamp),Y=new Date(f),q.level===c&&k<=Y&&S<h?S++:q.level===c&&k<=Y&&(go(q,p,y),S++,S===E&&R.destroy());break;case(l&&d):k=new Date(q.timestamp),z=new Date(u),Y=new Date(f),k>=z&&k<=Y&&S<h?S++:k>=z&&k<=Y&&(go(q,p,y),S++,S===E&&R.destroy());break;case o:q.level===c&&S<h?S++:q.level===c&&(go(q,p,y),S++,S===E&&R.destroy());break;case l:k=new Date(q.timestamp),z=new Date(u),k>=z&&S<h?S++:k>=z&&S>=h&&(go(q,p,y),S++,S===E&&R.destroy());break;case d:k=new Date(q.timestamp),Y=new Date(f),k<=Y&&S<h?S++:k<=Y&&S>=h&&(go(q,p,y),S++,S===E&&R.destroy());break;default:S<h?S++:(go(q,p,y),S++,S===E&&R.destroy())}}a(H,"onLogMessage"),await eme(R,"close");let X=await r;if(X.replicated){for(let q of y)q.node=server.hostname;for(let q of X.replicated){let k=q.node;if(q.status==="failed")go({timestamp:new Date().toISOString(),level:"error",node:k,message:`Error retrieving logs: ${q.reason}`},p,y);else for(let z of q.results)z.node=k,go(z,p,y)}}return y}a(cme,"readLog");function go(e,t,r){t==="desc"?lme(e,r):t==="asc"?ume(e,r):r.push(e)}a(go,"pushLineToResult");function lme(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(lme,"insertDescending");function ume(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(ume,"insertAscending")});var oy=M((dFe,AY)=>{"use strict";var aP=require("joi"),{string:Sf,boolean:yY,date:dme}=aP.types(),fme=ft(),{validateSchemaExists:aFe,validateTableExists:cFe,validateSchemaName:lFe}=Zi(),mme=(G(),D(j)),pme=Dt(),RY=fe();RY.initSync();var uFe=Sf.invalid(RY.get(mme.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(pme.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),bY={operation:Sf.valid("add_node","update_node","set_node_replication"),node_name:Sf.optional(),subscriptions:aP.array().items({table:Sf.optional(),schema:Sf.optional(),database:Sf.optional(),subscribe:yY.required(),publish:yY.required().custom(Eme),start_time:dme.iso()})};function hme(e){return fme.validateBySchema(e,aP.object(bY))}a(hme,"addUpdateNodeValidator");function Eme(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(Eme,"checkForFalsy");AY.exports={addUpdateNodeValidator:hme,validationSchema:bY}});var Tf=M((mFe,IY)=>{"use strict";var cP=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},lP=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};IY.exports={Node:cP,NodeSubscription:lP}});var NY=M((hFe,wY)=>{"use strict";var _me=(G(),D(j)).OPERATIONS_ENUM,uP=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=_me.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};wY.exports=uP});var Hh=M((_Fe,CY)=>{"use strict";var dP=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},fP=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};CY.exports={RemotePayloadObject:dP,RemotePayloadSubscription:fP}});var PY=M((SFe,OY)=>{"use strict";var mP=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};OY.exports=mP});var DY=M((IFe,LY)=>{"use strict";var gme=PY(),yFe=Jt(),RFe=gt(),Sme=Q(),{getSchemaPath:bFe,getTransactionAuditStorePath:AFe}=Rt(),{getDatabases:Tme}=(Oe(),D(mt));LY.exports=yme;async function yme(e){let t=new gme;try{let r=Tme()[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){Sme.warn(`unable to stat table dbi due to ${r}`)}return t}a(yme,"lmdbGetTableSize")});var MY=M((NFe,vY)=>{"use strict";var pP=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};vY.exports=pP});var qh=M((vFe,FY)=>{"use strict";var Rme=require("fs-extra"),bme=require("path"),An=require("systeminformation"),Nc=Q(),UY=_r(),OFe=Dt(),yf=(G(),D(j)),Ame=DY(),Ime=Yl(),{getThreadInfo:xY}=st(),Gh=fe();Gh.initSync();var wme=MY(),{openEnvironment:PFe}=gt(),{getSchemaPath:LFe}=Rt(),{database:DFe,databases:hP}=(Oe(),D(mt)),ay;FY.exports={getHDBProcessInfo:SP,getNetworkInfo:yP,getDiskInfo:TP,getMemoryInfo:gP,getCPUInfo:_P,getTimeInfo:EP,getSystemInformation:RP,systemInformation:Nme,getTableSize:bP,getMetrics:AP};function EP(){return An.time()}a(EP,"getTimeInfo");async function _P(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...d}=await An.cpu();d.cpu_speed=await An.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:_,cpus:R,...S}=await An.currentLoad();return S.cpus=[],R.forEach(y=>{let{rawLoad:w,rawLoadIdle:I,rawLoadIrq:H,rawLoadNice:X,rawLoadSystem:q,rawLoadUser:k,...z}=y;S.cpus.push(z)}),d.current_load=S,d}catch(e){return Nc.error(`error in getCPUInfo: ${e}`),{}}}a(_P,"getCPUInfo");async function gP(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await An.mem();return Object.assign(s,process.memoryUsage())}catch(e){return Nc.error(`error in getMemoryInfo: ${e}`),{}}}a(gP,"getMemoryInfo");async function SP(){let e={core:[],clustering:[]};try{let t=await An.processes(),r;try{r=Number.parseInt(await Rme.readFile(bme.join(Gh.get(yf.CONFIG_PARAMS.ROOTPATH),yf.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===yf.NODE_ERROR_CODES.ENOENT)Nc.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 Nc.error(`error in getHDBProcessInfo: ${t}`),e}}a(SP,"getHDBProcessInfo");async function TP(){let e={};try{if(!Gh.get(yf.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await An.disksIO();e.io=i;let{rxSec:o,txSec:c,wxSec:l,...u}=await An.fsStats();return e.read_write=u,e.size=await An.fsSize(),e}catch(t){return Nc.error(`error in getDiskInfo: ${t}`),e}}a(TP,"getDiskInfo");async function yP(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Gh.get(yf.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await An.networkInterfaceDefault(),e.latency=await An.inetChecksite("google.com"),(await An.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await An.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return Nc.error(`error in getNetworkInfo: ${t}`),e}}a(yP,"getNetworkInfo");async function RP(){if(ay!==void 0)return ay;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await An.osInfo();e=c;let l=await An.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,ay=e,ay}catch(t){return Nc.error(`error in getSystemInformation: ${t}`),e}}a(RP,"getSystemInformation");async function bP(){let e=[],t=await Ime.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Ame(n));return e}a(bP,"getTableSize");async function AP(){let e={};for(let t in hP){let r=e[t]={},n=r.tables={};for(let s in hP[t])try{let i=hP[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){Nc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(AP,"getMetrics");async function BY(){if(Gh.get(yf.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await UY.getNATSReferences(),t=await UY.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(BY,"getNatsStreamInfo");async function Nme(e){let t=new wme;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await RP(),t.time=EP(),t.cpu=await _P(),t.memory=await gP(),t.disk=await TP(),t.network=await yP(),t.harperdb_processes=await SP(),t.table_size=await bP(),t.metrics=await AP(),t.threads=await xY(),t.replication=await BY(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await RP();break;case"time":t.time=EP();break;case"cpu":t.cpu=await _P();break;case"memory":t.memory=await gP();break;case"disk":t.disk=await TP();break;case"network":t.network=await yP();break;case"harperdb_processes":t.harperdb_processes=await SP();break;case"table_size":t.table_size=await bP();break;case"database_metrics":case"metrics":t.metrics=await AP();break;case"threads":t.threads=await xY();break;case"replication":t.replication=await BY();break;default:break}return t}a(Nme,"systemInformation")});var So=M((FFe,qY)=>{"use strict";var Cme=Vn(),IP=ae(),Ome=require("util"),su=(G(),D(j)),kY=fe();kY.initSync();var Pme=NC(),HY=Sn(),{Node:UFe,NodeSubscription:xFe}=Tf(),Lme=Ed(),Dme=NY(),{RemotePayloadObject:vme,RemotePayloadSubscription:Mme}=Hh(),{handleHDBError:Ume,hdbErrors:xme}=Ee(),{HTTP_STATUS_CODES:Bme,HDB_ERROR_MSGS:Fme}=xme,kme=fi(),Hme=qh(),{packageJson:Gme}=yt(),{getDatabases:qme}=(Oe(),D(mt)),BFe=Ome.promisify(Pme.authorize),$me=HY.searchByHash,Vme=HY.searchByValue;qY.exports={isEmpty:Kme,getNodeRecord:Yme,upsertNodeRecord:Wme,buildNodePayloads:jme,checkClusteringEnabled:zme,getAllNodeRecords:Jme,getSystemInfo:Qme,reverseSubscription:GY};function Kme(e){return e==null}a(Kme,"isEmpty");async function Yme(e){let t=new Lme(su.SYSTEM_SCHEMA_NAME,su.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return $me(t)}a(Yme,"getNodeRecord");async function Wme(e){let t=new Dme(su.SYSTEM_SCHEMA_NAME,su.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Cme.upsert(t)}a(Wme,"upsertNodeRecord");function GY(e){if(IP.isEmpty(e.subscribe)||IP.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(GY,"reverseSubscription");function jme(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:u}=c,d=IP.getTableHashAttribute(l,u),{subscribe:f,publish:m}=GY(c),p=qme()[l]?.[u],h=new Mme(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new vme(r,t,s,n)}a(jme,"buildNodePayloads");function zme(){if(!kY.get(su.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ume(new Error,Fme.CLUSTERING_NOT_ENABLED,Bme.BAD_REQUEST,void 0,void 0,!0)}a(zme,"checkClusteringEnabled");async function Jme(){let e=new kme(su.SYSTEM_SCHEMA_NAME,su.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Vme(e))}a(Jme,"getAllNodeRecords");async function Qme(){let e=await Hme.getSystemInformation();return{hdb_version:Gme.version,node_version:e.node_version,platform:e.platform}}a(Qme,"getSystemInfo")});var wP=M((HFe,JY)=>{"use strict";var cy=_r(),$Y=ae(),VY=Dt(),KY=(G(),D(j)),ly=Q(),YY=ry(),Xme=wp(),{RemotePayloadObject:Zme}=Hh(),{handleHDBError:WY,hdbErrors:epe}=Ee(),{HTTP_STATUS_CODES:jY}=epe,{NodeSubscription:zY}=Tf();JY.exports=tpe;async function tpe(e,t){let r;try{r=await cy.request(`${t}.${VY.REQUEST_SUFFIX}`,new Zme(KY.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),ly.trace("Response from remote describe all request:",r)}catch(o){ly.error(`addNode received error from describe all request to remote node: ${o}`);let c=cy.requestErrorHandler(o,"add_node",t);throw WY(new Error,c,jY.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===VY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw WY(new Error,o,jY.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===KY.SYSTEM_SCHEMA_NAME){await cy.createLocalTableStream(l,c);let h=new zY(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let u=$Y.doesSchemaExist(l),d=n[l]!==void 0,f=c?$Y.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(o);continue}if(!u&&d&&(ly.trace(`addNode creating schema: ${l}`),await YY.createSchema({operation:"create_schema",schema:l})),!f&&m){ly.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Xme(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await YY.createTable(h)}await cy.createLocalTableStream(l,c);let p=new zY(l,c,o.publish,o.subscribe);p.start_time=o.start_time,i.push(p)}return{added:i,skipped:s}}a(tpe,"reviewSubscriptions")});var Rf={};ye(Rf,{addNodeBack:()=>NP,removeNodeBack:()=>CP,setNode:()=>ipe});async function ipe(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=Ri(t)):t=QT(r);let n=(0,XY.validateBySchema)(e,spe);if(n)throw(0,pa.handleHDBError)(n,n.message,npe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new pa.ClientError("url or hostname is required for remove_node operation");let p=r,h=Gt(),E=await h.get(p);if(!E)throw new pa.ClientError(p+" does not exist");try{await Bh({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?nt():p},void 0)}catch(_){ys.warn(`Error removing node from target node ${p}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,_)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new pa.ClientError("url required for this operation");let s=Sc();if(s==null)throw new pa.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,Ys.getReplicationCert)();let p=await(0,Ys.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,Ys.createCsr)(),ys.info("Sending CSR to target node:",t)):p&&(c=p.certificate,ys.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,Oc.get)(x.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,Oc.get)(x.REPLICATION_SHARD)!==void 0&&(l.shard=(0,Oc.get)(x.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(QY):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=QY(e);l.subscribe=p.subscribe,l.publish=p.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await Bh({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,ys.warn("Error adding node:",t,"to cluster:",p),d=p}if(o&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);o&&(ys.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Ys.setCertTable)({name:rpe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Ys.setCertTable)({name:nt(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let p={url:s,ca:c,replicates:!0,subscriptions:null};(0,Oc.get)(x.REPLICATION_SHARD)!==void 0&&(p.shard=(0,Oc.get)(x.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await ia(nt(),p)}await ia(u?u.nodeName:f.name??Ri(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 NP(e){ys.trace("addNodeBack received request:",e);let t=await(0,Ys.signCertificate)(e),r;e.csr?(r=t.signingCA,ys.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,ys.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization),e.shard!==void 0&&(n.shard=e.shard);let s=await(0,Ys.getReplicationCertAuth)();if(n.replicates){let i={url:Sc(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,Oc.get)(x.REPLICATION_SHARD)!==void 0&&(i.shard=(0,Oc.get)(x.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await ia(nt(),i)}return await ia(e.hostname,n),t.nodeName=nt(),t.usingCA=s?.certificate,ys.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function CP(e){ys.trace("removeNodeBack received request:",e),await Gt().delete(e.name)}function QY(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Ys,XY,Cc,Oc,ys,pa,rpe,npe,spe,bf=se(()=>{Ys=b(Ts()),XY=b(ft()),Cc=b(require("joi")),Oc=b(fe());G();Ch();nf();gs();ys=b(Q()),pa=b(Ee()),{pki:rpe}=require("node-forge"),{HTTP_STATUS_CODES:npe}=pa.hdbErrors,spe=Cc.default.object({hostname:Cc.default.string(),verify_tls:Cc.default.boolean(),replicates:Cc.default.boolean(),subscriptions:Cc.default.array(),revoked_certificates:Cc.default.array(),shard:Cc.default.number()});a(ipe,"setNode");a(NP,"addNodeBack");a(CP,"removeNodeBack");a(QY,"reverseSubscription")});var Kh=M((zFe,eW)=>{"use strict";var{handleHDBError:uy,hdbErrors:ope}=Ee(),{HTTP_STATUS_CODES:dy}=ope,{addUpdateNodeValidator:ape}=oy(),fy=Q(),my=(G(),D(j)),ZY=Dt(),cpe=ae(),$h=_r(),Vh=So(),OP=fe(),lpe=wP(),{Node:upe,NodeSubscription:dpe}=Tf(),{broadcast:fpe}=st(),{setNode:mpe}=(bf(),D(Rf)),WFe=fe(),jFe=(G(),D(j)),ppe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",hpe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Epe=OP.get(my.CONFIG_PARAMS.CLUSTERING_NODENAME);eW.exports=_pe;async function _pe(e,t=!1){if(fy.trace("addNode called with:",e),OP.get(my.CONFIG_PARAMS.REPLICATION_URL)||OP.get(my.CONFIG_PARAMS.REPLICATION_HOSTNAME))return mpe(e);Vh.checkClusteringEnabled();let r=ape(e);if(r)throw uy(r,r.message,dy.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await Vh.getNodeRecord(n);if(!cpe.isEmptyOrZeroLength(f))throw uy(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,dy.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await lpe(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=ppe,o;let c=Vh.buildNodePayloads(s,Epe,my.OPERATIONS_ENUM.ADD_NODE,await Vh.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let p=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new dpe(p.schema,p.table,p.publish,p.subscribe))}fy.trace("addNode sending remote payload:",c);let u;try{u=await $h.request(`${n}.${ZY.REQUEST_SUFFIX}`,c)}catch(f){fy.error(`addNode received error from request: ${f}`);for(let p=0,h=s.length;p<h;p++){let E=s[p];E.publish=!1,E.subscribe=!1,await $h.updateRemoteConsumer(E,n)}let m=$h.requestErrorHandler(f,"add_node",n);throw uy(new Error,m,dy.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===ZY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw uy(new Error,f,dy.INTERNAL_SERVER_ERROR,"error",f)}fy.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await $h.updateRemoteConsumer(p,n),p.subscribe===!0&&await $h.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new upe(n,l,u.system_info);return await Vh.upsertNodeRecord(d),fpe({type:"nats_update"}),i.length>0?o.message=hpe:o.message=`Successfully added '${n}' to manifest`,o}a(_pe,"addNode")});var vP=M((XFe,rW)=>{"use strict";var{handleHDBError:PP,hdbErrors:gpe}=Ee(),{HTTP_STATUS_CODES:LP}=gpe,{addUpdateNodeValidator:Spe}=oy(),Yh=Q(),py=(G(),D(j)),tW=Dt(),QFe=ae(),Wh=_r(),jh=So(),DP=fe(),{cloneDeep:Tpe}=require("lodash"),ype=wP(),{Node:Rpe,NodeSubscription:bpe}=Tf(),{broadcast:Ape}=st(),{setNode:Ipe}=(bf(),D(Rf)),wpe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Npe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Cpe=DP.get(py.CONFIG_PARAMS.CLUSTERING_NODENAME);rW.exports=Ope;async function Ope(e){if(Yh.trace("updateNode called with:",e),DP.get(py.CONFIG_PARAMS.REPLICATION_URL)??DP.get(py.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Ipe(e);jh.checkClusteringEnabled();let t=Spe(e);if(t)throw PP(t,t.message,LP.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await jh.getNodeRecord(r);s.length>0&&(n=Tpe(s));let{added:i,skipped:o}=await ype(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=wpe,c;let l=jh.buildNodePayloads(i,Cpe,py.OPERATIONS_ENUM.UPDATE_NODE,await jh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];Yh.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}Yh.trace("updateNode sending remote payload:",l);let u;try{u=await Wh.request(`${r}.${tW.REQUEST_SUFFIX}`,l)}catch(d){Yh.error(`updateNode received error from request: ${d}`);let f=Wh.requestErrorHandler(d,"update_node",r);throw PP(new Error,f,LP.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===tW.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw PP(new Error,d,LP.INTERNAL_SERVER_ERROR,"error",d)}Yh.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await Wh.updateRemoteConsumer(m,r),m.subscribe===!0?await Wh.updateConsumerIterator(m.schema,m.table,r,"start"):await Wh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new Rpe(r,[],u.system_info)]),await Ppe(n[0],i,u.system_info),o.length>0?c.message=Npe:c.message=`Successfully updated '${r}'`,c}a(Ope,"updateNode");async function Ppe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===o.schema&&d.table===o.table){d.publish=o.publish,d.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new bpe(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await jh.upsertNodeRecord(n),Ape({type:"nats_update"})}a(Ppe,"updateNodeTable")});var aW=M((eke,oW)=>{"use strict";var iW=require("joi"),{string:nW}=iW.types(),Lpe=ft(),sW=(G(),D(j)),Dpe=fe(),vpe=Dt();oW.exports=Mpe;function Mpe(e){let t=nW.invalid(Dpe.get(sW.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(vpe.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=iW.object({operation:nW.valid(sW.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Lpe.validateBySchema(e,r)}a(Mpe,"removeNodeValidator")});var Jh=M((rke,fW)=>{"use strict";var{handleHDBError:cW,hdbErrors:Upe}=Ee(),{HTTP_STATUS_CODES:lW}=Upe,xpe=aW(),zh=Q(),uW=So(),Bpe=ae(),Af=(G(),D(j)),dW=Dt(),MP=_r(),UP=fe(),{RemotePayloadObject:Fpe}=Hh(),{NodeSubscription:kpe}=Tf(),Hpe=Ip(),Gpe=Bl(),{broadcast:qpe}=st(),{setNode:$pe}=(bf(),D(Rf)),Vpe=UP.get(Af.CONFIG_PARAMS.CLUSTERING_NODENAME);fW.exports=Kpe;async function Kpe(e){if(zh.trace("removeNode called with:",e),UP.get(Af.CONFIG_PARAMS.REPLICATION_URL)??UP.get(Af.CONFIG_PARAMS.REPLICATION_HOSTNAME))return $pe(e);uW.checkClusteringEnabled();let t=xpe(e);if(t)throw cW(t,t.message,lW.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await uW.getNodeRecord(r);if(Bpe.isEmptyOrZeroLength(n))throw cW(new Error,`Node '${r}' was not found.`,lW.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Fpe(Af.OPERATIONS_ENUM.REMOVE_NODE,Vpe,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await MP.updateConsumerIterator(d.schema,d.table,r,"stop");try{await MP.updateRemoteConsumer(new kpe(d.schema,d.table,!1,!1),r)}catch(f){zh.error(f)}}try{i=await MP.request(`${r}.${dW.REQUEST_SUFFIX}`,s),zh.trace("Remove node reply from remote node:",r,i)}catch(l){zh.error("removeNode received error from request:",l),o=!0}let c=new Hpe(Af.SYSTEM_SCHEMA_NAME,Af.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Gpe.deleteRecord(c),qpe({type:"nats_update"}),i?.status===dW.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(zh.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(Kpe,"removeNode")});var hW=M((ske,pW)=>{"use strict";var mW=require("joi"),{string:Ype,array:Wpe}=mW.types(),jpe=ft(),zpe=oy();pW.exports=Jpe;function Jpe(e){let t=mW.object({operation:Ype.valid("configure_cluster").required(),connections:Wpe.items(zpe.validationSchema).required()});return jpe.validateBySchema(e,t)}a(Jpe,"configureClusterValidator")});var xP=M((oke,TW)=>{"use strict";var EW=(G(),D(j)),hy=Q(),Qpe=ae(),Xpe=fe(),Zpe=Jh(),ehe=Kh(),the=So(),rhe=hW(),{handleHDBError:_W,hdbErrors:nhe}=Ee(),{HTTP_STATUS_CODES:gW}=nhe,she="Configure cluster complete.",ihe="Failed to configure the cluster. Check the logs for more details.",ohe="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";TW.exports=ahe;async function ahe(e){hy.trace("configure cluster called with:",e);let t=rhe(e);if(t)throw _W(t,t.message,gW.BAD_REQUEST,void 0,void 0,!0);let r=await the.getAllNodeRecords(),n=[];if(Xpe.get(EW.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await SW(Zpe,{operation:EW.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}hy.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 SW(ehe,f,f.node_name);s.push(m)}hy.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(hy.error(m.node_name,m?.error?.message,m?.error?.stack),o.includes(m.node_name)||o.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(Qpe.isEmptyOrZeroLength(o))return{message:she,connections:c};if(l)return{message:ohe,failed_nodes:o,connections:c};throw _W(new Error,ihe,gW.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(ahe,"configureCluster");async function SW(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(SW,"functionWrapper")});var AW=M((cke,bW)=>{"use strict";var Qh=require("joi"),che=ft(),{validateSchemaExists:yW,validateTableExists:lhe,validateSchemaName:RW}=Zi(),uhe=Qh.object({operation:Qh.string().valid("purge_stream"),schema:Qh.string().custom(yW).custom(RW).optional(),database:Qh.string().custom(yW).custom(RW).optional(),table:Qh.string().custom(lhe).required()});function dhe(e){return che.validateBySchema(e,uhe)}a(dhe,"purgeStreamValidator");bW.exports=dhe});var BP=M((uke,IW)=>{"use strict";var{handleHDBError:fhe,hdbErrors:mhe}=Ee(),{HTTP_STATUS_CODES:phe}=mhe,hhe=AW(),Ehe=_r(),_he=So();IW.exports=ghe;async function ghe(e){e.schema=e.schema??e.database;let t=hhe(e);if(t)throw fhe(t,t.message,phe.BAD_REQUEST,void 0,void 0,!0);_he.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Ehe.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(ghe,"purgeStream")});var gy=M((fke,vW)=>{"use strict";var kP=So(),She=_r(),_y=fe(),If=(G(),D(j)),iu=Dt(),The=ae(),FP=Q(),{RemotePayloadObject:yhe}=Hh(),{ErrorCode:wW}=require("nats"),{parentPort:NW}=require("worker_threads"),{onMessageByType:Rhe}=st(),{getThisNodeName:bhe}=(gs(),D(aa)),{requestClusterStatus:Ahe}=(Ch(),D(T1)),{getReplicationSharedStatus:Ihe,getHDBNodeTable:whe}=(nf(),D(m1)),{CONFIRMATION_STATUS_POSITION:Nhe,RECEIVED_VERSION_POSITION:CW,RECEIVED_TIME_POSITION:Che,SENDING_TIME_POSITION:Ohe,RECEIVING_STATUS_POSITION:Phe,RECEIVING_STATUS_RECEIVING:Lhe,BACK_PRESSURE_RATIO_POSITION:Dhe}=(LO(),D(dK)),OW=_y.get(If.CONFIG_PARAMS.CLUSTERING_ENABLED),PW=_y.get(If.CONFIG_PARAMS.CLUSTERING_NODENAME);vW.exports={clusterStatus:vhe,buildNodeStatus:DW};var LW;Rhe("cluster-status",async e=>{LW(e)});async function vhe(){if(_y.get(If.CONFIG_PARAMS.REPLICATION_URL)||_y.get(If.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;NW?(NW.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{LW=i})):n=Ahe();for(let i of n.connections){let o=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=Ihe(u,l,o);c.lastCommitConfirmed=Ey(d[Nhe]),c.lastReceivedRemoteTime=Ey(d[CW]),c.lastReceivedLocalTime=Ey(d[Che]),c.lastReceivedVersion=d[CW],c.sendingMessage=Ey(d[Ohe]),c.backPressurePercent=d[Dhe]*100,c.lastReceivedStatus=d[Phe]===Lhe?"Receiving":"Waiting"}}n.node_name=bhe();let s=whe().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:PW,is_enabled:OW,connections:[]};if(!OW)return e;let t=await kP.getAllNodeRecords();if(The.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(DW(t[n],e.connections));return await Promise.allSettled(r),e}a(vhe,"clusterStatus");function Ey(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}a(Ey,"asDate");async function DW(e,t){let r=e.name,n=new yhe(If.OPERATIONS_ENUM.CLUSTER_STATUS,PW,void 0,await kP.getSystemInfo()),s,i,o=iu.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await She.request(iu.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===iu.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=iu.CLUSTER_STATUS_STATUSES.CLOSED,FP.error(`Error getting node status from ${r} `,s))}catch(l){FP.warn(`Error getting node status from ${r}`,l),l.code===wW.NoResponders?o=iu.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===wW.Timeout?o=iu.CLUSTER_STATUS_STATUSES.TIMEOUT:o=iu.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Mhe(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==If.PRE_4_0_0_VERSION&&await kP.upsertNodeRecord(l)}catch(l){FP.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(DW,"buildNodeStatus");function Mhe(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(Mhe,"NodeStatusObject")});var GP=M((pke,MW)=>{"use strict";var{handleHDBError:Uhe,hdbErrors:xhe}=Ee(),{HTTP_STATUS_CODES:Bhe}=xhe,Fhe=_r(),khe=So(),HP=ae(),Sy=require("joi"),Hhe=ft(),Ghe=2e3,qhe=Sy.object({timeout:Sy.number().min(1),connected_nodes:Sy.boolean(),routes:Sy.boolean()});MW.exports=$he;async function $he(e){khe.checkClusteringEnabled();let t=Hhe.validateBySchema(e,qhe);if(t)throw Uhe(t,t.message,Bhe.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||HP.autoCastBoolean(n),o=s===void 0||HP.autoCastBoolean(s),c={nodes:[]},l=await Fhe.getServerList(r??Ghe),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,p=l[d].data;if(m.name.endsWith("-hub")){let h={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[m.name]&&u[m.name].forEach(E=>{h.connected_nodes.includes(E.name.slice(0,-4))||h.connected_nodes.push(E.name.slice(0,-4))})),o&&(h.routes=p.cluster?.urls?p.cluster?.urls.map(E=>({host:E.split(":")[0],port:HP.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}a($he,"clusterNetwork")});var FW=M((Eke,BW)=>{"use strict";var qP=require("joi"),UW=ft(),{routeConstraints:xW}=cA();BW.exports={setRoutesValidator:Vhe,deleteRoutesValidator:Khe};function Vhe(e){let t=qP.object({server:qP.valid("hub","leaf"),routes:xW.required()});return UW.validateBySchema(e,t)}a(Vhe,"setRoutesValidator");function Khe(e){let t=qP.object({routes:xW.required()});return UW.validateBySchema(e,t)}a(Khe,"deleteRoutesValidator")});var Ty=M((gke,KW)=>{"use strict";var ha=_t(),$P=ae(),Ws=(G(),D(j)),wf=fe(),kW=FW(),{handleHDBError:HW,hdbErrors:Yhe}=Ee(),{HTTP_STATUS_CODES:GW}=Yhe,qW="cluster routes successfully set",$W="cluster routes successfully deleted";KW.exports={setRoutes:jhe,getRoutes:zhe,deleteRoutes:Jhe};function Whe(e){let t=ha.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let o=0,c=e.routes.length;o<c;o++){let l=e.routes[o];l.port=$P.autoCast(l.port);let u=r.some(f=>f.host===l.host&&f.port===l.port),d=n.some(f=>f.host===l.host&&f.port===l.port);u||d?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?ha.updateConfigValue(Ws.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):ha.updateConfigValue(Ws.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:qW,set:i,skipped:s}}a(Whe,"setRoutesNats");function jhe(e){let t=kW.setRoutesValidator(e);if(t)throw HW(t,t.message,GW.BAD_REQUEST,void 0,void 0,!0);if(wf.get(Ws.CONFIG_PARAMS.CLUSTERING_ENABLED))return Whe(e);let r=[],n=[],s=wf.get(Ws.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{VW(s,i)?n.push(i):(s.push(i),r.push(i))}),ha.updateConfigValue(Ws.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:qW,set:r,skipped:n}}a(jhe,"setRoutes");function VW(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}a(VW,"existsInArray");function zhe(){if(wf.get(Ws.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=ha.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return wf.get(Ws.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(zhe,"getRoutes");function Jhe(e){let t=kW.deleteRoutesValidator(e);if(t)throw HW(t,t.message,GW.BAD_REQUEST,void 0,void 0,!0);if(wf.get(Ws.CONFIG_PARAMS.CLUSTERING_ENABLED))return Qhe(e);let r=[],n=[],s=wf.get(Ws.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{VW(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),ha.updateConfigValue(Ws.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:$W,deleted:r,skipped:n}}a(Jhe,"deleteRoutes");function Qhe(e){let t=ha.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],o=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,p=r.length;m<p;m++){let h=r[m];if(d.host===h.host&&d.port===h.port){r.splice(m,1),f=!0,o=!0,s.push(d);break}}if(!f){let m=!0;for(let p=0,h=n.length;p<h;p++){let E=n[p];if(d.host===E.host&&d.port===E.port){n.splice(p,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return o&&(r=$P.isEmptyOrZeroLength(r)?null:r,ha.updateConfigValue(Ws.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=$P.isEmptyOrZeroLength(n)?null:n,ha.updateConfigValue(Ws.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:$W,deleted:s,skipped:i}}a(Qhe,"deleteRoutesNats")});var WW=M((Tke,YW)=>{"use strict";var Xhe=Dt(),VP=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,f,m,p,h){this.port=t,o===null&&(o=void 0),this.server_name=r+Xhe.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};YW.exports=VP});var JW=M((Rke,zW)=>{"use strict";var jW=Dt(),KP=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+jW.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+jW.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};zW.exports=KP});var XW=M((Ake,QW)=>{"use strict";var YP=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};QW.exports=YP});var ej=M((wke,ZW)=>{"use strict";var Zhe=Dt(),WP=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Zhe.SERVER_SUFFIX.ADMIN,this.password=r}};ZW.exports=WP});var Ay=M((Cke,nj)=>{"use strict";var ou=require("path"),au=require("fs-extra"),eEe=WW(),tEe=JW(),rEe=XW(),nEe=ej(),jP=(hs(),D(co)),Cf=ae(),Wn=_t(),Ry=(G(),D(j)),Xh=Dt(),{CONFIG_PARAMS:lr}=Ry,Of=Q(),Zh=fe(),tj=io(),zP=_r(),sEe=Ts(),Nf="clustering",iEe=1e4,rj=50;nj.exports={generateNatsConfig:aEe,removeNatsConfig:cEe,getHubConfigPath:oEe};function oEe(){let e=Zh.get(lr.ROOTPATH);return ou.join(e,Nf,Xh.NATS_CONFIG_FILES.HUB_SERVER)}a(oEe,"getHubConfigPath");async function aEe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=Zh.get(lr.ROOTPATH);au.ensureDirSync(ou.join(r,"clustering","leaf")),Zh.initSync();let n=Wn.getConfigFromFile(lr.CLUSTERING_TLS_CERT_AUTH),s=Wn.getConfigFromFile(lr.CLUSTERING_TLS_PRIVATEKEY),i=Wn.getConfigFromFile(lr.CLUSTERING_TLS_CERTIFICATE);!await au.exists(i)&&!await au.exists(!n)&&await sEe.createNatsCerts();let o=ou.join(r,Nf,Xh.PID_FILES.HUB),c=ou.join(r,Nf,Xh.PID_FILES.LEAF),l=Wn.getConfigFromFile(lr.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=ou.join(r,Nf,Xh.NATS_CONFIG_FILES.HUB_SERVER),d=ou.join(r,Nf,Xh.NATS_CONFIG_FILES.LEAF_SERVER),f=Wn.getConfigFromFile(lr.CLUSTERING_TLS_INSECURE),m=Wn.getConfigFromFile(lr.CLUSTERING_TLS_VERIFY),p=Wn.getConfigFromFile(lr.CLUSTERING_NODENAME),h=Wn.getConfigFromFile(lr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await zP.checkNATSServerInstalled()||by("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await jP.listUsers(),_=Wn.getConfigFromFile(lr.CLUSTERING_USER),R=await jP.getClusterUser();(Cf.isEmpty(R)||R.active!==!0)&&by(`Invalid cluster user '${_}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await yy(lr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await yy(lr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await yy(lr.CLUSTERING_HUBSERVER_NETWORK_PORT),await yy(lr.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],y=[];for(let[z,Y]of E.entries())Y.role?.role===Ry.ROLE_TYPES_ENUM.CLUSTER_USER&&Y.active&&(S.push(new nEe(Y.username,tj.decrypt(Y.hash))),y.push(new rEe(Y.username,tj.decrypt(Y.hash))));let w=[],{hub_routes:I}=Wn.getClusteringRoutes();if(!Cf.isEmptyOrZeroLength(I))for(let z of I)w.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${z.host}:${z.port}`);let H=new eEe(Wn.getConfigFromFile(lr.CLUSTERING_HUBSERVER_NETWORK_PORT),p,o,i,s,n,f,m,h,Wn.getConfigFromFile(lr.CLUSTERING_HUBSERVER_CLUSTER_NAME),Wn.getConfigFromFile(lr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),w,S,y);n==null&&(delete H.tls.ca_file,delete H.leafnodes.tls.ca_file),t=Cf.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Ry.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await au.writeJson(u,H),Of.trace(`Hub server config written to ${u}`));let X=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,q=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,k=new tEe(Wn.getConfigFromFile(lr.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[X],[q],S,y,i,s,n,f);n==null&&delete k.tls.ca_file,(t===void 0||t===Ry.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await au.writeJson(d,k),Of.trace(`Leaf server config written to ${d}`))}a(aEe,"generateNatsConfig");async function yy(e){let t=Zh.get(e);return Cf.isEmpty(t)&&by(`port undefined for '${e}'`),await Cf.isPortTaken(t)&&by(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(yy,"isPortAvailable");function by(e){let t=`Error generating clustering config: ${e}`;Of.error(t),console.error(t),process.exit(1)}a(by,"generateNatsConfigError");async function cEe(e){let{port:t,config_file:r}=zP.getServerConfig(e),{username:n,decrypt_hash:s}=await jP.getClusterUser(),i=0,o=2e3;for(;i<rj;){try{let d=await zP.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){Of.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=rj)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=o*(i*2);u>3e4&&Of.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await Cf.asyncSetTimeout(u)}let c="0".repeat(iEe),l=ou.join(Zh.get(lr.ROOTPATH),Nf,r);await au.writeFile(l,c),await au.remove(l),Of.notify(e,"started.")}a(cEe,"removeNatsConfig")});var lj=M((Pke,cj)=>{"use strict";var Rs=fe(),et=(G(),D(j)),eE=Dt(),Ea=require("path"),{PACKAGE_ROOT:wy}=yt(),sj=fe(),Iy=ae(),Pf="/dev/null",lEe=Ea.join(wy,"launchServiceScripts"),ij=Ea.join(wy,"utility/scripts"),uEe=Ea.join(ij,et.HDB_RESTART_SCRIPT),oj=Ea.resolve(wy,"dependencies",`${process.platform}-${process.arch}`,eE.NATS_BINARY_NAME);function aj(){let e={[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0,...process.env};return Iy.noBootFile()&&(e[et.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Iy.getEnvCliRootPath()),{name:et.PROCESS_DESCRIPTORS.HDB,script:et.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,execArgv:process.execArgv,cwd:wy}}a(aj,"generateMainServerConfig");var dEe=9930;function fEe(){Rs.initSync(!0);let e=Rs.get(et.CONFIG_PARAMS.ROOTPATH),t=Ea.join(e,"clustering",eE.NATS_CONFIG_FILES.HUB_SERVER),r=Ea.join(Rs.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY),et.LOG_NAMES.HDB),n=sj.get(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=eE.LOG_LEVEL_FLAGS[Rs.get(et.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:et.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==dEe?"-"+n:""),binFile:oj,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Rs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Pf,i.error_file=Pf),i}a(fEe,"generateNatsHubServerConfig");var mEe=9940;function pEe(){Rs.initSync(!0);let e=Rs.get(et.CONFIG_PARAMS.ROOTPATH),t=Ea.join(e,"clustering",eE.NATS_CONFIG_FILES.LEAF_SERVER),r=Ea.join(Rs.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY),et.LOG_NAMES.HDB),n=sj.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=eE.LOG_LEVEL_FLAGS[Rs.get(et.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==mEe?"-"+n:""),binFile:oj,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Rs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Pf,i.error_file=Pf),i}a(pEe,"generateNatsLeafServerConfig");function hEe(){Rs.initSync();let e=Ea.join(Rs.get(et.CONFIG_PARAMS.LOGGING_ROOT),et.LOG_NAMES.HDB),t={name:et.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,binFile:et.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:lEe,autorestart:!1};return Rs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Pf,t.error_file=Pf),t}a(hEe,"generateClusteringUpgradeV4ServiceConfig");function EEe(){let e={[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.RESTART_HDB};return Iy.noBootFile()&&(e[et.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Iy.getEnvCliRootPath()),{...{name:et.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:ij},script:uEe}}a(EEe,"generateRestart");function _Ee(){return{apps:[aj()]}}a(_Ee,"generateAllServiceConfigs");cj.exports={generateAllServiceConfigs:_Ee,generateMainServerConfig:aj,generateRestart:EEe,generateNatsHubServerConfig:fEe,generateNatsLeafServerConfig:pEe,generateClusteringUpgradeV4ServiceConfig:hEe}});var cu=M((vke,Ej)=>{"use strict";var Pr=(G(),D(j)),Dke=ae(),ga=Ay(),Ny=_r(),_a=Dt(),Pc=lj(),QP=fe(),Lc=Q(),gEe=So(),{startWorker:uj,onMessageFromWorkers:SEe}=st(),dj=require("fs"),TEe=require("node:path"),yEe=(G(),D(j)),{setTimeout:REe}=require("node:timers/promises"),{execFile:bEe,fork:AEe}=require("node:child_process");Ej.exports={start:Dc,restart:wEe,kill:PEe,startAllServices:LEe,startService:mj,restartHdb:NEe,startClusteringProcesses:pj,startClusteringThreads:hj,isHdbRestartRunning:CEe,getHdbPid:OEe,cleanupChildrenProcesses:tE,reloadClustering:vEe,expectedRestartOfChildren:fj};SEe(e=>{e.type==="restart"&&QP.initSync(!0)});var To=[],IEe=10,JP;function Dc(e,t=!1){let r=typeof e.args=="string"?e.args.split(" "):e.args;e.silent=!0,e.detached=!0;let n=e.script?AEe(e.script,r,e):bEe(e.binFile,r,e);n.name=e.name,n.config=e,n.on("error",(o,c)=>{console.error(o,c)}),n.on("exit",async o=>{let c=To.indexOf(n);c>-1&&To.splice(c,1),!JP&&o!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<IEe&&(dj.existsSync(ga.getHubConfigPath())?Dc(e):(await ga.generateNatsConfig(!0),Dc(e),await new Promise(l=>setTimeout(l,3e3)),await ga.removeNatsConfig(Pr.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ga.removeNatsConfig(Pr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function i(o){let c=QP.get(Pr.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),l=/\[\d+][^\[]+\[(\w+)]/g,u,d=0,f;for(;u=l.exec(o);){if(u.index&&_a.LOG_LEVEL_HIERARCHY[c]>=_a.LOG_LEVEL_HIERARCHY[f||"info"]){let h=f===_a.LOG_LEVELS.ERR||f===_a.LOG_LEVELS.WRN?Lc.OUTPUTS.STDERR:Lc.OUTPUTS.STDOUT;Lc.logCustomLevel(f||"info",h,s,o.slice(d,u.index).trim())}let[m,p]=u;d=u.index+m.length,f=_a.LOG_LEVELS[p]}if(_a.LOG_LEVEL_HIERARCHY[c]>=_a.LOG_LEVEL_HIERARCHY[f||"info"]){let m=f===_a.LOG_LEVELS.ERR||f===_a.LOG_LEVELS.WRN?Lc.OUTPUTS.STDERR:Lc.OUTPUTS.STDOUT;Lc.logCustomLevel(f||"info",m,s,o.toString().slice(d).trim())}}a(i,"extractMessages"),n.stdout.on("data",i),n.stderr.on("data",i),n.unref(),To.length===0&&(t||(process.on("exit",tE),process.on("SIGINT",tE),process.on("SIGQUIT",tE),process.on("SIGTERM",tE))),To.push(n)}a(Dc,"start");function tE(e=!0){if(!JP&&(JP=!0,To.length!==0))if(Lc.info("Killing child processes..."),To.map(t=>t.kill()),e)process.exit(0);else return REe(2e3)}a(tE,"cleanupChildrenProcesses");function wEe(e){fj();for(let t of To)t.name===e&&t.kill()}a(wEe,"restart");function fj(){for(let e of To)e.config&&(e.config.restarts=0)}a(fj,"expectedRestartOfChildren");async function NEe(){await Dc(Pc.generateRestart())}a(NEe,"restartHdb");async function CEe(){let e=await list();for(let t in e)if(e[t].name===Pr.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(CEe,"isHdbRestartRunning");function OEe(){let e=QP.getHdbBasePath();if(!e)return;let t=TEe.join(e,yEe.HDB_PID_FILE),r=MEe(t);if(!(!r||r===process.pid)&&UEe(r))return r}a(OEe,"getHdbPid");function PEe(){for(let e of To)e.kill();To=[]}a(PEe,"kill");async function LEe(){await pj(),await hj(),await Dc(Pc.generateAllServiceConfigs())}a(LEe,"startAllServices");async function mj(e,t=!1){let r;switch(e=e.toLowerCase(),e){case Pr.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Pc.generateMainServerConfig();break;case Pr.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Pc.generateNatsIngestServiceConfig();break;case Pr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Pc.generateNatsReplyServiceConfig();break;case Pr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Pc.generateNatsHubServerConfig(),await Dc(r,t),await ga.removeNatsConfig(e);return;case Pr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Pc.generateNatsLeafServerConfig(),await Dc(r,t),await ga.removeNatsConfig(e);return;case Pr.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Pc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}Dc(r,t)}a(mj,"startService");var DEe;async function pj(e=!1){for(let t in Pr.CLUSTERING_PROCESSES){let r=Pr.CLUSTERING_PROCESSES[t];await mj(r,e)}}a(pj,"startClusteringProcesses");async function hj(){DEe=uj(Pr.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Pr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Ny.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Ny.updateLocalStreams();let e=await gEe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Pr.PRE_4_0_0_VERSION){Lc.info("Starting clustering upgrade 4.0.0 process"),uj(Pr.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(hj,"startClusteringThreads");async function vEe(){await ga.generateNatsConfig(!0),await Ny.reloadNATSHub(),await Ny.reloadNATSLeaf(),await ga.removeNatsConfig(Pr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ga.removeNatsConfig(Pr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(vEe,"reloadClustering");function MEe(e){try{return Number.parseInt(dj.readFileSync(e,"utf8"),10)}catch{return null}}a(MEe,"readPidFile");function UEe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}a(UEe,"isProcessRunning")});var eL={};ye(eL,{compactOnStart:()=>xEe,copyDb:()=>Rj});async function xEe(){Sa.notify("Running compact on start"),console.log("Running compact on start");let e=(0,XP.get)(x.ROOTPATH),t=new Map,r=lt();(0,ZP.updateConfigValue)(x.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,Cy.join)(e,"backup",n+".mdb"),o=(0,Cy.join)(e,tl,n+"-copy.mdb"),c=0;try{c=await _j(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Sa.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:o,backupDest:i,recordCount:c}),await Rj(n,o),console.log("Backing up",n,"to",i);try{await(0,lu.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}console.log("Moving copy compacted",n,"to",s),await(0,lu.move)(o,s,{overwrite:!0}),await(0,lu.remove)((0,Cy.join)(e,tl,`${n}-copy.mdb-lock`))}try{Bd()}catch(n){Sa.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}try{Bd()}catch(n){Sa.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Sa.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,ZP.updateConfigValue)(x.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,lu.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Bd(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let o=await _j(n);if(console.log("Database",n,"after compact has a total record count of",o),i!==o){let c=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
17
|
+
`,"")}a(JV,"runCommand");async function Hue(){try{await Eue.access(QC)}catch{return!1}let e=await JV(`${QC} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return _ue.eq(t,Fue)}a(Hue,"checkNATSServerInstalled");async function rO(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await jV.getClusterUser();if(Jl(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Ti.trace("create nats connection called");let i=await Oue({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Kr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Kr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Kr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Ti.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Ti.error("Error with Nats client connection, connection closed",o),i===bn&&QV()}),i}a(rO,"createConnection");function QV(){bn=void 0,Wl=void 0,jl=void 0,zl=void 0}a(QV,"clearClientCache");async function Gue(){bn&&(await bn.drain(),bn=void 0,Wl=void 0,jl=void 0,zl=void 0)}a(Gue,"closeConnection");var bn,zl;async function Th(){return zl||(zl=rO(Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),bn=await zl),bn||zl}a(Th,"getConnection");async function yh(){if(Wl)return Wl;Jl(bn)&&await Th();let{domain:e}=Xd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Jl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Wl=await bn.jetstreamManager({domain:e,timeout:6e4}),Wl}a(yh,"getJetStreamManager");async function XV(){if(jl)return jl;Jl(bn)&&await Th();let{domain:e}=Xd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Jl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return jl=bn.jetstream({domain:e,timeout:6e4}),jl}a(XV,"getJetStream");async function po(){let e=bn||await Th(),t=Wl||await yh(),r=jl||await XV();return{connection:e,jsm:t,js:r}}a(po,"getNATSReferences");async function que(e){let t=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await jV.getClusterUser(),s=await rO(t,r,n),i=tO(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let f=zV.decode(d.data);f.response_time=Date.now()-l,c.push(f)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await _T.asyncSetTimeout(e),await o.drain(),await s.close(),await u,c}a(que,"getServerList");async function nO(e,t){let{jsm:r}=await po(),n=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Pue.File,retention:Lue.Limits,subjects:t,discard:Due.Old,maxMsgs:s,maxBytes:i,maxAge:n})}a(nO,"createLocalStream");async function ZV(){let{jsm:e}=await po(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(ZV,"listStreams");async function $ue(e){let{jsm:t}=await po();await t.streams.delete(e)}a($ue,"deleteLocalStream");async function Vue(e){let{connection:t}=await po(),r=[],n=tO(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(zV.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(Vue,"listRemoteStreams");async function Kue(e,t=void 0,r=void 0){let{jsm:n,js:s}=await po(),i=VV(),o={durable_name:i,ack_policy:ZC.Explicit};t&&(o.deliver_policy=eO.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=XC(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(on.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}a(Kue,"viewStream");async function*Yue(e,t=void 0,r=void 0){let{jsm:n,js:s}=await po(),i=VV(),o={durable_name:i,ack_policy:ZC.Explicit};t&&(o.deliver_policy=eO.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=XC(u.data);d[0]||(d=[d]);for(let f of d){let m={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:f};u.headers&&(m.origin=u.headers.get(on.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}a(Yue,"viewStreamIterator");async function Wue(e,t,r,n){Ti.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=e1(n,r);let{js:s}=await po(),i=await ST(),o=`${e}.${i}`,c=await xue(()=>n instanceof Uint8Array?n:WV.encode(n));try{Ti.trace(`publishToStream publishing to subject: ${o}`),Uue(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return r1(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){Ti.trace(`publishToStream creating stream: ${t}`);let d=o.split(".");d[2]="*",await nO(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(Wue,"publishToStream");function e1(e,t){t===void 0&&(t=Mue());let r=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(on.MSG_HEADERS.ORIGIN)&&r&&t.append(on.MSG_HEADERS.ORIGIN,r),t}a(e1,"addNatsMsgHeader");function Xd(e){e=e.toLowerCase();let t=Sh.join(Kr.get(rt.CONFIG_PARAMS.ROOTPATH),Bue);if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Jl(JC)&&(JC={port:_h.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:_h.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.HUB,config_file:on.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Sh.join(t,on.PID_FILES.HUB),hdbNatsPath:t}),JC;if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Jl(zC)&&(zC={port:_h.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:_h.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.LEAF,config_file:on.NATS_CONFIG_FILES.LEAF_SERVER,domain:_h.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.LEAF,pid_file_path:Sh.join(t,on.PID_FILES.LEAF),hdbNatsPath:t}),zC;Ti.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Xd,"getServerConfig");async function t1(e,t,r,n){try{await e.consumers.add(t,{ack_policy:ZC.Explicit,durable_name:r,deliver_policy:eO.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(t1,"createConsumer");async function jue(e,t,r){await e.consumers.delete(t,r)}a(jue,"removeConsumer");function zue(e){return e.split(".")[1]}a(zue,"extractServerName");async function Jue(e,t,r=6e4,n=tO()){if(!_T.isObject(t))throw new Error("data param must be an object");let s=WV.encode(t),{connection:i}=await po(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return XC(c.data)}a(Jue,"request");function sO(e){return new Promise(async(t,r)=>{let n=yue(QC,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(sO,"reloadNATS");async function Que(){let{pid_file_path:e}=Xd(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await sO(e)}a(Que,"reloadNATSHub");async function Xue(){let{pid_file_path:e}=Xd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await sO(e)}a(Xue,"reloadNATSLeaf");function Zue(e,t,r){let n;switch(e.code){case $V.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case $V.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Zue,"requestErrorHandler");async function ede(e,t){let r=t+on.SERVER_SUFFIX.LEAF,{connection:n}=await po(),{jsm:s}=await cde(r),{schema:i,table:o}=e,c=gT.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await r1(async()=>{if(e.subscribe===!0)await t1(s,c,n.info.server_name,l);else try{await jue(s,c,n.info.server_name)}catch(u){Ti.trace(u)}})}a(ede,"updateRemoteConsumer");async function tde(e,t,r,n){let s=gT.createNatsTableStreamName(e,t),i=r+on.SERVER_SUFFIX.LEAF,o={type:rt.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!YV&&Nue()<Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=jC();await c(o)}await Iue(o),n==="stop"&&await _T.asyncSetTimeout(1e3)}a(tde,"updateConsumerIterator");function r1(e){return Aue.writeTransaction(rt.SYSTEM_SCHEMA_NAME,rt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(r1,"exclusiveLock");async function n1(e,t){let r=gT.createNatsTableStreamName(e,t),n=await ST(),s=ide(e,t,n);await nO(r,[s])}a(n1,"createLocalTableStream");async function rde(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await n1(n,s)}}a(rde,"createTableStreams");async function s1(e,t,r=void 0){if(Kr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=gT.createNatsTableStreamName(e,t),{domain:s}=Xd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Th()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Ti.warn(n);else throw n}}a(s1,"purgeTableStream");async function nde(e,t){if(Kr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await s1(e,t[r])}a(nde,"purgeSchemaTableStreams");async function sde(e){return(await yh()).streams.info(e)}a(sde,"getStreamInfo");function ide(e,t,r){return`${on.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(ide,"createSubjectName");async function ST(){if(gh)return gh;if(gh=(await yh())?.nc?.info?.server_name,gh===void 0)throw new Error("Unable to get jetstream manager server name");return gh}a(ST,"getJsmServerName");async function ode(){let e=await yh(),t=await ST(),r=await ZV();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=ade(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");Ti.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(ode,"updateLocalStreams");function ade(e){let{config:t}=e,r=!1,n=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Kr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(ade,"updateStreamLimits");async function cde(e){let t,r;try{t=await bn.jetstream({domain:e}),r=await bn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Ti.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(cde,"connectToRemoteJS")});function iO(e){let t=e.get(TT),r=t?(0,Zd.unpack)(t):null;r||(r={remoteNameToId:{}});let n=nt(),s=!1;r.nodeName=nt();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:bh(e)??1,nodes:[]})})}i[n]=0,e.putSync(TT,(0,Zd.pack)(r))}return r}function Rh(e){return iO(e).remoteNameToId}function a1(e,t){let r=iO(t),n=r.remoteNameToId,s=new Map,i=!1;for(let o in e){let c=e[o],l=n[o];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[o]=l,i=!0}s.set(c,l)}return i&&t.putSync(TT,(0,Zd.pack)(r)),s}function yT(e,t){let r=iO(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(TT,(0,Zd.pack)(r))}return o1.trace?.("The remote node name map",e,n,s),s}var o1,Zd,TT,oO=se(()=>{o1=b(ir());gs();Zd=require("msgpackr"),TT=Symbol.for("remote-ids");a(iO,"getIdMappingRecord");a(Rh,"exportIdMapping");a(a1,"remoteToLocalNodeId");a(yT,"getIdOfRemoteNode")});var m1={};ye(m1,{commitsAwaitingReplication:()=>ef,getHDBNodeTable:()=>Gt,getReplicationSharedStatus:()=>tf,iterateRoutes:()=>Ih,shouldReplicateToNode:()=>Ah,subscribeToNodeUpdates:()=>rf});function Gt(){return c1||(c1=ze({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function tf(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(64),n&&{callback:n}))}function rf(e){Gt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;f1.debug?.("adding node",n,"on node",nt()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==nt()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Gt().search({}))if(i.shard!=null){let o=s.get(i.shard);o||s.set(i.shard,o=[]),o.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function Ah(e,t){let r=_c.default.get(x.REPLICATION_DATABASES);return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&(r==="*"||r?.find?.(n=>n.name===t&&(!n.sharded||e.shard===_c.default.get(x.REPLICATION_SHARD))))&&Gt().primaryStore.get(nt())?.replicates||e.subscriptions?.some(n=>(n.database||n.schema)===t&&n.subscribe)}function lde(){rf(e=>{gc({},(t,r)=>{let n=e.name,s=l1.get(n);if(s||l1.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=tf(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of ef.get(r)||[])u>l&&u<=c&&d();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*Ih(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=_c.default.get(x.REPLICATION_SECUREPORT)??(!_c.default.get(x.REPLICATION_PORT)&&_c.default.get(x.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||_c.default.get(x.REPLICATION_PORT)||_c.default.get(x.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){u1.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 u1,d1,_c,f1,c1,l1,ef,nf=se(()=>{Oe();gs();km();u1=require("worker_threads"),d1=b(Ee()),_c=b(fe());G();f1=b(ir());server.nodes=[];a(Gt,"getHDBNodeTable");a(tf,"getReplicationSharedStatus");a(rf,"subscribeToNodeUpdates");a(Ah,"shouldReplicateToNode");l1=new Map;Mx((e,t,r)=>{if(r>server.nodes.length)throw new d1.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);ef||(ef=new Map,lde());let n=ef.get(e);return n||(n=[],ef.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(lde,"startSubscriptionToReplications");a(Ih,"iterateRoutes")});var T1={};ye(T1,{connectedToNode:()=>Ql,disconnectedFromNode:()=>of,ensureNode:()=>oa,requestClusterStatus:()=>S1,startOnMainThread:()=>aO});async function aO(e){let t=0,r=lt();for(let o of Object.getOwnPropertyNames(r)){let c=r[o];for(let l in c){let u=c[l];if(u.auditStore){RT.set(o,bh(u.auditStore));break}}}yi.whenThreadsStarted.then(async()=>{let o=[];for await(let u of r.system.hdb_nodes?.search([])||[])o.push(u);let c=nt();function l(){let u=Gt().primaryStore.get(c);if(u!==null){let d=e.url??Sc();if(u===void 0||u.url!==d||u.shard!==e.shard)return oa(c,{name:c,url:d,shard:e.shard,replicates:!0})}}a(l,"ensureThisNode"),Gt().primaryStore.get(c)&&l();for(let u of Ih(e))try{let d=!u.subscriptions;if(d&&await l(),d&&u.replicates==null&&(u.replicates=!0),p1.push(u),o.find(f=>f.url===u.url))continue;s(u)}catch(d){console.error(d)}rf(s)});let n;function s(o,c=o?.name){let l=nt()&&c===nt()||Sc()&&o?.url===Sc();if(l){let m=!!o?.replicates;if(n!==void 0&&n!==m)for(let p of Gt().search([]))p.replicates&&p.name!==c&&s(p,p.name);n=m}if(ot.trace("Setting up node replication for",o),!o){for(let[m,p]of ho){let h;for(let[E,{worker:_,nodes:R}]of p){let S=R[0];if(S&&S.name==c){h=!0;for(let[y,{worker:w}]of p)p.delete(y),ot.warn("Node was deleted, unsubscribing from node",c,y,m),w?.postMessage({type:"unsubscribe-from-node",node:c,nodes:R,database:y,url:m});break}}if(h){ho.get(m).iterator.remove(),ho.delete(m);return}}return}if(l)return;if(!o.url){ot.info(`Node ${o.name} is missing url`);return}let u=ho.get(o.url);if(u&&u.iterator.remove(),!(o.replicates===!0||o.replicates?.sends)&&!o.subscriptions?.length&&!u)return;if(ot.info(`Added node ${o.name} at ${o.url} for process ${nt()}`),o.replicates&&o.subscriptions&&(o={...o,subscriptions:null}),o.name){for(let[m,p]of sf)if(o.url===p.url){sf.delete(m);break}sf.set(o.name,o)}let d=lt();if(u||(u=new Map,ho.set(o.url,u)),u.iterator=gc(e,(m,p,h)=>{h?f(p,!0):f(p,!1)}),o.subscriptions)for(let m of o.subscriptions){let p=m.database||m.schema;d[p]||(ot.warn(`Database ${p} not found for node ${o.name}, making a subscription anyway`),f(p,!1))}function f(m,p){ot.trace("Setting up replication for database",m,"on node",o.name);let h=u.get(m),E,_=[{replicateByDefault:p,...o}];RT.has(m)&&wh.default.get(x.REPLICATION_FAILOVER)&&(_.push({replicateByDefault:p,name:nt(),startTime:RT.get(m),endTime:Date.now(),replicates:!0}),RT.delete(m));let R=Ah(o,m),S=yi.workers.filter(y=>y.name==="http");if(h){if(E=h.worker,h.nodes=_,R)return}else R&&(t=t%S.length,E=S[t++],E||ot.warn("No http workers available to subscribe to node",o.name,o.url),u.set(m,{worker:E,nodes:_,url:o.url}),E?.on("exit",()=>{u.get(m)?.worker===E&&(u.delete(m),f(m,p))}));if(R){let y=ude.HDB_LEADER_URL??process.env.HDB_LEADER_URL??p1[0]?.url,w=y?new URL(y).hostname:Array.from(Gt().primaryStore.getKeys({}).filter(H=>H!==nt()))[0],I=_[0].name??(_[0].url&&new URL(_[0].url).hostname);ot.warn(`Setting up subscription with leader ${w} for node ${I}`),_[0].isLeader=!w||I===w,setTimeout(()=>{let H={..._[0],type:"subscribe-to-node",database:m,nodes:_};E?E.postMessage(H):Nh(H)},dde)}else{ot.info("Node no longer should be used, unsubscribing from node",{replicates:o.replicates,databaseName:m,node:o,subscriptions:o.subscriptions,hasDatabase:!!d[m],thisReplicates:Gt().primaryStore.get(nt())?.replicates}),Gt().primaryStore.get(nt())?.replicates||(n=!1,ot.info("Disabling replication, this node name",nt(),Gt().primaryStore.get(nt()),m));let y={type:"unsubscribe-from-node",database:m,url:o.url,name:o.name,nodes:_};E?E.postMessage(y):AT(y)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),of=a(function(o){try{ot.info("Disconnected from node",o.name,o.url,"finished",!!o.finished);let c=Array.from(sf.keys()),l=c.sort(),u=l.indexOf(o.name||Ri(o.url));if(u===-1){ot.warn("Disconnected node not found in node map",o.name,c);return}let d=ho.get(o.url),f=d?.get(o.database);if(!f){ot.warn("Disconnected node not found in replication map",o.database,d);return}if(f.connected=!1,o.finished||!wh.default.get(x.REPLICATION_FAILOVER))return;let m=f.nodes[0];if(!(m.replicates===!0||m.replicates?.sends||m.subscriptions?.length))return;let p=m.shard,h=(u+1)%l.length;for(;u!==h;){let E=l[h],_=sf.get(E);d=ho.get(_.url);let R=d?.get(o.database);if(!R||R.connected===!1||R.nodes[0].shard!==p){h=(h+1)%l.length;continue}let{nodes:S}=R,y=!1;for(let w of f.nodes){if(S.some(I=>I.name===w.name)){ot.info(`Disconnected node is already failing over to ${E} for ${o.database}`);continue}w.endTime<Date.now()||(S.push(w),ot.info(`Failing over ${o.database} from ${o.name} to ${E}`),i(w,o.database,R.nodes[0]),y=!0)}f.nodes=[f.nodes[0]],y||ot.info(`Disconnected node ${o.name} has no nodes to fail over to ${E}`);return}ot.warn("Unable to find any other node to fail over to",o.name,o.url)}catch(c){ot.error("Error failing over node",c)}},"disconnectedFromNode"),Ql=a(function(o){let c=ho.get(o.url),l=c?.get(o.database);if(!l){ot.warn("Connected node not found in replication map, this may be because the node is being removed",o.database,c);return}l.connected=!0,l.latency=o.latency;let u=l.nodes[0];if(!u){ot.warn("Newly connected node has no node subscriptions",o.database,l);return}if(!u.name){ot.debug("Connected node is not named yet",o.database,l);return}if(!wh.default.get(x.REPLICATION_FAILOVER))return;l.nodes=[u];let d=!1;for(let f of ho.values()){let m=f.get(o.database);if(!m||m==l)continue;let{worker:p,nodes:h,connected:E}=m;if(h)if(E===!1&&h[0].shard===u.shard&&node.url===u.url)for(let _ of h)i(_,o.database);else{let _=h.filter(R=>{if(R)return R.name===u.name&&R.worker?(R.worker.postMessage({type:"unsubscribe-to-node",database:o.database,url:o.url,nodes:[R]}),!1):!0});_.length<h.length&&(m.nodes=_)}}},"connectedToNode");function i(o,c,l=o){let u=yi.workers.filter(f=>f.name==="http");t=t%u.length;let d=u[t++];Object.defineProperty(o,"worker",{value:d,configurable:!0}),d?d.postMessage({url:l.url,name:l.name,type:"subscribe-to-node",database:c,nodes:[o]}):Nh({url:l.url,name:l.name,database:c,nodes:[o]})}a(i,"connectToNextWorker"),(0,yi.onMessageByType)("disconnected-from-node",of),(0,yi.onMessageByType)("connected-to-node",Ql),(0,yi.onMessageByType)("request-cluster-status",S1)}function S1(e,t){let r=[];for(let[n,s]of sf)try{let i=ho.get(s.url);ot.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)o.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(p=>!(p.endTime<Date.now())).map(p=>p.name)});let c=E1(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ot.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function oa(e,t){let r=Gt();e=e??Ri(t.url),t.name=e;try{if(t.ca){let s=new _1.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){ot.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ot.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!wh.default.get(x.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=E1(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ot.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var yi,bT,ot,h1,wh,_1,g1,E1,ude,dde,ho,of,Ql,sf,RT,p1,Ch=se(()=>{Oe();yi=b(st());gs();bT=require("worker_threads");nf();ot=b(Q()),h1=b(require("lodash")),wh=b(fe());G();_1=require("crypto"),g1=b(require("minimist")),{cloneDeep:E1}=h1.default,ude=(0,g1.default)(process.argv),dde=200,ho=new Map,sf=new Map,RT=new Map,p1=[];a(aO,"startOnMainThread");a(S1,"requestClusterStatus");bT.parentPort&&(of=a(e=>{bT.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Ql=a(e=>{bT.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,yi.onMessageByType)("subscribe-to-node",e=>{Nh(e)}),(0,yi.onMessageByType)("unsubscribe-from-node",e=>{AT(e)}));a(oa,"ensureNode")});var Ts=M(qt=>{"use strict";var gr=require("path"),{watch:fde}=require("chokidar"),Yn=require("fs-extra"),af=require("node-forge"),w1=require("net"),{generateKeyPair:cO,X509Certificate:aa,createPrivateKey:N1,randomBytes:mde}=require("node:crypto"),pde=require("util");cO=pde.promisify(cO);var vt=af.pki,bi=require("joi"),{v4:C1}=require("uuid"),{validateBySchema:fO}=ft(),{forComponent:hde}=Q(),Ss=fe(),Vs=(G(),D(j)),{CONFIG_PARAMS:Zl}=Vs,Ai=oA(),{ClientError:Tc}=Ee(),wT=require("node:tls"),{relative:O1,join:Ede}=require("node:path"),{CERTIFICATE_VALUES:y1}=Ai,_de=rl(),lO=_t(),{table:gde,getDatabases:Sde,databases:IT}=(Oe(),D(mt)),{getJWTRSAKeys:R1}=(Wd(),D(mh)),Xe=hde("tls").conditional;qt.generateKeys=hO;qt.updateConfigCert=B1;qt.createCsr=wde;qt.signCertificate=Nde;qt.setCertTable=cf;qt.loadCertificates=M1;qt.reviewSelfSignedCert=_O;qt.createTLSSelector=k1;qt.listCertificates=G1;qt.addCertificate=vde;qt.removeCertificate=Ude;qt.createNatsCerts=Pde;qt.generateCertsKeys=Ode;qt.getReplicationCert=Ph;qt.getReplicationCertAuth=Ide;qt.renewSelfSigned=Lde;qt.hostnamesFromCert=SO;qt.getKey=xde;qt.getHostnamesFromCertificate=Bde;qt.getPrimaryHostName=gO;qt.generateSerialNumber=OT;var{urlToNodeName:P1,getThisNodeUrl:Tde,getThisNodeName:CT,clearThisNodeName:yde}=(gs(),D(ca)),{readFileSync:Rde,statSync:L1}=require("node:fs"),G0e=fe(),{getTicketKeys:bde,onMessageFromWorkers:Ade}=st(),{isMainThread:D1}=require("worker_threads"),{TLSSocket:v1,createSecureContext:q0e}=require("node:tls"),mO=3650,Oh=["127.0.0.1","localhost","::1"],pO=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];function OT(){let e=mde(8);return e[0]=e[0]&127|1,e.toString("hex")}a(OT,"generateSerialNumber");Ade(async e=>{e.type===Vs.ITC_EVENT_TYPES.RESTART&&(Ss.initSync(!0),await _O())});var an;function Rc(){return an||(an=Sde().system.hdb_certificate,an||(an=gde({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),an}a(Rc,"getCertTable");async function Ph(){let e=k1("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(CT());if(!r)return;let n=new aa(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(Ph,"getReplicationCert");async function Ide(){Rc();let e=(await Ph()).options.cert,r=new aa(e).issuer.match(/CN=(.*)/)?.[1];return an.get(r)}a(Ide,"getReplicationCertAuth");var b1,yc=new Map;function M1(){if(b1)return;b1=!0;let e=[{configKey:Zl.TLS},{configKey:Zl.OPERATIONSAPI_TLS}];Rc();let t=gr.dirname(lO.getConfigFilePath()),r;for(let{configKey:n}of e){let s=lO.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&O1(Ede(t,"keys"),o);c&&A1(o,l=>{yc.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&D1){let d;A1(u,f=>{if(y1.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=F1(u),h=new aa(p),E;try{E=gO(h)}catch(y){Xe.error?.("error extracting host name from certificate",y);return}if(E==null){Xe.error?.("No host name found on certificate");return}if(h.checkIssued(new aa(y1.cert)))return;let _=an.primaryStore.get(E),R=L1(u).mtimeMs,S=!_||_.is_self_signed?1:_.file_timestamp??_.__updatedtime__;if(_&&R<=S){R<S&&Xe.info?.(`Certificate ${E} at ${u} is older (${new Date(R)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=an.put({name:E,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:p,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:R,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject?.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(M1,"loadCertificates");function A1(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&D1&&Xe.warn?.(`Reloading ${r}:`,i),n=c,t(F1(i)))}catch(c){Xe.error?.(`Error loading ${r}:`,i,c)}},"loadFile");Yn.existsSync(e)?s(e,L1(e)):Xe.error?.(`${r} file not found:`,e),fde(e,{persistent:!1}).on("change",s)}a(A1,"loadAndWatch");function uO(){let e=Tde();if(e==null){let t=Oh[0];return Xe.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return P1(e)}a(uO,"getHost");function NT(){let e=CT();if(e==null){let t=Oh[0];return Xe.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(NT,"getCommonName");async function wde(){let e=await Ph(),t=vt.certificateFromPem(e.options.cert),r=vt.privateKeyFromPem(e.options.key);Xe.info?.("Creating CSR with cert named:",e.name);let n=vt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:NT()},...pO];Xe.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:U1()}];return Xe.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),af.pki.certificationRequestToPem(n)}a(wde,"createCsr");function U1(){let e=Oh.includes(NT())?Oh:[...Oh,NT()];return e.includes(uO())||e.push(uO()),[{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=>w1.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(U1,"certExtensions");async function Nde(e){let t={},r=gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;Rc();for await(let d of an.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(yc.has(d.private_key_name)){n=yc.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await Yn.exists(gr.join(r,d.private_key_name))){n=Yn.readFile(gr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await dO();s=d.ca,n=d.private_key}n=vt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=vt.certificateFromPem(s.certificate);Xe.info?.("Signing CSR with cert named",s.name);let o=vt.certificationRequestFromPem(e.csr);try{o.verify()}catch(d){return Xe.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=af.pki.createCertificate();c.serialNumber=OT(),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+mO),Xe.info?.("sign cert setting validity:",c.validity),Xe.info?.("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),Xe.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;Xe.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,af.md.sha256.create()),t.certificate=vt.certificateToPem(c)}else Xe.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(Nde,"signCertificate");async function Cde(e,t){await cf({name:CT(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await cf({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:vt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(Cde,"createCertificateTable");async function cf(e){let t;try{t=new aa(e.certificate)}catch(r){Xe.error?.(`Failed to parse certificate for ${e.name}:`,r.message),Xe.debug?.("Certificate record details:",JSON.stringify(e,null,2));let n=new Error(`Invalid certificate format for ${e.name}: ${r.message}. This may be due to corrupted certificate data during transfer or encoding issues.`);throw n.code="INVALID_CERTIFICATE_FORMAT",n.cause=r,n}e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject?.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},Rc(),await an.patch(e)}a(cf,"setCertTable");async function hO(){let e=await cO("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:vt.publicKeyFromPem(e.publicKey),privateKey:vt.privateKeyFromPem(e.privateKey)}}a(hO,"generateKeys");async function EO(e,t,r){let n=vt.createCertificate();if(!t){let o=await Ph();t=vt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=OT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+mO);let i=[{name:"commonName",value:NT()},...pO];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(U1()),n.sign(e,af.md.sha256.create()),vt.certificateToPem(n)}a(EO,"generateCertificates");async function dO(){let e=await G1(),t;for(let r of e){if(!r.is_authority)continue;let n=await H1(r.private_key_name);if(r.private_key_name&&n&&new aa(r.certificate).checkPrivateKey(N1(n))){Xe.trace?.(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;Xe.trace?.("No CA found with matching private key")}a(dO,"getCertAuthority");async function x1(e,t,r=!0){let n=vt.createCertificate();n.publicKey=t,n.serialNumber=OT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+mO);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${Ss.get(Zl.REPLICATION_HOSTNAME)??P1(Ss.get(Zl.REPLICATION_URL))??C1().split("-")[0]}`},...pO];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,af.md.sha256.create());let o=gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),c=gr.join(o,Ai.PRIVATEKEY_PEM_NAME);return r&&await Yn.writeFile(c,vt.privateKeyToPem(e)),n}a(x1,"generateCertAuthority");async function Ode(){let{privateKey:e,publicKey:t}=await hO(),r=await x1(e,t),n=await EO(e,t,r);await Cde(n,r),B1()}a(Ode,"generateCertsKeys");async function Pde(){let e=await EO(vt.privateKeyFromPem(Ai.CERTIFICATE_VALUES.key),void 0,vt.certificateFromPem(Ai.CERTIFICATE_VALUES.cert)),t=gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),r=gr.join(t,Ai.NATS_CERTIFICATE_PEM_NAME);await Yn.exists(r)||await Yn.writeFile(r,e);let n=gr.join(t,Ai.NATS_CA_PEM_NAME);await Yn.exists(n)||await Yn.writeFile(n,Ai.CERTIFICATE_VALUES.cert)}a(Pde,"createNatsCerts");async function Lde(){Rc();for await(let e of an.search([{attribute:"is_self_signed",value:!0}]))await an.delete(e.name);await _O()}a(Lde,"renewSelfSigned");async function _O(){yde(),await M1(),Rc();let e=await dO();if(!e){Xe.notify?.("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=a(u=>{try{return{key:vt.privateKeyFromPem(Yn.readFileSync(u)),keyPath:u}}catch(d){return Xe.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=Ss.get(Zl.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let d=r(u.privateKey);if(s=d.key,i=d.keyPath,d.key)break}}else{let u=Ss.get(Zl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let o=gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),c=O1(o,i);s||(Xe.warn?.("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await hO(),Yn.existsSync(gr.join(o,Ai.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${C1().split("-")[0]}.pem`),await Yn.writeFile(gr.join(o,c),vt.privateKeyToPem(s)));let l=await x1(s,vt.setRsaPublicKey(s.n,s.e),!1);await cf({name:l.subject.getField("CN").value,uses:["https"],certificate:vt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await Ph()){let r=CT();Xe.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await dO();let n=vt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await EO(vt.privateKeyFromPem(e.private_key),s,n);await cf({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(_O,"reviewSelfSignedCert");function B1(){let e=_de(Object.keys(Vs.CONFIG_PARAM_MAP),!0),t=gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME),r=gr.join(t,Ai.PRIVATEKEY_PEM_NAME),n=gr.join(t,Ai.NATS_CERTIFICATE_PEM_NAME),s=gr.join(t,Ai.NATS_CA_PEM_NAME),i=Vs.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),lO.updateConfigValue(void 0,void 0,o,!1,!0)}a(B1,"updateConfigCert");function F1(e){return e.startsWith("-----BEGIN")?e:Rde(e,"utf8")}a(F1,"readPEM");var I1=wT.createSecureContext;wT.createSecureContext=function(e){if(!e.cert||!e.key)return I1(e);let t={...e};delete t.key,delete t.cert;let r=I1(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Dde=v1.prototype._init;v1.prototype._init=function(e,t){Dde.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var Xl=new Map;function k1(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Xl.clear();let d=0;if(IT===void 0){c();return}for await(let f of IT.system.hdb_certificate.search([])){let m=f.certificate,p=new aa(m);f.is_authority&&(p.asString=m,Xl.set(p.subject,m))}for await(let f of IT.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",p=f.is_self_signed?1:3;m&&f.uses?.includes?.("operations")&&(p+=1);let h=await H1(f.private_key_name),E=f.certificate,_=new aa(E);if(Xl.has(_.issuer)&&(E+=`
|
|
18
|
+
`+Xl.get(_.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let R={ciphers:f.ciphers,ticketKeys:bde(),availableCAs:Xl,ca:t&&Array.from(Xl.values()),cert:E,key:h,key_file:f.private_key_name,is_self_signed:f.is_self_signed};o&&(R.sessionIdContext=o.sessionIdContext);let S=f.hostnames??SO(_);Array.isArray(S)||(S=[S]);for(let I of S)I===uO()&&(p+=1);let y=wT.createSecureContext(R);y.name=f.name,y.options=R,y.quality=p,y.certificateAuthorities=Array.from(Xl),y.certStart=E.toString().slice(0,100);let w;for(let I of S)if(I){I[0]==="*"&&(s=!0,I=I.slice(1)),w1.isIP(I)&&(w=!0);let H=r.get(I)?.quality??0;Xe.trace?.("Assigning TLS for hostname",I,"if",p,">",H),p>H&&r.set(I,y)}else Xe.error?.("No hostname found for certificate at",wT.certificate);Xe.trace?.("Adding TLS",y.name,"for",o.ports||"client","cert named",f.name,"hostnames",S,"quality",p,"best quality",d),p>d&&(i.defaultContext=n=y,d=p,o&&(o.defaultContext=y))}catch(m){Xe.error?.("Error applying TLS for",f.name,m)}o?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}a(u,"updateTLS"),IT?.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){Xe.info?.("TLS requested for",o||"(no SNI)");let l=o;for(;;){let d=r.get(l);if(d)return Xe.debug?.("Found certificate for",o,d.certStart),d.updatedContext&&(d=d.updatedContext),c(null,d);if(s&&l){let f=l.indexOf(".",1);f<0?l="":l=l.slice(f)}else break}o?Xe.debug?.("No certificate found to match",o,"using the default certificate"):Xe.debug?.("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):Xe.info?.("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(k1,"createTLSSelector");async function H1(e){let t=yc.get(e);return!t&&e?await Yn.readFile(gr.join(Ss.get(Zl.ROOTPATH),Vs.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(H1,"getPrivateKeyByName");async function G1(){Rc();let e=[];for await(let t of an.search([]))e.push(t);return e}a(G1,"listCertificates");async function vde(e){let t=fO(e,bi.object({name:bi.string().required(),certificate:bi.string().required(),is_authority:bi.boolean().required(),private_key:bi.string(),hosts:bi.array(),uses:bi.array()}));if(t)throw new Tc(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new aa(n),c=!1,l=!1,u;for(let[p,h]of yc)!s&&!c&&o.checkPrivateKey(N1(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new Tc("A suitable private key was not found for this certificate");let d;if(!r){try{d=gO(o)}catch(p){Xe.error?.(p)}if(d==null)throw new Tc("Error extracting certificate host name, please provide a name parameter")}let f=Mde(r??d);s&&!c&&!l&&(await Yn.writeFile(gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME,f+".pem"),s),yc.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 cf(m),"Successfully added certificate: "+f}a(vde,"addCertificate");function Mde(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(Mde,"sanitizeName");async function Ude(e){let t=fO(e,bi.object({name:bi.string().required()}));if(t)throw new Tc(t.message);let{name:r}=e;Rc();let n=await an.get(r);if(!n)throw new Tc(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await an.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(Xe.info?.("Removing private key named",s),await Yn.remove(gr.join(Ss.getHdbBasePath(),Vs.LICENSE_KEY_DIR_NAME,s)))}return await an.delete(r),"Successfully removed "+r}a(Ude,"removeCertificate");function gO(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||SO(e)[0]}a(gO,"getPrimaryHostName");function SO(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=e.subject?.match(/CN=(.*)/)?.[1];return t?[t]:[]}a(SO,"hostnamesFromCert");async function xde(e){if(e.bypass_auth!==!0)throw new Tc("Unauthorized","401");let t=fO(e,bi.object({name:bi.string().required()}));if(t)throw new Tc(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await R1()).privateKey;if(r===".jwtPublic")return(await R1()).publicKey;if(yc.get(r))return yc.get(e.name);throw new Tc("Key not found")}a(xde,"getKey");function Bde(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}a(Bde,"getHostnamesFromCertificate")});var dK={};ye(dK,{BACK_PRESSURE_RATIO_POSITION:()=>cK,CONFIRMATION_STATUS_POSITION:()=>aK,LATENCY_POSITION:()=>MT,NodeReplicationConnection:()=>uf,OPERATION_REQUEST:()=>AO,RECEIVED_TIME_POSITION:()=>wO,RECEIVED_VERSION_POSITION:()=>IO,RECEIVING_STATUS_POSITION:()=>NO,RECEIVING_STATUS_RECEIVING:()=>uK,RECEIVING_STATUS_WAITING:()=>lK,SENDING_TIME_POSITION:()=>Dh,createWebSocket:()=>UT,databaseSubscriptions:()=>Ac,replicateOverWS:()=>vh,tableUpdateListeners:()=>PO});async function UT(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=nt(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!RO){let l=(0,nK.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),RO=u.secureContexts}if(i=RO.get(s),i&&le.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let o={};r&&(o.Authorization=r);let c={headers:o,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,iK.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&((lf?.caCount!==la.size||lf?.derivedFromContext!==i)&&(lf=sK.createSecureContext({...i.options,ca:[...la,...i.options.availableCAs.values()]}),lf.caCount=la.size,lf.derivedFromContext=i),c.secureContext=lf),new eK.WebSocket(e,"harperdb-replication-v1",c)}function vh(e,t,r){let n=t.port||t.securePort,s=OO.pid%1e3+"-"+tK.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);le.debug?.(s,"Initializing replication connection",r);let i=0,o=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(o.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||Ac,f,m,p=!1,h=t.subscription;h?.then&&h.then(A=>{h=A,h.auditStore&&(f=h.auditStore)});let E=t.tables||u&<()[u],_,R=new Map,S=[];_=r.name,_&&t.connection&&(t.connection.nodeName=_);let y,w,I,H,X,q,k,z=6e4,Y,ce=0,de=0,te=0,Se=Z1.default.get(x.REPLICATION_BLOBTIMEOUT)??12e4,Ne=new Map,Ke=[],$e=0,Ir;if(t.url){let A=a(()=>{X&&de===e._socket?.bytesRead&&te===e._socket?.bytesWritten?e.terminate():(X=performance.now(),e.ping(),de=e._socket?.bytesRead,te=e._socket?.bytesWritten)},"sendPing");I=setInterval(A,Q1).unref(),A()}else nr();e._socket?.setMaxListeners(200);function nr(){clearTimeout(H),de=e._socket?.bytesRead,te=e._socket?.bytesWritten,H=setTimeout(()=>{de===e._socket?.bytesRead&&te===e._socket?.bytesWritten&&(le.warn?.(`Timeout waiting for ping from ${_}, terminating connection and reconnecting`),e.terminate())},Q1*2).unref()}a(nr,"resetPingTimer");let zr=0,xr=0,Du=!1,Qc=3e4;function Bt(){if(pn?.length>0){let A=performance.now(),U=A-xr;zr=(zr*Qc+(Du?U:0))/(Qc+U),m&&(m[cK]=zr),xr=A}}a(Bt,"updateBackPressureRatio"),setInterval(Bt,Qc).unref();function si(){if(!(!_||!u))return m||(m=tf(f,u,_)),m}a(si,"getSharedStatus"),u&&Xc(u);let qa,u_,um=[],d_=[],dm,ve=[],f_=[],Vb=[],vu=150,qi=25,Ps=0,fm=0,mm=!1,Bo,Dn,pn,Br;e.on("message",Mu);async function Mu(A){if(r=await r,!r){le.error?.(s,"No authorization provided"),Fr(1008,"Unauthorized");return}pm(A),e.off("message",Mu),e.on("message",pm)}a(Mu,"onWSMessageWhenAuthorized");function pm(A){ce=performance.now();try{let U=A.dataView=new fl(A.buffer,A.byteOffset,A.byteLength);if(A[0]>127){let W=(0,at.decode)(A),[J,F,he]=W;switch(J){case $1:{if(F){if(_){if(_!==F){le.error?.(s,`Node name mismatch, expecting to connect to ${_}, but peer reported name as ${F}, disconnecting`),e.send((0,at.encode)([Lh])),Fr(1008,"Node name mismatch");return}}else if(_=F,t.connection?.tentativeNode){let me=t.connection.tentativeNode;me.name=_,t.connection.tentativeNode=null,oa(_,me)}if(t.connection&&(t.connection.nodeName=_),le.debug?.(s,"received node name:",_,"db:",u??W[2]),!u)try{Xc(u=W[2]),u==="system"&&(qa=gc(t,(me,ie)=>{Ka(ie)&&K(ie)}),e.on("close",()=>{qa?.remove()}))}catch(me){le.warn?.(s,"Error setting database",me),e.send((0,at.encode)([Lh])),Fr(1008,me.message);return}hm()}break}case z1:{le.debug?.(s,"Received table definitions for",F.map(me=>me.table));for(let me of F){let ie=W[2];me.database=ie;let Ce;if(Ka(ie)){if(u==="system")Me[ie]?.[me.table]||(Ce=v(me,Me[ie]?.[me.table]));else{if(ie!=="data"&&!Me[ie]){le.warn?.("Database not found",ie);return}Ce=v(me,Me[ie]?.[me.table])}f||(f=Ce?.auditStore),E||(E=lt()?.[ie])}}break}case Lh:Fr();break;case AO:try{let me=r?.replicates||r?.subscribers||r?.name;le.debug?.("Received operation request",F,"from",_),server.operation(F,{user:r},!me).then(ie=>{le.debug?.("Requested request from finished",_,ie),Array.isArray(ie)&&(ie={results:ie}),ie.requestId=F.requestId,e.send((0,at.encode)([LT,ie]))},ie=>{le.debug?.("Failed requested operation from",_,ie),e.send((0,at.encode)([LT,{requestId:F.requestId,error:TO(ie)}]))})}catch(me){e.send((0,at.encode)([LT,{requestId:F.requestId,error:TO(me)}]))}break;case LT:let{resolve:ue,reject:_e}=R.get(F.requestId);le.debug?.("Received completed operation request",_,F),F.error?_e(new Error(F.error)):ue(F),R.delete(F.requestId);break;case yO:let re=W[3];if(!E){u?le.error?.(s,"No database found for",u):le.error?.(s,"Database name never received"),Fr();return}let oe=E[re];oe=v({table:re,database:u,attributes:F.attributes,schemaDefined:F.schemaDefined},oe),um[he]={name:re,decoder:new at.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:F.typedStructs,structures:F.structures}),getEntry(me){return oe.primaryStore.getEntry(me)},rootStore:oe.primaryStore.rootStore};break;case V1:Br=f?a1(F,f):new Map,dm=W[2],le.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${dm}`);break;case K1:let ge=he;Vb[ge]=F;break;case j1:si()[aK]=F,le.trace?.(s,"received and broadcasting committed update",F),si().buffer.notify();break;case W1:y=F,h.send({type:"end_txn",localTime:y,remoteNodeIds:S});break;case DT:{let me=W[1],{fileId:ie,size:Ce,finished:Be,error:He}=me,Te=Ne.get(ie);le.debug?.("Received blob",ie,"has stream",!!Te,"connectedToBlob",!!Te?.connectedToBlob,"length",W[2].length,"finished",Be),Te||(Te=new bO.PassThrough,Te.expectedSize=Ce,Ne.set(ie,Te)),Te.lastChunk=Date.now();let pt=W[2];We(pt.byteLength,"bytes-received",`${_}.${u}`,"replication","blob");try{Be?(He?(Te.on("error",()=>{}),Te.destroy(new Error("Blob error: "+He+" for record "+(Te.recordId??"unknown")+" from "+_))):Te.end(pt),Te.connectedToBlob&&Ne.delete(ie)):Te.write(pt)}catch(Nt){le.error?.(`Error receiving blob for ${Te.recordId} from ${_} and streaming to storage`,Nt),Ne.delete(ie)}break}case Y1:{let me=F,ie;try{let Ce=W[3],Be=d_[he]||(d_[he]=E[W[4]]);if(!Be)return le.warn?.("Unknown table id trying to handle record request",he);let He=Be.primaryStore.getBinaryFast(Symbol.for("structures")),Te=He?.length??0;if(Te>0&&Te!==fm){fm=Te;let Nt=(0,at.decode)(He);e.send((0,at.encode)([yO,{typedStructs:Nt.typed,structures:Nt.named},he,Be.tableName]))}let pt=Be.primaryStore.getBinaryFast(Ce);if(pt){let Nt=Be.primaryStore.decoder.decode(pt,{valueAsBuffer:!0}),Ft=ut||{};Ft.version=(0,oK.getLastVersion)(),ut&&ut[Zu]&Zr&&(Nt=Buffer.from(Nt),zm(()=>Be.primaryStore.decoder.decode(pt),p_=>$a(p_,Ce),Be.primaryStore.rootStore)),ie=(0,at.encode)([PT,me,{value:Nt,expiresAt:Ft.expiresAt,version:Ft.version,residencyId:Ft.residencyId,nodeId:Ft.nodeId,user:Ft.user}])}else ie=(0,at.encode)([PT,me])}catch(Ce){ie=(0,at.encode)([PT,me,{error:Ce.message}])}e.send(ie);break}case PT:{let{resolve:me,reject:ie,tableId:Ce,key:Be}=R.get(W[1]),He=W[2];if(He?.error)ie(new Error(He.error));else if(He){let Te;sg(()=>{let pt=um[Ce].decoder.decode(He.value);He.value=pt,He.key=Be,me(He)||Te&&setTimeout(()=>Te.forEach(tg),6e4).unref()},f?.rootStore,pt=>{let Nt=Va(pt,Be);return Te||(Te=[]),Te.push(Nt),Nt})}else me();R.delete(W[1]);break}case q1:{pn=F;let me,ie,Ce=!1;if(h){if(u!==h.databaseName&&!h.then){le.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(le.debug?.(s,"received subscription request for",u,"at",pn),!h){let De;h=new Promise(sr=>{le.debug?.("Waiting for subscription to database "+u),De=sr}),h.ready=De,Ac.set(u,h)}if(r.name)ie=Gt().subscribe(r.name),ie.then(async De=>{me=De;for await(let sr of me){let ht=sr.value;if(!(ht?.replicates===!0||ht?.replicates?.receives||ht?.subscriptions?.some(kr=>(kr.database||kr.schema)===u&&kr.publish!==!1))){Ce=!0,Fr(1008,`Unauthorized database subscription to ${u}`);return}}},De=>{le.error?.(s,"Error subscribing to HDB nodes",De)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,at.encode)([Lh])),Fr(1008,`Unauthorized database subscription to ${u}`);return}if(Dn&&(le.debug?.(s,"stopping previous subscription",u),Dn.emit("close")),pn.length===0)return;let Be=pn[0],He=a(De=>{if(De&&(Be.replicateByDefault?!Be.tables.includes(De.tableName):Be.tables.includes(De.tableName)))return{table:De}},"tableToTableEntry"),Te={txnTime:0},pt,Nt,Ft=1/0,p_,h_=a((De,sr)=>{if(De.type==="end_txn"){Te.txnTime&&(o[i]!==66&&le.error?.("Invalid encoding of message"),C(9),C(hg),O(p_=sr),nU()),i=c,Te.txnTime=0;return}let ht=De.nodeId,kr=De.tableId,Ct=Nt[kr];if(!Ct&&(Ct=Nt[kr]=He(h.tableById[kr]),!Ct))return le.debug?.("Not subscribed to table",kr);let Ls=Ct.table,zt=Ls.primaryStore,ii=zt.encoder;(De.extendedType&Ig||!ii.typedStructs)&&(ii._mergeStructures(ii.getStructures()),ii.typedStructs&&(ii.lastTypedStructuresLength=ii.typedStructs.length));let Bu=pt[ht];if(!(Bu&&Bu.startTime<sr&&(!Bu.endTime||Bu.endTime>sr)))return vT&&le.trace?.(s,"skipping replication update",De.recordId,"to:",_,"from:",ht,"subscribed:",pt),sU();vT&&le.trace?.(s,"sending replication update",De.recordId,"to:",_,"from:",ht,"subscribed:",pt);let Kb=De.version;Te.txnTime!==Kb&&(Te.txnTime&&(vT&&le.trace?.(s,"new txn time, sending queued txn",Te.txnTime),o[i]!==66&&le.error?.("Invalid encoding of message"),nU()),Te.txnTime=Kb,i=c,O(Kb));let Zc=De.residencyId,Yb=m_(Zc,Ls),E_;if(Yb&&!Yb.includes(_)){let $i=m_(De.previousResidencyId,Ls);if($i&&!$i.includes(_)&&(De.type==="put"||De.type==="patch")||Ls.getResidencyById)return sU();let el=De.recordId;le.trace?.(s,"sending invalidation",el,_,"from",ht);let Em=0;Zc&&(Em|=ml),De.previousResidencyId&&(Em|=pl);let zb,__=null;for(let iU in Ls.indices){if(!__){if(zb=De.getValue(zt,!0),!zb)break;__={}}__[iU]=zb[iU]}E_=hl(De.version,kr,el,null,ht,De.user,De.type==="put"||De.type==="patch"?"invalidate":De.type,ii.encode(__),Em,Zc,De.previousResidencyId,De.expiresAt)}function sU(){return le.trace?.(s,"skipping audit record",De.recordId),q||(q=setTimeout(()=>{q=null,(p_||0)+J1/2<Ft&&(vT&&le.trace?.(s,"sending skipped sequence update",Ft),e.send((0,at.encode)([W1,Ft])))},J1).unref()),new Promise(setImmediate)}a(sU,"skipAuditRecord");let Wb=ii.typedStructs,jb=ii.structures;if((Wb?.length!=Ct.typed_length||jb?.length!=Ct.structure_length)&&(Ct.typed_length=Wb?.length,Ct.structure_length=jb.length,le.debug?.(s,"send table struct",Ct.typed_length,Ct.structure_length),Ct.sentName||(Ct.sentName=!0),e.send((0,at.encode)([yO,{typedStructs:Wb,structures:jb,attributes:Ls.attributes,schemaDefined:Ls.schemaDefined},kr,Ct.table.tableName]))),Zc&&!f_[Zc]&&(e.send((0,at.encode)([K1,Yb,Zc])),f_[Zc]=!0),E_)C(E_.length),P(E_);else{let $i=De.encoded;De.extendedType&Zr&&zm(()=>De.getValue(zt),Em=>$a(Em,De.recordId),zt.rootStore);let el=$i[0]===66?8:0;C($i.length-el),P($i,el),le.trace?.("wrote record",De.recordId,"length:",$i.length)}if(e._socket.writableNeedDrain){let $i=performance.now();return Du=!0,Bt(),new Promise(el=>{le.debug?.(`Waiting for remote node ${_} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",()=>{el(),Du=!1,Bt()})})}else return $e>qi?new Promise($i=>{Ir=$i}):new Promise(setImmediate)},"sendAuditRecord"),nU=a(()=>{c-i>8?(e.send(o.subarray(i,c)),le.debug?.(s,"Sent message, size:",c-i),u!=="system"&&We(c-i,"bytes-sent",`${_}.${u}`,"replication","egress")):le.debug?.(s,"skipping empty transaction")},"sendQueuedData");Dn=new CO.EventEmitter,Dn.once("close",()=>{Ce=!0,me?.end()});for(let{startTime:De}of pn)De<Ft&&(Ft=De);(ie||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,Nt=h.tableById.map(He),pt=[];for(let{name:sr,startTime:ht,endTime:kr}of pn){let Ct=yT(sr,f);le.debug?.("subscription to",sr,"using local id",Ct,"starting",ht),pt[Ct]={startTime:ht,endTime:kr}}K(u),qa||(qa=Vl(sr=>{sr.databaseName===u&&K(u)}),u_=ih(sr=>{sr===u&&(e.send((0,at.encode)([Lh])),Fr())}),e.on("close",()=>{qa?.remove(),u_?.remove()})),e.send((0,at.encode)([V1,Rh(h.auditStore),pn.map(({name:sr})=>sr)]));let De=!0;do{isFinite(Ft)||(le.warn?.("Invalid sequence id "+Ft),Fr(1008,"Invalid sequence id"+Ft));let sr;if(De&&!Ce&&(De=!1,Ft===0)){le.info?.("Replicating all tables to",_);let ht=Date.now(),kr=xT(f);for(let Ct in E){if(!He(Ct))continue;let Ls=E[Ct];for(let zt of Ls.primaryStore.getRange({snapshot:!1,versions:!0})){if(Ce)return;le.trace?.(s,"Copying record from",u,Ct,zt.key,zt.localTime),ht=Math.max(zt.localTime??1,ht),sr=!0,si()[Dh]=1;let ii=hl(zt.version,Ls.tableId,zt.key,null,kr,null,"put",zm(()=>Ls.primaryStore.encoder.encode(zt.value),Bu=>$a(Bu,zt.key)),zt.metadataFlags&-256,zt.residencyId,null,zt.expiresAt);await h_({recordId:zt.key,tableId:Ls.tableId,type:"put",getValue(){return zt.value},encoded:ii,version:zt.version,residencyId:zt.residencyId,nodeId:kr,extendedType:zt.metadataFlags},zt.localTime)}}Te.txnTime||(Te.txnTime=ht,O(ht)),h_({type:"end_txn"},ht),si()[Dh]=0,Ft=ht}for(let{key:ht,value:kr}of f.getRange({start:Ft||1,exclusiveStart:!0,snapshot:!1})){if(Ce)return;let Ct=At(kr);le.debug?.("sending audit record",ht,Ct.recordId),si()[Dh]=ht,Ft=ht,await h_(Ct,ht),Dn.startTime=ht,sr=!0}sr&&h_({type:"end_txn"},Ft),si()[Dh]=0,await DB(f)}while(!Ce)}).catch(De=>{le.error?.(s,"Error handling subscription to node",De),Fr(1008,"Error handling subscription to node")});break}}return}U.position=8;let N=!0,L,$;do{si();let W=U.readInt();if(W===9&&U.getUint8(U.position)==hg){U.position++,y=$=U.readFloat64(),m[IO]=y,m[wO]=Date.now(),m[NO]=lK,h.send({type:"end_txn",localTime:y,remoteNodeIds:S}),le.trace?.("received remote sequence update",y,u);break}let J=U.position,F=At(A,J,J+W),he=um[F.tableId];he||le.error?.(`No table found with an id of ${F.tableId}`);let ue;F.residencyId&&(ue=Vb[F.residencyId],le.trace?.(s,"received residency list",ue,F.type,F.recordId));let _e=F.recordId;try{sg(()=>{L={table:he.name,id:F.recordId,type:F.type,nodeId:Br.get(F.nodeId),residencyList:ue,timestamp:F.version,value:F.getValue(he),user:F.user,beginTxn:N,expiresAt:F.expiresAt}},f?.rootStore,re=>Va(re,_e))}catch(re){throw re.message+=" record id: "+_e,re.message+=" typed structures for current decoder"+JSON.stringify(he.decoder.typedStructs),re.message+=" structures for current decoder"+JSON.stringify(he.decoder.structures),re}N=!1,le.debug?.(s,"received replication message",F.type,"id",L.id,"version",new Date(F.version),"nodeId",L.nodeId),m[IO]=F.version,m[wO]=Date.now(),m[NO]=uK,h.send(L),U.position=J+W}while(U.position<A.byteLength);Ps++,u!=="system"&&We(A.byteLength,"bytes-received",`${_}.${u}.${L?.table||"unknown_table"}`,"replication","ingest"),Ps>vu&&!mm&&(mm=!0,e.pause(),le.debug?.(`Commit backlog causing replication back-pressure, requesting that ${_} pause replication`)),h.send({type:"end_txn",localTime:y,remoteNodeIds:S,async onCommit(){if(L){let W=Date.now()-L.timestamp;u!=="system"&&We(W,"replication-latency",_+"."+u+"."+L.table,L.type,"ingest")}Ps--,mm&&(mm=!1,e.resume(),le.debug?.(`Replication resuming ${_}`)),Ke.length>0&&await Promise.all(Ke),le.trace?.("All blobs finished"),!w&&$&&(le.trace?.(s,"queuing confirmation of a commit at",$),setTimeout(()=>{e.send((0,at.encode)([j1,w])),le.trace?.(s,"sent confirmation of a commit at",w),w=null},kde)),w=$,le.debug?.("last sequence committed",new Date($),u)}})}catch(U){le.error?.(s,"Error handling incoming replication message",U)}}a(pm,"onWSMessage"),e.on("ping",nr),e.on("pong",()=>{if(t.connection){let A=performance.now()-X;t.connection.latency=A,si()&&(m[MT]=A),t.isSubscriptionConnection&&Ql({name:_,database:u,url:t.url,latency:A})}X=null}),e.on("close",(A,U)=>{clearInterval(I),clearTimeout(H),clearInterval(k),Dn&&Dn.emit("close"),Bo&&Bo.end();for(let[N,{reject:L}]of R)L(new Error(`Connection closed ${U?.toString()} ${A}`));le.debug?.(s,"closed",A,U?.toString())});function Fr(A,U){try{e.isFinished=!0,le.debug?.(s,"closing",_,u,A,U),e.close(A,U),t.connection?.emit("finished")}catch(N){le.error?.(s,"Error closing connection",N)}}a(Fr,"close");let Uu=new Set;async function $a(A,U){let N=rg(A);if(Uu.has(N)){le.debug?.("Blob already being sent",N);return}Uu.add(N);try{let L;$e++;for await(let $ of A.stream())L&&(le.debug?.("Sending blob chunk",N,"length",L.length),e.send((0,at.encode)([DT,{fileId:N,size:A.size},L]))),L=$,e._socket.writableNeedDrain&&(le.debug?.("draining",N),await new Promise(W=>e._socket.once("drain",W)),le.debug?.("drained",N)),We($.length,"bytes-sent",`${_}.${u}`,"replication","blob");le.debug?.("Sending final blob chunk",N,"length",L.length),e.send((0,at.encode)([DT,{fileId:N,size:A.size,finished:!0},L]))}catch(L){le.warn?.("Error sending blob",L,"blob id",N,"for record",U),e.send((0,at.encode)([DT,{fileId:N,finished:!0,error:TO(L)},Buffer.alloc(0)]))}finally{Uu.delete(N),$e--,$e<qi&&Ir?.()}}a($a,"sendBlobs");function Va(A,U){let N=rg(A),L=Ne.get(N);le.debug?.("Received transaction with blob",N,"has stream",!!L,"ended",!!L?.writableEnded),L?L.writableEnded&&Ne.delete(N):(L=new bO.PassThrough,Ne.set(N,L)),L.connectedToBlob=!0,L.lastChunk=Date.now(),L.recordId=U,A.size===void 0&&L.expectedSize&&(A.size=L.expectedSize);let $=L.blob??createBlob(L,A);L.blob=$;let W=Wo(()=>jm($).saving,h.auditStore?.rootStore);return W&&(W.blobId=N,Ke.push(W),W.finally(()=>{le.debug?.(`Finished receiving blob stream ${N}`),Ke.splice(Ke.indexOf(W),1)})),$}a(Va,"receiveBlobs");function hm(){if(p||(p=!0,t.connection?.on("subscriptions-updated",hm)),!f&&h&&(f=h.auditStore),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let A=new Map;f||(f=h?.auditStore);try{for(let L of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let $ of L.value.nodes||[])$.lastTxnTime>(A.get($.id)??0)&&A.set($.id,$.lastTxnTime)}catch(L){if(!L.message.includes("Can not re"))throw L}let U=t.connection?.nodeSubscriptions?.[0];S=[];let N=t.connection?.nodeSubscriptions.map((L,$)=>{let W=[],{replicateByDefault:J}=L;if(L.subscriptions){for(let _e of L.subscriptions)if(_e.subscribe&&(_e.schema||_e.database)===u){let re=_e.table;E?.[re]?.replicate!==!1&&W.push(re)}J=!1}else for(let _e in E)(J?E[_e].replicate===!1:E[_e].replicate)&&W.push(_e);let F=f&&yT(L.name,f),he=h?.dbisDB?.get([Symbol.for("seq"),F])??1,ue=Math.max(he?.seqId??1,(typeof L.startTime=="string"?new Date(L.startTime).getTime():L.startTime)??1);if(le.debug?.("Starting time recorded in db",L.name,F,u,he?.seqId,"start time:",ue,new Date(ue)),U!==L){let _e=f&&yT(U.name,f),re=h?.dbisDB?.get([Symbol.for("seq"),_e])??1;for(let oe of re?.nodes||[])oe.name===L.name&&(ue=oe.seqId,le.debug?.("Using sequence id from proxy node",U.name,ue))}return F===void 0?le.warn("Starting subscription request from node",L,"but no node id found"):S.push(F),A.get(F)>ue&&(ue=A.get(F),le.debug?.("Updating start time from more recent txn recorded",U.name,ue)),ue===1&&(L.isLeader?(le.warn?.(`Requesting full copy of database ${u} from ${L.url}`),ue=0):ue=Date.now()-6e4),le.trace?.(s,"defining subscription request",L.name,u,new Date(ue)),{name:L.name,replicateByDefault:J,tables:W,startTime:ue,isLeader:L.isLeader,endTime:L.endTime}});if(N)if(le.debug?.(s,"sending subscription request",N,h?.dbisDB?.path),clearTimeout(Y),N.length>0)e.send((0,at.encode)([q1,N]));else{let L=a(()=>{let $=performance.now();Y=setTimeout(()=>{ce<=$?Fr(1008,"Connection has no subscriptions and is no longer used"):L()},z).unref()},"scheduleClose");L()}}a(hm,"sendSubscriptionRequestUpdate");function m_(A,U){if(!A)return;let N=ve[A];return N||(N=U.getResidencyRecord(A),ve[A]=N),N}a(m_,"getResidence");function Ka(A){return!(bc&&bc!="*"&&!bc[A]&&!bc.includes?.(A)&&!bc.some?.(U=>U.name===A))}a(Ka,"checkDatabaseAccess");function Xc(A){if(h=h||d.get(A),!Ka(A))throw new Error(`Access to database "${A}" is not permitted`);h||le.warn?.(`No database named "${A}" was declared and registered`),f=h?.auditStore,E||(E=lt()?.[A]);let U=nt();if(U===_)throw U?new Error("Should not connect to self",U):new Error("Node name not defined");return xu(U,A),!0}a(Xc,"setDatabase");function xu(A,U){let N=lt()?.[U],L=[];for(let $ in N){let W=N[$];L.push({table:$,schemaDefined:W.schemaDefined,attributes:W.attributes.map(J=>({name:J.name,type:J.type,isPrimaryKey:J.isPrimaryKey}))})}le.trace?.("Sending database info for node",A,"database name",U),e.send((0,at.encode)([$1,A,U,L]))}a(xu,"sendNodeDBName");function K(A){let U=lt()?.[A],N=[];for(let L in U){if(pn&&!pn.some(W=>W.replicateByDefault?!W.tables.includes(L):W.tables.includes(L)))continue;let $=U[L];N.push({table:L,schemaDefined:$.schemaDefined,attributes:$.attributes.map(W=>({name:W.name,type:W.type,isPrimaryKey:W.isPrimaryKey}))})}e.send((0,at.encode)([z1,N,A]))}a(K,"sendDBSchema"),k=setInterval(()=>{for(let[A,U]of Ne)U.lastChunk+Se<Date.now()&&(le.warn?.(`Timeout waiting for blob stream to finish ${A} for record ${U.recordId??"unknown"} from ${_}`),Ne.delete(A),U.end())},Se).unref();let g=1,T=[];return{end(){Bo&&Bo.end(),Dn&&Dn.emit("close")},getRecord(A){let U=g++;return new Promise((N,L)=>{let $=[Y1,U,A.table.tableId,A.id];T[A.table.tableId]||($.push(A.table.tableName),T[A.table.tableId]=!0),e.send((0,at.encode)($)),ce=performance.now(),R.set(U,{tableId:A.table.tableId,key:A.id,resolve(W){let{table:J,entry:F}=A;if(N(W),W)return J._recordRelocate(F,W)},reject:L})})},sendOperation(A){let U=g++;return A.requestId=U,e.send((0,at.encode)([AO,A])),new Promise((N,L)=>{R.set(U,{resolve:N,reject:L})})}};function C(A){B(5),A<128?o[c++]=A:A<16384?(l.setUint16(c,A|32768),c+=2):A<1056964608?(l.setUint32(c,A|3221225472),c+=4):(o[c]=255,l.setUint32(c+1,A),c+=5)}function P(A,U=0,N=A.length){let L=N-U;B(L),A.copy(o,c,U,N),c+=L}function O(A){B(8),l.setFloat64(c,A),c+=8}function B(A){if(A+16>o.length-c){let U=Buffer.allocUnsafeSlow(c+A-i+65536>>10<<11);o.copy(U,0,i,c),c=c-i,i=0,o=U,l=new DataView(o.buffer,0,o.length)}}function v(A,U){let N=A.database??"data";U||(U={});let L=U.schemaDefined,$=!1,W=A.schemaDefined,J=U.attributes||[];for(let F=0;F<A.attributes?.length;F++){let he=A.attributes[F],ue=J.find(_e=>_e.name===he.name);(!ue||ue.type!==he.type)&&(L?le.error?.(`Schema for '${u}.${A.table}' is defined locally, but attribute '${he.name}: ${he.type}' from '${_}' does not match local attribute ${ue?"'"+ue.name+": "+ue.type+"'":"which does not exist"}`):($=!0,W||(he.indexed=!0),ue?J[J.indexOf(ue)]=he:J.push(he)))}return $?(le.debug?.("(Re)creating",A),ze({table:A.table,database:A.database,schemaDefined:A.schemaDefined,attributes:J,...U})):U}}var Z1,at,eK,tK,rK,CO,nK,sK,OO,iK,bO,oK,Fde,TO,le,q1,$1,V1,Lh,K1,yO,Y1,PT,AO,LT,W1,j1,z1,DT,aK,IO,wO,Dh,MT,NO,cK,lK,uK,PO,Ac,vT,J1,kde,Q1,RO,lf,X1,uf,LO=se(()=>{Oe();Ki();oO();MI();gs();Z1=b(fe());G();El();at=require("msgpackr"),eK=require("ws"),tK=require("worker_threads"),rK=b(Q());Ch();CO=require("events"),nK=b(Ts()),sK=b(require("node:tls"));nf();OO=b(require("node:process")),iK=require("node:net");os();is();bO=require("node:stream"),oK=require("lmdb"),{forComponent:Fde,errorToString:TO}=rK.default,le=Fde("replication").conditional,q1=129,$1=140,V1=141,Lh=142,K1=130,yO=132,Y1=133,PT=134,AO=136,LT=137,W1=143,j1=144,z1=145,DT=146,aK=0,IO=1,wO=2,Dh=3,MT=4,NO=5,cK=6,lK=0,uK=1,PO=new Map,Ac=new Map,vT=!0,J1=300,kde=2,Q1=3e4;a(UT,"createWebSocket");X1=500,uf=class extends CO.EventEmitter{static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=X1;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??Ri(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await UT(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;le.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${OO.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),le[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=X1,this.nodeSubscriptions&&Ql({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=vh(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(le.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),n.isHandled=!0):n.code!=="ECONNREFUSED"&&(n.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?le.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):le.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&of({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();le.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};a(vh,"replicateOverWS")});function Ic(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 mK(e){let t=[],r=e;for(;r?.raw;){let n={cert:r.raw};if(r.issuerCertificate&&r.issuerCertificate!==r&&r.issuerCertificate.raw&&(n.issuer=r.issuerCertificate.raw),t.push(n),r.issuerCertificate&&r.issuerCertificate!==r)r=r.issuerCertificate;else break}return t}function MO(e){try{let t=eu(e),n=Eo.Certificate.fromBER(t).extensions?.find(c=>c.extnID==="2.5.29.31");if(!n)return ua.debug?.("Certificate has no CRL Distribution Points extension"),[];let s=da.fromBER(n.extnValue.valueBlock.valueHexView);if(s.offset===-1)throw new Error("Failed to parse ASN.1 structure in CRL Distribution Points extension");let i=new Eo.CRLDistributionPoints({schema:s.result}),o=[];for(let c of i.distributionPoints)if(c.distributionPoint&&Array.isArray(c.distributionPoint)){for(let l of c.distributionPoint)if(l.type===6&&typeof l.value=="string"){let u=l.value;(u.startsWith("http://")||u.startsWith("https://"))&&o.push(u)}}return ua.debug?.(`Found ${o.length} CRL distribution points: ${o}`),o}catch(t){return ua.warn?.(`Failed to extract CRL distribution points: ${t}`),[]}}function pK(e){try{let t=eu(e),r=Eo.Certificate.fromBER(t),n=[],s=[];for(let i of r.extensions||[])if(i.extnID==="2.5.29.31")try{let o=da.fromBER(i.extnValue.valueBlock.valueHexView);if(o.offset!==-1){let c=new Eo.CRLDistributionPoints({schema:o.result});for(let l of c.distributionPoints)if(l.distributionPoint&&Array.isArray(l.distributionPoint)){for(let u of l.distributionPoint)if(u.type===6&&typeof u.value=="string"){let d=u.value;(d.startsWith("http://")||d.startsWith("https://"))&&n.push(d)}}}}catch(o){ua.warn?.(`Failed to parse CRL Distribution Points extension: ${o}`)}else if(i.extnID==="1.3.6.1.5.5.7.1.1")try{let o=da.fromBER(i.extnValue.valueBlock.valueHexView);if(o.offset!==-1&&o.result instanceof da.Sequence){for(let c of o.result.valueBlock.value)if(c instanceof da.Sequence&&c.valueBlock.value.length>=2){let l=c.valueBlock.value[0],u=c.valueBlock.value[1];if(l instanceof da.ObjectIdentifier&&l.valueBlock.toString()==="1.3.6.1.5.5.7.48.1"&&u.idBlock.tagNumber===6){let d=String.fromCharCode(...Array.from(u.valueBlock.valueHexView));(d.startsWith("http://")||d.startsWith("https://"))&&s.push(d)}}}}catch(o){ua.warn?.(`Failed to parse Authority Information Access extension: ${o}`)}return ua.debug?.(`Found ${n.length} CRL distribution points and ${s.length} OCSP responder URLs`),{crlUrls:n,ocspUrls:s}}catch(t){return ua.warn?.(`Failed to extract revocation URLs: ${t}`),{crlUrls:[],ocspUrls:[]}}}function eu(e){let t=e.replace(/-----BEGIN [^-]+-----/g,"").replace(/-----END [^-]+-----/g,"").replace(/\s/g,""),r=atob(t),n=new ArrayBuffer(r.length),s=new Uint8Array(n);for(let i=0;i<r.length;i++)s[i]=r.charCodeAt(i);return n}function BT(e,t,r,n){let s={certPem:e,issuerPem:t,method:r,...n},i=(0,vO.createHash)("sha256").update(JSON.stringify(s)).digest("hex");return`${r}:${i}`}function UO(e,t){return`${e}:${t}`}function hK(e){try{let t=eu(e),n=Eo.Certificate.fromBER(t).serialNumber.valueBlock.valueHexView;return Array.from(n).map(s=>s.toString(16).padStart(2,"0")).join("")}catch(t){throw ua.error?.(`Failed to extract serial number: ${t}`),new Error(`Failed to extract certificate serial number: ${t.message}`)}}function xO(e){try{let t=eu(e),r=Eo.Certificate.fromBER(t),n=r.extensions?.find(i=>i.extnID==="2.5.29.35");if(n){let i=new Eo.AuthorityKeyIdentifier({schema:n.parsedValue});if(i.keyIdentifier){let o=i.keyIdentifier.valueBlock.valueHexView;return Array.from(o).map(c=>c.toString(16).padStart(2,"0")).join("")}}let s=r.issuer.typesAndValues.map(i=>`${i.type}=${i.value.valueBlock.value}`).join(",");return(0,vO.createHash)("sha256").update(s).digest("hex")}catch(t){throw ua.error?.(`Failed to extract issuer key ID: ${t}`),new Error(`Failed to extract issuer key ID: ${t.message}`)}}function FT(){return DO||(DO=ze({table:"hdb_certificate_cache",database:"system",attributes:[{name:"certificate_id",isPrimaryKey:!0},{name:"status"},{name:"reason"},{name:"checked_at"},{name:"expiresAt",expiresAt:!0,indexed:!0},{name:"method"}]})),DO}var vO,Eo,da,fK,ua,DO,kT=se(()=>{vO=require("node:crypto"),Eo=b(require("pkijs")),da=b(require("asn1js")),fK=b(ir());Oe();ua=(0,fK.loggerWithTag)("cert-verification-utils");a(Ic,"bufferToPem");a(mK,"extractCertificateChain");a(MO,"extractCRLDistributionPoints");a(pK,"extractRevocationUrls");a(eu,"pemToBuffer");a(BT,"createCacheKey");a(UO,"createRevokedCertificateId");a(hK,"extractSerialNumber");a(xO,"extractIssuerKeyId");DO=null;a(FT,"getCertificateCacheTable")});function EK(e){let{error:t,value:r}=$de.validate(e,{abortEarly:!1,allowUnknown:!1});if(t){let n=t.details.map(s=>s.message).join("; ");throw new Error(`Invalid certificate verification configuration: ${n}`)}return r}var Yr,Hde,df,ff,BO,Gde,qde,$de,_K=se(()=>{Yr=b(require("joi")),Hde="fail-closed",df={timeout:5e3,cacheTtl:36e5,errorCacheTtl:3e5,failureMode:"fail-closed"},ff={timeout:1e4,cacheTtl:864e5,failureMode:"fail-closed",gracePeriod:864e5},BO=Yr.default.string().valid("fail-open","fail-closed"),Gde=Yr.default.alternatives().try(Yr.default.boolean().custom(e=>e===!1?{enabled:!1}:{enabled:!0,...ff}),Yr.default.object({enabled:Yr.default.boolean().default(!0),timeout:Yr.default.number().min(1e3).default(ff.timeout).messages({"number.min":"CRL timeout must be at least 1000ms (1 second)"}),cacheTtl:Yr.default.number().min(1e3).default(ff.cacheTtl).messages({"number.min":"CRL cacheTtl must be at least 1000ms (1 second)"}),failureMode:BO.default(ff.failureMode),gracePeriod:Yr.default.number().min(0).default(ff.gracePeriod).messages({"number.min":"CRL gracePeriod must be at least 0ms"})})),qde=Yr.default.alternatives().try(Yr.default.boolean().custom(e=>e===!1?{enabled:!1}:{enabled:!0,...df}),Yr.default.object({enabled:Yr.default.boolean().default(!0),timeout:Yr.default.number().min(1e3).default(df.timeout).messages({"number.min":"OCSP timeout must be at least 1000ms (1 second)"}),cacheTtl:Yr.default.number().min(1e3).default(df.cacheTtl).messages({"number.min":"OCSP cacheTtl must be at least 1000ms (1 second)"}),errorCacheTtl:Yr.default.number().min(1e3).default(df.errorCacheTtl).messages({"number.min":"OCSP errorCacheTtl must be at least 1000ms (1 second)"}),failureMode:BO.default(df.failureMode)})),$de=Yr.default.object({failureMode:BO.default(Hde),crl:Gde.default({enabled:!0,...ff}),ocsp:qde.default({enabled:!0,...df})});a(EK,"validateAndParseCertificateVerificationConfig")});function wK(e){if(typeof e=="boolean"||e==null){if(e===FO&&kO)return _o.trace?.("Using cached validation error result (primitive) - returning disabled"),!1;if(e===FO&&HT!==null)return _o.trace?.("Using cached certificate verification config (primitive)"),HT;_o.trace?.("Parsing and caching certificate verification config (primitive)"),FO=e;try{return HT=TK(e),kO=null,HT}catch(n){return kO=n,_o.error?.(`Certificate verification config validation failed - defaulting to disabled: ${n.message}`),!1}}if(SK.get(e))return _o.trace?.("Using cached validation error result (object) - returning disabled"),!1;let r=gK.get(e);if(r!==void 0)return _o.trace?.("Using cached certificate verification config (object)"),r;_o.trace?.("Parsing and caching certificate verification config (object)");try{let n=TK(e);return gK.set(e,n),n}catch(n){return SK.set(e,n),_o.error?.(`Certificate verification config validation failed - defaulting to disabled: ${n.message}`),!1}}function TK(e){if(_o.trace?.(`getCertificateVerificationConfig called with: ${JSON.stringify({mtlsConfig:e})}`),!e)return!1;let t=e===!0?void 0:e.certificateVerification;return _o.trace?.(`Certificate verification config: ${JSON.stringify({verificationConfig:t})}`),t==null||t===!1?!1:EK(t===!0?{}:t)}var yK,RK,_o,bK,AK,IK,gK,FO,HT,SK,kO,HO=se(()=>{yK=b(ir()),RK=b(yt());_K();_o=(0,yK.loggerWithTag)("cert-verification-config"),bK=10080*60*1e3,AK=3e5,IK=`Harper/${RK.packageJson.version} CRL-Client`,gK=new WeakMap,FO=null,HT=null,SK=new WeakMap,kO=null;a(wK,"getCachedCertificateVerificationConfig");a(TK,"getCertificateVerificationConfig")});function Mh(e){return e===CK||e===Vde}function Kde(e){return e===OK||e===PK}function GO(e){return e===CK?OK:PK}function Yde(){if(NK)return;NK=!0;let e=tu.CryptoEngine.prototype,t=tu.Certificate.prototype,r={getHashAlgorithm:e.getHashAlgorithm,getAlgorithmByOID:e.getAlgorithmByOID,getAlgorithmParameters:e.getAlgorithmParameters,verifyWithPublicKey:e.verifyWithPublicKey,certificateVerify:t.verify,getPublicKey:t.getPublicKey};e.getHashAlgorithm=function(...n){let[s]=n;return Mh(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return Mh(s)?{name:GO(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return Kde(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=tu.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(Mh(i)){let o=GO(i);return s.importKey("spki",this.subjectPublicKeyInfo.toSchema().toBER(!1),o,!0,["verify"])}return r.getPublicKey.call(this,...n)},t.verify=async function(...n){let[s]=n;if(Mh(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),o=s.toSchema().toBER(!1),c=new Uh.X509Certificate(Buffer.from(i)),l=new Uh.X509Certificate(Buffer.from(o));return c.verify(l.publicKey)}catch{return!1}return r.certificateVerify.call(this,...n)},r.verifyWithPublicKey&&(e.verifyWithPublicKey=async function(...n){let[s,i,o]=n,c=o.algorithm.algorithmId;if(Mh(c)){let l=GO(c);try{let u=this.crypto?.subtle||this.subtle||tu.getCrypto(!0)?.subtle||Uh.webcrypto?.subtle;if(!u)throw new Error("No crypto.subtle available");let d=await u.importKey("spki",o.toSchema().toBER(!1),l,!1,["verify"]),f=i.valueBlock.valueHexView;return"unusedBits"in i.valueBlock&&i.valueBlock.unusedBits>0&&(f=f.slice(0,f.length-1)),await u.verify(l,d,f,s)}catch{return!1}}return r.verifyWithPublicKey.call(this,...n)})}var tu,Uh,CK,Vde,OK,PK,NK,LK=se(()=>{tu=b(require("pkijs")),Uh=require("node:crypto"),CK="1.3.101.112",Vde="1.3.101.113",OK="Ed25519",PK="Ed448",NK=!1;a(Mh,"isEd25519OrEd448");a(Kde,"isEdDSAAlgorithmName");a(GO,"getEdDSAAlgorithmName");a(Yde,"applyEd25519Patch");Yde()});var UK={};ye(UK,{CRLSignatureVerificationError:()=>xh,performCRLCheck:()=>zde,verifyCRL:()=>VO});function Wde(){return GT||(GT=FT(),GT.sourcedFrom(mf)),GT}function jde(){return qT||(qT=ze({table:"hdb_crl_cache",database:"system",attributes:[{name:"distribution_point",isPrimaryKey:!0},{name:"issuer_dn"},{name:"crl_blob"},{name:"this_update"},{name:"next_update"},{name:"signature_valid"},{name:"expiresAt",expiresAt:!0,indexed:!0}]}),qT.sourcedFrom($O)),qT}function vK(){return qO||(qO=ze({table:"hdb_revoked_certificates",database:"system",attributes:[{name:"composite_id",isPrimaryKey:!0},{name:"serial_number",indexed:!0},{name:"issuer_key_id",indexed:!0},{name:"revocation_date"},{name:"revocation_reason"},{name:"crl_source",indexed:!0},{name:"crl_next_update"},{name:"expiresAt",expiresAt:!0,indexed:!0}]})),qO}async function VO(e,t,r,n){if(r?.enabled===!1)return{valid:!0,status:"disabled",method:"disabled"};try{let s=Ic(e,"CERTIFICATE"),i=Ic(t,"CERTIFICATE"),o=n??MO(s);if(o.length===0)return{valid:!0,status:"no-crl-distribution-points",method:"crl"};let c=BT(s,i,"crl"),l=await Wde().get(c,{certPem:s,issuerPem:i,distributionPoint:o[0],config:{crl:r??{}}});if(!l)return Or.error?.("Cache fetch returned null - this indicates a source configuration issue"),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"crl"}:(Or.warn?.("CRL cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"crl"});let u=l,d=l.wasLoadedFromSource?.();return Or.trace?.(`CRL ${d?"source fetch":"cache hit"} for certificate`),{valid:u.status==="good",status:u.status,cached:!d,method:u.method||"crl"}}catch(s){return Or.error?.(`CRL verification error: ${s}`),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:s.message,method:"crl"}:(Or.warn?.("CRL check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"crl"})}}async function zde(e,t,r,n){let s=n??MO(e);if(s.length===0)return{status:"good"};let i=hK(e),o=xO(t),c=UO(o,i);try{let u=await vK().get(c);if(u){let f=Date.now(),m=u;return m.crl_next_update>f?{status:"revoked",reason:m.revocation_reason||"unspecified",source:m.crl_source}:m.crl_next_update+r.gracePeriod>f?(Or.warn?.("Using expired CRL data within grace period"),{status:"revoked",reason:m.revocation_reason||"unspecified",source:m.crl_source}):(Or.warn?.("CRL data is too old, treating as unknown"),{status:"unknown",reason:"crl-expired"})}let d=await Jde(s,t,r);return d.upToDate?{status:"good",source:d.source}:(Or.warn?.("CRL data is stale or missing, treating as unknown"),{status:"unknown",reason:d.reason||"crl-unavailable"})}catch(l){return Or.error?.(`CRL lookup error: ${l}`),{status:"unknown",reason:l.message}}}async function Jde(e,t,r){let n=Date.now();for(let s of e)try{let i=jde(),o=null,c=null;try{c=await i.get(s),(c&&c.next_update>n||c&&c.next_update+r.gracePeriod>n)&&(o=c)}catch{}o||(o=await MK(s,t,r.timeout));let l=o.next_update;if(l>n){if(!c)try{await i.put(s,o)}catch{}return{upToDate:!0,source:s}}else return l+r.gracePeriod>n?{upToDate:!0,source:s}:{upToDate:!1,reason:"crl-expired"}}catch(i){if(i instanceof xh)throw i}return{upToDate:!1,reason:"no-current-crl-data"}}async function MK(e,t,r){let n=new AbortController,s=setTimeout(()=>n.abort(),r);try{let i=await fetch(e,{signal:n.signal,headers:{"User-Agent":IK}});if(clearTimeout(s),!i.ok)throw new Error(`CRL download failed: ${i.status}`);let o=Buffer.from(await i.arrayBuffer()),c,l=o.toString("utf8");l.includes("-----BEGIN X509 CRL-----")?c=Buffer.from(eu(l)):c=o;let u=$T.CertificateRevocationList.fromBER(c),d=$T.Certificate.fromBER(eu(t)),f=await u.verify({issuerCertificate:d});if(!f){let _=`CRL signature verification failed for: ${e}`;throw Or.error?.(_),new xh(_)}let m=u.thisUpdate.value.getTime(),p=u.nextUpdate?.value.getTime()??m+bK,h=d.issuer.typesAndValues.map(_=>`${_.type}=${_.value.valueBlock.value}`).join(","),E={distribution_point:e,issuer_dn:h,crl_blob:o,this_update:m,next_update:p,signature_valid:f,expiresAt:p};return Qde(u,t,e,p).catch(_=>{Or.error?.(`Error processing revoked certificates: ${_}`)}),E}finally{clearTimeout(s)}}async function Qde(e,t,r,n){let s=vK(),i=xO(t),o=r;try{await Xde(s,o)}catch(c){Or.warn?.(`Failed to clear existing CRL entries: ${c}`)}if(e.revokedCertificates)for(let c of e.revokedCertificates)try{let l=c.userCertificate.valueBlock.valueHexView;if(!l){Or.warn?.("Could not extract serial number from revoked certificate");continue}let u=Array.from(l).map(h=>h.toString(16).padStart(2,"0")).join(""),d=UO(i,u),f=c.revocationDate.value.getTime(),p={composite_id:d,serial_number:u,issuer_key_id:i,revocation_date:f,revocation_reason:"unspecified",crl_source:o,crl_next_update:n,expiresAt:n};await s.create(p.composite_id,p)}catch(l){Or.warn?.(`Failed to process revoked certificate: ${l}`)}}async function Xde(e,t){try{let r=e.search([{attribute:"crl_source",value:t}]);for await(let n of r)try{await e.delete(n.composite_id)}catch(s){Or.warn?.(`Failed to delete revoked certificate entry: ${s}`)}}catch(r){throw Or.error?.(`Failed to search for existing CRL entries: ${r}`),r}}var $T,DK,xh,Or,GT,$O,qT,qO,KO=se(()=>{$T=b(require("pkijs")),DK=b(ir());Oe();Qi();kT();HO();YO();xh=class extends Error{static{a(this,"CRLSignatureVerificationError")}constructor(t){super(t),this.name="CRLSignatureVerificationError"}},Or=(0,DK.loggerWithTag)("crl-verification");a(Wde,"getCertificateCacheTable");$O=class extends Xt{static{a(this,"CertificateRevocationListSource")}async get(t){let n=this.getContext()?.requestContext;if(!n?.distributionPoint||!n?.issuerPem)throw new Error(`No CRL data provided for cache key: ${t}`);let{distributionPoint:s,issuerPem:i,config:o}=n;try{let c=await MK(s,i,o.timeout),l=c.next_update,u=Date.now()+o.cacheTtl,d=Math.min(l,u);return{...c,expiresAt:d}}catch(c){if(Or.error?.(`CRL fetch error for: ${s} - ${c}`),o.failureMode==="fail-closed"){let l=Date.now()+AK;return{crl_id:t,distribution_point:s,issuer_dn:"unknown",crl_blob:Buffer.alloc(0),this_update:Date.now(),next_update:l,signature_valid:!1,expiresAt:l}}return Or.warn?.("CRL fetch failed, not caching (fail-open mode)"),null}}};a(jde,"getCRLCacheTable");a(vK,"getRevokedCertificateTable");a(VO,"verifyCRL");a(zde,"performCRLCheck");a(Jde,"checkCRLFreshness");a(MK,"downloadAndParseCRL");a(Qde,"processRevokedCertificates");a(Xde,"clearExistingCRLEntries")});async function Zde(){WO||(WO=(await Promise.resolve().then(()=>(KO(),UK))).performCRLCheck),jO||(jO=(await Promise.resolve().then(()=>(zO(),BK))).performOCSPCheck)}var xK,TBe,WO,jO,mf,YO=se(()=>{Qi();xK=b(ir()),TBe=(0,xK.loggerWithTag)("cert-verification-source");a(Zde,"loadVerificationFunctions");mf=class extends Xt{static{a(this,"CertificateVerificationSource")}async get(t){let r=t.id,s=this.getContext()?.requestContext;if(!s||!s.certPem||!s.issuerPem)return null;let{certPem:i,issuerPem:o,ocspUrls:c,config:l}=s,u;r.startsWith("crl:")?u="crl":r.startsWith("ocsp:")?u="ocsp":u="unknown",await Zde();let d,f;if(u==="crl"){f=l.crl;let p=s.distributionPoint?[s.distributionPoint]:void 0;d=await WO(i,o,f,p)}else if(u==="ocsp")f=l.ocsp,d=await jO(i,o,f,c);else throw new Error(`Unsupported verification method: ${u} for ID: ${r}`);let m=Date.now()+f.cacheTtl;return{certificate_id:r,status:d.status,reason:d.reason,checked_at:Date.now(),expiresAt:m,method:u}}}});var BK={};ye(BK,{performOCSPCheck:()=>tfe,verifyOCSP:()=>JO});function efe(){return KT||(KT=FT(),KT.sourcedFrom(mf)),KT}async function JO(e,t,r,n){if(r?.enabled===!1)return{valid:!0,status:"disabled",method:"disabled"};try{let s=Ic(e,"CERTIFICATE"),i=Ic(t,"CERTIFICATE"),o=BT(s,i,"ocsp"),c=await efe().get(o,{certPem:s,issuerPem:i,ocspUrls:n,config:{ocsp:r??{}}});if(!c)return r.failureMode==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"ocsp"}:(VT.warn?.("OCSP cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"});let l=c,u=c.wasLoadedFromSource?.();return VT.trace?.(`OCSP ${u?"source fetch":"cache hit"} for certificate`),{valid:l.status==="good",status:l.status,cached:!u,method:l.method||"ocsp"}}catch(s){return VT.error?.(`OCSP verification error: ${s}`),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:s.message,method:"ocsp"}:(VT.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"})}}async function tfe(e,t,r,n){try{let s=await(0,FK.getCertStatus)(e,{ca:t,timeout:r.timeout,...n?.length&&{ocspUrl:n[0]}});switch(s.status){case"good":return{status:"good"};case"revoked":return{status:"revoked",reason:s.revocationReason?.toString()||"unspecified"};default:return{status:"unknown",reason:"unknown-status"}}}catch(s){return{status:"unknown",reason:s.name==="AbortError"?"timeout":"ocsp-error"}}}var FK,kK,VT,KT,zO=se(()=>{LK();FK=require("easy-ocsp"),kK=b(ir());kT();YO();VT=(0,kK.loggerWithTag)("ocsp-verification");a(efe,"getCertificateCacheTable");a(JO,"verifyOCSP");a(tfe,"performOCSPCheck")});async function pf(e,t){cn.debug?.(`verifyCertificate called for: ${e.subject?.CN||"unknown"}`);let r=wK(t);if(r===!1)return cn.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=mK(e);if(cn.trace?.(`Certificate chain length: ${n.length}`),n.length<2||!n[0].issuer)return cn.debug?.("Certificate chain insufficient for revocation checking - need certificate and issuer"),{valid:!0,status:"no-issuer-cert",method:"disabled"};let s=Ic(n[0].cert,"CERTIFICATE"),{crlUrls:i,ocspUrls:o}=pK(s);if(cn.debug?.(`Certificate extensions: CRL distribution points=${i.length}, OCSP URLs=${o.length}`),i.length>0)if(r.crl.enabled)try{cn.debug?.("Attempting CRL verification");let c=await VO(n[0].cert,n[0].issuer,r.crl,i);if(c.status==="good"||c.status==="revoked")return cn.debug?.(`CRL verification result: ${c.status}`),c;cn.debug?.(`CRL verification inconclusive: ${c.status}, trying OCSP fallback`)}catch(c){cn.warn?.(`CRL verification failed: ${c}`)}else cn.debug?.("Skipping CRL - disabled in configuration");else cn.debug?.("Skipping CRL - no distribution points in certificate");if(o.length>0)if(r.ocsp.enabled)try{cn.debug?.("Attempting OCSP verification");let c=await JO(n[0].cert,n[0].issuer,r.ocsp,o);return cn.debug?.(`OCSP verification result: ${c.status}`),c}catch(c){cn.warn?.(`OCSP verification failed: ${c}`)}else cn.debug?.("Skipping OCSP - disabled in configuration");else cn.debug?.("Skipping OCSP - no responder URLs in certificate");return r.failureMode==="fail-closed"?{valid:!1,status:"no-verification-available",method:"disabled"}:{valid:!0,status:"verification-unavailable-allowed",method:"disabled"}}var HK,cn,YT=se(()=>{HK=b(ir());kT();HO();zO();KO();cn=(0,HK.loggerWithTag)("cert-verification");a(pf,"verifyCertificate")});var ca={};ye(ca,{buildReplicationMtlsConfig:()=>zK,clearThisNodeName:()=>ufe,disableReplication:()=>ife,enabledDatabases:()=>bc,forEachReplicatedDatabase:()=>gc,getThisNodeId:()=>xT,getThisNodeName:()=>nt,getThisNodeUrl:()=>Sc,hostnameToUrl:()=>QT,lastTimeInAuditStore:()=>bh,monitorNodeCAs:()=>JK,replicateOperation:()=>ffe,replicationCertificateAuthorities:()=>la,sendOperationToNode:()=>Bh,servers:()=>nfe,setReplicator:()=>XK,start:()=>sfe,startOnMainThread:()=>aO,subscribeToNode:()=>Nh,unsubscribeFromNode:()=>AT,urlToNodeName:()=>Ri});function zK(e){return e?.mtls&&typeof e.mtls=="object"?e.mtls:!0}function sfe(e){if(!e.port&&!e.securePort&&(e.port=Ks.default.get(x.OPERATIONSAPI_NETWORK_PORT),e.securePort=Ks.default.get(x.OPERATIONSAPI_NETWORK_SECUREPORT)),!nt())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let i of Ih(e))t.set(Ri(i.url),i);ofe(e);let r=zK(e);e={isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e,mtls:r};let n=Ue.ws(async(i,o,c,l)=>{if(It.debug("Incoming WS connection received "+o.url),o.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return l(i,o,c);i._socket.unref(),vh(i,e,c.then(()=>o?.user)),i.on("error",u=>{u.code!=="ECONNREFUSED"&&It.error("Error in connection to "+this.url,u.message)})},e);e.runFirst=!0,Ue.http(async(i,o)=>{if(i.isWebSocket&&i.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){It.debug("Incoming replication WS connection received, authorized: "+i.authorized),!i.authorized&&i._nodeRequest.socket.authorizationError&&It.error(`Incoming client connection from ${i.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,i._nodeRequest.socket.authorizationError);let c=Gt().primaryStore;if(i.authorized&&i.peerCertificate.subjectaltname){let l=(0,WK.getHostnamesFromCertificate)(i.peerCertificate),u;for(let d of l)if(u=d&&(c.get(d)||t.get(d)),u)break;if(u){let d=await pf(i.peerCertificate,e.mtls);if(!d.valid){It.warn("Certificate verification failed:",d.status,"for node",u.name,"certificate serial number",i.peerCertificate.serialNumber);return}if(u?.revoked_certificates?.includes(i.peerCertificate.serialNumber)){It.warn("Revoked certificate used in attempt to connect to node",u.name,"certificate serial number",i.peerCertificate.serialNumber);return}else i.user=u}else It.warn(`No node found for certificate common name/SANs: ${l}, available nodes are ${Array.from(c.getRange({}).filter(({value:d})=>d).map(({key:d})=>d)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let l=c.get(i.ip)||t.get(i.ip);l?i.user=l:It.warn(`No node found for IP address ${i.ip}, available nodes are ${Array.from(new Set([...c.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return o(i)},e);let s=[];for(let i of n)if(i.secureContexts){let o=a(()=>{let c=new Set(i.secureContexts.values());i.defaultContext&&c.add(i.defaultContext);for(let l of c)try{let u=Array.from(la);l.options.availableCAs&&u.push(...l.options.availableCAs.values());let d={...l.options,ca:u};l.updatedContext=JT.createSecureContext(d)}catch(u){It.error("Error creating replication TLS config",u)}},"updateContexts");i.secureContextsListeners.push(o),s.push(o),Ks.default.get(x.REPLICATION_ENABLEROOTCAS)!==!1&&o()}JK(()=>{for(let i of s)i()})}function JK(e){let t=0;rf(r=>{r?.ca&&(la.add(r.ca),la.size!==t&&(t=la.size,e?.()))})}function ife(e=!0){jK=e}function ofe(e){jK||(lt(),bc=e.databases,gc(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||Ac;for(let[s,i]of jT){let o=i.get(r);o&&(o.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];XK(r,s,e),PO.get(s)?.forEach(i=>i(s))}}))}function XK(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 QK extends Xt{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||Ac,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(It.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new ss,i.set(e,o),o.tableById=c,o.auditStore=t.auditStore,o.dbisDB=t.dbisDB,o.databaseName=e,l&&l(o),o;this.subscription=o}static subscribeOnThisThread(i,o){return!0}static async load(i){if(i){let o=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),o]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let h of c){if(u.has(h)||h===Ue.hostname)continue;let E=cfe(h,QK.subscription,e);if(E?.isConnected){let _=tf(t.auditStore,e,h)[MT];(!d||_<m)&&(d=E,f=h,m=_)}}if(!d)throw l||new KK.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:rfe++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;It.warn("Error in load from node",zT,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function afe(e,t,r,n,s,i){let o=t+"-"+e,c=jT.get(o);c||(c=new Map,jT.set(o,c));let l=c.get(n);if(l)return l;if(r)return c.set(n,l=new uf(t,r,n,s,i)),l.connect(),l.once("finished",()=>c.delete(n)),l}function cfe(e,t,r){let n=GK.get(e);n||(n=new Map,GK.set(e,n));let s=n.get(r);if(s)return s;let i=Gt().primaryStore.get(e);return i?.url&&(s=new uf(i.url,t,r,e,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function Bh(e,t,r){r||(r={}),r.serverName=e.name;let n=await UT(e.url,r),s=vh(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{It.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{It.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function Nh(e){try{YK.isMainThread&&It.warn("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=Ac.get(e.database);if(!t){let n;t=new Promise(s=>{It.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,Ac.set(e.database,t)}let r=afe(e.nodes[0].url,e.url,t,e.database,e.name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>Ah(n,e.database)),e.replicateByDefault)}catch(t){It.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function AT({url:e,nodes:t,database:r}){It.trace("Unsubscribing from node",e,r,"nodes",Array.from(Gt().primaryStore.getRange({})));let n=e+"-"+(t[0]?.url??e),s=jT.get(n);if(s){let i=s.get(r);i&&(i.unsubscribe(),s.delete(r))}}function lfe(){if(QO!==void 0)return QO;let e=Ks.default.get(x.OPERATIONSAPI_TLS_CERTIFICATE)||Ks.default.get(x.TLS_CERTIFICATE);if(e)return QO=new $K.X509Certificate((0,VK.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function nt(){return zT||(zT=Ks.default.get("replication_hostname")??Ri(Ks.default.get("replication_url"))??lfe()??qK("operationsapi_network_secureport")??qK("operationsapi_network_port")??"127.0.0.1")}function ufe(){zT=void 0}function qK(e){let t=Ks.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function WT(e){let t=Ks.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function xT(e){return Rh(e)?.[nt()]}function Sc(){let e=Ks.default.get("replication_url");return e||QT(nt())}function QT(e){let t=WT("replication_port");if(t)return`ws://${e}:${t}`;if(t=WT("replication_secureport"),t)return`wss://${e}:${t}`;if(t=WT("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=WT("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Ri(e){if(e)return new URL(e).hostname}function gc(e,t){for(let n of Object.getOwnPropertyNames(Me))r(n);return ih(n=>{r(n)}),Vl((n,s)=>{r(n.databaseName)});function r(n){let s=Me[n];It.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):dfe(n)&&t(s,n,!1)}a(r,"forDatabase")}function dfe(e){let t=Me[e];for(let r in t)if(t[r].replicate)return!0}function bh(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function ffe(e){let t={message:""};if(e.replicated){e.replicated=!1,It.trace?.("Replicating operation",e.operation,"to nodes",Ue.nodes.map(n=>n.name));let r=await Promise.allSettled(Ue.nodes.map(n=>Bh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Ue.nodes[s]?.name,i})}return t}var Ks,It,$K,VK,JT,KK,YK,WK,jK,rfe,nfe,la,bc,jT,GK,QO,zT,gs=se(()=>{Oe();Qi();Vu();LO();Hr();Ks=b(fe()),It=b(Q()),$K=require("crypto");YT();VK=require("fs");Ch();nf();G();oO();JT=b(require("node:tls")),KK=b(Ee()),YK=require("worker_threads"),WK=b(Ts()),rfe=1,nfe=[],la=Ks.default.get(x.REPLICATION_ENABLEROOTCAS)!==!1?new Set(JT.rootCertificates):new Set;a(zK,"buildReplicationMtlsConfig");a(sfe,"start");a(JK,"monitorNodeCAs");a(ife,"disableReplication");a(ofe,"assignReplicationSource");a(XK,"setReplicator");jT=new Map;a(afe,"getSubscriptionConnection");GK=new Map;a(cfe,"getRetrievalConnectionByName");a(Bh,"sendOperationToNode");a(Nh,"subscribeToNode");a(AT,"unsubscribeFromNode");a(lfe,"getCommonNameFromCert");a(nt,"getThisNodeName");a(ufe,"clearThisNodeName");Object.defineProperty(Ue,"hostname",{get(){return nt()}});a(qK,"getHostFromListeningPort");a(WT,"getPortFromListeningPort");a(xT,"getThisNodeId");Ue.replication={getThisNodeId:xT,exportIdMapping:Rh};a(Sc,"getThisNodeUrl");a(QT,"hostnameToUrl");a(Ri,"urlToNodeName");a(gc,"forEachReplicatedDatabase");a(dfe,"hasExplicitlyReplicatedTable");a(bh,"lastTimeInAuditStore");a(ffe,"replicateOperation")});var ry=M((VBe,nY)=>{"use strict";var hf=OV(),{validateBySchema:Fh}=ft(),{commonValidators:Ef,schemaRegex:XO}=Zi(),Sr=require("joi"),mfe=Q(),pfe=require("uuid").v4,ey=Zo(),_f=(G(),D(j)),hfe=require("util"),wc=ms(),{handleHDBError:fa,hdbErrors:Efe,ClientError:ru}=Ee(),{HDB_ERROR_MSGS:XT,HTTP_STATUS_CODES:ma}=Efe,{SchemaEventMsg:ty}=us(),ZK=_r(),{getDatabases:_fe}=(Oe(),D(mt)),{transformReq:gf}=ae(),{replicateOperation:eY}=(gs(),D(ca)),{cleanupOrphans:gfe}=(is(),D(ig)),ZT=Sr.string().min(1).max(Ef.schema_length.maximum).pattern(XO).messages({"string.pattern.base":"{:#label} "+Ef.schema_format.message}),Sfe=Sr.string().min(1).max(Ef.schema_length.maximum).pattern(XO).messages({"string.pattern.base":"{:#label} "+Ef.schema_format.message}).required(),Tfe=Sr.string().min(1).max(Ef.schema_length.maximum).pattern(XO).messages({"string.pattern.base":"{:#label} "+Ef.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();nY.exports={createSchema:yfe,createSchemaStructure:tY,createTable:Rfe,createTableStructure:rY,createAttribute:Nfe,dropSchema:bfe,dropTable:Afe,dropAttribute:Ife,getBackup:Cfe,cleanupOrphanBlobs:Ofe};async function yfe(e){let t=await tY(e);return ey.signalSchemaChange(new ty(process.pid,e.operation,e.schema)),t}a(yfe,"createSchema");async function tY(e){let t=Fh(e,Sr.object({database:ZT,schema:ZT}));if(t)throw new ru(t.message);if(gf(e),!await hf.checkSchemaExists(e.schema))throw fa(new Error,XT.SCHEMA_EXISTS_ERR(e.schema),ma.BAD_REQUEST,_f.LOG_LEVELS.ERROR,XT.SCHEMA_EXISTS_ERR(e.schema),!0);return await wc.createSchema(e),`database '${e.schema}' successfully created`}a(tY,"createSchemaStructure");async function Rfe(e){return gf(e),e.hash_attribute=e.primary_key??e.hash_attribute,await rY(e)}a(Rfe,"createTable");async function rY(e){let t=Fh(e,Sr.object({database:ZT,schema:ZT,table:Sfe,residence:Sr.array().items(Sr.string().min(1)).optional(),hash_attribute:Tfe}));if(t)throw new ru(t.message);if(!await hf.checkSchemaTableExists(e.schema,e.table))throw fa(new Error,XT.TABLE_EXISTS_ERR(e.schema,e.table),ma.BAD_REQUEST,_f.LOG_LEVELS.ERROR,XT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:pfe(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await wc.createTable(n,e);else throw fa(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",ma.BAD_REQUEST);else await wc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(rY,"createTableStructure");async function bfe(e){let t=Fh(e,Sr.object({database:Sr.string(),schema:Sr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new ru(t.message);gf(e);let r=await hf.checkSchemaExists(e.schema);if(r)throw fa(new Error,r,ma.NOT_FOUND,_f.LOG_LEVELS.ERROR,r,!0);let n=await hf.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await wc.dropSchema(e),ey.signalSchemaChange(new ty(process.pid,e.operation,e.schema)),await ZK.purgeSchemaTableStreams(e.schema,s);let i=await eY(e);return i.message=`successfully deleted '${e.schema}'`,i}a(bfe,"dropSchema");async function Afe(e){let t=Fh(e,Sr.object({database:Sr.string(),schema:Sr.string(),table:Sr.string().required()}));if(t)throw new ru(t.message);gf(e);let r=await hf.checkSchemaTableExists(e.schema,e.table);if(r)throw fa(new Error,r,ma.NOT_FOUND,_f.LOG_LEVELS.ERROR,r,!0);await wc.dropTable(e),await ZK.purgeTableStream(e.schema,e.table);let n=await eY(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(Afe,"dropTable");async function Ife(e){let t=Fh(e,Sr.object({database:Sr.string(),schema:Sr.string(),table:Sr.string().required(),attribute:Sr.string().required()}));if(t)throw new ru(t.message);gf(e);let r=await hf.checkSchemaTableExists(e.schema,e.table);if(r)throw fa(new Error,r,ma.NOT_FOUND,_f.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw fa(new Error,"You cannot drop a hash attribute",ma.BAD_REQUEST,void 0,void 0,!0);if(_f.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw fa(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,ma.BAD_REQUEST,void 0,void 0,!0);try{return await wc.dropAttribute(e),wfe(e),ey.signalSchemaChange(new ty(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw mfe.error(`Got an error deleting attribute ${hfe.inspect(e)}.`),n}}a(Ife,"dropAttribute");function wfe(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(wfe,"dropAttributeFromGlobal");async function Nfe(e){gf(e);let t=_fe()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw fa(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,ma.BAD_REQUEST,void 0,void 0,!0);return await wc.createAttribute(e),ey.signalSchemaChange(new ty(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Nfe,"createAttribute");function Cfe(e){return wc.getBackup(e)}a(Cfe,"getBackup");function Ofe(e){if(!e.database)throw new ru('Must provide "database" name for search for orphaned blobs');if(!databases[e.database])throw new ru(`Unknown database '${e.database}'`);return gfe(databases[e.database],e.database),{message:"Orphaned blobs cleanup started, check logs for progress"}}a(Ofe,"cleanupOrphanBlobs")});var iY=M((YBe,sY)=>{"use strict";var{OPERATIONS_ENUM:Pfe}=(G(),D(j)),ZO=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Pfe.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};sY.exports=ZO});var eP=M((zBe,uY)=>{"use strict";var Lfe=ms(),jBe=iY(),ny=ae(),sy=(G(),D(j)),Dfe=fe(),{handleHDBError:oY,hdbErrors:vfe}=Ee(),{HDB_ERROR_MSGS:aY,HTTP_STATUS_CODES:cY}=vfe,Mfe=Object.values(sy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),lY="To use this operation audit log must be enabled in harperdb-config.yaml";uY.exports=Ufe;async function Ufe(e){if(ny.isEmpty(e.schema))throw new Error(aY.SCHEMA_REQUIRED_ERR);if(ny.isEmpty(e.table))throw new Error(aY.TABLE_REQUIRED_ERR);if(!Dfe.get(sy.CONFIG_PARAMS.LOGGING_AUDITLOG))throw oY(new Error,lY,cY.BAD_REQUEST,sy.LOG_LEVELS.ERROR,lY,!0);let t=ny.checkSchemaTableExist(e.schema,e.table);if(t)throw oY(new Error,t,cY.NOT_FOUND,sy.LOG_LEVELS.ERROR,t,!0);if(!ny.isEmpty(e.search_type)&&Mfe.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await Lfe.readAuditLog(e)}a(Ufe,"readAuditLog")});var fY=M((QBe,dY)=>{"use strict";var{OPERATIONS_ENUM:xfe}=(G(),D(j)),tP=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=xfe.GET_BACKUP,this.schema=t,this.table=r}};dY.exports=tP});var hY=M((tFe,pY)=>{"use strict";var Bfe=ms(),ZBe=fY(),rP=ae(),Ffe=(G(),D(j)),eFe=fe(),{handleHDBError:kfe,hdbErrors:Hfe}=Ee(),{HDB_ERROR_MSGS:mY,HTTP_STATUS_CODES:Gfe}=Hfe;pY.exports=qfe;async function qfe(e){if(rP.isEmpty(e.schema))throw new Error(mY.SCHEMA_REQUIRED_ERR);if(rP.isEmpty(e.table))throw new Error(mY.TABLE_REQUIRED_ERR);let t=rP.checkSchemaTableExist(e.schema,e.table);if(t)throw kfe(new Error,t,Gfe.NOT_FOUND,Ffe.LOG_LEVELS.ERROR,t,!0);return await Bfe.getBackup(readAuditLogObject)}a(qfe,"getBackup")});var gY=M((nFe,_Y)=>{"use strict";var $fe=fe(),pa=require("joi"),Vfe=ft(),EY=require("moment"),Kfe=require("fs-extra"),sP=require("path"),Yfe=require("lodash"),kh=(G(),D(j)),{LOG_LEVELS:nu}=(G(),D(j)),Wfe="YYYY-MM-DD hh:mm:ss",jfe=sP.resolve(__dirname,"../logs");_Y.exports=function(e){return Vfe.validateBySchema(e,zfe)};var zfe=pa.object({from:pa.custom(nP),until:pa.custom(nP),to:pa.custom(nP),level:pa.valid(nu.NOTIFY,nu.FATAL,nu.ERROR,nu.WARN,nu.INFO,nu.DEBUG,nu.TRACE),order:pa.valid("asc","desc"),limit:pa.number().min(1),start:pa.number().min(0),log_name:pa.custom(Jfe)});function nP(e,t){if(EY(e,EY.ISO_8601).format(Wfe)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(nP,"validateDatetime");function Jfe(e,t){if(Yfe.invert(kh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=$fe.get(kh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?kh.LOG_NAMES.HDB:e,i=s===kh.LOG_NAMES.INSTALL?sP.join(jfe,kh.LOG_NAMES.INSTALL):sP.join(n,s);return Kfe.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(Jfe,"validateReadLogPath")});var oP=M((iFe,TY)=>{"use strict";var iy=(G(),D(j)),Qfe=Q(),Xfe=fe(),Zfe=gY(),iP=require("path"),SY=require("fs-extra"),{once:eme}=require("events"),{handleHDBError:tme,hdbErrors:rme}=Ee(),{PACKAGE_ROOT:nme}=yt(),{replicateOperation:sme}=(gs(),D(ca)),ime=iP.join(nme,"logs"),ome=1e3,ame=200;TY.exports=cme;async function cme(e){let t=Zfe(e);if(t)throw tme(t,t.message,rme.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=sme(e),n=Xfe.get(iy.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?iy.LOG_NAMES.HDB:e.log_name,i=s===iy.LOG_NAMES.INSTALL?iP.join(ime,iy.LOG_NAMES.INSTALL):iP.join(n,s);e.to===void 0&&e.until!==void 0&&(e.to=e.until);let o=e.level!==void 0,c=o?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.to!==void 0,f=d?new Date(e.to):void 0,m=e.limit===void 0?ome:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,_=0;p==="desc"&&!u&&!f&&(_=Math.max(SY.statSync(i).size-(E+5)*ame,0));let R=SY.createReadStream(i,{start:_});R.on("error",q=>{Qfe.error(q)});let S=0,y=[],w="",I;R.on("data",q=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d.]+Z) \[(.+?)]: /g;q=w+q;let z=0,Y;for(;(Y=k.exec(q))&&!R.destroyed;){I&&(I.message=q.slice(z,Y.index),H(I));let[ce,de,te]=Y,Se=te.split("] ["),Ne=Se[0],Ke=Se[1];Se.splice(0,2),I={timestamp:de,thread:Ne,level:Ke,tags:Se,message:""},z=Y.index+ce.length}w=q.slice(z)}),R.on("end",q=>{R.destroyed||I&&(I.message=w.trim(),H(I))}),R.resume();function H(q){let k,z,Y;switch(!0){case(o&&l&&d):k=new Date(q.timestamp),z=new Date(u),Y=new Date(f),q.level===c&&k>=z&&k<=Y&&S<h?S++:q.level===c&&k>=z&&k<=Y&&(go(q,p,y),S++,S===E&&R.destroy());break;case(o&&l):k=new Date(q.timestamp),z=new Date(u),q.level===c&&k>=z&&S<h?S++:q.level===c&&k>=z&&(go(q,p,y),S++,S===E&&R.destroy());break;case(o&&d):k=new Date(q.timestamp),Y=new Date(f),q.level===c&&k<=Y&&S<h?S++:q.level===c&&k<=Y&&(go(q,p,y),S++,S===E&&R.destroy());break;case(l&&d):k=new Date(q.timestamp),z=new Date(u),Y=new Date(f),k>=z&&k<=Y&&S<h?S++:k>=z&&k<=Y&&(go(q,p,y),S++,S===E&&R.destroy());break;case o:q.level===c&&S<h?S++:q.level===c&&(go(q,p,y),S++,S===E&&R.destroy());break;case l:k=new Date(q.timestamp),z=new Date(u),k>=z&&S<h?S++:k>=z&&S>=h&&(go(q,p,y),S++,S===E&&R.destroy());break;case d:k=new Date(q.timestamp),Y=new Date(f),k<=Y&&S<h?S++:k<=Y&&S>=h&&(go(q,p,y),S++,S===E&&R.destroy());break;default:S<h?S++:(go(q,p,y),S++,S===E&&R.destroy())}}a(H,"onLogMessage"),await eme(R,"close");let X=await r;if(X.replicated){for(let q of y)q.node=server.hostname;for(let q of X.replicated){let k=q.node;if(q.status==="failed")go({timestamp:new Date().toISOString(),level:"error",node:k,message:`Error retrieving logs: ${q.reason}`},p,y);else for(let z of q.results)z.node=k,go(z,p,y)}}return y}a(cme,"readLog");function go(e,t,r){t==="desc"?lme(e,r):t==="asc"?ume(e,r):r.push(e)}a(go,"pushLineToResult");function lme(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(lme,"insertDescending");function ume(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(ume,"insertAscending")});var oy=M((dFe,AY)=>{"use strict";var aP=require("joi"),{string:Sf,boolean:yY,date:dme}=aP.types(),fme=ft(),{validateSchemaExists:aFe,validateTableExists:cFe,validateSchemaName:lFe}=Zi(),mme=(G(),D(j)),pme=Dt(),RY=fe();RY.initSync();var uFe=Sf.invalid(RY.get(mme.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(pme.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),bY={operation:Sf.valid("add_node","update_node","set_node_replication"),node_name:Sf.optional(),subscriptions:aP.array().items({table:Sf.optional(),schema:Sf.optional(),database:Sf.optional(),subscribe:yY.required(),publish:yY.required().custom(Eme),start_time:dme.iso()})};function hme(e){return fme.validateBySchema(e,aP.object(bY))}a(hme,"addUpdateNodeValidator");function Eme(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(Eme,"checkForFalsy");AY.exports={addUpdateNodeValidator:hme,validationSchema:bY}});var Tf=M((mFe,IY)=>{"use strict";var cP=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},lP=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};IY.exports={Node:cP,NodeSubscription:lP}});var NY=M((hFe,wY)=>{"use strict";var _me=(G(),D(j)).OPERATIONS_ENUM,uP=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=_me.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};wY.exports=uP});var Hh=M((_Fe,CY)=>{"use strict";var dP=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},fP=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};CY.exports={RemotePayloadObject:dP,RemotePayloadSubscription:fP}});var PY=M((SFe,OY)=>{"use strict";var mP=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};OY.exports=mP});var DY=M((IFe,LY)=>{"use strict";var gme=PY(),yFe=Jt(),RFe=gt(),Sme=Q(),{getSchemaPath:bFe,getTransactionAuditStorePath:AFe}=Rt(),{getDatabases:Tme}=(Oe(),D(mt));LY.exports=yme;async function yme(e){let t=new gme;try{let r=Tme()[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){Sme.warn(`unable to stat table dbi due to ${r}`)}return t}a(yme,"lmdbGetTableSize")});var MY=M((NFe,vY)=>{"use strict";var pP=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};vY.exports=pP});var qh=M((vFe,FY)=>{"use strict";var Rme=require("fs-extra"),bme=require("path"),An=require("systeminformation"),Nc=Q(),UY=_r(),OFe=Dt(),yf=(G(),D(j)),Ame=DY(),Ime=Yl(),{getThreadInfo:xY}=st(),Gh=fe();Gh.initSync();var wme=MY(),{openEnvironment:PFe}=gt(),{getSchemaPath:LFe}=Rt(),{database:DFe,databases:hP}=(Oe(),D(mt)),ay;FY.exports={getHDBProcessInfo:SP,getNetworkInfo:yP,getDiskInfo:TP,getMemoryInfo:gP,getCPUInfo:_P,getTimeInfo:EP,getSystemInformation:RP,systemInformation:Nme,getTableSize:bP,getMetrics:AP};function EP(){return An.time()}a(EP,"getTimeInfo");async function _P(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...d}=await An.cpu();d.cpu_speed=await An.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:_,cpus:R,...S}=await An.currentLoad();return S.cpus=[],R.forEach(y=>{let{rawLoad:w,rawLoadIdle:I,rawLoadIrq:H,rawLoadNice:X,rawLoadSystem:q,rawLoadUser:k,...z}=y;S.cpus.push(z)}),d.current_load=S,d}catch(e){return Nc.error(`error in getCPUInfo: ${e}`),{}}}a(_P,"getCPUInfo");async function gP(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await An.mem();return Object.assign(s,process.memoryUsage())}catch(e){return Nc.error(`error in getMemoryInfo: ${e}`),{}}}a(gP,"getMemoryInfo");async function SP(){let e={core:[],clustering:[]};try{let t=await An.processes(),r;try{r=Number.parseInt(await Rme.readFile(bme.join(Gh.get(yf.CONFIG_PARAMS.ROOTPATH),yf.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===yf.NODE_ERROR_CODES.ENOENT)Nc.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 Nc.error(`error in getHDBProcessInfo: ${t}`),e}}a(SP,"getHDBProcessInfo");async function TP(){let e={};try{if(!Gh.get(yf.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await An.disksIO();e.io=i;let{rxSec:o,txSec:c,wxSec:l,...u}=await An.fsStats();return e.read_write=u,e.size=await An.fsSize(),e}catch(t){return Nc.error(`error in getDiskInfo: ${t}`),e}}a(TP,"getDiskInfo");async function yP(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Gh.get(yf.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await An.networkInterfaceDefault(),e.latency=await An.inetChecksite("google.com"),(await An.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await An.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return Nc.error(`error in getNetworkInfo: ${t}`),e}}a(yP,"getNetworkInfo");async function RP(){if(ay!==void 0)return ay;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await An.osInfo();e=c;let l=await An.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,ay=e,ay}catch(t){return Nc.error(`error in getSystemInformation: ${t}`),e}}a(RP,"getSystemInformation");async function bP(){let e=[],t=await Ime.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Ame(n));return e}a(bP,"getTableSize");async function AP(){let e={};for(let t in hP){let r=e[t]={},n=r.tables={};for(let s in hP[t])try{let i=hP[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){Nc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(AP,"getMetrics");async function BY(){if(Gh.get(yf.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await UY.getNATSReferences(),t=await UY.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(BY,"getNatsStreamInfo");async function Nme(e){let t=new wme;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await RP(),t.time=EP(),t.cpu=await _P(),t.memory=await gP(),t.disk=await TP(),t.network=await yP(),t.harperdb_processes=await SP(),t.table_size=await bP(),t.metrics=await AP(),t.threads=await xY(),t.replication=await BY(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await RP();break;case"time":t.time=EP();break;case"cpu":t.cpu=await _P();break;case"memory":t.memory=await gP();break;case"disk":t.disk=await TP();break;case"network":t.network=await yP();break;case"harperdb_processes":t.harperdb_processes=await SP();break;case"table_size":t.table_size=await bP();break;case"database_metrics":case"metrics":t.metrics=await AP();break;case"threads":t.threads=await xY();break;case"replication":t.replication=await BY();break;default:break}return t}a(Nme,"systemInformation")});var So=M((FFe,qY)=>{"use strict";var Cme=Vn(),IP=ae(),Ome=require("util"),su=(G(),D(j)),kY=fe();kY.initSync();var Pme=NC(),HY=Sn(),{Node:UFe,NodeSubscription:xFe}=Tf(),Lme=Ed(),Dme=NY(),{RemotePayloadObject:vme,RemotePayloadSubscription:Mme}=Hh(),{handleHDBError:Ume,hdbErrors:xme}=Ee(),{HTTP_STATUS_CODES:Bme,HDB_ERROR_MSGS:Fme}=xme,kme=fi(),Hme=qh(),{packageJson:Gme}=yt(),{getDatabases:qme}=(Oe(),D(mt)),BFe=Ome.promisify(Pme.authorize),$me=HY.searchByHash,Vme=HY.searchByValue;qY.exports={isEmpty:Kme,getNodeRecord:Yme,upsertNodeRecord:Wme,buildNodePayloads:jme,checkClusteringEnabled:zme,getAllNodeRecords:Jme,getSystemInfo:Qme,reverseSubscription:GY};function Kme(e){return e==null}a(Kme,"isEmpty");async function Yme(e){let t=new Lme(su.SYSTEM_SCHEMA_NAME,su.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return $me(t)}a(Yme,"getNodeRecord");async function Wme(e){let t=new Dme(su.SYSTEM_SCHEMA_NAME,su.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Cme.upsert(t)}a(Wme,"upsertNodeRecord");function GY(e){if(IP.isEmpty(e.subscribe)||IP.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(GY,"reverseSubscription");function jme(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:u}=c,d=IP.getTableHashAttribute(l,u),{subscribe:f,publish:m}=GY(c),p=qme()[l]?.[u],h=new Mme(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new vme(r,t,s,n)}a(jme,"buildNodePayloads");function zme(){if(!kY.get(su.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ume(new Error,Fme.CLUSTERING_NOT_ENABLED,Bme.BAD_REQUEST,void 0,void 0,!0)}a(zme,"checkClusteringEnabled");async function Jme(){let e=new kme(su.SYSTEM_SCHEMA_NAME,su.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Vme(e))}a(Jme,"getAllNodeRecords");async function Qme(){let e=await Hme.getSystemInformation();return{hdb_version:Gme.version,node_version:e.node_version,platform:e.platform}}a(Qme,"getSystemInfo")});var wP=M((HFe,JY)=>{"use strict";var cy=_r(),$Y=ae(),VY=Dt(),KY=(G(),D(j)),ly=Q(),YY=ry(),Xme=wp(),{RemotePayloadObject:Zme}=Hh(),{handleHDBError:WY,hdbErrors:epe}=Ee(),{HTTP_STATUS_CODES:jY}=epe,{NodeSubscription:zY}=Tf();JY.exports=tpe;async function tpe(e,t){let r;try{r=await cy.request(`${t}.${VY.REQUEST_SUFFIX}`,new Zme(KY.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),ly.trace("Response from remote describe all request:",r)}catch(o){ly.error(`addNode received error from describe all request to remote node: ${o}`);let c=cy.requestErrorHandler(o,"add_node",t);throw WY(new Error,c,jY.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===VY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw WY(new Error,o,jY.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===KY.SYSTEM_SCHEMA_NAME){await cy.createLocalTableStream(l,c);let h=new zY(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let u=$Y.doesSchemaExist(l),d=n[l]!==void 0,f=c?$Y.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(o);continue}if(!u&&d&&(ly.trace(`addNode creating schema: ${l}`),await YY.createSchema({operation:"create_schema",schema:l})),!f&&m){ly.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Xme(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await YY.createTable(h)}await cy.createLocalTableStream(l,c);let p=new zY(l,c,o.publish,o.subscribe);p.start_time=o.start_time,i.push(p)}return{added:i,skipped:s}}a(tpe,"reviewSubscriptions")});var Rf={};ye(Rf,{addNodeBack:()=>NP,removeNodeBack:()=>CP,setNode:()=>ipe});async function ipe(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=Ri(t)):t=QT(r);let n=(0,XY.validateBySchema)(e,spe);if(n)throw(0,ha.handleHDBError)(n,n.message,npe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new ha.ClientError("url or hostname is required for remove_node operation");let p=r,h=Gt(),E=await h.get(p);if(!E)throw new ha.ClientError(p+" does not exist");try{await Bh({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?nt():p},void 0)}catch(_){ys.warn(`Error removing node from target node ${p}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,_)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new ha.ClientError("url required for this operation");let s=Sc();if(s==null)throw new ha.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,Ys.getReplicationCert)();let p=await(0,Ys.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,Ys.createCsr)(),ys.info("Sending CSR to target node:",t)):p&&(c=p.certificate,ys.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,Oc.get)(x.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,Oc.get)(x.REPLICATION_SHARD)!==void 0&&(l.shard=(0,Oc.get)(x.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(QY):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=QY(e);l.subscribe=p.subscribe,l.publish=p.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await Bh({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,ys.warn("Error adding node:",t,"to cluster:",p),d=p}if(o&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);o&&(ys.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Ys.setCertTable)({name:rpe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Ys.setCertTable)({name:nt(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let p={url:s,ca:c,replicates:!0,subscriptions:null};(0,Oc.get)(x.REPLICATION_SHARD)!==void 0&&(p.shard=(0,Oc.get)(x.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await oa(nt(),p)}await oa(u?u.nodeName:f.name??Ri(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 NP(e){ys.trace("addNodeBack received request:",e);let t=await(0,Ys.signCertificate)(e),r;e.csr?(r=t.signingCA,ys.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,ys.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization),e.shard!==void 0&&(n.shard=e.shard);let s=await(0,Ys.getReplicationCertAuth)();if(n.replicates){let i={url:Sc(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,Oc.get)(x.REPLICATION_SHARD)!==void 0&&(i.shard=(0,Oc.get)(x.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await oa(nt(),i)}return await oa(e.hostname,n),t.nodeName=nt(),t.usingCA=s?.certificate,ys.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function CP(e){ys.trace("removeNodeBack received request:",e),await Gt().delete(e.name)}function QY(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Ys,XY,Cc,Oc,ys,ha,rpe,npe,spe,bf=se(()=>{Ys=b(Ts()),XY=b(ft()),Cc=b(require("joi")),Oc=b(fe());G();Ch();nf();gs();ys=b(Q()),ha=b(Ee()),{pki:rpe}=require("node-forge"),{HTTP_STATUS_CODES:npe}=ha.hdbErrors,spe=Cc.default.object({hostname:Cc.default.string(),verify_tls:Cc.default.boolean(),replicates:Cc.default.boolean(),subscriptions:Cc.default.array(),revoked_certificates:Cc.default.array(),shard:Cc.default.number()});a(ipe,"setNode");a(NP,"addNodeBack");a(CP,"removeNodeBack");a(QY,"reverseSubscription")});var Kh=M((zFe,eW)=>{"use strict";var{handleHDBError:uy,hdbErrors:ope}=Ee(),{HTTP_STATUS_CODES:dy}=ope,{addUpdateNodeValidator:ape}=oy(),fy=Q(),my=(G(),D(j)),ZY=Dt(),cpe=ae(),$h=_r(),Vh=So(),OP=fe(),lpe=wP(),{Node:upe,NodeSubscription:dpe}=Tf(),{broadcast:fpe}=st(),{setNode:mpe}=(bf(),D(Rf)),WFe=fe(),jFe=(G(),D(j)),ppe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",hpe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Epe=OP.get(my.CONFIG_PARAMS.CLUSTERING_NODENAME);eW.exports=_pe;async function _pe(e,t=!1){if(fy.trace("addNode called with:",e),OP.get(my.CONFIG_PARAMS.REPLICATION_URL)||OP.get(my.CONFIG_PARAMS.REPLICATION_HOSTNAME))return mpe(e);Vh.checkClusteringEnabled();let r=ape(e);if(r)throw uy(r,r.message,dy.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await Vh.getNodeRecord(n);if(!cpe.isEmptyOrZeroLength(f))throw uy(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,dy.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await lpe(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=ppe,o;let c=Vh.buildNodePayloads(s,Epe,my.OPERATIONS_ENUM.ADD_NODE,await Vh.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let p=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new dpe(p.schema,p.table,p.publish,p.subscribe))}fy.trace("addNode sending remote payload:",c);let u;try{u=await $h.request(`${n}.${ZY.REQUEST_SUFFIX}`,c)}catch(f){fy.error(`addNode received error from request: ${f}`);for(let p=0,h=s.length;p<h;p++){let E=s[p];E.publish=!1,E.subscribe=!1,await $h.updateRemoteConsumer(E,n)}let m=$h.requestErrorHandler(f,"add_node",n);throw uy(new Error,m,dy.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===ZY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw uy(new Error,f,dy.INTERNAL_SERVER_ERROR,"error",f)}fy.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await $h.updateRemoteConsumer(p,n),p.subscribe===!0&&await $h.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new upe(n,l,u.system_info);return await Vh.upsertNodeRecord(d),fpe({type:"nats_update"}),i.length>0?o.message=hpe:o.message=`Successfully added '${n}' to manifest`,o}a(_pe,"addNode")});var vP=M((XFe,rW)=>{"use strict";var{handleHDBError:PP,hdbErrors:gpe}=Ee(),{HTTP_STATUS_CODES:LP}=gpe,{addUpdateNodeValidator:Spe}=oy(),Yh=Q(),py=(G(),D(j)),tW=Dt(),QFe=ae(),Wh=_r(),jh=So(),DP=fe(),{cloneDeep:Tpe}=require("lodash"),ype=wP(),{Node:Rpe,NodeSubscription:bpe}=Tf(),{broadcast:Ape}=st(),{setNode:Ipe}=(bf(),D(Rf)),wpe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Npe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Cpe=DP.get(py.CONFIG_PARAMS.CLUSTERING_NODENAME);rW.exports=Ope;async function Ope(e){if(Yh.trace("updateNode called with:",e),DP.get(py.CONFIG_PARAMS.REPLICATION_URL)??DP.get(py.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Ipe(e);jh.checkClusteringEnabled();let t=Spe(e);if(t)throw PP(t,t.message,LP.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await jh.getNodeRecord(r);s.length>0&&(n=Tpe(s));let{added:i,skipped:o}=await ype(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=wpe,c;let l=jh.buildNodePayloads(i,Cpe,py.OPERATIONS_ENUM.UPDATE_NODE,await jh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];Yh.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}Yh.trace("updateNode sending remote payload:",l);let u;try{u=await Wh.request(`${r}.${tW.REQUEST_SUFFIX}`,l)}catch(d){Yh.error(`updateNode received error from request: ${d}`);let f=Wh.requestErrorHandler(d,"update_node",r);throw PP(new Error,f,LP.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===tW.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw PP(new Error,d,LP.INTERNAL_SERVER_ERROR,"error",d)}Yh.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await Wh.updateRemoteConsumer(m,r),m.subscribe===!0?await Wh.updateConsumerIterator(m.schema,m.table,r,"start"):await Wh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new Rpe(r,[],u.system_info)]),await Ppe(n[0],i,u.system_info),o.length>0?c.message=Npe:c.message=`Successfully updated '${r}'`,c}a(Ope,"updateNode");async function Ppe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===o.schema&&d.table===o.table){d.publish=o.publish,d.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new bpe(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await jh.upsertNodeRecord(n),Ape({type:"nats_update"})}a(Ppe,"updateNodeTable")});var aW=M((eke,oW)=>{"use strict";var iW=require("joi"),{string:nW}=iW.types(),Lpe=ft(),sW=(G(),D(j)),Dpe=fe(),vpe=Dt();oW.exports=Mpe;function Mpe(e){let t=nW.invalid(Dpe.get(sW.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(vpe.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=iW.object({operation:nW.valid(sW.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Lpe.validateBySchema(e,r)}a(Mpe,"removeNodeValidator")});var Jh=M((rke,fW)=>{"use strict";var{handleHDBError:cW,hdbErrors:Upe}=Ee(),{HTTP_STATUS_CODES:lW}=Upe,xpe=aW(),zh=Q(),uW=So(),Bpe=ae(),Af=(G(),D(j)),dW=Dt(),MP=_r(),UP=fe(),{RemotePayloadObject:Fpe}=Hh(),{NodeSubscription:kpe}=Tf(),Hpe=Ip(),Gpe=Bl(),{broadcast:qpe}=st(),{setNode:$pe}=(bf(),D(Rf)),Vpe=UP.get(Af.CONFIG_PARAMS.CLUSTERING_NODENAME);fW.exports=Kpe;async function Kpe(e){if(zh.trace("removeNode called with:",e),UP.get(Af.CONFIG_PARAMS.REPLICATION_URL)??UP.get(Af.CONFIG_PARAMS.REPLICATION_HOSTNAME))return $pe(e);uW.checkClusteringEnabled();let t=xpe(e);if(t)throw cW(t,t.message,lW.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await uW.getNodeRecord(r);if(Bpe.isEmptyOrZeroLength(n))throw cW(new Error,`Node '${r}' was not found.`,lW.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Fpe(Af.OPERATIONS_ENUM.REMOVE_NODE,Vpe,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await MP.updateConsumerIterator(d.schema,d.table,r,"stop");try{await MP.updateRemoteConsumer(new kpe(d.schema,d.table,!1,!1),r)}catch(f){zh.error(f)}}try{i=await MP.request(`${r}.${dW.REQUEST_SUFFIX}`,s),zh.trace("Remove node reply from remote node:",r,i)}catch(l){zh.error("removeNode received error from request:",l),o=!0}let c=new Hpe(Af.SYSTEM_SCHEMA_NAME,Af.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Gpe.deleteRecord(c),qpe({type:"nats_update"}),i?.status===dW.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(zh.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(Kpe,"removeNode")});var hW=M((ske,pW)=>{"use strict";var mW=require("joi"),{string:Ype,array:Wpe}=mW.types(),jpe=ft(),zpe=oy();pW.exports=Jpe;function Jpe(e){let t=mW.object({operation:Ype.valid("configure_cluster").required(),connections:Wpe.items(zpe.validationSchema).required()});return jpe.validateBySchema(e,t)}a(Jpe,"configureClusterValidator")});var xP=M((oke,TW)=>{"use strict";var EW=(G(),D(j)),hy=Q(),Qpe=ae(),Xpe=fe(),Zpe=Jh(),ehe=Kh(),the=So(),rhe=hW(),{handleHDBError:_W,hdbErrors:nhe}=Ee(),{HTTP_STATUS_CODES:gW}=nhe,she="Configure cluster complete.",ihe="Failed to configure the cluster. Check the logs for more details.",ohe="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";TW.exports=ahe;async function ahe(e){hy.trace("configure cluster called with:",e);let t=rhe(e);if(t)throw _W(t,t.message,gW.BAD_REQUEST,void 0,void 0,!0);let r=await the.getAllNodeRecords(),n=[];if(Xpe.get(EW.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await SW(Zpe,{operation:EW.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}hy.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 SW(ehe,f,f.node_name);s.push(m)}hy.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(hy.error(m.node_name,m?.error?.message,m?.error?.stack),o.includes(m.node_name)||o.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(Qpe.isEmptyOrZeroLength(o))return{message:she,connections:c};if(l)return{message:ohe,failed_nodes:o,connections:c};throw _W(new Error,ihe,gW.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(ahe,"configureCluster");async function SW(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(SW,"functionWrapper")});var AW=M((cke,bW)=>{"use strict";var Qh=require("joi"),che=ft(),{validateSchemaExists:yW,validateTableExists:lhe,validateSchemaName:RW}=Zi(),uhe=Qh.object({operation:Qh.string().valid("purge_stream"),schema:Qh.string().custom(yW).custom(RW).optional(),database:Qh.string().custom(yW).custom(RW).optional(),table:Qh.string().custom(lhe).required()});function dhe(e){return che.validateBySchema(e,uhe)}a(dhe,"purgeStreamValidator");bW.exports=dhe});var BP=M((uke,IW)=>{"use strict";var{handleHDBError:fhe,hdbErrors:mhe}=Ee(),{HTTP_STATUS_CODES:phe}=mhe,hhe=AW(),Ehe=_r(),_he=So();IW.exports=ghe;async function ghe(e){e.schema=e.schema??e.database;let t=hhe(e);if(t)throw fhe(t,t.message,phe.BAD_REQUEST,void 0,void 0,!0);_he.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Ehe.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(ghe,"purgeStream")});var gy=M((fke,vW)=>{"use strict";var kP=So(),She=_r(),_y=fe(),If=(G(),D(j)),iu=Dt(),The=ae(),FP=Q(),{RemotePayloadObject:yhe}=Hh(),{ErrorCode:wW}=require("nats"),{parentPort:NW}=require("worker_threads"),{onMessageByType:Rhe}=st(),{getThisNodeName:bhe}=(gs(),D(ca)),{requestClusterStatus:Ahe}=(Ch(),D(T1)),{getReplicationSharedStatus:Ihe,getHDBNodeTable:whe}=(nf(),D(m1)),{CONFIRMATION_STATUS_POSITION:Nhe,RECEIVED_VERSION_POSITION:CW,RECEIVED_TIME_POSITION:Che,SENDING_TIME_POSITION:Ohe,RECEIVING_STATUS_POSITION:Phe,RECEIVING_STATUS_RECEIVING:Lhe,BACK_PRESSURE_RATIO_POSITION:Dhe}=(LO(),D(dK)),OW=_y.get(If.CONFIG_PARAMS.CLUSTERING_ENABLED),PW=_y.get(If.CONFIG_PARAMS.CLUSTERING_NODENAME);vW.exports={clusterStatus:vhe,buildNodeStatus:DW};var LW;Rhe("cluster-status",async e=>{LW(e)});async function vhe(){if(_y.get(If.CONFIG_PARAMS.REPLICATION_URL)||_y.get(If.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;NW?(NW.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{LW=i})):n=Ahe();for(let i of n.connections){let o=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=Ihe(u,l,o);c.lastCommitConfirmed=Ey(d[Nhe]),c.lastReceivedRemoteTime=Ey(d[CW]),c.lastReceivedLocalTime=Ey(d[Che]),c.lastReceivedVersion=d[CW],c.sendingMessage=Ey(d[Ohe]),c.backPressurePercent=d[Dhe]*100,c.lastReceivedStatus=d[Phe]===Lhe?"Receiving":"Waiting"}}n.node_name=bhe();let s=whe().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:PW,is_enabled:OW,connections:[]};if(!OW)return e;let t=await kP.getAllNodeRecords();if(The.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(DW(t[n],e.connections));return await Promise.allSettled(r),e}a(vhe,"clusterStatus");function Ey(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}a(Ey,"asDate");async function DW(e,t){let r=e.name,n=new yhe(If.OPERATIONS_ENUM.CLUSTER_STATUS,PW,void 0,await kP.getSystemInfo()),s,i,o=iu.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await She.request(iu.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===iu.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=iu.CLUSTER_STATUS_STATUSES.CLOSED,FP.error(`Error getting node status from ${r} `,s))}catch(l){FP.warn(`Error getting node status from ${r}`,l),l.code===wW.NoResponders?o=iu.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===wW.Timeout?o=iu.CLUSTER_STATUS_STATUSES.TIMEOUT:o=iu.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Mhe(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==If.PRE_4_0_0_VERSION&&await kP.upsertNodeRecord(l)}catch(l){FP.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(DW,"buildNodeStatus");function Mhe(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(Mhe,"NodeStatusObject")});var GP=M((pke,MW)=>{"use strict";var{handleHDBError:Uhe,hdbErrors:xhe}=Ee(),{HTTP_STATUS_CODES:Bhe}=xhe,Fhe=_r(),khe=So(),HP=ae(),Sy=require("joi"),Hhe=ft(),Ghe=2e3,qhe=Sy.object({timeout:Sy.number().min(1),connected_nodes:Sy.boolean(),routes:Sy.boolean()});MW.exports=$he;async function $he(e){khe.checkClusteringEnabled();let t=Hhe.validateBySchema(e,qhe);if(t)throw Uhe(t,t.message,Bhe.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||HP.autoCastBoolean(n),o=s===void 0||HP.autoCastBoolean(s),c={nodes:[]},l=await Fhe.getServerList(r??Ghe),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,p=l[d].data;if(m.name.endsWith("-hub")){let h={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[m.name]&&u[m.name].forEach(E=>{h.connected_nodes.includes(E.name.slice(0,-4))||h.connected_nodes.push(E.name.slice(0,-4))})),o&&(h.routes=p.cluster?.urls?p.cluster?.urls.map(E=>({host:E.split(":")[0],port:HP.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}a($he,"clusterNetwork")});var FW=M((Eke,BW)=>{"use strict";var qP=require("joi"),UW=ft(),{routeConstraints:xW}=cA();BW.exports={setRoutesValidator:Vhe,deleteRoutesValidator:Khe};function Vhe(e){let t=qP.object({server:qP.valid("hub","leaf"),routes:xW.required()});return UW.validateBySchema(e,t)}a(Vhe,"setRoutesValidator");function Khe(e){let t=qP.object({routes:xW.required()});return UW.validateBySchema(e,t)}a(Khe,"deleteRoutesValidator")});var Ty=M((gke,KW)=>{"use strict";var Ea=_t(),$P=ae(),Ws=(G(),D(j)),wf=fe(),kW=FW(),{handleHDBError:HW,hdbErrors:Yhe}=Ee(),{HTTP_STATUS_CODES:GW}=Yhe,qW="cluster routes successfully set",$W="cluster routes successfully deleted";KW.exports={setRoutes:jhe,getRoutes:zhe,deleteRoutes:Jhe};function Whe(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 o=0,c=e.routes.length;o<c;o++){let l=e.routes[o];l.port=$P.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(Ws.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):Ea.updateConfigValue(Ws.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:qW,set:i,skipped:s}}a(Whe,"setRoutesNats");function jhe(e){let t=kW.setRoutesValidator(e);if(t)throw HW(t,t.message,GW.BAD_REQUEST,void 0,void 0,!0);if(wf.get(Ws.CONFIG_PARAMS.CLUSTERING_ENABLED))return Whe(e);let r=[],n=[],s=wf.get(Ws.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{VW(s,i)?n.push(i):(s.push(i),r.push(i))}),Ea.updateConfigValue(Ws.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:qW,set:r,skipped:n}}a(jhe,"setRoutes");function VW(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}a(VW,"existsInArray");function zhe(){if(wf.get(Ws.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=Ea.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return wf.get(Ws.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(zhe,"getRoutes");function Jhe(e){let t=kW.deleteRoutesValidator(e);if(t)throw HW(t,t.message,GW.BAD_REQUEST,void 0,void 0,!0);if(wf.get(Ws.CONFIG_PARAMS.CLUSTERING_ENABLED))return Qhe(e);let r=[],n=[],s=wf.get(Ws.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{VW(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),Ea.updateConfigValue(Ws.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:$W,deleted:r,skipped:n}}a(Jhe,"deleteRoutes");function Qhe(e){let t=Ea.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],o=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,p=r.length;m<p;m++){let h=r[m];if(d.host===h.host&&d.port===h.port){r.splice(m,1),f=!0,o=!0,s.push(d);break}}if(!f){let m=!0;for(let p=0,h=n.length;p<h;p++){let E=n[p];if(d.host===E.host&&d.port===E.port){n.splice(p,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return o&&(r=$P.isEmptyOrZeroLength(r)?null:r,Ea.updateConfigValue(Ws.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=$P.isEmptyOrZeroLength(n)?null:n,Ea.updateConfigValue(Ws.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:$W,deleted:s,skipped:i}}a(Qhe,"deleteRoutesNats")});var WW=M((Tke,YW)=>{"use strict";var Xhe=Dt(),VP=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,f,m,p,h){this.port=t,o===null&&(o=void 0),this.server_name=r+Xhe.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};YW.exports=VP});var JW=M((Rke,zW)=>{"use strict";var jW=Dt(),KP=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+jW.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+jW.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};zW.exports=KP});var XW=M((Ake,QW)=>{"use strict";var YP=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};QW.exports=YP});var ej=M((wke,ZW)=>{"use strict";var Zhe=Dt(),WP=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Zhe.SERVER_SUFFIX.ADMIN,this.password=r}};ZW.exports=WP});var Ay=M((Cke,nj)=>{"use strict";var ou=require("path"),au=require("fs-extra"),eEe=WW(),tEe=JW(),rEe=XW(),nEe=ej(),jP=(hs(),D(co)),Cf=ae(),Wn=_t(),Ry=(G(),D(j)),Xh=Dt(),{CONFIG_PARAMS:lr}=Ry,Of=Q(),Zh=fe(),tj=io(),zP=_r(),sEe=Ts(),Nf="clustering",iEe=1e4,rj=50;nj.exports={generateNatsConfig:aEe,removeNatsConfig:cEe,getHubConfigPath:oEe};function oEe(){let e=Zh.get(lr.ROOTPATH);return ou.join(e,Nf,Xh.NATS_CONFIG_FILES.HUB_SERVER)}a(oEe,"getHubConfigPath");async function aEe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=Zh.get(lr.ROOTPATH);au.ensureDirSync(ou.join(r,"clustering","leaf")),Zh.initSync();let n=Wn.getConfigFromFile(lr.CLUSTERING_TLS_CERT_AUTH),s=Wn.getConfigFromFile(lr.CLUSTERING_TLS_PRIVATEKEY),i=Wn.getConfigFromFile(lr.CLUSTERING_TLS_CERTIFICATE);!await au.exists(i)&&!await au.exists(!n)&&await sEe.createNatsCerts();let o=ou.join(r,Nf,Xh.PID_FILES.HUB),c=ou.join(r,Nf,Xh.PID_FILES.LEAF),l=Wn.getConfigFromFile(lr.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=ou.join(r,Nf,Xh.NATS_CONFIG_FILES.HUB_SERVER),d=ou.join(r,Nf,Xh.NATS_CONFIG_FILES.LEAF_SERVER),f=Wn.getConfigFromFile(lr.CLUSTERING_TLS_INSECURE),m=Wn.getConfigFromFile(lr.CLUSTERING_TLS_VERIFY),p=Wn.getConfigFromFile(lr.CLUSTERING_NODENAME),h=Wn.getConfigFromFile(lr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await zP.checkNATSServerInstalled()||by("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await jP.listUsers(),_=Wn.getConfigFromFile(lr.CLUSTERING_USER),R=await jP.getClusterUser();(Cf.isEmpty(R)||R.active!==!0)&&by(`Invalid cluster user '${_}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await yy(lr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await yy(lr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await yy(lr.CLUSTERING_HUBSERVER_NETWORK_PORT),await yy(lr.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],y=[];for(let[z,Y]of E.entries())Y.role?.role===Ry.ROLE_TYPES_ENUM.CLUSTER_USER&&Y.active&&(S.push(new nEe(Y.username,tj.decrypt(Y.hash))),y.push(new rEe(Y.username,tj.decrypt(Y.hash))));let w=[],{hub_routes:I}=Wn.getClusteringRoutes();if(!Cf.isEmptyOrZeroLength(I))for(let z of I)w.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${z.host}:${z.port}`);let H=new eEe(Wn.getConfigFromFile(lr.CLUSTERING_HUBSERVER_NETWORK_PORT),p,o,i,s,n,f,m,h,Wn.getConfigFromFile(lr.CLUSTERING_HUBSERVER_CLUSTER_NAME),Wn.getConfigFromFile(lr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),w,S,y);n==null&&(delete H.tls.ca_file,delete H.leafnodes.tls.ca_file),t=Cf.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Ry.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await au.writeJson(u,H),Of.trace(`Hub server config written to ${u}`));let X=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,q=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,k=new tEe(Wn.getConfigFromFile(lr.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[X],[q],S,y,i,s,n,f);n==null&&delete k.tls.ca_file,(t===void 0||t===Ry.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await au.writeJson(d,k),Of.trace(`Leaf server config written to ${d}`))}a(aEe,"generateNatsConfig");async function yy(e){let t=Zh.get(e);return Cf.isEmpty(t)&&by(`port undefined for '${e}'`),await Cf.isPortTaken(t)&&by(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(yy,"isPortAvailable");function by(e){let t=`Error generating clustering config: ${e}`;Of.error(t),console.error(t),process.exit(1)}a(by,"generateNatsConfigError");async function cEe(e){let{port:t,config_file:r}=zP.getServerConfig(e),{username:n,decrypt_hash:s}=await jP.getClusterUser(),i=0,o=2e3;for(;i<rj;){try{let d=await zP.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){Of.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=rj)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=o*(i*2);u>3e4&&Of.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await Cf.asyncSetTimeout(u)}let c="0".repeat(iEe),l=ou.join(Zh.get(lr.ROOTPATH),Nf,r);await au.writeFile(l,c),await au.remove(l),Of.notify(e,"started.")}a(cEe,"removeNatsConfig")});var lj=M((Pke,cj)=>{"use strict";var Rs=fe(),et=(G(),D(j)),eE=Dt(),_a=require("path"),{PACKAGE_ROOT:wy}=yt(),sj=fe(),Iy=ae(),Pf="/dev/null",lEe=_a.join(wy,"launchServiceScripts"),ij=_a.join(wy,"utility/scripts"),uEe=_a.join(ij,et.HDB_RESTART_SCRIPT),oj=_a.resolve(wy,"dependencies",`${process.platform}-${process.arch}`,eE.NATS_BINARY_NAME);function aj(){let e={[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0,...process.env};return Iy.noBootFile()&&(e[et.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Iy.getEnvCliRootPath()),{name:et.PROCESS_DESCRIPTORS.HDB,script:et.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,execArgv:process.execArgv,cwd:wy}}a(aj,"generateMainServerConfig");var dEe=9930;function fEe(){Rs.initSync(!0);let e=Rs.get(et.CONFIG_PARAMS.ROOTPATH),t=_a.join(e,"clustering",eE.NATS_CONFIG_FILES.HUB_SERVER),r=_a.join(Rs.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY),et.LOG_NAMES.HDB),n=sj.get(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=eE.LOG_LEVEL_FLAGS[Rs.get(et.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:et.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==dEe?"-"+n:""),binFile:oj,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Rs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Pf,i.error_file=Pf),i}a(fEe,"generateNatsHubServerConfig");var mEe=9940;function pEe(){Rs.initSync(!0);let e=Rs.get(et.CONFIG_PARAMS.ROOTPATH),t=_a.join(e,"clustering",eE.NATS_CONFIG_FILES.LEAF_SERVER),r=_a.join(Rs.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY),et.LOG_NAMES.HDB),n=sj.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=eE.LOG_LEVEL_FLAGS[Rs.get(et.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==mEe?"-"+n:""),binFile:oj,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Rs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Pf,i.error_file=Pf),i}a(pEe,"generateNatsLeafServerConfig");function hEe(){Rs.initSync();let e=_a.join(Rs.get(et.CONFIG_PARAMS.LOGGING_ROOT),et.LOG_NAMES.HDB),t={name:et.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,binFile:et.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:lEe,autorestart:!1};return Rs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Pf,t.error_file=Pf),t}a(hEe,"generateClusteringUpgradeV4ServiceConfig");function EEe(){let e={[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.RESTART_HDB};return Iy.noBootFile()&&(e[et.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Iy.getEnvCliRootPath()),{...{name:et.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:ij},script:uEe}}a(EEe,"generateRestart");function _Ee(){return{apps:[aj()]}}a(_Ee,"generateAllServiceConfigs");cj.exports={generateAllServiceConfigs:_Ee,generateMainServerConfig:aj,generateRestart:EEe,generateNatsHubServerConfig:fEe,generateNatsLeafServerConfig:pEe,generateClusteringUpgradeV4ServiceConfig:hEe}});var cu=M((vke,Ej)=>{"use strict";var Pr=(G(),D(j)),Dke=ae(),Sa=Ay(),Ny=_r(),ga=Dt(),Pc=lj(),QP=fe(),Lc=Q(),gEe=So(),{startWorker:uj,onMessageFromWorkers:SEe}=st(),dj=require("fs"),TEe=require("node:path"),yEe=(G(),D(j)),{setTimeout:REe}=require("node:timers/promises"),{execFile:bEe,fork:AEe}=require("node:child_process");Ej.exports={start:Dc,restart:wEe,kill:PEe,startAllServices:LEe,startService:mj,restartHdb:NEe,startClusteringProcesses:pj,startClusteringThreads:hj,isHdbRestartRunning:CEe,getHdbPid:OEe,cleanupChildrenProcesses:tE,reloadClustering:vEe,expectedRestartOfChildren:fj};SEe(e=>{e.type==="restart"&&QP.initSync(!0)});var To=[],IEe=10,JP;function Dc(e,t=!1){let r=typeof e.args=="string"?e.args.split(" "):e.args;e.silent=!0,e.detached=!0;let n=e.script?AEe(e.script,r,e):bEe(e.binFile,r,e);n.name=e.name,n.config=e,n.on("error",(o,c)=>{console.error(o,c)}),n.on("exit",async o=>{let c=To.indexOf(n);c>-1&&To.splice(c,1),!JP&&o!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<IEe&&(dj.existsSync(Sa.getHubConfigPath())?Dc(e):(await Sa.generateNatsConfig(!0),Dc(e),await new Promise(l=>setTimeout(l,3e3)),await Sa.removeNatsConfig(Pr.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Sa.removeNatsConfig(Pr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function i(o){let c=QP.get(Pr.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),l=/\[\d+][^\[]+\[(\w+)]/g,u,d=0,f;for(;u=l.exec(o);){if(u.index&&ga.LOG_LEVEL_HIERARCHY[c]>=ga.LOG_LEVEL_HIERARCHY[f||"info"]){let h=f===ga.LOG_LEVELS.ERR||f===ga.LOG_LEVELS.WRN?Lc.OUTPUTS.STDERR:Lc.OUTPUTS.STDOUT;Lc.logCustomLevel(f||"info",h,s,o.slice(d,u.index).trim())}let[m,p]=u;d=u.index+m.length,f=ga.LOG_LEVELS[p]}if(ga.LOG_LEVEL_HIERARCHY[c]>=ga.LOG_LEVEL_HIERARCHY[f||"info"]){let m=f===ga.LOG_LEVELS.ERR||f===ga.LOG_LEVELS.WRN?Lc.OUTPUTS.STDERR:Lc.OUTPUTS.STDOUT;Lc.logCustomLevel(f||"info",m,s,o.toString().slice(d).trim())}}a(i,"extractMessages"),n.stdout.on("data",i),n.stderr.on("data",i),n.unref(),To.length===0&&(t||(process.on("exit",tE),process.on("SIGINT",tE),process.on("SIGQUIT",tE),process.on("SIGTERM",tE))),To.push(n)}a(Dc,"start");function tE(e=!0){if(!JP&&(JP=!0,To.length!==0))if(Lc.info("Killing child processes..."),To.map(t=>t.kill()),e)process.exit(0);else return REe(2e3)}a(tE,"cleanupChildrenProcesses");function wEe(e){fj();for(let t of To)t.name===e&&t.kill()}a(wEe,"restart");function fj(){for(let e of To)e.config&&(e.config.restarts=0)}a(fj,"expectedRestartOfChildren");async function NEe(){await Dc(Pc.generateRestart())}a(NEe,"restartHdb");async function CEe(){let e=await list();for(let t in e)if(e[t].name===Pr.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(CEe,"isHdbRestartRunning");function OEe(){let e=QP.getHdbBasePath();if(!e)return;let t=TEe.join(e,yEe.HDB_PID_FILE),r=MEe(t);if(!(!r||r===process.pid)&&UEe(r))return r}a(OEe,"getHdbPid");function PEe(){for(let e of To)e.kill();To=[]}a(PEe,"kill");async function LEe(){await pj(),await hj(),await Dc(Pc.generateAllServiceConfigs())}a(LEe,"startAllServices");async function mj(e,t=!1){let r;switch(e=e.toLowerCase(),e){case Pr.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Pc.generateMainServerConfig();break;case Pr.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Pc.generateNatsIngestServiceConfig();break;case Pr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Pc.generateNatsReplyServiceConfig();break;case Pr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Pc.generateNatsHubServerConfig(),await Dc(r,t),await Sa.removeNatsConfig(e);return;case Pr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Pc.generateNatsLeafServerConfig(),await Dc(r,t),await Sa.removeNatsConfig(e);return;case Pr.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Pc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}Dc(r,t)}a(mj,"startService");var DEe;async function pj(e=!1){for(let t in Pr.CLUSTERING_PROCESSES){let r=Pr.CLUSTERING_PROCESSES[t];await mj(r,e)}}a(pj,"startClusteringProcesses");async function hj(){DEe=uj(Pr.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Pr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Ny.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Ny.updateLocalStreams();let e=await gEe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Pr.PRE_4_0_0_VERSION){Lc.info("Starting clustering upgrade 4.0.0 process"),uj(Pr.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(hj,"startClusteringThreads");async function vEe(){await Sa.generateNatsConfig(!0),await Ny.reloadNATSHub(),await Ny.reloadNATSLeaf(),await Sa.removeNatsConfig(Pr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Sa.removeNatsConfig(Pr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(vEe,"reloadClustering");function MEe(e){try{return Number.parseInt(dj.readFileSync(e,"utf8"),10)}catch{return null}}a(MEe,"readPidFile");function UEe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}a(UEe,"isProcessRunning")});var eL={};ye(eL,{compactOnStart:()=>xEe,copyDb:()=>Rj});async function xEe(){Ta.notify("Running compact on start"),console.log("Running compact on start");let e=(0,XP.get)(x.ROOTPATH),t=new Map,r=lt();(0,ZP.updateConfigValue)(x.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,Cy.join)(e,"backup",n+".mdb"),o=(0,Cy.join)(e,tl,n+"-copy.mdb"),c=0;try{c=await _j(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Ta.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:o,backupDest:i,recordCount:c}),await Rj(n,o),console.log("Backing up",n,"to",i);try{await(0,lu.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}console.log("Moving copy compacted",n,"to",s),await(0,lu.move)(o,s,{overwrite:!0}),await(0,lu.remove)((0,Cy.join)(e,tl,`${n}-copy.mdb-lock`))}try{Bd()}catch(n){Ta.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}try{Bd()}catch(n){Ta.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Ta.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,ZP.updateConfigValue)(x.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,lu.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Bd(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let o=await _j(n);if(console.log("Database",n,"after compact has a total record count of",o),i!==o){let c=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
20
20
|
Total record count before compaction: ${i}, total after: ${o}.
|
|
21
|
-
Database backup has not been removed and can be found here: ${s}`;
|
|
21
|
+
Database backup has not been removed and can be found here: ${s}`;Ta.warn(c),console.warn(c)}(0,XP.get)(x.STORAGE_COMPACTONSTARTKEEPBACKUP)!==!0&&(console.log("Removing backup",s),await(0,lu.remove)(s))}}async function _j(e){let t=await(0,yj.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}function Lf(){}async function Rj(e,t){console.log(`Copying database ${e} to ${t}`);let r=lt()[e];if(!r)throw new Error(`Source database not found: ${e}`);let n;for(let f in r){let m=r[f];m.primaryStore.put=Lf,m.primaryStore.remove=Lf;for(let p in m.indices){let h=m.indices[p];h.put=Lf,h.remove=Lf}m.auditStore&&(m.auditStore.put=Lf,m.auditStore.remove=Lf),n=m.primaryStore.rootStore}if(!n)throw new Error(`Source database does not have any tables: ${e}`);let s=n.dbisDb,i=n.auditStore,o=(0,gj.open)(new Sj.default(t)),c=o.openDB(Oy.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:m,value:p}of s.getRange({transaction:d})){let h=p.is_hash_attribute||p.isPrimaryKey,E,_;if(h&&(E=p.compression,_=MS(),_?p.compression=_:delete p.compression,E?.dictionary?.toString()===_?.dictionary?.toString()&&(E=null,_=null)),c.put(m,p),!(h||p.indexed))continue;let R=new Tj.OpenDBIObject(!h,h);R.encoding="binary",R.compression=E;let S=n.openDB(m,R);S.decoder=null,S.decoderCopies=!1,S.encoding="binary",R.compression=_;let y=o.openDB(m,R);y.encoder=null,console.log("copying",m,"from",e,"to",t),await f(S,y,h,d)}if(i){let m=n.openDB(Oy.AUDIT_STORE_NAME,Zm);console.log("copying audit log for",e,"to",t),f(i,m,!1,d)}async function f(m,p,h,E){let _=0,R=0,S=0,y=1e7,w=null;for(;y-- >0;)try{for(let I of m.getKeys({start:w,transaction:E}))try{w=I;let{value:H,version:X}=m.getEntry(I,{transaction:E});if(H?.length<14&&h){S++;continue}l=p.put(I,H,h?X:void 0),_++,E.openTimer&&(E.openTimer=0),R+=(I?.length||10)+H.length,u++>5e3&&(await l,console.log("copied",_,"entries",S,"delete records,",R,"bytes"),u=0)}catch(H){console.error("Error copying record",typeof I=="symbol"?"symbol":I,"from",e,"to",t,H)}console.log("finish copying, copied",_,"entries",S,"delete records,",R,"bytes");return}catch{if(typeof w=="string"){if(w==="z")return console.error("Reached end of dbi",w,"for",e,"to",t);w=w.slice(0,-2)+"z"}else if(typeof w=="number")w++;else return console.error("Unknown key type",w,"for",e,"to",t)}}a(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),o.close()}}var gj,Cy,lu,XP,Sj,Tj,Oy,yj,ZP,Ta,tL=se(()=>{Oe();gj=require("lmdb"),Cy=require("path"),lu=require("fs-extra"),XP=b(fe()),Sj=b(mp()),Tj=b(fp()),Oy=b(Jt());G();Ki();yj=b(Yl()),ZP=b(_t()),Ta=b(Q());a(xEe,"compactOnStart");a(_j,"getTotalDBRecordCount");a(Lf,"noop");a(Rj,"copyDb")});var nL=M((kke,bj)=>{"use strict";var rE=fe();rE.initSync();var Df=require("fs-extra"),rL=require("path"),vf=(G(),D(j)),BEe=require("crypto"),FEe=require("uuid").v4;bj.exports=kEe;function kEe(){if(rE.getHdbBasePath()!==void 0){let e=rL.join(rE.getHdbBasePath(),vf.LICENSE_KEY_DIR_NAME,vf.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=rL.join(rE.getHdbBasePath(),vf.LICENSE_KEY_DIR_NAME,vf.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=rL.join(rE.getHdbBasePath(),vf.LICENSE_KEY_DIR_NAME,vf.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Df.accessSync(r),Df.accessSync(e),Df.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=FEe(),i=BEe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Df.writeFileSync(r,s),Df.writeFileSync(e,i.privateKey),Df.writeFileSync(t,i.publicKey)}else throw n}}}a(kEe,"checkJWTTokenExist")});var Ij=M((Gke,Aj)=>{"use strict";var sL=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};Aj.exports={HdbInfoInsertObject:sL}});var Cj=M(($ke,Nj)=>{"use strict";var wj=(G(),D(j)),iL=class{static{a(this,"UpgradeObject")}constructor(t,r){this[wj.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[wj.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};Nj.exports={UpgradeObject:iL}});var Py=M((Kke,Pj)=>{"use strict";var js=require("prompt"),Mf=require("chalk"),Oj=Q(),Ii=require("os"),oL=rl(),aL=["yes","y"];async function HEe(e){let t=`${Ii.EOL}`+Mf.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Ii.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ii.EOL}${Ii.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Ii.EOL}`;js.override=oL(["CONFIRM_UPGRADE"]),js.start(),js.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Mf.magenta(`${Ii.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 Oj.error("There was an error when prompting user about an upgrade."),Oj.error(s),!1}return aL.includes(n.CONFIRM_UPGRADE)}a(HEe,"forceUpdatePrompt");async function GEe(e){let t=`${Ii.EOL}`+Mf.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ii.EOL}`);js.override=oL(["CONFIRM_DOWNGRADE"]),js.start(),js.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Mf.magenta(`${Ii.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 aL.includes(n.CONFIRM_DOWNGRADE)}a(GEe,"forceDowngradePrompt");async function qEe(){let e=`${Ii.EOL}`+Mf.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");js.override=oL(["GENERATE_CERTS"]),js.start(),js.message=e;let t={properties:{GENERATE_CERTS:{description:Mf.magenta(`${Ii.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 aL.includes(r.GENERATE_CERTS)}a(qEe,"upgradeCertsPrompt");Pj.exports={forceUpdatePrompt:HEe,forceDowngradePrompt:GEe,upgradeCertsPrompt:qEe}});var Ly=M((Wke,Lj)=>{"use strict";var cL=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};Lj.exports=cL});var vj=M((Zke,Dj)=>{"use strict";var $Ee=ae(),VEe=_t(),zke=Q(),Jke=require("path"),Qke=require("fs"),Xke=(G(),D(j));Dj.exports={getOldPropsValue:KEe};function KEe(e,t,r=!1){let n=t.getRaw(e);return $Ee.isNotEmptyAndHasValue(n)?n:r?VEe.getDefaultConfig(e):""}a(KEe,"getOldPropsValue")});var Bj=M((tHe,xj)=>{"use strict";var vc=require("path"),Mc=require("fs-extra"),YEe=require("properties-reader"),WEe=Ly(),Tr=Q(),{getOldPropsValue:St}=vj(),{HDB_SETTINGS_NAMES:be,CONFIG_PARAMS:uu}=(G(),D(j)),du=_t(),Dy=fe(),Mj=ae(),yo=(G(),D(j)),lL=new WEe("3.1.0"),Uj=[];function jEe(){let e=YEe(Dy.get(be.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Tr.info(t);let r=` ;Settings for the HarperDB process.
|
|
22
22
|
|
|
23
23
|
;The directory selected during install where the database files reside.
|
|
24
24
|
${be.HDB_ROOT_KEY} = ${St(be.HDB_ROOT_KEY,e)}
|
|
@@ -87,18 +87,18 @@ ${be.CUSTOM_FUNCTIONS_PORT_KEY} = ${du.getDefaultConfig(uu.HTTP_PORT)}
|
|
|
87
87
|
${be.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${vc.join(St(be.HDB_ROOT_KEY,e),"custom_functions")}
|
|
88
88
|
;Set the max number of processes HarperDB will start for the Custom Functions server
|
|
89
89
|
${be.MAX_CUSTOM_FUNCTION_PROCESSES} = ${du.getDefaultConfig(uu.HTTP_THREADS)}
|
|
90
|
-
`,n=Dy.get("settings_path"),s=vc.dirname(n),i=vc.join(s,"3_1_0_upgrade_settings.bak");try{Tr.info(`Backing up old settings file to: ${i}`),Mc.copySync(n,i)}catch(c){throw Tr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Tr.info("New settings file values for 3.1.0 upgrade:",r),Tr.info(`Creating new/upgraded settings file at '${n}'`),Mc.writeFileSync(n,r),Tr.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),Tr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Tr.error(c),Mc.copySync(i,n),c}Dy.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),Tr.info(o),o}a(jEe,"updateSettingsFile310");function zEe(){let e=vc.join(Mj.getHomeDir(),yo.HDB_HOME_DIR_NAME,yo.LICENSE_KEY_DIR_NAME,yo.LICENSE_FILE_NAME),t=vc.join(Mj.getHomeDir(),yo.HDB_HOME_DIR_NAME,yo.LICENSE_KEY_DIR_NAME,yo.REG_KEY_FILE_NAME),r=vc.join(Dy.getHdbBasePath(),yo.LICENSE_KEY_DIR_NAME,yo.LICENSE_FILE_NAME),n=vc.join(r,yo.LICENSE_FILE_NAME),s=vc.join(r,yo.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Tr.info(i);let o="Creating .license directory";console.log(o),Tr.info(o),Mc.mkdirpSync(r);try{Mc.accessSync(e);try{let c="Moving licence file";console.log(c),Tr.info(c),Mc.moveSync(e,n);let l="License file successfully moved.";console.log(l),Tr.info(l)}catch{let l="moving license file failed";console.error(l),Tr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Tr.warn(l)}try{Mc.accessSync(t);try{let c="Moving registration file";console.log(c),Tr.info(c),Mc.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Tr.info(l)}catch{let l="moving registration file failed";console.error(l),Tr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Tr.warn(l)}}a(zEe,"moveLicenseFiles");lL.sync_functions.push(jEe);lL.sync_functions.push(zEe);Uj.push(lL);xj.exports=Uj});var qj=M((nHe,Gj)=>{"use strict";var bs=gt(),{insertRecords:JEe}=Il(),QEe=xn(),Uc=Jt(),XEe=ae(),
|
|
90
|
+
`,n=Dy.get("settings_path"),s=vc.dirname(n),i=vc.join(s,"3_1_0_upgrade_settings.bak");try{Tr.info(`Backing up old settings file to: ${i}`),Mc.copySync(n,i)}catch(c){throw Tr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Tr.info("New settings file values for 3.1.0 upgrade:",r),Tr.info(`Creating new/upgraded settings file at '${n}'`),Mc.writeFileSync(n,r),Tr.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),Tr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Tr.error(c),Mc.copySync(i,n),c}Dy.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),Tr.info(o),o}a(jEe,"updateSettingsFile310");function zEe(){let e=vc.join(Mj.getHomeDir(),yo.HDB_HOME_DIR_NAME,yo.LICENSE_KEY_DIR_NAME,yo.LICENSE_FILE_NAME),t=vc.join(Mj.getHomeDir(),yo.HDB_HOME_DIR_NAME,yo.LICENSE_KEY_DIR_NAME,yo.REG_KEY_FILE_NAME),r=vc.join(Dy.getHdbBasePath(),yo.LICENSE_KEY_DIR_NAME,yo.LICENSE_FILE_NAME),n=vc.join(r,yo.LICENSE_FILE_NAME),s=vc.join(r,yo.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Tr.info(i);let o="Creating .license directory";console.log(o),Tr.info(o),Mc.mkdirpSync(r);try{Mc.accessSync(e);try{let c="Moving licence file";console.log(c),Tr.info(c),Mc.moveSync(e,n);let l="License file successfully moved.";console.log(l),Tr.info(l)}catch{let l="moving license file failed";console.error(l),Tr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Tr.warn(l)}try{Mc.accessSync(t);try{let c="Moving registration file";console.log(c),Tr.info(c),Mc.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Tr.info(l)}catch{let l="moving registration file failed";console.error(l),Tr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Tr.warn(l)}}a(zEe,"moveLicenseFiles");lL.sync_functions.push(jEe);lL.sync_functions.push(zEe);Uj.push(lL);xj.exports=Uj});var qj=M((nHe,Gj)=>{"use strict";var bs=gt(),{insertRecords:JEe}=Il(),QEe=xn(),Uc=Jt(),XEe=ae(),ya=Q(),ZEe=ae(),Ro=require("fs-extra"),Ra=require("path"),e_e=require("cli-progress"),nE=require("assert"),t_e=require("pino"),r_e=fe();Gj.exports=n_e;var vy,Fj,My,uL,In,sE=!1;async function n_e(e=!0){return vy=r_e.getHdbBasePath(),Fj=Ra.join(vy,"schema"),My=Ra.join(vy,"4_0_0_upgrade_tmp"),uL=Ra.join(vy,"transactions"),console.info("Reindexing upgrade started for schemas"),ya.notify("Reindexing upgrade started for schemas"),await kj(Fj,!1,e),await Ro.pathExists(uL)&&(console.info(`
|
|
91
91
|
|
|
92
|
-
Reindexing upgrade started for transaction logs`),
|
|
93
|
-
install_user = ${l}`;try{xc.writeFileSync(o,u)}catch(f){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),f}try{dL.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{xc.removeSync(r),console.log(d),fu.info(d)}catch(f){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),f}}a(b_e,"updateSettingsFile400");aE.async_functions.push(b_e);aE.async_functions.push(y_e);aE.async_functions.push(S_e);aE.async_functions.push(R_e);Kj.push(aE);Yj.exports=Kj});var Qj=M((cHe,Jj)=>{var A_e=Ly(),{databases:I_e,table:w_e}=(Oe(),D(mt)),N_e=to(),fL=Q(),jj=new A_e("4.7.0"),zj=[];async function C_e(){let e=I_e.system?.hdb_license;if(!e){fL.debug?.("system.hdb_license table not found; no migration necessary");return}return fL.debug?.("Dropping existing system.hdb_license table"),await e.dropTable(),fL.debug?.("Creating new usage block system.hdb_license table"),w_e(N_e.hdb_license)}a(C_e,"convertToUsageBlockLicenses");jj.async_functions.push(C_e);zj.push(jj);Jj.exports=zj});var mL=M((uHe,rz)=>{"use strict";var mu=ae(),O_e=(G(),D(j)),Xj=Q(),{DATA_VERSION:P_e,UPGRADE_VERSION:L_e}=O_e.UPGRADE_JSON_FIELD_NAMES_ENUM,Zj=Bj(),By=Wj(),ez=Qj(),Bc=new Map;Zj&&Zj.forEach(e=>{Bc.set(e.version,e)});By&&By.forEach(e=>{Bc.set(e.version,e)});By&&By.forEach(e=>{Bc.set(e.version,e)});ez&&ez.forEach(e=>{Bc.set(e.version,e)});function D_e(){return[...Bc.keys()].sort(mu.compareVersions)}a(D_e,"getSortedVersions");function tz(e){let t=e[P_e],r=e[L_e];return mu.isEmptyOrZeroLength(t)||mu.isEmptyOrZeroLength(r)?(Xj.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),Xj.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."),[]):[...Bc.keys()].sort(mu.compareVersions).filter(function(n){return mu.compareVersions(n,t)>0&&mu.compareVersions(n,r)<=0})}a(tz,"getVersionsForUpgrade");function v_e(e){return tz(e).length>0}a(v_e,"hasUpgradesRequired");function M_e(e){return mu.isEmptyOrZeroLength(e)?null:Bc.has(e)?Bc.get(e):null}a(M_e,"getDirectiveByVersion");rz.exports={getSortedVersions:D_e,getDirectiveByVersion:M_e,getVersionsForUpgrade:tz,hasUpgradesRequired:v_e}});var ky=M((fHe,az)=>{"use strict";var U_e=require("util"),pL=require("chalk"),x_e=require("os"),sz=Vn(),B_e=Sn(),As=(G(),D(j)),iz=Ij(),EL=eN(),{UpgradeObject:nz}=Cj(),{forceDowngradePrompt:F_e}=Py(),{packageJson:k_e}=yt(),Fy=Q(),Uf=ae(),_L=pi(),H_e=(Oe(),D(mt)),G_e=mL(),q_e=U_e.promisify(_L.setSchemaDataToGlobal),$_e=B_e.searchByValue,V_e="info_id",K_e="2.9.9",Y_e="3.0.0";async function W_e(e){let t=new iz.HdbInfoInsertObject(1,e,e),r=new EL.InsertObject(As.OPERATIONS_ENUM.INSERT,As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,As.INFO_TABLE_HASH_ATTRIBUTE,[t]);return _L.setSchemaDataToGlobal(),sz.insert(r)}a(W_e,"insertHdbInstallInfo");async function hL(e){let t,r=await oz(),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 iz.HdbInfoInsertObject(i,e,e);let o=new EL.InsertObject(As.OPERATIONS_ENUM.INSERT,As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,As.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await q_e(),sz.insert(o)}a(hL,"insertHdbUpgradeInfo");async function oz(){let e=new EL.NoSQLSeachObject(As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,V_e,As.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await $_e(e))}catch(r){console.error(r)}return t}a(oz,"getAllHdbInfoRecords");async function j_e(){let e=await oz();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(j_e,"getLatestHdbInfoRecord");async function z_e(){Fy.info("Checking if HDB software has been updated");try{let e=k_e.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await j_e(),r;if(Uf.isEmpty(t))r=K_e;else if(r=t.data_version_num,Uf.compareVersions(r.toString(),e.toString())>0){if(!Uf.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(pL.yellow(`This instance's data was last run on version ${r}`)),console.error(pL.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.${x_e.EOL}${As.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Uf.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(pL.yellow(`This instance's data was last run on version ${r}`)),await F_e(new nz(r,e))?await hL(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(_L.setSchemaDataToGlobal(),J_e(r),e.toString()===r.toString())return;let n=new nz(r,e);if(G_e.hasUpgradesRequired(n))return n;Uf.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await hL(n.upgrade_version),Fy.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw Fy.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Fy.fatal(e),e}}a(z_e,"getVersionUpdateInfo");function J_e(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${As.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in H_e.databases.system))throw console.log(t),new Error(t);if(!Uf.isEmpty(e)&&e<Y_e)throw console.log(t),new Error(t)}a(J_e,"checkIfInstallIsSupported");az.exports={insertHdbInstallInfo:W_e,insertHdbUpgradeInfo:hL,getVersionUpdateInfo:z_e}});var dz=M((pHe,uz)=>{"use strict";var Hy=require("joi"),{boolean:Q_e,string:gL,number:X_e}=Hy.types(),cz=require("fs-extra"),cE=(G(),D(j)),lz=require("path"),Z_e=ft();uz.exports=ege;function ege(e){let t=gL.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=Hy.object({[cE.INSTALL_PROMPTS.ROOTPATH]:Hy.custom(tge),[cE.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:Hy.alternatives([X_e.min(0),gL]).allow("null",null),[cE.INSTALL_PROMPTS.TC_AGREEMENT]:gL.valid("yes","YES","Yes"),[cE.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[cE.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Q_e});return Z_e.validateBySchema(e,r)}a(ege,"installValidator");function tge(e,t){if(cz.existsSync(lz.join(e,"system/hdb_user/data.mdb"))||cz.existsSync(lz.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(tge,"validateRootAvailable")});var mz=M((EHe,fz)=>{"use strict";var{mkdirpSync:rge,copySync:nge}=require("fs-extra"),Fc=require("path"),lE=(G(),D(j)),{PACKAGE_ROOT:sge}=yt(),TL=Q(),ige=ms(),SL=to(),oge=Rt(),{NON_REPLICATING_SYSTEM_TABLES:age}=(Oe(),D(mt));fz.exports=cge;async function cge(e){TL.trace("Mounting HarperDB"),pu(e),pu(Fc.join(e,"backup")),pu(Fc.join(e,"keys")),pu(Fc.join(e,"keys",lE.LICENSE_FILE_NAME)),pu(Fc.join(e,"log")),pu(Fc.join(e,"database")),pu(Fc.join(e,"components")),nge(Fc.resolve(sge,"./utility/install/README.md"),Fc.join(e,"README.md")),await lge()}a(cge,"mountHdb");async function lge(){let e=wp(),t=Object.keys(SL);for(let r of t){let n=SL[r].hash_attribute;try{oge.initSystemSchemaPaths(lE.SYSTEM_SCHEMA_NAME,r);let s=new e(lE.SYSTEM_SCHEMA_NAME,r,n);s.attributes=SL[r].attributes;let i=s.attributes.find(({attribute:o})=>o===n);i.isPrimaryKey=!0,age.includes(r)||(s.audit=!0),await ige.createTable(r,s)}catch(s){throw TL.error(`issue creating environment for ${lE.SYSTEM_SCHEMA_NAME}.${r}: ${s}`),s}}}a(lge,"createLMDBTables");function pu(e){rge(e,{mode:lE.HDB_FILE_PERMISSIONS}),TL.info(`Directory ${e} created`)}a(pu,"makeDirectory")});var Nz=M((THe,wz)=>{"use strict";var bL=require("os"),gz=require("inquirer"),Js=require("fs-extra"),uge=require("properties-reader"),Eu=require("chalk"),Ao=require("path"),dge=require("human-readable-ids").hri,yL,fge=require("yaml"),yr=Q(),kc=fe(),uE=ae(),qy=rl(),Sz=ky(),{packageJson:Tz}=yt(),pe=(G(),D(j)),{CONFIG_PARAM_MAP:gHe,CONFIG_PARAMS:$t}=pe,mge=dz(),pge=mz(),AL=_t(),hge=(hs(),D(co)),Ege=ah(),_ge=nL(),gge=pi(),Sge=require("util").promisify,Tge=Sge(gge.setSchemaDataToGlobal),pz=Ts(),hu=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),un=a(e=>Eu.magenta.bold(e),"HDB_PROMPT_MSG"),yge="https://harperdb.io/legal/end-user-license-agreement",Hc=bL.EOL,Ra="",Rge="yes",hz="Starting HarperDB install...",Ez="HarperDB installation was successful.",_z="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",bge="An out of date version of HarperDB is already installed.",RL="It appears that HarperDB is already installed. Exiting install...",Age="Aborting install",SHe=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])$/),Ige=new RegExp(/^[^\s.,*>]+$/),wge=bL.homedir(),Nge=Ao.join(wge,pe.HDB_ROOT_DIR_NAME),Cge="HDB_ADMIN",Oge="CLUSTER_USER",Pge="dev",Lge="localhost",Gy={[$t.HTTP_CORS]:!0,[$t.HTTP_CORSACCESSLIST]:["*"],[$t.HTTP_PORT]:9926,[$t.AUTHENTICATION_AUTHORIZELOCAL]:!0,[$t.THREADS_COUNT]:1,[$t.THREADS_DEBUG]:!0,[$t.LOGGING_STDSTREAMS]:!0,[$t.LOGGING_LEVEL]:"info",[$t.OPERATIONSAPI_NETWORK_PORT]:9925,[$t.LOCALSTUDIO_ENABLED]:!0},ln={DESTINATION:"Please enter a destination for HarperDB:",HDB_USERNAME:"Please enter a username for the administrative user:",HDB_PASS:"Please enter a password for the administrative user:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:",DEFAULTS_MODE:"Default Config - dev (easy access/debugging) or prod (security/performance): (dev/prod)",REPLICATION_HOSTNAME:"Please enter the hostname for this server:"},Gc=qy([pe.INSTALL_PROMPTS.HDB_CONFIG]),bo,yz=!1,IL=!1,Rz=!1;wz.exports={install:bz,updateConfigEnv:qge,setIgnoreExisting:$ge};bz.createSuperUser=Iz;async function bz(){console.log(un(Hc+hz+Hc)),yr.notify(hz);let e;Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&(e=Dge());let t=Mge();Object.assign(t,e),t[pe.INSTALL_PROMPTS.TC_AGREEMENT]&&t[pe.INSTALL_PROMPTS.ROOTPATH]&&t[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[pe.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(Rz=!0,t[pe.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=mge(t);if(r)throw r.message;await Uge(),await xge(t);let n=await vge(t);bo=n[pe.INSTALL_PROMPTS.ROOTPATH],Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&Ao.dirname(Gc[pe.INSTALL_PROMPTS.HDB_CONFIG])===bo&&(yz=!0),!IL&&!Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&await Js.pathExists(Ao.join(bo,pe.HDB_CONFIG_FILE))&&(console.error(RL),process.exit()),yL||(yL=(await import("ora")).default);let s=yL({prefixText:un("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),uE.isEmpty(bo))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");kc.setHdbBasePath(bo),await pge(bo),await Bge(),await Fge(n),yr.initLogSettings(!0),await Iz(n),await Hge(n),await pz.updateConfigCert(),await pz.generateCertsKeys(),await Gge(),_ge(),s.stop(),console.log(un(Hc+Ez+Hc)),yr.notify(Ez)}a(bz,"install");function Dge(){let e=fge.parseDocument(Js.readFileSync(Gc[pe.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=AL.flattenConfig(e.toJSON());return t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(Dge,"getConfigFromFile");async function vge(e){yr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:hu,when:ba(e[pe.INSTALL_PROMPTS.ROOTPATH],ln.DESTINATION),name:pe.INSTALL_PROMPTS.ROOTPATH,prefix:Ra,default:Nge,validate:a(async s=>zs(s)?zs(s):await Js.pathExists(Ao.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:un(ln.DESTINATION)},{type:"input",transformer:hu,when:ba(e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],ln.HDB_USERNAME),name:pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Ra,default:Cge,validate:a(s=>zs(s)?zs(s):(t=s,!0),"validate"),message:un(ln.HDB_USERNAME)},{type:"password",when:ba(e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],ln.HDB_PASS),name:pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Ra,validate:a(s=>zs(s)?zs(s):!0,"validate"),message:un(ln.HDB_PASS)},{type:"input",transformer:hu,when:ba(e[pe.INSTALL_PROMPTS.DEFAULTS_MODE],ln.DEFAULTS_MODE),name:pe.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:Ra,default:Pge,validate:a(s=>zs(s)?zs(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:un(ln.DEFAULTS_MODE)}];if(Rz||r.push({type:"input",name:pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:hu,when:ba(e[pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME],ln.REPLICATION_HOSTNAME),prefix:Ra,default:Lge,message:un(ln.REPLICATION_HOSTNAME)}),uE.autoCastBoolean(e[pe.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:hu,when:ba(e[pe.INSTALL_PROMPTS.CLUSTERING_NODENAME],ln.NODE_NAME),name:pe.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Ra,default:dge.random(),validate:a(i=>Ige.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:un(ln.NODE_NAME)},{type:"input",transformer:hu,when:ba(e[pe.INSTALL_PROMPTS.CLUSTERING_USER],ln.CLUSTER_USERNAME),name:pe.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Ra,default:Oge,validate:a(i=>zs(i)?zs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:un(ln.CLUSTER_USERNAME)},{type:"password",when:ba(e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD],ln.CLUSTER_PASS),name:pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Ra,validate:a(i=>zs(i)?zs(i):!0,"validate"),message:un(ln.CLUSTER_PASS)}];r.push(...s)}let n=await gz.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}a(vge,"installPrompts");function ba(e,t){return e!==void 0?(t.includes("password")?(console.log(`${un(t)} ${Eu.gray("[hidden]")}`),yr.trace(`${un(t)} [hidden]`)):(console.log(`${un(t)} ${e}`),yr.trace(`${un(t)} ${e}`)),!1):!0}a(ba,"displayCmdEnvVar");function zs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(zs,"checkForEmptyValue");function Mge(){let e=Object.keys(pe.INSTALL_PROMPTS),t=qy(e),r=qy(Object.keys(pe.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=pe.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(Mge,"checkForPromptOverride");async function Uge(){yr.trace("Checking for existing install.");let e=uE.getPropsFilePath(),t=await Js.pathExists(e),r;if(t){yr.trace(`Install found an existing boot prop file at:${e}`);let n=uge(e),s=AL.getConfigValue(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Js.pathExists(s)}if(!t&&uE.noBootFile()&&(r=!0),r&&!IL){if(yr.trace(`Install found existing HDB config at:${e}`),await Sz.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${Tz.version}. Exiting install...`;console.log(Hc+Eu.magenta.bold(bge)),console.log(Eu.magenta.bold(s)),yr.error(s)}else console.log(Hc+Eu.magenta.bold(RL)),yr.error(RL);process.exit(0)}}a(Uge,"checkForExistingInstall");async function xge(e){yr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${yge}${Hc}and can be viewed by typing or copying and pasting the URL into your web browser.${Hc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:Ra,transformer:hu,when:ba(e[pe.INSTALL_PROMPTS.TC_AGREEMENT],t),name:pe.INSTALL_PROMPTS.TC_AGREEMENT,message:un(t),validate:a(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:Eu.yellow("Please enter 'yes' or 'no'"),"validate")},n=await gz.prompt([r]);n[pe.INSTALL_PROMPTS.TC_AGREEMENT]&&n[pe.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Rge&&(console.log(Eu.yellow(_z)),yr.error(_z),process.exit(0))}a(xge,"termsAgreement");async function Bge(){let e=Ao.join(bo,pe.HDB_CONFIG_FILE),t;try{t=bL.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
|
|
94
|
-
install_user = ${t}`,n=uE.getHomeDir(),s=Ao.join(n,pe.HDB_HOME_DIR_NAME),i=Ao.join(s,pe.LICENSE_KEY_DIR_NAME);try{Js.mkdirpSync(s,{mode:pe.HDB_FILE_PERMISSIONS}),Js.mkdirpSync(i,{mode:pe.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${pe.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Ao.join(s,pe.BOOT_PROPS_FILE_NAME);try{await Js.writeFile(o,r)}catch(c){throw yr.error(`There was an error creating the boot file at path: ${o}`),c}kc.setProperty(pe.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),kc.setProperty(pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),kc.setProperty(kc.BOOT_PROPS_FILE_PATH,o)}}a(Bge,"createBootPropertiesFile");async function Fge(e){yr.trace("Creating HarperDB config file");let t=qy(Object.keys(pe.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[pe.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in Gy){if(r===$t.HTTP_PORT&&t[$t.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??Gy[r],t[$t.HTTP_SECUREPORT]=null;continue}else if(r===$t.HTTP_PORT)continue;if(r===$t.OPERATIONSAPI_NETWORK_PORT&&t[$t.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??Gy[r],t[$t.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===$t.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=Gy[r])}}else t[$t.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[$t.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[$t.HTTP_PORT.toLowerCase()]&&(t[$t.HTTP_SECUREPORT]=null);try{Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]||AL.createConfigFile(t),kc.initSync()}catch(r){kge(r)}}a(Fge,"createConfigFile");function kge(e){yr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Age);let t=Ao.resolve(kc.get(kc.BOOT_PROPS_FILE_PATH),"../");t&&Js.removeSync(t),bo&&(yz?Js.readdirSync(bo,{withFileTypes:!0}).forEach(n=>{let s=Ao.join(n.path,n.name);s!==Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&Js.removeSync(s)}):Js.removeSync(bo)),process.exit(1)}a(kge,"rollbackInstall");async function Az(e,t){yr.trace("Creating admin user"),await Tge();let r;try{r=await Ege.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 hge.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(Az,"createAdminUser");async function Iz(e){yr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await Az(t,r),delete e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(Iz,"createSuperUser");async function Hge(e){yr.trace("Creating Cluster user.");let t;e[pe.INSTALL_PROMPTS.CLUSTERING_USER]&&e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[pe.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await Az({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[pe.INSTALL_PROMPTS.CLUSTERING_USER],delete e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(Hge,"createClusterUser");async function Gge(){let e=Tz.version;if(e)await Sz.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(Gge,"insertHdbVersionInfo");function qge(e){Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]=e}a(qge,"updateConfigEnv");function $ge(e){IL=e}a($ge,"setIgnoreExisting")});var NL={};ye(NL,{isHdbInstalled:()=>Vge});function Vge(e,t){try{wL.default.statSync((0,$y.getPropsFilePath)()),wL.default.statSync(e.get(Tm.SETTINGS_PATH_KEY))}catch(r){if((0,$y.noBootFile)())return!0;if(r.code==="ENOENT")return!1;throw t.error(`Error checking for HDB install - ${r}`),r}return!0}var wL,$y,CL=se(()=>{G();wL=b(require("node:fs")),$y=b(ae());a(Vge,"isHdbInstalled")});var Pz=M((bHe,Oz)=>{"use strict";var OL=ae(),Is=Q(),Cz=mL();Oz.exports={processDirectives:Kge};async function Kge(e){console.log("Starting upgrade process...");let t=Cz.getVersionsForUpgrade(e),r=jge(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;Is.notify(c),console.log(c);let l=[],u=[];try{l=Yge(o.sync_functions)}catch(d){throw Is.error(`Error while running an upgrade script for ${o.version}`),d}try{u=await Wge(o.async_functions)}catch(d){throw Is.error(`Error while running an upgrade script for ${o.version}`),d}n.push(...l,...u)}return n}a(Kge,"processDirectives");function Yge(e){if(OL.isEmptyOrZeroLength(e))return Is.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Is.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Is.info(`Running function ${r.name}`),!(r instanceof Function)){Is.info("Variable being processed is not a function");continue}let n=r();Is.info(n),t.push(n)}return t}a(Yge,"runSyncFunctions");async function Wge(e){if(OL.isEmptyOrZeroLength(e))return Is.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Is.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(Is.info(`Running function ${s.name}`),!(s instanceof Function)){Is.info("Variable being processed is not a function");continue}let i=await s();Is.info(i),t.push(i)}return t}a(Wge,"runAsyncFunctions");function jge(e){if(OL.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=Cz.getDirectiveByVersion(r);n&&t.push(n)}return t}a(jge,"getUpgradeDirectivesToInstall")});var xz=M((wHe,Uz)=>{"use strict";var vz=fe();vz.initSync();var zge=require("chalk"),
|
|
92
|
+
Reindexing upgrade started for transaction logs`),ya.notify("Reindexing upgrade started for transaction logs"),await kj(uL,!0,e)),ya.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(sE?", but errors occurred":"")}a(n_e,"reindexUpgrade");async function kj(e,t,r){let n=await Ro.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=Ra.join(e,o.toString());if(o===".DS_Store")continue;let l=await Ro.readdir(c),u=l.length;for(let d=0;d<u;d++){let f=l[d];if(f!==".DS_Store"&&Ro.statSync(Ra.join(c,f)).isDirectory())try{await s_e(o,f,t),In.info(`Reindexing started for ${o}.${f}`),ya.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${f}`),await o_e(o,f,c,t,r),In.info(`Reindexing completed for ${o}.${f}`),ya.notify(`Reindexing completed for ${o}.${f}`)}catch(m){sE=!0,m.schema_path=c,m.table_name=f,ya.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),ya.error(m),In.error(m),console.error(m)}}}if(!sE)try{await Ro.rm(My,{recursive:!0})}catch{}}a(kj,"processTables");async function s_e(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Ra.join(My,s);await Ro.ensureDir(My),await Ro.writeFile(i,""),In=t_e({level:"debug",formatters:{bindings(){}}},i)}a(s_e,"initPinoLogger");var i_e=20;async function o_e(e,t,r,n,s){let i;try{i=await bs.openEnvironment(r,t,n)}catch(S){if(S.message==="MDB_INVALID: File is not an LMDB file"){ya.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),In.error(S);return}throw S}let o=l_e(i.dbis),c=bs.openDBI(i,o),l=Object.keys(i.dbis),u=bs.statDBI(i,o);In.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new e_e.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});d.start(u.entryCount,0,{});let f=await bs.createEnvironment(r,t,!1);bs.createDBI(f,o,!1,!0);let m=[];try{for(let S of c.getRange({start:!1}))S.value={...S.value},m.push(S),n||e==="system"&&(t==="hdb_schema"&&(S.key=S.key.toString(),S.value.name=S.value.name.toString()),t==="hdb_table"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.name=S.value.name.toString()),t==="hdb_attribute"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.table=S.value.table.toString(),S.value.attribute=S.value.attribute.toString())),m.length>i_e&&await p();await p()}catch(S){throw sE=!0,In.error(S),S}async function p(){let S,y=m.map(({value:I})=>I);n?S=await Promise.all(y.map(I=>a_e(f,I))):S=await JEe(f,o,l.filter(I=>I!=="__blob__"),y,!1);for(let I=0,H=m.length;I<H;I++){let{key:X,value:q}=m[I];In.info(`Record hash value: ${X} hash: ${o}`);let k;n?k=S[I]:k=S.written_hashes.indexOf(X)>-1,nE(k,!0),c_e(f,o,q[o],n),In.info(`Insert success, written hashes: ${S.written_hashes}`),d.increment()}m=[],d.value/d.total*100%10===0&&ya.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),In.info(`${d.value}/${d.total} records inserted`)}a(p,"finishOutstanding"),d.stop();let h=bs.statDBI(i,o),E=bs.statDBI(f,o);if(In.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${E.entryCount}`),nE.deepStrictEqual(h.entryCount,E.entryCount),await bs.closeEnvironment(i),await bs.closeEnvironment(f),delete global.lmdb_map[`${e}.${t}`],s){let S=Ra.join(r,t),y=Ra.join(S,"data.mdb"),w=Ra.join(S,"lock.mdb");await Ro.unlink(y),await Ro.unlink(w),await Ro.rmdir(S),In.info(`Deleted old environment files from schema folder: ${y}, ${w}`)}let _=await bs.openEnvironment(r,t),R=bs.statDBI(_,o);In.info(`New stats: ${JSON.stringify(E)}. New stats after move: ${JSON.stringify(R)}`),nE.deepStrictEqual(R.entryCount,E.entryCount),await bs.closeEnvironment(_),delete global.lmdb_map[`${e}.${t}`]}a(o_e,"processTable");async function a_e(e,t){bs.initializeDBIs(e,Uc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Uc.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Uc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Uc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),ZEe.isEmpty(t.user_name)||e.dbis[Uc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Uc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(a_e,"insertTransaction");function c_e(e,t,r,n){let i=e.dbis[t].get(r);nE.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Uc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Uc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,l]of o)if(c!==t&&e.dbis[c]!==void 0&&!XEe.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let f=l[u];Hj(e,c,f,r)}else Hj(e,c,l,r)}a(c_e,"validateIndices");function Hj(e,t,r,n){try{let s=!1,i=QEe.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||In.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),nE.deepStrictEqual(s,!0)}catch(s){sE=!0,In.error(s),console.error(s)}}a(Hj,"validateIndex");function l_e(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(l_e,"getHashDBI")});var Wj=M((oHe,Yj)=>{"use strict";var Uy=require("path"),xc=require("fs-extra"),u_e=Ly(),fu=Q(),$j=_t(),dL=fe(),wi=(G(),D(j)),xy=ae(),d_e=require("properties-reader"),f_e=fi(),m_e=YS(),p_e=Sn(),iHe=require("util"),h_e=p_e.searchByValue,E_e=Vn(),__e=Ty(),g_e=Dt(),S_e=qj(),Vj=Ts(),T_e=Py(),aE=new u_e("4.0.0"),Kj=[],iE,oE;async function y_e(){try{if(await T_e.upgradeCertsPrompt()){if(console.log("Generating new certificates."),iE){let t=xy.changeExtension(iE,".bak");await xc.move(iE,t)}if(oE){let t=xy.changeExtension(oE,".bak");await xc.move(oE,t)}await Vj.generateKeys()}else console.log("Using existing certificates."),Vj.updateConfigCert(iE,oE,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(y_e,"generateNewKeys");async function R_e(){console.log("Updating HarperDB nodes."),fu.info("Updating HarperDB nodes.");let e=[];try{let t=new f_e(wi.SYSTEM_SCHEMA_NAME,wi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await h_e(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!g_e.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let d=`Node name '${node_record.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(d),d}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let d=0,f=c.subscriptions.length;d<f;d++){let m=c.subscriptions[d],p=m.channel.split(":");u.push({schema:p[0],table:p[1],publish:m.publish,subscribe:m.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:wi.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(xy.isEmptyOrZeroLength(n))return;let s=new m_e(wi.SYSTEM_SCHEMA_NAME,wi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await E_e.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{__e.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(R_e,"updateNodes");async function b_e(){let e=dL.get(wi.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(Uy.join("config","settings.js"))){fu.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),fu.info(t);let r=Uy.dirname(e),n=dL.get(wi.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=Uy.join(n,"backup","4_0_0_upgrade_settings.bak"),i=Uy.join(n,wi.HDB_CONFIG_FILE);try{fu.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),xc.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{fu.info(`Creating new/upgraded settings file at '${new_settings_path}'`),console.log(`Creating new/upgraded settings file at '${new_settings_path}'`),fu.info("Updating env variables with new settings values");let f=$j.initOldConfig(e);iE=f[wi.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],oE=f[wi.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],$j.createConfigFile(f)}catch(f){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),f}let o=xy.getPropsFilePath();xc.accessSync(o,xc.constants.F_OK|xc.constants.R_OK);let l=d_e(o).get(wi.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
|
|
93
|
+
install_user = ${l}`;try{xc.writeFileSync(o,u)}catch(f){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),f}try{dL.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{xc.removeSync(r),console.log(d),fu.info(d)}catch(f){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),f}}a(b_e,"updateSettingsFile400");aE.async_functions.push(b_e);aE.async_functions.push(y_e);aE.async_functions.push(S_e);aE.async_functions.push(R_e);Kj.push(aE);Yj.exports=Kj});var Qj=M((cHe,Jj)=>{var A_e=Ly(),{databases:I_e,table:w_e}=(Oe(),D(mt)),N_e=to(),fL=Q(),jj=new A_e("4.7.0"),zj=[];async function C_e(){let e=I_e.system?.hdb_license;if(!e){fL.debug?.("system.hdb_license table not found; no migration necessary");return}return fL.debug?.("Dropping existing system.hdb_license table"),await e.dropTable(),fL.debug?.("Creating new usage block system.hdb_license table"),w_e(N_e.hdb_license)}a(C_e,"convertToUsageBlockLicenses");jj.async_functions.push(C_e);zj.push(jj);Jj.exports=zj});var mL=M((uHe,rz)=>{"use strict";var mu=ae(),O_e=(G(),D(j)),Xj=Q(),{DATA_VERSION:P_e,UPGRADE_VERSION:L_e}=O_e.UPGRADE_JSON_FIELD_NAMES_ENUM,Zj=Bj(),By=Wj(),ez=Qj(),Bc=new Map;Zj&&Zj.forEach(e=>{Bc.set(e.version,e)});By&&By.forEach(e=>{Bc.set(e.version,e)});By&&By.forEach(e=>{Bc.set(e.version,e)});ez&&ez.forEach(e=>{Bc.set(e.version,e)});function D_e(){return[...Bc.keys()].sort(mu.compareVersions)}a(D_e,"getSortedVersions");function tz(e){let t=e[P_e],r=e[L_e];return mu.isEmptyOrZeroLength(t)||mu.isEmptyOrZeroLength(r)?(Xj.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),Xj.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."),[]):[...Bc.keys()].sort(mu.compareVersions).filter(function(n){return mu.compareVersions(n,t)>0&&mu.compareVersions(n,r)<=0})}a(tz,"getVersionsForUpgrade");function v_e(e){return tz(e).length>0}a(v_e,"hasUpgradesRequired");function M_e(e){return mu.isEmptyOrZeroLength(e)?null:Bc.has(e)?Bc.get(e):null}a(M_e,"getDirectiveByVersion");rz.exports={getSortedVersions:D_e,getDirectiveByVersion:M_e,getVersionsForUpgrade:tz,hasUpgradesRequired:v_e}});var ky=M((fHe,az)=>{"use strict";var U_e=require("util"),pL=require("chalk"),x_e=require("os"),sz=Vn(),B_e=Sn(),As=(G(),D(j)),iz=Ij(),EL=eN(),{UpgradeObject:nz}=Cj(),{forceDowngradePrompt:F_e}=Py(),{packageJson:k_e}=yt(),Fy=Q(),Uf=ae(),_L=pi(),H_e=(Oe(),D(mt)),G_e=mL(),q_e=U_e.promisify(_L.setSchemaDataToGlobal),$_e=B_e.searchByValue,V_e="info_id",K_e="2.9.9",Y_e="3.0.0";async function W_e(e){let t=new iz.HdbInfoInsertObject(1,e,e),r=new EL.InsertObject(As.OPERATIONS_ENUM.INSERT,As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,As.INFO_TABLE_HASH_ATTRIBUTE,[t]);return _L.setSchemaDataToGlobal(),sz.insert(r)}a(W_e,"insertHdbInstallInfo");async function hL(e){let t,r=await oz(),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 iz.HdbInfoInsertObject(i,e,e);let o=new EL.InsertObject(As.OPERATIONS_ENUM.INSERT,As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,As.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await q_e(),sz.insert(o)}a(hL,"insertHdbUpgradeInfo");async function oz(){let e=new EL.NoSQLSeachObject(As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,V_e,As.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await $_e(e))}catch(r){console.error(r)}return t}a(oz,"getAllHdbInfoRecords");async function j_e(){let e=await oz();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(j_e,"getLatestHdbInfoRecord");async function z_e(){Fy.info("Checking if HDB software has been updated");try{let e=k_e.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await j_e(),r;if(Uf.isEmpty(t))r=K_e;else if(r=t.data_version_num,Uf.compareVersions(r.toString(),e.toString())>0){if(!Uf.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(pL.yellow(`This instance's data was last run on version ${r}`)),console.error(pL.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.${x_e.EOL}${As.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Uf.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(pL.yellow(`This instance's data was last run on version ${r}`)),await F_e(new nz(r,e))?await hL(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(_L.setSchemaDataToGlobal(),J_e(r),e.toString()===r.toString())return;let n=new nz(r,e);if(G_e.hasUpgradesRequired(n))return n;Uf.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await hL(n.upgrade_version),Fy.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw Fy.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Fy.fatal(e),e}}a(z_e,"getVersionUpdateInfo");function J_e(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${As.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in H_e.databases.system))throw console.log(t),new Error(t);if(!Uf.isEmpty(e)&&e<Y_e)throw console.log(t),new Error(t)}a(J_e,"checkIfInstallIsSupported");az.exports={insertHdbInstallInfo:W_e,insertHdbUpgradeInfo:hL,getVersionUpdateInfo:z_e}});var dz=M((pHe,uz)=>{"use strict";var Hy=require("joi"),{boolean:Q_e,string:gL,number:X_e}=Hy.types(),cz=require("fs-extra"),cE=(G(),D(j)),lz=require("path"),Z_e=ft();uz.exports=ege;function ege(e){let t=gL.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=Hy.object({[cE.INSTALL_PROMPTS.ROOTPATH]:Hy.custom(tge),[cE.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:Hy.alternatives([X_e.min(0),gL]).allow("null",null),[cE.INSTALL_PROMPTS.TC_AGREEMENT]:gL.valid("yes","YES","Yes"),[cE.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[cE.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Q_e});return Z_e.validateBySchema(e,r)}a(ege,"installValidator");function tge(e,t){if(cz.existsSync(lz.join(e,"system/hdb_user/data.mdb"))||cz.existsSync(lz.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(tge,"validateRootAvailable")});var mz=M((EHe,fz)=>{"use strict";var{mkdirpSync:rge,copySync:nge}=require("fs-extra"),Fc=require("path"),lE=(G(),D(j)),{PACKAGE_ROOT:sge}=yt(),TL=Q(),ige=ms(),SL=to(),oge=Rt(),{NON_REPLICATING_SYSTEM_TABLES:age}=(Oe(),D(mt));fz.exports=cge;async function cge(e){TL.trace("Mounting HarperDB"),pu(e),pu(Fc.join(e,"backup")),pu(Fc.join(e,"keys")),pu(Fc.join(e,"keys",lE.LICENSE_FILE_NAME)),pu(Fc.join(e,"log")),pu(Fc.join(e,"database")),pu(Fc.join(e,"components")),nge(Fc.resolve(sge,"./utility/install/README.md"),Fc.join(e,"README.md")),await lge()}a(cge,"mountHdb");async function lge(){let e=wp(),t=Object.keys(SL);for(let r of t){let n=SL[r].hash_attribute;try{oge.initSystemSchemaPaths(lE.SYSTEM_SCHEMA_NAME,r);let s=new e(lE.SYSTEM_SCHEMA_NAME,r,n);s.attributes=SL[r].attributes;let i=s.attributes.find(({attribute:o})=>o===n);i.isPrimaryKey=!0,age.includes(r)||(s.audit=!0),await ige.createTable(r,s)}catch(s){throw TL.error(`issue creating environment for ${lE.SYSTEM_SCHEMA_NAME}.${r}: ${s}`),s}}}a(lge,"createLMDBTables");function pu(e){rge(e,{mode:lE.HDB_FILE_PERMISSIONS}),TL.info(`Directory ${e} created`)}a(pu,"makeDirectory")});var Nz=M((THe,wz)=>{"use strict";var bL=require("os"),gz=require("inquirer"),Js=require("fs-extra"),uge=require("properties-reader"),Eu=require("chalk"),Ao=require("path"),dge=require("human-readable-ids").hri,yL,fge=require("yaml"),yr=Q(),kc=fe(),uE=ae(),qy=rl(),Sz=ky(),{packageJson:Tz}=yt(),pe=(G(),D(j)),{CONFIG_PARAM_MAP:gHe,CONFIG_PARAMS:$t}=pe,mge=dz(),pge=mz(),AL=_t(),hge=(hs(),D(co)),Ege=ah(),_ge=nL(),gge=pi(),Sge=require("util").promisify,Tge=Sge(gge.setSchemaDataToGlobal),pz=Ts(),hu=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),un=a(e=>Eu.magenta.bold(e),"HDB_PROMPT_MSG"),yge="https://harperdb.io/legal/end-user-license-agreement",Hc=bL.EOL,ba="",Rge="yes",hz="Starting HarperDB install...",Ez="HarperDB installation was successful.",_z="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",bge="An out of date version of HarperDB is already installed.",RL="It appears that HarperDB is already installed. Exiting install...",Age="Aborting install",SHe=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])$/),Ige=new RegExp(/^[^\s.,*>]+$/),wge=bL.homedir(),Nge=Ao.join(wge,pe.HDB_ROOT_DIR_NAME),Cge="HDB_ADMIN",Oge="CLUSTER_USER",Pge="dev",Lge="localhost",Gy={[$t.HTTP_CORS]:!0,[$t.HTTP_CORSACCESSLIST]:["*"],[$t.HTTP_PORT]:9926,[$t.AUTHENTICATION_AUTHORIZELOCAL]:!0,[$t.THREADS_COUNT]:1,[$t.THREADS_DEBUG]:!0,[$t.LOGGING_STDSTREAMS]:!0,[$t.LOGGING_LEVEL]:"info",[$t.OPERATIONSAPI_NETWORK_PORT]:9925,[$t.LOCALSTUDIO_ENABLED]:!0},ln={DESTINATION:"Please enter a destination for HarperDB:",HDB_USERNAME:"Please enter a username for the administrative user:",HDB_PASS:"Please enter a password for the administrative user:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:",DEFAULTS_MODE:"Default Config - dev (easy access/debugging) or prod (security/performance): (dev/prod)",REPLICATION_HOSTNAME:"Please enter the hostname for this server:"},Gc=qy([pe.INSTALL_PROMPTS.HDB_CONFIG]),bo,yz=!1,IL=!1,Rz=!1;wz.exports={install:bz,updateConfigEnv:qge,setIgnoreExisting:$ge};bz.createSuperUser=Iz;async function bz(){console.log(un(Hc+hz+Hc)),yr.notify(hz);let e;Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&(e=Dge());let t=Mge();Object.assign(t,e),t[pe.INSTALL_PROMPTS.TC_AGREEMENT]&&t[pe.INSTALL_PROMPTS.ROOTPATH]&&t[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[pe.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(Rz=!0,t[pe.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=mge(t);if(r)throw r.message;await Uge(),await xge(t);let n=await vge(t);bo=n[pe.INSTALL_PROMPTS.ROOTPATH],Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&Ao.dirname(Gc[pe.INSTALL_PROMPTS.HDB_CONFIG])===bo&&(yz=!0),!IL&&!Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&await Js.pathExists(Ao.join(bo,pe.HDB_CONFIG_FILE))&&(console.error(RL),process.exit()),yL||(yL=(await import("ora")).default);let s=yL({prefixText:un("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),uE.isEmpty(bo))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");kc.setHdbBasePath(bo),await pge(bo),await Bge(),await Fge(n),yr.initLogSettings(!0),await Iz(n),await Hge(n),await pz.updateConfigCert(),await pz.generateCertsKeys(),await Gge(),_ge(),s.stop(),console.log(un(Hc+Ez+Hc)),yr.notify(Ez)}a(bz,"install");function Dge(){let e=fge.parseDocument(Js.readFileSync(Gc[pe.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=AL.flattenConfig(e.toJSON());return t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(Dge,"getConfigFromFile");async function vge(e){yr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:hu,when:Aa(e[pe.INSTALL_PROMPTS.ROOTPATH],ln.DESTINATION),name:pe.INSTALL_PROMPTS.ROOTPATH,prefix:ba,default:Nge,validate:a(async s=>zs(s)?zs(s):await Js.pathExists(Ao.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:un(ln.DESTINATION)},{type:"input",transformer:hu,when:Aa(e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],ln.HDB_USERNAME),name:pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:ba,default:Cge,validate:a(s=>zs(s)?zs(s):(t=s,!0),"validate"),message:un(ln.HDB_USERNAME)},{type:"password",when:Aa(e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],ln.HDB_PASS),name:pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:ba,validate:a(s=>zs(s)?zs(s):!0,"validate"),message:un(ln.HDB_PASS)},{type:"input",transformer:hu,when:Aa(e[pe.INSTALL_PROMPTS.DEFAULTS_MODE],ln.DEFAULTS_MODE),name:pe.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:ba,default:Pge,validate:a(s=>zs(s)?zs(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:un(ln.DEFAULTS_MODE)}];if(Rz||r.push({type:"input",name:pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:hu,when:Aa(e[pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME],ln.REPLICATION_HOSTNAME),prefix:ba,default:Lge,message:un(ln.REPLICATION_HOSTNAME)}),uE.autoCastBoolean(e[pe.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:hu,when:Aa(e[pe.INSTALL_PROMPTS.CLUSTERING_NODENAME],ln.NODE_NAME),name:pe.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:ba,default:dge.random(),validate:a(i=>Ige.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:un(ln.NODE_NAME)},{type:"input",transformer:hu,when:Aa(e[pe.INSTALL_PROMPTS.CLUSTERING_USER],ln.CLUSTER_USERNAME),name:pe.INSTALL_PROMPTS.CLUSTERING_USER,prefix:ba,default:Oge,validate:a(i=>zs(i)?zs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:un(ln.CLUSTER_USERNAME)},{type:"password",when:Aa(e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD],ln.CLUSTER_PASS),name:pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:ba,validate:a(i=>zs(i)?zs(i):!0,"validate"),message:un(ln.CLUSTER_PASS)}];r.push(...s)}let n=await gz.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}a(vge,"installPrompts");function Aa(e,t){return e!==void 0?(t.includes("password")?(console.log(`${un(t)} ${Eu.gray("[hidden]")}`),yr.trace(`${un(t)} [hidden]`)):(console.log(`${un(t)} ${e}`),yr.trace(`${un(t)} ${e}`)),!1):!0}a(Aa,"displayCmdEnvVar");function zs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(zs,"checkForEmptyValue");function Mge(){let e=Object.keys(pe.INSTALL_PROMPTS),t=qy(e),r=qy(Object.keys(pe.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=pe.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(Mge,"checkForPromptOverride");async function Uge(){yr.trace("Checking for existing install.");let e=uE.getPropsFilePath(),t=await Js.pathExists(e),r;if(t){yr.trace(`Install found an existing boot prop file at:${e}`);let n=uge(e),s=AL.getConfigValue(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Js.pathExists(s)}if(!t&&uE.noBootFile()&&(r=!0),r&&!IL){if(yr.trace(`Install found existing HDB config at:${e}`),await Sz.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${Tz.version}. Exiting install...`;console.log(Hc+Eu.magenta.bold(bge)),console.log(Eu.magenta.bold(s)),yr.error(s)}else console.log(Hc+Eu.magenta.bold(RL)),yr.error(RL);process.exit(0)}}a(Uge,"checkForExistingInstall");async function xge(e){yr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${yge}${Hc}and can be viewed by typing or copying and pasting the URL into your web browser.${Hc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:ba,transformer:hu,when:Aa(e[pe.INSTALL_PROMPTS.TC_AGREEMENT],t),name:pe.INSTALL_PROMPTS.TC_AGREEMENT,message:un(t),validate:a(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:Eu.yellow("Please enter 'yes' or 'no'"),"validate")},n=await gz.prompt([r]);n[pe.INSTALL_PROMPTS.TC_AGREEMENT]&&n[pe.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Rge&&(console.log(Eu.yellow(_z)),yr.error(_z),process.exit(0))}a(xge,"termsAgreement");async function Bge(){let e=Ao.join(bo,pe.HDB_CONFIG_FILE),t;try{t=bL.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
|
|
94
|
+
install_user = ${t}`,n=uE.getHomeDir(),s=Ao.join(n,pe.HDB_HOME_DIR_NAME),i=Ao.join(s,pe.LICENSE_KEY_DIR_NAME);try{Js.mkdirpSync(s,{mode:pe.HDB_FILE_PERMISSIONS}),Js.mkdirpSync(i,{mode:pe.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${pe.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Ao.join(s,pe.BOOT_PROPS_FILE_NAME);try{await Js.writeFile(o,r)}catch(c){throw yr.error(`There was an error creating the boot file at path: ${o}`),c}kc.setProperty(pe.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),kc.setProperty(pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),kc.setProperty(kc.BOOT_PROPS_FILE_PATH,o)}}a(Bge,"createBootPropertiesFile");async function Fge(e){yr.trace("Creating HarperDB config file");let t=qy(Object.keys(pe.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[pe.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in Gy){if(r===$t.HTTP_PORT&&t[$t.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??Gy[r],t[$t.HTTP_SECUREPORT]=null;continue}else if(r===$t.HTTP_PORT)continue;if(r===$t.OPERATIONSAPI_NETWORK_PORT&&t[$t.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??Gy[r],t[$t.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===$t.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=Gy[r])}}else t[$t.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[$t.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[$t.HTTP_PORT.toLowerCase()]&&(t[$t.HTTP_SECUREPORT]=null);try{Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]||AL.createConfigFile(t),kc.initSync()}catch(r){kge(r)}}a(Fge,"createConfigFile");function kge(e){yr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Age);let t=Ao.resolve(kc.get(kc.BOOT_PROPS_FILE_PATH),"../");t&&Js.removeSync(t),bo&&(yz?Js.readdirSync(bo,{withFileTypes:!0}).forEach(n=>{let s=Ao.join(n.path,n.name);s!==Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&Js.removeSync(s)}):Js.removeSync(bo)),process.exit(1)}a(kge,"rollbackInstall");async function Az(e,t){yr.trace("Creating admin user"),await Tge();let r;try{r=await Ege.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 hge.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(Az,"createAdminUser");async function Iz(e){yr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await Az(t,r),delete e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(Iz,"createSuperUser");async function Hge(e){yr.trace("Creating Cluster user.");let t;e[pe.INSTALL_PROMPTS.CLUSTERING_USER]&&e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[pe.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await Az({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[pe.INSTALL_PROMPTS.CLUSTERING_USER],delete e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(Hge,"createClusterUser");async function Gge(){let e=Tz.version;if(e)await Sz.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(Gge,"insertHdbVersionInfo");function qge(e){Gc[pe.INSTALL_PROMPTS.HDB_CONFIG]=e}a(qge,"updateConfigEnv");function $ge(e){IL=e}a($ge,"setIgnoreExisting")});var NL={};ye(NL,{isHdbInstalled:()=>Vge});function Vge(e,t){try{wL.default.statSync((0,$y.getPropsFilePath)()),wL.default.statSync(e.get(Tm.SETTINGS_PATH_KEY))}catch(r){if((0,$y.noBootFile)())return!0;if(r.code==="ENOENT")return!1;throw t.error(`Error checking for HDB install - ${r}`),r}return!0}var wL,$y,CL=se(()=>{G();wL=b(require("node:fs")),$y=b(ae());a(Vge,"isHdbInstalled")});var Pz=M((bHe,Oz)=>{"use strict";var OL=ae(),Is=Q(),Cz=mL();Oz.exports={processDirectives:Kge};async function Kge(e){console.log("Starting upgrade process...");let t=Cz.getVersionsForUpgrade(e),r=jge(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;Is.notify(c),console.log(c);let l=[],u=[];try{l=Yge(o.sync_functions)}catch(d){throw Is.error(`Error while running an upgrade script for ${o.version}`),d}try{u=await Wge(o.async_functions)}catch(d){throw Is.error(`Error while running an upgrade script for ${o.version}`),d}n.push(...l,...u)}return n}a(Kge,"processDirectives");function Yge(e){if(OL.isEmptyOrZeroLength(e))return Is.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Is.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Is.info(`Running function ${r.name}`),!(r instanceof Function)){Is.info("Variable being processed is not a function");continue}let n=r();Is.info(n),t.push(n)}return t}a(Yge,"runSyncFunctions");async function Wge(e){if(OL.isEmptyOrZeroLength(e))return Is.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Is.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(Is.info(`Running function ${s.name}`),!(s instanceof Function)){Is.info("Variable being processed is not a function");continue}let i=await s();Is.info(i),t.push(i)}return t}a(Wge,"runAsyncFunctions");function jge(e){if(OL.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=Cz.getDirectiveByVersion(r);n&&t.push(n)}return t}a(jge,"getUpgradeDirectivesToInstall")});var xz=M((wHe,Uz)=>{"use strict";var vz=fe();vz.initSync();var zge=require("chalk"),Ia=Q(),xf=(G(),D(j)),Jge=Pz(),IHe=ae(),Qge=(CL(),D(NL)),Mz=ky(),Xge=Py(),Zge=pi(),{packageJson:Lz}=yt(),eSe=require("util").promisify,tSe=eSe(Zge.setSchemaDataToGlobal),Dz,{UPGRADE_VERSION:PL}=xf.UPGRADE_JSON_FIELD_NAMES_ENUM;Uz.exports={upgrade:rSe};async function rSe(e){await tSe(),Dz===void 0&&(Dz=cu()),Qge.isHdbInstalled(vz,Ia)||(Vy("Harper is not installed. Harper must be installed before running an upgrade.",xf.LOG_LEVELS.ERROR),process.exit(1));let r=e;r||(r=await Mz.getVersionUpdateInfo(),r||(console.log("HarperDB version is current"),process.exit(0))),Vy(`This version of HarperDB is ${Lz.version}`,xf.LOG_LEVELS.INFO);let n=r[PL]??Lz.version;n||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${xf.HDB_SUPPORT_ADDRESS}`),Ia.notify("Missing new version field from upgrade info object"),process.exit(1));let s,i=0;try{s=await Xge.forceUpdatePrompt(r)}catch(o){Ia.error("There was an error when prompting user about upgrade."),Ia.error(o),s=!1,i=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(i)),Ia.info(`Starting upgrade to version ${n}`),await nSe(r),Vy(`HarperDB was successfully upgraded to version ${r[PL]}`,xf.LOG_LEVELS.INFO)}a(rSe,"upgrade");async function nSe(e){try{await Jge.processDirectives(e)}catch(t){throw Vy("There was an error during the data upgrade. Please check the logs.",xf.LOG_LEVELS.ERROR),t}try{await Mz.insertHdbUpgradeInfo(e[PL])}catch(t){Ia.error("Error updating the 'hdb_info' system table."),Ia.error(t)}}a(nSe,"runUpgrade");function Vy(e,t=void 0){t||(t=Ia.info),Ia[t](e),console.log(zge.magenta(e))}a(Vy,"printToLogAndConsole")});var Bz={};ye(Bz,{SERVERS:()=>Bf,portServer:()=>LL,setPortServerMap:()=>Ky});function Ky(e,t){let r=LL.get(e)??[];LL.set(e,[...r,t])}var Bf,LL,DL=se(()=>{Bf={},LL=new Map;a(Ky,"setPortServerMap")});function iSe(e){if(typeof e!="string")throw new Yy(`License must be a string; received ${typeof e}: ${e}`);let t;try{t=e.split(".")}catch(l){let u=new Yy(`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=sSe.getKey();if(!(0,jy.verify)(null,Buffer.from(r+"."+n,"utf8"),i,Buffer.from(s,"base64url")))throw new ML("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 oSe(e){if(e?.typ!=="Harper-License")throw new dE(`Invalid license header; typ must be 'Harper-License'; got: ${e?.typ}`);if(e?.alg!=="EdDSA")throw new dE(`Invalid license header; alg must be 'EdDSA'; got: ${e?.alg}`)}function aSe(e,t){return e.required?typeof t===e.type:typeof t>"u"||typeof t===e.type}function cSe(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(!aSe(t[r],e[r]))throw new Wy(`Invalid license payload; ${i} must be a ${s}; got: ${typeof e[r]}`)}}function kz(e){let{header:t,payload:r}=iSe(e),n;try{n=JSON.parse(t)}catch(i){let o=new dE;throw o.cause=i,o}oSe(n);let s;try{s=JSON.parse(r)}catch(i){let o=new Wy;throw o.cause=i,o}return cSe(s),s}var jy,Fz,vL,Yy,Ff,ML,dE,Wy,sSe,Hz=se(()=>{jy=require("node:crypto"),Fz=b(fe());G();vL=class{static{a(this,"PublicKey")}pem;constructor(t){t&&(t==="test"||t==="development")?this.pem=`-----BEGIN PUBLIC KEY-----
|
|
95
95
|
MCowBQYDK2VwAyEAO301jvpO12znGdK/Izrre518pgmQNk9hSMXf4wDMucM=
|
|
96
96
|
-----END PUBLIC KEY-----
|
|
97
97
|
`:this.pem=`-----BEGIN PUBLIC KEY-----
|
|
98
98
|
MCowBQYDK2VwAyEAMtpzMn9YfS0fGaDLcAmYQx2OH8kVevwbNyQ1RIj5cvw=
|
|
99
99
|
-----END PUBLIC KEY-----
|
|
100
|
-
`}getKey(){return(0,jy.createPublicKey)(this.pem)}toString(){return this.pem}},Yy=class extends TypeError{static{a(this,"LicenseEncodingError")}},Ff=class extends TypeError{static{a(this,"InvalidLicenseError")}},ML=class extends Ff{static{a(this,"InvalidLicenseSignatureError")}},dE=class extends Ff{static{a(this,"InvalidHeaderError")}},Wy=class extends Ff{static{a(this,"InvalidPayloadError")}},sSe=new vL(Fz.get(x.LICENSE_MODE));a(iSe,"validateLicenseSignature");a(oSe,"validateLicenseHeader");a(aSe,"valid");a(cSe,"validateLicensePayload");a(kz,"validateLicense")});var zy={};ye(zy,{getActiveLicense:()=>kL,getUsageLicenses:()=>Jz,getUsageLicensesOp:()=>GL,installUsageLicense:()=>FL,installUsageLicenseOp:()=>BL,isActiveLicense:()=>jz,isLicensed:()=>HL,loadAndWatchLicensesDir:()=>dSe,recordUsage:()=>zz});async function BL(e){let t=e.license;try{await FL(t)}catch(r){let n=new $z.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function FL(e){let t=kz(e),{id:r}=t;if(await Me.system.hdb_license.get(r))throw new xL(`A usage license with ${r} already exists`);return Io.info?.("Installing usage license:",t),Me.system.hdb_license.put(r,t)}function jz(e){return(e.reads===-1||(e.usedReads??0)<e.reads)&&(e.readBytes===-1||(e.usedReadBytes??0)<e.readBytes)&&(e.writes===-1||(e.usedWrites??0)<e.writes)&&(e.writeBytes===-1||(e.usedWriteBytes??0)<e.writeBytes)&&(e.realTimeMessages===-1||(e.usedRealTimeMessages??0)<e.realTimeMessages)&&(e.realTimeBytes===-1||(e.usedRealTimeBytes??0)<e.realTimeBytes)&&(e.cpuTime===-1||(e.usedCpuTime??0)<e.cpuTime)&&(e.storage===-1||(e.usedStorage??0)<e.storage)}async function kL(){let e=Vz.get(x.LICENSE_REGION),t={sort:{attribute:"__createdtime__"},conditions:[{attribute:"expiration",comparator:"greater_than",value:new Date().toISOString()}]};e!==void 0&&t.conditions.push({attribute:"region",comparator:"equals",value:e});let r=Me.system.hdb_license?.search(t);for await(let n of r??[])if(jz(n))return n}async function HL(){return await kL()!==void 0}async function zz(e){Ia=Io.forComponent("license"),Ia.trace?.("Recording usage into license from analytics");let t,r=(await kL())?.id;if(r){Ia.trace?.("Found license to record usage into:",r);let n={};bt(n,()=>{t=Me.system.hdb_license.update(r,n);for(let s of e)switch(Ia.trace?.("Processing analytics record:",s),s.metric){case"db-read":Ia.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":Ia.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":Ia.trace?.("Recording message usage into license"),t.addTo("usedRealTimeMessages",s.count),t.addTo("usedRealTimeBytes",s.mean*s.count);break;case"cpu-usage":s.path==="user"&&(Ia.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:Ia.trace?.("Skipping metric:",s.metric)}})}else if(!process.env.DEV_MODE){let n="This server does not have valid usage licenses, this should only be used for educational and development purposes.";Gz||(console.error(n),Gz=!0),qz===void 0&&(qz=setInterval(()=>{Io.notify(n)},lSe).unref())}}function GL(e){let t={};return e.region&&(t.region=e.region),Jz(t)}function Jz(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 uSe(e){Io.trace?.("Loading usage license from file:",e);let t=await Yz.readFile(e,{encoding:"utf-8"});try{await FL(t)}catch(r){Io.error?.("Failed to install usage license from file:",e,r)}}function dSe(){let e=UL.default.join(UL.default.dirname(Kz.getConfigFilePath()),"licenses");(0,Wz.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:a((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",uSe)}var $z,Io,Vz,UL,Kz,Yz,Wz,xL,Gz,qz,lSe,Ia,fE=se(()=>{Hz();$z=b(Ee()),Io=b(Q());os();Qa();Vz=b(fe());G();Oe();UL=b(require("node:path")),Kz=b(_t()),Yz=b(require("node:fs/promises")),Wz=require("chokidar"),xL=class extends Error{static{a(this,"ExistingLicenseError")}};a(BL,"installUsageLicenseOp");a(FL,"installUsageLicense");Gz=!1,lSe=6e5;a(jz,"isActiveLicense");a(kL,"getActiveLicense");a(HL,"isLicensed");a(zz,"recordUsage");EI(zz);a(GL,"getUsageLicensesOp");a(Jz,"getUsageLicenses");a(uSe,"loadLicenseFile");a(dSe,"loadAndWatchLicensesDir")});var tR={};ye(tR,{deliverSocket:()=>c4,getHttpOptions:()=>hSe,getRequestId:()=>f4,handleApplication:()=>pSe,httpServer:()=>zL,logRequest:()=>hE,proxyRequest:()=>ESe,registerServer:()=>WL,suppressHandleApplicationWarning:()=>mSe});function pSe(e){EE=e.options.getAll(),e.options.on("change",t=>{EE=e.options.getAll()})}function hSe(){return EE}function c4(e,t,r){let n=e?.read?e:new t4.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Bf[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Bf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(wa.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function ESe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=Qz.get(s),r){case"connection":i=c4(void 0,t),Qz.set(s,i),i.write=(c,l,u)=>(Qy.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(Qy.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Qy.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 WL(e,t,r=!0){t||(t=Lr.default.get(x.HTTP_PORT));let n=Bf[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",e4),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Bf[t]=e;e.on("unhandled",e4)}function jL(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],Lr.default.get(x.HTTP_PORT)!=null&&t.push({port:Lr.default.get(x.HTTP_PORT),secure:Lr.default.get(x.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Lr.default.get(x.HTTP_SECUREPORT)!=null&&t.push({port:Lr.default.get(x.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Lr.default.get(x.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,r4.resolvePath)(Lr.default.get(x.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function zL(e,t){let r=[];for(let{port:n,secure:s}of jL(t))r.push(l4(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?KL[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,WL(e,n,!1)),Xy[n]=Zy(KL,n);return r}function l4(e,t,r,n){if(Ky(e,{protocol_name:t?"HTTPS":"HTTP",name:rR()}),!Jy[e]){let s=r?"operationsApi_network":"http",i=Lr.default.get(s+"_keepAliveTimeout"),o=Lr.default.get(s+"_timeout"),c=Lr.default.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:o,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Lr.default.get(x.HTTP_MAXHEADERSIZE)},u=Lr.default.get(s+"_mtls"),d=Lr.default.get(s+"_mtls_required"),f;if(t){let E=Lr.default.get("tls");f=Lr.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,n4.getTicketKeys)(),SNICallback:(0,s4.createTLSSelector)(r?"operations-api":"server",u),ciphers:E.ciphers??E[0]?.ciphers})}let m=a(async(E,_)=>{let R=performance.now(),S=0;try{let w=new Ec(E,_);r&&(w.isOperationsServer=!0),EE.logging?.id&&(w.requestId=S=f4());let I=await Xy[e](w);if(!I){if(w._nodeResponse.statusCode){hE(E,w._nodeResponse.statusCode,S,performance.now()-R);return}I=u4(w)}if(I.headers?.set||(I.headers=new Hs(I.headers)),await HL()?I.headers.set("Server","HarperDB"):I.headers.set("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"),I.status===-1){for(let te of I.headers||[])_.setHeader(te[0],te[1]);return E.baseRequest=w,_.baseResponse=I,Jy[e].emit("unhandled",E,_)}let H=I.status||200;_.statusCode=H;let X=performance.now(),q=X-R,k=I.body,z,Y=!1;if(!I.handlesHeaders){let te=I.headers||new Hs;k?k.length>=0?(typeof k=="string"?te.set("Content-Length",Buffer.byteLength(k)):te.set("Content-Length",k.length),z=!0):k instanceof vs&&(k.size?te.set("Content-Length",k.size):k.on&&(Y=!0,k.on("size",Ne=>{_.headersSent||_.setHeader("Content-Length",Ne)})),k=k.stream()):(te.set("Content-Length","0"),z=!0);let Se=`hdb;dur=${q.toFixed(2)}`;if(I.wasCacheMiss&&(Se+=", miss"),jp(te,"Server-Timing",Se,!0),!_.headersSent)if(Y){if(te)if(te[Symbol.iterator])for(let[Ne,Ke]of te)_.setHeader(Ne,Ke);else for(let Ne in te)_.setHeader(Ne,te[Ne])}else _.writeHead(H,te&&(te[Symbol.iterator]?Array.from(te):te));z&&_.end(k)}let ce=w.handlerPath,de=w.method;if(We(q,"duration",ce,de,I.wasCacheMiss==null?void 0:I.wasCacheMiss?"cache-miss":"cache-hit"),tn(H<400,"success",ce,de),tn(1,"response_"+H,ce,de),hE(E,H,S,q),!z)if(k instanceof ReadableStream&&(k=VL.Readable.fromWeb(k)),(k[Symbol.iterator]||k[Symbol.asyncIterator])&&(k=VL.Readable.from(k)),k?.pipe){k.pipe(_),k.destroy&&_.on("close",()=>{k.destroy()});let te=0;k.on("data",Se=>{te+=Se.length}),k.on("end",()=>{We(performance.now()-X,"transfer",ce,de),We(te,"bytes-sent",ce,de)})}else k?.then?k.then(te=>{_.end(te)},y):_.end(k)}catch(w){y(w)}function y(w){let I=w.headers,H=w.statusCode||500;_.writeHead(H,I&&(I[Symbol.iterator]?Array.from(I):I)),_.end(fSe(w)),hE(E,H,S,performance.now()-R),w.statusCode?w.statusCode===500?wa.default.warn(w):wa.default.info(w):wa.default.error(w)}a(y,"onError")},"requestHandler"),p=TS(m,(E,_)=>{_.statusCode=503,_.end("Service unavailable, exceeded request queue limit"),We(!0,"service-unavailable",e)},Lr.default.get(s+"_requestQueueLimit")),h=Jy[e]=(t?f?i4.createSecureServer:o4.createServer:eR.createServer)(l,(E,_)=>{let R=E.method;R==="GET"||R==="OPTIONS"||R==="HEAD"?m(E,_):p(E,_)});i>=0&&(h.keepAliveTimeout=i),c>=0&&(h.headersTimeout=c),t&&(h.ports||(h.ports=[]),h.ports.push(e),l.SNICallback.initialize(h),u&&(h.mtlsConfig=u),h.on("secureConnection",E=>{E._parent.startTime&&We(performance.now()-E._parent.startTime,"tls-handshake",e),We(E.isSessionReused(),"tls-reused",e)}),h.isSecure=!0),WL(h,e)}return Jy[e]}function Zy(e,t){let r=u4;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a((...c)=>s(...c,o),"nextCallback")}}return r}function u4(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Hs}}function _Se(e,t){zL(e,{requestOnly:!0,...t})}function d4(e,t){for(let{port:r}of jL(t))Xz[t?.runFirst?"unshift":"push"]({listener:e,port:r}),YL[r]=Zy(Xz,r)}function gSe(e,t){let r=[];for(let{port:n,secure:s}of jL(t)){Ky(n,{protocol_name:s?"WSS":"WS",name:rR()});let i=l4(n,s,t?.isOperationsServer,t?.mtls);mE[n]||(mE[n]=new a4.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),mE[n].on("connection",(o,c)=>{try{let l=new Ec(c);l.isWebSocket=!0;let u=Xy[n](l);wa.default.debug("Received WS connection, calling listeners",qL),Zz[n](o,l,u)}catch(l){wa.default.warn("Error in handling WS connection",l)}}),d4((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):mE[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),mE[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{YL[n]&&YL[n](o,c,l)})),r.push(i),qL[t?.runFirst?"unshift":"push"]({listener:e,port:n}),Zz[n]=Zy(qL,n),Xy[n]=Zy(KL,n)}return r}function e4(e,t){t.writeHead(404),t.end(`Not found
|
|
101
|
-
`),hE(e,404,0,e.requestId)}function hE(e,t,r,n){let s=EE.logging;if(s){$L||($L=
|
|
100
|
+
`}getKey(){return(0,jy.createPublicKey)(this.pem)}toString(){return this.pem}},Yy=class extends TypeError{static{a(this,"LicenseEncodingError")}},Ff=class extends TypeError{static{a(this,"InvalidLicenseError")}},ML=class extends Ff{static{a(this,"InvalidLicenseSignatureError")}},dE=class extends Ff{static{a(this,"InvalidHeaderError")}},Wy=class extends Ff{static{a(this,"InvalidPayloadError")}},sSe=new vL(Fz.get(x.LICENSE_MODE));a(iSe,"validateLicenseSignature");a(oSe,"validateLicenseHeader");a(aSe,"valid");a(cSe,"validateLicensePayload");a(kz,"validateLicense")});var zy={};ye(zy,{getActiveLicense:()=>kL,getUsageLicenses:()=>Jz,getUsageLicensesOp:()=>GL,installUsageLicense:()=>FL,installUsageLicenseOp:()=>BL,isActiveLicense:()=>jz,isLicensed:()=>HL,loadAndWatchLicensesDir:()=>dSe,recordUsage:()=>zz});async function BL(e){let t=e.license;try{await FL(t)}catch(r){let n=new $z.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function FL(e){let t=kz(e),{id:r}=t;if(await Me.system.hdb_license.get(r))throw new xL(`A usage license with ${r} already exists`);return Io.info?.("Installing usage license:",t),Me.system.hdb_license.put(r,t)}function jz(e){return(e.reads===-1||(e.usedReads??0)<e.reads)&&(e.readBytes===-1||(e.usedReadBytes??0)<e.readBytes)&&(e.writes===-1||(e.usedWrites??0)<e.writes)&&(e.writeBytes===-1||(e.usedWriteBytes??0)<e.writeBytes)&&(e.realTimeMessages===-1||(e.usedRealTimeMessages??0)<e.realTimeMessages)&&(e.realTimeBytes===-1||(e.usedRealTimeBytes??0)<e.realTimeBytes)&&(e.cpuTime===-1||(e.usedCpuTime??0)<e.cpuTime)&&(e.storage===-1||(e.usedStorage??0)<e.storage)}async function kL(){let e=Vz.get(x.LICENSE_REGION),t={sort:{attribute:"__createdtime__"},conditions:[{attribute:"expiration",comparator:"greater_than",value:new Date().toISOString()}]};e!==void 0&&t.conditions.push({attribute:"region",comparator:"equals",value:e});let r=Me.system.hdb_license?.search(t);for await(let n of r??[])if(jz(n))return n}async function HL(){return await kL()!==void 0}async function zz(e){wa=Io.forComponent("license"),wa.trace?.("Recording usage into license from analytics");let t,r=(await kL())?.id;if(r){wa.trace?.("Found license to record usage into:",r);let n={};bt(n,()=>{t=Me.system.hdb_license.update(r,n);for(let s of e)switch(wa.trace?.("Processing analytics record:",s),s.metric){case"db-read":wa.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":wa.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":wa.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"&&(wa.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:wa.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.";Gz||(console.error(n),Gz=!0),qz===void 0&&(qz=setInterval(()=>{Io.notify(n)},lSe).unref())}}function GL(e){let t={};return e.region&&(t.region=e.region),Jz(t)}function Jz(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 uSe(e){Io.trace?.("Loading usage license from file:",e);let t=await Yz.readFile(e,{encoding:"utf-8"});try{await FL(t)}catch(r){Io.error?.("Failed to install usage license from file:",e,r)}}function dSe(){let e=UL.default.join(UL.default.dirname(Kz.getConfigFilePath()),"licenses");(0,Wz.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:a((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",uSe)}var $z,Io,Vz,UL,Kz,Yz,Wz,xL,Gz,qz,lSe,wa,fE=se(()=>{Hz();$z=b(Ee()),Io=b(Q());os();Qa();Vz=b(fe());G();Oe();UL=b(require("node:path")),Kz=b(_t()),Yz=b(require("node:fs/promises")),Wz=require("chokidar"),xL=class extends Error{static{a(this,"ExistingLicenseError")}};a(BL,"installUsageLicenseOp");a(FL,"installUsageLicense");Gz=!1,lSe=6e5;a(jz,"isActiveLicense");a(kL,"getActiveLicense");a(HL,"isLicensed");a(zz,"recordUsage");EI(zz);a(GL,"getUsageLicensesOp");a(Jz,"getUsageLicenses");a(uSe,"loadLicenseFile");a(dSe,"loadAndWatchLicensesDir")});var tR={};ye(tR,{deliverSocket:()=>c4,getHttpOptions:()=>hSe,getRequestId:()=>f4,handleApplication:()=>pSe,httpServer:()=>zL,logRequest:()=>hE,proxyRequest:()=>ESe,registerServer:()=>WL,suppressHandleApplicationWarning:()=>mSe});function pSe(e){EE=e.options.getAll(),e.options.on("change",t=>{EE=e.options.getAll()})}function hSe(){return EE}function c4(e,t,r){let n=e?.read?e:new t4.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Bf[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Bf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Na.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function ESe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=Qz.get(s),r){case"connection":i=c4(void 0,t),Qz.set(s,i),i.write=(c,l,u)=>(Qy.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(Qy.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Qy.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 WL(e,t,r=!0){t||(t=Lr.default.get(x.HTTP_PORT));let n=Bf[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",e4),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Bf[t]=e;e.on("unhandled",e4)}function jL(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],Lr.default.get(x.HTTP_PORT)!=null&&t.push({port:Lr.default.get(x.HTTP_PORT),secure:Lr.default.get(x.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Lr.default.get(x.HTTP_SECUREPORT)!=null&&t.push({port:Lr.default.get(x.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Lr.default.get(x.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,r4.resolvePath)(Lr.default.get(x.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function zL(e,t){let r=[];for(let{port:n,secure:s}of jL(t))r.push(l4(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?KL[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,WL(e,n,!1)),Xy[n]=Zy(KL,n);return r}function l4(e,t,r,n){if(Ky(e,{protocol_name:t?"HTTPS":"HTTP",name:rR()}),!Jy[e]){let s=r?"operationsApi_network":"http",i=Lr.default.get(s+"_keepAliveTimeout"),o=Lr.default.get(s+"_timeout"),c=Lr.default.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:o,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Lr.default.get(x.HTTP_MAXHEADERSIZE)},u=Lr.default.get(s+"_mtls"),d=Lr.default.get(s+"_mtls_required"),f;if(t){let E=Lr.default.get("tls");f=Lr.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,n4.getTicketKeys)(),SNICallback:(0,s4.createTLSSelector)(r?"operations-api":"server",u),ciphers:E.ciphers??E[0]?.ciphers})}let m=a(async(E,_)=>{let R=performance.now(),S=0;try{let w=new Ec(E,_);r&&(w.isOperationsServer=!0),EE.logging?.id&&(w.requestId=S=f4());let I=await Xy[e](w);if(!I){if(w._nodeResponse.statusCode){hE(E,w._nodeResponse.statusCode,S,performance.now()-R);return}I=u4(w)}if(I.headers?.set||(I.headers=new Hs(I.headers)),await HL()?I.headers.set("Server","HarperDB"):I.headers.set("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"),I.status===-1){for(let te of I.headers||[])_.setHeader(te[0],te[1]);return E.baseRequest=w,_.baseResponse=I,Jy[e].emit("unhandled",E,_)}let H=I.status||200;_.statusCode=H;let X=performance.now(),q=X-R,k=I.body,z,Y=!1;if(!I.handlesHeaders){let te=I.headers||new Hs;k?k.length>=0?(typeof k=="string"?te.set("Content-Length",Buffer.byteLength(k)):te.set("Content-Length",k.length),z=!0):k instanceof vs&&(k.size?te.set("Content-Length",k.size):k.on&&(Y=!0,k.on("size",Ne=>{_.headersSent||_.setHeader("Content-Length",Ne)})),k=k.stream()):(te.set("Content-Length","0"),z=!0);let Se=`hdb;dur=${q.toFixed(2)}`;if(I.wasCacheMiss&&(Se+=", miss"),jp(te,"Server-Timing",Se,!0),!_.headersSent)if(Y){if(te)if(te[Symbol.iterator])for(let[Ne,Ke]of te)_.setHeader(Ne,Ke);else for(let Ne in te)_.setHeader(Ne,te[Ne])}else _.writeHead(H,te&&(te[Symbol.iterator]?Array.from(te):te));z&&_.end(k)}let ce=w.handlerPath,de=w.method;if(We(q,"duration",ce,de,I.wasCacheMiss==null?void 0:I.wasCacheMiss?"cache-miss":"cache-hit"),tn(H<400,"success",ce,de),tn(1,"response_"+H,ce,de),hE(E,H,S,q),!z)if(k instanceof ReadableStream&&(k=VL.Readable.fromWeb(k)),(k[Symbol.iterator]||k[Symbol.asyncIterator])&&(k=VL.Readable.from(k)),k?.pipe){k.pipe(_),k.destroy&&_.on("close",()=>{k.destroy()});let te=0;k.on("data",Se=>{te+=Se.length}),k.on("end",()=>{We(performance.now()-X,"transfer",ce,de),We(te,"bytes-sent",ce,de)})}else k?.then?k.then(te=>{_.end(te)},y):_.end(k)}catch(w){y(w)}function y(w){let I=w.headers,H=w.statusCode||500;_.writeHead(H,I&&(I[Symbol.iterator]?Array.from(I):I)),_.end(fSe(w)),hE(E,H,S,performance.now()-R),w.statusCode?w.statusCode===500?Na.default.warn(w):Na.default.info(w):Na.default.error(w)}a(y,"onError")},"requestHandler"),p=TS(m,(E,_)=>{_.statusCode=503,_.end("Service unavailable, exceeded request queue limit"),We(!0,"service-unavailable",e)},Lr.default.get(s+"_requestQueueLimit")),h=Jy[e]=(t?f?i4.createSecureServer:o4.createServer:eR.createServer)(l,(E,_)=>{let R=E.method;R==="GET"||R==="OPTIONS"||R==="HEAD"?m(E,_):p(E,_)});i>=0&&(h.keepAliveTimeout=i),c>=0&&(h.headersTimeout=c),t&&(h.ports||(h.ports=[]),h.ports.push(e),l.SNICallback.initialize(h),u&&(h.mtlsConfig=u),h.on("secureConnection",E=>{E._parent.startTime&&We(performance.now()-E._parent.startTime,"tls-handshake",e),We(E.isSessionReused(),"tls-reused",e)}),h.isSecure=!0),WL(h,e)}return Jy[e]}function Zy(e,t){let r=u4;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a((...c)=>s(...c,o),"nextCallback")}}return r}function u4(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Hs}}function _Se(e,t){zL(e,{requestOnly:!0,...t})}function d4(e,t){for(let{port:r}of jL(t))Xz[t?.runFirst?"unshift":"push"]({listener:e,port:r}),YL[r]=Zy(Xz,r)}function gSe(e,t){let r=[];for(let{port:n,secure:s}of jL(t)){Ky(n,{protocol_name:s?"WSS":"WS",name:rR()});let i=l4(n,s,t?.isOperationsServer,t?.mtls);mE[n]||(mE[n]=new a4.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),mE[n].on("connection",(o,c)=>{try{let l=new Ec(c);l.isWebSocket=!0;let u=Xy[n](l);Na.default.debug("Received WS connection, calling listeners",qL),Zz[n](o,l,u)}catch(l){Na.default.warn("Error in handling WS connection",l)}}),d4((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):mE[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),mE[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{YL[n]&&YL[n](o,c,l)})),r.push(i),qL[t?.runFirst?"unshift":"push"]({listener:e,port:n}),Zz[n]=Zy(qL,n),Xy[n]=Zy(KL,n)}return r}function e4(e,t){t.writeHead(404),t.end(`Not found
|
|
101
|
+
`),hE(e,404,0,e.requestId)}function hE(e,t,r,n){let s=EE.logging;if(s){$L||($L=Na.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";$L[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+SSe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function SSe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function f4(){return pE||(pE=new BigInt64Array([1n]),pE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",pE.buffer))),Number(Atomics.add(pE,0,1n))}var t4,Na,Qy,Lr,r4,n4,s4,i4,o4,eR,VL,a4,fSe,mE,Jy,Xy,KL,EE,mSe,Qz,Xz,YL,qL,Zz,$L,pE,JL=se(()=>{t4=require("node:net"),Na=b(Q()),Qy=require("node:worker_threads"),Lr=b(fe());G();r4=b(_t()),n4=b(st()),s4=b(Ts()),i4=require("node:http2"),o4=require("node:https"),eR=require("node:http");lh();zp();is();os();VL=require("node:stream");Hr();DL();_E();VN();a4=require("ws");fE();({errorToString:fSe}=Na.default);Ue.http=zL;Ue.request=_Se;Ue.ws=gSe;Ue.upgrade=d4;mE={},Jy={},Xy={},KL=[],EE={},mSe=!0;a(pSe,"handleApplication");a(hSe,"getHttpOptions");a(c4,"deliverSocket");Qz=new Map;a(ESe,"proxyRequest");a(WL,"registerServer");a(jL,"getPorts");a(zL,"httpServer");a(l4,"getHTTPServer");a(Zy,"makeCallbackChain");a(u4,"unhandled");a(_Se,"onRequest");Object.defineProperty(eR.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){}});Xz=[],YL={};a(d4,"onUpgrade");qL=[],Zz={};a(gSe,"onWebSocket");a(e4,"defaultNotFound");a(hE,"logRequest");a(SSe,"headersToString");a(f4,"getRequestId")});var XL=M(TE=>{"use strict";yA();var{isMainThread:QL,parentPort:m4,threadId:nR,workerData:TSe}=require("node:worker_threads"),{createServer:ySe}=require("node:net"),{unlinkSync:RSe,existsSync:bSe}=require("fs"),h4;TE.whenComponentsLoaded=new Promise(e=>{h4=e});var Ni=Q(),wo=fe(),Ci=(G(),D(j)),{server:ASe}=(Hr(),D(bm)),{createServer:ISe}=require("node:tls"),{restartNumber:wSe,getWorkerIndex:SE}=st(),{createReuseportFd:gE}=(lh(),D(H$)),{createTLSSelector:NSe}=Ts(),{resolvePath:YHe}=_t(),{startupLog:CSe}=sR(),{SERVERS:kf,setPortServerMap:p4,portServer:OSe}=(DL(),D(Bz)),PSe=(JL(),D(tR)),LSe=ai(),E4=wo.get(Ci.CONFIG_PARAMS.THREADS_DEBUG),DSe=wo.get(Ci.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);ASe.socket=vSe;if(E4){let e;if(QL)e=wo.get(Ci.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Ni.info("Could not close debugger",t)}});else{let t=wo.get(Ci.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&SE()>=0&&(e=t+SE())}if(e){let t=wo.get(Ci.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=wo.get(Ci.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Ni.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&QL)try{require("inspector").open(9229)}catch(e){wSe<=1&&Ni.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"&&Ni.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:WHe,CONFIG_PARAMS:jHe}=Ci;wo.initSync();TE.globals=LSe;TE.listenOnPorts=g4;TE.startServers=_4;function _4(){let e=wo.get(Ci.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=oR().loadRootComponents(!0).then(()=>{m4?.on("message",n=>{let{port:s,fd:i,data:o}=n;if(i)deliverSocket(i,s,o);else if(n.requestId)PSe.proxyRequest(n);else if(n.type===Ci.ITC_EVENT_TYPES.SHUTDOWN){Ni.trace("received shutdown request",nR);for(let c in kf){let l=kf[c],u;if(l.closeIdleConnections){let f=Object.getOwnPropertySymbols(l).find(h=>h.description.includes("connections")),m=0,p=setInterval(()=>{m++;let h=m>=100;if(!l[f]){h&&l.closeAllConnections?.(),clearInterval(p);return}let E=l[f][h?"all":"idle"]?.()||[];if(E.length===0){h&&clearInterval(p);return}m===1?Ni.info(`Closing ${E.length} idle connections`):h&&Ni.warn(`Forcefully closing ${E.length} active connections`);for(let _=0,R=E.length;_<R;_++){let S=E[_].socket;S._httpMessage&&!S._httpMessage.finished&&!h||(h?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
|
|
102
102
|
Connection: close\r
|
|
103
103
|
\r
|
|
104
104
|
`))}},25).unref()}l.close?.(()=>{clearInterval(u),setTimeout(()=>{console.log("forced close server",c,nR),l.cantCleanupProperly||Ni.warn("Had to forcefully exit the thread",nR),process.exit(0)},5e3).unref()})}if(E4||process.env.DEV_MODE)try{require("inspector").close()}catch(c){Ni.info("Could not close debugger",c)}}}).ref();let r;gE&&!DSe&&(r=g4()),Promise.resolve(r).then(()=>{if(SE()===0)try{CSe(OSe)}catch(n){console.error("Error displaying start-up log",n)}m4?.postMessage({type:Ci.ITC_EVENT_TYPES.CHILD_STARTED})})});return h4(t),t}a(_4,"startServers");function g4(){let e=[];for(let t in kf){let r=kf[t];if(t.includes?.("/")&&SE()==0){bSe(t)&&RSe(t),e.push(new Promise((o,c)=>{r.listen({path:t},()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),Ni.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=wo.get(Ci.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let o=typeof s=="string"?s.split("-"):s,c=SE();if(c<o[0]||c>o[1])continue}let i;try{let o=t.lastIndexOf(":");o>0?gE?n={fd:gE(+t.slice(o+1).replace(/[\[\]]/g,""),t.slice(0,o))}:n={host:+t.slice(o+1).replace(/[\[\]]/g,""),port:t.slice(0,o)}:gE?n={fd:gE(+t,"::")}:n={port:t}}catch(o){console.error(`Unable to bind to port ${t}`,o);continue}e.push(new Promise((o,c)=>{r.listen(n,()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),Ni.trace("Listening on port "+t,nR)}).on("error",c)}))}return Promise.all(e)}a(g4,"listenOnPorts");!QL&&!TSe?.noServerStart&&_4();function vSe(e,t){let r=(_E(),D(iR)).getComponentName,n;if(t.securePort){p4(t.securePort,{protocol_name:"TLS",name:r()});let s=NSe("server",t.mtls),i=wo.get("tls");n=ISe({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,ciphers:i.ciphers??i[0]?.ciphers,SNICallback:s},e),s.initialize(n),kf[t.securePort]=n}return t.port&&(p4(t.port,{protocol_name:"TCP",name:r()}),n=ySe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),kf[t.port]=n),n}a(vSe,"onSocket")});var w4={};ye(w4,{startHTTPThreads:()=>MSe,startSocketServer:()=>rD,updateWorkerIdleness:()=>I4});async function MSe(e=2,t){pI().catch(r=>Vf.error?.("Error recording hostname for analytics:",r));try{if(t)eD(0,1,!0);else{let{loadRootComponents:r}=oR();if(e===0)return(0,No.setMainIsWorker)(!0),await XL().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)eD(r,e);return Promise.all(A4)}finally{(0,No.threadsHaveStarted)()}}function eD(e,t=1,r){if(ZL++,(0,No.startWorker)("server/threads/threadServer.js",{name:iA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(u){u.type===rA.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});A4.push(s),await s,Hf.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=cR.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=Hf.indexOf(n);o>-1&&Hf.splice(o,1)}if(a(i,"removeWorker"),Gf){let o=Gf;Gf=[];for(let c of o)b4[c.localPort](null,c)}}}),r){let n=setInterval(()=>{tD?tD=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,No.shutdownWorkers)(),ZL=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function rD(e=0,t){if(typeof e=="string")try{(0,lR.existsSync)(e)&&(0,lR.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=USe:r=xSe(t):r=nD;let n=(0,qf.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=b4[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),tD=!0,r(i,(o,c)=>{if(!o){if(S4){let u=i._socket||new qf.Socket({handle:i,writable:!0,readable:!0});S4.deliverSocket(u,e,c),u.resume()}else ZL>0?(Gf.length===0&&setTimeout(()=>{Gf.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),i.localPort=e,Gf.push(i)):(console.log("start up a dynamic thread to handle request"),eD(0));We(!1,"socket-routed");return}o.requests++;let l=i.fd;if(l>=0)o.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new qf.Socket({handle:i,writable:!0,readable:!0});kSe(u,o,e)}We(!0,"socket-routed")})},Vf.info(`HarperDB ${R4.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 nD(e,t){let r,n=0;for(let s of Hf){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=aR)return aR=i,t(r);n=i}aR=0,t(r)}function USe(e,t){let r={};e.getpeername(r);let n=r.address,s=$f.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);nD(e,o=>{$f.set(n,{worker:o,lastUsed:i}),t(o)})}function xSe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new qf.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],u=$f.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);nD(n,f=>{$f.set(l,{worker:f,lastUsed:d}),s(f,o)})})}a(r,"findByHeaderAffinity")}function I4(){aR=0;for(let e of Hf)e.expectedIdle=e.recentELU.idle+BSe,e.requests=1;Hf.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function kSe(e,t,r){let n=FSe++;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(),cR.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")),cR.delete(n)),s.event=="destroy"&&(e.destroy(),cR.delete(n))})}var No,qf,Vf,lR,y4,R4,Hf,Gf,b4,S4,ZL,A4,tD,aR,T4,$f,BSe,cR,FSe,sD=se(()=>{No=b(st()),qf=require("net");G();Vf=b(Q()),lR=require("fs");os();y4=require("worker_threads"),R4=b(yt()),Hf=[],Gf=[],b4=[],ZL=0,A4=[];y4.isMainThread&&process.on("uncaughtException",e=>{if(e.code!=="ECONNRESET"){if(e.code==="EIO"){Vf.disableStdio();return}console.error("uncaughtException",e)}});a(MSe,"startHTTPThreads");a(eD,"startHTTPWorker");a(rD,"startSocketServer");aR=0;a(nD,"findMostIdleWorker");T4=36e5,$f=new Map;a(USe,"findByRemoteAddressAffinity");a(xSe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of $f)r.lastUsed+T4<e&&$f.delete(t)},T4).unref();BSe=1e3;a(I4,"updateWorkerIdleness");(0,No.setMonitorListener)(I4);cR=new Map,FSe=1;a(kSe,"proxySocket")});var sR=M(dR=>{"use strict";var Ae=fe();Ae.initSync();jf();var dn=(G(),D(j)),{CONFIG_PARAMS:xe}=dn,ur=Q(),Yf=require("fs-extra"),qc=require("path"),HSe=nL(),{install:GSe}=Nz(),iD=require("chalk"),{packageJson:qSe,PACKAGE_ROOT:$Se}=yt(),Wf=ae(),VSe=(CL(),D(NL)),oD=_t(),C4=rl(),N4=Ay(),KSe=xz(),{compactOnStart:YSe}=(tL(),D(eL)),WSe=require("minimist"),jSe=Ts(),{startHTTPThreads:zSe}=(sD(),D(w4)),JSe=ky(),{isMainThread:QSe}=require("worker_threads"),ZHe=to(),eGe=Yl(),tGe=Nw(),rGe=wp(),uR=(G(),D(j)),{getHdbPid:XSe}=cu(),$c,Kf,O4=!1,ZSe="Upgrade complete. Starting HarperDB.",eTe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",tTe="HarperDB not found, starting install process.",rTe="There was an error during install, check install_log.log for more details. Exiting.",nTe="HarperDB successfully started.";function sTe(){process.on("unhandledRejection",(e,t)=>{ur.error("Unhandled promise rejection: Promise",t,"reason:",e)})}a(sTe,"addUnhandleRejectionListener");function iTe(){if(!O4){let e=a(()=>{Yf.removeSync(qc.join(Ae.get(dn.CONFIG_PARAMS.ROOTPATH),dn.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(iTe,"addExitListeners");async function P4(e=!1,t=!1){if(console.log(iD.magenta("Starting HarperDB...")),sTe(),ur.suppressLogging?.(()=>{console.log(iD.magenta(""+Yf.readFileSync(qc.join($Se,"utility/install/ascii_logo.txt"))))}),ur.debug("Checking to make sure hdb is installed"),VSe.isHdbInstalled(Ae,ur)===!1){console.log(tTe);try{await GSe()}catch(o){console.error(rTe,o),ur.error(o),process.exit(1)}}if(!e){let o=C4(Object.keys(dn.CONFIG_PARAM_MAP),!0);!Wf.isEmpty(o)&&!Wf.isEmptyOrZeroLength(Object.keys(o))&&oD.updateConfigValue(void 0,void 0,o,!0,!0)}let r=Kf?.service==="clustering";Kf?.service&&!r&&(console.error("Unrecognized service argument"),ur.debug("Unrecognized service argument"),process.exit(1));let n=XSe();n&&(r||(ur.debug("Error: HarperDB is already running"),console.error(`Error: HarperDB is already running (pid: ${n})`),process.exit(4))),$c===void 0&&($c=cu()),ur.debug("Checking for service clustering"),r&&(n||(console.error("HarperDB must be running to start clustering."),process.exit()),Ae.get(dn.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await N4.generateNatsConfig(),await $c.startClusteringProcesses(!0),process.exit()),iTe(),t&&await Yf.writeFile(qc.join(Ae.get(uR.CONFIG_PARAMS.ROOTPATH),uR.HDB_PID_FILE),`${process.pid}`),ur.info("HarperDB PID",process.pid);let s;try{let o=await JSe.getVersionUpdateInfo();o!==void 0&&(s=o[dn.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await KSe.upgrade(o),console.log(ZSe))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`,o),ur.error(o)):(console.error(eTe,o),ur.error(o)),process.exit(1)}HSe(),cTe(),await jSe.reviewSelfSignedCert(),Wf.autoCastBoolean(Ae.get(dn.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&QSe&&await N4.generateNatsConfig(t)}a(P4,"initialize");async function oTe(e=!1){try{Kf=WSe(process.argv),Kf.ROOTPATH&&oD.updateConfigObject("settings_path",qc.join(Kf.ROOTPATH,dn.HDB_CONFIG_FILE)),await P4(e,!0),Ae.get(dn.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await YSe();let t=process.env.IS_SCRIPTED_SERVICE&&!Kf.service;Wf.autoCastBoolean(Ae.get(dn.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(await $c.startClusteringProcesses(),await $c.startClusteringThreads()),await zSe(process.env.DEV_MODE?1:Ae.get(uR.CONFIG_PARAMS.THREADS_COUNT)??Ae.get(uR.CONFIG_PARAMS.THREADS)),t||L4()}catch(t){console.error(t),ur.error(t),process.exit(1)}}a(oTe,"main");function L4(){ur.suppressLogging(()=>{console.log(iD.magenta(`HarperDB ${qSe.version} successfully started`))}),ur.notify(nTe)}a(L4,"started");async function aTe(e=!0){O4=!e;try{$c===void 0&&($c=cu()),ur.debug("initializing processManagement..."),await P4(),ur.debug("Starting new main process"),await $c.startService(dn.PROCESS_DESCRIPTORS.HDB,!0),L4(),e&&process.exit(0)}catch(t){console.error(t),ur.error(t),process.exit(1)}}a(aTe,"launch");function cTe(){let e=qc.join(Ae.get(dn.CONFIG_PARAMS.ROOTPATH),dn.LICENSE_KEY_DIR_NAME,dn.LICENSE_FILE_NAME),t=qc.join(e,dn.LICENSE_FILE_NAME),r=qc.join(e,dn.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=C4(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Wf.isEmpty(n)||Wf.isEmpty(s))return;Yf.mkdirpSync(e),Yf.writeFileSync(r,n),Yf.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),ur.error(s)}}a(cTe,"writeLicenseFromVars");dR.launch=aTe;dR.main=oTe;dR.startupLog=lTe;function lTe(e){let r=a(p=>p.padEnd(20),"pad"),n=`
|
|
@@ -117,22 +117,22 @@ Connection: close\r
|
|
|
117
117
|
`;let l=[],u=oD.getConfigObj();for(let p in u)u[p].package&&l.push(p);let d={},f=`${r("REST:")}`;for(let[p,h]of e)for(let E of h){let _=E.name;_==="rest"&&(f+=`${E.protocol_name}: ${p}, `),l.includes(_)&&(d[_]?d[_]+=`${E.protocol_name}: ${p}, `:d[_]=`${E.protocol_name}: ${p}, `)}f.length>21&&(f=f.slice(0,-2),n+=`${f}
|
|
118
118
|
`);let m=Ae.get(xe.HTTP_PORT)?`HTTP: ${Ae.get(xe.HTTP_PORT)}, `:"";m+=Ae.get(xe.HTTP_SECUREPORT)?`HTTPS: ${Ae.get(xe.HTTP_SECUREPORT)}, `:"",m.length>21&&(m=m.slice(0,-2));for(let p of l)d[p]?n+=`${r(p+": ")}${d[p].slice(0,-2)}
|
|
119
119
|
`:n+=`${r(p+": ")}${m}
|
|
120
|
-
`;console.log(n),Ae.get(xe.LOGGING_STDSTREAMS)&&ur.logsAtLevel("info")&&ur.suppressLogging(()=>{console.log(`Note that log messages are being sent to the console (stdout and stderr) in addition to the log file ${s}. This can be disabled by setting logging.stdStreams to false, and the log file can be directly monitored/tailed.`)})}a(lTe,"startupLog")});var jf=M((cGe,B4)=>{"use strict";var uTe=require("minimist"),{isMainThread:uD,parentPort:yE,threadId:iGe}=require("worker_threads"),Vt=(G(),D(j)),Oi=Q(),dTe=ae(),fR=Ay(),aD=_r(),oGe=Dt(),fTe=_t(),_u=cu(),D4=qh(),{compactOnStart:mTe}=(tL(),D(eL)),aGe=rl(),{restartWorkers:lD,onMessageByType:pTe,shutdownWorkersNow:hTe}=st(),{handleHDBError:ETe,hdbErrors:_Te}=Ee(),{HTTP_STATUS_CODES:gTe}=_Te,RE=fe(),{sendOperationToNode:v4,getThisNodeName:STe,monitorNodeCAs:TTe}=(gs(),D(
|
|
121
|
-
${r.stack}`;throw fD.error(n),F4(new Error)}}}a(OTe,"getRolePermissions");function PTe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[jn.SYSTEM_SCHEMA_NAME]=n[jn.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=LTe(t[i]);return}r[i]=q4(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],u=DTe(c,l);r[i].describe||V4.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=mD()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=mD()})}),r}a(PTe,"translateRolePermissions");function LTe(e){let t=q4(!0);return Object.keys(e).forEach(r=>{t.tables[r]=mD(!0,!0,!0,!0,!0)}),t}a(LTe,"createStructureUserPermissions");function DTe(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,d)=>{let{attribute_name:f}=d,m=d;return jn.TIME_STAMP_NAMES.includes(f)&&(m=H4(f,d[bE])),u[f]=m,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=k4(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=Y4(d),s.attribute_permissions.push(d),c||vTe(d,l)}else if(u!==o){let d;jn.TIME_STAMP_NAMES.includes(u)?d=H4(u):d=k4(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=G4(s),s}else return e.describe=G4(e),e}a(DTe,"getTableAttrPerms");function G4(e){return V4.filter(t=>e[t]).length>0}a(G4,"getSchemaTableDescribePerm");function Y4(e){return K4.filter(t=>e[t]).length>0}a(Y4,"getAttributeDescribePerm");function vTe(e,t){K4.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(vTe,"checkForHashPerms")});var AE={};ye(AE,{authentication:()=>r2,bypassAuth:()=>KTe,login:()=>_D,logout:()=>gD,start:()=>YTe});function KTe(){t2=!0}async function r2(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let p=e.isOperationsServer?GTe?HTe:[]:kTe?FTe:[];if(p.includes(i)||p.includes("*")){if(e.method==="OPTIONS"){let h=wn.get(x.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",E=new Hs([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",h],["Access-Control-Allow-Origin",i]]);return pR&&E.set("Access-Control-Allow-Credentials","true"),{status:200,headers:E}}o.push("Access-Control-Allow-Origin",i),pR&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(pR){i||(i=r.host);let p=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let E of h)if(E.startsWith(p)){let _=E.indexOf(";");l=E.slice(p.length,_===-1?E.length:_),u=await z4.get(l);break}e.session=u||(u={})}let d=a((p,h,E)=>{let _=new UTe(p,h,Ya.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);_.auth_strategy=E,l&&(_.session_id=l),r.referer&&(_.referer=r.referer),r.origin&&(_.origin=r.origin),h===oi.SUCCESS?mR.info?.(_):mR.error?.(_)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&mR.error?.("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let p=await pf(e.peerCertificate,e.mtlsConfig);if(!p.valid)return mR.error?.("Certificate verification failed:",p.status,"for",e.peerCertificate.subject.CN),c({status:401,body:qo({error:"Certificate revoked or verification failed"},e)});let h=e.mtlsConfig.user;h!==null?((h===void 0||h==="Common Name"||h==="CN")&&(h=e.peerCertificate.subject.CN),e.user=await Ue.getUser(h,null,e),d(h,oi.SUCCESS,"mTLS")):BTe("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=Su.get(n),!f){let p=n.indexOf(" "),h=n.slice(0,p),E=n.slice(p+1),_,R;try{switch(h){case"Basic":let S=atob(E),y=S.indexOf(":");_=S.slice(0,y),R=S.slice(y+1),f=_||R?await Ue.getUser(_,R,e):null;break;case"Bearer":try{f=await wC(E)}catch(w){if(w.message==="invalid token")try{return await XS(E),c({status:-1})}catch{throw w}}break}}catch(S){return $Te&&(Su.get(E)||(Su.set(E,E),d(_,oi.FAILURE,h))),c({status:401,body:qo({error:S.message},e)})}Su.set(n,f),qTe&&d(f.username,oi.SUCCESS,h)}e.user=f}else u?.user?e.user=await Ue.getUser(u.user,null,e):(t2&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await Gp());pR&&(e.session.update=function(p){let h=wn.get(x.AUTHENTICATION_COOKIE_EXPIRES),E=e.protocol==="https"||r.host?.startsWith("localhost:")||r.host?.startsWith("127.0.0.1:")||r.host?.startsWith("::1");if(!l){l=(0,Q4.v4)();let _=wn.get(x.AUTHENTICATION_COOKIE_DOMAINS),R=h?new Date(Date.now()+(0,ED.convertToMS)(h)).toUTCString():VTe,S=r.host&&_?.find(I=>{I.startsWith(".")&&(I=I.slice(1));let H=r.host.indexOf(":");return(H!==-1?r.host.slice(0,H):r.host).endsWith(I)}),w=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${R}; HttpOnly`;S&&(w+=`; Domain=${S}`),E&&(w+="; SameSite=None; Secure"),o?o.push("Set-Cookie",w):m?.headers?.set&&m.headers.set("Set-Cookie",w)}return E&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):m?.headers?.set&&(i&&m.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),m.headers.set("X-Hdb-Session","Secure"))),p.id=l,z4.put(p,{expiresAt:h?Date.now()+(0,ED.convertToMS)(h):void 0})},e.login=async function(p,h){let E=e.user=await Ue.authenticateUser(p,h,e);e.session.update({user:E&&(E.getId?.()??E.username)})});let m=await t(e);return m&&(m.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Bs.loginPath?(m.status=302,m.headers.set("Location",Bs.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let d=l.headers;d||(l.headers=d=new Hs);for(let f=0;f<u;){let m=o[f++];d.set(m,o[f++])}}return o=null,l}a(c,"applyResponseHeaders")}function YTe({server:e,port:t,securePort:r}){e.http(r2,t||r?{port:t,securePort:r}:{port:"all"}),J4||(J4=!0,setInterval(()=>{Su=new Map},wn.get(x.AUTHENTICATION_CACHETTL)).unref(),xTe.addListener(()=>{Su=new Map}))}async function _D(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 gD(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var Q4,wn,X4,Z4,ED,MTe,UTe,xTe,e2,BTe,mR,FTe,kTe,HTe,GTe,z4,pR,t2,qTe,$Te,VTe,Su,J4,hR=se(()=>{hs();Hr();sc();Wd();Oe();Q4=require("uuid"),wn=b(fe());G();X4=b(Q()),Z4=b(Yp());zp();ED=b(ae());YT();Vo();({forComponent:MTe,AuthAuditLog:UTe}=X4.default),{user:xTe}=Z4.default,e2=MTe("authentication"),{debug:BTe}=e2,mR=e2.withTag("auth-event");wn.initSync();FTe=wn.get(x.HTTP_CORSACCESSLIST),kTe=wn.get(x.HTTP_CORS),HTe=wn.get(x.OPERATIONSAPI_NETWORK_CORSACCESSLIST),GTe=wn.get(x.OPERATIONSAPI_NETWORK_CORS),z4=ze({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),pR=wn.get(x.AUTHENTICATION_ENABLESESSIONS)??!0,t2=process.env.AUTHENTICATION_AUTHORIZELOCAL??wn.get(x.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,qTe=wn.get(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,$Te=wn.get(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,VTe="Tue, 01 Oct 8307 19:33:20 GMT",Su=new Map;Ue.onInvalidatedUser(()=>{Su=new Map});a(KTe,"bypassAuth");a(r2,"authentication");a(YTe,"start");a(_D,"login");a(gD,"logout")});var l2=M((bGe,c2)=>{"use strict";var Ie=require("joi"),n2=require("fs-extra"),s2=require("path"),zn=ft(),i2=fe(),o2=(G(),D(j)),a2=Q(),{hdbErrors:WTe}=Ee(),{HDB_ERROR_MSGS:Nn}=WTe,Ca=/^[a-zA-Z0-9-_]+$/,jTe=/^[a-zA-Z0-9-_]+$/;c2.exports={getDropCustomFunctionValidator:JTe,setCustomFunctionValidator:QTe,addComponentValidator:tye,dropCustomFunctionProjectValidator:rye,packageComponentValidator:nye,deployComponentValidator:sye,setComponentFileValidator:XTe,getComponentFileValidator:eye,dropComponentFileValidator:ZTe,addSSHKeyValidator:iye,getSSHKeyValidator:oye,updateSSHKeyValidator:aye,deleteSSHKeyValidator:cye,setSSHKnownHostsValidator:lye};function ER(e,t,r){try{let n=i2.get(o2.CONFIG_PARAMS.COMPONENTSROOT),s=s2.join(n,t);return n2.existsSync(s)?e?t:r.message(Nn.PROJECT_EXISTS):e?r.message(Nn.NO_PROJECT):t}catch(n){return a2.error(n),r.message(Nn.VALIDATION_ERR)}}a(ER,"checkProjectExists");function IE(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(IE,"checkFilePath");function zTe(e,t,r,n){try{let s=i2.get(o2.CONFIG_PARAMS.COMPONENTSROOT),i=s2.join(s,e,t,r+".js");return n2.existsSync(i)?r:n.message(Nn.NO_FILE)}catch(s){return a2.error(s),n.message(Nn.VALIDATION_ERR)}}a(zTe,"checkFileExists");function JTe(e){let t=Ie.object({project:Ie.string().pattern(Ca).custom(ER.bind(null,!0)).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().pattern(Ca).custom(zTe.bind(null,e.project,e.type)).custom(IE).required().messages({"string.pattern.base":Nn.BAD_FILE_NAME})});return zn.validateBySchema(e,t)}a(JTe,"getDropCustomFunctionValidator");function QTe(e){let t=Ie.object({project:Ie.string().pattern(Ca).custom(ER.bind(null,!0)).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().custom(IE).required(),function_content:Ie.string().required()});return zn.validateBySchema(e,t)}a(QTe,"setCustomFunctionValidator");function XTe(e){let t=Ie.object({project:Ie.string().pattern(Ca).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),file:Ie.string().custom(IE).required(),payload:Ie.string().allow("").optional(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return zn.validateBySchema(e,t)}a(XTe,"setComponentFileValidator");function ZTe(e){let t=Ie.object({project:Ie.string().pattern(Ca).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),file:Ie.string().custom(IE).optional()});return zn.validateBySchema(e,t)}a(ZTe,"dropComponentFileValidator");function eye(e){let t=Ie.object({project:Ie.string().required(),file:Ie.string().custom(IE).required(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return zn.validateBySchema(e,t)}a(eye,"getComponentFileValidator");function tye(e){let t=Ie.object({project:Ie.string().pattern(Ca).custom(ER.bind(null,!1)).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),template:Ie.string().optional(),install_command:Ie.string().optional(),install_timeout:Ie.number().optional()});return zn.validateBySchema(e,t)}a(tye,"addComponentValidator");function rye(e){let t=Ie.object({project:Ie.string().pattern(Ca).custom(ER.bind(null,!0)).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME})});return zn.validateBySchema(e,t)}a(rye,"dropCustomFunctionProjectValidator");function nye(e){let t=Ie.object({project:Ie.string().pattern(Ca).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),skip_node_modules:Ie.boolean(),skip_symlinks:Ie.boolean()});return zn.validateBySchema(e,t)}a(nye,"packageComponentValidator");function sye(e){let t=Ie.object({project:Ie.string().pattern(Ca).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),package:Ie.string().optional(),restart:Ie.alternatives().try(Ie.boolean(),Ie.string().valid("rolling")).optional(),install_command:Ie.string().optional(),install_timeout:Ie.number().optional()});return zn.validateBySchema(e,t)}a(sye,"deployComponentValidator");function iye(e){let t=Ie.object({name:Ie.string().pattern(jTe).required().messages({"string.pattern.base":Nn.BAD_SSH_KEY_NAME}),key:Ie.string().required(),host:Ie.string().required(),hostname:Ie.string().required(),known_hosts:Ie.string().optional()});return zn.validateBySchema(e,t)}a(iye,"addSSHKeyValidator");function oye(e){let t=Ie.object({name:Ie.string().required()});return zn.validateBySchema(e,t)}a(oye,"getSSHKeyValidator");function aye(e){let t=Ie.object({name:Ie.string().required(),key:Ie.string().required()});return zn.validateBySchema(e,t)}a(aye,"updateSSHKeyValidator");function cye(e){let t=Ie.object({name:Ie.string().required()});return zn.validateBySchema(e,t)}a(cye,"deleteSSHKeyValidator");function lye(e){let t=Ie.object({known_hosts:Ie.string().required()});return zn.validateBySchema(e,t)}a(lye,"setSSHKnownHostsValidator")});var m2={};ye(m2,{packageDirectory:()=>uye});function uye(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];d2.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,u2.join)("cache","webpack")):void 0,map:a(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,f2.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var u2,d2,f2,p2=se(()=>{u2=require("path"),d2=b(require("tar-fs")),f2=require("node:zlib");a(uye,"packageDirectory")});var RR={};ye(RR,{Application:()=>yR,InvalidInstallCommandError:()=>SR,InvalidInstallPropertyError:()=>gR,InvalidInstallTimeoutError:()=>TR,InvalidPackageIdentifierError:()=>_R,assertApplicationConfig:()=>T2,derivePackageIdentifier:()=>b2,extractApplication:()=>y2,installApplication:()=>R2,installApplications:()=>dye,nonInteractiveSpawn:()=>wE,prepareApplication:()=>A2});function T2(e,t){if(typeof t.package!="string")throw new _R(e,t.package);if("install"in t){if(typeof t.install!="object"||t.install===null||Array.isArray(t.install))throw new gR(e,t.install);if("command"in t.install&&typeof t.install.command!="string")throw new SR(e,t.install.command);if("timeout"in t.install&&(typeof t.install.timeout!="number"||t.install.timeout<0))throw new TR(e,t.install.timeout)}}async function y2(e){if(!e.payload&&!e.packageIdentifier)throw new Error("Either payload or package must be provided");if(e.payload&&e.packageIdentifier)throw new Error("Both payload and package cannot be provided");let t,r;if(e.payload)r=E2.Readable.from(e.payload instanceof Buffer?e.payload:Buffer.from(e.payload,"base64"));else{let s=(0,Jn.dirname)(e.dirPath);if(e.packageIdentifier.startsWith("file:")){let i=e.packageIdentifier.slice(5);try{let o=await(0,ct.stat)(i);if(o.isDirectory()){await(0,ct.symlink)(i,e.dirPath,"dir");return}if(!o.isFile())throw new Error(`File path specified in package identifier is not a file or directory: ${i}`);t=i,r=(0,Pa.createReadStream)(t)}catch(o){throw o.code==="ENOENT"?new Error(`File path specified in package identifier does not exist: ${i}`):o}}else{let{stdout:i,code:o,stderr:c}=await wE(e.name,"npm",["pack",e.packageIdentifier],s);if(o!==0)throw new Error(`Failed to download package ${e.packageIdentifier}: ${c}`);t=(0,Jn.join)(s,i.trim()),r=(0,Pa.createReadStream)(t)}}try{await(0,ct.access)(e.dirPath,ct.constants.F_OK),await(0,ct.rm)(e.dirPath,{recursive:!0,force:!0})}catch(s){if(s.code!=="ENOENT")throw s}await(0,ct.mkdir)(e.dirPath,{recursive:!0}),await(0,_2.pipeline)(r,(0,S2.default)(),(0,g2.extract)(e.dirPath));let n=await(0,ct.readdir)(e.dirPath,{withFileTypes:!0});if(n.length===1&&n[0].isDirectory()){let s=(0,Jn.join)(e.dirPath,n[0].name),i=await(0,ct.mkdtemp)(e.dirPath);await(0,ct.cp)(s,i,{recursive:!0}),await(0,ct.rm)(s,{recursive:!0,force:!0}),await(0,ct.cp)(i,e.dirPath,{recursive:!0}),await(0,ct.rm)(i,{recursive:!0,force:!0})}t&&await(0,ct.rm)(t,{force:!0})}async function R2(e){let t;try{t=JSON.parse(await(0,ct.readFile)((0,Jn.join)(e.dirPath,"package.json"),"utf8"))}catch(i){if(i.code!=="ENOENT")throw i;e.logger.debug(`Application ${e.name} has no package.json; skipping install`);return}try{await(0,ct.access)((0,Jn.join)(e.dirPath,"node_modules"),ct.constants.F_OK),e.logger.debug(`Application ${e.name} already has node_modules; skipping install`);return}catch(i){if(i.code!=="ENOENT")throw i}if(e.install?.command){let[i,...o]=e.install.command.split(" "),{stderr:c,code:l}=await wE(e.name,i,o,e.dirPath,e.install?.timeout);if(l===0)return;throw zf(e.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using custom install command: ${e.install.command}. Exit code: ${l}`)}let{packageManager:r}=t.devEngines||{};if(r){let i=r.onFail,o=["ignore","warn","error"];i==="download"?(e.logger.warn('Harper currently does not support `devEngines.packageManager.onFail = "download"`. Defaulting to "error"'),i="error"):i&&!o.includes(i)&&(e.logger.error(`Invalid \`devEngines.packageManager.onFail\` value: "${i}". Expected one of ${o.map(u=>`"${u}"`).join(", ")}. Defaulting to "error"`),i="error"),i=i||"error";let{stderr:c,code:l}=await wE(e.name,r.name,["install"],e.dirPath,e.install?.timeout);if(l===0)return;if(i==="error")throw zf(r.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using ${r.name}. Exit code: ${l}`);i==="warn"&&(zf(r.name,c,"warn"),e.logger.warn(`Failed to install dependencies for ${e.name} using ${r.name}. Exit code: ${l}`))}let{stderr:n,code:s}=await wE(e.name,"npm",["install","--force"],e.dirPath);if(s!==0)throw zf(e.name,n,"error"),new Error(`Failed to install dependencies for ${e.name} using npm default. Exit code: ${s}`)}function b2(e){return e.includes(":")?e:e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?`npm:${e}`:(0,Jn.extname)(e)||(0,Pa.existsSync)(e)?`file:${e}`:`github:${e}`}function A2(e){return y2(e).then(()=>R2(e))}async function dye(){let e=(0,Tu.getConfigObj)(),t=(0,Tu.getConfigValue)(x.COMPONENTSROOT);await(0,ct.mkdir)(t,{recursive:!0});let r=(0,Jn.join)((0,Tu.getConfigValue)(x.ROOTPATH),"harper-application-lock.json"),n={application:{}};try{n=JSON.parse(await(0,ct.readFile)(r,"utf8"))}catch(o){if(o.code!=="ENOENT")throw o}let s=[];for(let[o,c]of Object.entries(e)){if(typeof c!="object"||c===null||!("package"in c))continue;T2(o,c);let l=new yR({name:o,packageIdentifier:c.package,install:c.install});if((0,Pa.existsSync)(l.dirPath)&&n.applications[o]&&JSON.stringify(n.applications[o])===JSON.stringify(c)){Oa.default.info(`Application ${o} is already installed with matching configuration; skipping installation`);continue}s.push(A2(l)),n.applications[o]=c}let i=await Promise.allSettled(s);Oa.default.debug(i),Oa.default.info("All root applications loaded"),await(0,ct.writeFile)(r,JSON.stringify(n,null,2),"utf8")}function fye(){let e=(0,Tu.getConfigValue)(x.ROOTPATH),t=(0,Jn.join)(e,"ssh");if((0,Pa.existsSync)(t)){for(let r of(0,Pa.readdirSync)(t))if(r.includes(".key"))return`ssh -F ${(0,Jn.join)(t,"config")} -o UserKnownHostsFile=${(0,Jn.join)(t,"known_hosts")}`}}function wE(e,t,r,n,s=300*1e3){return new Promise((i,o)=>{Oa.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Executing \`${t} ${r.join(" ")}\` in ${n}`);let c={...process.env},l=fye();l&&(c.GIT_SSH_COMMAND=l);let u=(0,h2.spawn)(t,r,{shell:!0,cwd:n,env:c,stdio:["ignore","pipe","pipe"]}),d=setTimeout(()=>{u.kill(),o(new Error(`Command\`${t} ${r.join(" ")}\` timed out after ${s}ms`))},s),f="";u.stdout.on("data",p=>{f+=p.toString(),Oa.default.loggerWithTag(`${e}:spawn:${t}:stdout`).debug(p.toString())});let m="";u.stderr.on("data",p=>{m+=p.toString()}),u.on("error",p=>{clearTimeout(d),m&&zf(e,t,m),o(p)}),u.on("close",p=>{clearTimeout(d),m&&zf(e,t,m),Oa.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Process exited with code ${p}`),i({stdout:f,stderr:m,code:p})})})}function zf(e,t,r,n="debug"){let s=Oa.default.loggerWithTag(`${e}:spawn:${t}:stderr`);for(let i of r.split(`
|
|
122
|
-
`))s[n](i)}var Tu,Oa,Jn,ct,h2,Pa,E2,_2,g2,S2,_R,gR,SR,TR,yR,bR=se(()=>{Tu=b(_t());G();Oa=b(Q()),Jn=require("node:path"),ct=require("node:fs/promises"),h2=require("node:child_process"),Pa=require("node:fs"),E2=require("node:stream"),_2=require("node:stream/promises"),g2=require("tar-fs"),S2=b(require("gunzip-maybe")),_R=class extends TypeError{static{a(this,"InvalidPackageIdentifierError")}constructor(t,r){super(`Invalid 'package' property for application ${t}: expected string, got ${typeof r}`)}},gR=class extends TypeError{static{a(this,"InvalidInstallPropertyError")}constructor(t,r){super(`Invalid 'install' property for application ${t}: expected object, got ${typeof r}`)}},SR=class extends TypeError{static{a(this,"InvalidInstallCommandError")}constructor(t,r){super(`Invalid 'install.command' property for application ${t}: expected string, got ${typeof r}`)}},TR=class extends TypeError{static{a(this,"InvalidInstallTimeoutError")}constructor(t,r){super(`Invalid 'install.timeout' property for application ${t}: expected non-negative number, got ${typeof r}`)}};a(T2,"assertApplicationConfig");a(y2,"extractApplication");a(R2,"installApplication");yR=class{static{a(this,"Application")}name;payload;packageIdentifier;install;dirPath;logger;constructor({name:t,payload:r,packageIdentifier:n,install:s}){this.name=t,this.payload=r,this.packageIdentifier=n&&b2(n),this.install=s,this.dirPath=(0,Jn.join)((0,Tu.getConfigValue)(x.COMPONENTSROOT),t),this.logger=Oa.default.loggerWithTag(t)}};a(b2,"derivePackageIdentifier");a(A2,"prepareApplication");a(dye,"installApplications");a(fye,"getGitSSHCommand");a(wE,"nonInteractiveSpawn");a(zf,"printStderr")});var yD=M(er=>{"use strict";var ke=require("node:path"),{isMainThread:mye}=require("node:worker_threads"),Le=require("fs-extra"),SD=require("fast-glob"),TD=require("normalize-path"),Cn=l2(),Kt=Q(),Mt=(G(),D(j)),Rr=fe(),AR=_t(),pye=ae(),{PACKAGE_ROOT:hye}=yt(),{handleHDBError:Yt,hdbErrors:Eye}=Ee(),CGe=fe(),{HDB_ERROR_MSGS:yu,HTTP_STATUS_CODES:Wt}=Eye,I2=st(),{replicateOperation:Pi}=(gs(),D(aa)),{packageDirectory:_ye}=(p2(),D(m2)),OGe=ke.join(hye,"application-template"),gye=Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),Co=ke.join(gye,"ssh"),La=ke.join(Co,"known_hosts"),{Resources:Sye}=(sc(),D(PI)),{Application:w2,prepareApplication:N2}=(bR(),D(RR));function Tye(){Kt.trace("getting custom api status");let e={};try{e={port:Rr.get(Mt.CONFIG_PARAMS.HTTP_PORT),directory:Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Yt(new Error,yu.FUNCTION_STATUS,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,t)}return e}a(Tye,"customFunctionsStatus");function yye(){Kt.trace("getting custom api endpoints");let e={},t=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT);try{SD.sync(TD(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:SD.sync(TD(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:SD.sync(TD(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Yt(new Error,yu.GET_FUNCTIONS,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,r)}return e}a(yye,"getCustomFunctions");function Rye(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=Cn.getDropCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("getting custom api endpoint file content");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=ke.join(r,n,s,i+".js");try{return Le.readFileSync(o,{encoding:"utf8"})}catch(c){throw Yt(new Error,yu.GET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,c)}}a(Rye,"getCustomFunction");async function bye(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=Cn.setCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("setting custom function file content");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{Le.outputFileSync(ke.join(r,n,s,i+".js"),o);let c=await Pi(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Yt(new Error,yu.SET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,c)}}a(bye,"setCustomFunction");async function Aye(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=Cn.getDropCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("dropping custom function file");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Le.unlinkSync(ke.join(r,n,s,i+".js"));let o=await Pi(e);return o.message=`Successfully deleted custom function: ${i}.js`,o}catch(o){throw Yt(new Error,yu.DROP_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,o)}}a(Aye,"dropCustomFunction");async function Iye(e){e.project&&(e.project=ke.parse(e.project).name);let t=Cn.addComponentValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("adding component");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,install_command:s,install_timeout:i}=e,o=e.template||"https://github.com/harperdb/application-template";try{let c=ke.join(r,n);Le.mkdirSync(c,{recursive:!0});let l=new w2({name:n,packageIdentifier:o,install:{command:s,timeout:i}});await N2(l);let u=await Pi(e);return u.message=`Successfully added project: ${n}`,u}catch(c){throw Yt(new Error,yu.ADD_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,c)}}a(Iye,"addComponent");async function wye(e){e.project&&(e.project=ke.parse(e.project).name);let t=Cn.dropCustomFunctionProjectValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("dropping custom function project");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Rr.get(Mt.CONFIG_PARAMS.APPS);if(!pye.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return AR.updateConfigValue(Mt.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=ke.join(r,n);Le.rmSync(i,{recursive:!0});let o=await Pi(e);return o.message=`Successfully deleted project: ${n}`,o}catch(i){throw Yt(new Error,yu.DROP_FUNCTION_PROJECT,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,i)}}a(wye,"dropCustomFunctionProject");async function Nye(e){e.project&&(e.project=ke.parse(e.project).name);let t=Cn.packageComponentValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Kt.trace("packaging component",n);let s;try{s=await Le.realpath(ke.join(r,n))}catch(o){if(o.code!==Mt.NODE_ERROR_CODES.ENOENT)throw o;try{s=await Le.realpath(ke.join(Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===Mt.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await _ye(s,e)).toString("base64");return{project:n,payload:i}}a(Nye,"packageComponent");async function Cye(e){e.project?e.project=ke.parse(e.project).name:e.package&&(e.project=Oye(e.package));let t=Cn.deployComponentValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);if(e.package){let l={package:e.package};(e.install_command||e.install_timeout)&&(l.install={command:e.install_command,timeout:e.install_timeout}),await AR.addConfig(e.project,l)}let r=new w2({name:e.project,payload:e.payload,packageIdentifier:e.package,install:{command:e.install_command,timeout:e.install_timeout}});if(await N2(r),mye)return;let n=new Sye;n.isWorker=!0;let s=(_E(),D(iR)),i;if(s.setErrorReporter(l=>i=l),await s.loadComponent(r.dirPath,n),i)throw i;let o=e.restart==="rolling";e.restart=o?!1:e.restart;let c=await Pi(e);if(e.restart===!0)I2.restartWorkers("http"),c.message=`Successfully deployed: ${r.name}, restarting HarperDB`;else if(o){let u=await(bD(),D(RD)).executeJob({operation:"restart_service",service:"http",replicated:!0});c.restartJobId=u.job_id,c.message=`Successfully deployed: ${r.name}, restarting HarperDB`}else c.message=`Successfully deployed: ${r.name}`;return c}a(Cye,"deployComponent");function Oye(e){if(e.startsWith("git+ssh://"))return ke.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return ke.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Le.readFileSync(ke.join(e,"package.json"),"utf8"));return ke.basename(t)}catch{}return ke.basename(e)}a(Oye,"getProjectNameFromPackage");async function Pye(){let e=AR.getConfiguration(),t=a(async(i,o)=>{try{let c=await Le.readdir(i,{withFileTypes:!0});for(let l of c){let u=l.name;if(u.startsWith(".")||u==="node_modules")continue;let d=ke.join(i,u);if(l.isDirectory()||l.isSymbolicLink()){let f={name:u,entries:[]};o.entries.push(f),await t(d,f)}else{let f=await Le.stat(d),m={name:ke.basename(u),mtime:f.mtime,size:f.size};o.entries.push(m)}}return o}catch(c){return Kt.warn("Error loading package",c),{error:c.toString(),entries:[]}}},"walkDir"),r=await t(Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{name:Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT).split(ke.sep).slice(-1).pop(),entries:[]});for(let i of r.entries){let o=e[i.name]?.package;o&&(i.package=o)}let{internal:n}=(Vp(),D(kN)),s;try{s=await n.ComponentStatusRegistry.getAggregatedFromAllThreads(n.componentStatusRegistry)}catch(i){Kt.debug(`Failed to get component status from threads: ${i.message}`)}for(let i of r.entries)try{i.status=await n.componentStatusRegistry.getAggregatedStatusFor(i.name,s)}catch(o){Kt.debug(`Failed to get aggregated status for component ${i.name}: ${o.message}`),i.status={status:"unknown",message:"Failed to retrieve component status",lastChecked:{workers:{}}}}return r}a(Pye,"getComponents");async function Lye(e){let t=Cn.getComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let s=await Le.stat(ke.join(r,e.project,e.file));return{message:await Le.readFile(ke.join(r,e.project,e.file),n),size:s.size,birthtime:s.birthtime,mtime:s.mtime}}catch(s){throw s.code===Mt.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${ke.join(e.project,e.file)}'`):s}}a(Lye,"getComponentFile");async function Dye(e){let t=Cn.setComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=ke.join(Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Le.ensureFile(n),await Le.outputFile(n,e.payload,r)):await Le.ensureDir(n);let s=await Pi(e);return s.message="Successfully set component: "+e.file,s}a(Dye,"setComponentFile");async function vye(e){let t=Cn.dropComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?ke.join(r,n):r,i=ke.join(Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),s),o=ke.join(Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Le.pathExists(o)&&await Le.unlink(o),await Le.pathExists(i)&&await Le.remove(i);let c=ke.join(Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Le.pathExists(c)){let u=JSON.parse(await Le.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Le.writeFile(c,JSON.stringify(u,null,2),"utf8")}AR.deleteConfigFromFile([r]);let l=await Pi(e);return e.restart===!0?(I2.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}a(vye,"dropComponent");async function Mye(e){let t=Cn.addSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:o}=e;Kt.trace("adding ssh key",r);let c=ke.join(Co,r+".key"),l=ke.join(Co,"config");if(await Le.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Le.outputFile(c,n),await Le.chmod(c,"0600");let u=`#${r}
|
|
120
|
+
`;console.log(n),Ae.get(xe.LOGGING_STDSTREAMS)&&ur.logsAtLevel("info")&&ur.suppressLogging(()=>{console.log(`Note that log messages are being sent to the console (stdout and stderr) in addition to the log file ${s}. This can be disabled by setting logging.stdStreams to false, and the log file can be directly monitored/tailed.`)})}a(lTe,"startupLog")});var jf=M((cGe,B4)=>{"use strict";var uTe=require("minimist"),{isMainThread:uD,parentPort:yE,threadId:iGe}=require("worker_threads"),Vt=(G(),D(j)),Oi=Q(),dTe=ae(),fR=Ay(),aD=_r(),oGe=Dt(),fTe=_t(),_u=cu(),D4=qh(),{compactOnStart:mTe}=(tL(),D(eL)),aGe=rl(),{restartWorkers:lD,onMessageByType:pTe,shutdownWorkersNow:hTe}=st(),{handleHDBError:ETe,hdbErrors:_Te}=Ee(),{HTTP_STATUS_CODES:gTe}=_Te,RE=fe(),{sendOperationToNode:v4,getThisNodeName:STe,monitorNodeCAs:TTe}=(gs(),D(ca)),yTe=require("node:path"),{unlinkSync:RTe}=require("node:fs");RE.initSync();var cD=`Restarting HarperDB. This may take up to ${Vt.RESTART_TIMEOUT_MS/1e3} seconds.`,M4="Clustering is not enabled so cannot be restarted",bTe="Invalid service",Ca;B4.exports={restart:x4,restartService:dD};uD&&pTe(Vt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await dD({service:e.workerType}):x4({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function x4(e){Ca=Object.keys(e).length===0;let t=uTe(process.argv);if(t.service){await dD(t);return}if(Ca){let r=_u.getHdbPid();return console.error(r?"Restarting Harper...":"Starting Harper..."),sR().launch(!0),cD}return uD?(Oi.notify(cD),RE.get(Vt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await mTe(),process.env.HARPER_EXIT_ON_RESTART&&(Oi.warn("Exiting Harper process to trigger a container restart"),process.exit(0)),setTimeout(async()=>{Oi.debug("Shutdown workers"),await hTe(),await _u.cleanupChildrenProcesses(!1),await RTe(yTe.join(RE.get(Vt.CONFIG_PARAMS.ROOTPATH),Vt.HDB_PID_FILE),`${process.pid}`),Oi.debug("Starting new process..."),sR().launch(!0)},50)):yE.postMessage({type:Vt.ITC_EVENT_TYPES.RESTART}),cD}a(x4,"restart");async function dD(e){let{service:t}=e;if(Vt.HDB_PROCESS_SERVICES[t]===void 0)throw ETe(new Error,bTe,gTe.BAD_REQUEST,void 0,void 0,!0);if(_u.expectedRestartOfChildren(),!uD){e.replicated&&TTe(),yE.postMessage({type:Vt.ITC_EVENT_TYPES.RESTART,workerType:t}),yE.ref(),await new Promise(s=>{yE.on("message",i=>{i.type==="restart-complete"&&(s(),yE.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===STe())continue;let i;try{({job_id:i}=await v4(s,e))}catch(o){n.push({node:s.name,message:o.message});continue}n.push(await new Promise((o,c)=>{let u=2400,d=setInterval(async()=>{if(u--<=0){clearInterval(d);let p=new Error("Timed out waiting for restart job to complete");p.replicated=n,c(p)}let m=(await v4(s,{operation:"get_job",id:i})).results[0];if(m.status==="COMPLETE"&&(clearInterval(d),o({node:s.name,message:m.message})),m.status==="ERROR"){clearInterval(d);let p=new Error(m.message);p.replicated=n,c(p)}},250)}))}return{replicated:n}}return}let r;switch(t){case Vt.HDB_PROCESS_SERVICES.clustering:if(!RE.get(Vt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=M4;break}Ca&&console.log("Restarting clustering"),Oi.notify("Restarting clustering"),await ATe();break;case Vt.HDB_PROCESS_SERVICES.clustering_config:case Vt.HDB_PROCESS_SERVICES["clustering config"]:if(!RE.get(Vt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=M4;break}Ca&&console.log("Restarting clusteringConfig"),Oi.notify("Restarting clustering_config"),await _u.reloadClustering();break;case"custom_functions":case"custom functions":case Vt.HDB_PROCESS_SERVICES.harperdb:case Vt.HDB_PROCESS_SERVICES.http_workers:case Vt.HDB_PROCESS_SERVICES.http:Ca&&console.log("Restarting httpWorkers"),Oi.notify("Restarting http_workers"),Ca?await _u.restart(Vt.PROCESS_DESCRIPTORS.HDB):await lD("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Oi.error(r),Ca&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(dD,"restartService");async function ATe(){if(!fTe.getConfigFromFile(Vt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await D4.getHDBProcessInfo()).clustering.length===0)Oi.trace("Clustering not running, restart will start clustering services"),await fR.generateNatsConfig(!0),await _u.startClusteringProcesses(),await _u.startClusteringThreads(),await U4(),Ca&&await aD.closeConnection();else{await fR.generateNatsConfig(!0),(await D4.getHDBProcessInfo()).clustering.forEach(s=>{Oi.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await dTe.asyncSetTimeout(3e3),await U4(),await aD.updateLocalStreams(),Ca&&await aD.closeConnection(),Oi.trace("Restart clustering restarting ingest and reply service threads");let r=lD(Vt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),n=lD(Vt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await r,await n}}a(ATe,"restartClustering");async function U4(){await fR.removeNatsConfig(Vt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await fR.removeNatsConfig(Vt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(U4,"removeNatsConfig")});var j4=M((dGe,W4)=>{"use strict";var uGe=require("lodash"),jn=(G(),D(j)),{handleHDBError:F4,hdbErrors:ITe}=Ee(),{HDB_ERROR_MSGS:wTe,HTTP_STATUS_CODES:NTe}=ITe,fD=Q();W4.exports={getRolePermissions:OTe};var gu=Object.create(null),CTe=a(e=>({key:e,perms:{}}),"permsTemplateObj"),q4=a((e=!1)=>({describe:e,tables:{}}),"schemaPermsTemplate"),$4=a((e=!1,t=!1,r=!1,n=!1)=>({[jn.PERMS_CRUD_ENUM.READ]:e,[jn.PERMS_CRUD_ENUM.INSERT]:t,[jn.PERMS_CRUD_ENUM.UPDATE]:r,[jn.PERMS_CRUD_ENUM.DELETE]:n}),"permissionsTemplate"),mD=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...$4(t,r,n,s)}),"tablePermsTemplate"),k4=a((e,t=$4())=>({attribute_name:e,describe:Y4(t),[bE]:t[bE],[pD]:t[pD],[hD]:t[hD]}),"attrPermsTemplate"),H4=a((e,t=!1)=>({attribute_name:e,describe:t,[bE]:t}),"timestampAttrPermsTemplate"),{READ:bE,INSERT:pD,UPDATE:hD}=jn.PERMS_CRUD_ENUM,V4=Object.values(jn.PERMS_CRUD_ENUM),K4=[bE,pD,hD];function OTe(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[jn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(gu[t]&&gu[t].key===n)return gu[t].perms;let s=PTe(e,r);return gu[t]?gu[t].key=n:gu[t]=CTe(n),gu[t].perms=s,s}catch(r){if(!e[jn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[jn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<jn.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${role_name}' must be updated to align with new structure from the 2.2.0 release.`;throw fD.error(n),fD.debug(r),F4(new Error,wTe.OUTDATED_PERMS_TRANSLATION_ERROR,NTe.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
|
|
121
|
+
${r.stack}`;throw fD.error(n),F4(new Error)}}}a(OTe,"getRolePermissions");function PTe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[jn.SYSTEM_SCHEMA_NAME]=n[jn.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=LTe(t[i]);return}r[i]=q4(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],u=DTe(c,l);r[i].describe||V4.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=mD()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=mD()})}),r}a(PTe,"translateRolePermissions");function LTe(e){let t=q4(!0);return Object.keys(e).forEach(r=>{t.tables[r]=mD(!0,!0,!0,!0,!0)}),t}a(LTe,"createStructureUserPermissions");function DTe(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,d)=>{let{attribute_name:f}=d,m=d;return jn.TIME_STAMP_NAMES.includes(f)&&(m=H4(f,d[bE])),u[f]=m,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=k4(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=Y4(d),s.attribute_permissions.push(d),c||vTe(d,l)}else if(u!==o){let d;jn.TIME_STAMP_NAMES.includes(u)?d=H4(u):d=k4(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=G4(s),s}else return e.describe=G4(e),e}a(DTe,"getTableAttrPerms");function G4(e){return V4.filter(t=>e[t]).length>0}a(G4,"getSchemaTableDescribePerm");function Y4(e){return K4.filter(t=>e[t]).length>0}a(Y4,"getAttributeDescribePerm");function vTe(e,t){K4.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(vTe,"checkForHashPerms")});var AE={};ye(AE,{authentication:()=>r2,bypassAuth:()=>KTe,login:()=>_D,logout:()=>gD,start:()=>YTe});function KTe(){t2=!0}async function r2(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let p=e.isOperationsServer?GTe?HTe:[]:kTe?FTe:[];if(p.includes(i)||p.includes("*")){if(e.method==="OPTIONS"){let h=wn.get(x.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",E=new Hs([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",h],["Access-Control-Allow-Origin",i]]);return pR&&E.set("Access-Control-Allow-Credentials","true"),{status:200,headers:E}}o.push("Access-Control-Allow-Origin",i),pR&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(pR){i||(i=r.host);let p=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let E of h)if(E.startsWith(p)){let _=E.indexOf(";");l=E.slice(p.length,_===-1?E.length:_),u=await z4.get(l);break}e.session=u||(u={})}let d=a((p,h,E)=>{let _=new UTe(p,h,Ya.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);_.auth_strategy=E,l&&(_.session_id=l),r.referer&&(_.referer=r.referer),r.origin&&(_.origin=r.origin),h===oi.SUCCESS?mR.info?.(_):mR.error?.(_)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&mR.error?.("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let p=await pf(e.peerCertificate,e.mtlsConfig);if(!p.valid)return mR.error?.("Certificate verification failed:",p.status,"for",e.peerCertificate.subject.CN),c({status:401,body:$o({error:"Certificate revoked or verification failed"},e)});let h=e.mtlsConfig.user;h!==null?((h===void 0||h==="Common Name"||h==="CN")&&(h=e.peerCertificate.subject.CN),e.user=await Ue.getUser(h,null,e),d(h,oi.SUCCESS,"mTLS")):BTe("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=Su.get(n),!f){let p=n.indexOf(" "),h=n.slice(0,p),E=n.slice(p+1),_,R;try{switch(h){case"Basic":let S=atob(E),y=S.indexOf(":");_=S.slice(0,y),R=S.slice(y+1),f=_||R?await Ue.getUser(_,R,e):null;break;case"Bearer":try{f=await wC(E)}catch(w){if(w.message==="invalid token")try{return await XS(E),c({status:-1})}catch{throw w}}break}}catch(S){return $Te&&(Su.get(E)||(Su.set(E,E),d(_,oi.FAILURE,h))),c({status:401,body:$o({error:S.message},e)})}Su.set(n,f),qTe&&d(f.username,oi.SUCCESS,h)}e.user=f}else u?.user?e.user=await Ue.getUser(u.user,null,e):(t2&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await Gp());pR&&(e.session.update=function(p){let h=wn.get(x.AUTHENTICATION_COOKIE_EXPIRES),E=e.protocol==="https"||r.host?.startsWith("localhost:")||r.host?.startsWith("127.0.0.1:")||r.host?.startsWith("::1");if(!l){l=(0,Q4.v4)();let _=wn.get(x.AUTHENTICATION_COOKIE_DOMAINS),R=h?new Date(Date.now()+(0,ED.convertToMS)(h)).toUTCString():VTe,S=r.host&&_?.find(I=>{I.startsWith(".")&&(I=I.slice(1));let H=r.host.indexOf(":");return(H!==-1?r.host.slice(0,H):r.host).endsWith(I)}),w=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${R}; HttpOnly`;S&&(w+=`; Domain=${S}`),E&&(w+="; SameSite=None; Secure"),o?o.push("Set-Cookie",w):m?.headers?.set&&m.headers.set("Set-Cookie",w)}return E&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):m?.headers?.set&&(i&&m.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),m.headers.set("X-Hdb-Session","Secure"))),p.id=l,z4.put(p,{expiresAt:h?Date.now()+(0,ED.convertToMS)(h):void 0})},e.login=async function(p,h){let E=e.user=await Ue.authenticateUser(p,h,e);e.session.update({user:E&&(E.getId?.()??E.username)})});let m=await t(e);return m&&(m.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Bs.loginPath?(m.status=302,m.headers.set("Location",Bs.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let d=l.headers;d||(l.headers=d=new Hs);for(let f=0;f<u;){let m=o[f++];d.set(m,o[f++])}}return o=null,l}a(c,"applyResponseHeaders")}function YTe({server:e,port:t,securePort:r}){e.http(r2,t||r?{port:t,securePort:r}:{port:"all"}),J4||(J4=!0,setInterval(()=>{Su=new Map},wn.get(x.AUTHENTICATION_CACHETTL)).unref(),xTe.addListener(()=>{Su=new Map}))}async function _D(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 gD(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var Q4,wn,X4,Z4,ED,MTe,UTe,xTe,e2,BTe,mR,FTe,kTe,HTe,GTe,z4,pR,t2,qTe,$Te,VTe,Su,J4,hR=se(()=>{hs();Hr();sc();Wd();Oe();Q4=require("uuid"),wn=b(fe());G();X4=b(Q()),Z4=b(Yp());zp();ED=b(ae());YT();Ko();({forComponent:MTe,AuthAuditLog:UTe}=X4.default),{user:xTe}=Z4.default,e2=MTe("authentication"),{debug:BTe}=e2,mR=e2.withTag("auth-event");wn.initSync();FTe=wn.get(x.HTTP_CORSACCESSLIST),kTe=wn.get(x.HTTP_CORS),HTe=wn.get(x.OPERATIONSAPI_NETWORK_CORSACCESSLIST),GTe=wn.get(x.OPERATIONSAPI_NETWORK_CORS),z4=ze({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),pR=wn.get(x.AUTHENTICATION_ENABLESESSIONS)??!0,t2=process.env.AUTHENTICATION_AUTHORIZELOCAL??wn.get(x.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,qTe=wn.get(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,$Te=wn.get(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,VTe="Tue, 01 Oct 8307 19:33:20 GMT",Su=new Map;Ue.onInvalidatedUser(()=>{Su=new Map});a(KTe,"bypassAuth");a(r2,"authentication");a(YTe,"start");a(_D,"login");a(gD,"logout")});var l2=M((bGe,c2)=>{"use strict";var Ie=require("joi"),n2=require("fs-extra"),s2=require("path"),zn=ft(),i2=fe(),o2=(G(),D(j)),a2=Q(),{hdbErrors:WTe}=Ee(),{HDB_ERROR_MSGS:Nn}=WTe,Oa=/^[a-zA-Z0-9-_]+$/,jTe=/^[a-zA-Z0-9-_]+$/;c2.exports={getDropCustomFunctionValidator:JTe,setCustomFunctionValidator:QTe,addComponentValidator:tye,dropCustomFunctionProjectValidator:rye,packageComponentValidator:nye,deployComponentValidator:sye,setComponentFileValidator:XTe,getComponentFileValidator:eye,dropComponentFileValidator:ZTe,addSSHKeyValidator:iye,getSSHKeyValidator:oye,updateSSHKeyValidator:aye,deleteSSHKeyValidator:cye,setSSHKnownHostsValidator:lye};function ER(e,t,r){try{let n=i2.get(o2.CONFIG_PARAMS.COMPONENTSROOT),s=s2.join(n,t);return n2.existsSync(s)?e?t:r.message(Nn.PROJECT_EXISTS):e?r.message(Nn.NO_PROJECT):t}catch(n){return a2.error(n),r.message(Nn.VALIDATION_ERR)}}a(ER,"checkProjectExists");function IE(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(IE,"checkFilePath");function zTe(e,t,r,n){try{let s=i2.get(o2.CONFIG_PARAMS.COMPONENTSROOT),i=s2.join(s,e,t,r+".js");return n2.existsSync(i)?r:n.message(Nn.NO_FILE)}catch(s){return a2.error(s),n.message(Nn.VALIDATION_ERR)}}a(zTe,"checkFileExists");function JTe(e){let t=Ie.object({project:Ie.string().pattern(Oa).custom(ER.bind(null,!0)).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().pattern(Oa).custom(zTe.bind(null,e.project,e.type)).custom(IE).required().messages({"string.pattern.base":Nn.BAD_FILE_NAME})});return zn.validateBySchema(e,t)}a(JTe,"getDropCustomFunctionValidator");function QTe(e){let t=Ie.object({project:Ie.string().pattern(Oa).custom(ER.bind(null,!0)).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().custom(IE).required(),function_content:Ie.string().required()});return zn.validateBySchema(e,t)}a(QTe,"setCustomFunctionValidator");function XTe(e){let t=Ie.object({project:Ie.string().pattern(Oa).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),file:Ie.string().custom(IE).required(),payload:Ie.string().allow("").optional(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return zn.validateBySchema(e,t)}a(XTe,"setComponentFileValidator");function ZTe(e){let t=Ie.object({project:Ie.string().pattern(Oa).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),file:Ie.string().custom(IE).optional()});return zn.validateBySchema(e,t)}a(ZTe,"dropComponentFileValidator");function eye(e){let t=Ie.object({project:Ie.string().required(),file:Ie.string().custom(IE).required(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return zn.validateBySchema(e,t)}a(eye,"getComponentFileValidator");function tye(e){let t=Ie.object({project:Ie.string().pattern(Oa).custom(ER.bind(null,!1)).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),template:Ie.string().optional(),install_command:Ie.string().optional(),install_timeout:Ie.number().optional()});return zn.validateBySchema(e,t)}a(tye,"addComponentValidator");function rye(e){let t=Ie.object({project:Ie.string().pattern(Oa).custom(ER.bind(null,!0)).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME})});return zn.validateBySchema(e,t)}a(rye,"dropCustomFunctionProjectValidator");function nye(e){let t=Ie.object({project:Ie.string().pattern(Oa).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),skip_node_modules:Ie.boolean(),skip_symlinks:Ie.boolean()});return zn.validateBySchema(e,t)}a(nye,"packageComponentValidator");function sye(e){let t=Ie.object({project:Ie.string().pattern(Oa).required().messages({"string.pattern.base":Nn.BAD_PROJECT_NAME}),package:Ie.string().optional(),restart:Ie.alternatives().try(Ie.boolean(),Ie.string().valid("rolling")).optional(),install_command:Ie.string().optional(),install_timeout:Ie.number().optional()});return zn.validateBySchema(e,t)}a(sye,"deployComponentValidator");function iye(e){let t=Ie.object({name:Ie.string().pattern(jTe).required().messages({"string.pattern.base":Nn.BAD_SSH_KEY_NAME}),key:Ie.string().required(),host:Ie.string().required(),hostname:Ie.string().required(),known_hosts:Ie.string().optional()});return zn.validateBySchema(e,t)}a(iye,"addSSHKeyValidator");function oye(e){let t=Ie.object({name:Ie.string().required()});return zn.validateBySchema(e,t)}a(oye,"getSSHKeyValidator");function aye(e){let t=Ie.object({name:Ie.string().required(),key:Ie.string().required()});return zn.validateBySchema(e,t)}a(aye,"updateSSHKeyValidator");function cye(e){let t=Ie.object({name:Ie.string().required()});return zn.validateBySchema(e,t)}a(cye,"deleteSSHKeyValidator");function lye(e){let t=Ie.object({known_hosts:Ie.string().required()});return zn.validateBySchema(e,t)}a(lye,"setSSHKnownHostsValidator")});var m2={};ye(m2,{packageDirectory:()=>uye});function uye(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];d2.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,u2.join)("cache","webpack")):void 0,map:a(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,f2.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var u2,d2,f2,p2=se(()=>{u2=require("path"),d2=b(require("tar-fs")),f2=require("node:zlib");a(uye,"packageDirectory")});var RR={};ye(RR,{Application:()=>yR,InvalidInstallCommandError:()=>SR,InvalidInstallPropertyError:()=>gR,InvalidInstallTimeoutError:()=>TR,InvalidPackageIdentifierError:()=>_R,assertApplicationConfig:()=>T2,derivePackageIdentifier:()=>b2,extractApplication:()=>y2,installApplication:()=>R2,installApplications:()=>dye,nonInteractiveSpawn:()=>wE,prepareApplication:()=>A2});function T2(e,t){if(typeof t.package!="string")throw new _R(e,t.package);if("install"in t){if(typeof t.install!="object"||t.install===null||Array.isArray(t.install))throw new gR(e,t.install);if("command"in t.install&&typeof t.install.command!="string")throw new SR(e,t.install.command);if("timeout"in t.install&&(typeof t.install.timeout!="number"||t.install.timeout<0))throw new TR(e,t.install.timeout)}}async function y2(e){if(!e.payload&&!e.packageIdentifier)throw new Error("Either payload or package must be provided");if(e.payload&&e.packageIdentifier)throw new Error("Both payload and package cannot be provided");let t,r;if(e.payload)r=E2.Readable.from(e.payload instanceof Buffer?e.payload:Buffer.from(e.payload,"base64"));else{let s=(0,Jn.dirname)(e.dirPath);if(e.packageIdentifier.startsWith("file:")){let i=e.packageIdentifier.slice(5);try{let o=await(0,ct.stat)(i);if(o.isDirectory()){await(0,ct.symlink)(i,e.dirPath,"dir");return}if(!o.isFile())throw new Error(`File path specified in package identifier is not a file or directory: ${i}`);t=i,r=(0,Pa.createReadStream)(t)}catch(o){throw o.code==="ENOENT"?new Error(`File path specified in package identifier does not exist: ${i}`):o}}else{let{stdout:i,code:o,stderr:c}=await wE(e.name,"npm",["pack",e.packageIdentifier],s);if(o!==0)throw new Error(`Failed to download package ${e.packageIdentifier}: ${c}`);t=(0,Jn.join)(s,i.trim()),r=(0,Pa.createReadStream)(t)}}try{await(0,ct.access)(e.dirPath,ct.constants.F_OK),await(0,ct.rm)(e.dirPath,{recursive:!0,force:!0})}catch(s){if(s.code!=="ENOENT")throw s}await(0,ct.mkdir)(e.dirPath,{recursive:!0}),await(0,_2.pipeline)(r,(0,S2.default)(),(0,g2.extract)(e.dirPath));let n=await(0,ct.readdir)(e.dirPath,{withFileTypes:!0});if(n.length===1&&n[0].isDirectory()){let s=(0,Jn.join)(e.dirPath,n[0].name),i=await(0,ct.mkdtemp)(e.dirPath);await(0,ct.cp)(s,i,{recursive:!0}),await(0,ct.rm)(s,{recursive:!0,force:!0}),await(0,ct.cp)(i,e.dirPath,{recursive:!0}),await(0,ct.rm)(i,{recursive:!0,force:!0})}t&&await(0,ct.rm)(t,{force:!0})}async function R2(e){let t;try{t=JSON.parse(await(0,ct.readFile)((0,Jn.join)(e.dirPath,"package.json"),"utf8"))}catch(i){if(i.code!=="ENOENT")throw i;e.logger.debug(`Application ${e.name} has no package.json; skipping install`);return}try{await(0,ct.access)((0,Jn.join)(e.dirPath,"node_modules"),ct.constants.F_OK),e.logger.debug(`Application ${e.name} already has node_modules; skipping install`);return}catch(i){if(i.code!=="ENOENT")throw i}if(e.install?.command){let[i,...o]=e.install.command.split(" "),{stderr:c,code:l}=await wE(e.name,i,o,e.dirPath,e.install?.timeout);if(l===0)return;throw zf(e.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using custom install command: ${e.install.command}. Exit code: ${l}`)}let{packageManager:r}=t.devEngines||{};if(r){let i=r.onFail,o=["ignore","warn","error"];i==="download"?(e.logger.warn('Harper currently does not support `devEngines.packageManager.onFail = "download"`. Defaulting to "error"'),i="error"):i&&!o.includes(i)&&(e.logger.error(`Invalid \`devEngines.packageManager.onFail\` value: "${i}". Expected one of ${o.map(u=>`"${u}"`).join(", ")}. Defaulting to "error"`),i="error"),i=i||"error";let{stderr:c,code:l}=await wE(e.name,r.name,["install"],e.dirPath,e.install?.timeout);if(l===0)return;if(i==="error")throw zf(r.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using ${r.name}. Exit code: ${l}`);i==="warn"&&(zf(r.name,c,"warn"),e.logger.warn(`Failed to install dependencies for ${e.name} using ${r.name}. Exit code: ${l}`))}let{stderr:n,code:s}=await wE(e.name,"npm",["install","--force"],e.dirPath);if(s!==0)throw zf(e.name,n,"error"),new Error(`Failed to install dependencies for ${e.name} using npm default. Exit code: ${s}`)}function b2(e){return e.includes(":")?e:e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?`npm:${e}`:(0,Jn.extname)(e)||(0,Pa.existsSync)(e)?`file:${e}`:`github:${e}`}function A2(e){return y2(e).then(()=>R2(e))}async function dye(){let e=(0,Tu.getConfigObj)(),t=(0,Tu.getConfigValue)(x.COMPONENTSROOT);await(0,ct.mkdir)(t,{recursive:!0});let r=(0,Jn.join)((0,Tu.getConfigValue)(x.ROOTPATH),"harper-application-lock.json"),n={applications:{}};try{n=JSON.parse(await(0,ct.readFile)(r,"utf8"))}catch(o){if(o.code!=="ENOENT")throw o}let s=[];for(let[o,c]of Object.entries(e))if(!(typeof c!="object"||c===null||!("package"in c)))try{T2(o,c);let l=new yR({name:o,packageIdentifier:c.package,install:c.install});if((0,Pa.existsSync)(l.dirPath)&&n.applications[o]&&JSON.stringify(n.applications[o])===JSON.stringify(c)){Co.default.info(`Application ${o} is already installed with matching configuration; skipping installation`);continue}s.push(A2(l)),n.applications[o]=c}catch(l){Co.default.error(`Skipping installation of application ${o} due to invalid configuration: ${l.message}`)}let i=await Promise.allSettled(s);Co.default.debug(i),Co.default.info("All root applications loaded"),await(0,ct.writeFile)(r,JSON.stringify(n,null,2),"utf8")}function fye(){let e=(0,Tu.getConfigValue)(x.ROOTPATH),t=(0,Jn.join)(e,"ssh");if((0,Pa.existsSync)(t)){for(let r of(0,Pa.readdirSync)(t))if(r.includes(".key"))return`ssh -F ${(0,Jn.join)(t,"config")} -o UserKnownHostsFile=${(0,Jn.join)(t,"known_hosts")}`}}function wE(e,t,r,n,s=300*1e3){return new Promise((i,o)=>{Co.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Executing \`${t} ${r.join(" ")}\` in ${n}`);let c={...process.env},l=fye();l&&(c.GIT_SSH_COMMAND=l);let u=(0,h2.spawn)(t,r,{shell:!0,cwd:n,env:c,stdio:["ignore","pipe","pipe"]}),d=setTimeout(()=>{u.kill(),o(new Error(`Command\`${t} ${r.join(" ")}\` timed out after ${s}ms`))},s),f="";u.stdout.on("data",p=>{f+=p.toString(),Co.default.loggerWithTag(`${e}:spawn:${t}:stdout`).debug(p.toString())});let m="";u.stderr.on("data",p=>{m+=p.toString()}),u.on("error",p=>{clearTimeout(d),m&&zf(e,t,m),o(p)}),u.on("close",p=>{clearTimeout(d),m&&zf(e,t,m),Co.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Process exited with code ${p}`),i({stdout:f,stderr:m,code:p})})})}function zf(e,t,r,n="debug"){let s=Co.default.loggerWithTag(`${e}:spawn:${t}:stderr`);for(let i of r.split(`
|
|
122
|
+
`))s[n](i)}var Tu,Co,Jn,ct,h2,Pa,E2,_2,g2,S2,_R,gR,SR,TR,yR,bR=se(()=>{Tu=b(_t());G();Co=b(Q()),Jn=require("node:path"),ct=require("node:fs/promises"),h2=require("node:child_process"),Pa=require("node:fs"),E2=require("node:stream"),_2=require("node:stream/promises"),g2=require("tar-fs"),S2=b(require("gunzip-maybe")),_R=class extends TypeError{static{a(this,"InvalidPackageIdentifierError")}constructor(t,r){super(`Invalid 'package' property for application ${t}: expected string, got ${typeof r}`)}},gR=class extends TypeError{static{a(this,"InvalidInstallPropertyError")}constructor(t,r){super(`Invalid 'install' property for application ${t}: expected object, got ${typeof r}`)}},SR=class extends TypeError{static{a(this,"InvalidInstallCommandError")}constructor(t,r){super(`Invalid 'install.command' property for application ${t}: expected string, got ${typeof r}`)}},TR=class extends TypeError{static{a(this,"InvalidInstallTimeoutError")}constructor(t,r){super(`Invalid 'install.timeout' property for application ${t}: expected non-negative number, got ${typeof r}`)}};a(T2,"assertApplicationConfig");a(y2,"extractApplication");a(R2,"installApplication");yR=class{static{a(this,"Application")}name;payload;packageIdentifier;install;dirPath;logger;constructor({name:t,payload:r,packageIdentifier:n,install:s}){this.name=t,this.payload=r,this.packageIdentifier=n&&b2(n),this.install=s,this.dirPath=(0,Jn.join)((0,Tu.getConfigValue)(x.COMPONENTSROOT),t),this.logger=Co.default.loggerWithTag(t)}};a(b2,"derivePackageIdentifier");a(A2,"prepareApplication");a(dye,"installApplications");a(fye,"getGitSSHCommand");a(wE,"nonInteractiveSpawn");a(zf,"printStderr")});var yD=M(er=>{"use strict";var ke=require("node:path"),{isMainThread:mye}=require("node:worker_threads"),Le=require("fs-extra"),SD=require("fast-glob"),TD=require("normalize-path"),Cn=l2(),Kt=Q(),Mt=(G(),D(j)),Rr=fe(),AR=_t(),pye=ae(),{PACKAGE_ROOT:hye}=yt(),{handleHDBError:Yt,hdbErrors:Eye}=Ee(),CGe=fe(),{HDB_ERROR_MSGS:yu,HTTP_STATUS_CODES:Wt}=Eye,I2=st(),{replicateOperation:Pi}=(gs(),D(ca)),{packageDirectory:_ye}=(p2(),D(m2)),OGe=ke.join(hye,"application-template"),gye=Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),Oo=ke.join(gye,"ssh"),La=ke.join(Oo,"known_hosts"),{Resources:Sye}=(sc(),D(PI)),{Application:w2,prepareApplication:N2}=(bR(),D(RR));function Tye(){Kt.trace("getting custom api status");let e={};try{e={port:Rr.get(Mt.CONFIG_PARAMS.HTTP_PORT),directory:Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Yt(new Error,yu.FUNCTION_STATUS,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,t)}return e}a(Tye,"customFunctionsStatus");function yye(){Kt.trace("getting custom api endpoints");let e={},t=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT);try{SD.sync(TD(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:SD.sync(TD(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:SD.sync(TD(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Yt(new Error,yu.GET_FUNCTIONS,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,r)}return e}a(yye,"getCustomFunctions");function Rye(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=Cn.getDropCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("getting custom api endpoint file content");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=ke.join(r,n,s,i+".js");try{return Le.readFileSync(o,{encoding:"utf8"})}catch(c){throw Yt(new Error,yu.GET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,c)}}a(Rye,"getCustomFunction");async function bye(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=Cn.setCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("setting custom function file content");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{Le.outputFileSync(ke.join(r,n,s,i+".js"),o);let c=await Pi(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Yt(new Error,yu.SET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,c)}}a(bye,"setCustomFunction");async function Aye(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=Cn.getDropCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("dropping custom function file");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Le.unlinkSync(ke.join(r,n,s,i+".js"));let o=await Pi(e);return o.message=`Successfully deleted custom function: ${i}.js`,o}catch(o){throw Yt(new Error,yu.DROP_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,o)}}a(Aye,"dropCustomFunction");async function Iye(e){e.project&&(e.project=ke.parse(e.project).name);let t=Cn.addComponentValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("adding component");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,install_command:s,install_timeout:i}=e,o=e.template||"https://github.com/harperdb/application-template";try{let c=ke.join(r,n);Le.mkdirSync(c,{recursive:!0});let l=new w2({name:n,packageIdentifier:o,install:{command:s,timeout:i}});await N2(l);let u=await Pi(e);return u.message=`Successfully added project: ${n}`,u}catch(c){throw Yt(new Error,yu.ADD_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,c)}}a(Iye,"addComponent");async function wye(e){e.project&&(e.project=ke.parse(e.project).name);let t=Cn.dropCustomFunctionProjectValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("dropping custom function project");let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Rr.get(Mt.CONFIG_PARAMS.APPS);if(!pye.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return AR.updateConfigValue(Mt.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=ke.join(r,n);Le.rmSync(i,{recursive:!0});let o=await Pi(e);return o.message=`Successfully deleted project: ${n}`,o}catch(i){throw Yt(new Error,yu.DROP_FUNCTION_PROJECT,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,i)}}a(wye,"dropCustomFunctionProject");async function Nye(e){e.project&&(e.project=ke.parse(e.project).name);let t=Cn.packageComponentValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Kt.trace("packaging component",n);let s;try{s=await Le.realpath(ke.join(r,n))}catch(o){if(o.code!==Mt.NODE_ERROR_CODES.ENOENT)throw o;try{s=await Le.realpath(ke.join(Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===Mt.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await _ye(s,e)).toString("base64");return{project:n,payload:i}}a(Nye,"packageComponent");async function Cye(e){e.project?e.project=ke.parse(e.project).name:e.package&&(e.project=Oye(e.package));let t=Cn.deployComponentValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);if(e.package){let l={package:e.package};(e.install_command||e.install_timeout)&&(l.install={command:e.install_command,timeout:e.install_timeout}),await AR.addConfig(e.project,l)}let r=new w2({name:e.project,payload:e.payload,packageIdentifier:e.package,install:{command:e.install_command,timeout:e.install_timeout}});if(await N2(r),mye)return;let n=new Sye;n.isWorker=!0;let s=(_E(),D(iR)),i;if(s.setErrorReporter(l=>i=l),await s.loadComponent(r.dirPath,n),i)throw i;let o=e.restart==="rolling";e.restart=o?!1:e.restart;let c=await Pi(e);if(e.restart===!0)I2.restartWorkers("http"),c.message=`Successfully deployed: ${r.name}, restarting HarperDB`;else if(o){let u=await(bD(),D(RD)).executeJob({operation:"restart_service",service:"http",replicated:!0});c.restartJobId=u.job_id,c.message=`Successfully deployed: ${r.name}, restarting HarperDB`}else c.message=`Successfully deployed: ${r.name}`;return c}a(Cye,"deployComponent");function Oye(e){if(e.startsWith("git+ssh://"))return ke.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return ke.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Le.readFileSync(ke.join(e,"package.json"),"utf8"));return ke.basename(t)}catch{}return ke.basename(e)}a(Oye,"getProjectNameFromPackage");async function Pye(){let e=AR.getConfiguration(),t=a(async(i,o)=>{try{let c=await Le.readdir(i,{withFileTypes:!0});for(let l of c){let u=l.name;if(u.startsWith(".")||u==="node_modules")continue;let d=ke.join(i,u);if(l.isDirectory()||l.isSymbolicLink()){let f={name:u,entries:[]};o.entries.push(f),await t(d,f)}else{let f=await Le.stat(d),m={name:ke.basename(u),mtime:f.mtime,size:f.size};o.entries.push(m)}}return o}catch(c){return Kt.warn("Error loading package",c),{error:c.toString(),entries:[]}}},"walkDir"),r=await t(Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),{name:Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT).split(ke.sep).slice(-1).pop(),entries:[]});for(let i of r.entries){let o=e[i.name]?.package;o&&(i.package=o)}let{internal:n}=(Vp(),D(kN)),s;try{s=await n.ComponentStatusRegistry.getAggregatedFromAllThreads(n.componentStatusRegistry)}catch(i){Kt.debug(`Failed to get component status from threads: ${i.message}`)}for(let i of r.entries)try{i.status=await n.componentStatusRegistry.getAggregatedStatusFor(i.name,s)}catch(o){Kt.debug(`Failed to get aggregated status for component ${i.name}: ${o.message}`),i.status={status:"unknown",message:"Failed to retrieve component status",lastChecked:{workers:{}}}}return r}a(Pye,"getComponents");async function Lye(e){let t=Cn.getComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let s=await Le.stat(ke.join(r,e.project,e.file));return{message:await Le.readFile(ke.join(r,e.project,e.file),n),size:s.size,birthtime:s.birthtime,mtime:s.mtime}}catch(s){throw s.code===Mt.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${ke.join(e.project,e.file)}'`):s}}a(Lye,"getComponentFile");async function Dye(e){let t=Cn.setComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=ke.join(Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Le.ensureFile(n),await Le.outputFile(n,e.payload,r)):await Le.ensureDir(n);let s=await Pi(e);return s.message="Successfully set component: "+e.file,s}a(Dye,"setComponentFile");async function vye(e){let t=Cn.dropComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?ke.join(r,n):r,i=ke.join(Rr.get(Mt.CONFIG_PARAMS.COMPONENTSROOT),s),o=ke.join(Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Le.pathExists(o)&&await Le.unlink(o),await Le.pathExists(i)&&await Le.remove(i);let c=ke.join(Rr.get(Mt.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Le.pathExists(c)){let u=JSON.parse(await Le.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Le.writeFile(c,JSON.stringify(u,null,2),"utf8")}AR.deleteConfigFromFile([r]);let l=await Pi(e);return e.restart===!0?(I2.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}a(vye,"dropComponent");async function Mye(e){let t=Cn.addSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:o}=e;Kt.trace("adding ssh key",r);let c=ke.join(Oo,r+".key"),l=ke.join(Oo,"config");if(await Le.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Le.outputFile(c,n),await Le.chmod(c,"0600");let u=`#${r}
|
|
123
123
|
Host ${s}
|
|
124
124
|
HostName ${i}
|
|
125
125
|
User git
|
|
126
126
|
IdentityFile ${c}
|
|
127
127
|
IdentitiesOnly yes`;await Le.pathExists(l)?await Le.appendFile(l,`
|
|
128
128
|
`+u):await Le.outputFile(l,u);let d="";if(await Le.pathExists(La)||(await Le.writeFile(La,""),await Le.chmod(La,"0600")),i=="github.com"&&!(await Le.readFile(La,"utf8")).includes("github.com"))try{let E=(await(await fetch("https://api.github.com/meta")).json()).ssh_keys;for(let _ of E)Le.appendFile(La,"github.com "+_+`
|
|
129
|
-
`)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}o&&await Le.appendFile(La,o);let f=await Pi(e);return f.message=`Added ssh key: ${r}${d}`,f}a(Mye,"addSSHKey");async function Uye(e){let t=Cn.getSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r}=e;Kt.trace("getting ssh key",r);let n=ke.join(
|
|
129
|
+
`)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}o&&await Le.appendFile(La,o);let f=await Pi(e);return f.message=`Added ssh key: ${r}${d}`,f}a(Mye,"addSSHKey");async function Uye(e){let t=Cn.getSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r}=e;Kt.trace("getting ssh key",r);let n=ke.join(Oo,r+".key");if(!await Le.pathExists(n))throw new Error("Key does not exist.");let s={name:r,key:await Le.readFile(n,"utf8")},i=ke.join(Oo,"config");if(await Le.pathExists(i)){let o=await Le.readFile(i,"utf8"),c=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g"),l=o.match(c);if(l&&l[0]){let u=l[0],d=u.match(/^Host\s+(.+)$/m);d&&(s.host=d[1].trim());let f=u.match(/^\s*HostName\s+(.+)$/m);f&&(s.hostname=f[1].trim())}}return s}a(Uye,"getSSHKey");async function xye(e){let t=Cn.updateSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r,key:n}=e;Kt.trace("updating ssh key",r);let s=ke.join(Oo,r+".key");if(!await Le.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Le.outputFile(s,n);let i=await Pi(e);return i.message=`Updated ssh key: ${r}`,i}a(xye,"updateSSHKey");async function Bye(e){let t=Cn.deleteSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r}=e;Kt.trace("deleting ssh key",r);let n=ke.join(Oo,r+".key"),s=ke.join(Oo,"config");if(!await Le.pathExists(n))throw new Error("Key does not exist");let i=await Le.readFile(s,"utf8"),o=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(o,""),await Le.outputFile(s,i),Le.removeSync(n);let c=await Pi(e);return c.message=`Deleted ssh key: ${r}`,c}a(Bye,"deleteSSHKey");async function Fye(e){let t=[];return await Le.pathExists(Oo)&&(await Le.readdir(Oo)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}a(Fye,"listSSHKeys");async function kye(e){let t=Cn.setSSHKnownHostsValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{known_hosts:r}=e;await Le.outputFile(La,r);let n=await Pi(e);return n.message="Known hosts successfully set",n}a(kye,"setSSHKnownHosts");async function Hye(e){return await Le.pathExists(La)?{known_hosts:await Le.readFile(La,"utf8")}:{known_hosts:null}}a(Hye,"getSSHKnownHosts");er.customFunctionsStatus=Tye;er.getCustomFunctions=yye;er.getCustomFunction=Rye;er.setCustomFunction=bye;er.dropCustomFunction=Aye;er.addComponent=Iye;er.dropCustomFunctionProject=wye;er.packageComponent=Nye;er.deployComponent=Cye;er.getComponents=Pye;er.getComponentFile=Lye;er.setComponentFile=Dye;er.dropComponent=vye;er.addSSHKey=Mye;er.getSSHKey=Uye;er.updateSSHKey=xye;er.deleteSSHKey=Bye;er.listSSHKeys=Fye;er.setSSHKnownHosts=kye;er.getSSHKnownHosts=Hye});var AD=M((DGe,O2)=>{"use strict";var Qs=require("joi"),C2=ft();O2.exports={readTransactionLogValidator:Gye,deleteTransactionLogsBeforeValidator:qye};function Gye(e){let t=Qs.object({schema:Qs.string(),database:Qs.string(),table:Qs.string().required(),from:Qs.date().timestamp(),to:Qs.date().timestamp(),limit:Qs.number().min(1)});return C2.validateBySchema(e,t)}a(Gye,"readTransactionLogValidator");function qye(e){let t=Qs.object({schema:Qs.string(),database:Qs.string(),table:Qs.string().required(),timestamp:Qs.date().timestamp().required()});return C2.validateBySchema(e,t)}a(qye,"deleteTransactionLogsBeforeValidator")});var NR=M((MGe,U2)=>{"use strict";var ID=(G(),D(j)),NE=_r(),P2=ae(),L2=fe(),D2=io(),v2=Q(),{handleHDBError:IR,hdbErrors:$ye}=Ee(),{HTTP_STATUS_CODES:wR}=$ye,{readTransactionLogValidator:Vye,deleteTransactionLogsBeforeValidator:Kye}=AD(),M2=ms(),Yye="Logs successfully deleted from transaction log.",Wye="All logs successfully deleted from transaction log.";U2.exports={readTransactionLog:jye,deleteTransactionLogsBefore:Jye};async function jye(e){let t=Vye(e);if(t)throw IR(t,t.message,wR.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=P2.checkSchemaTableExist(e.database,e.table);if(r)throw IR(new Error,r,wR.NOT_FOUND,void 0,void 0,!0);return L2.get(ID.CONFIG_PARAMS.CLUSTERING_ENABLED)?await zye(e):(v2.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)),M2.readAuditLog(e))}a(jye,"readTransactionLog");async function*zye(e){let t=D2.createNatsTableStreamName(e.database,e.table),r=await NE.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===ID.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}a(zye,"readTransactionLogNats");async function Jye(e){let t=Kye(e);if(t)throw IR(t,t.message,wR.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!L2.get(ID.CONFIG_PARAMS.CLUSTERING_ENABLED))return v2.info("Delete transaction logs called for Plexus"),M2.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=P2.checkSchemaTableExist(r,n);if(i)throw IR(new Error,i,wR.NOT_FOUND,void 0,void 0,!0);let o=D2.createNatsTableStreamName(r,n),{jsm:c}=await NE.getNATSReferences(),l=await NE.getStreamInfo(o),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=Yye,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=Wye):f=(await NE.viewStream(o,parseInt(s),1))[0].nats_sequence,await NE.purgeTableStream(r,n,{seq:f}),d}a(Jye,"deleteTransactionLogsBefore")});var wD=M((xGe,B2)=>{"use strict";var CR=require("joi"),Qye=require("path"),{handleHDBError:Xye,hdbErrors:Zye}=Ee(),{HTTP_STATUS_CODES:eRe}=Zye,tRe=ft(),x2=Q();B2.exports={installModules:iRe};var{CONFIG_PARAMS:rRe}=(G(),D(j)),{getConfigValue:nRe}=_t(),{nonInteractiveSpawn:sRe}=(bR(),D(RR));async function iRe(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";x2.warn(t,e.projects);let r=aRe(e);if(r)throw Xye(r,r.message,eRe.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=nRe(rRe.COMPONENTSROOT),o={},c=["install","--force","--omit=dev","--json"];s&&c.push("--dry-run");for(let l of n){o[l]={npm_output:null,npm_error:null};let u=Qye.join(i,l);try{let{stdout:d,stderr:f}=sRe(l,"npm",c,u);d=d?d.replace(`
|
|
130
130
|
`,""):null,f=f?f.replace(`
|
|
131
131
|
`,""):null;try{o[l].npm_output=JSON.parse(d)}catch{o[l].npm_output=d}try{o[l].npm_error=JSON.parse(f)}catch{o[l].npm_error=f}}catch(d){d.stderr?o[l].npm_error=oRe(d.stderr):o[l].npm_error=d.message;continue}}return x2.info(`finished installModules with response ${o}`),o.warning=t,o}a(iRe,"installModules");function oRe(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
|
|
132
|
-
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(oRe,"parseNPMStdErr");function aRe(e){let t=CR.object({projects:CR.array().min(1).items(CR.string()).required(),dry_run:CR.boolean().default(!1)});return tRe.validateBySchema(e,t)}a(aRe,"modulesValidator")});var PD={};ye(PD,{describeMetric:()=>$2,describeMetricOp:()=>OD,get:()=>G2,getOp:()=>ND,listMetrics:()=>q2,listMetricsOp:()=>CD});async function lRe(e){return(await Eg().get(e)).hostname}function F2(e,t){return e.length===0||e.includes(t)}function ND(e){return CE.trace?.("get_analytics request:",e),G2(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function H2(e){return"conditions"in e?{...e,conditions:e.conditions.map(H2)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function G2(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(H2));let o=t??[];F2(o,"id")||o.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i,allowConditionsOnDynamicAttributes:!0};return o.length>0&&(c.select=o),CE.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],F2(o,"node")&&(CE.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await lRe(d)),CE.trace?.("get_analytics result:",JSON.stringify(u)),u})}function CD(e){return q2(e.metric_types)}async function q2(e=["builtin"]){let t=[],r=Object.values(Wo);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,o=await databases.system.hdb_analytics.search(s);for await(let c of o)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function OD(e){return $2(e.metric)}async function $2(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let o in s)n.push({name:o,type:typeof s[o]});let i={attributes:n};return CE.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var k2,cRe,CE,LD=se(()=>{k2=b(Q());oI();aI();({forComponent:cRe}=k2.default),CE=cRe("analytics").conditional;a(lRe,"lookupHostname");a(F2,"isSelected");a(ND,"getOp");a(H2,"conformCondition");a(G2,"get");a(CD,"listMetricsOp");a(q2,"listMetrics");a(OD,"describeMetricOp");a($2,"describeMetric")});var OR,PR,OE,LR=se(()=>{OR={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},PR=Object.keys(OR),OE="primary"});function K2(e){return V2.validateBySchema(e,mRe)}var PE,V2,uRe,dRe,fRe,mRe,Y2=se(()=>{PE=b(require("joi")),V2=b(ft());LR();uRe=PR,dRe=Object.entries(OR).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),fRe=a(()=>{let e=PE.default.string().min(1).max(512);return Object.entries(OR).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:PE.default.string().valid(...r.allowedValues).messages({"any.only":dRe[t]})}))}),e.required()},"createStatusValidationSchema"),mRe=PE.default.object({id:PE.default.string().valid(...uRe).required(),status:fRe()});a(K2,"validateStatus")});function W2(){DD||(DD=Da.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),vD=new Uint8Array(DD))}function j2(){W2(),vD[0]=1}function z2(){return W2(),vD[0]===1}var DD,vD,MD=se(()=>{LE();a(W2,"ensureInitialized");a(j2,"requestRestart");a(z2,"restartNeeded")});var kD={};ye(kD,{DEFAULT_STATUS_ID:()=>OE,STATUS_IDS:()=>PR,Status:()=>Da,clear:()=>xD,get:()=>BD,set:()=>FD});function vE(){return UD||(UD=ze({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),UD}function xD({id:e}){return DE.debug?.("clearStatus",e),vE().delete(e)}async function hRe(){DE.debug?.("getAllStatus");let e=vE().get({}),t=await $p.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=z2();return{systemStatus:e,componentStatus:r,restartRequired:n}}function BD({id:e}){return e?(DE.debug?.("getStatus",e),vE().get(e)):(DE.debug?.("getStatus","all"),hRe())}function FD({status:e,id:t=OE}){let r=K2({status:e,id:t});if(r)throw(0,DR.handleHDBError)(r,r.message,pRe.BAD_REQUEST);return DE.debug?.("setStatus",t,e),vE().put(t,{status:e})}var DR,J2,pRe,UD,Da,DE,LE=se(()=>{Oe();DR=b(Ee()),J2=b(ir());Y2();LR();Vp();MD();LR();({HTTP_STATUS_CODES:pRe}=DR.hdbErrors);a(vE,"getStatusTable");Da={get primaryStore(){return vE().primaryStore}},DE=(0,J2.loggerWithTag)("status");a(xD,"clearStatus");a(hRe,"getAllStatus");a(BD,"getStatus");a(FD,"setStatus")});var $D={};ye($D,{getFingerprint:()=>GD,getRegistrationInfo:()=>HD,setLicense:()=>qD});function HD(){return{version:Q2.packageJson.version,deprecated:!0}}function GD(){return{message:"this-is-deprecated",deprecated:!0}}function qD(){return{deprecated:!0}}var Q2,VD=se(()=>{Q2=b(yt());a(HD,"getRegistrationInfo");a(GD,"getFingerprint");a(qD,"setLicense")});var Z2=M((rqe,X2)=>{"use strict";var ME=require("alasql"),Ru=require("recursive-iterator"),Li=Q(),ERe=ae(),UE=(G(),D(j)),KD=class{static{a(this,"sqlStatementBucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,gRe(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=>UE.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=>!UE.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][UE.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=_Re(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(o).filter(u=>!UE.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new ME.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function _Re(e){return e.filter(t=>t[UE.PERMS_CRUD_ENUM.READ])}a(_Re,"filterReadRestrictedAttrs");function gRe(e,t,r,n,s){SRe(e,t,r,n,s)}a(gRe,"interpretAST");function xE(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(xE,"addSchemaTableToMap");function SRe(e,t,r,n,s){if(!e){Li.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof ME.yy.Insert?bRe(e,t,r):e instanceof ME.yy.Select?TRe(e,t,r,n,s):e instanceof ME.yy.Update?yRe(e,t,r):e instanceof ME.yy.Delete?RRe(e,t,r):Li.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(SRe,"getRecordAttributesAST");function TRe(e,t,r,n,s){if(!e){Li.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(ERe.isEmptyOrZeroLength(i)){Li.error("No schema specified");return}e.from.forEach(c=>{xE(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),xE(c.table,t,r,n,s)});let o=new Ru(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{Li.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 Ru(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{Li.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 Ru(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{Li.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 Ru(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{Li.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}a(TRe,"getSelectAttributes");function yRe(e,t,r){if(!e){Li.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Ru(e.columns),s=e.table.databaseid;xE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&YD(e.table.tableid,s,i.columnid,t,r)}a(yRe,"getUpdateAttributes");function RRe(e,t,r){if(!e){Li.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Ru(e.where),s=e.table.databaseid;xE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&YD(e.table.tableid,s,i.columnid,t,r)}a(RRe,"getDeleteAttributes");function bRe(e,t,r){if(!e){Li.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Ru(e.columns),s=e.into.databaseid;xE(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&YD(e.into.tableid,s,i.columnid,t,r)}a(bRe,"getInsertAttributes");function YD(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(YD,"pushAttribute");X2.exports=KD});var xR=M((sqe,EJ)=>{"use strict";var WD=Vn(),vR=Sn(),ws=ry(),kE=Yl(),jD=Bl(),ARe=eP(),IRe=hY(),HE=(hs(),D(co)),MR=ah(),Dr=Q(),wRe=oP(),NRe=Kh(),CRe=vP(),ORe=Jh(),PRe=xP(),LRe=BP(),DRe=gy(),vRe=GP(),zD=Ty(),va=ae(),rJ=jf(),On=(G(),D(j)),nJ=j4(),MRe=qh(),sJ=(Wd(),D(mh)),iJ=(hR(),D(AE)),oJ=_t(),dr=yD(),aJ=NR(),URe=wD(),Jf=Ts(),cJ=(bf(),D(Rf)),JD=(LD(),D(PD)),QD=(LE(),D(kD)),lJ=(fE(),D(zy)),XD=(VD(),D($D)),uJ=GC(),{handleHDBError:Qn,hdbErrors:dJ}=Ee(),{HDB_ERROR_MSGS:fn,HTTP_STATUS_CODES:BE}=dJ,ee=new Map,fJ="delete",Vc="insert",Xs="read",bu="update",FE="describe",eJ=kE.describeSchema.name,tJ=kE.describeTable.name,mJ={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},xRe={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},BRe="catchup",FRe="handleGetJob",kRe="handleGetJobsByStartDate",UR={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},HRe=[ws.createTable.name,ws.createAttribute.name,ws.dropTable.name,ws.dropAttribute.name],pJ={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},ne=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};ee.set(WD.insert.name,new ne(!1,[Vc]));ee.set(WD.update.name,new ne(!1,[bu]));ee.set(WD.upsert.name,new ne(!1,[Vc,bu]));ee.set(vR.searchByConditions.name,new ne(!1,[Xs]));ee.set(vR.searchByHash.name,new ne(!1,[Xs]));ee.set(vR.searchByValue.name,new ne(!1,[Xs]));ee.set(vR.search.name,new ne(!1,[Xs]));ee.set(ws.createSchema.name,new ne(!0,[]));ee.set(ws.createTable.name,new ne(!0,[]));ee.set(ws.createAttribute.name,new ne(!1,[Vc]));ee.set(ws.dropSchema.name,new ne(!0,[]));ee.set(ws.dropTable.name,new ne(!0,[]));ee.set(ws.dropAttribute.name,new ne(!0,[]));ee.set(kE.describeSchema.name,new ne(!1,[Xs]));ee.set(kE.describeTable.name,new ne(!1,[Xs]));ee.set(jD.deleteRecord.name,new ne(!1,[fJ]));ee.set(HE.addUser.name,new ne(!0,[]));ee.set(HE.alterUser.name,new ne(!0,[]));ee.set(HE.dropUser.name,new ne(!0,[]));ee.set(HE.listUsersExternal.name,new ne(!0,[]));ee.set(MR.listRoles.name,new ne(!0,[]));ee.set(MR.addRole.name,new ne(!0,[]));ee.set(MR.alterRole.name,new ne(!0,[]));ee.set(MR.dropRole.name,new ne(!0,[]));ee.set(wRe.name,new ne(!0,[]));ee.set(NRe.name,new ne(!0,[]));ee.set(CRe.name,new ne(!0,[]));ee.set(ORe.name,new ne(!0,[]));ee.set(PRe.name,new ne(!0,[]));ee.set(LRe.name,new ne(!0,[]));ee.set(zD.setRoutes.name,new ne(!0,[]));ee.set(zD.getRoutes.name,new ne(!0,[]));ee.set(zD.deleteRoutes.name,new ne(!0,[]));ee.set(oJ.setConfiguration.name,new ne(!0,[]));ee.set(DRe.clusterStatus.name,new ne(!0,[]));ee.set(vRe.name,new ne(!0,[]));ee.set(jD.deleteFilesBefore.name,new ne(!0,[]));ee.set(jD.deleteAuditLogsBefore.name,new ne(!0,[]));ee.set(rJ.restart.name,new ne(!0,[]));ee.set(rJ.restartService.name,new ne(!0,[]));ee.set(ARe.name,new ne(!0,[]));ee.set(IRe.name,new ne(!0,[Xs]));ee.set(ws.cleanupOrphanBlobs.name,new ne(!0,[]));ee.set(MRe.systemInformation.name,new ne(!0,[]));ee.set(oJ.getConfiguration.name,new ne(!0,[]));ee.set(aJ.readTransactionLog.name,new ne(!0,[]));ee.set(aJ.deleteTransactionLogsBefore.name,new ne(!0,[]));ee.set(URe.installModules.name,new ne(!0,[]));ee.set(Jf.createCsr.name,new ne(!0,[]));ee.set(Jf.signCertificate.name,new ne(!0,[]));ee.set(Jf.listCertificates.name,new ne(!0,[]));ee.set(Jf.addCertificate.name,new ne(!0,[]));ee.set(Jf.removeCertificate.name,new ne(!0,[]));ee.set(Jf.getKey.name,new ne(!0,[]));ee.set(cJ.addNodeBack.name,new ne(!0,[]));ee.set(cJ.removeNodeBack.name,new ne(!0,[]));ee.set(JD.getOp.name,new ne(!1,[Xs]));ee.set(JD.listMetricsOp.name,new ne(!1,[Xs]));ee.set(JD.describeMetricOp.name,new ne(!1,[Xs]));ee.set(QD.clear.name,new ne(!0,[]));ee.set(QD.get.name,new ne(!0,[]));ee.set(QD.set.name,new ne(!0,[]));ee.set(lJ.installUsageLicenseOp.name,new ne(!0,[]));ee.set(lJ.getUsageLicensesOp.name,new ne(!0,[]));ee.set(XD.getFingerprint.name,new ne(!0,[]));ee.set(XD.setLicense.name,new ne(!0,[]));ee.set(sJ.createTokens.name,new ne(!1,[]));ee.set(sJ.refreshOperationToken.name,new ne(!1,[]));ee.set(iJ.login.name,new ne(!1,[]));ee.set(iJ.logout.name,new ne(!1,[]));ee.set(dr.customFunctionsStatus.name,new ne(!0,[]));ee.set(dr.getCustomFunctions.name,new ne(!0,[]));ee.set(dr.getComponents.name,new ne(!0,[]));ee.set(dr.getComponentFile.name,new ne(!0,[]));ee.set(dr.setComponentFile.name,new ne(!0,[]));ee.set(dr.dropComponent.name,new ne(!0,[]));ee.set(dr.getCustomFunction.name,new ne(!0,[]));ee.set(dr.setCustomFunction.name,new ne(!0,[]));ee.set(dr.dropCustomFunction.name,new ne(!0,[]));ee.set(dr.addComponent.name,new ne(!0,[]));ee.set(dr.dropCustomFunctionProject.name,new ne(!0,[]));ee.set(dr.packageComponent.name,new ne(!0,[]));ee.set(dr.deployComponent.name,new ne(!0,[]));ee.set(dr.addSSHKey.name,new ne(!0,[]));ee.set(dr.getSSHKey.name,new ne(!0,[]));ee.set(dr.updateSSHKey.name,new ne(!0,[]));ee.set(dr.deleteSSHKey.name,new ne(!0,[]));ee.set(dr.listSSHKeys.name,new ne(!0,[]));ee.set(dr.setSSHKnownHosts.name,new ne(!0,[]));ee.set(dr.getSSHKnownHosts.name,new ne(!0,[]));ee.set(XD.getRegistrationInfo.name,new ne(!1,[]));ee.set(HE.userInfo.name,new ne(!1,[]));ee.set(kE.describeAll.name,new ne(!1,[]));ee.set(FRe,new ne(!1,[]));ee.set(kRe,new ne(!0,[]));ee.set(BRe,new ne(!0,[]));ee.set(UR.CSV_DATA_LOAD,new ne(!1,[Vc,bu]));ee.set(UR.CSV_URL_LOAD,new ne(!1,[Vc,bu]));ee.set(UR.CSV_FILE_LOAD,new ne(!1,[Vc,bu]));ee.set(UR.IMPORT_FROM_S3,new ne(!1,[Vc,bu]));ee.set(pJ.EXPORT_TO_S3,new ne(!0,[]));ee.set(pJ.EXPORT_LOCAL,new ne(!0,[]));ee.set(On.VALID_SQL_OPS_ENUM.DELETE,new ne(!1,[fJ]));ee.set(On.VALID_SQL_OPS_ENUM.SELECT,new ne(!1,[Xs]));ee.set(On.VALID_SQL_OPS_ENUM.INSERT,new ne(!1,[Vc]));ee.set(On.VALID_SQL_OPS_ENUM.UPDATE,new ne(!1,[bu]));EJ.exports={verifyPerms:qRe,verifyPermsAst:GRe,verifyBulkLoadAttributePerms:VRe};function GRe(e,t,r){if(va.isEmptyOrZeroLength(e))throw Dr.info("verify_perms_ast has an empty user parameter"),Qn(new Error);if(va.isEmptyOrZeroLength(t))throw Dr.info("verify_perms_ast has an empty user parameter"),Qn(new Error);if(va.isEmptyOrZeroLength(r))throw Dr.info("verify_perms_ast has a null operation parameter"),Qn(new Error);try{let n=Z2(),s=require("alasql"),i=new uJ,o=new n(e),c=o.getSchemas(),l=new Map;if((!c||c.length===0)&&o.affected_attributes&&o.affected_attributes.size>0)throw Dr.info("No schemas defined in verifyPermsAst(), will not continue."),Qn(new Error);let u=!!t.role.permission.super_user,d=c.includes("system");if(d&&mJ[r])throw Qn(new Error,fn.DROP_SYSTEM,BE.FORBIDDEN);if(u&&!d)return null;let f=nJ.getRolePermissions(t.role);t.role.permission=f,!u&&e instanceof s.yy.Select&&(e=o.updateAttributeWildcardsForRolePerms(f));for(let p=0;p<c.length;p++){let h=o.getTablesBySchemaName(c[p]);h&&l.set(c[p],h)}let m=hJ(t,r,l,i);return m||(l.forEach((p,h)=>{for(let E=0;E<p.length;E++){let _=o.getAttributesBySchemaTableName(h,p[E]),R=ev(t.role.permission,h,p[E]);ZD(_,R,r,p[E],h,i)}}),i.getPermsResponse())}catch(n){throw Qn(n)}}a(GRe,"verifyPermsAst");function qRe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Dr.info("null required parameter in verifyPerms"),Qn(new Error,fn.DEFAULT_INVALID_REQUEST,BE.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new uJ;if(va.isEmptyOrZeroLength(e.hdb_user?.role)||va.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Dr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(fn.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=o.has(On.SYSTEM_SCHEMA_NAME)||s===On.SYSTEM_SCHEMA_NAME;if(l&&d&&xRe[e.operation]&&(i===On.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===On.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===On.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&mJ[r])throw Qn(new Error,fn.DROP_SYSTEM,BE.FORBIDDEN);if(l&&!d||u===!0&&(r===ws.createSchema.name||r===ws.dropSchema.name))return null;if(HRe.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=nJ.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===eJ||r===tJ)&&!f.super_user){if(s===On.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(fn.SCHEMA_PERM_ERROR(s));if(r===eJ&&(!f[s]||!f[s][FE]))return c.handleInvalidItem(fn.SCHEMA_NOT_FOUND(s));if(r===tJ&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][FE]))return c.handleInvalidItem(fn.TABLE_NOT_FOUND(s,i))}let m=hJ(e.hdb_user,r,o,c,n);if(m)return m;if(ee.get(r)&&ee.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&On.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],_=f[s].tables[i];_[On.PERMS_CRUD_ENUM.READ]&&(_.attribute_permissions.length>0?_.attribute_permissions.filter(S=>S[On.PERMS_CRUD_ENUM.READ]).forEach(S=>{E.push(S.attribute_name)}):E=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=E)}let p=$Re(e),h=ev(e.hdb_user?.role?.permission,s,i);return ZD(p,h,r,i,s,c,n),c.getPermsResponse()}a(qRe,"verifyPerms");function hJ(e,t,r,n,s){if(va.arrayHasEmptyValues([e,t,r]))throw Dr.info("hasPermissions has an invalid parameter"),Qn(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||ee.get(t).requires_su))return null;if(!ee.get(t))throw Dr.info(`operation ${t} not found.`),Qn(new Error,fn.OP_NOT_FOUND(t),BE.BAD_REQUEST);if(ee.get(t)&&ee.get(t).requires_su)return Dr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(fn.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][FE]===!1){n.addInvalidItem(fn.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(fn.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=o[l].tables[d];if(!f||f[FE]===!1)n.addInvalidItem(fn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=ee.get(t).perms;!va.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],_=f[E];(_==null||_===!1)&&(Dr.info(`Required ${E} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(E))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let p=fn.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Dr.error(p),Dr.error(m),Qn(dJ.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}a(hJ,"hasPermissions");function ZD(e,t,r,n,s,i,o){if(!e||!t)throw Dr.info("no attributes specified in checkAttributePerms."),Qn(new Error);let c=ee.get(r).perms;if(!c||c==="")throw Dr.info(`no permissions found for ${r} in checkAttributePerms().`),Qn(new Error);if(va.isEmptyOrZeroLength(t))return Dr.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[FE]===!1){i.addInvalidItem(fn.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(On.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Xs)throw Qn(new Error,fn.SYSTEM_TIMESTAMP_PERMS_ERR,BE.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(fn.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}a(ZD,"checkAttributePerms");function $Re(e){let t=new Set;try{if(e.action)return t;if(e.operation===On.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{let n=r.attribute;r.search_attribute!==void 0&&(n=r.search_attribute),t.add(n)}),e&&(e.attribute||e.search_attribute)){let r=e.attribute;e.search_attribute!==void 0&&(r=e.search_attribute),t.add(r)}if(!e.records||e.records.length===0){if(!e.get_attributes||e.get_attributes.length===0)return t;for(let r of e.get_attributes)t.add(r)}else for(let r of e.records){let n=Object.keys(r);for(let s of n)t.add(s)}}catch(r){Dr.info(r)}return t}a($Re,"getRecordAttributes");function ev(e,t,r){let n=new Map;if(va.isEmpty(e))return Dr.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Dr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(ev,"getAttributePermissions");function VRe(e,t,r,n,s,i,o){let c=new Set(i),l=ev(e,n,s);ZD(c,l,t,s,n,o,r)}a(VRe,"verifyBulkLoadAttributePerms")});var rv=M((oqe,_J)=>{"use strict";var tv=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};_J.exports=tv});var cv=M((fqe,MJ)=>{"use strict";var BR=Vn(),kR=vC(),KRe=require("needle"),Di=(G(),D(j)),cqe=Dt(),Qf=ae(),{handleHDBError:tr,hdbErrors:wJ}=Ee(),{HTTP_STATUS_CODES:mn,HDB_ERROR_MSGS:vr,CHECK_LOGS_WRAPPER:Iu}=wJ,Xf=Q(),nv=require("papaparse");Qf.promisifyPapaParse();var vi=require("fs-extra"),YRe=require("path"),{chain:gJ}=require("stream-chain"),SJ=require("stream-json/streamers/StreamArray"),TJ=require("stream-json/utils/Batch"),yJ=require("stream-chain/utils/comp"),{finished:RJ}=require("stream"),WRe=fe(),NJ=MC(),jRe=UC(),{BulkLoadFileObject:iv,BulkLoadDataObject:zRe}=pV(),ov=GC(),{verifyBulkLoadAttributePerms:CJ}=xR(),lqe=rv(),uqe=_r(),dqe=io(),{databases:JRe}=(Oe(),D(mt)),{coerceType:QRe}=(Lg(),D(Bq)),bJ="No records parsed from csv file.",Au=`${WRe.get("HDB_ROOT")}/tmp`,{schemaRegex:XRe}=Zi(),AJ=1024*1024*2,IJ=5e3,ZRe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};MJ.exports={csvDataLoad:ebe,csvURLLoad:tbe,csvFileLoad:rbe,importFromS3:nbe};async function ebe(e,t){let r=kR.dataObject(e);if(r)throw tr(r,r.message,mn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=LJ(e.schema,e.table),i=nv.parse(e.data,{header:!0,skipEmptyLines:!0,transform:sv.bind(null,s),dynamicTyping:!1}),o=new ov;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&CJ(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw tr(new Error,c,mn.BAD_REQUEST,void 0,void 0,!0);let l=new zRe(e.action,e.schema,e.table,i.data);return n=await NJ.callOperationFunctionAsAwait(DJ,l,null),n.message===bJ?bJ:vJ(n.records,n.number_written)}catch(s){throw wu(s)}}a(ebe,"csvDataLoad");async function tbe(e){let t=kR.urlObject(e);if(t)throw tr(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Au}/${r}`;try{await sbe(e,r)}catch(s){throw Xf.error(vr.DOWNLOAD_FILE_ERR(r)+" - "+s),tr(s,Iu(vr.DOWNLOAD_FILE_ERR(r)))}try{let s=new iv(this.job_operation_function.name,e.action,e.schema,e.table,n,Di.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await av(s);return await FR(n),i}catch(s){throw await FR(n),wu(s)}}a(tbe,"csvURLLoad");async function rbe(e){let t=kR.fileObject(e);if(t)throw tr(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);let r=new iv(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Di.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await av(r)}catch(n){throw wu(n)}}a(rbe,"csvFileLoad");async function nbe(e){let t=kR.s3FileObject(e);if(t)throw tr(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=YRe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Au}/${s}`;let i=new iv(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await ibe(s,e);let o=await av(i);return await FR(r),o}catch(n){throw await FR(r),wu(n)}}a(nbe,"importFromS3");async function sbe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await KRe("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw tr(n,s,n.statusCode,Di.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}abe(r,e.csv_url),await obe(t,r.raw)}a(sbe,"downloadCSVFile");async function ibe(e,t){try{let r=`${Au}/${e}`;await vi.mkdirp(Au),await vi.writeFile(`${Au}/${e}`,"",{flag:"a+"});let n=await vi.createWriteStream(r),s=await jRe.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){Xf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Xf.error(vr.S3_DOWNLOAD_ERR+" - "+r),tr(r,Iu(vr.S3_DOWNLOAD_ERR))}}a(ibe,"downloadFileFromS3");async function obe(e,t){try{await vi.mkdirp(Au),await vi.writeFile(`${Au}/${e}`,t)}catch(r){throw Xf.error(vr.WRITE_TEMP_FILE_ERR),tr(r,Iu(vr.DEFAULT_BULK_LOAD_ERR))}}a(obe,"writeFileToTempFolder");async function FR(e){if(e)try{await vi.access(e),await vi.unlink(e)}catch{Xf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(FR,"deleteTempFile");function abe(e,t){if(e.statusCode!==wJ.HTTP_STATUS_CODES.OK)throw tr(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,mn.BAD_REQUEST);if(!ZRe[e.headers["content-type"]])throw tr(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,mn.BAD_REQUEST);if(!e.raw)throw tr(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,mn.BAD_REQUEST)}a(abe,"validateURLResponse");async function av(e){try{let t;switch(e.file_type){case Di.VALID_S3_FILE_TYPES.CSV:t=await cbe(e);break;case Di.VALID_S3_FILE_TYPES.JSON:t=await lbe(e);break;default:throw tr(new Error,vr.DEFAULT_BULK_LOAD_ERR,mn.BAD_REQUEST,Di.LOG_LEVELS.ERROR,vr.INVALID_FILE_EXT_ERR(e))}return vJ(t.records,t.number_written)}catch(t){throw wu(t)}}a(av,"fileLoad");async function OJ(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await BR.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&CJ(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=tr(c);r(l)}}a(OJ,"validateChunk");async function PJ(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Qf.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Qf.isEmpty(c)&&!Qf.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await NJ.callOperationFunctionAsAwait(DJ,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=tr(c,Iu(vr.INSERT_CSV_ERR),mn.INTERNAL_SERVER_ERROR,Di.LOG_LEVELS.ERROR,vr.INSERT_CSV_ERR+" - "+c);r(l)}}a(PJ,"insertChunk");async function cbe(e){let t={records:0,number_written:0},r=LJ(e.schema,e.table);try{let n=new ov,s=vi.createReadStream(e.file_path,{highWaterMark:AJ});s.setEncoding("utf8"),await nv.parsePromise(s,OJ.bind(null,e,n),sv.bind(null,r));let i=n.getPermsResponse();if(i)throw tr(new Error,i,mn.BAD_REQUEST);return s=vi.createReadStream(e.file_path,{highWaterMark:AJ}),s.setEncoding("utf8"),await nv.parsePromise(s,PJ.bind(null,e,t),sv.bind(null,r)),s.destroy(),t}catch(n){throw tr(n,Iu(vr.PAPA_PARSE_ERR),mn.INTERNAL_SERVER_ERROR,Di.LOG_LEVELS.ERROR,vr.PAPA_PARSE_ERR+n)}}a(cbe,"callPapaParse");function LJ(e,t){let r=JRe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>QRe(i,s));return n}a(LJ,"createTransformMap");function sv(e,t,r){let n=e.get(r);return n?n(t):Qf.autoCast(t)}a(sv,"typeFunction");async function lbe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new ov,s=gJ([vi.createReadStream(e.file_path,{encoding:"utf-8"}),SJ.withParser(),c=>c.value,new TJ({batchSize:IJ}),yJ(async c=>{await OJ(e,n,r,c)})]);await new Promise((c,l)=>{RJ(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw tr(new Error,i,mn.BAD_REQUEST);let o=gJ([vi.createReadStream(e.file_path,{encoding:"utf-8"}),SJ.withParser(),c=>c.value,new TJ({batchSize:IJ}),yJ(async c=>{await PJ(e,t,r,c)})]);return await new Promise((c,l)=>{RJ(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw tr(n,Iu(vr.INSERT_JSON_ERR),mn.INTERNAL_SERVER_ERROR,Di.LOG_LEVELS.ERROR,vr.INSERT_JSON_ERR+n)}}a(lbe,"insertJson");async function DJ(e){let t={};try{e.data&&e.data.length>0&&ube(e.data[0])?t=await dbe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Xf.info(t.message))}catch(r){throw wu(r)}return t}a(DJ,"callBulkFileLoad");function ube(e){let t=Object.keys(e);for(let r of t)if(!XRe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(ube,"validateColumnNames");async function dbe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=BR.insert;break;case"update":i=BR.update;break;case"upsert":i=BR.upsert;break;default:throw tr(new Error,vr.INVALID_ACTION_PARAM_ERR(n),mn.BAD_REQUEST,Di.LOG_LEVELS.ERROR,vr.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)o.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=Qf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw wu(o)}}a(dbe,"bulkFileLoad");function vJ(e,t){return`successfully loaded ${t} of ${e} records`}a(vJ,"buildResponseMsg");function wu(e){return tr(e,Iu(vr.DEFAULT_BULK_LOAD_ERR),mn.INTERNAL_SERVER_ERROR,Di.LOG_LEVELS.ERROR,vr.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(wu,"buildTopLevelErrMsg")});var FJ=M((hqe,BJ)=>{"use strict";var fbe=Sn(),mbe=pi(),UJ=Q(),pbe=Vn(),pqe=uT(),hbe=require("clone"),uv=require("alasql"),Ebe=lS(),xJ=require("util"),_be=xJ.promisify(mbe.getTableSchema),gbe=xJ.promisify(fbe.search),Sbe=(G(),D(j)),lv=ae();Ebe(uv);BJ.exports={update:ybe};var Tbe="There was a problem performing this update. Please check the logs and try again.";async function ybe({statement:e,hdb_user:t}){let r=await _be(e.table.databaseid,e.table.tableid),n=Rbe(e.columns);lv.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=hbe(s),c=lv.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=uv.parse(l).statements[0],d=await gbe(u),f=bbe(n,d);return Abe(o,f,t)}a(ybe,"update");function Rbe(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=uv.compile(`SELECT ${r.expression.toString()} AS [${Sbe.FUNC_VAL}] FROM ?`)}),t}catch(t){throw UJ.error(t),new Error(Tbe)}}a(Rbe,"createUpdateRecord");function bbe(e,t){return lv.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(bbe,"buildUpdateRecords");async function Abe(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await pbe.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){UJ.error(`Error delete new_attributes from update response: ${i}`)}return s}a(Abe,"updateRecords")});var HJ=M((Sqe,kJ)=>{var Ibe=require("alasql"),wbe=Sn(),Nbe=Q(),Cbe=ms(),fv=require("util"),dv=ae(),Obe=(G(),D(j)),Pbe=pi(),_qe=uT(),gqe=Vn(),Lbe="record",Dbe="successfully deleted",vbe=fv.callbackify(Bbe),Mbe=fv.promisify(wbe.search),Ube=fv.promisify(Pbe.getTableSchema);kJ.exports={convertDelete:vbe};function xbe(e){return`${e.deleted_hashes.length} ${Lbe}${e.deleted_hashes.length===1?"":"s"} ${Dbe}`}a(xbe,"generateReturnMessage");async function Bbe({statement:e,hdb_user:t}){let r=await Ube(e.table.databaseid,e.table.tableid);dv.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=dv.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Ibe.parse(o).statements[0],l={operation:Obe.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Mbe(c);let u=await Cbe.deleteRecords(l);return dv.isEmptyOrZeroLength(u.message)&&(u.message=xbe(u)),delete u.txn_time,u}catch(u){throw Nbe.error(u),u.hdb_code?u.message:u}}a(Bbe,"convertDelete")});var qE=M((yqe,KJ)=>{"use strict";KJ.exports={evaluateSQL:Jbe,processAST:VJ,convertSQLToAST:$J,checkASTPermissions:qJ};var Fbe=Vn(),GJ=require("util"),kbe=GJ.callbackify(Fbe.insert),Hbe=Sn().search,Gbe=FJ().update,qbe=GJ.callbackify(Gbe),$be=HJ().convertDelete,Kc=require("alasql"),Vbe=xR(),HR=Q(),Kbe=lS(),Ybe=ae(),GE=(G(),D(j)),{hdbErrors:Wbe,handleHDBError:mv}=Ee(),{HTTP_STATUS_CODES:pv}=Wbe;Kbe(Kc);var jbe=403,zbe="There was a problem performing this insert. Please check the logs and try again.",hv=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Jbe(e,t){let r=e.parsed_sql_object;if(!r){r=$J(e.sql);let n,s=r.ast.statements[0];if(s instanceof Kc.yy.Insert?n=s.into.databaseid:s instanceof Kc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Kc.yy.Update||s instanceof Kc.yy.Delete?n=s.table.databaseid:HR.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Kc.yy.Select)&&Ybe.isEmptyOrZeroLength(n))return t("No schema specified",null)}VJ(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Jbe,"evaluateSQL");function qJ(e,t){let r;try{r=Vbe.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(qJ,"checkASTPermissions");function $J(e){let t=new hv;if(!e)throw mv(new Error,"The 'sql' parameter is missing from the request body",pv.BAD_REQUEST);try{let r=e.trim(),n=Kc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
133
|
-
`);throw n[1]?mv(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,pv.BAD_REQUEST):mv(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",pv.BAD_REQUEST)}return t}a($J,"convertSQLToAST");function VJ(e,t,r){try{let n=Qbe;if(!e.bypass_auth&&!t.permissions_checked){let i=qJ(e,t);if(i&&i.length>0)return r(jbe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case GE.VALID_SQL_OPS_ENUM.SELECT:n=Hbe,s=t.ast.statements[0];break;case GE.VALID_SQL_OPS_ENUM.INSERT:n=Xbe;break;case GE.VALID_SQL_OPS_ENUM.UPDATE:n=qbe;break;case GE.VALID_SQL_OPS_ENUM.DELETE:n=$be;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(VJ,"processAST");function Qbe(e,t){HR.info(e),t("unknown sql statement")}a(Qbe,"nullFunction");function Xbe({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=Zbe(i,e.values)}catch(o){return r(o)}kbe(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){HR.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(Xbe,"convertInsert");function Zbe(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=Kc.compile(`SELECT ${s.toString()} AS [${GE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw HR.error(r),new Error(zbe)}}a(Zbe,"createDataObjects")});var gv=M((bqe,ZJ)=>{"use strict";var _v=Sn(),eAe=UC(),{AsyncParser:tAe}=require("json2csv"),GR=require("stream"),Ns=ae(),Ev=require("fs-extra"),rAe=require("path"),Zs=Q(),{promisify:jJ}=require("util"),$E=ae(),{handleHDBError:br,hdbErrors:nAe}=Ee(),{HDB_ERROR_MSGS:Xn,HTTP_STATUS_CODES:Ar}=nAe,{streamAsJSON:sAe}=(MA(),D(Kx)),{Upload:iAe}=require("@aws-sdk/lib-storage"),{toCsvStream:oAe}=(Vo(),D(t0)),YJ=["search_by_value","search_by_hash","sql","search_by_conditions"],WJ=["json","csv"],zJ="json",JJ="csv",aAe="Successfully exported JSON locally.",cAe="Successfully exported CSV locally.",lAe=1e3,uAe=_v.searchByHash,dAe=_v.searchByValue,fAe=jJ(GR.finished);ZJ.exports={export_to_s3:EAe,export_local:mAe};async function mAe(e){Zs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=QJ(e);if(!Ns.isEmpty(t))throw Zs.error(t),br(new Error,t,Ar.BAD_REQUEST,void 0,void 0,!0);if(Ns.isEmpty(e.path))throw Zs.error(Xn.MISSING_VALUE("path")),br(new Error,Xn.MISSING_VALUE("path"),Ar.BAD_REQUEST,void 0,void 0,!0);let r=(Ns.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(rAe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Ns.buildFolderPath(e.path,r);await pAe(e.path);let s=await XJ(e);return await hAe(n,e.format,s)}a(mAe,"export_local");async function pAe(e){if(Zs.trace("in confirmPath"),Ns.isEmptyOrZeroLength(e))throw br(new Error,`Invalid path: ${e}`,Ar.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await Ev.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${directory_path}' does not exist`:r.code==="EACCES"?n=`access to path '${directory_path}' is denied`:n=r.message,Zs.error(n),br(new Error,n,Ar.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${directory_path}' is not a directory, please supply a valid folder path`;throw Zs.error(r),br(new Error,r,Ar.BAD_REQUEST,void 0,void 0,!0)}return!0}a(pAe,"confirmPath");async function hAe(e,t,r){if(Zs.trace("in saveToLocal"),$E.isEmptyOrZeroLength(e))throw br(new Error,Xn.INVALID_VALUE("file_path"),Ar.BAD_REQUEST,void 0,void 0,!0);if($E.isEmptyOrZeroLength(t))throw br(new Error,Xn.INVALID_VALUE("Source format"),Ar.BAD_REQUEST,void 0,void 0,!0);if($E.isEmpty(r))throw br(new Error,Xn.NOT_FOUND("Data"),Ar.BAD_REQUEST,void 0,void 0,!0);if(t===zJ){let n=Ev.createWriteStream(e);return sAe(r).pipe(n),await fAe(n),{message:aAe,path:e}}else if(t===JJ){let n=Ev.createWriteStream(e),s=GR.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new tAe(i,c).fromInput(s).toOutput(n).promise(!1),{message:cAe,path:e}}throw br(new Error,Xn.INVALID_VALUE("format"),Ar.BAD_REQUEST)}a(hAe,"saveToLocal");async function EAe(e){if(!e.s3||Object.keys(e.s3).length===0)throw br(new Error,Xn.MISSING_VALUE("S3 object"),Ar.BAD_REQUEST);if(Ns.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw br(new Error,Xn.MISSING_VALUE("aws_access_key_id"),Ar.BAD_REQUEST);if(Ns.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw br(new Error,Xn.MISSING_VALUE("aws_secret_access_key"),Ar.BAD_REQUEST);if(Ns.isEmptyOrZeroLength(e.s3.bucket))throw br(new Error,Xn.MISSING_VALUE("bucket"),Ar.BAD_REQUEST);if(Ns.isEmptyOrZeroLength(e.s3.key))throw br(new Error,Xn.MISSING_VALUE("key"),Ar.BAD_REQUEST);if(Ns.isEmptyOrZeroLength(e.s3.region))throw br(new Error,Xn.MISSING_VALUE("region"),Ar.BAD_REQUEST);let t=QJ(e);if(!Ns.isEmpty(t))throw br(new Error,t,Ar.BAD_REQUEST);Zs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await XJ(e)}catch(l){throw Zs.error(l),l}let n,s=await eAe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new GR.PassThrough;if(e.format===JJ){i=e.s3.key+".csv";let l=oAe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(o)}else if(e.format===zJ){i=e.s3.key+".json";let l=new GR.Readable;l.pipe(o),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let p=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=p,f!==0&&f%lAe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw br(new Error,Xn.INVALID_VALUE("format"),Ar.BAD_REQUEST);return new iAe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(EAe,"export_to_s3");function QJ(e){if(Zs.trace("in exportCoreValidation"),Ns.isEmpty(e.format))return"format missing";if(WJ.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${WJ.join(", ")}`;let t=e.search_operation.operation;if(Ns.isEmpty(t))return"search_operation.operation missing";if(YJ.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${YJ.join(", ")}`}a(QJ,"exportCoreValidation");async function XJ(e){Zs.trace("in getRecords");let t,r;if($E.isEmpty(e.search_operation)||$E.isEmptyOrZeroLength(e.search_operation.operation))throw br(new Error,Xn.INVALID_VALUE("Search operation"),Ar.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=dAe;break;case"search_by_hash":t=uAe;break;case"search_by_conditions":t=_v.searchByConditions;break;case"sql":{let n=qE();t=jJ(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Zs.error(r),br(new Error,r,Ar.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(XJ,"getRecords")});var tQ=M((Iqe,eQ)=>{"use strict";var Sv=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};eQ.exports=Sv});var sQ=M((Nqe,nQ)=>{"use strict";var _Ae=(G(),D(j)),rQ=require("moment"),gAe=require("uuid").v4,Tv=class{static{a(this,"JobObject")}constructor(){this.id=gAe(),this.type=void 0,this.start_datetime=rQ().valueOf(),this.created_datetime=rQ().valueOf(),this.end_datetime=void 0,this.status=_Ae.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};nQ.exports=Tv});var Rv=M((Oqe,fQ)=>{"use strict";var SAe=require("uuid").v4,lQ=Vn(),uQ=Sn(),TAe=fi(),yAe=Ed(),RAe=tQ(),Ut=(G(),D(j)),bAe=sQ(),AAe=YS(),Mi=Q(),IAe=xm(),Zf=ae(),{promisify:wAe}=require("util"),Nu=require("moment"),qR=vC(),iQ=zw(),{deleteTransactionLogsBeforeValidator:NAe}=AD(),{handleHDBError:oQ,hdbErrors:CAe,ClientError:OAe}=Ee(),{HTTP_STATUS_CODES:aQ}=CAe,cQ=uQ.searchByValue,PAe=uQ.searchByHash,LAe=lQ.insert,DAe=lQ.update,yv;fQ.exports={addJob:UAe,updateJob:BAe,handleGetJob:vAe,handleGetJobsByStartDate:MAe,getJobById:dQ};async function vAe(e){if(e.id===void 0)throw new OAe("'id' is required");let t=await dQ(e.id);return Zf.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}a(vAe,"handleGetJob");async function MAe(e){try{let t=await xAe(e);if(Mi.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 Mi.error(r),new Error(r)}}a(MAe,"handleGetJobsByStartDate");async function UAe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Zf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Mi.info(d),t.error=d,t}if(!Ut.JOB_TYPE_ENUM[e.operation])return Mi.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ut.OPERATIONS_ENUM.CSV_FILE_LOAD:n=qR.fileObject(e);break;case Ut.OPERATIONS_ENUM.CSV_URL_LOAD:n=qR.urlObject(e);break;case Ut.OPERATIONS_ENUM.CSV_DATA_LOAD:n=qR.dataObject(e);break;case Ut.OPERATIONS_ENUM.IMPORT_FROM_S3:n=qR.s3FileObject(e);break;case Ut.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ut.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=iQ(e,"date");break;case Ut.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=iQ(e,"timestamp");break;case Ut.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=NAe(e);break;case Ut.OPERATIONS_ENUM.RESTART_SERVICE:if(Ut.HDB_PROCESS_SERVICES[e.service]===void 0)throw oQ(new Error,"Invalid service",aQ.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw oQ(n,n.message,aQ.BAD_REQUEST,void 0,void 0,!0);let s=new bAe;s.type=e.operation===Ut.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ut.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new TAe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await cQ(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Mi.error(f),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=SAe();try{o=await cQ(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Mi.error(f),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Mi.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new IAe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await LAe(l)}catch(d){return Mi.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,Mi.trace(d)}return t}a(UAe,"addJob");async function xAe(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 RAe(n,e.hdb_user);try{if(!yv){let i=qE();yv=wAe(i.evaluateSQL)}return await yv(s)}catch(i){throw Mi.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(xAe,"getJobsInDateRange");async function dQ(e){if(Zf.isEmptyOrZeroLength(e))return Zf.errorizeMessage("Invalid job ID specified.");let t=new yAe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await PAe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Mi.error(n),Zf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(dQ,"getJobById");async function BAe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Zf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ut.JOB_STATUS_ENUM.COMPLETE||e.status===Ut.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Nu().valueOf());let t=new AAe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await DAe(t),r}a(BAe,"updateJob")});var TQ=M((Lqe,SQ)=>{"use strict";var mQ=ae(),Mr=(G(),D(j)),FAe=require("moment"),$R=cv(),VE=Q(),pQ=Rv(),hQ=gv(),EQ=Bl(),_Q=st(),kAe=NR(),HAe=jf(),{parentPort:GAe,isMainThread:gQ}=require("worker_threads"),{onMessageByType:qAe}=st(),bv=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function $Ae(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(mQ.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(mQ.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Mr.JOB_TYPE_ENUM.csv_file_load:await Oo(e,$R.csvFileLoad);break;case Mr.JOB_TYPE_ENUM.csv_url_load:await Oo(e,$R.csvURLLoad);break;case Mr.JOB_TYPE_ENUM.csv_data_load:await Oo(e,$R.csvDataLoad);break;case Mr.JOB_TYPE_ENUM.import_from_s3:await Oo(e,$R.importFromS3);break;case Mr.JOB_TYPE_ENUM.empty_trash:break;case Mr.JOB_TYPE_ENUM.export_local:await Oo(e,hQ.export_local);break;case Mr.JOB_TYPE_ENUM.export_to_s3:await Oo(e,hQ.export_to_s3);break;case Mr.JOB_TYPE_ENUM.delete_files_before:case Mr.JOB_TYPE_ENUM.delete_records_before:await Oo(e,EQ.deleteFilesBefore);break;case Mr.JOB_TYPE_ENUM.delete_audit_logs_before:await Oo(e,EQ.deleteAuditLogsBefore);break;case Mr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Oo(e,kAe.deleteTransactionLogsBefore);break;case Mr.JOB_TYPE_ENUM.restart_service:return await Oo(e,HAe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a($Ae,"parseMessage");async function Oo(e,t){try{e.job.status=Mr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=FAe().valueOf(),await pQ.updateJob(e.job),await VAe(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):VE.error(`There was an error running ${t.name} job with id ${e.job.id}`),VE.error(n),e.job.message=n,e.job.status=Mr.JOB_STATUS_ENUM.ERROR;try{await pQ.updateJob(e.job)}catch(s){throw VE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Oo,"runJob");async function VAe(e){VE.trace("launching job thread:",e),gQ?_Q.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Mr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):GAe.postMessage({type:Mr.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(VAe,"launchJobThread");gQ&&qAe(Mr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{_Q.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Mr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){VE.error(r)}});SQ.exports={parseMessage:$Ae,RunnerMessage:bv}});var RQ=M((vqe,yQ)=>{"use strict";var KAe=ae(),Av=fe(),Yc=(G(),D(j)),YAe=Dt(),WAe=_r(),Po=Q(),jAe=rv(),zAe=io();Av.initSync();yQ.exports={postOperationHandler:QAe,sendOperationTransaction:KE};async function KE(e,t,r,n){if(e.schema===Yc.SYSTEM_SCHEMA_NAME)return;let s=JAe(e,t,r);s&&(Po.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await WAe.publishToStream(`${YAe.SUBJECT_PREFIXES.TXN}.${e.schema}`,zAe.createNatsTableStreamName(e.schema,e.table),n,s))}a(KE,"sendOperationTransaction");function JAe(e,t,r){if(KAe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Yc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}a(JAe,"convertCRUDOperationToTransaction");async function QAe(e,t,r){if(!Av.get(Yc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;Po.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=Av.get(Yc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new jAe(t.txn_time,n,s);switch(e.operation){case Yc.OPERATIONS_ENUM.INSERT:try{await KE(e,t.inserted_hashes,i,r)}catch(o){Po.error("There was an error calling clustering postOperationHandler for insert."),Po.error(o)}break;case Yc.OPERATIONS_ENUM.DELETE:try{await KE(e,t.deleted_hashes,i,r)}catch(o){Po.error("There was an error calling clustering postOperationHandler for delete."),Po.error(o)}break;case Yc.OPERATIONS_ENUM.UPDATE:try{await KE(e,t.update_hashes,i,r)}catch(o){Po.error("There was an error calling clustering postOperationHandler for update."),Po.error(o)}break;case Yc.OPERATIONS_ENUM.UPSERT:try{await KE(e,t.upserted_hashes,i,r)}catch(o){Po.error("There was an error calling clustering postOperationHandler for upsert."),Po.error(o)}break;default:break}return t}a(QAe,"postOperationHandler")});var Z,bQ=se(()=>{Z=class{static{a(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var RD={};ye(RD,{chooseOperation:()=>$Q,executeJob:()=>ei,getOperationFunction:()=>VQ,operation:()=>vv,processLocalTransaction:()=>qQ});function eIe(e){if(!Iv){let t=qE();Iv=Dv.promisify(t.evaluateSQL)}return Iv(e)}async function qQ(e,t){try{if(e.body.operation!=="read_log"&&(zE.default.log_level===gm.INFO||zE.default.log_level===gm.DEBUG||zE.default.log_level===gm.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:o,...c}=e.body;Pn.info(c)}}catch(n){Pn.error(n)}let r=await HQ.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return tIe[e.body.operation]&&UQ.default.setSchemaDataToGlobal(n=>{n&&Pn.error(n)}),r}function $Q(e){let t;try{t=VQ(e)}catch(s){throw Pn.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=qE(),i=e.operation==="sql"?e.sql:e.search_operation.sql,o=s.convertSQLToAST(i);if(e.parsed_sql_object=o,!e.bypass_auth){let c=s.checkASTPermissions(e,o);if(c)throw Pn.error(`${AQ.FORBIDDEN} from operation ${e.operation}`),Pn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,ti.handleHDBError)(new Error,c,ti.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.LOGIN&&e.operation!==V.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=MQ.default.verifyPerms(i,s);if(o)throw Pn.error(`${AQ.FORBIDDEN} from operation ${e.operation}`),Pn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,ti.handleHDBError)(new Error,o,ti.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,ti.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function VQ(e){if(Pn.trace(`getOperationFunction with operation: ${e.operation}`),IQ.has(e.operation))return IQ.get(e.operation);throw(0,ti.handleHDBError)(new Error,ti.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),ti.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function vv(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=$Q(e);return qQ({body:e},n)}async function rIe(e){Pn.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[nA]=!0;let o;switch(i.operation){case V.INSERT:o=await Ou.default.insert(i);break;case V.UPDATE:o=await Ou.default.update(i);break;case V.UPSERT:o=await Ou.default.upsert(i);break;case V.DELETE:o=await tm.default.deleteRecord(i);break;default:Pn.warn("invalid operation in catchup");break}await XAe.postOperationHandler(i,o,e)}catch(o){Pn.info("Invalid operation in transaction"),Pn.error(o)}}async function ei(e){(0,kQ.transformReq)(e);let t,r;try{if(r=await KR.default.addJob(e),r){t=r.createdJob,Pn.info("addJob result",r);let n=new Ov.default.RunnerMessage(t,e);return{message:await Ov.default.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}}catch(n){let s=n instanceof Error?n:null,i=`There was an error executing job: ${s&&"http_resp_msg"in s?s.http_resp_msg:n}`;throw Pn.error(i),(0,ti.handleHDBError)(n,i)}}function nIe(){let e=new Map;return e.set(V.INSERT,new Z(Ou.default.insert)),e.set(V.UPDATE,new Z(Ou.default.update)),e.set(V.UPSERT,new Z(Ou.default.upsert)),e.set(V.SEARCH_BY_CONDITIONS,new Z(em.default.searchByConditions)),e.set(V.SEARCH_BY_HASH,new Z(em.default.searchByHash)),e.set(V.SEARCH_BY_ID,new Z(em.default.searchByHash)),e.set(V.SEARCH_BY_VALUE,new Z(em.default.searchByValue)),e.set(V.SEARCH,new Z(ZAe)),e.set(V.SQL,new Z(eIe)),e.set(V.CSV_DATA_LOAD,new Z(ei,YE.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new Z(ei,YE.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new Z(ei,YE.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new Z(ei,YE.default.importFromS3)),e.set(V.CREATE_SCHEMA,new Z(Ui.default.createSchema)),e.set(V.CREATE_DATABASE,new Z(Ui.default.createSchema)),e.set(V.CREATE_TABLE,new Z(Ui.default.createTable)),e.set(V.CREATE_ATTRIBUTE,new Z(Ui.default.createAttribute)),e.set(V.DROP_SCHEMA,new Z(Ui.default.dropSchema)),e.set(V.DROP_DATABASE,new Z(Ui.default.dropSchema)),e.set(V.DROP_TABLE,new Z(Ui.default.dropTable)),e.set(V.DROP_ATTRIBUTE,new Z(Ui.default.dropAttribute)),e.set(V.DESCRIBE_SCHEMA,new Z(WE.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new Z(WE.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new Z(WE.default.describeTable)),e.set(V.DESCRIBE_ALL,new Z(WE.default.describeAll)),e.set(V.DELETE,new Z(tm.default.deleteRecord)),e.set(V.ADD_USER,new Z(CN)),e.set(V.ALTER_USER,new Z(ON)),e.set(V.DROP_USER,new Z(PN)),e.set(V.LIST_USERS,new Z(DN)),e.set(V.LIST_ROLES,new Z(jE.default.listRoles)),e.set(V.ADD_ROLE,new Z(jE.default.addRole)),e.set(V.ALTER_ROLE,new Z(jE.default.alterRole)),e.set(V.DROP_ROLE,new Z(jE.default.dropRole)),e.set(V.USER_INFO,new Z(LN)),e.set(V.READ_LOG,new Z(NQ.default)),e.set(V.ADD_NODE,new Z(CQ.default)),e.set(V.UPDATE_NODE,new Z(wv.default)),e.set(V.SET_NODE_REPLICATION,new Z(wv.default)),e.set(V.REMOVE_NODE,new Z(OQ.default)),e.set(V.CONFIGURE_CLUSTER,new Z(PQ.default)),e.set(V.PURGE_STREAM,new Z(LQ.default)),e.set(V.SET_CONFIGURATION,new Z(Pv.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new Z(DQ.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new Z(vQ.default)),e.set(V.CLUSTER_SET_ROUTES,new Z(VR.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new Z(VR.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new Z(VR.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new Z(ei,Nv.default.export_to_s3)),e.set(V.CREATE_CSR,new Z(Cu.default.createCsr)),e.set(V.SIGN_CERTIFICATE,new Z(Cu.default.signCertificate)),e.set(V.LIST_CERTIFICATES,new Z(Cu.default.listCertificates)),e.set(V.ADD_CERTIFICATES,new Z(Cu.default.addCertificate)),e.set(V.REMOVE_CERTIFICATE,new Z(Cu.default.removeCertificate)),e.set(V.GET_KEY,new Z(Cu.default.getKey)),e.set(V.ADD_NODE_BACK,new Z(NP)),e.set(V.REMOVE_NODE_BACK,new Z(CP)),e.set(V.DELETE_FILES_BEFORE,new Z(ei,tm.default.deleteFilesBefore)),e.set(V.DELETE_RECORDS_BEFORE,new Z(ei,tm.default.deleteFilesBefore)),e.set(V.EXPORT_LOCAL,new Z(ei,Nv.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new Z(KR.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new Z(KR.default.handleGetJob)),e.set(V.GET_REGISTRATION_INFO,new Z(HD)),e.set(V.GET_FINGERPRINT,new Z(GD)),e.set(V.SET_LICENSE,new Z(qD)),e.set(V.RESTART,new Z(Cv.default.restart)),e.set(V.RESTART_SERVICE,new Z(ei,Cv.default.restartService)),e.set(V.CATCHUP,new Z(rIe)),e.set(V.SYSTEM_INFORMATION,new Z(xQ.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new Z(ei,tm.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new Z(wQ.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new Z(AC)),e.set(V.REFRESH_OPERATION_TOKEN,new Z(IC)),e.set(V.LOGIN,new Z(_D)),e.set(V.LOGOUT,new Z(gD)),e.set(V.GET_CONFIGURATION,new Z(Pv.default.getConfiguration)),e.set(V.CUSTOM_FUNCTIONS_STATUS,new Z(wt.default.customFunctionsStatus)),e.set(V.GET_CUSTOM_FUNCTIONS,new Z(wt.default.getCustomFunctions)),e.set(V.GET_COMPONENT_FILE,new Z(wt.default.getComponentFile)),e.set(V.GET_COMPONENTS,new Z(wt.default.getComponents)),e.set(V.SET_COMPONENT_FILE,new Z(wt.default.setComponentFile)),e.set(V.DROP_COMPONENT,new Z(wt.default.dropComponent)),e.set(V.GET_CUSTOM_FUNCTION,new Z(wt.default.getCustomFunction)),e.set(V.SET_CUSTOM_FUNCTION,new Z(wt.default.setCustomFunction)),e.set(V.DROP_CUSTOM_FUNCTION,new Z(wt.default.dropCustomFunction)),e.set(V.ADD_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.addComponent)),e.set(V.ADD_COMPONENT,new Z(wt.default.addComponent)),e.set(V.DROP_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.dropCustomFunctionProject)),e.set(V.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.packageComponent)),e.set(V.PACKAGE_COMPONENT,new Z(wt.default.packageComponent)),e.set(V.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.deployComponent)),e.set(V.DEPLOY_COMPONENT,new Z(wt.default.deployComponent)),e.set(V.READ_TRANSACTION_LOG,new Z(Lv.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new Z(ei,Lv.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new Z(BQ.default.installModules)),e.set(V.GET_BACKUP,new Z(Ui.default.getBackup)),e.set(V.CLEANUP_ORPHAN_BLOBS,new Z(Ui.default.cleanupOrphanBlobs)),e.set(V.ADD_SSH_KEY,new Z(wt.default.addSSHKey)),e.set(V.GET_SSH_KEY,new Z(wt.default.getSSHKey)),e.set(V.UPDATE_SSH_KEY,new Z(wt.default.updateSSHKey)),e.set(V.DELETE_SSH_KEY,new Z(wt.default.deleteSSHKey)),e.set(V.LIST_SSH_KEYS,new Z(wt.default.listSSHKeys)),e.set(V.SET_SSH_KNOWN_HOSTS,new Z(wt.default.setSSHKnownHosts)),e.set(V.GET_SSH_KNOWN_HOSTS,new Z(wt.default.getSSHKnownHosts)),e.set(V.GET_ANALYTICS,new Z(ND)),e.set(V.LIST_METRICS,new Z(CD)),e.set(V.DESCRIBE_METRIC,new Z(OD)),e.set(V.GET_STATUS,new Z(BD)),e.set(V.SET_STATUS,new Z(FD)),e.set(V.CLEAR_STATUS,new Z(xD)),e.set(V.INSTALL_USAGE_LICENSE,new Z(BL)),e.set(V.GET_USAGE_LICENSES,new Z(GL)),e}var em,YE,Ui,WE,tm,wQ,jE,wt,zE,NQ,CQ,wv,OQ,PQ,LQ,DQ,vQ,VR,Nv,MQ,KR,ti,Cv,Dv,Ou,UQ,xQ,Ov,Pv,Lv,BQ,FQ,kQ,Cu,HQ,GQ,AQ,Pn,XAe,ZAe,Iv,tIe,IQ,bD=se(()=>{em=b(Sn()),YE=b(cv()),Ui=b(ry()),WE=b(Yl()),tm=b(Bl()),wQ=b(eP());hs();jE=b(ah()),wt=b(yD()),zE=b(Q()),NQ=b(oP()),CQ=b(Kh()),wv=b(vP()),OQ=b(Jh()),PQ=b(xP()),LQ=b(BP()),DQ=b(gy()),vQ=b(GP()),VR=b(Ty()),Nv=b(gv()),MQ=b(xR()),KR=b(Rv());G();ti=b(Ee()),Cv=b(jf()),Dv=b(require("util")),Ou=b(Vn()),UQ=b(pi()),xQ=b(qh()),Ov=b(TQ());Wd();hR();Pv=b(_t()),Lv=b(NR()),BQ=b(wD()),FQ=b(ai()),kQ=b(ae());Hr();Cu=b(Ts());bf();LD();HQ=b(MC()),GQ=b(RQ());LE();fE();VD();bQ();({HTTP_STATUS_CODES:AQ}=ti.hdbErrors),Pn=zE.default.loggerWithTag("operation"),{transactToClusteringUtils:XAe}=GQ.default,ZAe=Dv.promisify(em.default.search);a(eIe,"evaluateSQL");tIe={[V.CREATE_ATTRIBUTE]:!0,[V.CREATE_TABLE]:!0,[V.CREATE_SCHEMA]:!0,[V.DROP_ATTRIBUTE]:!0,[V.DROP_TABLE]:!0,[V.DROP_SCHEMA]:!0};a(qQ,"processLocalTransaction");IQ=nIe();Ue.operation=vv;a($Q,"chooseOperation");a(VQ,"getOperationFunction");(0,FQ._assignPackageExport)("operation",vv);a(vv,"operation");a(rIe,"catchup");a(ei,"executeJob");a(nIe,"initializeOperationFunctionMap")});var jR=M((Hqe,jQ)=>{"use strict";var YR=(G(),D(j)),sIe=ae(),rm=Q(),{handleHDBError:Mv,hdbErrors:WR}=Ee(),{isMainThread:iIe}=require("worker_threads"),{Readable:oIe}=require("stream"),KQ=require("os"),aIe=require("util"),cIe=NC(),WQ=aIe.promisify(cIe.authorize),YQ=(bD(),D(RD)),{createGzip:lIe,constants:uIe}=require("zlib"),dIe=[YR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,YR.OPERATIONS_ENUM.LOGIN,YR.OPERATIONS_ENUM.LOGOUT];function fIe(e){let t=`Found an uncaught exception with message: ${e.message}. ${KQ.EOL}Stack: ${e.stack} ${KQ.EOL}Terminating ${iIe?"HDB":"thread"}.`;console.error(t),rm.fatal(t),process.exit(1)}a(fIe,"handleServerUncaughtException");function mIe(e,t,r){if(rm[e.logLevel||"info"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:WR.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(mIe,"serverErrorHandler");function pIe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=Mv(new Error,"Invalid JSON.",WR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(sIe.isEmpty(e.body.operation)){let n=Mv(new Error,"Request body must include an 'operation' property.",WR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(pIe,"reqBodyValidationHandler");function hIe(e,t,r){let n;!dIe.includes(e.body.operation)||e.body.operation===YR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?WQ(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{i.statusCode=401,rm.debug("Login failed",i),r(i,null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(hIe,"authHandler");function EIe(e,t,r){WQ(e,t).then(n=>{e.hdb_user=n,r()}).catch(n=>{rm.warn(n),rm.warn(`{"ip":"${e.socket?.remoteAddress}", "error":"${n.stack}"`);let s=typeof n=="string"?{error:n}:{error:n.message};r(Mv(n,s,WR.HTTP_STATUS_CODES.UNAUTHORIZED),null)})}a(EIe,"authAndEnsureUserOnRequest");async function _Ie(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=YQ.chooseOperation(e.body);let s=await YQ.processLocalTransaction(e,n);if(s instanceof oIe&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(lIe({level:uIe.Z_BEST_SPEED})))}return s}catch(s){throw rm.error(s),s}}a(_Ie,"handlePostRequest");jQ.exports={authHandler:hIe,authAndEnsureUserOnRequest:EIe,handlePostRequest:_Ie,handleServerUncaughtException:fIe,serverErrorHandler:mIe,reqBodyValidationHandler:pIe}});var XQ=M((qqe,QQ)=>{"use strict";var gIe=require("fastify-plugin"),{handlePostRequest:zQ,authHandler:SIe,reqBodyValidationHandler:TIe}=jR();async function yIe(e){e.decorate("hdbCore",{preValidation:[TIe,SIe],request:a(t=>JQ(zQ(t,response)),"request"),requestWithoutAuthentication:a((t,r)=>JQ(zQ(t,r,!0)),"requestWithoutAuthentication")})}a(yIe,"hdbCore");async function JQ(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(JQ,"convertAsyncIterators");QQ.exports=gIe(yIe)});var e3=M((Kqe,ZQ)=>{"use strict";var Vqe=require("fs"),zR=fe();zR.initSync();var{CONFIG_PARAMS:Uv}=(G(),D(j)),RIe=1024*1024*1024;function bIe(e){let t=zR.get(Uv.HTTP_TIMEOUT),r=zR.get(Uv.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:RIe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:zR.get(Uv.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(bIe,"getServerOptions");ZQ.exports=bIe});var n3=M((Wqe,r3)=>{"use strict";var xv=fe();xv.initSync();var{CONFIG_PARAMS:t3}=(G(),D(j));function AIe(){let e=xv.get(t3.HTTP_CORSACCESSLIST),t=xv.get(t3.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(AIe,"getCORSOptions");r3.exports=AIe});var o3=M((zqe,i3)=>{"use strict";var s3=fe();s3.initSync();var IIe=(G(),D(j));function wIe(){return s3.get(IIe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(wIe,"getHeaderTimeoutConfig");i3.exports=wIe});var Fv={};ye(Fv,{customFunctionsServer:()=>OIe,ready:()=>S3,start:()=>CIe});function CIe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Ma||(Ma=g3(t),Ue.http((await Ma).server));let o=await Ma,c=(0,Bv.dirname)(s),l=(0,Bv.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!a3.has(c)){a3.add(c);try{o.register(LIe(c,l))}catch(u){if(u.message==="Root plugin has already booted")Tt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:S3}}async function OIe(){try{Tt.info("In Custom Functions Fastify server"+process.cwd()),Tt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Tt.debug(`Custom Functions server process ${process.pid} starting up.`),await PIe();let e=m3.get(x.HTTP_SECUREPORT)>0,t;try{t=Ma=await g3(e)}catch(r){throw Tt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Tt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Tt.error(`Custom Functions ${process.pid} Error: ${e}`),Tt.error(e),process.exit(1)}}async function PIe(){try{Tt.info("Custom Functions starting configuration."),await _i(),Tt.info("Custom Functions completed configuration.")}catch(e){Tt.error(e)}}function LIe(e,t){return async function(r){try{Tt.info("Custom Functions starting buildRoutes"),Tt.trace("Loading fastify routes folder "+e),(0,c3.existsSync)(e)&&r.register(f3.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Tt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Tt.error(s.message):s&&Tt.error(s),o()})}catch(n){Tt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function g3(e){Tt.info("Custom Functions starting buildServer.");let t=(0,p3.default)(e),r=(0,l3.default)(t);r.server.headersTimeout=(0,E3.default)(),r.setErrorHandler(_3.serverErrorHandler);let n=(0,h3.default)();return n&&r.register(u3.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(d3.default),await r.register(NIe),await r.after(),Vm(r),Tt.info("Custom Functions completed buildServer."),r}function S3(){if(Ma)return Ma.then?Ma.then(e=>e.ready()):Ma.ready()}var Bv,c3,l3,u3,d3,f3,m3,Tt,NIe,p3,h3,E3,_3,Ma,a3,T3=se(()=>{Bv=require("path"),c3=require("fs"),l3=b(require("fastify")),u3=b(require("@fastify/cors")),d3=b(yC()),f3=b(require("@fastify/autoload")),m3=b(fe());G();Tt=b(Q()),NIe=b(XQ());hs();p3=b(e3()),h3=b(n3()),E3=b(o3()),_3=b(jR());Vo();Hr();a3=new Set;a(CIe,"start");a(OIe,"customFunctionsServer");a(PIe,"setUp");a(LIe,"buildRouteFolder");a(g3,"buildServer");a(S3,"ready")});var Hv={};ye(Hv,{handleApplication:()=>DIe,suppressHandleApplicationWarning:()=>vIe});function DIe(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,Ua.join)(n.absolutePath,"index.html");(0,nm.existsSync)(s)&&r[n.eventType==="addDir"?"set":"delete"](n.urlPath,s);break;case"add":t.set(n.urlPath,n.absolutePath),n.urlPath.endsWith("index.html")&&(r.set((0,Ua.dirname)(n.urlPath),null),r.set((0,Ua.join)((0,Ua.dirname)(n.urlPath),"/"),n.absolutePath));break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,Ua.dirname)(n.urlPath));break}}),e.server.http((n,s)=>{if(n.method!=="GET"||n.isWebSocket)return s(n);let i=e.options.get(["fallthrough"])??!0;if(typeof i!="boolean")throw new Error(`Invalid fallthrough option: ${i}. Must be a boolean.`);let o=t.get(n.pathname);if(!o){let d=e.options.get(["index"])??!0;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);if(d&&(o=r.get(n.pathname),o===null))return{status:301,headers:{Location:(0,Ua.join)(n.pathname,"/")}}}if(!o){let d=e.options.get(["extensions"])??[];if(!Array.isArray(d)||d.some(f=>typeof f!="string"))throw new Error(`Invalid extensions option: ${d}. Must be an array of strings.`);for(let f of d)if(o=t.get(`${n.pathname}.${f}`),o)break}if(o)return{handlesHeaders:!0,body:(0,kv.default)(n,(0,nm.realpathSync)(o))};if(i)return s(n);let c=e.options.get(["notFound"]);if(MIe(c),!c)return{status:404,body:"File not found"};let l=(0,Ua.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,nm.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,kv.default)(n,(0,nm.realpathSync)(l))}},{runFirst:!0})}function MIe(e){if(!(e===void 0||typeof e=="string")){if(typeof e=="object"&&e!==null&&!Array.isArray(e)){if(!("file"in e)||typeof e.file!="string")throw new Error(`Invalid \`notFound.file\` option: ${e.file}. Must be a string.`);if(!("statusCode"in e)||typeof e.statusCode!="number")throw new Error(`Invalid \`notFound.statusCode\` option: ${e.statusCode}. Must be a number.`);return}throw new Error(`Invalid notFound option: ${e}. Must be a string or an object with file and statusCode properties.`)}}var nm,Ua,kv,vIe,y3=se(()=>{nm=require("node:fs"),Ua=require("node:path"),kv=b(require("send"));a(DIe,"handleApplication");vIe=!0;a(MIe,"validateNotFoundOption")});var Gv={};ye(Gv,{start:()=>UIe});function UIe({override:e}){return{handleFile:a((t,r,n)=>{JR.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,R3.parse)(t))){if(process.env[s]!==void 0)if(JR.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)JR.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var R3,JR,b3=se(()=>{R3=require("dotenv"),JR=b(Q());a(UIe,"start")});var Vv={};ye(Vv,{DataLoaderError:()=>Cs,DataLoaderResult:()=>sm,EmptyFileError:()=>eb,FileParseError:()=>ZR,InvalidPropertyTypeError:()=>tb,MissingRequiredPropertyError:()=>JE,RecordProcessingError:()=>QE,SystemDatabaseError:()=>rb,UnsupportedFileExtensionError:()=>XR,computeRecordHash:()=>$v,handleApplication:()=>FIe,loadDataFile:()=>L3,suppressHandleApplicationWarning:()=>BIe});function $v(e){let t=Object.keys(e).sort(),r={};for(let s of t)r[s]=e[s];let n=JSON.stringify(r);return(0,I3.createHash)("sha256").update(n).digest("hex")}function P3(e){return e.system&&e.system[qv]?e.system[qv]:QR||(QR=ze({database:"system",table:qv,attributes:[{name:"id",type:"string",isPrimaryKey:!0},{name:"hash",type:"string"}]}),QR)}async function xIe(e,t,r,n){try{let s=P3(n),i=e?`${e}:${t}:${r}`:`${t}:${r}`;return(await s.get(i))?.hash||null}catch(s){return ri.error?.(`Failed to get stored hash: ${s.message}`),null}}async function A3(e,t,r,n,s){try{let i=P3(s),o=e?`${e}:${t}:${r}`:`${t}:${r}`;await i.put({id:o,hash:n})}catch(i){ri.error?.(`Failed to store hash: ${i.message}`)}}function FIe(e){if((0,N3.getWorkerIndex)()!==0){ri.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(a(function(r){return r.entryType!=="file"||r.eventType==="unlink"?Promise.resolve():L3(r,yn,Me).then(n=>{ri.debug?.("Data loader processed file: %s: %s",(0,xa.basename)(r.absolutePath),n.message)})},"handleDataLoaderEntry"))}async function L3({contents:e,absolutePath:t},r,n){let s=(0,xa.extname)(t)||"unknown",i;try{if(s===".yaml"||s===".yml")i=(0,w3.parseDocument)(e.toString()).toJSON();else if(s===".json")i=JSON.parse(e.toString());else throw new XR(t,s)}catch(d){throw d instanceof Cs?d:new ZR(t,d)}if(!i)throw new eb(t);let{database:o,table:c,records:l}=i;if(!c)throw new JE(t,"table");if(!l)throw new JE(t,"records");if(!Array.isArray(l))throw new tb(t,"records","array");let u=o?`${o}.${c}`:c;if(o?.toLowerCase()==="system")throw new rb(o,c);try{let d;if(o&&n[o]&&n[o][c])ri.debug?.(`Using existing table ${u} from database tables`),d=n[o][c];else if(r&&r[c])ri.debug?.(`Using existing table ${u} from global tables`),d=r[c];else{ri.debug?.(`Table ${u} not found, creating new table`);let _=[];if(l.length>0){let R=l[0];Object.keys(R).map(S=>{let y={name:S,type:typeof R[S]};return S==="id"&&(y.isPrimaryKey=!0),y}).forEach(S=>{_.push(S)})}d=await ze({database:o,table:c,attributes:_})}let f=l.length,m=0,p=0,h=0,E=100;for(let _=0;_<l.length;_+=E){let R=l.slice(_,_+E),S=[];for(let y of R)S.push(async()=>{try{let w=null,I=y.id;I!==void 0&&(w=await d.get(I));let H=$v(y);if(!w){m++;let z=await d.put(y);return await A3(o,c,I,H,n),z}let X=await xIe(o,c,I,n);if(!X)return h++,Promise.resolve({inserted:0,updated:0});let q={};for(let z of Object.keys(y))z in w&&(q[z]=w[z]);return $v(q)!==X?(h++,Promise.resolve({inserted:0,updated:0})):H!==X?(p++,await d.patch(I,y),await A3(o,c,I,H,n),{updated:1}):(h++,Promise.resolve({inserted:0,updated:0}))}catch(w){if(w instanceof Cs)ri.error?.(`Record processing error: ${w.message}`);else{let I=new QE(u,w);ri.error?.(`Record processing error: ${I.message}`)}return Promise.resolve({inserted:0,updated:0,error:w.message})}});await Promise.all(S.map(y=>y()))}if(m>0||p>0){let _=`Loaded ${m} new and updated ${p} records in ${u}`;return h>0&&(_+=` (${h} records skipped)`),ri.info?.(_),new sm(t,o,c,"success",m+p,_)}else if(h>0){let _=`All ${h} records in ${u} already up-to-date`;return ri.info?.(_),new sm(t,o,c,"skipped",f,_)}else{let _=`No records to process in ${u}`;return ri.info?.(_),new sm(t,o,c,"success",0,_)}}catch(d){throw d instanceof Cs?d:new QE(u,d)}}var xa,I3,w3,N3,Ba,C3,O3,ri,qv,QR,BIe,Cs,XR,ZR,eb,JE,tb,rb,QE,sm,D3=se(()=>{xa=require("node:path"),I3=require("node:crypto"),w3=require("yaml");Oe();N3=b(st()),Ba=b(Jr()),C3=b(Ee()),O3=b(Q()),ri=O3.default.forComponent("dataLoader"),qv="hdb_dataloader_hash";a($v,"computeRecordHash");a(P3,"getHashTrackingTable");a(xIe,"getStoredHash");a(A3,"storeHash");BIe=!0;a(FIe,"handleApplication");a(L3,"loadDataFile");Cs=class extends C3.ClientError{static{a(this,"DataLoaderError")}constructor(t,r=Ba.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},XR=class extends Cs{static{a(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,xa.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,Ba.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},ZR=class extends Cs{static{a(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,xa.basename)(t)}: ${r.message}`,Ba.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},eb=class extends Cs{static{a(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,xa.basename)(t)} is empty or invalid`,Ba.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},JE=class extends Cs{static{a(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,xa.basename)(t)} is missing required "${r}" property`,Ba.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},tb=class extends Cs{static{a(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,xa.basename)(t)} has invalid "${r}" property, expected ${n}`,Ba.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},rb=class extends Cs{static{a(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,Ba.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},QE=class extends Cs{static{a(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,Ba.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},sm=class{static{a(this,"DataLoaderResult")}#e;#t;#n;#r;#s;#i;constructor(t,r,n,s,i,o){this.#e=t,this.#t=r||"unknown",this.#n=n||"unknown",this.#r=s,this.#s=i,this.#i=o}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#n}get status(){return this.#r}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#n,status:this.#r,count:this.#s,message:this.#i}}}});var Kv={};ye(Kv,{calculateRestHttpURL:()=>V3,hdbServer:()=>qIe,start:()=>qIe});async function qIe(e){try{xi.default.debug("In Fastify server"+process.cwd()),xi.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),xi.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=v3.default.isMaster,await $Ie();let t=e.securePort>0;im=VIe(t,e.resources),await im.ready(),e||(e={}),e.isOperationsServer=!0;try{Ue.http(im.server,e),im.server.closeIdleConnections||await im.listen({port:0,host:"::"})}catch(r){throw im.close(),xi.default.error(r),xi.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),xi.default.fatal(t),process.exit(1)}}async function $Ie(){return xi.default.trace("Configuring HarperDB process."),G3.default.setSchemaDataToGlobal(),_i()}function VIe(e,t){xi.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let r=WIe(e),n=(0,M3.default)(r);n.server.headersTimeout=zIe(),n.setErrorHandler(Lo.serverErrorHandler);let s=jIe();s&&n.register(U3.default,s),n.register(function(o,c,l){o.setNotFoundHandler(function(u,d){n.server.emit("unhandled",u.raw,d.raw)}),l()}),n.register(F3.default),n.register(x3.default),Vm(n),n.get("/health",()=>"HarperDB is running."),n.register(B3.default,{root:k3.default.join(H3.PACKAGE_ROOT,"studio/web")});let i=Bi.default.get(Tm.LOCAL_STUDIO_ON);return!q3.default.isEmpty(i)&&i.toString().toLowerCase()==="true"?n.get("/",(o,c)=>c.sendFile("index.html")):n.get("/",(o,c)=>c.sendFile("running.html")),n.get("/api/openapi/rest",{preValidation:[Lo.authAndEnsureUserOnRequest]},KIe(t)),n.post("/",{preValidation:[Lo.reqBodyValidationHandler,Lo.authHandler],config:{isOperation:!0}},YIe),xi.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),n}function KIe(e){let t=Bi.default.get(x.HTTP_PORT),r=Bi.default.get(x.HTTP_SECUREPORT);return n=>n.hdb_user?.role?.permission?.super_user?GS(e,V3(t,r,n)):(xi.default.warn(`{"ip":"${n.socket.remoteAddress}", "error":"attempt to access /api/openapi/rest without being super_user"`),new $3.ServerError("Forbidden",403))}function V3(e,t,r){let n=new URL(`${r.protocol}://${r.hostname}`);return n.hostname.toLowerCase()==="localhost"||n.hostname.match(/^[\d.:]+$/)?t?(n.port=t,n.protocol="https:"):e&&(n.port=e,n.protocol="http:"):(n.port="443",n.protocol="https:"),n.toString()}function YIe(e,t){return e.body?.operation?.startsWith("restart")&&t.header("Connection","close"),(0,Lo.handlePostRequest)(e,t)}function WIe(e){let t=Bi.default.get(om.OPERATIONSAPI_NETWORK_TIMEOUT),r=Bi.default.get(om.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:HIe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,http2:Bi.default.get(om.OPERATIONSAPI_NETWORK_HTTP2),https:e}}function jIe(){let e=Bi.default.get(om.OPERATIONSAPI_NETWORK_CORS),t=Bi.default.get(om.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===GIe)&&(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 zIe(){return Bi.default.get(om.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??kIe}var v3,Bi,xi,M3,U3,x3,B3,F3,k3,H3,G3,q3,Lo,$3,kIe,HIe,GIe,om,im,K3=se(()=>{v3=b(require("cluster")),Bi=b(fe());G();xi=b(Q()),M3=b(require("fastify")),U3=b(require("@fastify/cors")),x3=b(require("@fastify/compress")),B3=b(require("@fastify/static")),F3=b(yC()),k3=b(require("path")),H3=b(yt()),G3=b(pi()),q3=b(ae());hs();Hr();Lo=b(jR());Vo();EC();$3=b(Ee());Bi.default.initSync();kIe=6e4,HIe=1024*1024*1024,GIe="TRUE",{CONFIG_PARAMS:om}=j;a(qIe,"operationsServer");a($Ie,"setUp");a(VIe,"buildServer");a(KIe,"restOpenAPIHandler");a(V3,"calculateRestHttpURL");a(YIe,"handler");a(WIe,"getServerOptions");a(jIe,"getCORSOpts");a(zIe,"getHeaderTimeoutConfig")});var Qv={};ye(Qv,{disableNATS:()=>QIe,publishToStream:()=>ib,setNATSReplicator:()=>Yv,setPublishToStream:()=>XIe,setSubscription:()=>Jv,start:()=>JIe});function JIe(){XE.default.get(x.CLUSTERING_ENABLED)&&ewe()}function QIe(e=!0){J3=e}function XIe(e,t){ib=e,Jv=t}function ewe(){if(J3||process.env._DISABLE_NATS)return;let e=lt(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];Yv(s,r,i)}}Vl((r,n)=>{Yv(r.tableName,r.databaseName,r),n&&X3(r)}),!Y3&&(Y3=!0)}function Yv(e,t,r){if(t==="system"&&twe.includes(e))return;if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends Xt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){X3(i)}static subscribe(){let i=new ss;return Jv(t,e,i),i}static subscribeOnThisThread(i){return i<(XE.default.get(x.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??ZIe)}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 nb(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=Q3;return i}a(n,"getNATSTransaction")}function X3(e){let t=XE.default.get(x.CLUSTERING_NODENAME);ib(`${jv.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,zv.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 W3,jv,zv,j3,z3,XE,sb,J3,ib,Jv,ZIe,Q3,Y3,twe,nb,Wv,Z3=se(()=>{Oe();Qi();W3=b(_r()),jv=b(Dt()),zv=b(io());Vu();j3=b(jC()),z3=b(xn()),XE=b(fe());G();sb=b(Q());a(JIe,"start");a(QIe,"disableNATS");ib=W3.publishToStream,Jv=j3.setSubscription;a(XIe,"setPublishToStream");ZIe=2;a(ewe,"assignReplicationSource");twe=["hdb_job","hdb_raw_analytics","hdb_info"];a(Yv,"setNATSReplicator");a(X3,"publishSchema");nb=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=XE.default.get(x.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let o=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(sb.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=o)),l.table===f&&l.operation===m?(o.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(ib(`${jv.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,zv.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw sb.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},Wv=class extends nb{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,z3.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};Q3=new Wv});async function s6({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await Xv.get(e,{returnNonexistent:!0});i=new tM(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await Xv.get(e);o&&o.delete()}i=new ab(e,t)}return n&&(n.id=e,n.user={username:t?.username},ZE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function Zv(){return ob++,ob>65500&&(ob=1),ob}function eM(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=Bs.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=new xs(i.relativeURL);o.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return bt(r,()=>s?t===void 0?c.delete(o,r):c.put(o,e.data,r):c.publish(o,e.data,r))}var t6,Wc,r6,n6,e6,Xv,ZE,ob,ab,tM,i6=se(()=>{Oe();sc();t6=b(xn()),Wc=b(Q());Qa();r6=b(st()),n6=b(XL());Hr();Dg();e6=100,Xv=ze({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),ZE=ze({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,r6.getWorkerIndex)()===0&&(async()=>{await n6.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of ZE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Ue.getUser(r.user.username));try{await eM(r,t,r)}catch{(0,Wc.warn)("Failed to publish will",t)}ZE.delete(e.id)}})();a(s6,"getSession");ob=1;a(Zv,"getNextMessageId");ab=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(S=>S.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:o,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};o&&(0,Wc.trace)("Resuming subscription from",s,"from",o);let p=Bs.getMatch(u,"mqtt");if(!p){let S=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw S.statusCode=404,S}m.url=p.relativeURL;let h;if(m.url.indexOf("+")>-1||(h=m.url.indexOf("#"))>-1){let S=m.url.slice(1);if(h--,h>-1&&h!==S.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,S.indexOf("+")===S.length-1)m.onlyChildren=!0,m.url="/"+S.slice(0,S.length-1);else{let y=S.split("/"),w;for(let X=0;X<y.length;X++)if(y[X].indexOf("+")>-1)if(y[X]==="+")w=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&w)throw new Error("Filters can not be combined");let I=!0;y[y.length-1]==="#"&&(y.length--,I=!1),w&&(n=a(X=>{let q=X.id;if(!Array.isArray(q))if(q?.indexOf?.("/")>-1)q=q.split("/");else return!1;if(I&&q.length!==y.length)return!1;for(let k=0;k<y.length;k++)if(y[k]!=="+"&&y[k]!==q[k])return!1;return!0},"filter"));let H=y.indexOf("+");m.url="/"+(H>-1?y.slice(0,H):y).concat("").join("/")}}else m.isCollection=!1;let E=p.path,_=p.Resource,R=await bt(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let y=await _.subscribe(m,S);if(!y)return;if(!y[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let w=(async()=>{for await(let I of y)try{let H;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,H=this.needsAcknowledge(I)):(I.acknowledge?.(),H=Zv());let X=I.id;if(Array.isArray(X)&&(X=ld(X)),X==null&&(X=""),await this.listener(E+"/"+X,I.value,H,t)===!1)break;this.awaitingAcks?.size>e6?await new Promise(k=>setTimeout(k,this.awaitingAcks.size-e6)):await new Promise(setImmediate)}catch(H){(0,Wc.warn)(H)}})();return y});if(R)return R.topic=s,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=Zv();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 eM(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();bt(r,async()=>{try{if(!t){let n=await ZE.get(this.sessionId);n?.doesExist()&&await eM(n,n.data,r)}}finally{await ZE.delete(this.sessionId)}}).catch(n=>{(0,Wc.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};a(eM,"publish");tM=class extends ab{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=Zv(),n={topic:t.topic,timestamp:t.localTime};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Wc.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,t6.getNextMonotonicTime)()),(0,Wc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),Xv.put(this.sessionRecord)}}});var rM={};ye(rM,{bypassAuth:()=>rwe,start:()=>swe});function rwe(){d6=!0}function swe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new u6.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);o.events.emit("connection",u),rr.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=a6(u,E=>{u.send(E)},d,Promise.resolve(f).then(()=>d?.user),o);u.on("message",p),u.on("close",h),u.on("error",E=>{rr.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(o.events.emit("connection",u),rr.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let p=u.getPeerCertificate(!0);if(p?.subject){let E=await pf(p,l);if(!E.valid)throw rr.error?.("Certificate verification failed:",E.status,"for",p.subject.CN),new Error("Certificate revoked or verification failed")}let h=l.user;if(h!==null){(h===void 0||h==="Common Name"||h==="CN")&&(h=u.getPeerCertificate().subject.CN);try{d=await e.getUser(h,null,null),(0,am.get)(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&lb.notify?.({username:d?.username,status:oi.SUCCESS,type:Ya.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,am.get)(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&lb.error?.({username:h,status:oi.FAILURE,type:Ya.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else rr.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){o.events.emit("error",p,u),rr.error?.(p)}else if(l.required)return rr.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&nwe(u.remoteAddress)&&(d=await Gp(),rr.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=a6(u,p=>u.write(p),null,d,o);u.on("data",f),u.on("close",m),u.on("error",p=>{rr.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function a6(e,t,r,n,s){o6||(o6=!0,ap(f=>{cb>0&&f.push({metric:"mqtt-connections",connections:cb,byThread:!0})}));let i;cb++;let o,c={protocolVersion:4},l=(0,ub.parser)({protocolVersion:5});function u(f){l.parse(f)}a(u,"onMessage");function d(){cb--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),tn(!1,"connection","mqtt","disconnect"),rr.debug?.("MQTT connection was closed",e.remoteAddress))}return a(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(y){e.close?.(1008,"Unauthorized"),rr.info?.(y);return}let m=f.cmd;if(o)o.then&&await o;else if(m!=="connect"){rr.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let p=f.topic,h=p?.indexOf("/",1),E=h>0?p.slice(0,h):p;We(f.length,"bytes-received",E,R(f),"mqtt");try{switch(o?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Ue.getUser(f.username,f.password.toString(),r),(0,am.get)(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&lb.notify?.({username:n?.username,status:oi.SUCCESS,type:Ya.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(z){return(0,am.get)(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&lb.error?.({username:f.username,status:oi.FAILURE,type:Ya.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,z),tn(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),tn(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let z=e.deserialize||(e.deserialize=$o(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?z(f.will.payload):void 0,delete f.will.payload}o=s6({user:n,...f}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(z){return rr.error?.(z),s.events.emit("auth-failed",f,e,z),tn(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:z.code||5,returnCode:z.code||128})}s.events.emit("connected",o,e),tn(!0,"connection","mqtt","connect"),_({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0});let y=a(async(z,Y,ce,de)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",z);let te=z.indexOf("/",1),Se=te>0?z.slice(0,te):z;_({cmd:"publish",topic:z,payload:await S(Y),messageId:ce||Math.floor(Math.random()*1e8),qos:de.qos},Se);let Ne=e._socket??e;return Ne.writableNeedDrain?new Promise(Ke=>Ne.once("drain",Ke)):!Ne.closed}catch(te){return rr.error?.(te),o?.disconnect(),s.sessions.delete(o),!1}},"listener");o.setListener(y),o.sessionWasPresent&&await o.resume();break;case"subscribe":let w=[];for(let z of f.subscriptions){let Y;try{let ce=await o.addSubscription(z,z.qos>=1);Y=ce?ce.qos||0:c.protocolVersion<5?128:143}catch(ce){s.events.emit("error",ce,e,z,o),ce.statusCode?ce.statusCode===500?rr.warn?.(ce):rr.info?.(ce):rr.error?.(ce),Y=c.protocolVersion<5?128:ce.statusCode===403?135:ce.statusCode===404?143:128}w.push(Y)}await o.committed,_({cmd:"suback",granted:w,messageId:f.messageId});break;case"unsubscribe":{let z=[];for(let Y of f.unsubscriptions)z.push(o.removeSubscription(Y)?0:17);_({cmd:"unsuback",granted:z,messageId:f.messageId});break}case"pubrel":_({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let I=f.qos===2?"pubrec":"puback",H=e.deserialize||(e.deserialize=$o(r?.headers.get?.("content-type"))),q=(f.payload?.length||0)>0?H(f.payload):void 0,k;try{k=await o.publish(f,q)}catch(z){s.events.emit("error",z,e,f,o),rr.warn?.(z),f.qos>0&&_({cmd:I,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&_({cmd:I,messageId:f.messageId,reasonCode:k===!1?144:0},f.topic);break;case"pubrec":_({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(f.messageId);break;case"pingreq":_({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),tn(!0,"connection","mqtt","disconnect"),rr.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(y){s.events.emit("error",y,e,f,o),rr.error?.(y),_({cmd:"disconnect"})}function _(y,w){let I=(0,ub.generate)(y,c);t(I),We(I.length,"bytes-sent",w,R(y),"mqtt")}a(_,"sendPacket");function R(y){return y.qos>0?y.cmd+",qos="+y.qos:y.cmd}a(R,"packetMethodName");function S(y){return qo(y,r)}a(S,"serialize")}),l.on("error",f=>{rr.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var ub,am,c6,l6,u6,lb,rr,d6,nwe,o6,cb,f6=se(()=>{ub=require("mqtt-packet");i6();hs();Vo();os();Hr();am=b(fe());G();c6=b(ir()),l6=b(Q()),u6=require("events");YT();lb=(0,c6.loggerWithTag)("auth-event"),rr=(0,l6.forComponent)("mqtt"),d6=(0,am.get)(x.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(rwe,"bypassAuth");nwe=a(e=>d6&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");a(swe,"start");cb=0;a(a6,"onSocket")});function db(e,t){if(t?.includes(".."))throw new nM(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var nM,sM=se(()=>{nM=class extends Error{static{a(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};a(db,"resolveBaseURLPath")});function m6(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(o=>o[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var p6=se(()=>{a(m6,"deriveCommonPatternBase")});function fb(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=a((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var iM=se(()=>{a(fb,"deriveGlobOptions")});var h6,oM,e_,E6=se(()=>{sM();p6();iM();h6=require("micromatch"),oM=class extends Error{static{a(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},e_=class{static{a(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=db(this.name,this.config.urlPath),this.globOptions=fb(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new oM(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,h6.scan)(s).base),this.commonPatternBase=m6(this.patternBases)}}});function _6(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function Pu(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(_6(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(_6(n,t)){t=t.slice(n.length+1);break}}}return(0,g6.join)(e.baseURLPath,t)}var g6,aM=se(()=>{g6=require("node:path");a(_6,"pathStartsWithBase");a(Pu,"deriveURLPath")});function S6(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var pb,T6,y6,cM,R6,b6,mb,A6=se(()=>{pb=require("node:events");E6();T6=b(Q()),y6=b(require("chokidar")),cM=require("node:path"),R6=require("node:fs/promises");aM();b6=require("micromatch"),mb=class extends pb.EventEmitter{static{a(this,"EntryHandler")}#e;#t;#n;#r;#s;ready;constructor(t,r,n,s){super(),this.#e=new e_(t,r,S6(n)),this.#n=s||T6.default.loggerWithTag(t),this.#r=new Set,this.#s=!1,this.ready=(0,pb.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#i(...[t,r,n]){if(r===""&&(r="/"),!(0,b6.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,cM.join)(this.directory,r);switch(t){case"add":case"change":{let i=Pu(this.#e,r,"file"),o=(0,R6.readFile)(s).then(c=>{let l={eventType:t,entryType:"file",contents:c,stats:n,absolutePath:s,urlPath:i};this.emit("all",l),this.emit(t,l)}).finally(()=>{this.#r.delete(o),this.#c()});this.#r.add(o);break}case"unlink":{let i=Pu(this.#e,r,"file"),o={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",o),this.emit(t,o);break}case"addDir":case"unlinkDir":{let i=Pu(this.#e,r,"directory"),o={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",o),this.emit(t,o);break}}}#o(t){this.emit("error",t)}#u(){this.#s=!0,this.#r.size>0&&this.#n.debug?.(`Initial scan complete, still waiting for ${this.#r.size} pending file reads`),this.#c()}#c(){this.#s&&this.#r.size===0&&this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,cM.join)(this.#e.directory,r));return this.#t=y6.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:a(r=>{let n=r.replace(/\\/g,"/"),s=t.map(i=>i.replace(/\\/g,"/"));return n!==this.#e.directory.replace(/\\/g,"/")&&s.every(i=>!n.startsWith(i))},"ignored")}).on("all",this.#i.bind(this)).on("error",this.#o.bind(this)).on("ready",this.#u.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new e_(this.name,this.directory,S6(t)),this.#a()}};a(S6,"castConfig")});var hb,lM=se(()=>{hb={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var _b,I6,w6,N6,C6,O6,uM,dM,fM,mM,pM,Eb,P6=se(()=>{_b=require("events"),I6=b(require("yaml")),w6=b(require("chokidar")),N6=require("node:fs/promises"),C6=require("util"),O6=b(Q());lM();uM=class extends Error{static{a(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},dM=class extends Error{static{a(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},fM=class extends Error{static{a(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},mM=class extends Error{static{a(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},pM=class extends Error{static{a(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},Eb=class extends _b.EventEmitter{static{a(this,"OptionsWatcher")}#e;#t;#n;#r;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||O6.default.loggerWithTag(t),this.ready=(0,_b.once)(this,"ready"),this.#t=w6.default.watch(r,{persistent:!1}).on("add",this.#o.bind(this)).on("change",this.#o.bind(this)).on("error",this.#u.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#o.bind(this))}#o(){(0,N6.readFile)(this.#e,"utf-8").then(t=>{this.#r=I6.default.parse(t),this.#r&&this.#s in this.#r?this.#n?this.#l(this.#r[this.#s],this.#n):(this.#n=this.#r[this.#s],this.emit("ready",this.#n)):this.#n&&(this.#n=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#r?(this.#a(),this.emit("remove")):(this.#a(),this.emit("ready"));return}this.emit("error",t)})}#u(t){this.emit("error",new uM(this.#e,t))}#c(t){this.#i.warn(`Configuration file ${t} was deleted. Reverting to default configuration. Recreate it to restore the options watcher.`),this.#a(),this.emit("remove")}#a(){this.#r=hb,this.#n=this.#r[this.#s]}#l(t,r,n=[]){if(!this.#d(r)||!this.#d(t)){this.#m(n,t);return}for(let s of Object.keys(r))s in t||this.#m(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let o=n.concat(s),c=this.#f(o);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#m(o,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#d(c)?this.#l(i,c,o):this.#m(o,i);continue}(0,C6.isDeepStrictEqual)(i,c)||this.#m(o,i)}}#d(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#f(t){let r=this.#n;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#m(t,r){if(!this.#n)throw new dM;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new fM(t,r);let n=this.#n;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new mM(t,s);n=n[s]}if(n==null||typeof n!="object")throw new pM(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#n)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#n?this.#f(t):void 0}getAll(){return structuredClone(this.#n)}getRoot(){return this.#r}}});var t_,L6,gb,Sb,D6=se(()=>{t_=require("node:events");A6();P6();L6=b(Q());MD();gb=class extends Error{static{a(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},Sb=class extends t_.EventEmitter{static{a(this,"Scope")}#e;#t;#n;#r;#s;#i;#o;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#n=t,this.#t=r,this.#e=n,this.#i=(0,L6.loggerWithTag)(this.#n),this.resources=s,this.server=i,this.#s=[],this.#o=new Set,this.ready=(0,t_.once)(this,"ready"),this.options=new Eb(t,n,this.#i).on("error",this.#c.bind(this)).on("change",this.#d.bind(this)()).on("ready",this.#u.bind(this))}get logger(){return this.#i}get name(){return this.#n}get directory(){return this.#t}get configFilePath(){return this.#e}#u(){this.emit("ready")}#c(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#a(t){let r=new mb(this.#n,this.#t,t,this.#i).on("error",this.#c.bind(this)).on("add",this.#l("add")).on("change",this.#l("change")).on("unlink",this.#l("unlink")).on("addDir",this.#l("addDir")).on("unlinkDir",this.#l("unlinkDir"));return this.#s.push(r),r}#l(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#d(){let t=this;return a(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#r){t.#r=t.#a(i);return}t.#r.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#f(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return{files:t.files,urlPath:t.urlPath}}handleEntry(t,r){let n,s=a((i,o)=>{let c=new Set,l=a(d=>{let f=o(d);if(f instanceof Promise){let m=f.catch(p=>{throw this.#i.error?.("Error in async entry handler:",p),this.#c(p),p}).finally(()=>c.delete(m));c.add(m)}},"wrapped"),u=(0,t_.once)(i,"ready").then(async()=>{c.size>0&&await Promise.all(c),i.emit("initialLoadComplete")});return this.#o.add(u),u.finally(()=>this.#o.delete(u)),l},"wrapHandler");if(t===void 0)if(this.#r)n=this.#r;else{let i=this.#f();if(i)this.#r=this.#a(i),n=this.#r;else{this.emit("error",new gb);return}}else if(typeof t=="function"){if(this.#r)n=this.#r;else{let o=this.#f();if(o)this.#r=this.#a(o),n=this.#r;else{this.emit("error",new gb);return}}let i=s(n,t);n.on("all",i)}else if(n=this.#a(t),r){let i=s(n,r);n.on("all",i)}return n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),j2()}async waitForInitialLoads(){this.#o.size>0&&await Promise.all(this.#o)}}});function Lu(e){return typeof e=="string"&&e.trim()!==""}function hM(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>Lu(t))}function x6(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function iwe(e){e.config.root&&r_.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 RM(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(x6(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let o=(0,n_.join)(e.directory,i);Tb.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,o,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,o,e.resources))}return s}async function B6(e){let t=!1;if(t=await iwe(e),t)return t;let r=await(0,v6.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,n_.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=Pu(e,n.path,"directory");Tb.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=Pu(e,n.path,"file"),o=await(0,M6.readFile)(s);Tb.isMainThread&&e.module.setupFile?(await e.module.setupFile(o,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(o,i,s,e.resources),t=!0)}else r_.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var Tb,v6,r_,n_,M6,U6,yb,Fi,EM,_M,gM,SM,TM,yM,RM,bM,AM,F6=se(()=>{Tb=require("node:worker_threads"),v6=b(require("fast-glob")),r_=b(Q());sM();iM();n_=require("node:path"),M6=require("node:fs/promises");aM();U6=require("micromatch"),yb=class{static{a(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!Lu(this.config.files)&&!hM(this.config.files)&&!x6(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||!hM(this.config.files.source)&&!Lu(this.config.files.source))throw new _M(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new gM(this);if(this.config.files.ignore!==void 0&&!hM(this.config.files.ignore)&&!Lu(this.config.files.ignore))throw new SM(this)}if(this.config.root!==void 0&&!Lu(this.config.root))throw new yM(this);if(this.config.path!==void 0&&!Lu(this.config.path))throw new bM(this);if(this.config.path&&(r_.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!Lu(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new AM(this);this.globOptions=fb(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new TM(this,r);return r.startsWith("/")&&(r_.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,U6.scan)(r).base),this.baseURLPath=db(this.name,this.config.urlPath)}},Fi=class extends Error{static{a(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,n_.basename)(r.directory)}) ${t}`)}},EM=class extends Fi{static{a(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},_M=class extends Fi{static{a(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},gM=class extends Fi{static{a(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},SM=class extends Fi{static{a(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},TM=class extends Fi{static{a(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},yM=class extends Fi{static{a(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},RM=class extends Fi{static{a(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},bM=class extends Fi{static{a(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},AM=class extends Fi{static{a(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};a(Lu,"isNonEmptyString");a(hM,"isArrayOfNonEmptyStrings");a(x6,"isObject");a(iwe,"handleRoots");a(B6,"processResourceExtensionComponent")});var iR={};ye(iR,{getComponentName:()=>rR,loadComponent:()=>Ib,loadComponentDirectories:()=>q6,setErrorReporter:()=>awe});function q6(e,t){t&&(wM=t),e&&(PM=e);let r=[];if((0,jt.existsSync)(IM)){let s=(0,jt.readdirSync)(IM,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Wr.join)(IM,o);r.push(Ib(c,wM,Qb,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Ib(n,wM,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{G6=!0})}function awe(e){bb=e}function cwe(e){return new Promise((t,r)=>{let n=setTimeout(()=>{Da.primaryStore.unlock(e,0),r(new Error("symlinking harperdb module timed out"))},1e4);if(Da.primaryStore.attemptLock(e,0,()=>{clearTimeout(n),t()}))try{let s=(0,Wr.join)(e,"node_modules");(0,jt.existsSync)(s)||(0,jt.mkdirSync)(s);let i=(0,Wr.join)(s,"harperdb");if((0,jt.existsSync)(i)){if((0,jt.realpathSync)(i)===(0,jt.realpathSync)(OM.PACKAGE_ROOT))return t();(0,jt.rmSync)(i,{recursive:!0,force:!0})}(0,jt.symlinkSync)(OM.PACKAGE_ROOT,i,"dir"),t()}finally{Da.primaryStore.unlock(e,0)}})}function $6(e,t){return e.ready.then(()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.name}. Expected a number, received: ${typeof r}`);let n,s;if(!Da.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n($6(e,t))}))return new Promise((o,c)=>{n=o,s=setTimeout(()=>{c(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)});let i;return Promise.race([Promise.resolve(t.handleApplication(e)).then(async()=>{await e.waitForInitialLoads()}),new Promise((o,c)=>i=setTimeout(()=>c(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{Da.primaryStore.unlock(e.name,0),clearTimeout(i)})})}async function Ib(e,t,r,n,s,i){let o=(0,jt.realpathSync)(e);if(Rb.has(o))return Rb.get(o);Rb.set(o,!0),s&&(PM=s);try{let c,l=(0,Wr.join)(e,"harperdb-config.yaml");if((0,jt.existsSync)(l)?c=n?(0,wb.getConfigObj)():(0,CM.parseDocument)((0,jt.readFileSync)(l,"utf8")).toJSON():!n&&(0,jt.existsSync)(l=(0,Wr.join)(e,"config.yaml"))?c=(0,CM.parseDocument)((0,jt.readFileSync)(l,"utf8")).toJSON():c=hb,!n)try{await cwe(e)}catch(m){Fa.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&Fa.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=Ab,d={};for(let m in c){let p=n?m:`${(0,Wr.basename)(e)}.${m}`;Ab=m;let h=c[m];if(!h)continue;lo.loading(p);let E,_=h.package;try{if(_){let I=null;if(n)I=(0,Wr.join)(e,"components",m);else{let H=e;for(I=(0,Wr.join)(H,"node_modules",m);!(0,jt.existsSync)(I);){if(H=(0,Wr.dirname)(H),H.length<(0,H6.getHdbBasePath)().length){I=null;break}I=(0,Wr.join)(H,"node_modules",m)}}if(I)E=await Ib(I,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${_}`)}else E=owe[m];if(!E){lo.loaded(p,`Application component '${p}' processed`);continue}let R=a(I=>(I.origin=r,ze(I)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,y=S?.securePort||S?.https&&S.port,w=!S?.https&&S?.port;if("handleApplication"in E&&("start"in E||"startOnMainThread"in E||"handleFile"in E||"handleDirectory"in E||"setupFile"in E||"setupDirectory"in E)){let I=new Error(`Plugin ${m} is exporting old extension APIs. Remove them.`);throw lo.failed(p,I,`Component '${p}' failed to load`),I}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&Fa.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let I=new Sb(m,e,l,t,Ue);await $6(I,E),lo.loaded(p,`Component '${p}' loaded successfully`);continue}if(NM.isMainThread&&(E=await E.startOnMainThread?.({server:Ue,ensureTable:R,port:w,securePort:y,resources:t,...h})||E,n&&S))for(let I of[w,y])try{if(+I&&!k6.includes(I)){let H=LM.get(x.HTTP_SESSIONAFFINITY);H&&Fa.default.warn("Session affinity is not recommended and may cause memory leaks"),(H||!qS)&&(k6.push(I),rD(I,H))}}catch(H){console.error("Error listening on socket",I,H,m)}if(t.isWorker&&(E=await E.start?.({server:Ue,ensureTable:R,port:w,securePort:y,resources:t,...h})||E),PM.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let I=new yb({config:h,name:m,directory:e,module:E,resources:t});d[m]=await B6(I)}lo.loaded(p,`Component '${p}' loaded successfully`)}catch(R){R.message=`Could not load component '${m}' for application '${(0,Wr.basename)(e)}' due to: ${R.message}`,bb?.(R),((0,s_.getWorkerIndex)()===0?console:Fa.default).error(R),t.set(h.path||"/",new bl(R),null,!0),lo.failed(p,R,`Could not load component '${p}'`)}}if(Ab=u,NM.isMainThread&&!G6&&i&&(0,s_.watchDir)(e,async()=>q6()),c.extensionModule||c.pluginModule){let m=await FS((0,Wr.join)(e,c.extensionModule||c.pluginModule));return Rb.set(o,m),m}let f=Object.values(d);if(f.length>0&&f.every(m=>!m)&&t.isWorker){let m=`${e} did not load any modules, resources, or files, is this a valid component?`;bb?.(new Error(m)),((0,s_.getWorkerIndex)()===0?console:Fa.default).error(m),lo.failed((0,Wr.basename)(e),m)}for(let[m,p]of Object.entries(d))p||Fa.default.warn(`Component ${m} from (${(0,Wr.basename)(e)}) did not load any functionality.`)}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,bb?.(c),t.set("",new bl(c))}}var jt,Wr,NM,CM,LM,OM,Fa,s_,H6,wb,IM,PM,G6,wM,owe,k6,Rb,bb,Ab,rR,_E=se(()=>{jt=require("node:fs"),Wr=require("node:path"),NM=require("node:worker_threads"),CM=require("yaml"),LM=b(fe()),OM=b(yt());G();Xq();c$();R$();O$();P$();K$();T3();y3();b3();Fa=b(Q());D3();s_=b(st());lC();Hr();Oe();sD();H6=b(fe());K3();hR();Z3();gs();f6();wb=b(_t());lh();OI();D6();F6();JL();LE();Vp();lM();IM=(0,wb.resolvePath)(LM.get(x.COMPONENTSROOT)),PM=new Map;a(q6,"loadComponentDirectories");owe={REST:VS,rest:VS,graphql:tC,graphqlSchema:ZN,roles:cC,jsResource:uC,fastifyRoutes:Fv,login:fC,static:Hv,operationsApi:Kv,customFunctions:{},http:tR,clustering:Qv,replication:aa,authentication:AE,mqtt:rM,loadEnv:Gv,logging:Fa.default,dataLoader:Vv},k6=[],Rb=new Map;a(awe,"setErrorReporter");rR=a(()=>Ab,"getComponentName");a(cwe,"symlinkHarperModule");a($6,"sequentiallyHandleApplication");a(Ib,"loadComponent")});var oR=M((MVe,V6)=>{var{isMainThread:DM}=require("worker_threads"),{getTables:lwe}=(Oe(),D(mt)),{loadComponentDirectories:uwe,loadComponent:dwe}=(_E(),D(iR)),{resetResources:fwe}=(sc(),D(PI)),mwe=_t(),{dirname:pwe}=require("path"),{getConnection:hwe}=_r(),Ewe=fe(),{CONFIG_PARAMS:_we}=(G(),D(j)),{loadCertificates:gwe}=Ts(),{installApplications:Swe}=(bR(),D(RR)),{loadAndWatchLicensesDir:Twe}=(fE(),D(zy)),vM=new Map;async function ywe(e=!1){!DM&&Ewe.get(_we.CLUSTERING_ENABLED)&&hwe();try{DM&&await Swe()}catch(n){console.error(n)}let t=fwe();lwe(),t.isWorker=e,DM&&Twe(),await gwe(),await dwe(pwe(mwe.getConfigFilePath()),t,"hdb",!0,vM),await uwe(vM,t);let r=[];for(let[n]of vM)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(ywe,"loadRootComponents");V6.exports.loadRootComponents=ywe});var st=M((xVe,Hi)=>{"use strict";yA();var{Worker:Rwe,MessageChannel:bwe,parentPort:Do,isMainThread:FM,threadId:Awe,workerData:vo}=require("worker_threads"),{PACKAGE_ROOT:Iwe}=yt(),{join:j6,isAbsolute:wwe,extname:Nwe}=require("path"),{server:z6}=(Hr(),D(bm)),{watch:Cwe,readdir:Owe}=require("fs/promises"),{totalmem:K6}=require("os"),{setHeapSnapshotNearHeapLimit:Pwe}=require("v8"),jc=(G(),D(j)),Ob=fe(),ki=Q(),{randomBytes:Lwe}=require("crypto"),{_assignPackageExport:Dwe}=ai(),Y6=1024*1024,ka=[],ni=[],vwe=50,kM=1e4,Mwe="restart",J6="request_thread_info",Q6="resource_report",X6="thread_info",Z6="added-port",Uwe="ack",MM;Dwe("threads",ni);Hi.exports={startWorker:UM,restartWorkers:GM,shutdownWorkers:iX,shutdownWorkersNow:Hwe,workers:ka,setMonitorListener:jwe,onMessageFromWorkers:Gwe,onMessageByType:aX,broadcast:$we,broadcastWithAcknowledgement:Kwe,setChildListenerByType:kwe,getWorkerIndex:eX,getWorkerCount:tX,getTicketKeys:nX,setMainIsWorker:Bwe,setTerminateTimeout:xwe,restartNumber:vo?.restartNumber||1};ni.onMessageByType=aX;ni.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=ni.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Hi.exports.whenThreadsStarted=new Promise(e=>{Hi.exports.threadsHaveStarted=e});Ob.get(jc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&Pwe(1);var HM;function xwe(e){kM=e}a(xwe,"setTerminateTimeout");function eX(){return vo?vo.workerIndex:HM?0:void 0}a(eX,"getWorkerIndex");function tX(){return vo?vo.workerCount:HM?1:void 0}a(tX,"getWorkerCount");function Bwe(e){HM=e,Hi.exports.threadsHaveStarted()}a(Bwe,"setMainIsWorker");var rX=1,Nb;function nX(){return Nb||(Nb=FM?Lwe(48):vo.ticketKeys,Nb)}a(nX,"getTicketKeys");Object.defineProperty(z6,"workerIndex",{get(){return eX()}});Object.defineProperty(z6,"workerCount",{get(){return tX()}});var sX={[J6](e,t){Ywe(t)},[Q6](e,t){Wwe(t,e)}};function UM(e,t={}){let r=process.constrainedMemory?.()||K6();r=Math.min(r,K6(),2e4*Y6);let n=Ob.get(jc.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/Y6/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let u of ni){let d=new bwe;d.existingPort=u,i.push(d),o.push(d.port2)}Nwe(e)||(e+=".js");let c=["--enable-source-maps","--expose-internals"];Ob.get(jc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&c.push("--heapsnapshot-near-heap-limit=1");let l=new Rwe(wwe(e)?e:j6(Iwe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:c,argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:rX=t.threadCount,name:t.name,restartNumber:Hi.exports.restartNumber,ticketKeys:nX()},transferList:o,...t});for(let{port1:u,existingPort:d}of i)d.postMessage({type:Z6,port:u,threadId:l.threadId},[u]);return Pb(l,!0),l.unexpectedRestarts=t.unexpectedRestarts||0,l.startCopy=()=>UM(e,t),l.on("error",u=>{ki.error(`Worker index ${t.workerIndex} error:`,u)}),l.on("exit",u=>{ka.splice(ka.indexOf(l),1),!l.wasShutdown&&t.autoRestart!==!1&&(l.unexpectedRestarts<vwe?(t.unexpectedRestarts=l.unexpectedRestarts+1,UM(e,t)):ki.error(`Thread has been restarted ${l.restarts} times and will not be restarted`))}),l.on("message",u=>{sX[u.type]?.(u,l)}),ka.push(l),Jwe(),t.onStarted&&t.onStarted(l),l.name=t.name,l}a(UM,"startWorker");var Fwe=[jc.THREAD_TYPES.HTTP];async function GM(e=null,t=Math.max(rX>3,1),r=!0){if(FM){try{process.chdir(process.cwd())}catch(o){ki.error("Unable to reestablish current working directory",o)}if(r){let{loadRootComponents:o}=oR();await o()}Hi.exports.restartNumber++,t<1&&(t=t*ka.length);let n=[],s=[];for(let o of ka.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;ki.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Hi.exports.restartNumber,type:jc.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Fwe.indexOf(o.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{ki.warn("Thread did not voluntarily terminate, terminating from the outside",o.threadId),o.terminate()},kM*2).unref();o.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),u()})});if(n.push(l),c&&r){let u=o.startCopy(),d=new Promise(f=>{let m=a(p=>{p.type===jc.ITC_EVENT_TYPES.CHILD_STARTED&&(ki.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");ki.trace("Waiting for worker to start",u.threadId),u.on("message",m)});s.push(d),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=jf();r&&(e==="http"||!e)&&Ob.get(jc.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Do.postMessage({type:Mwe,workerType:e})}a(GM,"restartWorkers");function kwe(e,t){sX[e]=t}a(kwe,"setChildListenerByType");function iX(e){return GM(e,1/0,!1)}a(iX,"shutdownWorkers");function Hwe(e){return iX(e),Promise.all(ka.map(t=>t.terminate()))}a(Hwe,"shutdownWorkersNow");var oX=[];function Gwe(e){oX.push(e)}a(Gwe,"onMessageFromWorkers");var xM=new Map;function aX(e,t){let r=xM.get(e);r||xM.set(e,r=[]),r.push(t)}a(aX,"onMessageByType");var qwe=10;async function $we(e,t){let r=0;for(let n of ni)try{n.postMessage(e),r++>qwe&&(r=0,await new Promise(setImmediate))}catch(s){ki.error("Unable to send message to worker",s)}t&&lX(e,null)}a($we,"broadcast");var Cb=new Map,Vwe=1;function Kwe(e){return new Promise(t=>{let r=0;for(let n of ni)try{let s=Vwe++,i=a(()=>{Cb.delete(s),--r===0&&t(),n!==Do&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Cb.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of Cb)o.port===n&&o()})),n.postMessage(e),r++}catch(s){ki.error("Unable to send message to worker",s)}r===0&&t()})}a(Kwe,"broadcastWithAcknowledgement");function Ywe(e){e.postMessage({type:X6,workers:cX()})}a(Ywe,"sendThreadInfo");function cX(){let e=Date.now();return ka.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(cX,"getChildWorkerInfo");function Wwe(e,t){e.resources=t,e.resources.updated=Date.now()}a(Wwe,"recordResourceReport");var BM;function jwe(e){BM=e}a(jwe,"setMonitorListener");var zwe=1e3,W6=!1;function Jwe(){W6||(W6=!0,setInterval(()=>{for(let e of ka){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}BM&&BM()},zwe).unref())}a(Jwe,"startMonitoring");var Qwe=1e3;if(Do&&vo?.addPorts){Pb(Do);for(let e=0,t=vo.addPorts.length;e<t;e++){let r=vo.addPorts[e];r.threadId=vo.addThreadIds[e],Pb(r)}setInterval(()=>{let e=process.memoryUsage();Do.postMessage({type:Q6,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Qwe).unref(),MM=a(()=>new Promise((e,t)=>{Do.on("message",r),Do.postMessage({type:J6});function r(n){n.type===X6&&(Do.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else MM=cX;Hi.exports.getThreadInfo=MM;function Pb(e,t){ni.push(e),e.on("message",r=>{if(r.type===Z6)r.port.threadId=r.threadId,Pb(r.port);else if(r.type===Uwe){let n=Cb.get(r.id);n&&n()}else lX(r,e)}).on("close",()=>{ni.splice(ni.indexOf(e),1)}).on("exit",()=>{ni.splice(ni.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Pb,"addPort");function lX(e,t){for(let n of oX)n(e,t);let r=xM.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){ki.error(s)}}a(lX,"notifyMessageListeners");if(FM){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await Owe(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(j6(s,o.name));try{for await(let{filename:o}of Cwe(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await GM(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(o){console.warn("Error trying to watch component directory",s,o)}},"watchDir");Hi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else Do.on("message",async e=>{let{type:t}=e;t===jc.ITC_EVENT_TYPES.SHUTDOWN&&(Hi.exports.restartNumber=e.restartNumber,Do.unref(),setTimeout(()=>{ki.warn("Thread did not voluntarily terminate",Awe),process.exit(0)},kM).unref())})});var hX=M((HVe,pX)=>{"use strict";var{promises:cm,createReadStream:Xwe,createWriteStream:Zwe}=require("fs"),{createGzip:eNe}=require("zlib"),{promisify:tNe}=require("util"),{pipeline:rNe}=require("stream"),nNe=tNe(rNe),$M=require("path"),mX=fe();mX.initSync();var Lb=Q(),{CONFIG_PARAMS:sNe,ITC_EVENT_TYPES:FVe}=(G(),D(j)),{onMessageFromWorkers:kVe}=st(),{convertToMS:uX}=ae(),{onStorageReclamation:iNe}=(lg(),D(_0)),oNe=6e4,aNe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",cNe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",qM,dX;pX.exports=lNe;function lNe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:o}){if(s===!1)return;let c=0;if(iNe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(aNe);if(!i)throw new Error(cNe);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=uX(r));let d;return qM=Date.now(),Lb.trace("Log rotate enabled, maxSize:",t,"interval:",r),dX=setInterval(async()=>{if(l){let f;f=await cm.stat(e.path),f.size>=l&&(d=await fX(e.path,i))}if(u&&Date.now()-qM>=u&&(d=await fX(e.path,i),qM=Date.now()),n||c){let f=uX(n??"1M")/(1+c);c=0;let m=await cm.readdir(i);for(let p of m)try{let h=await cm.stat($M.join(i,p));Date.now()-h.mtimeMs>f&&await cm.unlink($M.join(i,p))}catch(h){Lb.error("Error trying to remove log",p,h)}}},o??oNe).unref(),{end(){clearInterval(dX)},getLastRotatedLogPath(){return d}}}a(lNe,"logRotator");async function fX(e,t){let r=mX.get(sNe.LOGGING_ROTATION_COMPRESS),n=$M.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await cm.rename(e,n),r&&(e=n,n+=".gz",await nNe(Xwe(e),eNe(),Zwe(n)),await cm.unlink(e)),Lb.closeLogFile(),Lb.notify(`hdb.log rotated, old log moved to ${n}`),n}a(fX,"moveLogFile")});var TX={};ye(TX,{RootConfigWatcher:()=>VM});var EX,_X,gX,Db,SX,VM,yX=se(()=>{EX=b(require("chokidar")),_X=require("node:fs/promises"),gX=b(_t()),Db=require("node:stream"),SX=require("yaml"),VM=class extends Db.EventEmitter{static{a(this,"RootConfigWatcher")}#e;#t;#n;ready;constructor(){super(),this.#e=(0,gX.getConfigFilePath)(),this.ready=(0,Db.once)(this,"ready"),this.#t=EX.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,_X.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,SX.parse)(t);if(!this.#n){this.#n=r,this.emit("ready",this.#n);return}this.emit("change",this.#n=r)}).catch(t=>{})}close(){return this.#t.close(),this.#n=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#n}}});var Q=M((KVe,Hb)=>{"use strict";var Ha=require("fs-extra"),{workerData:uNe,threadId:dNe,isMainThread:NX}=require("worker_threads"),a_=require("path"),CX=require("yaml"),OX=require("properties-reader"),jr=(G(),D(j)),RX=rl(),fNe=require("os"),{PACKAGE_ROOT:XM}=yt(),{_assignPackageExport:mNe}=ai(),{Console:pNe}=require("console"),YM=process.env.IS_SCRIPTED_SERVICE?function(){}:process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),bX=new Map,{join:Ga}=a_,AX=1e4,fr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},hNe={STDOUT:"stdOut",STDERR:"stdErr"},VVe=Ga(XM,"logs"),ENe=Ga(XM,"config/yaml/",jr.HDB_DEFAULT_CONFIG_FILE),_Ne=1e4,c_,l_,vb,PX,Mo,WM,KM,Ub,xt,Zn,xb,Bb,lm,o_,i_;function Mb(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=a_.dirname(n)):t.root?n=Ga(t.root,WM):(n=xt.path,t.root||(t.root=a_.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=fr[t.level]??xt?.level??fr.info,LX(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(xt.path===e.path&&r)}a(Mb,"updateLogger");function LX(e){let t=e.conditional??(e.conditional={});t.notify=fr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=fr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=fr.error>=e.level?e.error.bind(e):void 0,t.warn=fr.warn>=e.level?e.warn.bind(e):void 0,t.info=fr.info>=e.level?e.info.bind(e):void 0,t.debug=fr.debug>=e.level?e.debug.bind(e):void 0,t.trace=fr.trace>=e.level?e.trace.bind(e):void 0}a(LX,"updateConditional");async function jM(){i_||(i_=new BNe,await i_.ready,i_.on("change",jM));let e=i_.config,t=e.logging??{};Mb(xt,t),Ub=xt.path,c_=t.console??!1,t.external&&Mb(Zn,t.external);for(let r in e){let n=e[r];n.logging?Mb(xt.forComponent(r),n.logging,r):xt.hasComponent(r)&&Mb(xt.forComponent(r),t,r)}}a(jM,"updateLogSettings");var zM=class extends pNe{static{a(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){Ln="trace",this.level<=fr.trace&&super.info(...t),Ln="info"}debug(...t){Ln="debug",this.level<=fr.debug&&super.info(...t),Ln="info"}info(...t){Ln="info",this.level<=fr.info&&super.info(...t),Ln="info"}warn(...t){Ln="warn",this.level<=fr.warn&&super.warn(...t),Ln="info"}error(...t){Ln="error",this.level<=fr.error&&super.error(...t),Ln="info"}fatal(...t){lm=!0;try{Ln="fatal",this.level<=fr.fatal&&super.error(...t),Ln="info"}finally{lm=!1}}notify(...t){lm=!0;try{Ln="notify",this.level<=fr.notify&&super.info(...t),Ln="info"}finally{lm=!1}}withTag(t){return vX(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};o_===void 0&&DX();Hb.exports={notify:wNe,fatal:NNe,error:QM,warn:CNe,info:bNe,debug:INe,trace:ANe,logLevel:Mo,loggerWithTag:vX,suppressLogging:yNe,initLogSettings:DX,logCustomLevel:ONe,closeLogFile:MX,createLogger:kb,logsAtLevel:SNe,getLogFilePath:a(()=>Ub,"getLogFilePath"),forComponent:a(e=>xt.forComponent(e),"forComponent"),setMainLogger:UNe,setLogLevel:LNe,OUTPUTS:hNe,AuthAuditLog:xNe,start:jM,startOnMainThread:jM,errorToString:MNe,disableStdio:gNe};function gNe(){YM=a(function(){},"nativeStdWrite")}a(gNe,"disableStdio");Hb.exports.externalLogger={notify(...e){Zn.notify(...e)},fatal(...e){Zn.fatal(...e)},error(...e){Zn.error(...e)},warn(...e){Zn.warn(...e)},info(...e){Zn.info(...e)},debug(...e){Zn.debug(...e)},trace(...e){Zn.trace(...e)},withTag(e){return Zn.withTag(e)},loggerWithTag(e){return Zn.withTag(e)}};mNe("logger",Hb.exports.externalLogger);function SNe(e){return fr[Mo]<=fr[e]}a(SNe,"logsAtLevel");function DX(e=!1){try{if(o_===void 0||e){MX();let t=PNe(),r=RX(["ROOTPATH"]);try{o_=OX(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Ha.pathExistsSync(Ga(r.ROOTPATH,jr.HDB_CONFIG_FILE)))throw s}let n;if({level:Mo,configLogPath:KM,toFile:l_,logConsole:c_,colorMode:PX,rotation:n,toStream:vb}=DNe(r.ROOTPATH?Ga(r.ROOTPATH,jr.HDB_CONFIG_FILE):o_.get("settings_path")),WM=jr.LOG_NAMES.HDB,Ub=Ga(KM,WM),xt=kb({path:Ub,level:Mo,stdStreams:vb,rotation:n}),Zn=xt.forComponent("external"),Zn.tag=null,NX)try{require("segfault-handler").registerHandler(Ga(KM,"crash.log"))}catch{}}}catch(t){if(o_=void 0,t.code===jr.NODE_ERROR_CODES.ENOENT||t.code===jr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=RX(Object.keys(jr.CONFIG_PARAM_MAP),!0);for(let s in r){let i=jr.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let o=r[s];if(i===jr.CONFIG_PARAMS.LOGGING_LEVEL){Mo=o;continue}i===jr.CONFIG_PARAMS.LOGGING_CONSOLE&&(c_=i)}let{defaultLevel:n}=vNe();l_=!1,vb=!0,Mo=Mo===void 0?n:Mo,xt=kb({level:Mo}),Zn=xt.forComponent("external"),Zn.tag=null;return}throw QM("Error initializing log settings"),QM(t),t}process.env.DEV_MODE&&(vb=!0),TNe()}a(DX,"initLogSettings");var zc=!0;function TNe(){l_&&(process.stdout.write=function(e){return typeof e=="string"&&zc&&c_&&(e=e.toString(),e[e.length-1]===`
|
|
132
|
+
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(oRe,"parseNPMStdErr");function aRe(e){let t=CR.object({projects:CR.array().min(1).items(CR.string()).required(),dry_run:CR.boolean().default(!1)});return tRe.validateBySchema(e,t)}a(aRe,"modulesValidator")});var PD={};ye(PD,{describeMetric:()=>$2,describeMetricOp:()=>OD,get:()=>G2,getOp:()=>ND,listMetrics:()=>q2,listMetricsOp:()=>CD});async function lRe(e){return(await Eg().get(e)).hostname}function F2(e,t){return e.length===0||e.includes(t)}function ND(e){return CE.trace?.("get_analytics request:",e),G2(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function H2(e){return"conditions"in e?{...e,conditions:e.conditions.map(H2)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function G2(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(H2));let o=t??[];F2(o,"id")||o.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i,allowConditionsOnDynamicAttributes:!0};return o.length>0&&(c.select=o),CE.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],F2(o,"node")&&(CE.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await lRe(d)),CE.trace?.("get_analytics result:",JSON.stringify(u)),u})}function CD(e){return q2(e.metric_types)}async function q2(e=["builtin"]){let t=[],r=Object.values(jo);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,o=await databases.system.hdb_analytics.search(s);for await(let c of o)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function OD(e){return $2(e.metric)}async function $2(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let o in s)n.push({name:o,type:typeof s[o]});let i={attributes:n};return CE.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var k2,cRe,CE,LD=se(()=>{k2=b(Q());oI();aI();({forComponent:cRe}=k2.default),CE=cRe("analytics").conditional;a(lRe,"lookupHostname");a(F2,"isSelected");a(ND,"getOp");a(H2,"conformCondition");a(G2,"get");a(CD,"listMetricsOp");a(q2,"listMetrics");a(OD,"describeMetricOp");a($2,"describeMetric")});var OR,PR,OE,LR=se(()=>{OR={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},PR=Object.keys(OR),OE="primary"});function K2(e){return V2.validateBySchema(e,mRe)}var PE,V2,uRe,dRe,fRe,mRe,Y2=se(()=>{PE=b(require("joi")),V2=b(ft());LR();uRe=PR,dRe=Object.entries(OR).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),fRe=a(()=>{let e=PE.default.string().min(1).max(512);return Object.entries(OR).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:PE.default.string().valid(...r.allowedValues).messages({"any.only":dRe[t]})}))}),e.required()},"createStatusValidationSchema"),mRe=PE.default.object({id:PE.default.string().valid(...uRe).required(),status:fRe()});a(K2,"validateStatus")});function W2(){DD||(DD=Da.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),vD=new Uint8Array(DD))}function j2(){W2(),vD[0]=1}function z2(){return W2(),vD[0]===1}var DD,vD,MD=se(()=>{LE();a(W2,"ensureInitialized");a(j2,"requestRestart");a(z2,"restartNeeded")});var kD={};ye(kD,{DEFAULT_STATUS_ID:()=>OE,STATUS_IDS:()=>PR,Status:()=>Da,clear:()=>xD,get:()=>BD,set:()=>FD});function vE(){return UD||(UD=ze({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),UD}function xD({id:e}){return DE.debug?.("clearStatus",e),vE().delete(e)}async function hRe(){DE.debug?.("getAllStatus");let e=vE().get({}),t=await $p.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=z2();return{systemStatus:e,componentStatus:r,restartRequired:n}}function BD({id:e}){return e?(DE.debug?.("getStatus",e),vE().get(e)):(DE.debug?.("getStatus","all"),hRe())}function FD({status:e,id:t=OE}){let r=K2({status:e,id:t});if(r)throw(0,DR.handleHDBError)(r,r.message,pRe.BAD_REQUEST);return DE.debug?.("setStatus",t,e),vE().put(t,{status:e})}var DR,J2,pRe,UD,Da,DE,LE=se(()=>{Oe();DR=b(Ee()),J2=b(ir());Y2();LR();Vp();MD();LR();({HTTP_STATUS_CODES:pRe}=DR.hdbErrors);a(vE,"getStatusTable");Da={get primaryStore(){return vE().primaryStore}},DE=(0,J2.loggerWithTag)("status");a(xD,"clearStatus");a(hRe,"getAllStatus");a(BD,"getStatus");a(FD,"setStatus")});var $D={};ye($D,{getFingerprint:()=>GD,getRegistrationInfo:()=>HD,setLicense:()=>qD});function HD(){return{version:Q2.packageJson.version,deprecated:!0}}function GD(){return{message:"this-is-deprecated",deprecated:!0}}function qD(){return{deprecated:!0}}var Q2,VD=se(()=>{Q2=b(yt());a(HD,"getRegistrationInfo");a(GD,"getFingerprint");a(qD,"setLicense")});var Z2=M((rqe,X2)=>{"use strict";var ME=require("alasql"),Ru=require("recursive-iterator"),Li=Q(),ERe=ae(),UE=(G(),D(j)),KD=class{static{a(this,"sqlStatementBucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,gRe(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=>UE.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=>!UE.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][UE.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=_Re(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(o).filter(u=>!UE.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new ME.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function _Re(e){return e.filter(t=>t[UE.PERMS_CRUD_ENUM.READ])}a(_Re,"filterReadRestrictedAttrs");function gRe(e,t,r,n,s){SRe(e,t,r,n,s)}a(gRe,"interpretAST");function xE(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(xE,"addSchemaTableToMap");function SRe(e,t,r,n,s){if(!e){Li.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof ME.yy.Insert?bRe(e,t,r):e instanceof ME.yy.Select?TRe(e,t,r,n,s):e instanceof ME.yy.Update?yRe(e,t,r):e instanceof ME.yy.Delete?RRe(e,t,r):Li.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(SRe,"getRecordAttributesAST");function TRe(e,t,r,n,s){if(!e){Li.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(ERe.isEmptyOrZeroLength(i)){Li.error("No schema specified");return}e.from.forEach(c=>{xE(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),xE(c.table,t,r,n,s)});let o=new Ru(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{Li.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 Ru(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{Li.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 Ru(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{Li.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 Ru(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{Li.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}a(TRe,"getSelectAttributes");function yRe(e,t,r){if(!e){Li.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Ru(e.columns),s=e.table.databaseid;xE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&YD(e.table.tableid,s,i.columnid,t,r)}a(yRe,"getUpdateAttributes");function RRe(e,t,r){if(!e){Li.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Ru(e.where),s=e.table.databaseid;xE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&YD(e.table.tableid,s,i.columnid,t,r)}a(RRe,"getDeleteAttributes");function bRe(e,t,r){if(!e){Li.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Ru(e.columns),s=e.into.databaseid;xE(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&YD(e.into.tableid,s,i.columnid,t,r)}a(bRe,"getInsertAttributes");function YD(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(YD,"pushAttribute");X2.exports=KD});var xR=M((sqe,EJ)=>{"use strict";var WD=Vn(),vR=Sn(),ws=ry(),kE=Yl(),jD=Bl(),ARe=eP(),IRe=hY(),HE=(hs(),D(co)),MR=ah(),Dr=Q(),wRe=oP(),NRe=Kh(),CRe=vP(),ORe=Jh(),PRe=xP(),LRe=BP(),DRe=gy(),vRe=GP(),zD=Ty(),va=ae(),rJ=jf(),On=(G(),D(j)),nJ=j4(),MRe=qh(),sJ=(Wd(),D(mh)),iJ=(hR(),D(AE)),oJ=_t(),dr=yD(),aJ=NR(),URe=wD(),Jf=Ts(),cJ=(bf(),D(Rf)),JD=(LD(),D(PD)),QD=(LE(),D(kD)),lJ=(fE(),D(zy)),XD=(VD(),D($D)),uJ=GC(),{handleHDBError:Qn,hdbErrors:dJ}=Ee(),{HDB_ERROR_MSGS:fn,HTTP_STATUS_CODES:BE}=dJ,ee=new Map,fJ="delete",Vc="insert",Xs="read",bu="update",FE="describe",eJ=kE.describeSchema.name,tJ=kE.describeTable.name,mJ={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},xRe={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},BRe="catchup",FRe="handleGetJob",kRe="handleGetJobsByStartDate",UR={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},HRe=[ws.createTable.name,ws.createAttribute.name,ws.dropTable.name,ws.dropAttribute.name],pJ={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},ne=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};ee.set(WD.insert.name,new ne(!1,[Vc]));ee.set(WD.update.name,new ne(!1,[bu]));ee.set(WD.upsert.name,new ne(!1,[Vc,bu]));ee.set(vR.searchByConditions.name,new ne(!1,[Xs]));ee.set(vR.searchByHash.name,new ne(!1,[Xs]));ee.set(vR.searchByValue.name,new ne(!1,[Xs]));ee.set(vR.search.name,new ne(!1,[Xs]));ee.set(ws.createSchema.name,new ne(!0,[]));ee.set(ws.createTable.name,new ne(!0,[]));ee.set(ws.createAttribute.name,new ne(!1,[Vc]));ee.set(ws.dropSchema.name,new ne(!0,[]));ee.set(ws.dropTable.name,new ne(!0,[]));ee.set(ws.dropAttribute.name,new ne(!0,[]));ee.set(kE.describeSchema.name,new ne(!1,[Xs]));ee.set(kE.describeTable.name,new ne(!1,[Xs]));ee.set(jD.deleteRecord.name,new ne(!1,[fJ]));ee.set(HE.addUser.name,new ne(!0,[]));ee.set(HE.alterUser.name,new ne(!0,[]));ee.set(HE.dropUser.name,new ne(!0,[]));ee.set(HE.listUsersExternal.name,new ne(!0,[]));ee.set(MR.listRoles.name,new ne(!0,[]));ee.set(MR.addRole.name,new ne(!0,[]));ee.set(MR.alterRole.name,new ne(!0,[]));ee.set(MR.dropRole.name,new ne(!0,[]));ee.set(wRe.name,new ne(!0,[]));ee.set(NRe.name,new ne(!0,[]));ee.set(CRe.name,new ne(!0,[]));ee.set(ORe.name,new ne(!0,[]));ee.set(PRe.name,new ne(!0,[]));ee.set(LRe.name,new ne(!0,[]));ee.set(zD.setRoutes.name,new ne(!0,[]));ee.set(zD.getRoutes.name,new ne(!0,[]));ee.set(zD.deleteRoutes.name,new ne(!0,[]));ee.set(oJ.setConfiguration.name,new ne(!0,[]));ee.set(DRe.clusterStatus.name,new ne(!0,[]));ee.set(vRe.name,new ne(!0,[]));ee.set(jD.deleteFilesBefore.name,new ne(!0,[]));ee.set(jD.deleteAuditLogsBefore.name,new ne(!0,[]));ee.set(rJ.restart.name,new ne(!0,[]));ee.set(rJ.restartService.name,new ne(!0,[]));ee.set(ARe.name,new ne(!0,[]));ee.set(IRe.name,new ne(!0,[Xs]));ee.set(ws.cleanupOrphanBlobs.name,new ne(!0,[]));ee.set(MRe.systemInformation.name,new ne(!0,[]));ee.set(oJ.getConfiguration.name,new ne(!0,[]));ee.set(aJ.readTransactionLog.name,new ne(!0,[]));ee.set(aJ.deleteTransactionLogsBefore.name,new ne(!0,[]));ee.set(URe.installModules.name,new ne(!0,[]));ee.set(Jf.createCsr.name,new ne(!0,[]));ee.set(Jf.signCertificate.name,new ne(!0,[]));ee.set(Jf.listCertificates.name,new ne(!0,[]));ee.set(Jf.addCertificate.name,new ne(!0,[]));ee.set(Jf.removeCertificate.name,new ne(!0,[]));ee.set(Jf.getKey.name,new ne(!0,[]));ee.set(cJ.addNodeBack.name,new ne(!0,[]));ee.set(cJ.removeNodeBack.name,new ne(!0,[]));ee.set(JD.getOp.name,new ne(!1,[Xs]));ee.set(JD.listMetricsOp.name,new ne(!1,[Xs]));ee.set(JD.describeMetricOp.name,new ne(!1,[Xs]));ee.set(QD.clear.name,new ne(!0,[]));ee.set(QD.get.name,new ne(!0,[]));ee.set(QD.set.name,new ne(!0,[]));ee.set(lJ.installUsageLicenseOp.name,new ne(!0,[]));ee.set(lJ.getUsageLicensesOp.name,new ne(!0,[]));ee.set(XD.getFingerprint.name,new ne(!0,[]));ee.set(XD.setLicense.name,new ne(!0,[]));ee.set(sJ.createTokens.name,new ne(!1,[]));ee.set(sJ.refreshOperationToken.name,new ne(!1,[]));ee.set(iJ.login.name,new ne(!1,[]));ee.set(iJ.logout.name,new ne(!1,[]));ee.set(dr.customFunctionsStatus.name,new ne(!0,[]));ee.set(dr.getCustomFunctions.name,new ne(!0,[]));ee.set(dr.getComponents.name,new ne(!0,[]));ee.set(dr.getComponentFile.name,new ne(!0,[]));ee.set(dr.setComponentFile.name,new ne(!0,[]));ee.set(dr.dropComponent.name,new ne(!0,[]));ee.set(dr.getCustomFunction.name,new ne(!0,[]));ee.set(dr.setCustomFunction.name,new ne(!0,[]));ee.set(dr.dropCustomFunction.name,new ne(!0,[]));ee.set(dr.addComponent.name,new ne(!0,[]));ee.set(dr.dropCustomFunctionProject.name,new ne(!0,[]));ee.set(dr.packageComponent.name,new ne(!0,[]));ee.set(dr.deployComponent.name,new ne(!0,[]));ee.set(dr.addSSHKey.name,new ne(!0,[]));ee.set(dr.getSSHKey.name,new ne(!0,[]));ee.set(dr.updateSSHKey.name,new ne(!0,[]));ee.set(dr.deleteSSHKey.name,new ne(!0,[]));ee.set(dr.listSSHKeys.name,new ne(!0,[]));ee.set(dr.setSSHKnownHosts.name,new ne(!0,[]));ee.set(dr.getSSHKnownHosts.name,new ne(!0,[]));ee.set(XD.getRegistrationInfo.name,new ne(!1,[]));ee.set(HE.userInfo.name,new ne(!1,[]));ee.set(kE.describeAll.name,new ne(!1,[]));ee.set(FRe,new ne(!1,[]));ee.set(kRe,new ne(!0,[]));ee.set(BRe,new ne(!0,[]));ee.set(UR.CSV_DATA_LOAD,new ne(!1,[Vc,bu]));ee.set(UR.CSV_URL_LOAD,new ne(!1,[Vc,bu]));ee.set(UR.CSV_FILE_LOAD,new ne(!1,[Vc,bu]));ee.set(UR.IMPORT_FROM_S3,new ne(!1,[Vc,bu]));ee.set(pJ.EXPORT_TO_S3,new ne(!0,[]));ee.set(pJ.EXPORT_LOCAL,new ne(!0,[]));ee.set(On.VALID_SQL_OPS_ENUM.DELETE,new ne(!1,[fJ]));ee.set(On.VALID_SQL_OPS_ENUM.SELECT,new ne(!1,[Xs]));ee.set(On.VALID_SQL_OPS_ENUM.INSERT,new ne(!1,[Vc]));ee.set(On.VALID_SQL_OPS_ENUM.UPDATE,new ne(!1,[bu]));EJ.exports={verifyPerms:qRe,verifyPermsAst:GRe,verifyBulkLoadAttributePerms:VRe};function GRe(e,t,r){if(va.isEmptyOrZeroLength(e))throw Dr.info("verify_perms_ast has an empty user parameter"),Qn(new Error);if(va.isEmptyOrZeroLength(t))throw Dr.info("verify_perms_ast has an empty user parameter"),Qn(new Error);if(va.isEmptyOrZeroLength(r))throw Dr.info("verify_perms_ast has a null operation parameter"),Qn(new Error);try{let n=Z2(),s=require("alasql"),i=new uJ,o=new n(e),c=o.getSchemas(),l=new Map;if((!c||c.length===0)&&o.affected_attributes&&o.affected_attributes.size>0)throw Dr.info("No schemas defined in verifyPermsAst(), will not continue."),Qn(new Error);let u=!!t.role.permission.super_user,d=c.includes("system");if(d&&mJ[r])throw Qn(new Error,fn.DROP_SYSTEM,BE.FORBIDDEN);if(u&&!d)return null;let f=nJ.getRolePermissions(t.role);t.role.permission=f,!u&&e instanceof s.yy.Select&&(e=o.updateAttributeWildcardsForRolePerms(f));for(let p=0;p<c.length;p++){let h=o.getTablesBySchemaName(c[p]);h&&l.set(c[p],h)}let m=hJ(t,r,l,i);return m||(l.forEach((p,h)=>{for(let E=0;E<p.length;E++){let _=o.getAttributesBySchemaTableName(h,p[E]),R=ev(t.role.permission,h,p[E]);ZD(_,R,r,p[E],h,i)}}),i.getPermsResponse())}catch(n){throw Qn(n)}}a(GRe,"verifyPermsAst");function qRe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Dr.info("null required parameter in verifyPerms"),Qn(new Error,fn.DEFAULT_INVALID_REQUEST,BE.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new uJ;if(va.isEmptyOrZeroLength(e.hdb_user?.role)||va.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Dr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(fn.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=o.has(On.SYSTEM_SCHEMA_NAME)||s===On.SYSTEM_SCHEMA_NAME;if(l&&d&&xRe[e.operation]&&(i===On.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===On.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===On.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&mJ[r])throw Qn(new Error,fn.DROP_SYSTEM,BE.FORBIDDEN);if(l&&!d||u===!0&&(r===ws.createSchema.name||r===ws.dropSchema.name))return null;if(HRe.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=nJ.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===eJ||r===tJ)&&!f.super_user){if(s===On.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(fn.SCHEMA_PERM_ERROR(s));if(r===eJ&&(!f[s]||!f[s][FE]))return c.handleInvalidItem(fn.SCHEMA_NOT_FOUND(s));if(r===tJ&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][FE]))return c.handleInvalidItem(fn.TABLE_NOT_FOUND(s,i))}let m=hJ(e.hdb_user,r,o,c,n);if(m)return m;if(ee.get(r)&&ee.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&On.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],_=f[s].tables[i];_[On.PERMS_CRUD_ENUM.READ]&&(_.attribute_permissions.length>0?_.attribute_permissions.filter(S=>S[On.PERMS_CRUD_ENUM.READ]).forEach(S=>{E.push(S.attribute_name)}):E=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=E)}let p=$Re(e),h=ev(e.hdb_user?.role?.permission,s,i);return ZD(p,h,r,i,s,c,n),c.getPermsResponse()}a(qRe,"verifyPerms");function hJ(e,t,r,n,s){if(va.arrayHasEmptyValues([e,t,r]))throw Dr.info("hasPermissions has an invalid parameter"),Qn(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||ee.get(t).requires_su))return null;if(!ee.get(t))throw Dr.info(`operation ${t} not found.`),Qn(new Error,fn.OP_NOT_FOUND(t),BE.BAD_REQUEST);if(ee.get(t)&&ee.get(t).requires_su)return Dr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(fn.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][FE]===!1){n.addInvalidItem(fn.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(fn.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=o[l].tables[d];if(!f||f[FE]===!1)n.addInvalidItem(fn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=ee.get(t).perms;!va.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],_=f[E];(_==null||_===!1)&&(Dr.info(`Required ${E} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(E))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let p=fn.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Dr.error(p),Dr.error(m),Qn(dJ.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}a(hJ,"hasPermissions");function ZD(e,t,r,n,s,i,o){if(!e||!t)throw Dr.info("no attributes specified in checkAttributePerms."),Qn(new Error);let c=ee.get(r).perms;if(!c||c==="")throw Dr.info(`no permissions found for ${r} in checkAttributePerms().`),Qn(new Error);if(va.isEmptyOrZeroLength(t))return Dr.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[FE]===!1){i.addInvalidItem(fn.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(On.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Xs)throw Qn(new Error,fn.SYSTEM_TIMESTAMP_PERMS_ERR,BE.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(fn.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}a(ZD,"checkAttributePerms");function $Re(e){let t=new Set;try{if(e.action)return t;if(e.operation===On.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{let n=r.attribute;r.search_attribute!==void 0&&(n=r.search_attribute),t.add(n)}),e&&(e.attribute||e.search_attribute)){let r=e.attribute;e.search_attribute!==void 0&&(r=e.search_attribute),t.add(r)}if(!e.records||e.records.length===0){if(!e.get_attributes||e.get_attributes.length===0)return t;for(let r of e.get_attributes)t.add(r)}else for(let r of e.records){let n=Object.keys(r);for(let s of n)t.add(s)}}catch(r){Dr.info(r)}return t}a($Re,"getRecordAttributes");function ev(e,t,r){let n=new Map;if(va.isEmpty(e))return Dr.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Dr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(ev,"getAttributePermissions");function VRe(e,t,r,n,s,i,o){let c=new Set(i),l=ev(e,n,s);ZD(c,l,t,s,n,o,r)}a(VRe,"verifyBulkLoadAttributePerms")});var rv=M((oqe,_J)=>{"use strict";var tv=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};_J.exports=tv});var cv=M((fqe,MJ)=>{"use strict";var BR=Vn(),kR=vC(),KRe=require("needle"),Di=(G(),D(j)),cqe=Dt(),Qf=ae(),{handleHDBError:tr,hdbErrors:wJ}=Ee(),{HTTP_STATUS_CODES:mn,HDB_ERROR_MSGS:vr,CHECK_LOGS_WRAPPER:Iu}=wJ,Xf=Q(),nv=require("papaparse");Qf.promisifyPapaParse();var vi=require("fs-extra"),YRe=require("path"),{chain:gJ}=require("stream-chain"),SJ=require("stream-json/streamers/StreamArray"),TJ=require("stream-json/utils/Batch"),yJ=require("stream-chain/utils/comp"),{finished:RJ}=require("stream"),WRe=fe(),NJ=MC(),jRe=UC(),{BulkLoadFileObject:iv,BulkLoadDataObject:zRe}=pV(),ov=GC(),{verifyBulkLoadAttributePerms:CJ}=xR(),lqe=rv(),uqe=_r(),dqe=io(),{databases:JRe}=(Oe(),D(mt)),{coerceType:QRe}=(Lg(),D(Bq)),bJ="No records parsed from csv file.",Au=`${WRe.get("HDB_ROOT")}/tmp`,{schemaRegex:XRe}=Zi(),AJ=1024*1024*2,IJ=5e3,ZRe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};MJ.exports={csvDataLoad:ebe,csvURLLoad:tbe,csvFileLoad:rbe,importFromS3:nbe};async function ebe(e,t){let r=kR.dataObject(e);if(r)throw tr(r,r.message,mn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=LJ(e.schema,e.table),i=nv.parse(e.data,{header:!0,skipEmptyLines:!0,transform:sv.bind(null,s),dynamicTyping:!1}),o=new ov;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&CJ(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw tr(new Error,c,mn.BAD_REQUEST,void 0,void 0,!0);let l=new zRe(e.action,e.schema,e.table,i.data);return n=await NJ.callOperationFunctionAsAwait(DJ,l,null),n.message===bJ?bJ:vJ(n.records,n.number_written)}catch(s){throw wu(s)}}a(ebe,"csvDataLoad");async function tbe(e){let t=kR.urlObject(e);if(t)throw tr(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Au}/${r}`;try{await sbe(e,r)}catch(s){throw Xf.error(vr.DOWNLOAD_FILE_ERR(r)+" - "+s),tr(s,Iu(vr.DOWNLOAD_FILE_ERR(r)))}try{let s=new iv(this.job_operation_function.name,e.action,e.schema,e.table,n,Di.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await av(s);return await FR(n),i}catch(s){throw await FR(n),wu(s)}}a(tbe,"csvURLLoad");async function rbe(e){let t=kR.fileObject(e);if(t)throw tr(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);let r=new iv(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Di.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await av(r)}catch(n){throw wu(n)}}a(rbe,"csvFileLoad");async function nbe(e){let t=kR.s3FileObject(e);if(t)throw tr(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=YRe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Au}/${s}`;let i=new iv(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await ibe(s,e);let o=await av(i);return await FR(r),o}catch(n){throw await FR(r),wu(n)}}a(nbe,"importFromS3");async function sbe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await KRe("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw tr(n,s,n.statusCode,Di.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}abe(r,e.csv_url),await obe(t,r.raw)}a(sbe,"downloadCSVFile");async function ibe(e,t){try{let r=`${Au}/${e}`;await vi.mkdirp(Au),await vi.writeFile(`${Au}/${e}`,"",{flag:"a+"});let n=await vi.createWriteStream(r),s=await jRe.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){Xf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Xf.error(vr.S3_DOWNLOAD_ERR+" - "+r),tr(r,Iu(vr.S3_DOWNLOAD_ERR))}}a(ibe,"downloadFileFromS3");async function obe(e,t){try{await vi.mkdirp(Au),await vi.writeFile(`${Au}/${e}`,t)}catch(r){throw Xf.error(vr.WRITE_TEMP_FILE_ERR),tr(r,Iu(vr.DEFAULT_BULK_LOAD_ERR))}}a(obe,"writeFileToTempFolder");async function FR(e){if(e)try{await vi.access(e),await vi.unlink(e)}catch{Xf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(FR,"deleteTempFile");function abe(e,t){if(e.statusCode!==wJ.HTTP_STATUS_CODES.OK)throw tr(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,mn.BAD_REQUEST);if(!ZRe[e.headers["content-type"]])throw tr(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,mn.BAD_REQUEST);if(!e.raw)throw tr(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,mn.BAD_REQUEST)}a(abe,"validateURLResponse");async function av(e){try{let t;switch(e.file_type){case Di.VALID_S3_FILE_TYPES.CSV:t=await cbe(e);break;case Di.VALID_S3_FILE_TYPES.JSON:t=await lbe(e);break;default:throw tr(new Error,vr.DEFAULT_BULK_LOAD_ERR,mn.BAD_REQUEST,Di.LOG_LEVELS.ERROR,vr.INVALID_FILE_EXT_ERR(e))}return vJ(t.records,t.number_written)}catch(t){throw wu(t)}}a(av,"fileLoad");async function OJ(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await BR.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&CJ(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=tr(c);r(l)}}a(OJ,"validateChunk");async function PJ(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Qf.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Qf.isEmpty(c)&&!Qf.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await NJ.callOperationFunctionAsAwait(DJ,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=tr(c,Iu(vr.INSERT_CSV_ERR),mn.INTERNAL_SERVER_ERROR,Di.LOG_LEVELS.ERROR,vr.INSERT_CSV_ERR+" - "+c);r(l)}}a(PJ,"insertChunk");async function cbe(e){let t={records:0,number_written:0},r=LJ(e.schema,e.table);try{let n=new ov,s=vi.createReadStream(e.file_path,{highWaterMark:AJ});s.setEncoding("utf8"),await nv.parsePromise(s,OJ.bind(null,e,n),sv.bind(null,r));let i=n.getPermsResponse();if(i)throw tr(new Error,i,mn.BAD_REQUEST);return s=vi.createReadStream(e.file_path,{highWaterMark:AJ}),s.setEncoding("utf8"),await nv.parsePromise(s,PJ.bind(null,e,t),sv.bind(null,r)),s.destroy(),t}catch(n){throw tr(n,Iu(vr.PAPA_PARSE_ERR),mn.INTERNAL_SERVER_ERROR,Di.LOG_LEVELS.ERROR,vr.PAPA_PARSE_ERR+n)}}a(cbe,"callPapaParse");function LJ(e,t){let r=JRe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>QRe(i,s));return n}a(LJ,"createTransformMap");function sv(e,t,r){let n=e.get(r);return n?n(t):Qf.autoCast(t)}a(sv,"typeFunction");async function lbe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new ov,s=gJ([vi.createReadStream(e.file_path,{encoding:"utf-8"}),SJ.withParser(),c=>c.value,new TJ({batchSize:IJ}),yJ(async c=>{await OJ(e,n,r,c)})]);await new Promise((c,l)=>{RJ(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw tr(new Error,i,mn.BAD_REQUEST);let o=gJ([vi.createReadStream(e.file_path,{encoding:"utf-8"}),SJ.withParser(),c=>c.value,new TJ({batchSize:IJ}),yJ(async c=>{await PJ(e,t,r,c)})]);return await new Promise((c,l)=>{RJ(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw tr(n,Iu(vr.INSERT_JSON_ERR),mn.INTERNAL_SERVER_ERROR,Di.LOG_LEVELS.ERROR,vr.INSERT_JSON_ERR+n)}}a(lbe,"insertJson");async function DJ(e){let t={};try{e.data&&e.data.length>0&&ube(e.data[0])?t=await dbe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Xf.info(t.message))}catch(r){throw wu(r)}return t}a(DJ,"callBulkFileLoad");function ube(e){let t=Object.keys(e);for(let r of t)if(!XRe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(ube,"validateColumnNames");async function dbe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=BR.insert;break;case"update":i=BR.update;break;case"upsert":i=BR.upsert;break;default:throw tr(new Error,vr.INVALID_ACTION_PARAM_ERR(n),mn.BAD_REQUEST,Di.LOG_LEVELS.ERROR,vr.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)o.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=Qf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw wu(o)}}a(dbe,"bulkFileLoad");function vJ(e,t){return`successfully loaded ${t} of ${e} records`}a(vJ,"buildResponseMsg");function wu(e){return tr(e,Iu(vr.DEFAULT_BULK_LOAD_ERR),mn.INTERNAL_SERVER_ERROR,Di.LOG_LEVELS.ERROR,vr.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(wu,"buildTopLevelErrMsg")});var FJ=M((hqe,BJ)=>{"use strict";var fbe=Sn(),mbe=pi(),UJ=Q(),pbe=Vn(),pqe=uT(),hbe=require("clone"),uv=require("alasql"),Ebe=lS(),xJ=require("util"),_be=xJ.promisify(mbe.getTableSchema),gbe=xJ.promisify(fbe.search),Sbe=(G(),D(j)),lv=ae();Ebe(uv);BJ.exports={update:ybe};var Tbe="There was a problem performing this update. Please check the logs and try again.";async function ybe({statement:e,hdb_user:t}){let r=await _be(e.table.databaseid,e.table.tableid),n=Rbe(e.columns);lv.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=hbe(s),c=lv.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=uv.parse(l).statements[0],d=await gbe(u),f=bbe(n,d);return Abe(o,f,t)}a(ybe,"update");function Rbe(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=uv.compile(`SELECT ${r.expression.toString()} AS [${Sbe.FUNC_VAL}] FROM ?`)}),t}catch(t){throw UJ.error(t),new Error(Tbe)}}a(Rbe,"createUpdateRecord");function bbe(e,t){return lv.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(bbe,"buildUpdateRecords");async function Abe(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await pbe.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){UJ.error(`Error delete new_attributes from update response: ${i}`)}return s}a(Abe,"updateRecords")});var HJ=M((Sqe,kJ)=>{var Ibe=require("alasql"),wbe=Sn(),Nbe=Q(),Cbe=ms(),fv=require("util"),dv=ae(),Obe=(G(),D(j)),Pbe=pi(),_qe=uT(),gqe=Vn(),Lbe="record",Dbe="successfully deleted",vbe=fv.callbackify(Bbe),Mbe=fv.promisify(wbe.search),Ube=fv.promisify(Pbe.getTableSchema);kJ.exports={convertDelete:vbe};function xbe(e){return`${e.deleted_hashes.length} ${Lbe}${e.deleted_hashes.length===1?"":"s"} ${Dbe}`}a(xbe,"generateReturnMessage");async function Bbe({statement:e,hdb_user:t}){let r=await Ube(e.table.databaseid,e.table.tableid);dv.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=dv.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Ibe.parse(o).statements[0],l={operation:Obe.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Mbe(c);let u=await Cbe.deleteRecords(l);return dv.isEmptyOrZeroLength(u.message)&&(u.message=xbe(u)),delete u.txn_time,u}catch(u){throw Nbe.error(u),u.hdb_code?u.message:u}}a(Bbe,"convertDelete")});var qE=M((yqe,KJ)=>{"use strict";KJ.exports={evaluateSQL:Jbe,processAST:VJ,convertSQLToAST:$J,checkASTPermissions:qJ};var Fbe=Vn(),GJ=require("util"),kbe=GJ.callbackify(Fbe.insert),Hbe=Sn().search,Gbe=FJ().update,qbe=GJ.callbackify(Gbe),$be=HJ().convertDelete,Kc=require("alasql"),Vbe=xR(),HR=Q(),Kbe=lS(),Ybe=ae(),GE=(G(),D(j)),{hdbErrors:Wbe,handleHDBError:mv}=Ee(),{HTTP_STATUS_CODES:pv}=Wbe;Kbe(Kc);var jbe=403,zbe="There was a problem performing this insert. Please check the logs and try again.",hv=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Jbe(e,t){let r=e.parsed_sql_object;if(!r){r=$J(e.sql);let n,s=r.ast.statements[0];if(s instanceof Kc.yy.Insert?n=s.into.databaseid:s instanceof Kc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Kc.yy.Update||s instanceof Kc.yy.Delete?n=s.table.databaseid:HR.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Kc.yy.Select)&&Ybe.isEmptyOrZeroLength(n))return t("No schema specified",null)}VJ(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Jbe,"evaluateSQL");function qJ(e,t){let r;try{r=Vbe.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(qJ,"checkASTPermissions");function $J(e){let t=new hv;if(!e)throw mv(new Error,"The 'sql' parameter is missing from the request body",pv.BAD_REQUEST);try{let r=e.trim(),n=Kc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
133
|
+
`);throw n[1]?mv(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,pv.BAD_REQUEST):mv(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",pv.BAD_REQUEST)}return t}a($J,"convertSQLToAST");function VJ(e,t,r){try{let n=Qbe;if(!e.bypass_auth&&!t.permissions_checked){let i=qJ(e,t);if(i&&i.length>0)return r(jbe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case GE.VALID_SQL_OPS_ENUM.SELECT:n=Hbe,s=t.ast.statements[0];break;case GE.VALID_SQL_OPS_ENUM.INSERT:n=Xbe;break;case GE.VALID_SQL_OPS_ENUM.UPDATE:n=qbe;break;case GE.VALID_SQL_OPS_ENUM.DELETE:n=$be;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(VJ,"processAST");function Qbe(e,t){HR.info(e),t("unknown sql statement")}a(Qbe,"nullFunction");function Xbe({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=Zbe(i,e.values)}catch(o){return r(o)}kbe(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){HR.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(Xbe,"convertInsert");function Zbe(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=Kc.compile(`SELECT ${s.toString()} AS [${GE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw HR.error(r),new Error(zbe)}}a(Zbe,"createDataObjects")});var gv=M((bqe,ZJ)=>{"use strict";var _v=Sn(),eAe=UC(),{AsyncParser:tAe}=require("json2csv"),GR=require("stream"),Ns=ae(),Ev=require("fs-extra"),rAe=require("path"),Zs=Q(),{promisify:jJ}=require("util"),$E=ae(),{handleHDBError:br,hdbErrors:nAe}=Ee(),{HDB_ERROR_MSGS:Xn,HTTP_STATUS_CODES:Ar}=nAe,{streamAsJSON:sAe}=(MA(),D(Kx)),{Upload:iAe}=require("@aws-sdk/lib-storage"),{toCsvStream:oAe}=(Ko(),D(t0)),YJ=["search_by_value","search_by_hash","sql","search_by_conditions"],WJ=["json","csv"],zJ="json",JJ="csv",aAe="Successfully exported JSON locally.",cAe="Successfully exported CSV locally.",lAe=1e3,uAe=_v.searchByHash,dAe=_v.searchByValue,fAe=jJ(GR.finished);ZJ.exports={export_to_s3:EAe,export_local:mAe};async function mAe(e){Zs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=QJ(e);if(!Ns.isEmpty(t))throw Zs.error(t),br(new Error,t,Ar.BAD_REQUEST,void 0,void 0,!0);if(Ns.isEmpty(e.path))throw Zs.error(Xn.MISSING_VALUE("path")),br(new Error,Xn.MISSING_VALUE("path"),Ar.BAD_REQUEST,void 0,void 0,!0);let r=(Ns.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(rAe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Ns.buildFolderPath(e.path,r);await pAe(e.path);let s=await XJ(e);return await hAe(n,e.format,s)}a(mAe,"export_local");async function pAe(e){if(Zs.trace("in confirmPath"),Ns.isEmptyOrZeroLength(e))throw br(new Error,`Invalid path: ${e}`,Ar.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await Ev.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${directory_path}' does not exist`:r.code==="EACCES"?n=`access to path '${directory_path}' is denied`:n=r.message,Zs.error(n),br(new Error,n,Ar.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${directory_path}' is not a directory, please supply a valid folder path`;throw Zs.error(r),br(new Error,r,Ar.BAD_REQUEST,void 0,void 0,!0)}return!0}a(pAe,"confirmPath");async function hAe(e,t,r){if(Zs.trace("in saveToLocal"),$E.isEmptyOrZeroLength(e))throw br(new Error,Xn.INVALID_VALUE("file_path"),Ar.BAD_REQUEST,void 0,void 0,!0);if($E.isEmptyOrZeroLength(t))throw br(new Error,Xn.INVALID_VALUE("Source format"),Ar.BAD_REQUEST,void 0,void 0,!0);if($E.isEmpty(r))throw br(new Error,Xn.NOT_FOUND("Data"),Ar.BAD_REQUEST,void 0,void 0,!0);if(t===zJ){let n=Ev.createWriteStream(e);return sAe(r).pipe(n),await fAe(n),{message:aAe,path:e}}else if(t===JJ){let n=Ev.createWriteStream(e),s=GR.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new tAe(i,c).fromInput(s).toOutput(n).promise(!1),{message:cAe,path:e}}throw br(new Error,Xn.INVALID_VALUE("format"),Ar.BAD_REQUEST)}a(hAe,"saveToLocal");async function EAe(e){if(!e.s3||Object.keys(e.s3).length===0)throw br(new Error,Xn.MISSING_VALUE("S3 object"),Ar.BAD_REQUEST);if(Ns.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw br(new Error,Xn.MISSING_VALUE("aws_access_key_id"),Ar.BAD_REQUEST);if(Ns.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw br(new Error,Xn.MISSING_VALUE("aws_secret_access_key"),Ar.BAD_REQUEST);if(Ns.isEmptyOrZeroLength(e.s3.bucket))throw br(new Error,Xn.MISSING_VALUE("bucket"),Ar.BAD_REQUEST);if(Ns.isEmptyOrZeroLength(e.s3.key))throw br(new Error,Xn.MISSING_VALUE("key"),Ar.BAD_REQUEST);if(Ns.isEmptyOrZeroLength(e.s3.region))throw br(new Error,Xn.MISSING_VALUE("region"),Ar.BAD_REQUEST);let t=QJ(e);if(!Ns.isEmpty(t))throw br(new Error,t,Ar.BAD_REQUEST);Zs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await XJ(e)}catch(l){throw Zs.error(l),l}let n,s=await eAe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new GR.PassThrough;if(e.format===JJ){i=e.s3.key+".csv";let l=oAe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(o)}else if(e.format===zJ){i=e.s3.key+".json";let l=new GR.Readable;l.pipe(o),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let p=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=p,f!==0&&f%lAe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw br(new Error,Xn.INVALID_VALUE("format"),Ar.BAD_REQUEST);return new iAe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(EAe,"export_to_s3");function QJ(e){if(Zs.trace("in exportCoreValidation"),Ns.isEmpty(e.format))return"format missing";if(WJ.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${WJ.join(", ")}`;let t=e.search_operation.operation;if(Ns.isEmpty(t))return"search_operation.operation missing";if(YJ.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${YJ.join(", ")}`}a(QJ,"exportCoreValidation");async function XJ(e){Zs.trace("in getRecords");let t,r;if($E.isEmpty(e.search_operation)||$E.isEmptyOrZeroLength(e.search_operation.operation))throw br(new Error,Xn.INVALID_VALUE("Search operation"),Ar.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=dAe;break;case"search_by_hash":t=uAe;break;case"search_by_conditions":t=_v.searchByConditions;break;case"sql":{let n=qE();t=jJ(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Zs.error(r),br(new Error,r,Ar.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(XJ,"getRecords")});var tQ=M((Iqe,eQ)=>{"use strict";var Sv=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};eQ.exports=Sv});var sQ=M((Nqe,nQ)=>{"use strict";var _Ae=(G(),D(j)),rQ=require("moment"),gAe=require("uuid").v4,Tv=class{static{a(this,"JobObject")}constructor(){this.id=gAe(),this.type=void 0,this.start_datetime=rQ().valueOf(),this.created_datetime=rQ().valueOf(),this.end_datetime=void 0,this.status=_Ae.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};nQ.exports=Tv});var Rv=M((Oqe,fQ)=>{"use strict";var SAe=require("uuid").v4,lQ=Vn(),uQ=Sn(),TAe=fi(),yAe=Ed(),RAe=tQ(),Ut=(G(),D(j)),bAe=sQ(),AAe=YS(),Mi=Q(),IAe=xm(),Zf=ae(),{promisify:wAe}=require("util"),Nu=require("moment"),qR=vC(),iQ=zw(),{deleteTransactionLogsBeforeValidator:NAe}=AD(),{handleHDBError:oQ,hdbErrors:CAe,ClientError:OAe}=Ee(),{HTTP_STATUS_CODES:aQ}=CAe,cQ=uQ.searchByValue,PAe=uQ.searchByHash,LAe=lQ.insert,DAe=lQ.update,yv;fQ.exports={addJob:UAe,updateJob:BAe,handleGetJob:vAe,handleGetJobsByStartDate:MAe,getJobById:dQ};async function vAe(e){if(e.id===void 0)throw new OAe("'id' is required");let t=await dQ(e.id);return Zf.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}a(vAe,"handleGetJob");async function MAe(e){try{let t=await xAe(e);if(Mi.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 Mi.error(r),new Error(r)}}a(MAe,"handleGetJobsByStartDate");async function UAe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Zf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Mi.info(d),t.error=d,t}if(!Ut.JOB_TYPE_ENUM[e.operation])return Mi.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ut.OPERATIONS_ENUM.CSV_FILE_LOAD:n=qR.fileObject(e);break;case Ut.OPERATIONS_ENUM.CSV_URL_LOAD:n=qR.urlObject(e);break;case Ut.OPERATIONS_ENUM.CSV_DATA_LOAD:n=qR.dataObject(e);break;case Ut.OPERATIONS_ENUM.IMPORT_FROM_S3:n=qR.s3FileObject(e);break;case Ut.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ut.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=iQ(e,"date");break;case Ut.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=iQ(e,"timestamp");break;case Ut.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=NAe(e);break;case Ut.OPERATIONS_ENUM.RESTART_SERVICE:if(Ut.HDB_PROCESS_SERVICES[e.service]===void 0)throw oQ(new Error,"Invalid service",aQ.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw oQ(n,n.message,aQ.BAD_REQUEST,void 0,void 0,!0);let s=new bAe;s.type=e.operation===Ut.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ut.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new TAe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await cQ(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Mi.error(f),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=SAe();try{o=await cQ(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Mi.error(f),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Mi.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new IAe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await LAe(l)}catch(d){return Mi.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,Mi.trace(d)}return t}a(UAe,"addJob");async function xAe(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 RAe(n,e.hdb_user);try{if(!yv){let i=qE();yv=wAe(i.evaluateSQL)}return await yv(s)}catch(i){throw Mi.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(xAe,"getJobsInDateRange");async function dQ(e){if(Zf.isEmptyOrZeroLength(e))return Zf.errorizeMessage("Invalid job ID specified.");let t=new yAe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await PAe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Mi.error(n),Zf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(dQ,"getJobById");async function BAe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Zf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ut.JOB_STATUS_ENUM.COMPLETE||e.status===Ut.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Nu().valueOf());let t=new AAe(Ut.SYSTEM_SCHEMA_NAME,Ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await DAe(t),r}a(BAe,"updateJob")});var TQ=M((Lqe,SQ)=>{"use strict";var mQ=ae(),Mr=(G(),D(j)),FAe=require("moment"),$R=cv(),VE=Q(),pQ=Rv(),hQ=gv(),EQ=Bl(),_Q=st(),kAe=NR(),HAe=jf(),{parentPort:GAe,isMainThread:gQ}=require("worker_threads"),{onMessageByType:qAe}=st(),bv=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function $Ae(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(mQ.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(mQ.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Mr.JOB_TYPE_ENUM.csv_file_load:await Po(e,$R.csvFileLoad);break;case Mr.JOB_TYPE_ENUM.csv_url_load:await Po(e,$R.csvURLLoad);break;case Mr.JOB_TYPE_ENUM.csv_data_load:await Po(e,$R.csvDataLoad);break;case Mr.JOB_TYPE_ENUM.import_from_s3:await Po(e,$R.importFromS3);break;case Mr.JOB_TYPE_ENUM.empty_trash:break;case Mr.JOB_TYPE_ENUM.export_local:await Po(e,hQ.export_local);break;case Mr.JOB_TYPE_ENUM.export_to_s3:await Po(e,hQ.export_to_s3);break;case Mr.JOB_TYPE_ENUM.delete_files_before:case Mr.JOB_TYPE_ENUM.delete_records_before:await Po(e,EQ.deleteFilesBefore);break;case Mr.JOB_TYPE_ENUM.delete_audit_logs_before:await Po(e,EQ.deleteAuditLogsBefore);break;case Mr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Po(e,kAe.deleteTransactionLogsBefore);break;case Mr.JOB_TYPE_ENUM.restart_service:return await Po(e,HAe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a($Ae,"parseMessage");async function Po(e,t){try{e.job.status=Mr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=FAe().valueOf(),await pQ.updateJob(e.job),await VAe(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):VE.error(`There was an error running ${t.name} job with id ${e.job.id}`),VE.error(n),e.job.message=n,e.job.status=Mr.JOB_STATUS_ENUM.ERROR;try{await pQ.updateJob(e.job)}catch(s){throw VE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Po,"runJob");async function VAe(e){VE.trace("launching job thread:",e),gQ?_Q.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Mr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):GAe.postMessage({type:Mr.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(VAe,"launchJobThread");gQ&&qAe(Mr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{_Q.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Mr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){VE.error(r)}});SQ.exports={parseMessage:$Ae,RunnerMessage:bv}});var RQ=M((vqe,yQ)=>{"use strict";var KAe=ae(),Av=fe(),Yc=(G(),D(j)),YAe=Dt(),WAe=_r(),Lo=Q(),jAe=rv(),zAe=io();Av.initSync();yQ.exports={postOperationHandler:QAe,sendOperationTransaction:KE};async function KE(e,t,r,n){if(e.schema===Yc.SYSTEM_SCHEMA_NAME)return;let s=JAe(e,t,r);s&&(Lo.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await WAe.publishToStream(`${YAe.SUBJECT_PREFIXES.TXN}.${e.schema}`,zAe.createNatsTableStreamName(e.schema,e.table),n,s))}a(KE,"sendOperationTransaction");function JAe(e,t,r){if(KAe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Yc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}a(JAe,"convertCRUDOperationToTransaction");async function QAe(e,t,r){if(!Av.get(Yc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;Lo.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=Av.get(Yc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new jAe(t.txn_time,n,s);switch(e.operation){case Yc.OPERATIONS_ENUM.INSERT:try{await KE(e,t.inserted_hashes,i,r)}catch(o){Lo.error("There was an error calling clustering postOperationHandler for insert."),Lo.error(o)}break;case Yc.OPERATIONS_ENUM.DELETE:try{await KE(e,t.deleted_hashes,i,r)}catch(o){Lo.error("There was an error calling clustering postOperationHandler for delete."),Lo.error(o)}break;case Yc.OPERATIONS_ENUM.UPDATE:try{await KE(e,t.update_hashes,i,r)}catch(o){Lo.error("There was an error calling clustering postOperationHandler for update."),Lo.error(o)}break;case Yc.OPERATIONS_ENUM.UPSERT:try{await KE(e,t.upserted_hashes,i,r)}catch(o){Lo.error("There was an error calling clustering postOperationHandler for upsert."),Lo.error(o)}break;default:break}return t}a(QAe,"postOperationHandler")});var Z,bQ=se(()=>{Z=class{static{a(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var RD={};ye(RD,{chooseOperation:()=>$Q,executeJob:()=>ei,getOperationFunction:()=>VQ,operation:()=>vv,processLocalTransaction:()=>qQ});function eIe(e){if(!Iv){let t=qE();Iv=Dv.promisify(t.evaluateSQL)}return Iv(e)}async function qQ(e,t){try{if(e.body.operation!=="read_log"&&(zE.default.log_level===gm.INFO||zE.default.log_level===gm.DEBUG||zE.default.log_level===gm.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:o,...c}=e.body;Pn.info(c)}}catch(n){Pn.error(n)}let r=await HQ.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return tIe[e.body.operation]&&UQ.default.setSchemaDataToGlobal(n=>{n&&Pn.error(n)}),r}function $Q(e){let t;try{t=VQ(e)}catch(s){throw Pn.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=qE(),i=e.operation==="sql"?e.sql:e.search_operation.sql,o=s.convertSQLToAST(i);if(e.parsed_sql_object=o,!e.bypass_auth){let c=s.checkASTPermissions(e,o);if(c)throw Pn.error(`${AQ.FORBIDDEN} from operation ${e.operation}`),Pn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,ti.handleHDBError)(new Error,c,ti.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.LOGIN&&e.operation!==V.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=MQ.default.verifyPerms(i,s);if(o)throw Pn.error(`${AQ.FORBIDDEN} from operation ${e.operation}`),Pn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,ti.handleHDBError)(new Error,o,ti.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,ti.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function VQ(e){if(Pn.trace(`getOperationFunction with operation: ${e.operation}`),IQ.has(e.operation))return IQ.get(e.operation);throw(0,ti.handleHDBError)(new Error,ti.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),ti.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function vv(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=$Q(e);return qQ({body:e},n)}async function rIe(e){Pn.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[nA]=!0;let o;switch(i.operation){case V.INSERT:o=await Ou.default.insert(i);break;case V.UPDATE:o=await Ou.default.update(i);break;case V.UPSERT:o=await Ou.default.upsert(i);break;case V.DELETE:o=await tm.default.deleteRecord(i);break;default:Pn.warn("invalid operation in catchup");break}await XAe.postOperationHandler(i,o,e)}catch(o){Pn.info("Invalid operation in transaction"),Pn.error(o)}}async function ei(e){(0,kQ.transformReq)(e);let t,r;try{if(r=await KR.default.addJob(e),r){t=r.createdJob,Pn.info("addJob result",r);let n=new Ov.default.RunnerMessage(t,e);return{message:await Ov.default.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}}catch(n){let s=n instanceof Error?n:null,i=`There was an error executing job: ${s&&"http_resp_msg"in s?s.http_resp_msg:n}`;throw Pn.error(i),(0,ti.handleHDBError)(n,i)}}function nIe(){let e=new Map;return e.set(V.INSERT,new Z(Ou.default.insert)),e.set(V.UPDATE,new Z(Ou.default.update)),e.set(V.UPSERT,new Z(Ou.default.upsert)),e.set(V.SEARCH_BY_CONDITIONS,new Z(em.default.searchByConditions)),e.set(V.SEARCH_BY_HASH,new Z(em.default.searchByHash)),e.set(V.SEARCH_BY_ID,new Z(em.default.searchByHash)),e.set(V.SEARCH_BY_VALUE,new Z(em.default.searchByValue)),e.set(V.SEARCH,new Z(ZAe)),e.set(V.SQL,new Z(eIe)),e.set(V.CSV_DATA_LOAD,new Z(ei,YE.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new Z(ei,YE.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new Z(ei,YE.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new Z(ei,YE.default.importFromS3)),e.set(V.CREATE_SCHEMA,new Z(Ui.default.createSchema)),e.set(V.CREATE_DATABASE,new Z(Ui.default.createSchema)),e.set(V.CREATE_TABLE,new Z(Ui.default.createTable)),e.set(V.CREATE_ATTRIBUTE,new Z(Ui.default.createAttribute)),e.set(V.DROP_SCHEMA,new Z(Ui.default.dropSchema)),e.set(V.DROP_DATABASE,new Z(Ui.default.dropSchema)),e.set(V.DROP_TABLE,new Z(Ui.default.dropTable)),e.set(V.DROP_ATTRIBUTE,new Z(Ui.default.dropAttribute)),e.set(V.DESCRIBE_SCHEMA,new Z(WE.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new Z(WE.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new Z(WE.default.describeTable)),e.set(V.DESCRIBE_ALL,new Z(WE.default.describeAll)),e.set(V.DELETE,new Z(tm.default.deleteRecord)),e.set(V.ADD_USER,new Z(CN)),e.set(V.ALTER_USER,new Z(ON)),e.set(V.DROP_USER,new Z(PN)),e.set(V.LIST_USERS,new Z(DN)),e.set(V.LIST_ROLES,new Z(jE.default.listRoles)),e.set(V.ADD_ROLE,new Z(jE.default.addRole)),e.set(V.ALTER_ROLE,new Z(jE.default.alterRole)),e.set(V.DROP_ROLE,new Z(jE.default.dropRole)),e.set(V.USER_INFO,new Z(LN)),e.set(V.READ_LOG,new Z(NQ.default)),e.set(V.ADD_NODE,new Z(CQ.default)),e.set(V.UPDATE_NODE,new Z(wv.default)),e.set(V.SET_NODE_REPLICATION,new Z(wv.default)),e.set(V.REMOVE_NODE,new Z(OQ.default)),e.set(V.CONFIGURE_CLUSTER,new Z(PQ.default)),e.set(V.PURGE_STREAM,new Z(LQ.default)),e.set(V.SET_CONFIGURATION,new Z(Pv.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new Z(DQ.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new Z(vQ.default)),e.set(V.CLUSTER_SET_ROUTES,new Z(VR.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new Z(VR.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new Z(VR.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new Z(ei,Nv.default.export_to_s3)),e.set(V.CREATE_CSR,new Z(Cu.default.createCsr)),e.set(V.SIGN_CERTIFICATE,new Z(Cu.default.signCertificate)),e.set(V.LIST_CERTIFICATES,new Z(Cu.default.listCertificates)),e.set(V.ADD_CERTIFICATES,new Z(Cu.default.addCertificate)),e.set(V.REMOVE_CERTIFICATE,new Z(Cu.default.removeCertificate)),e.set(V.GET_KEY,new Z(Cu.default.getKey)),e.set(V.ADD_NODE_BACK,new Z(NP)),e.set(V.REMOVE_NODE_BACK,new Z(CP)),e.set(V.DELETE_FILES_BEFORE,new Z(ei,tm.default.deleteFilesBefore)),e.set(V.DELETE_RECORDS_BEFORE,new Z(ei,tm.default.deleteFilesBefore)),e.set(V.EXPORT_LOCAL,new Z(ei,Nv.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new Z(KR.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new Z(KR.default.handleGetJob)),e.set(V.GET_REGISTRATION_INFO,new Z(HD)),e.set(V.GET_FINGERPRINT,new Z(GD)),e.set(V.SET_LICENSE,new Z(qD)),e.set(V.RESTART,new Z(Cv.default.restart)),e.set(V.RESTART_SERVICE,new Z(ei,Cv.default.restartService)),e.set(V.CATCHUP,new Z(rIe)),e.set(V.SYSTEM_INFORMATION,new Z(xQ.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new Z(ei,tm.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new Z(wQ.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new Z(AC)),e.set(V.REFRESH_OPERATION_TOKEN,new Z(IC)),e.set(V.LOGIN,new Z(_D)),e.set(V.LOGOUT,new Z(gD)),e.set(V.GET_CONFIGURATION,new Z(Pv.default.getConfiguration)),e.set(V.CUSTOM_FUNCTIONS_STATUS,new Z(wt.default.customFunctionsStatus)),e.set(V.GET_CUSTOM_FUNCTIONS,new Z(wt.default.getCustomFunctions)),e.set(V.GET_COMPONENT_FILE,new Z(wt.default.getComponentFile)),e.set(V.GET_COMPONENTS,new Z(wt.default.getComponents)),e.set(V.SET_COMPONENT_FILE,new Z(wt.default.setComponentFile)),e.set(V.DROP_COMPONENT,new Z(wt.default.dropComponent)),e.set(V.GET_CUSTOM_FUNCTION,new Z(wt.default.getCustomFunction)),e.set(V.SET_CUSTOM_FUNCTION,new Z(wt.default.setCustomFunction)),e.set(V.DROP_CUSTOM_FUNCTION,new Z(wt.default.dropCustomFunction)),e.set(V.ADD_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.addComponent)),e.set(V.ADD_COMPONENT,new Z(wt.default.addComponent)),e.set(V.DROP_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.dropCustomFunctionProject)),e.set(V.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.packageComponent)),e.set(V.PACKAGE_COMPONENT,new Z(wt.default.packageComponent)),e.set(V.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Z(wt.default.deployComponent)),e.set(V.DEPLOY_COMPONENT,new Z(wt.default.deployComponent)),e.set(V.READ_TRANSACTION_LOG,new Z(Lv.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new Z(ei,Lv.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new Z(BQ.default.installModules)),e.set(V.GET_BACKUP,new Z(Ui.default.getBackup)),e.set(V.CLEANUP_ORPHAN_BLOBS,new Z(Ui.default.cleanupOrphanBlobs)),e.set(V.ADD_SSH_KEY,new Z(wt.default.addSSHKey)),e.set(V.GET_SSH_KEY,new Z(wt.default.getSSHKey)),e.set(V.UPDATE_SSH_KEY,new Z(wt.default.updateSSHKey)),e.set(V.DELETE_SSH_KEY,new Z(wt.default.deleteSSHKey)),e.set(V.LIST_SSH_KEYS,new Z(wt.default.listSSHKeys)),e.set(V.SET_SSH_KNOWN_HOSTS,new Z(wt.default.setSSHKnownHosts)),e.set(V.GET_SSH_KNOWN_HOSTS,new Z(wt.default.getSSHKnownHosts)),e.set(V.GET_ANALYTICS,new Z(ND)),e.set(V.LIST_METRICS,new Z(CD)),e.set(V.DESCRIBE_METRIC,new Z(OD)),e.set(V.GET_STATUS,new Z(BD)),e.set(V.SET_STATUS,new Z(FD)),e.set(V.CLEAR_STATUS,new Z(xD)),e.set(V.INSTALL_USAGE_LICENSE,new Z(BL)),e.set(V.GET_USAGE_LICENSES,new Z(GL)),e}var em,YE,Ui,WE,tm,wQ,jE,wt,zE,NQ,CQ,wv,OQ,PQ,LQ,DQ,vQ,VR,Nv,MQ,KR,ti,Cv,Dv,Ou,UQ,xQ,Ov,Pv,Lv,BQ,FQ,kQ,Cu,HQ,GQ,AQ,Pn,XAe,ZAe,Iv,tIe,IQ,bD=se(()=>{em=b(Sn()),YE=b(cv()),Ui=b(ry()),WE=b(Yl()),tm=b(Bl()),wQ=b(eP());hs();jE=b(ah()),wt=b(yD()),zE=b(Q()),NQ=b(oP()),CQ=b(Kh()),wv=b(vP()),OQ=b(Jh()),PQ=b(xP()),LQ=b(BP()),DQ=b(gy()),vQ=b(GP()),VR=b(Ty()),Nv=b(gv()),MQ=b(xR()),KR=b(Rv());G();ti=b(Ee()),Cv=b(jf()),Dv=b(require("util")),Ou=b(Vn()),UQ=b(pi()),xQ=b(qh()),Ov=b(TQ());Wd();hR();Pv=b(_t()),Lv=b(NR()),BQ=b(wD()),FQ=b(ai()),kQ=b(ae());Hr();Cu=b(Ts());bf();LD();HQ=b(MC()),GQ=b(RQ());LE();fE();VD();bQ();({HTTP_STATUS_CODES:AQ}=ti.hdbErrors),Pn=zE.default.loggerWithTag("operation"),{transactToClusteringUtils:XAe}=GQ.default,ZAe=Dv.promisify(em.default.search);a(eIe,"evaluateSQL");tIe={[V.CREATE_ATTRIBUTE]:!0,[V.CREATE_TABLE]:!0,[V.CREATE_SCHEMA]:!0,[V.DROP_ATTRIBUTE]:!0,[V.DROP_TABLE]:!0,[V.DROP_SCHEMA]:!0};a(qQ,"processLocalTransaction");IQ=nIe();Ue.operation=vv;a($Q,"chooseOperation");a(VQ,"getOperationFunction");(0,FQ._assignPackageExport)("operation",vv);a(vv,"operation");a(rIe,"catchup");a(ei,"executeJob");a(nIe,"initializeOperationFunctionMap")});var jR=M((Hqe,jQ)=>{"use strict";var YR=(G(),D(j)),sIe=ae(),rm=Q(),{handleHDBError:Mv,hdbErrors:WR}=Ee(),{isMainThread:iIe}=require("worker_threads"),{Readable:oIe}=require("stream"),KQ=require("os"),aIe=require("util"),cIe=NC(),WQ=aIe.promisify(cIe.authorize),YQ=(bD(),D(RD)),{createGzip:lIe,constants:uIe}=require("zlib"),dIe=[YR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,YR.OPERATIONS_ENUM.LOGIN,YR.OPERATIONS_ENUM.LOGOUT];function fIe(e){let t=`Found an uncaught exception with message: ${e.message}. ${KQ.EOL}Stack: ${e.stack} ${KQ.EOL}Terminating ${iIe?"HDB":"thread"}.`;console.error(t),rm.fatal(t),process.exit(1)}a(fIe,"handleServerUncaughtException");function mIe(e,t,r){if(rm[e.logLevel||"info"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:WR.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(mIe,"serverErrorHandler");function pIe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=Mv(new Error,"Invalid JSON.",WR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(sIe.isEmpty(e.body.operation)){let n=Mv(new Error,"Request body must include an 'operation' property.",WR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(pIe,"reqBodyValidationHandler");function hIe(e,t,r){let n;!dIe.includes(e.body.operation)||e.body.operation===YR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?WQ(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{i.statusCode=401,rm.debug("Login failed",i),r(i,null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(hIe,"authHandler");function EIe(e,t,r){WQ(e,t).then(n=>{e.hdb_user=n,r()}).catch(n=>{rm.warn(n),rm.warn(`{"ip":"${e.socket?.remoteAddress}", "error":"${n.stack}"`);let s=typeof n=="string"?{error:n}:{error:n.message};r(Mv(n,s,WR.HTTP_STATUS_CODES.UNAUTHORIZED),null)})}a(EIe,"authAndEnsureUserOnRequest");async function _Ie(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=YQ.chooseOperation(e.body);let s=await YQ.processLocalTransaction(e,n);if(s instanceof oIe&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(lIe({level:uIe.Z_BEST_SPEED})))}return s}catch(s){throw rm.error(s),s}}a(_Ie,"handlePostRequest");jQ.exports={authHandler:hIe,authAndEnsureUserOnRequest:EIe,handlePostRequest:_Ie,handleServerUncaughtException:fIe,serverErrorHandler:mIe,reqBodyValidationHandler:pIe}});var XQ=M((qqe,QQ)=>{"use strict";var gIe=require("fastify-plugin"),{handlePostRequest:zQ,authHandler:SIe,reqBodyValidationHandler:TIe}=jR();async function yIe(e){e.decorate("hdbCore",{preValidation:[TIe,SIe],request:a(t=>JQ(zQ(t,response)),"request"),requestWithoutAuthentication:a((t,r)=>JQ(zQ(t,r,!0)),"requestWithoutAuthentication")})}a(yIe,"hdbCore");async function JQ(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(JQ,"convertAsyncIterators");QQ.exports=gIe(yIe)});var e3=M((Kqe,ZQ)=>{"use strict";var Vqe=require("fs"),zR=fe();zR.initSync();var{CONFIG_PARAMS:Uv}=(G(),D(j)),RIe=1024*1024*1024;function bIe(e){let t=zR.get(Uv.HTTP_TIMEOUT),r=zR.get(Uv.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:RIe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:zR.get(Uv.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(bIe,"getServerOptions");ZQ.exports=bIe});var n3=M((Wqe,r3)=>{"use strict";var xv=fe();xv.initSync();var{CONFIG_PARAMS:t3}=(G(),D(j));function AIe(){let e=xv.get(t3.HTTP_CORSACCESSLIST),t=xv.get(t3.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(AIe,"getCORSOptions");r3.exports=AIe});var o3=M((zqe,i3)=>{"use strict";var s3=fe();s3.initSync();var IIe=(G(),D(j));function wIe(){return s3.get(IIe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(wIe,"getHeaderTimeoutConfig");i3.exports=wIe});var Fv={};ye(Fv,{customFunctionsServer:()=>OIe,ready:()=>S3,start:()=>CIe});function CIe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Ma||(Ma=g3(t),Ue.http((await Ma).server));let o=await Ma,c=(0,Bv.dirname)(s),l=(0,Bv.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!a3.has(c)){a3.add(c);try{o.register(LIe(c,l))}catch(u){if(u.message==="Root plugin has already booted")Tt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:S3}}async function OIe(){try{Tt.info("In Custom Functions Fastify server"+process.cwd()),Tt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Tt.debug(`Custom Functions server process ${process.pid} starting up.`),await PIe();let e=m3.get(x.HTTP_SECUREPORT)>0,t;try{t=Ma=await g3(e)}catch(r){throw Tt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Tt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Tt.error(`Custom Functions ${process.pid} Error: ${e}`),Tt.error(e),process.exit(1)}}async function PIe(){try{Tt.info("Custom Functions starting configuration."),await _i(),Tt.info("Custom Functions completed configuration.")}catch(e){Tt.error(e)}}function LIe(e,t){return async function(r){try{Tt.info("Custom Functions starting buildRoutes"),Tt.trace("Loading fastify routes folder "+e),(0,c3.existsSync)(e)&&r.register(f3.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Tt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Tt.error(s.message):s&&Tt.error(s),o()})}catch(n){Tt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function g3(e){Tt.info("Custom Functions starting buildServer.");let t=(0,p3.default)(e),r=(0,l3.default)(t);r.server.headersTimeout=(0,E3.default)(),r.setErrorHandler(_3.serverErrorHandler);let n=(0,h3.default)();return n&&r.register(u3.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(d3.default),await r.register(NIe),await r.after(),Vm(r),Tt.info("Custom Functions completed buildServer."),r}function S3(){if(Ma)return Ma.then?Ma.then(e=>e.ready()):Ma.ready()}var Bv,c3,l3,u3,d3,f3,m3,Tt,NIe,p3,h3,E3,_3,Ma,a3,T3=se(()=>{Bv=require("path"),c3=require("fs"),l3=b(require("fastify")),u3=b(require("@fastify/cors")),d3=b(yC()),f3=b(require("@fastify/autoload")),m3=b(fe());G();Tt=b(Q()),NIe=b(XQ());hs();p3=b(e3()),h3=b(n3()),E3=b(o3()),_3=b(jR());Ko();Hr();a3=new Set;a(CIe,"start");a(OIe,"customFunctionsServer");a(PIe,"setUp");a(LIe,"buildRouteFolder");a(g3,"buildServer");a(S3,"ready")});var Hv={};ye(Hv,{handleApplication:()=>DIe,suppressHandleApplicationWarning:()=>vIe});function DIe(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,Ua.join)(n.absolutePath,"index.html");(0,nm.existsSync)(s)&&r[n.eventType==="addDir"?"set":"delete"](n.urlPath,s);break;case"add":t.set(n.urlPath,n.absolutePath),n.urlPath.endsWith("index.html")&&(r.set((0,Ua.dirname)(n.urlPath),null),r.set((0,Ua.join)((0,Ua.dirname)(n.urlPath),"/"),n.absolutePath));break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,Ua.dirname)(n.urlPath));break}}),e.server.http((n,s)=>{if(n.method!=="GET"||n.isWebSocket)return s(n);let i=e.options.get(["fallthrough"])??!0;if(typeof i!="boolean")throw new Error(`Invalid fallthrough option: ${i}. Must be a boolean.`);let o=t.get(n.pathname);if(!o){let d=e.options.get(["index"])??!0;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);if(d&&(o=r.get(n.pathname),o===null))return{status:301,headers:{Location:(0,Ua.join)(n.pathname,"/")}}}if(!o){let d=e.options.get(["extensions"])??[];if(!Array.isArray(d)||d.some(f=>typeof f!="string"))throw new Error(`Invalid extensions option: ${d}. Must be an array of strings.`);for(let f of d)if(o=t.get(`${n.pathname}.${f}`),o)break}if(o)return{handlesHeaders:!0,body:(0,kv.default)(n,(0,nm.realpathSync)(o))};if(i)return s(n);let c=e.options.get(["notFound"]);if(MIe(c),!c)return{status:404,body:"File not found"};let l=(0,Ua.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,nm.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,kv.default)(n,(0,nm.realpathSync)(l))}},{runFirst:!0})}function MIe(e){if(!(e===void 0||typeof e=="string")){if(typeof e=="object"&&e!==null&&!Array.isArray(e)){if(!("file"in e)||typeof e.file!="string")throw new Error(`Invalid \`notFound.file\` option: ${e.file}. Must be a string.`);if(!("statusCode"in e)||typeof e.statusCode!="number")throw new Error(`Invalid \`notFound.statusCode\` option: ${e.statusCode}. Must be a number.`);return}throw new Error(`Invalid notFound option: ${e}. Must be a string or an object with file and statusCode properties.`)}}var nm,Ua,kv,vIe,y3=se(()=>{nm=require("node:fs"),Ua=require("node:path"),kv=b(require("send"));a(DIe,"handleApplication");vIe=!0;a(MIe,"validateNotFoundOption")});var Gv={};ye(Gv,{start:()=>UIe});function UIe({override:e}){return{handleFile:a((t,r,n)=>{JR.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,R3.parse)(t))){if(process.env[s]!==void 0)if(JR.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)JR.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var R3,JR,b3=se(()=>{R3=require("dotenv"),JR=b(Q());a(UIe,"start")});var Vv={};ye(Vv,{DataLoaderError:()=>Cs,DataLoaderResult:()=>sm,EmptyFileError:()=>eb,FileParseError:()=>ZR,InvalidPropertyTypeError:()=>tb,MissingRequiredPropertyError:()=>JE,RecordProcessingError:()=>QE,SystemDatabaseError:()=>rb,UnsupportedFileExtensionError:()=>XR,computeRecordHash:()=>$v,handleApplication:()=>FIe,loadDataFile:()=>L3,suppressHandleApplicationWarning:()=>BIe});function $v(e){let t=Object.keys(e).sort(),r={};for(let s of t)r[s]=e[s];let n=JSON.stringify(r);return(0,I3.createHash)("sha256").update(n).digest("hex")}function P3(e){return e.system&&e.system[qv]?e.system[qv]:QR||(QR=ze({database:"system",table:qv,attributes:[{name:"id",type:"string",isPrimaryKey:!0},{name:"hash",type:"string"}]}),QR)}async function xIe(e,t,r,n){try{let s=P3(n),i=e?`${e}:${t}:${r}`:`${t}:${r}`;return(await s.get(i))?.hash||null}catch(s){return ri.error?.(`Failed to get stored hash: ${s.message}`),null}}async function A3(e,t,r,n,s){try{let i=P3(s),o=e?`${e}:${t}:${r}`:`${t}:${r}`;await i.put({id:o,hash:n})}catch(i){ri.error?.(`Failed to store hash: ${i.message}`)}}function FIe(e){if((0,N3.getWorkerIndex)()!==0){ri.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(a(function(r){return r.entryType!=="file"||r.eventType==="unlink"?Promise.resolve():L3(r,yn,Me).then(n=>{ri.debug?.("Data loader processed file: %s: %s",(0,xa.basename)(r.absolutePath),n.message)})},"handleDataLoaderEntry"))}async function L3({contents:e,absolutePath:t},r,n){let s=(0,xa.extname)(t)||"unknown",i;try{if(s===".yaml"||s===".yml")i=(0,w3.parseDocument)(e.toString()).toJSON();else if(s===".json")i=JSON.parse(e.toString());else throw new XR(t,s)}catch(d){throw d instanceof Cs?d:new ZR(t,d)}if(!i)throw new eb(t);let{database:o,table:c,records:l}=i;if(!c)throw new JE(t,"table");if(!l)throw new JE(t,"records");if(!Array.isArray(l))throw new tb(t,"records","array");let u=o?`${o}.${c}`:c;if(o?.toLowerCase()==="system")throw new rb(o,c);try{let d;if(o&&n[o]&&n[o][c])ri.debug?.(`Using existing table ${u} from database tables`),d=n[o][c];else if(r&&r[c])ri.debug?.(`Using existing table ${u} from global tables`),d=r[c];else{ri.debug?.(`Table ${u} not found, creating new table`);let _=[];if(l.length>0){let R=l[0];Object.keys(R).map(S=>{let y={name:S,type:typeof R[S]};return S==="id"&&(y.isPrimaryKey=!0),y}).forEach(S=>{_.push(S)})}d=await ze({database:o,table:c,attributes:_})}let f=l.length,m=0,p=0,h=0,E=100;for(let _=0;_<l.length;_+=E){let R=l.slice(_,_+E),S=[];for(let y of R)S.push(async()=>{try{let w=null,I=y.id;I!==void 0&&(w=await d.get(I));let H=$v(y);if(!w){m++;let z=await d.put(y);return await A3(o,c,I,H,n),z}let X=await xIe(o,c,I,n);if(!X)return h++,Promise.resolve({inserted:0,updated:0});let q={};for(let z of Object.keys(y))z in w&&(q[z]=w[z]);return $v(q)!==X?(h++,Promise.resolve({inserted:0,updated:0})):H!==X?(p++,await d.patch(I,y),await A3(o,c,I,H,n),{updated:1}):(h++,Promise.resolve({inserted:0,updated:0}))}catch(w){if(w instanceof Cs)ri.error?.(`Record processing error: ${w.message}`);else{let I=new QE(u,w);ri.error?.(`Record processing error: ${I.message}`)}return Promise.resolve({inserted:0,updated:0,error:w.message})}});await Promise.all(S.map(y=>y()))}if(m>0||p>0){let _=`Loaded ${m} new and updated ${p} records in ${u}`;return h>0&&(_+=` (${h} records skipped)`),ri.info?.(_),new sm(t,o,c,"success",m+p,_)}else if(h>0){let _=`All ${h} records in ${u} already up-to-date`;return ri.info?.(_),new sm(t,o,c,"skipped",f,_)}else{let _=`No records to process in ${u}`;return ri.info?.(_),new sm(t,o,c,"success",0,_)}}catch(d){throw d instanceof Cs?d:new QE(u,d)}}var xa,I3,w3,N3,Ba,C3,O3,ri,qv,QR,BIe,Cs,XR,ZR,eb,JE,tb,rb,QE,sm,D3=se(()=>{xa=require("node:path"),I3=require("node:crypto"),w3=require("yaml");Oe();N3=b(st()),Ba=b(Jr()),C3=b(Ee()),O3=b(Q()),ri=O3.default.forComponent("dataLoader"),qv="hdb_dataloader_hash";a($v,"computeRecordHash");a(P3,"getHashTrackingTable");a(xIe,"getStoredHash");a(A3,"storeHash");BIe=!0;a(FIe,"handleApplication");a(L3,"loadDataFile");Cs=class extends C3.ClientError{static{a(this,"DataLoaderError")}constructor(t,r=Ba.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},XR=class extends Cs{static{a(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,xa.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,Ba.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},ZR=class extends Cs{static{a(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,xa.basename)(t)}: ${r.message}`,Ba.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},eb=class extends Cs{static{a(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,xa.basename)(t)} is empty or invalid`,Ba.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},JE=class extends Cs{static{a(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,xa.basename)(t)} is missing required "${r}" property`,Ba.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},tb=class extends Cs{static{a(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,xa.basename)(t)} has invalid "${r}" property, expected ${n}`,Ba.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},rb=class extends Cs{static{a(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,Ba.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},QE=class extends Cs{static{a(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,Ba.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},sm=class{static{a(this,"DataLoaderResult")}#e;#t;#n;#r;#s;#i;constructor(t,r,n,s,i,o){this.#e=t,this.#t=r||"unknown",this.#n=n||"unknown",this.#r=s,this.#s=i,this.#i=o}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#n}get status(){return this.#r}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#n,status:this.#r,count:this.#s,message:this.#i}}}});var Kv={};ye(Kv,{calculateRestHttpURL:()=>V3,hdbServer:()=>qIe,start:()=>qIe});async function qIe(e){try{xi.default.debug("In Fastify server"+process.cwd()),xi.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),xi.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=v3.default.isMaster,await $Ie();let t=e.securePort>0;im=VIe(t,e.resources),await im.ready(),e||(e={}),e.isOperationsServer=!0;try{Ue.http(im.server,e),im.server.closeIdleConnections||await im.listen({port:0,host:"::"})}catch(r){throw im.close(),xi.default.error(r),xi.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),xi.default.fatal(t),process.exit(1)}}async function $Ie(){return xi.default.trace("Configuring HarperDB process."),G3.default.setSchemaDataToGlobal(),_i()}function VIe(e,t){xi.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let r=WIe(e),n=(0,M3.default)(r);n.server.headersTimeout=zIe(),n.setErrorHandler(Do.serverErrorHandler);let s=jIe();s&&n.register(U3.default,s),n.register(function(o,c,l){o.setNotFoundHandler(function(u,d){n.server.emit("unhandled",u.raw,d.raw)}),l()}),n.register(F3.default),n.register(x3.default),Vm(n),n.get("/health",()=>"HarperDB is running."),n.register(B3.default,{root:k3.default.join(H3.PACKAGE_ROOT,"studio/web")});let i=Bi.default.get(Tm.LOCAL_STUDIO_ON);return!q3.default.isEmpty(i)&&i.toString().toLowerCase()==="true"?n.get("/",(o,c)=>c.sendFile("index.html")):n.get("/",(o,c)=>c.sendFile("running.html")),n.get("/api/openapi/rest",{preValidation:[Do.authAndEnsureUserOnRequest]},KIe(t)),n.post("/",{preValidation:[Do.reqBodyValidationHandler,Do.authHandler],config:{isOperation:!0}},YIe),xi.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),n}function KIe(e){let t=Bi.default.get(x.HTTP_PORT),r=Bi.default.get(x.HTTP_SECUREPORT);return n=>n.hdb_user?.role?.permission?.super_user?GS(e,V3(t,r,n)):(xi.default.warn(`{"ip":"${n.socket.remoteAddress}", "error":"attempt to access /api/openapi/rest without being super_user"`),new $3.ServerError("Forbidden",403))}function V3(e,t,r){let n=new URL(`${r.protocol}://${r.hostname}`);return n.hostname.toLowerCase()==="localhost"||n.hostname.match(/^[\d.:]+$/)?t?(n.port=t,n.protocol="https:"):e&&(n.port=e,n.protocol="http:"):(n.port="443",n.protocol="https:"),n.toString()}function YIe(e,t){return e.body?.operation?.startsWith("restart")&&t.header("Connection","close"),(0,Do.handlePostRequest)(e,t)}function WIe(e){let t=Bi.default.get(om.OPERATIONSAPI_NETWORK_TIMEOUT),r=Bi.default.get(om.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:HIe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,http2:Bi.default.get(om.OPERATIONSAPI_NETWORK_HTTP2),https:e}}function jIe(){let e=Bi.default.get(om.OPERATIONSAPI_NETWORK_CORS),t=Bi.default.get(om.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===GIe)&&(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 zIe(){return Bi.default.get(om.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??kIe}var v3,Bi,xi,M3,U3,x3,B3,F3,k3,H3,G3,q3,Do,$3,kIe,HIe,GIe,om,im,K3=se(()=>{v3=b(require("cluster")),Bi=b(fe());G();xi=b(Q()),M3=b(require("fastify")),U3=b(require("@fastify/cors")),x3=b(require("@fastify/compress")),B3=b(require("@fastify/static")),F3=b(yC()),k3=b(require("path")),H3=b(yt()),G3=b(pi()),q3=b(ae());hs();Hr();Do=b(jR());Ko();EC();$3=b(Ee());Bi.default.initSync();kIe=6e4,HIe=1024*1024*1024,GIe="TRUE",{CONFIG_PARAMS:om}=j;a(qIe,"operationsServer");a($Ie,"setUp");a(VIe,"buildServer");a(KIe,"restOpenAPIHandler");a(V3,"calculateRestHttpURL");a(YIe,"handler");a(WIe,"getServerOptions");a(jIe,"getCORSOpts");a(zIe,"getHeaderTimeoutConfig")});var Qv={};ye(Qv,{disableNATS:()=>QIe,publishToStream:()=>ib,setNATSReplicator:()=>Yv,setPublishToStream:()=>XIe,setSubscription:()=>Jv,start:()=>JIe});function JIe(){XE.default.get(x.CLUSTERING_ENABLED)&&ewe()}function QIe(e=!0){J3=e}function XIe(e,t){ib=e,Jv=t}function ewe(){if(J3||process.env._DISABLE_NATS)return;let e=lt(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];Yv(s,r,i)}}Vl((r,n)=>{Yv(r.tableName,r.databaseName,r),n&&X3(r)}),!Y3&&(Y3=!0)}function Yv(e,t,r){if(t==="system"&&twe.includes(e))return;if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends Xt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){X3(i)}static subscribe(){let i=new ss;return Jv(t,e,i),i}static subscribeOnThisThread(i){return i<(XE.default.get(x.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??ZIe)}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 nb(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=Q3;return i}a(n,"getNATSTransaction")}function X3(e){let t=XE.default.get(x.CLUSTERING_NODENAME);ib(`${jv.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,zv.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 W3,jv,zv,j3,z3,XE,sb,J3,ib,Jv,ZIe,Q3,Y3,twe,nb,Wv,Z3=se(()=>{Oe();Qi();W3=b(_r()),jv=b(Dt()),zv=b(io());Vu();j3=b(jC()),z3=b(xn()),XE=b(fe());G();sb=b(Q());a(JIe,"start");a(QIe,"disableNATS");ib=W3.publishToStream,Jv=j3.setSubscription;a(XIe,"setPublishToStream");ZIe=2;a(ewe,"assignReplicationSource");twe=["hdb_job","hdb_raw_analytics","hdb_info"];a(Yv,"setNATSReplicator");a(X3,"publishSchema");nb=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=XE.default.get(x.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let o=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(sb.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=o)),l.table===f&&l.operation===m?(o.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(ib(`${jv.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,zv.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw sb.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},Wv=class extends nb{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,z3.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};Q3=new Wv});async function s6({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await Xv.get(e,{returnNonexistent:!0});i=new tM(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await Xv.get(e);o&&o.delete()}i=new ab(e,t)}return n&&(n.id=e,n.user={username:t?.username},ZE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function Zv(){return ob++,ob>65500&&(ob=1),ob}function eM(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=Bs.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=new xs(i.relativeURL);o.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return bt(r,()=>s?t===void 0?c.delete(o,r):c.put(o,e.data,r):c.publish(o,e.data,r))}var t6,Wc,r6,n6,e6,Xv,ZE,ob,ab,tM,i6=se(()=>{Oe();sc();t6=b(xn()),Wc=b(Q());Qa();r6=b(st()),n6=b(XL());Hr();Dg();e6=100,Xv=ze({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),ZE=ze({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,r6.getWorkerIndex)()===0&&(async()=>{await n6.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of ZE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Ue.getUser(r.user.username));try{await eM(r,t,r)}catch{(0,Wc.warn)("Failed to publish will",t)}ZE.delete(e.id)}})();a(s6,"getSession");ob=1;a(Zv,"getNextMessageId");ab=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(S=>S.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:o,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};o&&(0,Wc.trace)("Resuming subscription from",s,"from",o);let p=Bs.getMatch(u,"mqtt");if(!p){let S=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw S.statusCode=404,S}m.url=p.relativeURL;let h;if(m.url.indexOf("+")>-1||(h=m.url.indexOf("#"))>-1){let S=m.url.slice(1);if(h--,h>-1&&h!==S.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,S.indexOf("+")===S.length-1)m.onlyChildren=!0,m.url="/"+S.slice(0,S.length-1);else{let y=S.split("/"),w;for(let X=0;X<y.length;X++)if(y[X].indexOf("+")>-1)if(y[X]==="+")w=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&w)throw new Error("Filters can not be combined");let I=!0;y[y.length-1]==="#"&&(y.length--,I=!1),w&&(n=a(X=>{let q=X.id;if(!Array.isArray(q))if(q?.indexOf?.("/")>-1)q=q.split("/");else return!1;if(I&&q.length!==y.length)return!1;for(let k=0;k<y.length;k++)if(y[k]!=="+"&&y[k]!==q[k])return!1;return!0},"filter"));let H=y.indexOf("+");m.url="/"+(H>-1?y.slice(0,H):y).concat("").join("/")}}else m.isCollection=!1;let E=p.path,_=p.Resource,R=await bt(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let y=await _.subscribe(m,S);if(!y)return;if(!y[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let w=(async()=>{for await(let I of y)try{let H;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,H=this.needsAcknowledge(I)):(I.acknowledge?.(),H=Zv());let X=I.id;if(Array.isArray(X)&&(X=ld(X)),X==null&&(X=""),await this.listener(E+"/"+X,I.value,H,t)===!1)break;this.awaitingAcks?.size>e6?await new Promise(k=>setTimeout(k,this.awaitingAcks.size-e6)):await new Promise(setImmediate)}catch(H){(0,Wc.warn)(H)}})();return y});if(R)return R.topic=s,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=Zv();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 eM(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();bt(r,async()=>{try{if(!t){let n=await ZE.get(this.sessionId);n?.doesExist()&&await eM(n,n.data,r)}}finally{await ZE.delete(this.sessionId)}}).catch(n=>{(0,Wc.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};a(eM,"publish");tM=class extends ab{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=Zv(),n={topic:t.topic,timestamp:t.localTime};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Wc.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,t6.getNextMonotonicTime)()),(0,Wc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),Xv.put(this.sessionRecord)}}});var rM={};ye(rM,{bypassAuth:()=>rwe,start:()=>swe});function rwe(){d6=!0}function swe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new u6.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);o.events.emit("connection",u),rr.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=a6(u,E=>{u.send(E)},d,Promise.resolve(f).then(()=>d?.user),o);u.on("message",p),u.on("close",h),u.on("error",E=>{rr.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(o.events.emit("connection",u),rr.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let p=u.getPeerCertificate(!0);if(p?.subject){let E=await pf(p,l);if(!E.valid)throw rr.error?.("Certificate verification failed:",E.status,"for",p.subject.CN),new Error("Certificate revoked or verification failed")}let h=l.user;if(h!==null){(h===void 0||h==="Common Name"||h==="CN")&&(h=u.getPeerCertificate().subject.CN);try{d=await e.getUser(h,null,null),(0,am.get)(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&lb.notify?.({username:d?.username,status:oi.SUCCESS,type:Ya.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,am.get)(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&lb.error?.({username:h,status:oi.FAILURE,type:Ya.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else rr.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){o.events.emit("error",p,u),rr.error?.(p)}else if(l.required)return rr.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&nwe(u.remoteAddress)&&(d=await Gp(),rr.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=a6(u,p=>u.write(p),null,d,o);u.on("data",f),u.on("close",m),u.on("error",p=>{rr.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function a6(e,t,r,n,s){o6||(o6=!0,ap(f=>{cb>0&&f.push({metric:"mqtt-connections",connections:cb,byThread:!0})}));let i;cb++;let o,c={protocolVersion:4},l=(0,ub.parser)({protocolVersion:5});function u(f){l.parse(f)}a(u,"onMessage");function d(){cb--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),tn(!1,"connection","mqtt","disconnect"),rr.debug?.("MQTT connection was closed",e.remoteAddress))}return a(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(y){e.close?.(1008,"Unauthorized"),rr.info?.(y);return}let m=f.cmd;if(o)o.then&&await o;else if(m!=="connect"){rr.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let p=f.topic,h=p?.indexOf("/",1),E=h>0?p.slice(0,h):p;We(f.length,"bytes-received",E,R(f),"mqtt");try{switch(o?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Ue.getUser(f.username,f.password.toString(),r),(0,am.get)(x.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&lb.notify?.({username:n?.username,status:oi.SUCCESS,type:Ya.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(z){return(0,am.get)(x.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&lb.error?.({username:f.username,status:oi.FAILURE,type:Ya.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,z),tn(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),tn(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let z=e.deserialize||(e.deserialize=Vo(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?z(f.will.payload):void 0,delete f.will.payload}o=s6({user:n,...f}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(z){return rr.error?.(z),s.events.emit("auth-failed",f,e,z),tn(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:z.code||5,returnCode:z.code||128})}s.events.emit("connected",o,e),tn(!0,"connection","mqtt","connect"),_({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0});let y=a(async(z,Y,ce,de)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",z);let te=z.indexOf("/",1),Se=te>0?z.slice(0,te):z;_({cmd:"publish",topic:z,payload:await S(Y),messageId:ce||Math.floor(Math.random()*1e8),qos:de.qos},Se);let Ne=e._socket??e;return Ne.writableNeedDrain?new Promise(Ke=>Ne.once("drain",Ke)):!Ne.closed}catch(te){return rr.error?.(te),o?.disconnect(),s.sessions.delete(o),!1}},"listener");o.setListener(y),o.sessionWasPresent&&await o.resume();break;case"subscribe":let w=[];for(let z of f.subscriptions){let Y;try{let ce=await o.addSubscription(z,z.qos>=1);Y=ce?ce.qos||0:c.protocolVersion<5?128:143}catch(ce){s.events.emit("error",ce,e,z,o),ce.statusCode?ce.statusCode===500?rr.warn?.(ce):rr.info?.(ce):rr.error?.(ce),Y=c.protocolVersion<5?128:ce.statusCode===403?135:ce.statusCode===404?143:128}w.push(Y)}await o.committed,_({cmd:"suback",granted:w,messageId:f.messageId});break;case"unsubscribe":{let z=[];for(let Y of f.unsubscriptions)z.push(o.removeSubscription(Y)?0:17);_({cmd:"unsuback",granted:z,messageId:f.messageId});break}case"pubrel":_({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let I=f.qos===2?"pubrec":"puback",H=e.deserialize||(e.deserialize=Vo(r?.headers.get?.("content-type"))),q=(f.payload?.length||0)>0?H(f.payload):void 0,k;try{k=await o.publish(f,q)}catch(z){s.events.emit("error",z,e,f,o),rr.warn?.(z),f.qos>0&&_({cmd:I,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&_({cmd:I,messageId:f.messageId,reasonCode:k===!1?144:0},f.topic);break;case"pubrec":_({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(f.messageId);break;case"pingreq":_({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),tn(!0,"connection","mqtt","disconnect"),rr.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(y){s.events.emit("error",y,e,f,o),rr.error?.(y),_({cmd:"disconnect"})}function _(y,w){let I=(0,ub.generate)(y,c);t(I),We(I.length,"bytes-sent",w,R(y),"mqtt")}a(_,"sendPacket");function R(y){return y.qos>0?y.cmd+",qos="+y.qos:y.cmd}a(R,"packetMethodName");function S(y){return $o(y,r)}a(S,"serialize")}),l.on("error",f=>{rr.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var ub,am,c6,l6,u6,lb,rr,d6,nwe,o6,cb,f6=se(()=>{ub=require("mqtt-packet");i6();hs();Ko();os();Hr();am=b(fe());G();c6=b(ir()),l6=b(Q()),u6=require("events");YT();lb=(0,c6.loggerWithTag)("auth-event"),rr=(0,l6.forComponent)("mqtt"),d6=(0,am.get)(x.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(rwe,"bypassAuth");nwe=a(e=>d6&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");a(swe,"start");cb=0;a(a6,"onSocket")});function db(e,t){if(t?.includes(".."))throw new nM(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var nM,sM=se(()=>{nM=class extends Error{static{a(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};a(db,"resolveBaseURLPath")});function m6(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(o=>o[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var p6=se(()=>{a(m6,"deriveCommonPatternBase")});function fb(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=a((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var iM=se(()=>{a(fb,"deriveGlobOptions")});var h6,oM,e_,E6=se(()=>{sM();p6();iM();h6=require("micromatch"),oM=class extends Error{static{a(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},e_=class{static{a(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=db(this.name,this.config.urlPath),this.globOptions=fb(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new oM(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,h6.scan)(s).base),this.commonPatternBase=m6(this.patternBases)}}});function _6(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function Pu(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(_6(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(_6(n,t)){t=t.slice(n.length+1);break}}}return(0,g6.join)(e.baseURLPath,t)}var g6,aM=se(()=>{g6=require("node:path");a(_6,"pathStartsWithBase");a(Pu,"deriveURLPath")});function S6(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var pb,T6,y6,cM,R6,b6,mb,A6=se(()=>{pb=require("node:events");E6();T6=b(Q()),y6=b(require("chokidar")),cM=require("node:path"),R6=require("node:fs/promises");aM();b6=require("micromatch"),mb=class extends pb.EventEmitter{static{a(this,"EntryHandler")}#e;#t;#n;#r;#s;ready;constructor(t,r,n,s){super(),this.#e=new e_(t,r,S6(n)),this.#n=s||T6.default.loggerWithTag(t),this.#r=new Set,this.#s=!1,this.ready=(0,pb.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#i(...[t,r,n]){if(r===""&&(r="/"),!(0,b6.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,cM.join)(this.directory,r);switch(t){case"add":case"change":{let i=Pu(this.#e,r,"file"),o=(0,R6.readFile)(s).then(c=>{let l={eventType:t,entryType:"file",contents:c,stats:n,absolutePath:s,urlPath:i};this.emit("all",l),this.emit(t,l)}).finally(()=>{this.#r.delete(o),this.#c()});this.#r.add(o);break}case"unlink":{let i=Pu(this.#e,r,"file"),o={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",o),this.emit(t,o);break}case"addDir":case"unlinkDir":{let i=Pu(this.#e,r,"directory"),o={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",o),this.emit(t,o);break}}}#o(t){this.emit("error",t)}#u(){this.#s=!0,this.#r.size>0&&this.#n.debug?.(`Initial scan complete, still waiting for ${this.#r.size} pending file reads`),this.#c()}#c(){this.#s&&this.#r.size===0&&this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,cM.join)(this.#e.directory,r));return this.#t=y6.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:a(r=>{let n=r.replace(/\\/g,"/"),s=t.map(i=>i.replace(/\\/g,"/"));return n!==this.#e.directory.replace(/\\/g,"/")&&s.every(i=>!n.startsWith(i))},"ignored")}).on("all",this.#i.bind(this)).on("error",this.#o.bind(this)).on("ready",this.#u.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new e_(this.name,this.directory,S6(t)),this.#a()}};a(S6,"castConfig")});var hb,lM=se(()=>{hb={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var _b,I6,w6,N6,C6,O6,uM,dM,fM,mM,pM,Eb,P6=se(()=>{_b=require("events"),I6=b(require("yaml")),w6=b(require("chokidar")),N6=require("node:fs/promises"),C6=require("util"),O6=b(Q());lM();uM=class extends Error{static{a(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},dM=class extends Error{static{a(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},fM=class extends Error{static{a(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},mM=class extends Error{static{a(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},pM=class extends Error{static{a(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},Eb=class extends _b.EventEmitter{static{a(this,"OptionsWatcher")}#e;#t;#n;#r;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||O6.default.loggerWithTag(t),this.ready=(0,_b.once)(this,"ready"),this.#t=w6.default.watch(r,{persistent:!1}).on("add",this.#o.bind(this)).on("change",this.#o.bind(this)).on("error",this.#u.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#o.bind(this))}#o(){(0,N6.readFile)(this.#e,"utf-8").then(t=>{this.#r=I6.default.parse(t),this.#r&&this.#s in this.#r?this.#n?this.#l(this.#r[this.#s],this.#n):(this.#n=this.#r[this.#s],this.emit("ready",this.#n)):this.#n&&(this.#n=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#r?(this.#a(),this.emit("remove")):(this.#a(),this.emit("ready"));return}this.emit("error",t)})}#u(t){this.emit("error",new uM(this.#e,t))}#c(t){this.#i.warn(`Configuration file ${t} was deleted. Reverting to default configuration. Recreate it to restore the options watcher.`),this.#a(),this.emit("remove")}#a(){this.#r=hb,this.#n=this.#r[this.#s]}#l(t,r,n=[]){if(!this.#d(r)||!this.#d(t)){this.#m(n,t);return}for(let s of Object.keys(r))s in t||this.#m(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let o=n.concat(s),c=this.#f(o);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#m(o,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#d(c)?this.#l(i,c,o):this.#m(o,i);continue}(0,C6.isDeepStrictEqual)(i,c)||this.#m(o,i)}}#d(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#f(t){let r=this.#n;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#m(t,r){if(!this.#n)throw new dM;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new fM(t,r);let n=this.#n;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new mM(t,s);n=n[s]}if(n==null||typeof n!="object")throw new pM(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#n)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#n?this.#f(t):void 0}getAll(){return structuredClone(this.#n)}getRoot(){return this.#r}}});var t_,L6,gb,Sb,D6=se(()=>{t_=require("node:events");A6();P6();L6=b(Q());MD();gb=class extends Error{static{a(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},Sb=class extends t_.EventEmitter{static{a(this,"Scope")}#e;#t;#n;#r;#s;#i;#o;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#n=t,this.#t=r,this.#e=n,this.#i=(0,L6.loggerWithTag)(this.#n),this.resources=s,this.server=i,this.#s=[],this.#o=new Set,this.ready=(0,t_.once)(this,"ready"),this.options=new Eb(t,n,this.#i).on("error",this.#c.bind(this)).on("change",this.#d.bind(this)()).on("ready",this.#u.bind(this))}get logger(){return this.#i}get name(){return this.#n}get directory(){return this.#t}get configFilePath(){return this.#e}#u(){this.emit("ready")}#c(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#a(t){let r=new mb(this.#n,this.#t,t,this.#i).on("error",this.#c.bind(this)).on("add",this.#l("add")).on("change",this.#l("change")).on("unlink",this.#l("unlink")).on("addDir",this.#l("addDir")).on("unlinkDir",this.#l("unlinkDir"));return this.#s.push(r),r}#l(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#d(){let t=this;return a(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#r){t.#r=t.#a(i);return}t.#r.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#f(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return{files:t.files,urlPath:t.urlPath}}handleEntry(t,r){let n,s=a((i,o)=>{let c=new Set,l=a(d=>{let f=o(d);if(f instanceof Promise){let m=f.catch(p=>{throw this.#i.error?.("Error in async entry handler:",p),this.#c(p),p}).finally(()=>c.delete(m));c.add(m)}},"wrapped"),u=(0,t_.once)(i,"ready").then(async()=>{c.size>0&&await Promise.all(c),i.emit("initialLoadComplete")});return this.#o.add(u),u.finally(()=>this.#o.delete(u)),l},"wrapHandler");if(t===void 0)if(this.#r)n=this.#r;else{let i=this.#f();if(i)this.#r=this.#a(i),n=this.#r;else{this.emit("error",new gb);return}}else if(typeof t=="function"){if(this.#r)n=this.#r;else{let o=this.#f();if(o)this.#r=this.#a(o),n=this.#r;else{this.emit("error",new gb);return}}let i=s(n,t);n.on("all",i)}else if(n=this.#a(t),r){let i=s(n,r);n.on("all",i)}return n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),j2()}async waitForInitialLoads(){this.#o.size>0&&await Promise.all(this.#o)}}});function Lu(e){return typeof e=="string"&&e.trim()!==""}function hM(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>Lu(t))}function x6(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function iwe(e){e.config.root&&r_.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 RM(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(x6(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let o=(0,n_.join)(e.directory,i);Tb.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,o,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,o,e.resources))}return s}async function B6(e){let t=!1;if(t=await iwe(e),t)return t;let r=await(0,v6.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,n_.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=Pu(e,n.path,"directory");Tb.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=Pu(e,n.path,"file"),o=await(0,M6.readFile)(s);Tb.isMainThread&&e.module.setupFile?(await e.module.setupFile(o,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(o,i,s,e.resources),t=!0)}else r_.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var Tb,v6,r_,n_,M6,U6,yb,Fi,EM,_M,gM,SM,TM,yM,RM,bM,AM,F6=se(()=>{Tb=require("node:worker_threads"),v6=b(require("fast-glob")),r_=b(Q());sM();iM();n_=require("node:path"),M6=require("node:fs/promises");aM();U6=require("micromatch"),yb=class{static{a(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!Lu(this.config.files)&&!hM(this.config.files)&&!x6(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||!hM(this.config.files.source)&&!Lu(this.config.files.source))throw new _M(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new gM(this);if(this.config.files.ignore!==void 0&&!hM(this.config.files.ignore)&&!Lu(this.config.files.ignore))throw new SM(this)}if(this.config.root!==void 0&&!Lu(this.config.root))throw new yM(this);if(this.config.path!==void 0&&!Lu(this.config.path))throw new bM(this);if(this.config.path&&(r_.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!Lu(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new AM(this);this.globOptions=fb(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new TM(this,r);return r.startsWith("/")&&(r_.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,U6.scan)(r).base),this.baseURLPath=db(this.name,this.config.urlPath)}},Fi=class extends Error{static{a(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,n_.basename)(r.directory)}) ${t}`)}},EM=class extends Fi{static{a(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},_M=class extends Fi{static{a(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},gM=class extends Fi{static{a(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},SM=class extends Fi{static{a(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},TM=class extends Fi{static{a(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},yM=class extends Fi{static{a(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},RM=class extends Fi{static{a(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},bM=class extends Fi{static{a(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},AM=class extends Fi{static{a(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};a(Lu,"isNonEmptyString");a(hM,"isArrayOfNonEmptyStrings");a(x6,"isObject");a(iwe,"handleRoots");a(B6,"processResourceExtensionComponent")});var iR={};ye(iR,{getComponentName:()=>rR,loadComponent:()=>Ib,loadComponentDirectories:()=>q6,setErrorReporter:()=>awe});function q6(e,t){t&&(wM=t),e&&(PM=e);let r=[];if((0,jt.existsSync)(IM)){let s=(0,jt.readdirSync)(IM,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Wr.join)(IM,o);r.push(Ib(c,wM,Qb,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Ib(n,wM,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{G6=!0})}function awe(e){bb=e}function cwe(e){return new Promise((t,r)=>{let n=setTimeout(()=>{Da.primaryStore.unlock(e,0),r(new Error("symlinking harperdb module timed out"))},1e4);if(Da.primaryStore.attemptLock(e,0,()=>{clearTimeout(n),t()}))try{let s=(0,Wr.join)(e,"node_modules");(0,jt.existsSync)(s)||(0,jt.mkdirSync)(s);let i=(0,Wr.join)(s,"harperdb");if((0,jt.existsSync)(i)){if((0,jt.realpathSync)(i)===(0,jt.realpathSync)(OM.PACKAGE_ROOT))return t();(0,jt.rmSync)(i,{recursive:!0,force:!0})}(0,jt.symlinkSync)(OM.PACKAGE_ROOT,i,"dir"),t()}finally{Da.primaryStore.unlock(e,0)}})}function $6(e,t){return e.ready.then(()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.name}. Expected a number, received: ${typeof r}`);let n,s;if(!Da.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n($6(e,t))}))return new Promise((o,c)=>{n=o,s=setTimeout(()=>{c(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)});let i;return Promise.race([Promise.resolve(t.handleApplication(e)).then(async()=>{await e.waitForInitialLoads()}),new Promise((o,c)=>i=setTimeout(()=>c(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{Da.primaryStore.unlock(e.name,0),clearTimeout(i)})})}async function Ib(e,t,r,n,s,i){let o=(0,jt.realpathSync)(e);if(Rb.has(o))return Rb.get(o);Rb.set(o,!0),s&&(PM=s);try{let c,l=(0,Wr.join)(e,"harperdb-config.yaml");if((0,jt.existsSync)(l)?c=n?(0,wb.getConfigObj)():(0,CM.parseDocument)((0,jt.readFileSync)(l,"utf8")).toJSON():!n&&(0,jt.existsSync)(l=(0,Wr.join)(e,"config.yaml"))?c=(0,CM.parseDocument)((0,jt.readFileSync)(l,"utf8")).toJSON():c=hb,!n)try{await cwe(e)}catch(m){Fa.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&Fa.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=Ab,d={};for(let m in c){let p=n?m:`${(0,Wr.basename)(e)}.${m}`;Ab=m;let h=c[m];if(!h)continue;lo.loading(p);let E,_=h.package;try{if(_){let I=null;if(n)I=(0,Wr.join)(e,"components",m);else{let H=e;for(I=(0,Wr.join)(H,"node_modules",m);!(0,jt.existsSync)(I);){if(H=(0,Wr.dirname)(H),H.length<(0,H6.getHdbBasePath)().length){I=null;break}I=(0,Wr.join)(H,"node_modules",m)}}if(I)E=await Ib(I,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${_}`)}else E=owe[m];if(!E){lo.loaded(p,`Application component '${p}' processed`);continue}let R=a(I=>(I.origin=r,ze(I)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,y=S?.securePort||S?.https&&S.port,w=!S?.https&&S?.port;if("handleApplication"in E&&("start"in E||"startOnMainThread"in E||"handleFile"in E||"handleDirectory"in E||"setupFile"in E||"setupDirectory"in E)){let I=new Error(`Plugin ${m} is exporting old extension APIs. Remove them.`);throw lo.failed(p,I,`Component '${p}' failed to load`),I}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&Fa.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let I=new Sb(m,e,l,t,Ue);await $6(I,E),lo.loaded(p,`Component '${p}' loaded successfully`);continue}if(NM.isMainThread&&(E=await E.startOnMainThread?.({server:Ue,ensureTable:R,port:w,securePort:y,resources:t,...h})||E,n&&S))for(let I of[w,y])try{if(+I&&!k6.includes(I)){let H=LM.get(x.HTTP_SESSIONAFFINITY);H&&Fa.default.warn("Session affinity is not recommended and may cause memory leaks"),(H||!qS)&&(k6.push(I),rD(I,H))}}catch(H){console.error("Error listening on socket",I,H,m)}if(t.isWorker&&(E=await E.start?.({server:Ue,ensureTable:R,port:w,securePort:y,resources:t,...h})||E),PM.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let I=new yb({config:h,name:m,directory:e,module:E,resources:t});d[m]=await B6(I)}lo.loaded(p,`Component '${p}' loaded successfully`)}catch(R){R.message=`Could not load component '${m}' for application '${(0,Wr.basename)(e)}' due to: ${R.message}`,bb?.(R),((0,s_.getWorkerIndex)()===0?console:Fa.default).error(R),t.set(h.path||"/",new bl(R),null,!0),lo.failed(p,R,`Could not load component '${p}'`)}}if(Ab=u,NM.isMainThread&&!G6&&i&&(0,s_.watchDir)(e,async()=>q6()),c.extensionModule||c.pluginModule){let m=await FS((0,Wr.join)(e,c.extensionModule||c.pluginModule));return Rb.set(o,m),m}let f=Object.values(d);if(f.length>0&&f.every(m=>!m)&&t.isWorker){let m=`${e} did not load any modules, resources, or files, is this a valid component?`;bb?.(new Error(m)),((0,s_.getWorkerIndex)()===0?console:Fa.default).error(m),lo.failed((0,Wr.basename)(e),m)}for(let[m,p]of Object.entries(d))p||Fa.default.warn(`Component ${m} from (${(0,Wr.basename)(e)}) did not load any functionality.`)}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,bb?.(c),t.set("",new bl(c))}}var jt,Wr,NM,CM,LM,OM,Fa,s_,H6,wb,IM,PM,G6,wM,owe,k6,Rb,bb,Ab,rR,_E=se(()=>{jt=require("node:fs"),Wr=require("node:path"),NM=require("node:worker_threads"),CM=require("yaml"),LM=b(fe()),OM=b(yt());G();Xq();c$();R$();O$();P$();K$();T3();y3();b3();Fa=b(Q());D3();s_=b(st());lC();Hr();Oe();sD();H6=b(fe());K3();hR();Z3();gs();f6();wb=b(_t());lh();OI();D6();F6();JL();LE();Vp();lM();IM=(0,wb.resolvePath)(LM.get(x.COMPONENTSROOT)),PM=new Map;a(q6,"loadComponentDirectories");owe={REST:VS,rest:VS,graphql:tC,graphqlSchema:ZN,roles:cC,jsResource:uC,fastifyRoutes:Fv,login:fC,static:Hv,operationsApi:Kv,customFunctions:{},http:tR,clustering:Qv,replication:ca,authentication:AE,mqtt:rM,loadEnv:Gv,logging:Fa.default,dataLoader:Vv},k6=[],Rb=new Map;a(awe,"setErrorReporter");rR=a(()=>Ab,"getComponentName");a(cwe,"symlinkHarperModule");a($6,"sequentiallyHandleApplication");a(Ib,"loadComponent")});var oR=M((MVe,V6)=>{var{isMainThread:DM}=require("worker_threads"),{getTables:lwe}=(Oe(),D(mt)),{loadComponentDirectories:uwe,loadComponent:dwe}=(_E(),D(iR)),{resetResources:fwe}=(sc(),D(PI)),mwe=_t(),{dirname:pwe}=require("path"),{getConnection:hwe}=_r(),Ewe=fe(),{CONFIG_PARAMS:_we}=(G(),D(j)),{loadCertificates:gwe}=Ts(),{installApplications:Swe}=(bR(),D(RR)),{loadAndWatchLicensesDir:Twe}=(fE(),D(zy)),vM=new Map;async function ywe(e=!1){!DM&&Ewe.get(_we.CLUSTERING_ENABLED)&&hwe();try{DM&&await Swe()}catch(n){console.error(n)}let t=fwe();lwe(),t.isWorker=e,DM&&Twe(),await gwe(),await dwe(pwe(mwe.getConfigFilePath()),t,"hdb",!0,vM),await uwe(vM,t);let r=[];for(let[n]of vM)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(ywe,"loadRootComponents");V6.exports.loadRootComponents=ywe});var st=M((xVe,Hi)=>{"use strict";yA();var{Worker:Rwe,MessageChannel:bwe,parentPort:vo,isMainThread:FM,threadId:Awe,workerData:Mo}=require("worker_threads"),{PACKAGE_ROOT:Iwe}=yt(),{join:j6,isAbsolute:wwe,extname:Nwe}=require("path"),{server:z6}=(Hr(),D(bm)),{watch:Cwe,readdir:Owe}=require("fs/promises"),{totalmem:K6}=require("os"),{setHeapSnapshotNearHeapLimit:Pwe}=require("v8"),jc=(G(),D(j)),Ob=fe(),ki=Q(),{randomBytes:Lwe}=require("crypto"),{_assignPackageExport:Dwe}=ai(),Y6=1024*1024,ka=[],ni=[],vwe=50,kM=1e4,Mwe="restart",J6="request_thread_info",Q6="resource_report",X6="thread_info",Z6="added-port",Uwe="ack",MM;Dwe("threads",ni);Hi.exports={startWorker:UM,restartWorkers:GM,shutdownWorkers:iX,shutdownWorkersNow:Hwe,workers:ka,setMonitorListener:jwe,onMessageFromWorkers:Gwe,onMessageByType:aX,broadcast:$we,broadcastWithAcknowledgement:Kwe,setChildListenerByType:kwe,getWorkerIndex:eX,getWorkerCount:tX,getTicketKeys:nX,setMainIsWorker:Bwe,setTerminateTimeout:xwe,restartNumber:Mo?.restartNumber||1};ni.onMessageByType=aX;ni.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=ni.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Hi.exports.whenThreadsStarted=new Promise(e=>{Hi.exports.threadsHaveStarted=e});Ob.get(jc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&Pwe(1);var HM;function xwe(e){kM=e}a(xwe,"setTerminateTimeout");function eX(){return Mo?Mo.workerIndex:HM?0:void 0}a(eX,"getWorkerIndex");function tX(){return Mo?Mo.workerCount:HM?1:void 0}a(tX,"getWorkerCount");function Bwe(e){HM=e,Hi.exports.threadsHaveStarted()}a(Bwe,"setMainIsWorker");var rX=1,Nb;function nX(){return Nb||(Nb=FM?Lwe(48):Mo.ticketKeys,Nb)}a(nX,"getTicketKeys");Object.defineProperty(z6,"workerIndex",{get(){return eX()}});Object.defineProperty(z6,"workerCount",{get(){return tX()}});var sX={[J6](e,t){Ywe(t)},[Q6](e,t){Wwe(t,e)}};function UM(e,t={}){let r=process.constrainedMemory?.()||K6();r=Math.min(r,K6(),2e4*Y6);let n=Ob.get(jc.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/Y6/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let u of ni){let d=new bwe;d.existingPort=u,i.push(d),o.push(d.port2)}Nwe(e)||(e+=".js");let c=["--enable-source-maps","--expose-internals"];Ob.get(jc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&c.push("--heapsnapshot-near-heap-limit=1");let l=new Rwe(wwe(e)?e:j6(Iwe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:c,argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:rX=t.threadCount,name:t.name,restartNumber:Hi.exports.restartNumber,ticketKeys:nX()},transferList:o,...t});for(let{port1:u,existingPort:d}of i)d.postMessage({type:Z6,port:u,threadId:l.threadId},[u]);return Pb(l,!0),l.unexpectedRestarts=t.unexpectedRestarts||0,l.startCopy=()=>UM(e,t),l.on("error",u=>{ki.error(`Worker index ${t.workerIndex} error:`,u)}),l.on("exit",u=>{ka.splice(ka.indexOf(l),1),!l.wasShutdown&&t.autoRestart!==!1&&(l.unexpectedRestarts<vwe?(t.unexpectedRestarts=l.unexpectedRestarts+1,UM(e,t)):ki.error(`Thread has been restarted ${l.restarts} times and will not be restarted`))}),l.on("message",u=>{sX[u.type]?.(u,l)}),ka.push(l),Jwe(),t.onStarted&&t.onStarted(l),l.name=t.name,l}a(UM,"startWorker");var Fwe=[jc.THREAD_TYPES.HTTP];async function GM(e=null,t=Math.max(rX>3,1),r=!0){if(FM){try{process.chdir(process.cwd())}catch(o){ki.error("Unable to reestablish current working directory",o)}if(r){let{loadRootComponents:o}=oR();await o()}Hi.exports.restartNumber++,t<1&&(t=t*ka.length);let n=[],s=[];for(let o of ka.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;ki.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Hi.exports.restartNumber,type:jc.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Fwe.indexOf(o.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{ki.warn("Thread did not voluntarily terminate, terminating from the outside",o.threadId),o.terminate()},kM*2).unref();o.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),u()})});if(n.push(l),c&&r){let u=o.startCopy(),d=new Promise(f=>{let m=a(p=>{p.type===jc.ITC_EVENT_TYPES.CHILD_STARTED&&(ki.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");ki.trace("Waiting for worker to start",u.threadId),u.on("message",m)});s.push(d),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=jf();r&&(e==="http"||!e)&&Ob.get(jc.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else vo.postMessage({type:Mwe,workerType:e})}a(GM,"restartWorkers");function kwe(e,t){sX[e]=t}a(kwe,"setChildListenerByType");function iX(e){return GM(e,1/0,!1)}a(iX,"shutdownWorkers");function Hwe(e){return iX(e),Promise.all(ka.map(t=>t.terminate()))}a(Hwe,"shutdownWorkersNow");var oX=[];function Gwe(e){oX.push(e)}a(Gwe,"onMessageFromWorkers");var xM=new Map;function aX(e,t){let r=xM.get(e);r||xM.set(e,r=[]),r.push(t)}a(aX,"onMessageByType");var qwe=10;async function $we(e,t){let r=0;for(let n of ni)try{n.postMessage(e),r++>qwe&&(r=0,await new Promise(setImmediate))}catch(s){ki.error("Unable to send message to worker",s)}t&&lX(e,null)}a($we,"broadcast");var Cb=new Map,Vwe=1;function Kwe(e){return new Promise(t=>{let r=0;for(let n of ni)try{let s=Vwe++,i=a(()=>{Cb.delete(s),--r===0&&t(),n!==vo&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Cb.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of Cb)o.port===n&&o()})),n.postMessage(e),r++}catch(s){ki.error("Unable to send message to worker",s)}r===0&&t()})}a(Kwe,"broadcastWithAcknowledgement");function Ywe(e){e.postMessage({type:X6,workers:cX()})}a(Ywe,"sendThreadInfo");function cX(){let e=Date.now();return ka.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(cX,"getChildWorkerInfo");function Wwe(e,t){e.resources=t,e.resources.updated=Date.now()}a(Wwe,"recordResourceReport");var BM;function jwe(e){BM=e}a(jwe,"setMonitorListener");var zwe=1e3,W6=!1;function Jwe(){W6||(W6=!0,setInterval(()=>{for(let e of ka){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}BM&&BM()},zwe).unref())}a(Jwe,"startMonitoring");var Qwe=1e3;if(vo&&Mo?.addPorts){Pb(vo);for(let e=0,t=Mo.addPorts.length;e<t;e++){let r=Mo.addPorts[e];r.threadId=Mo.addThreadIds[e],Pb(r)}setInterval(()=>{let e=process.memoryUsage();vo.postMessage({type:Q6,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Qwe).unref(),MM=a(()=>new Promise((e,t)=>{vo.on("message",r),vo.postMessage({type:J6});function r(n){n.type===X6&&(vo.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else MM=cX;Hi.exports.getThreadInfo=MM;function Pb(e,t){ni.push(e),e.on("message",r=>{if(r.type===Z6)r.port.threadId=r.threadId,Pb(r.port);else if(r.type===Uwe){let n=Cb.get(r.id);n&&n()}else lX(r,e)}).on("close",()=>{ni.splice(ni.indexOf(e),1)}).on("exit",()=>{ni.splice(ni.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Pb,"addPort");function lX(e,t){for(let n of oX)n(e,t);let r=xM.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){ki.error(s)}}a(lX,"notifyMessageListeners");if(FM){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await Owe(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(j6(s,o.name));try{for await(let{filename:o}of Cwe(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await GM(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(o){console.warn("Error trying to watch component directory",s,o)}},"watchDir");Hi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else vo.on("message",async e=>{let{type:t}=e;t===jc.ITC_EVENT_TYPES.SHUTDOWN&&(Hi.exports.restartNumber=e.restartNumber,vo.unref(),setTimeout(()=>{ki.warn("Thread did not voluntarily terminate",Awe),process.exit(0)},kM).unref())})});var hX=M((HVe,pX)=>{"use strict";var{promises:cm,createReadStream:Xwe,createWriteStream:Zwe}=require("fs"),{createGzip:eNe}=require("zlib"),{promisify:tNe}=require("util"),{pipeline:rNe}=require("stream"),nNe=tNe(rNe),$M=require("path"),mX=fe();mX.initSync();var Lb=Q(),{CONFIG_PARAMS:sNe,ITC_EVENT_TYPES:FVe}=(G(),D(j)),{onMessageFromWorkers:kVe}=st(),{convertToMS:uX}=ae(),{onStorageReclamation:iNe}=(lg(),D(_0)),oNe=6e4,aNe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",cNe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",qM,dX;pX.exports=lNe;function lNe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:o}){if(s===!1)return;let c=0;if(iNe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(aNe);if(!i)throw new Error(cNe);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=uX(r));let d;return qM=Date.now(),Lb.trace("Log rotate enabled, maxSize:",t,"interval:",r),dX=setInterval(async()=>{if(l){let f;f=await cm.stat(e.path),f.size>=l&&(d=await fX(e.path,i))}if(u&&Date.now()-qM>=u&&(d=await fX(e.path,i),qM=Date.now()),n||c){let f=uX(n??"1M")/(1+c);c=0;let m=await cm.readdir(i);for(let p of m)try{let h=await cm.stat($M.join(i,p));Date.now()-h.mtimeMs>f&&await cm.unlink($M.join(i,p))}catch(h){Lb.error("Error trying to remove log",p,h)}}},o??oNe).unref(),{end(){clearInterval(dX)},getLastRotatedLogPath(){return d}}}a(lNe,"logRotator");async function fX(e,t){let r=mX.get(sNe.LOGGING_ROTATION_COMPRESS),n=$M.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await cm.rename(e,n),r&&(e=n,n+=".gz",await nNe(Xwe(e),eNe(),Zwe(n)),await cm.unlink(e)),Lb.closeLogFile(),Lb.notify(`hdb.log rotated, old log moved to ${n}`),n}a(fX,"moveLogFile")});var TX={};ye(TX,{RootConfigWatcher:()=>VM});var EX,_X,gX,Db,SX,VM,yX=se(()=>{EX=b(require("chokidar")),_X=require("node:fs/promises"),gX=b(_t()),Db=require("node:stream"),SX=require("yaml"),VM=class extends Db.EventEmitter{static{a(this,"RootConfigWatcher")}#e;#t;#n;ready;constructor(){super(),this.#e=(0,gX.getConfigFilePath)(),this.ready=(0,Db.once)(this,"ready"),this.#t=EX.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,_X.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,SX.parse)(t);if(!this.#n){this.#n=r,this.emit("ready",this.#n);return}this.emit("change",this.#n=r)}).catch(t=>{})}close(){return this.#t.close(),this.#n=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#n}}});var Q=M((KVe,Hb)=>{"use strict";var Ha=require("fs-extra"),{workerData:uNe,threadId:dNe,isMainThread:NX}=require("worker_threads"),a_=require("path"),CX=require("yaml"),OX=require("properties-reader"),jr=(G(),D(j)),RX=rl(),fNe=require("os"),{PACKAGE_ROOT:XM}=yt(),{_assignPackageExport:mNe}=ai(),{Console:pNe}=require("console"),YM=process.env.IS_SCRIPTED_SERVICE?function(){}:process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),bX=new Map,{join:Ga}=a_,AX=1e4,fr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},hNe={STDOUT:"stdOut",STDERR:"stdErr"},VVe=Ga(XM,"logs"),ENe=Ga(XM,"config/yaml/",jr.HDB_DEFAULT_CONFIG_FILE),_Ne=1e4,c_,l_,vb,PX,Uo,WM,KM,Ub,xt,Zn,xb,Bb,lm,o_,i_;function Mb(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=a_.dirname(n)):t.root?n=Ga(t.root,WM):(n=xt.path,t.root||(t.root=a_.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=fr[t.level]??xt?.level??fr.info,LX(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(xt.path===e.path&&r)}a(Mb,"updateLogger");function LX(e){let t=e.conditional??(e.conditional={});t.notify=fr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=fr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=fr.error>=e.level?e.error.bind(e):void 0,t.warn=fr.warn>=e.level?e.warn.bind(e):void 0,t.info=fr.info>=e.level?e.info.bind(e):void 0,t.debug=fr.debug>=e.level?e.debug.bind(e):void 0,t.trace=fr.trace>=e.level?e.trace.bind(e):void 0}a(LX,"updateConditional");async function jM(){i_||(i_=new BNe,await i_.ready,i_.on("change",jM));let e=i_.config,t=e.logging??{};Mb(xt,t),Ub=xt.path,c_=t.console??!1,t.external&&Mb(Zn,t.external);for(let r in e){let n=e[r];n.logging?Mb(xt.forComponent(r),n.logging,r):xt.hasComponent(r)&&Mb(xt.forComponent(r),t,r)}}a(jM,"updateLogSettings");var zM=class extends pNe{static{a(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){Ln="trace",this.level<=fr.trace&&super.info(...t),Ln="info"}debug(...t){Ln="debug",this.level<=fr.debug&&super.info(...t),Ln="info"}info(...t){Ln="info",this.level<=fr.info&&super.info(...t),Ln="info"}warn(...t){Ln="warn",this.level<=fr.warn&&super.warn(...t),Ln="info"}error(...t){Ln="error",this.level<=fr.error&&super.error(...t),Ln="info"}fatal(...t){lm=!0;try{Ln="fatal",this.level<=fr.fatal&&super.error(...t),Ln="info"}finally{lm=!1}}notify(...t){lm=!0;try{Ln="notify",this.level<=fr.notify&&super.info(...t),Ln="info"}finally{lm=!1}}withTag(t){return vX(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};o_===void 0&&DX();Hb.exports={notify:wNe,fatal:NNe,error:QM,warn:CNe,info:bNe,debug:INe,trace:ANe,logLevel:Uo,loggerWithTag:vX,suppressLogging:yNe,initLogSettings:DX,logCustomLevel:ONe,closeLogFile:MX,createLogger:kb,logsAtLevel:SNe,getLogFilePath:a(()=>Ub,"getLogFilePath"),forComponent:a(e=>xt.forComponent(e),"forComponent"),setMainLogger:UNe,setLogLevel:LNe,OUTPUTS:hNe,AuthAuditLog:xNe,start:jM,startOnMainThread:jM,errorToString:MNe,disableStdio:gNe};function gNe(){YM=a(function(){},"nativeStdWrite")}a(gNe,"disableStdio");Hb.exports.externalLogger={notify(...e){Zn.notify(...e)},fatal(...e){Zn.fatal(...e)},error(...e){Zn.error(...e)},warn(...e){Zn.warn(...e)},info(...e){Zn.info(...e)},debug(...e){Zn.debug(...e)},trace(...e){Zn.trace(...e)},withTag(e){return Zn.withTag(e)},loggerWithTag(e){return Zn.withTag(e)}};mNe("logger",Hb.exports.externalLogger);function SNe(e){return fr[Uo]<=fr[e]}a(SNe,"logsAtLevel");function DX(e=!1){try{if(o_===void 0||e){MX();let t=PNe(),r=RX(["ROOTPATH"]);try{o_=OX(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Ha.pathExistsSync(Ga(r.ROOTPATH,jr.HDB_CONFIG_FILE)))throw s}let n;if({level:Uo,configLogPath:KM,toFile:l_,logConsole:c_,colorMode:PX,rotation:n,toStream:vb}=DNe(r.ROOTPATH?Ga(r.ROOTPATH,jr.HDB_CONFIG_FILE):o_.get("settings_path")),WM=jr.LOG_NAMES.HDB,Ub=Ga(KM,WM),xt=kb({path:Ub,level:Uo,stdStreams:vb,rotation:n}),Zn=xt.forComponent("external"),Zn.tag=null,NX)try{require("segfault-handler").registerHandler(Ga(KM,"crash.log"))}catch{}}}catch(t){if(o_=void 0,t.code===jr.NODE_ERROR_CODES.ENOENT||t.code===jr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=RX(Object.keys(jr.CONFIG_PARAM_MAP),!0);for(let s in r){let i=jr.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let o=r[s];if(i===jr.CONFIG_PARAMS.LOGGING_LEVEL){Uo=o;continue}i===jr.CONFIG_PARAMS.LOGGING_CONSOLE&&(c_=i)}let{defaultLevel:n}=vNe();l_=!1,vb=!0,Uo=Uo===void 0?n:Uo,xt=kb({level:Uo}),Zn=xt.forComponent("external"),Zn.tag=null;return}throw QM("Error initializing log settings"),QM(t),t}process.env.DEV_MODE&&(vb=!0),TNe()}a(DX,"initLogSettings");var zc=!0;function TNe(){l_&&(process.stdout.write=function(e){return typeof e=="string"&&zc&&c_&&(e=e.toString(),e[e.length-1]===`
|
|
134
134
|
`&&(e=e.slice(0,-1)),Bb(e)),YM.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&zc&&c_&&(e[e.length-1]===`
|
|
135
135
|
`&&(e=e.slice(0,-1)),Bb(e)),YM.apply(process.stderr,arguments)})}a(TNe,"stdioLogging");function vX(e,t,r=xt){return e=e.replace(/ /g,"-"),{notify:n(r.notify,"notify"),fatal:n(r.fatal,"fatal"),error:n(r.error,"error"),warn:n(r.warn,"warn"),info:n(r.info,"info"),debug:n(r.debug,"debug"),trace:n(r.trace,"trace")};function n(s,i){return!t||r.level<=fr[i]?function(...o){Fb=e;try{return s.call(r,...o)}finally{Fb=void 0}}:null}a(n,"logWithTag")}a(vX,"loggerWithTag");function yNe(e){try{zc=!1,e()}finally{zc=!0}}a(yNe,"suppressLogging");var RNe=uNe?.name?.replace(/ /g,"-")||"main",Ln="info",JM,Fb;function kb({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:o}){t||(t="info");let c=fr[t],l;function u(p){if(l_)if(l.logToStdstreams){f(p.replace(/\x1b\[[0-9;]*m/g,"")),zc=!1;try{process.stdout.write(p)}finally{zc=!0}}else f(p);else r&&process.stdout.write(p)}a(u,"logStdOut");function d(p){if(l_){if(f(p),r){zc=!1;try{process.stderr.write(p)}finally{zc=!0}}}else r&&process.stderr.write(p)}a(d,"logStdErr");let f=e&&wX(e,n,s);function m(p){return{write(h){let E=[Ln];E.unshift(JM||RNe+"/"+dNe),Fb&&E.push(Fb),l.tag&&E.push(l.tag),p(`[${E.join("] [")}]: ${h}`)}}}if(a(m,"logPrepend"),s&&(Bb=f),l=new zM({stdout:m(i??u),stderr:m(i??d),colorMode:r&&PX||!1},c),LX(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(p){e=p,f=wX(e,l.rotation,s),s&&(Bb=f)},enumerable:!0}),l.closeLogFile=f?.closeLogFile,l.logToStdstreams=r,!o){let p=new Map;l.forComponent=function(h){let E=p.get(h);return E||(E=kb({path:e,level:t,stdStreams:r,isExternalInstance:h==="external",rotation:n,writeToLog:i,component:!0}),p.set(h,E)),E},l.hasComponent=function(h){return p.has(h)}}return l}a(kb,"createLogger");var IX=100;function wX(e,t,r){let n=bX.get(e),s,i,o,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,bX.set(e,n)),NX&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let h=hX();try{n.rotator=h({logger:n,...t})}catch(E){n("Error initializing log rotator",E)}},100));let u=0;return n;function d(h){u++;let E=`${new Date().toISOString()} ${h}${h.endsWith(`
|
|
136
136
|
`)?"":`
|
|
137
137
|
`}`;c?(c.length<AX?c.push(E):c.length===AX&&c.push(`Maximum log buffer rate reached, logs will be throttled
|
|
138
|
-
`),lm&&(clearTimeout(o),f())):lm||l<performance.now()+IX?f(E):(l=Math.min(l,performance.now()+IX),c=[E],o=setTimeout(f,1))}function f(h){if(p(),s){let E=performance.now();Ha.appendFileSync(s,c?c.join(""):h);let _=performance.now();l=Math.max(_,l)+(_-E)*50}else i||console.log(c?c.join(""):h);c&&(c=null)}function m(){try{Ha.closeSync(s)}catch{}s=null,r&&(xb=null)}function p(h){if(!s){try{s=Ha.openSync(e,"a"),r&&(xb=s)}catch(E){if(E.code==="ENOENT"&&!h)return Ha.mkdirpSync(a_.dirname(e)),p(!0);i||(i=!0,console.error(E))}setTimeout(()=>{m()},_Ne).unref()}}}a(wX,"getFileLogger");function bNe(...e){xt.info(...e)}a(bNe,"info");function ANe(...e){xt.trace(...e)}a(ANe,"trace");function QM(...e){xt.error(...e)}a(QM,"error");function INe(...e){xt.debug(...e)}a(INe,"debug");function wNe(...e){xt.notify(...e)}a(wNe,"notify");function NNe(...e){xt.fatal(...e)}a(NNe,"fatal");function CNe(...e){xt.warn(...e)}a(CNe,"warn");function ONe(e,t,r,...n){JM=r.service_name;try{xt[e](...n)}finally{JM=void 0}}a(ONe,"logCustomLevel");function PNe(){let e;try{e=fNe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Ga(e,jr.HDB_HOME_DIR_NAME,jr.BOOT_PROPS_FILE_NAME);return Ha.existsSync(t)||(t=Ga(XM,"utility/hdb_boot_properties.file")),t}a(PNe,"getPropsFilePath");function LNe(e){Mo=e}a(LNe,"setLogLevel");function DNe(e){try{if(e.includes("config/settings.js")){let u=OX(e);return{level:u.get(jr.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:a_.dirname(u.get(jr.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:u.get(jr.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:u.get(jr.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=CX.parseDocument(Ha.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),o=t.getIn(["logging","console"]),c=t.getIn(["logging","colors"])??!0,l=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:o,colorMode:c,rotation:l}}catch(t){if(t.code===jr.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(DNe,"getLogConfig");function vNe(){try{let e=CX.parseDocument(Ha.readFileSync(ENe,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{defaultLevel:t,defaultToFile:r,defaultToStream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(vNe,"getDefaultConfig");function MNe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}a(MNe,"errorToString");function UNe(e){xt=e}a(UNe,"setMainLogger");function MX(){try{Ha.closeSync(xb)}catch{}xb=null}a(MX,"closeLogFile");function xNe(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}a(xNe,"AuthAuditLog");var{RootConfigWatcher:BNe}=(yX(),D(TX))});var ae=M(we=>{"use strict";var Jc=require("path"),kX=require("fs-extra"),es=Q(),UX=require("fs-extra"),Gb=require("os"),FNe=require("net"),kNe=require("recursive-iterator"),Ur=(G(),D(j)),{PACKAGE_ROOT:HNe}=yt(),xX=require("papaparse"),qb=require("moment"),{inspect:GNe}=require("util"),BX=require("is-number"),qNe=require("minimist"),$Ne=require("https"),VNe=require("http"),KNe=/^((\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)))$/,YNe=require("util").promisify(setTimeout),WNe="",jNe=4,FX={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};we.isEmpty=Os;we.isEmptyOrZeroLength=Uo;we.arrayHasEmptyValues=QNe;we.arrayHasEmptyOrZeroLengthValues=XNe;we.buildFolderPath=ZNe;we.isBoolean=HX;we.errorizeMessage=zNe;we.stripFileExtension=tCe;we.autoCast=rCe;we.autoCastJSON=GX;we.autoCastJSONDeep=eU;we.removeDir=nCe;we.compareVersions=sCe;we.isCompatibleDataVersion=iCe;we.escapeRawValue=oCe;we.unescapeValue=aCe;we.stringifyProps=cCe;we.timeoutPromise=uCe;we.isClusterOperation=fCe;we.getClusterUser=pCe;we.checkGlobalSchemaTable=mCe;we.getHomeDir=$X;we.getPropsFilePath=lCe;we.promisifyPapaParse=hCe;we.removeBOM=VX;we.createEventPromise=ECe;we.checkSchemaTableExist=_Ce;we.checkSchemaExists=KX;we.checkTableExists=YX;we.getStartOfTomorrowInSeconds=gCe;we.getLimitKey=SCe;we.isObject=eCe;we.isNotEmptyAndHasValue=JNe;we.autoCasterIsNumberCheck=qX;we.backtickASTSchemaItems=TCe;we.isPortTaken=dCe;we.createForkArgs=yCe;we.autoCastBoolean=RCe;we.autoCastBooleanStrict=bCe;we.asyncSetTimeout=YNe;we.getTableHashAttribute=ACe;we.doesSchemaExist=ICe;we.doesTableExist=wCe;we.stringifyObj=NCe;we.ms_to_time=CCe;we.changeExtension=OCe;we.getEnvCliRootPath=tU;we.noBootFile=PCe;we.httpRequest=LCe;we.transformReq=DCe;we.convertToMS=vCe;we.PACKAGE_ROOT=HNe;function zNe(e){return e instanceof Error?e:new Error(e)}a(zNe,"errorizeMessage");function Os(e){return e==null}a(Os,"isEmpty");function JNe(e){return!Os(e)&&(e||e===0||e===""||HX(e))}a(JNe,"isNotEmptyAndHasValue");function Uo(e){return Os(e)||e.length===0||e.size===0}a(Uo,"isEmptyOrZeroLength");function QNe(e){if(Os(e))return!0;for(let t=0;t<e.length;t++)if(Os(e[t]))return!0;return!1}a(QNe,"arrayHasEmptyValues");function XNe(e){if(Uo(e))return!0;for(let t=0;t<e.length;t++)if(Uo(e[t]))return!0;return!1}a(XNe,"arrayHasEmptyOrZeroLengthValues");function ZNe(...e){try{return e.join(Jc.sep)}catch{console.error(e)}}a(ZNe,"buildFolderPath");function HX(e){return Os(e)?!1:e===!0||e===!1}a(HX,"isBoolean");function eCe(e){return Os(e)?!1:typeof e=="object"}a(eCe,"isObject");function tCe(e){return Uo(e)?WNe:e.slice(0,-jNe)}a(tCe,"stripFileExtension");function rCe(e){return Os(e)||e===""||typeof e!="string"?e:FX[e]!==void 0?FX[e]:qX(e)===!0?Number(e):KNe.test(e)?new Date(e):e}a(rCe,"autoCast");function GX(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(GX,"autoCastJSON");function eU(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=eU(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=eU(r);n!==r&&(e[t]=n)}return e}else return GX(e)}a(eU,"autoCastJSONDeep");function qX(e){if(e.startsWith("0.")&&BX(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&BX(e))}a(qX,"autoCasterIsNumberCheck");async function nCe(e){if(Uo(e))throw new Error(`Directory path: ${e} does not exist`);try{await UX.emptyDir(e),await UX.remove(e)}catch(t){throw es.error(`Error removing files in ${e} -- ${t}`),t}}a(nCe,"removeDir");function sCe(e,t){if(Uo(e)){es.info("Invalid current version sent as parameter.");return}if(Uo(t)){es.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(sCe,"compareVersions");function iCe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(iCe,"isCompatibleDataVersion");function oCe(e){if(Os(e))return e;let t=String(e);return t==="."?Ur.UNICODE_PERIOD:t===".."?Ur.UNICODE_PERIOD+Ur.UNICODE_PERIOD:t.replace(Ur.FORWARD_SLASH_REGEX,Ur.UNICODE_FORWARD_SLASH)}a(oCe,"escapeRawValue");function aCe(e){if(Os(e))return e;let t=String(e);return t===Ur.UNICODE_PERIOD?".":t===Ur.UNICODE_PERIOD+Ur.UNICODE_PERIOD?"..":String(e).replace(Ur.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(aCe,"unescapeValue");function cCe(e,t){if(Os(e))return es.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+Gb.EOL}!Uo(n)&&n[0]===";"?r+=" "+n+s+Gb.EOL:Uo(n)||(r+=n+"="+s+Gb.EOL)}catch{es.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(cCe,"stringifyProps");function $X(){let e;try{e=Gb.homedir()}catch{e=process.env.HOME}return e}a($X,"getHomeDir");function lCe(){let e=Jc.join($X(),Ur.HDB_HOME_DIR_NAME,Ur.BOOT_PROPS_FILE_NAME);return kX.existsSync(e)||(e=Jc.join(__dirname,"../","hdb_boot_properties.file")),e}a(lCe,"getPropsFilePath");function uCe(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:a(function(){clearTimeout(r)},"cancel")}}a(uCe,"timeoutPromise");async function dCe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=FNe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(dCe,"isPortTaken");function fCe(e){try{return Ur.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){es.error(`Error checking operation against cluster ops ${t}`)}return!1}a(fCe,"isClusterOperation");function mCe(e,t){let r=(Oe(),D(mt)).getDatabases();if(!r[e])return $b.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return $b.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(mCe,"checkGlobalSchemaTable");function pCe(e,t){if(Os(t)){es.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Os(e)||Uo(e)){es.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){es.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){es.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(pCe,"getClusterUser");function hCe(){xX.parsePromise=function(e,t,r){return new Promise(function(n,s){xX.parse(e,{header:!0,transformHeader:VX,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(hCe,"promisifyPapaParse");function VX(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(VX,"removeBOM");function ECe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;es.info(`Got cluster status event response: ${GNe(s)}`);try{i.cancel()}catch{es.error("Error trying to cancel timeout.")}n(s)})})}a(ECe,"createEventPromise");function _Ce(e,t){let r=KX(e);if(r)return r;let n=YX(e,t);if(n)return n}a(_Ce,"checkSchemaTableExist");function KX(e){let{getDatabases:t}=(Oe(),D(mt));if(!t()[e])return $b.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(KX,"checkSchemaExists");function YX(e,t){let{getDatabases:r}=(Oe(),D(mt));if(!r()[e][t])return $b.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(YX,"checkTableExists");function gCe(){let e=qb().utc().add(1,"d").startOf("d").unix(),t=qb().utc().unix();return e-t}a(gCe,"getStartOfTomorrowInSeconds");function SCe(){return qb().utc().format("DD-MM-YYYY")}a(SCe,"getLimitKey");function TCe(e){try{let t=new kNe(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){es.error("Got an error back ticking items."),es.error(t)}}a(TCe,"backtickASTSchemaItems");function yCe(e){return[e]}a(yCe,"createForkArgs");function RCe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(RCe,"autoCastBoolean");function bCe(e){if(typeof e=="string"){let t=e.toLowerCase();if(t==="true")return!0;if(t==="false")return!1}return e}a(bCe,"autoCastBooleanStrict");function ACe(e,t){let{getDatabases:r}=(Oe(),D(mt)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(ACe,"getTableHashAttribute");function ICe(e){let{getDatabases:t}=(Oe(),D(mt));return t()[e]!==void 0}a(ICe,"doesSchemaExist");function wCe(e,t){let{getDatabases:r}=(Oe(),D(mt));return r()[e]?.[t]!==void 0}a(wCe,"doesTableExist");function NCe(e){try{return JSON.stringify(e)}catch{return e}}a(NCe,"stringifyObj");function CCe(e){let t=qb.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(CCe,"ms_to_time");function OCe(e,t){let r=Jc.basename(e,Jc.extname(e));return Jc.join(Jc.dirname(e),r+t)}a(OCe,"changeExtension");function tU(){if(process.env[Ur.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ur.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=qNe(process.argv);if(e[Ur.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ur.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(tU,"getEnvCliRootPath");var ZM;function PCe(){if(ZM)return ZM;let e=tU();if(tU()&&kX.pathExistsSync(Jc.join(e,Ur.HDB_CONFIG_FILE)))return ZM=!0,!0}a(PCe,"noBootFile");function LCe(e,t){let r;return e.protocol==="http:"?r=VNe:r=$Ne,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8"),o.body="",o.on("data",c=>{o.body+=c}),o.on("end",()=>{n(o)})});i.on("error",o=>{s(o)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}a(LCe,"httpRequest");function DCe(e){if(!e.schema&&!e.database){e.schema=Ur.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(DCe,"transformReq");function vCe(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(vCe,"convertToMS");var $b=Jr()});var jX=M((JVe,WX)=>{"use strict";var rU=(G(),D(j)),MCe=ae(),UCe=So(),Gi=Q(),xCe=gy(),BCe=Kh(),zVe=cu(),FCe=pi(),kCe=Jh(),HCe=require("semver/functions/gte"),GCe=3e4,qCe=7;WX.exports=$Ce;async function $Ce(){try{Gi.notify("Starting update nodes. This process will attempt to update any node connections the need to be reestablished after a 4.0.0 upgrade"),await FCe.setSchemaDataToGlobalAsync();let e=await UCe.getAllNodeRecords(),t=[];for(let r=0,n=e.length;r<n;r++){let s=e[r];s.system_info.hdb_version===rU.PRE_4_0_0_VERSION&&t.push(VCe(s))}await Promise.allSettled(t),Gi.notify("Shutting down 4.0.0 clustering upgrade process")}catch(e){throw Gi.error(e),e}}a($Ce,"updateAllNodes");async function VCe(e){try{let{name:t,subscriptions:r}=e;Gi.notify("Running 4.0.0 update on node:",t);let n=!1,s=0;for(;s<qCe;){let i=[];if(await xCe.buildNodeStatus(e,i),Gi.trace("Received status:",i[0].status,"from node:",t),i[0].status==="open"&&HCe(i[0].system_info.hdb_version,"4.0.0")){Gi.notify("Received open status from node:",t,"calling add node");let o={operation:rU.OPERATIONS_ENUM.ADD_NODE,node_name:t,subscriptions:r};await BCe(o,!0),Gi.notify("Successfully added node",t),n=!0;break}s=(Date.now()-e.__updatedtime__)/(1e3*60*60*24),Gi.trace("Update node has been running for",s,"days. Calling node status again for node:",t),await MCe.asyncSetTimeout(GCe)}n||(Gi.error("4.0.0 node update was unable to update connection to node:",t),Gi.error("Removing following node record from hdb_nodes",e),await kCe({operation:rU.OPERATIONS_ENUM.REMOVE_NODE,node_name:t}))}catch(t){throw Gi.error(t),t}}a(VCe,"updateNode")});var KCe=jX();(async()=>{try{await KCe()}catch(e){console.error("Error launching 4.0.0 node update"),console.error(e),process.exit(1)}})();
|
|
138
|
+
`),lm&&(clearTimeout(o),f())):lm||l<performance.now()+IX?f(E):(l=Math.min(l,performance.now()+IX),c=[E],o=setTimeout(f,1))}function f(h){if(p(),s){let E=performance.now();Ha.appendFileSync(s,c?c.join(""):h);let _=performance.now();l=Math.max(_,l)+(_-E)*50}else i||console.log(c?c.join(""):h);c&&(c=null)}function m(){try{Ha.closeSync(s)}catch{}s=null,r&&(xb=null)}function p(h){if(!s){try{s=Ha.openSync(e,"a"),r&&(xb=s)}catch(E){if(E.code==="ENOENT"&&!h)return Ha.mkdirpSync(a_.dirname(e)),p(!0);i||(i=!0,console.error(E))}setTimeout(()=>{m()},_Ne).unref()}}}a(wX,"getFileLogger");function bNe(...e){xt.info(...e)}a(bNe,"info");function ANe(...e){xt.trace(...e)}a(ANe,"trace");function QM(...e){xt.error(...e)}a(QM,"error");function INe(...e){xt.debug(...e)}a(INe,"debug");function wNe(...e){xt.notify(...e)}a(wNe,"notify");function NNe(...e){xt.fatal(...e)}a(NNe,"fatal");function CNe(...e){xt.warn(...e)}a(CNe,"warn");function ONe(e,t,r,...n){JM=r.service_name;try{xt[e](...n)}finally{JM=void 0}}a(ONe,"logCustomLevel");function PNe(){let e;try{e=fNe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Ga(e,jr.HDB_HOME_DIR_NAME,jr.BOOT_PROPS_FILE_NAME);return Ha.existsSync(t)||(t=Ga(XM,"utility/hdb_boot_properties.file")),t}a(PNe,"getPropsFilePath");function LNe(e){Uo=e}a(LNe,"setLogLevel");function DNe(e){try{if(e.includes("config/settings.js")){let u=OX(e);return{level:u.get(jr.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:a_.dirname(u.get(jr.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:u.get(jr.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:u.get(jr.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=CX.parseDocument(Ha.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),o=t.getIn(["logging","console"]),c=t.getIn(["logging","colors"])??!0,l=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:o,colorMode:c,rotation:l}}catch(t){if(t.code===jr.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(DNe,"getLogConfig");function vNe(){try{let e=CX.parseDocument(Ha.readFileSync(ENe,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{defaultLevel:t,defaultToFile:r,defaultToStream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(vNe,"getDefaultConfig");function MNe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}a(MNe,"errorToString");function UNe(e){xt=e}a(UNe,"setMainLogger");function MX(){try{Ha.closeSync(xb)}catch{}xb=null}a(MX,"closeLogFile");function xNe(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}a(xNe,"AuthAuditLog");var{RootConfigWatcher:BNe}=(yX(),D(TX))});var ae=M(we=>{"use strict";var Jc=require("path"),kX=require("fs-extra"),es=Q(),UX=require("fs-extra"),Gb=require("os"),FNe=require("net"),kNe=require("recursive-iterator"),Ur=(G(),D(j)),{PACKAGE_ROOT:HNe}=yt(),xX=require("papaparse"),qb=require("moment"),{inspect:GNe}=require("util"),BX=require("is-number"),qNe=require("minimist"),$Ne=require("https"),VNe=require("http"),KNe=/^((\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)))$/,YNe=require("util").promisify(setTimeout),WNe="",jNe=4,FX={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};we.isEmpty=Os;we.isEmptyOrZeroLength=xo;we.arrayHasEmptyValues=QNe;we.arrayHasEmptyOrZeroLengthValues=XNe;we.buildFolderPath=ZNe;we.isBoolean=HX;we.errorizeMessage=zNe;we.stripFileExtension=tCe;we.autoCast=rCe;we.autoCastJSON=GX;we.autoCastJSONDeep=eU;we.removeDir=nCe;we.compareVersions=sCe;we.isCompatibleDataVersion=iCe;we.escapeRawValue=oCe;we.unescapeValue=aCe;we.stringifyProps=cCe;we.timeoutPromise=uCe;we.isClusterOperation=fCe;we.getClusterUser=pCe;we.checkGlobalSchemaTable=mCe;we.getHomeDir=$X;we.getPropsFilePath=lCe;we.promisifyPapaParse=hCe;we.removeBOM=VX;we.createEventPromise=ECe;we.checkSchemaTableExist=_Ce;we.checkSchemaExists=KX;we.checkTableExists=YX;we.getStartOfTomorrowInSeconds=gCe;we.getLimitKey=SCe;we.isObject=eCe;we.isNotEmptyAndHasValue=JNe;we.autoCasterIsNumberCheck=qX;we.backtickASTSchemaItems=TCe;we.isPortTaken=dCe;we.createForkArgs=yCe;we.autoCastBoolean=RCe;we.autoCastBooleanStrict=bCe;we.asyncSetTimeout=YNe;we.getTableHashAttribute=ACe;we.doesSchemaExist=ICe;we.doesTableExist=wCe;we.stringifyObj=NCe;we.ms_to_time=CCe;we.changeExtension=OCe;we.getEnvCliRootPath=tU;we.noBootFile=PCe;we.httpRequest=LCe;we.transformReq=DCe;we.convertToMS=vCe;we.PACKAGE_ROOT=HNe;function zNe(e){return e instanceof Error?e:new Error(e)}a(zNe,"errorizeMessage");function Os(e){return e==null}a(Os,"isEmpty");function JNe(e){return!Os(e)&&(e||e===0||e===""||HX(e))}a(JNe,"isNotEmptyAndHasValue");function xo(e){return Os(e)||e.length===0||e.size===0}a(xo,"isEmptyOrZeroLength");function QNe(e){if(Os(e))return!0;for(let t=0;t<e.length;t++)if(Os(e[t]))return!0;return!1}a(QNe,"arrayHasEmptyValues");function XNe(e){if(xo(e))return!0;for(let t=0;t<e.length;t++)if(xo(e[t]))return!0;return!1}a(XNe,"arrayHasEmptyOrZeroLengthValues");function ZNe(...e){try{return e.join(Jc.sep)}catch{console.error(e)}}a(ZNe,"buildFolderPath");function HX(e){return Os(e)?!1:e===!0||e===!1}a(HX,"isBoolean");function eCe(e){return Os(e)?!1:typeof e=="object"}a(eCe,"isObject");function tCe(e){return xo(e)?WNe:e.slice(0,-jNe)}a(tCe,"stripFileExtension");function rCe(e){return Os(e)||e===""||typeof e!="string"?e:FX[e]!==void 0?FX[e]:qX(e)===!0?Number(e):KNe.test(e)?new Date(e):e}a(rCe,"autoCast");function GX(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(GX,"autoCastJSON");function eU(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=eU(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=eU(r);n!==r&&(e[t]=n)}return e}else return GX(e)}a(eU,"autoCastJSONDeep");function qX(e){if(e.startsWith("0.")&&BX(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&BX(e))}a(qX,"autoCasterIsNumberCheck");async function nCe(e){if(xo(e))throw new Error(`Directory path: ${e} does not exist`);try{await UX.emptyDir(e),await UX.remove(e)}catch(t){throw es.error(`Error removing files in ${e} -- ${t}`),t}}a(nCe,"removeDir");function sCe(e,t){if(xo(e)){es.info("Invalid current version sent as parameter.");return}if(xo(t)){es.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(sCe,"compareVersions");function iCe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(iCe,"isCompatibleDataVersion");function oCe(e){if(Os(e))return e;let t=String(e);return t==="."?Ur.UNICODE_PERIOD:t===".."?Ur.UNICODE_PERIOD+Ur.UNICODE_PERIOD:t.replace(Ur.FORWARD_SLASH_REGEX,Ur.UNICODE_FORWARD_SLASH)}a(oCe,"escapeRawValue");function aCe(e){if(Os(e))return e;let t=String(e);return t===Ur.UNICODE_PERIOD?".":t===Ur.UNICODE_PERIOD+Ur.UNICODE_PERIOD?"..":String(e).replace(Ur.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(aCe,"unescapeValue");function cCe(e,t){if(Os(e))return es.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+Gb.EOL}!xo(n)&&n[0]===";"?r+=" "+n+s+Gb.EOL:xo(n)||(r+=n+"="+s+Gb.EOL)}catch{es.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(cCe,"stringifyProps");function $X(){let e;try{e=Gb.homedir()}catch{e=process.env.HOME}return e}a($X,"getHomeDir");function lCe(){let e=Jc.join($X(),Ur.HDB_HOME_DIR_NAME,Ur.BOOT_PROPS_FILE_NAME);return kX.existsSync(e)||(e=Jc.join(__dirname,"../","hdb_boot_properties.file")),e}a(lCe,"getPropsFilePath");function uCe(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:a(function(){clearTimeout(r)},"cancel")}}a(uCe,"timeoutPromise");async function dCe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=FNe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(dCe,"isPortTaken");function fCe(e){try{return Ur.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){es.error(`Error checking operation against cluster ops ${t}`)}return!1}a(fCe,"isClusterOperation");function mCe(e,t){let r=(Oe(),D(mt)).getDatabases();if(!r[e])return $b.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return $b.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(mCe,"checkGlobalSchemaTable");function pCe(e,t){if(Os(t)){es.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Os(e)||xo(e)){es.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){es.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){es.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(pCe,"getClusterUser");function hCe(){xX.parsePromise=function(e,t,r){return new Promise(function(n,s){xX.parse(e,{header:!0,transformHeader:VX,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(hCe,"promisifyPapaParse");function VX(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(VX,"removeBOM");function ECe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;es.info(`Got cluster status event response: ${GNe(s)}`);try{i.cancel()}catch{es.error("Error trying to cancel timeout.")}n(s)})})}a(ECe,"createEventPromise");function _Ce(e,t){let r=KX(e);if(r)return r;let n=YX(e,t);if(n)return n}a(_Ce,"checkSchemaTableExist");function KX(e){let{getDatabases:t}=(Oe(),D(mt));if(!t()[e])return $b.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(KX,"checkSchemaExists");function YX(e,t){let{getDatabases:r}=(Oe(),D(mt));if(!r()[e][t])return $b.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(YX,"checkTableExists");function gCe(){let e=qb().utc().add(1,"d").startOf("d").unix(),t=qb().utc().unix();return e-t}a(gCe,"getStartOfTomorrowInSeconds");function SCe(){return qb().utc().format("DD-MM-YYYY")}a(SCe,"getLimitKey");function TCe(e){try{let t=new kNe(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){es.error("Got an error back ticking items."),es.error(t)}}a(TCe,"backtickASTSchemaItems");function yCe(e){return[e]}a(yCe,"createForkArgs");function RCe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(RCe,"autoCastBoolean");function bCe(e){if(typeof e=="string"){let t=e.toLowerCase();if(t==="true")return!0;if(t==="false")return!1}return e}a(bCe,"autoCastBooleanStrict");function ACe(e,t){let{getDatabases:r}=(Oe(),D(mt)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(ACe,"getTableHashAttribute");function ICe(e){let{getDatabases:t}=(Oe(),D(mt));return t()[e]!==void 0}a(ICe,"doesSchemaExist");function wCe(e,t){let{getDatabases:r}=(Oe(),D(mt));return r()[e]?.[t]!==void 0}a(wCe,"doesTableExist");function NCe(e){try{return JSON.stringify(e)}catch{return e}}a(NCe,"stringifyObj");function CCe(e){let t=qb.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(CCe,"ms_to_time");function OCe(e,t){let r=Jc.basename(e,Jc.extname(e));return Jc.join(Jc.dirname(e),r+t)}a(OCe,"changeExtension");function tU(){if(process.env[Ur.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ur.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=qNe(process.argv);if(e[Ur.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ur.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(tU,"getEnvCliRootPath");var ZM;function PCe(){if(ZM)return ZM;let e=tU();if(tU()&&kX.pathExistsSync(Jc.join(e,Ur.HDB_CONFIG_FILE)))return ZM=!0,!0}a(PCe,"noBootFile");function LCe(e,t){let r;return e.protocol==="http:"?r=VNe:r=$Ne,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8"),o.body="",o.on("data",c=>{o.body+=c}),o.on("end",()=>{n(o)})});i.on("error",o=>{s(o)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}a(LCe,"httpRequest");function DCe(e){if(!e.schema&&!e.database){e.schema=Ur.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(DCe,"transformReq");function vCe(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(vCe,"convertToMS");var $b=Jr()});var jX=M((JVe,WX)=>{"use strict";var rU=(G(),D(j)),MCe=ae(),UCe=So(),Gi=Q(),xCe=gy(),BCe=Kh(),zVe=cu(),FCe=pi(),kCe=Jh(),HCe=require("semver/functions/gte"),GCe=3e4,qCe=7;WX.exports=$Ce;async function $Ce(){try{Gi.notify("Starting update nodes. This process will attempt to update any node connections the need to be reestablished after a 4.0.0 upgrade"),await FCe.setSchemaDataToGlobalAsync();let e=await UCe.getAllNodeRecords(),t=[];for(let r=0,n=e.length;r<n;r++){let s=e[r];s.system_info.hdb_version===rU.PRE_4_0_0_VERSION&&t.push(VCe(s))}await Promise.allSettled(t),Gi.notify("Shutting down 4.0.0 clustering upgrade process")}catch(e){throw Gi.error(e),e}}a($Ce,"updateAllNodes");async function VCe(e){try{let{name:t,subscriptions:r}=e;Gi.notify("Running 4.0.0 update on node:",t);let n=!1,s=0;for(;s<qCe;){let i=[];if(await xCe.buildNodeStatus(e,i),Gi.trace("Received status:",i[0].status,"from node:",t),i[0].status==="open"&&HCe(i[0].system_info.hdb_version,"4.0.0")){Gi.notify("Received open status from node:",t,"calling add node");let o={operation:rU.OPERATIONS_ENUM.ADD_NODE,node_name:t,subscriptions:r};await BCe(o,!0),Gi.notify("Successfully added node",t),n=!0;break}s=(Date.now()-e.__updatedtime__)/(1e3*60*60*24),Gi.trace("Update node has been running for",s,"days. Calling node status again for node:",t),await MCe.asyncSetTimeout(GCe)}n||(Gi.error("4.0.0 node update was unable to update connection to node:",t),Gi.error("Removing following node record from hdb_nodes",e),await kCe({operation:rU.OPERATIONS_ENUM.REMOVE_NODE,node_name:t}))}catch(t){throw Gi.error(t),t}}a(VCe,"updateNode")});var KCe=jX();(async()=>{try{await KCe()}catch(e){console.error("Error launching 4.0.0 node update"),console.error(e),process.exit(1)}})();
|