harperdb 4.7.0-alpha.8 → 4.7.0-beta.1
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 +54 -54
- package/bin/lite.js +39 -39
- package/launchServiceScripts/launchNatsIngestService.js +40 -40
- package/launchServiceScripts/launchNatsReplyService.js +40 -40
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +39 -39
- package/npm-shrinkwrap.json +49 -49
- package/package.json +1 -1
- package/server/jobs/jobProcess.js +39 -39
- package/server/threads/threadServer.js +28 -28
- package/studio/web/assets/index-BdjjrSSK.css +4 -0
- package/studio/web/assets/index-C5STWiTE.js +1 -0
- package/studio/web/assets/index-Ct8VBQ7M.js +439 -0
- package/studio/web/assets/{profiler-5Asl8DN7.js → profiler-B1-1lWIR.js} +1 -1
- package/studio/web/assets/{startRecording-CUmQoMAV.js → startRecording-C6eEOH0W.js} +1 -1
- package/studio/web/index.html +2 -2
- package/utility/scripts/restartHdb.js +39 -39
- package/studio/web/assets/index-CkCHnYs5.js +0 -1
- package/studio/web/assets/index-DJctbN49.css +0 -4
- package/studio/web/assets/index-DhZA-fW1.js +0 -437
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
"use strict";var UX=Object.create;var Xf=Object.defineProperty;var xX=Object.getOwnPropertyDescriptor;var BX=Object.getOwnPropertyNames;var FX=Object.getPrototypeOf,kX=Object.prototype.hasOwnProperty;var o=(e,t)=>Xf(e,"name",{value:t,configurable:!0});var oe=(e,t)=>()=>(e&&(t=e(e=0)),t);var v=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),be=(e,t)=>{for(var r in t)Xf(e,r,{get:t[r],enumerable:!0})},sv=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of BX(t))!kX.call(e,s)&&s!==r&&Xf(e,s,{get:()=>t[s],enumerable:!(n=xX(t,s))||n.enumerable});return e};var w=(e,t,r)=>(r=e!=null?UX(FX(e)):{},sv(t||!e||!e.__esModule?Xf(r,"default",{value:e,enumerable:!0}):r,e)),D=e=>sv(Xf({},"__esModule",{value:!0}),e);var At=v((pCe,av)=>{var{join:HX,dirname:iv}=require("node:path"),{existsSync:qX,readFileSync:GX}=require("node:fs");function $X(){let t=__dirname,r,n=0;for(;!qX(r=HX(t,"package.json"));)if(t===(t=iv(t))||n++>10)throw new Error("Could not find package root");return r}o($X,"findPackageJson");var ov=$X(),VX=JSON.parse(GX(ov,"utf8")),KX=iv(ov);av.exports={packageJson:VX,PACKAGE_ROOT:KX}});var XE=v((ECe,cv)=>{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:a,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}=At(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],E="ts-build";if(d){let S=!1,R=!1;if(R=i(n(p,E))){let L=new Set;e.sync(h.map(O=>`${O}/**/*.ts`),{cwd:p}).forEach(O=>{let x=0,j=0;try{L.add(O),x=a(n(p,O)).mtimeMs-5e3,j=a(n(p,E,O.replace(/.ts$/,".js"))).mtimeMs}catch{}x>j&&(S=!0)}),e.sync(h.map(O=>`${O}/**/*.js`),{cwd:n(p,E)}).forEach(O=>{if(!L.has(O.replace(/.js$/,".ts")))try{u(n(p,E,O))}catch{}})}else S=!0;if(S){console.log("Compiling TypeScript...");let L=f("npx",["tsc"],{cwd:p});if(L.stdout?.length&&console.log(L.stdout.toString()),L.stderr?.length&&console.log(L.stderr.toString()),R){let O=n(t(),"harperdb-tsc.pid"),x=!1;if(i(O))try{process.kill(+c(O,"utf8"),0),x=!0}catch{}if(!x){console.log("Starting background TypeScript compilation...");let j=m("npx",["tsc","--watch"],{detached:!0,cwd:p,stdio:"ignore"});j.on("error",H=>{console.error("Error trying to compile TypeScript",H)}),j.pid&&l(O,String(j.pid),"utf-8"),j.unref()}}}}let g=cv.constructor,b=g._findPath;g._findPath=function(S,R,L){if(S.startsWith(".")&&!L&&R.length===1&&R[0].startsWith(p)&&!R[0].includes("node_modules")){let O=r(p,R[0]),x;O.startsWith(E)?x=n(p,r(E,O)):x=n(p,E,O),(S.endsWith(".js")||S.endsWith(".ts"))&&(S=S.slice(0,-3));let j=n(x,S),H=j+".js";if(i(H))return H;if(s(j).includes(".")&&i(j))return j}return b(S,R,L)}}});var Y={};be(Y,{AUTH_AUDIT_STATUS:()=>ti,AUTH_AUDIT_TYPES:()=>Aa,BOOT_PROPS_FILE_NAME:()=>p5,BOOT_PROP_PARAMS:()=>dv,CLUSTERING_FLAG:()=>Rb,CLUSTERING_PROCESSES:()=>t5,CLUSTER_MESSAGE_TYPE_ENUM:()=>yb,CLUSTER_OPERATIONS:()=>P5,CONFIG_PARAMS:()=>U,CONFIG_PARAM_MAP:()=>fv,DATABASES_DIR_NAME:()=>Gc,DATABASES_PARAM_CONFIG:()=>v5,DEFAULT_DATABASE_NAME:()=>n5,ESCAPED_FORWARD_SLASH_REGEX:()=>f5,FORWARD_SLASH_REGEX:()=>u5,FUNC_VAL:()=>K5,GEO_CONVERSION_ENUM:()=>D5,HDB_COMPONENT_CONFIG_FILE:()=>zX,HDB_CONFIG_FILE:()=>YX,HDB_DEFAULT_CONFIG_FILE:()=>WX,HDB_FILE_PERMISSIONS:()=>E5,HDB_HOME_DIR_NAME:()=>m5,HDB_PID_FILE:()=>r5,HDB_PROCESS_SERVICES:()=>e5,HDB_PROC_NAME:()=>jX,HDB_RESTART_SCRIPT:()=>QX,HDB_ROOT_DIR_NAME:()=>_b,HDB_SETTINGS_NAMES:()=>tm,HDB_SUPPORT_ADDRESS:()=>uv,INFO_TABLE_HASH_ATTRIBUTE:()=>R5,INSERT_MAX_CHARACTER_SIZE:()=>T5,INSTALL_PROMPTS:()=>S5,ITC_EVENT_TYPES:()=>s_,JOB_STATUS_ENUM:()=>w5,JOB_TYPE_ENUM:()=>U5,JWT_ENUM:()=>rm,LAUNCH_SERVICE_SCRIPTS:()=>i5,LEGACY_CONFIG_PARAMS:()=>M5,LEGACY_DATABASES_DIR_NAME:()=>t_,LICENSE_FILE_NAME:()=>I5,LICENSE_KEY_DIR_NAME:()=>Tb,LICENSE_VALUES:()=>x5,LOG_LEVELS:()=>Zf,LOG_NAMES:()=>s5,METADATA_PROPERTY:()=>k5,NODE_ERROR_CODES:()=>F5,OPERATIONS_ENUM:()=>V,PERMS_CRUD_ENUM:()=>$5,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>G5,PRE_4_0_0_VERSION:()=>Y5,PROCESS_DESCRIPTORS:()=>ZX,PROCESS_NAME_ENV_PROP:()=>g5,RAM_ALLOCATION_ENUM:()=>B5,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>n_,REG_KEY_FILE_NAME:()=>A5,RESTART_TIMEOUT_MS:()=>h5,ROLE_TYPES_ENUM:()=>o5,S3_BUCKET_AUTH_KEYS:()=>C5,SEARCH_NOT_FOUND_MESSAGE:()=>c5,SEARCH_WILDCARDS:()=>V5,SERVICE_ACTIONS_ENUM:()=>L5,SUPPORT_HELP_MSG:()=>a5,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>b5,SYSTEM_SCHEMA_NAME:()=>em,SYSTEM_TABLE_NAMES:()=>gu,THREAD_TYPES:()=>Ab,TIME_STAMP_NAMES:()=>q5,TIME_STAMP_NAMES_ENUM:()=>H5,TRANSACTIONS_DIR_NAME:()=>_5,UNICODE_FORWARD_SLASH:()=>d5,UNICODE_PERIOD:()=>l5,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>y5,VALID_S3_FILE_TYPES:()=>N5,VALID_SQL_OPS_ENUM:()=>O5,VALUE_SEARCH_COMPARATORS:()=>r_,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>bb});var ZE,e_,YX,WX,_b,zX,jX,QX,lv,Eb,gb,Sb,JX,XX,ZX,e5,t5,r5,n5,s5,Zf,i5,o5,uv,a5,c5,l5,u5,d5,f5,em,m5,Tb,p5,h5,E5,Gc,t_,_5,g5,dv,S5,T5,y5,gu,R5,b5,A5,I5,w5,V,N5,C5,O5,P5,L5,D5,tm,M5,U,fv,v5,U5,yb,x5,B5,F5,k5,Rb,mv,pv,H5,q5,G5,r_,bb,$5,V5,K5,n_,rm,s_,Ab,Y5,ti,Aa,k=oe(()=>{ZE=require("node:path"),e_=w(At()),YX="harperdb-config.yaml",WX="defaultConfig.yaml",_b="hdb",zX="config.yaml",jX="harperdb.js",QX="restartHdb.js",lv="HarperDB",Eb="Custom Functions",gb="Clustering Hub",Sb="Clustering Leaf",JX="Clustering Ingest Service",XX="Clustering Reply Service",ZX={HDB:lv,CLUSTERING_HUB:gb,CLUSTERING_LEAF:Sb,CLUSTERING_INGEST_SERVICE:JX,CLUSTERING_REPLY_SERVICE:XX,CUSTOM_FUNCTIONS:Eb,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},e5={harperdb:lv,"clustering hub":gb,"clustering leaf":Sb,"custom functions":Eb,custom_functions:Eb,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},t5={CLUSTERING_HUB_PROC_DESCRIPTOR:gb,CLUSTERING_LEAF_PROC_DESCRIPTOR:Sb},r5="hdb.pid",n5="data",s5={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Zf={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},i5={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,ZE.join)(e_.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,ZE.join)(e_.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,ZE.join)(e_.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},o5={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},uv="support@harperdb.io",a5=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${uv}`,c5="None of the specified records were found.",l5="U+002E",u5=/\//g,d5="U+002F",f5=/U\+002F/g,em="system",m5=".harperdb",Tb="keys",p5="hdb_boot_properties.file",h5=6e4,E5=448,Gc="database",t_="schema",_5="transactions",g5="PROCESS_NAME",dv={SETTINGS_PATH_KEY:"settings_path"},S5={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"},T5=250,y5={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},gu={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"},R5="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"},A5="060493.ks",I5=".license",w5={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",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status",INSTALL_USAGE_LICENSE:"install_usage_license",GET_USAGE_LICENSES:"get_usage_licenses"},N5={CSV:".csv",JSON:".json"},C5={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},O5={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},P5={[V.INSERT]:V.INSERT,[V.UPDATE]:V.UPDATE,[V.UPSERT]:V.UPSERT,[V.DELETE]:V.DELETE},L5={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"},D5={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"},M5={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"},U={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",ANALYTICS_REPLICATE:"analytics_replicate",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_COOKIE_DOMAINS:"authentication_cookie_domains",AUTHENTICATION_COOKIE_EXPIRES:"authentication_cookie_expires",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MTLS_CERTIFICATEVERIFICATION:"http_mtls_certificateVerification",HTTP_MTLS_CERTIFICATEVERIFICATION_TIMEOUT:"http_mtls_certificateVerification_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_CACHETTL:"http_mtls_certificateVerification_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"http_mtls_certificateVerification_failureMode",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_REQUESTQUEUELIMIT:"http_requestQueueLimit",HTTP_HTTP2:"http_http2",LICENSE_MODE:"license_mode",LICENSE_REGION:"license_region",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_EXTERNAL_LEVEL:"logging_external_level",LOGGING_EXTERNAL_TAG:"logging_external_tag",LOGGING_EXTERNAL_PATH:"logging_external_path",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",REPLICATION_FAILOVER:"replication_failOver",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},fv={settings_path:dv.SETTINGS_PATH_KEY,hdb_root_key:U.ROOTPATH,hdb_root:U.ROOTPATH,rootpath:U.ROOTPATH,server_port_key:U.OPERATIONSAPI_NETWORK_PORT,server_port:U.OPERATIONSAPI_NETWORK_PORT,cert_key:U.TLS_CERTIFICATE,certificate:U.TLS_CERTIFICATE,private_key_key:U.TLS_PRIVATEKEY,private_key:U.TLS_PRIVATEKEY,http_secure_enabled_key:U.OPERATIONSAPI_NETWORK_HTTPS,https_on:U.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:U.OPERATIONSAPI_NETWORK_CORS,cors_on:U.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:U.LOGGING_LEVEL,log_level:U.LOGGING_LEVEL,log_path_key:U.LOGGING_ROOT,log_path:U.LOGGING_ROOT,clustering_node_name_key:U.CLUSTERING_NODENAME,node_name:U.CLUSTERING_NODENAME,clustering_enabled_key:U.CLUSTERING_ENABLED,clustering:U.CLUSTERING_ENABLED,max_http_threads:U.THREADS_COUNT,max_hdb_processes:U.THREADS_COUNT,server_timeout_key:U.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:U.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:U.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:U.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:U.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:U.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:U.LOGGING_AUDITLOG,disable_transaction_log:U.LOGGING_AUDITLOG,operation_token_timeout_key:U.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:U.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:U.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:U.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:U.HTTP_PORT,custom_functions_port:U.HTTP_PORT,custom_functions_directory_key:U.COMPONENTSROOT,custom_functions_directory:U.COMPONENTSROOT,max_custom_function_processes:U.THREADS_COUNT,logging_console:U.LOGGING_CONSOLE,log_to_file:U.LOGGING_FILE,log_to_stdstreams:U.LOGGING_STDSTREAMS,local_studio_on:U.LOCALSTUDIO_ENABLED,clustering_port:U.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:U.CLUSTERING_USER,customfunctions_network_port:U.HTTP_PORT,customfunctions_tls_certificate:U.TLS_CERTIFICATE,customfunctions_network_cors:U.HTTP_CORS,customfunctions_network_corsaccesslist:U.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:U.HTTP_HEADERSTIMEOUT,customfunctions_network_https:U.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:U.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:U.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:U.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:U.HTTP_TIMEOUT,customfunctions_tls:U.TLS,http_threads:U.THREADS_COUNT,threads:U.THREADS_COUNT,threads_count:U.THREADS_COUNT,customfunctions_processes:U.THREADS_COUNT,customfunctions_root:U.COMPONENTSROOT,operationsapi_root:U.ROOTPATH};for(let e in U){let t=U[e];fv[t.toLowerCase()]=t}v5={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},U5={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"},yb={CLUSTERING_PAYLOAD:"clustering_payload",DELEGATE_THREAD_RESPONSE:"delegate_thread_response",CLUSTERING:"clustering",SCHEMA:"schema",CLUSTER_STATUS:"cluster_status",JOB:"job",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",USER:"user",RESTART:"restart"},x5={VERSION_DEFAULT:"2.2.0"},B5={DEVELOPMENT:8192,DEFAULT:512},F5={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},k5=Symbol("metadata"),Rb="__clustering__",mv="__createdtime__",pv="__updatedtime__",H5={CREATED_TIME:mv,UPDATED_TIME:pv},q5=[mv,pv],G5=15984864e5,r_={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},bb={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},$5={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},V5=["*","%"],K5="func_val",n_={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},rm={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},s_={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"},Ab={HTTP:"http"},Y5="3.x.x",ti={SUCCESS:"success",FAILURE:"failure"},Aa={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var $c=v((_Ce,_v)=>{"use strict";var hv=require("minimist");_v.exports=W5;function W5(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=Ev(process.env),n=Ev(hv(process.argv))):(r=process.env,n=hv(process.argv));let s={};for(let i=0,a=e.length;i<a;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}o(W5,"assignCMDENVVariables");function Ev(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}o(Ev,"objKeysToLowerCase")});var ri=v(Kn=>{"use strict";global.Resource=Kn.Resource=void 0;global.tables=Kn.tables={};global.databases=Kn.databases={};global.getUser=Kn.getUser=void 0;global.authenticateUser=Kn.authenticateUser=void 0;global.server=Kn.server={};global.contentTypes=Kn.contentTypes=null;global.threads=Kn.threads=[];global.logger={};global.RequestTarget=Kn.RequestTarget=void 0;global.operation=Kn.operation=void 0;Kn._assignPackageExport=(e,t)=>{global[e]=Kn[e]=t}});var nm={};be(nm,{server:()=>Me});var gv,Me,xr=oe(()=>{gv=w(ri()),Me={};(0,gv._assignPackageExport)("server",Me)});var Gt=v((TCe,Tv)=>{"use strict";var z5="__dbis__",j5="__txns__",Q5="__environment_name__",J5="__dbi_defintion__",X5={EQUALS:"equals",STARTS_WITH:"startsWith",_STARTS_WITH:"starts_with",ENDS_WITH:"endsWith",_ENDS_WITH:"ends_with",CONTAINS:"contains",SEARCH_ALL:"searchAll",SEARCH_ALL_TO_MAP:"searchAllToMap",BATCH_SEARCH_BY_HASH:"batchSearchByHash",BATCH_SEARCH_BY_HASH_TO_MAP:"batchSearchByHashToMap",GREATER_THAN:"greaterThan",_GREATER_THAN:"greater_than",GREATER_THAN_EQUAL:"greaterThanEqual",_GREATER_THAN_EQUAL:"greater_than_equal",LESS_THAN:"lessThan",_LESS_THAN:"less_than",LESS_THAN_EQUAL:"lessThanEqual",_LESS_THAN_EQUAL:"less_than_equal",BETWEEN:"between"},Z5=["__createdtime__","__updatedtime__"],e6="\uFFFF",Sv={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},t6=Object.values(Sv);Tv.exports={AUDIT_STORE_NAME:j5,INTERNAL_DBIS_NAME:z5,DBI_DEFINITION_NAME:J5,SEARCH_TYPES:X5,TIMESTAMP_NAMES:Z5,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Q5,TRANSACTIONS_DBI_NAMES_ENUM:Sv,TRANSACTIONS_DBIS:t6,OVERFLOW_MARKER:e6}});var Ib=v((yCe,yv)=>{"use strict";var r6=require("util"),n6=require("path"),s6=require("child_process"),i6=r6.promisify(s6.execFile),o6=1e3*1e3*10;yv.exports={findPs:a6};async function a6(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await i6("ps",["wwxo",`pid,${r}`],{maxBuffer:o6});for(let s of n.trim().split(`
|
|
2
|
-
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),a=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:n6.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}o(a6,"findPs")});var Kr=v((bCe,Pv)=>{"use strict";var Rv=(k(),D(Y)),bv=Gt(),Av={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},Iv=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),wv={500:Iv("There was an error processing your request."),400:"Invalid request"},c6=wv[Av.INTERNAL_SERVER_ERROR],l6={OP_NOT_SUPPORTED_FOR_FS:o(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:o(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:o(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:o(e=>`${e} not found.`,"NOT_FOUND")},u6={CONFIG_VALIDATION:o(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},d6={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:o(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:o(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:o(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:o((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:o(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},f6={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 ${bv.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${bv.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"},m6={ATTR_NAME_LENGTH_ERR:o(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Rv.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 ${Rv.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"},Nv={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"},p6={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:o(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:o(e=>`Operation '${e}' not found`,"OP_NOT_FOUND"),SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:o((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:o(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},h6={ATTR_PERM_MISSING:o((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:o((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_BOOLEAN"),ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:o(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:o(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:o(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:o(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:o(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:o(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:o(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:o((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:o(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:o(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:o(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:o(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:o(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},E6={ATTR_NOT_FOUND:o((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:o((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:o(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:o(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:o(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:o((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:o((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},_6={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},g6={ALTER_USER_DUP_ROLES:o(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:o(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:o(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:o(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:o(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:o(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},Cv={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:o(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},Ov={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:o(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},S6={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"},T6={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},y6={...Nv,...d6,...l6,...p6,...h6,...E6,..._6,...g6,...m6,...Cv,...Ov,...S6,...T6,...u6};Pv.exports={CHECK_LOGS_WRAPPER:Iv,HDB_ERROR_MSGS:y6,DEFAULT_ERROR_MSGS:wv,DEFAULT_ERROR_RESP:c6,HTTP_STATUS_CODES:Av,LMDB_ERRORS_ENUM:f6,AUTHENTICATION_ERROR_MSGS:Nv,VALIDATION_ERROR_MSGS:Cv,ITC_ERRORS:Ov}});var ce=v(Ae=>{"use strict";var Ia=require("path"),Uv=require("fs-extra"),wn=z(),Lv=require("fs-extra"),i_=require("os"),R6=require("net"),b6=require("recursive-iterator"),Ar=(k(),D(Y)),{PACKAGE_ROOT:A6}=At(),I6=Ib(),Dv=require("papaparse"),o_=require("moment"),{inspect:w6}=require("util"),Mv=require("is-number"),N6=require("minimist"),C6=require("https"),O6=require("http"),P6=/^((\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)))$/,xv=require("util").promisify(setTimeout),L6=100,D6=5,M6="",v6=4,vv={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Ae.isEmpty=Yn;Ae.isEmptyOrZeroLength=Di;Ae.arrayHasEmptyValues=B6;Ae.arrayHasEmptyOrZeroLengthValues=F6;Ae.buildFolderPath=k6;Ae.isBoolean=Bv;Ae.errorizeMessage=U6;Ae.stripFileExtension=q6;Ae.autoCast=G6;Ae.autoCastJSON=Fv;Ae.autoCastJSONDeep=Nb;Ae.removeDir=$6;Ae.compareVersions=V6;Ae.isCompatibleDataVersion=K6;Ae.escapeRawValue=Y6;Ae.unescapeValue=W6;Ae.stringifyProps=z6;Ae.timeoutPromise=Q6;Ae.isClusterOperation=X6;Ae.getClusterUser=e8;Ae.checkGlobalSchemaTable=Z6;Ae.getHomeDir=Hv;Ae.getPropsFilePath=j6;Ae.promisifyPapaParse=t8;Ae.removeBOM=qv;Ae.createEventPromise=r8;Ae.checkProcessRunning=n8;Ae.checkSchemaTableExist=s8;Ae.checkSchemaExists=Gv;Ae.checkTableExists=$v;Ae.getStartOfTomorrowInSeconds=i8;Ae.getLimitKey=o8;Ae.isObject=H6;Ae.isNotEmptyAndHasValue=x6;Ae.autoCasterIsNumberCheck=kv;Ae.backtickASTSchemaItems=a8;Ae.isPortTaken=J6;Ae.createForkArgs=c8;Ae.autoCastBoolean=l8;Ae.asyncSetTimeout=xv;Ae.getTableHashAttribute=u8;Ae.doesSchemaExist=d8;Ae.doesTableExist=f8;Ae.stringifyObj=m8;Ae.ms_to_time=p8;Ae.changeExtension=h8;Ae.getEnvCliRootPath=Cb;Ae.noBootFile=E8;Ae.httpRequest=_8;Ae.transformReq=g8;Ae.convertToMS=S8;Ae.PACKAGE_ROOT=A6;function U6(e){return e instanceof Error?e:new Error(e)}o(U6,"errorizeMessage");function Yn(e){return e==null}o(Yn,"isEmpty");function x6(e){return!Yn(e)&&(e||e===0||e===""||Bv(e))}o(x6,"isNotEmptyAndHasValue");function Di(e){return Yn(e)||e.length===0||e.size===0}o(Di,"isEmptyOrZeroLength");function B6(e){if(Yn(e))return!0;for(let t=0;t<e.length;t++)if(Yn(e[t]))return!0;return!1}o(B6,"arrayHasEmptyValues");function F6(e){if(Di(e))return!0;for(let t=0;t<e.length;t++)if(Di(e[t]))return!0;return!1}o(F6,"arrayHasEmptyOrZeroLengthValues");function k6(...e){try{return e.join(Ia.sep)}catch{console.error(e)}}o(k6,"buildFolderPath");function Bv(e){return Yn(e)?!1:e===!0||e===!1}o(Bv,"isBoolean");function H6(e){return Yn(e)?!1:typeof e=="object"}o(H6,"isObject");function q6(e){return Di(e)?M6:e.slice(0,-v6)}o(q6,"stripFileExtension");function G6(e){return Yn(e)||e===""||typeof e!="string"?e:vv[e]!==void 0?vv[e]:kv(e)===!0?Number(e):P6.test(e)?new Date(e):e}o(G6,"autoCast");function Fv(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(Fv,"autoCastJSON");function Nb(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=Nb(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=Nb(r);n!==r&&(e[t]=n)}return e}else return Fv(e)}o(Nb,"autoCastJSONDeep");function kv(e){if(e.startsWith("0.")&&Mv(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Mv(e))}o(kv,"autoCasterIsNumberCheck");async function $6(e){if(Di(e))throw new Error(`Directory path: ${e} does not exist`);try{await Lv.emptyDir(e),await Lv.remove(e)}catch(t){throw wn.error(`Error removing files in ${e} -- ${t}`),t}}o($6,"removeDir");function V6(e,t){if(Di(e)){wn.info("Invalid current version sent as parameter.");return}if(Di(t)){wn.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,a=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(a.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(a[u],10)-parseInt(c[u],10),r)return r;return a.length-c.length}o(V6,"compareVersions");function K6(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}o(K6,"isCompatibleDataVersion");function Y6(e){if(Yn(e))return e;let t=String(e);return t==="."?Ar.UNICODE_PERIOD:t===".."?Ar.UNICODE_PERIOD+Ar.UNICODE_PERIOD:t.replace(Ar.FORWARD_SLASH_REGEX,Ar.UNICODE_FORWARD_SLASH)}o(Y6,"escapeRawValue");function W6(e){if(Yn(e))return e;let t=String(e);return t===Ar.UNICODE_PERIOD?".":t===Ar.UNICODE_PERIOD+Ar.UNICODE_PERIOD?"..":String(e).replace(Ar.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(W6,"unescapeValue");function z6(e,t){if(Yn(e))return wn.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let a of i)r+=";"+a+i_.EOL}!Di(n)&&n[0]===";"?r+=" "+n+s+i_.EOL:Di(n)||(r+=n+"="+s+i_.EOL)}catch{wn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}o(z6,"stringifyProps");function Hv(){let e;try{e=i_.homedir()}catch{e=process.env.HOME}return e}o(Hv,"getHomeDir");function j6(){let e=Ia.join(Hv(),Ar.HDB_HOME_DIR_NAME,Ar.BOOT_PROPS_FILE_NAME);return Uv.existsSync(e)||(e=Ia.join(__dirname,"../","hdb_boot_properties.file")),e}o(j6,"getPropsFilePath");function Q6(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:o(function(){clearTimeout(r)},"cancel")}}o(Q6,"timeoutPromise");async function J6(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=R6.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}o(J6,"isPortTaken");function X6(e){try{return Ar.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){wn.error(`Error checking operation against cluster ops ${t}`)}return!1}o(X6,"isClusterOperation");function Z6(e,t){let r=(Ne(),D(ft)).getDatabases();if(!r[e])return a_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return a_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Z6,"checkGlobalSchemaTable");function e8(e,t){if(Yn(t)){wn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Yn(e)||Di(e)){wn.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){wn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){wn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(e8,"getClusterUser");function t8(){Dv.parsePromise=function(e,t,r){return new Promise(function(n,s){Dv.parse(e,{header:!0,transformHeader:qv,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}o(t8,"promisifyPapaParse");function qv(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(qv,"removeBOM");function r8(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;wn.info(`Got cluster status event response: ${w6(s)}`);try{i.cancel()}catch{wn.error("Error trying to cancel timeout.")}n(s)})})}o(r8,"createEventPromise");async function n8(e){let t=!0,r=0;do await xv(L6*r++),(await I6.findPs(e)).length>0&&(t=!1);while(t&&r<D6);if(t)throw new Error(`process ${e} was not started`)}o(n8,"checkProcessRunning");function s8(e,t){let r=Gv(e);if(r)return r;let n=$v(e,t);if(n)return n}o(s8,"checkSchemaTableExist");function Gv(e){let{getDatabases:t}=(Ne(),D(ft));if(!t()[e])return a_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(Gv,"checkSchemaExists");function $v(e,t){let{getDatabases:r}=(Ne(),D(ft));if(!r()[e][t])return a_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o($v,"checkTableExists");function i8(){let e=o_().utc().add(1,"d").startOf("d").unix(),t=o_().utc().unix();return e-t}o(i8,"getStartOfTomorrowInSeconds");function o8(){return o_().utc().format("DD-MM-YYYY")}o(o8,"getLimitKey");function a8(e){try{let t=new b6(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){wn.error("Got an error back ticking items."),wn.error(t)}}o(a8,"backtickASTSchemaItems");function c8(e){return[e]}o(c8,"createForkArgs");function l8(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(l8,"autoCastBoolean");function u8(e,t){let{getDatabases:r}=(Ne(),D(ft)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}o(u8,"getTableHashAttribute");function d8(e){let{getDatabases:t}=(Ne(),D(ft));return t()[e]!==void 0}o(d8,"doesSchemaExist");function f8(e,t){let{getDatabases:r}=(Ne(),D(ft));return r()[e]?.[t]!==void 0}o(f8,"doesTableExist");function m8(e){try{return JSON.stringify(e)}catch{return e}}o(m8,"stringifyObj");function p8(e){let t=o_.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}o(p8,"ms_to_time");function h8(e,t){let r=Ia.basename(e,Ia.extname(e));return Ia.join(Ia.dirname(e),r+t)}o(h8,"changeExtension");function Cb(){if(process.env[Ar.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ar.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=N6(process.argv);if(e[Ar.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ar.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}o(Cb,"getEnvCliRootPath");var wb;function E8(){if(wb)return wb;let e=Cb();if(Cb()&&Uv.pathExistsSync(Ia.join(e,Ar.HDB_CONFIG_FILE)))return wb=!0,!0}o(E8,"noBootFile");function _8(e,t){let r;return e.protocol==="http:"?r=O6:r=C6,new Promise((n,s)=>{let i=r.request(e,a=>{a.setEncoding("utf8"),a.body="",a.on("data",c=>{a.body+=c}),a.on("end",()=>{n(a)})});i.on("error",a=>{s(a)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}o(_8,"httpRequest");function g8(e){if(!e.schema&&!e.database){e.schema=Ar.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}o(g8,"transformReq");function S8(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}o(S8,"convertToMS");var a_=Kr()});var St=v((NCe,Qv)=>{"use strict";var cm=(k(),D(Y)),T8=ce(),Nn=le(),lm=require("path"),y8=require("minimist"),Vv=require("fs-extra"),Kv=require("lodash");Nn.initSync();var{CONFIG_PARAMS:wa,DATABASES_PARAM_CONFIG:sm,SYSTEM_SCHEMA_NAME:c_}=cm,im,om,am;function Yv(){if(im!==void 0)return im;if(Nn.getHdbBasePath()!==void 0)return im=Nn.get(wa.STORAGE_PATH)||lm.join(Nn.getHdbBasePath(),cm.DATABASES_DIR_NAME),im}o(Yv,"getBaseSchemaPath");function Wv(){if(om!==void 0)return om;if(Nn.getHdbBasePath()!==void 0)return om=jv(c_),om}o(Wv,"getSystemSchemaPath");function zv(){if(am!==void 0)return am;if(Nn.getHdbBasePath()!==void 0)return am=Nn.get(cm.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||lm.join(Nn.getHdbBasePath(),cm.TRANSACTIONS_DIR_NAME),am}o(zv,"getTransactionAuditStoreBasePath");function R8(e,t){let r=Nn.get(wa.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||lm.join(zv(),e.toString())}o(R8,"getTransactionAuditStorePath");function jv(e,t){e=e.toString(),t=t&&t.toString();let r=Nn.get(cm.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||lm.join(Yv(),e)}o(jv,"getSchemaPath");function b8(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,y8(process.argv));let n=r[wa.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(a){if(!T8.isObject(n))throw a;i=n}for(let a of i){let c=a[c_];if(!c)continue;let l=Nn.get(wa.DATABASES);l=l??{};let u=c?.tables?.[t]?.[sm.PATH];if(u)return Kv.set(l,[c_,sm.TABLES,t,sm.PATH],u),Nn.setProperty(wa.DATABASES,l),u;let d=c?.[sm.PATH];if(d)return Kv.set(l,[c_,sm.PATH],d),Nn.setProperty(wa.DATABASES,l),d}}let s=r[wa.STORAGE_PATH.toUpperCase()];if(s){if(!Vv.pathExistsSync(s))throw new Error(s+" does not exist");let i=lm.join(s,e);return Vv.mkdirsSync(i),Nn.setProperty(wa.STORAGE_PATH,s),i}return Wv()}o(b8,"initSystemSchemaPaths");function A8(){im=void 0,om=void 0,am=void 0}o(A8,"resetPaths");Qv.exports={getBaseSchemaPath:Yv,getSystemSchemaPath:Wv,getTransactionAuditStorePath:R8,getTransactionAuditStoreBasePath:zv,getSchemaPath:jv,initSystemSchemaPaths:b8,resetPaths:A8}});var Cn=v((LCe,tU)=>{"use strict";var I8=Kr().LMDB_ERRORS_ENUM,OCe=require("lmdb"),w8=Gt(),PCe=require("buffer").Buffer,{OVERFLOW_MARKER:Jv,MAX_SEARCH_KEY_LENGTH:l_}=w8,Xv=["number","string","symbol","boolean","bigint"];function N8(e){if(e=e?.primaryStore||e,!e)throw new Error(I8.ENV_REQUIRED)}o(N8,"validateEnv");function C8(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o(C8,"stringifyData");function O8(e){return e instanceof Date?e.valueOf():e}o(O8,"convertKeyValueToWrite");function P8(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(Xv.includes(typeof e))return e.length>l_?[e.slice(0,l_)+Jv]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(Xv.includes(typeof i))i.length>l_?r.push(i.slice(0,l_)+Jv):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}o(P8,"getIndexedValues");var u_=0,Zv=0;function eU(){Zv=Date.now()-performance.now()}o(eU,"adjustStartTime");eU();var L8=6e4;setInterval(eU,L8).unref();function D8(){let e=performance.now()+Zv;return e>u_?(u_=e,e):(u_+=488e-6,u_)}o(D8,"getNextMonotonicTime");tU.exports={validateEnv:N8,stringifyData:C8,convertKeyValueToWrite:O8,getNextMonotonicTime:D8,getIndexedValues:P8}});var um=v((MCe,rU)=>{"use strict";var M8=(k(),D(Y)).OPERATIONS_ENUM,Ob=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=M8.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};rU.exports=Ob});var Ee=v((UCe,iU)=>{"use strict";var Su=Kr(),v8=(k(),D(Y)),d_=class extends Error{static{o(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,nU),this.statusCode=n||Su.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Su.DEFAULT_ERROR_MSGS[n]?Su.DEFAULT_ERROR_MSGS[n]:Su.DEFAULT_ERROR_MSGS[Su.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&&z()[s](i)}},Pb=class extends Error{static{o(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},Lb=class extends Error{static{o(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function nU(e,t,r,n=v8.LOG_LEVELS.ERROR,s=null,i=!1){if(sU(e))return e;let a=new d_(e,t,r,n,s);return i&&delete a.stack,a}o(nU,"handleHDBError");function Tu(e){this.message=e}o(Tu,"Violation");Tu.prototype=Object.create(Error.prototype);Tu.prototype.constructor=Tu;Tu.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var Db=class extends Tu{static{o(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function sU(e){return e.__proto__.constructor.name===d_.name}o(sU,"isHDBError");iU.exports={isHDBError:sU,handleHDBError:nU,ClientError:Pb,ServerError:Lb,AccessViolation:Db,Violation:Tu,hdbErrors:Su}});var dm=v((FCe,lU)=>{"use strict";var BCe=um(),f_=(k(),D(Y)),Mb=ce(),oU=z(),U8=require("uuid"),{handleHDBError:m_,hdbErrors:x8}=Ee(),{HDB_ERROR_MSGS:p_,HTTP_STATUS_CODES:h_}=x8;lU.exports=aU;function aU(e,t,r){for(let s=0;s<t.length;s++)cU(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];B8(i,r,e.operation)}}o(aU,"processRows");aU.validateAttribute=cU;function cU(e){if(Buffer.byteLength(String(e))>f_.INSERT_MAX_CHARACTER_SIZE)throw m_(new Error,p_.ATTR_NAME_LENGTH_ERR(e),h_.BAD_REQUEST,void 0,void 0,!0);if(Mb.isEmptyOrZeroLength(e)||Mb.isEmpty(e.trim()))throw m_(new Error,p_.ATTR_NAME_NULLISH_ERR,h_.BAD_REQUEST,void 0,void 0,!0)}o(cU,"validateAttribute");function B8(e,t,r){if(!e.hasOwnProperty(t)||Mb.isEmptyOrZeroLength(e[t])){if(r===f_.OPERATIONS_ENUM.INSERT||r===f_.OPERATIONS_ENUM.UPSERT){e[t]=U8.v4();return}throw oU.error("Update transaction aborted due to record with no hash value:",e),m_(new Error,p_.RECORD_MISSING_HASH_ERR,h_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>f_.INSERT_MAX_CHARACTER_SIZE)throw oU.error(e),m_(new Error,p_.HASH_VAL_LENGTH_ERR,h_.BAD_REQUEST,void 0,void 0,!0)}o(B8,"validateHash")});function EU(e){Ub=e}function q8(){H8=setInterval(function(){for(let e of vb)if(e.stale){let t=e.getContext()?.url;mU.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},k8).unref()}var xb,fU,mU,pU,hU,uU,vb,F8,To,fm,dU,Ub,yo,E_,k8,H8,mm=oe(()=>{xb=w(Cn()),fU=w(Ee()),mU=w(z()),pU=w(le());k();hU=w(ce()),uU=100,vb=new Set,F8=(0,hU.convertToMS)(pU.get(U.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,To={CLOSED:0,OPEN:1,LINGERING:2};o(EU,"replicationConfirmation");yo=class e{static{o(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=To.OPEN;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===To.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),vb.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(vb.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(fm&&!this.overloadChecked&&performance.now()-dU>F8)throw new fU.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===To.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===To.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,xb.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let f=this.validated;this.validated=this.writes.length;for(let p=f;p<this.validated;p++)this.writes[p]?.validate?.(this.timestamp);let m;for(let p=f;p<this.validated;p++){let h=this.writes[p];h&&(h.before||h.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let p=0;p<2;p++){let h;for(let E=f;E<this.validated;E++){let g=this.writes[E];if(!g)continue;let b=g[p===0?"before":"beforeIntermediate"];if(b){let S=b();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?To.LINGERING:To.OPEN;let s,i=[],a=0;this.writes=this.writes.filter(f=>f);let c=o(f=>{f.commit(r,f.entry,n)},"doWrite"),l=o(()=>{let f=this.writes[a++];if(f)if(f.key){(n>0||!f.entry)&&(f.entry=f.store.getEntry(f.key));let m=f.store.ifVersion(f.key,f.entry?.version??null,l);s=s||m}else l();else for(let m of this.writes)c(m)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<uU>>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,dU=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];Ub&&p&&i.push(Ub(m,p.store.getEntry(p.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+uU/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=To.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},E_=class extends yo{static{o(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,xb.getNextMonotonicTime)())}getReadTxn(){}},k8=3e4;o(q8,"startMonitoringTxns");q8()});var _U,Wn,Bb,yu=oe(()=>{_U=require("events"),Wn=class extends _U.EventEmitter{static{o(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new Bb;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)}},Bb=class{static{o(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function Tt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===To.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 yo;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,a)}catch(c){a(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function a(c){throw n.abort({}),c}}var gU,Na=oe(()=>{gU=w(ri());mm();o(Tt,"transaction");(0,gU._assignPackageExport)("transaction",Tt);Tt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Tt.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 kb={};be(kb,{add:()=>__,applyReverse:()=>SU,getRecordAtTime:()=>Fb,rebuildUpdateBefore:()=>g_});function __(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 g_(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let a=e[s];if(a?.__op__)if(a.__op__===i.__op__)n||(n={}),n[s]=a;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=a,__(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function SU(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=G8[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=TU}}function Fb(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=Mt(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":SU(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let a={},c=0;for(let l in s)s[l]===TU&&(a[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=Mt(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)a[f]&&(s[f]=d[f],a[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in a)s[l]=null;return s}var G8,TU,S_=oe(()=>{Ro();o(__,"add");__.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)};G8={add:__};o(g_,"rebuildUpdateBefore");o(SU,"applyReverse");TU={};o(Fb,"getRecordAtTime")});var zn=v(y_=>{var T_=z();for(let e of["trace","debug","info","warn","error","fatal","notify"])T_.logsAtLevel(e)&&(y_[e]=T_[e]);y_.loggerWithTag=e=>T_.loggerWithTag(e,!0);y_.setLogLevel=T_.setLogLevel});var NU={};be(NU,{parse:()=>Gb,streamAsJSON:()=>hm,stringify:()=>Vc});function hm(e){return new Hb({value:e})}function yU(e){return console.error(e),JSON.stringify(pm(e))}function RU(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Vc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===IU)return wU(e);if(t.resolution)return t.resolution.then(()=>Vc(e));throw t}}function wU(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+=wU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Vc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Gb(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),K8.test(e)?$8.parse(e):JSON.parse(e)):null}var bU,qb,AU,$8,V8,IU,pm,Hb,K8,$b=oe(()=>{bU=require("stream"),qb=w(z()),AU=w(require("json-bigint-fixes")),$8=(0,AU.default)({useNativeBigInt:!0}),V8=1e4,IU={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw IU};({errorToString:pm}=qb);o(hm,"streamAsJSON");Hb=class extends bU.Readable{static{o(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let a;for(;;){try{a=i.next(),a.then&&(yield a.then(c=>(a=c,""),c=>(qb.warn("Error serializing in stream",c),a={done:!1,value:{error:pm(c)}},i={next:o(()=>({done:!0}),"next")},"")))}catch(c){a={done:!1,value:{error:pm(c)}},i={next:o(()=>({done:!0}),"next")}}if(a.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(a.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),yU)}catch(s){yield yU(s)}else yield Vc(t)}else yield Vc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);RU(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(pm(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>V8?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 RU(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(pm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};o(yU,"handleError");o(RU,"when");o(Vc,"stringify");o(wU,"jsStringify");K8=/[[,:]\s*-?\d{16,}/;o(Gb,"parse")});var BU={};be(BU,{asyncSerialization:()=>zb,contentTypes:()=>Wb,findBestSerializer:()=>b_,getDeserializer:()=>wo,hasAsyncSerialization:()=>jb,registerContentHandlers:()=>gm,serialize:()=>Sm,serializeMessage:()=>Io,toCsvStream:()=>R_});function Y8(e){try{return e?.[0]===123?Yb(e):e}catch{return e}}function gm(e){e.register(W8,{serializers:[{regex:/^application\/json$/,serializer:hm},{regex:/^application\/cbor$/,serializer:o(function(t){return new Kc.EncoderStream(_m).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:o(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Yc.Readable.from((0,Mi.encodeIter)(t,_m)):(0,Mi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:o(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),R_(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Mi.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Kc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function b_(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,a,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...d]=l.split(/\s*;\s*/),f=1,m={q:1};for(let h of d){let E=h.indexOf("=");m[h.substring(0,E)]=h.substring(E+1)}f=+m.q;let p=an.get(u);if(p){let h=(p.q||1)*f;h>s&&(n=p,i=p.type||u,s=h,a=m)}}if(!n){if(r)throw new PU.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(an.keys()).join(", "),406);n=an.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:a}}function Sm(e,t,r){let n=OU&&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 bs)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=b_(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}),Kb.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let a=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),a=a.pipe((0,Ao.createBrotliCompress)({params:{[Ao.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Ao.constants.BROTLI_MODE_TEXT:Ao.constants.BROTLI_MODE_GENERIC,[Ao.constants.BROTLI_PARAM_QUALITY]:2}}))),a}s=i.serializer.serialize(e,r)}return n&&s?.length>OU?(r.headers.set("Content-Encoding","br"),new Promise((i,a)=>(0,Ao.brotliCompress)(s,(c,l)=>{c?a(c):i(l)}))):s}function Io(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;bo=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=b_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=Em(e);return bo?.length>0?(bo.length===1?bo[0]:Promise.all(bo)).then(()=>Io(e,t,!0)):n}finally{bo=void 0}}function zb(e){if(bo)bo.push(e);else throw new Error("Unable to serialize asynchronously")}function jb(){return!!bo}function z8(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 Q8(e){return j8.includes(e)}function J8(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,a]=s.split("=");r[i.trim()]=a.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function wo(e="",t=!1){let r=J8(e),n=r.type&&an.get(r.type)?.deserialize||X8(r);return t?s=>z8(s).then(n):n}function X8(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!Q8(e.parameters.charset)&&Kb.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 Yb(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function Z8(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 R_(e,t){let r=Yc.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(a=>({label:a,value:a})));let s={objectMode:!0},i=new MU.Transform(n,s);return r.pipe(i)}var Mi,Kc,Ao,PU,Yc,LU,Vb,DU,Kb,MU,vU,UU,Em,Yb,_m,an,Wb,CU,xU,W8,OU,bo,j8,No=oe(()=>{$b();Mi=require("msgpackr"),Kc=require("cbor-x"),Ao=require("zlib"),PU=w(Ee()),Yc=w(require("stream"));xr();LU=w(ri()),Vb=w(le());k();DU=w(require("yaml")),Kb=w(zn());As();MU=require("json2csv"),vU=w(require("fastify-plugin")),UU=Vb.default.get(U.SERIALIZATION_BIGINT)!==!1,Em=UU?Vc:JSON.stringify,Yb=UU?Gb:JSON.parse,_m={useRecords:!1,useToJSON:!0},an=new Map,Wb=an;Me.contentTypes=Wb;(0,LU._assignPackageExport)("contentTypes",Wb);an.set("application/json",{serializeStream:hm,serialize:Em,deserialize(e){return Yb(e)},q:.8});CU=new Kc.Encoder(_m);an.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Kc.EncoderStream(_m).end(e)},serialize:CU.encode,deserialize:CU.decode,q:1});an.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Yc.Readable.from((0,Mi.encodeIter)(e,_m)):(0,Mi.pack)(e)},serialize:Mi.pack,deserialize:Mi.unpack,q:.9});an.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),R_(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]),R_(e,e?.getColumns?.())},q:.1});an.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return Yc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});an.set("text/yaml",{serialize(e){return DU.stringify(e,{aliasDuplicateObjects:!1})},q:.7});an.set("text/event-stream",{serializeStream:o(function(e){return Yc.Readable.from(Z8(e,this.serialize))},"serializeStream"),serialize:o(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
1
|
+
"use strict";var UX=Object.create;var Xf=Object.defineProperty;var xX=Object.getOwnPropertyDescriptor;var BX=Object.getOwnPropertyNames;var FX=Object.getPrototypeOf,kX=Object.prototype.hasOwnProperty;var o=(e,t)=>Xf(e,"name",{value:t,configurable:!0});var oe=(e,t)=>()=>(e&&(t=e(e=0)),t);var v=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),be=(e,t)=>{for(var r in t)Xf(e,r,{get:t[r],enumerable:!0})},sv=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of BX(t))!kX.call(e,s)&&s!==r&&Xf(e,s,{get:()=>t[s],enumerable:!(n=xX(t,s))||n.enumerable});return e};var w=(e,t,r)=>(r=e!=null?UX(FX(e)):{},sv(t||!e||!e.__esModule?Xf(r,"default",{value:e,enumerable:!0}):r,e)),D=e=>sv(Xf({},"__esModule",{value:!0}),e);var bt=v((dCe,av)=>{var{join:HX,dirname:iv}=require("node:path"),{existsSync:qX,readFileSync:GX}=require("node:fs");function $X(){let t=__dirname,r,n=0;for(;!qX(r=HX(t,"package.json"));)if(t===(t=iv(t))||n++>10)throw new Error("Could not find package root");return r}o($X,"findPackageJson");var ov=$X(),VX=JSON.parse(GX(ov,"utf8")),KX=iv(ov);av.exports={packageJson:VX,PACKAGE_ROOT:KX}});var JE=v((mCe,cv)=>{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:a,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}=bt(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],E="ts-build";if(d){let S=!1,R=!1;if(R=i(n(p,E))){let L=new Set;e.sync(h.map(O=>`${O}/**/*.ts`),{cwd:p}).forEach(O=>{let x=0,j=0;try{L.add(O),x=a(n(p,O)).mtimeMs-5e3,j=a(n(p,E,O.replace(/.ts$/,".js"))).mtimeMs}catch{}x>j&&(S=!0)}),e.sync(h.map(O=>`${O}/**/*.js`),{cwd:n(p,E)}).forEach(O=>{if(!L.has(O.replace(/.js$/,".ts")))try{u(n(p,E,O))}catch{}})}else S=!0;if(S){console.log("Compiling TypeScript...");let L=f("npx",["tsc"],{cwd:p});if(L.stdout?.length&&console.log(L.stdout.toString()),L.stderr?.length&&console.log(L.stderr.toString()),R){let O=n(t(),"harperdb-tsc.pid"),x=!1;if(i(O))try{process.kill(+c(O,"utf8"),0),x=!0}catch{}if(!x){console.log("Starting background TypeScript compilation...");let j=m("npx",["tsc","--watch"],{detached:!0,cwd:p,stdio:"ignore"});j.on("error",H=>{console.error("Error trying to compile TypeScript",H)}),j.pid&&l(O,String(j.pid),"utf-8"),j.unref()}}}}let g=cv.constructor,b=g._findPath;g._findPath=function(S,R,L){if(S.startsWith(".")&&!L&&R.length===1&&R[0].startsWith(p)&&!R[0].includes("node_modules")){let O=r(p,R[0]),x;O.startsWith(E)?x=n(p,r(E,O)):x=n(p,E,O),(S.endsWith(".js")||S.endsWith(".ts"))&&(S=S.slice(0,-3));let j=n(x,S),H=j+".js";if(i(H))return H;if(s(j).includes(".")&&i(j))return j}return b(S,R,L)}}});var Y={};be(Y,{AUTH_AUDIT_STATUS:()=>ti,AUTH_AUDIT_TYPES:()=>Aa,BOOT_PROPS_FILE_NAME:()=>p5,BOOT_PROP_PARAMS:()=>dv,CLUSTERING_FLAG:()=>Rb,CLUSTERING_PROCESSES:()=>t5,CLUSTER_MESSAGE_TYPE_ENUM:()=>yb,CLUSTER_OPERATIONS:()=>P5,CONFIG_PARAMS:()=>U,CONFIG_PARAM_MAP:()=>fv,DATABASES_DIR_NAME:()=>Gc,DATABASES_PARAM_CONFIG:()=>v5,DEFAULT_DATABASE_NAME:()=>n5,ESCAPED_FORWARD_SLASH_REGEX:()=>f5,FORWARD_SLASH_REGEX:()=>u5,FUNC_VAL:()=>K5,GEO_CONVERSION_ENUM:()=>D5,HDB_COMPONENT_CONFIG_FILE:()=>zX,HDB_CONFIG_FILE:()=>YX,HDB_DEFAULT_CONFIG_FILE:()=>WX,HDB_FILE_PERMISSIONS:()=>E5,HDB_HOME_DIR_NAME:()=>m5,HDB_PID_FILE:()=>r5,HDB_PROCESS_SERVICES:()=>e5,HDB_PROC_NAME:()=>jX,HDB_RESTART_SCRIPT:()=>QX,HDB_ROOT_DIR_NAME:()=>_b,HDB_SETTINGS_NAMES:()=>tm,HDB_SUPPORT_ADDRESS:()=>uv,INFO_TABLE_HASH_ATTRIBUTE:()=>R5,INSERT_MAX_CHARACTER_SIZE:()=>T5,INSTALL_PROMPTS:()=>S5,ITC_EVENT_TYPES:()=>n_,JOB_STATUS_ENUM:()=>w5,JOB_TYPE_ENUM:()=>U5,JWT_ENUM:()=>rm,LAUNCH_SERVICE_SCRIPTS:()=>i5,LEGACY_CONFIG_PARAMS:()=>M5,LEGACY_DATABASES_DIR_NAME:()=>e_,LICENSE_FILE_NAME:()=>I5,LICENSE_KEY_DIR_NAME:()=>Tb,LICENSE_VALUES:()=>x5,LOG_LEVELS:()=>Zf,LOG_NAMES:()=>s5,METADATA_PROPERTY:()=>k5,NODE_ERROR_CODES:()=>F5,OPERATIONS_ENUM:()=>V,PERMS_CRUD_ENUM:()=>$5,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>G5,PRE_4_0_0_VERSION:()=>Y5,PROCESS_DESCRIPTORS:()=>ZX,PROCESS_NAME_ENV_PROP:()=>g5,RAM_ALLOCATION_ENUM:()=>B5,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>r_,REG_KEY_FILE_NAME:()=>A5,RESTART_TIMEOUT_MS:()=>h5,ROLE_TYPES_ENUM:()=>o5,S3_BUCKET_AUTH_KEYS:()=>C5,SEARCH_NOT_FOUND_MESSAGE:()=>c5,SEARCH_WILDCARDS:()=>V5,SERVICE_ACTIONS_ENUM:()=>L5,SUPPORT_HELP_MSG:()=>a5,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>b5,SYSTEM_SCHEMA_NAME:()=>em,SYSTEM_TABLE_NAMES:()=>gu,THREAD_TYPES:()=>Ab,TIME_STAMP_NAMES:()=>q5,TIME_STAMP_NAMES_ENUM:()=>H5,TRANSACTIONS_DIR_NAME:()=>_5,UNICODE_FORWARD_SLASH:()=>d5,UNICODE_PERIOD:()=>l5,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>y5,VALID_S3_FILE_TYPES:()=>N5,VALID_SQL_OPS_ENUM:()=>O5,VALUE_SEARCH_COMPARATORS:()=>t_,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>bb});var XE,ZE,YX,WX,_b,zX,jX,QX,lv,Eb,gb,Sb,JX,XX,ZX,e5,t5,r5,n5,s5,Zf,i5,o5,uv,a5,c5,l5,u5,d5,f5,em,m5,Tb,p5,h5,E5,Gc,e_,_5,g5,dv,S5,T5,y5,gu,R5,b5,A5,I5,w5,V,N5,C5,O5,P5,L5,D5,tm,M5,U,fv,v5,U5,yb,x5,B5,F5,k5,Rb,mv,pv,H5,q5,G5,t_,bb,$5,V5,K5,r_,rm,n_,Ab,Y5,ti,Aa,k=oe(()=>{XE=require("node:path"),ZE=w(bt()),YX="harperdb-config.yaml",WX="defaultConfig.yaml",_b="hdb",zX="config.yaml",jX="harperdb.js",QX="restartHdb.js",lv="HarperDB",Eb="Custom Functions",gb="Clustering Hub",Sb="Clustering Leaf",JX="Clustering Ingest Service",XX="Clustering Reply Service",ZX={HDB:lv,CLUSTERING_HUB:gb,CLUSTERING_LEAF:Sb,CLUSTERING_INGEST_SERVICE:JX,CLUSTERING_REPLY_SERVICE:XX,CUSTOM_FUNCTIONS:Eb,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},e5={harperdb:lv,"clustering hub":gb,"clustering leaf":Sb,"custom functions":Eb,custom_functions:Eb,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},t5={CLUSTERING_HUB_PROC_DESCRIPTOR:gb,CLUSTERING_LEAF_PROC_DESCRIPTOR:Sb},r5="hdb.pid",n5="data",s5={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Zf={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},i5={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,XE.join)(ZE.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,XE.join)(ZE.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,XE.join)(ZE.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},o5={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},uv="support@harperdb.io",a5=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${uv}`,c5="None of the specified records were found.",l5="U+002E",u5=/\//g,d5="U+002F",f5=/U\+002F/g,em="system",m5=".harperdb",Tb="keys",p5="hdb_boot_properties.file",h5=6e4,E5=448,Gc="database",e_="schema",_5="transactions",g5="PROCESS_NAME",dv={SETTINGS_PATH_KEY:"settings_path"},S5={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"},T5=250,y5={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},gu={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"},R5="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"},A5="060493.ks",I5=".license",w5={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",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status",INSTALL_USAGE_LICENSE:"install_usage_license",GET_USAGE_LICENSES:"get_usage_licenses"},N5={CSV:".csv",JSON:".json"},C5={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},O5={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},P5={[V.INSERT]:V.INSERT,[V.UPDATE]:V.UPDATE,[V.UPSERT]:V.UPSERT,[V.DELETE]:V.DELETE},L5={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"},D5={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"},M5={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"},U={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",ANALYTICS_REPLICATE:"analytics_replicate",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_COOKIE_DOMAINS:"authentication_cookie_domains",AUTHENTICATION_COOKIE_EXPIRES:"authentication_cookie_expires",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MTLS_CERTIFICATEVERIFICATION:"http_mtls_certificateVerification",HTTP_MTLS_CERTIFICATEVERIFICATION_TIMEOUT:"http_mtls_certificateVerification_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_CACHETTL:"http_mtls_certificateVerification_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"http_mtls_certificateVerification_failureMode",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_REQUESTQUEUELIMIT:"http_requestQueueLimit",HTTP_HTTP2:"http_http2",LICENSE_MODE:"license_mode",LICENSE_REGION:"license_region",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_EXTERNAL_LEVEL:"logging_external_level",LOGGING_EXTERNAL_TAG:"logging_external_tag",LOGGING_EXTERNAL_PATH:"logging_external_path",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",REPLICATION_FAILOVER:"replication_failOver",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},fv={settings_path:dv.SETTINGS_PATH_KEY,hdb_root_key:U.ROOTPATH,hdb_root:U.ROOTPATH,rootpath:U.ROOTPATH,server_port_key:U.OPERATIONSAPI_NETWORK_PORT,server_port:U.OPERATIONSAPI_NETWORK_PORT,cert_key:U.TLS_CERTIFICATE,certificate:U.TLS_CERTIFICATE,private_key_key:U.TLS_PRIVATEKEY,private_key:U.TLS_PRIVATEKEY,http_secure_enabled_key:U.OPERATIONSAPI_NETWORK_HTTPS,https_on:U.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:U.OPERATIONSAPI_NETWORK_CORS,cors_on:U.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:U.LOGGING_LEVEL,log_level:U.LOGGING_LEVEL,log_path_key:U.LOGGING_ROOT,log_path:U.LOGGING_ROOT,clustering_node_name_key:U.CLUSTERING_NODENAME,node_name:U.CLUSTERING_NODENAME,clustering_enabled_key:U.CLUSTERING_ENABLED,clustering:U.CLUSTERING_ENABLED,max_http_threads:U.THREADS_COUNT,max_hdb_processes:U.THREADS_COUNT,server_timeout_key:U.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:U.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:U.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:U.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:U.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:U.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:U.LOGGING_AUDITLOG,disable_transaction_log:U.LOGGING_AUDITLOG,operation_token_timeout_key:U.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:U.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:U.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:U.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:U.HTTP_PORT,custom_functions_port:U.HTTP_PORT,custom_functions_directory_key:U.COMPONENTSROOT,custom_functions_directory:U.COMPONENTSROOT,max_custom_function_processes:U.THREADS_COUNT,logging_console:U.LOGGING_CONSOLE,log_to_file:U.LOGGING_FILE,log_to_stdstreams:U.LOGGING_STDSTREAMS,local_studio_on:U.LOCALSTUDIO_ENABLED,clustering_port:U.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:U.CLUSTERING_USER,customfunctions_network_port:U.HTTP_PORT,customfunctions_tls_certificate:U.TLS_CERTIFICATE,customfunctions_network_cors:U.HTTP_CORS,customfunctions_network_corsaccesslist:U.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:U.HTTP_HEADERSTIMEOUT,customfunctions_network_https:U.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:U.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:U.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:U.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:U.HTTP_TIMEOUT,customfunctions_tls:U.TLS,http_threads:U.THREADS_COUNT,threads:U.THREADS_COUNT,threads_count:U.THREADS_COUNT,customfunctions_processes:U.THREADS_COUNT,customfunctions_root:U.COMPONENTSROOT,operationsapi_root:U.ROOTPATH};for(let e in U){let t=U[e];fv[t.toLowerCase()]=t}v5={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},U5={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"},yb={CLUSTERING_PAYLOAD:"clustering_payload",DELEGATE_THREAD_RESPONSE:"delegate_thread_response",CLUSTERING:"clustering",SCHEMA:"schema",CLUSTER_STATUS:"cluster_status",JOB:"job",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",USER:"user",RESTART:"restart"},x5={VERSION_DEFAULT:"2.2.0"},B5={DEVELOPMENT:8192,DEFAULT:512},F5={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},k5=Symbol("metadata"),Rb="__clustering__",mv="__createdtime__",pv="__updatedtime__",H5={CREATED_TIME:mv,UPDATED_TIME:pv},q5=[mv,pv],G5=15984864e5,t_={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},bb={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},$5={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},V5=["*","%"],K5="func_val",r_={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},rm={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},n_={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"},Ab={HTTP:"http"},Y5="3.x.x",ti={SUCCESS:"success",FAILURE:"failure"},Aa={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var $c=v((pCe,_v)=>{"use strict";var hv=require("minimist");_v.exports=W5;function W5(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=Ev(process.env),n=Ev(hv(process.argv))):(r=process.env,n=hv(process.argv));let s={};for(let i=0,a=e.length;i<a;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}o(W5,"assignCMDENVVariables");function Ev(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}o(Ev,"objKeysToLowerCase")});var ri=v(Kn=>{"use strict";global.Resource=Kn.Resource=void 0;global.tables=Kn.tables={};global.databases=Kn.databases={};global.getUser=Kn.getUser=void 0;global.authenticateUser=Kn.authenticateUser=void 0;global.server=Kn.server={};global.contentTypes=Kn.contentTypes=null;global.threads=Kn.threads=[];global.logger={};global.RequestTarget=Kn.RequestTarget=void 0;global.operation=Kn.operation=void 0;Kn._assignPackageExport=(e,t)=>{global[e]=Kn[e]=t}});var nm={};be(nm,{server:()=>Me});var gv,Me,xr=oe(()=>{gv=w(ri()),Me={};(0,gv._assignPackageExport)("server",Me)});var Gt=v((_Ce,Tv)=>{"use strict";var z5="__dbis__",j5="__txns__",Q5="__environment_name__",J5="__dbi_defintion__",X5={EQUALS:"equals",STARTS_WITH:"startsWith",_STARTS_WITH:"starts_with",ENDS_WITH:"endsWith",_ENDS_WITH:"ends_with",CONTAINS:"contains",SEARCH_ALL:"searchAll",SEARCH_ALL_TO_MAP:"searchAllToMap",BATCH_SEARCH_BY_HASH:"batchSearchByHash",BATCH_SEARCH_BY_HASH_TO_MAP:"batchSearchByHashToMap",GREATER_THAN:"greaterThan",_GREATER_THAN:"greater_than",GREATER_THAN_EQUAL:"greaterThanEqual",_GREATER_THAN_EQUAL:"greater_than_equal",LESS_THAN:"lessThan",_LESS_THAN:"less_than",LESS_THAN_EQUAL:"lessThanEqual",_LESS_THAN_EQUAL:"less_than_equal",BETWEEN:"between"},Z5=["__createdtime__","__updatedtime__"],e6="\uFFFF",Sv={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},t6=Object.values(Sv);Tv.exports={AUDIT_STORE_NAME:j5,INTERNAL_DBIS_NAME:z5,DBI_DEFINITION_NAME:J5,SEARCH_TYPES:X5,TIMESTAMP_NAMES:Z5,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Q5,TRANSACTIONS_DBI_NAMES_ENUM:Sv,TRANSACTIONS_DBIS:t6,OVERFLOW_MARKER:e6}});var Ib=v((gCe,yv)=>{"use strict";var r6=require("util"),n6=require("path"),s6=require("child_process"),i6=r6.promisify(s6.execFile),o6=1e3*1e3*10;yv.exports={findPs:a6};async function a6(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await i6("ps",["wwxo",`pid,${r}`],{maxBuffer:o6});for(let s of n.trim().split(`
|
|
2
|
+
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),a=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:n6.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}o(a6,"findPs")});var Kr=v((TCe,Pv)=>{"use strict";var Rv=(k(),D(Y)),bv=Gt(),Av={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},Iv=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),wv={500:Iv("There was an error processing your request."),400:"Invalid request"},c6=wv[Av.INTERNAL_SERVER_ERROR],l6={OP_NOT_SUPPORTED_FOR_FS:o(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:o(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:o(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:o(e=>`${e} not found.`,"NOT_FOUND")},u6={CONFIG_VALIDATION:o(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},d6={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:o(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:o(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:o(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:o((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:o(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},f6={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 ${bv.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${bv.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"},m6={ATTR_NAME_LENGTH_ERR:o(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Rv.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 ${Rv.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"},Nv={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"},p6={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:o(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:o(e=>`Operation '${e}' not found`,"OP_NOT_FOUND"),SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:o((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:o(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},h6={ATTR_PERM_MISSING:o((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:o((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_BOOLEAN"),ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:o(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:o(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:o(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:o(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:o(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:o(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:o(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:o((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:o(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:o(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:o(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:o(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:o(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},E6={ATTR_NOT_FOUND:o((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:o((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:o(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:o(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:o(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:o((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:o((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},_6={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},g6={ALTER_USER_DUP_ROLES:o(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:o(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:o(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:o(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:o(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:o(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},Cv={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:o(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},Ov={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:o(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},S6={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"},T6={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},y6={...Nv,...d6,...l6,...p6,...h6,...E6,..._6,...g6,...m6,...Cv,...Ov,...S6,...T6,...u6};Pv.exports={CHECK_LOGS_WRAPPER:Iv,HDB_ERROR_MSGS:y6,DEFAULT_ERROR_MSGS:wv,DEFAULT_ERROR_RESP:c6,HTTP_STATUS_CODES:Av,LMDB_ERRORS_ENUM:f6,AUTHENTICATION_ERROR_MSGS:Nv,VALIDATION_ERROR_MSGS:Cv,ITC_ERRORS:Ov}});var ce=v(Ae=>{"use strict";var Ia=require("path"),Uv=require("fs-extra"),wn=z(),Lv=require("fs-extra"),s_=require("os"),R6=require("net"),b6=require("recursive-iterator"),Ar=(k(),D(Y)),{PACKAGE_ROOT:A6}=bt(),I6=Ib(),Dv=require("papaparse"),i_=require("moment"),{inspect:w6}=require("util"),Mv=require("is-number"),N6=require("minimist"),C6=require("https"),O6=require("http"),P6=/^((\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)))$/,xv=require("util").promisify(setTimeout),L6=100,D6=5,M6="",v6=4,vv={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Ae.isEmpty=Yn;Ae.isEmptyOrZeroLength=Di;Ae.arrayHasEmptyValues=B6;Ae.arrayHasEmptyOrZeroLengthValues=F6;Ae.buildFolderPath=k6;Ae.isBoolean=Bv;Ae.errorizeMessage=U6;Ae.stripFileExtension=q6;Ae.autoCast=G6;Ae.autoCastJSON=Fv;Ae.autoCastJSONDeep=Nb;Ae.removeDir=$6;Ae.compareVersions=V6;Ae.isCompatibleDataVersion=K6;Ae.escapeRawValue=Y6;Ae.unescapeValue=W6;Ae.stringifyProps=z6;Ae.timeoutPromise=Q6;Ae.isClusterOperation=X6;Ae.getClusterUser=e8;Ae.checkGlobalSchemaTable=Z6;Ae.getHomeDir=Hv;Ae.getPropsFilePath=j6;Ae.promisifyPapaParse=t8;Ae.removeBOM=qv;Ae.createEventPromise=r8;Ae.checkProcessRunning=n8;Ae.checkSchemaTableExist=s8;Ae.checkSchemaExists=Gv;Ae.checkTableExists=$v;Ae.getStartOfTomorrowInSeconds=i8;Ae.getLimitKey=o8;Ae.isObject=H6;Ae.isNotEmptyAndHasValue=x6;Ae.autoCasterIsNumberCheck=kv;Ae.backtickASTSchemaItems=a8;Ae.isPortTaken=J6;Ae.createForkArgs=c8;Ae.autoCastBoolean=l8;Ae.asyncSetTimeout=xv;Ae.getTableHashAttribute=u8;Ae.doesSchemaExist=d8;Ae.doesTableExist=f8;Ae.stringifyObj=m8;Ae.ms_to_time=p8;Ae.changeExtension=h8;Ae.getEnvCliRootPath=Cb;Ae.noBootFile=E8;Ae.httpRequest=_8;Ae.transformReq=g8;Ae.convertToMS=S8;Ae.PACKAGE_ROOT=A6;function U6(e){return e instanceof Error?e:new Error(e)}o(U6,"errorizeMessage");function Yn(e){return e==null}o(Yn,"isEmpty");function x6(e){return!Yn(e)&&(e||e===0||e===""||Bv(e))}o(x6,"isNotEmptyAndHasValue");function Di(e){return Yn(e)||e.length===0||e.size===0}o(Di,"isEmptyOrZeroLength");function B6(e){if(Yn(e))return!0;for(let t=0;t<e.length;t++)if(Yn(e[t]))return!0;return!1}o(B6,"arrayHasEmptyValues");function F6(e){if(Di(e))return!0;for(let t=0;t<e.length;t++)if(Di(e[t]))return!0;return!1}o(F6,"arrayHasEmptyOrZeroLengthValues");function k6(...e){try{return e.join(Ia.sep)}catch{console.error(e)}}o(k6,"buildFolderPath");function Bv(e){return Yn(e)?!1:e===!0||e===!1}o(Bv,"isBoolean");function H6(e){return Yn(e)?!1:typeof e=="object"}o(H6,"isObject");function q6(e){return Di(e)?M6:e.slice(0,-v6)}o(q6,"stripFileExtension");function G6(e){return Yn(e)||e===""||typeof e!="string"?e:vv[e]!==void 0?vv[e]:kv(e)===!0?Number(e):P6.test(e)?new Date(e):e}o(G6,"autoCast");function Fv(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(Fv,"autoCastJSON");function Nb(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=Nb(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=Nb(r);n!==r&&(e[t]=n)}return e}else return Fv(e)}o(Nb,"autoCastJSONDeep");function kv(e){if(e.startsWith("0.")&&Mv(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Mv(e))}o(kv,"autoCasterIsNumberCheck");async function $6(e){if(Di(e))throw new Error(`Directory path: ${e} does not exist`);try{await Lv.emptyDir(e),await Lv.remove(e)}catch(t){throw wn.error(`Error removing files in ${e} -- ${t}`),t}}o($6,"removeDir");function V6(e,t){if(Di(e)){wn.info("Invalid current version sent as parameter.");return}if(Di(t)){wn.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,a=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(a.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(a[u],10)-parseInt(c[u],10),r)return r;return a.length-c.length}o(V6,"compareVersions");function K6(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}o(K6,"isCompatibleDataVersion");function Y6(e){if(Yn(e))return e;let t=String(e);return t==="."?Ar.UNICODE_PERIOD:t===".."?Ar.UNICODE_PERIOD+Ar.UNICODE_PERIOD:t.replace(Ar.FORWARD_SLASH_REGEX,Ar.UNICODE_FORWARD_SLASH)}o(Y6,"escapeRawValue");function W6(e){if(Yn(e))return e;let t=String(e);return t===Ar.UNICODE_PERIOD?".":t===Ar.UNICODE_PERIOD+Ar.UNICODE_PERIOD?"..":String(e).replace(Ar.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(W6,"unescapeValue");function z6(e,t){if(Yn(e))return wn.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let a of i)r+=";"+a+s_.EOL}!Di(n)&&n[0]===";"?r+=" "+n+s+s_.EOL:Di(n)||(r+=n+"="+s+s_.EOL)}catch{wn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}o(z6,"stringifyProps");function Hv(){let e;try{e=s_.homedir()}catch{e=process.env.HOME}return e}o(Hv,"getHomeDir");function j6(){let e=Ia.join(Hv(),Ar.HDB_HOME_DIR_NAME,Ar.BOOT_PROPS_FILE_NAME);return Uv.existsSync(e)||(e=Ia.join(__dirname,"../","hdb_boot_properties.file")),e}o(j6,"getPropsFilePath");function Q6(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:o(function(){clearTimeout(r)},"cancel")}}o(Q6,"timeoutPromise");async function J6(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=R6.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}o(J6,"isPortTaken");function X6(e){try{return Ar.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){wn.error(`Error checking operation against cluster ops ${t}`)}return!1}o(X6,"isClusterOperation");function Z6(e,t){let r=(Ne(),D(ft)).getDatabases();if(!r[e])return o_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return o_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Z6,"checkGlobalSchemaTable");function e8(e,t){if(Yn(t)){wn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Yn(e)||Di(e)){wn.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){wn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){wn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(e8,"getClusterUser");function t8(){Dv.parsePromise=function(e,t,r){return new Promise(function(n,s){Dv.parse(e,{header:!0,transformHeader:qv,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}o(t8,"promisifyPapaParse");function qv(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(qv,"removeBOM");function r8(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;wn.info(`Got cluster status event response: ${w6(s)}`);try{i.cancel()}catch{wn.error("Error trying to cancel timeout.")}n(s)})})}o(r8,"createEventPromise");async function n8(e){let t=!0,r=0;do await xv(L6*r++),(await I6.findPs(e)).length>0&&(t=!1);while(t&&r<D6);if(t)throw new Error(`process ${e} was not started`)}o(n8,"checkProcessRunning");function s8(e,t){let r=Gv(e);if(r)return r;let n=$v(e,t);if(n)return n}o(s8,"checkSchemaTableExist");function Gv(e){let{getDatabases:t}=(Ne(),D(ft));if(!t()[e])return o_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(Gv,"checkSchemaExists");function $v(e,t){let{getDatabases:r}=(Ne(),D(ft));if(!r()[e][t])return o_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o($v,"checkTableExists");function i8(){let e=i_().utc().add(1,"d").startOf("d").unix(),t=i_().utc().unix();return e-t}o(i8,"getStartOfTomorrowInSeconds");function o8(){return i_().utc().format("DD-MM-YYYY")}o(o8,"getLimitKey");function a8(e){try{let t=new b6(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){wn.error("Got an error back ticking items."),wn.error(t)}}o(a8,"backtickASTSchemaItems");function c8(e){return[e]}o(c8,"createForkArgs");function l8(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(l8,"autoCastBoolean");function u8(e,t){let{getDatabases:r}=(Ne(),D(ft)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}o(u8,"getTableHashAttribute");function d8(e){let{getDatabases:t}=(Ne(),D(ft));return t()[e]!==void 0}o(d8,"doesSchemaExist");function f8(e,t){let{getDatabases:r}=(Ne(),D(ft));return r()[e]?.[t]!==void 0}o(f8,"doesTableExist");function m8(e){try{return JSON.stringify(e)}catch{return e}}o(m8,"stringifyObj");function p8(e){let t=i_.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}o(p8,"ms_to_time");function h8(e,t){let r=Ia.basename(e,Ia.extname(e));return Ia.join(Ia.dirname(e),r+t)}o(h8,"changeExtension");function Cb(){if(process.env[Ar.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ar.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=N6(process.argv);if(e[Ar.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ar.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}o(Cb,"getEnvCliRootPath");var wb;function E8(){if(wb)return wb;let e=Cb();if(Cb()&&Uv.pathExistsSync(Ia.join(e,Ar.HDB_CONFIG_FILE)))return wb=!0,!0}o(E8,"noBootFile");function _8(e,t){let r;return e.protocol==="http:"?r=O6:r=C6,new Promise((n,s)=>{let i=r.request(e,a=>{a.setEncoding("utf8"),a.body="",a.on("data",c=>{a.body+=c}),a.on("end",()=>{n(a)})});i.on("error",a=>{s(a)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}o(_8,"httpRequest");function g8(e){if(!e.schema&&!e.database){e.schema=Ar.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}o(g8,"transformReq");function S8(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}o(S8,"convertToMS");var o_=Kr()});var St=v((ACe,Qv)=>{"use strict";var cm=(k(),D(Y)),T8=ce(),Nn=le(),lm=require("path"),y8=require("minimist"),Vv=require("fs-extra"),Kv=require("lodash");Nn.initSync();var{CONFIG_PARAMS:wa,DATABASES_PARAM_CONFIG:sm,SYSTEM_SCHEMA_NAME:a_}=cm,im,om,am;function Yv(){if(im!==void 0)return im;if(Nn.getHdbBasePath()!==void 0)return im=Nn.get(wa.STORAGE_PATH)||lm.join(Nn.getHdbBasePath(),cm.DATABASES_DIR_NAME),im}o(Yv,"getBaseSchemaPath");function Wv(){if(om!==void 0)return om;if(Nn.getHdbBasePath()!==void 0)return om=jv(a_),om}o(Wv,"getSystemSchemaPath");function zv(){if(am!==void 0)return am;if(Nn.getHdbBasePath()!==void 0)return am=Nn.get(cm.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||lm.join(Nn.getHdbBasePath(),cm.TRANSACTIONS_DIR_NAME),am}o(zv,"getTransactionAuditStoreBasePath");function R8(e,t){let r=Nn.get(wa.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||lm.join(zv(),e.toString())}o(R8,"getTransactionAuditStorePath");function jv(e,t){e=e.toString(),t=t&&t.toString();let r=Nn.get(cm.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||lm.join(Yv(),e)}o(jv,"getSchemaPath");function b8(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,y8(process.argv));let n=r[wa.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(a){if(!T8.isObject(n))throw a;i=n}for(let a of i){let c=a[a_];if(!c)continue;let l=Nn.get(wa.DATABASES);l=l??{};let u=c?.tables?.[t]?.[sm.PATH];if(u)return Kv.set(l,[a_,sm.TABLES,t,sm.PATH],u),Nn.setProperty(wa.DATABASES,l),u;let d=c?.[sm.PATH];if(d)return Kv.set(l,[a_,sm.PATH],d),Nn.setProperty(wa.DATABASES,l),d}}let s=r[wa.STORAGE_PATH.toUpperCase()];if(s){if(!Vv.pathExistsSync(s))throw new Error(s+" does not exist");let i=lm.join(s,e);return Vv.mkdirsSync(i),Nn.setProperty(wa.STORAGE_PATH,s),i}return Wv()}o(b8,"initSystemSchemaPaths");function A8(){im=void 0,om=void 0,am=void 0}o(A8,"resetPaths");Qv.exports={getBaseSchemaPath:Yv,getSystemSchemaPath:Wv,getTransactionAuditStorePath:R8,getTransactionAuditStoreBasePath:zv,getSchemaPath:jv,initSystemSchemaPaths:b8,resetPaths:A8}});var Cn=v((CCe,tU)=>{"use strict";var I8=Kr().LMDB_ERRORS_ENUM,wCe=require("lmdb"),w8=Gt(),NCe=require("buffer").Buffer,{OVERFLOW_MARKER:Jv,MAX_SEARCH_KEY_LENGTH:c_}=w8,Xv=["number","string","symbol","boolean","bigint"];function N8(e){if(e=e?.primaryStore||e,!e)throw new Error(I8.ENV_REQUIRED)}o(N8,"validateEnv");function C8(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o(C8,"stringifyData");function O8(e){return e instanceof Date?e.valueOf():e}o(O8,"convertKeyValueToWrite");function P8(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(Xv.includes(typeof e))return e.length>c_?[e.slice(0,c_)+Jv]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(Xv.includes(typeof i))i.length>c_?r.push(i.slice(0,c_)+Jv):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}o(P8,"getIndexedValues");var l_=0,Zv=0;function eU(){Zv=Date.now()-performance.now()}o(eU,"adjustStartTime");eU();var L8=6e4;setInterval(eU,L8).unref();function D8(){let e=performance.now()+Zv;return e>l_?(l_=e,e):(l_+=488e-6,l_)}o(D8,"getNextMonotonicTime");tU.exports={validateEnv:N8,stringifyData:C8,convertKeyValueToWrite:O8,getNextMonotonicTime:D8,getIndexedValues:P8}});var um=v((PCe,rU)=>{"use strict";var M8=(k(),D(Y)).OPERATIONS_ENUM,Ob=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=M8.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};rU.exports=Ob});var Ee=v((DCe,iU)=>{"use strict";var Su=Kr(),v8=(k(),D(Y)),u_=class extends Error{static{o(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,nU),this.statusCode=n||Su.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Su.DEFAULT_ERROR_MSGS[n]?Su.DEFAULT_ERROR_MSGS[n]:Su.DEFAULT_ERROR_MSGS[Su.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&&z()[s](i)}},Pb=class extends Error{static{o(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},Lb=class extends Error{static{o(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function nU(e,t,r,n=v8.LOG_LEVELS.ERROR,s=null,i=!1){if(sU(e))return e;let a=new u_(e,t,r,n,s);return i&&delete a.stack,a}o(nU,"handleHDBError");function Tu(e){this.message=e}o(Tu,"Violation");Tu.prototype=Object.create(Error.prototype);Tu.prototype.constructor=Tu;Tu.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var Db=class extends Tu{static{o(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function sU(e){return e.__proto__.constructor.name===u_.name}o(sU,"isHDBError");iU.exports={isHDBError:sU,handleHDBError:nU,ClientError:Pb,ServerError:Lb,AccessViolation:Db,Violation:Tu,hdbErrors:Su}});var dm=v((UCe,lU)=>{"use strict";var vCe=um(),d_=(k(),D(Y)),Mb=ce(),oU=z(),U8=require("uuid"),{handleHDBError:f_,hdbErrors:x8}=Ee(),{HDB_ERROR_MSGS:m_,HTTP_STATUS_CODES:p_}=x8;lU.exports=aU;function aU(e,t,r){for(let s=0;s<t.length;s++)cU(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];B8(i,r,e.operation)}}o(aU,"processRows");aU.validateAttribute=cU;function cU(e){if(Buffer.byteLength(String(e))>d_.INSERT_MAX_CHARACTER_SIZE)throw f_(new Error,m_.ATTR_NAME_LENGTH_ERR(e),p_.BAD_REQUEST,void 0,void 0,!0);if(Mb.isEmptyOrZeroLength(e)||Mb.isEmpty(e.trim()))throw f_(new Error,m_.ATTR_NAME_NULLISH_ERR,p_.BAD_REQUEST,void 0,void 0,!0)}o(cU,"validateAttribute");function B8(e,t,r){if(!e.hasOwnProperty(t)||Mb.isEmptyOrZeroLength(e[t])){if(r===d_.OPERATIONS_ENUM.INSERT||r===d_.OPERATIONS_ENUM.UPSERT){e[t]=U8.v4();return}throw oU.error("Update transaction aborted due to record with no hash value:",e),f_(new Error,m_.RECORD_MISSING_HASH_ERR,p_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>d_.INSERT_MAX_CHARACTER_SIZE)throw oU.error(e),f_(new Error,m_.HASH_VAL_LENGTH_ERR,p_.BAD_REQUEST,void 0,void 0,!0)}o(B8,"validateHash")});function EU(e){Ub=e}function q8(){H8=setInterval(function(){for(let e of vb)if(e.stale){let t=e.getContext()?.url;mU.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},k8).unref()}var xb,fU,mU,pU,hU,uU,vb,F8,To,fm,dU,Ub,yo,h_,k8,H8,mm=oe(()=>{xb=w(Cn()),fU=w(Ee()),mU=w(z()),pU=w(le());k();hU=w(ce()),uU=100,vb=new Set,F8=(0,hU.convertToMS)(pU.get(U.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,To={CLOSED:0,OPEN:1,LINGERING:2};o(EU,"replicationConfirmation");yo=class e{static{o(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=To.OPEN;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===To.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),vb.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(vb.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(fm&&!this.overloadChecked&&performance.now()-dU>F8)throw new fU.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===To.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===To.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,xb.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let f=this.validated;this.validated=this.writes.length;for(let p=f;p<this.validated;p++)this.writes[p]?.validate?.(this.timestamp);let m;for(let p=f;p<this.validated;p++){let h=this.writes[p];h&&(h.before||h.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let p=0;p<2;p++){let h;for(let E=f;E<this.validated;E++){let g=this.writes[E];if(!g)continue;let b=g[p===0?"before":"beforeIntermediate"];if(b){let S=b();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?To.LINGERING:To.OPEN;let s,i=[],a=0;this.writes=this.writes.filter(f=>f);let c=o(f=>{f.commit(r,f.entry,n)},"doWrite"),l=o(()=>{let f=this.writes[a++];if(f)if(f.key){(n>0||!f.entry)&&(f.entry=f.store.getEntry(f.key));let m=f.store.ifVersion(f.key,f.entry?.version??null,l);s=s||m}else l();else for(let m of this.writes)c(m)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<uU>>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,dU=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];Ub&&p&&i.push(Ub(m,p.store.getEntry(p.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+uU/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=To.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},h_=class extends yo{static{o(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,xb.getNextMonotonicTime)())}getReadTxn(){}},k8=3e4;o(q8,"startMonitoringTxns");q8()});var _U,Wn,Bb,yu=oe(()=>{_U=require("events"),Wn=class extends _U.EventEmitter{static{o(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new Bb;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)}},Bb=class{static{o(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function Tt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===To.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 yo;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,a)}catch(c){a(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function a(c){throw n.abort({}),c}}var gU,Na=oe(()=>{gU=w(ri());mm();o(Tt,"transaction");(0,gU._assignPackageExport)("transaction",Tt);Tt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Tt.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 kb={};be(kb,{add:()=>E_,applyReverse:()=>SU,getRecordAtTime:()=>Fb,rebuildUpdateBefore:()=>__});function E_(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function __(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let a=e[s];if(a?.__op__)if(a.__op__===i.__op__)n||(n={}),n[s]=a;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=a,E_(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function SU(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=G8[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=TU}}function Fb(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=Mt(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":SU(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let a={},c=0;for(let l in s)s[l]===TU&&(a[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=Mt(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)a[f]&&(s[f]=d[f],a[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in a)s[l]=null;return s}var G8,TU,g_=oe(()=>{Ro();o(E_,"add");E_.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)};G8={add:E_};o(__,"rebuildUpdateBefore");o(SU,"applyReverse");TU={};o(Fb,"getRecordAtTime")});var zn=v(T_=>{var S_=z();for(let e of["trace","debug","info","warn","error","fatal","notify"])S_.logsAtLevel(e)&&(T_[e]=S_[e]);T_.loggerWithTag=e=>S_.loggerWithTag(e,!0);T_.setLogLevel=S_.setLogLevel});var NU={};be(NU,{parse:()=>Gb,streamAsJSON:()=>hm,stringify:()=>Vc});function hm(e){return new Hb({value:e})}function yU(e){return console.error(e),JSON.stringify(pm(e))}function RU(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Vc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===IU)return wU(e);if(t.resolution)return t.resolution.then(()=>Vc(e));throw t}}function wU(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+=wU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Vc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Gb(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),K8.test(e)?$8.parse(e):JSON.parse(e)):null}var bU,qb,AU,$8,V8,IU,pm,Hb,K8,$b=oe(()=>{bU=require("stream"),qb=w(z()),AU=w(require("json-bigint-fixes")),$8=(0,AU.default)({useNativeBigInt:!0}),V8=1e4,IU={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw IU};({errorToString:pm}=qb);o(hm,"streamAsJSON");Hb=class extends bU.Readable{static{o(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let a;for(;;){try{a=i.next(),a.then&&(yield a.then(c=>(a=c,""),c=>(qb.warn("Error serializing in stream",c),a={done:!1,value:{error:pm(c)}},i={next:o(()=>({done:!0}),"next")},"")))}catch(c){a={done:!1,value:{error:pm(c)}},i={next:o(()=>({done:!0}),"next")}}if(a.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(a.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),yU)}catch(s){yield yU(s)}else yield Vc(t)}else yield Vc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);RU(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(pm(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>V8?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 RU(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(pm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};o(yU,"handleError");o(RU,"when");o(Vc,"stringify");o(wU,"jsStringify");K8=/[[,:]\s*-?\d{16,}/;o(Gb,"parse")});var BU={};be(BU,{asyncSerialization:()=>zb,contentTypes:()=>Wb,findBestSerializer:()=>R_,getDeserializer:()=>wo,hasAsyncSerialization:()=>jb,registerContentHandlers:()=>gm,serialize:()=>Sm,serializeMessage:()=>Io,toCsvStream:()=>y_});function Y8(e){try{return e?.[0]===123?Yb(e):e}catch{return e}}function gm(e){e.register(W8,{serializers:[{regex:/^application\/json$/,serializer:hm},{regex:/^application\/cbor$/,serializer:o(function(t){return new Kc.EncoderStream(_m).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:o(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Yc.Readable.from((0,Mi.encodeIter)(t,_m)):(0,Mi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:o(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),y_(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Mi.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Kc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function R_(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,a,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...d]=l.split(/\s*;\s*/),f=1,m={q:1};for(let h of d){let E=h.indexOf("=");m[h.substring(0,E)]=h.substring(E+1)}f=+m.q;let p=an.get(u);if(p){let h=(p.q||1)*f;h>s&&(n=p,i=p.type||u,s=h,a=m)}}if(!n){if(r)throw new PU.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(an.keys()).join(", "),406);n=an.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:a}}function Sm(e,t,r){let n=OU&&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 bs)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=R_(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}),Kb.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let a=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),a=a.pipe((0,Ao.createBrotliCompress)({params:{[Ao.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Ao.constants.BROTLI_MODE_TEXT:Ao.constants.BROTLI_MODE_GENERIC,[Ao.constants.BROTLI_PARAM_QUALITY]:2}}))),a}s=i.serializer.serialize(e,r)}return n&&s?.length>OU?(r.headers.set("Content-Encoding","br"),new Promise((i,a)=>(0,Ao.brotliCompress)(s,(c,l)=>{c?a(c):i(l)}))):s}function Io(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;bo=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=R_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=Em(e);return bo?.length>0?(bo.length===1?bo[0]:Promise.all(bo)).then(()=>Io(e,t,!0)):n}finally{bo=void 0}}function zb(e){if(bo)bo.push(e);else throw new Error("Unable to serialize asynchronously")}function jb(){return!!bo}function z8(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 Q8(e){return j8.includes(e)}function J8(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,a]=s.split("=");r[i.trim()]=a.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function wo(e="",t=!1){let r=J8(e),n=r.type&&an.get(r.type)?.deserialize||X8(r);return t?s=>z8(s).then(n):n}function X8(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!Q8(e.parameters.charset)&&Kb.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 Yb(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function Z8(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 y_(e,t){let r=Yc.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(a=>({label:a,value:a})));let s={objectMode:!0},i=new MU.Transform(n,s);return r.pipe(i)}var Mi,Kc,Ao,PU,Yc,LU,Vb,DU,Kb,MU,vU,UU,Em,Yb,_m,an,Wb,CU,xU,W8,OU,bo,j8,No=oe(()=>{$b();Mi=require("msgpackr"),Kc=require("cbor-x"),Ao=require("zlib"),PU=w(Ee()),Yc=w(require("stream"));xr();LU=w(ri()),Vb=w(le());k();DU=w(require("yaml")),Kb=w(zn());As();MU=require("json2csv"),vU=w(require("fastify-plugin")),UU=Vb.default.get(U.SERIALIZATION_BIGINT)!==!1,Em=UU?Vc:JSON.stringify,Yb=UU?Gb:JSON.parse,_m={useRecords:!1,useToJSON:!0},an=new Map,Wb=an;Me.contentTypes=Wb;(0,LU._assignPackageExport)("contentTypes",Wb);an.set("application/json",{serializeStream:hm,serialize:Em,deserialize(e){return Yb(e)},q:.8});CU=new Kc.Encoder(_m);an.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Kc.EncoderStream(_m).end(e)},serialize:CU.encode,deserialize:CU.decode,q:1});an.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Yc.Readable.from((0,Mi.encodeIter)(e,_m)):(0,Mi.pack)(e)},serialize:Mi.pack,deserialize:Mi.unpack,q:.9});an.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),y_(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]),y_(e,e?.getColumns?.())},q:.1});an.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return Yc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});an.set("text/yaml",{serialize(e){return DU.stringify(e,{aliasDuplicateObjects:!1})},q:.7});an.set("text/event-stream",{serializeStream:o(function(e){return Yc.Readable.from(Z8(e,this.serialize))},"serializeStream"),serialize:o(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
3
3
|
`),e.data){let r=e.data;typeof r=="object"&&(r=Em(r)),t+="data: "+r+`
|
|
4
4
|
`}return e.id&&(t+="id: "+e.id+`
|
|
5
5
|
`),e.retry&&(t+="retry: "+e.retry+`
|
|
@@ -8,18 +8,18 @@
|
|
|
8
8
|
|
|
9
9
|
`:`data: ${e}
|
|
10
10
|
|
|
11
|
-
`},"serialize"),compressible:!1,q:.8});an.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()}});xU={type:"application/json",serializeStream:hm,serialize:Em,deserialize:Y8,q:.5};an.set("*/*",xU);an.set("",xU);o(Y8,"tryJSONParse");o(gm,"registerContentHandlers");W8=(0,vU.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:a,type:c}=b_(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&a.serializeStream){if(l.mapError){let d=l.getColumns;l=l.mapError(f=>(f.toJSON=()=>({error:f.name,message:f.message,...f.partialObject}),f)),l.getColumns=d}u=a.serializeStream}else u=a.serialize;return u(l,{headers:{set:o((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});o(b_,"findBestSerializer");OU=Vb.default.get(U.HTTP_COMPRESSIONTHRESHOLD);o(Sm,"serialize");o(Io,"serializeMessage");o(zb,"asyncSerialization");o(jb,"hasAsyncSerialization");o(z8,"streamToBuffer");j8=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];o(Q8,"isBufferEncoding");o(J8,"parseContentType");o(wo,"getDeserializer");o(X8,"deserializerUnknownType");o(Z8,"transformIterable");o(R_,"toCsvStream")});var rA={};be(rA,{Blob:()=>bs,blobsWereEncoded:()=>Wc,databasePaths:()=>Jb,decodeBlobsWithWrites:()=>L_,decodeFromDatabase:()=>Po,decodeWithBlobCallback:()=>wm,deleteBlob:()=>C_,deleteBlobsInObject:()=>Ca,deleteRootBlobPathsForDB:()=>eA,encodeBlobsAsBuffers:()=>uZ,encodeBlobsWithFilePath:()=>P_,findBlobsInObject:()=>bu,getFileId:()=>O_,getFilePathForBlob:()=>YU,getRootBlobPathsForDB:()=>Im,isSaving:()=>sZ,saveBlob:()=>Am,setDeletionDelay:()=>nZ,startPreCommitBlobsForRecord:()=>tA});function VU(){}function C_(e){let t=YU(e);t&&setTimeout(()=>{(0,rt.unlink)(t,r=>{r&&vi.default.debug?.("Error trying to remove blob file",r)})},KU)}function nZ(e){KU=e}function Am(e){let t=cn.get(e);if(!t)t={storageIndex:0,fileId:null,store:On},cn.set(e,t);else{if(t.fileId)return t;t.store=On}return oZ(t),t.source?Qb(e,t.source,t):t.contentBuffer?iZ(e,t):Qb(e,ym.Readable.from(e.stream()),t),t}function Qb(e,t,r){let{filePath:n,fileId:s,store:i,compress:a,flush:c}=r;return r.saving=new Promise((l,u)=>{let d=s+":blob";if(!i.attemptLock(d,0))throw new Error(`Unable to get lock for blob file ${s}`);let f=(0,rt.createWriteStream)(n,{autoClose:!1,flags:"w"});if(t.errored){let g=Buffer.from(t.errored.toString());f.write(Buffer.concat([h(BigInt(g.length)+0xff000000000000n),g])),E(t.errored);return}let m=!1;e.size!==void 0&&(f.write(h(e.size)),m=!0);let p;a?(m||f.write(tZ),p=(0,w_.createDeflate)(),t.pipe(p).pipe(f)):(m||f.write(eZ),t.pipe(f)),t.on("error",E);function h(g){let b=BigInt(g),S=new Uint8Array(Ir),R=new DataView(S.buffer);return b|=BigInt(a?Zb:$U)<<48n,R.setBigInt64(0,b),S}o(h,"createHeader");function E(g){i.unlock(d,0);let b=f.fd;g?(b&&(0,rt.close)(b),u(g)):c?(0,rt.fdatasync)(b,S=>{S&&u(S),l(),(0,rt.close)(b)}):(l(),(0,rt.close)(b))}o(E,"finished"),f.on("error",E).on("finish",()=>{if(m)E();else{let g=p?p.bytesWritten:f.bytesWritten-Ir;e.size=g,(0,rt.write)(f.fd,h(g),0,Ir,0,E)}})}),e}function O_(e){return cn.get(e)?.fileId}function sZ(e){return cn.get(e)?.saving}function YU(e){let t=cn.get(e);return t?.fileId&&bm(t)}function Im(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=Jb.get(e);if(!t){if(!e.databaseName)return vi.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,N_.get)(U.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Oo.join)(n,e.databaseName)):t=[(0,Oo.join)((0,N_.getHdbBasePath)(),"blobs",e.databaseName)],Jb.set(e,t)}return t}async function eA(e){let t=Im(e);t&&await Promise.all(t.map(r=>WU(r)))}async function WU(e){if((0,rt.existsSync)(e)){for(let t of await(0,Is.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await WU((0,Oo.join)(e,t.name));else try{await(0,Is.unlink)((0,Oo.join)(e,t.name))}catch(r){vi.default.warn?.("Error deleting file",r)}try{await(0,Is.rmdir)(e)}catch(t){vi.default.warn?.("Error deleting directory",t)}}}function bm({storageIndex:e,fileId:t,store:r}){let n=Im(r);return(0,Oo.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 iZ(e,t){let r=t.contentBuffer,n=r.length;if(!(n<GU))return e.size=n,Qb(e,ym.Readable.from([r]),t)}function oZ(e){let t=Im(e.store),r=aZ(),n=t?.length>1?cZ(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=bm(e),a=(0,Oo.dirname)(i);(0,rt.existsSync)(a)||(0,Xb.ensureDirSync)(a),e.filePath=i}function aZ(){let e=qU.get(On);if(!e){let t=0,r=Im(On);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let a=0;if((0,rt.existsSync)(n))for(let c of(0,rt.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>a&&(a=l)}s+=a,n=(0,Oo.join)(n,a.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(On.getUserSharedBuffer("blob-file-id",e.buffer)),qU.set(On,e)}return Number(Atomics.add(e,0,1n))}function cZ(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(I_);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,lZ(e)),e.frequencyTable[t%I_]}async function lZ(e){if(!Is.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let a;try{a=await(0,Is.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,Xb.ensureDirSync)(s),a=await(0,Is.statfs)(s)}let c=a.bavail*a.bsize;return Math.pow(c,.8)})),r=new Array(I_),n=t.map(s=>1/s);for(let s=0;s<I_;s++){let i=1/0,a=0;for(let c=0;c<n.length;c++)n[c]<i&&(a=c,i=n[c]);n[a]+=1/t[a],r[s]=a}e.frequencyTable=r}function P_(e,t,r){Ru=t,On=r,Wc=!1;try{return e()}finally{Ru=void 0,On=void 0}}function uZ(e){Yr=[];let t;try{t=e()}catch(n){throw Yr=void 0,n}let r=Yr.length<2?Yr[0]:Promise.all(Yr);return Yr=void 0,r?r.then(()=>e()):t}function L_(e,t,r){try{Yr=[],Co=r,On=t,e()}catch(s){throw Co=void 0,Yr=void 0,s}Co=void 0;let n=Yr.length<2?Yr[0]:Promise.all(Yr);return Yr=void 0,n}function wm(e,t,r){On=r;try{return Co=t,e()}finally{Co=void 0}}function Po(e,t){return On=t,e()}function Ca(e){bu(e,t=>{C_(t)})}function bu(e,t){if(e instanceof bs)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&bu(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&bu(e[r],t)}}function tA(e,t){let r;for(let n in e){let s=e[n];if(s instanceof Rm&&s.saveBeforeCommit){On=t;let i=Am(s).saving??Promise.resolve();r=r?Promise.all(r,i):i}}return r}function fZ(){return class{static{o(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}var Ui,Is,rt,w_,ym,Xb,N_,Oo,vi,GU,Ir,$U,Zb,FU,eZ,tZ,kU,cn,Co,bs,Ru,Yr,On,Wc,Tm,A_,rZ,HU,Rm,KU,Jb,qU,I_,dZ,As=oe(()=>{Ui=require("msgpackr"),Is=require("node:fs/promises"),rt=require("node:fs"),w_=require("node:zlib"),ym=require("node:stream"),Xb=require("fs-extra"),N_=w(le());k();Oo=require("path"),vi=w(zn());No();GU=8192,Ir=8,$U=0,Zb=1,FU=255,eZ=new Uint8Array([0,$U,255,255,255,255,255,255]),tZ=new Uint8Array([0,Zb,255,255,255,255,255,255]),kU=0xffffffffffff,cn=new WeakMap,bs=global.Blob||fZ(),Wc=!1,Tm=new Uint8Array(8),A_=new DataView(Tm.buffer),rZ=6e4;o(VU,"InstanceOfBlobWithNoConstructor");VU.prototype=bs.prototype;HU=!1,Rm=class e extends VU{static{o(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=cn.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):(jb()&&zb(this.bytes().then(a=>t.contentBuffer=a)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=cn.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=bm(t),a,c=o(async()=>{let l,u=Ir;try{if(l=await(0,Is.readFile)(i),l.length>=Ir){l.copy(Tm,0,0,Ir);let f=A_.getBigUint64(0);if(Number(f>>48n)===FU)throw new Error("Error in blob: "+buffer.subarray(Ir));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<kU&&(this.size=u,this.#t))for(let m of this.#t)m(u)}}catch(f){if(f.code!=="ENOENT")throw f;l=Buffer.alloc(0)}function d(f){if(u>f.length){let m=t.store,p=t.fileId+":blob";if(a)throw new Error(`Incomplete blob for ${i}`);return new Promise((h,E)=>{if(m.attemptLock(p,0,()=>(a=!0,h(c()))))return a=!0,m.unlock(p,0),h(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return o(d,"checkCompletion"),l[1]===Zb?new Promise((f,m)=>{(0,w_.deflate)(l.subarray(Ir),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(Ir))},"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=cn.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(E){E.enqueue(r),E.close()}});let i=bm(t),a,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,g=o((b,S)=>{(0,rt.open)(i,"r",(R,L)=>{if(R){if(R.code==="ENOENT"&&f!==!1&&(vi.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),g(b,S)},20).unref();S(R),p.#e?.forEach(O=>O(R))}else a=L,b(L)})},"openFile");return new Promise(g)},pull:o(E=>{let g=0,b=100;return new Promise(o(function S(R,L){function O(j){(0,rt.close)(a),clearTimeout(d),u&&u.close(),L(j),p.#e?.forEach(H=>H(j))}o(O,"onError");let x=Buffer.allocUnsafe(262144);(0,rt.read)(a,x,0,x.length,c,(j,H,F)=>{if(l+=H,j)return O(j);if(c===0){if(H<Ir){b-- >0&&f!==!1?(h(),vi.default.debug?.("File was empty, waiting for data to be written",i,b),setTimeout(()=>S(R,L),20).unref()):(vi.default.debug?.("File was empty, throwing error",i,b),L(new Error(`Blob ${t.fileId} was empty`)));return}F.copy(Tm,0,0,Ir);let Q=A_.getBigUint64(0);if(Number(Q>>48n)===FU)return O(new Error("Error in blob: "+F.subarray(Ir)));if(g=Number(Q&0xffffffffffffn),g<kU&&p.size!==g&&(p.size=g,p.#t))for(let W of p.#t)W(g);F=F.subarray(Ir,H),l-=Ir}else if(H===0){let Q=Buffer.allocUnsafe(8);return(0,rt.read)(a,Q,0,Ir,0,W=>{if(W)return O(W);if(Tm.set(Q),g=Number(A_.getBigUint64(0)&0xffffffffffffn),g>l){h()?u?d=setTimeout(()=>{O(new Error(`File read timed out reading from ${i}`))},rZ).unref():(u=(0,rt.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(R,L))}),S(R,L)):m?O(new Error("Blob is incomplete")):(m=!0,S(R,L));return}(0,rt.close)(a),E.close(),R()})}else F=F.subarray(0,H);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=H,S(R,L);s&&l>=s&&(l>s&&(F=F.subarray(0,s-c)),l=g=s),n&&n>c&&(F=F.subarray(n-c))}c+=H;try{E.enqueue(F)}catch(Q){return vi.default.debug?.("Error enqueuing chunk",Q),R()}l===g&&((0,rt.close)(a),E.close()),R()})},"readMore"))},"pull"),cancel(){(0,rt.close)(a),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,g=t.fileId+":blob";f=!E.attemptLock(g,0,()=>{f=!1}),f||E.unlock(g,0)}return f}}slice(t,r,n){let s=cn.get(this),i=new e(n&&{type:n});if(s?.fileId){let a={...s,start:t,end:r};cn.set(i,a),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let a={...s,contentBuffer:s.contentBuffer.subarray(t,r)};cn.set(i,a),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(){return HU||(HU=!0,vi.default.warn?.("save() method on Blob is deprecated, use the 'saveBeforeCommit' flag on the Blob constructor instead")),this.saveBeforeCommit=!0,Promise.resolve()}},KU=500;o(C_,"deleteBlob");o(nZ,"setDeletionDelay");global.createBlob=function(e,t){let r=new Rm(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(cn.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof ym.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=ym.Readable.from(e);else throw new Error("Invalid source type");return r};o(Am,"saveBlob");o(Qb,"writeBlobWithStream");o(O_,"getFileId");o(sZ,"isSaving");o(YU,"getFilePathForBlob");Jb=new Map;o(Im,"getRootBlobPathsForDB");o(eA,"deleteRootBlobPathsForDB");o(WU,"rimrafSteadily");o(bm,"getFilePath");o(iZ,"writeBlobWithBuffer");o(oZ,"generateFilePath");qU=new Map;o(aZ,"getNextFileId");I_=128;o(cZ,"getNextStorageIndex");o(lZ,"createFrequencyTableForStoragePaths");o(P_,"encodeBlobsWithFilePath");o(uZ,"encodeBlobsAsBuffers");o(L_,"decodeBlobsWithWrites");o(wm,"decodeWithBlobCallback");o(Po,"decodeFromDatabase");o(Ca,"deleteBlobsInObject");o(bu,"findBlobsInObject");o(tA,"startPreCommitBlobsForRecord");dZ=new Ui.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Ui.addExtension)({Class:bs,type:11,unpack:o(function(e){let t=dZ.unpack(e),r=new Rm;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(cn.set(r,{storageIndex:t[1],fileId:t[2],store:On}),Co)return Co(r)??r;if(!On)throw new Error("No store specified, cannot load blob from storage")}else cn.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:o(function(e){let t=cn.get(e);if(Ru!==void 0&&(Wc=!0,t?.recordId!==void 0&&t.recordId!==Ru))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<GU)return r.size=t.contentBuffer.length,(0,Ui.pack)([r,t.contentBuffer])}if(Ru!==void 0){if(t=Am(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Ru,(0,Ui.pack)([r,t.storageIndex,t.fileId])}if(t){if(Co)return Co(e),(0,Ui.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,rt.readFileSync)(bm(t));if(n.length>=Ir&&(n.copy(Tm,0,0,Ir),Number(A_.getBigUint64(0)&0xffffffffffffn)===n.length-Ir))return Buffer.concat([(0,Ui.pack)([r]),n]);if(Yr)Yr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Yr)return Yr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Ui.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});o(fZ,"polyfillBlob")});var XU={};be(XU,{onStorageReclamation:()=>Nm,runReclamationHandlers:()=>oA,setAvailableSpaceRatioGetter:()=>pZ});function Nm(e,t,r){(r||(0,M_.getWorkerIndex)()===(0,M_.getWorkerCount)()-1)&&(D_.has(e)||D_.set(e,[]),D_.get(e).push({priority:0,handler:t}),iA||(iA=setTimeout(oA,jU).unref()))}async function oA(){for(let[e,t]of D_)try{let r=await JU(e),n=mZ/r;for(let s of t){let{priority:i,handler:a}=s;if(s.priority=n,n>1||i>1){let c=a(n>1?n:0);c&&(sA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){sA.default.error?.("Error running storage reclamation handlers",r)}iA=setTimeout(oA,jU).unref()}function pZ(e){JU=e??QU}var nA,M_,sA,v_,zU,D_,mZ,jU,iA,QU,JU,U_=oe(()=>{nA=require("node:fs/promises"),M_=w(Je()),sA=w(zn());k();v_=w(le()),zU=w(ce());v_.default.initSync();D_=new Map,mZ=v_.default.get(U.STORAGE_RECLAMATION_THRESHOLD)??.4,jU=(0,zU.convertToMS)(v_.default.get(U.STORAGE_RECLAMATION_INTERVAL))||36e5;o(Nm,"onStorageReclamation");QU=o(async e=>{if(nA.statfs){let t=await(0,nA.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"),JU=QU;o(oA,"runReclamationHandlers");o(pZ,"setAvailableSpaceRatioGetter")});var dx={};be(dx,{ACTION_32_BIT:()=>H_,ACTION_64_BIT:()=>gZ,AUDIT_STORE_OPTIONS:()=>Pm,Decoder:()=>jc,HAS_BLOBS:()=>Pn,HAS_CURRENT_RESIDENCY_ID:()=>Qc,HAS_EXPIRATION_EXTENDED_TYPE:()=>Mm,HAS_ORIGINATING_OPERATION:()=>Dm,HAS_PREVIOUS_RESIDENCY_ID:()=>Jc,REMOTE_SEQUENCE_UPDATE:()=>q_,createAuditEntry:()=>Xc,getLastRemoved:()=>EZ,openAuditStore:()=>F_,readAuditEntry:()=>Mt,removeAuditEntry:()=>k_,setAuditRetention:()=>_Z,transactionKeyEncoder:()=>ax});function F_(e){let t=e.auditStore=e.openDB(aA.AUDIT_STORE_NAME,{create:!1,...Pm});t||(t=e.auditStore=e.openDB(aA.AUDIT_STORE_NAME,Pm),ex(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,a=lA;Nm(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(a=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,p;try{for(let{key:h,value:E}of t.getRange({start:1,snapshot:!1,end:Date.now()-cA/(1+i*i)})){try{m=k_(t,h,E)}catch(g){Au.warn("Error removing audit entry",g)}if(p=h,await new Promise(setImmediate),++f>=hZ){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,cA/10):(ex(t,p),a>100&&(a=a>>1)),d(void 0),c()}},a).unref()});return u}if(o(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,Om.getWorkerIndex)()===(0,Om.getWorkerCount)()-1&&c(),(0,Om.getWorkerIndex)()===0&&!ZU)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(ZU=!0,Au.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 k_(e,t,r){let n=SZ(r),s;if(n&Pn){s=Mt(r);let i=e.tableStores[s.tableId],a=i?.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&Po(()=>Ca(s.getValue(i)),i.rootStore)}if((n&15)===uA){s=s||Mt(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 ex(e,t){dA[0]=t,e.put(Symbol.for("last-removed"),cx)}function EZ(e){let t=e.get(Symbol.for("last-removed"));if(t)return cx.set(t),dA[0]}function _Z(e,t=lA){cA=e,lA=t}function Xc(e,t,r,n,s,i,a,c,l,u,d,f,m){let p=lx[a];if(!p)throw new Error(`Invalid audit entry type ${a}`);let h=1;if(n&&(n>1?Oa.setFloat64(0,n):ws.set(fA),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}b(s),b(t),g(r),Oa.setFloat64(h,e),h+=8,l&Qc&&b(u),l&Jc&&b(d),l&Mm&&(Oa.setFloat64(h,f),h+=8),l&Dm&&b(ux[m]),i?g(i):ws[h++]=0,l?Oa.setUint32(n?8:0,p|l|3221225472):ws[n?8:0]=p;let E=ws.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function g(S){let R=h;h+=1,h=(0,zc.writeKey)(S,ws,h);let L=h-R-1;L>127?L>16383?(Au.error("Key or username was too large for audit entry",S),h=R+1,ws[R]=0):(ws.copyWithin(R+2,R+1,h),Oa.setUint16(R,L|32768),h++):ws[R]=L}function b(S){S<128?ws[h++]=S:S<16384?(Oa.setUint16(h,S|32768),h+=2):S<1056964608?(Oa.setUint32(h,S|3221225472),h+=4):(ws[h]=255,Oa.setUint32(h+1,S),h+=5)}}function SZ(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 jc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function Mt(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new jc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),a=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,p,h,E;if(i&Qc&&(m=n.readInt()),i&Jc&&(p=n.readInt()),i&Mm&&(h=n.readFloat64()),i&Dm){let R=n.readInt();E=ux[R]}l=n.readInt();let g=n.position,b=n.position+=l,S;return{type:lx[i&7],tableId:c,nodeId:a,get recordId(){return(0,zc.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return b>g?(0,zc.readKey)(e,g,b):void 0},get encoded(){return t?e.subarray(t,r):e},get size(){return t!==void 0&&r!==void 0?r-t:e.byteLength},getValue(R,L,O){if(i&x_||i&Cm&&!L)return S||(S=Po(()=>R.decoder.decode(e.subarray(n.position,r)),R.rootStore)),S;if(i&Cm&&O)return Fb(R.getEntry(this.recordId),O,R)},getBinaryValue(){return i&(x_|Cm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return Au.error("Reading audit entry error",n,e),{}}}var zc,B_,aA,Om,ox,Au,ws,Oa,ax,Pm,cA,hZ,dA,cx,lA,ZU,x_,Cm,tx,uA,rx,nx,sx,ix,H_,gZ,q_,Qc,Jc,Dm,Mm,Pn,lx,ux,jc,Ro=oe(()=>{zc=require("ordered-binary"),B_=w(le()),aA=w(Gt());k();Om=w(Je()),ox=w(ce());Zc();Au=w(z());S_();As();U_();(0,B_.initSync)();ws=Buffer.alloc(2816),Oa=new DataView(ws.buffer,ws.byteOffset,2816),ax={writeKey(e,t,r){return e===Lm?(t.set(Lm,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,zc.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,zc.readKey)(e,t,r)}},Pm={encoding:"binary",keyEncoder:ax},cA=(0,ox.convertToMS)((0,B_.get)(U.LOGGING_AUDITRETENTION))||86400*3,hZ=1e3,dA=new Float64Array(1),cx=new Uint8Array(dA.buffer),lA=1e4,ZU=!1;o(F_,"openAuditStore");o(k_,"removeAuditEntry");o(ex,"updateLastRemoved");o(EZ,"getLastRemoved");o(_Z,"setAuditRetention");x_=16,Cm=32,tx=1,uA=2,rx=3,nx=4,sx=5,ix=6,H_=14,gZ=15,q_=11,Qc=512,Jc=1024,Dm=2048,Mm=4096,Pn=8192,lx={put:tx|x_,[tx]:"put",delete:uA,[uA]:"delete",message:rx|x_,[rx]:"message",invalidate:nx|Cm,[nx]:"invalidate",patch:sx|Cm,[sx]:"patch",relocate:ix,[ix]:"relocate"},ux={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(Xc,"createAuditEntry");o(SZ,"readAction");o(Mt,"readAuditEntry");jc=class extends DataView{static{o(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function G_(){return mA||(mA=Xe({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),mA}function yZ(e){return e=e.replace(TZ,t=>{let[r,n,s,i]=t.split(".").map(a=>parseInt(a));return(r<<8|n).toString(16)+":"+(s<<8|i).toString(16)}),e=e.replace("::",":".repeat(10-e.split(":").length)),e.toLowerCase().split(":").map(t=>t.padStart(4,"0")).join(":")}function RZ(e){if(e.length!==4)throw new Error(`nodeHash must be exactly 4 bytes (32 bits); got ${e.length} bytes`);return e[0]<<24|e[1]<<16|e[2]<<8|e[3]}function hA(e){let t=fx.default.createHash("shake128",{outputLength:4}),r;return(0,mx.isIPv6)(e)?r=yZ(e):r=e.toLowerCase(),RZ(Uint8Array.from(t.update(r).digest()))}var fx,mx,pA,mA,TZ,EA=oe(()=>{Ne();fx=w(require("crypto")),mx=require("node:net"),pA=new Map;o(G_,"getAnalyticsHostnameTable");TZ=/(\d{1,3}\.){3}\d{1,3}$/;o(yZ,"normalizeIPv6");o(RZ,"nodeHashToNumber");o(hA,"stableNodeId")});var Lo,_A=oe(()=>{Lo={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 Sx={};be(Sx,{profile:()=>gx,userCodeFolders:()=>gA});async function gx(){let e=(0,V_.pathToFileURL)(hx.PACKAGE_ROOT).toString(),t=new Map,r=100,n=_x/1e6,s=0,i=0;try{let{profile:u}=await Iu.post("Profiler.stop");for(let d of u.nodes)t.set(d.id,d);for(let d of u.nodes)a(d);qe(i*n,"cpu-usage","harper"),qe(s*n,"cpu-usage","user")}catch(u){Ex.error?.("analytics profiler error:",u)}finally{await Iu.post("Profiler.start")}function a(u){if(u.unassignedCount!==void 0)return u.unassignedCount;let d=u.hitCount;if(u.children)for(let f of u.children)d+=a(t.get(f));return l(u)?(s+=d,d>r&&qe(d*n,"cpu-usage",u.callFrame.url),u.unassignedCount=0,0):c(u)?(i+=d,d>r&&qe(d*n,"cpu-usage",u.callFrame.url),u.unassignedCount=0,0):(u.unassignedCount=d,d)}o(a,"getUserHitCount");function c(u){return u.callFrame?.url.startsWith(e)}o(c,"isHarperCode");function l(u){if(gA.some(d=>u.callFrame?.url.startsWith(d)))return!0}o(l,"isUserCode")}var px,$_,hx,V_,Ex,gA,_x,Iu,Tx=oe(()=>{px=require("node:inspector/promises");jn();$_=w(le());k();hx=w(At()),V_=require("node:url"),Ex=w(z()),gA=[(0,V_.pathToFileURL)((0,$_.getHdbBasePath)()).toString()];process.env.RUN_HDB_APP&&gA.push((0,V_.pathToFileURL)(process.env.RUN_HDB_APP).toString());_x=1e3,Iu=new px.Session;Iu.connect();(async()=>{await Iu.post("Profiler.enable"),await Iu.post("Profiler.setSamplingInterval",{interval:_x}),await Iu.post("Profiler.start");let e=(0,$_.get)(U.ANALYTICS_AGGREGATEPERIOD)*1e3;setInterval(()=>{gx()},e).unref()})();o(gx,"profile")});var W_={};be(W_,{addAnalyticsListener:()=>Bm,analyticsDelay:()=>RA,calculateCPUUtilization:()=>Fx,diffResourceUsage:()=>kx,onAnalyticsAggregate:()=>IA,recordAction:()=>qe,recordActionBinary:()=>zr,recordHostname:()=>bA,setAnalyticsEnabled:()=>IZ});function IZ(e){Mx=e,clearTimeout(Um),Um=null}function wZ(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 NZ(e,t,r,n,s,i){let a={};if(typeof t=="number")a.total=t,a.values=new Float32Array(4),a.values.index=1,a.values[0]=t,a.total=t;else if(typeof t=="boolean")a.total=t?1:0,a.count=1;else if(typeof t=="function")a.count=1,a.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);a.description={metric:r,path:n,method:s,type:i},Y_.set(e,a)}function qe(e,t,r,n,s){if(!Mx)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let a=Y_.get(i);a?wZ(e,a):NZ(i,e,t,r,n,s),Um||CZ()}function zr(e,t,r,n,s){qe(!!e,t,r,n,s)}function Bm(e){Ux.push(e)}function CZ(){SA||=performance.now(),Um=setTimeout(async()=>{Um=null;let e=performance.now()-SA;SA=0;let t=[],r={time:Date.now(),period:e,threadId:el.threadId,metrics:t};for(let[s,i]of Y_){if(i.values){let a=i.values.subarray(0,i.values.index);a.sort();let c=a.length,l=0,u=[],d;for(let f of Bx){let m=Math.floor(c*f),p=a[m-1];if(m>l){let h=m-l;if(p===d){let E=u[u.length-1];typeof E=="number"?u[u.length-1]={value:E,count:1+h}:E.count+=h}else u.push(h>1?{value:p,count:h}:p),d=p;l=m}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await Hx()}let n=process.memoryUsage();t.push({metric:"memory",threadId:el.threadId,byThread:!0,...n});for(let s of Ux)s(t);Y_=new Map,el.parentPort?el.parentPort.postMessage({type:vx,report:r}):$x({report:r})},RA).unref()}async function bA(){let e=Me.hostname;Wr.trace?.("recordHostname server.hostname:",e);let t=hA(e);Wr.trace?.("recordHostname nodeId:",t);let r=G_();if(!await r.get(t)){let s={id:t,hostname:e};Wr.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function wu(e,t){let r=Me.hostname,n=pA.get(r);n?Wr.trace?.("storeMetric cached nodeId:",n):(n=hA(r),Wr.trace?.("storeMetric new nodeId:",n),pA.set(r,n));let s={id:[(0,yA.getNextMonotonicTime)(),n],...t};Wr.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function Fx(e,t){let r=e.userCPUTime+e.systemCPUTime;return Wr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function kx(e,t){return{userCPUTime:t.userCPUTime-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function OZ(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let a=`${t}.${s}`,c=i.getSize(),l={metric:Lo.TABLE_SIZE,database:t,table:s,size:c};Wr.trace?.(`table ${a} size metric: ${JSON.stringify(l)}`),wu(e,l),n+=c}return n}function yx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let a=Dx.statSync(s.primaryStore.env.path).size,c=OZ(e,r,n),l=a-c,u={metric:Lo.DATABASE_SIZE,database:r,size:a,used:c,free:l,audit:i};wu(e,u),Wr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Wr.warn?.("Error getting DB size metrics",s)}}function Rx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let a={metric:Lo.STORAGE_VOLUME,database:r,...i};wu(e,a),Wr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(a)}`)}catch(s){Wr.warn?.("Error getting DB volume metrics",s)}}async function PZ(e,t=6e4){let r=AA(),n=qx(),s=new Promise(R=>{let L=performance.now();setImmediate(()=>{let O=performance.now();O-L>5e3&&Wr.warn?.("Unusually high event queue latency on the main thread of "+Math.round(O-L)+"ms"),L=performance.now()}),n.primaryStore.prefetch([1],()=>{let O=performance.now();O-L>5e3&&Wr.warn?.("Unusually high task queue latency on the main thread of "+Math.round(O-L)+"ms"),R(O-L)})}),i;for(let R of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(R.value?.time){i=R.value.time;break}if(Date.now()-t<i)return;let a,c=new Map,l=new Map,u=[],d;for(let{key:R,value:L}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!L)continue;if(a){if(R>a+t)break}else a=R;d=R;let{metrics:O,threadId:x}=L;for(let j of O||[]){let{path:H,method:F,type:Q,metric:W,count:fe,total:ue,distribution:ee,threads:Re,...Ie}=j;fe||(fe=1);let $e=W+(H?"-"+H:"");F!==void 0&&($e+="-"+F),Q!==void 0&&($e+="-"+Q);let ke=c.get($e);if(ke){if(ke.threads){let Xt=ke.threads[x];if(Xt)ke=Xt;else{ke.threads[x]={...Ie};continue}}ke.count||(ke.count=1);let yr=ke.count;for(let Xt in Ie){let Ht=Ie[Xt];typeof Ht=="number"&&(ke[Xt]=(ke[Xt]*yr+Ht*fe)/(yr+fe))}ke.count+=fe,ue>=0&&(ke.total+=ue,ke.ratio=ke.total/ke.count)}else ke={period:t,...j},delete ke.distribution,c.set($e,ke),ke.byThread&&(ke.threads=[],ke.threads[x]={...Ie},u.push(ke));if(ee){ee=ee.map(Xt=>typeof Xt=="number"?{value:Xt,count:1}:Xt);let yr=l.get($e);yr?yr.push(...ee):l.set($e,ee)}}await Hx()}for(let R of u){let{path:L,method:O,type:x,metric:j,count:H,total:F,distribution:Q,threads:W,...fe}=R;W=W.filter(ue=>ue);for(let ue in fe){if(typeof R[ue]!="number")continue;let ee=0;for(let Re of W){let Ie=Re[ue];typeof Ie=="number"&&(ee+=Ie)}R[ue]=ee}R.count=W.length,delete R.threads,delete R.byThread}for(let[R,L]of l){let O=c.get(R);L.sort((Xt,Ht)=>Xt.value>Ht.value?1:-1);let x=O.count-1,j=[],H=0,F=0,Q;for(let Xt of Bx){let Ht=x*Xt;for(;H<Ht;)Q=L[F++],H+=Q.count,F===1&&H--;let Zt=L[F>1?F-2:0];Q||(Q=L[0]),j.push(Q.value-(Q.value-Zt.value)*(H-Ht)/Q.count)}let[W,fe,ue,ee,Re,Ie,$e,ke,yr]=j;Object.assign(O,{p1:W,p10:fe,p25:ue,median:ee,p75:Re,p90:Ie,p95:$e,p99:ke,p999:yr})}let f;for(let[,R]of c)R.time=d,wu(n,R),f=!0;if(f)for(let R of xx)R(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let R={metric:Lo.MAIN_THREAD_UTILIZATION,idle:p-bx,active:h-Ax,taskQueueLatency:await s,time:m,...process.memoryUsage()};wu(n,R)}bx=p,Ax=h;let E=process.resourceUsage();E.time=m,E.userCPUTime=E.userCPUTime/1e3,E.systemCPUTime=E.systemCPUTime/1e3,Wr.trace?.(`process.resourceUsage: ${JSON.stringify(E)}`);let g=kx(K_,E);Wr.trace?.(`diffed resourceUsage: ${JSON.stringify(g)}`),g.time=m,g.period=K_.time?m-K_.time:t,g.cpuUtilization=Fx(g,g.period);let b={metric:Lo.RESOURCE_USAGE,...g};wu(n,b),K_=E;let S=at();yx(n,S),yx(n,{system:S.system}),Rx(n,S),Rx(n,{system:S.system})}async function Ix(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function AA(){return wx||(wx=Xe({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function qx(){return Nx||(Nx=Xe({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function MZ(){Gx=!0;let e=(0,xm.get)(U.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await PZ(RA,e),await Ix(AA(),LZ),await Ix(qx(),DZ)},Math.min(e/2,2147483647)).unref()}function $x(e,t){let r=e.report;r.threadId=t?.threadId||el.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(Cx+=n.mean*n.count);r.totalBytesProcessed=Cx,t&&(r.metrics.push({metric:Lo.UTILIZATION,...t.performance.eventLoopUtilization(Ox.get(t))}),Ox.set(t,t.performance.eventLoopUtilization())),r.id=(0,yA.getNextMonotonicTime)(),AA().primaryStore.put(r.id,r),Gx||MZ(),vZ&&(Vx=xZ(r))}async function xZ(e){if(await Vx,!Pa){let r=(0,vm.dirname)(bZ());try{Pa=await(0,TA.open)((0,vm.join)(r,"analytics.log"),"r+")}catch{Pa=await(0,TA.open)((0,vm.join)(r,"analytics.log"),"w+")}}let t=(await Pa.stat()).size;if(t>UZ){let r=Buffer.alloc(t);await Pa.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Pa.write(r,{position:0}),await Pa.truncate(r.length),t=r.length}await Pa.write(JSON.stringify(e)+`
|
|
12
|
-
`,t)}function IA(e){e&&xx.push(e)}var el,Px,Lx,vm,TA,yA,xm,Dx,bZ,AZ,Wr,Y_,Mx,Um,SA,RA,vx,Ux,xx,Bx,bx,Ax,K_,Hx,LZ,DZ,wx,Nx,Gx,Cx,Ox,vZ,Vx,Pa,UZ,jn=oe(()=>{el=require("worker_threads"),Px=w(Je());Ne();Lx=w(z()),vm=require("path"),TA=require("fs/promises"),yA=w(Cn()),xm=w(le());k();xr();Dx=w(require("node:fs"));EA();_A();({getLogFilePath:bZ,forComponent:AZ}=Lx.default);setTimeout(()=>{Promise.resolve().then(()=>Tx())},1e3);Wr=AZ("analytics").conditional;(0,xm.initSync)();Y_=new Map,Mx=(0,xm.get)(U.ANALYTICS_AGGREGATEPERIOD)>-1;o(IZ,"setAnalyticsEnabled");o(wZ,"recordExistingAction");o(NZ,"recordNewAction");o(qe,"recordAction");Me.recordAnalytics=qe;o(zr,"recordActionBinary");SA=0,RA=1e3,vx="analytics-report",Ux=[],xx=[];o(Bm,"addAnalyticsListener");Bx=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];o(CZ,"sendAnalytics");o(bA,"recordHostname");o(wu,"storeMetric");o(Fx,"calculateCPUUtilization");o(kx,"diffResourceUsage");o(OZ,"storeTableSizeMetrics");o(yx,"storeDBSizeMetrics");o(Rx,"storeVolumeMetrics");o(PZ,"aggregation");bx=0,Ax=0,K_={userCPUTime:0,systemCPUTime:0},Hx=o(()=>new Promise(setImmediate),"rest");o(Ix,"cleanup");LZ=36e5,DZ=31536e6;o(AA,"getRawAnalyticsTable");o(qx,"getAnalyticsTable");(0,Px.setChildListenerByType)(vx,$x);o(MZ,"startScheduledTasks");Cx=0,Ox=new Map,vZ=!1;o($x,"recordAnalytics");UZ=1e6;o(xZ,"logAnalytics");o(IA,"onAnalyticsAggregate")});var jx={};be(jx,{ENTRY:()=>FZ,HAS_EXPIRATION:()=>Q_,HAS_RESIDENCY_ID:()=>LA,HAS_STRUCTURE_UPDATE:()=>J_,LAST_TIMESTAMP_PLACEHOLDER:()=>Lm,LOCAL_TIMESTAMP:()=>BZ,METADATA:()=>Ou,NEW_TIMESTAMP_PLACEHOLDER:()=>Yx,NO_TIMESTAMP:()=>wA,PENDING_LOCAL_TIME:()=>DA,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>fA,RecordEncoder:()=>PA,TIMESTAMP_ASSIGN_LAST:()=>HZ,TIMESTAMP_ASSIGN_NEW:()=>Wx,TIMESTAMP_ASSIGN_PREVIOUS:()=>zx,TIMESTAMP_PLACEHOLDER:()=>z_,TIMESTAMP_RECORD_PREVIOUS:()=>NA,entryMap:()=>La,handleLocalTimeForGets:()=>X_,lastMetadata:()=>ct,recordUpdater:()=>MA,removeEntry:()=>rl});function $Z(){return km[0]=km[0]^64,kZ.getFloat64(0)}function X_(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(a,c){e.readCount++,ct=null;let l=r.call(this,a,c);return l&&(ct&&(l.metadataFlags=ct[Ou],l.localTime=ct.localTime,l.residencyId=ct.residencyId,l.size=ct.size,ct.expiresAt>=0&&(l.expiresAt=ct.expiresAt),ct=null),l.value&&La.set(l.value,l),l.key=a),l};let n=e.get;e.get=function(a,c){ct=null;let l=n.call(this,a,c);return ct&&l&&(La.set(l,ct),ct=null),l};let s=e.getRange;e.getRange=function(a){let c=s.call(this,a);return a.valuesForKey?c.map(l=>l?.value):a.values===!1||a.onlyCount?c:c.map(l=>(ct&&(l.metadataFlags=ct[Ou],l.localTime=ct.localTime,l.residencyId=ct.residencyId,ct.expiresAt>=0&&(l.expiresAt=ct.expiresAt),ct=null),l))};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let a=i.constructor,c=i.use,l=i.done;a.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,tl.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<tl.length;u++){let d=tl[u].deref();(!d||d.isDone||d.isCommitted)&&tl.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function MA(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){f||l==null?Cu=i?.localTime?NA|zx:wA:Cu=l?i?.localTime?NA|16384:Wx|16384:wA;let p=u?.expiresAt;if(p>=0&&(c|=Q_),Fm=c,CA=p,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:a,instructedWrite:Cu>0},E,g=0;try{let b=i?.residencyId,S=u?.residencyId;S&&(OA=S,Fm|=LA,g|=Qc),b!==S&&(g|=Jc,b||(b=0)),c&Q_&&(g|=Mm),u?.originatingOperation&&(g|=Dm),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&i.metadataFlags&Pn&&(r.getBinaryFast(i.localTime)||Ca(i.value));let R;if(s!==void 0&&(R=P_(()=>e.put(n,s,h),n,e.rootStore),Wc&&(g|=Pn)),l){let L=u?.user?.username;if(m&&(P_(()=>e.encoder.encode(m),n,e.rootStore),Wc&&(g|=Pn)),e.encoder.hasStructureUpdate&&(g|=J_,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let O=i?.localTime,x=r.get(O);if(x){let j=Mt(x).previousLocalTime;return R=r.put(O,Xc(a,t,n,j,u?.nodeId??server.replication.getThisNodeId(r)??0,L,d,Nu,g,S,b,p),{ifVersion:E}),R}}R=r.put(s===void 0?Yx:Lm,Xc(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,L,d,Nu,g,S,b,p,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&qZ.has(d)&&qe(Nu?.length??1,"db-write",u.tableToTrack,null),R}catch(b){throw b.message+=" id: "+n+" options: "+h,b}}}function rl(e,t,r){if(t)return t.value&&t.metadataFlags&Pn&&!e.auditStore.getBinaryFast(t.localTime)&&Ca(t.value),e.remove(t.key,r)}var Kx,j_,z_,Lm,fA,Yx,BZ,Ou,FZ,km,kZ,wA,Wx,HZ,zx,NA,Q_,LA,DA,J_,qZ,La,GZ,Nu,Cu,Fm,CA,OA,ct,PA,tl,Zc=oe(()=>{Kx=require("msgpackr");Ro();j_=w(z());As();As();jn();z_=new Uint8Array([1,1,1,1,4,64,0,0]),Lm=new Uint8Array([1,1,1,1,1,0,0,0]),fA=new Uint8Array([1,1,1,1,3,64,0,0]),Yx=new Uint8Array([1,1,1,1,0,64,0,0]),BZ=Symbol("local-timestamp"),Ou=Symbol("metadata"),FZ=Symbol("entry"),km=new Uint8Array(8),kZ=new DataView(km.buffer,0,8),wA=0,Wx=0,HZ=1,zx=3,NA=4,Q_=16,LA=32,DA=1,J_=256,qZ=new Set(["put","patch","delete","message","publish"]),La=new WeakMap,Cu=0,Fm=-1,CA=-1,OA=0,ct=null,PA=class extends Kx.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return La.get(this)?.version}getExpiresAt(){return La.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(Cu||Fm>=0){let c=0,l=Cu;l&&(c+=8,Cu=0);let u=Fm,d=CA,f=OA;u>=0&&(c+=4,Fm=-1,d>=0&&(c+=8,CA=-1),f&&(c+=4,OA=0));let m=GZ=n.call(this,i,a|2048|c);Nu=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(z_[4]=l,z_[5]=l>>8,m.set(z_,p),p+=8),Wc&&(u|=Pn),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|H_<<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 Nu=n.call(this,i,a),Nu};let s=this.saveStructures;this.saveStructures=function(i,a){let c=s.call(this,i,a);return this.hasStructureUpdate=!0,c}}decode(t,r){ct=null;let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],a=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(km,0,c),c+=8;else for(let m=0;m<8;m++)km[m]=t[c++];l=$Z(),i=t[c]}let u,d;i<32&&(i===H_?(a=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(a=i|t[c+1]<<5,c+=2),a&Q_&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),a&LA&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Po(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return ct={localTime:l,[Ou]:a,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:Po(()=>super.decode(t,r),this.rootStore)}catch(c){return j_.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o($Z,"getTimestamp");o(X_,"handleLocalTimeForGets");tl=[];setInterval(()=>{for(let e=0;e<tl.length;e++){let t=tl[e].deref();!t||t.isDone||t.isCommitted?tl.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(j_.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):j_.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();o(MA,"recordUpdater");o(rl,"removeEntry")});function xA(e,t,r,n,s,i,a,c){let l=e[0];if(t==="or"){let f=u(l);for(let p=1;p<e.length;p++){let h=e[p],E=u(h);f=f.concat(E)}let m=new Set;return f.filter(p=>{let h=p.key??p;return m.has(h)?!1:(m.add(h),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?a(f,m):f}function u(f){return f.conditions?xA(f.conditions,f.operator,r,n,s,i,a,c):Mu(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}o(u,"executeCondition");function d(f,m,p){return f.map((h,E)=>{if(h.conditions){let S=h.operator==="or",R=d(h.conditions,!S,p);return S?(L,O)=>R.some(x=>x(L,O)):(L,O)=>R.every(x=>x(L,O))}let g=(h.attribute||h[0])===r.primaryKey,b=qm(h,r,i,c,g,p);return m&&E<f.length-1&&p&&(p=XZ(r.primaryStore,h.estimated_count,p)),b}).filter(Boolean)}o(d,"mapConditionsToFilters")}function Mu(e,t,r,n,s,i,a){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new jr.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let R=c[0],L=Bi(n.attributes,R);if(L.relationship){if(c.length<2)throw new jr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let O=L.definition?.tableClass||L.elements?.definition?.tableClass,x=new Map,j=Mu({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,O,s,x);if(L.relationship.to){i[c[0]]=x;let H=!!Bi(O.attributes,L.relationship.to)?.elements;j=zZ(j,L,O.primaryStore,H,x)}if(L.relationship.from){let H=o(F=>(F?.key!==void 0&&(F=F.key),Mu({attribute:L.relationship.from,value:F},t,r,n,s,x)),"searchEntry");L.elements?(i[c[0]]=x,j=jZ(j,L,O.primaryStore,x,H)):j=j.flatMap(H)}return j}else if(c.length===1)c=c[0];else throw new jr.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,p,h,E;l instanceof Date&&(l=l.getTime());let g;switch(BA[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]=xi.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),p=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),p=l[1],p instanceof Date&&(p=p.getTime()),h=u==="gele"||u==="gtle"||u==="between",E=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,p=l,h=!0;break;case"ne":if(l===null){m=l,E=!0;break}case"sort":case"contains":case"ends_with":m=!0,g=!0;break;default:throw new jr.ClientError(`Unknown query comparator "${u}"`)}let b;if(typeof m=="string"&&m.length>Ns.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,Ns.MAX_SEARCH_KEY_LENGTH)+Ns.OVERFLOW_MARKER,E=!1,b=qm(e,n,null,i,d)),typeof p=="string"&&p.length>Ns.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,Ns.MAX_SEARCH_KEY_LENGTH)+Ns.OVERFLOW_MARKER,h=!0,b=b??qm(e,n,null,i,d)),r){let R=m;m=p,p=R,R=!E,E=!h,h=R}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new jr.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new jr.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${c}`,403);if(f?.isIndexing)throw new jr.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new jr.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(b=b??qm(e,n,null,i,d),!b)throw new jr.ClientError(`Unknown search operator ${e.comparator}`)}let S={start:m,end:p,inclusiveEnd:h,exclusiveStart:E,values:!0,versions:d,transaction:t,reverse:r};if(d){let R=f.getRange(S).map(b?function({key:L,value:O}){return this?.isSync?O&&b(O)?L:Da.SKIP:new Promise((x,j)=>setImmediate(()=>{try{x(O&&b(O)?L:Da.SKIP)}catch(H){j(H)}}))}:L=>L.value==null&&!(L.metadataFlags&(Ln|Ma))?Da.SKIP:(a?._freezeRecords&&Object.freeze(L.value),L));return R.hasEntries=!0,R}else return f?f.customIndex?f.customIndex.search(e,a).map(R=>{if(typeof R=="object"&&R){let{key:L,...O}=R,x=n.primaryStore.getEntry(L);return a?._freezeRecords&&Object.freeze(x?.value),{...O,...x}}return R}):f.getRange(S).map(b?function({key:R,value:L}){let O;return typeof R=="string"&&R.length>Ns.MAX_SEARCH_KEY_LENGTH?O=n.primaryStore.get(L):O={[c]:R},this.isSync?b(O)?L:Da.SKIP:new Promise((x,j)=>setImmediate(()=>{try{x(b(O)?L:Da.SKIP)}catch(H){j(H)}}))}:({value:R})=>R):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:R,value:L}){return this.isSync?L&&b(L)?R:Da.SKIP:new Promise((O,x)=>setImmediate(()=>{try{O(L&&b(L)?R:Da.SKIP)}catch(j){x(j)}}))})}function Bi(e,t){if(Array.isArray(t))if(t.length>1){let r=Bi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?Bi(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 zZ(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=o((u,d)=>{let f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let a=i.next();return a.done?a:{value:a.value}},return(){if(i?.return)return i.return()}}}})}function jZ(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,a,c=new Set;return{next(){let l;if(a)for(;l=a.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(a=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return a?.return?.()},throw(){return a?.throw?.()}}}})}function qm(e,t,r,n,s,i){let a=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],f=Bi(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=qm({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:a},m,r,p?.[d]?.joined,c[1]===m.primaryKey,i);if(!h)return;if(p){p.filters||(p.filters=[]),p.filters.push(h);return}let E=t.propertyResolvers?.[d];E.to&&(h.to=E.to);let g,b=o((R,L)=>{let O,x;return E?E.returnDirect?(O=E(R,r,L),x=ct):(x=E(R,r,L,!0),Array.isArray(x)?(O=x.map(j=>j.value),x=null):O=x?.value):O=R[d],{subObject:O,subEntry:x}},"getSubObject"),S=o((R,L)=>{if(E&&h.idFilter){if(!g)if(h.idFilter.idSet?.size===1){for(let F of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:F};g=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else g=u(E.from??t.primaryKey,h.idFilter,!1,!0);let H=g(R);return g.idFilter&&(S.idFilter=g.idFilter),H}let{subObject:O,subEntry:x}=b(R,L);return O?Array.isArray(O)?(!n?.[d]&&n&&(n[d]={fromRecord(H){let F=b(H).subObject;return Array.isArray(F)?F.filter(h).map(Q=>Q[m.primaryKey]):F}}),O.some(h)):h(O,x):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),BA[a]||a){case Ns.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,xi.compareKeys)(d,l[0])>=0&&(0,xi.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,xi.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,xi.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,xi.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,xi.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,xi.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new jr.ClientError(`Unknown query comparator "${a}"`)}function u(d,f,m,p){let h;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&eg(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,g=3;function b(S){let R=S[d],L;if(typeof R!="object"||!R||p?L=f(R):Array.isArray(R)?L=R.some(f):R instanceof Date&&(L=f(R.getTime())),m&&(g++,!L&&!b.idFilter&&++E/g*i>h)){let O=Mu(e,r.transaction.getReadTxn(),!1,t),x;b.to?x=O.flatMap(H=>t.primaryStore.get(H)[b.to]):x=O.map(vu);let j=new Set(x);b.idFilter=H=>j.has(vu(H)),b.idFilter.idSet=j}return L}return o(b,"recordFilter"),s&&(b.idFilter=f),b}o(u,"attributeComparator")}function eg(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/Do(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=BA[n]||n,n===Ns.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=Bi(e.attributes,s[0]),a=i.definition?.tableClass||i.elements.definition?.tableClass,c=eg(a)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*Do(e.indices[i.relationship.from])/(Do(a.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=Do(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=YZ*Do(e.primaryStore)+1;else if(n==="between")r.estimated_count=KZ*Do(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=Do(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=VZ*Do(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function tg(e,t){if(e)if(Mo=e,Pu.lastIndex=0,QZ.test(e))try{if(t&&(t.conditions=[]),ni=t??new Du,Hm(ni,""),Br!==Mo.length&&$t("Unable to parse query, unexpected end of query"),ni.parseErrorMessage&&(ni.parseError=new vA(t.parseErrorMessage),!t))throw ni.parseError;return ni}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${Br} in '${Mo}'`,ni.parseErrorMessage&&(r.message+=", "+ni.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function $t(e){let t=`${e} at position ${Br}`;ni.parseErrorMessage=ni.parseErrorMessage?ni.parseErrorMessage+", "+t:t}function Hm(e,t){let r=Pu,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(Mo);){Br=r.lastIndex;let[,d,f]=n;a?(d&&$t(`expected operator, but encountered '${d}'`),a=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:$t(`invalid FIQL operator ${d}`),l=Qx):(l=decodeURIComponent,i="equals",d||$t("attribute must be specified before equality comparator"),s=Lu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=WZ[f],l=UA[i]?Qx:decodeURIComponent,d||$t(`attribute must be specified before comparator ${f}`),s=Lu(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&$t(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),$t(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||$t("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&Jx(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else Z_(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?$t("conditions/comparisons are not allowed in a property list"):e.push(Lu(d)),s=void 0;break;case"(":Pu.lastIndex=Br;let p=Hm(d?[]:new Du,")");switch(d){case"":Z_(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:$t("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":$t("group by is not implemented yet");case"sort":e.sort=Xx(p);break;default:$t(`unknown query function call ${d}`)}Mo[Br]===","?r.lastIndex=++Br:a=!0,s=null;break;case"{":e.conditions&&$t("property sets are not allowed in a queries"),d||$t("property sets must have a defined parent property name"),Pu.lastIndex=Br,m=Hm([],"}"),m.name=d,e.push(m),Mo[Br]===","?r.lastIndex=++Br:a=!0;break;case"[":if(Pu.lastIndex=Br,d?(m=Hm(new Du,"]"),m.name=d):m=Hm(e.conditions?new Du:[],"]"),e.conditions)if(Z_(e,u),Mo[Br]==="="){l=decodeURIComponent,i="equals",s=Lu(d),r.lastIndex=++Br;break}else e.conditions.push(m),s=null;else e.push(m);Mo[Br]===","?r.lastIndex=++Br:a=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let h={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&Jx(h,d),Z_(e,u),e.conditions.push(h)}else d&&$t("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Lu(d));return e}else $t(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:$t(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?JZ:Pu,r.lastIndex=Br),Br===Mo.length)return e}t&&$t(`expected '${t}', but encountered end of string`)}function Z_(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&$t("Can not mix operators within a condition grouping"):e.operator=t)}function Lu(e){return e.indexOf(".")>-1?e.split(".").map(Lu):decodeURIComponent(e)}function Qx(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new jr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function Jx(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new jr.ClientError("wildcard can only be used at the end of a string")}function Xx(e){let t=Zx(e[0]);return e.length>1&&(t.next=Xx(e.slice(1))),t}function Zx(e){if(Array.isArray(e)){let t=Zx(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}}$t(`Unknown sort type ${e}`)}function vu(e){return Array.isArray(e)?e.join("\0"):e}function Do(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function XZ(e,t,r){return t*r/Do(e)}var jr,Ns,xi,Da,VZ,KZ,YZ,WZ,UA,BA,vA,QZ,Pu,JZ,Br,ni,Mo,Du,rg=oe(()=>{jr=w(Ee()),Ns=w(Gt()),xi=require("ordered-binary"),Da=require("lmdb");ng();Zc();VZ=.3,KZ=.1,YZ=.05,WZ={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},UA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(xA,"executeConditions");o(Mu,"searchByIndex");o(Bi,"findAttribute");o(zZ,"joinTo");o(jZ,"joinFrom");BA={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};o(qm,"filterByType");o(eg,"estimateCondition");vA=class extends jr.Violation{static{o(this,"SyntaxViolation")}},QZ=/[()[\]|!<>.]|(=\w*=)/,Pu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,JZ=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(tg,"parseQuery");o($t,"recordError");o(Hm,"parseBlock");o(Z_,"assignOperator");o(Lu,"decodeProperty");o(Qx,"typedDecoding");o(Jx,"wildcardDecoding");o(Xx,"toSortObject");o(Zx,"toSortEntry");Du=class{static{o(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};o(vu,"flattenKey");o(Do,"estimatedEntryCount");o(XZ,"intersectionEstimate")});var e0,si,sg=oe(()=>{e0=w(ri()),si=class extends URLSearchParams{static{o(this,"RequestTarget")}#e;pathname;search;id;isCollection;constructor(t){let r,n;if(t&&(r=t.indexOf("?"))>-1){n=t.slice(0,r);let s=t.slice(r+1);super(s),this.search=s}else super(),n=t;this.pathname=n??"",this.#e=t}toString(){return this.#e?this.#e:this.size>0?this.pathname+"?"+super.toString():this.pathname}get url(){return this.toString()}delete(t){super.delete(t),this.conditions&&(this.conditions=this.conditions.filter(r=>r.attribute!==t)),this.#e=void 0}set(t,r){this.delete(t),super.set(t,r),this.conditions?.push({attribute:t,value:r})}append(t,r){super.append(t,r),this.#e=void 0,this.conditions?.push({attribute:t,value:r})}};(0,e0._assignPackageExport)("Resource",Resource)});var i0={};be(i0,{MultiPartId:()=>ig,Resource:()=>Fr,contextStorage:()=>xu,snakeCase:()=>e9,transformForSelect:()=>Bu});function e9(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function t0(e,t){if(nl=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(nl=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new ig;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){nl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return nl=!0,null;e[e.length-1]==="/"&&(nl=!0)}return t.coerceId(decodeURIComponent(e))}function Dn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,a){let c,l,u,d;if(r){if(a)d=i,a=a.getContext?.()||a;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,a=i.getContext?.()||i):i?.transaction instanceof yo?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new Uu.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?a?(d=i,a=a.getContext?.()||a):a=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(a=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let E=c.indexOf("?");E>-1&&(l=this.parseQuery(c.slice(E+1),s),c=c.slice(0,E),c===""&&(u=!0));let g=this.parsePath(c,a,l);g?.id!==void 0?(g.query&&(l?l=Object.assign(g.query,l):l=g.query),u=g.isCollection,c=g.id):c=g,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new si,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new si,l.id=c,c==null&&(u=!0);l||(l=new si,l.id=c),u&&(l.isCollection=!0);let f;a||(a=xu.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,p=h;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(p=o(E=>xu.run(a,()=>h(E)),"runAction")),a?.transaction){let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)}else return Tt(a,()=>{let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)},f);function h(E){if(m!==!1&&a.authorize){a.authorize=!1;let g=t.type==="read"?E.allowRead(a.user,l,a):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(a.user,d,a):E.allowUpdate(a.user,d,a):t.type==="create"?E.allowCreate(a.user,d,a):E.allowDelete(a.user,l,a);if(g?.then)return g.then(b=>{if(!b)throw new Uu.AccessViolation(a.user);return typeof d?.then=="function"?d.then(S=>e(E,l,a,S)):e(E,l,a,d)});if(!g)throw new Uu.AccessViolation(a.user)}return typeof d?.then=="function"?d.then(g=>e(E,l,a,g)):e(E,l,a,d)}o(h,"authorizeActionOnResource")}}function Qn(e,t){let r=new Uu.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function FA(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let a,c;return e.hasOwnProperty(i)&&typeof(a=e[i])!="function"?a:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function Bu(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return o(function a(c){return c.then?c.then(a):Array.isArray(c)?c.map(a):FA(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(FA(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let a=e.forceNulls;return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(FA(l,r,n)),f;for(let m of e){let p=d(m);p===void 0&&a&&(p=null),p?.then?(f||(f=[]),f.push(p.then(h=>u[m.name||m]=h))):u[m.name||m]=p}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(a){return c=>{if(typeof c=="string")return a(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=Bu(c.select||c,d)}let u=a(c.name);return l(u)}else return a(c);else return c}}o(i,"handleProperty")}var r0,n0,Uu,s0,xu,ZZ,Fr,nl,ig,va=oe(()=>{r0=require("crypto");mm();yu();n0=w(ri()),Uu=w(Ee());Na();rg();s0=require("async_hooks");sg();xu=new s0.AsyncLocalStorage,ZZ={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Fr=class{static{o(this,"Resource")}#e;#t;#r;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=Dn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(a);return a(i);function a(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=Bu(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Dn(function(t,r,n,s){if(Array.isArray(s)&&t.#r&&t.constructor.loadAsInstance!==!1){let i=[];for(let a of s){let c=t.constructor,l=a[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(a,n))):i.push(u.put(a,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):Qn(t,"put")},{hasContent:!0,type:"update"});static patch=Dn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):Qn(t,"patch")},{hasContent:!0,type:"update"});static delete=Dn(function(t,r,n,s){return t.delete?t.delete(r):Qn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,r0.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=xu.getStore()??{};let s;return this.loadAsInstance===!1?s=t:t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),Tt(n,async()=>{let i=new this(s,n),a=await i.create?i.create(s,r):Qn(i,"create");return n.newLocation=s??a?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?a:i})}static invalidate=Dn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Qn(t,"delete")},{hasContent:!1,type:"update"});static post=Dn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create"});static update=Dn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update"});static connect=Dn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):Qn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Dn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Qn(t,"subscribe")},{type:"read"});static publish=Dn(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):Qn(t,"publish")},{hasContent:!0,type:"create"});static search=Dn(function(t,r,n){let s=t.search?t.search(r):Qn(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let a=Bu(i,t.constructor);return s.map(a)}return s},{type:"read"});static query=Dn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):Qn(t,"search")},{hasContent:!0,type:"read"});static copy=Dn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):Qn(t,"copy")},{hasContent:!0,type:"create"});static move=Dn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):Qn(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;Qn(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return tg(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&ZZ[a];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===a))if(t=t.slice(0,s),n)n.property=a;else return{query:{property:a},id:t0(t,this),isCollection:nl}}let i=t0(t,this);return nl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),a;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?a=r.isCollection:a=n?.isCollection;let c=a&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return a&&(s.#r=!0),s}subscribe(t){return new Wn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new Wn}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,n0._assignPackageExport)("Resource",Fr);o(e9,"snakeCase");o(t0,"pathToId");ig=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(Dn,"transactional");o(Qn,"missingMethod");o(FA,"selectFromObject");o(Bu,"transformForSelect")});var sl,kA=oe(()=>{sl=class{static{o(this,"ErrorResource")}error;constructor(t){this.error=t}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var HA={};be(HA,{Resources:()=>Fu,keyArrayToString:()=>ku,resetResources:()=>t9,resources:()=>Cs});function t9(){return Cs=new Fu,Me.resources=Cs,Cs}function ku(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var o0,a0,Fu,Cs,Ua=oe(()=>{Na();kA();o0=w(z()),a0=w(Ee());xr();Fu=class extends Map{static{o(this,"Resources")}isWorker=!0;loginPath;allTypes=new Map;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},a=super.get(t);if(a&&(a.Resource.databaseName!==r.databaseName||a.Resource.tableName!==r.tableName)&&!s){let c=new a0.ServerError(`Conflicting paths for ${t}`);o0.default.error(c),i.Resource=new sl(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,a=t.length;for(;n<a;){s=n,n=t.indexOf("/",n),n===-1&&(n=a);let u=n===a?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===a&&(f=u.indexOf("?",s),f!==-1)){let m=u.slice(0,f);d=this.get(m)}if(d&&(!r||d.exportTypes?.[r]!==!1)){if(d.relativeURL=t.slice(f!==-1?f:n),!d.hasSubPaths)return d;i=d}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return Tt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};o(t9,"resetResources");o(ku,"keyArrayToString")});function $A(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=l0,r9(e.primaryStore,e.auditStore)):(c=c0,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{u0(c0[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[a];u||(u=l[a]=new Map,u.envs=l,u.tableId=a,u.store=e.primaryStore),t=ku(t);let d=new GA(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 u0(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),d0(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=Mt(s),a=e[i.tableId];if(!a)continue;let c=i.recordId,l=ku(c),u=0;do{let d=a.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,qA.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,qA.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 r9(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:a,txnId:c})=>{let l=l0[s];if(!l)return;let u=o(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{u0(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function d0(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function f0(e){return e.nextTransaction||($A({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),d0(e)),e.nextTransaction}var qA,c0,l0,GA,VA=oe(()=>{qA=w(z());yu();Ua();Ro();c0=Object.create(null),l0=Object.create(null);o($A,"addSubscription");GA=class extends Wn{static{o(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};o(u0,"notifyFromTransactionData");o(r9,"listenToCommits");o(d0,"nextTransaction");o(f0,"whenNextTransaction")});var p0=v((sPe,m0)=>{"use strict";var KA=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};m0.exports=KA});var E0=v((oPe,h0)=>{"use strict";var YA=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};h0.exports=YA});var Gm=v(g0=>{"use strict";var _0=le(),n9=(k(),D(Y)),{RecordEncoder:s9}=(Zc(),D(jx));_0.initSync();var i9=_0.get(n9.CONFIG_PARAMS.STORAGE_CACHING)!==!1,WA=class{static{o(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=i9&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:s9})}};g0.OpenDBIObject=WA});var $m=v((uPe,S0)=>{"use strict";var Jn=le(),Os=(k(),D(Y));Jn.initSync();var og=class{static{o(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Jn.get(Os.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Jn.get(Os.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Jn.get(Os.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Jn.get(Os.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Jn.get(Os.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Jn.get(Os.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Jn.get(Os.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Jn.get(Os.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Jn.get(Os.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Jn.get(Os.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Jn.get(Os.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Jn.get(Os.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};S0.exports=og;og.MAX_DBS=1e4});var pt=v((fPe,O0)=>{"use strict";var jA=require("lmdb"),ii=require("fs-extra"),Xn=require("path"),ag=Cn(),R0=z(),Mn=Kr().LMDB_ERRORS_ENUM,cg=E0(),{OpenDBIObject:QA}=Gm(),b0=$m(),xa=Gt(),T0=(k(),D(Y)),{table:o9,resetDatabases:a9}=(Ne(),D(ft)),y0=le(),oi=xa.INTERNAL_DBIS_NAME,A0=xa.DBI_DEFINITION_NAME,c9="data.mdb",l9="lock.mdb",Vm=".mdb",u9="-lock",zA=class{static{o(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Ps(t,r),this.key_type=this.dbi[xa.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[xa.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new jA.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function lg(e,t){if(e===void 0)throw new Error(Mn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Mn.ENV_NAME_REQUIRED)}o(lg,"pathEnvNameValidation");async function JA(e,t,r=!0){try{await ii.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Mn.INVALID_BASE_PATH):n}try{let n=Xn.join(e,t+Vm);return await ii.access(n,ii.constants.R_OK|ii.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await ii.access(Xn.join(e,t,c9),ii.constants.R_OK|ii.constants.F_OK),Xn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Mn.INVALID_ENVIRONMENT)}else throw new Error(Mn.INVALID_ENVIRONMENT);throw n}}o(JA,"validateEnvironmentPath");function ug(e,t){if(ag.validateEnv(e),t===void 0)throw new Error(Mn.DBI_NAME_REQUIRED)}o(ug,"validateEnvDBIName");async function d9(e,t,r=!1,n=!1){lg(e,t);let s=Xn.basename(e);t=t.toString();let i=y0.get(T0.CONFIG_PARAMS.DATABASES);i||y0.setProperty(T0.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await JA(e,t,n),I0(e,t,r)}catch(a){if(a.message===Mn.INVALID_ENVIRONMENT){let c=Xn.join(e,t);await ii.mkdirp(n?c:e);let l=new b0(n?c:c+Vm,!1),u=jA.open(l);u.dbis=Object.create(null);let d=new QA(!1);u.openDB(oi,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=XA(e,t,r);return u[xa.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw a}}o(d9,"createEnvironment");async function f9(e,t,r,n=!0){lg(e,t),t=t.toString();let s=Xn.join(e,t);return o9({table:t,database:Xn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}o(f9,"copyEnvironment");async function I0(e,t,r=!1){lg(e,t),t=t.toString();let n=XA(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 JA(e,t),i=Xn.join(e,t+Vm),a=s!=i,c=new b0(s,a),l=jA.open(c);l.dbis=Object.create(null);let u=N0(l);for(let d=0;d<u.length;d++)Ps(l,u[d]);return l[xa.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}o(I0,"openEnvironment");async function m9(e,t,r=!1){lg(e,t),t=t.toString();let n=Xn.join(e,t+Vm),s=await JA(e,t);if(global.lmdb_map!==void 0){let i=XA(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await w0(a),delete global.lmdb_map[i]}}await ii.remove(s),await ii.remove(s===n?s+u9:Xn.join(Xn.dirname(s),l9))}o(m9,"deleteEnvironment");async function w0(e){ag.validateEnv(e);let t=e[xa.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(w0,"closeEnvironment");function XA(e,t,r=!1){let s=`${Xn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}o(XA,"getCachedEnvironmentName");function p9(e){ag.validateEnv(e);let t=Object.create(null),r=Ps(e,oi);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==oi)try{t[n]=Object.assign(new cg,s)}catch{R0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}o(p9,"listDBIDefinitions");function N0(e){ag.validateEnv(e);let t=[],r=Ps(e,oi);for(let{key:n}of r.getRange({start:!1}))n!==oi&&t.push(n);return t}o(N0,"listDBIs");function h9(e,t){let n=Ps(e,oi).getEntry(t),s=new cg;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{R0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}o(h9,"getDBIDefinition");function C0(e,t,r,n=!r){if(ug(e,t),t=t.toString(),t===oi)throw new Error(Mn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ps(e,t)}catch(s){if(s.message===Mn.DBI_DOES_NOT_EXIST){let i=new QA(r,n===!0),a=e.openDB(t,i),c=new cg(r===!0,n);return a[A0]=c,Ps(e,oi).putSync(t,c),e.dbis[t]=a,a}throw s}}o(C0,"createDBI");function Ps(e,t){if(ug(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==oi?r=h9(e,t):r=new cg,r===void 0)throw new Error(Mn.DBI_DOES_NOT_EXIST);let n;try{let s=new QA(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(Mn.DBI_DOES_NOT_EXIST):s}return n[A0]=r,e.dbis[t]=n,n}o(Ps,"openDBI");function E9(e,t){ug(e,t),t=t.toString();let r=Ps(e,t),n=r.getStats();return r[xa.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}o(E9,"statDBI");async function _9(e,t){try{let r=Xn.join(e,t+Vm);return(await ii.stat(r)).size}catch{throw new Error(Mn.INVALID_ENVIRONMENT)}}o(_9,"environmentDataSize");function g9(e,t){if(ug(e,t),t=t.toString(),t===oi)throw new Error(Mn.CANNOT_DROP_INTERNAL_DBIS_NAME);Ps(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ps(e,oi).removeSync(t)}o(g9,"dropDBI");function S9(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Ps(e,i)}catch(a){if(a.message===Mn.DBI_DOES_NOT_EXIST)C0(e,i,i!==t,i===t),n=!0;else throw a}}n&&a9()}o(S9,"initializeDBIs");O0.exports={openDBI:Ps,openEnvironment:I0,createEnvironment:d9,listDBIs:N0,listDBIDefinitions:p9,createDBI:C0,dropDBI:g9,statDBI:E9,deleteEnvironment:m9,initializeDBIs:S9,TransactionCursor:zA,environmentDataSize:_9,copyEnvironment:f9,closeEnvironment:w0}});var D0=v((pPe,L0)=>{"use strict";var ZA=pt(),T9=z(),P0=Kr().LMDB_ERRORS_ENUM;L0.exports=y9;async function y9(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let a=t[i];if(a.startsWith(`${e.schema}.`)||a.startsWith(`txn.${e.schema}.`))try{await ZA.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==P0.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await ZA.closeEnvironment(global.lmdb_map[n]),await ZA.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==P0.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){T9.error(t)}}o(y9,"cleanLMDBMap")});var ki=v((EPe,v0)=>{"use strict";var M0=ce(),R9=(k(),D(Y)),Hu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Fi=require("joi"),Ba={schema_format:{pattern:Hu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},b9=Fi.alternatives(Fi.string().min(1).max(Ba.schema_length.maximum).pattern(Hu).messages({"string.pattern.base":"{:#label} "+Ba.schema_format.message}),Fi.number(),Fi.array()).required(),A9=Fi.alternatives(Fi.string().min(1).max(Ba.schema_length.maximum).pattern(Hu).messages({"string.pattern.base":"{:#label} "+Ba.schema_format.message}),Fi.number()),I9=Fi.alternatives(Fi.string().min(1).max(Ba.schema_length.maximum).pattern(Hu).messages({"string.pattern.base":"{:#label} "+Ba.schema_format.message}),Fi.number()).required();function w9(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>Ba.schema_length.maximum?`'${property_name}' maximum of 250 characters`:Hu.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}o(w9,"checkValidTable");function N9(e,t){return M0.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(N9,"validateSchemaExists");function C9(e,t){let r=t.state.ancestors[0].schema;return M0.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(C9,"validateTableExists");function O9(e,t){return e.toLowerCase()===R9.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(O9,"validateSchemaName");v0.exports={commonValidators:Ba,schemaRegex:Hu,hdbSchemaTable:b9,validateSchemaExists:N9,validateTableExists:C9,validateSchemaName:O9,checkValidTable:w9,hdbDatabase:A9,hdbTable:I9}});var ot=v((gPe,U0)=>{"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:o(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:o(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};U0.exports={validateObject:P9,validateObjectAsync:L9,validateBySchema:D9};function P9(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}o(P9,"validateObject");async function L9(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}o(L9,"validateObjectAsync");function D9(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(D9,"validateBySchema")});var tI=v((TPe,B0)=>{var{hdbTable:M9,hdbDatabase:x0}=ki(),v9=ot(),eI=require("joi"),U9={undefined:"undefined",null:"null"},x9=o((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let a=r[i];(!a||a.length===0||U9[a]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${a}'`:s+=`. Invalid attribute name: '${a}'`)}return s?t.message(s):e},"customRecordsVal"),B9=eI.object({database:x0,schema:x0,table:M9,records:eI.array().items(eI.object().custom(x9)).required()});B0.exports=function(e){return v9.validateBySchema(e,B9)}});var k0=v((RPe,F0)=>{"use strict";var rI=class{static{o(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};F0.exports=rI});var q0=v((APe,H0)=>{"use strict";var nI=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};H0.exports=nI});var $0=v((wPe,G0)=>{"use strict";var sI=class{static{o(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};G0.exports=sI});var K0=v((CPe,V0)=>{"use strict";var iI=class{static{o(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};V0.exports=iI});var ol=v((MPe,z0)=>{"use strict";var F9=pt(),k9=q0(),H9=$0(),q9=K0(),Hi=Cn(),Km=Kr().LMDB_ERRORS_ENUM,G9=Gt(),vo=(k(),D(Y)),$9=ce(),V9=require("uuid"),PPe=require("lmdb"),{handleHDBError:K9,hdbErrors:Y9}=Ee(),{OVERFLOW_MARKER:LPe,MAX_SEARCH_KEY_LENGTH:DPe}=G9,Y0=le();Y0.initSync();var dg=Y0.get(vo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),oI=vo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,il=vo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function W9(e,t,r,n,s=Hi.getNextMonotonicTime()){uI(e,t,r,n),aI(e,t,r);let i=new k9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];W0(u,!0,s);let d=z9(e,t,r,u),f=u[t];a.push(d),c.push(f)}return cI(a,c,n,i,s)}o(W9,"insertRecords");function z9(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||n.hasOwnProperty(a)===!1)continue;let c=n[a];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][vo.FUNC_VAL],n[a]=c)}let l=Hi.getIndexedValues(c),u=e.dbis[a];if(l){dg&&u.prefetch(l.map(d=>({key:d,value:s})),fg);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}dg&&e.dbis[t].prefetch([s],fg),e.dbis[t].put(s,n,n[il])})}o(z9,"insertRecord");function j9(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}o(j9,"removeSkippedRecords");function W0(e,t,r){let n=r>0;(n||!Number.isInteger(e[il]))&&(e[il]=r||(r=Hi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[oI]))&&(e[oI]=r||Hi.getNextMonotonicTime()):delete e[oI]}o(W0,"setTimestamps");function aI(e,t,r){r.indexOf(vo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(vo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(vo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(vo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),F9.initializeDBIs(e,t,r)}o(aI,"initializeTransaction");async function Q9(e,t,r,n,s=Hi.getNextMonotonicTime()){uI(e,t,r,n),aI(e,t,r);let i=new H9,a=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=lI(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),a.push(u);continue}c.push(m),l.push(f)}return cI(c,l,n,i,s,a)}o(Q9,"updateRecords");async function J9(e,t,r,n,s=Hi.getNextMonotonicTime()){try{uI(e,t,r,n)}catch(l){throw K9(l,l.message,Y9.HTTP_STATUS_CODES.BAD_REQUEST)}aI(e,t,r);let i=new q9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;$9.isEmpty(u[t])?(d=V9.v4(),u[t]=d):d=u[t];let f=lI(e,t,u,d,i,!1,s);a.push(f),c.push(d)}return cI(a,c,n,i,s)}o(J9,"upsertRecords");async function cI(e,t,r,n,s,i=[]){let a=await Promise.all(e);for(let c=0,l=a.length;c<l;c++)a[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Hi.getNextMonotonicTime(),j9(r,i),n}o(cI,"finalizeWrite");function lI(e,t,r,n,s,i=!1,a){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(W0(r,!d,a),Number.isInteger(r[il])&&u[il]>r[il])return!1;d&&s.original_records.push(u);let f,m=o(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let E=r[h],g=e.dbis[h];if(g===void 0)continue;let b=u[h];if(typeof E=="function"){let R=E([[u]]);Array.isArray(R)&&(E=R[0][vo.FUNC_VAL],r[h]=E)}if(E===b)continue;let S=Hi.getIndexedValues(b);if(S){dg&&g.prefetch(S.map(R=>({key:R,value:n})),fg);for(let R=0,L=S.length;R<L;R++)g.remove(S[R],n)}if(S=Hi.getIndexedValues(E),S){dg&&g.prefetch(S.map(R=>({key:R,value:n})),fg);for(let R=0,L=S.length;R<L;R++)g.put(S[R],n)}}let p={...u,...r};c.put(n,p,p[il])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:lI(e,t,r,n,s,i,a))}o(lI,"updateUpsertRecord");function X9(e,t,r){if(Hi.validateEnv(e),t===void 0)throw new Error(Km.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Km.WRITE_ATTRIBUTES_REQUIRED):new Error(Km.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(X9,"validateBasic");function uI(e,t,r,n){if(X9(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Km.RECORDS_REQUIRED):new Error(Km.RECORDS_MUST_BE_ARRAY)}o(uI,"validateWrite");function fg(){}o(fg,"noop");z0.exports={insertRecords:W9,updateRecords:Q9,upsertRecords:J9}});var qi=v((UPe,Z9)=>{Z9.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"hash_function"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"id",table:"hdb_license",database:"system",audit:!0,attributes:[{attribute:"id"},{name:"level"},{name:"region",indexed:!0},{name:"reads"},{name:"writes"},{name:"readBytes"},{name:"writeBytes"},{name:"realTimeMessages"},{name:"realTimeBytes"},{name:"cpuTime"},{name:"storage"},{name:"usedReads"},{name:"usedWrites"},{name:"usedReadBytes"},{name:"usedWriteBytes"},{name:"usedRealTimeMessages"},{name:"usedRealTimeBytes"},{name:"usedCpuTime"},{name:"usedStorage"},{name:"expiration"},{name:"autoRenew"},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics_hostname:{hash_attribute:"id",name:"hdb_analytics_hostname",schema:"system",attributes:[{attribute:"id"},{attribute:"hostname"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var Q0=v((xPe,j0)=>{"use strict";var e7=require("uuid"),dI=class{static{o(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||e7.v4(),this.schema_table=`${this.schema}.${this.table}`}};j0.exports=dI});var mg=v((FPe,J0)=>{"use strict";var t7=Q0(),fI=class extends t7{static{o(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,a=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=a}};J0.exports=fI});var Z0=v((HPe,X0)=>{"use strict";X0.exports=n7;var r7="inserted";function n7(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===r7?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}o(n7,"returnObject")});var pg=v(($Pe,tB)=>{"use strict";var s7=(k(),D(Y)),mI=pt(),i7=ol(),{getSystemSchemaPath:o7,getSchemaPath:a7}=St(),GPe=qi(),{validateBySchema:c7}=ot(),Ym=require("joi"),l7=mg(),u7=Z0(),{handleHDBError:d7,hdbErrors:f7,ClientError:m7}=Ee(),eB=ce(),{HTTP_STATUS_CODES:p7}=f7,h7="inserted";tB.exports=E7;async function E7(e){let t=c7(e,Ym.object({database:Ym.string(),schema:Ym.string(),table:Ym.string().required(),attribute:Ym.string().required()}));if(t)throw new m7(t.message);let r=!e.skip_table_check&&eB.checkGlobalSchemaTable(e.schema,e.table);if(r)throw d7(new Error,r,p7.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=eB.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 l7(e.schema,e.table,e.attribute,e.id);try{let i=await mI.openEnvironment(a7(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${create_attribute_obj.attribute}' already exists in ${e.schema}.${e.table}`);mI.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await mI.openEnvironment(o7(),s7.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await i7.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return u7(h7,c,{records:[s]},l)}catch(i){throw i}}o(E7,"lmdbCreateAttribute")});var Wm=v((YPe,nB)=>{"use strict";var Uo=ce(),rB=z(),KPe=tI(),{getDatabases:_7}=(Ne(),D(ft)),{ClientError:al}=Ee();nB.exports=g7;function g7(e){if(Uo.isEmpty(e))throw new al("invalid update parameters defined.");if(Uo.isEmptyOrZeroLength(e.schema))throw new al("invalid schema specified.");if(Uo.isEmptyOrZeroLength(e.table))throw new al("invalid table specified.");if(!Array.isArray(e.records))throw new al("records must be an array");let t=_7()[e.schema]?.[e.table];if(Uo.isEmpty(t))throw new al(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(a=>{if(i&&Uo.isEmptyOrZeroLength(a[r]))throw rB.error("a valid hash attribute must be provided with update record:",a),new al("a valid hash attribute must be provided with update record, check log for more info");if(!Uo.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw rB.error(`a valid hash value must be provided with ${e.operation} record:`,a),new al(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Uo.isEmpty(a[r])&&a[r]!==""&&n.has(Uo.autoCast(a[r]))&&(a.skip=!0),n.add(Uo.autoCast(a[r]));for(let c in a)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}o(g7,"insertUpdateValidate")});var hg=v((zPe,iB)=>{"use strict";var sB=ce(),S7=(k(),D(Y)),T7=z(),y7=pg(),R7=mg(),b7=xo(),{SchemaEventMsg:A7}=Zn(),I7="already exists in";iB.exports=w7;async function w7(e,t,r){if(sB.isEmptyOrZeroLength(r))return r;let n=[];sB.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 N7(e,t.schema,t.name,i)})),s}o(w7,"lmdbCheckForNewAttributes");async function N7(e,t,r,n){let s=new R7(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await C7(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(I7))T7.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}o(N7,"createNewAttribute");async function C7(e){let t;return t=await y7(e),b7.signalSchemaChange(new A7(process.pid,S7.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(C7,"createAttribute")});var qu=v((QPe,oB)=>{"use strict";var pI=class{static{o(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};oB.exports=pI});var cB=v((XPe,aB)=>{"use strict";var O7=qu(),P7=(k(),D(Y)).OPERATIONS_ENUM,hI=class extends O7{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(P7.INSERT,r,n,s,i),this.records=t}};aB.exports=hI});var uB=v((eLe,lB)=>{"use strict";var L7=qu(),D7=(k(),D(Y)).OPERATIONS_ENUM,EI=class extends L7{static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(D7.UPDATE,n,s,i,a),this.records=t,this.original_records=r}};lB.exports=EI});var fB=v((rLe,dB)=>{"use strict";var M7=qu(),v7=(k(),D(Y)).OPERATIONS_ENUM,_I=class extends M7{static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(v7.UPSERT,n,s,i,a),this.records=t,this.original_records=r}};dB.exports=_I});var pB=v((sLe,mB)=>{"use strict";var U7=qu(),x7=(k(),D(Y)).OPERATIONS_ENUM,gI=class extends U7{static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(x7.DELETE,n,s,t,i),this.original_records=r}};mB.exports=gI});var zm=v((aLe,gB)=>{"use strict";var oLe=require("path"),hB=pt(),B7=cB(),F7=uB(),k7=fB(),H7=pB(),Gu=Gt(),EB=ce(),{CONFIG_PARAMS:q7}=(k(),D(Y)),_B=le();_B.initSync();var Eg=(k(),D(Y)).OPERATIONS_ENUM,{getTransactionAuditStorePath:G7}=St();gB.exports=$7;async function $7(e,t){if(_B.get(q7.LOGGING_AUDITLOG)===!1)return;let r=G7(e.schema,e.table),n=await hB.openEnvironment(r,e.table,!0),s=V7(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){hB.initializeDBIs(n,Gu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Gu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),EB.isEmpty(s.user_name)||n.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let a=0;a<s.hash_values.length;a++)n.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[a],i)})}}o($7,"writeTransaction");function V7(e,t){let r=EB.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Eg.INSERT)return new B7(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Eg.UPDATE)return new F7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Eg.UPSERT)return new k7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Eg.DELETE)return new H7(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(V7,"createTransactionObject")});var SI=v((uLe,SB)=>{"use strict";var K7=Wm(),lLe=um(),jm=(k(),D(Y)),Y7=dm(),W7=ol().insertRecords,z7=pt(),j7=z(),Q7=hg(),{getSchemaPath:J7}=St(),X7=zm();SB.exports=Z7;async function Z7(e){try{let{schemaTable:t,attributes:r}=K7(e);Y7(e,r,t.hash_attribute),e.schema!==jm.SYSTEM_SCHEMA_NAME&&(r.includes(jm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(jm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(jm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(jm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Q7(e.hdb_auth_header,t,r),s=J7(e.schema,e.table),i=await z7.openEnvironment(s,e.table),a=await W7(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await X7(e,a)}catch(c){j7.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(Z7,"lmdbCreateRecords")});var RB=v((fLe,yB)=>{"use strict";var TB=(k(),D(Y)),eee=SI(),tee=um(),ree=require("fs-extra"),{getSchemaPath:nee}=St();yB.exports=see;async function see(e){let t=[{name:e.schema,createddate:Date.now()}],r=new tee(TB.SYSTEM_SCHEMA_NAME,TB.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await eee(r),await ree.mkdirp(nee(e.schema))}o(see,"lmdbCreateSchema")});var AB=v((pLe,bB)=>{"use strict";var TI=class{static{o(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};bB.exports=TI});var CB=v((SLe,NB)=>{"use strict";var IB=pt(),yI=Cn(),RI=Kr().LMDB_ERRORS_ENUM,iee=Gt(),wB=z(),ELe=ce(),oee=require("lmdb"),aee=AB(),cee=(k(),D(Y)),{OVERFLOW_MARKER:_Le,MAX_SEARCH_KEY_LENGTH:gLe}=iee,lee=cee.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function uee(e,t,r,n){if(yI.validateEnv(e),t===void 0)throw new Error(RI.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(RI.IDS_REQUIRED):new Error(RI.IDS_MUST_BE_ITERABLE);try{let s=IB.listDBIs(e);IB.initializeDBIs(e,t,s);let i=new aee,a,c=[],l=[];for(let m=0,p=r.length;m<p;m++)try{a=r[m];let h=e.dbis[t].get(a);if(!h||n&&h[lee]>n){i.skipped.push(a);continue}let E=e.dbis[t].ifVersion(a,oee.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let g=0;g<s.length;g++){let b=s[g];if(!h.hasOwnProperty(b)||b===t)continue;let S=e.dbis[b],R=h[b];if(R!=null)try{let L=yI.getIndexedValues(R);if(L)for(let O=0,x=L.length;O<x;O++)S.remove(L[O],a)}catch{wB.warn(`cannot delete from attribute: ${b}, ${R}:${a}`)}}});c.push(E),l.push(a),i.original_records.push(h)}catch(h){wB.warn(h),i.skipped.push(a)}let u=[],d=await Promise.all(c);for(let m=0,p=d.length;m<p;m++)d[m]===!0?i.deleted.push(l[m]):(i.skipped.push(l[m]),u.push(m));let f=0;for(let m=0;m<u.length;m++){let p=u[m];i.original_records.splice(p-f,1),f++}return i.txn_time=yI.getNextMonotonicTime(),i}catch(s){throw s}}o(uee,"deleteRecords");NB.exports={deleteRecords:uee}});var Qm=v((yLe,PB)=>{"use strict";var $u=ce(),dee=CB(),fee=pt(),{getSchemaPath:mee}=St(),pee=zm(),hee=z();PB.exports=Eee;async function Eee(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if($u.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if($u.isEmptyOrZeroLength(e.hash_values)&&!$u.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];$u.isEmpty(l)||e.hash_values.push(l)}}if($u.isEmptyOrZeroLength(e.hash_values))return OB([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if($u.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=mee(e.schema,e.table),i=await fee.openEnvironment(s,e.table),a=await dee.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await pee(e,a)}catch(c){hee.error(`unable to write transaction due to ${c.message}`)}return OB(a.deleted,a.skipped,a.txn_time)}catch(s){throw s}}o(Eee,"lmdbDeleteRecords");function OB(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}o(OB,"createDeleteResponse")});var AI=v((ALe,LB)=>{"use strict";var _ee=(k(),D(Y)),bLe=Cn();function bI(e,t){let r=Object.create(null);if(t.length===1&&_ee.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}o(bI,"parseRow");function gee(e,t,r,n){let s=bI(r,e);n.push(s)}o(gee,"searchAll");function See(e,t,r,n){let s=bI(r,e);n[t]=s}o(See,"searchAllToMap");function Tee(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(Tee,"iterateDBI");function cl(e,t,r,n,s){let i=Object.create(null);i[s]=e;let a;n===s?a=e:(a=t,n!==void 0&&(i[n]=a)),r[0].push(a),r[1].push(i)}o(cl,"pushResults");function yee(e,t,r,n,s,i){t.toString().endsWith(e)&&cl(t,r,n,s,i)}o(yee,"endsWith");function Ree(e,t,r,n,s,i){t.toString().includes(e)&&cl(t,r,n,s,i)}o(Ree,"contains");function bee(e,t,r,n,s,i){t>e&&cl(t,r,n,s,i)}o(bee,"greaterThanCompare");function Aee(e,t,r,n,s,i){t>=e&&cl(t,r,n,s,i)}o(Aee,"greaterThanEqualCompare");function Iee(e,t,r,n,s,i){t<e&&cl(t,r,n,s,i)}o(Iee,"lessThanCompare");function wee(e,t,r,n,s,i){t<=e&&cl(t,r,n,s,i)}o(wee,"lessThanEqualCompare");LB.exports={parseRow:bI,searchAll:gee,searchAllToMap:See,iterateDBI:Tee,endsWith:yee,contains:Ree,greaterThanCompare:bee,greaterThanEqualCompare:Aee,lessThanCompare:Iee,lessThanEqualCompare:wee,pushResults:cl}});var Vu=v((OLe,FB)=>{"use strict";var Fa=pt(),wLe=z(),es=Cn(),_g=Gt(),er=Kr().LMDB_ERRORS_ENUM,NLe=ce(),Nee=(k(),D(Y)),gg=AI(),{parseRow:Cee}=gg,CLe=require("lmdb"),{OVERFLOW_MARKER:DB,MAX_SEARCH_KEY_LENGTH:Oee}=_g;function MB(e,t,r,n=!1,s=void 0,i=void 0){return ll(e,t,r,(a,c)=>c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}o(MB,"iterateFullIndex");function Jm(e,t,r,n,s,i=!1,a=void 0,c=void 0,l=!1,u=!1){return ll(e,t,r,(d,f,m,p)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:a,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return p===r?(S.values=!1,f.getRange(S).map(R=>({value:R}))):f.getRange(S)})}o(Jm,"iterateRangeBetween");function ll(e,t,r,n){let s=e.database||e,i=Fa.openDBI(s,r);i[_g.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Fa.openDBI(s,t);let a;e.database?a=e:(a=e.useReadTransaction(),a.database=e);let c=n(a,i,s,t);return c.transaction=a,e.database||(c.onDone=()=>{a.done()}),c}o(ll,"setupTransaction");function vB(e,t,r,n){let s;return function(i,a){if(typeof i=="string"&&i.endsWith(DB)){if(!s)if(r)s=Fa.openDBI(e,r);else{let l=Fa.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Fa.openDBI(e,l[u]),!s[_g.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(a,{transaction:t,lazy:!0})[n]}return i}}o(vB,"getOverflowCheck");function Pee(e,t,r,n=!1,s=void 0,i=void 0){if(es.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);return ll(e,t,t,(a,c,l)=>(Sg(r),r=Xm(l,r),c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>Cee(u.value,r))))}o(Pee,"searchAll");function Lee(e,t,r,n=!1,s=void 0,i=void 0){if(es.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);Sg(r),r=Xm(e.database||e,r);let a=new Map;for(let{key:c,value:l}of MB(e,t,t,n,s,i))a.set(c,gg.parseRow(l,r));return a}o(Lee,"searchAllToMap");function Dee(e,t,r=!1,n=void 0,s=void 0){if(es.validateEnv(e),t===void 0)throw new Error(er.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=MB(e,void 0,t,r,n,s),c=a.transaction,l=vB(c.database,c,void 0,t);for(let{key:u,value:d}of a){let f=l(u,d);i[f]===void 0&&(i[f]=[]),i[f].push(d)}return i}o(Dee,"iterateDBI");function Mee(e,t){if(es.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);return Fa.statDBI(e,t).entryCount}o(Mee,"countAll");function vee(e,t,r,n,s=!1,i=void 0,a=void 0){return ka(e,r,n),ll(e,t,r,(c,l,u,d)=>(n=es.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:a}).map(f=>({key:n,value:f}))))}o(vee,"equals");function Uee(e,t,r){return ka(e,t,r),Fa.openDBI(e,t).getValuesCount(r)}o(Uee,"count");function xee(e,t,r,n,s=!1,i=void 0,a=void 0){return ka(e,r,n),ll(e,null,r,(c,l)=>{n=es.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(a)?a++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:a}).map(m=>{let{key:p}=m;if(p!==f){if(p.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:a}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}o(xee,"startsWith");function Bee(e,t,r,n,s=!1,i=void 0,a=void 0){return UB(e,t,r,n,s,i,a,!0)}o(Bee,"endsWith");function UB(e,t,r,n,s=!1,i=void 0,a=void 0,c=!1){return ka(e,r,n),ll(e,null,r,(l,u,d,f)=>{let m=vB(d,l,f,r);return a=Number.isInteger(a)?a:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(p=>{let h=p.toString();return h.endsWith(DB)?u.getValues(p,{transaction:l}).map(E=>{let g=m(p,E);if(c?g.endsWith(n):g.includes(n))return{key:g,value:E}}).filter(E=>E):(c?h.endsWith(n):h.includes(n))?u[_g.DBI_DEFINITION_NAME].is_hash_attribute?{key:p,value:p}:u.getValues(p,{transaction:l}).map(E=>({key:p,value:E})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(UB,"contains");function Fee(e,t,r,n,s=!1,i=void 0,a=void 0){ka(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Jm(e,t,r,n,l,s,i,a,!0,!1)}o(Fee,"greaterThan");function kee(e,t,r,n,s=!1,i=void 0,a=void 0){ka(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Jm(e,t,r,n,l,s,i,a,!1,!1)}o(kee,"greaterThanEqual");function Hee(e,t,r,n,s=!1,i=void 0,a=void 0){ka(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Jm(e,t,r,l,n,s,i,a,!1,!0)}o(Hee,"lessThan");function qee(e,t,r,n,s=!1,i=void 0,a=void 0){ka(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Jm(e,t,r,l,n,s,i,a,!1,!1)}o(qee,"lessThanEqual");function Gee(e,t,r,n,s,i=!1,a=void 0,c=void 0){if(es.validateEnv(e),r===void 0)throw new Error(er.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(er.START_VALUE_REQUIRED);if(s===void 0)throw new Error(er.END_VALUE_REQUIRED);if(n=es.convertKeyValueToWrite(n),s=es.convertKeyValueToWrite(s),n>s)throw new Error(er.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Jm(e,t,r,n,s,i,a,c)}o(Gee,"between");function $ee(e,t,r,n){es.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);if(Sg(r),r=Xm(s,r),n===void 0)throw new Error(er.ID_REQUIRED);let a=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(a=gg.parseRow(c,r)),a}o($ee,"searchByHash");function Vee(e,t,r){es.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(er.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}o(Vee,"checkHashExists");function Kee(e,t,r,n,s=[]){return BB(e,t,r,n,s),xB(e,t,r,n,s).map(i=>i[1])}o(Kee,"batchSearchByHash");function Yee(e,t,r,n,s=[]){BB(e,t,r,n,s);let i=new Map;for(let[a,c]of xB(e,t,r,n,s))i.set(a,c);return i}o(Yee,"batchSearchByHashToMap");function xB(e,t,r,n,s=[]){return ll(e,t,t,(i,a,c)=>{r=Xm(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,gg.parseRow(d,r)];s.push(u)}).filter(u=>u)})}o(xB,"batchHashSearch");function BB(e,t,r,n,s){if(es.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);if(Sg(r),n==null)throw new Error(er.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(er.IDS_MUST_BE_ITERABLE)}o(BB,"initializeBatchSearchByHash");function Sg(e){if(!Array.isArray(e))throw e===void 0?new Error(er.FETCH_ATTRIBUTES_REQUIRED):new Error(er.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(Sg,"validateFetchAttributes");function ka(e,t,r){if(es.validateEnv(e),t===void 0)throw new Error(er.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(er.SEARCH_VALUE_REQUIRED);if(r?.length>Oee)throw new Error(er.SEARCH_VALUE_TOO_LARGE)}o(ka,"validateComparisonFunctions");function Xm(e,t){return t.length===1&&Nee.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Fa.listDBIs(e)),t}o(Xm,"setGetWholeRowAttributes");FB.exports={searchAll:Pee,searchAllToMap:Lee,count:Uee,countAll:Mee,equals:vee,startsWith:xee,endsWith:Bee,contains:UB,searchByHash:$ee,setGetWholeRowAttributes:Xm,batchSearchByHash:Kee,batchSearchByHashToMap:Yee,checkHashExists:Vee,iterateDBI:Dee,greaterThan:Fee,greaterThanEqual:kee,lessThan:Hee,lessThanEqual:qee,between:Gee}});var Ku=v((LLe,$B)=>{var kB=require("lodash"),HB=ot(),Ye=require("joi"),Wee=ce(),{hdbSchemaTable:Zm,checkValidTable:qB,hdbTable:GB,hdbDatabase:Tg}=ki(),{handleHDBError:zee,hdbErrors:jee}=Ee(),{getDatabases:Qee}=(Ne(),D(ft)),{HTTP_STATUS_CODES:Jee}=jee,Xee=Ye.object({database:Tg,schema:Tg,table:GB,attribute:Zm,value:Ye.any().required(),get_attributes:Ye.array().min(1).items(Ye.alternatives(Zm,Ye.object())).optional(),desc:Ye.bool(),limit:Ye.number().integer().min(1),offset:Ye.number().integer().min(0)}),Zee=Ye.object({database:Tg,schema:Tg,table:GB,operator:Ye.string().valid("and","or").default("and").lowercase(),offset:Ye.number().integer().min(0),limit:Ye.number().integer().min(1),get_attributes:Ye.array().min(1).items(Ye.alternatives(Zm,Ye.object())).optional(),sort:Ye.object({attribute:Ye.alternatives(Zm,Ye.array().min(1)),descending:Ye.bool().optional()}).optional(),conditions:Ye.array().min(1).items(Ye.alternatives(Ye.object({operator:Ye.string().valid("and","or").default("and").lowercase(),conditions:Ye.array()}),Ye.object({attribute:Ye.alternatives(Zm,Ye.array().min(1)),comparator:Ye.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),value:Ye.when("comparator",{switch:[{is:"equals",then:Ye.any()},{is:"between",then:Ye.array().items(Ye.alternatives([Ye.string(),Ye.number()])).length(2)}],otherwise:Ye.alternatives(Ye.string(),Ye.number())}).required()}))).required()});$B.exports=function(e,t){let r=null;switch(t){case"value":r=HB.validateBySchema(e,Xee);break;case"hashes":let i=function(a){s?s+=". "+a:s=a};var n=i;o(i,"addError");let s;i(qB("database",e.schema)),i(qB("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(a=>typeof a=="string"||typeof a=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=HB.validateBySchema(e,Zee);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Wee.checkGlobalSchemaTable(e.schema,e.table);if(s)return zee(new Error,s,Jee.NOT_FOUND);let a=Qee()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.attribute);let l=o(d=>{for(let f of d.conditions)f.conditions?l(f):c.push(f.attribute)},"addConditions");t==="conditions"&&l(e);let u=kB.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!kB.some(a,f=>f===d||f.attribute===d||f.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var II=v((MLe,VB)=>{"use strict";var ete=pt(),tte=Ku(),{getSchemaPath:rte}=St();VB.exports=nte;function nte(e){let t=tte(e,"hashes");if(t)throw t;let r=rte(e.schema,e.table);return ete.openEnvironment(r,e.table)}o(nte,"initialize")});var wI=v((ULe,KB)=>{"use strict";var ste=Vu(),ite=II();KB.exports=ote;async function ote(e){let t=await ite(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return ste.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(ote,"lmdbGetDataByHash")});var Yu=v((BLe,YB)=>{"use strict";var NI=class{static{o(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};YB.exports=NI});var zB=v((HLe,WB)=>{"use strict";var kLe=Yu(),ate=Vu(),cte=II();WB.exports=lte;async function lte(e){let t=await cte(e),r=global.hdb_schema[e.schema][e.table];return ate.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(lte,"lmdbSearchByHash")});var ai=v((GLe,jB)=>{"use strict";var CI=class{static{o(this,"SearchObject")}constructor(t,r,n,s,i,a,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.attribute=n,this.value=s,this.hash_attribute=i,this.get_attributes=a,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};jB.exports=CI});var yg=v((VLe,tF)=>{"use strict";var ln=Vu(),ute=pt(),dte=ce(),We=Gt(),ul=(k(),D(Y)),fte=qi(),QB=Kr().LMDB_ERRORS_ENUM,{getSchemaPath:mte}=St(),Bo=ul.SEARCH_WILDCARDS;async function pte(e,t,r){let n;e.schema===ul.SYSTEM_SCHEMA_NAME?n=fte[e.table]:n=global.hdb_schema[e.schema][e.table];let s=eF(e,n.hash_attribute,r,t);return XB(e,s,n.hash_attribute,r)}o(pte,"prepSearch");async function XB(e,t,r,n){let s=mte(e.schema,e.table),i=await ute.openEnvironment(s,e.table),a=ZB(i,e,t,r),c=a.transaction||i;if([We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,We.SEARCH_TYPES.SEARCH_ALL,We.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(hte(e,r)===!1){let d=e.attribute;if(d===r)return n?JB(a,()=>!0):a.map(m=>({[r]:m.key}));let f=o(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?JB(a,f):a.map(f)}let u=e.attribute===r?a.map(d=>d.key):a.map(d=>d.value);return n===!0?ln.batchSearchByHashToMap(c,r,e.get_attributes,u):ln.batchSearchByHash(c,r,e.get_attributes,u)}o(XB,"executeSearch");function ZB(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:a,limit:c,offset:l}=t;switch(a=typeof a=="boolean"?a:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case We.SEARCH_TYPES.EQUALS:s=ln.equals(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.CONTAINS:s=ln.contains(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.ENDS_WITH:case We.SEARCH_TYPES._ENDS_WITH:s=ln.endsWith(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.STARTS_WITH:case We.SEARCH_TYPES._STARTS_WITH:s=ln.startsWith(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return ln.batchSearchByHash(e,t.attribute,t.get_attributes,[t.value]);case We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return ln.batchSearchByHashToMap(e,t.attribute,t.get_attributes,[t.value]);case We.SEARCH_TYPES.SEARCH_ALL:return ln.searchAll(e,n,t.get_attributes,a,c,l);case We.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return ln.searchAllToMap(e,n,t.get_attributes,a,c,l);case We.SEARCH_TYPES.BETWEEN:s=ln.between(e,i,t.attribute,t.value,t.end_value,a,c,l);break;case We.SEARCH_TYPES.GREATER_THAN:case We.SEARCH_TYPES._GREATER_THAN:s=ln.greaterThan(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.GREATER_THAN_EQUAL:case We.SEARCH_TYPES._GREATER_THAN_EQUAL:s=ln.greaterThanEqual(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.LESS_THAN:case We.SEARCH_TYPES._LESS_THAN:s=ln.lessThan(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.LESS_THAN_EQUAL:case We.SEARCH_TYPES._LESS_THAN_EQUAL:s=ln.lessThanEqual(e,i,t.attribute,t.value,a,c,l);break;default:return Object.create(null)}return s}o(ZB,"searchByType");function JB(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}o(JB,"createMapFromIterable");function hte(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}o(hte,"checkToFetchMore");function eF(e,t,r,n){if(dte.isEmpty(n)){let s=e.value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),a=s.charAt(s.length-1),c=!1;if(e.attribute===t&&(c=!0),Bo.indexOf(s)>-1)return r===!0?We.SEARCH_TYPES.SEARCH_ALL_TO_MAP:We.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Bo[0])<0&&s.indexOf(Bo[1])<0)return c===!0?r===!0?We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:We.SEARCH_TYPES.EQUALS;if(Bo.indexOf(i)>=0&&Bo.indexOf(a)>=0)return e.value=e.value.slice(1,-1),We.SEARCH_TYPES.CONTAINS;if(Bo.indexOf(i)>=0)return e.value=e.value.substr(1),We.SEARCH_TYPES.ENDS_WITH;if(Bo.indexOf(a)>=0)return e.value=e.value.slice(0,-1),We.SEARCH_TYPES.STARTS_WITH;if(s.includes(Bo[0])||s.includes(Bo[1]))return We.SEARCH_TYPES.EQUALS;throw new Error(QB.UNKNOWN_SEARCH_TYPE)}else switch(n){case ul.VALUE_SEARCH_COMPARATORS.BETWEEN:return We.SEARCH_TYPES.BETWEEN;case ul.VALUE_SEARCH_COMPARATORS.GREATER:return We.SEARCH_TYPES.GREATER_THAN;case ul.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return We.SEARCH_TYPES.GREATER_THAN_EQUAL;case ul.VALUE_SEARCH_COMPARATORS.LESS:return We.SEARCH_TYPES.LESS_THAN;case ul.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return We.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(QB.UNKNOWN_SEARCH_TYPE)}}o(eF,"createSearchTypeFromSearchObject");tF.exports={executeSearch:XB,createSearchTypeFromSearchObject:eF,prepSearch:pte,searchByType:ZB}});var nF=v((WLe,rF)=>{"use strict";var YLe=ai(),Ete=Ku(),_te=ce(),gte=(k(),D(Y)),Ste=yg();rF.exports=Tte;function Tte(e,t){if(!_te.isEmpty(t)&>e.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Ete(e,"value");if(n)throw n;return Ste.prepSearch(e,t,!0)}o(Tte,"lmdbGetDataByValue")});var ep=v((QLe,sF)=>{"use strict";var jLe=ai(),yte=Ku(),Rte=ce(),bte=(k(),D(Y)),Ate=yg();sF.exports=Ite;async function Ite(e,t){if(!Rte.isEmpty(t)&&bte.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=yte(e,"value");if(n)throw n;return Ate.prepSearch(e,t,!1)}o(Ite,"lmdbSearchByValue")});var oF=v((ZLe,iF)=>{"use strict";var XLe=Gt(),OI=class{static{o(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,a=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=a,this.conditions=s,this.operator=c}},PI=class{static{o(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},LI=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};iF.exports={SearchByConditionsObject:OI,SearchCondition:PI,SortAttribute:LI}});var dF=v((sDe,uF)=>{"use strict";var{SearchByConditionsObject:tDe,SearchCondition:rDe}=oF(),wte=ai(),Nte=Ku(),DI=Vu(),Rg=Gt(),{Resource:nDe}=(va(),D(i0)),lF=yg(),Cte=AI(),Ote=require("lodash"),{getSchemaPath:Pte}=St(),aF=pt(),{handleHDBError:Lte,hdbErrors:Dte}=Ee(),{HTTP_STATUS_CODES:Mte}=Dte,vte=1e8;uF.exports=Ute;async function Ute(e){let t=Nte(e,"conditions");if(t)throw Lte(t,t.message,Mte.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=Pte(e.schema,e.table),n=await aF.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)aF.openDBI(n,u.attribute);let i=Ote.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===Rg.SEARCH_TYPES.EQUALS?u.estimated_count=DI.count(n,u.attribute,u.value):d===Rg.SEARCH_TYPES.CONTAINS||d===Rg.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=vte}return u.estimated_count}),a=n.useReadTransaction();a.database=n;let c=await cF(a,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(lF.filterByType),f=d.length,m=DI.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(p=>u.get(p,{transaction:a,lazy:!0})),f>0&&(l=l.filter(p=>{for(let h=0;h<f;h++)if(!d[h](p))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(p=>Cte.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await cF(a,e,m,s.hash_attribute);c=c.concat(p)}let u=new Set,d=e.offset||0;c=c.filter(f=>u.has(f)?!1:(u.add(f),!0)).slice(d,e.limit&&e.limit+d),l=DI.batchSearchByHash(a,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{a.done()},l}o(Ute,"lmdbSearchByConditions");async function cF(e,t,r,n){let s=new wte(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.comparator;return s.attribute=r.attribute,i===Rg.SEARCH_TYPES.BETWEEN?(s.value=r.value[0],s.end_value=r.value[1]):s.value=r.value,lF.searchByType(e,s,i,n).map(a=>a.value)}o(cF,"executeConditionSearch")});var Wu=v((oDe,fF)=>{"use strict";var xte=(k(),D(Y)).OPERATIONS_ENUM,MI=class{static{o(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=xte.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};fF.exports=MI});var vI=v((cDe,TF)=>{"use strict";var EF=ai(),_F=Wu(),gF=ep(),SF=Qm(),Un=(k(),D(Y)),mF=ce(),pF=pt(),{getTransactionAuditStorePath:Bte,getSchemaPath:Fte}=St(),hF=z();TF.exports=kte;async function kte(e){try{if(mF.isEmpty(global.hdb_schema[e.schema])||mF.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Hte(e),await qte(e);let t=Fte(e.schema,e.table);try{await pF.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")hF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Bte(e.schema,e.table);await pF.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")hF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(kte,"lmdbDropTable");async function Hte(e){let t=new EF(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await gF(t)),n=[];for(let i=0;i<r.length;i++){let a=r[i];n.push(a.id)}if(n.length===0)return;let s=new _F(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await SF(s)}o(Hte,"deleteAttributesFromSystem");async function qte(e){let t=new EF(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await gF(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(n=a)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new _F(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await SF(s)}catch(i){throw i}}o(qte,"dropTableFromSystem")});var RF=v((uDe,yF)=>{"use strict";var Gte=require("fs-extra"),$te=ai(),Vte=Yu(),Kte=Wu(),Yte=vI(),Wte=Qm(),zte=wI(),jte=ep(),Fo=(k(),D(Y)),{getSchemaPath:Qte}=St(),{handleHDBError:Jte,hdbErrors:Xte}=Ee(),{HDB_ERROR_MSGS:Zte,HTTP_STATUS_CODES:ere}=Xte;yF.exports=tre;async function tre(e){let t;try{t=await rre(e.schema);let r=new $te(Fo.SYSTEM_SCHEMA_NAME,Fo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Fo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Fo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await jte(r));for(let a=0;a<n.length;a++){let c={schema:t,table:n[a].name};try{await Yte(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new Kte(Fo.SYSTEM_SCHEMA_NAME,Fo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Wte(s);let i=Qte(t);await Gte.remove(i)}catch(r){throw r}}o(tre,"lmdbDropSchema");async function rre(e){let t=new Vte(Fo.SYSTEM_SCHEMA_NAME,Fo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Fo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await zte(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw Jte(new Error,Zte.SCHEMA_NOT_FOUND(e),ere.NOT_FOUND,void 0,void 0,!0);return n}o(rre,"validateDropSchema")});var zu=v((fDe,bF)=>{"use strict";var UI=class{static{o(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};bF.exports=UI});var BI=v((hDe,AF)=>{"use strict";var nre=require("fs-extra"),bg=pt(),{getTransactionAuditStorePath:sre}=St(),xI=Gt(),pDe=zu();AF.exports=ire;async function ire(e){let t;try{let r=sre(e.schema,e.table);await nre.mkdirp(r),t=await bg.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{bg.createDBI(t,xI.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),bg.createDBI(t,xI.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),bg.createDBI(t,xI.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}o(ire,"createTransactionsAuditEnvironment")});var NF=v((gDe,wF)=>{"use strict";var FI=(k(),D(Y)),IF=pt(),ore=ol(),{getSystemSchemaPath:are,getSchemaPath:cre}=St(),_De=qi(),lre=pg(),kI=mg(),ure=z(),dre=BI();wF.exports=fre;async function fre(e,t){let r=cre(t.schema,t.table),n=new kI(t.schema,t.table,FI.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new kI(t.schema,t.table,FI.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new kI(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await IF.createEnvironment(r,t.table),e!==void 0){let a=await IF.openEnvironment(are(),FI.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await ore.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbTableAttributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await HI(n),await HI(s),await HI(i)}await dre(t)}catch(a){throw a}}o(fre,"lmdbCreateTable");async function HI(e){try{await lre(e)}catch(t){ure.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(HI,"createAttribute")});var OF=v((TDe,CF)=>{"use strict";var mre=Wm(),pre=dm(),hre=hg(),tp=(k(),D(Y)),Ere=ol().updateRecords,_re=pt(),{getSchemaPath:gre}=St(),Sre=zm(),Tre=z();CF.exports=yre;async function yre(e){try{let{schemaTable:t,attributes:r}=mre(e);pre(e,r,t.hash_attribute),e.schema!==tp.SYSTEM_SCHEMA_NAME&&(r.includes(tp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(tp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(tp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(tp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await hre(e.hdb_auth_header,t,r),s=gre(e.schema,e.table),i=await _re.openEnvironment(s,e.table),a=await Ere(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Sre(e,a)}catch(c){Tre.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(yre,"lmdbUpdateRecords")});var LF=v((RDe,PF)=>{"use strict";var Rre=(k(),D(Y)).OPERATIONS_ENUM,qI=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Rre.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};PF.exports=qI});var MF=v((IDe,DF)=>{"use strict";var ADe=LF(),bre=Wm(),Are=dm(),Ire=hg(),rp=(k(),D(Y)),wre=ol().upsertRecords,Nre=pt(),{getSchemaPath:Cre}=St(),Ore=zm(),Pre=z(),{handleHDBError:Lre,hdbErrors:Dre}=Ee();DF.exports=Mre;async function Mre(e){let t;try{t=bre(e)}catch(l){throw Lre(l,l.message,Dre.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;Are(e,n,r.hash_attribute),e.schema!==rp.SYSTEM_SCHEMA_NAME&&(n.includes(rp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(rp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(rp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(rp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Ire(e.hdb_auth_header,r,n),i=Cre(e.schema,e.table),a=await Nre.openEnvironment(i,e.table),c=await wre(a,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await Ore(e,c)}catch(l){Pre.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schemaTable:r,new_attributes:s,txn_time:c.txn_time}}o(Mre,"lmdbUpsertRecords")});var UF=v((NDe,vF)=>{"use strict";var GI=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};vF.exports=GI});var BF=v((ODe,xF)=>{"use strict";var $I=class{static{o(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};xF.exports=$I});var HF=v((DDe,kF)=>{"use strict";var VI=pt(),{getTransactionAuditStorePath:vre}=St(),LDe=UF(),np=Gt(),Ure=ce(),FF=BF(),xre=require("util").promisify,Bre=xre(setTimeout),Fre=1e4,kre=100;kF.exports=Hre;async function Hre(e){let t=vre(e.schema,e.table),r=await VI.openEnvironment(t,e.table,!0),n=VI.listDBIs(r);VI.initializeDBIs(r,np.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new FF;do s=await qre(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 Bre(kre);while(s.transactions_deleted>0);return i}o(Hre,"deleteAuditLogsBefore");async function qre(e,t){let r=new FF;try{let n=e.dbis[np.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:a}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=a[np.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Ure.isEmpty(c)||(s=e.dbis[np.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<a.hash_values.length;l++)s=e.dbis[np.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Fre)break}return await s,r}catch(n){throw n}}o(qre,"deleteTransactions")});var GF=v((vDe,qF)=>{"use strict";var KI=class{static{o(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};qF.exports=KI});var VF=v((BDe,$F)=>{"use strict";var Gre=ai(),$re=Wu(),xDe=GF(),Gi=(k(),D(Y)),Vre=ce(),YI=pt(),Kre=qi(),Yre=ep(),Wre=Qm(),{getSchemaPath:zre}=St();$F.exports=jre;async function jre(e,t=!0){let r;e.schema===Gi.SYSTEM_SCHEMA_NAME?r=Kre[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await Jre(e),s=zre(e.schema,e.table),i=await YI.openEnvironment(s,e.table);return t===!0&&await Qre(e,i,r.hash_attribute),YI.dropDBI(i,e.attribute),n}o(jre,"lmdbDropAttribute");async function Qre(e,t,r){let n=YI.openDBI(t,r),s,i=e.attribute;for(let{key:a,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(a,u,l)}await s}o(Qre,"removeAttributeFromAllObjects");async function Jre(e){let t=new Gre(Gi.SYSTEM_SCHEMA_NAME,Gi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await Yre(t)).filter(a=>a[Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Vre.isEmptyOrZeroLength(n))throw new Error(`Attribute '${drop_attribute_obj.attribute}' was not found in '${drop_attribute_obj.schema}.${drop_attribute_obj.table}'`);let s=n.map(a=>a[Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new $re(Gi.SYSTEM_SCHEMA_NAME,Gi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Wre(i)}o(Jre,"dropAttributeFromSystem")});var QF=v((HDe,jF)=>{"use strict";var WI=pt(),ju=Gt(),kDe=Cn(),zI=(k(),D(Y)),KF=ce(),{getTransactionAuditStorePath:Xre}=St(),Zre=Vu(),Ag=qu(),ene=z();jF.exports=tne;async function tne(e){let t=Xre(e.schema,e.table),r=await WI.openEnvironment(t,e.table,!0),n=WI.listDBIs(r);WI.initializeDBIs(r,ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case zI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return YF(r,e.search_values);case zI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,nne(r,e.search_values,s);case zI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return rne(r,e.search_values);default:return YF(r)}}o(tne,"readAuditLog");function YF(e,t=[0,Date.now()]){KF.isEmpty(t[0])&&(t[0]=0),KF.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ju.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 Ag,s))}o(YF,"searchTransactionsByTimestamp");function rne(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let a of e.dbis[ju.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(a);r.set(s,zF(e,i))}return Object.fromEntries(r)}o(rne,"searchTransactionsByUsername");function nne(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=Zre.equals(e,ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ju.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=zF(e,s),a=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);WF(l,"records",r,d,a),WF(l,"original_records",r,d,a)}return Object.fromEntries(a)}o(nne,"searchTransactionsByHashValues");function WF(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let c=e[t][a],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let f=new Ag(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new Ag(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}o(WF,"loopRecords");function zF(e,t){let r=[];try{let n=e.dbis[ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let a=Object.assign(new Ag,i);r.push(a)}}catch(i){ene.warn(i)}return r}catch(n){throw n}}o(zF,"batchSearchTransactions")});var XF=v((VDe,JF)=>{"use strict";var{getSchemaPath:GDe}=St(),$De=pt(),{database:sne}=(Ne(),D(ft));JF.exports={writeTransaction:ine};async function ine(e,t,r){return sne({database:e,table:t}).transaction(r)}o(ine,"writeTransaction")});var rk=v((YDe,tk)=>{"use strict";var{getSchemaPath:ZF}=St(),ek=pt();tk.exports={flush:one,resetReadTxn:ane};async function one(e,t){return(await ek.openEnvironment(ZF(e,t),t.toString())).flushed}o(one,"flush");async function ane(e,t){try{(await ek.openEnvironment(ZF(e,t),t.toString())).resetReadTxn()}catch{}}o(ane,"resetReadTxn")});var ok=v((zDe,ik)=>{"use strict";var{Readable:cne}=require("stream"),{getDatabases:lne}=(Ne(),D(ft)),{readSync:une,openSync:dne,createReadStream:nk}=require("fs"),{open:fne}=require("lmdb"),{OpenDBIObject:sk}=Gm(),mne=$m(),{AUDIT_STORE_OPTIONS:pne}=(Ro(),D(dx)),{INTERNAL_DBIS_NAME:hne,AUDIT_STORE_NAME:Ene}=Gt();ik.exports=gne;var jI=32768,_ne=100;async function gne(e){let t=e.database||e.schema||"data",r=lne()[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=fne({noSync:!0,maxDbs:mne.MAX_DBS}),m,p=f.openDB(hne,new sk(!1)),h=d.useReadTransaction(),E=0,g=o(async function(S,R){R.encoding="binary",R.encoder=void 0;let L=f.openDB(S,R),O=d.openDB(S,R);for(let{key:x,version:j,value:H}of O.getRange({start:null,transaction:h,versions:O.useVersions}))m=L.put(x,H,j),E++%_ne===0&&(await new Promise(F=>setTimeout(F,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:R}of d.getRange({transaction:h,start:!1}))if(s.some(L=>S.startsWith?.(L+"/"))){p.put(S,R);let[,L]=S.split("/"),O=!L,x=new sk(!O,O);await g(S,x)}e.include_audit&&await g(Ene,{...pne}),await m;let b=nk(f.path);return b.headers=l(),b.on("close",()=>{h.done(),f.close()}),b}let a=r[Object.keys(r)[0]].primaryStore,c=dne(a.path);return a.transaction(()=>{let u=Buffer.alloc(jI);une(c,u,0,jI),a.resetReadTxn();let d=a.useReadTransaction();d.renew();let f=nk(null,{fd:c,start:jI}),m=new cne.from((async function*(){yield u;for await(let p of f)d.openTimer&&(d.openTimer=0),yield p;d.done()})());return m.headers=l(),m});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}o(gne,"getBackup")});var lk=v((QDe,ck)=>{"use strict";var Sne=z(),{handleHDBError:Tne}=Ee(),yne=k0(),Rne=pg(),bne=SI(),Ane=RB(),Ine=Qm(),wne=wI(),Nne=zB(),Cne=nF(),One=ep(),Pne=dF(),Lne=RF(),Dne=NF(),Mne=OF(),vne=MF(),Une=HF(),xne=vI(),Bne=VF(),Fne=QF(),kne=XF(),ak=rk(),Hne=ok(),QI=class extends yne{static{o(this,"LMDBBridge")}async searchByConditions(t){return Pne(t)}async getDataByHash(t){return await wne(t)}async searchByHash(t){return await Nne(t)}async getDataByValue(t,r){return await Cne(t,r)}async searchByValue(t){return await One(t)}async createSchema(t){return await Ane(t)}async dropSchema(t){return await Lne(t)}async createTable(t,r){return await Dne(t,r)}async dropTable(t){return await xne(t)}async createAttribute(t){return await Rne(t)}async createRecords(t){return await bne(t)}async updateRecords(t){return await Mne(t)}async upsertRecords(t){try{return await vne(t)}catch(r){throw Tne(r,null,null,Sne.ERR,r)}}async deleteRecords(t){return await Ine(t)}async dropAttribute(t){return await Bne(t)}async deleteAuditLogsBefore(t){return await Une(t)}async readAuditLog(t){return await Fne(t)}writeTransaction(t,r,n){return kne.writeTransaction(t,r,n)}flush(t,r){return ak.flush(t,r)}resetReadTxn(t,r){return ak.resetReadTxn(t,r)}getBackup(t){return Hne(t)}};ck.exports=QI});function xn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function ip(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=o(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new ts.ClientError(`${u} must be a string, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"ID":d=o(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(p=>typeof p=="string")||m==null&&l.nullable!==!1))throw new ts.ClientError(`${u} must be a string, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Float":case"Number":d=o(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="number"||m==null&&l.nullable!==!1))throw new ts.ClientError(`${u} must be a number, attempt to assign ${p}`);xn(this)[u]=m},"set");break;case"Int":d=o(function(m){let p=m?.__op__?m.value:m;if(!(p>>0===p||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs((p>>0)-p)<=1)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ts.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Long":d=o(function(m){let p=m?.__op__?m.value:m;if(!(Math.round(p)===m&&Math.abs(p)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs(p)<=9007199254740992)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ts.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"BigInt":d=o(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="bigint"||m==null&&l.nullable!==!1))if(typeof p=="string"||typeof p=="number")p=BigInt(p),m?.__op__?m.value=p:m=p;else throw new ts.ClientError(`${u} must be a number, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Boolean":d=o(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new ts.ClientError(`${u} must be a boolean, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Date":d=o(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new ts.ClientError(`${u} must be a Date, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Bytes":d=o(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new ts.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Blob":d=o(function(m){if(!(m instanceof bs||m==null&&l.nullable!==!1))throw new ts.ClientError(`${u} must be a Blob, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Any":case void 0:d=o(function(m){xn(this)[u]=m},"set");break;default:d=o(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new ts.ClientError(`${u} must be an object, attempt to assign ${m}`);xn(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let h=m[u];if(h?.__op__){let E=this.getRecord()?.[u];return h.update(E)}return h}let p=this.getRecord()?.[u];if(p&&typeof p=="object"){let h=JI(p,l);if(h)return m||this._setChanges(m=Object.create(null)),m[u]=h}return p},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}a("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),a("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new ts.ClientError("Can not add a property to a sealed table schema");xn(this)[l]=u}),a("deleteProperty",function(l){xn(this)[l]=void 0}),a("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let p=u[f];m=m.update(p)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||a("get",n.getProperty),n.delete||a("delete",n.deleteProperty),n.then||a("then",null);function a(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}o(a,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?fk:dk);break}c=l}while(c&&c!==dk&&c!==fk)}function mk(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(uk[t])return uk[t];let n=r.getChanges?.();if(n&&t in n)return n[t];let s=r.getRecord?.()?.[t];if(s&&typeof s=="object"){let i=JI(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function qne(e,t,r,n){if(typeof t=="string"){let s=n.getChanges?.();s||(s={},n._setChanges(s)),s[t]=r}else Object.defineProperty(n,t,{value:r,configurable:!0,writable:!0});return!0}function JI(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends fl{static{o(this,"TrackedObject")}},ip(r,t)),new r(e)):new fl(e);case Array:let n=new wg(e.length,e);for(let s=0,i=e.length;s<i;s++){let a=e[s];a&&typeof a=="object"&&(a=JI(a,t?.elements)),n[s]=a}return n;default:return e}}function Ng(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let a=r[s];i=i.update(a)}else i=Ng(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 ml(e,t=e.getChanges?.()){let r;if(!e)return t;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let a=ml(i);a!==i&&r===e&&(r=e.slice(0)),i=a}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e.getRecord?e.getRecord():e});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=kb[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=ml(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)Gne.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function Ig(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[dl]||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(Ig(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(Ig(s))return!0}else return!0}else return!0}}return!1}var ts,uk,dk,fk,fl,Gne,dl,wg,sp,XI=oe(()=>{ts=w(Ee());S_();As();o(xn,"getChanges");o(ip,"assignTrackedAccessors");uk=Object.prototype,dk=new Proxy({},{get:mk}),fk=new Proxy({},{get:mk,set:qne});o(mk,"getProxiedProperty");o(qne,"setProxiedProperty");o(JI,"trackObject");fl=class{static{o(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};ip(fl,{},!0);o(Ng,"collapseData");Gne=Object.prototype.hasOwnProperty;o(ml,"updateAndFreeze");o(Ig,"hasChanges");dl=Symbol.for("has-array-changes"),wg=class extends Array{static{o(this,"TrackedArray")}#e;[dl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[dl]=!0,super.splice(...t)}push(...t){return this[dl]=!0,super.push(...t)}pop(){return this[dl]=!0,super.pop()}unshift(...t){return this[dl]=!0,super.unshift(...t)}shift(){return this[dl]=!0,super.shift()}};wg.prototype.constructor=Array;sp=class{static{o(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var yk={};be(yk,{ResourceBridge:()=>tw});function rw({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function pk(e,t){let r=$i(e),n=rw(e,r);if(!r)throw new ci.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},a;Tt(i,()=>new Promise(u=>a=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&Ng(d)}catch(f){d={message:(0,Tk.errorToString)(f)}}return t?{value:{key:u,value:d}}:{value:d}}else return a(),{done:!0}},return(u){return a(),{value:u,done:!0}},throw(u){return a(),{done:!0}}}}}}function $i(e){let t=e.database||e.schema||Vne,r=at()[t];if(!r)throw(0,ci.handleHDBError)(new Error,$ne.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function hk(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*Ek(e,t,r,n){let s,i=0;for await(let a of e.getHistory(t,r)){let c=a.operation??a.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=a;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:a.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var _k,Cg,ci,gk,ZI,ew,Sk,Tk,$ne,Vne,Kne,Yne,tw,Rk=oe(()=>{_k=w(lk()),Cg=w(Ku()),ci=w(Ee());Ne();gk=w(Wm());k();ZI=w(xo()),ew=w(Zn()),Sk=w(ce());Na();XI();Tk=w(z()),{HDB_ERROR_MSGS:$ne}=ci.hdbErrors,Vne="data",Kne=1e4,Yne=10,tw=class extends _k.default{static{o(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=$i(t);if(!r)throw new ci.ClientError(`Table ${t.table} not found`);t.conditions=t.conditions.map(n);function n(i){if("conditions"in i&&i.conditions)return i.conditions=i.conditions.map(n),i;{let a=i;return{attribute:a.attribute??a.search_attribute,comparator:a.comparator??a.search_type,value:a.value!==void 0?a.value:a.search_value}}}o(n,"mapCondition");let s=(0,Cg.default)(t,"conditions");if(s)throw(0,ci.handleHDBError)(s,s.message,400,void 0,void 0,!0);return r.search({conditions:t.conditions,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:rw(t,r),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let a of n)a.is_primary_key?(a.isPrimaryKey=!0,delete a.is_primary_key):a.name===i&&i&&(a.isPrimaryKey=!0);else{if(!i)throw new ci.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Xe({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await $i(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=$i(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=o((a,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(a,l,()=>r.primaryStore.put(a,c,l)).then(u=>{if(!u){let{value:d,version:f}=r.primaryStore.getEntry(a);return i(a,d,f)}})),"deleteRecord");for(let{key:a,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(a,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){return $i(t).dropTable()}createSchema(t){return Qu({database:t.schema,table:null}),ZI.signalSchemaChange(new ew.SchemaEventMsg(process.pid,V.CREATE_SCHEMA,t.schema))}async dropSchema(t){await nw(t.schema),ZI.signalSchemaChange(new ew.SchemaEventMsg(process.pid,V.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,this.upsertRecords(t)}async upsertRecords(t){let{schemaTable:r,attributes:n}=(0,gk.default)(t),s,i=at()[t.schema][t.table],a={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(a.replicateTo=t.replicateTo),t.replicatedConfirmation&&(a.replicatedConfirmation=t.replicatedConfirmation),Tt(a,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(m=>m.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let f=d[i.primaryKey],m=f!=null&&await i.get(f,a);if(t.requires_existing&&!m||t.requires_no_existing&&m){u.push(d[i.primaryKey]);continue}m&&(m=Ng(m));for(let p in d)if(Object.prototype.hasOwnProperty.call(d,p)){let h=d[p];if(typeof h=="function")try{let E=h([[m]]);Array.isArray(E)&&(h=E[0].func_val,d[p]=h)}catch(E){throw E.message+="Trying to set key "+p+" on object"+JSON.stringify(d),E}}if(m)for(let p in m)Object.prototype.hasOwnProperty.call(d,p)||(d[p]=m[p]);await(f==null?i.create(d,a):i.put(d,a)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=at()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),Tt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),a=[],c=[];for(let l of i)await r.delete(l,n)?a.push(l):c.push(l);return hk(a,c,s.timestamp)})}async deleteRecordsBefore(t){let r=at()[t.schema][t.table];if(!r.createdTimeProperty)throw new ci.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:r_.LESS}]}),s=!1,i=[],a=[],c=0,l=[],u=o(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),a.push(...d.skipped_hashes),await(0,Sk.asyncSetTimeout)(Yne),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%Kne===0&&await u();return l.length>0&&await u(),s?hk(i,a,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Cg.default)(t,"hashes");if(r)throw r;return pk(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of pk(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&bb[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,Cg.default)(t,"value");if(n)throw n;let s=$i(t);if(!s)throw new ci.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===r_.BETWEEN&&(i=[i,t.end_value]);let a=i==="*"?[]:[{attribute:t.attribute,value:i,comparator:r}];return s.search({conditions:a,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:rw(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=$i(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){$i({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return $i(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=$i(t),n={};switch(t.search_type){case n_.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let a=i.operation??i.type;return a==="put"&&(a="upsert"),{operation:a,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case n_.USERNAME:{let s=t.search_values;for await(let i of Ek(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return Ek(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};o(rw,"getSelect");o(pk,"getRecords");o($i,"getTable");o(hk,"createDeleteResponse");o(Ek,"groupRecordsInHistory")});var rs=v((aMe,bk)=>{"use strict";var{ResourceBridge:Wne}=(Rk(),D(yk)),zne=le();zne.initSync();var Og;function jne(){return Og||(Og=new Wne,Og)}o(jne,"getBridge");bk.exports=jne()});var li=v((lMe,wk)=>{var Qne=qi(),{promisify:Jne}=require("util"),{getDatabases:Ik}=(Ne(),D(ft));wk.exports={setSchemaDataToGlobal:Ak,getTableSchema:Xne,getSystemSchema:Zne,setSchemaDataToGlobalAsync:Jne(Ak)};function Ak(e){global.hdb_schema=Ik(),e&&e()}o(Ak,"setSchemaDataToGlobal");function Xne(e,t,r){let n=Ik()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}o(Xne,"getTableSchema");function Zne(){return Qne}o(Zne,"getSystemSchema")});var un=v((dMe,Pk)=>{"use strict";var Lg=tI(),Qr=ce(),ese=require("util"),Dg=rs(),tse=li(),Nk=z(),{handleHDBError:pl,hdbErrors:rse}=Ee(),{HTTP_STATUS_CODES:hl}=rse,nse=ese.promisify(tse.getTableSchema),sse="updated",Ck="inserted",Ok="upserted";Pk.exports={insert:ose,update:ase,upsert:cse,validation:ise,flush:lse};async function ise(e){if(Qr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Qr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Qr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await nse(e.schema,e.table),r=Lg(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(c=>{if(a&&Qr.isEmptyOrZeroLength(c[n]))throw Nk.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Qr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw Nk.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Qr.isEmpty(c[n])&&c[n]!==""&&s.has(Qr.autoCast(c[n]))&&(c.skip=!0),s.add(Qr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}o(ise,"validation");async function ose(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Lg(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Dg.createRecords(e);return Pg(Ck,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}o(ose,"insertData");async function ase(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Lg(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Dg.updateRecords(e);return Qr.isEmpty(n.existing_rows)?Pg(sse,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Pg(n.update_action,[],e,n.hashes,void 0,n.txn_time)}o(ase,"updateData");async function cse(e){if(e.operation!=="upsert")throw pl(new Error,"invalid operation, must be upsert",hl.INTERNAL_SERVER_ERROR);let t=Lg(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Dg.upsertRecords(e);return Pg(Ok,n.written_hashes,e,[],n.new_attributes,n.txn_time)}o(cse,"upsertData");function Pg(e,t,r,n,s,i){let a={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===Ck?(a.inserted_hashes=t,a.skipped_hashes=n,a):e===Ok?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=n,a)}o(Pg,"returnObject");function lse(e){return Qr.transformReq(e),Dg.flush(e.schema,e.table)}o(lse,"flush")});var iw=v((mMe,Mk)=>{var use=ot(),sw=require("joi"),{hdbTable:dse,hdbDatabase:Lk}=ki(),Dk={schema:Lk,database:Lk,table:dse},fse={date:sw.date().iso().required()},mse={timestamp:sw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Mk.exports=function(e,t){let r=t==="timestamp"?{...Dk,...mse}:{...Dk,...fse},n=sw.object(r);return use.validateBySchema(e,n)}});var xk=v((pMe,Uk)=>{var pse=ot(),ow=require("joi"),{hdbTable:hse,hdbDatabase:vk}=ki(),Ese=ow.object({schema:vk,database:vk,table:hse,hash_values:ow.array().required(),ids:ow.array()});Uk.exports=function(e){return pse.validateBySchema(e,Ese)}});var uw=v((hMe,Bk)=>{"use strict";var aw=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},cw=class{static{o(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,a){this.schema=t,this.table=r,this.attribute=n,this.hash_attribute=s,this.get_attributes=i,this.value=a}},lw=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Bk.exports={InsertObject:aw,NoSQLSeachObject:cw,DeleteResponseObject:lw}});var Ga=v((_Me,Gk)=>{"use strict";var kk=iw(),_se=xk(),El=ce(),Fk=require("moment"),Hk=z(),{promisify:gse,callbackify:Sse}=require("util"),_l=(k(),D(Y)),Tse=li(),dw=gse(Tse.getTableSchema),fw=rs(),{DeleteResponseObject:yse}=uw(),{handleHDBError:Ha,hdbErrors:Rse}=Ee(),{HDB_ERROR_MSGS:Mg,HTTP_STATUS_CODES:qa}=Rse,bse="records successfully deleted",Ase=Sse(qk);Gk.exports={delete:Ase,deleteRecord:qk,deleteFilesBefore:Ise,deleteAuditLogsBefore:wse};async function Ise(e){let t=kk(e,"date");if(t)throw Ha(t,t.message,qa.BAD_REQUEST,void 0,void 0,!0);if(El.transformReq(e),!Fk(e.date,Fk.ISO_8601).isValid())throw Ha(new Error,Mg.INVALID_DATE,qa.BAD_REQUEST,_l.LOG_LEVELS.ERROR,Mg.INVALID_DATE,!0);let n=El.checkSchemaTableExist(e.schema,e.table);if(n)throw Ha(new Error,n,qa.NOT_FOUND,_l.LOG_LEVELS.ERROR,n,!0);let s=await fw.deleteRecordsBefore(e);if(await dw(e.schema,e.table),Hk.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}o(Ise,"deleteFilesBefore");async function wse(e){let t=kk(e,"timestamp");if(t)throw Ha(t,t.message,qa.BAD_REQUEST,void 0,void 0,!0);if(El.transformReq(e),isNaN(e.timestamp))throw Ha(new Error,Mg.INVALID_VALUE("Timestamp"),qa.BAD_REQUEST,_l.LOG_LEVELS.ERROR,Mg.INVALID_VALUE("Timestamp"),!0);let r=El.checkSchemaTableExist(e.schema,e.table);if(r)throw Ha(new Error,r,qa.NOT_FOUND,_l.LOG_LEVELS.ERROR,r,!0);let n=await fw.deleteAuditLogsBefore(e);return await dw(e.schema,e.table),Hk.info(`Finished deleting audit logs before ${e.timestamp}`),n}o(wse,"deleteAuditLogsBefore");async function qk(e){e.ids&&(e.hash_values=e.ids);let t=_se(e);if(t)throw Ha(t,t.message,qa.BAD_REQUEST,void 0,void 0,!0);El.transformReq(e);let r=El.checkSchemaTableExist(e.schema,e.table);if(r)throw Ha(new Error,r,qa.NOT_FOUND,_l.LOG_LEVELS.ERROR,r,!0);try{await dw(e.schema,e.table);let n=await fw.deleteRecords(e);return El.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${bse}`),n}catch(n){if(n.message===_l.SEARCH_NOT_FOUND_MESSAGE){let s=new yse;return s.message=_l.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}o(qk,"deleteRecord")});var _w={};be(_w,{HASH_FUNCTION:()=>kr,hash:()=>hw,validate:()=>Ew});function mw(e=ap){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(op.randomBytes(e)).map(r=>t[r%t.length]).join("")}function hw(e,t=kr[Vk?.toUpperCase()]??kr.SHA256){return pw[t](e)}function Ew(e,t,r=kr[Vk?.toUpperCase()]??kr.SHA256){return e?Nse[r](e,t):!1}var op,Ju,$k,Vk,ap,Kk,kr,pw,Nse,gw=oe(()=>{op=w(require("node:crypto")),Ju=w(require("argon2")),$k=w(le());k();Vk=(0,$k.get)(U.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),ap=16,Kk=9,kr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};o(mw,"generateSalt");pw={[kr.MD5]:(e,t=void 0)=>{t=t??mw(Kk);let r=op.createHash(kr.MD5).update(e+t).digest("hex");return t+r},[kr.SHA256]:(e,t=void 0)=>{t=t??mw(ap);let r=op.createHash(kr.SHA256).update(e+t).digest("hex");return t+r},[kr.ARGON2ID]:async e=>{let t=mw(ap),r=await Ju.hash(e,{type:Ju.argon2id,salt:Buffer.from(t)});return t+r}},Nse={[kr.MD5]:(e,t)=>{let r=e.slice(0,Kk);return e===pw[kr.MD5](t,r)},[kr.SHA256]:(e,t)=>{let r=e.slice(0,ap);return e===pw[kr.SHA256](t,r)},[kr.ARGON2ID]:async(e,t)=>await Ju.verify(e.slice(ap),t)};o(hw,"hash");o(Ew,"validate")});var Wk=v((yMe,Yk)=>{var Sw=ot(),dn={username:{presence:!0,exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function Cse(e){return dn.password.presence=!0,dn.username.presence=!0,dn.role.presence=!0,dn.active.presence=!0,Sw.validateObject(e,dn)}o(Cse,"addUserValidation");function Ose(e){return dn.password.presence=!1,dn.username.presence=!0,dn.role.presence=!1,dn.active.presence=!1,Sw.validateObject(e,dn)}o(Ose,"alterUserValidation");function Pse(e){return dn.password.presence=!1,dn.username.presence=!0,dn.role.presence=!1,dn.active.presence=!1,Sw.validateObject(e,dn)}o(Pse,"dropUserValidation");Yk.exports={addUserValidation:Cse,alterUserValidation:Ose,dropUserValidation:Pse}});var oH=v((AMe,iH)=>{"use strict";var Tw=require("recursive-iterator"),Lse=require("alasql"),yw=require("clone"),zk=ce(),{handleHDBError:jk,hdbErrors:Dse}=Ee(),{HDB_ERROR_MSGS:Qk,HTTP_STATUS_CODES:Jk}=Dse,{getDatabases:Mse}=(Ne(),D(ft)),vse=["DISTINCT_ARRAY"],Xk=Symbol("validateTables"),Rw=Symbol("validateTable"),bMe=Symbol("getAllColumns"),Zk=Symbol("validateAllColumns"),vg=Symbol("findColumn"),eH=Symbol("validateOrderBy"),cp=Symbol("validateSegment"),bw=Symbol("validateColumn"),tH=Symbol("setColumnsForTable"),rH=Symbol("checkColumnsForAsterisk"),nH=Symbol("validateGroupBy"),sH=Symbol("hasColumns"),Aw=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Xk](),this[rH](),this[Zk]()}[Xk](){if(this[sH]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Rw](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Rw](t.table)})}}[sH](){let t=!1,r=new Tw(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Rw](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Mse();if(!r[t.databaseid])throw jk(new Error,Qk.SCHEMA_NOT_FOUND(t.databaseid),Jk.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw jk(new Error,Qk.TABLE_NOT_FOUND(t.databaseid,t.tableid),Jk.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=yw(s);i.table=yw(t),this.attributes.push(i)})}[vg](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)}[rH](){let t=new Tw(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[tH](r.tableid)}[tH](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new Lse.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Zk](){this[cp](this.statement.columns,!1),this[cp](this.statement.joins,!1),this[cp](this.statement.where,!1),this[nH](this.statement.group,!1),this[cp](this.statement.order,!0)}[cp](t,r){if(!t)return;let n=new Tw(t),s=[];for(let{node:i,path:a}of n)!zk.isEmpty(i)&&!zk.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[eH](i):s.push(this[bw](i)));return s}[nH](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&vse.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=yw(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[vg](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,a)=>{if(i.toString()===n.toString()){s=i,r.splice(a,1);return}});else{let i=this[vg](n);if(!i||i.length===0)throw`unknown column '${group_column.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${group_column.toString()}' in group by`;r.forEach((a,c)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){s=a,r.splice(c,1);return}})}if(!s)throw`group by column '${group_column.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[eH](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[bw](t)}[bw](t){let r=this[vg](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]}};iH.exports=Aw});var uH=v((wMe,lH)=>{"use strict";var aH=require("lodash"),lp=require("mathjs"),Use=require("jsonata"),cH=ce();lH.exports={distinct_array:o(e=>Array.isArray(e)&&e.length>1?aH.uniqWith(e,aH.isEqual):e,"distinct_array"),searchJSON:xse,mad:up.bind(null,lp.mad),mean:up.bind(null,lp.mean),mode:up.bind(null,lp.mode),prod:up.bind(null,lp.prod),median:up.bind(null,lp.median)};function up(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}o(up,"aggregateFunction");function xse(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(cH.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),cH.isEmpty(this.__ala__.res[r])){let n=Use(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}o(xse,"searchJSON")});var fH=v((CMe,dH)=>{"use strict";var cr=require("moment"),Iw="YYYY-MM-DDTHH:mm:ss.SSSZZ";cr.suppressDeprecationWarnings=!0;dH.exports={current_date:o(()=>cr().utc().format("YYYY-MM-DD"),"current_date"),current_time:o(()=>cr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:o((e,t)=>{switch(t.toLowerCase()){case"year":return cr(e).utc().format("YYYY");case"month":return cr(e).utc().format("MM");case"day":return cr(e).utc().format("DD");case"hour":return cr(e).utc().format("HH");case"minute":return cr(e).utc().format("mm");case"second":return cr(e).utc().format("ss");case"millisecond":return cr(e).utc().format("SSS");default:break}},"extract"),date:o(e=>cr(e).utc().format(Iw),"date"),date_format:o((e,t)=>cr(e).utc().format(t),"date_format"),date_add:o((e,t,r)=>cr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:o((e,t,r)=>cr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:o((e,t,r)=>{let n=cr(e).utc(),s=cr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:o(()=>cr().utc().valueOf(),"now"),get_server_time:o(()=>cr().format(Iw),"get_server_time"),offset_utc:o((e,t)=>cr(e).utc().utcOffset(t).format(Iw),"offset_utc")}});var EH=v((PMe,hH)=>{"use strict";var Bse=require("@turf/area"),Fse=require("@turf/length"),kse=require("@turf/circle"),Hse=require("@turf/difference"),qse=require("@turf/distance"),Gse=require("@turf/boolean-contains"),$se=require("@turf/boolean-equal"),Vse=require("@turf/boolean-disjoint"),Kse=require("@turf/helpers"),mH=(k(),D(Y)),ze=ce(),ko=z();hH.exports={geoArea:Yse,geoLength:Wse,geoCircle:zse,geoDifference:jse,geoDistance:pH,geoNear:Qse,geoContains:Jse,geoEqual:Xse,geoCrosses:Zse,geoConvert:eie};function Yse(e){if(ze.isEmpty(e))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return Bse.default(e)}catch(t){return ko.trace(t,e),NaN}}o(Yse,"geoArea");function Wse(e,t){if(ze.isEmpty(e))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return Fse.default(e,{units:t||"kilometers"})}catch(r){return ko.trace(r,e),NaN}}o(Wse,"geoLength");function zse(e,t,r){if(ze.isEmpty(e))return NaN;if(ze.isEmpty(t))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return kse.default(e,t,{units:r||"kilometers"})}catch(n){return ko.trace(n,e,t),NaN}}o(zse,"geoCircle");function jse(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 Hse(e,t)}catch(r){return ko.trace(r,e,t),NaN}}o(jse,"geoDifference");function pH(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 qse.default(e,t,{units:r||"kilometers"})}catch(n){return ko.trace(n,e,t),NaN}}o(pH,"geoDistance");function Qse(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 pH(e,t,n)<=r}catch(s){return ko.trace(s,e,t),!1}}o(Qse,"geoNear");function Jse(e,t){if(ze.isEmpty(e)||ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return Gse.default(e,t)}catch(r){return ko.trace(r,e,t),!1}}o(Jse,"geoContains");function Xse(e,t){if(ze.isEmpty(e)||ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return $se.default(e,t)}catch(r){return ko.trace(r,e,t),!1}}o(Xse,"geoEqual");function Zse(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!Vse.default(e,t)}catch(r){return ko.trace(r,e,t),!1}}o(Zse,"geoCrosses");function eie(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(mH.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(mH.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=ze.autoCastJSON(e)),Kse[t](e,r)}o(eie,"geoConvert")});var Ug=v((DMe,_H)=>{var gl=uH(),ns=fH(),Vi=EH();_H.exports=e=>{e.aggr.mad=e.aggr.MAD=gl.mad,e.aggr.mean=e.aggr.MEAN=gl.mean,e.aggr.mode=e.aggr.MODE=gl.mode,e.aggr.prod=e.aggr.PROD=gl.prod,e.aggr.median=e.aggr.MEDIAN=gl.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=gl.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=gl.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ns.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ns.current_time,e.fn.extract=e.fn.EXTRACT=ns.extract,e.fn.date=e.fn.DATE=ns.date,e.fn.date_format=e.fn.DATE_FORMAT=ns.date_format,e.fn.date_add=e.fn.DATE_ADD=ns.date_add,e.fn.date_sub=e.fn.DATE_SUB=ns.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ns.date_diff,e.fn.now=e.fn.NOW=ns.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ns.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ns.get_server_time,e.fn.getdate=e.fn.GETDATE=ns.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ns.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Vi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Vi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Vi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Vi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Vi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Vi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Vi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Vi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Vi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Vi.geoNear}});var yH=v((MMe,TH)=>{"use strict";var dp=require("lodash"),Bn=require("alasql");Bn.options.cache=!1;var tie=Ug(),gH=require("clone"),xg=require("recursive-iterator"),Ge=z(),nt=ce(),Xu=rs(),rie=(k(),D(Y)),{hdbErrors:nie}=Ee(),{getDatabases:SH}=(Ne(),D(ft)),sie="IS NULL",ui="There was a problem performing this search. Please check the logs and try again.";tie(Bn);var ww=class{static{o(this,"SQLSearch")}constructor(t,r){if(nt.isEmpty(t))throw Ge.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(),nt.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!nt.isEmptyOrZeroLength(n))return Ge.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ge.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ge.error(n),new Error(ui)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ge.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ge.error(n),new Error(ui)}if(Object.keys(this.data).length===0)return Ge.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ge.error("Error thrown from processJoins in SQLSearch class method search."),Ge.error(n),new Error(ui)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ge.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ge.error(n),new Error(ui)}try{return t=await this._finalSQL(),t}catch(n){throw Ge.error("Error thrown from finalSQL in SQLSearch class method search."),Ge.error(n),new Error(ui)}}_getColumns(){let t=new xg(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(gH(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=dp.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=SH()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(nt.isEmpty(this.statement.where)){Ge.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new xg(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!nt.isEmpty(r)&&r.right)if(nt.isNotEmptyAndHasValue(r.right.value)){let n=nt.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Bn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=nt.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Bn.yy.LogicValue({value:i}):n instanceof Bn.yy.StringValue&&nt.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Bn.yy.NumValue({value:i}))});if(t){Ge.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new xg(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!nt.isEmpty(rie.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(nt.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(nt.isEmptyOrZeroLength(r.left.columnid)||nt.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,value:r.right.value})}continue}if(nt.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let c=!1;switch(r.op){case"=":!nt.isEmpty(r.right.value)||!nt.isEmpty(r.left.value)?n.add(nt.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[a].ignore=c,c?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...n])}}}_setAliasesForColumns(){if(nt.isEmptyOrZeroLength(this.all_table_attributes)&&nt.isEmptyOrZeroLength(this.statement.from)&&nt.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&&dp.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(nt.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);nt.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(nt.isEmptyOrZeroLength(this.all_table_attributes)&&!nt.isEmptyOrZeroLength(this.columns.columns))return t;if(nt.isEmptyOrZeroLength(this.all_table_attributes)&&nt.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Bn.promise(r)}catch(r){throw Ge.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ge.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(gH(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(nt.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(sie)>-1&&this.tables.forEach(s=>{let i={columnid:SH()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=dp.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[a].__hashName;return s[a]||(s[a]=[],s[a].push(null),this._addColumnToMergedAttributes(a,c)),i.attribute!==c&&(s[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,a=this.data[i].__hashName,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===a&&(l=!0),!nt.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!nt.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await Xu.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 Ge.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ge.error(d),new Error(ui)}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 Xu.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 Ge.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ge.error(d),new Error(ui)}else if(!nt.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!nt.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 Xu.getDataByValue(c,p.operation);if(l)for(let[E]of h)this.data[i].__mergedData[E]||(this.data[i].__mergedData[E]=[...n[i]],this._setMergedHashAttribute(i,E));else for(let[E,g]of h)this.data[i].__mergedData[E]?this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]):(this.data[i].__mergedData[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,E))}}catch(d){throw Ge.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ge.error(d),new Error(ui)}else try{c.attribute=s.attribute,c.value="*";let d=await Xu.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 Ge.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ge.error(d),new Error(ui)}}}_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 Bn.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,a=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===a});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Bn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Bn.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 Bn.yy.FuncValue:new Bn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__mergedData)),this.statement.joins&&this.statement.joins.forEach(p=>{p.joinmode&&p.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(p.table);let h=p.joinmode+" JOIN ? AS "+(p.as?p.as:p.table.tableid);p.on&&(h+=" ON "+p.on.toString()),i.push(h),t.push(Object.values(this.data[`${p.table.databaseid_orig}_${p.table.as?p.table.as_orig:p.table.tableid_orig}`].__mergedData))});let a=[],c={};s.forEach(p=>{let h=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__hashName,E=p.as?p.as_orig:p.tableid_orig;a.push({key:`'${E}.${h}'`,schema:p.databaseid_orig,table:p.as?p.as_orig:p.tableid_orig,keys:new Set}),r.push(`${p.as?p.as:p.tableid}.\`${h}\` AS "${E}.${h}"`),c[p.as?p.as_orig:p.tableid_orig]=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__mergedAttributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(p=>{p.is_func?r.push(p.initial_select_column.toString()):p.initial_select_column.tableid?r.push(`${p.initial_select_column.tableid}.${p.initial_select_column.columnid} AS ${p.expression.columnid}`):r.push(`${p.initial_select_column.columnid} AS ${p.expression.columnid}`)}));let d="",f="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",f=this.statement.offset?"OFFSET "+this.statement.offset:"");let m=[];try{let p=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,h=this._convertColumnsToIndexes(p,s);m=await Bn.promise(h,t),t=null}catch(p){throw Ge.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ge.error(p),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let p=0,h=m.length;p<h;p++){let E=m[p];a.forEach(g=>{E[g.key]!==null&&E[g.key]!==void 0&&g.keys.add(E[g.key])})}a.forEach(p=>{let h=Object.keys(this.data[`${p.schema}_${p.table}`].__mergedData),E=dp.difference(h,[...p.keys].map(g=>g.toString()));for(let g=0,b=E.length;g<b;g++){let S=E[g];delete this.data[`${p.schema}_${p.table}`].__mergedData[S]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new xg(this.columns);for(let{node:i}of s)if(i&&i.columnid){let a=this._findColumn(i);if(a){let c=a.table.as?a.table.as:a.table.tableid;(!t[c]||t[c].indexOf(a.attribute)<0)&&n.push(a)}}n=dp.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 Ge.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ge.error(i),new Error(ui)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__mergedData,a=[];for(let d in i)a.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:a,get_attributes:s.columns},l=await Xu.getDataByHash(c),u=s.columns.length;for(let d=0,f=a.length;d<f;d++){let m=a[d],p=l.get(m);for(let h=0;h<u;h++){let E=s.columns[h],g=p[E]===void 0?null:p[E];this.data[n].__mergedData[m].push(g)}}}}catch(r){throw Ge.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ge.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__mergedData)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__mergedData)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(a=>{let c=a.aggregatorid?a.expression:a,l=a.aggregatorid?a.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Ge.trace(`Final SQL: ${s}`),n=await Bn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ge.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ge.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ge.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 Ge.error(nie.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ge.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=s[i],u=new RegExp(`${l}.\`${a}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=new RegExp(`\`${a}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.attribute=n.attribute,i.value="*";let a=await Xu.getDataByValue(i);for(let[c,l]of a)this.data[s].__mergedData[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__mergedData[c]={...r[s]}),this.data[s].__mergedData[c][t[n.attribute]]=l[n.attribute]??null}catch(a){throw Ge.error("There was an error when processing this SQL operation. Check your logs"),Ge.error(a),new Error(ui)}}return Object.values(Object.values(this.data)[0].__mergedData)}};TH.exports=ww});var fn=v((UMe,RH)=>{"use strict";var iie=oH();RH.exports={searchByConditions:aie,searchByHash:cie,searchByValue:lie,search:uie};var Nw=rs(),{transformReq:Cw}=ce(),oie=yH();async function aie(e){return Cw(e),Nw.searchByConditions(e)}o(aie,"searchByConditions");async function cie(e){Cw(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Nw.searchByHash(e))r&&t.push(r);return t}o(cie,"searchByHash");async function lie(e){Cw(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Nw.searchByValue(e))t.push(r);return t}o(lie,"searchByValue");function uie(e,t){try{let r=new iie(e);r.validate(),new oie(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}o(uie,"search")});var Ki=v((BMe,wH)=>{"use strict";var fp=require("crypto"),die=le(),{CONFIG_PARAMS:fie}=(k(),D(Y)),AH="aes-256-cbc",mie=32,pie=16,Ow=64,IH=32,hie=Ow+IH,bH=new Map;wH.exports={encrypt:Eie,decrypt:_ie,createNatsTableStreamName:gie};function Eie(e){let t=fp.randomBytes(mie),r=fp.randomBytes(pie),n=fp.createCipheriv(AH,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),a=r.toString("hex"),c=s.toString("hex");return i+a+c}o(Eie,"encrypt");function _ie(e){let t=e.substr(0,Ow),r=e.substr(Ow,IH),n=e.substr(hie,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),a=fp.createDecipheriv(AH,Buffer.from(t,"hex"),s),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(_ie,"decrypt");function gie(e,t){let r=die.get(fie.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=bH.get(r);return n||(n=fp.createHash("md5").update(r).digest("hex"),bH.set(r,n)),n}o(gie,"createNatsTableStreamName")});var mt=v((HMe,CH)=>{"use strict";var{platform:kMe}=require("os"),Sie="nats-server.zip",Pw="nats-server",Tie=process.platform==="win32"?`${Pw}.exe`:Pw,yie=/^[^\s.,*>]+$/,NH="__request__",Rie=o(e=>`${e}.${NH}`,"REQUEST_SUBJECT"),bie={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Aie={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Iie={HUB:"hub.pid",LEAF:"leaf.pid"},wie={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Nie={SUCCESS:"success",ERROR:"error"},Cie={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Oie={TXN:"txn",MSGID:"msgid"},Zu={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Pie={[Zu.ERR]:1,[Zu.WRN]:2,[Zu.INF]:3,[Zu.DBG]:4,[Zu.TRC]:5},Lie={debug:"-D",trace:"-DVV"};CH.exports={NATS_SERVER_ZIP:Sie,NATS_SERVER_NAME:Pw,NATS_BINARY_NAME:Tie,PID_FILES:Iie,NATS_CONFIG_FILES:Aie,SERVER_SUFFIX:wie,NATS_TERM_CONSTRAINTS_RX:yie,REQUEST_SUFFIX:NH,UPDATE_REMOTE_RESPONSE_STATUSES:Nie,CLUSTER_STATUS_STATUSES:Cie,REQUEST_SUBJECT:Rie,SUBJECT_PREFIXES:Oie,MSG_HEADERS:bie,LOG_LEVELS:Zu,LOG_LEVEL_FLAGS:Lie,LOG_LEVEL_HIERARCHY:Pie}});var Lw=v(mn=>{"use strict";var Die={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
|
|
11
|
+
`},"serialize"),compressible:!1,q:.8});an.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()}});xU={type:"application/json",serializeStream:hm,serialize:Em,deserialize:Y8,q:.5};an.set("*/*",xU);an.set("",xU);o(Y8,"tryJSONParse");o(gm,"registerContentHandlers");W8=(0,vU.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:a,type:c}=R_(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&a.serializeStream){if(l.mapError){let d=l.getColumns;l=l.mapError(f=>(f.toJSON=()=>({error:f.name,message:f.message,...f.partialObject}),f)),l.getColumns=d}u=a.serializeStream}else u=a.serialize;return u(l,{headers:{set:o((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});o(R_,"findBestSerializer");OU=Vb.default.get(U.HTTP_COMPRESSIONTHRESHOLD);o(Sm,"serialize");o(Io,"serializeMessage");o(zb,"asyncSerialization");o(jb,"hasAsyncSerialization");o(z8,"streamToBuffer");j8=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];o(Q8,"isBufferEncoding");o(J8,"parseContentType");o(wo,"getDeserializer");o(X8,"deserializerUnknownType");o(Z8,"transformIterable");o(y_,"toCsvStream")});var rA={};be(rA,{Blob:()=>bs,blobsWereEncoded:()=>Wc,databasePaths:()=>Jb,decodeBlobsWithWrites:()=>P_,decodeFromDatabase:()=>Po,decodeWithBlobCallback:()=>wm,deleteBlob:()=>N_,deleteBlobsInObject:()=>Ca,deleteRootBlobPathsForDB:()=>eA,encodeBlobsAsBuffers:()=>uZ,encodeBlobsWithFilePath:()=>O_,findBlobsInObject:()=>bu,getFileId:()=>C_,getFilePathForBlob:()=>YU,getRootBlobPathsForDB:()=>Im,isSaving:()=>sZ,saveBlob:()=>Am,setDeletionDelay:()=>nZ,startPreCommitBlobsForRecord:()=>tA});function VU(){}function N_(e){let t=YU(e);t&&setTimeout(()=>{(0,rt.unlink)(t,r=>{r&&vi.default.debug?.("Error trying to remove blob file",r)})},KU)}function nZ(e){KU=e}function Am(e){let t=cn.get(e);if(!t)t={storageIndex:0,fileId:null,store:On},cn.set(e,t);else{if(t.fileId)return t;t.store=On}return oZ(t),t.source?Qb(e,t.source,t):t.contentBuffer?iZ(e,t):Qb(e,ym.Readable.from(e.stream()),t),t}function Qb(e,t,r){let{filePath:n,fileId:s,store:i,compress:a,flush:c}=r;return r.saving=new Promise((l,u)=>{let d=s+":blob";if(!i.attemptLock(d,0))throw new Error(`Unable to get lock for blob file ${s}`);let f=(0,rt.createWriteStream)(n,{autoClose:!1,flags:"w"});if(t.errored){let g=Buffer.from(t.errored.toString());f.write(Buffer.concat([h(BigInt(g.length)+0xff000000000000n),g])),E(t.errored);return}let m=!1;e.size!==void 0&&(f.write(h(e.size)),m=!0);let p;a?(m||f.write(tZ),p=(0,I_.createDeflate)(),t.pipe(p).pipe(f)):(m||f.write(eZ),t.pipe(f)),t.on("error",E);function h(g){let b=BigInt(g),S=new Uint8Array(Ir),R=new DataView(S.buffer);return b|=BigInt(a?Zb:$U)<<48n,R.setBigInt64(0,b),S}o(h,"createHeader");function E(g){i.unlock(d,0);let b=f.fd;g?(b&&(0,rt.close)(b),u(g)):c?(0,rt.fdatasync)(b,S=>{S&&u(S),l(),(0,rt.close)(b)}):(l(),(0,rt.close)(b))}o(E,"finished"),f.on("error",E).on("finish",()=>{if(m)E();else{let g=p?p.bytesWritten:f.bytesWritten-Ir;e.size=g,(0,rt.write)(f.fd,h(g),0,Ir,0,E)}})}),e}function C_(e){return cn.get(e)?.fileId}function sZ(e){return cn.get(e)?.saving}function YU(e){let t=cn.get(e);return t?.fileId&&bm(t)}function Im(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=Jb.get(e);if(!t){if(!e.databaseName)return vi.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,w_.get)(U.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Oo.join)(n,e.databaseName)):t=[(0,Oo.join)((0,w_.getHdbBasePath)(),"blobs",e.databaseName)],Jb.set(e,t)}return t}async function eA(e){let t=Im(e);t&&await Promise.all(t.map(r=>WU(r)))}async function WU(e){if((0,rt.existsSync)(e)){for(let t of await(0,Is.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await WU((0,Oo.join)(e,t.name));else try{await(0,Is.unlink)((0,Oo.join)(e,t.name))}catch(r){vi.default.warn?.("Error deleting file",r)}try{await(0,Is.rmdir)(e)}catch(t){vi.default.warn?.("Error deleting directory",t)}}}function bm({storageIndex:e,fileId:t,store:r}){let n=Im(r);return(0,Oo.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 iZ(e,t){let r=t.contentBuffer,n=r.length;if(!(n<GU))return e.size=n,Qb(e,ym.Readable.from([r]),t)}function oZ(e){let t=Im(e.store),r=aZ(),n=t?.length>1?cZ(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=bm(e),a=(0,Oo.dirname)(i);(0,rt.existsSync)(a)||(0,Xb.ensureDirSync)(a),e.filePath=i}function aZ(){let e=qU.get(On);if(!e){let t=0,r=Im(On);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let a=0;if((0,rt.existsSync)(n))for(let c of(0,rt.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>a&&(a=l)}s+=a,n=(0,Oo.join)(n,a.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(On.getUserSharedBuffer("blob-file-id",e.buffer)),qU.set(On,e)}return Number(Atomics.add(e,0,1n))}function cZ(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(A_);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,lZ(e)),e.frequencyTable[t%A_]}async function lZ(e){if(!Is.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let a;try{a=await(0,Is.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,Xb.ensureDirSync)(s),a=await(0,Is.statfs)(s)}let c=a.bavail*a.bsize;return Math.pow(c,.8)})),r=new Array(A_),n=t.map(s=>1/s);for(let s=0;s<A_;s++){let i=1/0,a=0;for(let c=0;c<n.length;c++)n[c]<i&&(a=c,i=n[c]);n[a]+=1/t[a],r[s]=a}e.frequencyTable=r}function O_(e,t,r){Ru=t,On=r,Wc=!1;try{return e()}finally{Ru=void 0,On=void 0}}function uZ(e){Yr=[];let t;try{t=e()}catch(n){throw Yr=void 0,n}let r=Yr.length<2?Yr[0]:Promise.all(Yr);return Yr=void 0,r?r.then(()=>e()):t}function P_(e,t,r){try{Yr=[],Co=r,On=t,e()}catch(s){throw Co=void 0,Yr=void 0,s}Co=void 0;let n=Yr.length<2?Yr[0]:Promise.all(Yr);return Yr=void 0,n}function wm(e,t,r){On=r;try{return Co=t,e()}finally{Co=void 0}}function Po(e,t){return On=t,e()}function Ca(e){bu(e,t=>{N_(t)})}function bu(e,t){if(e instanceof bs)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&bu(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&bu(e[r],t)}}function tA(e,t){let r;for(let n in e){let s=e[n];if(s instanceof Rm&&s.saveBeforeCommit){On=t;let i=Am(s).saving??Promise.resolve();r=r?Promise.all(r,i):i}}return r}function fZ(){return class{static{o(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}var Ui,Is,rt,I_,ym,Xb,w_,Oo,vi,GU,Ir,$U,Zb,FU,eZ,tZ,kU,cn,Co,bs,Ru,Yr,On,Wc,Tm,b_,rZ,HU,Rm,KU,Jb,qU,A_,dZ,As=oe(()=>{Ui=require("msgpackr"),Is=require("node:fs/promises"),rt=require("node:fs"),I_=require("node:zlib"),ym=require("node:stream"),Xb=require("fs-extra"),w_=w(le());k();Oo=require("path"),vi=w(zn());No();GU=8192,Ir=8,$U=0,Zb=1,FU=255,eZ=new Uint8Array([0,$U,255,255,255,255,255,255]),tZ=new Uint8Array([0,Zb,255,255,255,255,255,255]),kU=0xffffffffffff,cn=new WeakMap,bs=global.Blob||fZ(),Wc=!1,Tm=new Uint8Array(8),b_=new DataView(Tm.buffer),rZ=6e4;o(VU,"InstanceOfBlobWithNoConstructor");VU.prototype=bs.prototype;HU=!1,Rm=class e extends VU{static{o(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=cn.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):(jb()&&zb(this.bytes().then(a=>t.contentBuffer=a)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=cn.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=bm(t),a,c=o(async()=>{let l,u=Ir;try{if(l=await(0,Is.readFile)(i),l.length>=Ir){l.copy(Tm,0,0,Ir);let f=b_.getBigUint64(0);if(Number(f>>48n)===FU)throw new Error("Error in blob: "+buffer.subarray(Ir));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<kU&&(this.size=u,this.#t))for(let m of this.#t)m(u)}}catch(f){if(f.code!=="ENOENT")throw f;l=Buffer.alloc(0)}function d(f){if(u>f.length){let m=t.store,p=t.fileId+":blob";if(a)throw new Error(`Incomplete blob for ${i}`);return new Promise((h,E)=>{if(m.attemptLock(p,0,()=>(a=!0,h(c()))))return a=!0,m.unlock(p,0),h(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return o(d,"checkCompletion"),l[1]===Zb?new Promise((f,m)=>{(0,I_.deflate)(l.subarray(Ir),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(Ir))},"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=cn.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(E){E.enqueue(r),E.close()}});let i=bm(t),a,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,g=o((b,S)=>{(0,rt.open)(i,"r",(R,L)=>{if(R){if(R.code==="ENOENT"&&f!==!1&&(vi.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),g(b,S)},20).unref();S(R),p.#e?.forEach(O=>O(R))}else a=L,b(L)})},"openFile");return new Promise(g)},pull:o(E=>{let g=0,b=100;return new Promise(o(function S(R,L){function O(j){(0,rt.close)(a),clearTimeout(d),u&&u.close(),L(j),p.#e?.forEach(H=>H(j))}o(O,"onError");let x=Buffer.allocUnsafe(262144);(0,rt.read)(a,x,0,x.length,c,(j,H,F)=>{if(l+=H,j)return O(j);if(c===0){if(H<Ir){b-- >0&&f!==!1?(h(),vi.default.debug?.("File was empty, waiting for data to be written",i,b),setTimeout(()=>S(R,L),20).unref()):(vi.default.debug?.("File was empty, throwing error",i,b),L(new Error(`Blob ${t.fileId} was empty`)));return}F.copy(Tm,0,0,Ir);let Q=b_.getBigUint64(0);if(Number(Q>>48n)===FU)return O(new Error("Error in blob: "+F.subarray(Ir)));if(g=Number(Q&0xffffffffffffn),g<kU&&p.size!==g&&(p.size=g,p.#t))for(let W of p.#t)W(g);F=F.subarray(Ir,H),l-=Ir}else if(H===0){let Q=Buffer.allocUnsafe(8);return(0,rt.read)(a,Q,0,Ir,0,W=>{if(W)return O(W);if(Tm.set(Q),g=Number(b_.getBigUint64(0)&0xffffffffffffn),g>l){h()?u?d=setTimeout(()=>{O(new Error(`File read timed out reading from ${i}`))},rZ).unref():(u=(0,rt.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(R,L))}),S(R,L)):m?O(new Error("Blob is incomplete")):(m=!0,S(R,L));return}(0,rt.close)(a),E.close(),R()})}else F=F.subarray(0,H);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=H,S(R,L);s&&l>=s&&(l>s&&(F=F.subarray(0,s-c)),l=g=s),n&&n>c&&(F=F.subarray(n-c))}c+=H;try{E.enqueue(F)}catch(Q){return vi.default.debug?.("Error enqueuing chunk",Q),R()}l===g&&((0,rt.close)(a),E.close()),R()})},"readMore"))},"pull"),cancel(){(0,rt.close)(a),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,g=t.fileId+":blob";f=!E.attemptLock(g,0,()=>{f=!1}),f||E.unlock(g,0)}return f}}slice(t,r,n){let s=cn.get(this),i=new e(n&&{type:n});if(s?.fileId){let a={...s,start:t,end:r};cn.set(i,a),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let a={...s,contentBuffer:s.contentBuffer.subarray(t,r)};cn.set(i,a),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(){return HU||(HU=!0,vi.default.warn?.("save() method on Blob is deprecated, use the 'saveBeforeCommit' flag on the Blob constructor instead")),this.saveBeforeCommit=!0,Promise.resolve()}},KU=500;o(N_,"deleteBlob");o(nZ,"setDeletionDelay");global.createBlob=function(e,t){let r=new Rm(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(cn.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof ym.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=ym.Readable.from(e);else throw new Error("Invalid source type");return r};o(Am,"saveBlob");o(Qb,"writeBlobWithStream");o(C_,"getFileId");o(sZ,"isSaving");o(YU,"getFilePathForBlob");Jb=new Map;o(Im,"getRootBlobPathsForDB");o(eA,"deleteRootBlobPathsForDB");o(WU,"rimrafSteadily");o(bm,"getFilePath");o(iZ,"writeBlobWithBuffer");o(oZ,"generateFilePath");qU=new Map;o(aZ,"getNextFileId");A_=128;o(cZ,"getNextStorageIndex");o(lZ,"createFrequencyTableForStoragePaths");o(O_,"encodeBlobsWithFilePath");o(uZ,"encodeBlobsAsBuffers");o(P_,"decodeBlobsWithWrites");o(wm,"decodeWithBlobCallback");o(Po,"decodeFromDatabase");o(Ca,"deleteBlobsInObject");o(bu,"findBlobsInObject");o(tA,"startPreCommitBlobsForRecord");dZ=new Ui.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Ui.addExtension)({Class:bs,type:11,unpack:o(function(e){let t=dZ.unpack(e),r=new Rm;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(cn.set(r,{storageIndex:t[1],fileId:t[2],store:On}),Co)return Co(r)??r;if(!On)throw new Error("No store specified, cannot load blob from storage")}else cn.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:o(function(e){let t=cn.get(e);if(Ru!==void 0&&(Wc=!0,t?.recordId!==void 0&&t.recordId!==Ru))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<GU)return r.size=t.contentBuffer.length,(0,Ui.pack)([r,t.contentBuffer])}if(Ru!==void 0){if(t=Am(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Ru,(0,Ui.pack)([r,t.storageIndex,t.fileId])}if(t){if(Co)return Co(e),(0,Ui.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,rt.readFileSync)(bm(t));if(n.length>=Ir&&(n.copy(Tm,0,0,Ir),Number(b_.getBigUint64(0)&0xffffffffffffn)===n.length-Ir))return Buffer.concat([(0,Ui.pack)([r]),n]);if(Yr)Yr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Yr)return Yr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Ui.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});o(fZ,"polyfillBlob")});var XU={};be(XU,{onStorageReclamation:()=>Nm,runReclamationHandlers:()=>oA,setAvailableSpaceRatioGetter:()=>pZ});function Nm(e,t,r){(r||(0,D_.getWorkerIndex)()===(0,D_.getWorkerCount)()-1)&&(L_.has(e)||L_.set(e,[]),L_.get(e).push({priority:0,handler:t}),iA||(iA=setTimeout(oA,jU).unref()))}async function oA(){for(let[e,t]of L_)try{let r=await JU(e),n=mZ/r;for(let s of t){let{priority:i,handler:a}=s;if(s.priority=n,n>1||i>1){let c=a(n>1?n:0);c&&(sA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){sA.default.error?.("Error running storage reclamation handlers",r)}iA=setTimeout(oA,jU).unref()}function pZ(e){JU=e??QU}var nA,D_,sA,M_,zU,L_,mZ,jU,iA,QU,JU,v_=oe(()=>{nA=require("node:fs/promises"),D_=w(Je()),sA=w(zn());k();M_=w(le()),zU=w(ce());M_.default.initSync();L_=new Map,mZ=M_.default.get(U.STORAGE_RECLAMATION_THRESHOLD)??.4,jU=(0,zU.convertToMS)(M_.default.get(U.STORAGE_RECLAMATION_INTERVAL))||36e5;o(Nm,"onStorageReclamation");QU=o(async e=>{if(nA.statfs){let t=await(0,nA.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"),JU=QU;o(oA,"runReclamationHandlers");o(pZ,"setAvailableSpaceRatioGetter")});var dx={};be(dx,{ACTION_32_BIT:()=>k_,ACTION_64_BIT:()=>gZ,AUDIT_STORE_OPTIONS:()=>Pm,Decoder:()=>jc,HAS_BLOBS:()=>Pn,HAS_CURRENT_RESIDENCY_ID:()=>Qc,HAS_EXPIRATION_EXTENDED_TYPE:()=>Mm,HAS_ORIGINATING_OPERATION:()=>Dm,HAS_PREVIOUS_RESIDENCY_ID:()=>Jc,REMOTE_SEQUENCE_UPDATE:()=>H_,createAuditEntry:()=>Xc,getLastRemoved:()=>EZ,openAuditStore:()=>B_,readAuditEntry:()=>Mt,removeAuditEntry:()=>F_,setAuditRetention:()=>_Z,transactionKeyEncoder:()=>ax});function B_(e){let t=e.auditStore=e.openDB(aA.AUDIT_STORE_NAME,{create:!1,...Pm});t||(t=e.auditStore=e.openDB(aA.AUDIT_STORE_NAME,Pm),ex(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,a=lA;Nm(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(a=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,p;try{for(let{key:h,value:E}of t.getRange({start:1,snapshot:!1,end:Date.now()-cA/(1+i*i)})){try{m=F_(t,h,E)}catch(g){Au.warn("Error removing audit entry",g)}if(p=h,await new Promise(setImmediate),++f>=hZ){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,cA/10):(ex(t,p),a>100&&(a=a>>1)),d(void 0),c()}},a).unref()});return u}if(o(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,Om.getWorkerIndex)()===(0,Om.getWorkerCount)()-1&&c(),(0,Om.getWorkerIndex)()===0&&!ZU)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(ZU=!0,Au.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function F_(e,t,r){let n=SZ(r),s;if(n&Pn){s=Mt(r);let i=e.tableStores[s.tableId];if(i){let a=i.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&Po(()=>Ca(s.getValue(i)),i.rootStore)}}if((n&15)===uA){s=s||Mt(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 ex(e,t){dA[0]=t,e.put(Symbol.for("last-removed"),cx)}function EZ(e){let t=e.get(Symbol.for("last-removed"));if(t)return cx.set(t),dA[0]}function _Z(e,t=lA){cA=e,lA=t}function Xc(e,t,r,n,s,i,a,c,l,u,d,f,m){let p=lx[a];if(!p)throw new Error(`Invalid audit entry type ${a}`);let h=1;if(n&&(n>1?Oa.setFloat64(0,n):ws.set(fA),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}b(s),b(t),g(r),Oa.setFloat64(h,e),h+=8,l&Qc&&b(u),l&Jc&&b(d),l&Mm&&(Oa.setFloat64(h,f),h+=8),l&Dm&&b(ux[m]),i?g(i):ws[h++]=0,l?Oa.setUint32(n?8:0,p|l|3221225472):ws[n?8:0]=p;let E=ws.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function g(S){let R=h;h+=1,h=(0,zc.writeKey)(S,ws,h);let L=h-R-1;L>127?L>16383?(Au.error("Key or username was too large for audit entry",S),h=R+1,ws[R]=0):(ws.copyWithin(R+2,R+1,h),Oa.setUint16(R,L|32768),h++):ws[R]=L}function b(S){S<128?ws[h++]=S:S<16384?(Oa.setUint16(h,S|32768),h+=2):S<1056964608?(Oa.setUint32(h,S|3221225472),h+=4):(ws[h]=255,Oa.setUint32(h+1,S),h+=5)}}function SZ(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 jc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function Mt(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new jc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),a=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,p,h,E;if(i&Qc&&(m=n.readInt()),i&Jc&&(p=n.readInt()),i&Mm&&(h=n.readFloat64()),i&Dm){let R=n.readInt();E=ux[R]}l=n.readInt();let g=n.position,b=n.position+=l,S;return{type:lx[i&7],tableId:c,nodeId:a,get recordId(){return(0,zc.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return b>g?(0,zc.readKey)(e,g,b):void 0},get encoded(){return t?e.subarray(t,r):e},get size(){return t!==void 0&&r!==void 0?r-t:e.byteLength},getValue(R,L,O){if(i&U_||i&Cm&&!L)return S||(S=Po(()=>R.decoder.decode(e.subarray(n.position,r)),R.rootStore)),S;if(i&Cm&&O)return Fb(R.getEntry(this.recordId),O,R)},getBinaryValue(){return i&(U_|Cm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return Au.error("Reading audit entry error",n,e),{}}}var zc,x_,aA,Om,ox,Au,ws,Oa,ax,Pm,cA,hZ,dA,cx,lA,ZU,U_,Cm,tx,uA,rx,nx,sx,ix,k_,gZ,H_,Qc,Jc,Dm,Mm,Pn,lx,ux,jc,Ro=oe(()=>{zc=require("ordered-binary"),x_=w(le()),aA=w(Gt());k();Om=w(Je()),ox=w(ce());Zc();Au=w(z());g_();As();v_();(0,x_.initSync)();ws=Buffer.alloc(2816),Oa=new DataView(ws.buffer,ws.byteOffset,2816),ax={writeKey(e,t,r){return e===Lm?(t.set(Lm,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,zc.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,zc.readKey)(e,t,r)}},Pm={encoding:"binary",keyEncoder:ax},cA=(0,ox.convertToMS)((0,x_.get)(U.LOGGING_AUDITRETENTION))||86400*3,hZ=1e3,dA=new Float64Array(1),cx=new Uint8Array(dA.buffer),lA=1e4,ZU=!1;o(B_,"openAuditStore");o(F_,"removeAuditEntry");o(ex,"updateLastRemoved");o(EZ,"getLastRemoved");o(_Z,"setAuditRetention");U_=16,Cm=32,tx=1,uA=2,rx=3,nx=4,sx=5,ix=6,k_=14,gZ=15,H_=11,Qc=512,Jc=1024,Dm=2048,Mm=4096,Pn=8192,lx={put:tx|U_,[tx]:"put",delete:uA,[uA]:"delete",message:rx|U_,[rx]:"message",invalidate:nx|Cm,[nx]:"invalidate",patch:sx|Cm,[sx]:"patch",relocate:ix,[ix]:"relocate"},ux={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(Xc,"createAuditEntry");o(SZ,"readAction");o(Mt,"readAuditEntry");jc=class extends DataView{static{o(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function q_(){return mA||(mA=Xe({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),mA}function yZ(e){return e=e.replace(TZ,t=>{let[r,n,s,i]=t.split(".").map(a=>parseInt(a));return(r<<8|n).toString(16)+":"+(s<<8|i).toString(16)}),e=e.replace("::",":".repeat(10-e.split(":").length)),e.toLowerCase().split(":").map(t=>t.padStart(4,"0")).join(":")}function RZ(e){if(e.length!==4)throw new Error(`nodeHash must be exactly 4 bytes (32 bits); got ${e.length} bytes`);return e[0]<<24|e[1]<<16|e[2]<<8|e[3]}function hA(e){let t=fx.default.createHash("shake128",{outputLength:4}),r;return(0,mx.isIPv6)(e)?r=yZ(e):r=e.toLowerCase(),RZ(Uint8Array.from(t.update(r).digest()))}var fx,mx,pA,mA,TZ,EA=oe(()=>{Ne();fx=w(require("crypto")),mx=require("node:net"),pA=new Map;o(q_,"getAnalyticsHostnameTable");TZ=/(\d{1,3}\.){3}\d{1,3}$/;o(yZ,"normalizeIPv6");o(RZ,"nodeHashToNumber");o(hA,"stableNodeId")});var Lo,_A=oe(()=>{Lo={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 Sx={};be(Sx,{profile:()=>gx,userCodeFolders:()=>gA});async function gx(){let e=(0,$_.pathToFileURL)(hx.PACKAGE_ROOT).toString(),t=new Map,r=100,n=_x/1e6,s=0,i=0;try{let{profile:u}=await Iu.post("Profiler.stop");for(let d of u.nodes)t.set(d.id,d);for(let d of u.nodes)a(d);qe(i*n,"cpu-usage","harper"),qe(s*n,"cpu-usage","user")}catch(u){Ex.error?.("analytics profiler error:",u)}finally{await Iu.post("Profiler.start")}function a(u){if(u.unassignedCount!==void 0)return u.unassignedCount;let d=u.hitCount;if(u.children)for(let f of u.children)d+=a(t.get(f));return l(u)?(s+=d,d>r&&qe(d*n,"cpu-usage",u.callFrame.url),u.unassignedCount=0,0):c(u)?(i+=d,d>r&&qe(d*n,"cpu-usage",u.callFrame.url),u.unassignedCount=0,0):(u.unassignedCount=d,d)}o(a,"getUserHitCount");function c(u){return u.callFrame?.url.startsWith(e)}o(c,"isHarperCode");function l(u){if(gA.some(d=>u.callFrame?.url.startsWith(d)))return!0}o(l,"isUserCode")}var px,G_,hx,$_,Ex,gA,_x,Iu,Tx=oe(()=>{px=require("node:inspector/promises");jn();G_=w(le());k();hx=w(bt()),$_=require("node:url"),Ex=w(z()),gA=[(0,$_.pathToFileURL)((0,G_.getHdbBasePath)()).toString()];process.env.RUN_HDB_APP&&gA.push((0,$_.pathToFileURL)(process.env.RUN_HDB_APP).toString());_x=1e3,Iu=new px.Session;Iu.connect();(async()=>{await Iu.post("Profiler.enable"),await Iu.post("Profiler.setSamplingInterval",{interval:_x}),await Iu.post("Profiler.start");let e=(0,G_.get)(U.ANALYTICS_AGGREGATEPERIOD)*1e3;setInterval(()=>{gx()},e).unref()})();o(gx,"profile")});var Y_={};be(Y_,{addAnalyticsListener:()=>Bm,analyticsDelay:()=>RA,calculateCPUUtilization:()=>Fx,diffResourceUsage:()=>kx,onAnalyticsAggregate:()=>IA,recordAction:()=>qe,recordActionBinary:()=>zr,recordHostname:()=>bA,setAnalyticsEnabled:()=>IZ});function IZ(e){Mx=e,clearTimeout(Um),Um=null}function wZ(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 NZ(e,t,r,n,s,i){let a={};if(typeof t=="number")a.total=t,a.values=new Float32Array(4),a.values.index=1,a.values[0]=t,a.total=t;else if(typeof t=="boolean")a.total=t?1:0,a.count=1;else if(typeof t=="function")a.count=1,a.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);a.description={metric:r,path:n,method:s,type:i},K_.set(e,a)}function qe(e,t,r,n,s){if(!Mx)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let a=K_.get(i);a?wZ(e,a):NZ(i,e,t,r,n,s),Um||CZ()}function zr(e,t,r,n,s){qe(!!e,t,r,n,s)}function Bm(e){Ux.push(e)}function CZ(){SA||=performance.now(),Um=setTimeout(async()=>{Um=null;let e=performance.now()-SA;SA=0;let t=[],r={time:Date.now(),period:e,threadId:el.threadId,metrics:t};for(let[s,i]of K_){if(i.values){let a=i.values.subarray(0,i.values.index);a.sort();let c=a.length,l=0,u=[],d;for(let f of Bx){let m=Math.floor(c*f),p=a[m-1];if(m>l){let h=m-l;if(p===d){let E=u[u.length-1];typeof E=="number"?u[u.length-1]={value:E,count:1+h}:E.count+=h}else u.push(h>1?{value:p,count:h}:p),d=p;l=m}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await Hx()}let n=process.memoryUsage();t.push({metric:"memory",threadId:el.threadId,byThread:!0,...n});for(let s of Ux)s(t);K_=new Map,el.parentPort?el.parentPort.postMessage({type:vx,report:r}):$x({report:r})},RA).unref()}async function bA(){let e=Me.hostname;Wr.trace?.("recordHostname server.hostname:",e);let t=hA(e);Wr.trace?.("recordHostname nodeId:",t);let r=q_();if(!await r.get(t)){let s={id:t,hostname:e};Wr.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function wu(e,t){let r=Me.hostname,n=pA.get(r);n?Wr.trace?.("storeMetric cached nodeId:",n):(n=hA(r),Wr.trace?.("storeMetric new nodeId:",n),pA.set(r,n));let s={id:[(0,yA.getNextMonotonicTime)(),n],...t};Wr.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function Fx(e,t){let r=e.userCPUTime+e.systemCPUTime;return Wr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function kx(e,t){return{userCPUTime:t.userCPUTime-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function OZ(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let a=`${t}.${s}`,c=i.getSize(),l={metric:Lo.TABLE_SIZE,database:t,table:s,size:c};Wr.trace?.(`table ${a} size metric: ${JSON.stringify(l)}`),wu(e,l),n+=c}return n}function yx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let a=Dx.statSync(s.primaryStore.env.path).size,c=OZ(e,r,n),l=a-c,u={metric:Lo.DATABASE_SIZE,database:r,size:a,used:c,free:l,audit:i};wu(e,u),Wr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Wr.warn?.("Error getting DB size metrics",s)}}function Rx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let a={metric:Lo.STORAGE_VOLUME,database:r,...i};wu(e,a),Wr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(a)}`)}catch(s){Wr.warn?.("Error getting DB volume metrics",s)}}async function PZ(e,t=6e4){let r=AA(),n=qx(),s=new Promise(R=>{let L=performance.now();setImmediate(()=>{let O=performance.now();O-L>5e3&&Wr.warn?.("Unusually high event queue latency on the main thread of "+Math.round(O-L)+"ms"),L=performance.now()}),n.primaryStore.prefetch([1],()=>{let O=performance.now();O-L>5e3&&Wr.warn?.("Unusually high task queue latency on the main thread of "+Math.round(O-L)+"ms"),R(O-L)})}),i;for(let R of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(R.value?.time){i=R.value.time;break}if(Date.now()-t<i)return;let a,c=new Map,l=new Map,u=[],d;for(let{key:R,value:L}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!L)continue;if(a){if(R>a+t)break}else a=R;d=R;let{metrics:O,threadId:x}=L;for(let j of O||[]){let{path:H,method:F,type:Q,metric:W,count:fe,total:ue,distribution:ee,threads:Re,...Ie}=j;fe||(fe=1);let $e=W+(H?"-"+H:"");F!==void 0&&($e+="-"+F),Q!==void 0&&($e+="-"+Q);let Fe=c.get($e);if(Fe){if(Fe.threads){let Xt=Fe.threads[x];if(Xt)Fe=Xt;else{Fe.threads[x]={...Ie};continue}}Fe.count||(Fe.count=1);let yr=Fe.count;for(let Xt in Ie){let Ht=Ie[Xt];typeof Ht=="number"&&(Fe[Xt]=(Fe[Xt]*yr+Ht*fe)/(yr+fe))}Fe.count+=fe,ue>=0&&(Fe.total+=ue,Fe.ratio=Fe.total/Fe.count)}else Fe={period:t,...j},delete Fe.distribution,c.set($e,Fe),Fe.byThread&&(Fe.threads=[],Fe.threads[x]={...Ie},u.push(Fe));if(ee){ee=ee.map(Xt=>typeof Xt=="number"?{value:Xt,count:1}:Xt);let yr=l.get($e);yr?yr.push(...ee):l.set($e,ee)}}await Hx()}for(let R of u){let{path:L,method:O,type:x,metric:j,count:H,total:F,distribution:Q,threads:W,...fe}=R;W=W.filter(ue=>ue);for(let ue in fe){if(typeof R[ue]!="number")continue;let ee=0;for(let Re of W){let Ie=Re[ue];typeof Ie=="number"&&(ee+=Ie)}R[ue]=ee}R.count=W.length,delete R.threads,delete R.byThread}for(let[R,L]of l){let O=c.get(R);L.sort((Xt,Ht)=>Xt.value>Ht.value?1:-1);let x=O.count-1,j=[],H=0,F=0,Q;for(let Xt of Bx){let Ht=x*Xt;for(;H<Ht;)Q=L[F++],H+=Q.count,F===1&&H--;let Zt=L[F>1?F-2:0];Q||(Q=L[0]),j.push(Q.value-(Q.value-Zt.value)*(H-Ht)/Q.count)}let[W,fe,ue,ee,Re,Ie,$e,Fe,yr]=j;Object.assign(O,{p1:W,p10:fe,p25:ue,median:ee,p75:Re,p90:Ie,p95:$e,p99:Fe,p999:yr})}let f;for(let[,R]of c)R.time=d,wu(n,R),f=!0;if(f)for(let R of xx)R(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let R={metric:Lo.MAIN_THREAD_UTILIZATION,idle:p-bx,active:h-Ax,taskQueueLatency:await s,time:m,...process.memoryUsage()};wu(n,R)}bx=p,Ax=h;let E=process.resourceUsage();E.time=m,E.userCPUTime=E.userCPUTime/1e3,E.systemCPUTime=E.systemCPUTime/1e3,Wr.trace?.(`process.resourceUsage: ${JSON.stringify(E)}`);let g=kx(V_,E);Wr.trace?.(`diffed resourceUsage: ${JSON.stringify(g)}`),g.time=m,g.period=V_.time?m-V_.time:t,g.cpuUtilization=Fx(g,g.period);let b={metric:Lo.RESOURCE_USAGE,...g};wu(n,b),V_=E;let S=at();yx(n,S),yx(n,{system:S.system}),Rx(n,S),Rx(n,{system:S.system})}async function Ix(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function AA(){return wx||(wx=Xe({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function qx(){return Nx||(Nx=Xe({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function MZ(){Gx=!0;let e=(0,xm.get)(U.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await PZ(RA,e),await Ix(AA(),LZ),await Ix(qx(),DZ)},Math.min(e/2,2147483647)).unref()}function $x(e,t){let r=e.report;r.threadId=t?.threadId||el.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(Cx+=n.mean*n.count);r.totalBytesProcessed=Cx,t&&(r.metrics.push({metric:Lo.UTILIZATION,...t.performance.eventLoopUtilization(Ox.get(t))}),Ox.set(t,t.performance.eventLoopUtilization())),r.id=(0,yA.getNextMonotonicTime)(),AA().primaryStore.put(r.id,r),Gx||MZ(),vZ&&(Vx=xZ(r))}async function xZ(e){if(await Vx,!Pa){let r=(0,vm.dirname)(bZ());try{Pa=await(0,TA.open)((0,vm.join)(r,"analytics.log"),"r+")}catch{Pa=await(0,TA.open)((0,vm.join)(r,"analytics.log"),"w+")}}let t=(await Pa.stat()).size;if(t>UZ){let r=Buffer.alloc(t);await Pa.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Pa.write(r,{position:0}),await Pa.truncate(r.length),t=r.length}await Pa.write(JSON.stringify(e)+`
|
|
12
|
+
`,t)}function IA(e){e&&xx.push(e)}var el,Px,Lx,vm,TA,yA,xm,Dx,bZ,AZ,Wr,K_,Mx,Um,SA,RA,vx,Ux,xx,Bx,bx,Ax,V_,Hx,LZ,DZ,wx,Nx,Gx,Cx,Ox,vZ,Vx,Pa,UZ,jn=oe(()=>{el=require("worker_threads"),Px=w(Je());Ne();Lx=w(z()),vm=require("path"),TA=require("fs/promises"),yA=w(Cn()),xm=w(le());k();xr();Dx=w(require("node:fs"));EA();_A();({getLogFilePath:bZ,forComponent:AZ}=Lx.default);setTimeout(()=>{Promise.resolve().then(()=>Tx())},1e3);Wr=AZ("analytics").conditional;(0,xm.initSync)();K_=new Map,Mx=(0,xm.get)(U.ANALYTICS_AGGREGATEPERIOD)>-1;o(IZ,"setAnalyticsEnabled");o(wZ,"recordExistingAction");o(NZ,"recordNewAction");o(qe,"recordAction");Me.recordAnalytics=qe;o(zr,"recordActionBinary");SA=0,RA=1e3,vx="analytics-report",Ux=[],xx=[];o(Bm,"addAnalyticsListener");Bx=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];o(CZ,"sendAnalytics");o(bA,"recordHostname");o(wu,"storeMetric");o(Fx,"calculateCPUUtilization");o(kx,"diffResourceUsage");o(OZ,"storeTableSizeMetrics");o(yx,"storeDBSizeMetrics");o(Rx,"storeVolumeMetrics");o(PZ,"aggregation");bx=0,Ax=0,V_={userCPUTime:0,systemCPUTime:0},Hx=o(()=>new Promise(setImmediate),"rest");o(Ix,"cleanup");LZ=36e5,DZ=31536e6;o(AA,"getRawAnalyticsTable");o(qx,"getAnalyticsTable");(0,Px.setChildListenerByType)(vx,$x);o(MZ,"startScheduledTasks");Cx=0,Ox=new Map,vZ=!1;o($x,"recordAnalytics");UZ=1e6;o(xZ,"logAnalytics");o(IA,"onAnalyticsAggregate")});var jx={};be(jx,{ENTRY:()=>FZ,HAS_EXPIRATION:()=>j_,HAS_RESIDENCY_ID:()=>LA,HAS_STRUCTURE_UPDATE:()=>Q_,LAST_TIMESTAMP_PLACEHOLDER:()=>Lm,LOCAL_TIMESTAMP:()=>BZ,METADATA:()=>Ou,NEW_TIMESTAMP_PLACEHOLDER:()=>Yx,NO_TIMESTAMP:()=>wA,PENDING_LOCAL_TIME:()=>DA,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>fA,RecordEncoder:()=>PA,TIMESTAMP_ASSIGN_LAST:()=>HZ,TIMESTAMP_ASSIGN_NEW:()=>Wx,TIMESTAMP_ASSIGN_PREVIOUS:()=>zx,TIMESTAMP_PLACEHOLDER:()=>W_,TIMESTAMP_RECORD_PREVIOUS:()=>NA,entryMap:()=>La,handleLocalTimeForGets:()=>J_,lastMetadata:()=>ct,recordUpdater:()=>MA,removeEntry:()=>rl});function $Z(){return km[0]=km[0]^64,kZ.getFloat64(0)}function J_(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(a,c){e.readCount++,ct=null;let l=r.call(this,a,c);return l&&(ct&&(l.metadataFlags=ct[Ou],l.localTime=ct.localTime,l.residencyId=ct.residencyId,l.size=ct.size,ct.expiresAt>=0&&(l.expiresAt=ct.expiresAt),ct=null),l.value&&La.set(l.value,l),l.key=a),l};let n=e.get;e.get=function(a,c){ct=null;let l=n.call(this,a,c);return ct&&l&&(La.set(l,ct),ct=null),l};let s=e.getRange;e.getRange=function(a){let c=s.call(this,a);return a.valuesForKey?c.map(l=>l?.value):a.values===!1||a.onlyCount?c:c.map(l=>(ct&&(l.metadataFlags=ct[Ou],l.localTime=ct.localTime,l.residencyId=ct.residencyId,ct.expiresAt>=0&&(l.expiresAt=ct.expiresAt),ct=null),l))};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let a=i.constructor,c=i.use,l=i.done;a.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,tl.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<tl.length;u++){let d=tl[u].deref();(!d||d.isDone||d.isCommitted)&&tl.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function MA(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){f||l==null?Cu=i?.localTime?NA|zx:wA:Cu=l?i?.localTime?NA|16384:Wx|16384:wA;let p=u?.expiresAt;if(p>=0&&(c|=j_),Fm=c,CA=p,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:a,instructedWrite:Cu>0},E,g=0;try{let b=i?.residencyId,S=u?.residencyId;S&&(OA=S,Fm|=LA,g|=Qc),b!==S&&(g|=Jc,b||(b=0)),c&j_&&(g|=Mm),u?.originatingOperation&&(g|=Dm),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&i.metadataFlags&Pn&&(r.getBinaryFast(i.localTime)||Ca(i.value));let R;if(s!==void 0&&(R=O_(()=>e.put(n,s,h),n,e.rootStore),Wc&&(g|=Pn)),l){let L=u?.user?.username;if(m&&(O_(()=>e.encoder.encode(m),n,e.rootStore),Wc&&(g|=Pn)),e.encoder.hasStructureUpdate&&(g|=Q_,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let O=i?.localTime,x=r.get(O);if(x){let j=Mt(x).previousLocalTime;return R=r.put(O,Xc(a,t,n,j,u?.nodeId??server.replication.getThisNodeId(r)??0,L,d,Nu,g,S,b,p),{ifVersion:E}),R}}R=r.put(s===void 0?Yx:Lm,Xc(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,L,d,Nu,g,S,b,p,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&qZ.has(d)&&qe(Nu?.length??1,"db-write",u.tableToTrack,null),R}catch(b){throw b.message+=" id: "+n+" options: "+h,b}}}function rl(e,t,r){if(t)return t.value&&t.metadataFlags&Pn&&!e.auditStore.getBinaryFast(t.localTime)&&Ca(t.value),e.remove(t.key,r)}var Kx,z_,W_,Lm,fA,Yx,BZ,Ou,FZ,km,kZ,wA,Wx,HZ,zx,NA,j_,LA,DA,Q_,qZ,La,GZ,Nu,Cu,Fm,CA,OA,ct,PA,tl,Zc=oe(()=>{Kx=require("msgpackr");Ro();z_=w(z());As();As();jn();W_=new Uint8Array([1,1,1,1,4,64,0,0]),Lm=new Uint8Array([1,1,1,1,1,0,0,0]),fA=new Uint8Array([1,1,1,1,3,64,0,0]),Yx=new Uint8Array([1,1,1,1,0,64,0,0]),BZ=Symbol("local-timestamp"),Ou=Symbol("metadata"),FZ=Symbol("entry"),km=new Uint8Array(8),kZ=new DataView(km.buffer,0,8),wA=0,Wx=0,HZ=1,zx=3,NA=4,j_=16,LA=32,DA=1,Q_=256,qZ=new Set(["put","patch","delete","message","publish"]),La=new WeakMap,Cu=0,Fm=-1,CA=-1,OA=0,ct=null,PA=class extends Kx.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return La.get(this)?.version}getExpiresAt(){return La.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(Cu||Fm>=0){let c=0,l=Cu;l&&(c+=8,Cu=0);let u=Fm,d=CA,f=OA;u>=0&&(c+=4,Fm=-1,d>=0&&(c+=8,CA=-1),f&&(c+=4,OA=0));let m=GZ=n.call(this,i,a|2048|c);Nu=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(W_[4]=l,W_[5]=l>>8,m.set(W_,p),p+=8),Wc&&(u|=Pn),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|k_<<24),p+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(p,d),p+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,f)),m}else return Nu=n.call(this,i,a),Nu};let s=this.saveStructures;this.saveStructures=function(i,a){let c=s.call(this,i,a);return this.hasStructureUpdate=!0,c}}decode(t,r){ct=null;let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],a=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(km,0,c),c+=8;else for(let m=0;m<8;m++)km[m]=t[c++];l=$Z(),i=t[c]}let u,d;i<32&&(i===k_?(a=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(a=i|t[c+1]<<5,c+=2),a&j_&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),a&LA&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Po(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return ct={localTime:l,[Ou]:a,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:Po(()=>super.decode(t,r),this.rootStore)}catch(c){return z_.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o($Z,"getTimestamp");o(J_,"handleLocalTimeForGets");tl=[];setInterval(()=>{for(let e=0;e<tl.length;e++){let t=tl[e].deref();!t||t.isDone||t.isCommitted?tl.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(z_.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):z_.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();o(MA,"recordUpdater");o(rl,"removeEntry")});function xA(e,t,r,n,s,i,a,c){let l=e[0];if(t==="or"){let f=u(l);for(let p=1;p<e.length;p++){let h=e[p],E=u(h);f=f.concat(E)}let m=new Set;return f.filter(p=>{let h=p.key??p;return m.has(h)?!1:(m.add(h),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?a(f,m):f}function u(f){return f.conditions?xA(f.conditions,f.operator,r,n,s,i,a,c):Mu(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}o(u,"executeCondition");function d(f,m,p){return f.map((h,E)=>{if(h.conditions){let S=h.operator==="or",R=d(h.conditions,!S,p);return S?(L,O)=>R.some(x=>x(L,O)):(L,O)=>R.every(x=>x(L,O))}let g=(h.attribute||h[0])===r.primaryKey,b=qm(h,r,i,c,g,p);return m&&E<f.length-1&&p&&(p=XZ(r.primaryStore,h.estimated_count,p)),b}).filter(Boolean)}o(d,"mapConditionsToFilters")}function Mu(e,t,r,n,s,i,a){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new jr.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let R=c[0],L=Bi(n.attributes,R);if(L.relationship){if(c.length<2)throw new jr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let O=L.definition?.tableClass||L.elements?.definition?.tableClass,x=new Map,j=Mu({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,O,s,x);if(L.relationship.to){i[c[0]]=x;let H=!!Bi(O.attributes,L.relationship.to)?.elements;j=zZ(j,L,O.primaryStore,H,x)}if(L.relationship.from){let H=o(F=>(F?.key!==void 0&&(F=F.key),Mu({attribute:L.relationship.from,value:F},t,r,n,s,x)),"searchEntry");L.elements?(i[c[0]]=x,j=jZ(j,L,O.primaryStore,x,H)):j=j.flatMap(H)}return j}else if(c.length===1)c=c[0];else throw new jr.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,p,h,E;l instanceof Date&&(l=l.getTime());let g;switch(BA[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]=xi.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),p=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),p=l[1],p instanceof Date&&(p=p.getTime()),h=u==="gele"||u==="gtle"||u==="between",E=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,p=l,h=!0;break;case"ne":if(l===null){m=l,E=!0;break}case"sort":case"contains":case"ends_with":m=!0,g=!0;break;default:throw new jr.ClientError(`Unknown query comparator "${u}"`)}let b;if(typeof m=="string"&&m.length>Ns.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,Ns.MAX_SEARCH_KEY_LENGTH)+Ns.OVERFLOW_MARKER,E=!1,b=qm(e,n,null,i,d)),typeof p=="string"&&p.length>Ns.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,Ns.MAX_SEARCH_KEY_LENGTH)+Ns.OVERFLOW_MARKER,h=!0,b=b??qm(e,n,null,i,d)),r){let R=m;m=p,p=R,R=!E,E=!h,h=R}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new jr.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new jr.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${c}`,403);if(f?.isIndexing)throw new jr.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new jr.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(b=b??qm(e,n,null,i,d),!b)throw new jr.ClientError(`Unknown search operator ${e.comparator}`)}let S={start:m,end:p,inclusiveEnd:h,exclusiveStart:E,values:!0,versions:d,transaction:t,reverse:r};if(d){let R=f.getRange(S).map(b?function({key:L,value:O}){return this?.isSync?O&&b(O)?L:Da.SKIP:new Promise((x,j)=>setImmediate(()=>{try{x(O&&b(O)?L:Da.SKIP)}catch(H){j(H)}}))}:L=>L.value==null&&!(L.metadataFlags&(Ln|Ma))?Da.SKIP:(a?._freezeRecords&&Object.freeze(L.value),L));return R.hasEntries=!0,R}else return f?f.customIndex?f.customIndex.search(e,a).map(R=>{if(typeof R=="object"&&R){let{key:L,...O}=R,x=n.primaryStore.getEntry(L);return a?._freezeRecords&&Object.freeze(x?.value),{...O,...x}}return R}):f.getRange(S).map(b?function({key:R,value:L}){let O;return typeof R=="string"&&R.length>Ns.MAX_SEARCH_KEY_LENGTH?O=n.primaryStore.get(L):O={[c]:R},this.isSync?b(O)?L:Da.SKIP:new Promise((x,j)=>setImmediate(()=>{try{x(b(O)?L:Da.SKIP)}catch(H){j(H)}}))}:({value:R})=>R):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:R,value:L}){return this.isSync?L&&b(L)?R:Da.SKIP:new Promise((O,x)=>setImmediate(()=>{try{O(L&&b(L)?R:Da.SKIP)}catch(j){x(j)}}))})}function Bi(e,t){if(Array.isArray(t))if(t.length>1){let r=Bi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?Bi(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 zZ(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=o((u,d)=>{let f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let a=i.next();return a.done?a:{value:a.value}},return(){if(i?.return)return i.return()}}}})}function jZ(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,a,c=new Set;return{next(){let l;if(a)for(;l=a.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(a=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return a?.return?.()},throw(){return a?.throw?.()}}}})}function qm(e,t,r,n,s,i){let a=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],f=Bi(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=qm({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:a},m,r,p?.[d]?.joined,c[1]===m.primaryKey,i);if(!h)return;if(p){p.filters||(p.filters=[]),p.filters.push(h);return}let E=t.propertyResolvers?.[d];E.to&&(h.to=E.to);let g,b=o((R,L)=>{let O,x;return E?E.returnDirect?(O=E(R,r,L),x=ct):(x=E(R,r,L,!0),Array.isArray(x)?(O=x.map(j=>j.value),x=null):O=x?.value):O=R[d],{subObject:O,subEntry:x}},"getSubObject"),S=o((R,L)=>{if(E&&h.idFilter){if(!g)if(h.idFilter.idSet?.size===1){for(let F of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:F};g=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else g=u(E.from??t.primaryKey,h.idFilter,!1,!0);let H=g(R);return g.idFilter&&(S.idFilter=g.idFilter),H}let{subObject:O,subEntry:x}=b(R,L);return O?Array.isArray(O)?(!n?.[d]&&n&&(n[d]={fromRecord(H){let F=b(H).subObject;return Array.isArray(F)?F.filter(h).map(Q=>Q[m.primaryKey]):F}}),O.some(h)):h(O,x):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),BA[a]||a){case Ns.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,xi.compareKeys)(d,l[0])>=0&&(0,xi.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,xi.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,xi.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,xi.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,xi.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,xi.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new jr.ClientError(`Unknown query comparator "${a}"`)}function u(d,f,m,p){let h;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&Z_(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,g=3;function b(S){let R=S[d],L;if(typeof R!="object"||!R||p?L=f(R):Array.isArray(R)?L=R.some(f):R instanceof Date&&(L=f(R.getTime())),m&&(g++,!L&&!b.idFilter&&++E/g*i>h)){let O=Mu(e,r.transaction.getReadTxn(),!1,t),x;b.to?x=O.flatMap(H=>t.primaryStore.get(H)[b.to]):x=O.map(vu);let j=new Set(x);b.idFilter=H=>j.has(vu(H)),b.idFilter.idSet=j}return L}return o(b,"recordFilter"),s&&(b.idFilter=f),b}o(u,"attributeComparator")}function Z_(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/Do(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=BA[n]||n,n===Ns.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=Bi(e.attributes,s[0]),a=i.definition?.tableClass||i.elements.definition?.tableClass,c=Z_(a)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*Do(e.indices[i.relationship.from])/(Do(a.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=Do(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=YZ*Do(e.primaryStore)+1;else if(n==="between")r.estimated_count=KZ*Do(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=Do(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=VZ*Do(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function eg(e,t){if(e)if(Mo=e,Pu.lastIndex=0,QZ.test(e))try{if(t&&(t.conditions=[]),ni=t??new Du,Hm(ni,""),Br!==Mo.length&&$t("Unable to parse query, unexpected end of query"),ni.parseErrorMessage&&(ni.parseError=new vA(t.parseErrorMessage),!t))throw ni.parseError;return ni}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${Br} in '${Mo}'`,ni.parseErrorMessage&&(r.message+=", "+ni.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function $t(e){let t=`${e} at position ${Br}`;ni.parseErrorMessage=ni.parseErrorMessage?ni.parseErrorMessage+", "+t:t}function Hm(e,t){let r=Pu,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(Mo);){Br=r.lastIndex;let[,d,f]=n;a?(d&&$t(`expected operator, but encountered '${d}'`),a=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:$t(`invalid FIQL operator ${d}`),l=Qx):(l=decodeURIComponent,i="equals",d||$t("attribute must be specified before equality comparator"),s=Lu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=WZ[f],l=UA[i]?Qx:decodeURIComponent,d||$t(`attribute must be specified before comparator ${f}`),s=Lu(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&$t(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),$t(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||$t("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&Jx(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else X_(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?$t("conditions/comparisons are not allowed in a property list"):e.push(Lu(d)),s=void 0;break;case"(":Pu.lastIndex=Br;let p=Hm(d?[]:new Du,")");switch(d){case"":X_(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:$t("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":$t("group by is not implemented yet");case"sort":e.sort=Xx(p);break;default:$t(`unknown query function call ${d}`)}Mo[Br]===","?r.lastIndex=++Br:a=!0,s=null;break;case"{":e.conditions&&$t("property sets are not allowed in a queries"),d||$t("property sets must have a defined parent property name"),Pu.lastIndex=Br,m=Hm([],"}"),m.name=d,e.push(m),Mo[Br]===","?r.lastIndex=++Br:a=!0;break;case"[":if(Pu.lastIndex=Br,d?(m=Hm(new Du,"]"),m.name=d):m=Hm(e.conditions?new Du:[],"]"),e.conditions)if(X_(e,u),Mo[Br]==="="){l=decodeURIComponent,i="equals",s=Lu(d),r.lastIndex=++Br;break}else e.conditions.push(m),s=null;else e.push(m);Mo[Br]===","?r.lastIndex=++Br:a=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let h={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&Jx(h,d),X_(e,u),e.conditions.push(h)}else d&&$t("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Lu(d));return e}else $t(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:$t(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?JZ:Pu,r.lastIndex=Br),Br===Mo.length)return e}t&&$t(`expected '${t}', but encountered end of string`)}function X_(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&$t("Can not mix operators within a condition grouping"):e.operator=t)}function Lu(e){return e.indexOf(".")>-1?e.split(".").map(Lu):decodeURIComponent(e)}function Qx(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new jr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function Jx(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new jr.ClientError("wildcard can only be used at the end of a string")}function Xx(e){let t=Zx(e[0]);return e.length>1&&(t.next=Xx(e.slice(1))),t}function Zx(e){if(Array.isArray(e)){let t=Zx(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}}$t(`Unknown sort type ${e}`)}function vu(e){return Array.isArray(e)?e.join("\0"):e}function Do(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function XZ(e,t,r){return t*r/Do(e)}var jr,Ns,xi,Da,VZ,KZ,YZ,WZ,UA,BA,vA,QZ,Pu,JZ,Br,ni,Mo,Du,tg=oe(()=>{jr=w(Ee()),Ns=w(Gt()),xi=require("ordered-binary"),Da=require("lmdb");rg();Zc();VZ=.3,KZ=.1,YZ=.05,WZ={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},UA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(xA,"executeConditions");o(Mu,"searchByIndex");o(Bi,"findAttribute");o(zZ,"joinTo");o(jZ,"joinFrom");BA={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};o(qm,"filterByType");o(Z_,"estimateCondition");vA=class extends jr.Violation{static{o(this,"SyntaxViolation")}},QZ=/[()[\]|!<>.]|(=\w*=)/,Pu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,JZ=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(eg,"parseQuery");o($t,"recordError");o(Hm,"parseBlock");o(X_,"assignOperator");o(Lu,"decodeProperty");o(Qx,"typedDecoding");o(Jx,"wildcardDecoding");o(Xx,"toSortObject");o(Zx,"toSortEntry");Du=class{static{o(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};o(vu,"flattenKey");o(Do,"estimatedEntryCount");o(XZ,"intersectionEstimate")});var e0,si,ng=oe(()=>{e0=w(ri()),si=class extends URLSearchParams{static{o(this,"RequestTarget")}#e;pathname;search;id;isCollection;constructor(t){let r,n;if(t&&(r=t.indexOf("?"))>-1){n=t.slice(0,r);let s=t.slice(r+1);super(s),this.search=s}else super(),n=t;this.pathname=n??"",this.#e=t}toString(){return this.#e?this.#e:this.size>0?this.pathname+"?"+super.toString():this.pathname}get url(){return this.toString()}delete(t){super.delete(t),this.conditions&&(this.conditions=this.conditions.filter(r=>r.attribute!==t)),this.#e=void 0}set(t,r){this.delete(t),super.set(t,r),this.conditions?.push({attribute:t,value:r})}append(t,r){super.append(t,r),this.#e=void 0,this.conditions?.push({attribute:t,value:r})}};(0,e0._assignPackageExport)("Resource",Resource)});var i0={};be(i0,{MultiPartId:()=>sg,Resource:()=>Fr,contextStorage:()=>xu,snakeCase:()=>e9,transformForSelect:()=>Bu});function e9(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function t0(e,t){if(nl=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(nl=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new sg;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){nl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return nl=!0,null;e[e.length-1]==="/"&&(nl=!0)}return t.coerceId(decodeURIComponent(e))}function Dn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,a){let c,l,u,d;if(r){if(a)d=i,a=a.getContext?.()||a;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,a=i.getContext?.()||i):i?.transaction instanceof yo?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new Uu.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?a?(d=i,a=a.getContext?.()||a):a=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(a=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let E=c.indexOf("?");E>-1&&(l=this.parseQuery(c.slice(E+1),s),c=c.slice(0,E),c===""&&(u=!0));let g=this.parsePath(c,a,l);g?.id!==void 0?(g.query&&(l?l=Object.assign(g.query,l):l=g.query),u=g.isCollection,c=g.id):c=g,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new si,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new si,l.id=c,c==null&&(u=!0);l||(l=new si,l.id=c),u&&(l.isCollection=!0);let f;a||(a=xu.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,p=h;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(p=o(E=>xu.run(a,()=>h(E)),"runAction")),a?.transaction){let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)}else return Tt(a,()=>{let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)},f);function h(E){if(m!==!1&&a.authorize){a.authorize=!1;let g=t.type==="read"?E.allowRead(a.user,l,a):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(a.user,d,a):E.allowUpdate(a.user,d,a):t.type==="create"?E.allowCreate(a.user,d,a):E.allowDelete(a.user,l,a);if(g?.then)return g.then(b=>{if(!b)throw new Uu.AccessViolation(a.user);return typeof d?.then=="function"?d.then(S=>e(E,l,a,S)):e(E,l,a,d)});if(!g)throw new Uu.AccessViolation(a.user)}return typeof d?.then=="function"?d.then(g=>e(E,l,a,g)):e(E,l,a,d)}o(h,"authorizeActionOnResource")}}function Qn(e,t){let r=new Uu.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function FA(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let a,c;return e.hasOwnProperty(i)&&typeof(a=e[i])!="function"?a:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function Bu(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return o(function a(c){return c.then?c.then(a):Array.isArray(c)?c.map(a):FA(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(FA(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let a=e.forceNulls;return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(FA(l,r,n)),f;for(let m of e){let p=d(m);p===void 0&&a&&(p=null),p?.then?(f||(f=[]),f.push(p.then(h=>u[m.name||m]=h))):u[m.name||m]=p}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(a){return c=>{if(typeof c=="string")return a(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=Bu(c.select||c,d)}let u=a(c.name);return l(u)}else return a(c);else return c}}o(i,"handleProperty")}var r0,n0,Uu,s0,xu,ZZ,Fr,nl,sg,va=oe(()=>{r0=require("crypto");mm();yu();n0=w(ri()),Uu=w(Ee());Na();tg();s0=require("async_hooks");ng();xu=new s0.AsyncLocalStorage,ZZ={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Fr=class{static{o(this,"Resource")}#e;#t;#r;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=Dn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(a);return a(i);function a(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=Bu(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Dn(function(t,r,n,s){if(Array.isArray(s)&&t.#r&&t.constructor.loadAsInstance!==!1){let i=[];for(let a of s){let c=t.constructor,l=a[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(a,n))):i.push(u.put(a,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):Qn(t,"put")},{hasContent:!0,type:"update"});static patch=Dn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):Qn(t,"patch")},{hasContent:!0,type:"update"});static delete=Dn(function(t,r,n,s){return t.delete?t.delete(r):Qn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,r0.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=xu.getStore()??{};let s;return this.loadAsInstance===!1?s=t:t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),Tt(n,async()=>{let i=new this(s,n),a=await i.create?i.create(s,r):Qn(i,"create");return n.newLocation=s??a?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?a:i})}static invalidate=Dn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Qn(t,"delete")},{hasContent:!1,type:"update"});static post=Dn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create"});static update=Dn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update"});static connect=Dn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):Qn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Dn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Qn(t,"subscribe")},{type:"read"});static publish=Dn(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):Qn(t,"publish")},{hasContent:!0,type:"create"});static search=Dn(function(t,r,n){let s=t.search?t.search(r):Qn(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let a=Bu(i,t.constructor);return s.map(a)}return s},{type:"read"});static query=Dn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):Qn(t,"search")},{hasContent:!0,type:"read"});static copy=Dn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):Qn(t,"copy")},{hasContent:!0,type:"create"});static move=Dn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):Qn(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;Qn(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return eg(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&ZZ[a];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===a))if(t=t.slice(0,s),n)n.property=a;else return{query:{property:a},id:t0(t,this),isCollection:nl}}let i=t0(t,this);return nl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),a;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?a=r.isCollection:a=n?.isCollection;let c=a&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return a&&(s.#r=!0),s}subscribe(t){return new Wn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new Wn}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,n0._assignPackageExport)("Resource",Fr);o(e9,"snakeCase");o(t0,"pathToId");sg=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(Dn,"transactional");o(Qn,"missingMethod");o(FA,"selectFromObject");o(Bu,"transformForSelect")});var sl,kA=oe(()=>{sl=class{static{o(this,"ErrorResource")}error;constructor(t){this.error=t}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var HA={};be(HA,{Resources:()=>Fu,keyArrayToString:()=>ku,resetResources:()=>t9,resources:()=>Cs});function t9(){return Cs=new Fu,Me.resources=Cs,Cs}function ku(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var o0,a0,Fu,Cs,Ua=oe(()=>{Na();kA();o0=w(z()),a0=w(Ee());xr();Fu=class extends Map{static{o(this,"Resources")}isWorker=!0;loginPath;allTypes=new Map;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},a=super.get(t);if(a&&(a.Resource.databaseName!==r.databaseName||a.Resource.tableName!==r.tableName)&&!s){let c=new a0.ServerError(`Conflicting paths for ${t}`);o0.default.error(c),i.Resource=new sl(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,a=t.length;for(;n<a;){s=n,n=t.indexOf("/",n),n===-1&&(n=a);let u=n===a?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===a&&(f=u.indexOf("?",s),f!==-1)){let m=u.slice(0,f);d=this.get(m)}if(d&&(!r||d.exportTypes?.[r]!==!1)){if(d.relativeURL=t.slice(f!==-1?f:n),!d.hasSubPaths)return d;i=d}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return Tt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};o(t9,"resetResources");o(ku,"keyArrayToString")});function $A(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=l0,r9(e.primaryStore,e.auditStore)):(c=c0,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{u0(c0[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[a];u||(u=l[a]=new Map,u.envs=l,u.tableId=a,u.store=e.primaryStore),t=ku(t);let d=new GA(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 u0(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),d0(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=Mt(s),a=e[i.tableId];if(!a)continue;let c=i.recordId,l=ku(c),u=0;do{let d=a.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,qA.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,qA.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 r9(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:a,txnId:c})=>{let l=l0[s];if(!l)return;let u=o(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{u0(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function d0(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function f0(e){return e.nextTransaction||($A({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),d0(e)),e.nextTransaction}var qA,c0,l0,GA,VA=oe(()=>{qA=w(z());yu();Ua();Ro();c0=Object.create(null),l0=Object.create(null);o($A,"addSubscription");GA=class extends Wn{static{o(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};o(u0,"notifyFromTransactionData");o(r9,"listenToCommits");o(d0,"nextTransaction");o(f0,"whenNextTransaction")});var p0=v((tPe,m0)=>{"use strict";var KA=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};m0.exports=KA});var E0=v((nPe,h0)=>{"use strict";var YA=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};h0.exports=YA});var Gm=v(g0=>{"use strict";var _0=le(),n9=(k(),D(Y)),{RecordEncoder:s9}=(Zc(),D(jx));_0.initSync();var i9=_0.get(n9.CONFIG_PARAMS.STORAGE_CACHING)!==!1,WA=class{static{o(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=i9&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:s9})}};g0.OpenDBIObject=WA});var $m=v((aPe,S0)=>{"use strict";var Jn=le(),Os=(k(),D(Y));Jn.initSync();var ig=class{static{o(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Jn.get(Os.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Jn.get(Os.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Jn.get(Os.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Jn.get(Os.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Jn.get(Os.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Jn.get(Os.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Jn.get(Os.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Jn.get(Os.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Jn.get(Os.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Jn.get(Os.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Jn.get(Os.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Jn.get(Os.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};S0.exports=ig;ig.MAX_DBS=1e4});var pt=v((lPe,O0)=>{"use strict";var jA=require("lmdb"),ii=require("fs-extra"),Xn=require("path"),og=Cn(),R0=z(),Mn=Kr().LMDB_ERRORS_ENUM,ag=E0(),{OpenDBIObject:QA}=Gm(),b0=$m(),xa=Gt(),T0=(k(),D(Y)),{table:o9,resetDatabases:a9}=(Ne(),D(ft)),y0=le(),oi=xa.INTERNAL_DBIS_NAME,A0=xa.DBI_DEFINITION_NAME,c9="data.mdb",l9="lock.mdb",Vm=".mdb",u9="-lock",zA=class{static{o(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Ps(t,r),this.key_type=this.dbi[xa.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[xa.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new jA.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function cg(e,t){if(e===void 0)throw new Error(Mn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Mn.ENV_NAME_REQUIRED)}o(cg,"pathEnvNameValidation");async function JA(e,t,r=!0){try{await ii.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Mn.INVALID_BASE_PATH):n}try{let n=Xn.join(e,t+Vm);return await ii.access(n,ii.constants.R_OK|ii.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await ii.access(Xn.join(e,t,c9),ii.constants.R_OK|ii.constants.F_OK),Xn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Mn.INVALID_ENVIRONMENT)}else throw new Error(Mn.INVALID_ENVIRONMENT);throw n}}o(JA,"validateEnvironmentPath");function lg(e,t){if(og.validateEnv(e),t===void 0)throw new Error(Mn.DBI_NAME_REQUIRED)}o(lg,"validateEnvDBIName");async function d9(e,t,r=!1,n=!1){cg(e,t);let s=Xn.basename(e);t=t.toString();let i=y0.get(T0.CONFIG_PARAMS.DATABASES);i||y0.setProperty(T0.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await JA(e,t,n),I0(e,t,r)}catch(a){if(a.message===Mn.INVALID_ENVIRONMENT){let c=Xn.join(e,t);await ii.mkdirp(n?c:e);let l=new b0(n?c:c+Vm,!1),u=jA.open(l);u.dbis=Object.create(null);let d=new QA(!1);u.openDB(oi,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=XA(e,t,r);return u[xa.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw a}}o(d9,"createEnvironment");async function f9(e,t,r,n=!0){cg(e,t),t=t.toString();let s=Xn.join(e,t);return o9({table:t,database:Xn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}o(f9,"copyEnvironment");async function I0(e,t,r=!1){cg(e,t),t=t.toString();let n=XA(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 JA(e,t),i=Xn.join(e,t+Vm),a=s!=i,c=new b0(s,a),l=jA.open(c);l.dbis=Object.create(null);let u=N0(l);for(let d=0;d<u.length;d++)Ps(l,u[d]);return l[xa.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}o(I0,"openEnvironment");async function m9(e,t,r=!1){cg(e,t),t=t.toString();let n=Xn.join(e,t+Vm),s=await JA(e,t);if(global.lmdb_map!==void 0){let i=XA(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await w0(a),delete global.lmdb_map[i]}}await ii.remove(s),await ii.remove(s===n?s+u9:Xn.join(Xn.dirname(s),l9))}o(m9,"deleteEnvironment");async function w0(e){og.validateEnv(e);let t=e[xa.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(w0,"closeEnvironment");function XA(e,t,r=!1){let s=`${Xn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}o(XA,"getCachedEnvironmentName");function p9(e){og.validateEnv(e);let t=Object.create(null),r=Ps(e,oi);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==oi)try{t[n]=Object.assign(new ag,s)}catch{R0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}o(p9,"listDBIDefinitions");function N0(e){og.validateEnv(e);let t=[],r=Ps(e,oi);for(let{key:n}of r.getRange({start:!1}))n!==oi&&t.push(n);return t}o(N0,"listDBIs");function h9(e,t){let n=Ps(e,oi).getEntry(t),s=new ag;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{R0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}o(h9,"getDBIDefinition");function C0(e,t,r,n=!r){if(lg(e,t),t=t.toString(),t===oi)throw new Error(Mn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ps(e,t)}catch(s){if(s.message===Mn.DBI_DOES_NOT_EXIST){let i=new QA(r,n===!0),a=e.openDB(t,i),c=new ag(r===!0,n);return a[A0]=c,Ps(e,oi).putSync(t,c),e.dbis[t]=a,a}throw s}}o(C0,"createDBI");function Ps(e,t){if(lg(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==oi?r=h9(e,t):r=new ag,r===void 0)throw new Error(Mn.DBI_DOES_NOT_EXIST);let n;try{let s=new QA(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(Mn.DBI_DOES_NOT_EXIST):s}return n[A0]=r,e.dbis[t]=n,n}o(Ps,"openDBI");function E9(e,t){lg(e,t),t=t.toString();let r=Ps(e,t),n=r.getStats();return r[xa.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}o(E9,"statDBI");async function _9(e,t){try{let r=Xn.join(e,t+Vm);return(await ii.stat(r)).size}catch{throw new Error(Mn.INVALID_ENVIRONMENT)}}o(_9,"environmentDataSize");function g9(e,t){if(lg(e,t),t=t.toString(),t===oi)throw new Error(Mn.CANNOT_DROP_INTERNAL_DBIS_NAME);Ps(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ps(e,oi).removeSync(t)}o(g9,"dropDBI");function S9(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Ps(e,i)}catch(a){if(a.message===Mn.DBI_DOES_NOT_EXIST)C0(e,i,i!==t,i===t),n=!0;else throw a}}n&&a9()}o(S9,"initializeDBIs");O0.exports={openDBI:Ps,openEnvironment:I0,createEnvironment:d9,listDBIs:N0,listDBIDefinitions:p9,createDBI:C0,dropDBI:g9,statDBI:E9,deleteEnvironment:m9,initializeDBIs:S9,TransactionCursor:zA,environmentDataSize:_9,copyEnvironment:f9,closeEnvironment:w0}});var D0=v((dPe,L0)=>{"use strict";var ZA=pt(),T9=z(),P0=Kr().LMDB_ERRORS_ENUM;L0.exports=y9;async function y9(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let a=t[i];if(a.startsWith(`${e.schema}.`)||a.startsWith(`txn.${e.schema}.`))try{await ZA.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==P0.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await ZA.closeEnvironment(global.lmdb_map[n]),await ZA.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==P0.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){T9.error(t)}}o(y9,"cleanLMDBMap")});var ki=v((mPe,v0)=>{"use strict";var M0=ce(),R9=(k(),D(Y)),Hu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Fi=require("joi"),Ba={schema_format:{pattern:Hu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},b9=Fi.alternatives(Fi.string().min(1).max(Ba.schema_length.maximum).pattern(Hu).messages({"string.pattern.base":"{:#label} "+Ba.schema_format.message}),Fi.number(),Fi.array()).required(),A9=Fi.alternatives(Fi.string().min(1).max(Ba.schema_length.maximum).pattern(Hu).messages({"string.pattern.base":"{:#label} "+Ba.schema_format.message}),Fi.number()),I9=Fi.alternatives(Fi.string().min(1).max(Ba.schema_length.maximum).pattern(Hu).messages({"string.pattern.base":"{:#label} "+Ba.schema_format.message}),Fi.number()).required();function w9(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>Ba.schema_length.maximum?`'${property_name}' maximum of 250 characters`:Hu.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}o(w9,"checkValidTable");function N9(e,t){return M0.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(N9,"validateSchemaExists");function C9(e,t){let r=t.state.ancestors[0].schema;return M0.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(C9,"validateTableExists");function O9(e,t){return e.toLowerCase()===R9.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(O9,"validateSchemaName");v0.exports={commonValidators:Ba,schemaRegex:Hu,hdbSchemaTable:b9,validateSchemaExists:N9,validateTableExists:C9,validateSchemaName:O9,checkValidTable:w9,hdbDatabase:A9,hdbTable:I9}});var ot=v((hPe,U0)=>{"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:o(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:o(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};U0.exports={validateObject:P9,validateObjectAsync:L9,validateBySchema:D9};function P9(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}o(P9,"validateObject");async function L9(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}o(L9,"validateObjectAsync");function D9(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(D9,"validateBySchema")});var tI=v((_Pe,B0)=>{var{hdbTable:M9,hdbDatabase:x0}=ki(),v9=ot(),eI=require("joi"),U9={undefined:"undefined",null:"null"},x9=o((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let a=r[i];(!a||a.length===0||U9[a]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${a}'`:s+=`. Invalid attribute name: '${a}'`)}return s?t.message(s):e},"customRecordsVal"),B9=eI.object({database:x0,schema:x0,table:M9,records:eI.array().items(eI.object().custom(x9)).required()});B0.exports=function(e){return v9.validateBySchema(e,B9)}});var k0=v((SPe,F0)=>{"use strict";var rI=class{static{o(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};F0.exports=rI});var q0=v((yPe,H0)=>{"use strict";var nI=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};H0.exports=nI});var $0=v((bPe,G0)=>{"use strict";var sI=class{static{o(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};G0.exports=sI});var K0=v((IPe,V0)=>{"use strict";var iI=class{static{o(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};V0.exports=iI});var ol=v((PPe,z0)=>{"use strict";var F9=pt(),k9=q0(),H9=$0(),q9=K0(),Hi=Cn(),Km=Kr().LMDB_ERRORS_ENUM,G9=Gt(),vo=(k(),D(Y)),$9=ce(),V9=require("uuid"),NPe=require("lmdb"),{handleHDBError:K9,hdbErrors:Y9}=Ee(),{OVERFLOW_MARKER:CPe,MAX_SEARCH_KEY_LENGTH:OPe}=G9,Y0=le();Y0.initSync();var ug=Y0.get(vo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),oI=vo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,il=vo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function W9(e,t,r,n,s=Hi.getNextMonotonicTime()){uI(e,t,r,n),aI(e,t,r);let i=new k9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];W0(u,!0,s);let d=z9(e,t,r,u),f=u[t];a.push(d),c.push(f)}return cI(a,c,n,i,s)}o(W9,"insertRecords");function z9(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||n.hasOwnProperty(a)===!1)continue;let c=n[a];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][vo.FUNC_VAL],n[a]=c)}let l=Hi.getIndexedValues(c),u=e.dbis[a];if(l){ug&&u.prefetch(l.map(d=>({key:d,value:s})),dg);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}ug&&e.dbis[t].prefetch([s],dg),e.dbis[t].put(s,n,n[il])})}o(z9,"insertRecord");function j9(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}o(j9,"removeSkippedRecords");function W0(e,t,r){let n=r>0;(n||!Number.isInteger(e[il]))&&(e[il]=r||(r=Hi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[oI]))&&(e[oI]=r||Hi.getNextMonotonicTime()):delete e[oI]}o(W0,"setTimestamps");function aI(e,t,r){r.indexOf(vo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(vo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(vo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(vo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),F9.initializeDBIs(e,t,r)}o(aI,"initializeTransaction");async function Q9(e,t,r,n,s=Hi.getNextMonotonicTime()){uI(e,t,r,n),aI(e,t,r);let i=new H9,a=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=lI(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),a.push(u);continue}c.push(m),l.push(f)}return cI(c,l,n,i,s,a)}o(Q9,"updateRecords");async function J9(e,t,r,n,s=Hi.getNextMonotonicTime()){try{uI(e,t,r,n)}catch(l){throw K9(l,l.message,Y9.HTTP_STATUS_CODES.BAD_REQUEST)}aI(e,t,r);let i=new q9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;$9.isEmpty(u[t])?(d=V9.v4(),u[t]=d):d=u[t];let f=lI(e,t,u,d,i,!1,s);a.push(f),c.push(d)}return cI(a,c,n,i,s)}o(J9,"upsertRecords");async function cI(e,t,r,n,s,i=[]){let a=await Promise.all(e);for(let c=0,l=a.length;c<l;c++)a[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Hi.getNextMonotonicTime(),j9(r,i),n}o(cI,"finalizeWrite");function lI(e,t,r,n,s,i=!1,a){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(W0(r,!d,a),Number.isInteger(r[il])&&u[il]>r[il])return!1;d&&s.original_records.push(u);let f,m=o(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let E=r[h],g=e.dbis[h];if(g===void 0)continue;let b=u[h];if(typeof E=="function"){let R=E([[u]]);Array.isArray(R)&&(E=R[0][vo.FUNC_VAL],r[h]=E)}if(E===b)continue;let S=Hi.getIndexedValues(b);if(S){ug&&g.prefetch(S.map(R=>({key:R,value:n})),dg);for(let R=0,L=S.length;R<L;R++)g.remove(S[R],n)}if(S=Hi.getIndexedValues(E),S){ug&&g.prefetch(S.map(R=>({key:R,value:n})),dg);for(let R=0,L=S.length;R<L;R++)g.put(S[R],n)}}let p={...u,...r};c.put(n,p,p[il])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:lI(e,t,r,n,s,i,a))}o(lI,"updateUpsertRecord");function X9(e,t,r){if(Hi.validateEnv(e),t===void 0)throw new Error(Km.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Km.WRITE_ATTRIBUTES_REQUIRED):new Error(Km.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(X9,"validateBasic");function uI(e,t,r,n){if(X9(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Km.RECORDS_REQUIRED):new Error(Km.RECORDS_MUST_BE_ARRAY)}o(uI,"validateWrite");function dg(){}o(dg,"noop");z0.exports={insertRecords:W9,updateRecords:Q9,upsertRecords:J9}});var qi=v((DPe,Z9)=>{Z9.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"hash_function"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"id",table:"hdb_license",database:"system",audit:!0,attributes:[{attribute:"id"},{name:"level"},{name:"region",indexed:!0},{name:"reads"},{name:"writes"},{name:"readBytes"},{name:"writeBytes"},{name:"realTimeMessages"},{name:"realTimeBytes"},{name:"cpuTime"},{name:"storage"},{name:"usedReads"},{name:"usedWrites"},{name:"usedReadBytes"},{name:"usedWriteBytes"},{name:"usedRealTimeMessages"},{name:"usedRealTimeBytes"},{name:"usedCpuTime"},{name:"usedStorage"},{name:"expiration"},{name:"autoRenew"},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics_hostname:{hash_attribute:"id",name:"hdb_analytics_hostname",schema:"system",attributes:[{attribute:"id"},{attribute:"hostname"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var Q0=v((MPe,j0)=>{"use strict";var e7=require("uuid"),dI=class{static{o(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||e7.v4(),this.schema_table=`${this.schema}.${this.table}`}};j0.exports=dI});var fg=v((UPe,J0)=>{"use strict";var t7=Q0(),fI=class extends t7{static{o(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,a=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=a}};J0.exports=fI});var Z0=v((BPe,X0)=>{"use strict";X0.exports=n7;var r7="inserted";function n7(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===r7?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}o(n7,"returnObject")});var mg=v((HPe,tB)=>{"use strict";var s7=(k(),D(Y)),mI=pt(),i7=ol(),{getSystemSchemaPath:o7,getSchemaPath:a7}=St(),kPe=qi(),{validateBySchema:c7}=ot(),Ym=require("joi"),l7=fg(),u7=Z0(),{handleHDBError:d7,hdbErrors:f7,ClientError:m7}=Ee(),eB=ce(),{HTTP_STATUS_CODES:p7}=f7,h7="inserted";tB.exports=E7;async function E7(e){let t=c7(e,Ym.object({database:Ym.string(),schema:Ym.string(),table:Ym.string().required(),attribute:Ym.string().required()}));if(t)throw new m7(t.message);let r=!e.skip_table_check&&eB.checkGlobalSchemaTable(e.schema,e.table);if(r)throw d7(new Error,r,p7.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=eB.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 l7(e.schema,e.table,e.attribute,e.id);try{let i=await mI.openEnvironment(a7(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${create_attribute_obj.attribute}' already exists in ${e.schema}.${e.table}`);mI.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await mI.openEnvironment(o7(),s7.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await i7.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return u7(h7,c,{records:[s]},l)}catch(i){throw i}}o(E7,"lmdbCreateAttribute")});var Wm=v(($Pe,nB)=>{"use strict";var Uo=ce(),rB=z(),GPe=tI(),{getDatabases:_7}=(Ne(),D(ft)),{ClientError:al}=Ee();nB.exports=g7;function g7(e){if(Uo.isEmpty(e))throw new al("invalid update parameters defined.");if(Uo.isEmptyOrZeroLength(e.schema))throw new al("invalid schema specified.");if(Uo.isEmptyOrZeroLength(e.table))throw new al("invalid table specified.");if(!Array.isArray(e.records))throw new al("records must be an array");let t=_7()[e.schema]?.[e.table];if(Uo.isEmpty(t))throw new al(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(a=>{if(i&&Uo.isEmptyOrZeroLength(a[r]))throw rB.error("a valid hash attribute must be provided with update record:",a),new al("a valid hash attribute must be provided with update record, check log for more info");if(!Uo.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw rB.error(`a valid hash value must be provided with ${e.operation} record:`,a),new al(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Uo.isEmpty(a[r])&&a[r]!==""&&n.has(Uo.autoCast(a[r]))&&(a.skip=!0),n.add(Uo.autoCast(a[r]));for(let c in a)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}o(g7,"insertUpdateValidate")});var pg=v((KPe,iB)=>{"use strict";var sB=ce(),S7=(k(),D(Y)),T7=z(),y7=mg(),R7=fg(),b7=xo(),{SchemaEventMsg:A7}=Zn(),I7="already exists in";iB.exports=w7;async function w7(e,t,r){if(sB.isEmptyOrZeroLength(r))return r;let n=[];sB.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 N7(e,t.schema,t.name,i)})),s}o(w7,"lmdbCheckForNewAttributes");async function N7(e,t,r,n){let s=new R7(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await C7(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(I7))T7.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}o(N7,"createNewAttribute");async function C7(e){let t;return t=await y7(e),b7.signalSchemaChange(new A7(process.pid,S7.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(C7,"createAttribute")});var qu=v((WPe,oB)=>{"use strict";var pI=class{static{o(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};oB.exports=pI});var cB=v((jPe,aB)=>{"use strict";var O7=qu(),P7=(k(),D(Y)).OPERATIONS_ENUM,hI=class extends O7{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(P7.INSERT,r,n,s,i),this.records=t}};aB.exports=hI});var uB=v((JPe,lB)=>{"use strict";var L7=qu(),D7=(k(),D(Y)).OPERATIONS_ENUM,EI=class extends L7{static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(D7.UPDATE,n,s,i,a),this.records=t,this.original_records=r}};lB.exports=EI});var fB=v((ZPe,dB)=>{"use strict";var M7=qu(),v7=(k(),D(Y)).OPERATIONS_ENUM,_I=class extends M7{static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(v7.UPSERT,n,s,i,a),this.records=t,this.original_records=r}};dB.exports=_I});var pB=v((tLe,mB)=>{"use strict";var U7=qu(),x7=(k(),D(Y)).OPERATIONS_ENUM,gI=class extends U7{static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(x7.DELETE,n,s,t,i),this.original_records=r}};mB.exports=gI});var zm=v((sLe,gB)=>{"use strict";var nLe=require("path"),hB=pt(),B7=cB(),F7=uB(),k7=fB(),H7=pB(),Gu=Gt(),EB=ce(),{CONFIG_PARAMS:q7}=(k(),D(Y)),_B=le();_B.initSync();var hg=(k(),D(Y)).OPERATIONS_ENUM,{getTransactionAuditStorePath:G7}=St();gB.exports=$7;async function $7(e,t){if(_B.get(q7.LOGGING_AUDITLOG)===!1)return;let r=G7(e.schema,e.table),n=await hB.openEnvironment(r,e.table,!0),s=V7(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){hB.initializeDBIs(n,Gu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Gu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),EB.isEmpty(s.user_name)||n.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let a=0;a<s.hash_values.length;a++)n.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[a],i)})}}o($7,"writeTransaction");function V7(e,t){let r=EB.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===hg.INSERT)return new B7(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===hg.UPDATE)return new F7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===hg.UPSERT)return new k7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===hg.DELETE)return new H7(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(V7,"createTransactionObject")});var SI=v((aLe,SB)=>{"use strict";var K7=Wm(),oLe=um(),jm=(k(),D(Y)),Y7=dm(),W7=ol().insertRecords,z7=pt(),j7=z(),Q7=pg(),{getSchemaPath:J7}=St(),X7=zm();SB.exports=Z7;async function Z7(e){try{let{schemaTable:t,attributes:r}=K7(e);Y7(e,r,t.hash_attribute),e.schema!==jm.SYSTEM_SCHEMA_NAME&&(r.includes(jm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(jm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(jm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(jm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Q7(e.hdb_auth_header,t,r),s=J7(e.schema,e.table),i=await z7.openEnvironment(s,e.table),a=await W7(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await X7(e,a)}catch(c){j7.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(Z7,"lmdbCreateRecords")});var RB=v((lLe,yB)=>{"use strict";var TB=(k(),D(Y)),eee=SI(),tee=um(),ree=require("fs-extra"),{getSchemaPath:nee}=St();yB.exports=see;async function see(e){let t=[{name:e.schema,createddate:Date.now()}],r=new tee(TB.SYSTEM_SCHEMA_NAME,TB.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await eee(r),await ree.mkdirp(nee(e.schema))}o(see,"lmdbCreateSchema")});var AB=v((dLe,bB)=>{"use strict";var TI=class{static{o(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};bB.exports=TI});var CB=v((ELe,NB)=>{"use strict";var IB=pt(),yI=Cn(),RI=Kr().LMDB_ERRORS_ENUM,iee=Gt(),wB=z(),mLe=ce(),oee=require("lmdb"),aee=AB(),cee=(k(),D(Y)),{OVERFLOW_MARKER:pLe,MAX_SEARCH_KEY_LENGTH:hLe}=iee,lee=cee.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function uee(e,t,r,n){if(yI.validateEnv(e),t===void 0)throw new Error(RI.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(RI.IDS_REQUIRED):new Error(RI.IDS_MUST_BE_ITERABLE);try{let s=IB.listDBIs(e);IB.initializeDBIs(e,t,s);let i=new aee,a,c=[],l=[];for(let m=0,p=r.length;m<p;m++)try{a=r[m];let h=e.dbis[t].get(a);if(!h||n&&h[lee]>n){i.skipped.push(a);continue}let E=e.dbis[t].ifVersion(a,oee.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let g=0;g<s.length;g++){let b=s[g];if(!h.hasOwnProperty(b)||b===t)continue;let S=e.dbis[b],R=h[b];if(R!=null)try{let L=yI.getIndexedValues(R);if(L)for(let O=0,x=L.length;O<x;O++)S.remove(L[O],a)}catch{wB.warn(`cannot delete from attribute: ${b}, ${R}:${a}`)}}});c.push(E),l.push(a),i.original_records.push(h)}catch(h){wB.warn(h),i.skipped.push(a)}let u=[],d=await Promise.all(c);for(let m=0,p=d.length;m<p;m++)d[m]===!0?i.deleted.push(l[m]):(i.skipped.push(l[m]),u.push(m));let f=0;for(let m=0;m<u.length;m++){let p=u[m];i.original_records.splice(p-f,1),f++}return i.txn_time=yI.getNextMonotonicTime(),i}catch(s){throw s}}o(uee,"deleteRecords");NB.exports={deleteRecords:uee}});var Qm=v((gLe,PB)=>{"use strict";var $u=ce(),dee=CB(),fee=pt(),{getSchemaPath:mee}=St(),pee=zm(),hee=z();PB.exports=Eee;async function Eee(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if($u.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if($u.isEmptyOrZeroLength(e.hash_values)&&!$u.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];$u.isEmpty(l)||e.hash_values.push(l)}}if($u.isEmptyOrZeroLength(e.hash_values))return OB([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if($u.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=mee(e.schema,e.table),i=await fee.openEnvironment(s,e.table),a=await dee.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await pee(e,a)}catch(c){hee.error(`unable to write transaction due to ${c.message}`)}return OB(a.deleted,a.skipped,a.txn_time)}catch(s){throw s}}o(Eee,"lmdbDeleteRecords");function OB(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}o(OB,"createDeleteResponse")});var AI=v((yLe,LB)=>{"use strict";var _ee=(k(),D(Y)),TLe=Cn();function bI(e,t){let r=Object.create(null);if(t.length===1&&_ee.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}o(bI,"parseRow");function gee(e,t,r,n){let s=bI(r,e);n.push(s)}o(gee,"searchAll");function See(e,t,r,n){let s=bI(r,e);n[t]=s}o(See,"searchAllToMap");function Tee(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(Tee,"iterateDBI");function cl(e,t,r,n,s){let i=Object.create(null);i[s]=e;let a;n===s?a=e:(a=t,n!==void 0&&(i[n]=a)),r[0].push(a),r[1].push(i)}o(cl,"pushResults");function yee(e,t,r,n,s,i){t.toString().endsWith(e)&&cl(t,r,n,s,i)}o(yee,"endsWith");function Ree(e,t,r,n,s,i){t.toString().includes(e)&&cl(t,r,n,s,i)}o(Ree,"contains");function bee(e,t,r,n,s,i){t>e&&cl(t,r,n,s,i)}o(bee,"greaterThanCompare");function Aee(e,t,r,n,s,i){t>=e&&cl(t,r,n,s,i)}o(Aee,"greaterThanEqualCompare");function Iee(e,t,r,n,s,i){t<e&&cl(t,r,n,s,i)}o(Iee,"lessThanCompare");function wee(e,t,r,n,s,i){t<=e&&cl(t,r,n,s,i)}o(wee,"lessThanEqualCompare");LB.exports={parseRow:bI,searchAll:gee,searchAllToMap:See,iterateDBI:Tee,endsWith:yee,contains:Ree,greaterThanCompare:bee,greaterThanEqualCompare:Aee,lessThanCompare:Iee,lessThanEqualCompare:wee,pushResults:cl}});var Vu=v((wLe,FB)=>{"use strict";var Fa=pt(),bLe=z(),es=Cn(),Eg=Gt(),er=Kr().LMDB_ERRORS_ENUM,ALe=ce(),Nee=(k(),D(Y)),_g=AI(),{parseRow:Cee}=_g,ILe=require("lmdb"),{OVERFLOW_MARKER:DB,MAX_SEARCH_KEY_LENGTH:Oee}=Eg;function MB(e,t,r,n=!1,s=void 0,i=void 0){return ll(e,t,r,(a,c)=>c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}o(MB,"iterateFullIndex");function Jm(e,t,r,n,s,i=!1,a=void 0,c=void 0,l=!1,u=!1){return ll(e,t,r,(d,f,m,p)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:a,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return p===r?(S.values=!1,f.getRange(S).map(R=>({value:R}))):f.getRange(S)})}o(Jm,"iterateRangeBetween");function ll(e,t,r,n){let s=e.database||e,i=Fa.openDBI(s,r);i[Eg.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Fa.openDBI(s,t);let a;e.database?a=e:(a=e.useReadTransaction(),a.database=e);let c=n(a,i,s,t);return c.transaction=a,e.database||(c.onDone=()=>{a.done()}),c}o(ll,"setupTransaction");function vB(e,t,r,n){let s;return function(i,a){if(typeof i=="string"&&i.endsWith(DB)){if(!s)if(r)s=Fa.openDBI(e,r);else{let l=Fa.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Fa.openDBI(e,l[u]),!s[Eg.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(a,{transaction:t,lazy:!0})[n]}return i}}o(vB,"getOverflowCheck");function Pee(e,t,r,n=!1,s=void 0,i=void 0){if(es.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);return ll(e,t,t,(a,c,l)=>(gg(r),r=Xm(l,r),c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>Cee(u.value,r))))}o(Pee,"searchAll");function Lee(e,t,r,n=!1,s=void 0,i=void 0){if(es.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);gg(r),r=Xm(e.database||e,r);let a=new Map;for(let{key:c,value:l}of MB(e,t,t,n,s,i))a.set(c,_g.parseRow(l,r));return a}o(Lee,"searchAllToMap");function Dee(e,t,r=!1,n=void 0,s=void 0){if(es.validateEnv(e),t===void 0)throw new Error(er.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=MB(e,void 0,t,r,n,s),c=a.transaction,l=vB(c.database,c,void 0,t);for(let{key:u,value:d}of a){let f=l(u,d);i[f]===void 0&&(i[f]=[]),i[f].push(d)}return i}o(Dee,"iterateDBI");function Mee(e,t){if(es.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);return Fa.statDBI(e,t).entryCount}o(Mee,"countAll");function vee(e,t,r,n,s=!1,i=void 0,a=void 0){return ka(e,r,n),ll(e,t,r,(c,l,u,d)=>(n=es.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:a}).map(f=>({key:n,value:f}))))}o(vee,"equals");function Uee(e,t,r){return ka(e,t,r),Fa.openDBI(e,t).getValuesCount(r)}o(Uee,"count");function xee(e,t,r,n,s=!1,i=void 0,a=void 0){return ka(e,r,n),ll(e,null,r,(c,l)=>{n=es.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(a)?a++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:a}).map(m=>{let{key:p}=m;if(p!==f){if(p.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:a}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}o(xee,"startsWith");function Bee(e,t,r,n,s=!1,i=void 0,a=void 0){return UB(e,t,r,n,s,i,a,!0)}o(Bee,"endsWith");function UB(e,t,r,n,s=!1,i=void 0,a=void 0,c=!1){return ka(e,r,n),ll(e,null,r,(l,u,d,f)=>{let m=vB(d,l,f,r);return a=Number.isInteger(a)?a:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(p=>{let h=p.toString();return h.endsWith(DB)?u.getValues(p,{transaction:l}).map(E=>{let g=m(p,E);if(c?g.endsWith(n):g.includes(n))return{key:g,value:E}}).filter(E=>E):(c?h.endsWith(n):h.includes(n))?u[Eg.DBI_DEFINITION_NAME].is_hash_attribute?{key:p,value:p}:u.getValues(p,{transaction:l}).map(E=>({key:p,value:E})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(UB,"contains");function Fee(e,t,r,n,s=!1,i=void 0,a=void 0){ka(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Jm(e,t,r,n,l,s,i,a,!0,!1)}o(Fee,"greaterThan");function kee(e,t,r,n,s=!1,i=void 0,a=void 0){ka(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Jm(e,t,r,n,l,s,i,a,!1,!1)}o(kee,"greaterThanEqual");function Hee(e,t,r,n,s=!1,i=void 0,a=void 0){ka(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Jm(e,t,r,l,n,s,i,a,!1,!0)}o(Hee,"lessThan");function qee(e,t,r,n,s=!1,i=void 0,a=void 0){ka(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Jm(e,t,r,l,n,s,i,a,!1,!1)}o(qee,"lessThanEqual");function Gee(e,t,r,n,s,i=!1,a=void 0,c=void 0){if(es.validateEnv(e),r===void 0)throw new Error(er.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(er.START_VALUE_REQUIRED);if(s===void 0)throw new Error(er.END_VALUE_REQUIRED);if(n=es.convertKeyValueToWrite(n),s=es.convertKeyValueToWrite(s),n>s)throw new Error(er.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Jm(e,t,r,n,s,i,a,c)}o(Gee,"between");function $ee(e,t,r,n){es.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);if(gg(r),r=Xm(s,r),n===void 0)throw new Error(er.ID_REQUIRED);let a=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(a=_g.parseRow(c,r)),a}o($ee,"searchByHash");function Vee(e,t,r){es.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(er.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}o(Vee,"checkHashExists");function Kee(e,t,r,n,s=[]){return BB(e,t,r,n,s),xB(e,t,r,n,s).map(i=>i[1])}o(Kee,"batchSearchByHash");function Yee(e,t,r,n,s=[]){BB(e,t,r,n,s);let i=new Map;for(let[a,c]of xB(e,t,r,n,s))i.set(a,c);return i}o(Yee,"batchSearchByHashToMap");function xB(e,t,r,n,s=[]){return ll(e,t,t,(i,a,c)=>{r=Xm(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,_g.parseRow(d,r)];s.push(u)}).filter(u=>u)})}o(xB,"batchHashSearch");function BB(e,t,r,n,s){if(es.validateEnv(e),t===void 0)throw new Error(er.HASH_ATTRIBUTE_REQUIRED);if(gg(r),n==null)throw new Error(er.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(er.IDS_MUST_BE_ITERABLE)}o(BB,"initializeBatchSearchByHash");function gg(e){if(!Array.isArray(e))throw e===void 0?new Error(er.FETCH_ATTRIBUTES_REQUIRED):new Error(er.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(gg,"validateFetchAttributes");function ka(e,t,r){if(es.validateEnv(e),t===void 0)throw new Error(er.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(er.SEARCH_VALUE_REQUIRED);if(r?.length>Oee)throw new Error(er.SEARCH_VALUE_TOO_LARGE)}o(ka,"validateComparisonFunctions");function Xm(e,t){return t.length===1&&Nee.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Fa.listDBIs(e)),t}o(Xm,"setGetWholeRowAttributes");FB.exports={searchAll:Pee,searchAllToMap:Lee,count:Uee,countAll:Mee,equals:vee,startsWith:xee,endsWith:Bee,contains:UB,searchByHash:$ee,setGetWholeRowAttributes:Xm,batchSearchByHash:Kee,batchSearchByHashToMap:Yee,checkHashExists:Vee,iterateDBI:Dee,greaterThan:Fee,greaterThanEqual:kee,lessThan:Hee,lessThanEqual:qee,between:Gee}});var Ku=v((CLe,$B)=>{var kB=require("lodash"),HB=ot(),Ye=require("joi"),Wee=ce(),{hdbSchemaTable:Zm,checkValidTable:qB,hdbTable:GB,hdbDatabase:Sg}=ki(),{handleHDBError:zee,hdbErrors:jee}=Ee(),{getDatabases:Qee}=(Ne(),D(ft)),{HTTP_STATUS_CODES:Jee}=jee,Xee=Ye.object({database:Sg,schema:Sg,table:GB,attribute:Zm,value:Ye.any().required(),get_attributes:Ye.array().min(1).items(Ye.alternatives(Zm,Ye.object())).optional(),desc:Ye.bool(),limit:Ye.number().integer().min(1),offset:Ye.number().integer().min(0)}),Zee=Ye.object({database:Sg,schema:Sg,table:GB,operator:Ye.string().valid("and","or").default("and").lowercase(),offset:Ye.number().integer().min(0),limit:Ye.number().integer().min(1),get_attributes:Ye.array().min(1).items(Ye.alternatives(Zm,Ye.object())).optional(),sort:Ye.object({attribute:Ye.alternatives(Zm,Ye.array().min(1)),descending:Ye.bool().optional()}).optional(),conditions:Ye.array().min(1).items(Ye.alternatives(Ye.object({operator:Ye.string().valid("and","or").default("and").lowercase(),conditions:Ye.array()}),Ye.object({attribute:Ye.alternatives(Zm,Ye.array().min(1)),comparator:Ye.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),value:Ye.when("comparator",{switch:[{is:"equals",then:Ye.any()},{is:"between",then:Ye.array().items(Ye.alternatives([Ye.string(),Ye.number()])).length(2)}],otherwise:Ye.alternatives(Ye.string(),Ye.number())}).required()}))).required()});$B.exports=function(e,t){let r=null;switch(t){case"value":r=HB.validateBySchema(e,Xee);break;case"hashes":let i=function(a){s?s+=". "+a:s=a};var n=i;o(i,"addError");let s;i(qB("database",e.schema)),i(qB("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(a=>typeof a=="string"||typeof a=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=HB.validateBySchema(e,Zee);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Wee.checkGlobalSchemaTable(e.schema,e.table);if(s)return zee(new Error,s,Jee.NOT_FOUND);let a=Qee()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.attribute);let l=o(d=>{for(let f of d.conditions)f.conditions?l(f):c.push(f.attribute)},"addConditions");t==="conditions"&&l(e);let u=kB.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!kB.some(a,f=>f===d||f.attribute===d||f.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var II=v((PLe,VB)=>{"use strict";var ete=pt(),tte=Ku(),{getSchemaPath:rte}=St();VB.exports=nte;function nte(e){let t=tte(e,"hashes");if(t)throw t;let r=rte(e.schema,e.table);return ete.openEnvironment(r,e.table)}o(nte,"initialize")});var wI=v((DLe,KB)=>{"use strict";var ste=Vu(),ite=II();KB.exports=ote;async function ote(e){let t=await ite(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return ste.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(ote,"lmdbGetDataByHash")});var Yu=v((vLe,YB)=>{"use strict";var NI=class{static{o(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};YB.exports=NI});var zB=v((BLe,WB)=>{"use strict";var xLe=Yu(),ate=Vu(),cte=II();WB.exports=lte;async function lte(e){let t=await cte(e),r=global.hdb_schema[e.schema][e.table];return ate.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(lte,"lmdbSearchByHash")});var ai=v((kLe,jB)=>{"use strict";var CI=class{static{o(this,"SearchObject")}constructor(t,r,n,s,i,a,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.attribute=n,this.value=s,this.hash_attribute=i,this.get_attributes=a,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};jB.exports=CI});var Tg=v((qLe,tF)=>{"use strict";var ln=Vu(),ute=pt(),dte=ce(),We=Gt(),ul=(k(),D(Y)),fte=qi(),QB=Kr().LMDB_ERRORS_ENUM,{getSchemaPath:mte}=St(),Bo=ul.SEARCH_WILDCARDS;async function pte(e,t,r){let n;e.schema===ul.SYSTEM_SCHEMA_NAME?n=fte[e.table]:n=global.hdb_schema[e.schema][e.table];let s=eF(e,n.hash_attribute,r,t);return XB(e,s,n.hash_attribute,r)}o(pte,"prepSearch");async function XB(e,t,r,n){let s=mte(e.schema,e.table),i=await ute.openEnvironment(s,e.table),a=ZB(i,e,t,r),c=a.transaction||i;if([We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,We.SEARCH_TYPES.SEARCH_ALL,We.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(hte(e,r)===!1){let d=e.attribute;if(d===r)return n?JB(a,()=>!0):a.map(m=>({[r]:m.key}));let f=o(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?JB(a,f):a.map(f)}let u=e.attribute===r?a.map(d=>d.key):a.map(d=>d.value);return n===!0?ln.batchSearchByHashToMap(c,r,e.get_attributes,u):ln.batchSearchByHash(c,r,e.get_attributes,u)}o(XB,"executeSearch");function ZB(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:a,limit:c,offset:l}=t;switch(a=typeof a=="boolean"?a:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case We.SEARCH_TYPES.EQUALS:s=ln.equals(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.CONTAINS:s=ln.contains(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.ENDS_WITH:case We.SEARCH_TYPES._ENDS_WITH:s=ln.endsWith(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.STARTS_WITH:case We.SEARCH_TYPES._STARTS_WITH:s=ln.startsWith(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return ln.batchSearchByHash(e,t.attribute,t.get_attributes,[t.value]);case We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return ln.batchSearchByHashToMap(e,t.attribute,t.get_attributes,[t.value]);case We.SEARCH_TYPES.SEARCH_ALL:return ln.searchAll(e,n,t.get_attributes,a,c,l);case We.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return ln.searchAllToMap(e,n,t.get_attributes,a,c,l);case We.SEARCH_TYPES.BETWEEN:s=ln.between(e,i,t.attribute,t.value,t.end_value,a,c,l);break;case We.SEARCH_TYPES.GREATER_THAN:case We.SEARCH_TYPES._GREATER_THAN:s=ln.greaterThan(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.GREATER_THAN_EQUAL:case We.SEARCH_TYPES._GREATER_THAN_EQUAL:s=ln.greaterThanEqual(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.LESS_THAN:case We.SEARCH_TYPES._LESS_THAN:s=ln.lessThan(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.LESS_THAN_EQUAL:case We.SEARCH_TYPES._LESS_THAN_EQUAL:s=ln.lessThanEqual(e,i,t.attribute,t.value,a,c,l);break;default:return Object.create(null)}return s}o(ZB,"searchByType");function JB(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}o(JB,"createMapFromIterable");function hte(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}o(hte,"checkToFetchMore");function eF(e,t,r,n){if(dte.isEmpty(n)){let s=e.value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),a=s.charAt(s.length-1),c=!1;if(e.attribute===t&&(c=!0),Bo.indexOf(s)>-1)return r===!0?We.SEARCH_TYPES.SEARCH_ALL_TO_MAP:We.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Bo[0])<0&&s.indexOf(Bo[1])<0)return c===!0?r===!0?We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:We.SEARCH_TYPES.EQUALS;if(Bo.indexOf(i)>=0&&Bo.indexOf(a)>=0)return e.value=e.value.slice(1,-1),We.SEARCH_TYPES.CONTAINS;if(Bo.indexOf(i)>=0)return e.value=e.value.substr(1),We.SEARCH_TYPES.ENDS_WITH;if(Bo.indexOf(a)>=0)return e.value=e.value.slice(0,-1),We.SEARCH_TYPES.STARTS_WITH;if(s.includes(Bo[0])||s.includes(Bo[1]))return We.SEARCH_TYPES.EQUALS;throw new Error(QB.UNKNOWN_SEARCH_TYPE)}else switch(n){case ul.VALUE_SEARCH_COMPARATORS.BETWEEN:return We.SEARCH_TYPES.BETWEEN;case ul.VALUE_SEARCH_COMPARATORS.GREATER:return We.SEARCH_TYPES.GREATER_THAN;case ul.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return We.SEARCH_TYPES.GREATER_THAN_EQUAL;case ul.VALUE_SEARCH_COMPARATORS.LESS:return We.SEARCH_TYPES.LESS_THAN;case ul.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return We.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(QB.UNKNOWN_SEARCH_TYPE)}}o(eF,"createSearchTypeFromSearchObject");tF.exports={executeSearch:XB,createSearchTypeFromSearchObject:eF,prepSearch:pte,searchByType:ZB}});var nF=v((VLe,rF)=>{"use strict";var $Le=ai(),Ete=Ku(),_te=ce(),gte=(k(),D(Y)),Ste=Tg();rF.exports=Tte;function Tte(e,t){if(!_te.isEmpty(t)&>e.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Ete(e,"value");if(n)throw n;return Ste.prepSearch(e,t,!0)}o(Tte,"lmdbGetDataByValue")});var ep=v((WLe,sF)=>{"use strict";var YLe=ai(),yte=Ku(),Rte=ce(),bte=(k(),D(Y)),Ate=Tg();sF.exports=Ite;async function Ite(e,t){if(!Rte.isEmpty(t)&&bte.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=yte(e,"value");if(n)throw n;return Ate.prepSearch(e,t,!1)}o(Ite,"lmdbSearchByValue")});var oF=v((QLe,iF)=>{"use strict";var jLe=Gt(),OI=class{static{o(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,a=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=a,this.conditions=s,this.operator=c}},PI=class{static{o(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},LI=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};iF.exports={SearchByConditionsObject:OI,SearchCondition:PI,SortAttribute:LI}});var dF=v((tDe,uF)=>{"use strict";var{SearchByConditionsObject:XLe,SearchCondition:ZLe}=oF(),wte=ai(),Nte=Ku(),DI=Vu(),yg=Gt(),{Resource:eDe}=(va(),D(i0)),lF=Tg(),Cte=AI(),Ote=require("lodash"),{getSchemaPath:Pte}=St(),aF=pt(),{handleHDBError:Lte,hdbErrors:Dte}=Ee(),{HTTP_STATUS_CODES:Mte}=Dte,vte=1e8;uF.exports=Ute;async function Ute(e){let t=Nte(e,"conditions");if(t)throw Lte(t,t.message,Mte.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=Pte(e.schema,e.table),n=await aF.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)aF.openDBI(n,u.attribute);let i=Ote.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===yg.SEARCH_TYPES.EQUALS?u.estimated_count=DI.count(n,u.attribute,u.value):d===yg.SEARCH_TYPES.CONTAINS||d===yg.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=vte}return u.estimated_count}),a=n.useReadTransaction();a.database=n;let c=await cF(a,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(lF.filterByType),f=d.length,m=DI.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(p=>u.get(p,{transaction:a,lazy:!0})),f>0&&(l=l.filter(p=>{for(let h=0;h<f;h++)if(!d[h](p))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(p=>Cte.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await cF(a,e,m,s.hash_attribute);c=c.concat(p)}let u=new Set,d=e.offset||0;c=c.filter(f=>u.has(f)?!1:(u.add(f),!0)).slice(d,e.limit&&e.limit+d),l=DI.batchSearchByHash(a,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{a.done()},l}o(Ute,"lmdbSearchByConditions");async function cF(e,t,r,n){let s=new wte(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.comparator;return s.attribute=r.attribute,i===yg.SEARCH_TYPES.BETWEEN?(s.value=r.value[0],s.end_value=r.value[1]):s.value=r.value,lF.searchByType(e,s,i,n).map(a=>a.value)}o(cF,"executeConditionSearch")});var Wu=v((nDe,fF)=>{"use strict";var xte=(k(),D(Y)).OPERATIONS_ENUM,MI=class{static{o(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=xte.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};fF.exports=MI});var vI=v((iDe,TF)=>{"use strict";var EF=ai(),_F=Wu(),gF=ep(),SF=Qm(),Un=(k(),D(Y)),mF=ce(),pF=pt(),{getTransactionAuditStorePath:Bte,getSchemaPath:Fte}=St(),hF=z();TF.exports=kte;async function kte(e){try{if(mF.isEmpty(global.hdb_schema[e.schema])||mF.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Hte(e),await qte(e);let t=Fte(e.schema,e.table);try{await pF.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")hF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Bte(e.schema,e.table);await pF.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")hF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(kte,"lmdbDropTable");async function Hte(e){let t=new EF(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await gF(t)),n=[];for(let i=0;i<r.length;i++){let a=r[i];n.push(a.id)}if(n.length===0)return;let s=new _F(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await SF(s)}o(Hte,"deleteAttributesFromSystem");async function qte(e){let t=new EF(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await gF(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(n=a)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new _F(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await SF(s)}catch(i){throw i}}o(qte,"dropTableFromSystem")});var RF=v((aDe,yF)=>{"use strict";var Gte=require("fs-extra"),$te=ai(),Vte=Yu(),Kte=Wu(),Yte=vI(),Wte=Qm(),zte=wI(),jte=ep(),Fo=(k(),D(Y)),{getSchemaPath:Qte}=St(),{handleHDBError:Jte,hdbErrors:Xte}=Ee(),{HDB_ERROR_MSGS:Zte,HTTP_STATUS_CODES:ere}=Xte;yF.exports=tre;async function tre(e){let t;try{t=await rre(e.schema);let r=new $te(Fo.SYSTEM_SCHEMA_NAME,Fo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Fo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Fo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await jte(r));for(let a=0;a<n.length;a++){let c={schema:t,table:n[a].name};try{await Yte(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new Kte(Fo.SYSTEM_SCHEMA_NAME,Fo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Wte(s);let i=Qte(t);await Gte.remove(i)}catch(r){throw r}}o(tre,"lmdbDropSchema");async function rre(e){let t=new Vte(Fo.SYSTEM_SCHEMA_NAME,Fo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Fo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await zte(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw Jte(new Error,Zte.SCHEMA_NOT_FOUND(e),ere.NOT_FOUND,void 0,void 0,!0);return n}o(rre,"validateDropSchema")});var zu=v((lDe,bF)=>{"use strict";var UI=class{static{o(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};bF.exports=UI});var BI=v((fDe,AF)=>{"use strict";var nre=require("fs-extra"),Rg=pt(),{getTransactionAuditStorePath:sre}=St(),xI=Gt(),dDe=zu();AF.exports=ire;async function ire(e){let t;try{let r=sre(e.schema,e.table);await nre.mkdirp(r),t=await Rg.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{Rg.createDBI(t,xI.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Rg.createDBI(t,xI.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Rg.createDBI(t,xI.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}o(ire,"createTransactionsAuditEnvironment")});var NF=v((hDe,wF)=>{"use strict";var FI=(k(),D(Y)),IF=pt(),ore=ol(),{getSystemSchemaPath:are,getSchemaPath:cre}=St(),pDe=qi(),lre=mg(),kI=fg(),ure=z(),dre=BI();wF.exports=fre;async function fre(e,t){let r=cre(t.schema,t.table),n=new kI(t.schema,t.table,FI.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new kI(t.schema,t.table,FI.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new kI(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await IF.createEnvironment(r,t.table),e!==void 0){let a=await IF.openEnvironment(are(),FI.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await ore.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbTableAttributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await HI(n),await HI(s),await HI(i)}await dre(t)}catch(a){throw a}}o(fre,"lmdbCreateTable");async function HI(e){try{await lre(e)}catch(t){ure.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(HI,"createAttribute")});var OF=v((_De,CF)=>{"use strict";var mre=Wm(),pre=dm(),hre=pg(),tp=(k(),D(Y)),Ere=ol().updateRecords,_re=pt(),{getSchemaPath:gre}=St(),Sre=zm(),Tre=z();CF.exports=yre;async function yre(e){try{let{schemaTable:t,attributes:r}=mre(e);pre(e,r,t.hash_attribute),e.schema!==tp.SYSTEM_SCHEMA_NAME&&(r.includes(tp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(tp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(tp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(tp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await hre(e.hdb_auth_header,t,r),s=gre(e.schema,e.table),i=await _re.openEnvironment(s,e.table),a=await Ere(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Sre(e,a)}catch(c){Tre.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(yre,"lmdbUpdateRecords")});var LF=v((SDe,PF)=>{"use strict";var Rre=(k(),D(Y)).OPERATIONS_ENUM,qI=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Rre.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};PF.exports=qI});var MF=v((RDe,DF)=>{"use strict";var yDe=LF(),bre=Wm(),Are=dm(),Ire=pg(),rp=(k(),D(Y)),wre=ol().upsertRecords,Nre=pt(),{getSchemaPath:Cre}=St(),Ore=zm(),Pre=z(),{handleHDBError:Lre,hdbErrors:Dre}=Ee();DF.exports=Mre;async function Mre(e){let t;try{t=bre(e)}catch(l){throw Lre(l,l.message,Dre.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;Are(e,n,r.hash_attribute),e.schema!==rp.SYSTEM_SCHEMA_NAME&&(n.includes(rp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(rp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(rp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(rp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Ire(e.hdb_auth_header,r,n),i=Cre(e.schema,e.table),a=await Nre.openEnvironment(i,e.table),c=await wre(a,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await Ore(e,c)}catch(l){Pre.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schemaTable:r,new_attributes:s,txn_time:c.txn_time}}o(Mre,"lmdbUpsertRecords")});var UF=v((ADe,vF)=>{"use strict";var GI=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};vF.exports=GI});var BF=v((wDe,xF)=>{"use strict";var $I=class{static{o(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};xF.exports=$I});var HF=v((ODe,kF)=>{"use strict";var VI=pt(),{getTransactionAuditStorePath:vre}=St(),CDe=UF(),np=Gt(),Ure=ce(),FF=BF(),xre=require("util").promisify,Bre=xre(setTimeout),Fre=1e4,kre=100;kF.exports=Hre;async function Hre(e){let t=vre(e.schema,e.table),r=await VI.openEnvironment(t,e.table,!0),n=VI.listDBIs(r);VI.initializeDBIs(r,np.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new FF;do s=await qre(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 Bre(kre);while(s.transactions_deleted>0);return i}o(Hre,"deleteAuditLogsBefore");async function qre(e,t){let r=new FF;try{let n=e.dbis[np.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:a}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=a[np.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Ure.isEmpty(c)||(s=e.dbis[np.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<a.hash_values.length;l++)s=e.dbis[np.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Fre)break}return await s,r}catch(n){throw n}}o(qre,"deleteTransactions")});var GF=v((LDe,qF)=>{"use strict";var KI=class{static{o(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};qF.exports=KI});var VF=v((vDe,$F)=>{"use strict";var Gre=ai(),$re=Wu(),MDe=GF(),Gi=(k(),D(Y)),Vre=ce(),YI=pt(),Kre=qi(),Yre=ep(),Wre=Qm(),{getSchemaPath:zre}=St();$F.exports=jre;async function jre(e,t=!0){let r;e.schema===Gi.SYSTEM_SCHEMA_NAME?r=Kre[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await Jre(e),s=zre(e.schema,e.table),i=await YI.openEnvironment(s,e.table);return t===!0&&await Qre(e,i,r.hash_attribute),YI.dropDBI(i,e.attribute),n}o(jre,"lmdbDropAttribute");async function Qre(e,t,r){let n=YI.openDBI(t,r),s,i=e.attribute;for(let{key:a,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(a,u,l)}await s}o(Qre,"removeAttributeFromAllObjects");async function Jre(e){let t=new Gre(Gi.SYSTEM_SCHEMA_NAME,Gi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await Yre(t)).filter(a=>a[Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Vre.isEmptyOrZeroLength(n))throw new Error(`Attribute '${drop_attribute_obj.attribute}' was not found in '${drop_attribute_obj.schema}.${drop_attribute_obj.table}'`);let s=n.map(a=>a[Gi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new $re(Gi.SYSTEM_SCHEMA_NAME,Gi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Wre(i)}o(Jre,"dropAttributeFromSystem")});var QF=v((BDe,jF)=>{"use strict";var WI=pt(),ju=Gt(),xDe=Cn(),zI=(k(),D(Y)),KF=ce(),{getTransactionAuditStorePath:Xre}=St(),Zre=Vu(),bg=qu(),ene=z();jF.exports=tne;async function tne(e){let t=Xre(e.schema,e.table),r=await WI.openEnvironment(t,e.table,!0),n=WI.listDBIs(r);WI.initializeDBIs(r,ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case zI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return YF(r,e.search_values);case zI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,nne(r,e.search_values,s);case zI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return rne(r,e.search_values);default:return YF(r)}}o(tne,"readAuditLog");function YF(e,t=[0,Date.now()]){KF.isEmpty(t[0])&&(t[0]=0),KF.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ju.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 bg,s))}o(YF,"searchTransactionsByTimestamp");function rne(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let a of e.dbis[ju.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(a);r.set(s,zF(e,i))}return Object.fromEntries(r)}o(rne,"searchTransactionsByUsername");function nne(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=Zre.equals(e,ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ju.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=zF(e,s),a=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);WF(l,"records",r,d,a),WF(l,"original_records",r,d,a)}return Object.fromEntries(a)}o(nne,"searchTransactionsByHashValues");function WF(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let c=e[t][a],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let f=new bg(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new bg(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}o(WF,"loopRecords");function zF(e,t){let r=[];try{let n=e.dbis[ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let a=Object.assign(new bg,i);r.push(a)}}catch(i){ene.warn(i)}return r}catch(n){throw n}}o(zF,"batchSearchTransactions")});var XF=v((qDe,JF)=>{"use strict";var{getSchemaPath:kDe}=St(),HDe=pt(),{database:sne}=(Ne(),D(ft));JF.exports={writeTransaction:ine};async function ine(e,t,r){return sne({database:e,table:t}).transaction(r)}o(ine,"writeTransaction")});var rk=v(($De,tk)=>{"use strict";var{getSchemaPath:ZF}=St(),ek=pt();tk.exports={flush:one,resetReadTxn:ane};async function one(e,t){return(await ek.openEnvironment(ZF(e,t),t.toString())).flushed}o(one,"flush");async function ane(e,t){try{(await ek.openEnvironment(ZF(e,t),t.toString())).resetReadTxn()}catch{}}o(ane,"resetReadTxn")});var ok=v((KDe,ik)=>{"use strict";var{Readable:cne}=require("stream"),{getDatabases:lne}=(Ne(),D(ft)),{readSync:une,openSync:dne,createReadStream:nk}=require("fs"),{open:fne}=require("lmdb"),{OpenDBIObject:sk}=Gm(),mne=$m(),{AUDIT_STORE_OPTIONS:pne}=(Ro(),D(dx)),{INTERNAL_DBIS_NAME:hne,AUDIT_STORE_NAME:Ene}=Gt();ik.exports=gne;var jI=32768,_ne=100;async function gne(e){let t=e.database||e.schema||"data",r=lne()[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=fne({noSync:!0,maxDbs:mne.MAX_DBS}),m,p=f.openDB(hne,new sk(!1)),h=d.useReadTransaction(),E=0,g=o(async function(S,R){R.encoding="binary",R.encoder=void 0;let L=f.openDB(S,R),O=d.openDB(S,R);for(let{key:x,version:j,value:H}of O.getRange({start:null,transaction:h,versions:O.useVersions}))m=L.put(x,H,j),E++%_ne===0&&(await new Promise(F=>setTimeout(F,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:R}of d.getRange({transaction:h,start:!1}))if(s.some(L=>S.startsWith?.(L+"/"))){p.put(S,R);let[,L]=S.split("/"),O=!L,x=new sk(!O,O);await g(S,x)}e.include_audit&&await g(Ene,{...pne}),await m;let b=nk(f.path);return b.headers=l(),b.on("close",()=>{h.done(),f.close()}),b}let a=r[Object.keys(r)[0]].primaryStore,c=dne(a.path);return a.transaction(()=>{let u=Buffer.alloc(jI);une(c,u,0,jI),a.resetReadTxn();let d=a.useReadTransaction();d.renew();let f=nk(null,{fd:c,start:jI}),m=new cne.from((async function*(){yield u;for await(let p of f)d.openTimer&&(d.openTimer=0),yield p;d.done()})());return m.headers=l(),m});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}o(gne,"getBackup")});var lk=v((WDe,ck)=>{"use strict";var Sne=z(),{handleHDBError:Tne}=Ee(),yne=k0(),Rne=mg(),bne=SI(),Ane=RB(),Ine=Qm(),wne=wI(),Nne=zB(),Cne=nF(),One=ep(),Pne=dF(),Lne=RF(),Dne=NF(),Mne=OF(),vne=MF(),Une=HF(),xne=vI(),Bne=VF(),Fne=QF(),kne=XF(),ak=rk(),Hne=ok(),QI=class extends yne{static{o(this,"LMDBBridge")}async searchByConditions(t){return Pne(t)}async getDataByHash(t){return await wne(t)}async searchByHash(t){return await Nne(t)}async getDataByValue(t,r){return await Cne(t,r)}async searchByValue(t){return await One(t)}async createSchema(t){return await Ane(t)}async dropSchema(t){return await Lne(t)}async createTable(t,r){return await Dne(t,r)}async dropTable(t){return await xne(t)}async createAttribute(t){return await Rne(t)}async createRecords(t){return await bne(t)}async updateRecords(t){return await Mne(t)}async upsertRecords(t){try{return await vne(t)}catch(r){throw Tne(r,null,null,Sne.ERR,r)}}async deleteRecords(t){return await Ine(t)}async dropAttribute(t){return await Bne(t)}async deleteAuditLogsBefore(t){return await Une(t)}async readAuditLog(t){return await Fne(t)}writeTransaction(t,r,n){return kne.writeTransaction(t,r,n)}flush(t,r){return ak.flush(t,r)}resetReadTxn(t,r){return ak.resetReadTxn(t,r)}getBackup(t){return Hne(t)}};ck.exports=QI});function xn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function ip(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=o(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new ts.ClientError(`${u} must be a string, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"ID":d=o(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(p=>typeof p=="string")||m==null&&l.nullable!==!1))throw new ts.ClientError(`${u} must be a string, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Float":case"Number":d=o(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="number"||m==null&&l.nullable!==!1))throw new ts.ClientError(`${u} must be a number, attempt to assign ${p}`);xn(this)[u]=m},"set");break;case"Int":d=o(function(m){let p=m?.__op__?m.value:m;if(!(p>>0===p||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs((p>>0)-p)<=1)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ts.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Long":d=o(function(m){let p=m?.__op__?m.value:m;if(!(Math.round(p)===m&&Math.abs(p)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs(p)<=9007199254740992)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ts.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"BigInt":d=o(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="bigint"||m==null&&l.nullable!==!1))if(typeof p=="string"||typeof p=="number")p=BigInt(p),m?.__op__?m.value=p:m=p;else throw new ts.ClientError(`${u} must be a number, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Boolean":d=o(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new ts.ClientError(`${u} must be a boolean, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Date":d=o(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new ts.ClientError(`${u} must be a Date, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Bytes":d=o(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new ts.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Blob":d=o(function(m){if(!(m instanceof bs||m==null&&l.nullable!==!1))throw new ts.ClientError(`${u} must be a Blob, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Any":case void 0:d=o(function(m){xn(this)[u]=m},"set");break;default:d=o(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new ts.ClientError(`${u} must be an object, attempt to assign ${m}`);xn(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let h=m[u];if(h?.__op__){let E=this.getRecord()?.[u];return h.update(E)}return h}let p=this.getRecord()?.[u];if(p&&typeof p=="object"){let h=JI(p,l);if(h)return m||this._setChanges(m=Object.create(null)),m[u]=h}return p},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}a("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),a("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new ts.ClientError("Can not add a property to a sealed table schema");xn(this)[l]=u}),a("deleteProperty",function(l){xn(this)[l]=void 0}),a("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let p=u[f];m=m.update(p)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||a("get",n.getProperty),n.delete||a("delete",n.deleteProperty),n.then||a("then",null);function a(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}o(a,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?fk:dk);break}c=l}while(c&&c!==dk&&c!==fk)}function mk(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(uk[t])return uk[t];let n=r.getChanges?.();if(n&&t in n)return n[t];let s=r.getRecord?.()?.[t];if(s&&typeof s=="object"){let i=JI(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function qne(e,t,r,n){if(typeof t=="string"){let s=n.getChanges?.();s||(s={},n._setChanges(s)),s[t]=r}else Object.defineProperty(n,t,{value:r,configurable:!0,writable:!0});return!0}function JI(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends fl{static{o(this,"TrackedObject")}},ip(r,t)),new r(e)):new fl(e);case Array:let n=new Ig(e.length,e);for(let s=0,i=e.length;s<i;s++){let a=e[s];a&&typeof a=="object"&&(a=JI(a,t?.elements)),n[s]=a}return n;default:return e}}function wg(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let a=r[s];i=i.update(a)}else i=wg(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=e.getRecord?{...e.getRecord()}:{}),Object.assign(r,e)),r||e.getRecord?.()||e}function ml(e,t=e.getChanges?.()){let r;if(!e)return t;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let a=ml(i);a!==i&&r===e&&(r=e.slice(0)),i=a}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e.getRecord?e.getRecord():e});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=kb[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=ml(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)Gne.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function Ag(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[dl]||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(Ag(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(Ag(s))return!0}else return!0}else return!0}}return!1}var ts,uk,dk,fk,fl,Gne,dl,Ig,sp,XI=oe(()=>{ts=w(Ee());g_();As();o(xn,"getChanges");o(ip,"assignTrackedAccessors");uk=Object.prototype,dk=new Proxy({},{get:mk}),fk=new Proxy({},{get:mk,set:qne});o(mk,"getProxiedProperty");o(qne,"setProxiedProperty");o(JI,"trackObject");fl=class{static{o(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};ip(fl,{},!0);o(wg,"collapseData");Gne=Object.prototype.hasOwnProperty;o(ml,"updateAndFreeze");o(Ag,"hasChanges");dl=Symbol.for("has-array-changes"),Ig=class extends Array{static{o(this,"TrackedArray")}#e;[dl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[dl]=!0,super.splice(...t)}push(...t){return this[dl]=!0,super.push(...t)}pop(){return this[dl]=!0,super.pop()}unshift(...t){return this[dl]=!0,super.unshift(...t)}shift(){return this[dl]=!0,super.shift()}};Ig.prototype.constructor=Array;sp=class{static{o(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var yk={};be(yk,{ResourceBridge:()=>tw});function rw({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function pk(e,t){let r=$i(e),n=rw(e,r);if(!r)throw new ci.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},a;Tt(i,()=>new Promise(u=>a=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&wg(d)}catch(f){d={message:(0,Tk.errorToString)(f)}}return t?{value:{key:u,value:d}}:{value:d}}else return a(),{done:!0}},return(u){return a(),{value:u,done:!0}},throw(u){return a(),{done:!0}}}}}}function $i(e){let t=e.database||e.schema||Vne,r=at()[t];if(!r)throw(0,ci.handleHDBError)(new Error,$ne.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function hk(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*Ek(e,t,r,n){let s,i=0;for await(let a of e.getHistory(t,r)){let c=a.operation??a.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=a;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:a.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var _k,Ng,ci,gk,ZI,ew,Sk,Tk,$ne,Vne,Kne,Yne,tw,Rk=oe(()=>{_k=w(lk()),Ng=w(Ku()),ci=w(Ee());Ne();gk=w(Wm());k();ZI=w(xo()),ew=w(Zn()),Sk=w(ce());Na();XI();Tk=w(z()),{HDB_ERROR_MSGS:$ne}=ci.hdbErrors,Vne="data",Kne=1e4,Yne=10,tw=class extends _k.default{static{o(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=$i(t);if(!r)throw new ci.ClientError(`Table ${t.table} not found`);t.conditions=t.conditions.map(n);function n(i){if("conditions"in i&&i.conditions)return i.conditions=i.conditions.map(n),i;{let a=i;return{attribute:a.attribute??a.search_attribute,comparator:a.comparator??a.search_type,value:a.value!==void 0?a.value:a.search_value}}}o(n,"mapCondition");let s=(0,Ng.default)(t,"conditions");if(s)throw(0,ci.handleHDBError)(s,s.message,400,void 0,void 0,!0);return r.search({conditions:t.conditions,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:rw(t,r),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let a of n)a.is_primary_key?(a.isPrimaryKey=!0,delete a.is_primary_key):a.name===i&&i&&(a.isPrimaryKey=!0);else{if(!i)throw new ci.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Xe({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await $i(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=$i(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=o((a,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(a,l,()=>r.primaryStore.put(a,c,l)).then(u=>{if(!u){let{value:d,version:f}=r.primaryStore.getEntry(a);return i(a,d,f)}})),"deleteRecord");for(let{key:a,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(a,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){return $i(t).dropTable()}createSchema(t){return Qu({database:t.schema,table:null}),ZI.signalSchemaChange(new ew.SchemaEventMsg(process.pid,V.CREATE_SCHEMA,t.schema))}async dropSchema(t){await nw(t.schema),ZI.signalSchemaChange(new ew.SchemaEventMsg(process.pid,V.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,this.upsertRecords(t)}async upsertRecords(t){let{schemaTable:r,attributes:n}=(0,gk.default)(t),s,i=at()[t.schema][t.table],a={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(a.replicateTo=t.replicateTo),t.replicatedConfirmation&&(a.replicatedConfirmation=t.replicatedConfirmation),Tt(a,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(m=>m.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let f=d[i.primaryKey],m=f!=null&&await i.get(f,a);if(t.requires_existing&&!m||t.requires_no_existing&&m){u.push(d[i.primaryKey]);continue}m&&(m=wg(m));for(let p in d)if(Object.prototype.hasOwnProperty.call(d,p)){let h=d[p];if(typeof h=="function")try{let E=h([[m]]);Array.isArray(E)&&(h=E[0].func_val,d[p]=h)}catch(E){throw E.message+="Trying to set key "+p+" on object"+JSON.stringify(d),E}}if(m)for(let p in m)Object.prototype.hasOwnProperty.call(d,p)||(d[p]=m[p]);await(f==null?i.create(d,a):i.put(d,a)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=at()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),Tt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),a=[],c=[];for(let l of i)await r.delete(l,n)?a.push(l):c.push(l);return hk(a,c,s.timestamp)})}async deleteRecordsBefore(t){let r=at()[t.schema][t.table];if(!r.createdTimeProperty)throw new ci.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:t_.LESS}]}),s=!1,i=[],a=[],c=0,l=[],u=o(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),a.push(...d.skipped_hashes),await(0,Sk.asyncSetTimeout)(Yne),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%Kne===0&&await u();return l.length>0&&await u(),s?hk(i,a,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Ng.default)(t,"hashes");if(r)throw r;return pk(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of pk(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&bb[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,Ng.default)(t,"value");if(n)throw n;let s=$i(t);if(!s)throw new ci.ClientError(`Table ${t.table} not found`);let i=t.value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===t_.BETWEEN&&(i=[i,t.end_value]);let a=i==="*"?[]:[{attribute:t.attribute,value:i,comparator:r}];return s.search({conditions:a,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:rw(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=$i(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){$i({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return $i(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=$i(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 a=i.operation??i.type;return a==="put"&&(a="upsert"),{operation:a,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case r_.USERNAME:{let s=t.search_values;for await(let i of Ek(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return Ek(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};o(rw,"getSelect");o(pk,"getRecords");o($i,"getTable");o(hk,"createDeleteResponse");o(Ek,"groupRecordsInHistory")});var rs=v((sMe,bk)=>{"use strict";var{ResourceBridge:Wne}=(Rk(),D(yk)),zne=le();zne.initSync();var Cg;function jne(){return Cg||(Cg=new Wne,Cg)}o(jne,"getBridge");bk.exports=jne()});var li=v((oMe,wk)=>{var Qne=qi(),{promisify:Jne}=require("util"),{getDatabases:Ik}=(Ne(),D(ft));wk.exports={setSchemaDataToGlobal:Ak,getTableSchema:Xne,getSystemSchema:Zne,setSchemaDataToGlobalAsync:Jne(Ak)};function Ak(e){global.hdb_schema=Ik(),e&&e()}o(Ak,"setSchemaDataToGlobal");function Xne(e,t,r){let n=Ik()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}o(Xne,"getTableSchema");function Zne(){return Qne}o(Zne,"getSystemSchema")});var un=v((cMe,Pk)=>{"use strict";var Pg=tI(),Qr=ce(),ese=require("util"),Lg=rs(),tse=li(),Nk=z(),{handleHDBError:pl,hdbErrors:rse}=Ee(),{HTTP_STATUS_CODES:hl}=rse,nse=ese.promisify(tse.getTableSchema),sse="updated",Ck="inserted",Ok="upserted";Pk.exports={insert:ose,update:ase,upsert:cse,validation:ise,flush:lse};async function ise(e){if(Qr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Qr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Qr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await nse(e.schema,e.table),r=Pg(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(c=>{if(a&&Qr.isEmptyOrZeroLength(c[n]))throw Nk.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Qr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw Nk.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Qr.isEmpty(c[n])&&c[n]!==""&&s.has(Qr.autoCast(c[n]))&&(c.skip=!0),s.add(Qr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}o(ise,"validation");async function ose(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Pg(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Lg.createRecords(e);return Og(Ck,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}o(ose,"insertData");async function ase(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Pg(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Lg.updateRecords(e);return Qr.isEmpty(n.existing_rows)?Og(sse,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Og(n.update_action,[],e,n.hashes,void 0,n.txn_time)}o(ase,"updateData");async function cse(e){if(e.operation!=="upsert")throw pl(new Error,"invalid operation, must be upsert",hl.INTERNAL_SERVER_ERROR);let t=Pg(e);if(t)throw pl(new Error,t.message,hl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw pl(new Error,r,hl.BAD_REQUEST);let n=await Lg.upsertRecords(e);return Og(Ok,n.written_hashes,e,[],n.new_attributes,n.txn_time)}o(cse,"upsertData");function Og(e,t,r,n,s,i){let a={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===Ck?(a.inserted_hashes=t,a.skipped_hashes=n,a):e===Ok?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=n,a)}o(Og,"returnObject");function lse(e){return Qr.transformReq(e),Lg.flush(e.schema,e.table)}o(lse,"flush")});var iw=v((uMe,Mk)=>{var use=ot(),sw=require("joi"),{hdbTable:dse,hdbDatabase:Lk}=ki(),Dk={schema:Lk,database:Lk,table:dse},fse={date:sw.date().iso().required()},mse={timestamp:sw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Mk.exports=function(e,t){let r=t==="timestamp"?{...Dk,...mse}:{...Dk,...fse},n=sw.object(r);return use.validateBySchema(e,n)}});var xk=v((dMe,Uk)=>{var pse=ot(),ow=require("joi"),{hdbTable:hse,hdbDatabase:vk}=ki(),Ese=ow.object({schema:vk,database:vk,table:hse,hash_values:ow.array().required(),ids:ow.array()});Uk.exports=function(e){return pse.validateBySchema(e,Ese)}});var uw=v((fMe,Bk)=>{"use strict";var aw=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},cw=class{static{o(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,a){this.schema=t,this.table=r,this.attribute=n,this.hash_attribute=s,this.get_attributes=i,this.value=a}},lw=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Bk.exports={InsertObject:aw,NoSQLSeachObject:cw,DeleteResponseObject:lw}});var Ga=v((pMe,Gk)=>{"use strict";var kk=iw(),_se=xk(),El=ce(),Fk=require("moment"),Hk=z(),{promisify:gse,callbackify:Sse}=require("util"),_l=(k(),D(Y)),Tse=li(),dw=gse(Tse.getTableSchema),fw=rs(),{DeleteResponseObject:yse}=uw(),{handleHDBError:Ha,hdbErrors:Rse}=Ee(),{HDB_ERROR_MSGS:Dg,HTTP_STATUS_CODES:qa}=Rse,bse="records successfully deleted",Ase=Sse(qk);Gk.exports={delete:Ase,deleteRecord:qk,deleteFilesBefore:Ise,deleteAuditLogsBefore:wse};async function Ise(e){let t=kk(e,"date");if(t)throw Ha(t,t.message,qa.BAD_REQUEST,void 0,void 0,!0);if(El.transformReq(e),!Fk(e.date,Fk.ISO_8601).isValid())throw Ha(new Error,Dg.INVALID_DATE,qa.BAD_REQUEST,_l.LOG_LEVELS.ERROR,Dg.INVALID_DATE,!0);let n=El.checkSchemaTableExist(e.schema,e.table);if(n)throw Ha(new Error,n,qa.NOT_FOUND,_l.LOG_LEVELS.ERROR,n,!0);let s=await fw.deleteRecordsBefore(e);if(await dw(e.schema,e.table),Hk.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}o(Ise,"deleteFilesBefore");async function wse(e){let t=kk(e,"timestamp");if(t)throw Ha(t,t.message,qa.BAD_REQUEST,void 0,void 0,!0);if(El.transformReq(e),isNaN(e.timestamp))throw Ha(new Error,Dg.INVALID_VALUE("Timestamp"),qa.BAD_REQUEST,_l.LOG_LEVELS.ERROR,Dg.INVALID_VALUE("Timestamp"),!0);let r=El.checkSchemaTableExist(e.schema,e.table);if(r)throw Ha(new Error,r,qa.NOT_FOUND,_l.LOG_LEVELS.ERROR,r,!0);let n=await fw.deleteAuditLogsBefore(e);return await dw(e.schema,e.table),Hk.info(`Finished deleting audit logs before ${e.timestamp}`),n}o(wse,"deleteAuditLogsBefore");async function qk(e){e.ids&&(e.hash_values=e.ids);let t=_se(e);if(t)throw Ha(t,t.message,qa.BAD_REQUEST,void 0,void 0,!0);El.transformReq(e);let r=El.checkSchemaTableExist(e.schema,e.table);if(r)throw Ha(new Error,r,qa.NOT_FOUND,_l.LOG_LEVELS.ERROR,r,!0);try{await dw(e.schema,e.table);let n=await fw.deleteRecords(e);return El.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${bse}`),n}catch(n){if(n.message===_l.SEARCH_NOT_FOUND_MESSAGE){let s=new yse;return s.message=_l.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}o(qk,"deleteRecord")});var _w={};be(_w,{HASH_FUNCTION:()=>kr,hash:()=>hw,validate:()=>Ew});function mw(e=ap){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(op.randomBytes(e)).map(r=>t[r%t.length]).join("")}function hw(e,t=kr[Vk?.toUpperCase()]??kr.SHA256){return pw[t](e)}function Ew(e,t,r=kr[Vk?.toUpperCase()]??kr.SHA256){return e?Nse[r](e,t):!1}var op,Ju,$k,Vk,ap,Kk,kr,pw,Nse,gw=oe(()=>{op=w(require("node:crypto")),Ju=w(require("argon2")),$k=w(le());k();Vk=(0,$k.get)(U.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),ap=16,Kk=9,kr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};o(mw,"generateSalt");pw={[kr.MD5]:(e,t=void 0)=>{t=t??mw(Kk);let r=op.createHash(kr.MD5).update(e+t).digest("hex");return t+r},[kr.SHA256]:(e,t=void 0)=>{t=t??mw(ap);let r=op.createHash(kr.SHA256).update(e+t).digest("hex");return t+r},[kr.ARGON2ID]:async e=>{let t=mw(ap),r=await Ju.hash(e,{type:Ju.argon2id,salt:Buffer.from(t)});return t+r}},Nse={[kr.MD5]:(e,t)=>{let r=e.slice(0,Kk);return e===pw[kr.MD5](t,r)},[kr.SHA256]:(e,t)=>{let r=e.slice(0,ap);return e===pw[kr.SHA256](t,r)},[kr.ARGON2ID]:async(e,t)=>await Ju.verify(e.slice(ap),t)};o(hw,"hash");o(Ew,"validate")});var Wk=v((gMe,Yk)=>{var Sw=ot(),dn={username:{presence:!0,exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function Cse(e){return dn.password.presence=!0,dn.username.presence=!0,dn.role.presence=!0,dn.active.presence=!0,Sw.validateObject(e,dn)}o(Cse,"addUserValidation");function Ose(e){return dn.password.presence=!1,dn.username.presence=!0,dn.role.presence=!1,dn.active.presence=!1,Sw.validateObject(e,dn)}o(Ose,"alterUserValidation");function Pse(e){return dn.password.presence=!1,dn.username.presence=!0,dn.role.presence=!1,dn.active.presence=!1,Sw.validateObject(e,dn)}o(Pse,"dropUserValidation");Yk.exports={addUserValidation:Cse,alterUserValidation:Ose,dropUserValidation:Pse}});var oH=v((yMe,iH)=>{"use strict";var Tw=require("recursive-iterator"),Lse=require("alasql"),yw=require("clone"),zk=ce(),{handleHDBError:jk,hdbErrors:Dse}=Ee(),{HDB_ERROR_MSGS:Qk,HTTP_STATUS_CODES:Jk}=Dse,{getDatabases:Mse}=(Ne(),D(ft)),vse=["DISTINCT_ARRAY"],Xk=Symbol("validateTables"),Rw=Symbol("validateTable"),TMe=Symbol("getAllColumns"),Zk=Symbol("validateAllColumns"),Mg=Symbol("findColumn"),eH=Symbol("validateOrderBy"),cp=Symbol("validateSegment"),bw=Symbol("validateColumn"),tH=Symbol("setColumnsForTable"),rH=Symbol("checkColumnsForAsterisk"),nH=Symbol("validateGroupBy"),sH=Symbol("hasColumns"),Aw=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Xk](),this[rH](),this[Zk]()}[Xk](){if(this[sH]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Rw](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Rw](t.table)})}}[sH](){let t=!1,r=new Tw(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Rw](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Mse();if(!r[t.databaseid])throw jk(new Error,Qk.SCHEMA_NOT_FOUND(t.databaseid),Jk.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw jk(new Error,Qk.TABLE_NOT_FOUND(t.databaseid,t.tableid),Jk.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=yw(s);i.table=yw(t),this.attributes.push(i)})}[Mg](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)}[rH](){let t=new Tw(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[tH](r.tableid)}[tH](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new Lse.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Zk](){this[cp](this.statement.columns,!1),this[cp](this.statement.joins,!1),this[cp](this.statement.where,!1),this[nH](this.statement.group,!1),this[cp](this.statement.order,!0)}[cp](t,r){if(!t)return;let n=new Tw(t),s=[];for(let{node:i,path:a}of n)!zk.isEmpty(i)&&!zk.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[eH](i):s.push(this[bw](i)));return s}[nH](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&vse.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=yw(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Mg](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,a)=>{if(i.toString()===n.toString()){s=i,r.splice(a,1);return}});else{let i=this[Mg](n);if(!i||i.length===0)throw`unknown column '${group_column.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${group_column.toString()}' in group by`;r.forEach((a,c)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){s=a,r.splice(c,1);return}})}if(!s)throw`group by column '${group_column.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[eH](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[bw](t)}[bw](t){let r=this[Mg](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]}};iH.exports=Aw});var uH=v((bMe,lH)=>{"use strict";var aH=require("lodash"),lp=require("mathjs"),Use=require("jsonata"),cH=ce();lH.exports={distinct_array:o(e=>Array.isArray(e)&&e.length>1?aH.uniqWith(e,aH.isEqual):e,"distinct_array"),searchJSON:xse,mad:up.bind(null,lp.mad),mean:up.bind(null,lp.mean),mode:up.bind(null,lp.mode),prod:up.bind(null,lp.prod),median:up.bind(null,lp.median)};function up(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}o(up,"aggregateFunction");function xse(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(cH.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),cH.isEmpty(this.__ala__.res[r])){let n=Use(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}o(xse,"searchJSON")});var fH=v((IMe,dH)=>{"use strict";var cr=require("moment"),Iw="YYYY-MM-DDTHH:mm:ss.SSSZZ";cr.suppressDeprecationWarnings=!0;dH.exports={current_date:o(()=>cr().utc().format("YYYY-MM-DD"),"current_date"),current_time:o(()=>cr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:o((e,t)=>{switch(t.toLowerCase()){case"year":return cr(e).utc().format("YYYY");case"month":return cr(e).utc().format("MM");case"day":return cr(e).utc().format("DD");case"hour":return cr(e).utc().format("HH");case"minute":return cr(e).utc().format("mm");case"second":return cr(e).utc().format("ss");case"millisecond":return cr(e).utc().format("SSS");default:break}},"extract"),date:o(e=>cr(e).utc().format(Iw),"date"),date_format:o((e,t)=>cr(e).utc().format(t),"date_format"),date_add:o((e,t,r)=>cr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:o((e,t,r)=>cr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:o((e,t,r)=>{let n=cr(e).utc(),s=cr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:o(()=>cr().utc().valueOf(),"now"),get_server_time:o(()=>cr().format(Iw),"get_server_time"),offset_utc:o((e,t)=>cr(e).utc().utcOffset(t).format(Iw),"offset_utc")}});var EH=v((NMe,hH)=>{"use strict";var Bse=require("@turf/area"),Fse=require("@turf/length"),kse=require("@turf/circle"),Hse=require("@turf/difference"),qse=require("@turf/distance"),Gse=require("@turf/boolean-contains"),$se=require("@turf/boolean-equal"),Vse=require("@turf/boolean-disjoint"),Kse=require("@turf/helpers"),mH=(k(),D(Y)),je=ce(),ko=z();hH.exports={geoArea:Yse,geoLength:Wse,geoCircle:zse,geoDifference:jse,geoDistance:pH,geoNear:Qse,geoContains:Jse,geoEqual:Xse,geoCrosses:Zse,geoConvert:eie};function Yse(e){if(je.isEmpty(e))return NaN;typeof e=="string"&&(e=je.autoCastJSON(e));try{return Bse.default(e)}catch(t){return ko.trace(t,e),NaN}}o(Yse,"geoArea");function Wse(e,t){if(je.isEmpty(e))return NaN;typeof e=="string"&&(e=je.autoCastJSON(e));try{return Fse.default(e,{units:t||"kilometers"})}catch(r){return ko.trace(r,e),NaN}}o(Wse,"geoLength");function zse(e,t,r){if(je.isEmpty(e))return NaN;if(je.isEmpty(t))return NaN;typeof e=="string"&&(e=je.autoCastJSON(e));try{return kse.default(e,t,{units:r||"kilometers"})}catch(n){return ko.trace(n,e,t),NaN}}o(zse,"geoCircle");function jse(e,t){if(je.isEmpty(e))return NaN;if(je.isEmpty(t))return NaN;typeof e=="string"&&(e=je.autoCastJSON(e)),typeof t=="string"&&(t=je.autoCastJSON(t));try{return Hse(e,t)}catch(r){return ko.trace(r,e,t),NaN}}o(jse,"geoDifference");function pH(e,t,r){if(je.isEmpty(e))return NaN;if(je.isEmpty(t))return NaN;typeof e=="string"&&(e=je.autoCastJSON(e)),typeof t=="string"&&(t=je.autoCastJSON(t));try{return qse.default(e,t,{units:r||"kilometers"})}catch(n){return ko.trace(n,e,t),NaN}}o(pH,"geoDistance");function Qse(e,t,r,n){if(je.isEmpty(e)||je.isEmpty(t))return!1;if(je.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=je.autoCastJSON(e)),typeof t=="string"&&(t=je.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return pH(e,t,n)<=r}catch(s){return ko.trace(s,e,t),!1}}o(Qse,"geoNear");function Jse(e,t){if(je.isEmpty(e)||je.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=je.autoCastJSON(e)),typeof t=="string"&&(t=je.autoCastJSON(t));try{return Gse.default(e,t)}catch(r){return ko.trace(r,e,t),!1}}o(Jse,"geoContains");function Xse(e,t){if(je.isEmpty(e)||je.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=je.autoCastJSON(e)),typeof t=="string"&&(t=je.autoCastJSON(t));try{return $se.default(e,t)}catch(r){return ko.trace(r,e,t),!1}}o(Xse,"geoEqual");function Zse(e,t){if(je.isEmpty(e)||je.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=je.autoCastJSON(e)),typeof t=="string"&&(t=je.autoCastJSON(t));try{return!Vse.default(e,t)}catch(r){return ko.trace(r,e,t),!1}}o(Zse,"geoCrosses");function eie(e,t,r){if(je.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(je.isEmpty(t))throw new Error("geo_type is required");if(je.isEmpty(mH.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(mH.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=je.autoCastJSON(e)),Kse[t](e,r)}o(eie,"geoConvert")});var vg=v((OMe,_H)=>{var gl=uH(),ns=fH(),Vi=EH();_H.exports=e=>{e.aggr.mad=e.aggr.MAD=gl.mad,e.aggr.mean=e.aggr.MEAN=gl.mean,e.aggr.mode=e.aggr.MODE=gl.mode,e.aggr.prod=e.aggr.PROD=gl.prod,e.aggr.median=e.aggr.MEDIAN=gl.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=gl.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=gl.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ns.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ns.current_time,e.fn.extract=e.fn.EXTRACT=ns.extract,e.fn.date=e.fn.DATE=ns.date,e.fn.date_format=e.fn.DATE_FORMAT=ns.date_format,e.fn.date_add=e.fn.DATE_ADD=ns.date_add,e.fn.date_sub=e.fn.DATE_SUB=ns.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ns.date_diff,e.fn.now=e.fn.NOW=ns.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ns.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ns.get_server_time,e.fn.getdate=e.fn.GETDATE=ns.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ns.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Vi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Vi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Vi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Vi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Vi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Vi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Vi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Vi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Vi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Vi.geoNear}});var yH=v((PMe,TH)=>{"use strict";var dp=require("lodash"),Bn=require("alasql");Bn.options.cache=!1;var tie=vg(),gH=require("clone"),Ug=require("recursive-iterator"),Ge=z(),nt=ce(),Xu=rs(),rie=(k(),D(Y)),{hdbErrors:nie}=Ee(),{getDatabases:SH}=(Ne(),D(ft)),sie="IS NULL",ui="There was a problem performing this search. Please check the logs and try again.";tie(Bn);var ww=class{static{o(this,"SQLSearch")}constructor(t,r){if(nt.isEmpty(t))throw Ge.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(),nt.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!nt.isEmptyOrZeroLength(n))return Ge.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ge.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ge.error(n),new Error(ui)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ge.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ge.error(n),new Error(ui)}if(Object.keys(this.data).length===0)return Ge.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ge.error("Error thrown from processJoins in SQLSearch class method search."),Ge.error(n),new Error(ui)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ge.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ge.error(n),new Error(ui)}try{return t=await this._finalSQL(),t}catch(n){throw Ge.error("Error thrown from finalSQL in SQLSearch class method search."),Ge.error(n),new Error(ui)}}_getColumns(){let t=new Ug(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(gH(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=dp.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=SH()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(nt.isEmpty(this.statement.where)){Ge.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Ug(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!nt.isEmpty(r)&&r.right)if(nt.isNotEmptyAndHasValue(r.right.value)){let n=nt.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Bn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=nt.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Bn.yy.LogicValue({value:i}):n instanceof Bn.yy.StringValue&&nt.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Bn.yy.NumValue({value:i}))});if(t){Ge.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Ug(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!nt.isEmpty(rie.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(nt.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(nt.isEmptyOrZeroLength(r.left.columnid)||nt.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,value:r.right.value})}continue}if(nt.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let c=!1;switch(r.op){case"=":!nt.isEmpty(r.right.value)||!nt.isEmpty(r.left.value)?n.add(nt.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[a].ignore=c,c?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...n])}}}_setAliasesForColumns(){if(nt.isEmptyOrZeroLength(this.all_table_attributes)&&nt.isEmptyOrZeroLength(this.statement.from)&&nt.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&&dp.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(nt.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);nt.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(nt.isEmptyOrZeroLength(this.all_table_attributes)&&!nt.isEmptyOrZeroLength(this.columns.columns))return t;if(nt.isEmptyOrZeroLength(this.all_table_attributes)&&nt.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Bn.promise(r)}catch(r){throw Ge.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ge.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(gH(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(nt.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(sie)>-1&&this.tables.forEach(s=>{let i={columnid:SH()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=dp.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[a].__hashName;return s[a]||(s[a]=[],s[a].push(null),this._addColumnToMergedAttributes(a,c)),i.attribute!==c&&(s[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,a=this.data[i].__hashName,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===a&&(l=!0),!nt.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!nt.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await Xu.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 Ge.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ge.error(d),new Error(ui)}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 Xu.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 Ge.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ge.error(d),new Error(ui)}else if(!nt.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!nt.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 Xu.getDataByValue(c,p.operation);if(l)for(let[E]of h)this.data[i].__mergedData[E]||(this.data[i].__mergedData[E]=[...n[i]],this._setMergedHashAttribute(i,E));else for(let[E,g]of h)this.data[i].__mergedData[E]?this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]):(this.data[i].__mergedData[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,E))}}catch(d){throw Ge.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ge.error(d),new Error(ui)}else try{c.attribute=s.attribute,c.value="*";let d=await Xu.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 Ge.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ge.error(d),new Error(ui)}}}_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 Bn.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,a=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===a});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Bn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Bn.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 Bn.yy.FuncValue:new Bn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__mergedData)),this.statement.joins&&this.statement.joins.forEach(p=>{p.joinmode&&p.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(p.table);let h=p.joinmode+" JOIN ? AS "+(p.as?p.as:p.table.tableid);p.on&&(h+=" ON "+p.on.toString()),i.push(h),t.push(Object.values(this.data[`${p.table.databaseid_orig}_${p.table.as?p.table.as_orig:p.table.tableid_orig}`].__mergedData))});let a=[],c={};s.forEach(p=>{let h=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__hashName,E=p.as?p.as_orig:p.tableid_orig;a.push({key:`'${E}.${h}'`,schema:p.databaseid_orig,table:p.as?p.as_orig:p.tableid_orig,keys:new Set}),r.push(`${p.as?p.as:p.tableid}.\`${h}\` AS "${E}.${h}"`),c[p.as?p.as_orig:p.tableid_orig]=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__mergedAttributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(p=>{p.is_func?r.push(p.initial_select_column.toString()):p.initial_select_column.tableid?r.push(`${p.initial_select_column.tableid}.${p.initial_select_column.columnid} AS ${p.expression.columnid}`):r.push(`${p.initial_select_column.columnid} AS ${p.expression.columnid}`)}));let d="",f="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",f=this.statement.offset?"OFFSET "+this.statement.offset:"");let m=[];try{let p=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,h=this._convertColumnsToIndexes(p,s);m=await Bn.promise(h,t),t=null}catch(p){throw Ge.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ge.error(p),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let p=0,h=m.length;p<h;p++){let E=m[p];a.forEach(g=>{E[g.key]!==null&&E[g.key]!==void 0&&g.keys.add(E[g.key])})}a.forEach(p=>{let h=Object.keys(this.data[`${p.schema}_${p.table}`].__mergedData),E=dp.difference(h,[...p.keys].map(g=>g.toString()));for(let g=0,b=E.length;g<b;g++){let S=E[g];delete this.data[`${p.schema}_${p.table}`].__mergedData[S]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Ug(this.columns);for(let{node:i}of s)if(i&&i.columnid){let a=this._findColumn(i);if(a){let c=a.table.as?a.table.as:a.table.tableid;(!t[c]||t[c].indexOf(a.attribute)<0)&&n.push(a)}}n=dp.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 Ge.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ge.error(i),new Error(ui)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__mergedData,a=[];for(let d in i)a.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:a,get_attributes:s.columns},l=await Xu.getDataByHash(c),u=s.columns.length;for(let d=0,f=a.length;d<f;d++){let m=a[d],p=l.get(m);for(let h=0;h<u;h++){let E=s.columns[h],g=p[E]===void 0?null:p[E];this.data[n].__mergedData[m].push(g)}}}}catch(r){throw Ge.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ge.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__mergedData)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__mergedData)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(a=>{let c=a.aggregatorid?a.expression:a,l=a.aggregatorid?a.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Ge.trace(`Final SQL: ${s}`),n=await Bn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ge.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ge.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ge.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 Ge.error(nie.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ge.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=s[i],u=new RegExp(`${l}.\`${a}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=new RegExp(`\`${a}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.attribute=n.attribute,i.value="*";let a=await Xu.getDataByValue(i);for(let[c,l]of a)this.data[s].__mergedData[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__mergedData[c]={...r[s]}),this.data[s].__mergedData[c][t[n.attribute]]=l[n.attribute]??null}catch(a){throw Ge.error("There was an error when processing this SQL operation. Check your logs"),Ge.error(a),new Error(ui)}}return Object.values(Object.values(this.data)[0].__mergedData)}};TH.exports=ww});var fn=v((DMe,RH)=>{"use strict";var iie=oH();RH.exports={searchByConditions:aie,searchByHash:cie,searchByValue:lie,search:uie};var Nw=rs(),{transformReq:Cw}=ce(),oie=yH();async function aie(e){return Cw(e),Nw.searchByConditions(e)}o(aie,"searchByConditions");async function cie(e){Cw(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Nw.searchByHash(e))r&&t.push(r);return t}o(cie,"searchByHash");async function lie(e){Cw(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Nw.searchByValue(e))t.push(r);return t}o(lie,"searchByValue");function uie(e,t){try{let r=new iie(e);r.validate(),new oie(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}o(uie,"search")});var Ki=v((vMe,wH)=>{"use strict";var fp=require("crypto"),die=le(),{CONFIG_PARAMS:fie}=(k(),D(Y)),AH="aes-256-cbc",mie=32,pie=16,Ow=64,IH=32,hie=Ow+IH,bH=new Map;wH.exports={encrypt:Eie,decrypt:_ie,createNatsTableStreamName:gie};function Eie(e){let t=fp.randomBytes(mie),r=fp.randomBytes(pie),n=fp.createCipheriv(AH,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),a=r.toString("hex"),c=s.toString("hex");return i+a+c}o(Eie,"encrypt");function _ie(e){let t=e.substr(0,Ow),r=e.substr(Ow,IH),n=e.substr(hie,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),a=fp.createDecipheriv(AH,Buffer.from(t,"hex"),s),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(_ie,"decrypt");function gie(e,t){let r=die.get(fie.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=bH.get(r);return n||(n=fp.createHash("md5").update(r).digest("hex"),bH.set(r,n)),n}o(gie,"createNatsTableStreamName")});var mt=v((BMe,CH)=>{"use strict";var{platform:xMe}=require("os"),Sie="nats-server.zip",Pw="nats-server",Tie=process.platform==="win32"?`${Pw}.exe`:Pw,yie=/^[^\s.,*>]+$/,NH="__request__",Rie=o(e=>`${e}.${NH}`,"REQUEST_SUBJECT"),bie={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Aie={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Iie={HUB:"hub.pid",LEAF:"leaf.pid"},wie={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Nie={SUCCESS:"success",ERROR:"error"},Cie={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Oie={TXN:"txn",MSGID:"msgid"},Zu={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Pie={[Zu.ERR]:1,[Zu.WRN]:2,[Zu.INF]:3,[Zu.DBG]:4,[Zu.TRC]:5},Lie={debug:"-D",trace:"-DVV"};CH.exports={NATS_SERVER_ZIP:Sie,NATS_SERVER_NAME:Pw,NATS_BINARY_NAME:Tie,PID_FILES:Iie,NATS_CONFIG_FILES:Aie,SERVER_SUFFIX:wie,NATS_TERM_CONSTRAINTS_RX:yie,REQUEST_SUFFIX:NH,UPDATE_REMOTE_RESPONSE_STATUSES:Nie,CLUSTER_STATUS_STATUSES:Cie,REQUEST_SUBJECT:Rie,SUBJECT_PREFIXES:Oie,MSG_HEADERS:bie,LOG_LEVELS:Zu,LOG_LEVEL_FLAGS:Lie,LOG_LEVEL_HIERARCHY:Pie}});var Lw=v(mn=>{"use strict";var Die={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
|
|
13
13
|
`),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
|
|
14
|
-
`)},Mie="certificate.pem",vie="privateKey.pem",Uie="caCertificate.pem",xie="natsCertificate.pem",Bie="natsCaCertificate.pem",It={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},Fie={tls_certificate:It.SERVER,tlsCertificateAuthority:It.CA,customFunctions_tls_certificate:It.SERVER,customFunctionsTlsCertificateAuthority:It.CA,operationsApi_tls_certificate:It["OPERATIONS-API"],operationsApiTlsCertificateAuthority:It["OPERATIONS-CA"]},kie={[It.SERVER]:2,[It.DEFAULT]:1},Hie={[It["OPERATIONS-API"]]:3,[It.SERVER]:2,[It.DEFAULT]:1},qie={[It["OPERATIONS-API"]]:3,[It.SERVER]:2,[It.DEFAULT]:1},Gie={[It["OPERATIONS-CA"]]:3,[It.CA]:2,[It["DEFAULT-CA"]]:1},$ie={[It["OPERATIONS-CA"]]:3,[It.CA]:2,[It["DEFAULT-CA"]]:1},Vie={[It.CA]:2,[It["DEFAULT-CA"]]:1};mn.CERTIFICATE_PEM_NAME=Mie;mn.PRIVATEKEY_PEM_NAME=vie;mn.CA_PEM_NAME=Uie;mn.CERT_NAME=It;mn.CERT_CONFIG_NAME_MAP=Fie;mn.CERT_PREFERENCE_APP=kie;mn.CERT_PREFERENCE_OPS=Hie;mn.CERT_PREFERENCE_REP=qie;mn.CA_CERT_PREFERENCE_REP=Gie;mn.CA_CERT_PREFERENCE_OPS=$ie;mn.CA_CERT_PREFERENCE_APP=Vie;mn.CERTIFICATE_VALUES=Die;mn.NATS_CERTIFICATE_PEM_NAME=xie;mn.NATS_CA_PEM_NAME=Bie});var Mw=v((VMe,vH)=>{"use strict";var DH=require("fs-extra"),ge=require("joi"),Kie=require("os"),{boolean:Ke,string:ht,number:lr,array:$a}=ge.types(),{totalmem:OH}=require("os"),Sl=require("path"),Yie=z(),Dw=ce(),$Me=Lw(),PH=(k(),D(Y)),Wie=ot(),LH="log",zie="components",jie="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Qie="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Jie="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",Xie="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",Zie="rootPath config parameter is undefined",Fn=ge.alternatives([lr.min(0),ht]).optional().empty(null),Bg=ge.alternatives([$a.items(ht,{host:ht.required(),port:Fn},{hostname:ht.required(),port:Fn}).empty(null),$a.items(ht)]),Yi,MH=!1;vH.exports={configValidator:eoe,routesValidator:ooe,routeConstraints:Bg};function eoe(e,t=!1){if(MH=t,Yi=e.rootPath,Dw.isEmpty(Yi))throw Zie;let r=Ke.optional(),n=lr.min(0).max(1e3).empty(null).default(ioe),s=ht.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(mp),i=ht.optional().empty(null),a=ht.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ge.string().empty(null).default(mp),l=ge.custom(roe).empty(null).default(mp),u=e.clustering?.enabled,d=ge.object({certificate:i,certificateAuthority:i,privateKey:i}),f;return u===!0?f=ge.object({enabled:r,hubServer:ge.object({cluster:ge.object({name:ge.required().empty(null),network:ge.object({port:Fn,routes:Bg}).required()}).required(),leafNodes:ge.object({network:ge.object({port:Fn}).required()}).required(),network:ge.object({port:Fn}).required()}).required(),leafServer:ge.object({network:ge.object({port:Fn,routes:Bg}).required(),streams:ge.object({maxAge:lr.min(120).allow(null).optional(),maxBytes:lr.min(1).allow(null).optional(),maxMsgs:lr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ge.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:Ke.optional(),databaseLevel:Ke.optional(),tls:ge.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ke.required(),verify:Ke.optional()}),user:ht.optional().empty(null)}).optional():f=ge.object({enabled:r,tls:ge.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ke.optional()})}).optional(),ge.object({authentication:ge.alternatives(ge.object({authorizeLocal:Ke,cacheTTL:lr.required(),cookie:ge.object({domains:$a.items(ht).optional(),expires:ht.optional()}),enableSessions:Ke,hashFunction:ht.valid("md5","sha256","argon2id").optional().empty(null)}),Ke).optional(),analytics:ge.object({aggregatePeriod:lr,replicate:Ke.optional()}),replication:ge.object({hostname:ge.alternatives(ht,lr).optional().empty(null),url:ht.optional().empty(null),port:Fn,securePort:Fn,routes:$a.optional().empty(null),databases:ge.alternatives(ht,$a),enableRootCAs:Ke.optional(),copyTablesToCatchUp:Ke.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:ge.object({enabled:r}).required(),logging:ge.object({auditAuthEvents:ge.object({logFailed:Ke,logSuccessful:Ke}),file:Ke.required(),level:ge.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ge.object({enabled:Ke.optional(),compress:Ke.optional(),interval:ht.custom(soe).optional().empty(null),maxSize:ht.custom(noe).optional().empty(null),path:ht.optional().empty(null).default(mp)}).required(),root:s,stdStreams:Ke.required(),auditLog:Ke.required()}).required(),operationsApi:ge.object({network:ge.object({cors:Ke.optional(),corsAccessList:$a.optional(),headersTimeout:lr.min(1).optional(),keepAliveTimeout:lr.min(1).optional(),port:Fn,domainSocket:ge.optional().empty("hdb/operations-server").default(mp),securePort:Fn,timeout:lr.min(1).optional()}).optional(),tls:ge.alternatives([ge.array().items(d),d])}).required(),rootPath:ht.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ge.object({network:ge.object({port:Fn,securePort:Fn,mtls:ge.alternatives([Ke.optional(),ge.object({user:ht.optional(),certificateAuthority:i,required:Ke.optional()})])}).required(),webSocket:Ke.optional(),requireAuthentication:Ke.optional()}),http:ge.object({compressionThreshold:lr.optional(),cors:Ke.optional(),corsAccessList:$a.optional(),headersTimeout:lr.min(1).optional(),port:Fn,securePort:Fn,maxHeaderSize:lr.optional(),mtls:ge.alternatives([Ke.optional(),ge.object({user:ht.optional(),certificateAuthority:i,required:Ke.optional()})]),threadRange:ge.alternatives([$a.optional(),ht.optional()])}).required(),threads:ge.alternatives(n.optional(),ge.object({count:n.optional(),debug:ge.alternatives(Ke.optional(),ge.object({startingPort:lr.min(1).optional(),host:ht.optional(),waitForDebugger:Ke.optional()})),maxHeapMemory:lr.min(0).optional()})),storage:ge.object({writeAsync:Ke.required(),overlappingSync:Ke.optional(),caching:Ke.optional(),compression:ge.alternatives([Ke.optional(),ge.object({dictionary:ht.optional(),threshold:lr.optional()})]),compactOnStart:Ke.optional(),compactOnStartKeepBackup:Ke.optional(),noReadAhead:Ke.optional(),path:l,prefetchWrites:Ke.optional(),maxFreeSpaceToLoad:lr.optional(),maxFreeSpaceToRetain:lr.optional()}).required(),ignoreScripts:Ke.optional(),tls:ge.alternatives([ge.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(eoe,"configValidator");function toe(e){return MH||DH.existsSync(e)?null:`Specified path ${e} does not exist.`}o(toe,"doesPathExist");function roe(e,t){ge.assert(e,ht.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=toe(e);if(r)return t.message(r)}o(roe,"validatePath");function noe(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(jie);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Jie):e}o(noe,"validateRotationMaxSize");function soe(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Qie);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Xie):e}o(soe,"validateRotationInterval");function ioe(e,t){let r=t.state.path.join("."),n=Kie.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||OH();return i=Math.round(Math.min(i,OH())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),Yie.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}o(ioe,"setDefaultThreads");function mp(e,t){let r=t.state.path.join(".");if(!Dw.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Dw.isEmpty(Yi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Sl.join(Yi,zie);case"logging.root":return Sl.join(Yi,LH);case"clustering.leafServer.streams.path":return Sl.join(Yi,"clustering","leaf");case"storage.path":let n=Sl.join(Yi,PH.LEGACY_DATABASES_DIR_NAME);return DH.existsSync(n)?n:Sl.join(Yi,PH.DATABASES_DIR_NAME);case"logging.rotation.path":return Sl.join(Yi,LH);case"operationsApi.network.domainSocket":return r==null?null:Sl.join(Yi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(mp,"setDefaultRoot");function ooe(e){let t=ge.object({routes:Bg});return Wie.validateBySchema({routes:e},t)}o(ooe,"routesValidator")});var Et=v(tr=>{"use strict";var Ls=(k(),D(Y)),wr=ce(),ur=z(),{configValidator:aoe,routesValidator:UH}=Mw(),pn=require("fs-extra"),BH=require("yaml"),is=require("path"),coe=require("is-number"),FH=require("properties-reader"),loe=require("lodash"),{handleHDBError:uoe}=Ee(),{HTTP_STATUS_CODES:doe,HDB_ERROR_MSGS:ed}=Kr(),{server:foe}=(xr(),D(nm)),{PACKAGE_ROOT:kH}=At(),{DATABASES_PARAM_CONFIG:pp,CONFIG_PARAMS:ss,CONFIG_PARAM_MAP:di}=Ls,moe="Unable to get config value because config is uninitialized",poe="Config successfully initialized",hoe="Error backing up config file",Eoe="Empty parameter sent to getConfigValue",HH=is.join(kH,"config","yaml",Ls.HDB_DEFAULT_CONFIG_FILE),_oe=is.join(kH,"config","yaml","defaultNatsConfig.yaml"),goe="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",xH={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"},Fg,vt,kg;tr.createConfigFile=Soe;tr.getDefaultConfig=Toe;tr.getConfigValue=GH;tr.initConfig=Hg;tr.flattenConfig=td;tr.updateConfigValue=$H;tr.updateConfigObject=Roe;tr.getConfiguration=Ioe;tr.setConfiguration=woe;tr.readConfigFile=Bw;tr.getClusteringRoutes=Noe;tr.initOldConfig=VH;tr.getConfigFromFile=Coe;tr.getConfigFilePath=Tl;tr.addConfig=Ooe;tr.deleteConfigFromFile=Poe;tr.getConfigObj=Loe;tr.resolvePath=vw;tr.getFlatConfigObj=Doe;function vw(e){if(e?.startsWith("~/"))return is.join(wr.getHomeDir(),e.slice(1));let t=le();try{return is.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}o(vw,"resolvePath");function Soe(e,t=!1){let r=Va(HH);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=BH.parseDocument(pn.readFileSync(_oe,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}Fg=td(r.toJSON());let n;for(let c in e){let l=di[c.toLowerCase()];if(l===ss.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=Uw(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{u.length>1&&typeof r.getIn(u.slice(0,-1))=="boolean"&&r.deleteIn(u.slice(0,-1)),r.setIn([...u],d)}catch(f){ur.error(f)}}}n&&qH(r,n),xw(r,t);let s=r.toJSON();vt=td(s);let i=r.getIn(["rootPath"]),a=is.join(i,Ls.HDB_CONFIG_FILE);if(pn.createFileSync(a),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);pn.writeFileSync(a,String(r)),ur.trace(`Config file written to ${a}`)}o(Soe,"createConfigFile");function qH(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(pp.TABLES))for(let i in n[s][pp.TABLES])for(let a in n[s][pp.TABLES][i]){let c=n[s][pp.TABLES][i][a],l=[ss.DATABASES,s,pp.TABLES,i,a];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let a=n[s][i],c=[ss.DATABASES,s,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(n){ur.error("Error parsing schemas CLI/env config arguments",n)}}o(qH,"setSchemasConfig");function Toe(e){if(Fg===void 0){let r=Va(HH);Fg=td(r.toJSON())}let t=di[e.toLowerCase()];if(t!==void 0)return Fg[t.toLowerCase()]}o(Toe,"getDefaultConfig");function GH(e){if(e==null){ur.info(Eoe);return}if(vt===void 0){ur.trace(moe);return}let t=di[e.toLowerCase()];if(t!==void 0)return vt[t.toLowerCase()]}o(GH,"getConfigValue");function Tl(e=wr.getPropsFilePath()){let t=wr.getEnvCliRootPath();if(t)return vw(is.join(t,Ls.HDB_CONFIG_FILE));let r=FH(e);return vw(r.get(Ls.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}o(Tl,"getConfigFilePath");function Hg(e=!1){if(vt===void 0||e){let t;if(!wr.noBootFile()){t=wr.getPropsFilePath();try{pn.accessSync(t,pn.constants.F_OK|pn.constants.R_OK)}catch(i){throw ur.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Tl(t),n;if(r.includes("config/settings.js"))try{VH(r);return}catch(i){if(i.code!==Ls.NODE_ERROR_CODES.ENOENT)throw i}try{n=Va(r)}catch(i){if(i.code===Ls.NODE_ERROR_CODES.ENOENT){ur.trace(`HarperDB config file not found at ${r}.
|
|
15
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw ur.error(i),new Error(`Error reading HarperDB config file at ${r}`)}yoe(n,r),xw(n);let s=n.toJSON();if(foe.config=s,vt=td(s),vt.logging_rotation_rotate)for(let i in xH)vt[i]&&ur.error(`Config ${xH[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);ur.trace(poe)}}o(Hg,"initConfig");function yoe(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],is.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],is.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60,replicate:!1}),n=!0),n){if(ur.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);pn.writeFileSync(t,String(e))}}o(yoe,"checkForUpdatedConfig");function xw(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 ed.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 ed.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=aoe(r,t);if(n.error)throw ed.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}o(xw,"validateConfig");function Roe(e,t){vt===void 0&&(vt={});let r=di[e.toLowerCase()];if(r===void 0){ur.trace(`Unable to update config object because config param '${e}' does not exist`);return}vt[r.toLowerCase()]=t}o(Roe,"updateConfigObject");function $H(e,t,r=void 0,n=!1,s=!1,i=!1){vt===void 0&&Hg();let a=GH(di.hdb_root),c=is.join(a,Ls.HDB_CONFIG_FILE),l=Va(c),u;if(r&&vt){let m=!1;for(let p in r)if(r[p]!=vt[p.toLowerCase()]){m=!0;break}if(!m){ur.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===ss.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=di[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=Uw(m,t);l.setIn([...p],h)}else for(let m in r){let p=di[m.toLowerCase()];if(p===ss.HTTP_SECUREPORT&&r[m]===vt[ss.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===ss.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===vt[ss.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===ss.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=Ls.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let g=Uw(p,r[m]);p==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],g)}catch(b){ur.error(b)}}}u&&qH(l,u),xw(l);let d=l.getIn(["rootPath"]),f=is.join(d,Ls.HDB_CONFIG_FILE);if(n===!0&&boe(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);pn.writeFileSync(f,String(l)),s&&(vt=td(l.toJSON())),ur.trace(`Config parameter: ${e} updated with value: ${t}`)}o($H,"updateConfigValue");function boe(e,t){try{let r=is.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${Ls.HDB_CONFIG_FILE}.bak`);pn.copySync(e,r),ur.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){ur.error(hoe),ur.error(r)}}o(boe,"backupConfigFile");var Aoe=["databases"];function td(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),kg=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])&&!Aoe.includes(i)){let a=r(n[i]);for(let c in a){if(!a.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!ss[l.toUpperCase()]&&di[l]&&(s[di[l].toLowerCase()]=a[c]),s[l]=a[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}o(r,"squashObj")}o(td,"flattenConfig");function Uw(e,t){if(e===ss.CLUSTERING_NODENAME||e===ss.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(coe(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)}o(Uw,"castConfigValue");function Ioe(){let e=wr.getPropsFilePath(),t=Tl(e);return Va(t).toJSON()}o(Ioe,"getConfiguration");async function woe(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return $H(void 0,void 0,s,!0),goe}catch(i){throw typeof i=="string"||i instanceof String?uoe(i,i,doe.BAD_REQUEST,void 0,void 0,!0):i}}o(woe,"setConfiguration");function Bw(){let e=wr.getPropsFilePath();try{pn.accessSync(e,pn.constants.F_OK|pn.constants.R_OK)}catch(n){if(!wr.noBootFile())throw ur.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Tl(e);return Va(t).toJSON()}o(Bw,"readConfigFile");function Va(e){return BH.parseDocument(pn.readFileSync(e,"utf8"),{simpleKeys:!0})}o(Va,"parseYamlDoc");function Noe(){let e=Bw(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=wr.isEmptyOrZeroLength(t)?[]:t;let r=UH(t);if(r)throw ed.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=wr.isEmptyOrZeroLength(n)?[]:n;let s=UH(n);if(s)throw ed.CONFIG_VALIDATION(s.message);if(!wr.isEmptyOrZeroLength(n)&&!wr.isEmptyOrZeroLength(t)){let i=t.filter(a=>n.some(c=>c.host===a.host&&c.port===a.port));if(!wr.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw ed.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:n}}o(Noe,"getClusteringRoutes");function VH(e){let t=FH(e);vt={};for(let r in di){let n=t.get(r.toUpperCase());if(wr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=di[r].toLowerCase();s===ss.LOGGING_ROOT?vt[s]=is.dirname(n):vt[s]=n}return vt}o(VH,"initOldConfig");function Coe(e){let t=Bw();return loe.get(t,e.replaceAll("_","."))}o(Coe,"getConfigFromFile");async function Ooe(e,t){let r=Va(Tl());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 pn.writeFile(Tl(),String(r))}o(Ooe,"addConfig");function Poe(e){let t=Tl(wr.getPropsFilePath()),r=Va(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=is.join(n,Ls.HDB_CONFIG_FILE);pn.writeFileSync(s,String(r))}o(Poe,"deleteConfigFromFile");function Loe(){return kg||(Hg(),kg)}o(Loe,"getConfigObj");function Doe(){return vt||Hg(),vt}o(Doe,"getFlatConfigObj")});var os=v((zMe,Hr)=>{"use strict";var WH="username is required",zH="nothing to update, must supply active, role or password to update",jH="password cannot be an empty string",QH="If role is specified, it cannot be empty.",JH="active must be true or false";Hr.exports.addUser=qoe;Hr.exports.alterUser=Goe;Hr.exports.dropUser=Voe;Hr.exports.getSuperUser=joe;Hr.exports.userInfo=Koe;Hr.exports.listUsers=Gg;Hr.exports.listUsersExternal=Yoe;Hr.exports.setUsersWithRolesCache=yl;Hr.exports.findAndValidateUser=Yw;Hr.exports.getClusterUser=Qoe;Hr.exports.getUsersWithRolesCache=zoe;Hr.exports.USERNAME_REQUIRED=WH;Hr.exports.ALTERUSER_NOTHING_TO_UPDATE=zH;Hr.exports.EMPTY_PASSWORD=jH;Hr.exports.EMPTY_ROLE=QH;Hr.exports.ACTIVE_BOOLEAN=JH;var XH=un(),Moe=Ga(),hp=(gw(),D(_w)),ZH=Wk(),Ep=fn(),Gw=xo(),Wi=ce(),eq=require("validate.js"),$w=z(),{promisify:voe}=require("util"),Vw=Ki(),kw=(k(),D(Y)),KH=mt(),Uoe=Et(),xoe=le(),Boe=qi(),{hdbErrors:Foe,ClientError:fi}=Ee(),{HTTP_STATUS_CODES:Ho,AUTHENTICATION_ERROR_MSGS:Fw,HDB_ERROR_MSGS:rd}=Foe,{UserEventMsg:Kw}=Zn(),Hw=require("lodash"),{server:qg}=(xr(),D(nm)),koe=z();qg.getUser=(e,t)=>Yw(e,t,t!=null);qg.authenticateUser=(e,t)=>Yw(e,t);var tq={username:!0,active:!0,role:!0,password:!0},YH=new Map,Hoe=voe(Moe.delete),qw=xoe.get(kw.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??hp.HASH_FUNCTION.SHA256,zi;async function qoe(e){let t=eq.cleanAttributes(e,tq),r=ZH.addUserValidation(t);if(r)throw new fi(r.message);let n=await Ep.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new fi(rd.ROLE_NAME_NOT_FOUND(t.role),Ho.NOT_FOUND);if(n.length>1)throw new fi(rd.DUP_ROLES_FOUND(t.role),Ho.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=Vw.encrypt(t.password)),t.password=await hp.hash(t.password,qw),t.hash_function=qw,t.role=n[0].id;let s=await XH.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if($w.debug(s),await yl(),s.skipped_hashes.length===1)throw new fi(rd.USER_ALREADY_EXISTS(t.username),Ho.CONFLICT);return Gw.signalUserChange(new Kw(process.pid)),`${t.username} successfully added`}o(qoe,"addUser");async function Goe(e){let t=eq.cleanAttributes(e,tq);if(Wi.isEmptyOrZeroLength(t.username))throw new Error(WH);if(Wi.isEmptyOrZeroLength(t.password)&&Wi.isEmptyOrZeroLength(t.role)&&Wi.isEmptyOrZeroLength(t.active))throw new Error(zH);if(!Wi.isEmpty(t.password)&&Wi.isEmptyOrZeroLength(t.password.trim()))throw new Error(jH);if(!Wi.isEmpty(t.active)&&!Wi.isBoolean(t.active))throw new Error(JH);if(!Wi.isEmpty(t.password)&&!Wi.isEmptyOrZeroLength(t.password.trim())&&($oe(t.username)&&(t.hash=Vw.encrypt(t.password)),t.password=await hp.hash(t.password,qw)),t.role==="")throw new Error(QH);if(t.role){let n=await Ep.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new fi(rd.ALTER_USER_ROLE_NOT_FOUND(t.role),Ho.NOT_FOUND);if(n.length>1)throw new fi(rd.DUP_ROLES_FOUND(t.role),Ho.CONFLICT);t.role=n[0].id}let r=await XH.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await yl(),Gw.signalUserChange(new Kw(process.pid)),r}o(Goe,"alterUser");function $oe(e){let t=!1,r=zi.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o($oe,"isClusterUser");async function Voe(e){let t=ZH.dropUserValidation(e);if(t)throw new fi(t.message);if(zi.get(e.username)===void 0)throw new fi(rd.USER_NOT_EXIST(e.username),Ho.NOT_FOUND);let r=await Hoe({table:"hdb_user",schema:"system",hash_values:[e.username]});return $w.debug(r),await yl(),Gw.signalUserChange(new Kw(process.pid)),`${e.username} successfully deleted`}o(Voe,"dropUser");async function Koe(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=Hw.cloneDeep(e.hdb_user);let r=await Ep.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}o(Koe,"userInfo");async function Yoe(){let e=await Gg();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}o(Yoe,"listUsersExternal");async function Gg(){let e=await Ep.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=Hw.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Ep.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=Hw.cloneDeep(s),s.role=t[s.role],Woe(s.role),n.set(s.username,s);return n}o(Gg,"listUsers");function Woe(e){if(!e){$w.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(Boe)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}o(Woe,"appendSystemTablesToRole");async function yl(e=void 0){e?zi=e:zi=await Gg()}o(yl,"setUsersWithRolesCache");async function zoe(){return zi||await yl(),zi}o(zoe,"getUsersWithRolesCache");async function Yw(e,t,r=!0){zi||await yl();let n=zi.get(e);if(!n){if(!r)return{username:e};throw new fi(Fw.GENERIC_AUTH_FAIL,Ho.UNAUTHORIZED)}if(n&&!n.active)throw new fi(Fw.USER_INACTIVE,Ho.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(YH.get(t)===n.password)return s;{let i=hp.validate(n.password,t,n.hash_function||hp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)YH.set(t,n.password);else throw new fi(Fw.GENERIC_AUTH_FAIL,Ho.UNAUTHORIZED)}}return s}o(Yw,"findAndValidateUser");async function joe(){zi||await yl();for(let[,e]of zi)if(e.role.role==="super_user")return e}o(joe,"getSuperUser");async function Qoe(){let e=await Gg(),t=Uoe.getConfigFromFile(kw.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==kw.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=Vw.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+KH.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+KH.SERVER_SUFFIX.ADMIN,r}o(Qoe,"getClusterUser");var rq=[];qg.invalidateUser=function(e){for(let t of rq)try{t(e)}catch(r){koe.error("Error invalidating user",r)}};qg.onInvalidatedUser=function(e){rq.push(e)}});var He,nd=oe(()=>{He={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var sd,Ww=oe(()=>{nd();sd=class{static{o(this,"ComponentStatus")}lastChecked;status;message;error;constructor(t,r,n){this.lastChecked=new Date,this.status=t,this.message=r,this.error=n}updateStatus(t,r){this.status=t,this.message=r,this.lastChecked=new Date,t!==He.ERROR&&(this.error=void 0)}markHealthy(t){this.updateStatus(He.HEALTHY,t||"Component is healthy")}markError(t,r){this.status=He.ERROR,this.error=t,this.message=r||(typeof t=="string"?t:t.message),this.lastChecked=new Date}markWarning(t){this.updateStatus(He.WARNING,t)}markLoading(t){this.updateStatus(He.LOADING,t||"Component is loading")}isHealthy(){return this.status===He.HEALTHY}hasError(){return this.status===He.ERROR}isLoading(){return this.status===He.LOADING}hasWarning(){return this.status===He.WARNING}getSummary(){let t=this.status.toUpperCase(),r=this.message?`: ${this.message}`:"";return`${t}${r}`}}});var Rl,Ka,zw,id,jw,od,Qw,$g=oe(()=>{Rl=w(Kr()),Ka=class extends Error{static{o(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=Rl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},zw=class extends Ka{static{o(this,"CrossThreadTimeoutError")}requestId;timeoutMs;collectedCount;constructor(t,r,n){super(`Component status collection timeout after ${r}ms. Collected ${n} responses for request ${t}.`,Rl.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},id=class extends Ka{static{o(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,Rl.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},jw=class extends Ka{static{o(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,Rl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},od=class extends Ka{static{o(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,Rl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},Qw=class extends Ka{static{o(this,"CrossThreadCollectionError")}result;constructor(t){let r=t.success?`Partial collection success: ${t.collectedFromThreads} threads responded`+(t.timedOutThreads.length>0?`, ${t.timedOutThreads.length} timed out`:""):`Collection failed: ${t.errors.map(n=>n.message).join(", ")}`;super(r,Rl.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(`
|
|
16
|
-
`)}}});var nq,bl,sq,Ya,_p,ad,Joe,Vg,Jw=oe(()=>{nq=w(Zn()),bl=w(Je());k();sq=w(zn());nd();$g();Ya=(0,sq.loggerWithTag)("componentStatus.crossThread"),_p=class{static{o(this,"CrossThreadStatusCollector")}awaitingResponses=new Map;responseCheckers=new Map;nextRequestId=1;listenerAttached=!1;timeout;cleanupTimer=null;constructor(t=5e3){this.timeout=t}attachListener(){this.listenerAttached||((0,bl.onMessageByType)(s_.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;Ya.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&&(Ya.debug?.(`Cleaning up ${this.awaitingResponses.size} stale pending requests`),this.awaitingResponses.clear()),this.cleanupTimer=null},3e4))}async collect(t){try{this.attachListener(),this.scheduleCleanup();let r=this.nextRequestId++,n=[];this.awaitingResponses.set(r,n);let a=((0,bl.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,g=o(()=>{let R=this.awaitingResponses.get(r);R&&R.length>=a&&!E&&(E=!0,S(),Ya.trace?.(`Collected all ${R.length} expected responses for request ${r}`),p(R))},"checkComplete"),b=setTimeout(()=>{if(!E){E=!0;let R=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),Ya.debug?.(`Collection timeout for request ${r}: collected ${R.length}/${a} responses`),p(R)}},this.timeout),S=o(()=>{this.awaitingResponses.delete(r),clearTimeout(b)},"cleanup");this.responseCheckers.set(r,g),(0,nq.sendItcEvent)({type:s_.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{g()}).catch(R=>{E=!0,S(),this.responseCheckers.delete(r),h(new id("sendItcEvent",R))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,bl.getWorkerIndex)(),m=f===void 0?"main":`worker-${f}`;for(let[p,h]of d)u.set(`${p}@${m}`,{...h,workerIndex:f});for(let p of l)for(let[h,E]of p.statuses){let g=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${g}`,{...E,workerIndex:p.workerIndex})}return Ya.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof id?Ya.error?.(`ITC failure during component status collection: ${r.message}`):Ya.warn?.("Failed to collect component status from all threads:",r),Ya.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,bl.getWorkerIndex)(),i=s===void 0?"main":`worker-${s}`;for(let[a,c]of r)n.set(`${a}@${i}`,{...c,workerIndex:s});return n}cleanup(){this.awaitingResponses.clear(),this.responseCheckers.clear(),this.cleanupTimer&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null)}},ad=class{static{o(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let a=s.indexOf("@"),c=a!==-1?s.substring(0,a):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let a=this.aggregateComponentGroup(s,i);r.set(s,a)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,a,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",g=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=g;else if(E&&E.startsWith("worker-")){let b=parseInt(E.substring(7));isNaN(b)||(n.workers[b]=g)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==He.HEALTHY&&p.message&&(!i||g>s)&&(s=g,i=p.message),p.error&&!a&&(a=p.error)}let u=this.determineOverallStatus(c);if(Array.from(c.keys()).length>1)for(let[m,p]of r)p.status!==u&&l.set(m,{workerIndex:p.workerIndex!==void 0?p.workerIndex:-1,status:p.status,message:p.message,error:p.error});let f={componentName:t,status:u,lastChecked:n,latestMessage:i,error:a};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[He.ERROR,He.WARNING,He.LOADING,He.UNKNOWN,He.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return He.UNKNOWN}},Joe=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),Vg=new _p(Joe)});var Wa,Kg=oe(()=>{Ww();nd();Jw();$g();Wa=class{static{o(this,"ComponentStatusRegistry")}statusMap=new Map;reset(){this.statusMap=new Map}setStatus(t,r,n,s){if(!t||typeof t!="string")throw new od(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(He).includes(r))throw new od(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(He).join(", ")}`);this.statusMap.set(t,new sd(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,He.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,He.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,He.WARNING,r)}initializeLoading(t,r){this.setStatus(t,He.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,He.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,He.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={[He.HEALTHY]:0,[He.ERROR]:0,[He.WARNING]:0,[He.LOADING]:0,[He.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await Vg.collect(t);return ad.aggregate(r)}}});var dr,Yg=oe(()=>{Kg();dr=new Wa});function oq(e){let t=iq.get(e);return t||(t=new Xw(e),iq.set(e,t)),t}function aq(){dr.reset()}var Xw,iq,qo,cq,lq=oe(()=>{Yg();nd();Xw=class{static{o(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return dr.setStatus(this.componentName,He.HEALTHY,t),this}warning(t){return dr.setStatus(this.componentName,He.WARNING,t),this}error(t,r){return dr.setStatus(this.componentName,He.ERROR,t,r),this}loading(t){return dr.setStatus(this.componentName,He.LOADING,t||"Loading..."),this}unknown(t){return dr.setStatus(this.componentName,He.UNKNOWN,t),this}get(){return dr.getStatus(this.componentName)}},iq=new Map;o(oq,"statusForComponent");qo={loading(e,t){dr.initializeLoading(e,t)},loaded(e,t){dr.markLoaded(e,t)},failed(e,t,r){dr.markFailed(e,t,r)}};o(aq,"reset");cq=He});var gp={};be(gp,{AggregationError:()=>jw,COMPONENT_STATUS_LEVELS:()=>He,ComponentStatus:()=>sd,ComponentStatusError:()=>Ka,ComponentStatusOperationError:()=>od,ComponentStatusRegistry:()=>Wa,CrossThreadCollectionError:()=>Qw,CrossThreadStatusCollector:()=>_p,CrossThreadTimeoutError:()=>zw,ITCError:()=>id,StatusAggregator:()=>ad,componentStatusRegistry:()=>dr,crossThreadCollector:()=>Vg,query:()=>Xoe});var Xoe,uq=oe(()=>{Yg();Kg();Ww();Kg();Jw();Yg();$g();nd();Xoe={get(e){return dr.getStatus(e)},all(){return dr.getAllStatuses()},byStatus(e){return dr.getComponentsByStatus(e)},summary(){return dr.getStatusSummary()},async allThreads(){return Wa.getAggregatedFromAllThreads(dr)}}});var Zw={};be(Zw,{STATUS:()=>cq,internal:()=>gp,lifecycle:()=>qo,reset:()=>aq,statusForComponent:()=>oq});var Sp=oe(()=>{lq();uq()});var yp=v((Cve,mq)=>{"use strict";var as=z(),hn=(k(),D(Y)),Zoe=D0(),eae=os(),{validateEvent:eN}=Zn(),Tp=rs(),tae=require("process"),{resetDatabases:rae}=(Ne(),D(ft)),nae={[hn.ITC_EVENT_TYPES.SCHEMA]:sae,[hn.ITC_EVENT_TYPES.USER]:fq,[hn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:oae};async function sae(e){let t=eN(e);if(t){as.error(t);return}as.trace("ITC schemaHandler received schema event:",e),await Zoe(e.message),await iae(e.message)}o(sae,"schemaHandler");async function iae(e){try{Tp.resetReadTxn(hn.SYSTEM_SCHEMA_NAME,hn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Tp.resetReadTxn(hn.SYSTEM_SCHEMA_NAME,hn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Tp.resetReadTxn(hn.SYSTEM_SCHEMA_NAME,hn.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){as.error(t)}}o(iae,"syncSchemaMetadata");var dq=[];async function fq(e){try{try{Tp.resetReadTxn(hn.SYSTEM_SCHEMA_NAME,hn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Tp.resetReadTxn(hn.SYSTEM_SCHEMA_NAME,hn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){as.warn(r)}let t=eN(e);if(t){as.error(t);return}as.trace(`ITC userHandler ${hn.HDB_ITC_CLIENT_PREFIX}${tae.pid} received user event:`,e),await eae.setUsersWithRolesCache();for(let r of dq)r()}catch(t){as.error(t)}}o(fq,"userHandler");fq.addListener=function(e){dq.push(e)};async function oae(e){try{let t=eN(e);if(t){as.error(t);return}as.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Sp(),D(Zw)),{getWorkerIndex:n}=Je(),{sendItcEvent:s}=Zn(),i=r.componentStatusRegistry.getAllStatuses(),a=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:hn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:a,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?as.trace(`Sent component status response directly to thread ${u}`):(u===void 0?as.debug("No originator threadId, falling back to broadcast"):as.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){as.error("Error handling component status request:",t)}}o(oae,"componentStatusRequestHandler");mq.exports=nae});var Zn=v((vve,hq)=>{"use strict";var Pve=z(),tN=ce(),aae=(k(),D(Y)),{ITC_ERRORS:Rp}=Kr(),{parentPort:Lve,threadId:cae,isMainThread:lae,workerData:Dve}=require("worker_threads"),{onMessageFromWorkers:uae,broadcast:Mve,broadcastWithAcknowledgement:dae}=Je();hq.exports={sendItcEvent:fae,validateEvent:pq,SchemaEventMsg:mae,UserEventMsg:pae};var Wg;uae(async(e,t)=>{Wg=Wg||yp(),pq(e),Wg[e.type]&&await Wg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function fae(e){return!lae&&e.message&&(e.message.originator=cae),dae(e)}o(fae,"sendItcEvent");function pq(e){if(typeof e!="object")return Rp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||tN.isEmpty(e.type))return Rp.MISSING_TYPE;if(!e.hasOwnProperty("message")||tN.isEmpty(e.message))return Rp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||tN.isEmpty(e.message.originator))return Rp.MISSING_ORIGIN;if(aae.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Rp.INVALID_EVENT(e.type)}o(pq,"validateEvent");function mae(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}o(mae,"SchemaEventMsg");function pae(e){this.originator=e}o(pae,"UserEventMsg")});var xo=v((Bve,Sq)=>{"use strict";var Eq=(k(),D(Y)),xve=ce(),zg=z(),_q=p0(),cd,{sendItcEvent:gq}=Zn();function hae(e){try{zg.debug("signalSchemaChange called with message:",e),cd=cd||yp();let t=new _q(Eq.ITC_EVENT_TYPES.SCHEMA,e);return cd.schema(t),gq(t)}catch(t){zg.error(t)}}o(hae,"signalSchemaChange");function Eae(e){try{zg.trace("signalUserChange called with message:",e),cd=cd||yp();let t=new _q(Eq.ITC_EVENT_TYPES.USER,e);return cd.user(t),gq(t)}catch(t){zg.error(t)}}o(Eae,"signalUserChange");Sq.exports={signalSchemaChange:hae,signalUserChange:Eae}});function bp(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 Tq(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Ds(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 Ds,Ap=oe(()=>{Ds=class extends Map{static{o(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let a=i[1];if(n)r=(typeof a=="string"?a:a.join(", "))+", "+r;else if(typeof a=="string")r=[a,r];else{a.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};o(bp,"appendHeader");o(Tq,"mergeHeaders")});function jg(e,t,r=gae){let n;return function(...i){return n?n.length*rN>r?t(...i):new Promise((a,c)=>{n.push({args:i,fn(){try{let l=e(...i);a(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,a){setImmediate(()=>{let c=performance.now();rN=(rN*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var bq,_ae,gae,yq,Sae,nN,Rq,rN,sN=oe(()=>{bq=w(zn()),_ae=3e3,gae=2e4,yq=0,Sae=3e4,nN=3e3,Rq=performance.now()+nN,rN=0;o(jg,"throttle");setInterval(()=>{let e=performance.now();e-Rq-nN>_ae&&yq+Sae<e&&(bq.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"),yq=e),Rq=e},nN).unref()});var vq={};be(vq,{EVICTED:()=>Ma,INVALIDATED:()=>Ln,coerceType:()=>Jg,makeTable:()=>Zg});function Zg(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:a,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:p}=e,{expirationMS:h,evictionMS:E,audit:g,trackDeletes:b}=e;E??=0;let{attributes:S}=e;S||(S=[]);let R=MA(i,n,l),L,O,x={},j=Promise.resolve(),H,F,Q;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(H=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(F=K),K.expiresAt&&(Q=K),K.isPrimaryKey&&(x=K);let W,fe=[],ue=[],ee=1,Re=2,Ie={},$e={},ke=864e5,yr=0,Xt,Ht,Zt,$f=!1,Uc,qt,Vf,Kf=Il.get(U.REPLICATION_DATABASES);if(Array.isArray(Kf)){for(let K of Kf)if(K.name===c&&K.replicateTo>=0){Vf=K.replicateTo;break}}let YE=i.getRange({start:!1,end:!1}).constructor,WE=10,lb=6;g&&Eu(),Nm(i.env.path,K=>{if(O)return Fc(K)});class Yf extends fl{static{o(this,"Updatable")}getUpdatedTime(){return La.get(this.getRecord())?.version}getExpiresAt(){return La.get(this.getRecord())?.expiresAt}addTo(_,y){if(typeof y=="number"||typeof y=="bigint")this.set(_,new sp(y));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(_,y){return this.addTo(_,-y)}}class Oe extends Fr{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=a;static databaseName=c;static attributes=S;static replicate=p;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=H;static updatedTimeProperty=F;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(_,y){if(y&&(this.sourceOptions=y,(y.expiration||y.eviction||y.scanInterval)&&this.setTTLExpiration(y)),y?.intermediateSource)_.intermediateSource=!0,this.sources.unshift(_);else{if(this.sources.some(P=>!P.intermediateSource)){if(this.sources.some(P=>P.name===_.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(_)}O=O||_.get&&(!_.get.reliesOnPrototype||_.prototype.get),L=L||_.load;let T=o(P=>{let M=this.sources;if(M=M.filter(q=>q.intermediateSource&&q[P]&&(!q[P].reliesOnPrototype||q.prototype[P])),M.length>0)if(M.length===1){let q=M[0];return(C,B,G)=>{if(C?.source!==q)return q[P](B,G,C)}}else return(q,C,B)=>{let G=[];for(let te of M){if(q?.source===te)break;G.push(te[P](C,B,q))}return Promise.all(G)}},"getApplyToIntermediateSource"),A=this.sources[this.sources.length-1];A.intermediateSource&&(A={});let I=o(P=>{if(A[P]&&(!A[P].reliesOnPrototype||A.prototype[P]))return(M,q,C)=>{if(!M?.source)return A[P](q,C,M)}},"getApplyToCanonicalSource");Ie={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish")},$e={put:T("put"),patch:T("patch"),delete:T("delete"),publish:T("publish"),invalidate:T("invalidate")};let N=A.shouldRevalidateEvents;return(async()=>{let P=!1,M,q=o(async(C,B)=>{let G=C.value,te=C.table?De[c][C.table]:Oe;if(c===em&&(C.table===gu.ROLE_TABLE_NAME||C.table===gu.USER_TABLE_NAME)&&(P=!0),C.id===void 0&&(C.id=G[te.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));C.source=_;let X={residencyId:So(C.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:C.nodeId,async:!0},$=C.id,Le=await te.getResource($,B,X);switch(C.finished&&await C.finished,C.type){case"put":return N?Le._writeInvalidate($,G,X):Le._writeUpdate($,G,!0,X);case"patch":return N?Le._writeInvalidate($,G,X):Le._writeUpdate($,G,!1,X);case"delete":return Le._writeDelete($,X);case"publish":case"message":return Le._writePublish($,G,X);case"invalidate":return Le._writeInvalidate($,G,X);case"relocate":return Le._writeRelocate($,X);default:ve.default.error?.("Unknown operation",C.type,C.id)}},"writeUpdate");try{let C=_.subscribe;C&&b==null&&(b=!0);let B={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},G=_.subscribeOnThisThread?_.subscribeOnThisThread((0,Al.getWorkerIndex)(),B):(0,Al.getWorkerIndex)()===0,te=C&&G&&await _.subscribe?.(B);if(te){let X;for await(let $ of te)try{if(!($.type==="transaction"?$.writes[0]:$)){ve.default.error?.("Bad subscription event",$);continue}if($.source=_,$.type==="end_txn"){if(X?.resolve(),$.localTime&&M!==$.localTime){if($.remoteNodeIds?.length>0){let ie=[Symbol.for("seq"),$.remoteNodeIds[0]],re=d.get(ie),ne=re?.nodes;ne||(ne=[]);for(let me of $.remoteNodeIds.slice(1)){let he=ne.find(Ve=>Ve.id===me);ne=ne.filter(Ve=>Ve.id!==me||Ve===he),he||(he={id:me,seqId:0},ne.push(he)),he.seqId=Math.max(re?.seqId??1,$.localTime),me===X?.nodeId&&(he.lastTxnTime=$.timestamp)}let _e=Math.max(re?.seqId??1,$.localTime);ve.default.trace?.("Received txn",c,_e,new Date(_e),$.localTime,new Date($.localTime),$.remoteNodeIds),d.put(ie,{seqId:_e,nodes:ne})}M=$.localTime}$.onCommit&&X?.committed.then($.onCommit);continue}if(X)if($.beginTxn)X.resolve();else{X.write_promises.push(q($,X));continue}!$.timestamp&&$.version&&($.timestamp=$.version);let ae=Tt($,()=>{if($.type==="transaction"){let ie=[];for(let re of $.writes)try{ie.push(q(re,$))}catch(ne){throw ne.message+=" writing "+JSON.stringify(re)+" of event "+JSON.stringify($),ne}return Promise.all(ie)}else if($.type==="define_schema"){let ie=this.attributes.slice(0),re=!1;for(let ne of $.attributes)ie.find(_e=>_e.name===ne.name)||(ie.push(ne),re=!0);re&&(Xe({table:s,database:c,attributes:ie,origin:"cluster"}),wp.signalSchemaChange(new Np.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return $.beginTxn?(X=$,X.write_promises=[q($,$)],new Promise(ie=>{X.resolve=()=>ie(Promise.all(X.write_promises))})):q($,$)});X&&(X.committed=ae),P&&ae&&!ae?.waitingForUserChange&&(ae.then(()=>wp.signalUserChange(new Np.UserEventMsg(process.pid))),ae.waitingForUserChange=!0),$.onCommit&&(ae?ae.then($.onCommit):$.onCommit())}catch(Le){ve.default.error?.("error in subscription handler",Le)}}}catch(C){ve.default.error?.(C)}})(),this}static get isCaching(){return O}static get shouldRevalidateEvents(){return this.prototype.get!==Oe.prototype.get}static getResource(_,y,T){let A=super.getResource(_,y,T);if(this.loadAsInstance===!1&&(y._freezeRecords=!0),_!=null&&this.loadAsInstance!==!1){Mr(_);try{if(A.getRecord?.())return A;if(typeof _=="object"&&_&&!Array.isArray(_))throw new Error(`Invalid id ${JSON.stringify(_)}`);let I=!T?.async||i.cache?.get?.(_),N=br(y),P=N.getReadTxn();if(P?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return xc(_,y,{transaction:P,ensureLoaded:T?.ensureLoaded},I,M=>{if(M?Oe._updateResource(A,M):A.#e=null,y.onlyIfCached){if(!A.doesExist())throw new lt.ServerError("Entry is not cached",504)}else if(T?.ensureLoaded){let q=Ra(_,M,y,A);if(q)return N?.disregardReadTxn(),A.#i=!0,y.loadedFromSource=!0,Ms(q,C=>(Oe._updateResource(A,C),A))}return A})}catch(I){throw I.message.includes("Unable to serialize object")&&(I.message+=": "+JSON.stringify(_)),I}}return A}static _updateResource(_,y){_.#n=y,_.#e=y?.value??null,_.#r=y?.version}ensureLoaded(){let _=Ra(this.getId(),this.#n,this.getContext());if(_)return this.#i=!0,this.getContext().loadedFromSource=!0,Ms(_,y=>{this.#n=y,this.#e=y.value,this.#r=y.version})}static getNewId(){let _=x?.type;if(_==="String"||_==="ID")return super.getNewId();if(!qt){let I=i.getEntry(Symbol.for("id_allocation")),N=I?.value,P;if(N&&N.nodeName===server.hostname&&(!Lae(i)||N.pid===process.pid)){let M=N.start,q=N.end;P=M;for(let C of i.getKeys({start:q,end:M,limit:1,reverse:!0}))P=C}else N=A(I?.version??null),P=N.start;qt=new BigInt64Array([BigInt(P)+1n]),qt=new BigInt64Array(i.getUserSharedBuffer("id",qt.buffer)),qt.maxSafeId=N.end}let y=Number(Atomics.add(qt,0,1n)),T=_==="Int"?512:1048576;if(y+T>=qt.maxSafeId){let I=o(N=>{qt.maxSafeId=y+(_==="Int"?1023:4194303);let P=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,M=N?void 0:i.useReadTransaction(),q=Number(qt[0]);for(let G of i.getKeys({start:q+1,end:P,limit:1,transaction:M}))P=G;M?.done();let{value:C,version:B}=i.getEntry(Symbol.for("id_allocation"));if(qt.maxSafeId<P){if(C.end>qt.maxSafeId-100)return;ve.default.info?.("New id allocation",y,qt.maxSafeId,B),i.put(Symbol.for("id_allocation"),{start:C.start,end:qt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),B)}else{ve.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${qt.maxSafeId}, but id of ${P} detected`);let G=A(B);G.alreadyUpdated||Atomics.store(qt,0,BigInt(G.start+1)),qt.maxSafeId=G.end}},"updateEnd");y+T===qt.maxSafeId?setImmediate(I):y+100>=qt.maxSafeId&&(ve.default.warn?.(`Synchronous id allocation required on table ${s}${_=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>I(!0)))}return y;function A(I){let N=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,P=N/4,M,q,C=!1,B,G;do{B=Math.floor(Math.random()*N),G={start:B,end:B+(_==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},M=0;for(let te of i.getKeys({start:B,limit:1,reverse:!0}))M=te;q=N;for(let te of i.getKeys({start:B+1,end:N,limit:1}))q=te;P*=.875,P<1e3&&!C&&(C=!0,ve.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${_==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,B,M,q,P))}while(!(P<q-B&&(P<B-M||M===0)));return i.transactionSync(()=>{let te=i.getEntry(Symbol.for("id_allocation"));return(te?.version??null)==I?(ve.default.info?.("Allocated new id range",G),i.put(Symbol.for("id_allocation"),G,Date.now()),G):(ve.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...te.value})})}}static setTTLExpiration(_){if(typeof _=="number")h=_*1e3,E||(E=0);else if(_&&typeof _=="object")h=_.expiration*1e3,E=(_.eviction||0)*1e3,ke=_.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");ke=ke||(h+E)/4,Fc()}static getResidencyRecord(_){return d.get([Symbol.for("residency_by_id"),_])}static setResidency(_){Oe.getResidency=_&&((y,T)=>{try{return _(y,T)}catch(A){throw A.message+=` in residency function for table ${s}`,A}})}static setResidencyById(_){Oe.getResidencyById=_&&(y=>{try{return _(y)}catch(T){throw T.message+=` in residency function for table ${s}`,T}})}static getResidency(_,y){if(Oe.getResidencyById)return Oe.getResidencyById(_[t]);let T=Vf;if(y.replicateTo!=null){if(Array.isArray(y.replicateTo))return y.replicateTo.includes(server.hostname)?y.replicateTo:[server.hostname,...y.replicateTo];y.replicateTo>=0&&(T=y.replicateTo)}if(T>=0&&server.nodes){let A=[server.hostname];if(y.previousResidency)A.push(...y.previousResidency.slice(0,T));else{let I=server.nodes.map(M=>M.name),N=Math.floor(I.length*Math.random());A.push(...I.slice(N,N+T));let P=N+T-I.length;P>0&&A.push(...I.slice(0,P))}return A}}static enableAuditing(){g||(g=!0,Eu(),Oe.audit=!0)}static coerceId(_){return _===""?null:Jg(_,x)}static async dropTable(){delete De[c][s];for(let _ of i.getRange({versions:!0,snapshot:!1,lazy:!0}))_.metadataFlags&Pn&&_.value&&Ca(_.value);if(c===a){for(let _ of S)d.remove(Oe.tableName+"/"+_.name),r[_.name]?.drop();d.remove(Oe.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),oN.default.unlinkSync(i.env.path);wp.signalSchemaChange(new Np.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(_){let y=this.constructor;if(typeof _=="string"&&y.loadAsInstance!==!1)return this.getProperty(_);if(zf(_))return this.search(_);if(_&&_.id===void 0&&!_.toString()){let T={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?Oe.getRecordCount().then(A=>(T.recordCount=A.recordCount,T.estimatedRecordRange=A.estimatedRange,T)):T}if(_!==void 0&&y.loadAsInstance===!1){let T=this.getContext(),A=br(T),I=A.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let N=Rr(_);Mr(N);let P=!0;return _.checkPermission&&(P=this.allowRead(T.user,_)),Ms(Ms(P,M=>{if(!M)throw new lt.AccessViolation(T.user);let q=!0;return xc(N,T,{transaction:I,ensureLoaded:q},!1,C=>{if(T.onlyIfCached){if(!C?.value)throw new lt.ServerError("Entry is not cached",504)}else if(q){let B=Ra(N,C,T);if(B)return A?.disregardReadTxn(),T.loadedFromSource=!0,B.then(G=>G?.value)}return C?.value})}),M=>{let q=_?.select;return q&&M!=null?Bu(q,this.constructor)(M):M})}if(_?.property)return this.getProperty(_.property);if(this.doesExist()||_?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(_,y){let T=Vr(_,y);if(T?.read){if(T.isSuperUser)return!0;let A=T.attribute_permissions,I=y?.select;if(A?.length>0||$f&&I){if(y||(y={}),I){let N=A?.length>0&&iN(A,"read");y.select=I.map(P=>{let M=P.name||P;if(!N||N[M]){let q=Zt[M]?.definition?.tableClass;if(q){if(P.name||(P={name:P}),!P.checkPermission&&y.checkPermission&&(P.checkPermission=y.checkPermission),!q.prototype.allowRead.call(null,_,P))return!1;if(!P.select)return P.name}return P}}).filter(Boolean)}else y.select=A.filter(N=>N.read&&!Zt[N.attribute_name]).map(N=>N.attribute_name);return y}else return!0}}allowUpdate(_,y,T){let A=Vr(_,T);if(A?.update){let I=A.attribute_permissions;if(I?.length>0){let N=iN(I,"update");for(let P in y)if(!N[P])return!1;for(let P of I){let M=P.attribute_name;!P.update&&!(M in y)&&(y[M]=this.getProperty(M))}}return Bc(this.getContext())}}allowCreate(_,y,T){if(this.isCollection){let A=Vr(_,T);if(A?.insert){let I=A.attribute_permissions;if(I?.length>0){let N=iN(I,"insert");for(let P in y)if(!N[P])return!1;return Bc(this.getContext())}else return Bc(this.getContext())}}else return this.allowUpdate(_,{})}allowDelete(_,y){return Vr(_,y)?.delete&&Bc(this.getContext())}update(_,y){let T,A=typeof y=="boolean"||y===void 0&&(_==null||typeof _=="object"&&!(_ instanceof URLSearchParams)),I=!1;A?(I=y,y=_,T=this.getId()):T=Rr(_);let N=this.getContext();if(!br(N))throw new Error("Can not update a table resource outside of a transaction");if(y===!1)return this;if(typeof y=="object"&&y)if(I)Object.isFrozen(y)&&(y={...y}),this.#e={},this.#t=y;else if(A){let M=this.#t;M&&(y=Object.assign(M,y)),this.#t=y}else{let M=!0;if(_==null)throw new TypeError("Can not put a record without a target");return _.checkPermission&&(M=this.allowUpdate(N.user,y,_)),Ms(M,q=>{if(!q)throw new lt.AccessViolation(N.user);return Ms(i.get(Rr(_)),C=>{let B=new Yf(C);return B._setChanges(y),this._writeUpdate(T,B.getChanges(),!1),B})})}return this._writeUpdate(T,this.#t,I),this}addTo(_,y){if(typeof y=="number"||typeof y=="bigint")this.#s===Iq?this.set(_,(+this.getProperty(_)||0)+y):(this.#s||this.update(),this.set(_,new sp(y)));else throw new Error("Can not add a non-numeric value")}subtractFrom(_,y){if(typeof y=="number")return this.addTo(_,-y);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(_){this.#t=_}setRecord(_){this.#e=_}invalidate(_){let y=!0,T=this.getContext();return _?.checkPermission&&(y=this.allowDelete(T.user,_,T)),Ms(y,A=>{if(!A)throw new lt.AccessViolation(T.user);this._writeInvalidate(_?Rr(_):this.getId())})}_writeInvalidate(_,y,T){let A=this.getContext();Mr(_),br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Ie.invalidate?.bind(this,A,_),beforeIntermediate:Hc(y,$e.invalidate?.bind(this,A,_)),commit:o((N,P)=>{if(!(ba(N,P,T?.nodeId)<=0)){y??=null;for(let M in r)y||(y={}),y[M]===void 0&&(y[M]=this.getProperty(M));ve.default.trace?.(`Invalidating entry in ${s} id: ${_}, timestamp: ${new Date(N).toISOString()}`),R(_,y,P,N,Ln,g,{user:A?.user,residencyId:T?.residencyId,nodeId:T?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(_,y){let T=this.getContext();Mr(_),br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Ie.relocate?.bind(this,T,_),beforeIntermediate:$e.relocate?.bind(this,T,_),commit:o((I,N)=>{if(ba(I,N,y?.nodeId)<=0)return;let P=Oe.getResidencyRecord(y.residencyId),M=0,q=null,C=N?.value;if(P&&!P.includes(server.hostname)){for(let B in r)q||(q={}),q[B]=C[B];M=Ln}else q=C;ve.default.trace?.(`Relocating entry id: ${_}, timestamp: ${new Date(I).toISOString()}`),R(_,q,N,I,M,g,{user:T.user,residencyId:y.residencyId,nodeId:y.nodeId,expiresAt:y.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(_,y){let T={previousResidency:this.getResidencyRecord(_.residencyId),isRelocation:!0},A=kc(this.getResidency(y.value,T)),I;if(A){if(!A.includes(server.hostname))return!1;I=So(A)}let N=0;ve.default.debug?.("Performing a relocate of an entry",existing_entry.key,y.value,A);let P=R(_.key,y.value,_,_.version,N,!0,{residencyId:I,expiresAt:y.expiresAt},"relocate",!1,null);return!0}static evict(_,y,T){let A=this.Source,I;if(!((O||g)&&(!y||(I=i.getEntry(_),!I||!y)||I.version!==T))){if(O){if(i.hasLock(_,I.version))return;let N;for(let P in r)N||(N={}),N[P]=y[P];if(N)return R(_,N,I,T,Ma,null,null,null,!0)}if(i.ifVersion(_,T,()=>{go(_,y,null)}),g)return R(_,null,I,T,Ma,null,null,null,!0);rl(i,I??i.getEntry(_),T)}}lock(){throw new Error("Not yet implemented")}static operation(_,y){return _.table||=s,_.schema||=c,global.operation(_,y)}put(_,y){if(y===void 0||y instanceof URLSearchParams)this.update(_,!0);else{let T=!0;if(_==null)throw new TypeError("Can not put a record without a target");let A=this.getContext();return _.checkPermission&&(T=this.allowUpdate(A.user,y,_)),Ms(T,I=>{if(!I)throw new lt.AccessViolation(A.user);if(Array.isArray(y))for(let N of y){let P=N[t];this._writeUpdate(P,N,!0)}else{let N=Rr(_);this._writeUpdate(N,y,!0)}})}}create(_,y){let T=!0,A=this.getContext();if(!y&&!(_ instanceof URLSearchParams)&&(y=_,_=void 0),!y||typeof y!="object"||Array.isArray(y))throw new TypeError("Can not create a record without an object");return _?.checkPermission&&(T=this.allowCreate(A.user,y,_)),Ms(T,I=>{if(!I)throw new lt.AccessViolation(A.user);let N=Rr(_)??y[t];if(N===void 0)N=this.constructor.getNewId();else if(i.get(N))throw new lt.ClientError("Record already exists",409);return this._writeUpdate(N,y,!0),y})}patch(_,y){if(y===void 0||y instanceof URLSearchParams)this.update(_,!1);else{let T=this.update(_,y);if(T?.then)return T.then(()=>{})}}_writeUpdate(_,y,T,A){let I=this.getContext(),N=br(I);Mr(_);let P=this.#n??i.getEntry(_);this.#s=T?Iq:Nae;let M=o(C=>T?C.put?()=>C.put(I,_,y):null:C.patch?()=>C.patch(I,_,y):C.put?()=>C.put(I,_,ml(this)):null,"writeToSources"),q={key:_,store:i,entry:P,nodeName:I?.nodeName,validate:o(C=>{y||(y=this.#t),T||y&&Ig(this.#t===y?this:y)?I?.source||(N.checkOverloaded(),this.validate(y,!T),F&&(y[F.name]=F.type==="Date"?new Date(C):F.type==="String"?new Date(C).toISOString():C),T&&(t&&y[t]!==_&&(y[t]=_),H&&(P?.value?y[H.name]=P?.value[H.name]:y[H.name]=H.type==="Date"?new Date(C):H.type==="String"?new Date(C).toISOString():C),y=ml(y))):N.removeWrite(q)},"validate"),before:M(Ie),beforeIntermediate:Hc(y,M($e)),commit:o((C,B,G)=>{if(G){if(I&&B?.version>(I.lastModified||0)&&(I.lastModified=B.version),this.#n=B,B?.value&&B.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");T||(this.#e=B?.value??null)}this.#t=void 0,this.#r=C;let te=B?.value,X;this.#s=0;let $=!1,Le=ba(C,B,A?.nodeId),ae;if(Le<=0){if(g){let me=B.localTime,he=B.version;ve.default.trace?.("Applying CRDT update to record with id: ",_,"txn time",new Date(C),"applying later update from:",new Date(he),"local recorded time",new Date(me));let Ve=[];for(;me>C||he>=C&&me>0;){let we=l.get(me);if(!we)break;let Ze=Mt(we);if(he=Ze.version,he>=C){if(he===C){if(Le=ba(C,{version:he,localTime:me},A?.nodeId),Le===0)return;if(Le>0)continue}if(Ze.type==="patch")Ve.push(Ze),ae=y;else if(Ze.type==="put"||Ze.type==="delete")return}me=Ze.previousLocalTime}me||ve.default.debug?.("No further audit history, applying incremental updates based on available history",_,"existing version preserved",B),Ve.sort((we,Ze)=>we.version-Ze.version);for(let we of Ve){let Ze=we.getValue(i);if(ve.default.debug?.("Rebuilding update with future patch:",new Date(we.version),Ze,we),X=g_(X??y,Ze,T),!X)return}}else{if(T)return;X=g_(X??y,te,T),ve.default.debug?.("Rebuilding update without audit:",X)}ve.default.trace?.("Rebuilt record to save:",X," is full update:",T)}let ie;if(T&&!X?ie=y:this.constructor.loadAsInstance===!1?ie=ml(te,X??y):(this.#e=te,ie=ml(this,X??y)),this.#e=ie,ie&&ie.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let re;if(A?.residencyId!=null)re=A.residencyId;else{P?.residencyId&&(I.previousResidency=Oe.getResidencyRecord(P.residencyId));let me=kc(Oe.getResidency(ie,I));if(me&&!me.includes(server.hostname))if(ae??=ie,$=!0,Oe.getResidencyById)ie=void 0;else{ie=null;for(let he in r)ie||(ie={}),ie[he]=ae[he]}re=So(me)}T||(ae=y);let ne=I?.expiresAt??(h?h+Date.now():-1);ve.default.trace?.(`Saving record with id: ${_}, timestamp: ${new Date(C).toISOString()}${ne?", expires at: "+new Date(ne).toISOString():""}${B?", replaces entry from: "+new Date(B.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(ie).slice(0,100)}catch{return""}})()),go(_,te,ie);let _e=T?"put":"patch";R(_,ie,B,C,$?Ln:0,g,{omitLocalRecord:$,user:I?.user,residencyId:re,expiresAt:ne,nodeId:A?.nodeId,originatingOperation:I?.originatingOperation,tableToTrack:c==="system"?null:s},_e,!1,ae),I.expiresAt&&Fc()},"commit")};N.addWrite(q)}async delete(_){if(zf(_)){_.select=["$id"];for await(let y of this.search(_))this._writeDelete(y.$id);return!0}if(_){let y=!0,T=this.getContext();return _.checkPermission&&(y=this.allowDelete(T.user,_,T)),Ms(y,A=>{if(!A)throw new lt.AccessViolation(T.user);let I=Rr(_);return this._writeDelete(I),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(_,y){let T=br(this.getContext());Mr(_);let A=this.getContext();return T.addWrite({key:_,store:i,entry:this.#n,nodeName:A?.nodeName,before:Ie.delete?.bind(this,A,_),beforeIntermediate:$e.delete?.bind(this,A,_),commit:o((I,N,P)=>{let M=N?.value;P&&(A&&N?.version>(A.lastModified||0)&&(A.lastModified=N.version),Oe._updateResource(this,N)),!(ba(I,N,y?.nodeId)<=0)&&(go(this.getId(),M),ve.default.trace?.(`Deleting record with id: ${_}, txn timestamp: ${new Date(I).toISOString()}`),g||b?(R(_,null,N,I,0,g,{user:A?.user,nodeId:y?.nodeId,tableToTrack:s},"delete"),g||Fc()):rl(i,N))},"commit")}),!0}search(_){let y=this.getContext(),T=br(y);if(!_)throw new Error("No query provided");if(_.parseError)throw _.parseError;if(_.checkPermission&&!this.allowRead(y.user,_))throw new lt.AccessViolation(y.user);y&&(y.lastModified=bae);let A=_.conditions;A?A.length===void 0&&(A=A[Symbol.iterator]?Array.from(A):[A]):A=Array.isArray(_)?_:_[Symbol.iterator]?Array.from(_):[];let I=_.id??this.getId();I&&(A=[{attribute:null,comparator:Array.isArray(I)?"prefix":"starts_with",value:I}].concat(A));let N,P={};function M(ne,_e){let me;switch(_e){case"and":case void 0:if(ne.length<1)throw new Error('An "and" operator requires at least one condition');me=!0;break;case"or":if(ne.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+_e)}for(let he of ne){if(he.conditions){he.conditions=M(he.conditions,he.operator);continue}let Ve=he[0]??he.attribute,we=Ve==null?x:Bi(S,Ve);if(we)(we.type||UA[he.comparator])&&(he[1]===void 0?he.value=C(he.value,we):he[1]=C(he[1],we));else if(Ve!=null)throw(0,lt.handleHDBError)(new Error,`${Ve} is not a defined attribute`,404);if(he.chainedConditions)if(he.chainedConditions.length===1&&(!he.operator||he.operator=="and")){let Ze=he.chainedConditions[0],vr,Xs;if(Ze.comparator==="gt"||Ze.comparator==="greater_than"||Ze.comparator==="ge"||Ze.comparator==="greater_than_equal"?(vr=he,Xs=Ze):(vr=Ze,Xs=he),vr.comparator!=="lt"&&vr.comparator!=="less_than"&&vr.comparator!=="le"&&vr.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Te=Xs.comparator==="ge"||Xs.comparator==="greater_than_equal",bt=vr.comparator==="le"||vr.comparator==="less_than_equal";he.comparator=(Te?"ge":"gt")+(bt?"le":"lt"),he.value=[Xs.value,vr.value]}else throw new Error("Multiple chained conditions are not currently supported")}return ne}o(M,"prepareConditions");function q(ne,_e){if(_.enforceExecutionOrder)return ne;for(let me of ne)me.conditions&&(me.conditions=q(me.conditions,me.operator));return ne.length>1&&_e!=="or"?Tae(ne,eg(Oe)):ne}o(q,"orderConditions");function C(ne,_e){return Array.isArray(ne)?ne.map(me=>Jg(me,_e)):Jg(ne,_e)}o(C,"coerceTypedValues");let B=_.operator;(A.length>0||B)&&(A=M(A,B));let G=typeof _.sort=="object"&&_.sort,te;if(G&&B!=="or"){let ne=G.attribute;if(ne==null)throw new lt.ClientError("Sort requires an attribute");if(N=A.find(_e=>vu(_e.attribute)===vu(ne)),!N){let _e=Bi(S,ne);if(!_e)throw(0,lt.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not a defined attribute`,404);if(_e.indexed)N={...G,comparator:"sort"},A.push(N);else if(A.length===0&&!_.allowFullScan)throw(0,lt.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not indexed and not combined with any other conditions`,404)}N&&(N.descending=!!G.descending)}A=q(A,B),G&&(N&&A[0]===N?G.next&&(te={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(N&&A.splice(A.indexOf(N),1),te=G));let X=_.select;if(A.length===0&&(A=[{attribute:t,comparator:"greater_than",value:!0}]),_.explain)return{conditions:A,operator:B,postOrdering:te,selectApplied:!!X};let $=T.useReadTxn(),Le=xA(A,B,Oe,$,_,y,(ne,_e)=>jf(ne,X,y,$,_e),P),ae=_.ensureLoaded!==!1,ie=Oe.transformEntryForSelect(X,y,$,P,ae,!0),re=Oe.transformToOrderedSelect(Le,X,te,y,$,ie);return(_.offset||_.limit!==void 0)&&(re=re.slice(_.offset,_.limit!==void 0?(_.offset||0)+_.limit:void 0)),re.onDone=()=>{re.onDone=null,T.doneReadTxn()},re.selectApplied=!0,re.getColumns=()=>{if(X){let ne=[];for(let _e of X)_e==="*"?ne.push(...S.map(me=>me.name)):ne.push(_e.name||_e);return ne}return S.filter(ne=>!ne.computed&&!ne.relationship).map(ne=>ne.name)},re}static transformToOrderedSelect(_,y,T,A,I,N){let P=new YE;if(T){_=jf(_,y,A,I,null);let M;P.iterate=function(){let C,B=_[Symbol.asyncIterator]?_[Symbol.asyncIterator]():_[Symbol.iterator](),G,te=T.dbOrderedAttribute,X,$,Le=!0;function ae(re){let ne=re.next&&ae(re.next),_e=re.descending;return A.sort=re,(me,he)=>{let Ve=pu(me,re.attribute,A),we=pu(he,re.attribute,A),Ze=_e?(0,wl.compareKeys)(we,Ve):(0,wl.compareKeys)(Ve,we);return Ze===0?ne?.(me,he)||0:Ze}}o(ae,"createComparator");let ie=ae(T);return{async next(){let re;if(C)if(re=C.next(),re.done){if(G)return P.onDone&&P.onDone(),re}else return{value:await N.call(this,re.value)};M=[],X&&M.push(X);do if(re=await B.next(),re.done){if(G=!0,M.length)break;return P.onDone&&P.onDone(),re}else{let ne=re.value;if(ne?.then&&(ne=await ne),te){let _e=pu(ne,te,A);if(Le)Le=!1,$=_e;else if(_e!==$){$=_e,X=ne;break}}M.push(ne)}while(!0);return T.isGrouped,M.sort(ie),C=M[Symbol.iterator](),re=C.next(),re.done?(P.onDone&&P.onDone(),re):{value:await N.call(this,re.value)}},return(){return P.onDone&&P.onDone(),B.return()},throw(){return P.onDone&&P.onDone(),B.throw()}}};let q=o(C=>{if(typeof y=="object"&&Array.isArray(C.attribute))for(let B=0;B<y.length;B++){let G=y[B],te;if(G.name===C.attribute[0]){for(te=G.sort||(G.sort={});te.next;)te=te.next;te.attribute=C.attribute.slice(1),te.descending=C.descending}else G===C.attribute[0]&&(y[B]=te={name:G,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&q(C.next)},"applySortingOnSelect");q(T)}else P.iterate=(_[Symbol.asyncIterator]||_[Symbol.iterator]).bind(_),P=P.map(function(M){try{let q=N.call(this,M);return typeof q?.catch=="function"?q.catch(C=>{throw C.partialObject={[t]:M.key},C}):q}catch(q){throw q.partialObject={[t]:M.key},q}});return P}static transformEntryForSelect(_,y,T,A,I,N){let P;I&&O&&!(typeof _=="string"?[_]:_)?.every(C=>{let B;return typeof C=="object"?B=C.name:B=C,r[B]||B===t})&&(P=!0);let M,q=o(function(C){let B;if(y?.transaction?.stale&&(y.transaction.stale=!1),C!=null){if(B=C.deref?C.deref():C.value,!B&&(C.key===void 0||C.deref)||C.metadataFlags&Ln){if(C.metadataFlags&Ln&&y.replicateFrom===!1&&N&&C.residencyId)return ja.SKIP;if(C=xc(C.key??C,y,{transaction:T,lazy:_?.length<4,ensureLoaded:I},this?.isSync,G=>G),C?.then)return C.then(q.bind(this));B=C?.value}if(P&&C?.metadataFlags&(Ln|Ma)||C?.expiresAt!=null&&C?.expiresAt<Date.now()){if(y.onlyIfCached)return{[t]:C.key,message:"This entry has expired"};let G=Ra(C.key??C,C,y);if(G?.then)return G.then(q)}}if(B==null)return N?ja.SKIP:B;if(_&&!(_[0]==="*"&&_.length===1)){let G,te=o(($,Le)=>{let ae;typeof $=="object"?ae=$.name:ae=$;let ie=Zt?.[ae],re;if(ie){let ne=A?.[ae];if(ne)if(ne.hasMappings){let me=ie.from?B[ie.from]:vu(C.key);re=ne.get(me),re||(re=[])}else re=ne.fromRecord?.(B);else re=ie(B,y,C,!0);let _e=o(me=>{if(ie.directReturn)return Le(me,ae);if(me&&typeof me=="object"){let he=ie.definition?.tableClass||Oe;M||(M={});let Ve=M[ae]||(M[ae]=he.transformEntryForSelect(ae===$?null:$.select||(Array.isArray($)?$:null),y,T,ne,I));if(Array.isArray(me)){let we=[],Ze=he.transformToOrderedSelect(me,$.select,typeof $.sort=="object"&&$.sort,y,T,Ve)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),vr=o(Te=>{for(;!Te.done;){if(Te?.then)return Te.then(vr);we.push(Te.value),Te=Ze.next()}Le(we,ae)},"nextValue"),Xs=vr(Ze.next());Xs&&(G||(G=[]),G.push(Xs));return}else if(me=Ve.call(this,me),me?.then){G||(G=[]),G.push(me.then(we=>Le(we,ae)));return}}Le(me,ae)},"handleResolvedValue");re?.then?(G||(G=[]),G.push(re.then(_e))):_e(re);return}else re=B[ae],re&&typeof re=="object"&&ae!==$&&(re=Oe.transformEntryForSelect($.select||$,y,T,null)({value:re}));Le(re,ae)},"selectAttribute"),X;if(typeof _=="string")te(_,$=>{X=$});else if(Array.isArray(_))if(_.asArray)X=[],_.forEach(($,Le)=>{$==="*"?_[Le]=B:te($,ae=>X[Le]=ae)});else{X={};let $=_.forceNulls;for(let Le of _)if(Le==="*")for(let ae in B)X[ae]=B[ae];else te(Le,(ae,ie)=>{ae===void 0&&$&&(ae=null),X[ie]=ae})}else throw new lt.ClientError("Invalid select"+_);return G?Promise.all(G).then(()=>X):X}return B},"transform");return q}async subscribe(_){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||Xe({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),_||(_={});let y=!_.rawEvents,T=[],A=$A(Oe,this.getId()??null,function(P,M,q,C){try{let B=M.getValue?.(i,y),G=M.type;if(!B&&G==="patch"&&y){let X=i.getEntry(P);X?.version===M.version?B=X.value:B=M.getValue?.(i,!0,q),G="put"}let te={id:P,localTime:q,value:B,version:M.version,type:G,beginTxn:C};T?T.push(te):(c!=="system"&&qe(M.size??1,"db-message",s,null),this.send(te))}catch(B){ve.default.error?.(B)}},_.startTime||0,_),I=(async()=>{this.isCollection&&(A.includeDescendants=!0,_.onlyChildren&&(A.onlyChildren=!0)),_.supportsTransactions&&(A.supportsTransactions=!0);let P=this.getId(),M=_.previousCount;M>1e3&&(M=1e3);let q=_.startTime;if(this.isCollection){if(q){if(M)throw new lt.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:C,value:B}of l.getRange({start:q,exclusiveStart:!0,snapshot:!1})){let G=Mt(B);if(G.tableId!==n)continue;let te=G.recordId;if(P==null||Oq(P,te)){let X=G.getValue(i,y,C);if(N({id:te,localTime:C,value:X,version:G.version,type:G.type,size:G.size}),A.queue?.length>Nq&&await A.waitForDrain()===!1)return}A.startTime=C}}else if(M){let C=[];for(let{key:B,value:G}of l.getRange({start:"z",end:!1,reverse:!0}))try{let te=Mt(G);if(te.tableId!==n)continue;let X=te.recordId;if(P==null||Oq(P,X)){let $=te.getValue(i,y,B);if(C.push({id:X,localTime:B,value:$,version:te.version,type:te.type}),--M<=0)break}}catch(te){ve.default.error("Error getting history entry",B,te)}for(let B=C.length;B>0;)N(C[--B]);C[0]&&(A.startTime=C[0].localTime)}else if(!_.omitCurrent){for(let{key:C,value:B,version:G,localTime:te,size:X}of i.getRange({start:P??!1,end:P==null?void 0:[P,wl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(B&&(N({id:C,localTime:te,value:B,version:G,type:"put",size:X}),A.queue?.length>Nq&&await A.waitForDrain()===!1))return}}else{M&&!q&&(q=0);let C=this.#n?.localTime;if(C===DA&&(i.cache?.delete(P),this.#n=i.getEntry(P),ve.default.trace?.("re-retrieved record",C,this.#n?.localTime),C=this.#n?.localTime),ve.default.trace?.("Subscription from",q,"from",P,C),q<C){let B=[],G=C;do{let te=l.get(G);if(te){_.omitCurrent=!0;let X=Mt(te),$=X.getValue(i,y,G);y&&(X.type="put"),B.push({id:P,value:$,localTime:G,...X}),G=X.previousLocalTime}else break;M&&M--}while(G>q&&M!==0);for(let te=B.length;te>0;)N(B[--te]);A.startTime=C}!_.omitCurrent&&this.doesExist()&&N({id:P,localTime:C,value:this.#e,version:this.#r,type:"put"})}for(let C of T)N(C);T=null})();function N(P){c!=="system"&&qe(P.size??1,"db-message",s,null),A.send(P)}return o(N,"send"),_.listener&&A.on("data",_.listener),A}static subscribeOnThisThread(_,y){return _===0||y?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(_,y,T){if(y===void 0||y instanceof URLSearchParams)this._writePublish(this.getId(),_,y);else{let A=!0,I=this.getContext();return _.checkPermission&&(A=this.allowCreate(I.user,_,I)),Ms(A,N=>{if(!N)throw new lt.AccessViolation(I.user);let P=Rr(_);this._writePublish(P,y,T)})}}_writePublish(_,y,T){let A=br(this.getContext());_??=null,_!==null&&Mr(_);let I=this.getContext();A.addWrite({key:_,store:i,entry:this.#n,nodeName:I?.nodeName,validate:o(()=>{I?.source||(A.checkOverloaded(),this.validate(y))},"validate"),before:Ie.publish?.bind(this,I,_,y),beforeIntermediate:Hc(y,$e.publish?.bind(this,I,_,y)),commit:o((N,P,M)=>{P===void 0&&b&&!g&&Fc(),ve.default.trace?.(`Publishing message to id: ${_}, timestamp: ${new Date(N).toISOString()}`),R(_,P?.value??null,P,P?.version||N,0,!0,{user:I?.user,residencyId:T?.residencyId,expiresAt:I?.expiresAt,nodeId:T?.nodeId,tableToTrack:s},"message",!1,y)},"commit")})}validate(_,y){let T,A=o((I,N,P)=>{if(N.type&&I!=null)if(y&&I.__op__&&(I=I.value),N.properties){typeof I!="object"&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be an object${N.type?" ("+N.type+")":""}`);let M=N.properties;for(let q=0,C=M.length;q<C;q++){let B=M[q];if(B.relationship||B.computed){_.hasOwnProperty(B.name)&&(T||(T=[])).push(`Computed property ${P}.${B.name} may not be directly assigned a value`);continue}let G=A(I[B.name],B,P+"."+B.name);G&&(I[B.name]=G)}if(N.sealed&&I!=null&&typeof I=="object")for(let q in I)M.find(C=>C.name===q)||(T||(T=[])).push(`Property ${q} is not allowed within object in property ${P}`)}else switch(N.type){case"Int":(typeof I!="number"||I>>0!==I)&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof I!="number"||!(Math.floor(I)===I&&Math.abs(I)<=9007199254740992))&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof I!="number"&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a number`);break;case"ID":typeof I=="string"||I?.length>0&&I.every?.(M=>typeof M=="string")||(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a string, or an array of strings`);break;case"String":typeof I!="string"&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a string`);break;case"Boolean":typeof I!="boolean"&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a boolean`);break;case"Date":if(!(I instanceof Date)){if(typeof I=="string"||typeof I=="number")return new Date(I);(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a Date`)}break;case"BigInt":if(typeof I!="bigint"){if(typeof I=="string"||typeof I=="number")return BigInt(I);(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a bigint`)}break;case"Bytes":if(!(I instanceof Uint8Array)){if(typeof I=="string")return Buffer.from(I);(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(I instanceof bs)){if(typeof I=="string"&&(I=Buffer.from(I)),I instanceof Buffer)return createBlob(I,{type:"text/plain"});(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a Blob`)}break;case"array":if(Array.isArray(I)){if(N.elements)for(let M=0,q=I.length;M<q;M++){let C=I[M],B=A(C,N.elements,P+"[*]");B&&(I[M]=B)}}else(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be an Array`);break}N.nullable===!1&&I==null&&(T||(T=[])).push(`Property ${P} is required (and not does not allow null values)`)},"validateValue");for(let I=0,N=S.length;I<N;I++){let P=S[I];if(P.relationship||P.computed){Object.hasOwn(_,P.name)&&(T||(T=[])).push(`Computed property ${P.name} may not be directly assigned a value`);continue}if(!y||P.name in _){let M=A(_[P.name],P,P.name);M!==void 0&&(_[P.name]=M)}}if(f)for(let I in _)S.find(N=>N.name===I)||(T||(T=[])).push(`Property ${I} is not allowed`);if(T)throw new lt.ClientError(T.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return O?!!this.#i:void 0}static async addAttributes(_){let y=S.slice(0);for(let T of _){if(!T.name)throw new lt.ClientError("Attribute name is required");if(T.name.match(/[`/]/))throw new lt.ClientError("Attribute names cannot include backticks or forward slashes");yae(T.name),y.push(T)}return Xe({table:s,database:c,schemaDefined:u,attributes:y}),Oe.indexingOperation}static async removeAttributes(_){let y=S.filter(T=>!_.includes(T.name));return Xe({table:s,database:c,schemaDefined:u,attributes:y}),Oe.indexingOperation}static getSize(){let _=i.getStats();return(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getAuditSize(){let _=l?.getStats();return _&&(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getStorageStats(){let _=i.env.path,y=oN.default.statfsSync?.(_)??{};return{available:y.bavail*y.bsize,free:y.bfree*y.bsize,size:y.blocks*y.bsize}}static async getRecordCount(_){let y=i.getStats().entryCount,T=1e3/2,A=performance.now(),I=Math.floor(y/2),N=_?.exactCount,P=0,M=0,q;for(let{value:C}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(C!=null&&P++,M++,await za(),!N&&M<I&&performance.now()-A>T){q=M;break}if(q){let C=P;P=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:q,snapshot:!1}))re!=null&&P++,await za();let B=q*2,G=(P+C)/B,te=Math.pow((P-C+1)/q/2,2)+G*(1-G)/B,X=Math.max(Math.sqrt(te)*y,1),$=Math.round(G*y),Le=Math.max($-1.96*X,P+C),ae=Math.min($+1.96*X,y),ie=Math.pow(10,Math.round(Math.log10(X)));return ie>$&&(ie=ie/10),P=Math.round($/ie)*ie,{recordCount:P,estimatedRange:[Math.round(Le),Math.round(ae)]}}return{recordCount:P}}static updatedAttributes(){Zt=this.propertyResolvers={$id:o((_,y,T)=>({value:T.key}),"$id"),$updatedtime:o((_,y,T)=>T.version,"$updatedtime"),$updatedTime:o((_,y,T)=>T.version,"$updatedTime"),$expiresAt:o((_,y,T)=>T.expiresAt,"$expiresAt"),$record:o((_,y,T)=>T?{value:_}:_,"$record"),$distance:o((_,y,T)=>T&&(T.distance??y?.vectorDistances?.get(T)),"$distance")};for(let _ of this.attributes){_.isPrimaryKey&&(x=_),_.resolve=null;let y=_.relationship,T=_.computed;if(y)if(_.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),T&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),$f=!0,y.to)_.elements?.definition?(Zt[_.name]=_.resolve=(A,I,N,P)=>{let M=A[y.from?y.from:t],q=_.elements.definition.tableClass;return P?Mu({attribute:y.to,value:M},br(I).getReadTxn(),!1,q,!1).map(C=>C&&C.key!==void 0?C:q.primaryStore.getEntry(C,{transaction:br(I).getReadTxn()})).asArray:q.search([{attribute:y.to,value:M}],I).asArray},_.set=()=>{},_.resolve.definition=_.elements.definition,_.resolve.to=y.to,y.from&&(_.resolve.from=y.from)):console.error(`The one-to-many/many-to-many relationship property "${_.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(y.from){let A=_.definition||_.elements?.definition;A?(Zt[_.name]=_.resolve=(I,N,P,M)=>{let q=I[y.from];if(q===void 0)return;if(_.elements){let B,G=q?.map(te=>{let X=A.tableClass.primaryStore[M?"getEntry":"get"](te,{transaction:br(N).getReadTxn()});return X?.then&&(B=!0),Oe.loadAsInstance===!1&&Object.freeze(M?X?.value:X),X});return y.filterMissing?B?Promise.all(G).then(te=>te.filter(Pq)):G.filter(Pq):B?Promise.all(G):G}let C=A.tableClass.primaryStore[M?"getEntry":"get"](q,{transaction:br(N).getReadTxn()});return Oe.loadAsInstance===!1&&Object.freeze(M?C?.value:C),C},_.set=(I,N)=>{if(Array.isArray(N)){let P=N.map(M=>M.getId?.()||M[A.tableClass.primaryKey]);I[y.from]=P}else{let P=N.getId?.()||N[A.tableClass.primaryKey];I[y.from]=P}},_.resolve.definition=_.definition||_.elements?.definition,_.resolve.from=y.from):console.error(`The relationship property "${_.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${_.name}" in table "${s}" must use either "from" or "to" arguments`);else if(T)typeof T.from=="function"&&this.setComputedAttribute(_.name,T.from),Zt[_.name]=_.resolve=(A,I,N)=>{let P=typeof T.from=="string"?A[T.from]:A,M=this.userResolvers[_.name];if(M)return M(P,I,N);ve.default.warn(`Computed attribute "${_.name}" does not have a function assigned to it. Please use setComputedAttribute('${_.name}', resolver) to assign a resolver function.`),this.userResolvers[_.name]=()=>{}},_.resolve.directReturn=!0;else if(r[_.name]?.customIndex?.propertyResolver){let A=r[_.name].customIndex;Zt[_.name]=(I,N,P)=>{let M=I[_.name];return A.propertyResolver(M,N,P)},Zt[_.name].directReturn=!0}}ip(this,this),ip(Yf,this,!0);for(let _ of S){let y=_.name;_.resolve&&Object.defineProperty(i.encoder.structPrototype,y,{get(){return _.resolve(this,xu.getStore())},set(T){return _.set(this,T)},configurable:!0})}}static setComputedAttribute(_,y){let T=Bi(S,_);if(!T){console.error(`The attribute "${_}" does not exist in the table "${s}"`);return}if(!T.computed){console.error(`The attribute "${_}" is not defined as computed in the table "${s}"`);return}this.userResolvers[_]=y}static async deleteHistory(_=0,y=!1){let T;for(let{key:A,value:I}of l.getRange({start:0,end:_}))await za(),Mt(I).tableId===n&&(T=k_(l,A,I));if(y)for(let A of i.getRange({start:0,versions:!0})){let{key:I,value:N,localTime:P}=A;await za(),N===null&&P<_&&(T=rl(i,A))}await T}static async*getHistory(_=0,y=1/0){for(let{key:T,value:A}of l.getRange({start:_||1,end:y})){await za();let I=Mt(A);I.tableId===n&&(yield{id:I.recordId,localTime:T,version:I.version,type:I.type,value:I.getValue(i,!0,T),user:I.user,operation:I.originatingOperation})}}static async getHistoryOfRecord(_){let y=[];if(_==null)throw new Error("An id is required");let T=i.getEntry(_);if(!T)return y;let A=T.localTime;if(!A)throw new Error("The entry does not have a local audit time");let I=0;do{await za();let N=l.get(A);if(N){let P=Mt(N);y.push({id:P.recordId,localTime:A,version:P.version,type:P.type,value:P.getValue(i,!0,A),user:P.user}),A=P.previousLocalTime}else break}while(I<1e3&&A);return y.reverse()}static cleanup(){W?.remove()}}let zE=jg(async(K,_,y)=>{for(let T of Oe.sources)if(T.get&&(!T.get.reliesOnPrototype||T.prototype.get)){if(T.available?.(y)===!1)continue;_.source=T;let A=await T.get(K,_);if(A)return A}},()=>{throw new lt.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});Oe.updatedAttributes();let Wf=Oe.prototype;return h&&Oe.setTTLExpiration(h/1e3),Q&&jE(),Oe;function go(K,_,y){let T;for(let A in r){let I=r[A],N=I.isIndexing,P=Zt[A],M=y&&(P?P(y):y[A]),q=_&&(P?P(_):_[A]);if(M===q&&!N)continue;if(I.customIndex){I.customIndex.index(K,M,q);continue}T=!0;let C=I.indexNulls,B=(0,Ip.getIndexedValues)(M,C),G=(0,Ip.getIndexedValues)(q,C);if(s==="OrganizationRole"&&ve.default.error?.({tableName:s,id:K,key:A,valuesToAdd:B,valuesToRemove:G}),G?.length>0){let te=new Set(G);if(B=B?B.filter(X=>{if(te.has(X))te.delete(X);else return!0}):[],G=Array.from(te),(G.length>0||B.length>0)&&Aq){let X=G.concat(B).map($=>({key:$,value:K}));I.prefetch(X,Cq)}for(let X=0,$=G.length;X<$;X++)I.remove(G[X],K)}else B?.length>0&&Aq&&I.prefetch(B.map(te=>({key:te,value:K})),Cq);if(B)for(let te=0,X=B.length;te<X;te++)I.put(B[te],K)}return T}o(go,"updateIndices");function Mr(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>wq)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,wl.writeKey)(K,Cae,0)>wq)throw new Error("Primary key size is too large: "+K.length);return!0}o(Mr,"checkValidId");function Rr(K){return typeof K=="object"&&K?K.id:K}o(Rr,"requestTargetToId");function zf(K){return typeof K=="object"&&K&&K.isCollection}o(zf,"isSearchTarget");function ub(K){}o(ub,"isRequestTarget");function xc(K,_,y,T,A){if(Oe.getResidencyById&&y.ensureLoaded&&_?.replicateFrom!==!1){let N=kc(Oe.getResidencyById(K));if(N&&!N.includes(server.hostname)&&L)return L({key:K,residency:N}).then(A)}let I=o(()=>{if(_?.transaction?.stale&&(_.transaction.stale=!1),y.transaction?.isDone)return A(null,K);let N=i.getEntry(K,y);return(c!=="system"||s==="hdb_analytics")&&(Mq.default.trace?.("Recording db-read action for",`${c}.${s}`),qe(N?.size??1,"db-read",s,null)),_?._freezeRecords&&Object.freeze(N?.value),N?.residencyId&&N.metadataFlags&Ln&&L&&y.ensureLoaded&&_?.replicateFrom!==!1?L(N).then(P=>A(P,K),P=>(ve.default.error?.("Error loading remote record",K,N,y,P),A(null,K))):(N&&_&&(N?.version>(_.lastModified||0)&&(_.lastModified=N.version),N?.localTime&&!_.lastRefreshed&&(_.lastRefreshed=N.localTime)),A(N,K))},"whenPrefetched");return T?I():ee>0?(ee--,I()):new Promise((N,P)=>{ee===0?(ee--,i.prefetch([K],()=>{M(),q()})):(fe.push(K),ue.push(q),fe.length>lb&&(ee--,M()));function M(){if(fe.length>0){let C=ue;i.prefetch(fe,()=>{ee===-1?M():ee++;for(let B of C)B()}),fe=[],ue=[],Re>2&&Re--}else ee=Re,Re<WE&&Re++}o(M,"prefetch");function q(){try{N(I())}catch(C){P(C)}}o(q,"load")})}o(xc,"loadLocalRecord");function Vr(K,_){let y=_?.checkPermission;if(typeof y!="object"){if(!K?.role)return;y=K.role.permission}if(y.super_user)return Oae;let T=y[c],A,I=T?.tables;if(I)return I[s];if(c==="data"&&(A=y[s])&&!A.tables)return A}o(Vr,"getTablePermissions");function Ra(K,_,y,T){if(O){let A=!1;if(y.noCache?A=!0:(_?(!_.value||_.metadataFlags&(Ln|Ma)||_.expiresAt!=null&&_.expiresAt<Date.now())&&(A=!0):A=!0,zr(!A,"cache-hit",s)),A){let I=hu(K,_,y).then(N=>(N?.value&&N?.value.getRecord?.()&&ve.default.error?.("Can not assign a record that is already a resource"),y&&(N?.version>(y.lastModified||0)&&(y.lastModified=N.version),y.lastRefreshed=Date.now()),N));if(y?.onlyIfCached||_?.value&&T?.allowStaleWhileRevalidate?.(_,K)){if(I.catch(N=>ve.default.warn?.(N)),y?.onlyIfCached&&!T.doesExist())throw new lt.ServerError("Entry is not cached",504);return}else return I}}else if(_?.value&&_.expiresAt!=null&&_.expiresAt<Date.now())return Oe.evict(_.key,_.value,_.version),_.value=null,{then(A){return A(_)}}}o(Ra,"ensureLoadedFromSource");function br(K){let _=K?.transaction;if(_){if(!_.lmdbDb)return _.lmdbDb=i,_;do{if(_.lmdbDb?.path===i.path)return _;let y=_.next;if(!y)return _=_.next=new yo,_.lmdbDb=i,_;_=y}while(!0)}else return new E_}o(br,"txnForContext");function pu(K,_,y){if(!K)return;let T=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof _=="object"){let I=Zt,N=T;for(let P=0,M=_.length;P<M;P++){let q=_[P],C=I?.[q];N=C&&N?C(N,y,K):N?.[q],K=null,I=C?.definition?.tableClass?.propertyResolvers}return N}let A=Zt[_];return A?A(T,y,K):T[_]}o(pu,"getAttributeValue");function jf(K,_,y,T,A){let I=A?.length,N={transaction:T,lazy:I>0||typeof _=="string"||_?.length<4,alwaysPrefetch:!0},P;function M(q,C){let B=q?.value;if(!B)return ja.SKIP;for(let G=0;G<I;G++)if(!P?.includes(G)&&!A[G](B,q))return ja.SKIP;return C!==void 0&&(q.key=C),q}if(o(M,"processEntry"),I>0||!K.hasEntries){let q=K.map(C=>{if(P=null,typeof C=="object"&&C?.key!==void 0)return I>0?M(C):C;if(C==null)return ja.SKIP;for(let B=0;B<I;B++){let te=A[B].idFilter;if(te){if(!te(C))return ja.SKIP;P||(P=[]),P.push(B)}}return xc(C,y,N,!1,M)});return Array.isArray(K)&&(q=q.filter(C=>C!==ja.SKIP)),q.hasEntries=!0,q}return K}o(jf,"transformToEntries");function ba(K,_,y=server.replication?.getThisNodeId(l)){if(K<=_?.version){if(_?.version===K&&y!==void 0){let T=server.replication?.exportIdMapping(l),A=_.localTime,I=A&&l.get(A);if(I){let N,P,M=Mt(I);for(let q in T)T[q]===y&&(N=q),T[q]===M.nodeId&&(P=q);if(N>P)return 1;if(N===P)return 0}}return-1}return 1}o(ba,"precedesExistingVersion");async function hu(K,_,y){let T=_?.metadataFlags,A=_?.version,I,N;if(!i.attemptLock(K,A,()=>{clearTimeout(N);let C=i.getEntry(K);!C||!C.value||C.metadataFlags&(Ln|Ma)?I(hu(K,i.getEntry(K),y)):I(C)}))return new Promise(C=>{I=C,N=setTimeout(()=>{i.unlock(K,A)},wae)});let P=_?.value,M={requestContext:y,replacingRecord:P,replacingEntry:_,replacingVersion:A,noCacheStore:!1,source:null,resourceCache:y?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},q=y?.responseHeaders;return new Promise((C,B)=>{let G;Ms(Tt(M,async te=>{let X=performance.now(),$,Le,ae;try{$=await zE(K,M,_),ae=T&Ln;let re=M.lastModified||ae&&A;Le=ae||re>A||!P,re||(re=(0,Ip.getNextMonotonicTime)());let ne=performance.now()-X;if(qe(ne,"cache-resolution",s,null,"success"),q&&bp(q,"Server-Timing",`cache-resolve;dur=${ne.toFixed(2)}`,!0),te.timestamp=re,h&&M.expiresAt==null&&(M.expiresAt=Date.now()+h),$){if(typeof $!="object")throw new Error("Only objects can be cached and stored in tables");if($.status>0&&$.headers)if($.status>=300)if($.status===304)$=P,re=A;else throw new lt.ServerError($.body||"Error from source",$.status);else $=$.body;typeof $.toJSON=="function"&&($=$.toJSON()),t&&$[t]!==K&&($[t]=K)}G=!0,C({key:K,version:re,value:$})}catch(re){re.message+=` while resolving record ${K} for ${s}`,P&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!y?.mustRevalidate||y?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(C({key:K,version:A,value:P}),ve.default.trace?.(re.message,"(returned stale record)")):B(re);let ne=performance.now()-X;qe(ne,"cache-resolution",s,null,"fail"),q&&bp(q,"Server-Timing",`cache-resolve;dur=${ne.toFixed(2)}`,!0),M.transaction.abort();return}if(y?.noCacheStore||M.noCacheStore){M.transaction.abort();return}br(M).addWrite({key:K,store:i,entry:_,nodeName:"source",before:Hc($),commit:o((re,ne)=>{if(ne?.version!==A)return;let _e=go(K,P,$);if($){$e.put?.(M,K,$),ne&&(y.previousResidency=Oe.getResidencyRecord(ne.residencyId));let me,he=!1,Ve,we=kc(Oe.getResidency($,y));if(we){if(!we.includes(server.hostname))if(me=$,he=!0,Oe.getResidencyById)$=void 0;else{$=null;for(let Ze in r)$||($={}),$[Ze]=me[Ze]}Ve=So(we)}ve.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),R(K,$,ne,re,he?Ln:0,g&&(Le||he)||null,{user:M?.user,expiresAt:M.expiresAt,residencyId:Ve,tableToTrack:s},"put",!!ae,me)}else ne&&($e.delete?.(M,K),ve.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),g||b?R(K,null,ne,re,0,g&&Le||null,{user:M?.user,tableToTrack:s},"delete",!!ae):rl(i,ne,A))},"commit")})}),()=>{i.unlock(K,A)},te=>{i.unlock(K,A),G&&ve.default.error?.("Error committing cache update",te)})})}o(hu,"getFromSource");function Bc(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new lt.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new lt.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(Bc,"checkContextPermissions");function Fc(K){let _=!1;if(K&&(K-yr>1&&(_=!0),yr=K),!(ke===Xt&&!_)&&(Xt=ke,(0,Al.getWorkerIndex)()===(0,Al.getWorkerCount)()-1))return Ht&&clearTimeout(Ht),ke?new Promise(y=>{let T=new Date;T.setMonth(0),T.setDate(1),T.setHours(0),T.setMinutes(0),T.setSeconds(0);let A=ke/(1+yr),I=_?Date.now():Math.ceil((Date.now()-T.getTime())/A)*A+T.getTime(),N=o(P=>{ve.default.trace?.(`Scheduled next cleanup scan at ${new Date(P)}`),Ht=setTimeout(()=>j=j.then(async()=>{if(N(Math.max(P+ke,Date.now())),i.rootStore.status!=="open"){clearTimeout(Ht);return}let M=50,q=new Array(M),C=0,B=Math.pow(yr,8)*(Il.get(U.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),G=E/Math.pow(Math.max(yr,1),4);ve.default.debug?.(`Starting cleanup scan for ${s}, evict threshold ${B}, adjusted eviction ${G}ms`);function te(X,$,Le,ae){let ie=X+G-Date.now();if(ie<0)return!0;if(yr){let re=i.lastSize;return Le&Pn&&bu(ae,ne=>{ne.size&&(re+=ne.size)}),ve.default.trace?.(`shouldEvict adjusted ${ie} ${re}, ${ie*(X-$)/re} < ${B}`),ie*(X-$)/re<B}return!1}o(te,"shouldEvict");try{let X=0;for(let $ of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:Le,value:ae,version:ie,expiresAt:re,metadataFlags:ne}=$,_e;ae===null&&!g&&ie+Iae<Date.now()?_e=rl(i,$,ie):re!=null&&te(re,ie,ne,ae)&&(_e=Oe.evict(Le,ae,ie),X++),_e&&(await q[C],q[C]=_e.catch(me=>{ve.default.error?.("Cleanup error",me)}),++C>=M&&(C=0)),await za()}ve.default.debug?.(`Finished cleanup scan for ${s}, evicted ${X} entries`)}catch(X){ve.default.warn?.(`Error in cleanup scan for ${s}:`,X)}y(void 0),yr=0}),Math.min(P-Date.now(),2147483647)).unref()},"startNextTimer");N(I)}):void 0}o(Fc,"scheduleCleanup");function Eu(){W=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}o(Eu,"addDeleteRemoval");function jE(){(0,Al.getWorkerIndex)()===0&&setInterval(async()=>{if(!Uc){Uc=!0;try{let K=Q.name,_=r[K];if(!_)throw new Error(`expiresAt attribute ${Q} must be indexed`);for(let y of _.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let T of _.getValues(y)){let A=i.getEntry(T);A?.value?A.value[K]<Date.now()&&Oe.evict(T,A.value,A.version):i.ifVersion(T,A?.version,()=>_.remove(y,T))}await za()}}catch(K){ve.default.error?.("Error in evicting old records",K)}finally{Uc=!1}}},Aae).unref()}o(jE,"runRecordExpirationEviction");function kc(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let _=server.shards?.get?.(K);if(_)return ve.default.trace?.(`Shard ${K} mapped to ${_.map(y=>y.name).join(", ")}`),_.map(y=>y.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}o(kc,"residencyFromFunction");function So(K){if(K){let _=K.join(","),y=d.get([Symbol.for("residency_by_set"),_]);return y||(d.put([Symbol.for("residency_by_set"),_],y=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),y],K),y)}}o(So,"getResidencyId");function Hc(K,_){let y=tA(K,i.rootStore);if(y){let T=_;return T?async()=>{await T(),await y}:()=>y}return _}o(Hc,"preCommitBlobsForRecordBefore")}function iN(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 Cq(){}function Jg(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 Qg(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return Qg(+e);case"Float":return e==="null"?null:Qg(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;Pae.test(e)||(e+="Z");let n=new Date(e);return Qg(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,Xg.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function Qg(e){if(isNaN(e))throw new SyntaxError;return e}function Oq(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 Ms(e,t,r){return e?.then?e.then(t,r):t(e)}function Pq(e){return e!=null}function vs(e){try{return JSON.stringify(e)}catch{return e}}function Lae(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var ja,Ip,Lq,Dq,Il,lt,wp,Np,ve,wl,Al,Xg,oN,Mq,Tae,yae,Rae,bae,Aae,Iae,Aq,wae,Iq,Nae,Ln,Ma,Cae,wq,Nq,Oae,iUe,Pae,za,ng=oe(()=>{k();ja=require("lmdb"),Ip=w(Cn()),Lq=w(require("lodash")),Dq=w(dm());va();mm();Il=w(le());VA();lt=w(Ee()),wp=w(xo()),Np=w(Zn());Ne();rg();ve=w(zn());XI();Na();wl=require("ordered-binary"),Al=w(Je());Ro();Xg=w(ce());Zc();jn();S_();Ap();oN=w(require("node:fs"));As();U_();Mq=w(z());sN();({sortBy:Tae}=Lq.default),{validateAttribute:yae}=Dq.default,Rae=new Uint8Array(9);Rae[8]=192;bae=1/0,Aae=6e4,Iae=864e5;Il.initSync();Aq=Il.get(U.STORAGE_PREFETCHWRITES),wae=1e4,Iq=1,Nae=2,Ln=1,Ma=8,Cae=Buffer.allocUnsafeSlow(8192),wq=1978,Nq=100,Oae={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},iUe=(0,Xg.convertToMS)(Il.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(Zg,"makeTable");o(iN,"attributesAsObject");o(Cq,"noop");Pae=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(Jg,"coerceType");o(Qg,"rejectNaN");o(Oq,"isDescendantId");za=o(()=>new Promise(setImmediate),"rest");o(Ms,"when");o(Pq,"exists");o(vs,"stringify");o(Lae,"hasOtherProcesses")});function eS(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,a=t[s]||0,c=i-a;r+=c*c}return r}function tS(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let a=0;a<i;a++){let c=e[a]||0,l=t[a]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var Uq=oe(()=>{o(eS,"euclideanDistance");o(tS,"cosineDistance")});var xq,Bq,ud,ji,ld,Dae,Mae,rS,Fq=oe(()=>{Uq();xq=require("msgpackr"),Bq=w(zn()),ud=w(Ee()),ji=(0,Bq.loggerWithTag)("HNSW"),ld=Symbol.for("entryPoint"),Dae=Symbol.for("key"),Mae=10,rS=class{static{o(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=xq.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?eS:tS,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"?[Dae,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let a=new Map,c,l=this.indexStore.get(ld);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let E=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:E,primaryKey:t};for(let b=0;b<=E;b++)g[b]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);ji.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),Mae),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);ji.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 g=this.searchLayer(r,l,f,this.efConstruction,E);g=g.slice(0,this.M<<1),g.length===0&&E===0&&ji.info?.("should not have zero connections for",l);let b=h[E];for(let S=0;S<g.length;S++){let{id:R,distance:L,node:O}=g[S];if(R===i)continue;let x=[];if(this.optimizeRouting){let F=!1,Q=O[E],W=1+this.optimizeRouting*(1+.5*S/this.M);for(let fe=0;fe<Q.length;fe++){let{id:ue,distance:ee}=Q[fe],Re=1+this.optimizeRouting*(1+.5*fe/this.M);for(let Ie=0;Ie<b.length;Ie++){let{id:$e,distance:ke}=b[Ie];if($e===ue){L*W>ke+ee?F=!0:ee*Re>L+ke&&(x.push({fromId:$e,toId:R}),x.push({fromId:R,toId:$e}));break}}if(F)break}if(F)continue}else if(S>=(E>0?this.M:this.M<<1))continue;b.push({id:R,distance:L});for(let{fromId:F,toId:Q}of x){let W=d(F);W||(W=d(F,this.indexStore.get(F)));for(let fe=0;fe<W[E].length;fe++)if(W[E][fe].id===Q){Object.isFrozen(W[E])&&(W[E]=W[E].slice()),W[E].splice(fe,1);break}}let j=c[E],H=j?.find(({id:F})=>F===R);if(H){let F=j?.indexOf(H);j.copied||(j=[...j],j.copied=!0,c[E]=j),j.splice(F,1)}else this.addConnection(R,d(R,O),i,E,L,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);ji.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));for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:g})=>g!==i),h[E].length===0&&(ji.info?.("node was left orphaned, will reindex",p),u.set(h.primaryKey,h.vector))}}function d(f,m){let p=a.get(f);return!p&&m&&(p={...m},a.set(f,p)),p}o(d,"updateNode");for(let[f,m]of a)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(ld);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,a=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((p,h)=>p.distance-h.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:p}of m[i]||[]){if(c.has(p)||p===void 0)continue;c.add(p);let h=this.indexStore.get(p);if(!h)continue;this.nodesVisitedCount++;let E=a(t,h.vector);if(E<f||u.length<s){let g={id:p,distance:E,node:h};l.push(g),u.push(g)}}u.sort((p,h)=>p.distance-h.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let a=0;switch(i){case"lt":case"le":a=r;case"sort":break;default:throw new ud.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new ud.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=tS;else if(s==="euclidean")c=eS;else{if(s)throw new ud.ClientError("Unknown distance function");c=this.distance}if(!t)throw new ud.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new ud.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return a&&(d=d.filter(f=>f.distance<a)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let a=this.indexStore.get(i);if(!a){ji.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||ji.info?.("asymmetry detected",a[n])}n++}}addConnection(t,r,n,s,i,a){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){ji.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=a(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=a(f.id,m),m[s]=m[s].filter(({id:p})=>p!==t),s===0&&m[s].length===0&&ji.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?ji.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let a=s.shift(),c=this.indexStore.get(a);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let a=this.distance;s.type&&(a=s.distance==="euclidean"?eS:tS);let c=a(s.target,t);return i.set(n,c),c}return t}}});var aN,kq=oe(()=>{Fq();aN={HNSW:rS}});var ft={};be(ft,{NON_REPLICATING_SYSTEM_TABLES:()=>nS,database:()=>Qu,databaseEnvs:()=>Go,databases:()=>De,dropDatabase:()=>nw,dropTableMeta:()=>kae,getDatabases:()=>at,getDefaultCompression:()=>uS,getTables:()=>Uae,onRemovedDB:()=>vp,onUpdatedTable:()=>Nl,readMetaDb:()=>Cp,resetDatabases:()=>hd,table:()=>Xe,tables:()=>En});function Mp(e,t){let r=cS.OpenDBIObject??cS.default.OpenDBIObject;return new r(e,t)}function Uae(){return aS||at(),En||{}}function at(){if(aS)return De;aS=!0,md=new Map;let e=(0,Vt.getHdbBasePath)()&&(0,Ut.join)((0,Vt.getHdbBasePath)(),Gc),t=(0,Vt.get)(U.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Vt.get)(U.STORAGE_PATH)||e&&((0,cs.existsSync)(e)?e:(0,Ut.join)((0,Vt.getHdbBasePath)(),t_)),!!e){if((0,cs.existsSync)(e))for(let r of(0,cs.readdirSync)(e,{withFileTypes:!0})){let n=(0,Ut.basename)(r.name,".mdb");r.isFile()&&(0,Ut.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Cp((0,Ut.join)(e,r.name),null,n)}if((0,cs.existsSync)((0,fd.getBaseSchemaPath)())){for(let r of(0,cs.readdirSync)((0,fd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Ut.join)((0,fd.getBaseSchemaPath)(),r.name),s=(0,Ut.join)((0,fd.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,cs.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Ut.extname)(i.name).toLowerCase()===".mdb"){let a=(0,Ut.join)(s,i.name);Cp((0,Ut.join)(n,i.name),(0,Ut.basename)(i.name,".mdb"),r.name,a,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,cs.existsSync)(s))for(let a of(0,cs.readdirSync)(s,{withFileTypes:!0}))a.isFile()&&(0,Ut.extname)(a.name).toLowerCase()===".mdb"&&Cp((0,Ut.join)(s,a.name),(0,Ut.basename)(a.name,".mdb"),r);let i=n.tables;if(i)for(let a in i){let c=i[a],l=(0,Ut.join)(c.path,(0,Ut.basename)(a+".mdb"));(0,cs.existsSync)(l)&&Cp(l,a,r,null,!0)}}for(let r in De){let n=md.get(r);if(n){let s=De[r];r.includes("delete")&&Nr.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Nr.trace(`delete table class ${i}`),delete s[i])}else if(delete De[r],r==="data"){for(let s in En)delete En[s];delete En[lS]}}if((0,Vt.get)(U.ANALYTICS_REPLICATE)===!1?nS.includes("hdb_analytics")||nS.push("hdb_analytics"):(De.system?.hdb_analytics?.enableAuditing(),De.system?.hdb_analytics_hostname?.enableAuditing()),De.system)for(let r of nS)De.system[r]&&(De.system[r].replicate=!1);return md=null,De}}function hd(){aS=!1;for(let[,e]of Go)e.needsDeletion=!0;at();for(let[e,t]of Go)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Go.delete(e);let r=De[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete De[t.databaseName],Pp.forEach(i=>i(t.databaseName));break}}return De}function Cp(e,t,r=uN,n,s){let i=new cN.default(e,!1);try{let a=Go.get(e);a?a.needsDeletion=!1:(a=(0,pd.open)(i),Go.set(e,a));let c=new Mp(!1),l=a.dbisDb||(a.dbisDb=a.openDB(sS.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,cs.existsSync)(n)&&(i.path=n,u=(0,pd.open)(i),u.isLegacy=!0):u=F_(a));let d=Vq(r),f=d[lS],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,g]=p.toString().split("/");g===""?g=h.name:g||(g=E,E=t,h.name||(h.name=g,h.indexed=!h.is_hash_attribute)),f?.add(E);let b=m.get(E);b||m.set(E,b={attributes:[]}),(g==null||h.is_hash_attribute)&&(b.primary=h),g!=null&&b.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:g}=h;if(!g){for(let ee of E)if(ee.is_hash_attribute||ee.isPrimaryKey){g=ee;break}if(!g){Nr.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let b=d[p],S={},R=[],L,O,x=typeof g.audit=="boolean"?g.audit:(0,Vt.get)(U.LOGGING_AUDITLOG),j=g.trackDeletes,H=g.expiration,F=g.eviction,Q=g.sealed,W=g.splitSegments,fe=g.replicate;if(b)S=b.indices,R=b.attributes,b.schemaVersion++;else{L=g.tableId,L?L>=(l.get(dd)||0)&&(l.putSync(dd,L+1),Nr.info(`Updating next table id (it was out of sync) to ${L+1} for ${p}`)):(g.tableId=L=l.get(dd),L||(L=1),Nr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(dd,L+1),l.putSync(g.key,g));let ee=new Mp(!g.is_hash_attribute,g.is_hash_attribute);if(ee.compression=g.compression,ee.compression){let Re=(0,Vt.get)(U.STORAGE_COMPRESSION_THRESHOLD)||$q;ee.compression.threshold=Re}O=X_(a.openDB(g.key,ee),a),a.databaseName=r,O.tableId=L}let ue;for(let ee of E){ee.attribute=ee.name;try{if(!ee.is_hash_attribute&&(ee.indexed||ee.attribute&&!ee.name)){if(!S[ee.name]){let Ie=Yq(ee.key,a,ee);S[ee.name]=Ie,S[ee.name].indexNulls=ee.indexNulls}let Re=R.find(Ie=>Ie.name===ee.name);Re?R.splice(R.indexOf(Re),1,ee):R.push(ee),ue=!0}}catch(Re){Nr.error("Error trying to update attribute",ee,R,S,Re)}}for(let ee of R)if(!E.find(Ie=>Ie.name===ee.name)){if(ee.is_hash_attribute){Nr.error("Unable to remove existing primary key attribute",ee);continue}ee.indexed&&(R.splice(R.indexOf(ee),1),ue=!0)}if(b)ue&&(b.schemaVersion++,b.updatedAttributes());else{b=Kq(d,p,Zg({primaryStore:O,auditStore:u,audit:x,sealed:Q,splitSegments:W,replicate:fe,expirationMS:H&&H*1e3,evictionMS:F&&F*1e3,trackDeletes:j,tableName:p,tableId:L,primaryKey:g.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:g.schemaDefined,dbisDB:l})),b.schemaVersion=1;for(let ee of Op)ee(b)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function Vq(e){let t=De[e];if(t||(e==="data"?t=De[e]=En:e==="system"?Object.defineProperty(De,"system",{value:t=Object.create(null),configurable:!0}):t=De[e]=Object.create(null)),md&&!md.has(e)){let r=new Set;t[lS]=r,md.set(e,r)}return t}function Kq(e,t,r){return e[t]=r,r}function Qu({database:e,table:t}){e||(e=uN),at();let r=Vq(e),n=(0,Ut.join)((0,Vt.getHdbBasePath)(),Gc),s=(0,Vt.get)(U.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,Vt.get)(U.STORAGE_PATH)||((0,cs.existsSync)(n)?n:(0,Ut.join)((0,Vt.getHdbBasePath)(),t_));let a=(0,Ut.join)(n,(i?t:e)+".mdb"),c=Go.get(a);if(!c||c.status==="closed"){let l=new cN.default(a,!1);c=(0,pd.open)(l),Go.set(a,c)}return c.auditStore||(c.auditStore=F_(c)),c}async function nw(e){if(!De[e])throw new Error("Schema does not exist");let t=De[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Go.delete(r.path),r.status==="open"&&(await r.close(),await Lp.remove(r.path));if(r||(r=Qu({database:e,table:null}),r.status==="open"&&(await r.close(),await Lp.remove(r.path))),e==="data"){for(let n in En)delete En[n];delete En[lS]}delete De[e],Pp.forEach(n=>n(e)),await eA(r)}function Yq(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&aN[r.indexed.type]?.useObjectStore,s=new Mp(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=aN[r.indexed.type];a?i.customIndex=new a(i,r.indexed):Nr.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function Xe(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:a,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=uN);let h=Qu({database:r,table:t}),E=De[r];Nr.trace(`Defining ${t} in ${r}`);let g=E?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let b,S,R;m==null&&(m=!0);let L=new Mp(!1);for(let W of a)W.attribute&&!W.name?(W.name=W.attribute,W.indexed=!0):W.attribute=W.name,W.expiresAt&&(W.indexed=!0);let O,x;if(g){if(b=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...a)}else{let W=h.auditStore;S=a.find(Re=>Re.isPrimaryKey)||{},b=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=uS(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,Vt.get)(U.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),u??=!1,S.splitSegments=u,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),p&&(S.origins?S.origins.includes(p)||S.origins.push(p):S.origins=[p]),Nr.trace(`${t} table loading, opening primary store`);let fe=new Mp(!1,!0);fe.compression=S.compression;let ue=t+"/";if(R=h.dbisDb=h.openDB(sS.INTERNAL_DBIS_NAME,L),Q(),R.get(ue))return x&&x(),hd(),Xe(e);let ee=X_(h.openDB(ue,fe),h);h.databaseName=r,ee.tableId=R.get(dd),Nr.trace(`Assigning new table id ${ee.tableId} for ${t}`),ee.tableId||(ee.tableId=1),R.put(dd,ee.tableId+1),S.tableId=ee.tableId,g=Kq(E,t,Zg({primaryStore:ee,auditStore:W,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:b,tableName:t,tableId:ee.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:R})),g.schemaVersion=1,O=!0,R.put(ue,S)}let j=g.indices;R=R||(h.dbisDb=h.openDB(sS.INTERNAL_DBIS_NAME,L)),g.dbisDB=R;let H=[];for(let{key:W,value:fe}of R.getRange({start:!0})){let[ue,ee]=W.toString().split("/");if(ee===""&&(ee=fe.name),ee){if(ue!==t)continue}else continue;let Re=a.find($e=>$e.name===ee),Ie=!Re?.indexed&&fe.indexed&&!fe.isPrimaryKey;if((!Re||Ie)&&(Q(),O=!0,Re||R.remove(W),Ie)){let $e=g.indices[ue];$e&&H.push($e)}}let F=[];try{for(let W of a||[]){if((W.relationship||W.computed)&&(O=!0,W.relationship))continue;let fe=t+"/"+(W.name||"");Object.defineProperty(W,"key",{value:fe,configurable:!0});let ue=R.get(fe);if(W.isPrimaryKey){if(ue=ue||R.get(fe=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+ue.expiration||void 0)||(+s||void 0)!==(+ue.eviction||void 0)||W.type!==ue.type){let Re={...ue};typeof c=="boolean"&&(c&&g.enableAuditing(c),Re.audit=c),n&&(Re.expiration=+n),s&&(Re.eviction=+s),l!==void 0&&(Re.sealed=l),d!==void 0&&(Re.replicate=d),W.type&&(Re.type=W.type),O=!0,Q(),R.put(fe,Re)}continue}ue?.attribute&&!ue.name&&(ue.indexed=!0);let ee=!ue||ue.type!==W.type||JSON.stringify(ue.indexed)!==JSON.stringify(W.indexed)||ue.nullable!==W.nullable||ue.version!==W.version||JSON.stringify(ue.properties)!==JSON.stringify(W.properties)||JSON.stringify(ue.elements)!==JSON.stringify(W.elements);if(W.indexed){let Re=Yq(fe,h,W);(ee||ue.indexingPID&&ue.indexingPID!==process.pid||ue.restartNumber<Dp.workerData?.restartNumber)&&(O=!0,Q(),ue=R.get(fe),(ee||ue.indexingPID&&ue.indexingPID!==process.pid||ue.restartNumber<Dp.workerData?.restartNumber)&&(O=!0,W.indexNulls===void 0&&(W.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(W.lastIndexedKey=ue?.lastIndexedKey??void 0,W.indexingPID=process.pid,Re.isIndexing=!0,Object.defineProperty(W,"dbi",{value:Re}),F.push(W))),R.put(fe,W)),ue?.indexNulls&&W.indexNulls===void 0&&(W.indexNulls=!0),Re.indexNulls=W.indexNulls,j[W.name]=Re}else ee&&(O=!0,Q(),R.put(fe,W))}}finally{x&&x()}if(O&&(g.schemaVersion++,g.updatedAttributes()),Nr.trace(`${t} table loading, running index`),F.length>0||H.length>0?g.indexingOperation=Fae(g,F,H):O&&iS.signalSchemaChange(new oS.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=p,O)for(let W of Op)W(g,p!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Nr.trace(`${t} table loaded`),g;function Q(){x||h.transactionSync(()=>({then(W){x=W}}))}o(Q,"startTxn")}async function Fae(e,t,r){try{Nr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await iS.signalSchemaChange(new oS.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,a={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,pd.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:p}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,p,()=>{for(let h=0;h<l;h++){let E=t[h],g=E.name,b=E.dbi;try{let S=E.resolve,R=m&&(S?S(m):m[g]);if(b.customIndex){b.customIndex.index(f,R);continue}let L=(0,Hq.getIndexedValues)(R);if(L)for(let O=0,x=L.length;O<x;O++)b.put(L[O],f)}catch(S){a[g]||(a[g]=!0,Nr.error(`Error indexing attribute ${g}`,S))}}}),s.then(()=>d--,h=>{d--,Nr.error(h)}),Dp.workerData&&Dp.workerData.restartNumber!==Gq.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>xae?await s:d>Bae&&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 iS.signalSchemaChange(new oS.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Nr.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Nr.error("Error in indexing",n)}}function kae({table:e,database:t}){let r=Qu({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 Nl(e){return Op.push(e),{remove(){let t=Op.indexOf(e);t>-1&&Op.splice(t,1)}}}function vp(e){return Pp.push(e),{remove(){let t=Pp.indexOf(e);t>-1&&Pp.splice(t,1)}}}function uS(){let e=(0,Vt.get)(U.STORAGE_COMPRESSION),t=(0,Vt.get)(U.STORAGE_COMPRESSION_DICTIONARY),r=(0,Vt.get)(U.STORAGE_COMPRESSION_THRESHOLD)||$q,n={startingOffset:32};return t&&(n.dictionary=Lp.readFileSync(t)),r&&(n.threshold=r),e&&n}var Vt,sS,pd,Ut,cs,fd,cN,Lp,lN,Hq,iS,oS,Dp,qq,Gq,cS,vae,Nr,uN,lS,$q,nS,En,De,dd,Op,Pp,aS,Go,md,xae,Bae,Ne=oe(()=>{Vt=w(le()),sS=w(Gt()),pd=require("lmdb"),Ut=require("path"),cs=require("fs"),fd=w(St());ng();cN=w($m());k();Lp=w(require("fs-extra")),lN=w(ri()),Hq=w(Cn()),iS=w(xo()),oS=w(Zn()),Dp=require("worker_threads"),qq=w(z()),Gq=w(Je());Ro();Zc();As();kq();cS=w(Gm()),{forComponent:vae}=qq.default;o(Mp,"OpenDBIObject");Nr=vae("storage"),uN="data",lS=Symbol("defined-tables"),$q=((0,Vt.get)(U.STORAGE_PAGESIZE)||4096)-60;(0,Vt.initSync)();nS=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"],En=Object.create(null),De=Object.create(null);(0,lN._assignPackageExport)("databases",De);(0,lN._assignPackageExport)("tables",En);dd=Symbol.for("next-table-id"),Op=[],Pp=[],Go=new Map;o(Uae,"getTables");o(at,"getDatabases");o(hd,"resetDatabases");o(Cp,"readMetaDb");o(Vq,"ensureDB");o(Kq,"setTable");o(Qu,"database");o(nw,"dropDatabase");o(Yq,"openIndex");o(Xe,"table");xae=1e3,Bae=10;o(Fae,"runIndexing");o(kae,"dropTableMeta");o(Nl,"onUpdatedTable");o(vp,"onRemovedDB");o(uS,"getDefaultCompression")});var mN={};be(mN,{loadGQLSchema:()=>Gae,start:()=>fN,startOnMainThread:()=>qae});function fN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:a,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=a(new c(r.toString(),s)),m=new Map,p=[],h;for(let b of f.definitions)switch(b.kind){case l.OBJECT_TYPE_DEFINITION:let x=function(H){if(H.kind==="NonNullType"){let W=x(H.type);return W.nullable=!1,W}if(H.kind==="ListType")return{type:"array",elements:x(H.type)};let Q={type:H.name?.value};return Object.defineProperty(Q,"location",{value:H.loc.startToken}),Q};o(x,"getProperty");let S=b.name.value,R=[],L={table:null,database:null,properties:R};m.set(S,L),i.allTypes.set(S,L);for(let H of b.directives){if(H.name.value==="table"){for(let Q of H.arguments)L[Q.name.value]=Q.value.value;L.schema&&(L.database=L.schema),L.table||(L.table=S),L.audit&&(L.audit=L.audit!=="false"),L.attributes=L.properties,p.push(L)}if(H.name.value==="sealed"&&(L.sealed=!0),H.name.value==="splitSegments"&&(L.splitSegments=!0),H.name.value==="replicate"&&(L.replicate=!0),H.name.value==="export"){L.export=!0;for(let Q of H.arguments)typeof L.export!="object"&&(L.export={}),L.export[Q.name.value]=Q.value.value}}let O=!1,j={};for(let H of b.fields){let F=x(H.type);F.name=H.name.value,R.push(F),j[F.name]=void 0;for(let Q of H.directives){let W=Q.name.value;if(W==="primaryKey")O?console.warn("Can not define two attributes as a primary key at",Q.loc):(F.isPrimaryKey=!0,O=!0);else if(W==="indexed"){let fe={};for(let ue of Q.arguments||[])fe[ue.name.value]=ue.value.value;F.indexed=fe}else if(W==="computed"){for(let fe of Q.arguments||[])if(fe.name.value==="from"){let ue=fe.value.value;F.computed={from:g(ue,fe,j)},F.version==null&&(F.version=ue)}else fe.name.value==="version"&&(F.version=fe.value.value);F.computed=F.computed||!0}else if(W==="relationship"){let fe={};for(let ue of Q.arguments)fe[ue.name.value]=ue.value.value;F.relationship=fe}else if(W==="createdTime")F.assignCreatedTime=!0;else if(W==="updatedTime")F.assignUpdatedTime=!0;else if(W==="expiresAt")F.expiresAt=!0;else if(W==="allow"){let fe=F.authorizedRoles=[];for(let ue of Q.arguments)ue.name.value==="role"&&fe.push(ue.value.value)}else server.knownGraphQLDirectives.includes(W)&&console.warn(`@${W} is an unknown directive, at`,Q.loc)}}L.type=S,S==="Query"&&(h=L)}function E(b){let S=m.get(b.type);S?(Object.defineProperty(b,"properties",{value:S.properties}),Object.defineProperty(b,"definition",{value:S})):b.type==="array"?E(b.elements):Hae.includes(b.type)||(0,zq.getWorkerIndex)()===0&&console.error(`The type ${b.type} is unknown at line ${b.location.line}, column ${b.location.column}, in ${s}`)}o(E,"connectPropertyType");for(let b of m.values())for(let S of b.properties)E(S);for(let b of p)b.tableClass=e(b),b.export&&(b.export.name===""?i.set((0,dN.dirname)(n),b.tableClass):i.set((0,dN.dirname)(n)+"/"+(b.export.name||b.type),b.tableClass,b.export));function g(b,S,R){return new Wq.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${b}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(R)}o(g,"createComputedFrom")}}var dN,Wq,zq,Hae,qae,Gae,jq=oe(()=>{dN=require("path"),Wq=require("node:vm");Ne();zq=w(Je());Ua();Hae=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);o(fN,"start");qae=fN,Gae=o(e=>fN({ensureTable:Xe}).handleFile(e,null,null,new Fu),"loadGQLSchema")});var hN={};be(hN,{start:()=>Jae});function $ae(e){if(e.kind!==xe.Kind.OPERATION_DEFINITION&&e.kind!==xe.Kind.FRAGMENT_DEFINITION)throw new qr(`Unexpected non-executable definition type ${e.kind}.`)}function Qq(e){if(typeof e!="object"||e===null)throw new Qi("Request body must be an object.");if(!("query"in e))throw new Qi("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Qi("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Qi("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Qi("Request body `operationName` field must be a string.")}function pN(e){return parseInt(e.value,10)}function Xq(e){return parseFloat(e.value)}function Zq(e,t,r){let n=r.get(e.name.value);return eG(n)?tG(n,t):{attribute:t,value:n}}function eG(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function tG(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],eG(n)?tG(n,t):{attribute:t,value:n}))}function Vae(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case xe.Kind.NULL:return{attribute:t,value:null};case xe.Kind.INT:return{attribute:t,value:pN(e.value)};case xe.Kind.FLOAT:return{attribute:t,value:Xq(e.value)};case xe.Kind.BOOLEAN:case xe.Kind.STRING:return{attribute:t,value:e.value.value};case xe.Kind.VARIABLE:return Zq(e.value,t,r);case xe.Kind.OBJECT:return rG(e.value,t,r);case xe.Kind.LIST:case xe.Kind.ENUM:default:throw new qr(`Value type, ${e.value.kind}, is not supported.`)}}function rG(e,t,r){return e.fields.flatMap(n=>Vae(n,t,r))}function Kae(e,t){switch(e.value.kind){case xe.Kind.NULL:return{attribute:e.name.value,value:null};case xe.Kind.INT:return{attribute:e.name.value,value:pN(e.value)};case xe.Kind.FLOAT:return{attribute:e.name.value,value:Xq(e.value)};case xe.Kind.BOOLEAN:case xe.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case xe.Kind.VARIABLE:return Zq(e.value,e.name.value,t);case xe.Kind.OBJECT:return rG(e.value,[e.name.value],t);case xe.Kind.LIST:case xe.Kind.ENUM:default:throw new qr(`Argument type, ${e.value.kind}, is not supported.`)}}function Yae(e,t){return e.flatMap(r=>Kae(r,t))}function dS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case xe.Kind.FIELD:return r;case xe.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new qr(`Fragment \`${n}\` not found.`);return dS(s.selectionSet,t)}case xe.Kind.INLINE_FRAGMENT:return dS(r.selectionSet,t)}})}function nG(e,t){return dS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:nG(r.selectionSet,t)}:r.name.value)}async function Wae(e,t,r,n){let s=Cs.getMatch(e.name.value,"graphql");if(s===void 0)throw new qr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,a={select:nG(e.selectionSet,r),conditions:Yae(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(a,n))c.push(l);return[e.name.value,c]}function sG(e){switch(e.kind){case xe.Kind.NULL:return null;case xe.Kind.INT:return pN(e);case xe.Kind.FLOAT:return parseFloat(e.value);case xe.Kind.STRING:case xe.Kind.BOOLEAN:return e.value;case xe.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:sG(r.value),...t}),{});case xe.Kind.LIST:case xe.Kind.ENUM:default:throw new qr(`Value type, ${e.kind}, is not supported.`)}}function zae(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=sG(n.defaultValue)),n.type.kind===xe.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new qr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function jae(e,t,r,n){if(e.operation===xe.OperationTypeNode.SUBSCRIPTION)throw new qr("Subscriptions are not supported.");if(e.operation===xe.OperationTypeNode.MUTATION)throw new qr("Mutations are not supported yet.");let s=zae(e.variableDefinitions,t),i=await Promise.all(dS(e.selectionSet,r).map(c=>Wae(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function Jq({query:e,variables:t={},operationName:r},n){let s=xe.parse(e),i=new Map,a=new Map;for(let u of s.definitions)if($ae(u),u.kind===xe.Kind.FRAGMENT_DEFINITION)a.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new qr("Unnamed operations are only allowed when there is a single operation in the document.");let d=u.name?.value??"Unnamed Query";if(i.has(d))throw new qr(`Duplicate operation definition: ${d}`);i.set(d,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new qr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new qr(`Operation \`${r}\` not found.`);let l=await jae(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Qae(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 Qq(r),Jq(r,e)}case"POST":{let r=await wo(e.headers.get("content-type"),!0)(e._nodeRequest);return Qq(r),Jq(r,e)}default:throw new Qi("Method Not Allowed",405,{Allow:"GET, POST"})}}function Jae(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Qae(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Qi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof xe.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof qr)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof Qi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof xe.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof qr)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var xe,qr,Qi,iG=oe(()=>{xe=w(require("graphql"));No();Ua();o($ae,"assertExecutableDefinitionNode");o(Qq,"assertRequestParams");o(pN,"processIntValueNode");o(Xq,"processFloatValueNode");o(Zq,"processVariableNode");o(eG,"isObject");o(tG,"transformObjectIntoQueryCondition");o(Vae,"processObjectFieldNode");o(rG,"processObjectValueNode");o(Kae,"processArgumentNode");o(Yae,"buildConditionsQuery");o(dS,"fillInFragments");o(nG,"buildSelectQuery");o(Wae,"processFieldNode");o(sG,"processConstValueNode");o(zae,"resolveVariables");o(jae,"executeOperation");o(Jq,"resolver");qr=class extends Error{static{o(this,"GraphQLQueryingError")}},Qi=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(Qae,"graphqlQueryingHandler");o(Jae,"start")});var dG=v((NUe,uG)=>{var Ed=require("validate.js"),aG=ot(),_d=(k(),D(Y)),{handleHDBError:Xae,hdbErrors:Zae}=Ee(),{HDB_ERROR_MSGS:rr,HTTP_STATUS_CODES:ece}=Zae,EN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),tce={STRUCTURE_USER:"structure_user"},oG=Object.values(_d.ROLE_TYPES_ENUM),rce="attribute_permissions",nce="attribute_name",{PERMS_CRUD_ENUM:gd}=_d,sce=[rce,...Object.values(gd)],cG=[gd.READ,gd.INSERT,gd.UPDATE],ice=[nce,...cG];function oce(e){let t=EN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,lG(e,t)}o(oce,"addRoleValidation");function ace(e){let t=EN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,lG(e,t)}o(ace,"alterRoleValidation");function cce(e){let t=EN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,aG.validateObject(e,t)}o(cce,"dropRoleValidation");var lce=["operation","role","id","permission","hdb_user","access"];function lG(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)lce.includes(n[a])||s.push(n[a]);s.length>0&&fr(rr.INVALID_ROLE_JSON_KEYS(s),r);let i=aG.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{fr(a,r)}),e.permission){let a=uce(e);a&&fr(a,r),oG.forEach(c=>{e.permission[c]&&!Ed.isBoolean(e.permission[c])&&fr(rr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(oG.indexOf(a)<0){if(a===tce.STRUCTURE_USER){let l=e.permission[a];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||fr(rr.SCHEMA_NOT_FOUND(f),r)}continue}fr(rr.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){fr(rr.SCHEMA_NOT_FOUND(a),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[a][l]){fr(rr.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{sce.includes(d)||fr(rr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(gd).forEach(d=>{Ed.isDefined(u[d])?Ed.isBoolean(u[d])||fr(rr.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):fr(rr.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){fr(rr.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){fr(rr.ATTR_PERMS_NOT_ARRAY,r,a,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[a][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let p=u.attribute_permissions[m];if(Object.keys(p).forEach(E=>{!ice.includes(E)&&E!==gd.DELETE&&fr(rr.INVALID_ATTR_PERM_KEY(E),r,a,l)}),!Ed.isDefined(p.attribute_name)){fr(rr.ATTR_PERM_MISSING_NAME,r,a,l);continue}let h=p.attribute_name;if(!d.includes(h)){fr(rr.INVALID_ATTRIBUTE_IN_PERMS(h),r,a,l);continue}cG.forEach(E=>{Ed.isDefined(p[E])?Ed.isBoolean(p[E])||fr(rr.ATTR_PERM_NOT_BOOLEAN(E,h),r,a,l):fr(rr.ATTR_PERM_MISSING(E,h),r,a,l)}),!f.read&&p.read===!0&&(f.read=!0),!f.insert&&p.insert===!0&&(f.insert=!0),!f.update&&p.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${a}.${l}`;fr(rr.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return dce(r)}o(lG,"customValidate");uG.exports={addRoleValidation:oce,alterRoleValidation:ace,dropRoleValidation:cce};function uce(e){let{operation:t,permission:r}=e;if(t===_d.OPERATIONS_ENUM.ADD_ROLE||t===_d.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 rr.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?_d.ROLE_TYPES_ENUM.SUPER_USER:_d.ROLE_TYPES_ENUM.CLUSTER_USER;return rr.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(uce,"validateNoSUPerms");function dce(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:rr.ROLE_PERMS_ERROR,...e};return Xae(new Error,n,ece.BAD_REQUEST)}else return null}o(dce,"generateRolePermResponse");function fr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}o(fr,"addPermError")});var xp=v((PUe,hG)=>{"use strict";var fG=un(),mG=fn(),fce=Ga(),gN=dG(),SN=xo(),OUe=require("uuid").v4,mce=require("util"),fS=(k(),D(Y)),pce=ce(),TN=mG.searchByValue,hce=mG.searchByHash,Ece=mce.promisify(fce.delete),_ce=ai(),gce=Yu(),{hdbErrors:Sce,handleHDBError:Cl}=Ee(),{HDB_ERROR_MSGS:pG,HTTP_STATUS_CODES:Up}=Sce,{UserEventMsg:yN}=Zn();hG.exports={addRole:Tce,alterRole:yce,dropRole:Rce,listRoles:bce};function _N(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}o(_N,"scrubRoleDetails");async function Tce(e){let t=gN.addRoleValidation(e);if(t)throw t;e=_N(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await TN(r)||[])}catch(i){throw Cl(i)}if(n&&n.length>0)throw Cl(new Error,pG.ROLE_ALREADY_EXISTS(e.role),Up.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await fG.insert(s),SN.signalUserChange(new yN(process.pid)),e=_N(e),e}o(Tce,"addRole");async function yce(e){let t=gN.alterRoleValidation(e);if(t)throw t;e=_N(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await fG.update(r)}catch(s){throw Cl(s)}if(n&&n?.message==="updated 0 of 1 records")throw Cl(new Error,"Invalid role id",Up.BAD_REQUEST,void 0,void 0,!0);return await SN.signalUserChange(new yN(process.pid)),e}o(yce,"alterRole");async function Rce(e){let t=gN.dropRoleValidation(e);if(t)throw Cl(new Error,t,Up.BAD_REQUEST,void 0,void 0,!0);let r=new gce(fS.SYSTEM_SCHEMA_NAME,fS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await hce(r));if(n.length===0)throw Cl(new Error,pG.ROLE_NOT_FOUND,Up.NOT_FOUND,void 0,void 0,!0);let s=new _ce(fS.SYSTEM_SCHEMA_NAME,fS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await TN(s)),a=!1;if(pce.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){a=!0;break}}if(a===!0)throw Cl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Up.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Ece(c),SN.signalUserChange(new yN(process.pid)),`${n[0].role} successfully deleted`}o(Rce,"dropRole");async function bce(){return TN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}o(bce,"listRoles")});var RN={};be(RN,{start:()=>gG,startOnMainThread:()=>wce});function gG({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,EG.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let a in i.permission){if(Ace.includes(a))continue;let c=i.permission[a];c.tables||(i.permission[a]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await Ice(i)}}}async function Ice(e){let t=at().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,_G.isEqual)(i,e)?void 0:(e.id=r.id,(0,mS.alterRole)(e))}return(0,mS.addRole)(e)}var mS,EG,_G,Ace,wce,SG=oe(()=>{Ne();mS=w(xp()),EG=require("yaml"),_G=require("lodash"),Ace=["super_user","cluster_user","structure_user"];o(gG,"start");o(Ice,"ensureRole");wce=gG});async function pS(e){let t=(0,RG.pathToFileURL)(e).toString();if(Nce)return Bp||(Bp=Cce(Pce)),(await(await Bp).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Cce(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Bp=new Compartment({console,Math,Date,fetch:Oce,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,yG.extname)(r)||(r+=".js"),r)},importHook:o(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Fr,s.tables=En,s.databases=De}};let n=await(0,TG.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Bp}function Oce(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 Pce(){return{Resource:Fr,tables:En}}var TG,yG,RG,Nce,Bp,bN=oe(()=>{va();Ne();TG=require("fs/promises"),yG=require("path"),RG=require("url"),Nce=!1;o(pS,"secureImport");o(Cce,"getCompartment");o(Oce,"secureOnlyFetch");o(Pce,"getGlobalVars")});var AN={};be(AN,{handleApplication:()=>Lce,suppressHandleApplicationWarning:()=>Dce});function bG(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Lce(e){e.handleEntry(t=>{if(t.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${t.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(t.eventType!=="add"){e.requestRestart();return}pS(t.absolutePath).then(r=>{let n=(0,hS.dirname)(t.urlPath);bG(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),AG(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function AG(e,t,r){for(let n in t){let s=t[n],i=(0,hS.join)(r,n);bG(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&AG(e,s,i)}}var hS,Dce,IG=oe(()=>{bN();hS=require("path");o(bG,"isResource");o(Lce,"handleApplication");o(AG,"recurseForResources");Dce=!0});var wN={};be(wN,{start:()=>Mce});function Mce({resources:e}){e.set("login",IN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var IN,wG=oe(()=>{va();o(Mce,"start");IN=class extends Fr{static{o(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:a}=r;return{data:await n.login(s,i)}}}});function DG(e){let t={openapi:vce,info:{title:"HarperDB HTTP REST interface",version:PG.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}],n=o(s=>{if(s.type&&!t.components.schemas[s.type]){t.components.schemas[s.type]={};let i={},a=[];for(let c of s.properties)ES[c.type]?i[c.name]=new CN(ES[c.type],c.type):c.properties?(i[c.name]=new MG(c.type),n(c)):c.elements?.properties&&(i[c.name]=new Hce(c.elements.type),n(c.elements)),c.nullable===!1&&a.push(c.name);t.components.schemas[s.type]=new OG(i,!s.sealed,a)}},"includeDefinitionInSchema");for(let[,s]of e){if(!s.path||s.Resource.isError)continue;let{path:i}=s,a=i.split("/").pop(),{attributes:c,sealed:l}=s.Resource,{prototype:u,primaryKey:d="id"}=s.Resource;if(!c&&e.allTypes.has(s.path)){let j=e.allTypes.get(s.path);l=j.sealed,c=j.properties}if(!d)continue;let f={},m=[],p=[];if(c)for(let{type:j,name:H,elements:F,relationship:Q,definition:W,nullable:fe}of c){let ue=W??F?.definition;ue&&n(ue),fe===!1&&p.push(H),Q?j==="array"?f[H]={type:"array",items:{$ref:Us+F.type}}:f[H]={$ref:Us+j}:ue?j==="array"?f[H]={type:"array",items:{$ref:Us+ue.type}}:f[H]={$ref:Us+ue.type}:j==="array"?F.type==="Any"?f[H]={type:"array",items:{format:F.type}}:f[H]={type:"array",items:new CN(ES[F.type],F.type)}:j==="Any"?f[H]={format:j}:f[H]=new CN(ES[j],j),m.push(new ON(H,"query",f[H]))}let h=Object.keys(f),E=new ON(d,"path",{type:"string",format:"ID"});E.required=!0,E.description="primary key of record";let g=new ON("property","path",{enum:h});g.required=!0,t.components.schemas[a]=new OG(f,!l,p);let b=u.post!==Resource.prototype.post||u.update,S=typeof u.put=="function",R=typeof u.get=="function",L=typeof u.delete=="function",O=typeof u.patch=="function",x="/"+i+"/";b&&(t.paths[x]={},t.paths[x].post=new Uce(a,r,{200:new Sd({$ref:Us+a},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),R&&(t.paths[x]||(t.paths[x]={}),t.paths[x].get=new NN(m,r,{200:new Sd({type:"array",items:{$ref:Us+a}})},"search for records by the specified property name and value pairs")),t.paths[x]||(t.paths[x]={}),t.paths[x].options=new xce(m,r,{200:new Bce},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),L&&(t.paths[x]||(t.paths[x]={}),t.paths[x].delete=new CG(m,r,"delete all the records that match the provided query",{204:new NG})),x="/"+i+"/{"+d+"}",R&&(t.paths[x]={},t.paths[x].get=new NN([E],r,{200:new Sd({$ref:Us+a})},"retrieve a record by its primary key")),S&&(t.paths[x]||(t.paths[x]={}),t.paths[x].put=new Fce([E],r,a,{200:new Sd({$ref:Us+a})},"create or update the record with the URL path that maps to the record's primary key")),O&&(t.paths[x]||(t.paths[x]={}),t.paths[x].patch=new kce([E],r,a,{200:new Sd({$ref:Us+a})},"patch the record with the URL path that maps to the record's primary key")),L&&(t.paths[x]||(t.paths[x]={}),t.paths[x].delete=new CG([E],r,"delete a record with the given primary key",{204:new NG})),R&&g.schema.enum.length>0&&(x="/"+i+"/{"+d+"}.{property}",t.paths[x]={},t.paths[x].get=new NN([E,g],r,{200:new Sd({enum:h})},"used to retrieve the specified property of the specified record"))}for(let[,s]of e.allTypes)n(s),s.sealed&&t.components.schemas[s.type].additionalProperties&&(t.components.schemas[s.type].additionalProperties=!1);return t}function Uce(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Us+e}}}},this.security=t,this.responses=r}function NN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function xce(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function Bce(){this.description=LG,this.headers={},this.content={}}function Sd(e,t){this.description=LG,this.content={"application/json":{schema:e}},this.headers=t}function NG(){this.description="successfully processed request, no content returned to client"}function Fce(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Us+r}}}},this.responses=n}function kce(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Us+r}}}},this.responses=n}function CG(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function OG(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function CN(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function MG(e){this.$ref=`#/components/schemas/${e}`}function Hce(e){this.type="array",this.items=new MG(e)}function ON(e,t,r){this.name=e,this.in=t,this.schema=r}var PG,vce,ES,Us,LG,vG=oe(()=>{PG=w(At()),vce="3.0.3",ES={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Us="#/components/schemas/",LG="successful operation";o(DG,"generateJsonApi");o(Uce,"Post");o(NN,"Get");o(xce,"Options");o(Bce,"ResponseOptions200");o(Sd,"Response200");o(NG,"Response204");o(Fce,"Put");o(kce,"Patch");o(CG,"Delete");o(OG,"ResourceSchema");o(CN,"Type");o(MG,"Ref");o(Hce,"ArrayRef");o(ON,"Parameter")});var xG={};be(xG,{Request:()=>Qa,createReuseportFd:()=>_S});var UG,Qa,PN,LN,_S,Fp=oe(()=>{UG=require("os"),Qa=class{static{o(this,"Request")}#e;#t;_nodeRequest;_nodeResponse;method;url;headers;isWebSocket;user;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new LN(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 PN(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get httpVersion(){return this._nodeRequest.httpVersion}get isAborted(){return!1}get nodeRequest(){return this._nodeRequest}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},PN=class{static{o(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},LN=class{static{o(this,"Headers")}asObject;constructor(t){this.asObject=t}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return Object.prototype.hasOwnProperty.call(this.asObject,t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,UG.platform)()!="win32"&&(_S=require("node-unix-socket").createReuseportFd)});var SS={};be(SS,{parseHeaderValue:()=>MN,start:()=>$ce});async function Gce(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&tg(e);let i=new Ds;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==BG){let g=gS.getMatch(a,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new si(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let b=MN(g);for(let S of b)switch(S.name){case"max-age":e.expiresAt=S.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=MN(u).map(b=>(b.next?.name==="confirm"&&b.next.value>=0&&(e.replicatedConfirmation=+b.next.value),b.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await Tt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=wo(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new Td.ClientError(g,400)}if(e.authorize=!0,a===BG&&s==="GET"){if(e?.user?.role?.permission?.super_user)return DG(gS);throw new Td.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 Td.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Td.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,DN.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let g=Tq(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=Sm(f.data,e,f)),f}else if(isFinite(p)){qce[0]=p;let g=String.fromCharCode(34,(Jr[0]&63)+62,(Jr[0]>>6)+(Jr[1]<<2&63)+62,(Jr[1]>>4)+(Jr[2]<<4&63)+62,(Jr[2]>>2)+62,(Jr[3]&63)+62,(Jr[3]>>6)+(Jr[4]<<2&63)+62,(Jr[4]>>4)+(Jr[5]<<4&63)+62,(Jr[5]>>2)+62,(Jr[6]&63)+62,(Jr[6]>>6)+(Jr[7]<<2&63)+62,34),b=r["if-none-match"];b&&g==b?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),DN.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=Sm(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(a){a.statusCode?a.statusCode===500?mi.warn(a):mi.info(a):mi.error(a),a.statusCode===405&&(a.method&&(a.message+=` to handle HTTP method ${a.method.toUpperCase()||""}`),a.allow&&(a.allow.push("trace","head","options"),i.setIfNone("Allow",a.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:a.statusCode||500,headers:i,body:void 0};return c.body=Sm(a.contentType?a:HG(a),e,c),c}}function $ce(e){DN=e,e.includeExpensiveRecordCountEstimates&&(Qa.prototype.includeExpensiveRecordCountEstimates=!0),!FG&&(FG=!0,gS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Gce(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{kp++;let s=new Wn;kG||(kG=!0,Bm(l=>{kp>0&&l.push({metric:"ws-connections",connections:kp,byThread:!0})}));let i;t.on("error",l=>{i=!0,mi.warn(l)});let a;t.on("message",o(function(u){a||(a=wo(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=a(u);qe(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{kp--,zr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=gS.getMatch(l,"ws");if(zr(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,qe(h=>({count:h.count,total:kp}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new si(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await Tt(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await Io(p.value,r);t.send(h),qe(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?mi.warn(l):mi.info(l):mi.error(l),t.close(Vce[l.statusCode]||1011,HG(l))}t.close()},e))}function MN(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,a]=s.trim().split("=");i=i.trim(),a&&(a=a.trim()),r={name:i.toLowerCase(),value:a,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var mi,Td,HG,Jr,qce,DN,BG,FG,gS,kG,kp,Vce,qG=oe(()=>{No();jn();mi=w(z()),Td=w(Ee());rg();yu();Na();Ap();vG();Fp();sg();({errorToString:HG}=mi),Jr=new Uint8Array(8),qce=new Float64Array(Jr.buffer,0,1),DN={},BG="openapi";o(Gce,"http");kp=0;o($ce,"start");Vce={401:3e3,403:3003};o(MN,"parseHeaderValue")});var vN=v((rxe,$G)=>{var{recordAction:TS,recordActionBinary:GG}=(jn(),D(W_)),Kce=require("fastify-plugin"),Yce=200;$G.exports=Kce(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let a=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,d,f;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",f=l.method),TS(a,"duration",u,f,d),GG(s.raw.statusCode<400,"success",u,f,d),GG(1,"response_"+s.raw.statusCode,u,f,d);let m=Yce;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{TS(performance.now()-c,"transfer",u,f,d),TS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,TS(m,"bytes-sent",u,f,d));let p=a.toFixed(3),h=s.getHeader("Server-Timing"),E=`db;dur=${p}`;s.header("Server-Timing",h?`${h}, ${E}`:E)}),r()},{name:"hdb-request-time"})});var KG=v((nxe,VG)=>{var Wce=ot(),zce={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};VG.exports=function(e){return Wce.validateObject(e,zce)}});var Hp=v((sxe,YG)=>{"use strict";var jce=(k(),D(Y)).OPERATIONS_ENUM,UN=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=jce.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};YG.exports=UN});var $p={};be($p,{createTokens:()=>FN,getJWTRSAKeys:()=>IS,refreshOperationToken:()=>kN,validateOperationToken:()=>HN,validateRefreshToken:()=>wS});async function IS(){if(yS)return yS;try{let e=qp.default.join(Gp.default.getHdbBasePath(),Tb),t=await RS.default.readFile(qp.default.join(e,rm.JWT_PASSPHRASE_NAME),"utf8"),r=await RS.default.readFile(qp.default.join(e,rm.JWT_PRIVATE_KEY_NAME),"utf8");return yS={publicKey:await RS.default.readFile(qp.default.join(e,rm.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},yS}catch(e){throw AS.default.error(e),new pi.ClientError(Rd.NO_ENCRYPTION_KEYS,yd.INTERNAL_SERVER_ERROR)}}async function FN(e){let t=(0,xN.validateBySchema)(e,Ji.default.object({username:Ji.default.string().optional(),password:Ji.default.string().optional(),role:Ji.default.string().optional(),expires_in:Ji.default.alternatives(Ji.default.string(),Ji.default.number()).optional()}));if(t)throw new pi.ClientError(t.message);let r;try{let f=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,f=!1),r=await(0,BN.findAndValidateUser)(e.username,e.password,f)}catch(f){throw AS.default.error(f),new pi.ClientError(Rd.INVALID_CREDENTIALS,yd.UNAUTHORIZED)}if(!r)throw new pi.ClientError(Rd.INVALID_CREDENTIALS,yd.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let a=await IS(),c=await bd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??JG,algorithm:bS,subject:Ad.OPERATION}),l=await bd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:Qce,algorithm:bS,subject:Ad.REFRESH}),u=hw(l,kr.SHA256);if((await(0,WG.update)(new zG.default(em,gu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new pi.ClientError(Rd.REFRESH_TOKEN_SAVE_FAILED,yd.INTERNAL_SERVER_ERROR);return jG.default.signalUserChange(new QG.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function kN(e){let t=(0,xN.validateBySchema)(e,Ji.default.object({refresh_token:Ji.default.string().required()}).required());if(t)throw new pi.ClientError(t.message);let{refresh_token:r}=e;await wS(r);let n=await IS(),s=await bd.default.decode(r);return{operation_token:await bd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:JG,algorithm:bS,subject:Ad.OPERATION})}}async function HN(e){return XG(e,Ad.OPERATION)}async function wS(e){return XG(e,Ad.REFRESH)}async function XG(e,t){try{let r=await IS(),n=await bd.default.verify(e,r.publicKey,{algorithms:bS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,BN.findAndValidateUser)(n.username,void 0,!1);if(t===Ad.REFRESH&&!Ew(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw AS.default.warn(r),r?.name==="TokenExpiredError"?new pi.ClientError(Rd.TOKEN_EXPIRED,yd.FORBIDDEN):new pi.ClientError(Rd.INVALID_TOKEN,yd.UNAUTHORIZED)}}var bd,RS,qp,Ji,xN,pi,AS,BN,WG,zG,jG,QG,Gp,yd,Rd,JG,Qce,bS,Ad,yS,Id=oe(()=>{bd=w(require("jsonwebtoken")),RS=w(require("fs-extra")),qp=w(require("node:path")),Ji=w(require("joi")),xN=w(ot());k();pi=w(Ee()),AS=w(z());gw();BN=w(os()),WG=w(un()),zG=w(Hp()),jG=w(xo()),QG=w(Zn()),Gp=w(le()),{HTTP_STATUS_CODES:yd,AUTHENTICATION_ERROR_MSGS:Rd}=pi.hdbErrors;Gp.default.initSync();JG=Gp.default.get(U.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Qce=Gp.default.get(U.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",bS="RS256",Ad={OPERATION:"operation",REFRESH:"refresh"};o(IS,"getJWTRSAKeys");o(FN,"createTokens");o(kN,"refreshOperationToken");o(HN,"validateOperationToken");o(wS,"validateRefreshToken");o(XG,"validateToken")});var qN=v((lxe,t$)=>{"use strict";var Jce=KG(),wd=require("passport"),Xce=require("passport-local").Strategy,Zce=require("passport-http").BasicStrategy,ele=require("util"),tle=os(),e$=ele.callbackify(tle.findAndValidateUser),cxe=Kr(),rle=(k(),D(Y)),ZG=(Id(),D($p));wd.use(new Xce(function(e,t,r){e$(e,t,r)}));wd.use(new Zce(function(e,t,r){e$(e,t,r)}));wd.serializeUser(function(e,t){t(null,e)});wd.deserializeUser(function(e,t){t(null,e)});function nle(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let a=e.headers.authorization.split(" ");n=a[0],s=a[1]}function i(a,c){return a?r(a):c?r(null,c):r("Must login")}switch(o(i,"handleResponse"),n){case"Basic":wd.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===rle.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?ZG.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):ZG.validateOperationToken(s).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:wd.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(nle,"authorize");function sle(e,t){let r=Jce(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let a=i[e.schema].tables[e.table].attribute_permissions;for(let c in a)e.attributes.indexOf(a[c].attribute_name)>-1&&!a[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${a[c].attribute_name} `))}return t(null,n)}o(sle,"checkPermissions");t$.exports={authorize:nle,checkPermissions:sle}});var NS=v((dxe,r$)=>{"use strict";var ile=rs();r$.exports={writeTransaction:ole};function ole(e,t,r){return ile.writeTransaction(e,t,r)}o(ole,"writeTransaction")});var o$=v((pxe,i$)=>{"use strict";var ale=fn(),cle=li(),n$=z(),lle=un(),mxe=NS(),ule=require("clone"),$N=require("alasql"),dle=Ug(),s$=require("util"),fle=s$.promisify(cle.getTableSchema),mle=s$.promisify(ale.search),ple=(k(),D(Y)),GN=ce();dle($N);i$.exports={update:Ele};var hle="There was a problem performing this update. Please check the logs and try again.";async function Ele({statement:e,hdb_user:t}){let r=await fle(e.table.databaseid,e.table.tableid),n=_le(e.columns);GN.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=ule(s),c=GN.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=$N.parse(l).statements[0],d=await mle(u),f=gle(n,d);return Sle(a,f,t)}o(Ele,"update");function _le(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=$N.compile(`SELECT ${r.expression.toString()} AS [${ple.FUNC_VAL}] FROM ?`)}),t}catch(t){throw n$.error(t),new Error(hle)}}o(_le,"createUpdateRecord");function gle(e,t){return GN.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(gle,"buildUpdateRecords");async function Sle(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await lle.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){n$.error(`Error delete new_attributes from update response: ${i}`)}return s}o(Sle,"updateRecords")});var c$=v((gxe,a$)=>{var Tle=require("alasql"),yle=fn(),Rle=z(),ble=rs(),KN=require("util"),VN=ce(),Ale=(k(),D(Y)),Ile=li(),Exe=NS(),_xe=un(),wle="record",Nle="successfully deleted",Cle=KN.callbackify(Dle),Ole=KN.promisify(yle.search),Ple=KN.promisify(Ile.getTableSchema);a$.exports={convertDelete:Cle};function Lle(e){return`${e.deleted_hashes.length} ${wle}${e.deleted_hashes.length===1?"":"s"} ${Nle}`}o(Lle,"generateReturnMessage");async function Dle({statement:e,hdb_user:t}){let r=await Ple(e.table.databaseid,e.table.tableid);VN.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=VN.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Tle.parse(a).statements[0],l={operation:Ale.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Ole(c);let u=await ble.deleteRecords(l);return VN.isEmptyOrZeroLength(u.message)&&(u.message=Lle(u)),delete u.txn_time,u}catch(u){throw Rle.error(u),u.hdb_code?u.message:u}}o(Dle,"convertDelete")});var Ja=v((yxe,f$)=>{"use strict";var Txe=fn(),Vp=z(),{validateBySchema:l$}=ot(),$o=require("joi"),Mle=Ki(),CS=ce(),{handleHDBError:OS,hdbErrors:vle,ClientError:u$}=Ee(),{HDB_ERROR_MSGS:PS,HTTP_STATUS_CODES:YN}=vle,d$=le();d$.initSync();var{getDatabases:WN}=(Ne(),D(ft)),Ule=require("fs-extra"),xle=(k(),D(Y));f$.exports={describeAll:Ble,describeTable:LS,describeSchema:Fle};async function Ble(e={}){try{let t=CS.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=WN(),a={},c={},l=[],u=e?.exact_count,d=e?.include_computed;for(let m in i){a[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 LS({schema:m,table:h,exact_count:u,include_computed:d});else if(n&&n[m].describe&&n[m].tables[h].describe){let g=n[m].tables[h].attribute_permissions;E=await LS({schema:m,table:h,exact_count:u,include_computed:d},g)}E&&l.push(E)}catch(E){Vp.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],a[l[m].schema]&&delete a[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],a[l[m].schema]&&delete a[l[m].schema]);for(let m in a)t||s||r?f[m]={}:c[m]&&(f[m]={});return f}catch(t){return Vp.error("Got an error in describeAll"),Vp.error(t),OS(new Error,PS.DESCRIBE_ALL_ERR)}}o(Ble,"describeAll");async function LS(e,t){CS.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=l$(e,$o.object({database:$o.string(),table:$o.string().required(),exact_count:$o.boolean().strict(),include_computed:$o.boolean().strict()}));if(i)throw new u$(i.message);let c=WN()[r];if(!c)throw OS(new Error,PS.SCHEMA_NOT_FOUND(e.schema),YN.NOT_FOUND);let l=c[n];if(!l)throw OS(new Error,PS.TABLE_NOT_FOUND(e.schema,e.table),YN.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})}o(u,"pushAtt");let d=[];if(s){let p={};s.forEach(h=>{h.describe&&(p[h.attribute_name]=!0)}),l.attributes.forEach(h=>{p[h.name]&&u(h)})}else l.attributes?.forEach(p=>u(p));let f;try{f=(await Ule.stat(l.primaryStore.env.path)).size}catch(p){Vp.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")),d$.get(xle.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Mle.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){Vp.warn(`unable to stat table dbi due to ${p}`)}return m}o(LS,"descTable");async function Fle(e){CS.transformReq(e);let t=l$(e,$o.object({database:$o.string(),exact_count:$o.boolean().strict(),include_computed:$o.boolean().strict()}));if(t)throw new u$(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=WN()[n];if(!i)throw OS(new Error,PS.SCHEMA_NOT_FOUND(e.schema),YN.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),CS.isEmpty(l)||l.describe){let u=await LS({schema:e.schema,table:c,exact_count:e.exact_count,include_computed:e.include_computed},l?l.attribute_permissions:null);u&&(a[u.name]=u)}}return a}o(Fle,"describeSchema")});var _$=v((bxe,E$)=>{"use strict";var kle=Ja(),{hdbErrors:m$}=Ee(),{getDatabases:p$}=(Ne(),D(ft));E$.exports={checkSchemaExists:h$,checkSchemaTableExists:Hle,schemaDescribe:kle};async function h$(e){if(!p$()[e])return m$.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(h$,"checkSchemaExists");async function Hle(e,t){let r=await h$(e);if(r)return r;if(!p$()[e][t])return m$.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Hle,"checkSchemaTableExists")});var XN=v((Cxe,O$)=>{"use strict";var{decode:qle}=require("msgpackr"),{isMainThread:Ixe,parentPort:wxe,threadId:Nxe}=require("worker_threads"),vS=xt(),Nd=mt(),QN=(k(),D(Y)),_n=z(),jN=le(),Gle=(k(),D(Y)),{onMessageByType:$le}=Je(),y$=Ki(),{recordAction:g$,recordActionBinary:Vle}=(jn(),D(W_)),{publishToStream:Kle}=vS,{ConsumerEvents:S$}=require("nats"),Yle=fn(),{promisify:Wle}=require("util"),{decodeBlobsWithWrites:zle}=(As(),D(rA)),R$=Wle(setTimeout),US=1e4,xS,MS,jle,Qle,b$,Kp=new Map,Cd=new Map;O$.exports={initialize:A$,ingestConsumer:JN,setSubscription:Jle,setIgnoreOrigin:eue,getDatabaseSubscriptions:Zle,updateConsumer:I$};async function A$(){$le(QN.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await I$(n)}),b$=!0,_n.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await vS.getNATSReferences();xS=e,MS=e.info.server_name,jle=t,Qle=r}o(A$,"initialize");async function I$(e){if(e.status==="start"){let{js:t,jsm:r}=await w$(e.node_domain_name);JN(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Kp.get(e.stream_name+e.node_domain_name);t&&(_n.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Kp.set(e.stream_name+e.node_domain_name,"close")),Cd.get(e.node_domain_name)==="failed"&&Cd.set(e.node_domain_name,"close")}}o(I$,"updateConsumer");var BS=new Map;function Jle(e,t,r){let n=BS.get(e);n||BS.set(e,n=new Map),n.set(t,r),b$||A$().then(Xle)}o(Jle,"setSubscription");async function Xle(){let e=await Yle.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+Nd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await w$(r),!n))break;let{schema:a,table:c}=i,l=y$.createNatsTableStreamName(a,c);JN(l,n,s,r)}}}o(Xle,"accessConsumers");async function w$(e){let t,r,n=1;for(;!r;)try{t=await xS.jetstream({domain:e}),r=await xS.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Cd.get(e)==="close")break;Cd.set(e,"failed"),n%10===1&&_n.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<US?n++*100:US;await R$(i)}return{js:t,jsm:r}}o(w$,"connectToRemoteJS");function Zle(){return BS}o(Zle,"getDatabaseSubscriptions");var N$;function eue(e){N$=e}o(eue,"setIgnoreOrigin");var C$=100,T$=new Array(C$),DS=0;async function JN(e,t,r,n){let{connection:s}=await vS.getNATSReferences();xS=s,MS=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,MS),_n.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Cd.get(n)==="close")break;a%10===1&&_n.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(_n.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await vS.createConsumer(r,e,MS,new Date(Date.now()).toISOString()));let d=a++*100<US?a++*100:US;await R$(d)}let c=!1,l;for(;!c;){if(Kp.get(e+n)==="close"||Cd.get(n)==="close"){Kp.delete(e+n),c=!0;continue}l=await i.consume({max_messages:jN.get(QN.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Kp.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===S$.ConsumerDeleted&&(await l.close(),c=!0),d.type===S$.HeartbeatsMissed){let f=d.data;_n.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(_n.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 T$[DS],T$[DS]=tue(d).catch(f=>{_n.error(f)}),++DS>=C$&&(DS=0)}catch(d){d.message==="consumer deleted"?(_n.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):_n.error("Error consuming clustering ingest, restarting consumer",d)}}}o(JN,"ingestConsumer");async function tue(e){let t;await zle(()=>{t=qle(e.data)}),g$(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),_n.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=jN.get(QN.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Nd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Nd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Nd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!N$),Vle(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Nd.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:a,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:p}=t;_n.trace("processing message:",a,c,u,(d?"records: "+d.map(O=>O?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),_n.trace(`messageProcessor nats msg id: ${e.headers.get(Nd.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(O=>h=O),{timestamp:g,user:b,node_name:S}=m||{},R=BS.get(c)?.get(u);if(!R)throw new Error(`Missing table for replication message: ${u}`);if(a==="define_schema")t.type=a,t.onCommit=h,R.send(t);else if(d.length===1&&!l)R.send({type:zN(a),value:d[0],id:f?.[0],expiresAt:p,timestamp:g,table:u,onCommit:h,user:b,nodeName:S});else{let O=d.map((x,j)=>({type:zN(a),value:x,expiresAt:p,id:f?.[j],table:u}));for(;l;)O.push({type:zN(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;R.send({type:"transaction",writes:O,table:u,timestamp:g,onCommit:h,user:b,nodeName:S})}jN.get(Gle.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Kle(e.subject.split(".").slice(0,-1).join("."),y$.createNatsTableStreamName(c,u),e.headers,e.data),await E;let L=Date.now()-g;g&&g$(L,"replication-latency",e.subject,a,"ingest")}catch(a){_n.error(a)}e.ack()}o(tue,"messageProcessor");function zN(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(zN,"convertOperation")});var xt=v((Uxe,Y$)=>{"use strict";var Gr=le();Gr.initSync();var rue=require("fs-extra"),nue=require("semver"),zp=require("path"),{monotonicFactory:sue}=require("ulidx"),L$=sue(),iue=require("util"),D$=require("child_process"),oue=iue.promisify(D$.exec),aue=D$.spawn,Xr=mt(),et=(k(),D(Y)),{packageJson:cue,PACKAGE_ROOT:lue}=At(),FS=ce(),hi=z(),kS=Ki(),uue=NS(),Yp=Et(),{broadcast:due,onMessageByType:fue,getWorkerIndex:mue}=Je(),{isMainThread:M$}=require("worker_threads"),{Encoder:pue,decode:rC}=require("msgpackr"),v$=new pue,{isEmpty:Dl}=FS,U$=os(),Pxe=48*36e11;M$&&fue(et.ITC_EVENT_TYPES.RESTART,()=>{gn=void 0,Ll=void 0});var{connect:hue,StorageType:Eue,RetentionPolicy:_ue,AckPolicy:nC,DeliverPolicy:sC,DiscardPolicy:gue,NatsConnection:Lxe,JetStreamManager:Dxe,JetStreamClient:Mxe,StringCodec:vxe,JSONCodec:Sue,createInbox:iC,headers:Tue,ErrorCode:P$}=require("nats"),{recordAction:yue}=(jn(),D(W_)),{encodeBlobsAsBuffers:Rue}=(As(),D(rA)),x$=Sue(),bue="clustering",Aue=cue.engines[Xr.NATS_SERVER_NAME],Iue=zp.join(lue,"dependencies"),tC=zp.join(Iue,`${process.platform}-${process.arch}`,Xr.NATS_BINARY_NAME),ZN,eC,Wp,Ol,Pl;Y$.exports={runCommand:B$,checkNATSServerInstalled:wue,createConnection:oC,getConnection:jp,getJetStreamManager:Qp,getJetStream:k$,getNATSReferences:Xi,getServerList:Cue,createLocalStream:aC,listStreams:H$,deleteLocalStream:Oue,getServerConfig:Od,listRemoteStreams:Pue,viewStream:Lue,viewStreamIterator:Due,publishToStream:Mue,request:xue,reloadNATS:cC,reloadNATSHub:Bue,reloadNATSLeaf:Fue,extractServerName:Uue,requestErrorHandler:kue,createLocalTableStream:V$,createTableStreams:Gue,purgeTableStream:K$,purgeSchemaTableStreams:$ue,getStreamInfo:Vue,updateLocalStreams:Yue,closeConnection:Nue,getJsmServerName:HS,addNatsMsgHeader:q$,clearClientCache:F$,updateRemoteConsumer:Hue,createConsumer:G$,updateConsumerIterator:que};async function B$(e,t=void 0){let{stdout:r,stderr:n}=await oue(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
14
|
+
`)},Mie="certificate.pem",vie="privateKey.pem",Uie="caCertificate.pem",xie="natsCertificate.pem",Bie="natsCaCertificate.pem",At={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},Fie={tls_certificate:At.SERVER,tlsCertificateAuthority:At.CA,customFunctions_tls_certificate:At.SERVER,customFunctionsTlsCertificateAuthority:At.CA,operationsApi_tls_certificate:At["OPERATIONS-API"],operationsApiTlsCertificateAuthority:At["OPERATIONS-CA"]},kie={[At.SERVER]:2,[At.DEFAULT]:1},Hie={[At["OPERATIONS-API"]]:3,[At.SERVER]:2,[At.DEFAULT]:1},qie={[At["OPERATIONS-API"]]:3,[At.SERVER]:2,[At.DEFAULT]:1},Gie={[At["OPERATIONS-CA"]]:3,[At.CA]:2,[At["DEFAULT-CA"]]:1},$ie={[At["OPERATIONS-CA"]]:3,[At.CA]:2,[At["DEFAULT-CA"]]:1},Vie={[At.CA]:2,[At["DEFAULT-CA"]]:1};mn.CERTIFICATE_PEM_NAME=Mie;mn.PRIVATEKEY_PEM_NAME=vie;mn.CA_PEM_NAME=Uie;mn.CERT_NAME=At;mn.CERT_CONFIG_NAME_MAP=Fie;mn.CERT_PREFERENCE_APP=kie;mn.CERT_PREFERENCE_OPS=Hie;mn.CERT_PREFERENCE_REP=qie;mn.CA_CERT_PREFERENCE_REP=Gie;mn.CA_CERT_PREFERENCE_OPS=$ie;mn.CA_CERT_PREFERENCE_APP=Vie;mn.CERTIFICATE_VALUES=Die;mn.NATS_CERTIFICATE_PEM_NAME=xie;mn.NATS_CA_PEM_NAME=Bie});var Mw=v((qMe,vH)=>{"use strict";var DH=require("fs-extra"),ge=require("joi"),Kie=require("os"),{boolean:Ke,string:ht,number:lr,array:$a}=ge.types(),{totalmem:OH}=require("os"),Sl=require("path"),Yie=z(),Dw=ce(),HMe=Lw(),PH=(k(),D(Y)),Wie=ot(),LH="log",zie="components",jie="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Qie="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Jie="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",Xie="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",Zie="rootPath config parameter is undefined",Fn=ge.alternatives([lr.min(0),ht]).optional().empty(null),xg=ge.alternatives([$a.items(ht,{host:ht.required(),port:Fn},{hostname:ht.required(),port:Fn}).empty(null),$a.items(ht)]),Yi,MH=!1;vH.exports={configValidator:eoe,routesValidator:ooe,routeConstraints:xg};function eoe(e,t=!1){if(MH=t,Yi=e.rootPath,Dw.isEmpty(Yi))throw Zie;let r=Ke.optional(),n=lr.min(0).max(1e3).empty(null).default(ioe),s=ht.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(mp),i=ht.optional().empty(null),a=ht.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ge.string().empty(null).default(mp),l=ge.custom(roe).empty(null).default(mp),u=e.clustering?.enabled,d=ge.object({certificate:i,certificateAuthority:i,privateKey:i}),f;return u===!0?f=ge.object({enabled:r,hubServer:ge.object({cluster:ge.object({name:ge.required().empty(null),network:ge.object({port:Fn,routes:xg}).required()}).required(),leafNodes:ge.object({network:ge.object({port:Fn}).required()}).required(),network:ge.object({port:Fn}).required()}).required(),leafServer:ge.object({network:ge.object({port:Fn,routes:xg}).required(),streams:ge.object({maxAge:lr.min(120).allow(null).optional(),maxBytes:lr.min(1).allow(null).optional(),maxMsgs:lr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ge.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:Ke.optional(),databaseLevel:Ke.optional(),tls:ge.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ke.required(),verify:Ke.optional()}),user:ht.optional().empty(null)}).optional():f=ge.object({enabled:r,tls:ge.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ke.optional()})}).optional(),ge.object({authentication:ge.alternatives(ge.object({authorizeLocal:Ke,cacheTTL:lr.required(),cookie:ge.object({domains:$a.items(ht).optional(),expires:ht.optional()}),enableSessions:Ke,hashFunction:ht.valid("md5","sha256","argon2id").optional().empty(null)}),Ke).optional(),analytics:ge.object({aggregatePeriod:lr,replicate:Ke.optional()}),replication:ge.object({hostname:ge.alternatives(ht,lr).optional().empty(null),url:ht.optional().empty(null),port:Fn,securePort:Fn,routes:$a.optional().empty(null),databases:ge.alternatives(ht,$a),enableRootCAs:Ke.optional(),copyTablesToCatchUp:Ke.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:ge.object({enabled:r}).required(),logging:ge.object({auditAuthEvents:ge.object({logFailed:Ke,logSuccessful:Ke}),file:Ke.required(),level:ge.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ge.object({enabled:Ke.optional(),compress:Ke.optional(),interval:ht.custom(soe).optional().empty(null),maxSize:ht.custom(noe).optional().empty(null),path:ht.optional().empty(null).default(mp)}).required(),root:s,stdStreams:Ke.required(),auditLog:Ke.required()}).required(),operationsApi:ge.object({network:ge.object({cors:Ke.optional(),corsAccessList:$a.optional(),headersTimeout:lr.min(1).optional(),keepAliveTimeout:lr.min(1).optional(),port:Fn,domainSocket:ge.optional().empty("hdb/operations-server").default(mp),securePort:Fn,timeout:lr.min(1).optional()}).optional(),tls:ge.alternatives([ge.array().items(d),d])}).required(),rootPath:ht.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ge.object({network:ge.object({port:Fn,securePort:Fn,mtls:ge.alternatives([Ke.optional(),ge.object({user:ht.optional(),certificateAuthority:i,required:Ke.optional()})])}).required(),webSocket:Ke.optional(),requireAuthentication:Ke.optional()}),http:ge.object({compressionThreshold:lr.optional(),cors:Ke.optional(),corsAccessList:$a.optional(),headersTimeout:lr.min(1).optional(),port:Fn,securePort:Fn,maxHeaderSize:lr.optional(),mtls:ge.alternatives([Ke.optional(),ge.object({user:ht.optional(),certificateAuthority:i,required:Ke.optional()})]),threadRange:ge.alternatives([$a.optional(),ht.optional()])}).required(),threads:ge.alternatives(n.optional(),ge.object({count:n.optional(),debug:ge.alternatives(Ke.optional(),ge.object({startingPort:lr.min(1).optional(),host:ht.optional(),waitForDebugger:Ke.optional()})),maxHeapMemory:lr.min(0).optional()})),storage:ge.object({writeAsync:Ke.required(),overlappingSync:Ke.optional(),caching:Ke.optional(),compression:ge.alternatives([Ke.optional(),ge.object({dictionary:ht.optional(),threshold:lr.optional()})]),compactOnStart:Ke.optional(),compactOnStartKeepBackup:Ke.optional(),noReadAhead:Ke.optional(),path:l,prefetchWrites:Ke.optional(),maxFreeSpaceToLoad:lr.optional(),maxFreeSpaceToRetain:lr.optional()}).required(),ignoreScripts:Ke.optional(),tls:ge.alternatives([ge.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(eoe,"configValidator");function toe(e){return MH||DH.existsSync(e)?null:`Specified path ${e} does not exist.`}o(toe,"doesPathExist");function roe(e,t){ge.assert(e,ht.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=toe(e);if(r)return t.message(r)}o(roe,"validatePath");function noe(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(jie);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Jie):e}o(noe,"validateRotationMaxSize");function soe(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Qie);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Xie):e}o(soe,"validateRotationInterval");function ioe(e,t){let r=t.state.path.join("."),n=Kie.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||OH();return i=Math.round(Math.min(i,OH())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),Yie.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}o(ioe,"setDefaultThreads");function mp(e,t){let r=t.state.path.join(".");if(!Dw.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Dw.isEmpty(Yi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Sl.join(Yi,zie);case"logging.root":return Sl.join(Yi,LH);case"clustering.leafServer.streams.path":return Sl.join(Yi,"clustering","leaf");case"storage.path":let n=Sl.join(Yi,PH.LEGACY_DATABASES_DIR_NAME);return DH.existsSync(n)?n:Sl.join(Yi,PH.DATABASES_DIR_NAME);case"logging.rotation.path":return Sl.join(Yi,LH);case"operationsApi.network.domainSocket":return r==null?null:Sl.join(Yi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(mp,"setDefaultRoot");function ooe(e){let t=ge.object({routes:xg});return Wie.validateBySchema({routes:e},t)}o(ooe,"routesValidator")});var Et=v(tr=>{"use strict";var Ls=(k(),D(Y)),wr=ce(),ur=z(),{configValidator:aoe,routesValidator:UH}=Mw(),pn=require("fs-extra"),BH=require("yaml"),is=require("path"),coe=require("is-number"),FH=require("properties-reader"),loe=require("lodash"),{handleHDBError:uoe}=Ee(),{HTTP_STATUS_CODES:doe,HDB_ERROR_MSGS:ed}=Kr(),{server:foe}=(xr(),D(nm)),{PACKAGE_ROOT:kH}=bt(),{DATABASES_PARAM_CONFIG:pp,CONFIG_PARAMS:ss,CONFIG_PARAM_MAP:di}=Ls,moe="Unable to get config value because config is uninitialized",poe="Config successfully initialized",hoe="Error backing up config file",Eoe="Empty parameter sent to getConfigValue",HH=is.join(kH,"config","yaml",Ls.HDB_DEFAULT_CONFIG_FILE),_oe=is.join(kH,"config","yaml","defaultNatsConfig.yaml"),goe="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",xH={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"},Bg,vt,Fg;tr.createConfigFile=Soe;tr.getDefaultConfig=Toe;tr.getConfigValue=GH;tr.initConfig=kg;tr.flattenConfig=td;tr.updateConfigValue=$H;tr.updateConfigObject=Roe;tr.getConfiguration=Ioe;tr.setConfiguration=woe;tr.readConfigFile=Bw;tr.getClusteringRoutes=Noe;tr.initOldConfig=VH;tr.getConfigFromFile=Coe;tr.getConfigFilePath=Tl;tr.addConfig=Ooe;tr.deleteConfigFromFile=Poe;tr.getConfigObj=Loe;tr.resolvePath=vw;tr.getFlatConfigObj=Doe;function vw(e){if(e?.startsWith("~/"))return is.join(wr.getHomeDir(),e.slice(1));let t=le();try{return is.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}o(vw,"resolvePath");function Soe(e,t=!1){let r=Va(HH);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=BH.parseDocument(pn.readFileSync(_oe,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}Bg=td(r.toJSON());let n;for(let c in e){let l=di[c.toLowerCase()];if(l===ss.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=Uw(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{u.length>1&&typeof r.getIn(u.slice(0,-1))=="boolean"&&r.deleteIn(u.slice(0,-1)),r.setIn([...u],d)}catch(f){ur.error(f)}}}n&&qH(r,n),xw(r,t);let s=r.toJSON();vt=td(s);let i=r.getIn(["rootPath"]),a=is.join(i,Ls.HDB_CONFIG_FILE);if(pn.createFileSync(a),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);pn.writeFileSync(a,String(r)),ur.trace(`Config file written to ${a}`)}o(Soe,"createConfigFile");function qH(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(pp.TABLES))for(let i in n[s][pp.TABLES])for(let a in n[s][pp.TABLES][i]){let c=n[s][pp.TABLES][i][a],l=[ss.DATABASES,s,pp.TABLES,i,a];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let a=n[s][i],c=[ss.DATABASES,s,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(n){ur.error("Error parsing schemas CLI/env config arguments",n)}}o(qH,"setSchemasConfig");function Toe(e){if(Bg===void 0){let r=Va(HH);Bg=td(r.toJSON())}let t=di[e.toLowerCase()];if(t!==void 0)return Bg[t.toLowerCase()]}o(Toe,"getDefaultConfig");function GH(e){if(e==null){ur.info(Eoe);return}if(vt===void 0){ur.trace(moe);return}let t=di[e.toLowerCase()];if(t!==void 0)return vt[t.toLowerCase()]}o(GH,"getConfigValue");function Tl(e=wr.getPropsFilePath()){let t=wr.getEnvCliRootPath();if(t)return vw(is.join(t,Ls.HDB_CONFIG_FILE));let r=FH(e);return vw(r.get(Ls.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}o(Tl,"getConfigFilePath");function kg(e=!1){if(vt===void 0||e){let t;if(!wr.noBootFile()){t=wr.getPropsFilePath();try{pn.accessSync(t,pn.constants.F_OK|pn.constants.R_OK)}catch(i){throw ur.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Tl(t),n;if(r.includes("config/settings.js"))try{VH(r);return}catch(i){if(i.code!==Ls.NODE_ERROR_CODES.ENOENT)throw i}try{n=Va(r)}catch(i){if(i.code===Ls.NODE_ERROR_CODES.ENOENT){ur.trace(`HarperDB config file not found at ${r}.
|
|
15
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw ur.error(i),new Error(`Error reading HarperDB config file at ${r}`)}yoe(n,r),xw(n);let s=n.toJSON();if(foe.config=s,vt=td(s),vt.logging_rotation_rotate)for(let i in xH)vt[i]&&ur.error(`Config ${xH[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);ur.trace(poe)}}o(kg,"initConfig");function yoe(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],is.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],is.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60,replicate:!1}),n=!0),n){if(ur.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);pn.writeFileSync(t,String(e))}}o(yoe,"checkForUpdatedConfig");function xw(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 ed.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 ed.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=aoe(r,t);if(n.error)throw ed.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}o(xw,"validateConfig");function Roe(e,t){vt===void 0&&(vt={});let r=di[e.toLowerCase()];if(r===void 0){ur.trace(`Unable to update config object because config param '${e}' does not exist`);return}vt[r.toLowerCase()]=t}o(Roe,"updateConfigObject");function $H(e,t,r=void 0,n=!1,s=!1,i=!1){vt===void 0&&kg();let a=GH(di.hdb_root),c=is.join(a,Ls.HDB_CONFIG_FILE),l=Va(c),u;if(r&&vt){let m=!1;for(let p in r)if(r[p]!=vt[p.toLowerCase()]){m=!0;break}if(!m){ur.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===ss.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=di[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=Uw(m,t);l.setIn([...p],h)}else for(let m in r){let p=di[m.toLowerCase()];if(p===ss.HTTP_SECUREPORT&&r[m]===vt[ss.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===ss.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===vt[ss.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===ss.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=Ls.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let g=Uw(p,r[m]);p==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],g)}catch(b){ur.error(b)}}}u&&qH(l,u),xw(l);let d=l.getIn(["rootPath"]),f=is.join(d,Ls.HDB_CONFIG_FILE);if(n===!0&&boe(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);pn.writeFileSync(f,String(l)),s&&(vt=td(l.toJSON())),ur.trace(`Config parameter: ${e} updated with value: ${t}`)}o($H,"updateConfigValue");function boe(e,t){try{let r=is.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${Ls.HDB_CONFIG_FILE}.bak`);pn.copySync(e,r),ur.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){ur.error(hoe),ur.error(r)}}o(boe,"backupConfigFile");var Aoe=["databases"];function td(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),Fg=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])&&!Aoe.includes(i)){let a=r(n[i]);for(let c in a){if(!a.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!ss[l.toUpperCase()]&&di[l]&&(s[di[l].toLowerCase()]=a[c]),s[l]=a[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}o(r,"squashObj")}o(td,"flattenConfig");function Uw(e,t){if(e===ss.CLUSTERING_NODENAME||e===ss.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(coe(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)}o(Uw,"castConfigValue");function Ioe(){let e=wr.getPropsFilePath(),t=Tl(e);return Va(t).toJSON()}o(Ioe,"getConfiguration");async function woe(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return $H(void 0,void 0,s,!0),goe}catch(i){throw typeof i=="string"||i instanceof String?uoe(i,i,doe.BAD_REQUEST,void 0,void 0,!0):i}}o(woe,"setConfiguration");function Bw(){let e=wr.getPropsFilePath();try{pn.accessSync(e,pn.constants.F_OK|pn.constants.R_OK)}catch(n){if(!wr.noBootFile())throw ur.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Tl(e);return Va(t).toJSON()}o(Bw,"readConfigFile");function Va(e){return BH.parseDocument(pn.readFileSync(e,"utf8"),{simpleKeys:!0})}o(Va,"parseYamlDoc");function Noe(){let e=Bw(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=wr.isEmptyOrZeroLength(t)?[]:t;let r=UH(t);if(r)throw ed.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=wr.isEmptyOrZeroLength(n)?[]:n;let s=UH(n);if(s)throw ed.CONFIG_VALIDATION(s.message);if(!wr.isEmptyOrZeroLength(n)&&!wr.isEmptyOrZeroLength(t)){let i=t.filter(a=>n.some(c=>c.host===a.host&&c.port===a.port));if(!wr.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw ed.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:n}}o(Noe,"getClusteringRoutes");function VH(e){let t=FH(e);vt={};for(let r in di){let n=t.get(r.toUpperCase());if(wr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=di[r].toLowerCase();s===ss.LOGGING_ROOT?vt[s]=is.dirname(n):vt[s]=n}return vt}o(VH,"initOldConfig");function Coe(e){let t=Bw();return loe.get(t,e.replaceAll("_","."))}o(Coe,"getConfigFromFile");async function Ooe(e,t){let r=Va(Tl());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 pn.writeFile(Tl(),String(r))}o(Ooe,"addConfig");function Poe(e){let t=Tl(wr.getPropsFilePath()),r=Va(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=is.join(n,Ls.HDB_CONFIG_FILE);pn.writeFileSync(s,String(r))}o(Poe,"deleteConfigFromFile");function Loe(){return Fg||(kg(),Fg)}o(Loe,"getConfigObj");function Doe(){return vt||kg(),vt}o(Doe,"getFlatConfigObj")});var os=v((KMe,Hr)=>{"use strict";var WH="username is required",zH="nothing to update, must supply active, role or password to update",jH="password cannot be an empty string",QH="If role is specified, it cannot be empty.",JH="active must be true or false";Hr.exports.addUser=qoe;Hr.exports.alterUser=Goe;Hr.exports.dropUser=Voe;Hr.exports.getSuperUser=joe;Hr.exports.userInfo=Koe;Hr.exports.listUsers=qg;Hr.exports.listUsersExternal=Yoe;Hr.exports.setUsersWithRolesCache=yl;Hr.exports.findAndValidateUser=Yw;Hr.exports.getClusterUser=Qoe;Hr.exports.getUsersWithRolesCache=zoe;Hr.exports.USERNAME_REQUIRED=WH;Hr.exports.ALTERUSER_NOTHING_TO_UPDATE=zH;Hr.exports.EMPTY_PASSWORD=jH;Hr.exports.EMPTY_ROLE=QH;Hr.exports.ACTIVE_BOOLEAN=JH;var XH=un(),Moe=Ga(),hp=(gw(),D(_w)),ZH=Wk(),Ep=fn(),Gw=xo(),Wi=ce(),eq=require("validate.js"),$w=z(),{promisify:voe}=require("util"),Vw=Ki(),kw=(k(),D(Y)),KH=mt(),Uoe=Et(),xoe=le(),Boe=qi(),{hdbErrors:Foe,ClientError:fi}=Ee(),{HTTP_STATUS_CODES:Ho,AUTHENTICATION_ERROR_MSGS:Fw,HDB_ERROR_MSGS:rd}=Foe,{UserEventMsg:Kw}=Zn(),Hw=require("lodash"),{server:Hg}=(xr(),D(nm)),koe=z();Hg.getUser=(e,t)=>Yw(e,t,t!=null);Hg.authenticateUser=(e,t)=>Yw(e,t);var tq={username:!0,active:!0,role:!0,password:!0},YH=new Map,Hoe=voe(Moe.delete),qw=xoe.get(kw.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??hp.HASH_FUNCTION.SHA256,zi;async function qoe(e){let t=eq.cleanAttributes(e,tq),r=ZH.addUserValidation(t);if(r)throw new fi(r.message);let n=await Ep.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new fi(rd.ROLE_NAME_NOT_FOUND(t.role),Ho.NOT_FOUND);if(n.length>1)throw new fi(rd.DUP_ROLES_FOUND(t.role),Ho.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=Vw.encrypt(t.password)),t.password=await hp.hash(t.password,qw),t.hash_function=qw,t.role=n[0].id;let s=await XH.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if($w.debug(s),await yl(),s.skipped_hashes.length===1)throw new fi(rd.USER_ALREADY_EXISTS(t.username),Ho.CONFLICT);return Gw.signalUserChange(new Kw(process.pid)),`${t.username} successfully added`}o(qoe,"addUser");async function Goe(e){let t=eq.cleanAttributes(e,tq);if(Wi.isEmptyOrZeroLength(t.username))throw new Error(WH);if(Wi.isEmptyOrZeroLength(t.password)&&Wi.isEmptyOrZeroLength(t.role)&&Wi.isEmptyOrZeroLength(t.active))throw new Error(zH);if(!Wi.isEmpty(t.password)&&Wi.isEmptyOrZeroLength(t.password.trim()))throw new Error(jH);if(!Wi.isEmpty(t.active)&&!Wi.isBoolean(t.active))throw new Error(JH);if(!Wi.isEmpty(t.password)&&!Wi.isEmptyOrZeroLength(t.password.trim())&&($oe(t.username)&&(t.hash=Vw.encrypt(t.password)),t.password=await hp.hash(t.password,qw)),t.role==="")throw new Error(QH);if(t.role){let n=await Ep.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new fi(rd.ALTER_USER_ROLE_NOT_FOUND(t.role),Ho.NOT_FOUND);if(n.length>1)throw new fi(rd.DUP_ROLES_FOUND(t.role),Ho.CONFLICT);t.role=n[0].id}let r=await XH.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await yl(),Gw.signalUserChange(new Kw(process.pid)),r}o(Goe,"alterUser");function $oe(e){let t=!1,r=zi.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o($oe,"isClusterUser");async function Voe(e){let t=ZH.dropUserValidation(e);if(t)throw new fi(t.message);if(zi.get(e.username)===void 0)throw new fi(rd.USER_NOT_EXIST(e.username),Ho.NOT_FOUND);let r=await Hoe({table:"hdb_user",schema:"system",hash_values:[e.username]});return $w.debug(r),await yl(),Gw.signalUserChange(new Kw(process.pid)),`${e.username} successfully deleted`}o(Voe,"dropUser");async function Koe(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=Hw.cloneDeep(e.hdb_user);let r=await Ep.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}o(Koe,"userInfo");async function Yoe(){let e=await qg();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}o(Yoe,"listUsersExternal");async function qg(){let e=await Ep.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=Hw.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Ep.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=Hw.cloneDeep(s),s.role=t[s.role],Woe(s.role),n.set(s.username,s);return n}o(qg,"listUsers");function Woe(e){if(!e){$w.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(Boe)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}o(Woe,"appendSystemTablesToRole");async function yl(e=void 0){e?zi=e:zi=await qg()}o(yl,"setUsersWithRolesCache");async function zoe(){return zi||await yl(),zi}o(zoe,"getUsersWithRolesCache");async function Yw(e,t,r=!0){zi||await yl();let n=zi.get(e);if(!n){if(!r)return{username:e};throw new fi(Fw.GENERIC_AUTH_FAIL,Ho.UNAUTHORIZED)}if(n&&!n.active)throw new fi(Fw.USER_INACTIVE,Ho.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(YH.get(t)===n.password)return s;{let i=hp.validate(n.password,t,n.hash_function||hp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)YH.set(t,n.password);else throw new fi(Fw.GENERIC_AUTH_FAIL,Ho.UNAUTHORIZED)}}return s}o(Yw,"findAndValidateUser");async function joe(){zi||await yl();for(let[,e]of zi)if(e.role.role==="super_user")return e}o(joe,"getSuperUser");async function Qoe(){let e=await qg(),t=Uoe.getConfigFromFile(kw.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==kw.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=Vw.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+KH.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+KH.SERVER_SUFFIX.ADMIN,r}o(Qoe,"getClusterUser");var rq=[];Hg.invalidateUser=function(e){for(let t of rq)try{t(e)}catch(r){koe.error("Error invalidating user",r)}};Hg.onInvalidatedUser=function(e){rq.push(e)}});var He,nd=oe(()=>{He={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var sd,Ww=oe(()=>{nd();sd=class{static{o(this,"ComponentStatus")}lastChecked;status;message;error;constructor(t,r,n){this.lastChecked=new Date,this.status=t,this.message=r,this.error=n}updateStatus(t,r){this.status=t,this.message=r,this.lastChecked=new Date,t!==He.ERROR&&(this.error=void 0)}markHealthy(t){this.updateStatus(He.HEALTHY,t||"Component is healthy")}markError(t,r){this.status=He.ERROR,this.error=t,this.message=r||(typeof t=="string"?t:t.message),this.lastChecked=new Date}markWarning(t){this.updateStatus(He.WARNING,t)}markLoading(t){this.updateStatus(He.LOADING,t||"Component is loading")}isHealthy(){return this.status===He.HEALTHY}hasError(){return this.status===He.ERROR}isLoading(){return this.status===He.LOADING}hasWarning(){return this.status===He.WARNING}getSummary(){let t=this.status.toUpperCase(),r=this.message?`: ${this.message}`:"";return`${t}${r}`}}});var Rl,Ka,zw,id,jw,od,Qw,Gg=oe(()=>{Rl=w(Kr()),Ka=class extends Error{static{o(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=Rl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},zw=class extends Ka{static{o(this,"CrossThreadTimeoutError")}requestId;timeoutMs;collectedCount;constructor(t,r,n){super(`Component status collection timeout after ${r}ms. Collected ${n} responses for request ${t}.`,Rl.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},id=class extends Ka{static{o(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,Rl.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},jw=class extends Ka{static{o(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,Rl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},od=class extends Ka{static{o(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,Rl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},Qw=class extends Ka{static{o(this,"CrossThreadCollectionError")}result;constructor(t){let r=t.success?`Partial collection success: ${t.collectedFromThreads} threads responded`+(t.timedOutThreads.length>0?`, ${t.timedOutThreads.length} timed out`:""):`Collection failed: ${t.errors.map(n=>n.message).join(", ")}`;super(r,Rl.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(`
|
|
16
|
+
`)}}});var nq,bl,sq,Ya,_p,ad,Joe,$g,Jw=oe(()=>{nq=w(Zn()),bl=w(Je());k();sq=w(zn());nd();Gg();Ya=(0,sq.loggerWithTag)("componentStatus.crossThread"),_p=class{static{o(this,"CrossThreadStatusCollector")}awaitingResponses=new Map;responseCheckers=new Map;nextRequestId=1;listenerAttached=!1;timeout;cleanupTimer=null;constructor(t=5e3){this.timeout=t}attachListener(){this.listenerAttached||((0,bl.onMessageByType)(n_.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;Ya.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&&(Ya.debug?.(`Cleaning up ${this.awaitingResponses.size} stale pending requests`),this.awaitingResponses.clear()),this.cleanupTimer=null},3e4))}async collect(t){try{this.attachListener(),this.scheduleCleanup();let r=this.nextRequestId++,n=[];this.awaitingResponses.set(r,n);let a=((0,bl.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,g=o(()=>{let R=this.awaitingResponses.get(r);R&&R.length>=a&&!E&&(E=!0,S(),Ya.trace?.(`Collected all ${R.length} expected responses for request ${r}`),p(R))},"checkComplete"),b=setTimeout(()=>{if(!E){E=!0;let R=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),Ya.debug?.(`Collection timeout for request ${r}: collected ${R.length}/${a} responses`),p(R)}},this.timeout),S=o(()=>{this.awaitingResponses.delete(r),clearTimeout(b)},"cleanup");this.responseCheckers.set(r,g),(0,nq.sendItcEvent)({type:n_.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{g()}).catch(R=>{E=!0,S(),this.responseCheckers.delete(r),h(new id("sendItcEvent",R))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,bl.getWorkerIndex)(),m=f===void 0?"main":`worker-${f}`;for(let[p,h]of d)u.set(`${p}@${m}`,{...h,workerIndex:f});for(let p of l)for(let[h,E]of p.statuses){let g=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${g}`,{...E,workerIndex:p.workerIndex})}return Ya.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof id?Ya.error?.(`ITC failure during component status collection: ${r.message}`):Ya.warn?.("Failed to collect component status from all threads:",r),Ya.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,bl.getWorkerIndex)(),i=s===void 0?"main":`worker-${s}`;for(let[a,c]of r)n.set(`${a}@${i}`,{...c,workerIndex:s});return n}cleanup(){this.awaitingResponses.clear(),this.responseCheckers.clear(),this.cleanupTimer&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null)}},ad=class{static{o(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let a=s.indexOf("@"),c=a!==-1?s.substring(0,a):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let a=this.aggregateComponentGroup(s,i);r.set(s,a)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,a,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",g=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=g;else if(E&&E.startsWith("worker-")){let b=parseInt(E.substring(7));isNaN(b)||(n.workers[b]=g)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==He.HEALTHY&&p.message&&(!i||g>s)&&(s=g,i=p.message),p.error&&!a&&(a=p.error)}let u=this.determineOverallStatus(c);if(Array.from(c.keys()).length>1)for(let[m,p]of r)p.status!==u&&l.set(m,{workerIndex:p.workerIndex!==void 0?p.workerIndex:-1,status:p.status,message:p.message,error:p.error});let f={componentName:t,status:u,lastChecked:n,latestMessage:i,error:a};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[He.ERROR,He.WARNING,He.LOADING,He.UNKNOWN,He.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return He.UNKNOWN}},Joe=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),$g=new _p(Joe)});var Wa,Vg=oe(()=>{Ww();nd();Jw();Gg();Wa=class{static{o(this,"ComponentStatusRegistry")}statusMap=new Map;reset(){this.statusMap=new Map}setStatus(t,r,n,s){if(!t||typeof t!="string")throw new od(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(He).includes(r))throw new od(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(He).join(", ")}`);this.statusMap.set(t,new sd(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,He.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,He.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,He.WARNING,r)}initializeLoading(t,r){this.setStatus(t,He.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,He.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,He.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={[He.HEALTHY]:0,[He.ERROR]:0,[He.WARNING]:0,[He.LOADING]:0,[He.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await $g.collect(t);return ad.aggregate(r)}}});var dr,Kg=oe(()=>{Vg();dr=new Wa});function oq(e){let t=iq.get(e);return t||(t=new Xw(e),iq.set(e,t)),t}function aq(){dr.reset()}var Xw,iq,qo,cq,lq=oe(()=>{Kg();nd();Xw=class{static{o(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return dr.setStatus(this.componentName,He.HEALTHY,t),this}warning(t){return dr.setStatus(this.componentName,He.WARNING,t),this}error(t,r){return dr.setStatus(this.componentName,He.ERROR,t,r),this}loading(t){return dr.setStatus(this.componentName,He.LOADING,t||"Loading..."),this}unknown(t){return dr.setStatus(this.componentName,He.UNKNOWN,t),this}get(){return dr.getStatus(this.componentName)}},iq=new Map;o(oq,"statusForComponent");qo={loading(e,t){dr.initializeLoading(e,t)},loaded(e,t){dr.markLoaded(e,t)},failed(e,t,r){dr.markFailed(e,t,r)}};o(aq,"reset");cq=He});var gp={};be(gp,{AggregationError:()=>jw,COMPONENT_STATUS_LEVELS:()=>He,ComponentStatus:()=>sd,ComponentStatusError:()=>Ka,ComponentStatusOperationError:()=>od,ComponentStatusRegistry:()=>Wa,CrossThreadCollectionError:()=>Qw,CrossThreadStatusCollector:()=>_p,CrossThreadTimeoutError:()=>zw,ITCError:()=>id,StatusAggregator:()=>ad,componentStatusRegistry:()=>dr,crossThreadCollector:()=>$g,query:()=>Xoe});var Xoe,uq=oe(()=>{Kg();Vg();Ww();Vg();Jw();Kg();Gg();nd();Xoe={get(e){return dr.getStatus(e)},all(){return dr.getAllStatuses()},byStatus(e){return dr.getComponentsByStatus(e)},summary(){return dr.getStatusSummary()},async allThreads(){return Wa.getAggregatedFromAllThreads(dr)}}});var Zw={};be(Zw,{STATUS:()=>cq,internal:()=>gp,lifecycle:()=>qo,reset:()=>aq,statusForComponent:()=>oq});var Sp=oe(()=>{lq();uq()});var yp=v((Ive,mq)=>{"use strict";var as=z(),hn=(k(),D(Y)),Zoe=D0(),eae=os(),{validateEvent:eN}=Zn(),Tp=rs(),tae=require("process"),{resetDatabases:rae}=(Ne(),D(ft)),nae={[hn.ITC_EVENT_TYPES.SCHEMA]:sae,[hn.ITC_EVENT_TYPES.USER]:fq,[hn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:oae};async function sae(e){let t=eN(e);if(t){as.error(t);return}as.trace("ITC schemaHandler received schema event:",e),await Zoe(e.message),await iae(e.message)}o(sae,"schemaHandler");async function iae(e){try{Tp.resetReadTxn(hn.SYSTEM_SCHEMA_NAME,hn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Tp.resetReadTxn(hn.SYSTEM_SCHEMA_NAME,hn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Tp.resetReadTxn(hn.SYSTEM_SCHEMA_NAME,hn.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){as.error(t)}}o(iae,"syncSchemaMetadata");var dq=[];async function fq(e){try{try{Tp.resetReadTxn(hn.SYSTEM_SCHEMA_NAME,hn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Tp.resetReadTxn(hn.SYSTEM_SCHEMA_NAME,hn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){as.warn(r)}let t=eN(e);if(t){as.error(t);return}as.trace(`ITC userHandler ${hn.HDB_ITC_CLIENT_PREFIX}${tae.pid} received user event:`,e),await eae.setUsersWithRolesCache();for(let r of dq)r()}catch(t){as.error(t)}}o(fq,"userHandler");fq.addListener=function(e){dq.push(e)};async function oae(e){try{let t=eN(e);if(t){as.error(t);return}as.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Sp(),D(Zw)),{getWorkerIndex:n}=Je(),{sendItcEvent:s}=Zn(),i=r.componentStatusRegistry.getAllStatuses(),a=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:hn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:a,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?as.trace(`Sent component status response directly to thread ${u}`):(u===void 0?as.debug("No originator threadId, falling back to broadcast"):as.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){as.error("Error handling component status request:",t)}}o(oae,"componentStatusRequestHandler");mq.exports=nae});var Zn=v((Lve,hq)=>{"use strict";var Nve=z(),tN=ce(),aae=(k(),D(Y)),{ITC_ERRORS:Rp}=Kr(),{parentPort:Cve,threadId:cae,isMainThread:lae,workerData:Ove}=require("worker_threads"),{onMessageFromWorkers:uae,broadcast:Pve,broadcastWithAcknowledgement:dae}=Je();hq.exports={sendItcEvent:fae,validateEvent:pq,SchemaEventMsg:mae,UserEventMsg:pae};var Yg;uae(async(e,t)=>{Yg=Yg||yp(),pq(e),Yg[e.type]&&await Yg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function fae(e){return!lae&&e.message&&(e.message.originator=cae),dae(e)}o(fae,"sendItcEvent");function pq(e){if(typeof e!="object")return Rp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||tN.isEmpty(e.type))return Rp.MISSING_TYPE;if(!e.hasOwnProperty("message")||tN.isEmpty(e.message))return Rp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||tN.isEmpty(e.message.originator))return Rp.MISSING_ORIGIN;if(aae.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Rp.INVALID_EVENT(e.type)}o(pq,"validateEvent");function mae(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}o(mae,"SchemaEventMsg");function pae(e){this.originator=e}o(pae,"UserEventMsg")});var xo=v((vve,Sq)=>{"use strict";var Eq=(k(),D(Y)),Mve=ce(),Wg=z(),_q=p0(),cd,{sendItcEvent:gq}=Zn();function hae(e){try{Wg.debug("signalSchemaChange called with message:",e),cd=cd||yp();let t=new _q(Eq.ITC_EVENT_TYPES.SCHEMA,e);return cd.schema(t),gq(t)}catch(t){Wg.error(t)}}o(hae,"signalSchemaChange");function Eae(e){try{Wg.trace("signalUserChange called with message:",e),cd=cd||yp();let t=new _q(Eq.ITC_EVENT_TYPES.USER,e);return cd.user(t),gq(t)}catch(t){Wg.error(t)}}o(Eae,"signalUserChange");Sq.exports={signalSchemaChange:hae,signalUserChange:Eae}});function bp(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 Tq(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Ds(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 Ds,Ap=oe(()=>{Ds=class extends Map{static{o(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let a=i[1];if(n)r=(typeof a=="string"?a:a.join(", "))+", "+r;else if(typeof a=="string")r=[a,r];else{a.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};o(bp,"appendHeader");o(Tq,"mergeHeaders")});function zg(e,t,r=gae){let n;return function(...i){return n?n.length*rN>r?t(...i):new Promise((a,c)=>{n.push({args:i,fn(){try{let l=e(...i);a(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,a){setImmediate(()=>{let c=performance.now();rN=(rN*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var bq,_ae,gae,yq,Sae,nN,Rq,rN,sN=oe(()=>{bq=w(zn()),_ae=3e3,gae=2e4,yq=0,Sae=3e4,nN=3e3,Rq=performance.now()+nN,rN=0;o(zg,"throttle");setInterval(()=>{let e=performance.now();e-Rq-nN>_ae&&yq+Sae<e&&(bq.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"),yq=e),Rq=e},nN).unref()});var vq={};be(vq,{EVICTED:()=>Ma,INVALIDATED:()=>Ln,coerceType:()=>Qg,makeTable:()=>Xg});function Xg(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:a,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:p}=e,{expirationMS:h,evictionMS:E,audit:g,trackDeletes:b}=e;E??=0;let{attributes:S}=e;S||(S=[]);let R=MA(i,n,l),L,O,x={},j=Promise.resolve(),H,F,Q;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(H=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(F=K),K.expiresAt&&(Q=K),K.isPrimaryKey&&(x=K);let W,fe=[],ue=[],ee=1,Re=2,Ie={},$e={},Fe=864e5,yr=0,Xt,Ht,Zt,$f=!1,Uc,qt,Vf,Kf=Il.get(U.REPLICATION_DATABASES);if(Array.isArray(Kf)){for(let K of Kf)if(K.name===c&&K.replicateTo>=0){Vf=K.replicateTo;break}}let KE=i.getRange({start:!1,end:!1}).constructor,YE=10,lb=6;g&&Eu(),Nm(i.env.path,K=>{if(O)return Fc(K)});class Yf extends fl{static{o(this,"Updatable")}getUpdatedTime(){return La.get(this.getRecord())?.version}getExpiresAt(){return La.get(this.getRecord())?.expiresAt}addTo(_,y){if(typeof y=="number"||typeof y=="bigint")this.set(_,new sp(y));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(_,y){return this.addTo(_,-y)}}class Oe extends Fr{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=a;static databaseName=c;static attributes=S;static replicate=p;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=H;static updatedTimeProperty=F;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(_,y){if(y&&(this.sourceOptions=y,(y.expiration||y.eviction||y.scanInterval)&&this.setTTLExpiration(y)),y?.intermediateSource)_.intermediateSource=!0,this.sources.unshift(_);else{if(this.sources.some(P=>!P.intermediateSource)){if(this.sources.some(P=>P.name===_.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(_)}O=O||_.get&&(!_.get.reliesOnPrototype||_.prototype.get),L=L||_.load;let T=o(P=>{let M=this.sources;if(M=M.filter(q=>q.intermediateSource&&q[P]&&(!q[P].reliesOnPrototype||q.prototype[P])),M.length>0)if(M.length===1){let q=M[0];return(C,B,G)=>{if(C?.source!==q)return q[P](B,G,C)}}else return(q,C,B)=>{let G=[];for(let te of M){if(q?.source===te)break;G.push(te[P](C,B,q))}return Promise.all(G)}},"getApplyToIntermediateSource"),A=this.sources[this.sources.length-1];A.intermediateSource&&(A={});let I=o(P=>{if(A[P]&&(!A[P].reliesOnPrototype||A.prototype[P]))return(M,q,C)=>{if(!M?.source)return A[P](q,C,M)}},"getApplyToCanonicalSource");Ie={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish")},$e={put:T("put"),patch:T("patch"),delete:T("delete"),publish:T("publish"),invalidate:T("invalidate")};let N=A.shouldRevalidateEvents;return(async()=>{let P=!1,M,q=o(async(C,B)=>{let G=C.value,te=C.table?De[c][C.table]:Oe;if(c===em&&(C.table===gu.ROLE_TABLE_NAME||C.table===gu.USER_TABLE_NAME)&&(P=!0),C.id===void 0&&(C.id=G[te.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));C.source=_;let X={residencyId:So(C.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:C.nodeId,async:!0},$=C.id,Le=await te.getResource($,B,X);switch(C.finished&&await C.finished,C.type){case"put":return N?Le._writeInvalidate($,G,X):Le._writeUpdate($,G,!0,X);case"patch":return N?Le._writeInvalidate($,G,X):Le._writeUpdate($,G,!1,X);case"delete":return Le._writeDelete($,X);case"publish":case"message":return Le._writePublish($,G,X);case"invalidate":return Le._writeInvalidate($,G,X);case"relocate":return Le._writeRelocate($,X);default:Ue.default.error?.("Unknown operation",C.type,C.id)}},"writeUpdate");try{let C=_.subscribe;C&&b==null&&(b=!0);let B={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},G=_.subscribeOnThisThread?_.subscribeOnThisThread((0,Al.getWorkerIndex)(),B):(0,Al.getWorkerIndex)()===0,te=C&&G&&await _.subscribe?.(B);if(te){let X;for await(let $ of te)try{if(!($.type==="transaction"?$.writes[0]:$)){Ue.default.error?.("Bad subscription event",$);continue}if($.source=_,$.type==="end_txn"){if(X?.resolve(),$.localTime&&M!==$.localTime){if($.remoteNodeIds?.length>0){let ie=[Symbol.for("seq"),$.remoteNodeIds[0]],re=d.get(ie),ne=re?.nodes;ne||(ne=[]);for(let me of $.remoteNodeIds.slice(1)){let he=ne.find(Ve=>Ve.id===me);ne=ne.filter(Ve=>Ve.id!==me||Ve===he),he||(he={id:me,seqId:0},ne.push(he)),he.seqId=Math.max(re?.seqId??1,$.localTime),me===X?.nodeId&&(he.lastTxnTime=$.timestamp)}let _e=Math.max(re?.seqId??1,$.localTime);Ue.default.trace?.("Received txn",c,_e,new Date(_e),$.localTime,new Date($.localTime),$.remoteNodeIds),d.put(ie,{seqId:_e,nodes:ne})}M=$.localTime}$.onCommit&&X?.committed.then($.onCommit);continue}if(X)if($.beginTxn)X.resolve();else{X.write_promises.push(q($,X));continue}!$.timestamp&&$.version&&($.timestamp=$.version);let ae=Tt($,()=>{if($.type==="transaction"){let ie=[];for(let re of $.writes)try{ie.push(q(re,$))}catch(ne){throw ne.message+=" writing "+JSON.stringify(re)+" of event "+JSON.stringify($),ne}return Promise.all(ie)}else if($.type==="define_schema"){let ie=this.attributes.slice(0),re=!1;for(let ne of $.attributes)ie.find(_e=>_e.name===ne.name)||(ie.push(ne),re=!0);re&&(Xe({table:s,database:c,attributes:ie,origin:"cluster"}),wp.signalSchemaChange(new Np.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return $.beginTxn?(X=$,X.write_promises=[q($,$)],new Promise(ie=>{X.resolve=()=>ie(Promise.all(X.write_promises))})):q($,$)});X&&(X.committed=ae),P&&ae&&!ae?.waitingForUserChange&&(ae.then(()=>wp.signalUserChange(new Np.UserEventMsg(process.pid))),ae.waitingForUserChange=!0),$.onCommit&&(ae?ae.then($.onCommit):$.onCommit())}catch(Le){Ue.default.error?.("error in subscription handler",Le)}}}catch(C){Ue.default.error?.(C)}})(),this}static get isCaching(){return O}static get shouldRevalidateEvents(){return this.prototype.get!==Oe.prototype.get}static getResource(_,y,T){let A=super.getResource(_,y,T);if(this.loadAsInstance===!1&&(y._freezeRecords=!0),_!=null&&this.loadAsInstance!==!1){Mr(_);try{if(A.getRecord?.())return A;if(typeof _=="object"&&_&&!Array.isArray(_))throw new Error(`Invalid id ${JSON.stringify(_)}`);let I=!T?.async||i.cache?.get?.(_),N=br(y),P=N.getReadTxn();if(P?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return xc(_,y,{transaction:P,ensureLoaded:T?.ensureLoaded},I,M=>{if(M?Oe._updateResource(A,M):A.#e=null,y.onlyIfCached){if(!A.doesExist())throw new lt.ServerError("Entry is not cached",504)}else if(T?.ensureLoaded){let q=Ra(_,M,y,A);if(q)return N?.disregardReadTxn(),A.#i=!0,y.loadedFromSource=!0,Ms(q,C=>(Oe._updateResource(A,C),A))}return A})}catch(I){throw I.message.includes("Unable to serialize object")&&(I.message+=": "+JSON.stringify(_)),I}}return A}static _updateResource(_,y){_.#n=y,_.#e=y?.value??null,_.#r=y?.version}ensureLoaded(){let _=Ra(this.getId(),this.#n,this.getContext());if(_)return this.#i=!0,this.getContext().loadedFromSource=!0,Ms(_,y=>{this.#n=y,this.#e=y.value,this.#r=y.version})}static getNewId(){let _=x?.type;if(_==="String"||_==="ID")return super.getNewId();if(!qt){let I=i.getEntry(Symbol.for("id_allocation")),N=I?.value,P;if(N&&N.nodeName===server.hostname&&(!Lae(i)||N.pid===process.pid)){let M=N.start,q=N.end;P=M;for(let C of i.getKeys({start:q,end:M,limit:1,reverse:!0}))P=C}else N=A(I?.version??null),P=N.start;qt=new BigInt64Array([BigInt(P)+1n]),qt=new BigInt64Array(i.getUserSharedBuffer("id",qt.buffer)),qt.maxSafeId=N.end}let y=Number(Atomics.add(qt,0,1n)),T=_==="Int"?512:1048576;if(y+T>=qt.maxSafeId){let I=o(N=>{qt.maxSafeId=y+(_==="Int"?1023:4194303);let P=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,M=N?void 0:i.useReadTransaction(),q=Number(qt[0]);for(let G of i.getKeys({start:q+1,end:P,limit:1,transaction:M}))P=G;M?.done();let{value:C,version:B}=i.getEntry(Symbol.for("id_allocation"));if(qt.maxSafeId<P){if(C.end>qt.maxSafeId-100)return;Ue.default.info?.("New id allocation",y,qt.maxSafeId,B),i.put(Symbol.for("id_allocation"),{start:C.start,end:qt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),B)}else{Ue.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${qt.maxSafeId}, but id of ${P} detected`);let G=A(B);G.alreadyUpdated||Atomics.store(qt,0,BigInt(G.start+1)),qt.maxSafeId=G.end}},"updateEnd");y+T===qt.maxSafeId?setImmediate(I):y+100>=qt.maxSafeId&&(Ue.default.warn?.(`Synchronous id allocation required on table ${s}${_=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>I(!0)))}return y;function A(I){let N=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,P=N/4,M,q,C=!1,B,G;do{B=Math.floor(Math.random()*N),G={start:B,end:B+(_==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},M=0;for(let te of i.getKeys({start:B,limit:1,reverse:!0}))M=te;q=N;for(let te of i.getKeys({start:B+1,end:N,limit:1}))q=te;P*=.875,P<1e3&&!C&&(C=!0,Ue.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${_==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,B,M,q,P))}while(!(P<q-B&&(P<B-M||M===0)));return i.transactionSync(()=>{let te=i.getEntry(Symbol.for("id_allocation"));return(te?.version??null)==I?(Ue.default.info?.("Allocated new id range",G),i.put(Symbol.for("id_allocation"),G,Date.now()),G):(Ue.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...te.value})})}}static setTTLExpiration(_){if(typeof _=="number")h=_*1e3,E||(E=0);else if(_&&typeof _=="object")h=_.expiration*1e3,E=(_.eviction||0)*1e3,Fe=_.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");Fe=Fe||(h+E)/4,Fc()}static getResidencyRecord(_){return d.get([Symbol.for("residency_by_id"),_])}static setResidency(_){Oe.getResidency=_&&((y,T)=>{try{return _(y,T)}catch(A){throw A.message+=` in residency function for table ${s}`,A}})}static setResidencyById(_){Oe.getResidencyById=_&&(y=>{try{return _(y)}catch(T){throw T.message+=` in residency function for table ${s}`,T}})}static getResidency(_,y){if(Oe.getResidencyById)return Oe.getResidencyById(_[t]);let T=Vf;if(y.replicateTo!=null){if(Array.isArray(y.replicateTo))return y.replicateTo.includes(server.hostname)?y.replicateTo:[server.hostname,...y.replicateTo];y.replicateTo>=0&&(T=y.replicateTo)}if(T>=0&&server.nodes){let A=[server.hostname];if(y.previousResidency)A.push(...y.previousResidency.slice(0,T));else{let I=server.nodes.map(M=>M.name),N=Math.floor(I.length*Math.random());A.push(...I.slice(N,N+T));let P=N+T-I.length;P>0&&A.push(...I.slice(0,P))}return A}}static enableAuditing(){g||(g=!0,Eu(),Oe.audit=!0)}static coerceId(_){return _===""?null:Qg(_,x)}static async dropTable(){delete De[c][s];for(let _ of i.getRange({versions:!0,snapshot:!1,lazy:!0}))_.metadataFlags&Pn&&_.value&&Ca(_.value);if(c===a){for(let _ of S)d.remove(Oe.tableName+"/"+_.name),r[_.name]?.drop();d.remove(Oe.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),oN.default.unlinkSync(i.env.path);wp.signalSchemaChange(new Np.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(_){let y=this.constructor;if(typeof _=="string"&&y.loadAsInstance!==!1)return this.getProperty(_);if(zf(_))return this.search(_);if(_&&_.id===void 0&&!_.toString()){let T={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?Oe.getRecordCount().then(A=>(T.recordCount=A.recordCount,T.estimatedRecordRange=A.estimatedRange,T)):T}if(_!==void 0&&y.loadAsInstance===!1){let T=this.getContext(),A=br(T),I=A.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let N=Rr(_);Mr(N);let P=!0;return _.checkPermission&&(P=this.allowRead(T.user,_)),Ms(Ms(P,M=>{if(!M)throw new lt.AccessViolation(T.user);let q=!0;return xc(N,T,{transaction:I,ensureLoaded:q},!1,C=>{if(T.onlyIfCached){if(!C?.value)throw new lt.ServerError("Entry is not cached",504)}else if(q){let B=Ra(N,C,T);if(B)return A?.disregardReadTxn(),T.loadedFromSource=!0,B.then(G=>G?.value)}return C?.value})}),M=>{let q=_?.select;return q&&M!=null?Bu(q,this.constructor)(M):M})}if(_?.property)return this.getProperty(_.property);if(this.doesExist()||_?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(_,y){let T=Vr(_,y);if(T?.read){if(T.isSuperUser)return!0;let A=T.attribute_permissions,I=y?.select;if(A?.length>0||$f&&I){if(y||(y={}),I){let N=A?.length>0&&iN(A,"read");y.select=I.map(P=>{let M=P.name||P;if(!N||N[M]){let q=Zt[M]?.definition?.tableClass;if(q){if(P.name||(P={name:P}),!P.checkPermission&&y.checkPermission&&(P.checkPermission=y.checkPermission),!q.prototype.allowRead.call(null,_,P))return!1;if(!P.select)return P.name}return P}}).filter(Boolean)}else y.select=A.filter(N=>N.read&&!Zt[N.attribute_name]).map(N=>N.attribute_name);return y}else return!0}}allowUpdate(_,y,T){let A=Vr(_,T);if(A?.update){let I=A.attribute_permissions;if(I?.length>0){let N=iN(I,"update");for(let P in y)if(!N[P])return!1;for(let P of I){let M=P.attribute_name;!P.update&&!(M in y)&&(y[M]=this.getProperty(M))}}return Bc(this.getContext())}}allowCreate(_,y,T){if(this.isCollection){let A=Vr(_,T);if(A?.insert){let I=A.attribute_permissions;if(I?.length>0){let N=iN(I,"insert");for(let P in y)if(!N[P])return!1;return Bc(this.getContext())}else return Bc(this.getContext())}}else return this.allowUpdate(_,{})}allowDelete(_,y){return Vr(_,y)?.delete&&Bc(this.getContext())}update(_,y){let T,A=typeof y=="boolean"||y===void 0&&(_==null||typeof _=="object"&&!(_ instanceof URLSearchParams)),I=!1;A?(I=y,y=_,T=this.getId()):T=Rr(_);let N=this.getContext();if(!br(N))throw new Error("Can not update a table resource outside of a transaction");if(y===!1)return this;if(typeof y=="object"&&y)if(I)Object.isFrozen(y)&&(y={...y}),this.#e={},this.#t=y;else if(A){let M=this.#t;M&&(y=Object.assign(M,y)),this.#t=y}else{let M=!0;if(_==null)throw new TypeError("Can not put a record without a target");return _.checkPermission&&(M=this.allowUpdate(N.user,y,_)),Ms(M,q=>{if(!q)throw new lt.AccessViolation(N.user);return Ms(i.get(Rr(_)),C=>{let B=new Yf(C);return B._setChanges(y),this._writeUpdate(T,B.getChanges(),!1),B})})}return this._writeUpdate(T,this.#t,I),this}addTo(_,y){if(typeof y=="number"||typeof y=="bigint")this.#s===Iq?this.set(_,(+this.getProperty(_)||0)+y):(this.#s||this.update(),this.set(_,new sp(y)));else throw new Error("Can not add a non-numeric value")}subtractFrom(_,y){if(typeof y=="number")return this.addTo(_,-y);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(_){this.#t=_}setRecord(_){this.#e=_}invalidate(_){let y=!0,T=this.getContext();return _?.checkPermission&&(y=this.allowDelete(T.user,_,T)),Ms(y,A=>{if(!A)throw new lt.AccessViolation(T.user);this._writeInvalidate(_?Rr(_):this.getId())})}_writeInvalidate(_,y,T){let A=this.getContext();Mr(_),br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Ie.invalidate?.bind(this,A,_),beforeIntermediate:Hc(y,$e.invalidate?.bind(this,A,_)),commit:o((N,P)=>{if(!(ba(N,P,T?.nodeId)<=0)){y??=null;for(let M in r)y||(y={}),y[M]===void 0&&(y[M]=this.getProperty(M));Ue.default.trace?.(`Invalidating entry in ${s} id: ${_}, timestamp: ${new Date(N).toISOString()}`),R(_,y,P,N,Ln,g,{user:A?.user,residencyId:T?.residencyId,nodeId:T?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(_,y){let T=this.getContext();Mr(_),br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Ie.relocate?.bind(this,T,_),beforeIntermediate:$e.relocate?.bind(this,T,_),commit:o((I,N)=>{if(ba(I,N,y?.nodeId)<=0)return;let P=Oe.getResidencyRecord(y.residencyId),M=0,q=null,C=N?.value;if(P&&!P.includes(server.hostname)){for(let B in r)q||(q={}),q[B]=C[B];M=Ln}else q=C;Ue.default.trace?.(`Relocating entry id: ${_}, timestamp: ${new Date(I).toISOString()}`),R(_,q,N,I,M,g,{user:T.user,residencyId:y.residencyId,nodeId:y.nodeId,expiresAt:y.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(_,y){let T={previousResidency:this.getResidencyRecord(_.residencyId),isRelocation:!0},A=kc(this.getResidency(y.value,T)),I;if(A){if(!A.includes(server.hostname))return!1;I=So(A)}let N=0;Ue.default.debug?.("Performing a relocate of an entry",existing_entry.key,y.value,A);let P=R(_.key,y.value,_,_.version,N,!0,{residencyId:I,expiresAt:y.expiresAt},"relocate",!1,null);return!0}static evict(_,y,T){let A=this.Source,I;if(!((O||g)&&(!y||(I=i.getEntry(_),!I||!y)||I.version!==T))){if(O){if(i.hasLock(_,I.version))return;let N;for(let P in r)N||(N={}),N[P]=y[P];if(N)return R(_,N,I,T,Ma,null,null,null,!0)}if(i.ifVersion(_,T,()=>{go(_,y,null)}),g)return R(_,null,I,T,Ma,null,null,null,!0);rl(i,I??i.getEntry(_),T)}}lock(){throw new Error("Not yet implemented")}static operation(_,y){return _.table||=s,_.schema||=c,global.operation(_,y)}put(_,y){if(y===void 0||y instanceof URLSearchParams)this.update(_,!0);else{let T=!0;if(_==null)throw new TypeError("Can not put a record without a target");let A=this.getContext();return _.checkPermission&&(T=this.allowUpdate(A.user,y,_)),Ms(T,I=>{if(!I)throw new lt.AccessViolation(A.user);if(Array.isArray(y))for(let N of y){let P=N[t];this._writeUpdate(P,N,!0)}else{let N=Rr(_);this._writeUpdate(N,y,!0)}})}}create(_,y){let T=!0,A=this.getContext();if(!y&&!(_ instanceof URLSearchParams)&&(y=_,_=void 0),!y||typeof y!="object"||Array.isArray(y))throw new TypeError("Can not create a record without an object");return _?.checkPermission&&(T=this.allowCreate(A.user,y,_)),Ms(T,I=>{if(!I)throw new lt.AccessViolation(A.user);let N=Rr(_)??y[t];if(N===void 0)N=this.constructor.getNewId();else if(i.get(N))throw new lt.ClientError("Record already exists",409);return this._writeUpdate(N,y,!0),y})}patch(_,y){if(y===void 0||y instanceof URLSearchParams)this.update(_,!1);else{let T=this.update(_,y);if(T?.then)return T.then(()=>{})}}_writeUpdate(_,y,T,A){let I=this.getContext(),N=br(I);Mr(_);let P=this.#n??i.getEntry(_);this.#s=T?Iq:Nae;let M=o(C=>T?C.put?()=>C.put(I,_,y):null:C.patch?()=>C.patch(I,_,y):C.put?()=>C.put(I,_,ml(this)):null,"writeToSources"),q={key:_,store:i,entry:P,nodeName:I?.nodeName,validate:o(C=>{y||(y=this.#t),T||y&&Ag(this.#t===y?this:y)?I?.source||(N.checkOverloaded(),this.validate(y,!T),F&&(y[F.name]=F.type==="Date"?new Date(C):F.type==="String"?new Date(C).toISOString():C),T&&(t&&y[t]!==_&&(y[t]=_),H&&(P?.value?y[H.name]=P?.value[H.name]:y[H.name]=H.type==="Date"?new Date(C):H.type==="String"?new Date(C).toISOString():C),y=ml(y))):N.removeWrite(q)},"validate"),before:M(Ie),beforeIntermediate:Hc(y,M($e)),commit:o((C,B,G)=>{if(G){if(I&&B?.version>(I.lastModified||0)&&(I.lastModified=B.version),this.#n=B,B?.value&&B.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");T||(this.#e=B?.value??null)}this.#t=void 0,this.#r=C;let te=B?.value,X;this.#s=0;let $=!1,Le=ba(C,B,A?.nodeId),ae;if(Le<=0){if(g){let me=B.localTime,he=B.version;Ue.default.trace?.("Applying CRDT update to record with id: ",_,"txn time",new Date(C),"applying later update from:",new Date(he),"local recorded time",new Date(me));let Ve=[];for(;me>C||he>=C&&me>0;){let we=l.get(me);if(!we)break;let Ze=Mt(we);if(he=Ze.version,he>=C){if(he===C){if(Le=ba(C,{version:he,localTime:me},A?.nodeId),Le===0)return;if(Le>0)continue}if(Ze.type==="patch")Ve.push(Ze),ae=y;else if(Ze.type==="put"||Ze.type==="delete")return}me=Ze.previousLocalTime}me||Ue.default.debug?.("No further audit history, applying incremental updates based on available history",_,"existing version preserved",B),Ve.sort((we,Ze)=>we.version-Ze.version);for(let we of Ve){let Ze=we.getValue(i);if(Ue.default.debug?.("Rebuilding update with future patch:",new Date(we.version),Ze,we),X=__(X??y,Ze,T),!X)return}}else{if(T)return;X=__(X??y,te,T),Ue.default.debug?.("Rebuilding update without audit:",X)}Ue.default.trace?.("Rebuilt record to save:",X," is full update:",T)}let ie;if(T&&!X?ie=y:this.constructor.loadAsInstance===!1?ie=ml(te,X??y):(this.#e=te,ie=ml(this,X??y)),this.#e=ie,ie&&ie.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let re;if(A?.residencyId!=null)re=A.residencyId;else{P?.residencyId&&(I.previousResidency=Oe.getResidencyRecord(P.residencyId));let me=kc(Oe.getResidency(ie,I));if(me&&!me.includes(server.hostname))if(ae??=ie,$=!0,Oe.getResidencyById)ie=void 0;else{ie=null;for(let he in r)ie||(ie={}),ie[he]=ae[he]}re=So(me)}T||(ae=y);let ne=I?.expiresAt??(h?h+Date.now():-1);Ue.default.trace?.(`Saving record with id: ${_}, timestamp: ${new Date(C).toISOString()}${ne?", expires at: "+new Date(ne).toISOString():""}${B?", replaces entry from: "+new Date(B.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(ie).slice(0,100)}catch{return""}})()),go(_,te,ie);let _e=T?"put":"patch";R(_,ie,B,C,$?Ln:0,g,{omitLocalRecord:$,user:I?.user,residencyId:re,expiresAt:ne,nodeId:A?.nodeId,originatingOperation:I?.originatingOperation,tableToTrack:c==="system"?null:s},_e,!1,ae),I.expiresAt&&Fc()},"commit")};N.addWrite(q)}async delete(_){if(zf(_)){_.select=["$id"];for await(let y of this.search(_))this._writeDelete(y.$id);return!0}if(_){let y=!0,T=this.getContext();return _.checkPermission&&(y=this.allowDelete(T.user,_,T)),Ms(y,A=>{if(!A)throw new lt.AccessViolation(T.user);let I=Rr(_);return this._writeDelete(I),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(_,y){let T=br(this.getContext());Mr(_);let A=this.getContext();return T.addWrite({key:_,store:i,entry:this.#n,nodeName:A?.nodeName,before:Ie.delete?.bind(this,A,_),beforeIntermediate:$e.delete?.bind(this,A,_),commit:o((I,N,P)=>{let M=N?.value;P&&(A&&N?.version>(A.lastModified||0)&&(A.lastModified=N.version),Oe._updateResource(this,N)),!(ba(I,N,y?.nodeId)<=0)&&(go(this.getId(),M),Ue.default.trace?.(`Deleting record with id: ${_}, txn timestamp: ${new Date(I).toISOString()}`),g||b?(R(_,null,N,I,0,g,{user:A?.user,nodeId:y?.nodeId,tableToTrack:s},"delete"),g||Fc()):rl(i,N))},"commit")}),!0}search(_){let y=this.getContext(),T=br(y);if(!_)throw new Error("No query provided");if(_.parseError)throw _.parseError;if(_.checkPermission&&!this.allowRead(y.user,_))throw new lt.AccessViolation(y.user);y&&(y.lastModified=bae);let A=_.conditions;A?A.length===void 0&&(A=A[Symbol.iterator]?Array.from(A):[A]):A=Array.isArray(_)?_:_[Symbol.iterator]?Array.from(_):[];let I=_.id??this.getId();I&&(A=[{attribute:null,comparator:Array.isArray(I)?"prefix":"starts_with",value:I}].concat(A));let N,P={};function M(ne,_e){let me;switch(_e){case"and":case void 0:if(ne.length<1)throw new Error('An "and" operator requires at least one condition');me=!0;break;case"or":if(ne.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+_e)}for(let he of ne){if(he.conditions){he.conditions=M(he.conditions,he.operator);continue}let Ve=he[0]??he.attribute,we=Ve==null?x:Bi(S,Ve);if(we)(we.type||UA[he.comparator])&&(he[1]===void 0?he.value=C(he.value,we):he[1]=C(he[1],we));else if(Ve!=null)throw(0,lt.handleHDBError)(new Error,`${Ve} is not a defined attribute`,404);if(he.chainedConditions)if(he.chainedConditions.length===1&&(!he.operator||he.operator=="and")){let Ze=he.chainedConditions[0],vr,Xs;if(Ze.comparator==="gt"||Ze.comparator==="greater_than"||Ze.comparator==="ge"||Ze.comparator==="greater_than_equal"?(vr=he,Xs=Ze):(vr=Ze,Xs=he),vr.comparator!=="lt"&&vr.comparator!=="less_than"&&vr.comparator!=="le"&&vr.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Te=Xs.comparator==="ge"||Xs.comparator==="greater_than_equal",Rt=vr.comparator==="le"||vr.comparator==="less_than_equal";he.comparator=(Te?"ge":"gt")+(Rt?"le":"lt"),he.value=[Xs.value,vr.value]}else throw new Error("Multiple chained conditions are not currently supported")}return ne}o(M,"prepareConditions");function q(ne,_e){if(_.enforceExecutionOrder)return ne;for(let me of ne)me.conditions&&(me.conditions=q(me.conditions,me.operator));return ne.length>1&&_e!=="or"?Tae(ne,Z_(Oe)):ne}o(q,"orderConditions");function C(ne,_e){return Array.isArray(ne)?ne.map(me=>Qg(me,_e)):Qg(ne,_e)}o(C,"coerceTypedValues");let B=_.operator;(A.length>0||B)&&(A=M(A,B));let G=typeof _.sort=="object"&&_.sort,te;if(G&&B!=="or"){let ne=G.attribute;if(ne==null)throw new lt.ClientError("Sort requires an attribute");if(N=A.find(_e=>vu(_e.attribute)===vu(ne)),!N){let _e=Bi(S,ne);if(!_e)throw(0,lt.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not a defined attribute`,404);if(_e.indexed)N={...G,comparator:"sort"},A.push(N);else if(A.length===0&&!_.allowFullScan)throw(0,lt.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not indexed and not combined with any other conditions`,404)}N&&(N.descending=!!G.descending)}A=q(A,B),G&&(N&&A[0]===N?G.next&&(te={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(N&&A.splice(A.indexOf(N),1),te=G));let X=_.select;if(A.length===0&&(A=[{attribute:t,comparator:"greater_than",value:!0}]),_.explain)return{conditions:A,operator:B,postOrdering:te,selectApplied:!!X};let $=T.useReadTxn(),Le=xA(A,B,Oe,$,_,y,(ne,_e)=>jf(ne,X,y,$,_e),P),ae=_.ensureLoaded!==!1,ie=Oe.transformEntryForSelect(X,y,$,P,ae,!0),re=Oe.transformToOrderedSelect(Le,X,te,y,$,ie);return(_.offset||_.limit!==void 0)&&(re=re.slice(_.offset,_.limit!==void 0?(_.offset||0)+_.limit:void 0)),re.onDone=()=>{re.onDone=null,T.doneReadTxn()},re.selectApplied=!0,re.getColumns=()=>{if(X){let ne=[];for(let _e of X)_e==="*"?ne.push(...S.map(me=>me.name)):ne.push(_e.name||_e);return ne}return S.filter(ne=>!ne.computed&&!ne.relationship).map(ne=>ne.name)},re}static transformToOrderedSelect(_,y,T,A,I,N){let P=new KE;if(T){_=jf(_,y,A,I,null);let M;P.iterate=function(){let C,B=_[Symbol.asyncIterator]?_[Symbol.asyncIterator]():_[Symbol.iterator](),G,te=T.dbOrderedAttribute,X,$,Le=!0;function ae(re){let ne=re.next&&ae(re.next),_e=re.descending;return A.sort=re,(me,he)=>{let Ve=pu(me,re.attribute,A),we=pu(he,re.attribute,A),Ze=_e?(0,wl.compareKeys)(we,Ve):(0,wl.compareKeys)(Ve,we);return Ze===0?ne?.(me,he)||0:Ze}}o(ae,"createComparator");let ie=ae(T);return{async next(){let re;if(C)if(re=C.next(),re.done){if(G)return P.onDone&&P.onDone(),re}else return{value:await N.call(this,re.value)};M=[],X&&M.push(X);do if(re=await B.next(),re.done){if(G=!0,M.length)break;return P.onDone&&P.onDone(),re}else{let ne=re.value;if(ne?.then&&(ne=await ne),te){let _e=pu(ne,te,A);if(Le)Le=!1,$=_e;else if(_e!==$){$=_e,X=ne;break}}M.push(ne)}while(!0);return T.isGrouped,M.sort(ie),C=M[Symbol.iterator](),re=C.next(),re.done?(P.onDone&&P.onDone(),re):{value:await N.call(this,re.value)}},return(){return P.onDone&&P.onDone(),B.return()},throw(){return P.onDone&&P.onDone(),B.throw()}}};let q=o(C=>{if(typeof y=="object"&&Array.isArray(C.attribute))for(let B=0;B<y.length;B++){let G=y[B],te;if(G.name===C.attribute[0]){for(te=G.sort||(G.sort={});te.next;)te=te.next;te.attribute=C.attribute.slice(1),te.descending=C.descending}else G===C.attribute[0]&&(y[B]=te={name:G,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&q(C.next)},"applySortingOnSelect");q(T)}else P.iterate=(_[Symbol.asyncIterator]||_[Symbol.iterator]).bind(_),P=P.map(function(M){try{let q=N.call(this,M);return typeof q?.catch=="function"?q.catch(C=>{throw C.partialObject={[t]:M.key},C}):q}catch(q){throw q.partialObject={[t]:M.key},q}});return P}static transformEntryForSelect(_,y,T,A,I,N){let P;I&&O&&!(typeof _=="string"?[_]:_)?.every(C=>{let B;return typeof C=="object"?B=C.name:B=C,r[B]||B===t})&&(P=!0);let M,q=o(function(C){let B;if(y?.transaction?.stale&&(y.transaction.stale=!1),C!=null){if(B=C.deref?C.deref():C.value,!B&&(C.key===void 0||C.deref)||C.metadataFlags&Ln){if(C.metadataFlags&Ln&&y.replicateFrom===!1&&N&&C.residencyId)return ja.SKIP;if(C=xc(C.key??C,y,{transaction:T,lazy:_?.length<4,ensureLoaded:I},this?.isSync,G=>G),C?.then)return C.then(q.bind(this));B=C?.value}if(P&&C?.metadataFlags&(Ln|Ma)||C?.expiresAt!=null&&C?.expiresAt<Date.now()){if(y.onlyIfCached)return{[t]:C.key,message:"This entry has expired"};let G=Ra(C.key??C,C,y);if(G?.then)return G.then(q)}}if(B==null)return N?ja.SKIP:B;if(_&&!(_[0]==="*"&&_.length===1)){let G,te=o(($,Le)=>{let ae;typeof $=="object"?ae=$.name:ae=$;let ie=Zt?.[ae],re;if(ie){let ne=A?.[ae];if(ne)if(ne.hasMappings){let me=ie.from?B[ie.from]:vu(C.key);re=ne.get(me),re||(re=[])}else re=ne.fromRecord?.(B);else re=ie(B,y,C,!0);let _e=o(me=>{if(ie.directReturn)return Le(me,ae);if(me&&typeof me=="object"){let he=ie.definition?.tableClass||Oe;M||(M={});let Ve=M[ae]||(M[ae]=he.transformEntryForSelect(ae===$?null:$.select||(Array.isArray($)?$:null),y,T,ne,I));if(Array.isArray(me)){let we=[],Ze=he.transformToOrderedSelect(me,$.select,typeof $.sort=="object"&&$.sort,y,T,Ve)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),vr=o(Te=>{for(;!Te.done;){if(Te?.then)return Te.then(vr);we.push(Te.value),Te=Ze.next()}Le(we,ae)},"nextValue"),Xs=vr(Ze.next());Xs&&(G||(G=[]),G.push(Xs));return}else if(me=Ve.call(this,me),me?.then){G||(G=[]),G.push(me.then(we=>Le(we,ae)));return}}Le(me,ae)},"handleResolvedValue");re?.then?(G||(G=[]),G.push(re.then(_e))):_e(re);return}else re=B[ae],re&&typeof re=="object"&&ae!==$&&(re=Oe.transformEntryForSelect($.select||$,y,T,null)({value:re}));Le(re,ae)},"selectAttribute"),X;if(typeof _=="string")te(_,$=>{X=$});else if(Array.isArray(_))if(_.asArray)X=[],_.forEach(($,Le)=>{$==="*"?_[Le]=B:te($,ae=>X[Le]=ae)});else{X={};let $=_.forceNulls;for(let Le of _)if(Le==="*")for(let ae in B)X[ae]=B[ae];else te(Le,(ae,ie)=>{ae===void 0&&$&&(ae=null),X[ie]=ae})}else throw new lt.ClientError("Invalid select"+_);return G?Promise.all(G).then(()=>X):X}return B},"transform");return q}async subscribe(_){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||Xe({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),_||(_={});let y=!_.rawEvents,T=[],A=$A(Oe,this.getId()??null,function(P,M,q,C){try{let B=M.getValue?.(i,y),G=M.type;if(!B&&G==="patch"&&y){let X=i.getEntry(P);X?.version===M.version?B=X.value:B=M.getValue?.(i,!0,q),G="put"}let te={id:P,localTime:q,value:B,version:M.version,type:G,beginTxn:C};T?T.push(te):(c!=="system"&&qe(M.size??1,"db-message",s,null),this.send(te))}catch(B){Ue.default.error?.(B)}},_.startTime||0,_),I=(async()=>{this.isCollection&&(A.includeDescendants=!0,_.onlyChildren&&(A.onlyChildren=!0)),_.supportsTransactions&&(A.supportsTransactions=!0);let P=this.getId(),M=_.previousCount;M>1e3&&(M=1e3);let q=_.startTime;if(this.isCollection){if(q){if(M)throw new lt.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:C,value:B}of l.getRange({start:q,exclusiveStart:!0,snapshot:!1})){let G=Mt(B);if(G.tableId!==n)continue;let te=G.recordId;if(P==null||Oq(P,te)){let X=G.getValue(i,y,C);if(N({id:te,localTime:C,value:X,version:G.version,type:G.type,size:G.size}),A.queue?.length>Nq&&await A.waitForDrain()===!1)return}A.startTime=C}}else if(M){let C=[];for(let{key:B,value:G}of l.getRange({start:"z",end:!1,reverse:!0}))try{let te=Mt(G);if(te.tableId!==n)continue;let X=te.recordId;if(P==null||Oq(P,X)){let $=te.getValue(i,y,B);if(C.push({id:X,localTime:B,value:$,version:te.version,type:te.type}),--M<=0)break}}catch(te){Ue.default.error("Error getting history entry",B,te)}for(let B=C.length;B>0;)N(C[--B]);C[0]&&(A.startTime=C[0].localTime)}else if(!_.omitCurrent){for(let{key:C,value:B,version:G,localTime:te,size:X}of i.getRange({start:P??!1,end:P==null?void 0:[P,wl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(B&&(N({id:C,localTime:te,value:B,version:G,type:"put",size:X}),A.queue?.length>Nq&&await A.waitForDrain()===!1))return}}else{M&&!q&&(q=0);let C=this.#n?.localTime;if(C===DA&&(i.cache?.delete(P),this.#n=i.getEntry(P),Ue.default.trace?.("re-retrieved record",C,this.#n?.localTime),C=this.#n?.localTime),Ue.default.trace?.("Subscription from",q,"from",P,C),q<C){let B=[],G=C;do{let te=l.get(G);if(te){_.omitCurrent=!0;let X=Mt(te),$=X.getValue(i,y,G);y&&(X.type="put"),B.push({id:P,value:$,localTime:G,...X}),G=X.previousLocalTime}else break;M&&M--}while(G>q&&M!==0);for(let te=B.length;te>0;)N(B[--te]);A.startTime=C}!_.omitCurrent&&this.doesExist()&&N({id:P,localTime:C,value:this.#e,version:this.#r,type:"put"})}for(let C of T)N(C);T=null})();function N(P){c!=="system"&&qe(P.size??1,"db-message",s,null),A.send(P)}return o(N,"send"),_.listener&&A.on("data",_.listener),A}static subscribeOnThisThread(_,y){return _===0||y?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(_,y,T){if(y===void 0||y instanceof URLSearchParams)this._writePublish(this.getId(),_,y);else{let A=!0,I=this.getContext();return _.checkPermission&&(A=this.allowCreate(I.user,_,I)),Ms(A,N=>{if(!N)throw new lt.AccessViolation(I.user);let P=Rr(_);this._writePublish(P,y,T)})}}_writePublish(_,y,T){let A=br(this.getContext());_??=null,_!==null&&Mr(_);let I=this.getContext();A.addWrite({key:_,store:i,entry:this.#n,nodeName:I?.nodeName,validate:o(()=>{I?.source||(A.checkOverloaded(),this.validate(y))},"validate"),before:Ie.publish?.bind(this,I,_,y),beforeIntermediate:Hc(y,$e.publish?.bind(this,I,_,y)),commit:o((N,P,M)=>{P===void 0&&b&&!g&&Fc(),Ue.default.trace?.(`Publishing message to id: ${_}, timestamp: ${new Date(N).toISOString()}`),R(_,P?.value??null,P,P?.version||N,0,!0,{user:I?.user,residencyId:T?.residencyId,expiresAt:I?.expiresAt,nodeId:T?.nodeId,tableToTrack:s},"message",!1,y)},"commit")})}validate(_,y){let T,A=o((I,N,P)=>{if(N.type&&I!=null)if(y&&I.__op__&&(I=I.value),N.properties){typeof I!="object"&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be an object${N.type?" ("+N.type+")":""}`);let M=N.properties;for(let q=0,C=M.length;q<C;q++){let B=M[q];if(B.relationship||B.computed){_.hasOwnProperty(B.name)&&(T||(T=[])).push(`Computed property ${P}.${B.name} may not be directly assigned a value`);continue}let G=A(I[B.name],B,P+"."+B.name);G&&(I[B.name]=G)}if(N.sealed&&I!=null&&typeof I=="object")for(let q in I)M.find(C=>C.name===q)||(T||(T=[])).push(`Property ${q} is not allowed within object in property ${P}`)}else switch(N.type){case"Int":(typeof I!="number"||I>>0!==I)&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof I!="number"||!(Math.floor(I)===I&&Math.abs(I)<=9007199254740992))&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof I!="number"&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a number`);break;case"ID":typeof I=="string"||I?.length>0&&I.every?.(M=>typeof M=="string")||(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a string, or an array of strings`);break;case"String":typeof I!="string"&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a string`);break;case"Boolean":typeof I!="boolean"&&(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a boolean`);break;case"Date":if(!(I instanceof Date)){if(typeof I=="string"||typeof I=="number")return new Date(I);(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a Date`)}break;case"BigInt":if(typeof I!="bigint"){if(typeof I=="string"||typeof I=="number")return BigInt(I);(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a bigint`)}break;case"Bytes":if(!(I instanceof Uint8Array)){if(typeof I=="string")return Buffer.from(I);(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(I instanceof bs)){if(typeof I=="string"&&(I=Buffer.from(I)),I instanceof Buffer)return createBlob(I,{type:"text/plain"});(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be a Blob`)}break;case"array":if(Array.isArray(I)){if(N.elements)for(let M=0,q=I.length;M<q;M++){let C=I[M],B=A(C,N.elements,P+"[*]");B&&(I[M]=B)}}else(T||(T=[])).push(`Value ${vs(I)} in property ${P} must be an Array`);break}N.nullable===!1&&I==null&&(T||(T=[])).push(`Property ${P} is required (and not does not allow null values)`)},"validateValue");for(let I=0,N=S.length;I<N;I++){let P=S[I];if(P.relationship||P.computed){Object.hasOwn(_,P.name)&&(T||(T=[])).push(`Computed property ${P.name} may not be directly assigned a value`);continue}if(!y||P.name in _){let M=A(_[P.name],P,P.name);M!==void 0&&(_[P.name]=M)}}if(f)for(let I in _)S.find(N=>N.name===I)||(T||(T=[])).push(`Property ${I} is not allowed`);if(T)throw new lt.ClientError(T.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return O?!!this.#i:void 0}static async addAttributes(_){let y=S.slice(0);for(let T of _){if(!T.name)throw new lt.ClientError("Attribute name is required");if(T.name.match(/[`/]/))throw new lt.ClientError("Attribute names cannot include backticks or forward slashes");yae(T.name),y.push(T)}return Xe({table:s,database:c,schemaDefined:u,attributes:y}),Oe.indexingOperation}static async removeAttributes(_){let y=S.filter(T=>!_.includes(T.name));return Xe({table:s,database:c,schemaDefined:u,attributes:y}),Oe.indexingOperation}static getSize(){let _=i.getStats();return(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getAuditSize(){let _=l?.getStats();return _&&(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getStorageStats(){let _=i.env.path,y=oN.default.statfsSync?.(_)??{};return{available:y.bavail*y.bsize,free:y.bfree*y.bsize,size:y.blocks*y.bsize}}static async getRecordCount(_){let y=i.getStats().entryCount,T=1e3/2,A=performance.now(),I=Math.floor(y/2),N=_?.exactCount,P=0,M=0,q;for(let{value:C}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(C!=null&&P++,M++,await za(),!N&&M<I&&performance.now()-A>T){q=M;break}if(q){let C=P;P=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:q,snapshot:!1}))re!=null&&P++,await za();let B=q*2,G=(P+C)/B,te=Math.pow((P-C+1)/q/2,2)+G*(1-G)/B,X=Math.max(Math.sqrt(te)*y,1),$=Math.round(G*y),Le=Math.max($-1.96*X,P+C),ae=Math.min($+1.96*X,y),ie=Math.pow(10,Math.round(Math.log10(X)));return ie>$&&(ie=ie/10),P=Math.round($/ie)*ie,{recordCount:P,estimatedRange:[Math.round(Le),Math.round(ae)]}}return{recordCount:P}}static updatedAttributes(){Zt=this.propertyResolvers={$id:o((_,y,T)=>({value:T.key}),"$id"),$updatedtime:o((_,y,T)=>T.version,"$updatedtime"),$updatedTime:o((_,y,T)=>T.version,"$updatedTime"),$expiresAt:o((_,y,T)=>T.expiresAt,"$expiresAt"),$record:o((_,y,T)=>T?{value:_}:_,"$record"),$distance:o((_,y,T)=>T&&(T.distance??y?.vectorDistances?.get(T)),"$distance")};for(let _ of this.attributes){_.isPrimaryKey&&(x=_),_.resolve=null;let y=_.relationship,T=_.computed;if(y)if(_.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),T&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),$f=!0,y.to)_.elements?.definition?(Zt[_.name]=_.resolve=(A,I,N,P)=>{let M=A[y.from?y.from:t],q=_.elements.definition.tableClass;return P?Mu({attribute:y.to,value:M},br(I).getReadTxn(),!1,q,!1).map(C=>C&&C.key!==void 0?C:q.primaryStore.getEntry(C,{transaction:br(I).getReadTxn()})).asArray:q.search([{attribute:y.to,value:M}],I).asArray},_.set=()=>{},_.resolve.definition=_.elements.definition,_.resolve.to=y.to,y.from&&(_.resolve.from=y.from)):console.error(`The one-to-many/many-to-many relationship property "${_.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(y.from){let A=_.definition||_.elements?.definition;A?(Zt[_.name]=_.resolve=(I,N,P,M)=>{let q=I[y.from];if(q===void 0)return;if(_.elements){let B,G=q?.map(te=>{let X=A.tableClass.primaryStore[M?"getEntry":"get"](te,{transaction:br(N).getReadTxn()});return X?.then&&(B=!0),Oe.loadAsInstance===!1&&Object.freeze(M?X?.value:X),X});return y.filterMissing?B?Promise.all(G).then(te=>te.filter(Pq)):G.filter(Pq):B?Promise.all(G):G}let C=A.tableClass.primaryStore[M?"getEntry":"get"](q,{transaction:br(N).getReadTxn()});return Oe.loadAsInstance===!1&&Object.freeze(M?C?.value:C),C},_.set=(I,N)=>{if(Array.isArray(N)){let P=N.map(M=>M.getId?.()||M[A.tableClass.primaryKey]);I[y.from]=P}else{let P=N.getId?.()||N[A.tableClass.primaryKey];I[y.from]=P}},_.resolve.definition=_.definition||_.elements?.definition,_.resolve.from=y.from):console.error(`The relationship property "${_.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${_.name}" in table "${s}" must use either "from" or "to" arguments`);else if(T)typeof T.from=="function"&&this.setComputedAttribute(_.name,T.from),Zt[_.name]=_.resolve=(A,I,N)=>{let P=typeof T.from=="string"?A[T.from]:A,M=this.userResolvers[_.name];if(M)return M(P,I,N);Ue.default.warn(`Computed attribute "${_.name}" does not have a function assigned to it. Please use setComputedAttribute('${_.name}', resolver) to assign a resolver function.`),this.userResolvers[_.name]=()=>{}},_.resolve.directReturn=!0;else if(r[_.name]?.customIndex?.propertyResolver){let A=r[_.name].customIndex;Zt[_.name]=(I,N,P)=>{let M=I[_.name];return A.propertyResolver(M,N,P)},Zt[_.name].directReturn=!0}}ip(this,this),ip(Yf,this,!0);for(let _ of S){let y=_.name;_.resolve&&Object.defineProperty(i.encoder.structPrototype,y,{get(){return _.resolve(this,xu.getStore())},set(T){return _.set(this,T)},configurable:!0})}}static setComputedAttribute(_,y){let T=Bi(S,_);if(!T){console.error(`The attribute "${_}" does not exist in the table "${s}"`);return}if(!T.computed){console.error(`The attribute "${_}" is not defined as computed in the table "${s}"`);return}this.userResolvers[_]=y}static async deleteHistory(_=0,y=!1){let T;for(let{key:A,value:I}of l.getRange({start:0,end:_}))await za(),Mt(I).tableId===n&&(T=F_(l,A,I));if(y)for(let A of i.getRange({start:0,versions:!0})){let{key:I,value:N,localTime:P}=A;await za(),N===null&&P<_&&(T=rl(i,A))}await T}static async*getHistory(_=0,y=1/0){for(let{key:T,value:A}of l.getRange({start:_||1,end:y})){await za();let I=Mt(A);I.tableId===n&&(yield{id:I.recordId,localTime:T,version:I.version,type:I.type,value:I.getValue(i,!0,T),user:I.user,operation:I.originatingOperation})}}static async getHistoryOfRecord(_){let y=[];if(_==null)throw new Error("An id is required");let T=i.getEntry(_);if(!T)return y;let A=T.localTime;if(!A)throw new Error("The entry does not have a local audit time");let I=0;do{await za();let N=l.get(A);if(N){let P=Mt(N);y.push({id:P.recordId,localTime:A,version:P.version,type:P.type,value:P.getValue(i,!0,A),user:P.user}),A=P.previousLocalTime}else break}while(I<1e3&&A);return y.reverse()}static cleanup(){W?.remove()}}let WE=zg(async(K,_,y)=>{for(let T of Oe.sources)if(T.get&&(!T.get.reliesOnPrototype||T.prototype.get)){if(T.available?.(y)===!1)continue;_.source=T;let A=await T.get(K,_);if(A)return A}},()=>{throw new lt.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});Oe.updatedAttributes();let Wf=Oe.prototype;return h&&Oe.setTTLExpiration(h/1e3),Q&&zE(),Oe;function go(K,_,y){let T;for(let A in r){let I=r[A],N=I.isIndexing,P=Zt[A],M=y&&(P?P(y):y[A]),q=_&&(P?P(_):_[A]);if(M===q&&!N)continue;if(I.customIndex){I.customIndex.index(K,M,q);continue}T=!0;let C=I.indexNulls,B=(0,Ip.getIndexedValues)(M,C),G=(0,Ip.getIndexedValues)(q,C);if(G?.length>0){let te=new Set(G);if(B=B?B.filter(X=>{if(te.has(X))te.delete(X);else return!0}):[],G=Array.from(te),(G.length>0||B.length>0)&&Aq){let X=G.concat(B).map($=>({key:$,value:K}));I.prefetch(X,Cq)}for(let X=0,$=G.length;X<$;X++)I.remove(G[X],K)}else B?.length>0&&Aq&&I.prefetch(B.map(te=>({key:te,value:K})),Cq);if(B)for(let te=0,X=B.length;te<X;te++)I.put(B[te],K)}return T}o(go,"updateIndices");function Mr(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>wq)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,wl.writeKey)(K,Cae,0)>wq)throw new Error("Primary key size is too large: "+K.length);return!0}o(Mr,"checkValidId");function Rr(K){return typeof K=="object"&&K?K.id:K}o(Rr,"requestTargetToId");function zf(K){return typeof K=="object"&&K&&K.isCollection}o(zf,"isSearchTarget");function ub(K){}o(ub,"isRequestTarget");function xc(K,_,y,T,A){if(Oe.getResidencyById&&y.ensureLoaded&&_?.replicateFrom!==!1){let N=kc(Oe.getResidencyById(K));if(N&&!N.includes(server.hostname)&&L)return L({key:K,residency:N}).then(A)}let I=o(()=>{if(_?.transaction?.stale&&(_.transaction.stale=!1),y.transaction?.isDone)return A(null,K);let N=i.getEntry(K,y);return(c!=="system"||s==="hdb_analytics")&&(Mq.default.trace?.("Recording db-read action for",`${c}.${s}`),qe(N?.size??1,"db-read",s,null)),_?._freezeRecords&&Object.freeze(N?.value),N?.residencyId&&N.metadataFlags&Ln&&L&&y.ensureLoaded&&_?.replicateFrom!==!1?L(N).then(P=>A(P,K),P=>(Ue.default.error?.("Error loading remote record",K,N,y,P),A(null,K))):(N&&_&&(N?.version>(_.lastModified||0)&&(_.lastModified=N.version),N?.localTime&&!_.lastRefreshed&&(_.lastRefreshed=N.localTime)),A(N,K))},"whenPrefetched");return T?I():ee>0?(ee--,I()):new Promise((N,P)=>{ee===0?(ee--,i.prefetch([K],()=>{M(),q()})):(fe.push(K),ue.push(q),fe.length>lb&&(ee--,M()));function M(){if(fe.length>0){let C=ue;i.prefetch(fe,()=>{ee===-1?M():ee++;for(let B of C)B()}),fe=[],ue=[],Re>2&&Re--}else ee=Re,Re<YE&&Re++}o(M,"prefetch");function q(){try{N(I())}catch(C){P(C)}}o(q,"load")})}o(xc,"loadLocalRecord");function Vr(K,_){let y=_?.checkPermission;if(typeof y!="object"){if(!K?.role)return;y=K.role.permission}if(y.super_user)return Oae;let T=y[c],A,I=T?.tables;if(I)return I[s];if(c==="data"&&(A=y[s])&&!A.tables)return A}o(Vr,"getTablePermissions");function Ra(K,_,y,T){if(O){let A=!1;if(y.noCache?A=!0:(_?(!_.value||_.metadataFlags&(Ln|Ma)||_.expiresAt!=null&&_.expiresAt<Date.now())&&(A=!0):A=!0,zr(!A,"cache-hit",s)),A){let I=hu(K,_,y).then(N=>(N?.value&&N?.value.getRecord?.()&&Ue.default.error?.("Can not assign a record that is already a resource"),y&&(N?.version>(y.lastModified||0)&&(y.lastModified=N.version),y.lastRefreshed=Date.now()),N));if(y?.onlyIfCached||_?.value&&T?.allowStaleWhileRevalidate?.(_,K)){if(I.catch(N=>Ue.default.warn?.(N)),y?.onlyIfCached&&!T.doesExist())throw new lt.ServerError("Entry is not cached",504);return}else return I}}else if(_?.value&&_.expiresAt!=null&&_.expiresAt<Date.now())return Oe.evict(_.key,_.value,_.version),_.value=null,{then(A){return A(_)}}}o(Ra,"ensureLoadedFromSource");function br(K){let _=K?.transaction;if(_){if(!_.lmdbDb)return _.lmdbDb=i,_;do{if(_.lmdbDb?.path===i.path)return _;let y=_.next;if(!y)return _=_.next=new yo,_.lmdbDb=i,_;_=y}while(!0)}else return new h_}o(br,"txnForContext");function pu(K,_,y){if(!K)return;let T=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof _=="object"){let I=Zt,N=T;for(let P=0,M=_.length;P<M;P++){let q=_[P],C=I?.[q];N=C&&N?C(N,y,K):N?.[q],K=null,I=C?.definition?.tableClass?.propertyResolvers}return N}let A=Zt[_];return A?A(T,y,K):T[_]}o(pu,"getAttributeValue");function jf(K,_,y,T,A){let I=A?.length,N={transaction:T,lazy:I>0||typeof _=="string"||_?.length<4,alwaysPrefetch:!0},P;function M(q,C){let B=q?.value;if(!B)return ja.SKIP;for(let G=0;G<I;G++)if(!P?.includes(G)&&!A[G](B,q))return ja.SKIP;return C!==void 0&&(q.key=C),q}if(o(M,"processEntry"),I>0||!K.hasEntries){let q=K.map(C=>{if(P=null,typeof C=="object"&&C?.key!==void 0)return I>0?M(C):C;if(C==null)return ja.SKIP;for(let B=0;B<I;B++){let te=A[B].idFilter;if(te){if(!te(C))return ja.SKIP;P||(P=[]),P.push(B)}}return xc(C,y,N,!1,M)});return Array.isArray(K)&&(q=q.filter(C=>C!==ja.SKIP)),q.hasEntries=!0,q}return K}o(jf,"transformToEntries");function ba(K,_,y=server.replication?.getThisNodeId(l)){if(K<=_?.version){if(_?.version===K&&y!==void 0){let T=server.replication?.exportIdMapping(l),A=_.localTime,I=A&&l.get(A);if(I){let N,P,M=Mt(I);for(let q in T)T[q]===y&&(N=q),T[q]===M.nodeId&&(P=q);if(N>P)return 1;if(N===P)return 0}}return-1}return 1}o(ba,"precedesExistingVersion");async function hu(K,_,y){let T=_?.metadataFlags,A=_?.version,I,N;if(!i.attemptLock(K,A,()=>{clearTimeout(N);let C=i.getEntry(K);!C||!C.value||C.metadataFlags&(Ln|Ma)?I(hu(K,i.getEntry(K),y)):I(C)}))return new Promise(C=>{I=C,N=setTimeout(()=>{i.unlock(K,A)},wae)});let P=_?.value,M={requestContext:y,replacingRecord:P,replacingEntry:_,replacingVersion:A,noCacheStore:!1,source:null,resourceCache:y?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},q=y?.responseHeaders;return new Promise((C,B)=>{let G;Ms(Tt(M,async te=>{let X=performance.now(),$,Le,ae;try{$=await WE(K,M,_),ae=T&Ln;let re=M.lastModified||ae&&A;Le=ae||re>A||!P,re||(re=(0,Ip.getNextMonotonicTime)());let ne=performance.now()-X;if(qe(ne,"cache-resolution",s,null,"success"),q&&bp(q,"Server-Timing",`cache-resolve;dur=${ne.toFixed(2)}`,!0),te.timestamp=re,h&&M.expiresAt==null&&(M.expiresAt=Date.now()+h),$){if(typeof $!="object")throw new Error("Only objects can be cached and stored in tables");if($.status>0&&$.headers)if($.status>=300)if($.status===304)$=P,re=A;else throw new lt.ServerError($.body||"Error from source",$.status);else $=$.body;typeof $.toJSON=="function"&&($=$.toJSON()),t&&$[t]!==K&&($[t]=K)}G=!0,C({key:K,version:re,value:$})}catch(re){re.message+=` while resolving record ${K} for ${s}`,P&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!y?.mustRevalidate||y?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(C({key:K,version:A,value:P}),Ue.default.trace?.(re.message,"(returned stale record)")):B(re);let ne=performance.now()-X;qe(ne,"cache-resolution",s,null,"fail"),q&&bp(q,"Server-Timing",`cache-resolve;dur=${ne.toFixed(2)}`,!0),M.transaction.abort();return}if(y?.noCacheStore||M.noCacheStore){M.transaction.abort();return}br(M).addWrite({key:K,store:i,entry:_,nodeName:"source",before:Hc($),commit:o((re,ne)=>{if(ne?.version!==A)return;let _e=go(K,P,$);if($){$e.put?.(M,K,$),ne&&(y.previousResidency=Oe.getResidencyRecord(ne.residencyId));let me,he=!1,Ve,we=kc(Oe.getResidency($,y));if(we){if(!we.includes(server.hostname))if(me=$,he=!0,Oe.getResidencyById)$=void 0;else{$=null;for(let Ze in r)$||($={}),$[Ze]=me[Ze]}Ve=So(we)}Ue.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),R(K,$,ne,re,he?Ln:0,g&&(Le||he)||null,{user:M?.user,expiresAt:M.expiresAt,residencyId:Ve,tableToTrack:s},"put",!!ae,me)}else ne&&($e.delete?.(M,K),Ue.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),g||b?R(K,null,ne,re,0,g&&Le||null,{user:M?.user,tableToTrack:s},"delete",!!ae):rl(i,ne,A))},"commit")})}),()=>{i.unlock(K,A)},te=>{i.unlock(K,A),G&&Ue.default.error?.("Error committing cache update",te)})})}o(hu,"getFromSource");function Bc(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new lt.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new lt.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(Bc,"checkContextPermissions");function Fc(K){let _=!1;if(K&&(K-yr>1&&(_=!0),yr=K),!(Fe===Xt&&!_)&&(Xt=Fe,(0,Al.getWorkerIndex)()===(0,Al.getWorkerCount)()-1))return Ht&&clearTimeout(Ht),Fe?new Promise(y=>{let T=new Date;T.setMonth(0),T.setDate(1),T.setHours(0),T.setMinutes(0),T.setSeconds(0);let A=Fe/(1+yr),I=_?Date.now():Math.ceil((Date.now()-T.getTime())/A)*A+T.getTime(),N=o(P=>{Ue.default.trace?.(`Scheduled next cleanup scan at ${new Date(P)}`),Ht=setTimeout(()=>j=j.then(async()=>{if(N(Math.max(P+Fe,Date.now())),i.rootStore.status!=="open"){clearTimeout(Ht);return}let M=50,q=new Array(M),C=0,B=Math.pow(yr,8)*(Il.get(U.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),G=E/Math.pow(Math.max(yr,1),4);Ue.default.debug?.(`Starting cleanup scan for ${s}, evict threshold ${B}, adjusted eviction ${G}ms`);function te(X,$,Le,ae){let ie=X+G-Date.now();if(ie<0)return!0;if(yr){let re=i.lastSize;return Le&Pn&&bu(ae,ne=>{ne.size&&(re+=ne.size)}),Ue.default.trace?.(`shouldEvict adjusted ${ie} ${re}, ${ie*(X-$)/re} < ${B}`),ie*(X-$)/re<B}return!1}o(te,"shouldEvict");try{let X=0;for(let $ of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:Le,value:ae,version:ie,expiresAt:re,metadataFlags:ne}=$,_e;ae===null&&!g&&ie+Iae<Date.now()?_e=rl(i,$,ie):re!=null&&te(re,ie,ne,ae)&&(_e=Oe.evict(Le,ae,ie),X++),_e&&(await q[C],q[C]=_e.catch(me=>{Ue.default.error?.("Cleanup error",me)}),++C>=M&&(C=0)),await za()}Ue.default.debug?.(`Finished cleanup scan for ${s}, evicted ${X} entries`)}catch(X){Ue.default.warn?.(`Error in cleanup scan for ${s}:`,X)}y(void 0),yr=0}),Math.min(P-Date.now(),2147483647)).unref()},"startNextTimer");N(I)}):void 0}o(Fc,"scheduleCleanup");function Eu(){W=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}o(Eu,"addDeleteRemoval");function zE(){(0,Al.getWorkerIndex)()===0&&setInterval(async()=>{if(!Uc){Uc=!0;try{let K=Q.name,_=r[K];if(!_)throw new Error(`expiresAt attribute ${Q} must be indexed`);for(let y of _.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let T of _.getValues(y)){let A=i.getEntry(T);A?.value?A.value[K]<Date.now()&&Oe.evict(T,A.value,A.version):i.ifVersion(T,A?.version,()=>_.remove(y,T))}await za()}}catch(K){Ue.default.error?.("Error in evicting old records",K)}finally{Uc=!1}}},Aae).unref()}o(zE,"runRecordExpirationEviction");function kc(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let _=server.shards?.get?.(K);if(_)return Ue.default.trace?.(`Shard ${K} mapped to ${_.map(y=>y.name).join(", ")}`),_.map(y=>y.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}o(kc,"residencyFromFunction");function So(K){if(K){let _=K.join(","),y=d.get([Symbol.for("residency_by_set"),_]);return y||(d.put([Symbol.for("residency_by_set"),_],y=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),y],K),y)}}o(So,"getResidencyId");function Hc(K,_){let y=tA(K,i.rootStore);if(y){let T=_;return T?async()=>{await T(),await y}:()=>y}return _}o(Hc,"preCommitBlobsForRecordBefore")}function iN(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 Cq(){}function Qg(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 jg(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return jg(+e);case"Float":return e==="null"?null:jg(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;Pae.test(e)||(e+="Z");let n=new Date(e);return jg(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,Jg.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function jg(e){if(isNaN(e))throw new SyntaxError;return e}function Oq(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 Ms(e,t,r){return e?.then?e.then(t,r):t(e)}function Pq(e){return e!=null}function vs(e){try{return JSON.stringify(e)}catch{return e}}function Lae(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var ja,Ip,Lq,Dq,Il,lt,wp,Np,Ue,wl,Al,Jg,oN,Mq,Tae,yae,Rae,bae,Aae,Iae,Aq,wae,Iq,Nae,Ln,Ma,Cae,wq,Nq,Oae,rUe,Pae,za,rg=oe(()=>{k();ja=require("lmdb"),Ip=w(Cn()),Lq=w(require("lodash")),Dq=w(dm());va();mm();Il=w(le());VA();lt=w(Ee()),wp=w(xo()),Np=w(Zn());Ne();tg();Ue=w(zn());XI();Na();wl=require("ordered-binary"),Al=w(Je());Ro();Jg=w(ce());Zc();jn();g_();Ap();oN=w(require("node:fs"));As();v_();Mq=w(z());sN();({sortBy:Tae}=Lq.default),{validateAttribute:yae}=Dq.default,Rae=new Uint8Array(9);Rae[8]=192;bae=1/0,Aae=6e4,Iae=864e5;Il.initSync();Aq=Il.get(U.STORAGE_PREFETCHWRITES),wae=1e4,Iq=1,Nae=2,Ln=1,Ma=8,Cae=Buffer.allocUnsafeSlow(8192),wq=1978,Nq=100,Oae={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},rUe=(0,Jg.convertToMS)(Il.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(Xg,"makeTable");o(iN,"attributesAsObject");o(Cq,"noop");Pae=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(Qg,"coerceType");o(jg,"rejectNaN");o(Oq,"isDescendantId");za=o(()=>new Promise(setImmediate),"rest");o(Ms,"when");o(Pq,"exists");o(vs,"stringify");o(Lae,"hasOtherProcesses")});function Zg(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,a=t[s]||0,c=i-a;r+=c*c}return r}function eS(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let a=0;a<i;a++){let c=e[a]||0,l=t[a]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var Uq=oe(()=>{o(Zg,"euclideanDistance");o(eS,"cosineDistance")});var xq,Bq,ud,ji,ld,Dae,Mae,tS,Fq=oe(()=>{Uq();xq=require("msgpackr"),Bq=w(zn()),ud=w(Ee()),ji=(0,Bq.loggerWithTag)("HNSW"),ld=Symbol.for("entryPoint"),Dae=Symbol.for("key"),Mae=10,tS=class{static{o(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=xq.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?Zg:eS,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"?[Dae,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let a=new Map,c,l=this.indexStore.get(ld);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let E=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:E,primaryKey:t};for(let b=0;b<=E;b++)g[b]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);ji.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),Mae),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);ji.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 g=this.searchLayer(r,l,f,this.efConstruction,E);g=g.slice(0,this.M<<1),g.length===0&&E===0&&ji.info?.("should not have zero connections for",l);let b=h[E];for(let S=0;S<g.length;S++){let{id:R,distance:L,node:O}=g[S];if(R===i)continue;let x=[];if(this.optimizeRouting){let F=!1,Q=O[E],W=1+this.optimizeRouting*(1+.5*S/this.M);for(let fe=0;fe<Q.length;fe++){let{id:ue,distance:ee}=Q[fe],Re=1+this.optimizeRouting*(1+.5*fe/this.M);for(let Ie=0;Ie<b.length;Ie++){let{id:$e,distance:Fe}=b[Ie];if($e===ue){L*W>Fe+ee?F=!0:ee*Re>L+Fe&&(x.push({fromId:$e,toId:R}),x.push({fromId:R,toId:$e}));break}}if(F)break}if(F)continue}else if(S>=(E>0?this.M:this.M<<1))continue;b.push({id:R,distance:L});for(let{fromId:F,toId:Q}of x){let W=d(F);W||(W=d(F,this.indexStore.get(F)));for(let fe=0;fe<W[E].length;fe++)if(W[E][fe].id===Q){Object.isFrozen(W[E])&&(W[E]=W[E].slice()),W[E].splice(fe,1);break}}let j=c[E],H=j?.find(({id:F})=>F===R);if(H){let F=j?.indexOf(H);j.copied||(j=[...j],j.copied=!0,c[E]=j),j.splice(F,1)}else this.addConnection(R,d(R,O),i,E,L,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);ji.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));for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:g})=>g!==i),h[E].length===0&&(ji.info?.("node was left orphaned, will reindex",p),u.set(h.primaryKey,h.vector))}}function d(f,m){let p=a.get(f);return!p&&m&&(p={...m},a.set(f,p)),p}o(d,"updateNode");for(let[f,m]of a)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(ld);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,a=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((p,h)=>p.distance-h.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:p}of m[i]||[]){if(c.has(p)||p===void 0)continue;c.add(p);let h=this.indexStore.get(p);if(!h)continue;this.nodesVisitedCount++;let E=a(t,h.vector);if(E<f||u.length<s){let g={id:p,distance:E,node:h};l.push(g),u.push(g)}}u.sort((p,h)=>p.distance-h.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let a=0;switch(i){case"lt":case"le":a=r;case"sort":break;default:throw new ud.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new ud.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=eS;else if(s==="euclidean")c=Zg;else{if(s)throw new ud.ClientError("Unknown distance function");c=this.distance}if(!t)throw new ud.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new ud.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return a&&(d=d.filter(f=>f.distance<a)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let a=this.indexStore.get(i);if(!a){ji.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||ji.info?.("asymmetry detected",a[n])}n++}}addConnection(t,r,n,s,i,a){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){ji.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=a(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=a(f.id,m),m[s]=m[s].filter(({id:p})=>p!==t),s===0&&m[s].length===0&&ji.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?ji.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let a=s.shift(),c=this.indexStore.get(a);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let a=this.distance;s.type&&(a=s.distance==="euclidean"?Zg:eS);let c=a(s.target,t);return i.set(n,c),c}return t}}});var aN,kq=oe(()=>{Fq();aN={HNSW:tS}});var ft={};be(ft,{NON_REPLICATING_SYSTEM_TABLES:()=>rS,database:()=>Qu,databaseEnvs:()=>Go,databases:()=>De,dropDatabase:()=>nw,dropTableMeta:()=>kae,getDatabases:()=>at,getDefaultCompression:()=>lS,getTables:()=>Uae,onRemovedDB:()=>vp,onUpdatedTable:()=>Nl,readMetaDb:()=>Cp,resetDatabases:()=>hd,table:()=>Xe,tables:()=>En});function Mp(e,t){let r=aS.OpenDBIObject??aS.default.OpenDBIObject;return new r(e,t)}function Uae(){return oS||at(),En||{}}function at(){if(oS)return De;oS=!0,md=new Map;let e=(0,Vt.getHdbBasePath)()&&(0,Ut.join)((0,Vt.getHdbBasePath)(),Gc),t=(0,Vt.get)(U.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Vt.get)(U.STORAGE_PATH)||e&&((0,cs.existsSync)(e)?e:(0,Ut.join)((0,Vt.getHdbBasePath)(),e_)),!!e){if((0,cs.existsSync)(e))for(let r of(0,cs.readdirSync)(e,{withFileTypes:!0})){let n=(0,Ut.basename)(r.name,".mdb");r.isFile()&&(0,Ut.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Cp((0,Ut.join)(e,r.name),null,n)}if((0,cs.existsSync)((0,fd.getBaseSchemaPath)())){for(let r of(0,cs.readdirSync)((0,fd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Ut.join)((0,fd.getBaseSchemaPath)(),r.name),s=(0,Ut.join)((0,fd.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,cs.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Ut.extname)(i.name).toLowerCase()===".mdb"){let a=(0,Ut.join)(s,i.name);Cp((0,Ut.join)(n,i.name),(0,Ut.basename)(i.name,".mdb"),r.name,a,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,cs.existsSync)(s))for(let a of(0,cs.readdirSync)(s,{withFileTypes:!0}))a.isFile()&&(0,Ut.extname)(a.name).toLowerCase()===".mdb"&&Cp((0,Ut.join)(s,a.name),(0,Ut.basename)(a.name,".mdb"),r);let i=n.tables;if(i)for(let a in i){let c=i[a],l=(0,Ut.join)(c.path,(0,Ut.basename)(a+".mdb"));(0,cs.existsSync)(l)&&Cp(l,a,r,null,!0)}}for(let r in De){let n=md.get(r);if(n){let s=De[r];r.includes("delete")&&Nr.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Nr.trace(`delete table class ${i}`),delete s[i])}else if(delete De[r],r==="data"){for(let s in En)delete En[s];delete En[cS]}}if((0,Vt.get)(U.ANALYTICS_REPLICATE)===!1?rS.includes("hdb_analytics")||rS.push("hdb_analytics"):(De.system?.hdb_analytics?.enableAuditing(),De.system?.hdb_analytics_hostname?.enableAuditing()),De.system)for(let r of rS)De.system[r]&&(De.system[r].replicate=!1);return md=null,De}}function hd(){oS=!1;for(let[,e]of Go)e.needsDeletion=!0;at();for(let[e,t]of Go)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Go.delete(e);let r=De[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete De[t.databaseName],Pp.forEach(i=>i(t.databaseName));break}}return De}function Cp(e,t,r=uN,n,s){let i=new cN.default(e,!1);try{let a=Go.get(e);a?a.needsDeletion=!1:(a=(0,pd.open)(i),Go.set(e,a));let c=new Mp(!1),l=a.dbisDb||(a.dbisDb=a.openDB(nS.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,cs.existsSync)(n)&&(i.path=n,u=(0,pd.open)(i),u.isLegacy=!0):u=B_(a));let d=Vq(r),f=d[cS],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,g]=p.toString().split("/");g===""?g=h.name:g||(g=E,E=t,h.name||(h.name=g,h.indexed=!h.is_hash_attribute)),f?.add(E);let b=m.get(E);b||m.set(E,b={attributes:[]}),(g==null||h.is_hash_attribute)&&(b.primary=h),g!=null&&b.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:g}=h;if(!g){for(let ee of E)if(ee.is_hash_attribute||ee.isPrimaryKey){g=ee;break}if(!g){Nr.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let b=d[p],S={},R=[],L,O,x=typeof g.audit=="boolean"?g.audit:(0,Vt.get)(U.LOGGING_AUDITLOG),j=g.trackDeletes,H=g.expiration,F=g.eviction,Q=g.sealed,W=g.splitSegments,fe=g.replicate;if(b)S=b.indices,R=b.attributes,b.schemaVersion++;else{L=g.tableId,L?L>=(l.get(dd)||0)&&(l.putSync(dd,L+1),Nr.info(`Updating next table id (it was out of sync) to ${L+1} for ${p}`)):(g.tableId=L=l.get(dd),L||(L=1),Nr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(dd,L+1),l.putSync(g.key,g));let ee=new Mp(!g.is_hash_attribute,g.is_hash_attribute);if(ee.compression=g.compression,ee.compression){let Re=(0,Vt.get)(U.STORAGE_COMPRESSION_THRESHOLD)||$q;ee.compression.threshold=Re}O=J_(a.openDB(g.key,ee),a),a.databaseName=r,O.tableId=L}let ue;for(let ee of E){ee.attribute=ee.name;try{if(!ee.is_hash_attribute&&(ee.indexed||ee.attribute&&!ee.name)){if(!S[ee.name]){let Ie=Yq(ee.key,a,ee);S[ee.name]=Ie,S[ee.name].indexNulls=ee.indexNulls}let Re=R.find(Ie=>Ie.name===ee.name);Re?R.splice(R.indexOf(Re),1,ee):R.push(ee),ue=!0}}catch(Re){Nr.error("Error trying to update attribute",ee,R,S,Re)}}for(let ee of R)if(!E.find(Ie=>Ie.name===ee.name)){if(ee.is_hash_attribute){Nr.error("Unable to remove existing primary key attribute",ee);continue}ee.indexed&&(R.splice(R.indexOf(ee),1),ue=!0)}if(b)ue&&(b.schemaVersion++,b.updatedAttributes());else{b=Kq(d,p,Xg({primaryStore:O,auditStore:u,audit:x,sealed:Q,splitSegments:W,replicate:fe,expirationMS:H&&H*1e3,evictionMS:F&&F*1e3,trackDeletes:j,tableName:p,tableId:L,primaryKey:g.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:g.schemaDefined,dbisDB:l})),b.schemaVersion=1;for(let ee of Op)ee(b)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function Vq(e){let t=De[e];if(t||(e==="data"?t=De[e]=En:e==="system"?Object.defineProperty(De,"system",{value:t=Object.create(null),configurable:!0}):t=De[e]=Object.create(null)),md&&!md.has(e)){let r=new Set;t[cS]=r,md.set(e,r)}return t}function Kq(e,t,r){return e[t]=r,r}function Qu({database:e,table:t}){e||(e=uN),at();let r=Vq(e),n=(0,Ut.join)((0,Vt.getHdbBasePath)(),Gc),s=(0,Vt.get)(U.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,Vt.get)(U.STORAGE_PATH)||((0,cs.existsSync)(n)?n:(0,Ut.join)((0,Vt.getHdbBasePath)(),e_));let a=(0,Ut.join)(n,(i?t:e)+".mdb"),c=Go.get(a);if(!c||c.status==="closed"){let l=new cN.default(a,!1);c=(0,pd.open)(l),Go.set(a,c)}return c.auditStore||(c.auditStore=B_(c)),c}async function nw(e){if(!De[e])throw new Error("Schema does not exist");let t=De[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Go.delete(r.path),r.status==="open"&&(await r.close(),await Lp.remove(r.path));if(r||(r=Qu({database:e,table:null}),r.status==="open"&&(await r.close(),await Lp.remove(r.path))),e==="data"){for(let n in En)delete En[n];delete En[cS]}delete De[e],Pp.forEach(n=>n(e)),await eA(r)}function Yq(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&aN[r.indexed.type]?.useObjectStore,s=new Mp(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=aN[r.indexed.type];a?i.customIndex=new a(i,r.indexed):Nr.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function Xe(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:a,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=uN);let h=Qu({database:r,table:t}),E=De[r];Nr.trace(`Defining ${t} in ${r}`);let g=E?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let b,S,R;m==null&&(m=!0);let L=new Mp(!1);for(let W of a)W.attribute&&!W.name?(W.name=W.attribute,W.indexed=!0):W.attribute=W.name,W.expiresAt&&(W.indexed=!0);let O,x;if(g){if(b=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...a)}else{let W=h.auditStore;S=a.find(Re=>Re.isPrimaryKey)||{},b=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=lS(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,Vt.get)(U.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),u??=!1,S.splitSegments=u,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),p&&(S.origins?S.origins.includes(p)||S.origins.push(p):S.origins=[p]),Nr.trace(`${t} table loading, opening primary store`);let fe=new Mp(!1,!0);fe.compression=S.compression;let ue=t+"/";if(R=h.dbisDb=h.openDB(nS.INTERNAL_DBIS_NAME,L),Q(),R.get(ue))return x&&x(),hd(),Xe(e);let ee=J_(h.openDB(ue,fe),h);h.databaseName=r,ee.tableId=R.get(dd),Nr.trace(`Assigning new table id ${ee.tableId} for ${t}`),ee.tableId||(ee.tableId=1),R.put(dd,ee.tableId+1),S.tableId=ee.tableId,g=Kq(E,t,Xg({primaryStore:ee,auditStore:W,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:b,tableName:t,tableId:ee.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:R})),g.schemaVersion=1,O=!0,R.put(ue,S)}let j=g.indices;R=R||(h.dbisDb=h.openDB(nS.INTERNAL_DBIS_NAME,L)),g.dbisDB=R;let H=[];for(let{key:W,value:fe}of R.getRange({start:!0})){let[ue,ee]=W.toString().split("/");if(ee===""&&(ee=fe.name),ee){if(ue!==t)continue}else continue;let Re=a.find($e=>$e.name===ee),Ie=!Re?.indexed&&fe.indexed&&!fe.isPrimaryKey;if((!Re||Ie)&&(Q(),O=!0,Re||R.remove(W),Ie)){let $e=g.indices[ue];$e&&H.push($e)}}let F=[];try{for(let W of a||[]){if((W.relationship||W.computed)&&(O=!0,W.relationship))continue;let fe=t+"/"+(W.name||"");Object.defineProperty(W,"key",{value:fe,configurable:!0});let ue=R.get(fe);if(W.isPrimaryKey){if(ue=ue||R.get(fe=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+ue.expiration||void 0)||(+s||void 0)!==(+ue.eviction||void 0)||W.type!==ue.type){let Re={...ue};typeof c=="boolean"&&(c&&g.enableAuditing(c),Re.audit=c),n&&(Re.expiration=+n),s&&(Re.eviction=+s),l!==void 0&&(Re.sealed=l),d!==void 0&&(Re.replicate=d),W.type&&(Re.type=W.type),O=!0,Q(),R.put(fe,Re)}continue}ue?.attribute&&!ue.name&&(ue.indexed=!0);let ee=!ue||ue.type!==W.type||JSON.stringify(ue.indexed)!==JSON.stringify(W.indexed)||ue.nullable!==W.nullable||ue.version!==W.version||JSON.stringify(ue.properties)!==JSON.stringify(W.properties)||JSON.stringify(ue.elements)!==JSON.stringify(W.elements);if(W.indexed){let Re=Yq(fe,h,W);(ee||ue.indexingPID&&ue.indexingPID!==process.pid||ue.restartNumber<Dp.workerData?.restartNumber)&&(O=!0,Q(),ue=R.get(fe),(ee||ue.indexingPID&&ue.indexingPID!==process.pid||ue.restartNumber<Dp.workerData?.restartNumber)&&(O=!0,W.indexNulls===void 0&&(W.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(W.lastIndexedKey=ue?.lastIndexedKey??void 0,W.indexingPID=process.pid,Re.isIndexing=!0,Object.defineProperty(W,"dbi",{value:Re}),F.push(W))),R.put(fe,W)),ue?.indexNulls&&W.indexNulls===void 0&&(W.indexNulls=!0),Re.indexNulls=W.indexNulls,j[W.name]=Re}else ee&&(O=!0,Q(),R.put(fe,W))}}finally{x&&x()}if(O&&(g.schemaVersion++,g.updatedAttributes()),Nr.trace(`${t} table loading, running index`),F.length>0||H.length>0?g.indexingOperation=Fae(g,F,H):O&&sS.signalSchemaChange(new iS.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=p,O)for(let W of Op)W(g,p!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Nr.trace(`${t} table loaded`),g;function Q(){x||h.transactionSync(()=>({then(W){x=W}}))}o(Q,"startTxn")}async function Fae(e,t,r){try{Nr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await sS.signalSchemaChange(new iS.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,a={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,pd.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:p}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,p,()=>{for(let h=0;h<l;h++){let E=t[h],g=E.name,b=E.dbi;try{let S=E.resolve,R=m&&(S?S(m):m[g]);if(b.customIndex){b.customIndex.index(f,R);continue}let L=(0,Hq.getIndexedValues)(R);if(L)for(let O=0,x=L.length;O<x;O++)b.put(L[O],f)}catch(S){a[g]||(a[g]=!0,Nr.error(`Error indexing attribute ${g}`,S))}}}),s.then(()=>d--,h=>{d--,Nr.error(h)}),Dp.workerData&&Dp.workerData.restartNumber!==Gq.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>xae?await s:d>Bae&&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 sS.signalSchemaChange(new iS.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Nr.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Nr.error("Error in indexing",n)}}function kae({table:e,database:t}){let r=Qu({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 Nl(e){return Op.push(e),{remove(){let t=Op.indexOf(e);t>-1&&Op.splice(t,1)}}}function vp(e){return Pp.push(e),{remove(){let t=Pp.indexOf(e);t>-1&&Pp.splice(t,1)}}}function lS(){let e=(0,Vt.get)(U.STORAGE_COMPRESSION),t=(0,Vt.get)(U.STORAGE_COMPRESSION_DICTIONARY),r=(0,Vt.get)(U.STORAGE_COMPRESSION_THRESHOLD)||$q,n={startingOffset:32};return t&&(n.dictionary=Lp.readFileSync(t)),r&&(n.threshold=r),e&&n}var Vt,nS,pd,Ut,cs,fd,cN,Lp,lN,Hq,sS,iS,Dp,qq,Gq,aS,vae,Nr,uN,cS,$q,rS,En,De,dd,Op,Pp,oS,Go,md,xae,Bae,Ne=oe(()=>{Vt=w(le()),nS=w(Gt()),pd=require("lmdb"),Ut=require("path"),cs=require("fs"),fd=w(St());rg();cN=w($m());k();Lp=w(require("fs-extra")),lN=w(ri()),Hq=w(Cn()),sS=w(xo()),iS=w(Zn()),Dp=require("worker_threads"),qq=w(z()),Gq=w(Je());Ro();Zc();As();kq();aS=w(Gm()),{forComponent:vae}=qq.default;o(Mp,"OpenDBIObject");Nr=vae("storage"),uN="data",cS=Symbol("defined-tables"),$q=((0,Vt.get)(U.STORAGE_PAGESIZE)||4096)-60;(0,Vt.initSync)();rS=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"],En=Object.create(null),De=Object.create(null);(0,lN._assignPackageExport)("databases",De);(0,lN._assignPackageExport)("tables",En);dd=Symbol.for("next-table-id"),Op=[],Pp=[],Go=new Map;o(Uae,"getTables");o(at,"getDatabases");o(hd,"resetDatabases");o(Cp,"readMetaDb");o(Vq,"ensureDB");o(Kq,"setTable");o(Qu,"database");o(nw,"dropDatabase");o(Yq,"openIndex");o(Xe,"table");xae=1e3,Bae=10;o(Fae,"runIndexing");o(kae,"dropTableMeta");o(Nl,"onUpdatedTable");o(vp,"onRemovedDB");o(lS,"getDefaultCompression")});var mN={};be(mN,{loadGQLSchema:()=>Gae,start:()=>fN,startOnMainThread:()=>qae});function fN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:a,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=a(new c(r.toString(),s)),m=new Map,p=[],h;for(let b of f.definitions)switch(b.kind){case l.OBJECT_TYPE_DEFINITION:let x=function(H){if(H.kind==="NonNullType"){let W=x(H.type);return W.nullable=!1,W}if(H.kind==="ListType")return{type:"array",elements:x(H.type)};let Q={type:H.name?.value};return Object.defineProperty(Q,"location",{value:H.loc.startToken}),Q};o(x,"getProperty");let S=b.name.value,R=[],L={table:null,database:null,properties:R};m.set(S,L),i.allTypes.set(S,L);for(let H of b.directives){if(H.name.value==="table"){for(let Q of H.arguments)L[Q.name.value]=Q.value.value;L.schema&&(L.database=L.schema),L.table||(L.table=S),L.audit&&(L.audit=L.audit!=="false"),L.attributes=L.properties,p.push(L)}if(H.name.value==="sealed"&&(L.sealed=!0),H.name.value==="splitSegments"&&(L.splitSegments=!0),H.name.value==="replicate"&&(L.replicate=!0),H.name.value==="export"){L.export=!0;for(let Q of H.arguments)typeof L.export!="object"&&(L.export={}),L.export[Q.name.value]=Q.value.value}}let O=!1,j={};for(let H of b.fields){let F=x(H.type);F.name=H.name.value,R.push(F),j[F.name]=void 0;for(let Q of H.directives){let W=Q.name.value;if(W==="primaryKey")O?console.warn("Can not define two attributes as a primary key at",Q.loc):(F.isPrimaryKey=!0,O=!0);else if(W==="indexed"){let fe={};for(let ue of Q.arguments||[])fe[ue.name.value]=ue.value.value;F.indexed=fe}else if(W==="computed"){for(let fe of Q.arguments||[])if(fe.name.value==="from"){let ue=fe.value.value;F.computed={from:g(ue,fe,j)},F.version==null&&(F.version=ue)}else fe.name.value==="version"&&(F.version=fe.value.value);F.computed=F.computed||!0}else if(W==="relationship"){let fe={};for(let ue of Q.arguments)fe[ue.name.value]=ue.value.value;F.relationship=fe}else if(W==="createdTime")F.assignCreatedTime=!0;else if(W==="updatedTime")F.assignUpdatedTime=!0;else if(W==="expiresAt")F.expiresAt=!0;else if(W==="allow"){let fe=F.authorizedRoles=[];for(let ue of Q.arguments)ue.name.value==="role"&&fe.push(ue.value.value)}else server.knownGraphQLDirectives.includes(W)&&console.warn(`@${W} is an unknown directive, at`,Q.loc)}}L.type=S,S==="Query"&&(h=L)}function E(b){let S=m.get(b.type);S?(Object.defineProperty(b,"properties",{value:S.properties}),Object.defineProperty(b,"definition",{value:S})):b.type==="array"?E(b.elements):Hae.includes(b.type)||(0,zq.getWorkerIndex)()===0&&console.error(`The type ${b.type} is unknown at line ${b.location.line}, column ${b.location.column}, in ${s}`)}o(E,"connectPropertyType");for(let b of m.values())for(let S of b.properties)E(S);for(let b of p)b.tableClass=e(b),b.export&&(b.export.name===""?i.set((0,dN.dirname)(n),b.tableClass):i.set((0,dN.dirname)(n)+"/"+(b.export.name||b.type),b.tableClass,b.export));function g(b,S,R){return new Wq.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${b}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(R)}o(g,"createComputedFrom")}}var dN,Wq,zq,Hae,qae,Gae,jq=oe(()=>{dN=require("path"),Wq=require("node:vm");Ne();zq=w(Je());Ua();Hae=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);o(fN,"start");qae=fN,Gae=o(e=>fN({ensureTable:Xe}).handleFile(e,null,null,new Fu),"loadGQLSchema")});var hN={};be(hN,{start:()=>Jae});function $ae(e){if(e.kind!==xe.Kind.OPERATION_DEFINITION&&e.kind!==xe.Kind.FRAGMENT_DEFINITION)throw new qr(`Unexpected non-executable definition type ${e.kind}.`)}function Qq(e){if(typeof e!="object"||e===null)throw new Qi("Request body must be an object.");if(!("query"in e))throw new Qi("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Qi("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Qi("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Qi("Request body `operationName` field must be a string.")}function pN(e){return parseInt(e.value,10)}function Xq(e){return parseFloat(e.value)}function Zq(e,t,r){let n=r.get(e.name.value);return eG(n)?tG(n,t):{attribute:t,value:n}}function eG(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function tG(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],eG(n)?tG(n,t):{attribute:t,value:n}))}function Vae(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case xe.Kind.NULL:return{attribute:t,value:null};case xe.Kind.INT:return{attribute:t,value:pN(e.value)};case xe.Kind.FLOAT:return{attribute:t,value:Xq(e.value)};case xe.Kind.BOOLEAN:case xe.Kind.STRING:return{attribute:t,value:e.value.value};case xe.Kind.VARIABLE:return Zq(e.value,t,r);case xe.Kind.OBJECT:return rG(e.value,t,r);case xe.Kind.LIST:case xe.Kind.ENUM:default:throw new qr(`Value type, ${e.value.kind}, is not supported.`)}}function rG(e,t,r){return e.fields.flatMap(n=>Vae(n,t,r))}function Kae(e,t){switch(e.value.kind){case xe.Kind.NULL:return{attribute:e.name.value,value:null};case xe.Kind.INT:return{attribute:e.name.value,value:pN(e.value)};case xe.Kind.FLOAT:return{attribute:e.name.value,value:Xq(e.value)};case xe.Kind.BOOLEAN:case xe.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case xe.Kind.VARIABLE:return Zq(e.value,e.name.value,t);case xe.Kind.OBJECT:return rG(e.value,[e.name.value],t);case xe.Kind.LIST:case xe.Kind.ENUM:default:throw new qr(`Argument type, ${e.value.kind}, is not supported.`)}}function Yae(e,t){return e.flatMap(r=>Kae(r,t))}function uS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case xe.Kind.FIELD:return r;case xe.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new qr(`Fragment \`${n}\` not found.`);return uS(s.selectionSet,t)}case xe.Kind.INLINE_FRAGMENT:return uS(r.selectionSet,t)}})}function nG(e,t){return uS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:nG(r.selectionSet,t)}:r.name.value)}async function Wae(e,t,r,n){let s=Cs.getMatch(e.name.value,"graphql");if(s===void 0)throw new qr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,a={select:nG(e.selectionSet,r),conditions:Yae(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(a,n))c.push(l);return[e.name.value,c]}function sG(e){switch(e.kind){case xe.Kind.NULL:return null;case xe.Kind.INT:return pN(e);case xe.Kind.FLOAT:return parseFloat(e.value);case xe.Kind.STRING:case xe.Kind.BOOLEAN:return e.value;case xe.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:sG(r.value),...t}),{});case xe.Kind.LIST:case xe.Kind.ENUM:default:throw new qr(`Value type, ${e.kind}, is not supported.`)}}function zae(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=sG(n.defaultValue)),n.type.kind===xe.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new qr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function jae(e,t,r,n){if(e.operation===xe.OperationTypeNode.SUBSCRIPTION)throw new qr("Subscriptions are not supported.");if(e.operation===xe.OperationTypeNode.MUTATION)throw new qr("Mutations are not supported yet.");let s=zae(e.variableDefinitions,t),i=await Promise.all(uS(e.selectionSet,r).map(c=>Wae(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function Jq({query:e,variables:t={},operationName:r},n){let s=xe.parse(e),i=new Map,a=new Map;for(let u of s.definitions)if($ae(u),u.kind===xe.Kind.FRAGMENT_DEFINITION)a.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new qr("Unnamed operations are only allowed when there is a single operation in the document.");let d=u.name?.value??"Unnamed Query";if(i.has(d))throw new qr(`Duplicate operation definition: ${d}`);i.set(d,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new qr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new qr(`Operation \`${r}\` not found.`);let l=await jae(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Qae(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 Qq(r),Jq(r,e)}case"POST":{let r=await wo(e.headers.get("content-type"),!0)(e._nodeRequest);return Qq(r),Jq(r,e)}default:throw new Qi("Method Not Allowed",405,{Allow:"GET, POST"})}}function Jae(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Qae(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Qi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof xe.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof qr)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof Qi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof xe.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof qr)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var xe,qr,Qi,iG=oe(()=>{xe=w(require("graphql"));No();Ua();o($ae,"assertExecutableDefinitionNode");o(Qq,"assertRequestParams");o(pN,"processIntValueNode");o(Xq,"processFloatValueNode");o(Zq,"processVariableNode");o(eG,"isObject");o(tG,"transformObjectIntoQueryCondition");o(Vae,"processObjectFieldNode");o(rG,"processObjectValueNode");o(Kae,"processArgumentNode");o(Yae,"buildConditionsQuery");o(uS,"fillInFragments");o(nG,"buildSelectQuery");o(Wae,"processFieldNode");o(sG,"processConstValueNode");o(zae,"resolveVariables");o(jae,"executeOperation");o(Jq,"resolver");qr=class extends Error{static{o(this,"GraphQLQueryingError")}},Qi=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(Qae,"graphqlQueryingHandler");o(Jae,"start")});var dG=v((AUe,uG)=>{var Ed=require("validate.js"),aG=ot(),_d=(k(),D(Y)),{handleHDBError:Xae,hdbErrors:Zae}=Ee(),{HDB_ERROR_MSGS:rr,HTTP_STATUS_CODES:ece}=Zae,EN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),tce={STRUCTURE_USER:"structure_user"},oG=Object.values(_d.ROLE_TYPES_ENUM),rce="attribute_permissions",nce="attribute_name",{PERMS_CRUD_ENUM:gd}=_d,sce=[rce,...Object.values(gd)],cG=[gd.READ,gd.INSERT,gd.UPDATE],ice=[nce,...cG];function oce(e){let t=EN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,lG(e,t)}o(oce,"addRoleValidation");function ace(e){let t=EN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,lG(e,t)}o(ace,"alterRoleValidation");function cce(e){let t=EN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,aG.validateObject(e,t)}o(cce,"dropRoleValidation");var lce=["operation","role","id","permission","hdb_user","access"];function lG(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)lce.includes(n[a])||s.push(n[a]);s.length>0&&fr(rr.INVALID_ROLE_JSON_KEYS(s),r);let i=aG.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{fr(a,r)}),e.permission){let a=uce(e);a&&fr(a,r),oG.forEach(c=>{e.permission[c]&&!Ed.isBoolean(e.permission[c])&&fr(rr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(oG.indexOf(a)<0){if(a===tce.STRUCTURE_USER){let l=e.permission[a];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||fr(rr.SCHEMA_NOT_FOUND(f),r)}continue}fr(rr.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){fr(rr.SCHEMA_NOT_FOUND(a),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[a][l]){fr(rr.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{sce.includes(d)||fr(rr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(gd).forEach(d=>{Ed.isDefined(u[d])?Ed.isBoolean(u[d])||fr(rr.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):fr(rr.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){fr(rr.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){fr(rr.ATTR_PERMS_NOT_ARRAY,r,a,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[a][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let p=u.attribute_permissions[m];if(Object.keys(p).forEach(E=>{!ice.includes(E)&&E!==gd.DELETE&&fr(rr.INVALID_ATTR_PERM_KEY(E),r,a,l)}),!Ed.isDefined(p.attribute_name)){fr(rr.ATTR_PERM_MISSING_NAME,r,a,l);continue}let h=p.attribute_name;if(!d.includes(h)){fr(rr.INVALID_ATTRIBUTE_IN_PERMS(h),r,a,l);continue}cG.forEach(E=>{Ed.isDefined(p[E])?Ed.isBoolean(p[E])||fr(rr.ATTR_PERM_NOT_BOOLEAN(E,h),r,a,l):fr(rr.ATTR_PERM_MISSING(E,h),r,a,l)}),!f.read&&p.read===!0&&(f.read=!0),!f.insert&&p.insert===!0&&(f.insert=!0),!f.update&&p.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${a}.${l}`;fr(rr.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return dce(r)}o(lG,"customValidate");uG.exports={addRoleValidation:oce,alterRoleValidation:ace,dropRoleValidation:cce};function uce(e){let{operation:t,permission:r}=e;if(t===_d.OPERATIONS_ENUM.ADD_ROLE||t===_d.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 rr.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?_d.ROLE_TYPES_ENUM.SUPER_USER:_d.ROLE_TYPES_ENUM.CLUSTER_USER;return rr.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(uce,"validateNoSUPerms");function dce(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:rr.ROLE_PERMS_ERROR,...e};return Xae(new Error,n,ece.BAD_REQUEST)}else return null}o(dce,"generateRolePermResponse");function fr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}o(fr,"addPermError")});var xp=v((NUe,hG)=>{"use strict";var fG=un(),mG=fn(),fce=Ga(),gN=dG(),SN=xo(),wUe=require("uuid").v4,mce=require("util"),dS=(k(),D(Y)),pce=ce(),TN=mG.searchByValue,hce=mG.searchByHash,Ece=mce.promisify(fce.delete),_ce=ai(),gce=Yu(),{hdbErrors:Sce,handleHDBError:Cl}=Ee(),{HDB_ERROR_MSGS:pG,HTTP_STATUS_CODES:Up}=Sce,{UserEventMsg:yN}=Zn();hG.exports={addRole:Tce,alterRole:yce,dropRole:Rce,listRoles:bce};function _N(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}o(_N,"scrubRoleDetails");async function Tce(e){let t=gN.addRoleValidation(e);if(t)throw t;e=_N(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await TN(r)||[])}catch(i){throw Cl(i)}if(n&&n.length>0)throw Cl(new Error,pG.ROLE_ALREADY_EXISTS(e.role),Up.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await fG.insert(s),SN.signalUserChange(new yN(process.pid)),e=_N(e),e}o(Tce,"addRole");async function yce(e){let t=gN.alterRoleValidation(e);if(t)throw t;e=_N(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await fG.update(r)}catch(s){throw Cl(s)}if(n&&n?.message==="updated 0 of 1 records")throw Cl(new Error,"Invalid role id",Up.BAD_REQUEST,void 0,void 0,!0);return await SN.signalUserChange(new yN(process.pid)),e}o(yce,"alterRole");async function Rce(e){let t=gN.dropRoleValidation(e);if(t)throw Cl(new Error,t,Up.BAD_REQUEST,void 0,void 0,!0);let r=new gce(dS.SYSTEM_SCHEMA_NAME,dS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await hce(r));if(n.length===0)throw Cl(new Error,pG.ROLE_NOT_FOUND,Up.NOT_FOUND,void 0,void 0,!0);let s=new _ce(dS.SYSTEM_SCHEMA_NAME,dS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await TN(s)),a=!1;if(pce.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){a=!0;break}}if(a===!0)throw Cl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Up.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Ece(c),SN.signalUserChange(new yN(process.pid)),`${n[0].role} successfully deleted`}o(Rce,"dropRole");async function bce(){return TN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}o(bce,"listRoles")});var RN={};be(RN,{start:()=>gG,startOnMainThread:()=>wce});function gG({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,EG.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let a in i.permission){if(Ace.includes(a))continue;let c=i.permission[a];c.tables||(i.permission[a]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await Ice(i)}}}async function Ice(e){let t=at().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,_G.isEqual)(i,e)?void 0:(e.id=r.id,(0,fS.alterRole)(e))}return(0,fS.addRole)(e)}var fS,EG,_G,Ace,wce,SG=oe(()=>{Ne();fS=w(xp()),EG=require("yaml"),_G=require("lodash"),Ace=["super_user","cluster_user","structure_user"];o(gG,"start");o(Ice,"ensureRole");wce=gG});async function mS(e){let t=(0,RG.pathToFileURL)(e).toString();if(Nce)return Bp||(Bp=Cce(Pce)),(await(await Bp).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Cce(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Bp=new Compartment({console,Math,Date,fetch:Oce,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,yG.extname)(r)||(r+=".js"),r)},importHook:o(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Fr,s.tables=En,s.databases=De}};let n=await(0,TG.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Bp}function Oce(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 Pce(){return{Resource:Fr,tables:En}}var TG,yG,RG,Nce,Bp,bN=oe(()=>{va();Ne();TG=require("fs/promises"),yG=require("path"),RG=require("url"),Nce=!1;o(mS,"secureImport");o(Cce,"getCompartment");o(Oce,"secureOnlyFetch");o(Pce,"getGlobalVars")});var AN={};be(AN,{handleApplication:()=>Lce,suppressHandleApplicationWarning:()=>Dce});function bG(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Lce(e){e.handleEntry(t=>{if(t.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${t.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(t.eventType!=="add"){e.requestRestart();return}mS(t.absolutePath).then(r=>{let n=(0,pS.dirname)(t.urlPath);bG(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),AG(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function AG(e,t,r){for(let n in t){let s=t[n],i=(0,pS.join)(r,n);bG(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&AG(e,s,i)}}var pS,Dce,IG=oe(()=>{bN();pS=require("path");o(bG,"isResource");o(Lce,"handleApplication");o(AG,"recurseForResources");Dce=!0});var wN={};be(wN,{start:()=>Mce});function Mce({resources:e}){e.set("login",IN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var IN,wG=oe(()=>{va();o(Mce,"start");IN=class extends Fr{static{o(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:a}=r;return{data:await n.login(s,i)}}}});function DG(e){let t={openapi:vce,info:{title:"HarperDB HTTP REST interface",version:PG.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}],n=o(s=>{if(s.type&&!t.components.schemas[s.type]){t.components.schemas[s.type]={};let i={},a=[];for(let c of s.properties)hS[c.type]?i[c.name]=new CN(hS[c.type],c.type):c.properties?(i[c.name]=new MG(c.type),n(c)):c.elements?.properties&&(i[c.name]=new Hce(c.elements.type),n(c.elements)),c.nullable===!1&&a.push(c.name);t.components.schemas[s.type]=new OG(i,!s.sealed,a)}},"includeDefinitionInSchema");for(let[,s]of e){if(!s.path||s.Resource.isError)continue;let{path:i}=s,a=i.split("/").pop(),{attributes:c,sealed:l}=s.Resource,{prototype:u,primaryKey:d="id"}=s.Resource;if(!c&&e.allTypes.has(s.path)){let j=e.allTypes.get(s.path);l=j.sealed,c=j.properties}if(!d)continue;let f={},m=[],p=[];if(c)for(let{type:j,name:H,elements:F,relationship:Q,definition:W,nullable:fe}of c){let ue=W??F?.definition;ue&&n(ue),fe===!1&&p.push(H),Q?j==="array"?f[H]={type:"array",items:{$ref:Us+F.type}}:f[H]={$ref:Us+j}:ue?j==="array"?f[H]={type:"array",items:{$ref:Us+ue.type}}:f[H]={$ref:Us+ue.type}:j==="array"?F.type==="Any"?f[H]={type:"array",items:{format:F.type}}:f[H]={type:"array",items:new CN(hS[F.type],F.type)}:j==="Any"?f[H]={format:j}:f[H]=new CN(hS[j],j),m.push(new ON(H,"query",f[H]))}let h=Object.keys(f),E=new ON(d,"path",{type:"string",format:"ID"});E.required=!0,E.description="primary key of record";let g=new ON("property","path",{enum:h});g.required=!0,t.components.schemas[a]=new OG(f,!l,p);let b=u.post!==Resource.prototype.post||u.update,S=typeof u.put=="function",R=typeof u.get=="function",L=typeof u.delete=="function",O=typeof u.patch=="function",x="/"+i+"/";b&&(t.paths[x]={},t.paths[x].post=new Uce(a,r,{200:new Sd({$ref:Us+a},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),R&&(t.paths[x]||(t.paths[x]={}),t.paths[x].get=new NN(m,r,{200:new Sd({type:"array",items:{$ref:Us+a}})},"search for records by the specified property name and value pairs")),t.paths[x]||(t.paths[x]={}),t.paths[x].options=new xce(m,r,{200:new Bce},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),L&&(t.paths[x]||(t.paths[x]={}),t.paths[x].delete=new CG(m,r,"delete all the records that match the provided query",{204:new NG})),x="/"+i+"/{"+d+"}",R&&(t.paths[x]={},t.paths[x].get=new NN([E],r,{200:new Sd({$ref:Us+a})},"retrieve a record by its primary key")),S&&(t.paths[x]||(t.paths[x]={}),t.paths[x].put=new Fce([E],r,a,{200:new Sd({$ref:Us+a})},"create or update the record with the URL path that maps to the record's primary key")),O&&(t.paths[x]||(t.paths[x]={}),t.paths[x].patch=new kce([E],r,a,{200:new Sd({$ref:Us+a})},"patch the record with the URL path that maps to the record's primary key")),L&&(t.paths[x]||(t.paths[x]={}),t.paths[x].delete=new CG([E],r,"delete a record with the given primary key",{204:new NG})),R&&g.schema.enum.length>0&&(x="/"+i+"/{"+d+"}.{property}",t.paths[x]={},t.paths[x].get=new NN([E,g],r,{200:new Sd({enum:h})},"used to retrieve the specified property of the specified record"))}for(let[,s]of e.allTypes)n(s),s.sealed&&t.components.schemas[s.type].additionalProperties&&(t.components.schemas[s.type].additionalProperties=!1);return t}function Uce(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Us+e}}}},this.security=t,this.responses=r}function NN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function xce(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function Bce(){this.description=LG,this.headers={},this.content={}}function Sd(e,t){this.description=LG,this.content={"application/json":{schema:e}},this.headers=t}function NG(){this.description="successfully processed request, no content returned to client"}function Fce(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Us+r}}}},this.responses=n}function kce(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Us+r}}}},this.responses=n}function CG(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function OG(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function CN(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function MG(e){this.$ref=`#/components/schemas/${e}`}function Hce(e){this.type="array",this.items=new MG(e)}function ON(e,t,r){this.name=e,this.in=t,this.schema=r}var PG,vce,hS,Us,LG,vG=oe(()=>{PG=w(bt()),vce="3.0.3",hS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Us="#/components/schemas/",LG="successful operation";o(DG,"generateJsonApi");o(Uce,"Post");o(NN,"Get");o(xce,"Options");o(Bce,"ResponseOptions200");o(Sd,"Response200");o(NG,"Response204");o(Fce,"Put");o(kce,"Patch");o(CG,"Delete");o(OG,"ResourceSchema");o(CN,"Type");o(MG,"Ref");o(Hce,"ArrayRef");o(ON,"Parameter")});var xG={};be(xG,{Request:()=>Qa,createReuseportFd:()=>ES});var UG,Qa,PN,LN,ES,Fp=oe(()=>{UG=require("os"),Qa=class{static{o(this,"Request")}#e;#t;_nodeRequest;_nodeResponse;method;url;headers;isWebSocket;user;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new LN(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 PN(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get httpVersion(){return this._nodeRequest.httpVersion}get isAborted(){return!1}get nodeRequest(){return this._nodeRequest}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},PN=class{static{o(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},LN=class{static{o(this,"Headers")}asObject;constructor(t){this.asObject=t}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return Object.prototype.hasOwnProperty.call(this.asObject,t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,UG.platform)()!="win32"&&(ES=require("node-unix-socket").createReuseportFd)});var gS={};be(gS,{parseHeaderValue:()=>MN,start:()=>$ce});async function Gce(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&eg(e);let i=new Ds;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==BG){let g=_S.getMatch(a,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new si(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let b=MN(g);for(let S of b)switch(S.name){case"max-age":e.expiresAt=S.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=MN(u).map(b=>(b.next?.name==="confirm"&&b.next.value>=0&&(e.replicatedConfirmation=+b.next.value),b.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await Tt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=wo(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new Td.ClientError(g,400)}if(e.authorize=!0,a===BG&&s==="GET"){if(e?.user?.role?.permission?.super_user)return DG(_S);throw new Td.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 Td.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Td.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,DN.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let g=Tq(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=Sm(f.data,e,f)),f}else if(isFinite(p)){qce[0]=p;let g=String.fromCharCode(34,(Jr[0]&63)+62,(Jr[0]>>6)+(Jr[1]<<2&63)+62,(Jr[1]>>4)+(Jr[2]<<4&63)+62,(Jr[2]>>2)+62,(Jr[3]&63)+62,(Jr[3]>>6)+(Jr[4]<<2&63)+62,(Jr[4]>>4)+(Jr[5]<<4&63)+62,(Jr[5]>>2)+62,(Jr[6]&63)+62,(Jr[6]>>6)+(Jr[7]<<2&63)+62,34),b=r["if-none-match"];b&&g==b?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),DN.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=Sm(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(a){a.statusCode?a.statusCode===500?mi.warn(a):mi.info(a):mi.error(a),a.statusCode===405&&(a.method&&(a.message+=` to handle HTTP method ${a.method.toUpperCase()||""}`),a.allow&&(a.allow.push("trace","head","options"),i.setIfNone("Allow",a.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:a.statusCode||500,headers:i,body:void 0};return c.body=Sm(a.contentType?a:HG(a),e,c),c}}function $ce(e){DN=e,e.includeExpensiveRecordCountEstimates&&(Qa.prototype.includeExpensiveRecordCountEstimates=!0),!FG&&(FG=!0,_S=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Gce(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{kp++;let s=new Wn;kG||(kG=!0,Bm(l=>{kp>0&&l.push({metric:"ws-connections",connections:kp,byThread:!0})}));let i;t.on("error",l=>{i=!0,mi.warn(l)});let a;t.on("message",o(function(u){a||(a=wo(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=a(u);qe(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{kp--,zr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=_S.getMatch(l,"ws");if(zr(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,qe(h=>({count:h.count,total:kp}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new si(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await Tt(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await Io(p.value,r);t.send(h),qe(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?mi.warn(l):mi.info(l):mi.error(l),t.close(Vce[l.statusCode]||1011,HG(l))}t.close()},e))}function MN(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,a]=s.trim().split("=");i=i.trim(),a&&(a=a.trim()),r={name:i.toLowerCase(),value:a,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var mi,Td,HG,Jr,qce,DN,BG,FG,_S,kG,kp,Vce,qG=oe(()=>{No();jn();mi=w(z()),Td=w(Ee());tg();yu();Na();Ap();vG();Fp();ng();({errorToString:HG}=mi),Jr=new Uint8Array(8),qce=new Float64Array(Jr.buffer,0,1),DN={},BG="openapi";o(Gce,"http");kp=0;o($ce,"start");Vce={401:3e3,403:3003};o(MN,"parseHeaderValue")});var vN=v((ZUe,$G)=>{var{recordAction:SS,recordActionBinary:GG}=(jn(),D(Y_)),Kce=require("fastify-plugin"),Yce=200;$G.exports=Kce(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let a=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,d,f;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",f=l.method),SS(a,"duration",u,f,d),GG(s.raw.statusCode<400,"success",u,f,d),GG(1,"response_"+s.raw.statusCode,u,f,d);let m=Yce;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{SS(performance.now()-c,"transfer",u,f,d),SS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,SS(m,"bytes-sent",u,f,d));let p=a.toFixed(3),h=s.getHeader("Server-Timing"),E=`db;dur=${p}`;s.header("Server-Timing",h?`${h}, ${E}`:E)}),r()},{name:"hdb-request-time"})});var KG=v((exe,VG)=>{var Wce=ot(),zce={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};VG.exports=function(e){return Wce.validateObject(e,zce)}});var Hp=v((txe,YG)=>{"use strict";var jce=(k(),D(Y)).OPERATIONS_ENUM,UN=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=jce.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};YG.exports=UN});var $p={};be($p,{createTokens:()=>FN,getJWTRSAKeys:()=>AS,refreshOperationToken:()=>kN,validateOperationToken:()=>HN,validateRefreshToken:()=>IS});async function AS(){if(TS)return TS;try{let e=qp.default.join(Gp.default.getHdbBasePath(),Tb),t=await yS.default.readFile(qp.default.join(e,rm.JWT_PASSPHRASE_NAME),"utf8"),r=await yS.default.readFile(qp.default.join(e,rm.JWT_PRIVATE_KEY_NAME),"utf8");return TS={publicKey:await yS.default.readFile(qp.default.join(e,rm.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},TS}catch(e){throw bS.default.error(e),new pi.ClientError(Rd.NO_ENCRYPTION_KEYS,yd.INTERNAL_SERVER_ERROR)}}async function FN(e){let t=(0,xN.validateBySchema)(e,Ji.default.object({username:Ji.default.string().optional(),password:Ji.default.string().optional(),role:Ji.default.string().optional(),expires_in:Ji.default.alternatives(Ji.default.string(),Ji.default.number()).optional()}));if(t)throw new pi.ClientError(t.message);let r;try{let f=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,f=!1),r=await(0,BN.findAndValidateUser)(e.username,e.password,f)}catch(f){throw bS.default.error(f),new pi.ClientError(Rd.INVALID_CREDENTIALS,yd.UNAUTHORIZED)}if(!r)throw new pi.ClientError(Rd.INVALID_CREDENTIALS,yd.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let a=await AS(),c=await bd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??JG,algorithm:RS,subject:Ad.OPERATION}),l=await bd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:Qce,algorithm:RS,subject:Ad.REFRESH}),u=hw(l,kr.SHA256);if((await(0,WG.update)(new zG.default(em,gu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new pi.ClientError(Rd.REFRESH_TOKEN_SAVE_FAILED,yd.INTERNAL_SERVER_ERROR);return jG.default.signalUserChange(new QG.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function kN(e){let t=(0,xN.validateBySchema)(e,Ji.default.object({refresh_token:Ji.default.string().required()}).required());if(t)throw new pi.ClientError(t.message);let{refresh_token:r}=e;await IS(r);let n=await AS(),s=await bd.default.decode(r);return{operation_token:await bd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:JG,algorithm:RS,subject:Ad.OPERATION})}}async function HN(e){return XG(e,Ad.OPERATION)}async function IS(e){return XG(e,Ad.REFRESH)}async function XG(e,t){try{let r=await AS(),n=await bd.default.verify(e,r.publicKey,{algorithms:RS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,BN.findAndValidateUser)(n.username,void 0,!1);if(t===Ad.REFRESH&&!Ew(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw bS.default.warn(r),r?.name==="TokenExpiredError"?new pi.ClientError(Rd.TOKEN_EXPIRED,yd.FORBIDDEN):new pi.ClientError(Rd.INVALID_TOKEN,yd.UNAUTHORIZED)}}var bd,yS,qp,Ji,xN,pi,bS,BN,WG,zG,jG,QG,Gp,yd,Rd,JG,Qce,RS,Ad,TS,Id=oe(()=>{bd=w(require("jsonwebtoken")),yS=w(require("fs-extra")),qp=w(require("node:path")),Ji=w(require("joi")),xN=w(ot());k();pi=w(Ee()),bS=w(z());gw();BN=w(os()),WG=w(un()),zG=w(Hp()),jG=w(xo()),QG=w(Zn()),Gp=w(le()),{HTTP_STATUS_CODES:yd,AUTHENTICATION_ERROR_MSGS:Rd}=pi.hdbErrors;Gp.default.initSync();JG=Gp.default.get(U.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Qce=Gp.default.get(U.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",RS="RS256",Ad={OPERATION:"operation",REFRESH:"refresh"};o(AS,"getJWTRSAKeys");o(FN,"createTokens");o(kN,"refreshOperationToken");o(HN,"validateOperationToken");o(IS,"validateRefreshToken");o(XG,"validateToken")});var qN=v((oxe,t$)=>{"use strict";var Jce=KG(),wd=require("passport"),Xce=require("passport-local").Strategy,Zce=require("passport-http").BasicStrategy,ele=require("util"),tle=os(),e$=ele.callbackify(tle.findAndValidateUser),ixe=Kr(),rle=(k(),D(Y)),ZG=(Id(),D($p));wd.use(new Xce(function(e,t,r){e$(e,t,r)}));wd.use(new Zce(function(e,t,r){e$(e,t,r)}));wd.serializeUser(function(e,t){t(null,e)});wd.deserializeUser(function(e,t){t(null,e)});function nle(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let a=e.headers.authorization.split(" ");n=a[0],s=a[1]}function i(a,c){return a?r(a):c?r(null,c):r("Must login")}switch(o(i,"handleResponse"),n){case"Basic":wd.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===rle.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?ZG.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):ZG.validateOperationToken(s).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:wd.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(nle,"authorize");function sle(e,t){let r=Jce(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let a=i[e.schema].tables[e.table].attribute_permissions;for(let c in a)e.attributes.indexOf(a[c].attribute_name)>-1&&!a[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${a[c].attribute_name} `))}return t(null,n)}o(sle,"checkPermissions");t$.exports={authorize:nle,checkPermissions:sle}});var wS=v((cxe,r$)=>{"use strict";var ile=rs();r$.exports={writeTransaction:ole};function ole(e,t,r){return ile.writeTransaction(e,t,r)}o(ole,"writeTransaction")});var o$=v((dxe,i$)=>{"use strict";var ale=fn(),cle=li(),n$=z(),lle=un(),uxe=wS(),ule=require("clone"),$N=require("alasql"),dle=vg(),s$=require("util"),fle=s$.promisify(cle.getTableSchema),mle=s$.promisify(ale.search),ple=(k(),D(Y)),GN=ce();dle($N);i$.exports={update:Ele};var hle="There was a problem performing this update. Please check the logs and try again.";async function Ele({statement:e,hdb_user:t}){let r=await fle(e.table.databaseid,e.table.tableid),n=_le(e.columns);GN.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=ule(s),c=GN.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=$N.parse(l).statements[0],d=await mle(u),f=gle(n,d);return Sle(a,f,t)}o(Ele,"update");function _le(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=$N.compile(`SELECT ${r.expression.toString()} AS [${ple.FUNC_VAL}] FROM ?`)}),t}catch(t){throw n$.error(t),new Error(hle)}}o(_le,"createUpdateRecord");function gle(e,t){return GN.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(gle,"buildUpdateRecords");async function Sle(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await lle.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){n$.error(`Error delete new_attributes from update response: ${i}`)}return s}o(Sle,"updateRecords")});var c$=v((hxe,a$)=>{var Tle=require("alasql"),yle=fn(),Rle=z(),ble=rs(),KN=require("util"),VN=ce(),Ale=(k(),D(Y)),Ile=li(),mxe=wS(),pxe=un(),wle="record",Nle="successfully deleted",Cle=KN.callbackify(Dle),Ole=KN.promisify(yle.search),Ple=KN.promisify(Ile.getTableSchema);a$.exports={convertDelete:Cle};function Lle(e){return`${e.deleted_hashes.length} ${wle}${e.deleted_hashes.length===1?"":"s"} ${Nle}`}o(Lle,"generateReturnMessage");async function Dle({statement:e,hdb_user:t}){let r=await Ple(e.table.databaseid,e.table.tableid);VN.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=VN.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Tle.parse(a).statements[0],l={operation:Ale.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Ole(c);let u=await ble.deleteRecords(l);return VN.isEmptyOrZeroLength(u.message)&&(u.message=Lle(u)),delete u.txn_time,u}catch(u){throw Rle.error(u),u.hdb_code?u.message:u}}o(Dle,"convertDelete")});var Ja=v((gxe,f$)=>{"use strict";var _xe=fn(),Vp=z(),{validateBySchema:l$}=ot(),$o=require("joi"),Mle=Ki(),NS=ce(),{handleHDBError:CS,hdbErrors:vle,ClientError:u$}=Ee(),{HDB_ERROR_MSGS:OS,HTTP_STATUS_CODES:YN}=vle,d$=le();d$.initSync();var{getDatabases:WN}=(Ne(),D(ft)),Ule=require("fs-extra"),xle=(k(),D(Y));f$.exports={describeAll:Ble,describeTable:PS,describeSchema:Fle};async function Ble(e={}){try{let t=NS.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=WN(),a={},c={},l=[],u=e?.exact_count,d=e?.include_computed;for(let m in i){a[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 PS({schema:m,table:h,exact_count:u,include_computed:d});else if(n&&n[m].describe&&n[m].tables[h].describe){let g=n[m].tables[h].attribute_permissions;E=await PS({schema:m,table:h,exact_count:u,include_computed:d},g)}E&&l.push(E)}catch(E){Vp.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],a[l[m].schema]&&delete a[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],a[l[m].schema]&&delete a[l[m].schema]);for(let m in a)t||s||r?f[m]={}:c[m]&&(f[m]={});return f}catch(t){return Vp.error("Got an error in describeAll"),Vp.error(t),CS(new Error,OS.DESCRIBE_ALL_ERR)}}o(Ble,"describeAll");async function PS(e,t){NS.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=l$(e,$o.object({database:$o.string(),table:$o.string().required(),exact_count:$o.boolean().strict(),include_computed:$o.boolean().strict()}));if(i)throw new u$(i.message);let c=WN()[r];if(!c)throw CS(new Error,OS.SCHEMA_NOT_FOUND(e.schema),YN.NOT_FOUND);let l=c[n];if(!l)throw CS(new Error,OS.TABLE_NOT_FOUND(e.schema,e.table),YN.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})}o(u,"pushAtt");let d=[];if(s){let p={};s.forEach(h=>{h.describe&&(p[h.attribute_name]=!0)}),l.attributes.forEach(h=>{p[h.name]&&u(h)})}else l.attributes?.forEach(p=>u(p));let f;try{f=(await Ule.stat(l.primaryStore.env.path)).size}catch(p){Vp.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")),d$.get(xle.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Mle.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){Vp.warn(`unable to stat table dbi due to ${p}`)}return m}o(PS,"descTable");async function Fle(e){NS.transformReq(e);let t=l$(e,$o.object({database:$o.string(),exact_count:$o.boolean().strict(),include_computed:$o.boolean().strict()}));if(t)throw new u$(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=WN()[n];if(!i)throw CS(new Error,OS.SCHEMA_NOT_FOUND(e.schema),YN.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),NS.isEmpty(l)||l.describe){let u=await PS({schema:e.schema,table:c,exact_count:e.exact_count,include_computed:e.include_computed},l?l.attribute_permissions:null);u&&(a[u.name]=u)}}return a}o(Fle,"describeSchema")});var _$=v((Txe,E$)=>{"use strict";var kle=Ja(),{hdbErrors:m$}=Ee(),{getDatabases:p$}=(Ne(),D(ft));E$.exports={checkSchemaExists:h$,checkSchemaTableExists:Hle,schemaDescribe:kle};async function h$(e){if(!p$()[e])return m$.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(h$,"checkSchemaExists");async function Hle(e,t){let r=await h$(e);if(r)return r;if(!p$()[e][t])return m$.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Hle,"checkSchemaTableExists")});var XN=v((Ixe,O$)=>{"use strict";var{decode:qle}=require("msgpackr"),{isMainThread:Rxe,parentPort:bxe,threadId:Axe}=require("worker_threads"),MS=xt(),Nd=mt(),QN=(k(),D(Y)),_n=z(),jN=le(),Gle=(k(),D(Y)),{onMessageByType:$le}=Je(),y$=Ki(),{recordAction:g$,recordActionBinary:Vle}=(jn(),D(Y_)),{publishToStream:Kle}=MS,{ConsumerEvents:S$}=require("nats"),Yle=fn(),{promisify:Wle}=require("util"),{decodeBlobsWithWrites:zle}=(As(),D(rA)),R$=Wle(setTimeout),vS=1e4,US,DS,jle,Qle,b$,Kp=new Map,Cd=new Map;O$.exports={initialize:A$,ingestConsumer:JN,setSubscription:Jle,setIgnoreOrigin:eue,getDatabaseSubscriptions:Zle,updateConsumer:I$};async function A$(){$le(QN.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await I$(n)}),b$=!0,_n.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await MS.getNATSReferences();US=e,DS=e.info.server_name,jle=t,Qle=r}o(A$,"initialize");async function I$(e){if(e.status==="start"){let{js:t,jsm:r}=await w$(e.node_domain_name);JN(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Kp.get(e.stream_name+e.node_domain_name);t&&(_n.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Kp.set(e.stream_name+e.node_domain_name,"close")),Cd.get(e.node_domain_name)==="failed"&&Cd.set(e.node_domain_name,"close")}}o(I$,"updateConsumer");var xS=new Map;function Jle(e,t,r){let n=xS.get(e);n||xS.set(e,n=new Map),n.set(t,r),b$||A$().then(Xle)}o(Jle,"setSubscription");async function Xle(){let e=await Yle.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+Nd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await w$(r),!n))break;let{schema:a,table:c}=i,l=y$.createNatsTableStreamName(a,c);JN(l,n,s,r)}}}o(Xle,"accessConsumers");async function w$(e){let t,r,n=1;for(;!r;)try{t=await US.jetstream({domain:e}),r=await US.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Cd.get(e)==="close")break;Cd.set(e,"failed"),n%10===1&&_n.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<vS?n++*100:vS;await R$(i)}return{js:t,jsm:r}}o(w$,"connectToRemoteJS");function Zle(){return xS}o(Zle,"getDatabaseSubscriptions");var N$;function eue(e){N$=e}o(eue,"setIgnoreOrigin");var C$=100,T$=new Array(C$),LS=0;async function JN(e,t,r,n){let{connection:s}=await MS.getNATSReferences();US=s,DS=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,DS),_n.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Cd.get(n)==="close")break;a%10===1&&_n.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(_n.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await MS.createConsumer(r,e,DS,new Date(Date.now()).toISOString()));let d=a++*100<vS?a++*100:vS;await R$(d)}let c=!1,l;for(;!c;){if(Kp.get(e+n)==="close"||Cd.get(n)==="close"){Kp.delete(e+n),c=!0;continue}l=await i.consume({max_messages:jN.get(QN.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Kp.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===S$.ConsumerDeleted&&(await l.close(),c=!0),d.type===S$.HeartbeatsMissed){let f=d.data;_n.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(_n.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 T$[LS],T$[LS]=tue(d).catch(f=>{_n.error(f)}),++LS>=C$&&(LS=0)}catch(d){d.message==="consumer deleted"?(_n.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):_n.error("Error consuming clustering ingest, restarting consumer",d)}}}o(JN,"ingestConsumer");async function tue(e){let t;await zle(()=>{t=qle(e.data)}),g$(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),_n.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=jN.get(QN.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Nd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Nd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Nd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!N$),Vle(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Nd.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:a,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:p}=t;_n.trace("processing message:",a,c,u,(d?"records: "+d.map(O=>O?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),_n.trace(`messageProcessor nats msg id: ${e.headers.get(Nd.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(O=>h=O),{timestamp:g,user:b,node_name:S}=m||{},R=xS.get(c)?.get(u);if(!R)throw new Error(`Missing table for replication message: ${u}`);if(a==="define_schema")t.type=a,t.onCommit=h,R.send(t);else if(d.length===1&&!l)R.send({type:zN(a),value:d[0],id:f?.[0],expiresAt:p,timestamp:g,table:u,onCommit:h,user:b,nodeName:S});else{let O=d.map((x,j)=>({type:zN(a),value:x,expiresAt:p,id:f?.[j],table:u}));for(;l;)O.push({type:zN(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;R.send({type:"transaction",writes:O,table:u,timestamp:g,onCommit:h,user:b,nodeName:S})}jN.get(Gle.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Kle(e.subject.split(".").slice(0,-1).join("."),y$.createNatsTableStreamName(c,u),e.headers,e.data),await E;let L=Date.now()-g;g&&g$(L,"replication-latency",e.subject,a,"ingest")}catch(a){_n.error(a)}e.ack()}o(tue,"messageProcessor");function zN(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(zN,"convertOperation")});var xt=v((Dxe,Y$)=>{"use strict";var Gr=le();Gr.initSync();var rue=require("fs-extra"),nue=require("semver"),zp=require("path"),{monotonicFactory:sue}=require("ulidx"),L$=sue(),iue=require("util"),D$=require("child_process"),oue=iue.promisify(D$.exec),aue=D$.spawn,Xr=mt(),et=(k(),D(Y)),{packageJson:cue,PACKAGE_ROOT:lue}=bt(),BS=ce(),hi=z(),FS=Ki(),uue=wS(),Yp=Et(),{broadcast:due,onMessageByType:fue,getWorkerIndex:mue}=Je(),{isMainThread:M$}=require("worker_threads"),{Encoder:pue,decode:rC}=require("msgpackr"),v$=new pue,{isEmpty:Dl}=BS,U$=os(),Nxe=48*36e11;M$&&fue(et.ITC_EVENT_TYPES.RESTART,()=>{gn=void 0,Ll=void 0});var{connect:hue,StorageType:Eue,RetentionPolicy:_ue,AckPolicy:nC,DeliverPolicy:sC,DiscardPolicy:gue,NatsConnection:Cxe,JetStreamManager:Oxe,JetStreamClient:Pxe,StringCodec:Lxe,JSONCodec:Sue,createInbox:iC,headers:Tue,ErrorCode:P$}=require("nats"),{recordAction:yue}=(jn(),D(Y_)),{encodeBlobsAsBuffers:Rue}=(As(),D(rA)),x$=Sue(),bue="clustering",Aue=cue.engines[Xr.NATS_SERVER_NAME],Iue=zp.join(lue,"dependencies"),tC=zp.join(Iue,`${process.platform}-${process.arch}`,Xr.NATS_BINARY_NAME),ZN,eC,Wp,Ol,Pl;Y$.exports={runCommand:B$,checkNATSServerInstalled:wue,createConnection:oC,getConnection:jp,getJetStreamManager:Qp,getJetStream:k$,getNATSReferences:Xi,getServerList:Cue,createLocalStream:aC,listStreams:H$,deleteLocalStream:Oue,getServerConfig:Od,listRemoteStreams:Pue,viewStream:Lue,viewStreamIterator:Due,publishToStream:Mue,request:xue,reloadNATS:cC,reloadNATSHub:Bue,reloadNATSLeaf:Fue,extractServerName:Uue,requestErrorHandler:kue,createLocalTableStream:V$,createTableStreams:Gue,purgeTableStream:K$,purgeSchemaTableStreams:$ue,getStreamInfo:Vue,updateLocalStreams:Yue,closeConnection:Nue,getJsmServerName:kS,addNatsMsgHeader:q$,clearClientCache:F$,updateRemoteConsumer:Hue,createConsumer:G$,updateConsumerIterator:que};async function B$(e,t=void 0){let{stdout:r,stderr:n}=await oue(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
17
17
|
`,""));return r.replace(`
|
|
18
|
-
`,"")}o(B$,"runCommand");async function wue(){try{await rue.access(tC)}catch{return!1}let e=await B$(`${tC} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return nue.eq(t,Aue)}o(wue,"checkNATSServerInstalled");async function oC(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await U$.getClusterUser();if(Dl(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}hi.trace("create nats connection called");let i=await hue({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Gr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Gr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Gr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),hi.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(a=>{a&&hi.error("Error with Nats client connection, connection closed",a),i===gn&&F$()}),i}o(oC,"createConnection");function F$(){gn=void 0,Ol=void 0,Pl=void 0,Ll=void 0}o(F$,"clearClientCache");async function Nue(){gn&&(await gn.drain(),gn=void 0,Ol=void 0,Pl=void 0,Ll=void 0)}o(Nue,"closeConnection");var gn,Ll;async function jp(){return Ll||(Ll=oC(Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),gn=await Ll),gn||Ll}o(jp,"getConnection");async function Qp(){if(Ol)return Ol;Dl(gn)&&await jp();let{domain:e}=Od(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Dl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ol=await gn.jetstreamManager({domain:e,timeout:6e4}),Ol}o(Qp,"getJetStreamManager");async function k$(){if(Pl)return Pl;Dl(gn)&&await jp();let{domain:e}=Od(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Dl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Pl=gn.jetstream({domain:e,timeout:6e4}),Pl}o(k$,"getJetStream");async function Xi(){let e=gn||await jp(),t=Ol||await Qp(),r=Pl||await k$();return{connection:e,jsm:t,js:r}}o(Xi,"getNATSReferences");async function Cue(e){let t=Gr.get(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await U$.getClusterUser(),s=await oC(t,r,n),i=iC(),a=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of a){let f=x$.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 FS.asyncSetTimeout(e),await a.drain(),await s.close(),await u,c}o(Cue,"getServerList");async function aC(e,t){let{jsm:r}=await Xi(),n=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Eue.File,retention:_ue.Limits,subjects:t,discard:gue.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(aC,"createLocalStream");async function H$(){let{jsm:e}=await Xi(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o(H$,"listStreams");async function Oue(e){let{jsm:t}=await Xi();await t.streams.delete(e)}o(Oue,"deleteLocalStream");async function Pue(e){let{connection:t}=await Xi(),r=[],n=iC(),s=t.subscribe(n),i=(async()=>{for await(let a of s)r.push(x$.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}o(Pue,"listRemoteStreams");async function Lue(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Xi(),i=L$(),a={durable_name:i,ack_policy:nC.Explicit};t&&(a.deliver_policy=sC.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=rC(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(Xr.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}o(Lue,"viewStream");async function*Due(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Xi(),i=L$(),a={durable_name:i,ack_policy:nC.Explicit};t&&(a.deliver_policy=sC.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=rC(u.data);d[0]||(d=[d]);for(let f of d){let m={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:f};u.headers&&(m.origin=u.headers.get(Xr.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}o(Due,"viewStreamIterator");async function Mue(e,t,r,n){hi.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=q$(n,r);let{js:s}=await Xi(),i=await HS(),a=`${e}.${i}`,c=await Rue(()=>n instanceof Uint8Array?n:v$.encode(n));try{hi.trace(`publishToStream publishing to subject: ${a}`),yue(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(a,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return $$(async()=>{try{await s.publish(a,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){hi.trace(`publishToStream creating stream: ${t}`);let d=a.split(".");d[2]="*",await aC(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(Mue,"publishToStream");function q$(e,t){t===void 0&&(t=Tue());let r=Gr.get(et.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Xr.MSG_HEADERS.ORIGIN)&&r&&t.append(Xr.MSG_HEADERS.ORIGIN,r),t}o(q$,"addNatsMsgHeader");function Od(e){e=e.toLowerCase();let t=zp.join(Gr.get(et.CONFIG_PARAMS.ROOTPATH),bue);if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Dl(eC)&&(eC={port:Yp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Yp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.HUB,config_file:Xr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:zp.join(t,Xr.PID_FILES.HUB),hdbNatsPath:t}),eC;if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Dl(ZN)&&(ZN={port:Yp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Yp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.LEAF,config_file:Xr.NATS_CONFIG_FILES.LEAF_SERVER,domain:Yp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.LEAF,pid_file_path:zp.join(t,Xr.PID_FILES.LEAF),hdbNatsPath:t}),ZN;hi.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(Od,"getServerConfig");async function G$(e,t,r,n){try{await e.consumers.add(t,{ack_policy:nC.Explicit,durable_name:r,deliver_policy:sC.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(G$,"createConsumer");async function vue(e,t,r){await e.consumers.delete(t,r)}o(vue,"removeConsumer");function Uue(e){return e.split(".")[1]}o(Uue,"extractServerName");async function xue(e,t,r=6e4,n=iC()){if(!FS.isObject(t))throw new Error("data param must be an object");let s=v$.encode(t),{connection:i}=await Xi(),a={timeout:r};n&&(a.reply=n,a.noMux=!0);let c=await i.request(e,s,a);return rC(c.data)}o(xue,"request");function cC(e){return new Promise(async(t,r)=>{let n=aue(tC,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",a=>{r(a)}),n.stdout.on("data",a=>{i+=a.toString()}),n.stderr.on("data",a=>{s+=a.toString()}),n.stderr.on("close",a=>{s&&r(s),t(i)})})}o(cC,"reloadNATS");async function Bue(){let{pid_file_path:e}=Od(et.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await cC(e)}o(Bue,"reloadNATSHub");async function Fue(){let{pid_file_path:e}=Od(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await cC(e)}o(Fue,"reloadNATSLeaf");function kue(e,t,r){let n;switch(e.code){case P$.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case P$.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(kue,"requestErrorHandler");async function Hue(e,t){let r=t+Xr.SERVER_SUFFIX.LEAF,{connection:n}=await Xi(),{jsm:s}=await zue(r),{schema:i,table:a}=e,c=kS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await $$(async()=>{if(e.subscribe===!0)await G$(s,c,n.info.server_name,l);else try{await vue(s,c,n.info.server_name)}catch(u){hi.trace(u)}})}o(Hue,"updateRemoteConsumer");async function que(e,t,r,n){let s=kS.createNatsTableStreamName(e,t),i=r+Xr.SERVER_SUFFIX.LEAF,a={type:et.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!M$&&mue()<Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=XN();await c(a)}await due(a),n==="stop"&&await FS.asyncSetTimeout(1e3)}o(que,"updateConsumerIterator");function $$(e){return uue.writeTransaction(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o($$,"exclusiveLock");async function V$(e,t){let r=kS.createNatsTableStreamName(e,t),n=await HS(),s=Kue(e,t,n);await aC(r,[s])}o(V$,"createLocalTableStream");async function Gue(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await V$(n,s)}}o(Gue,"createTableStreams");async function K$(e,t,r=void 0){if(Gr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=kS.createNatsTableStreamName(e,t),{domain:s}=Od(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await jp()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")hi.warn(n);else throw n}}o(K$,"purgeTableStream");async function $ue(e,t){if(Gr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await K$(e,t[r])}o($ue,"purgeSchemaTableStreams");async function Vue(e){return(await Qp()).streams.info(e)}o(Vue,"getStreamInfo");function Kue(e,t,r){return`${Xr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(Kue,"createSubjectName");async function HS(){if(Wp)return Wp;if(Wp=(await Qp())?.nc?.info?.server_name,Wp===void 0)throw new Error("Unable to get jetstream manager server name");return Wp}o(HS,"getJsmServerName");async function Yue(){let e=await Qp(),t=await HS(),r=await H$();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=Wue(n),c=i.split(".");if(c[c.length-1]===t&&!a||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");hi.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}o(Yue,"updateLocalStreams");function Wue(e){let{config:t}=e,r=!1,n=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}o(Wue,"updateStreamLimits");async function zue(e){let t,r;try{t=await gn.jetstream({domain:e}),r=await gn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw hi.error("Unable to connect to:",e),n}return{js:t,jsm:r}}o(zue,"connectToRemoteJS")});function lC(e){let t=e.get(qS),r=t?(0,Pd.unpack)(t):null;r||(r={remoteNameToId:{}});let n=st(),s=!1;r.nodeName=st();let i=r.remoteNameToId;if(i[n]!==0){let a=0,c;for(let l in i){let u=i[l];u===0?c=l:u>a&&(a=u)}if(c){a++,i[c]=a;let l=[Symbol.for("seq"),a];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:Xp(e)??1,nodes:[]})})}i[n]=0,e.putSync(qS,(0,Pd.pack)(r))}return r}function Jp(e){return lC(e).remoteNameToId}function z$(e,t){let r=lC(t),n=r.remoteNameToId,s=new Map,i=!1;for(let a in e){let c=e[a],l=n[a];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[a]=l,i=!0}s.set(c,l)}return i&&t.putSync(qS,(0,Pd.pack)(r)),s}function GS(e,t){let r=lC(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let a in n){let c=n[a];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(qS,(0,Pd.pack)(r))}return W$.trace?.("The remote node name map",e,n,s),s}var W$,Pd,qS,uC=oe(()=>{W$=w(zn());ls();Pd=require("msgpackr"),qS=Symbol.for("remote-ids");o(lC,"getIdMappingRecord");o(Jp,"exportIdMapping");o(z$,"remoteToLocalNodeId");o(GS,"getIdOfRemoteNode")});var eV={};be(eV,{commitsAwaitingReplication:()=>Dd,getHDBNodeTable:()=>Kt,getReplicationSharedStatus:()=>Md,iterateRoutes:()=>eh,shouldReplicateToNode:()=>Zp,subscribeToNodeUpdates:()=>vd});function Kt(){return j$||(j$=Xe({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function Md(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function vd(e){Kt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;Z$.debug?.("adding node",n,"on node",st()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==st()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Kt().search({}))if(i.shard!=null){let a=s.get(i.shard);a||s.set(i.shard,a=[]),a.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function Zp(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&Kt().primaryStore.get(st())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function jue(){vd(e=>{Xa({},(t,r)=>{let n=e.name,s=Q$.get(n);if(s||Q$.set(n,s=new Map),s.has(r))return;let i;for(let a in t)if(i=t[a].auditStore,i)break;if(i){let a=Md(i,r,n,()=>{let c=a[0],l=a.lastTime;for(let{txnTime:u,onConfirm:d}of Dd.get(r)||[])u>l&&u<=c&&d();a.lastTime=c});a.lastTime=0,s.set(r,a)}})})}function*eh(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=Ld.default.get(U.REPLICATION_SECUREPORT)??(!Ld.default.get(U.REPLICATION_PORT)&&Ld.default.get(U.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Ld.default.get(U.REPLICATION_PORT)||Ld.default.get(U.OPERATIONSAPI_NETWORK_PORT);let a=i?.lastIndexOf?.(":");a>0&&(i=+i.slice(a+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){J$.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 J$,X$,Ld,Z$,j$,Q$,Dd,Ud=oe(()=>{Ne();ls();mm();J$=require("worker_threads"),X$=w(Ee()),Ld=w(le());k();Z$=w(zn());server.nodes=[];o(Kt,"getHDBNodeTable");o(Md,"getReplicationSharedStatus");o(vd,"subscribeToNodeUpdates");o(Zp,"shouldReplicateToNode");Q$=new Map;EU((e,t,r)=>{if(r>server.nodes.length)throw new X$.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Dd||(Dd=new Map,jue());let n=Dd.get(e);return n||(n=[],Dd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:o(()=>{++i===r&&s()},"onConfirm")})})});o(jue,"startSubscriptionToReplications");o(eh,"iterateRoutes")});var iV={};be(iV,{connectedToNode:()=>Ml,disconnectedFromNode:()=>Bd,ensureNode:()=>Vo,requestClusterStatus:()=>sV,startOnMainThread:()=>fC});async function fC(e){let t=0,r=at();for(let i of Object.getOwnPropertyNames(r)){let a=r[i];for(let c in a){let l=a[c];if(l.auditStore){$S.set(i,Xp(l.auditStore));break}}}eo.whenThreadsStarted.then(async()=>{let i=[];for await(let l of r.system.hdb_nodes?.search([])||[])i.push(l);let a=st();function c(){let l=Kt().primaryStore.get(a);if(l!==null){let u=e.url??Za();if(l===void 0||l.url!==u||l.shard!==e.shard)return Vo(a,{name:a,url:u,shard:e.shard,replicates:!0})}}o(c,"ensureThisNode"),Kt().primaryStore.get(a)&&c();for(let l of eh(e))try{let u=!l.subscriptions;if(u&&await c(),u&&l.replicates==null&&(l.replicates=!0),i.find(d=>d.url===l.url))continue;s(l)}catch(u){console.error(u)}vd(s)});let n;function s(i,a=i?.name){let c=st()&&a===st()||Za()&&i?.url===Za();if(c){let f=!!i?.replicates;if(n!==void 0&&n!==f)for(let m of Kt().search([]))m.replicates&&m.name!==a&&s(m,m.name);n=f}if(ut.trace("Setting up node replication for",i),!i){for(let[f,m]of Zi){let p;for(let[h,{worker:E,nodes:g}]of m){let b=g[0];if(b&&b.name==a){p=!0;for(let[S,{worker:R}]of m)m.delete(S),ut.warn("Node was deleted, unsubscribing from node",a,S,f),R?.postMessage({type:"unsubscribe-from-node",node:a,database:S,url:f});break}}if(p){Zi.get(f).iterator.remove(),Zi.delete(f);return}}return}if(c)return;if(!i.url){ut.info(`Node ${i.name} is missing url`);return}let l=Zi.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(ut.info(`Added node ${i.name} at ${i.url} for process ${st()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[f,m]of xd)if(i.url===m.url){xd.delete(f);break}xd.set(i.name,i)}let u=at();if(l||(l=new Map,Zi.set(i.url,l)),l.iterator=Xa(e,(f,m,p)=>{p?d(m,!0):d(m,!1)}),i.subscriptions)for(let f of i.subscriptions){let m=f.database||f.schema;u[m]||(ut.warn(`Database ${m} not found for node ${i.name}, making a subscription anyway`),d(m,!1))}function d(f,m){ut.trace("Setting up replication for database",f,"on node",i.name);let p=l.get(f),h,E=[{replicateByDefault:m,...i}];$S.has(f)&&(E.push({replicateByDefault:m,name:st(),startTime:$S.get(f),endTime:Date.now(),replicates:!0}),$S.delete(f));let g=Zp(i,f),b=eo.workers.filter(S=>S.name==="http");if(p?(h=p.worker,p.nodes=E):g&&(t=t%b.length,h=b[t++],l.set(f,{worker:h,nodes:E,url:i.url}),h?.on("exit",()=>{l.get(f)?.worker===h&&(l.delete(f),d(f,m))})),g)setTimeout(()=>{let S={type:"subscribe-to-node",database:f,nodes:E};h?h.postMessage(S):th(S)},Que);else{ut.info("Node no longer should be used, unsubscribing from node",{replicates:i.replicates,databaseName:f,node:i,subscriptions:i.subscriptions,hasDatabase:!!u[f],thisReplicates:Kt().primaryStore.get(st())?.replicates}),Kt().primaryStore.get(st())?.replicates||(n=!1,ut.info("Disabling replication, this node name",st(),Kt().primaryStore.get(st()),f));let S={type:"unsubscribe-from-node",database:f,url:i.url,name:i.name};h?h.postMessage(S):KS(S)}}o(d,"onDatabase")}o(s,"onNodeUpdate"),Bd=o(function(i){try{ut.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let a=Array.from(xd.keys()),c=a.sort(),l=c.indexOf(i.name||Ei(i.url));if(l===-1){ut.warn("Disconnected node not found in node map",i.name,a);return}let u=Zi.get(i.url),d=u?.get(i.database);if(!d){ut.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished||!dC.default.get(U.REPLICATION_FAILOVER))return;let f=d.nodes[0];if(!(f.replicates===!0||f.replicates?.sends||f.subscriptions?.length))return;let m=f.shard,p=(l+1)%c.length;for(;l!==p;){let h=c[p],E=xd.get(h);u=Zi.get(E.url);let g=u?.get(i.database);if(!g||g.connected===!1||g.nodes[0].shard!==m){p=(p+1)%c.length;continue}let{worker:b,nodes:S}=g,R=!1;for(let L of d.nodes){if(S.some(O=>O.name===L.name)){ut.info(`Disconnected node is already failing over to ${h} for ${i.database}`);continue}L.endTime<Date.now()||(S.push(L),R=!0)}if(d.nodes=[d.nodes[0]],!R){ut.info(`Disconnected node ${i.name} has no nodes to fail over to ${h}`);return}ut.info(`Failing over ${i.database} from ${i.name} to ${h}`),b?b.postMessage({type:"subscribe-to-node",database:i.database,nodes:S}):th({database:i.database,nodes:S});return}ut.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(a){ut.error("Error failing over node",a)}},"disconnectedFromNode"),Ml=o(function(i){let a=Zi.get(i.url),c=a?.get(i.database);if(!c){ut.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,a);return}c.connected=!0,c.latency=i.latency;let l=c.nodes[0];if(!l){ut.warn("Newly connected node has no node subscriptions",i.database,c);return}if(!l.name){ut.debug("Connected node is not named yet",i.database,c);return}c.nodes=[l];let u=!1;for(let d of Zi.values()){let f=d.get(i.database);if(!f||f==c)continue;let{worker:m,nodes:p,connected:h}=f;if(p)if(h===!1&&p[0].shard===l.shard)u=!0,c.nodes.push(p[0]);else{let E=p.filter(g=>g&&g.name!==l.name);E.length<p.length&&(f.nodes=E,m.postMessage({type:"subscribe-to-node",database:i.database,nodes:p}))}}u&&c.worker&&c.worker.postMessage({type:"subscribe-to-node",database:i.database,nodes:c.nodes})},"connectedToNode"),(0,eo.onMessageByType)("disconnected-from-node",Bd),(0,eo.onMessageByType)("connected-to-node",Ml),(0,eo.onMessageByType)("request-cluster-status",sV)}function sV(e,t){let r=[];for(let[n,s]of xd)try{let i=Zi.get(s.url);ut.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let a=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)a.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(p=>!(p.endTime<Date.now())).map(p=>p.name)});let c=rV(s);c.database_sockets=a,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ut.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function Vo(e,t){let r=Kt();e=e??Ei(t.url),t.name=e;try{if(t.ca){let s=new nV.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){ut.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ut.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!dC.default.get(U.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],a=rV(n[s]);for(let c of t[s]){let l=!1;for(let u of a)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...a,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ut.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var eo,VS,ut,tV,dC,nV,rV,Que,Zi,Bd,Ml,xd,$S,rh=oe(()=>{Ne();eo=w(Je());ls();VS=require("worker_threads");Ud();ut=w(z()),tV=w(require("lodash")),dC=w(le());k();nV=require("crypto"),{cloneDeep:rV}=tV.default,Que=200,Zi=new Map,xd=new Map,$S=new Map;o(fC,"startOnMainThread");o(sV,"requestClusterStatus");VS.parentPort&&(Bd=o(e=>{VS.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Ml=o(e=>{VS.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,eo.onMessageByType)("subscribe-to-node",e=>{th(e)}),(0,eo.onMessageByType)("unsubscribe-from-node",e=>{KS(e)}));o(Vo,"ensureNode")});var ds=v(Yt=>{"use strict";var mr=require("path"),{watch:Jue}=require("chokidar"),kn=require("fs-extra"),Fd=require("node-forge"),dV=require("net"),{generateKeyPair:mC,X509Certificate:Ko,createPrivateKey:fV}=require("crypto"),Xue=require("util");mC=Xue.promisify(mC);var wt=Fd.pki,_i=require("joi"),{v4:mV}=require("uuid"),{validateBySchema:_C}=ot(),{forComponent:Zue}=z(),us=le(),xs=(k(),D(Y)),{CONFIG_PARAMS:Ul}=xs,gi=Lw(),{ClientError:ec}=Ee(),WS=require("node:tls"),{relative:pV,join:ede}=require("node:path"),{CERTIFICATE_VALUES:oV}=gi,tde=$c(),pC=Et(),{table:rde,getDatabases:nde,databases:YS}=(Ne(),D(ft)),{getJWTRSAKeys:aV}=(Id(),D($p)),je=Zue("tls").conditional;Yt.generateKeys=TC;Yt.updateConfigCert=RV;Yt.createCsr=ude;Yt.signCertificate=dde;Yt.setCertTable=kd;Yt.loadCertificates=SV;Yt.reviewSelfSignedCert=RC;Yt.createTLSSelector=AV;Yt.listCertificates=wV;Yt.addCertificate=_de;Yt.removeCertificate=Sde;Yt.createNatsCerts=pde;Yt.generateCertsKeys=mde;Yt.getReplicationCert=sh;Yt.getReplicationCertAuth=lde;Yt.renewSelfSigned=hde;Yt.hostnamesFromCert=AC;Yt.getKey=Tde;Yt.getHostnamesFromCertificate=yde;Yt.getPrimaryHostName=bC;var{urlToNodeName:hV,getThisNodeUrl:sde,getThisNodeName:jS,clearThisNodeName:ide}=(ls(),D(Yo)),{readFileSync:ode,statSync:EV}=require("node:fs"),Xxe=le(),{getTicketKeys:ade,onMessageFromWorkers:cde}=Je(),{isMainThread:_V}=require("worker_threads"),{TLSSocket:gV,createSecureContext:Zxe}=require("node:tls"),gC=3650,nh=["127.0.0.1","localhost","::1"],SC=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];cde(async e=>{e.type===xs.ITC_EVENT_TYPES.RESTART&&(us.initSync(!0),await RC())});var Zr;function rc(){return Zr||(Zr=nde().system.hdb_certificate,Zr||(Zr=rde({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),Zr}o(rc,"getCertTable");async function sh(){let e=AV("operations-api"),t={secureContexts:null,setSecureContext:o(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(jS());if(!r)return;let n=new Ko(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}o(sh,"getReplicationCert");async function lde(){rc();let e=(await sh()).options.cert,r=new Ko(e).issuer.match(/CN=(.*)/)?.[1];return Zr.get(r)}o(lde,"getReplicationCertAuth");var cV,tc=new Map;function SV(){if(cV)return;cV=!0;let e=[{configKey:Ul.TLS},{configKey:Ul.OPERATIONSAPI_TLS}];rc();let t=mr.dirname(pC.getConfigFilePath()),r;for(let{configKey:n}of e){let s=pC.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&pV(ede(t,"keys"),a);c&&lV(a,l=>{tc.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&_V){let d;lV(u,f=>{if(oV.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=bV(u),h=new Ko(p),E;try{E=bC(h)}catch(R){je.error?.("error extracting host name from certificate",R);return}if(E==null){je.error?.("No host name found on certificate");return}if(h.checkIssued(new Ko(oV.cert)))return;let g=Zr.primaryStore.get(E),b=EV(u).mtimeMs,S=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&b<=S){b<S&&je.info?.(`Certificate ${E} at ${u} is older (${new Date(b)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=Zr.put({name:E,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:p,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:b,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject?.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}o(SV,"loadCertificates");function lV(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&_V&&je.warn?.(`Reloading ${r}:`,i),n=c,t(bV(i)))}catch(c){je.error?.(`Error loading ${r}:`,i,c)}},"loadFile");kn.existsSync(e)?s(e,EV(e)):je.error?.(`${r} file not found:`,e),Jue(e,{persistent:!1}).on("change",s)}o(lV,"loadAndWatch");function hC(){let e=sde();if(e==null){let t=nh[0];return je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return hV(e)}o(hC,"getHost");function zS(){let e=jS();if(e==null){let t=nh[0];return je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}o(zS,"getCommonName");async function ude(){let e=await sh(),t=wt.certificateFromPem(e.options.cert),r=wt.privateKeyFromPem(e.options.key);je.info?.("Creating CSR with cert named:",e.name);let n=wt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:zS()},...SC];je.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:TV()}];return je.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Fd.pki.certificationRequestToPem(n)}o(ude,"createCsr");function TV(){let e=nh.includes(zS())?nh:[...nh,zS()];return e.includes(hC())||e.push(hC()),[{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=>dV.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o(TV,"certExtensions");async function dde(e){let t={},r=mr.join(us.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;rc();for await(let d of Zr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(tc.has(d.private_key_name)){n=tc.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await kn.exists(mr.join(r,d.private_key_name))){n=kn.readFile(mr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await EC();s=d.ca,n=d.private_key}n=wt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=wt.certificateFromPem(s.certificate);je.info?.("Signing CSR with cert named",s.name);let a=wt.certificationRequestFromPem(e.csr);try{a.verify()}catch(d){return je.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=Fd.pki.createCertificate();c.serialNumber="0"+Math.random().toString().slice(2,9),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+gC),je.info?.("sign cert setting validity:",c.validity),je.info?.("sign cert setting subject from CSR:",a.subject.attributes),c.setSubject(a.subject.attributes),je.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=a.getAttribute({name:"extensionRequest"}).extensions;je.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=a.publicKey,c.sign(n,Fd.md.sha256.create()),t.certificate=wt.certificateToPem(c)}else je.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}o(dde,"signCertificate");async function fde(e,t){await kd({name:jS(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await kd({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:wt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}o(fde,"createCertificateTable");async function kd(e){let t;try{t=new Ko(e.certificate)}catch(r){je.error?.(`Failed to parse certificate for ${e.name}:`,r.message),je.debug?.("Certificate record details:",JSON.stringify(e,null,2));let n=new Error(`Invalid certificate format for ${e.name}: ${r.message}. This may be due to corrupted certificate data during transfer or encoding issues.`);throw n.code="INVALID_CERTIFICATE_FORMAT",n.cause=r,n}e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject?.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},rc(),await Zr.patch(e)}o(kd,"setCertTable");async function TC(){let e=await mC("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:wt.publicKeyFromPem(e.publicKey),privateKey:wt.privateKeyFromPem(e.privateKey)}}o(TC,"generateKeys");async function yC(e,t,r){let n=wt.createCertificate();if(!t){let a=await sh();t=wt.certificateFromPem(a.options.cert).publicKey}n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+gC);let i=[{name:"commonName",value:zS()},...SC];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(TV()),n.sign(e,Fd.md.sha256.create()),wt.certificateToPem(n)}o(yC,"generateCertificates");async function EC(){let e=await wV(),t;for(let r of e){if(!r.is_authority)continue;let n=await IV(r.private_key_name);if(r.private_key_name&&n&&new Ko(r.certificate).checkPrivateKey(fV(n))){je.trace?.(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;je.trace?.("No CA found with matching private key")}o(EC,"getCertAuthority");async function yV(e,t,r=!0){let n=wt.createCertificate();n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+gC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${us.get(Ul.REPLICATION_HOSTNAME)??hV(us.get(Ul.REPLICATION_URL))??mV().split("-")[0]}`},...SC];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),n.sign(e,Fd.md.sha256.create());let a=mr.join(us.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME),c=mr.join(a,gi.PRIVATEKEY_PEM_NAME);return r&&await kn.writeFile(c,wt.privateKeyToPem(e)),n}o(yV,"generateCertAuthority");async function mde(){let{privateKey:e,publicKey:t}=await TC(),r=await yV(e,t),n=await yC(e,t,r);await fde(n,r),RV()}o(mde,"generateCertsKeys");async function pde(){let e=await yC(wt.privateKeyFromPem(gi.CERTIFICATE_VALUES.key),void 0,wt.certificateFromPem(gi.CERTIFICATE_VALUES.cert)),t=mr.join(us.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME),r=mr.join(t,gi.NATS_CERTIFICATE_PEM_NAME);await kn.exists(r)||await kn.writeFile(r,e);let n=mr.join(t,gi.NATS_CA_PEM_NAME);await kn.exists(n)||await kn.writeFile(n,gi.CERTIFICATE_VALUES.cert)}o(pde,"createNatsCerts");async function hde(){rc();for await(let e of Zr.search([{attribute:"is_self_signed",value:!0}]))await Zr.delete(e.name);await RC()}o(hde,"renewSelfSigned");async function RC(){ide(),await SV(),rc();let e=await EC();if(!e){je.notify?.("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=o(u=>{try{return{key:wt.privateKeyFromPem(kn.readFileSync(u)),keyPath:u}}catch(d){return je.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=us.get(Ul.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=us.get(Ul.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let a=mr.join(us.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME),c=pV(a,i);s||(je.warn?.("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await TC(),kn.existsSync(mr.join(a,gi.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${mV().split("-")[0]}.pem`),await kn.writeFile(mr.join(a,c),wt.privateKeyToPem(s)));let l=await yV(s,wt.setRsaPublicKey(s.n,s.e),!1);await kd({name:l.subject.getField("CN").value,uses:["https"],certificate:wt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await sh()){let r=jS();je.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await EC();let n=wt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await yC(wt.privateKeyFromPem(e.private_key),s,n);await kd({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}o(RC,"reviewSelfSignedCert");function RV(){let e=tde(Object.keys(xs.CONFIG_PARAM_MAP),!0),t=mr.join(us.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME),r=mr.join(t,gi.PRIVATEKEY_PEM_NAME),n=mr.join(t,gi.NATS_CERTIFICATE_PEM_NAME),s=mr.join(t,gi.NATS_CA_PEM_NAME),i=xs.CONFIG_PARAMS,a={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(a[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(a[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,a[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,a[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),pC.updateConfigValue(void 0,void 0,a,!1,!0)}o(RV,"updateConfigCert");function bV(e){return e.startsWith("-----BEGIN")?e:ode(e,"utf8")}o(bV,"readPEM");var uV=WS.createSecureContext;WS.createSecureContext=function(e){if(!e.cert||!e.key)return uV(e);let t={...e};delete t.key,delete t.cert;let r=uV(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Ede=gV.prototype._init;gV.prototype._init=function(e,t){Ede.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,a)=>{this.sni_context=a?.context||a,this.certCbDone()})}};var vl=new Map;function AV(e,t){let r=new Map,n,s=!1;return i.initialize=a=>i.ready?i.ready:(a&&(a.secureContexts=r,a.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),vl.clear();let d=0;if(YS===void 0){c();return}for await(let f of YS.system.hdb_certificate.search([])){let m=f.certificate,p=new Ko(m);f.is_authority&&(p.asString=m,vl.set(p.subject,m))}for await(let f of YS.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",p=f.is_self_signed?1:2;m&&f.uses?.includes?.("operations")&&(p+=1);let h=await IV(f.private_key_name),E=f.certificate,g=new Ko(E);if(vl.has(g.issuer)&&(E+=`
|
|
19
|
-
`+vl.get(g.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let b={ciphers:f.ciphers,ticketKeys:ade(),availableCAs:vl,ca:t&&Array.from(vl.values()),cert:E,key:h,key_file:f.private_key_name,is_self_signed:f.is_self_signed};a&&(b.sessionIdContext=a.sessionIdContext);let S=WS.createSecureContext(b);S.name=f.name,S.options=b,S.quality=p,S.certificateAuthorities=Array.from(vl),S.certStart=E.toString().slice(0,100);let R=f.hostnames??AC(g);Array.isArray(R)||(R=[R]);let L;for(let O of R)if(O){O[0]==="*"&&(s=!0,O=O.slice(1)),O===hC()&&(p+=2),dV.isIP(O)&&(L=!0);let x=r.get(O)?.quality??0;p>x&&r.set(O,S)}else je.error?.("No hostname found for certificate at",WS.certificate);je.trace?.("Adding TLS",S.name,"for",a.ports||"client","cert named",f.name,"hostnames",R,"quality",p,"best quality",d),p>d&&(i.defaultContext=n=S,d=p,a&&(a.defaultContext=S))}catch(m){je.error?.("Error applying TLS for",f.name,m)}a?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}o(u,"updateTLS"),YS?.system.hdb_certificate.subscribe({listener:o(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(a,c){je.info?.("TLS requested for",a||"(no SNI)");let l=a;for(;;){let d=r.get(l);if(d)return je.debug?.("Found certificate for",a,d.certStart),d.updatedContext&&(d=d.updatedContext),c(null,d);if(s&&l){let f=l.indexOf(".",1);f<0?l="":l=l.slice(f)}else break}a?je.debug?.("No certificate found to match",a,"using the default certificate"):je.debug?.("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):je.info?.("No default certificate found"),c(null,u)}o(i,"SNICallback")}o(AV,"createTLSSelector");async function IV(e){let t=tc.get(e);return!t&&e?await kn.readFile(mr.join(us.get(Ul.ROOTPATH),xs.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(IV,"getPrivateKeyByName");async function wV(){rc();let e=[];for await(let t of Zr.search([]))e.push(t);return e}o(wV,"listCertificates");async function _de(e){let t=_C(e,_i.object({name:_i.string().required(),certificate:_i.string().required(),is_authority:_i.boolean().required(),private_key:_i.string(),hosts:_i.array(),uses:_i.array()}));if(t)throw new ec(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,a=new Ko(n),c=!1,l=!1,u;for(let[p,h]of tc)!s&&!c&&a.checkPrivateKey(fV(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new ec("A suitable private key was not found for this certificate");let d;if(!r){try{d=bC(a)}catch(p){je.error?.(p)}if(d==null)throw new ec("Error extracting certificate host name, please provide a name parameter")}let f=gde(r??d);s&&!c&&!l&&(await kn.writeFile(mr.join(us.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME,f+".pem"),s),tc.set(f,s));let m={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(m.private_key_name=u??f+".pem"),e.ciphers&&(m.ciphers=e.ciphers),await kd(m),"Successfully added certificate: "+f}o(_de,"addCertificate");function gde(e){return e.replace(/[^a-z0-9\.]/gi,"-")}o(gde,"sanitizeName");async function Sde(e){let t=_C(e,_i.object({name:_i.string().required()}));if(t)throw new ec(t.message);let{name:r}=e;rc();let n=await Zr.get(r);if(!n)throw new ec(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Zr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(je.info?.("Removing private key named",s),await kn.remove(mr.join(us.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME,s)))}return await Zr.delete(r),"Successfully removed "+r}o(Sde,"removeCertificate");function bC(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||AC(e)[0]}o(bC,"getPrimaryHostName");function AC(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=e.subject?.match(/CN=(.*)/)?.[1];return t?[t]:[]}o(AC,"hostnamesFromCert");async function Tde(e){if(e.bypass_auth!==!0)throw new ec("Unauthorized","401");let t=_C(e,_i.object({name:_i.string().required()}));if(t)throw new ec(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await aV()).privateKey;if(r===".jwtPublic")return(await aV()).publicKey;if(tc.get(r))return tc.get(e.name);throw new ec("Key not found")}o(Tde,"getKey");function yde(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o(yde,"getHostnamesFromCertificate")});var QV={};be(QV,{CONFIRMATION_STATUS_POSITION:()=>WV,LATENCY_POSITION:()=>rT,NodeReplicationConnection:()=>qd,OPERATION_REQUEST:()=>OC,RECEIVED_TIME_POSITION:()=>LC,RECEIVED_VERSION_POSITION:()=>PC,RECEIVING_STATUS_POSITION:()=>DC,RECEIVING_STATUS_RECEIVING:()=>jV,RECEIVING_STATUS_WAITING:()=>zV,SENDING_TIME_POSITION:()=>ih,createWebSocket:()=>nT,databaseSubscriptions:()=>sc,replicateOverWS:()=>oh,tableUpdateListeners:()=>vC});async function nT(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=st(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!NC){let l=(0,GV.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),NC=u.secureContexts}if(i=NC.get(s),i&&de.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let a={};r&&(a.Authorization=r);let c={headers:a,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,VV.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(tT?.caCount!==Wo.size&&(tT=$V.createSecureContext({...i.options,ca:[...Wo,...i.options.availableCAs.values()]}),tT.caCount=Wo.size),c.secureContext=tT),new kV.WebSocket(e,"harperdb-replication-v1",c)}function oh(e,t,r){let n=t.port||t.securePort,s=xl.pid%1e3+"-"+HV.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);de.debug?.(s,"Initializing replication connection",r);let i=0,a=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(a.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||sc,f,m,p=!1,h=t.subscription;h?.then&&h.then(T=>{h=T,h.auditStore&&(f=h.auditStore)});let E=t.tables||u&&at()[u],g,b=new Map,S=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let R,L,O,x,j,H,F,Q=6e4,W,fe=0,ue=0,ee=0,Re=FV.default.get(U.REPLICATION_BLOBTIMEOUT)??12e4,Ie=new Map,$e=[],ke=0,yr;if(t.url){let T=o(()=>{j&&ue===e._socket?.bytesRead&&ee===e._socket?.bytesWritten?e.terminate():(j=performance.now(),e.ping(),ue=e._socket?.bytesRead,ee=e._socket?.bytesWritten)},"sendPing");O=setInterval(T,xV).unref(),T()}else Xt();e._socket?.setMaxListeners(200);function Xt(){clearTimeout(x),ue=e._socket?.bytesRead,ee=e._socket?.bytesWritten,x=setTimeout(()=>{ue===e._socket?.bytesRead&&ee===e._socket?.bytesWritten&&(de.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},xV*2).unref()}o(Xt,"resetPingTimer");function Ht(){if(!(!g||!u))return m||(m=Md(f,u,g)),m}o(Ht,"getSharedStatus"),u&&Bc(u);let Zt,$f,Uc=[],qt=[],Vf,Kf=[],YE=[],WE=[],lb=150,Yf=25,Oe=0,zE=0,Wf=!1,go,Mr,Rr,zf;e.on("message",ub);async function ub(T){if(r=await r,!r){de.error?.(s,"No authorization provided"),Vr(1008,"Unauthorized");return}xc(T),e.off("message",ub),e.on("message",xc)}o(ub,"onWSMessageWhenAuthorized");function xc(T){fe=performance.now();try{let A=T.dataView=new jc(T.buffer,T.byteOffset,T.byteLength);if(T[0]>127){let M=(0,it.decode)(T),[q,C,B]=M;switch(q){case CV:{if(C){if(g){if(g!==C){de.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${C}, disconnecting`),e.send((0,it.encode)([Hd])),Vr(1008,"Node name mismatch");return}}else if(g=C,t.connection?.tentativeNode){let ae=t.connection.tentativeNode;ae.name=g,t.connection.tentativeNode=null,Vo(g,ae)}if(t.connection&&(t.connection.nodeName=g),de.debug?.(s,"received node name:",g,"db:",u??M[2]),!u)try{Bc(u=M[2]),u==="system"&&(Zt=Xa(t,(ae,ie)=>{hu(ie)&&Eu(ie)}),e.on("close",()=>{Zt?.remove()}))}catch(ae){de.warn?.(s,"Error setting database",ae),e.send((0,it.encode)([Hd])),Vr(1008,ae.message);return}jf()}break}case vV:{de.debug?.(s,"Received table definitions for",C.map(ae=>ae.table));for(let ae of C){let ie=M[2];ae.database=ie;let re;if(hu(ie)){if(u==="system")De[ie]?.[ae.table]||(re=y(ae,De[ie]?.[ae.table]));else{if(ie!=="data"&&!De[ie]){de.warn?.("Database not found",ie);return}re=y(ae,De[ie]?.[ae.table])}f||(f=re?.auditStore),E||(E=at()?.[ie])}}break}case Hd:Vr();break;case OC:try{let ae=r?.replicates||r?.subscribers||r?.name;de.debug?.("Received operation request",C,"from",g),server.operation(C,{user:r},!ae).then(ie=>{de.debug?.("Requested request from finished",g,ie),Array.isArray(ie)&&(ie={results:ie}),ie.requestId=C.requestId,e.send((0,it.encode)([JS,ie]))},ie=>{de.debug?.("Failed requested operation from",g,ie),e.send((0,it.encode)([JS,{requestId:C.requestId,error:IC(ie)}]))})}catch(ae){e.send((0,it.encode)([JS,{requestId:C.requestId,error:IC(ae)}]))}break;case JS:let{resolve:G,reject:te}=b.get(C.requestId);de.debug?.("Received completed operation request",g,C),C.error?te(new Error(C.error)):G(C),b.delete(C.requestId);break;case wC:let X=M[3];if(!E){u?de.error?.(s,"No database found for",u):de.error?.(s,"Database name never received"),Vr();return}let $=E[X];$=y({table:X,database:u,attributes:C.attributes,schemaDefined:C.schemaDefined},$),Uc[B]={name:X,decoder:new it.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:C.typedStructs,structures:C.structures}),getEntry(ae){return $.primaryStore.getEntry(ae)},rootStore:$.primaryStore.rootStore};break;case OV:zf=f?z$(C,f):new Map,Vf=M[2],de.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${Vf}`);break;case PV:let Le=B;WE[Le]=C;break;case MV:Ht()[WV]=C,de.trace?.(s,"received and broadcasting committed update",C),Ht().buffer.notify();break;case DV:R=C,h.send({type:"end_txn",localTime:R,remoteNodeIds:S});break;case XS:{let ae=M[1],{fileId:ie,size:re,finished:ne,error:_e}=ae,me=Ie.get(ie);de.debug?.("Received blob",ie,"has stream",!!me,"connectedToBlob",!!me?.connectedToBlob,"length",M[2].length,"finished",ne),me||(me=new CC.PassThrough,me.expectedSize=re,Ie.set(ie,me)),me.lastChunk=Date.now();let he=M[2];qe(he.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{ne?(_e?(me.on("error",()=>{}),me.destroy(new Error("Blob error: "+_e+" for record "+(me.recordId??"unknown")+" from "+remote_node_name))):me.end(he),me.connectedToBlob&&Ie.delete(ie)):me.write(he)}catch(Ve){de.error?.(`Error receiving blob for ${me.recordId} from ${g} and streaming to storage`,Ve),Ie.delete(ie)}break}case LV:{let ae=C,ie;try{let re=M[3],ne=qt[B]||(qt[B]=E[M[4]]);if(!ne)return de.warn?.("Unknown table id trying to handle record request",B);let _e=ne.primaryStore.getBinaryFast(Symbol.for("structures")),me=_e?.length??0;if(me>0&&me!==zE){zE=me;let Ve=(0,it.decode)(_e);e.send((0,it.encode)([wC,{typedStructs:Ve.typed,structures:Ve.named},B,ne.tableName]))}let he=ne.primaryStore.getBinaryFast(re);if(he){let Ve=ne.primaryStore.decoder.decode(he,{valueAsBuffer:!0}),we=ct||{};we.version=(0,KV.getLastVersion)(),ct&&ct[Ou]&Pn&&(Ve=Buffer.from(Ve),wm(()=>ne.primaryStore.decoder.decode(he),Ze=>br(Ze,re),ne.primaryStore.rootStore)),ie=(0,it.encode)([QS,ae,{value:Ve,expiresAt:we.expiresAt,version:we.version,residencyId:we.residencyId,nodeId:we.nodeId,user:we.user}])}else ie=(0,it.encode)([QS,ae])}catch(re){ie=(0,it.encode)([QS,ae,{error:re.message}])}e.send(ie);break}case QS:{let{resolve:ae,reject:ie,tableId:re,key:ne}=b.get(M[1]),_e=M[2];if(_e?.error)ie(new Error(_e.error));else if(_e){let me;L_(()=>{let he=Uc[re].decoder.decode(_e.value);_e.value=he,_e.key=ne,ae(_e)||me&&setTimeout(()=>me.forEach(C_),6e4).unref()},f?.rootStore,he=>{let Ve=pu(he,ne);return me||(me=[]),me.push(Ve),Ve})}else ae();b.delete(M[1]);break}case NV:{Rr=C;let ae,ie,re=!1;if(h){if(u!==h.databaseName&&!h.then){de.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(de.debug?.(s,"received subscription request for",u,"at",Rr),!h){let Te;h=new Promise(bt=>{de.debug?.("Waiting for subscription to database "+u),Te=bt}),h.ready=Te,sc.set(u,h)}if(r.name)ie=Kt().subscribe(r.name),ie.then(async Te=>{ae=Te;for await(let bt of ae){let Pt=bt.value;if(!(Pt?.replicates===!0||Pt?.replicates?.receives||Pt?.subscriptions?.some(Ur=>(Ur.database||Ur.schema)===u&&Ur.publish!==!1))){re=!0,e.send((0,it.encode)([Hd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}}},Te=>{de.error?.(s,"Error subscribing to HDB nodes",Te)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,it.encode)([Hd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}if(Mr&&(de.debug?.(s,"stopping previous subscription",u),Mr.emit("close")),Rr.length===0)return;let ne=Rr[0],_e=o(Te=>{if(Te&&(ne.replicateByDefault?!ne.tables.includes(Te.tableName):ne.tables.includes(Te.tableName)))return{table:Te}},"tableToTableEntry"),me={txnTime:0},he,Ve,we=1/0,Ze,vr=o((Te,bt)=>{if(Te.type==="end_txn"){me.txnTime&&(a[i]!==66&&de.error?.("Invalid encoding of message"),So(9),So(q_),K(Ze=bt),Xs()),i=c,me.txnTime=0;return}let Pt=Te.nodeId,Ur=Te.tableId,Lt=Ve[Ur];if(!Lt&&(Lt=Ve[Ur]=_e(h.tableById[Ur]),!Lt))return de.debug?.("Not subscribed to table",Ur);let Rs=Lt.table,Dt=Rs.primaryStore,Zs=Dt.encoder;(Te.extendedType&J_||!Zs.typedStructs)&&(Zs._mergeStructures(Zs.getStructures()),Zs.typedStructs&&(Zs.lastTypedStructuresLength=Zs.typedStructs.length));let _u=he[Pt];if(!(_u&&_u.startTime<bt&&(!_u.endTime||_u.endTime>bt)))return eT&&de.trace?.(s,"skipping replication update",Te.recordId,"to:",g,"from:",Pt,"subscribed:",he),rv();eT&&de.trace?.(s,"sending replication update",Te.recordId,"to:",g,"from:",Pt,"subscribed:",he);let db=Te.version;me.txnTime!==db&&(me.txnTime&&(eT&&de.trace?.(s,"new txn time, sending queued txn",me.txnTime),a[i]!==66&&de.error?.("Invalid encoding of message"),Xs()),me.txnTime=db,i=c,K(db));let qc=Te.residencyId,fb=ba(qc,Rs),QE;if(fb&&!fb.includes(g)){let ei=ba(Te.previousResidencyId,Rs);if(ei&&!ei.includes(g)&&(Te.type==="put"||Te.type==="patch")||Rs.getResidencyById)return rv();let Qf=Te.recordId;de.trace?.(s,"sending invalidation",Qf,g,"from",Pt);let Jf=0;qc&&(Jf|=Qc),Te.previousResidencyId&&(Jf|=Jc);let hb,JE=null;for(let nv in Rs.indices){if(!JE){if(hb=Te.getValue(Dt,!0),!hb)break;JE={}}JE[nv]=hb[nv]}QE=Xc(Te.version,Ur,Qf,null,Pt,Te.user,Te.type==="put"||Te.type==="patch"?"invalidate":Te.type,Zs.encode(JE),Jf,qc,Te.previousResidencyId,Te.expiresAt)}function rv(){return de.trace?.(s,"skipping audit record",Te.recordId),H||(H=setTimeout(()=>{H=null,(Ze||0)+UV/2<we&&(eT&&de.trace?.(s,"sending skipped sequence update",we),e.send((0,it.encode)([DV,we])))},UV).unref()),new Promise(setImmediate)}o(rv,"skipAuditRecord");let mb=Zs.typedStructs,pb=Zs.structures;if((mb?.length!=Lt.typed_length||pb?.length!=Lt.structure_length)&&(Lt.typed_length=mb?.length,Lt.structure_length=pb.length,de.debug?.(s,"send table struct",Lt.typed_length,Lt.structure_length),Lt.sentName||(Lt.sentName=!0),e.send((0,it.encode)([wC,{typedStructs:mb,structures:pb,attributes:Rs.attributes,schemaDefined:Rs.schemaDefined},Ur,Lt.table.tableName]))),qc&&!YE[qc]&&(e.send((0,it.encode)([PV,fb,qc])),YE[qc]=!0),QE)So(QE.length),Hc(QE);else{let ei=Te.encoded;Te.extendedType&Pn&&wm(()=>Te.getValue(Dt),Jf=>br(Jf,Te.recordId),Dt.rootStore);let Qf=ei[0]===66?8:0;So(ei.length-Qf),Hc(ei,Qf),de.trace?.("wrote record",Te.recordId,"length:",ei.length)}return e._socket.writableNeedDrain?new Promise(ei=>{de.debug?.(`Waiting for remote node ${g} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",ei)}):ke>Yf?new Promise(ei=>{yr=ei}):new Promise(setImmediate)},"sendAuditRecord"),Xs=o(()=>{c-i>8?(e.send(a.subarray(i,c)),de.debug?.(s,"Sent message, size:",c-i),u!=="system"&&qe(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):de.debug?.(s,"skipping empty transaction")},"sendQueuedData");Mr=new MC.EventEmitter,Mr.once("close",()=>{re=!0,ae?.end()});for(let{startTime:Te}of Rr)Te<we&&(we=Te);(ie||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,Ve=h.tableById.map(_e),he=[];for(let{name:bt,startTime:Pt,endTime:Ur}of Rr){let Lt=GS(bt,f);de.debug?.("subscription to",bt,"using local id",Lt,"starting",Pt),he[Lt]={startTime:Pt,endTime:Ur}}Eu(u),Zt||(Zt=Nl(bt=>{bt.databaseName===u&&Eu(u)}),$f=vp(bt=>{bt===u&&(e.send((0,it.encode)([Hd])),Vr())}),e.on("close",()=>{Zt?.remove(),$f?.remove()})),e.send((0,it.encode)([OV,Jp(h.auditStore),Rr.map(({name:bt})=>bt)]));let Te=!0;do{isFinite(we)||(de.warn?.("Invalid sequence id "+we),Vr(1008,"Invalid sequence id"+we));let bt;if(Te&&!re&&(Te=!1,we===0)){de.info?.("Replicating all tables to",g);let Pt=we,Ur=sT(f);for(let Lt in E){if(!_e(Lt))continue;let Rs=E[Lt];for(let Dt of Rs.primaryStore.getRange({snapshot:!1,versions:!0})){if(re)return;if(Dt.localTime>=we){de.trace?.(s,"Copying record from",u,Lt,Dt.key,Dt.localTime),Pt=Math.max(Dt.localTime,Pt),bt=!0,Ht()[ih]=1;let Zs=Xc(Dt.version,Rs.tableId,Dt.key,null,Ur,null,"put",wm(()=>Rs.primaryStore.encoder.encode(Dt.value),_u=>br(_u,Dt.key)),Dt.metadataFlags&-256,Dt.residencyId,null,Dt.expiresAt);await vr({recordId:Dt.key,tableId:Rs.tableId,type:"put",getValue(){return Dt.value},encoded:Zs,version:Dt.version,residencyId:Dt.residencyId,nodeId:Ur,extendedType:Dt.metadataFlags},Dt.localTime)}}}bt&&vr({type:"end_txn"},we),Ht()[ih]=0,we=Pt}for(let{key:Pt,value:Ur}of f.getRange({start:we||1,exclusiveStart:!0,snapshot:!1})){if(re)return;let Lt=Mt(Ur);de.debug?.("sending audit record",new Date(Pt)),Ht()[ih]=Pt,we=Pt,await vr(Lt,Pt),Mr.startTime=Pt,bt=!0}bt&&vr({type:"end_txn"},we),Ht()[ih]=0,await f0(f)}while(!re)}).catch(Te=>{de.error?.(s,"Error handling subscription to node",Te),Vr(1008,"Error handling subscription to node")});break}}return}A.position=8;let I=!0,N,P;do{Ht();let M=A.readInt();if(M===9&&A.getUint8(A.position)==q_){A.position++,R=P=A.readFloat64(),m[PC]=R,m[LC]=Date.now(),m[DC]=zV,de.trace?.("received remote sequence update",R,u);break}let q=A.position,C=Mt(T,q,q+M),B=Uc[C.tableId];B||de.error?.(`No table found with an id of ${C.tableId}`);let G;C.residencyId&&(G=WE[C.residencyId],de.trace?.(s,"received residency list",G,C.type,C.recordId));try{let te=C.recordId;L_(()=>{N={table:B.name,id:C.recordId,type:C.type,nodeId:zf.get(C.nodeId),residencyList:G,timestamp:C.version,value:C.getValue(B),user:C.user,beginTxn:I,expiresAt:C.expiresAt}},f?.rootStore,X=>pu(X,te))}catch(te){throw te.message+="typed structures for current decoder"+JSON.stringify(B.decoder.typedStructs),te}I=!1,de.trace?.(s,"received replication message",C.type,"id",N.id,"version",new Date(C.version),"nodeId",N.nodeId),m[PC]=C.version,m[LC]=Date.now(),m[DC]=jV,h.send(N),A.position=q+M}while(A.position<T.byteLength);Oe++,u!=="system"&&qe(T.byteLength,"bytes-received",`${g}.${u}.${N?.table||"unknown_table"}`,"replication","ingest"),Oe>lb&&!Wf&&(Wf=!0,e.pause(),de.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),h.send({type:"end_txn",localTime:R,remoteNodeIds:S,async onCommit(){if(N){let M=Date.now()-N.timestamp;u!=="system"&&qe(M,"replication-latency",g+"."+u+"."+N.table,N.type,"ingest")}Oe--,Wf&&(Wf=!1,e.resume(),de.debug?.(`Replication resuming ${g}`)),$e.length>0&&await Promise.all($e),de.trace?.("All blobs finished"),!L&&P&&(de.trace?.(s,"queuing confirmation of a commit at",P),setTimeout(()=>{e.send((0,it.encode)([MV,L])),de.trace?.(s,"sent confirmation of a commit at",L),L=null},Ade)),L=P,de.debug?.("last sequence committed",new Date(P),u)}})}catch(A){de.error?.(s,"Error handling incoming replication message",A)}}o(xc,"onWSMessage"),e.on("ping",Xt),e.on("pong",()=>{if(t.connection){let T=performance.now()-j;t.connection.latency=T,Ht()&&(m[rT]=T),t.isSubscriptionConnection&&Ml({name:g,database:u,url:t.url,latency:T})}j=null}),e.on("close",(T,A)=>{clearInterval(O),clearTimeout(x),clearInterval(F),Mr&&Mr.emit("close"),go&&go.end();for(let[I,{reject:N}]of b)N(new Error(`Connection closed ${A?.toString()} ${T}`));de.debug?.(s,"closed",T,A?.toString())});function Vr(T,A){try{e.isFinished=!0,de.debug?.(s,"closing",g,u,T,A),e.close(T,A),t.connection?.emit("finished")}catch(I){de.error?.(s,"Error closing connection",I)}}o(Vr,"close");let Ra=new Set;async function br(T,A){let I=O_(T);if(Ra.has(I)){de.debug?.("Blob already being sent",I);return}Ra.add(I);try{let N;ke++;for await(let P of T.stream())N&&(de.debug?.("Sending blob chunk",I,"length",N.length),e.send((0,it.encode)([XS,{fileId:I,size:T.size},N]))),N=P,e._socket.writableNeedDrain&&(de.debug?.("draining",I),await new Promise(M=>e._socket.once("drain",M)),de.debug?.("drained",I)),qe(P.length,"bytes-sent",`${g}.${u}`,"replication","blob");de.debug?.("Sending final blob chunk",I,"length",N.length),e.send((0,it.encode)([XS,{fileId:I,size:T.size,finished:!0},N]))}catch(N){de.warn?.("Error sending blob",N,"blob id",I,"for record",A),e.send((0,it.encode)([XS,{fileId:I,finished:!0,error:IC(N)},Buffer.alloc(0)]))}finally{Ra.delete(I),ke--,ke<Yf&&yr?.()}}o(br,"sendBlobs");function pu(T,A){let I=O_(T),N=Ie.get(I);de.debug?.("Received transaction with blob",I,"has stream",!!N,"ended",!!N?.writableEnded),N?N.writableEnded&&Ie.delete(I):(N=new CC.PassThrough,Ie.set(I,N)),N.connectedToBlob=!0,N.lastChunk=Date.now(),N.recordId=A,T.size===void 0&&N.expectedSize&&(T.size=N.expectedSize);let P=N.blob??createBlob(N,T);N.blob=P;let M=Po(()=>Am(P).saving,h.auditStore?.rootStore);return M&&(M.blobId=I,$e.push(M),M.finally(()=>{de.debug?.(`Finished receiving blob stream ${I}`),$e.splice($e.indexOf(M),1)})),P}o(pu,"receiveBlobs");function jf(){if(p||(p=!0,t.connection?.on("subscriptions-updated",jf)),!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 T=new Map;f||(f=h?.auditStore);try{for(let N of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let P of N.value.nodes||[])P.lastTxnTime>(T.get(P.id)??0)&&T.set(P.id,P.lastTxnTime)}catch(N){if(!N.message.includes("Can not re"))throw N}let A=t.connection?.nodeSubscriptions?.[0];S=[];let I=t.connection?.nodeSubscriptions.map((N,P)=>{let M=[],{replicateByDefault:q}=N;if(N.subscriptions){for(let te of N.subscriptions)if(te.subscribe&&(te.schema||te.database)===u){let X=te.table;E?.[X]?.replicate!==!1&&M.push(X)}q=!1}else for(let te in E)(q?E[te].replicate===!1:E[te].replicate)&&M.push(te);let C=f&&GS(N.name,f),B=h?.dbisDB?.get([Symbol.for("seq"),C])??1,G=Math.max(B?.seqId??1,(typeof N.startTime=="string"?new Date(N.startTime).getTime():N.startTime)??1);if(de.debug?.("Starting time recorded in db",N.name,C,u,B?.seqId,"start time:",G,new Date(G)),A!==N){let te=f&&GS(A.name,f),X=h?.dbisDB?.get([Symbol.for("seq"),te])??1;for(let $ of X?.nodes||[])$.name===N.name&&(G=$.seqId,de.debug?.("Using sequence id from proxy node",A.name,G))}if(C===void 0?de.warn("Starting subscription request from node",N,"but no node id found"):S.push(C),T.get(C)>G&&(G=T.get(C),de.debug?.("Updating start time from more recent txn recorded",A.name,G)),G===1&&ZS)try{new URL(ZS).hostname===N.name?(de.warn?.(`Requesting full copy of database ${u} from ${ZS}`),G=0):G=Date.now()-6e4}catch(te){de.error?.("Error parsing leader URL",ZS,te)}return de.trace?.(s,"defining subscription request",N.name,u,new Date(G)),{name:N.name,replicateByDefault:q,tables:M,startTime:G,endTime:N.endTime}});if(I)if(de.debug?.(s,"sending subscription request",I,h?.dbisDB?.path),clearTimeout(W),I.length>0)e.send((0,it.encode)([NV,I]));else{let N=o(()=>{let P=performance.now();W=setTimeout(()=>{fe<=P?Vr(1008,"Connection has no subscriptions and is no longer used"):N()},Q).unref()},"scheduleClose");N()}}o(jf,"sendSubscriptionRequestUpdate");function ba(T,A){if(!T)return;let I=Kf[T];return I||(I=A.getResidencyRecord(T),Kf[T]=I),I}o(ba,"getResidence");function hu(T){return!(nc&&nc!="*"&&!nc[T]&&!nc.includes?.(T)&&!nc.some?.(A=>A.name===T))}o(hu,"checkDatabaseAccess");function Bc(T){if(h=h||d.get(T),!hu(T))throw new Error(`Access to database "${T}" is not permitted`);h||de.warn?.(`No database named "${T}" was declared and registered`),f=h?.auditStore,E||(E=at()?.[T]);let A=st();if(A===g)throw A?new Error("Should not connect to self",A):new Error("Node name not defined");return Fc(A,T),!0}o(Bc,"setDatabase");function Fc(T,A){let I=at()?.[A],N=[];for(let P in I){let M=I[P];N.push({table:P,schemaDefined:M.schemaDefined,attributes:M.attributes.map(q=>({name:q.name,type:q.type,isPrimaryKey:q.isPrimaryKey}))})}de.trace?.("Sending database info for node",T,"database name",A),e.send((0,it.encode)([CV,T,A,N]))}o(Fc,"sendNodeDBName");function Eu(T){let A=at()?.[T],I=[];for(let N in A){if(Rr&&!Rr.some(M=>M.replicateByDefault?!M.tables.includes(N):M.tables.includes(N)))continue;let P=A[N];I.push({table:N,schemaDefined:P.schemaDefined,attributes:P.attributes.map(M=>({name:M.name,type:M.type,isPrimaryKey:M.isPrimaryKey}))})}e.send((0,it.encode)([vV,I,T]))}o(Eu,"sendDBSchema"),F=setInterval(()=>{for(let[T,A]of Ie)A.lastChunk+Re<Date.now()&&(de.warn?.(`Timeout waiting for blob stream to finish ${T} for record ${A.recordId??"unknown"} from ${g}`),Ie.delete(T),A.end())},Re).unref();let jE=1,kc=[];return{end(){go&&go.end(),Mr&&Mr.emit("close")},getRecord(T){let A=jE++;return new Promise((I,N)=>{let P=[LV,A,T.table.tableId,T.id];kc[T.table.tableId]||(P.push(T.table.tableName),kc[T.table.tableId]=!0),e.send((0,it.encode)(P)),fe=performance.now(),b.set(A,{tableId:T.table.tableId,key:T.id,resolve(M){let{table:q,entry:C}=T;if(I(M),M)return q._recordRelocate(C,M)},reject:N})})},sendOperation(T){let A=jE++;return T.requestId=A,e.send((0,it.encode)([OC,T])),new Promise((I,N)=>{b.set(A,{resolve:I,reject:N})})}};function So(T){_(5),T<128?a[c++]=T:T<16384?(l.setUint16(c,T|32768),c+=2):T<1056964608?(l.setUint32(c,T|3221225472),c+=4):(a[c]=255,l.setUint32(c+1,T),c+=5)}function Hc(T,A=0,I=T.length){let N=I-A;_(N),T.copy(a,c,A,I),c+=N}function K(T){_(8),l.setFloat64(c,T),c+=8}function _(T){if(T+16>a.length-c){let A=Buffer.allocUnsafeSlow(c+T-i+65536>>10<<11);a.copy(A,0,i,c),c=c-i,i=0,a=A,l=new DataView(a.buffer,0,a.length)}}function y(T,A){let I=T.database??"data";A||(A={});let N=A.schemaDefined,P=!1,M=T.schemaDefined,q=A.attributes||[];for(let C=0;C<T.attributes?.length;C++){let B=T.attributes[C],G=q.find(te=>te.name===B.name);(!G||G.type!==B.type)&&(N?de.error?.(`Schema for '${u}.${T.table}' is defined locally, but attribute '${B.name}: ${B.type}' from '${g}' does not match local attribute ${G?"'"+G.name+": "+G.type+"'":"which does not exist"}`):(P=!0,M||(B.indexed=!0),G?q[q.indexOf(G)]=B:q.push(B)))}return P?(de.debug?.("(Re)creating",T),Xe({table:T.table,database:T.database,schemaDefined:T.schemaDefined,attributes:q,...A})):A}}var FV,it,kV,HV,qV,MC,GV,$V,xl,VV,CC,KV,YV,Rde,IC,de,NV,CV,OV,Hd,PV,wC,LV,QS,OC,JS,DV,MV,vV,XS,WV,PC,LC,ih,rT,DC,zV,jV,bde,ZS,vC,sc,eT,UV,Ade,xV,NC,tT,BV,qd,UC=oe(()=>{Ne();Ro();uC();VA();ls();FV=w(le());k();Zc();it=require("msgpackr"),kV=require("ws"),HV=require("worker_threads"),qV=w(z());rh();MC=require("events"),GV=w(ds()),$V=w(require("node:tls"));Ud();xl=w(require("node:process")),VV=require("node:net");jn();As();CC=require("node:stream"),KV=require("lmdb"),YV=w(require("minimist")),{forComponent:Rde,errorToString:IC}=qV.default,de=Rde("replication").conditional,NV=129,CV=140,OV=141,Hd=142,PV=130,wC=132,LV=133,QS=134,OC=136,JS=137,DV=143,MV=144,vV=145,XS=146,WV=0,PC=1,LC=2,ih=3,rT=4,DC=5,zV=0,jV=1,bde=(0,YV.default)(xl.argv),ZS=bde.HDB_LEADER_URL??xl.env.HDB_LEADER_URL,vC=new Map,sc=new Map,eT=!0,UV=300,Ade=2,xV=3e4;o(nT,"createWebSocket");BV=500,qd=class extends MC.EventEmitter{static{o(this,"NodeReplicationConnection")}socket;startTime;retryTime=BV;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??Ei(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await nT(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;de.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${xl.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),de[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=BV,this.nodeSubscriptions&&Ml({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=oh(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(de.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),n.isHandled=!0):n.code!=="ECONNREFUSED"&&(n.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?de.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):de.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&Bd({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();de.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};o(oh,"replicateOverWS")});function ah(e){return e===XV||e===Ide}function wde(e){return e===ZV||e===e1}function xC(e){return e===XV?ZV:e1}function Nde(){if(JV)return;JV=!0;let e=Bl.CryptoEngine.prototype,t=Bl.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 ah(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return ah(s)?{name:xC(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return wde(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=Bl.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(ah(i)){let a=xC(i);return s.importKey("spki",this.subjectPublicKeyInfo.toSchema().toBER(!1),a,!0,["verify"])}return r.getPublicKey.call(this,...n)},t.verify=async function(...n){let[s]=n;if(ah(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),a=s.toSchema().toBER(!1),c=new ch.X509Certificate(Buffer.from(i)),l=new ch.X509Certificate(Buffer.from(a));return c.verify(l.publicKey)}catch{return!1}return r.certificateVerify.call(this,...n)},r.verifyWithPublicKey&&(e.verifyWithPublicKey=async function(...n){let[s,i,a]=n,c=a.algorithm.algorithmId;if(ah(c)){let l=xC(c);try{let u=this.crypto?.subtle||this.subtle||Bl.getCrypto(!0)?.subtle||ch.webcrypto?.subtle;if(!u)throw new Error("No crypto.subtle available");let d=await u.importKey("spki",a.toSchema().toBER(!1),l,!1,["verify"]),f=i.valueBlock.valueHexView;return i.valueBlock.unusedBits>0&&(f=f.slice(0,f.length-1)),await u.verify(l,d,f,s)}catch{return!1}}return r.verifyWithPublicKey.call(this,...n)})}var Bl,ch,XV,Ide,ZV,e1,JV,t1=oe(()=>{Bl=w(require("pkijs")),ch=require("node:crypto"),XV="1.3.101.112",Ide="1.3.101.113",ZV="Ed25519",e1="Ed448",JV=!1;o(ah,"isEd25519OrEd448");o(wde,"isEdDSAAlgorithmName");o(xC,"getEdDSAAlgorithmName");o(Nde,"applyEd25519Patch");Nde()});function Cde(){return iT||(iT=Xe({table:"hdb_certificate_cache",database:"system",attributes:[{name:"certificate_id",isPrimaryKey:!0},{name:"status"},{name:"reason"},{name:"checked_at"},{name:"expiresAt",expiresAt:!0,indexed:!0},{name:"method"}]}),iT.sourcedFrom(BC)),iT}function Ode(e){if(Wt.trace?.("getCertificateVerificationConfig called with:",{mtlsConfig:e}),!e)return!1;if(e===!0)return Wt.debug?.("mTLS enabled with default certificate verification"),{};let t=e.certificateVerification;return Wt.trace?.("Certificate verification config:",{verificationConfig:t}),t==null?{}:t===!1?!1:t===!0?{}:t}async function Gd(e,t){Wt.debug?.("verifyCertificate called for:",e.subject?.CN||"unknown");let r=Ode(t);if(r===!1)return Wt.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=Dde(e);return Wt.trace?.("Certificate chain length:",n.length),n.length===1&&!n[0].issuer?(Wt.debug?.("Certificate without issuer - cannot perform OCSP check"),{valid:!0,status:"no-issuer-cert",method:"disabled"}):n.length<2||!n[0].issuer?(Wt.debug?.("Certificate chain too short for revocation checking"),{valid:!0,status:"insufficient-chain",method:"disabled"}):Pde(n[0].cert,n[0].issuer,r)}async function Pde(e,t,r){Wt.debug?.("verifyOCSP called");try{Buffer.isBuffer(e)&&(e=r1(e,"CERTIFICATE")),Buffer.isBuffer(t)&&(t=r1(t,"CERTIFICATE"));let n={certPem:e,issuerPem:t,method:"ocsp"},i=`ocsp:${(0,s1.createHash)("sha256").update(JSON.stringify(n)).digest("hex")}`;Wt.trace?.("OCSP cache key:",i);let c=await Cde().get(i,{certPem:e,issuerPem:t,config:r||{}});if(!c)return(r?.failureMode??lh.failureMode)==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"ocsp"}:(Wt.warn?.("OCSP cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"});let l=c,u=c.wasLoadedFromSource?.();return Wt.trace?.(`OCSP ${u?"source fetch":"cache hit"} for certificate`),{valid:l.status==="good",status:l.status,cached:!u,method:l.method||"ocsp"}}catch(n){return Wt.error?.("OCSP verification error:",n),(r?.failureMode??lh.failureMode)==="fail-closed"?{valid:!1,status:"error",error:n.message,method:"ocsp"}:(Wt.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"})}}async function Lde(e,t,r){Wt.trace?.("Calling getCertStatus with timeout:",r);let n=await(0,n1.getCertStatus)(e,{ca:t,timeout:r});return Wt.debug?.("OCSP response from easy-ocsp:",{status:n.status,revocationReason:n.revocationReason,responseData:n}),n.status==="good"?{status:"good"}:n.status==="revoked"?{status:"revoked",reason:n.revocationReason?.toString()||"unspecified"}:{status:"unknown",reason:"unknown-status"}}function r1(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(`
|
|
20
|
-
`)}function Dde(e){let t=[],r=e;for(;r?.raw;){let n={cert:r.raw};if(r.issuerCertificate&&r.issuerCertificate!==r&&r.issuerCertificate.raw&&(n.issuer=r.issuerCertificate.raw),t.push(n),r.issuerCertificate&&r.issuerCertificate!==r)r=r.issuerCertificate;else break}return t}var n1,s1,i1,Wt,BC,lh,iT,oT=oe(()=>{t1();n1=require("easy-ocsp"),s1=require("node:crypto"),i1=w(zn());Ne();va();Wt=(0,i1.loggerWithTag)("cert-verification"),BC=class extends Fr{static{o(this,"CertificateVerificationSource")}async get(t){Wt.debug?.("CertificateVerificationSource.get called for:",t);let r=this.getContext(),n=r?.requestContext;if(!n||!n.certPem||!n.issuerPem)throw new Error(`No certificate data provided for cache key: ${t}`);let{certPem:s,issuerPem:i,config:a}=n;Wt.trace?.("Performing OCSP check with config:",a);try{let c=a?.timeout??lh.timeout,l=await Promise.race([Lde(s,i,c),new Promise((d,f)=>setTimeout(()=>f(new Error("OCSP timeout")),c))]);Wt.debug?.("OCSP check result:",l);let u=a?.cacheTtl??lh.cacheTtl;return r&&(r.expiresAt=Date.now()+u),{certificate_id:t,status:l.status,reason:l.reason,checked_at:Date.now(),expiresAt:Date.now()+u,method:"ocsp"}}catch(c){return Wt.error?.("OCSP verification error:",c),(a?.failureMode??lh.failureMode)==="fail-closed"?(r&&(r.expiresAt=Date.now()+3e5),{certificate_id:t,status:"unknown",reason:c.message,checked_at:Date.now(),expiresAt:Date.now()+3e5,method:"ocsp"}):(Wt.warn?.("OCSP check failed, allowing connection (fail-open mode)"),null)}}},lh={timeout:5e3,cacheTtl:36e5,failureMode:"fail-open"};o(Cde,"getCertificateCacheTable");o(Ode,"getCertificateVerificationConfig");o(Gd,"verifyCertificate");o(Pde,"verifyOCSP");o(Lde,"performOCSPCheck");o(r1,"bufferToPem");o(Dde,"extractCertificateChain")});var Yo={};be(Yo,{clearThisNodeName:()=>qde,disableReplication:()=>xde,enabledDatabases:()=>nc,forEachReplicatedDatabase:()=>Xa,getThisNodeId:()=>sT,getThisNodeName:()=>st,getThisNodeUrl:()=>Za,hostnameToUrl:()=>uT,lastTimeInAuditStore:()=>Xp,monitorNodeCAs:()=>p1,replicateOperation:()=>$de,replicationCertificateAuthorities:()=>Wo,sendOperationToNode:()=>uh,servers:()=>vde,setReplicator:()=>E1,start:()=>Ude,startOnMainThread:()=>fC,subscribeToNode:()=>th,unsubscribeFromNode:()=>KS,urlToNodeName:()=>Ei});function Ude(e){if(!e.port&&!e.securePort&&(e.port=Bs.default.get(U.OPERATIONSAPI_NETWORK_PORT),e.securePort=Bs.default.get(U.OPERATIONSAPI_NETWORK_SECUREPORT)),!st())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let s of eh(e))t.set(Ei(s.url),s);Bde(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=Me.ws(async(s,i,a,c)=>{if(yt.debug("Incoming WS connection received "+i.url),i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,a);s._socket.unref(),oh(s,e,a.then(()=>i?.user)),s.on("error",l=>{l.code!=="ECONNREFUSED"&&yt.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,Me.http(async(s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){yt.debug("Incoming replication WS connection received, authorized: "+s.authorized),!s.authorized&&s._nodeRequest.socket.authorizationError&&yt.error(`Incoming client connection from ${s.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,s._nodeRequest.socket.authorizationError);let a=Kt().primaryStore;if(s.authorized&&s.peerCertificate.subjectaltname){let c=(0,f1.getHostnamesFromCertificate)(s.peerCertificate),l;for(let u of c)if(l=u&&(a.get(u)||t.get(u)),l)break;if(l){let u=await Gd(s.peerCertificate,e);if(!u.valid){yt.warn("Certificate verification failed:",u.status,"for node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}if(l?.revoked_certificates?.includes(s.peerCertificate.serialNumber)){yt.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l}else yt.warn(`No node found for certificate common name/SANs: ${c}, available nodes are ${Array.from(a.getRange({}).filter(({value:u})=>u).map(({key:u})=>u)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let c=a.get(s.ip)||t.get(s.ip);c?s.user=c:yt.warn(`No node found for IP address ${s.ip}, available nodes are ${Array.from(new Set([...a.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return i(s)},e);let n=[];for(let s of r)if(s.secureContexts){let i=o(()=>{let a=new Set(s.secureContexts.values());s.defaultContext&&a.add(s.defaultContext);for(let c of a)try{let l=Array.from(Wo);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=lT.createSecureContext(u)}catch(l){yt.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),Bs.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1&&i()}p1(()=>{for(let s of n)s()})}function p1(e){let t=0;vd(r=>{r?.ca&&(Wo.add(r.ca),Wo.size!==t&&(t=Wo.size,e?.()))})}function xde(e=!0){m1=e}function Bde(e){m1||(at(),nc=e.databases,Xa(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||sc;for(let[s,i]of cT){let a=i.get(r);a&&(a.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];E1(r,s,e),vC.get(s)?.forEach(i=>i(s))}}))}function E1(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 h1 extends Fr{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||sc,a=i.get(e),c=a?.tableById||[];c[t.tableId]=t;let l=a?.ready;if(yt.trace("Setting up replicator subscription to database",e),!a?.auditStore)return this.subscription=a=new Wn,i.set(e,a),a.tableById=c,a.auditStore=t.auditStore,a.dbisDB=t.dbisDB,a.databaseName=e,l&&l(a),a;this.subscription=a}static subscribeOnThisThread(i,a){return!0}static async load(i){if(i){let a=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),a]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let h of c){if(u.has(h)||h===Me.hostname)continue;let E=kde(h,h1.subscription,e);if(E?.isConnected){let g=Md(t.auditStore,e,h)[rT];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new u1.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:Mde++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;yt.warn("Error in load from node",Fl,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function Fde(e,t,r,n,s){let i=cT.get(e);i||cT.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new qd(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function kde(e,t,r){let n=o1.get(Fl);n||(n=new Map,o1.set(Fl,n));let s=n.get(r);if(s)return s;let i=Kt().primaryStore.get(e);return i?.url&&(s=new qd(i.url,t,r,Fl,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function uh(e,t,r){r||(r={}),r.serverName=e.name;let n=await nT(e.url,r),s=oh(n,{},{});return new Promise((i,a)=>{n.on("open",()=>{yt.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{a(c)}),n.on("close",c=>{yt.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function th(e){try{d1.isMainThread&&yt.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=sc.get(e.database);if(!t){let n;t=new Promise(s=>{yt.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,sc.set(e.database,t)}let r=Fde(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>Zp(n,e.database)),e.replicateByDefault)}catch(t){yt.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function KS({name:e,url:t,database:r}){yt.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(Kt().primaryStore.getRange({})));let n=cT.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function Hde(){if(FC!==void 0)return FC;let e=Bs.default.get(U.OPERATIONSAPI_TLS_CERTIFICATE)||Bs.default.get(U.TLS_CERTIFICATE);if(e)return FC=new c1.X509Certificate((0,l1.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function st(){return Fl||(Fl=Bs.default.get("replication_hostname")??Ei(Bs.default.get("replication_url"))??Hde()??a1("operationsapi_network_secureport")??a1("operationsapi_network_port")??"127.0.0.1")}function qde(){Fl=void 0}function a1(e){let t=Bs.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function aT(e){let t=Bs.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function sT(e){return Jp(e)?.[st()]}function Za(){let e=Bs.default.get("replication_url");return e||uT(st())}function uT(e){let t=aT("replication_port");if(t)return`ws://${e}:${t}`;if(t=aT("replication_secureport"),t)return`wss://${e}:${t}`;if(t=aT("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=aT("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Ei(e){if(e)return new URL(e).hostname}function Xa(e,t){for(let n of Object.getOwnPropertyNames(De))r(n);return vp(n=>{r(n)}),Nl((n,s)=>{r(n.databaseName)});function r(n){let s=De[n];yt.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):Gde(n)&&t(s,n,!1)}o(r,"forDatabase")}function Gde(e){let t=De[e];for(let r in t)if(t[r].replicate)return!0}function Xp(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function $de(e){let t={message:""};if(e.replicated){e.replicated=!1,yt.trace?.("Replicating operation",e.operation,"to nodes",Me.nodes.map(n=>n.name));let r=await Promise.allSettled(Me.nodes.map(n=>uh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Me.nodes[s]?.name,i})}return t}var Bs,yt,c1,l1,lT,u1,d1,f1,m1,Mde,vde,Wo,nc,cT,o1,FC,Fl,ls=oe(()=>{Ne();va();yu();UC();xr();Bs=w(le()),yt=w(z()),c1=require("crypto");oT();l1=require("fs");rh();Ud();k();uC();lT=w(require("node:tls")),u1=w(Ee()),d1=require("worker_threads"),f1=w(ds()),Mde=1,vde=[],Wo=Bs.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1?new Set(lT.rootCertificates):new Set;o(Ude,"start");o(p1,"monitorNodeCAs");o(xde,"disableReplication");o(Bde,"assignReplicationSource");o(E1,"setReplicator");cT=new Map;o(Fde,"getSubscriptionConnection");o1=new Map;o(kde,"getRetrievalConnectionByName");o(uh,"sendOperationToNode");o(th,"subscribeToNode");o(KS,"unsubscribeFromNode");o(Hde,"getCommonNameFromCert");o(st,"getThisNodeName");o(qde,"clearThisNodeName");Object.defineProperty(Me,"hostname",{get(){return st()}});o(a1,"getHostFromListeningPort");o(aT,"getPortFromListeningPort");o(sT,"getThisNodeId");Me.replication={getThisNodeId:sT,exportIdMapping:Jp};o(Za,"getThisNodeUrl");o(uT,"hostnameToUrl");o(Ei,"urlToNodeName");o(Xa,"forEachReplicatedDatabase");o(Gde,"hasExplicitlyReplicatedTable");o(Xp,"lastTimeInAuditStore");o($de,"replicateOperation")});var mh=v((D0e,y1)=>{"use strict";var $d=_$(),{validateBySchema:dh}=ot(),{commonValidators:Vd,schemaRegex:kC}=ki(),pr=require("joi"),Vde=z(),Kde=require("uuid").v4,mT=xo(),Kd=(k(),D(Y)),Yde=require("util"),ic=rs(),{handleHDBError:zo,hdbErrors:Wde,ClientError:fh}=Ee(),{HDB_ERROR_MSGS:dT,HTTP_STATUS_CODES:jo}=Wde,{SchemaEventMsg:pT}=Zn(),_1=xt(),{getDatabases:zde}=(Ne(),D(ft)),{transformReq:Yd}=ce(),{replicateOperation:g1}=(ls(),D(Yo)),fT=pr.string().min(1).max(Vd.schema_length.maximum).pattern(kC).messages({"string.pattern.base":"{:#label} "+Vd.schema_format.message}),jde=pr.string().min(1).max(Vd.schema_length.maximum).pattern(kC).messages({"string.pattern.base":"{:#label} "+Vd.schema_format.message}).required(),Qde=pr.string().min(1).max(Vd.schema_length.maximum).pattern(kC).messages({"string.pattern.base":"{:#label} "+Vd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();y1.exports={createSchema:Jde,createSchemaStructure:S1,createTable:Xde,createTableStructure:T1,createAttribute:nfe,dropSchema:Zde,dropTable:efe,dropAttribute:tfe,getBackup:sfe};async function Jde(e){let t=await S1(e);return mT.signalSchemaChange(new pT(process.pid,e.operation,e.schema)),t}o(Jde,"createSchema");async function S1(e){let t=dh(e,pr.object({database:fT,schema:fT}));if(t)throw new fh(t.message);if(Yd(e),!await $d.checkSchemaExists(e.schema))throw zo(new Error,dT.SCHEMA_EXISTS_ERR(e.schema),jo.BAD_REQUEST,Kd.LOG_LEVELS.ERROR,dT.SCHEMA_EXISTS_ERR(e.schema),!0);return await ic.createSchema(e),`database '${e.schema}' successfully created`}o(S1,"createSchemaStructure");async function Xde(e){return Yd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await T1(e)}o(Xde,"createTable");async function T1(e){let t=dh(e,pr.object({database:fT,schema:fT,table:jde,residence:pr.array().items(pr.string().min(1)).optional(),hash_attribute:Qde}));if(t)throw new fh(t.message);if(!await $d.checkSchemaTableExists(e.schema,e.table))throw zo(new Error,dT.TABLE_EXISTS_ERR(e.schema,e.table),jo.BAD_REQUEST,Kd.LOG_LEVELS.ERROR,dT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Kde(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ic.createTable(n,e);else throw zo(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",jo.BAD_REQUEST);else await ic.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(T1,"createTableStructure");async function Zde(e){let t=dh(e,pr.object({database:pr.string(),schema:pr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new fh(t.message);Yd(e);let r=await $d.checkSchemaExists(e.schema);if(r)throw zo(new Error,r,jo.NOT_FOUND,Kd.LOG_LEVELS.ERROR,r,!0);let n=await $d.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await ic.dropSchema(e),mT.signalSchemaChange(new pT(process.pid,e.operation,e.schema)),await _1.purgeSchemaTableStreams(e.schema,s);let i=await g1(e);return i.message=`successfully deleted '${e.schema}'`,i}o(Zde,"dropSchema");async function efe(e){let t=dh(e,pr.object({database:pr.string(),schema:pr.string(),table:pr.string().required()}));if(t)throw new fh(t.message);Yd(e);let r=await $d.checkSchemaTableExists(e.schema,e.table);if(r)throw zo(new Error,r,jo.NOT_FOUND,Kd.LOG_LEVELS.ERROR,r,!0);await ic.dropTable(e),await _1.purgeTableStream(e.schema,e.table);let n=await g1(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(efe,"dropTable");async function tfe(e){let t=dh(e,pr.object({database:pr.string(),schema:pr.string(),table:pr.string().required(),attribute:pr.string().required()}));if(t)throw new fh(t.message);Yd(e);let r=await $d.checkSchemaTableExists(e.schema,e.table);if(r)throw zo(new Error,r,jo.NOT_FOUND,Kd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw zo(new Error,"You cannot drop a hash attribute",jo.BAD_REQUEST,void 0,void 0,!0);if(Kd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw zo(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,jo.BAD_REQUEST,void 0,void 0,!0);try{return await ic.dropAttribute(e),rfe(e),mT.signalSchemaChange(new pT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Vde.error(`Got an error deleting attribute ${Yde.inspect(e)}.`),n}}o(tfe,"dropAttribute");function rfe(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}o(rfe,"dropAttributeFromGlobal");async function nfe(e){Yd(e);let t=zde()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw zo(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,jo.BAD_REQUEST,void 0,void 0,!0);return await ic.createAttribute(e),mT.signalSchemaChange(new pT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(nfe,"createAttribute");function sfe(e){return ic.getBackup(e)}o(sfe,"getBackup")});var b1=v((v0e,R1)=>{"use strict";var{OPERATIONS_ENUM:ife}=(k(),D(Y)),HC=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=ife.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};R1.exports=HC});var qC=v((B0e,C1)=>{"use strict";var ofe=rs(),x0e=b1(),hT=ce(),ET=(k(),D(Y)),afe=le(),{handleHDBError:A1,hdbErrors:cfe}=Ee(),{HDB_ERROR_MSGS:I1,HTTP_STATUS_CODES:w1}=cfe,lfe=Object.values(ET.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),N1="To use this operation audit log must be enabled in harperdb-config.yaml";C1.exports=ufe;async function ufe(e){if(hT.isEmpty(e.schema))throw new Error(I1.SCHEMA_REQUIRED_ERR);if(hT.isEmpty(e.table))throw new Error(I1.TABLE_REQUIRED_ERR);if(!afe.get(ET.CONFIG_PARAMS.LOGGING_AUDITLOG))throw A1(new Error,N1,w1.BAD_REQUEST,ET.LOG_LEVELS.ERROR,N1,!0);let t=hT.checkSchemaTableExist(e.schema,e.table);if(t)throw A1(new Error,t,w1.NOT_FOUND,ET.LOG_LEVELS.ERROR,t,!0);if(!hT.isEmpty(e.search_type)&&lfe.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await ofe.readAuditLog(e)}o(ufe,"readAuditLog")});var P1=v((k0e,O1)=>{"use strict";var{OPERATIONS_ENUM:dfe}=(k(),D(Y)),GC=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=dfe.GET_BACKUP,this.schema=t,this.table=r}};O1.exports=GC});var M1=v(($0e,D1)=>{"use strict";var ffe=rs(),q0e=P1(),$C=ce(),mfe=(k(),D(Y)),G0e=le(),{handleHDBError:pfe,hdbErrors:hfe}=Ee(),{HDB_ERROR_MSGS:L1,HTTP_STATUS_CODES:Efe}=hfe;D1.exports=_fe;async function _fe(e){if($C.isEmpty(e.schema))throw new Error(L1.SCHEMA_REQUIRED_ERR);if($C.isEmpty(e.table))throw new Error(L1.TABLE_REQUIRED_ERR);let t=$C.checkSchemaTableExist(e.schema,e.table);if(t)throw pfe(new Error,t,Efe.NOT_FOUND,mfe.LOG_LEVELS.ERROR,t,!0);return await ffe.getBackup(readAuditLogObject)}o(_fe,"getBackup")});var B1=v((K0e,x1)=>{"use strict";var gfe=le(),oc=require("joi"),Sfe=ot(),v1=require("moment"),Tfe=require("fs-extra"),VC=require("path"),yfe=require("lodash"),ph=(k(),D(Y)),{LOG_LEVELS:kl}=(k(),D(Y)),Rfe="YYYY-MM-DD hh:mm:ss",bfe=VC.resolve(__dirname,"../logs");x1.exports=function(e){return Sfe.validateBySchema(e,Afe)};var Afe=oc.object({from:oc.custom(U1),until:oc.custom(U1),level:oc.valid(kl.NOTIFY,kl.FATAL,kl.ERROR,kl.WARN,kl.INFO,kl.DEBUG,kl.TRACE),order:oc.valid("asc","desc"),limit:oc.number().min(1),start:oc.number().min(0),log_name:oc.custom(Ife)});function U1(e,t){if(v1(e,v1.ISO_8601).format(Rfe)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(U1,"validateDatetime");function Ife(e,t){if(yfe.invert(ph.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=gfe.get(ph.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?ph.LOG_NAMES.HDB:e,i=s===ph.LOG_NAMES.INSTALL?VC.join(bfe,ph.LOG_NAMES.INSTALL):VC.join(n,s);return Tfe.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(Ife,"validateReadLogPath")});var YC=v((W0e,k1)=>{"use strict";var _T=(k(),D(Y)),wfe=z(),Nfe=le(),Cfe=B1(),KC=require("path"),F1=require("fs-extra"),{once:Ofe}=require("events"),{handleHDBError:Pfe,hdbErrors:Lfe}=Ee(),{PACKAGE_ROOT:Dfe}=At(),{replicateOperation:Mfe}=(ls(),D(Yo)),vfe=KC.join(Dfe,"logs"),Ufe=1e3,xfe=200;k1.exports=Bfe;async function Bfe(e){let t=Cfe(e);if(t)throw Pfe(t,t.message,Lfe.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Mfe(e),n=Nfe.get(_T.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?_T.LOG_NAMES.HDB:e.log_name,i=s===_T.LOG_NAMES.INSTALL?KC.join(vfe,_T.LOG_NAMES.INSTALL):KC.join(n,s),a=e.level!==void 0,c=a?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.until!==void 0,f=d?new Date(e.until):void 0,m=e.limit===void 0?Ufe:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,g=0;p==="desc"&&!u&&!f&&(g=Math.max(F1.statSync(i).size-(E+5)*xfe,0));let b=F1.createReadStream(i,{start:g});b.on("error",H=>{wfe.error(H)});let S=0,R=[],L="",O;b.on("data",H=>{let F=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;H=L+H;let Q=0,W;for(;(W=F.exec(H))&&!b.destroyed;){O&&(O.message=H.slice(Q,W.index),x(O));let[fe,ue,ee]=W,Re=ee.split("] ["),Ie=Re[0],$e=Re[1];Re.splice(0,2),O={timestamp:ue,thread:Ie,level:$e,tags:Re,message:""},Q=W.index+fe.length}L=H.slice(Q)}),b.on("end",H=>{b.destroyed||O&&(O.message=L.trim(),x(O))}),b.resume();function x(H){let F,Q,W;switch(!0){case(a&&l&&d):F=new Date(H.timestamp),Q=new Date(u),W=new Date(f),H.level===c&&F>=Q&&F<=W&&S<h?S++:H.level===c&&F>=Q&&F<=W&&(to(H,p,R),S++,S===E&&b.destroy());break;case(a&&l):F=new Date(H.timestamp),Q=new Date(u),H.level===c&&F>=Q&&S<h?S++:H.level===c&&F>=Q&&(to(H,p,R),S++,S===E&&b.destroy());break;case(a&&d):F=new Date(H.timestamp),W=new Date(f),H.level===c&&F<=W&&S<h?S++:H.level===c&&F<=W&&(to(H,p,R),S++,S===E&&b.destroy());break;case(l&&d):F=new Date(H.timestamp),Q=new Date(u),W=new Date(f),F>=Q&&F<=W&&S<h?S++:F>=Q&&F<=W&&(to(H,p,R),S++,S===E&&b.destroy());break;case a:H.level===c&&S<h?S++:H.level===c&&(to(H,p,R),S++,S===E&&b.destroy());break;case l:F=new Date(H.timestamp),Q=new Date(u),F>=Q&&S<h?S++:F>=Q&&S>=h&&(to(H,p,R),S++,S===E&&b.destroy());break;case d:F=new Date(H.timestamp),W=new Date(f),F<=W&&S<h?S++:F<=W&&S>=h&&(to(H,p,R),S++,S===E&&b.destroy());break;default:S<h?S++:(to(H,p,R),S++,S===E&&b.destroy())}}o(x,"onLogMessage"),await Ofe(b,"close");let j=await r;if(j.replicated){for(let H of R)H.node=server.hostname;for(let H of j.replicated){let F=H.node;if(H.status==="failed")to({timestamp:new Date().toISOString(),level:"error",node:F,message:`Error retrieving logs: ${H.reason}`},p,R);else for(let Q of H.results)Q.node=F,to(Q,p,R)}}return R}o(Bfe,"readLog");function to(e,t,r){t==="desc"?Ffe(e,r):t==="asc"?kfe(e,r):r.push(e)}o(to,"pushLineToResult");function Ffe(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}o(Ffe,"insertDescending");function kfe(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}o(kfe,"insertAscending")});var gT=v((Z0e,$1)=>{"use strict";var WC=require("joi"),{string:Wd,boolean:H1,date:Hfe}=WC.types(),qfe=ot(),{validateSchemaExists:j0e,validateTableExists:Q0e,validateSchemaName:J0e}=ki(),Gfe=(k(),D(Y)),$fe=mt(),q1=le();q1.initSync();var X0e=Wd.invalid(q1.get(Gfe.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern($fe.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),G1={operation:Wd.valid("add_node","update_node","set_node_replication"),node_name:Wd.optional(),subscriptions:WC.array().items({table:Wd.optional(),schema:Wd.optional(),database:Wd.optional(),subscribe:H1.required(),publish:H1.required().custom(Kfe),start_time:Hfe.iso()})};function Vfe(e){return qfe.validateBySchema(e,WC.object(G1))}o(Vfe,"addUpdateNodeValidator");function Kfe(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}o(Kfe,"checkForFalsy");$1.exports={addUpdateNodeValidator:Vfe,validationSchema:G1}});var ac=v((tBe,V1)=>{"use strict";var zC=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},jC=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};V1.exports={Node:zC,NodeSubscription:jC}});var Y1=v((nBe,K1)=>{"use strict";var Yfe=(k(),D(Y)).OPERATIONS_ENUM,QC=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Yfe.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};K1.exports=QC});var hh=v((iBe,W1)=>{"use strict";var JC=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},XC=class{static{o(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,a,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=a,c!==void 0&&(this.attributes=c)}};W1.exports={RemotePayloadObject:JC,RemotePayloadSubscription:XC}});var j1=v((aBe,z1)=>{"use strict";var ZC=class{static{o(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,a=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=a}};z1.exports=ZC});var J1=v((mBe,Q1)=>{"use strict";var Wfe=j1(),lBe=Gt(),uBe=pt(),zfe=z(),{getSchemaPath:dBe,getTransactionAuditStorePath:fBe}=St(),{getDatabases:jfe}=(Ne(),D(ft));Q1.exports=Qfe;async function Qfe(e){let t=new Wfe;try{let r=jfe()[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){zfe.warn(`unable to stat table dbi due to ${r}`)}return t}o(Qfe,"lmdbGetTableSize")});var Z1=v((hBe,X1)=>{"use strict";var eO=class{static{o(this,"SystemInformationObject")}constructor(t,r,n,s,i,a,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=a,this.harperdb_processes=c}};X1.exports=eO});var _h=v((yBe,nK)=>{"use strict";var Jfe=require("fs-extra"),Xfe=require("path"),Sn=require("systeminformation"),cc=z(),eK=xt(),_Be=mt(),zd=(k(),D(Y)),Zfe=J1(),eme=Ja(),{getThreadInfo:tK}=Je(),Eh=le();Eh.initSync();var tme=Z1(),{openEnvironment:gBe}=pt(),{getSchemaPath:SBe}=St(),{database:TBe,databases:tO}=(Ne(),D(ft)),ST;nK.exports={getHDBProcessInfo:iO,getNetworkInfo:aO,getDiskInfo:oO,getMemoryInfo:sO,getCPUInfo:nO,getTimeInfo:rO,getSystemInformation:cO,systemInformation:rme,getTableSize:lO,getMetrics:uO};function rO(){return Sn.time()}o(rO,"getTimeInfo");async function nO(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await Sn.cpu();d.cpu_speed=await Sn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:g,cpus:b,...S}=await Sn.currentLoad();return S.cpus=[],b.forEach(R=>{let{rawLoad:L,rawLoadIdle:O,rawLoadIrq:x,rawLoadNice:j,rawLoadSystem:H,rawLoadUser:F,...Q}=R;S.cpus.push(Q)}),d.current_load=S,d}catch(e){return cc.error(`error in getCPUInfo: ${e}`),{}}}o(nO,"getCPUInfo");async function sO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Sn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return cc.error(`error in getMemoryInfo: ${e}`),{}}}o(sO,"getMemoryInfo");async function iO(){let e={core:[],clustering:[]};try{let t=await Sn.processes(),r;try{r=Number.parseInt(await Jfe.readFile(Xfe.join(Eh.get(zd.CONFIG_PARAMS.ROOTPATH),zd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===zd.NODE_ERROR_CODES.ENOENT)cc.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 cc.error(`error in getHDBProcessInfo: ${t}`),e}}o(iO,"getHDBProcessInfo");async function oO(){let e={};try{if(!Eh.get(zd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Sn.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await Sn.fsStats();return e.read_write=u,e.size=await Sn.fsSize(),e}catch(t){return cc.error(`error in getDiskInfo: ${t}`),e}}o(oO,"getDiskInfo");async function aO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Eh.get(zd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await Sn.networkInterfaceDefault(),e.latency=await Sn.inetChecksite("google.com"),(await Sn.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:a,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await Sn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return cc.error(`error in getNetworkInfo: ${t}`),e}}o(aO,"getNetworkInfo");async function cO(){if(ST!==void 0)return ST;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await Sn.osInfo();e=c;let l=await Sn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,ST=e,ST}catch(t){return cc.error(`error in getSystemInformation: ${t}`),e}}o(cO,"getSystemInformation");async function lO(){let e=[],t=await eme.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Zfe(n));return e}o(lO,"getTableSize");async function uO(){let e={};for(let t in tO){let r=e[t]={},n=r.tables={};for(let s in tO[t])try{let i=tO[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let a=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=a[l];n[s]=c}catch(i){cc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(uO,"getMetrics");async function rK(){if(Eh.get(zd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await eK.getNATSReferences(),t=await eK.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let a={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(a)}return r}}o(rK,"getNatsStreamInfo");async function rme(e){let t=new tme;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await cO(),t.time=rO(),t.cpu=await nO(),t.memory=await sO(),t.disk=await oO(),t.network=await aO(),t.harperdb_processes=await iO(),t.table_size=await lO(),t.metrics=await uO(),t.threads=await tK(),t.replication=await rK(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await cO();break;case"time":t.time=rO();break;case"cpu":t.cpu=await nO();break;case"memory":t.memory=await sO();break;case"disk":t.disk=await oO();break;case"network":t.network=await aO();break;case"harperdb_processes":t.harperdb_processes=await iO();break;case"table_size":t.table_size=await lO();break;case"database_metrics":case"metrics":t.metrics=await uO();break;case"threads":t.threads=await tK();break;case"replication":t.replication=await rK();break;default:break}return t}o(rme,"systemInformation")});var Fs=v((wBe,aK)=>{"use strict";var nme=un(),dO=ce(),sme=require("util"),Hl=(k(),D(Y)),sK=le();sK.initSync();var ime=qN(),iK=fn(),{Node:bBe,NodeSubscription:ABe}=ac(),ome=Yu(),ame=Y1(),{RemotePayloadObject:cme,RemotePayloadSubscription:lme}=hh(),{handleHDBError:ume,hdbErrors:dme}=Ee(),{HTTP_STATUS_CODES:fme,HDB_ERROR_MSGS:mme}=dme,pme=ai(),hme=_h(),{packageJson:Eme}=At(),{getDatabases:_me}=(Ne(),D(ft)),IBe=sme.promisify(ime.authorize),gme=iK.searchByHash,Sme=iK.searchByValue;aK.exports={isEmpty:Tme,getNodeRecord:yme,upsertNodeRecord:Rme,buildNodePayloads:bme,checkClusteringEnabled:Ame,getAllNodeRecords:Ime,getSystemInfo:wme,reverseSubscription:oK};function Tme(e){return e==null}o(Tme,"isEmpty");async function yme(e){let t=new ome(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return gme(t)}o(yme,"getNodeRecord");async function Rme(e){let t=new ame(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return nme.upsert(t)}o(Rme,"upsertNodeRecord");function oK(e){if(dO.isEmpty(e.subscribe)||dO.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}o(oK,"reverseSubscription");function bme(e,t,r,n){let s=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:l,table:u}=c,d=dO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=oK(c),p=_me()[l]?.[u],h=new lme(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new cme(r,t,s,n)}o(bme,"buildNodePayloads");function Ame(){if(!sK.get(Hl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ume(new Error,mme.CLUSTERING_NOT_ENABLED,fme.BAD_REQUEST,void 0,void 0,!0)}o(Ame,"checkClusteringEnabled");async function Ime(){let e=new pme(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Sme(e))}o(Ime,"getAllNodeRecords");async function wme(){let e=await hme.getSystemInformation();return{hdb_version:Eme.version,node_version:e.node_version,platform:e.platform}}o(wme,"getSystemInfo")});var fO=v((CBe,hK)=>{"use strict";var TT=xt(),cK=ce(),lK=mt(),uK=(k(),D(Y)),yT=z(),dK=mh(),Nme=zu(),{RemotePayloadObject:Cme}=hh(),{handleHDBError:fK,hdbErrors:Ome}=Ee(),{HTTP_STATUS_CODES:mK}=Ome,{NodeSubscription:pK}=ac();hK.exports=Pme;async function Pme(e,t){let r;try{r=await TT.request(`${t}.${lK.REQUEST_SUFFIX}`,new Cme(uK.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),yT.trace("Response from remote describe all request:",r)}catch(a){yT.error(`addNode received error from describe all request to remote node: ${a}`);let c=TT.requestErrorHandler(a,"add_node",t);throw fK(new Error,c,mK.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===lK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw fK(new Error,a,mK.INTERNAL_SERVER_ERROR,"error",a)}let n=r.message,s=[],i=[];for(let a of e){let{table:c}=a,l=a.database??a.schema??"data";if(l===uK.SYSTEM_SCHEMA_NAME){await TT.createLocalTableStream(l,c);let h=new pK(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h);continue}let u=cK.doesSchemaExist(l),d=n[l]!==void 0,f=c?cK.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(yT.trace(`addNode creating schema: ${l}`),await dK.createSchema({operation:"create_schema",schema:l})),!f&&m){yT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Nme(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await dK.createTable(h)}await TT.createLocalTableStream(l,c);let p=new pK(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p)}return{added:i,skipped:s}}o(Pme,"reviewSubscriptions")});var jd={};be(jd,{addNodeBack:()=>mO,removeNodeBack:()=>pO,setNode:()=>vme});async function vme(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=Ei(t)):t=uT(r);let n=(0,_K.validateBySchema)(e,Mme);if(n)throw(0,Qo.handleHDBError)(n,n.message,Dme.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new Qo.ClientError("url or hostname is required for remove_node operation");let p=r,h=Kt(),E=await h.get(p);if(!E)throw new Qo.ClientError(p+" does not exist");try{await uh({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?st():p},void 0)}catch(g){fs.warn(`Error removing node from target node ${p}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new Qo.ClientError("url required for this operation");let s=Za();if(s==null)throw new Qo.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,ks.getReplicationCert)();let p=await(0,ks.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(a=await(0,ks.createCsr)(),fs.info("Sending CSR to target node:",t)):p&&(c=p.certificate,fs.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,uc.get)(U.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,uc.get)(U.REPLICATION_SHARD)!==void 0&&(l.shard=(0,uc.get)(U.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(EK):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=EK(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 uh({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,fs.warn("Error adding node:",t,"to cluster:",p),d=p}if(a&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);a&&(fs.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,ks.setCertTable)({name:Lme.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,ks.setCertTable)({name:st(),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,uc.get)(U.REPLICATION_SHARD)!==void 0&&(p.shard=(0,uc.get)(U.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await Vo(st(),p)}await Vo(u?u.nodeName:f.name??Ei(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 mO(e){fs.trace("addNodeBack received request:",e);let t=await(0,ks.signCertificate)(e),r;e.csr?(r=t.signingCA,fs.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,fs.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,ks.getReplicationCertAuth)();if(n.replicates){let i={url:Za(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,uc.get)(U.REPLICATION_SHARD)!==void 0&&(i.shard=(0,uc.get)(U.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Vo(st(),i)}return await Vo(e.hostname,n),t.nodeName=st(),t.usingCA=s?.certificate,fs.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function pO(e){fs.trace("removeNodeBack received request:",e),await Kt().delete(e.name)}function EK(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var ks,_K,lc,uc,fs,Qo,Lme,Dme,Mme,Qd=oe(()=>{ks=w(ds()),_K=w(ot()),lc=w(require("joi")),uc=w(le());k();rh();Ud();ls();fs=w(z()),Qo=w(Ee()),{pki:Lme}=require("node-forge"),{HTTP_STATUS_CODES:Dme}=Qo.hdbErrors,Mme=lc.default.object({hostname:lc.default.string(),verify_tls:lc.default.boolean(),replicates:lc.default.boolean(),subscriptions:lc.default.array(),revoked_certificates:lc.default.array(),shard:lc.default.number()});o(vme,"setNode");o(mO,"addNodeBack");o(pO,"removeNodeBack");o(EK,"reverseSubscription")});var wT=v((BBe,SK)=>{"use strict";var{handleHDBError:RT,hdbErrors:Ume}=Ee(),{HTTP_STATUS_CODES:bT}=Ume,{addUpdateNodeValidator:xme}=gT(),AT=z(),IT=(k(),D(Y)),gK=mt(),Bme=ce(),gh=xt(),Sh=Fs(),hO=le(),Fme=fO(),{Node:kme,NodeSubscription:Hme}=ac(),{broadcast:qme}=Je(),{setNode:Gme}=(Qd(),D(jd)),UBe=le(),xBe=(k(),D(Y)),$me="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Vme="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Kme=hO.get(IT.CONFIG_PARAMS.CLUSTERING_NODENAME);SK.exports=Yme;async function Yme(e,t=!1){if(AT.trace("addNode called with:",e),hO.get(IT.CONFIG_PARAMS.REPLICATION_URL)||hO.get(IT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Gme(e);Sh.checkClusteringEnabled();let r=xme(e);if(r)throw RT(r,r.message,bT.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await Sh.getNodeRecord(n);if(!Bme.isEmptyOrZeroLength(f))throw RT(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,bT.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Fme(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=$me,a;let c=Sh.buildNodePayloads(s,Kme,IT.OPERATIONS_ENUM.ADD_NODE,await Sh.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 Hme(p.schema,p.table,p.publish,p.subscribe))}AT.trace("addNode sending remote payload:",c);let u;try{u=await gh.request(`${n}.${gK.REQUEST_SUFFIX}`,c)}catch(f){AT.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 gh.updateRemoteConsumer(E,n)}let m=gh.requestErrorHandler(f,"add_node",n);throw RT(new Error,m,bT.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===gK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw RT(new Error,f,bT.INTERNAL_SERVER_ERROR,"error",f)}AT.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await gh.updateRemoteConsumer(p,n),p.subscribe===!0&&await gh.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new kme(n,l,u.system_info);return await Sh.upsertNodeRecord(d),qme({type:"nats_update"}),i.length>0?a.message=Vme:a.message=`Successfully added '${n}' to manifest`,a}o(Yme,"addNode")});var SO=v((HBe,yK)=>{"use strict";var{handleHDBError:EO,hdbErrors:Wme}=Ee(),{HTTP_STATUS_CODES:_O}=Wme,{addUpdateNodeValidator:zme}=gT(),Th=z(),NT=(k(),D(Y)),TK=mt(),kBe=ce(),yh=xt(),Rh=Fs(),gO=le(),{cloneDeep:jme}=require("lodash"),Qme=fO(),{Node:Jme,NodeSubscription:Xme}=ac(),{broadcast:Zme}=Je(),{setNode:epe}=(Qd(),D(jd)),tpe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",rpe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",npe=gO.get(NT.CONFIG_PARAMS.CLUSTERING_NODENAME);yK.exports=spe;async function spe(e){if(Th.trace("updateNode called with:",e),gO.get(NT.CONFIG_PARAMS.REPLICATION_URL)??gO.get(NT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return epe(e);Rh.checkClusteringEnabled();let t=zme(e);if(t)throw EO(t,t.message,_O.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Rh.getNodeRecord(r);s.length>0&&(n=jme(s));let{added:i,skipped:a}=await Qme(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=tpe,c;let l=Rh.buildNodePayloads(i,npe,NT.OPERATIONS_ENUM.UPDATE_NODE,await Rh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];Th.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}Th.trace("updateNode sending remote payload:",l);let u;try{u=await yh.request(`${r}.${TK.REQUEST_SUFFIX}`,l)}catch(d){Th.error(`updateNode received error from request: ${d}`);let f=yh.requestErrorHandler(d,"update_node",r);throw EO(new Error,f,_O.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===TK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw EO(new Error,d,_O.INTERNAL_SERVER_ERROR,"error",d)}Th.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await yh.updateRemoteConsumer(m,r),m.subscribe===!0?await yh.updateConsumerIterator(m.schema,m.table,r,"start"):await yh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new Jme(r,[],u.system_info)]),await ipe(n[0],i,u.system_info),a.length>0?c.message=rpe:c.message=`Successfully updated '${r}'`,c}o(spe,"updateNode");async function ipe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let a=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===a.schema&&d.table===a.table){d.publish=a.publish,d.subscribe=a.subscribe,c=!0;break}}c||n.subscriptions.push(new Xme(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await Rh.upsertNodeRecord(n),Zme({type:"nats_update"})}o(ipe,"updateNodeTable")});var wK=v((GBe,IK)=>{"use strict";var AK=require("joi"),{string:RK}=AK.types(),ope=ot(),bK=(k(),D(Y)),ape=le(),cpe=mt();IK.exports=lpe;function lpe(e){let t=RK.invalid(ape.get(bK.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(cpe.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=AK.object({operation:RK.valid(bK.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return ope.validateBySchema(e,r)}o(lpe,"removeNodeValidator")});var CT=v((VBe,LK)=>{"use strict";var{handleHDBError:NK,hdbErrors:upe}=Ee(),{HTTP_STATUS_CODES:CK}=upe,dpe=wK(),bh=z(),OK=Fs(),fpe=ce(),Jd=(k(),D(Y)),PK=mt(),TO=xt(),yO=le(),{RemotePayloadObject:mpe}=hh(),{NodeSubscription:ppe}=ac(),hpe=Wu(),Epe=Ga(),{broadcast:_pe}=Je(),{setNode:gpe}=(Qd(),D(jd)),Spe=yO.get(Jd.CONFIG_PARAMS.CLUSTERING_NODENAME);LK.exports=Tpe;async function Tpe(e){if(bh.trace("removeNode called with:",e),yO.get(Jd.CONFIG_PARAMS.REPLICATION_URL)??yO.get(Jd.CONFIG_PARAMS.REPLICATION_HOSTNAME))return gpe(e);OK.checkClusteringEnabled();let t=dpe(e);if(t)throw NK(t,t.message,CK.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await OK.getNodeRecord(r);if(fpe.isEmptyOrZeroLength(n))throw NK(new Error,`Node '${r}' was not found.`,CK.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new mpe(Jd.OPERATIONS_ENUM.REMOVE_NODE,Spe,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await TO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await TO.updateRemoteConsumer(new ppe(d.schema,d.table,!1,!1),r)}catch(f){bh.error(f)}}try{i=await TO.request(`${r}.${PK.REQUEST_SUFFIX}`,s),bh.trace("Remove node reply from remote node:",r,i)}catch(l){bh.error("removeNode received error from request:",l),a=!0}let c=new hpe(Jd.SYSTEM_SCHEMA_NAME,Jd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Epe.deleteRecord(c),_pe({type:"nats_update"}),i?.status===PK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(bh.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}o(Tpe,"removeNode")});var vK=v((YBe,MK)=>{"use strict";var DK=require("joi"),{string:ype,array:Rpe}=DK.types(),bpe=ot(),Ape=gT();MK.exports=Ipe;function Ipe(e){let t=DK.object({operation:ype.valid("configure_cluster").required(),connections:Rpe.items(Ape.validationSchema).required()});return bpe.validateBySchema(e,t)}o(Ipe,"configureClusterValidator")});var RO=v((zBe,kK)=>{"use strict";var UK=(k(),D(Y)),OT=z(),wpe=ce(),Npe=le(),Cpe=CT(),Ope=wT(),Ppe=Fs(),Lpe=vK(),{handleHDBError:xK,hdbErrors:Dpe}=Ee(),{HTTP_STATUS_CODES:BK}=Dpe,Mpe="Configure cluster complete.",vpe="Failed to configure the cluster. Check the logs for more details.",Upe="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";kK.exports=xpe;async function xpe(e){OT.trace("configure cluster called with:",e);let t=Lpe(e);if(t)throw xK(t,t.message,BK.BAD_REQUEST,void 0,void 0,!0);let r=await Ppe.getAllNodeRecords(),n=[];if(Npe.get(UK.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await FK(Cpe,{operation:UK.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}OT.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 FK(Ope,f,f.node_name);s.push(m)}OT.trace("All results from configure_cluster add node:",s);let a=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(OT.error(m.node_name,m?.error?.message,m?.error?.stack),a.includes(m.node_name)||a.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(wpe.isEmptyOrZeroLength(a))return{message:Mpe,connections:c};if(l)return{message:Upe,failed_nodes:a,connections:c};throw xK(new Error,vpe,BK.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(xpe,"configureCluster");async function FK(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(FK,"functionWrapper")});var $K=v((QBe,GK)=>{"use strict";var Ah=require("joi"),Bpe=ot(),{validateSchemaExists:HK,validateTableExists:Fpe,validateSchemaName:qK}=ki(),kpe=Ah.object({operation:Ah.string().valid("purge_stream"),schema:Ah.string().custom(HK).custom(qK).optional(),database:Ah.string().custom(HK).custom(qK).optional(),table:Ah.string().custom(Fpe).required()});function Hpe(e){return Bpe.validateBySchema(e,kpe)}o(Hpe,"purgeStreamValidator");GK.exports=Hpe});var bO=v((XBe,VK)=>{"use strict";var{handleHDBError:qpe,hdbErrors:Gpe}=Ee(),{HTTP_STATUS_CODES:$pe}=Gpe,Vpe=$K(),Kpe=xt(),Ype=Fs();VK.exports=Wpe;async function Wpe(e){e.schema=e.schema??e.database;let t=Vpe(e);if(t)throw qpe(t,t.message,$pe.BAD_REQUEST,void 0,void 0,!0);Ype.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Kpe.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(Wpe,"purgeStream")});var wO=v((eFe,JK)=>{"use strict";var IO=Fs(),zpe=xt(),LT=le(),Xd=(k(),D(Y)),ql=mt(),jpe=ce(),AO=z(),{RemotePayloadObject:Qpe}=hh(),{ErrorCode:KK}=require("nats"),{parentPort:YK}=require("worker_threads"),{onMessageByType:Jpe}=Je(),{getThisNodeName:Xpe}=(ls(),D(Yo)),{requestClusterStatus:Zpe}=(rh(),D(iV)),{getReplicationSharedStatus:ehe,getHDBNodeTable:the}=(Ud(),D(eV)),{CONFIRMATION_STATUS_POSITION:rhe,RECEIVED_VERSION_POSITION:nhe,RECEIVED_TIME_POSITION:she,SENDING_TIME_POSITION:ihe,RECEIVING_STATUS_POSITION:ohe,RECEIVING_STATUS_RECEIVING:ahe}=(UC(),D(QV)),WK=LT.get(Xd.CONFIG_PARAMS.CLUSTERING_ENABLED),zK=LT.get(Xd.CONFIG_PARAMS.CLUSTERING_NODENAME);JK.exports={clusterStatus:che,buildNodeStatus:QK};var jK;Jpe("cluster-status",async e=>{jK(e)});async function che(){if(LT.get(Xd.CONFIG_PARAMS.REPLICATION_URL)||LT.get(Xd.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(YK){YK.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{jK=i});for(let i of n.connections){let a=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=ehe(u,l,a);c.lastCommitConfirmed=PT(d[rhe]),c.lastReceivedRemoteTime=PT(d[nhe]),c.lastReceivedLocalTime=PT(d[she]),c.sendingMessage=PT(d[ihe]),c.lastReceivedStatus=d[ohe]===ahe?"Receiving":"Waiting"}}}else n=Zpe();n.node_name=Xpe();let s=the().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:zK,is_enabled:WK,connections:[]};if(!WK)return e;let t=await IO.getAllNodeRecords();if(jpe.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(QK(t[n],e.connections));return await Promise.allSettled(r),e}o(che,"clusterStatus");function PT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(PT,"asDate");async function QK(e,t){let r=e.name,n=new Qpe(Xd.OPERATIONS_ENUM.CLUSTER_STATUS,zK,void 0,await IO.getSystemInfo()),s,i,a=ql.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await zpe.request(ql.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===ql.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=ql.CLUSTER_STATUS_STATUSES.CLOSED,AO.error(`Error getting node status from ${r} `,s))}catch(l){AO.warn(`Error getting node status from ${r}`,l),l.code===KK.NoResponders?a=ql.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===KK.Timeout?a=ql.CLUSTER_STATUS_STATUSES.TIMEOUT:a=ql.CLUSTER_STATUS_STATUSES.CLOSED}let c=new lhe(r,a,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Xd.PRE_4_0_0_VERSION&&await IO.upsertNodeRecord(l)}catch(l){AO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(QK,"buildNodeStatus");function lhe(e,t,r,n,s,i,a,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=a,this.system_info=c}o(lhe,"NodeStatusObject")});var CO=v((rFe,XK)=>{"use strict";var{handleHDBError:uhe,hdbErrors:dhe}=Ee(),{HTTP_STATUS_CODES:fhe}=dhe,mhe=xt(),phe=Fs(),NO=ce(),DT=require("joi"),hhe=ot(),Ehe=2e3,_he=DT.object({timeout:DT.number().min(1),connected_nodes:DT.boolean(),routes:DT.boolean()});XK.exports=ghe;async function ghe(e){phe.checkClusteringEnabled();let t=hhe.validateBySchema(e,_he);if(t)throw uhe(t,t.message,fhe.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||NO.autoCastBoolean(n),a=s===void 0||NO.autoCastBoolean(s),c={nodes:[]},l=await mhe.getServerList(r??Ehe),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,p=l[d].data;if(m.name.endsWith("-hub")){let h={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[m.name]&&u[m.name].forEach(E=>{h.connected_nodes.includes(E.name.slice(0,-4))||h.connected_nodes.push(E.name.slice(0,-4))})),a&&(h.routes=p.cluster?.urls?p.cluster?.urls.map(E=>({host:E.split(":")[0],port:NO.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}o(ghe,"clusterNetwork")});var rY=v((sFe,tY)=>{"use strict";var OO=require("joi"),ZK=ot(),{routeConstraints:eY}=Mw();tY.exports={setRoutesValidator:She,deleteRoutesValidator:The};function She(e){let t=OO.object({server:OO.valid("hub","leaf"),routes:eY.required()});return ZK.validateBySchema(e,t)}o(She,"setRoutesValidator");function The(e){let t=OO.object({routes:eY.required()});return ZK.validateBySchema(e,t)}o(The,"deleteRoutesValidator")});var MT=v((oFe,lY)=>{"use strict";var Jo=Et(),PO=ce(),Hs=(k(),D(Y)),Zd=le(),nY=rY(),{handleHDBError:sY,hdbErrors:yhe}=Ee(),{HTTP_STATUS_CODES:iY}=yhe,oY="cluster routes successfully set",aY="cluster routes successfully deleted";lY.exports={setRoutes:bhe,getRoutes:Ahe,deleteRoutes:Ihe};function Rhe(e){let t=Jo.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let a=0,c=e.routes.length;a<c;a++){let l=e.routes[a];l.port=PO.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"?Jo.updateConfigValue(Hs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):Jo.updateConfigValue(Hs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:oY,set:i,skipped:s}}o(Rhe,"setRoutesNats");function bhe(e){let t=nY.setRoutesValidator(e);if(t)throw sY(t,t.message,iY.BAD_REQUEST,void 0,void 0,!0);if(Zd.get(Hs.CONFIG_PARAMS.CLUSTERING_ENABLED))return Rhe(e);let r=[],n=[],s=Zd.get(Hs.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{cY(s,i)?n.push(i):(s.push(i),r.push(i))}),Jo.updateConfigValue(Hs.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:oY,set:r,skipped:n}}o(bhe,"setRoutes");function cY(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}o(cY,"existsInArray");function Ahe(){if(Zd.get(Hs.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=Jo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return Zd.get(Hs.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(Ahe,"getRoutes");function Ihe(e){let t=nY.deleteRoutesValidator(e);if(t)throw sY(t,t.message,iY.BAD_REQUEST,void 0,void 0,!0);if(Zd.get(Hs.CONFIG_PARAMS.CLUSTERING_ENABLED))return whe(e);let r=[],n=[],s=Zd.get(Hs.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{cY(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),Jo.updateConfigValue(Hs.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:aY,deleted:r,skipped:n}}o(Ihe,"deleteRoutes");function whe(e){let t=Jo.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],a=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,p=r.length;m<p;m++){let h=r[m];if(d.host===h.host&&d.port===h.port){r.splice(m,1),f=!0,a=!0,s.push(d);break}}if(!f){let m=!0;for(let p=0,h=n.length;p<h;p++){let E=n[p];if(d.host===E.host&&d.port===E.port){n.splice(p,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return a&&(r=PO.isEmptyOrZeroLength(r)?null:r,Jo.updateConfigValue(Hs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=PO.isEmptyOrZeroLength(n)?null:n,Jo.updateConfigValue(Hs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:aY,deleted:s,skipped:i}}o(whe,"deleteRoutesNats")});var dY=v((cFe,uY)=>{"use strict";var Ih=require("alasql"),Gl=require("recursive-iterator"),Si=z(),Nhe=ce(),wh=(k(),D(Y)),LO=class{static{o(this,"sqlStatementBucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,Ohe(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=>wh.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=>!wh.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,a=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[a]&&t[i].tables[a][wh.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=Che(t[i].tables[a].attribute_permissions):c=global.hdb_schema[i][a].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(a).filter(u=>!wh.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new Ih.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(a,l)}}),this.ast}};function Che(e){return e.filter(t=>t[wh.PERMS_CRUD_ENUM.READ])}o(Che,"filterReadRestrictedAttrs");function Ohe(e,t,r,n,s){Phe(e,t,r,n,s)}o(Ohe,"interpretAST");function Nh(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,a=e.tableid;e.as&&(a=e.as),s.set(a,i)}}o(Nh,"addSchemaTableToMap");function Phe(e,t,r,n,s){if(!e){Si.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Ih.yy.Insert?vhe(e,t,r):e instanceof Ih.yy.Select?Lhe(e,t,r,n,s):e instanceof Ih.yy.Update?Dhe(e,t,r):e instanceof Ih.yy.Delete?Mhe(e,t,r):Si.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(Phe,"getRecordAttributesAST");function Lhe(e,t,r,n,s){if(!e){Si.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Nhe.isEmptyOrZeroLength(i)){Si.error("No schema specified");return}e.from.forEach(c=>{Nh(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Nh(c.table,t,r,n,s)});let a=new Gl(e.columns);for(let{node:c}of a)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{Si.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 Gl(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{Si.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 Gl(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{Si.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 Gl(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{Si.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}o(Lhe,"getSelectAttributes");function Dhe(e,t,r){if(!e){Si.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Gl(e.columns),s=e.table.databaseid;Nh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&DO(e.table.tableid,s,i.columnid,t,r)}o(Dhe,"getUpdateAttributes");function Mhe(e,t,r){if(!e){Si.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Gl(e.where),s=e.table.databaseid;Nh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&DO(e.table.tableid,s,i.columnid,t,r)}o(Mhe,"getDeleteAttributes");function vhe(e,t,r){if(!e){Si.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Gl(e.columns),s=e.into.databaseid;Nh(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&DO(e.into.tableid,s,i.columnid,t,r)}o(vhe,"getInsertAttributes");function DO(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}o(DO,"pushAttribute");uY.exports=LO});var mY=v((uFe,fY)=>{"use strict";var Uhe=mt(),MO=class{static{o(this,"HubConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f,m,p,h){this.port=t,a===null&&(a=void 0),this.server_name=r+Uhe.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};fY.exports=MO});var EY=v((fFe,hY)=>{"use strict";var pY=mt(),vO=class{static{o(this,"LeafConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+pY.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+pY.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};hY.exports=vO});var gY=v((pFe,_Y)=>{"use strict";var UO=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};_Y.exports=UO});var TY=v((EFe,SY)=>{"use strict";var xhe=mt(),xO=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+xhe.SERVER_SUFFIX.ADMIN,this.password=r}};SY.exports=xO});var BT=v((gFe,bY)=>{"use strict";var $l=require("path"),Vl=require("fs-extra"),Bhe=mY(),Fhe=EY(),khe=gY(),Hhe=TY(),BO=os(),tf=ce(),Hn=Et(),UT=(k(),D(Y)),Ch=mt(),{CONFIG_PARAMS:nr}=UT,rf=z(),Oh=le(),yY=Ki(),FO=xt(),qhe=ds(),ef="clustering",Ghe=1e4,RY=50;bY.exports={generateNatsConfig:Vhe,removeNatsConfig:Khe,getHubConfigPath:$he};function $he(){let e=Oh.get(nr.ROOTPATH);return $l.join(e,ef,Ch.NATS_CONFIG_FILES.HUB_SERVER)}o($he,"getHubConfigPath");async function Vhe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=Oh.get(nr.ROOTPATH);Vl.ensureDirSync($l.join(r,"clustering","leaf")),Oh.initSync();let n=Hn.getConfigFromFile(nr.CLUSTERING_TLS_CERT_AUTH),s=Hn.getConfigFromFile(nr.CLUSTERING_TLS_PRIVATEKEY),i=Hn.getConfigFromFile(nr.CLUSTERING_TLS_CERTIFICATE);!await Vl.exists(i)&&!await Vl.exists(!n)&&await qhe.createNatsCerts();let a=$l.join(r,ef,Ch.PID_FILES.HUB),c=$l.join(r,ef,Ch.PID_FILES.LEAF),l=Hn.getConfigFromFile(nr.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=$l.join(r,ef,Ch.NATS_CONFIG_FILES.HUB_SERVER),d=$l.join(r,ef,Ch.NATS_CONFIG_FILES.LEAF_SERVER),f=Hn.getConfigFromFile(nr.CLUSTERING_TLS_INSECURE),m=Hn.getConfigFromFile(nr.CLUSTERING_TLS_VERIFY),p=Hn.getConfigFromFile(nr.CLUSTERING_NODENAME),h=Hn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await FO.checkNATSServerInstalled()||xT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await BO.listUsers(),g=Hn.getConfigFromFile(nr.CLUSTERING_USER),b=await BO.getClusterUser();(tf.isEmpty(b)||b.active!==!0)&&xT(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await vT(nr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await vT(nr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await vT(nr.CLUSTERING_HUBSERVER_NETWORK_PORT),await vT(nr.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],R=[];for(let[Q,W]of E.entries())W.role?.role===UT.ROLE_TYPES_ENUM.CLUSTER_USER&&W.active&&(S.push(new Hhe(W.username,yY.decrypt(W.hash))),R.push(new khe(W.username,yY.decrypt(W.hash))));let L=[],{hub_routes:O}=Hn.getClusteringRoutes();if(!tf.isEmptyOrZeroLength(O))for(let Q of O)L.push(`tls://${b.sys_name_encoded}:${b.uri_encoded_d_hash}@${Q.host}:${Q.port}`);let x=new Bhe(Hn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_NETWORK_PORT),p,a,i,s,n,f,m,h,Hn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_CLUSTER_NAME),Hn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),L,S,R);n==null&&(delete x.tls.ca_file,delete x.leafnodes.tls.ca_file),t=tf.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===UT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Vl.writeJson(u,x),rf.trace(`Hub server config written to ${u}`));let j=`tls://${b.sys_name_encoded}:${b.uri_encoded_d_hash}@0.0.0.0:${h}`,H=`tls://${b.uri_encoded_name}:${b.uri_encoded_d_hash}@0.0.0.0:${h}`,F=new Fhe(Hn.getConfigFromFile(nr.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[j],[H],S,R,i,s,n,f);n==null&&delete F.tls.ca_file,(t===void 0||t===UT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Vl.writeJson(d,F),rf.trace(`Leaf server config written to ${d}`))}o(Vhe,"generateNatsConfig");async function vT(e){let t=Oh.get(e);return tf.isEmpty(t)&&xT(`port undefined for '${e}'`),await tf.isPortTaken(t)&&xT(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}o(vT,"isPortAvailable");function xT(e){let t=`Error generating clustering config: ${e}`;rf.error(t),console.error(t),process.exit(1)}o(xT,"generateNatsConfigError");async function Khe(e){let{port:t,config_file:r}=FO.getServerConfig(e),{username:n,decrypt_hash:s}=await BO.getClusterUser(),i=0,a=2e3;for(;i<RY;){try{let d=await FO.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){rf.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=RY)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=a*(i*2);u>3e4&&rf.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await tf.asyncSetTimeout(u)}let c="0".repeat(Ghe),l=$l.join(Oh.get(nr.ROOTPATH),ef,r);await Vl.writeFile(l,c),await Vl.remove(l),rf.notify(e,"started.")}o(Khe,"removeNatsConfig")});var OY=v((TFe,CY)=>{"use strict";var ms=le(),Qe=(k(),D(Y)),Ph=mt(),Xo=require("path"),{PACKAGE_ROOT:kT}=At(),AY=le(),FT=ce(),nf="/dev/null",Yhe=Xo.join(kT,"launchServiceScripts"),IY=Xo.join(kT,"utility/scripts"),Whe=Xo.join(IY,Qe.HDB_RESTART_SCRIPT),wY=Xo.resolve(kT,"dependencies",`${process.platform}-${process.arch}`,Ph.NATS_BINARY_NAME);function NY(){let e={[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0,...process.env};return FT.noBootFile()&&(e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=FT.getEnvCliRootPath()),{name:Qe.PROCESS_DESCRIPTORS.HDB,script:Qe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,execArgv:process.execArgv,cwd:kT}}o(NY,"generateMainServerConfig");var zhe=9930;function jhe(){ms.initSync(!0);let e=ms.get(Qe.CONFIG_PARAMS.ROOTPATH),t=Xo.join(e,"clustering",Ph.NATS_CONFIG_FILES.HUB_SERVER),r=Xo.join(ms.get(Qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Qe.LOG_NAMES.HDB),n=AY.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Ph.LOG_LEVEL_FLAGS[ms.get(Qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==zhe?"-"+n:""),binFile:wY,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return ms.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=nf,i.error_file=nf),i}o(jhe,"generateNatsHubServerConfig");var Qhe=9940;function Jhe(){ms.initSync(!0);let e=ms.get(Qe.CONFIG_PARAMS.ROOTPATH),t=Xo.join(e,"clustering",Ph.NATS_CONFIG_FILES.LEAF_SERVER),r=Xo.join(ms.get(Qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Qe.LOG_NAMES.HDB),n=AY.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Ph.LOG_LEVEL_FLAGS[ms.get(Qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Qhe?"-"+n:""),binFile:wY,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return ms.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=nf,i.error_file=nf),i}o(Jhe,"generateNatsLeafServerConfig");function Xhe(){ms.initSync();let e=Xo.join(ms.get(Qe.CONFIG_PARAMS.LOGGING_ROOT),Qe.LOG_NAMES.HDB),t={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,binFile:Qe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Yhe,autorestart:!1};return ms.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=nf,t.error_file=nf),t}o(Xhe,"generateClusteringUpgradeV4ServiceConfig");function Zhe(){let e={[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.RESTART_HDB};return FT.noBootFile()&&(e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=FT.getEnvCliRootPath()),{...{name:Qe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:IY},script:Whe}}o(Zhe,"generateRestart");function eEe(){return{apps:[NY()]}}o(eEe,"generateAllServiceConfigs");CY.exports={generateAllServiceConfigs:eEe,generateMainServerConfig:NY,generateRestart:Zhe,generateNatsHubServerConfig:jhe,generateNatsLeafServerConfig:Jhe,generateClusteringUpgradeV4ServiceConfig:Xhe}});var sf=v((bFe,xY)=>{"use strict";var Cr=(k(),D(Y)),RFe=ce(),ea=BT(),HT=xt(),Zo=mt(),dc=OY(),HO=le(),fc=z(),tEe=Fs(),{startWorker:PY,onMessageFromWorkers:rEe}=Je(),LY=require("fs"),nEe=require("node:path"),sEe=(k(),D(Y)),{setTimeout:iEe}=require("node:timers/promises"),{execFile:oEe,fork:aEe}=require("node:child_process");xY.exports={start:mc,restart:lEe,kill:mEe,startAllServices:pEe,startService:MY,restartHdb:uEe,startClusteringProcesses:vY,startClusteringThreads:UY,isHdbRestartRunning:dEe,getHdbPid:fEe,cleanupChildrenProcesses:Lh,reloadClustering:EEe,expectedRestartOfChildren:DY};rEe(e=>{e.type==="restart"&&HO.initSync(!0)});var ro=[],cEe=10,kO;function mc(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):oEe(e.binFile,r,e);n.name=e.name,n.config=e,n.on("error",(a,c)=>{console.error(a,c)}),n.on("exit",async a=>{let c=ro.indexOf(n);c>-1&&ro.splice(c,1),!kO&&a!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<cEe&&(LY.existsSync(ea.getHubConfigPath())?mc(e):(await ea.generateNatsConfig(!0),mc(e),await new Promise(l=>setTimeout(l,3e3)),await ea.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ea.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function i(a){let c=HO.get(Cr.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),l=/\[\d+][^\[]+\[(\w+)]/g,u,d=0,f;for(;u=l.exec(a);){if(u.index&&Zo.LOG_LEVEL_HIERARCHY[c]>=Zo.LOG_LEVEL_HIERARCHY[f||"info"]){let h=f===Zo.LOG_LEVELS.ERR||f===Zo.LOG_LEVELS.WRN?fc.OUTPUTS.STDERR:fc.OUTPUTS.STDOUT;fc.logCustomLevel(f||"info",h,s,a.slice(d,u.index).trim())}let[m,p]=u;d=u.index+m.length,f=Zo.LOG_LEVELS[p]}if(Zo.LOG_LEVEL_HIERARCHY[c]>=Zo.LOG_LEVEL_HIERARCHY[f||"info"]){let m=f===Zo.LOG_LEVELS.ERR||f===Zo.LOG_LEVELS.WRN?fc.OUTPUTS.STDERR:fc.OUTPUTS.STDOUT;fc.logCustomLevel(f||"info",m,s,a.toString().slice(d).trim())}}o(i,"extractMessages"),n.stdout.on("data",i),n.stderr.on("data",i),n.unref(),ro.length===0&&(t||(process.on("exit",Lh),process.on("SIGINT",Lh),process.on("SIGQUIT",Lh),process.on("SIGTERM",Lh))),ro.push(n)}o(mc,"start");function Lh(e=!0){if(!kO&&(kO=!0,ro.length!==0))if(fc.info("Killing child processes..."),ro.map(t=>t.kill()),e)process.exit(0);else return iEe(2e3)}o(Lh,"cleanupChildrenProcesses");function lEe(e){DY();for(let t of ro)t.name===e&&t.kill()}o(lEe,"restart");function DY(){for(let e of ro)e.config&&(e.config.restarts=0)}o(DY,"expectedRestartOfChildren");async function uEe(){await mc(dc.generateRestart())}o(uEe,"restartHdb");async function dEe(){let e=await list();for(let t in e)if(e[t].name===Cr.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(dEe,"isHdbRestartRunning");function fEe(){let e=HO.getHdbBasePath();if(!e)return;let t=nEe.join(e,sEe.HDB_PID_FILE),r=_Ee(t);if(r&&gEe(r))return r}o(fEe,"getHdbPid");function mEe(){for(let e of ro)e.kill();ro=[]}o(mEe,"kill");async function pEe(){await vY(),await UY(),await mc(dc.generateAllServiceConfigs())}o(pEe,"startAllServices");async function MY(e,t=!1){let r;switch(e=e.toLowerCase(),e){case Cr.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=dc.generateMainServerConfig();break;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=dc.generateNatsIngestServiceConfig();break;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=dc.generateNatsReplyServiceConfig();break;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=dc.generateNatsHubServerConfig(),await mc(r,t),await ea.removeNatsConfig(e);return;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=dc.generateNatsLeafServerConfig(),await mc(r,t),await ea.removeNatsConfig(e);return;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=dc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}mc(r,t)}o(MY,"startService");var hEe;async function vY(e=!1){for(let t in Cr.CLUSTERING_PROCESSES){let r=Cr.CLUSTERING_PROCESSES[t];await MY(r,e)}}o(vY,"startClusteringProcesses");async function UY(){hEe=PY(Cr.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Cr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await HT.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await HT.updateLocalStreams();let e=await tEe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Cr.PRE_4_0_0_VERSION){fc.info("Starting clustering upgrade 4.0.0 process"),PY(Cr.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(UY,"startClusteringThreads");async function EEe(){await ea.generateNatsConfig(!0),await HT.reloadNATSHub(),await HT.reloadNATSLeaf(),await ea.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ea.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(EEe,"reloadClustering");function _Ee(e){try{return Number.parseInt(LY.readFileSync(e,"utf8"),10)}catch{return null}}o(_Ee,"readPidFile");function gEe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}o(gEe,"isProcessRunning")});var $O={};be($O,{compactOnStart:()=>SEe,copyDb:()=>GY});async function SEe(){pc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,qO.get)(U.ROOTPATH),t=new Map,r=at();(0,GO.updateConfigValue)(U.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,qT.join)(e,"backup",n+".mdb"),a=(0,qT.join)(e,Gc,n+"-copy.mdb"),c=0;try{c=await BY(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){pc.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:a,backupDest:i,recordCount:c}),await GY(n,a),console.log("Backing up",n,"to",i);try{await(0,Kl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{hd()}catch(n){pc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{dbPath:s,copyDest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Kl.move)(i,s,{overwrite:!0}),await(0,Kl.remove)((0,qT.join)(e,Gc,`${n}-copy.mdb-lock`));try{hd()}catch(n){pc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){pc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,GO.updateConfigValue)(U.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:a}]of t){console.error("Moving backup database",a,"back to",i);try{await(0,Kl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw hd(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=!0,c=await BY(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){a=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
18
|
+
`,"")}o(B$,"runCommand");async function wue(){try{await rue.access(tC)}catch{return!1}let e=await B$(`${tC} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return nue.eq(t,Aue)}o(wue,"checkNATSServerInstalled");async function oC(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await U$.getClusterUser();if(Dl(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}hi.trace("create nats connection called");let i=await hue({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Gr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Gr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Gr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),hi.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(a=>{a&&hi.error("Error with Nats client connection, connection closed",a),i===gn&&F$()}),i}o(oC,"createConnection");function F$(){gn=void 0,Ol=void 0,Pl=void 0,Ll=void 0}o(F$,"clearClientCache");async function Nue(){gn&&(await gn.drain(),gn=void 0,Ol=void 0,Pl=void 0,Ll=void 0)}o(Nue,"closeConnection");var gn,Ll;async function jp(){return Ll||(Ll=oC(Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),gn=await Ll),gn||Ll}o(jp,"getConnection");async function Qp(){if(Ol)return Ol;Dl(gn)&&await jp();let{domain:e}=Od(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Dl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ol=await gn.jetstreamManager({domain:e,timeout:6e4}),Ol}o(Qp,"getJetStreamManager");async function k$(){if(Pl)return Pl;Dl(gn)&&await jp();let{domain:e}=Od(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Dl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Pl=gn.jetstream({domain:e,timeout:6e4}),Pl}o(k$,"getJetStream");async function Xi(){let e=gn||await jp(),t=Ol||await Qp(),r=Pl||await k$();return{connection:e,jsm:t,js:r}}o(Xi,"getNATSReferences");async function Cue(e){let t=Gr.get(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await U$.getClusterUser(),s=await oC(t,r,n),i=iC(),a=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of a){let f=x$.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 BS.asyncSetTimeout(e),await a.drain(),await s.close(),await u,c}o(Cue,"getServerList");async function aC(e,t){let{jsm:r}=await Xi(),n=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Eue.File,retention:_ue.Limits,subjects:t,discard:gue.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(aC,"createLocalStream");async function H$(){let{jsm:e}=await Xi(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o(H$,"listStreams");async function Oue(e){let{jsm:t}=await Xi();await t.streams.delete(e)}o(Oue,"deleteLocalStream");async function Pue(e){let{connection:t}=await Xi(),r=[],n=iC(),s=t.subscribe(n),i=(async()=>{for await(let a of s)r.push(x$.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}o(Pue,"listRemoteStreams");async function Lue(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Xi(),i=L$(),a={durable_name:i,ack_policy:nC.Explicit};t&&(a.deliver_policy=sC.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=rC(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(Xr.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}o(Lue,"viewStream");async function*Due(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Xi(),i=L$(),a={durable_name:i,ack_policy:nC.Explicit};t&&(a.deliver_policy=sC.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=rC(u.data);d[0]||(d=[d]);for(let f of d){let m={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:f};u.headers&&(m.origin=u.headers.get(Xr.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}o(Due,"viewStreamIterator");async function Mue(e,t,r,n){hi.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=q$(n,r);let{js:s}=await Xi(),i=await kS(),a=`${e}.${i}`,c=await Rue(()=>n instanceof Uint8Array?n:v$.encode(n));try{hi.trace(`publishToStream publishing to subject: ${a}`),yue(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(a,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return $$(async()=>{try{await s.publish(a,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){hi.trace(`publishToStream creating stream: ${t}`);let d=a.split(".");d[2]="*",await aC(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(Mue,"publishToStream");function q$(e,t){t===void 0&&(t=Tue());let r=Gr.get(et.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Xr.MSG_HEADERS.ORIGIN)&&r&&t.append(Xr.MSG_HEADERS.ORIGIN,r),t}o(q$,"addNatsMsgHeader");function Od(e){e=e.toLowerCase();let t=zp.join(Gr.get(et.CONFIG_PARAMS.ROOTPATH),bue);if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Dl(eC)&&(eC={port:Yp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Yp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.HUB,config_file:Xr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:zp.join(t,Xr.PID_FILES.HUB),hdbNatsPath:t}),eC;if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Dl(ZN)&&(ZN={port:Yp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Yp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.LEAF,config_file:Xr.NATS_CONFIG_FILES.LEAF_SERVER,domain:Yp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.LEAF,pid_file_path:zp.join(t,Xr.PID_FILES.LEAF),hdbNatsPath:t}),ZN;hi.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(Od,"getServerConfig");async function G$(e,t,r,n){try{await e.consumers.add(t,{ack_policy:nC.Explicit,durable_name:r,deliver_policy:sC.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(G$,"createConsumer");async function vue(e,t,r){await e.consumers.delete(t,r)}o(vue,"removeConsumer");function Uue(e){return e.split(".")[1]}o(Uue,"extractServerName");async function xue(e,t,r=6e4,n=iC()){if(!BS.isObject(t))throw new Error("data param must be an object");let s=v$.encode(t),{connection:i}=await Xi(),a={timeout:r};n&&(a.reply=n,a.noMux=!0);let c=await i.request(e,s,a);return rC(c.data)}o(xue,"request");function cC(e){return new Promise(async(t,r)=>{let n=aue(tC,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",a=>{r(a)}),n.stdout.on("data",a=>{i+=a.toString()}),n.stderr.on("data",a=>{s+=a.toString()}),n.stderr.on("close",a=>{s&&r(s),t(i)})})}o(cC,"reloadNATS");async function Bue(){let{pid_file_path:e}=Od(et.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await cC(e)}o(Bue,"reloadNATSHub");async function Fue(){let{pid_file_path:e}=Od(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await cC(e)}o(Fue,"reloadNATSLeaf");function kue(e,t,r){let n;switch(e.code){case P$.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case P$.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(kue,"requestErrorHandler");async function Hue(e,t){let r=t+Xr.SERVER_SUFFIX.LEAF,{connection:n}=await Xi(),{jsm:s}=await zue(r),{schema:i,table:a}=e,c=FS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await $$(async()=>{if(e.subscribe===!0)await G$(s,c,n.info.server_name,l);else try{await vue(s,c,n.info.server_name)}catch(u){hi.trace(u)}})}o(Hue,"updateRemoteConsumer");async function que(e,t,r,n){let s=FS.createNatsTableStreamName(e,t),i=r+Xr.SERVER_SUFFIX.LEAF,a={type:et.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!M$&&mue()<Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=XN();await c(a)}await due(a),n==="stop"&&await BS.asyncSetTimeout(1e3)}o(que,"updateConsumerIterator");function $$(e){return uue.writeTransaction(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o($$,"exclusiveLock");async function V$(e,t){let r=FS.createNatsTableStreamName(e,t),n=await kS(),s=Kue(e,t,n);await aC(r,[s])}o(V$,"createLocalTableStream");async function Gue(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await V$(n,s)}}o(Gue,"createTableStreams");async function K$(e,t,r=void 0){if(Gr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=FS.createNatsTableStreamName(e,t),{domain:s}=Od(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await jp()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")hi.warn(n);else throw n}}o(K$,"purgeTableStream");async function $ue(e,t){if(Gr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await K$(e,t[r])}o($ue,"purgeSchemaTableStreams");async function Vue(e){return(await Qp()).streams.info(e)}o(Vue,"getStreamInfo");function Kue(e,t,r){return`${Xr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(Kue,"createSubjectName");async function kS(){if(Wp)return Wp;if(Wp=(await Qp())?.nc?.info?.server_name,Wp===void 0)throw new Error("Unable to get jetstream manager server name");return Wp}o(kS,"getJsmServerName");async function Yue(){let e=await Qp(),t=await kS(),r=await H$();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=Wue(n),c=i.split(".");if(c[c.length-1]===t&&!a||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");hi.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}o(Yue,"updateLocalStreams");function Wue(e){let{config:t}=e,r=!1,n=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}o(Wue,"updateStreamLimits");async function zue(e){let t,r;try{t=await gn.jetstream({domain:e}),r=await gn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw hi.error("Unable to connect to:",e),n}return{js:t,jsm:r}}o(zue,"connectToRemoteJS")});function lC(e){let t=e.get(HS),r=t?(0,Pd.unpack)(t):null;r||(r={remoteNameToId:{}});let n=st(),s=!1;r.nodeName=st();let i=r.remoteNameToId;if(i[n]!==0){let a=0,c;for(let l in i){let u=i[l];u===0?c=l:u>a&&(a=u)}if(c){a++,i[c]=a;let l=[Symbol.for("seq"),a];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:Xp(e)??1,nodes:[]})})}i[n]=0,e.putSync(HS,(0,Pd.pack)(r))}return r}function Jp(e){return lC(e).remoteNameToId}function z$(e,t){let r=lC(t),n=r.remoteNameToId,s=new Map,i=!1;for(let a in e){let c=e[a],l=n[a];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[a]=l,i=!0}s.set(c,l)}return i&&t.putSync(HS,(0,Pd.pack)(r)),s}function qS(e,t){let r=lC(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let a in n){let c=n[a];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(HS,(0,Pd.pack)(r))}return W$.trace?.("The remote node name map",e,n,s),s}var W$,Pd,HS,uC=oe(()=>{W$=w(zn());ls();Pd=require("msgpackr"),HS=Symbol.for("remote-ids");o(lC,"getIdMappingRecord");o(Jp,"exportIdMapping");o(z$,"remoteToLocalNodeId");o(qS,"getIdOfRemoteNode")});var eV={};be(eV,{commitsAwaitingReplication:()=>Dd,getHDBNodeTable:()=>Kt,getReplicationSharedStatus:()=>Md,iterateRoutes:()=>eh,shouldReplicateToNode:()=>Zp,subscribeToNodeUpdates:()=>vd});function Kt(){return j$||(j$=Xe({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function Md(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function vd(e){Kt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;Z$.debug?.("adding node",n,"on node",st()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==st()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Kt().search({}))if(i.shard!=null){let a=s.get(i.shard);a||s.set(i.shard,a=[]),a.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function Zp(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&Kt().primaryStore.get(st())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function jue(){vd(e=>{Xa({},(t,r)=>{let n=e.name,s=Q$.get(n);if(s||Q$.set(n,s=new Map),s.has(r))return;let i;for(let a in t)if(i=t[a].auditStore,i)break;if(i){let a=Md(i,r,n,()=>{let c=a[0],l=a.lastTime;for(let{txnTime:u,onConfirm:d}of Dd.get(r)||[])u>l&&u<=c&&d();a.lastTime=c});a.lastTime=0,s.set(r,a)}})})}function*eh(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=Ld.default.get(U.REPLICATION_SECUREPORT)??(!Ld.default.get(U.REPLICATION_PORT)&&Ld.default.get(U.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Ld.default.get(U.REPLICATION_PORT)||Ld.default.get(U.OPERATIONSAPI_NETWORK_PORT);let a=i?.lastIndexOf?.(":");a>0&&(i=+i.slice(a+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){J$.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 J$,X$,Ld,Z$,j$,Q$,Dd,Ud=oe(()=>{Ne();ls();mm();J$=require("worker_threads"),X$=w(Ee()),Ld=w(le());k();Z$=w(zn());server.nodes=[];o(Kt,"getHDBNodeTable");o(Md,"getReplicationSharedStatus");o(vd,"subscribeToNodeUpdates");o(Zp,"shouldReplicateToNode");Q$=new Map;EU((e,t,r)=>{if(r>server.nodes.length)throw new X$.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Dd||(Dd=new Map,jue());let n=Dd.get(e);return n||(n=[],Dd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:o(()=>{++i===r&&s()},"onConfirm")})})});o(jue,"startSubscriptionToReplications");o(eh,"iterateRoutes")});var iV={};be(iV,{connectedToNode:()=>Ml,disconnectedFromNode:()=>Bd,ensureNode:()=>Vo,requestClusterStatus:()=>sV,startOnMainThread:()=>fC});async function fC(e){let t=0,r=at();for(let i of Object.getOwnPropertyNames(r)){let a=r[i];for(let c in a){let l=a[c];if(l.auditStore){GS.set(i,Xp(l.auditStore));break}}}eo.whenThreadsStarted.then(async()=>{let i=[];for await(let l of r.system.hdb_nodes?.search([])||[])i.push(l);let a=st();function c(){let l=Kt().primaryStore.get(a);if(l!==null){let u=e.url??Za();if(l===void 0||l.url!==u||l.shard!==e.shard)return Vo(a,{name:a,url:u,shard:e.shard,replicates:!0})}}o(c,"ensureThisNode"),Kt().primaryStore.get(a)&&c();for(let l of eh(e))try{let u=!l.subscriptions;if(u&&await c(),u&&l.replicates==null&&(l.replicates=!0),i.find(d=>d.url===l.url))continue;s(l)}catch(u){console.error(u)}vd(s)});let n;function s(i,a=i?.name){let c=st()&&a===st()||Za()&&i?.url===Za();if(c){let f=!!i?.replicates;if(n!==void 0&&n!==f)for(let m of Kt().search([]))m.replicates&&m.name!==a&&s(m,m.name);n=f}if(ut.trace("Setting up node replication for",i),!i){for(let[f,m]of Zi){let p;for(let[h,{worker:E,nodes:g}]of m){let b=g[0];if(b&&b.name==a){p=!0;for(let[S,{worker:R}]of m)m.delete(S),ut.warn("Node was deleted, unsubscribing from node",a,S,f),R?.postMessage({type:"unsubscribe-from-node",node:a,database:S,url:f});break}}if(p){Zi.get(f).iterator.remove(),Zi.delete(f);return}}return}if(c)return;if(!i.url){ut.info(`Node ${i.name} is missing url`);return}let l=Zi.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(ut.info(`Added node ${i.name} at ${i.url} for process ${st()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[f,m]of xd)if(i.url===m.url){xd.delete(f);break}xd.set(i.name,i)}let u=at();if(l||(l=new Map,Zi.set(i.url,l)),l.iterator=Xa(e,(f,m,p)=>{p?d(m,!0):d(m,!1)}),i.subscriptions)for(let f of i.subscriptions){let m=f.database||f.schema;u[m]||(ut.warn(`Database ${m} not found for node ${i.name}, making a subscription anyway`),d(m,!1))}function d(f,m){ut.trace("Setting up replication for database",f,"on node",i.name);let p=l.get(f),h,E=[{replicateByDefault:m,...i}];GS.has(f)&&(E.push({replicateByDefault:m,name:st(),startTime:GS.get(f),endTime:Date.now(),replicates:!0}),GS.delete(f));let g=Zp(i,f),b=eo.workers.filter(S=>S.name==="http");if(p?(h=p.worker,p.nodes=E):g&&(t=t%b.length,h=b[t++],l.set(f,{worker:h,nodes:E,url:i.url}),h?.on("exit",()=>{l.get(f)?.worker===h&&(l.delete(f),d(f,m))})),g)setTimeout(()=>{let S={type:"subscribe-to-node",database:f,nodes:E};h?h.postMessage(S):th(S)},Que);else{ut.info("Node no longer should be used, unsubscribing from node",{replicates:i.replicates,databaseName:f,node:i,subscriptions:i.subscriptions,hasDatabase:!!u[f],thisReplicates:Kt().primaryStore.get(st())?.replicates}),Kt().primaryStore.get(st())?.replicates||(n=!1,ut.info("Disabling replication, this node name",st(),Kt().primaryStore.get(st()),f));let S={type:"unsubscribe-from-node",database:f,url:i.url,name:i.name};h?h.postMessage(S):VS(S)}}o(d,"onDatabase")}o(s,"onNodeUpdate"),Bd=o(function(i){try{ut.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let a=Array.from(xd.keys()),c=a.sort(),l=c.indexOf(i.name||Ei(i.url));if(l===-1){ut.warn("Disconnected node not found in node map",i.name,a);return}let u=Zi.get(i.url),d=u?.get(i.database);if(!d){ut.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished||!dC.default.get(U.REPLICATION_FAILOVER))return;let f=d.nodes[0];if(!(f.replicates===!0||f.replicates?.sends||f.subscriptions?.length))return;let m=f.shard,p=(l+1)%c.length;for(;l!==p;){let h=c[p],E=xd.get(h);u=Zi.get(E.url);let g=u?.get(i.database);if(!g||g.connected===!1||g.nodes[0].shard!==m){p=(p+1)%c.length;continue}let{worker:b,nodes:S}=g,R=!1;for(let L of d.nodes){if(S.some(O=>O.name===L.name)){ut.info(`Disconnected node is already failing over to ${h} for ${i.database}`);continue}L.endTime<Date.now()||(S.push(L),R=!0)}if(d.nodes=[d.nodes[0]],!R){ut.info(`Disconnected node ${i.name} has no nodes to fail over to ${h}`);return}ut.info(`Failing over ${i.database} from ${i.name} to ${h}`),b?b.postMessage({type:"subscribe-to-node",database:i.database,nodes:S}):th({database:i.database,nodes:S});return}ut.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(a){ut.error("Error failing over node",a)}},"disconnectedFromNode"),Ml=o(function(i){let a=Zi.get(i.url),c=a?.get(i.database);if(!c){ut.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,a);return}c.connected=!0,c.latency=i.latency;let l=c.nodes[0];if(!l){ut.warn("Newly connected node has no node subscriptions",i.database,c);return}if(!l.name){ut.debug("Connected node is not named yet",i.database,c);return}c.nodes=[l];let u=!1;for(let d of Zi.values()){let f=d.get(i.database);if(!f||f==c)continue;let{worker:m,nodes:p,connected:h}=f;if(p)if(h===!1&&p[0].shard===l.shard)u=!0,c.nodes.push(p[0]);else{let E=p.filter(g=>g&&g.name!==l.name);E.length<p.length&&(f.nodes=E,m.postMessage({type:"subscribe-to-node",database:i.database,nodes:p}))}}u&&c.worker&&c.worker.postMessage({type:"subscribe-to-node",database:i.database,nodes:c.nodes})},"connectedToNode"),(0,eo.onMessageByType)("disconnected-from-node",Bd),(0,eo.onMessageByType)("connected-to-node",Ml),(0,eo.onMessageByType)("request-cluster-status",sV)}function sV(e,t){let r=[];for(let[n,s]of xd)try{let i=Zi.get(s.url);ut.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let a=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)a.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(p=>!(p.endTime<Date.now())).map(p=>p.name)});let c=rV(s);c.database_sockets=a,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ut.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function Vo(e,t){let r=Kt();e=e??Ei(t.url),t.name=e;try{if(t.ca){let s=new nV.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){ut.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ut.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!dC.default.get(U.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],a=rV(n[s]);for(let c of t[s]){let l=!1;for(let u of a)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...a,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ut.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var eo,$S,ut,tV,dC,nV,rV,Que,Zi,Bd,Ml,xd,GS,rh=oe(()=>{Ne();eo=w(Je());ls();$S=require("worker_threads");Ud();ut=w(z()),tV=w(require("lodash")),dC=w(le());k();nV=require("crypto"),{cloneDeep:rV}=tV.default,Que=200,Zi=new Map,xd=new Map,GS=new Map;o(fC,"startOnMainThread");o(sV,"requestClusterStatus");$S.parentPort&&(Bd=o(e=>{$S.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Ml=o(e=>{$S.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,eo.onMessageByType)("subscribe-to-node",e=>{th(e)}),(0,eo.onMessageByType)("unsubscribe-from-node",e=>{VS(e)}));o(Vo,"ensureNode")});var ds=v(Yt=>{"use strict";var mr=require("path"),{watch:Jue}=require("chokidar"),kn=require("fs-extra"),Fd=require("node-forge"),dV=require("net"),{generateKeyPair:mC,X509Certificate:Ko,createPrivateKey:fV}=require("crypto"),Xue=require("util");mC=Xue.promisify(mC);var It=Fd.pki,_i=require("joi"),{v4:mV}=require("uuid"),{validateBySchema:_C}=ot(),{forComponent:Zue}=z(),us=le(),xs=(k(),D(Y)),{CONFIG_PARAMS:Ul}=xs,gi=Lw(),{ClientError:ec}=Ee(),YS=require("node:tls"),{relative:pV,join:ede}=require("node:path"),{CERTIFICATE_VALUES:oV}=gi,tde=$c(),pC=Et(),{table:rde,getDatabases:nde,databases:KS}=(Ne(),D(ft)),{getJWTRSAKeys:aV}=(Id(),D($p)),ze=Zue("tls").conditional;Yt.generateKeys=TC;Yt.updateConfigCert=RV;Yt.createCsr=ude;Yt.signCertificate=dde;Yt.setCertTable=kd;Yt.loadCertificates=SV;Yt.reviewSelfSignedCert=RC;Yt.createTLSSelector=AV;Yt.listCertificates=wV;Yt.addCertificate=_de;Yt.removeCertificate=Sde;Yt.createNatsCerts=pde;Yt.generateCertsKeys=mde;Yt.getReplicationCert=sh;Yt.getReplicationCertAuth=lde;Yt.renewSelfSigned=hde;Yt.hostnamesFromCert=AC;Yt.getKey=Tde;Yt.getHostnamesFromCertificate=yde;Yt.getPrimaryHostName=bC;var{urlToNodeName:hV,getThisNodeUrl:sde,getThisNodeName:zS,clearThisNodeName:ide}=(ls(),D(Yo)),{readFileSync:ode,statSync:EV}=require("node:fs"),jxe=le(),{getTicketKeys:ade,onMessageFromWorkers:cde}=Je(),{isMainThread:_V}=require("worker_threads"),{TLSSocket:gV,createSecureContext:Qxe}=require("node:tls"),gC=3650,nh=["127.0.0.1","localhost","::1"],SC=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];cde(async e=>{e.type===xs.ITC_EVENT_TYPES.RESTART&&(us.initSync(!0),await RC())});var Zr;function rc(){return Zr||(Zr=nde().system.hdb_certificate,Zr||(Zr=rde({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),Zr}o(rc,"getCertTable");async function sh(){let e=AV("operations-api"),t={secureContexts:null,setSecureContext:o(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(zS());if(!r)return;let n=new Ko(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}o(sh,"getReplicationCert");async function lde(){rc();let e=(await sh()).options.cert,r=new Ko(e).issuer.match(/CN=(.*)/)?.[1];return Zr.get(r)}o(lde,"getReplicationCertAuth");var cV,tc=new Map;function SV(){if(cV)return;cV=!0;let e=[{configKey:Ul.TLS},{configKey:Ul.OPERATIONSAPI_TLS}];rc();let t=mr.dirname(pC.getConfigFilePath()),r;for(let{configKey:n}of e){let s=pC.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&pV(ede(t,"keys"),a);c&&lV(a,l=>{tc.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&_V){let d;lV(u,f=>{if(oV.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=bV(u),h=new Ko(p),E;try{E=bC(h)}catch(R){ze.error?.("error extracting host name from certificate",R);return}if(E==null){ze.error?.("No host name found on certificate");return}if(h.checkIssued(new Ko(oV.cert)))return;let g=Zr.primaryStore.get(E),b=EV(u).mtimeMs,S=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&b<=S){b<S&&ze.info?.(`Certificate ${E} at ${u} is older (${new Date(b)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=Zr.put({name:E,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:p,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:b,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject?.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}o(SV,"loadCertificates");function lV(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&_V&&ze.warn?.(`Reloading ${r}:`,i),n=c,t(bV(i)))}catch(c){ze.error?.(`Error loading ${r}:`,i,c)}},"loadFile");kn.existsSync(e)?s(e,EV(e)):ze.error?.(`${r} file not found:`,e),Jue(e,{persistent:!1}).on("change",s)}o(lV,"loadAndWatch");function hC(){let e=sde();if(e==null){let t=nh[0];return ze.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return hV(e)}o(hC,"getHost");function WS(){let e=zS();if(e==null){let t=nh[0];return ze.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}o(WS,"getCommonName");async function ude(){let e=await sh(),t=It.certificateFromPem(e.options.cert),r=It.privateKeyFromPem(e.options.key);ze.info?.("Creating CSR with cert named:",e.name);let n=It.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:WS()},...SC];ze.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:TV()}];return ze.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Fd.pki.certificationRequestToPem(n)}o(ude,"createCsr");function TV(){let e=nh.includes(WS())?nh:[...nh,WS()];return e.includes(hC())||e.push(hC()),[{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=>dV.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o(TV,"certExtensions");async function dde(e){let t={},r=mr.join(us.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;rc();for await(let d of Zr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(tc.has(d.private_key_name)){n=tc.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await kn.exists(mr.join(r,d.private_key_name))){n=kn.readFile(mr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await EC();s=d.ca,n=d.private_key}n=It.privateKeyFromPem(n),t.signingCA=s.certificate;let i=It.certificateFromPem(s.certificate);ze.info?.("Signing CSR with cert named",s.name);let a=It.certificationRequestFromPem(e.csr);try{a.verify()}catch(d){return ze.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=Fd.pki.createCertificate();c.serialNumber="0"+Math.random().toString().slice(2,9),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+gC),ze.info?.("sign cert setting validity:",c.validity),ze.info?.("sign cert setting subject from CSR:",a.subject.attributes),c.setSubject(a.subject.attributes),ze.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=a.getAttribute({name:"extensionRequest"}).extensions;ze.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=a.publicKey,c.sign(n,Fd.md.sha256.create()),t.certificate=It.certificateToPem(c)}else ze.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}o(dde,"signCertificate");async function fde(e,t){await kd({name:zS(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await kd({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:It.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}o(fde,"createCertificateTable");async function kd(e){let t;try{t=new Ko(e.certificate)}catch(r){ze.error?.(`Failed to parse certificate for ${e.name}:`,r.message),ze.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 Zr.patch(e)}o(kd,"setCertTable");async function TC(){let e=await mC("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:It.publicKeyFromPem(e.publicKey),privateKey:It.privateKeyFromPem(e.privateKey)}}o(TC,"generateKeys");async function yC(e,t,r){let n=It.createCertificate();if(!t){let a=await sh();t=It.certificateFromPem(a.options.cert).publicKey}n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+gC);let i=[{name:"commonName",value:WS()},...SC];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(TV()),n.sign(e,Fd.md.sha256.create()),It.certificateToPem(n)}o(yC,"generateCertificates");async function EC(){let e=await wV(),t;for(let r of e){if(!r.is_authority)continue;let n=await IV(r.private_key_name);if(r.private_key_name&&n&&new Ko(r.certificate).checkPrivateKey(fV(n))){ze.trace?.(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;ze.trace?.("No CA found with matching private key")}o(EC,"getCertAuthority");async function yV(e,t,r=!0){let n=It.createCertificate();n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+gC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${us.get(Ul.REPLICATION_HOSTNAME)??hV(us.get(Ul.REPLICATION_URL))??mV().split("-")[0]}`},...SC];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),n.sign(e,Fd.md.sha256.create());let a=mr.join(us.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME),c=mr.join(a,gi.PRIVATEKEY_PEM_NAME);return r&&await kn.writeFile(c,It.privateKeyToPem(e)),n}o(yV,"generateCertAuthority");async function mde(){let{privateKey:e,publicKey:t}=await TC(),r=await yV(e,t),n=await yC(e,t,r);await fde(n,r),RV()}o(mde,"generateCertsKeys");async function pde(){let e=await yC(It.privateKeyFromPem(gi.CERTIFICATE_VALUES.key),void 0,It.certificateFromPem(gi.CERTIFICATE_VALUES.cert)),t=mr.join(us.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME),r=mr.join(t,gi.NATS_CERTIFICATE_PEM_NAME);await kn.exists(r)||await kn.writeFile(r,e);let n=mr.join(t,gi.NATS_CA_PEM_NAME);await kn.exists(n)||await kn.writeFile(n,gi.CERTIFICATE_VALUES.cert)}o(pde,"createNatsCerts");async function hde(){rc();for await(let e of Zr.search([{attribute:"is_self_signed",value:!0}]))await Zr.delete(e.name);await RC()}o(hde,"renewSelfSigned");async function RC(){ide(),await SV(),rc();let e=await EC();if(!e){ze.notify?.("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=o(u=>{try{return{key:It.privateKeyFromPem(kn.readFileSync(u)),keyPath:u}}catch(d){return ze.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=us.get(Ul.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=us.get(Ul.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let a=mr.join(us.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME),c=pV(a,i);s||(ze.warn?.("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await TC(),kn.existsSync(mr.join(a,gi.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${mV().split("-")[0]}.pem`),await kn.writeFile(mr.join(a,c),It.privateKeyToPem(s)));let l=await yV(s,It.setRsaPublicKey(s.n,s.e),!1);await kd({name:l.subject.getField("CN").value,uses:["https"],certificate:It.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await sh()){let r=zS();ze.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await EC();let n=It.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await yC(It.privateKeyFromPem(e.private_key),s,n);await kd({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}o(RC,"reviewSelfSignedCert");function RV(){let e=tde(Object.keys(xs.CONFIG_PARAM_MAP),!0),t=mr.join(us.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME),r=mr.join(t,gi.PRIVATEKEY_PEM_NAME),n=mr.join(t,gi.NATS_CERTIFICATE_PEM_NAME),s=mr.join(t,gi.NATS_CA_PEM_NAME),i=xs.CONFIG_PARAMS,a={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(a[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(a[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,a[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,a[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),pC.updateConfigValue(void 0,void 0,a,!1,!0)}o(RV,"updateConfigCert");function bV(e){return e.startsWith("-----BEGIN")?e:ode(e,"utf8")}o(bV,"readPEM");var uV=YS.createSecureContext;YS.createSecureContext=function(e){if(!e.cert||!e.key)return uV(e);let t={...e};delete t.key,delete t.cert;let r=uV(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Ede=gV.prototype._init;gV.prototype._init=function(e,t){Ede.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,a)=>{this.sni_context=a?.context||a,this.certCbDone()})}};var vl=new Map;function AV(e,t){let r=new Map,n,s=!1;return i.initialize=a=>i.ready?i.ready:(a&&(a.secureContexts=r,a.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),vl.clear();let d=0;if(KS===void 0){c();return}for await(let f of KS.system.hdb_certificate.search([])){let m=f.certificate,p=new Ko(m);f.is_authority&&(p.asString=m,vl.set(p.subject,m))}for await(let f of KS.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",p=f.is_self_signed?1:3;m&&f.uses?.includes?.("operations")&&(p+=1);let h=await IV(f.private_key_name),E=f.certificate,g=new Ko(E);if(vl.has(g.issuer)&&(E+=`
|
|
19
|
+
`+vl.get(g.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let b={ciphers:f.ciphers,ticketKeys:ade(),availableCAs:vl,ca:t&&Array.from(vl.values()),cert:E,key:h,key_file:f.private_key_name,is_self_signed:f.is_self_signed};a&&(b.sessionIdContext=a.sessionIdContext);let S=f.hostnames??AC(g);Array.isArray(S)||(S=[S]);for(let O of S)O===hC()&&(p+=1);let R=YS.createSecureContext(b);R.name=f.name,R.options=b,R.quality=p,R.certificateAuthorities=Array.from(vl),R.certStart=E.toString().slice(0,100);let L;for(let O of S)if(O){O[0]==="*"&&(s=!0,O=O.slice(1)),dV.isIP(O)&&(L=!0);let x=r.get(O)?.quality??0;ze.trace?.("Assigning TLS for hostname",O,"if",p,">",x),p>x&&r.set(O,R)}else ze.error?.("No hostname found for certificate at",YS.certificate);ze.trace?.("Adding TLS",R.name,"for",a.ports||"client","cert named",f.name,"hostnames",S,"quality",p,"best quality",d),p>d&&(i.defaultContext=n=R,d=p,a&&(a.defaultContext=R))}catch(m){ze.error?.("Error applying TLS for",f.name,m)}a?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}o(u,"updateTLS"),KS?.system.hdb_certificate.subscribe({listener:o(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(a,c){ze.info?.("TLS requested for",a||"(no SNI)");let l=a;for(;;){let d=r.get(l);if(d)return ze.debug?.("Found certificate for",a,d.certStart),d.updatedContext&&(d=d.updatedContext),c(null,d);if(s&&l){let f=l.indexOf(".",1);f<0?l="":l=l.slice(f)}else break}a?ze.debug?.("No certificate found to match",a,"using the default certificate"):ze.debug?.("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):ze.info?.("No default certificate found"),c(null,u)}o(i,"SNICallback")}o(AV,"createTLSSelector");async function IV(e){let t=tc.get(e);return!t&&e?await kn.readFile(mr.join(us.get(Ul.ROOTPATH),xs.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(IV,"getPrivateKeyByName");async function wV(){rc();let e=[];for await(let t of Zr.search([]))e.push(t);return e}o(wV,"listCertificates");async function _de(e){let t=_C(e,_i.object({name:_i.string().required(),certificate:_i.string().required(),is_authority:_i.boolean().required(),private_key:_i.string(),hosts:_i.array(),uses:_i.array()}));if(t)throw new ec(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,a=new Ko(n),c=!1,l=!1,u;for(let[p,h]of tc)!s&&!c&&a.checkPrivateKey(fV(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new ec("A suitable private key was not found for this certificate");let d;if(!r){try{d=bC(a)}catch(p){ze.error?.(p)}if(d==null)throw new ec("Error extracting certificate host name, please provide a name parameter")}let f=gde(r??d);s&&!c&&!l&&(await kn.writeFile(mr.join(us.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME,f+".pem"),s),tc.set(f,s));let m={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(m.private_key_name=u??f+".pem"),e.ciphers&&(m.ciphers=e.ciphers),await kd(m),"Successfully added certificate: "+f}o(_de,"addCertificate");function gde(e){return e.replace(/[^a-z0-9\.]/gi,"-")}o(gde,"sanitizeName");async function Sde(e){let t=_C(e,_i.object({name:_i.string().required()}));if(t)throw new ec(t.message);let{name:r}=e;rc();let n=await Zr.get(r);if(!n)throw new ec(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Zr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(ze.info?.("Removing private key named",s),await kn.remove(mr.join(us.getHdbBasePath(),xs.LICENSE_KEY_DIR_NAME,s)))}return await Zr.delete(r),"Successfully removed "+r}o(Sde,"removeCertificate");function bC(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||AC(e)[0]}o(bC,"getPrimaryHostName");function AC(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=e.subject?.match(/CN=(.*)/)?.[1];return t?[t]:[]}o(AC,"hostnamesFromCert");async function Tde(e){if(e.bypass_auth!==!0)throw new ec("Unauthorized","401");let t=_C(e,_i.object({name:_i.string().required()}));if(t)throw new ec(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await aV()).privateKey;if(r===".jwtPublic")return(await aV()).publicKey;if(tc.get(r))return tc.get(e.name);throw new ec("Key not found")}o(Tde,"getKey");function yde(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o(yde,"getHostnamesFromCertificate")});var QV={};be(QV,{CONFIRMATION_STATUS_POSITION:()=>WV,LATENCY_POSITION:()=>tT,NodeReplicationConnection:()=>qd,OPERATION_REQUEST:()=>OC,RECEIVED_TIME_POSITION:()=>LC,RECEIVED_VERSION_POSITION:()=>PC,RECEIVING_STATUS_POSITION:()=>DC,RECEIVING_STATUS_RECEIVING:()=>jV,RECEIVING_STATUS_WAITING:()=>zV,SENDING_TIME_POSITION:()=>ih,createWebSocket:()=>rT,databaseSubscriptions:()=>sc,replicateOverWS:()=>oh,tableUpdateListeners:()=>vC});async function rT(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=st(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!NC){let l=(0,GV.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),NC=u.secureContexts}if(i=NC.get(s),i&&de.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let a={};r&&(a.Authorization=r);let c={headers:a,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,VV.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(eT?.caCount!==Wo.size&&(eT=$V.createSecureContext({...i.options,ca:[...Wo,...i.options.availableCAs.values()]}),eT.caCount=Wo.size),c.secureContext=eT),new kV.WebSocket(e,"harperdb-replication-v1",c)}function oh(e,t,r){let n=t.port||t.securePort,s=xl.pid%1e3+"-"+HV.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);de.debug?.(s,"Initializing replication connection",r);let i=0,a=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(a.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||sc,f,m,p=!1,h=t.subscription;h?.then&&h.then(T=>{h=T,h.auditStore&&(f=h.auditStore)});let E=t.tables||u&&at()[u],g,b=new Map,S=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let R,L,O,x,j,H,F,Q=6e4,W,fe=0,ue=0,ee=0,Re=FV.default.get(U.REPLICATION_BLOBTIMEOUT)??12e4,Ie=new Map,$e=[],Fe=0,yr;if(t.url){let T=o(()=>{j&&ue===e._socket?.bytesRead&&ee===e._socket?.bytesWritten?e.terminate():(j=performance.now(),e.ping(),ue=e._socket?.bytesRead,ee=e._socket?.bytesWritten)},"sendPing");O=setInterval(T,xV).unref(),T()}else Xt();e._socket?.setMaxListeners(200);function Xt(){clearTimeout(x),ue=e._socket?.bytesRead,ee=e._socket?.bytesWritten,x=setTimeout(()=>{ue===e._socket?.bytesRead&&ee===e._socket?.bytesWritten&&(de.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},xV*2).unref()}o(Xt,"resetPingTimer");function Ht(){if(!(!g||!u))return m||(m=Md(f,u,g)),m}o(Ht,"getSharedStatus"),u&&Bc(u);let Zt,$f,Uc=[],qt=[],Vf,Kf=[],KE=[],YE=[],lb=150,Yf=25,Oe=0,WE=0,Wf=!1,go,Mr,Rr,zf;e.on("message",ub);async function ub(T){if(r=await r,!r){de.error?.(s,"No authorization provided"),Vr(1008,"Unauthorized");return}xc(T),e.off("message",ub),e.on("message",xc)}o(ub,"onWSMessageWhenAuthorized");function xc(T){fe=performance.now();try{let A=T.dataView=new jc(T.buffer,T.byteOffset,T.byteLength);if(T[0]>127){let M=(0,it.decode)(T),[q,C,B]=M;switch(q){case CV:{if(C){if(g){if(g!==C){de.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${C}, disconnecting`),e.send((0,it.encode)([Hd])),Vr(1008,"Node name mismatch");return}}else if(g=C,t.connection?.tentativeNode){let ae=t.connection.tentativeNode;ae.name=g,t.connection.tentativeNode=null,Vo(g,ae)}if(t.connection&&(t.connection.nodeName=g),de.debug?.(s,"received node name:",g,"db:",u??M[2]),!u)try{Bc(u=M[2]),u==="system"&&(Zt=Xa(t,(ae,ie)=>{hu(ie)&&Eu(ie)}),e.on("close",()=>{Zt?.remove()}))}catch(ae){de.warn?.(s,"Error setting database",ae),e.send((0,it.encode)([Hd])),Vr(1008,ae.message);return}jf()}break}case vV:{de.debug?.(s,"Received table definitions for",C.map(ae=>ae.table));for(let ae of C){let ie=M[2];ae.database=ie;let re;if(hu(ie)){if(u==="system")De[ie]?.[ae.table]||(re=y(ae,De[ie]?.[ae.table]));else{if(ie!=="data"&&!De[ie]){de.warn?.("Database not found",ie);return}re=y(ae,De[ie]?.[ae.table])}f||(f=re?.auditStore),E||(E=at()?.[ie])}}break}case Hd:Vr();break;case OC:try{let ae=r?.replicates||r?.subscribers||r?.name;de.debug?.("Received operation request",C,"from",g),server.operation(C,{user:r},!ae).then(ie=>{de.debug?.("Requested request from finished",g,ie),Array.isArray(ie)&&(ie={results:ie}),ie.requestId=C.requestId,e.send((0,it.encode)([QS,ie]))},ie=>{de.debug?.("Failed requested operation from",g,ie),e.send((0,it.encode)([QS,{requestId:C.requestId,error:IC(ie)}]))})}catch(ae){e.send((0,it.encode)([QS,{requestId:C.requestId,error:IC(ae)}]))}break;case QS:let{resolve:G,reject:te}=b.get(C.requestId);de.debug?.("Received completed operation request",g,C),C.error?te(new Error(C.error)):G(C),b.delete(C.requestId);break;case wC:let X=M[3];if(!E){u?de.error?.(s,"No database found for",u):de.error?.(s,"Database name never received"),Vr();return}let $=E[X];$=y({table:X,database:u,attributes:C.attributes,schemaDefined:C.schemaDefined},$),Uc[B]={name:X,decoder:new it.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:C.typedStructs,structures:C.structures}),getEntry(ae){return $.primaryStore.getEntry(ae)},rootStore:$.primaryStore.rootStore};break;case OV:zf=f?z$(C,f):new Map,Vf=M[2],de.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${Vf}`);break;case PV:let Le=B;YE[Le]=C;break;case MV:Ht()[WV]=C,de.trace?.(s,"received and broadcasting committed update",C),Ht().buffer.notify();break;case DV:R=C,h.send({type:"end_txn",localTime:R,remoteNodeIds:S});break;case JS:{let ae=M[1],{fileId:ie,size:re,finished:ne,error:_e}=ae,me=Ie.get(ie);de.debug?.("Received blob",ie,"has stream",!!me,"connectedToBlob",!!me?.connectedToBlob,"length",M[2].length,"finished",ne),me||(me=new CC.PassThrough,me.expectedSize=re,Ie.set(ie,me)),me.lastChunk=Date.now();let he=M[2];qe(he.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{ne?(_e?(me.on("error",()=>{}),me.destroy(new Error("Blob error: "+_e+" for record "+(me.recordId??"unknown")+" from "+remote_node_name))):me.end(he),me.connectedToBlob&&Ie.delete(ie)):me.write(he)}catch(Ve){de.error?.(`Error receiving blob for ${me.recordId} from ${g} and streaming to storage`,Ve),Ie.delete(ie)}break}case LV:{let ae=C,ie;try{let re=M[3],ne=qt[B]||(qt[B]=E[M[4]]);if(!ne)return de.warn?.("Unknown table id trying to handle record request",B);let _e=ne.primaryStore.getBinaryFast(Symbol.for("structures")),me=_e?.length??0;if(me>0&&me!==WE){WE=me;let Ve=(0,it.decode)(_e);e.send((0,it.encode)([wC,{typedStructs:Ve.typed,structures:Ve.named},B,ne.tableName]))}let he=ne.primaryStore.getBinaryFast(re);if(he){let Ve=ne.primaryStore.decoder.decode(he,{valueAsBuffer:!0}),we=ct||{};we.version=(0,KV.getLastVersion)(),ct&&ct[Ou]&Pn&&(Ve=Buffer.from(Ve),wm(()=>ne.primaryStore.decoder.decode(he),Ze=>br(Ze,re),ne.primaryStore.rootStore)),ie=(0,it.encode)([jS,ae,{value:Ve,expiresAt:we.expiresAt,version:we.version,residencyId:we.residencyId,nodeId:we.nodeId,user:we.user}])}else ie=(0,it.encode)([jS,ae])}catch(re){ie=(0,it.encode)([jS,ae,{error:re.message}])}e.send(ie);break}case jS:{let{resolve:ae,reject:ie,tableId:re,key:ne}=b.get(M[1]),_e=M[2];if(_e?.error)ie(new Error(_e.error));else if(_e){let me;P_(()=>{let he=Uc[re].decoder.decode(_e.value);_e.value=he,_e.key=ne,ae(_e)||me&&setTimeout(()=>me.forEach(N_),6e4).unref()},f?.rootStore,he=>{let Ve=pu(he,ne);return me||(me=[]),me.push(Ve),Ve})}else ae();b.delete(M[1]);break}case NV:{Rr=C;let ae,ie,re=!1;if(h){if(u!==h.databaseName&&!h.then){de.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(de.debug?.(s,"received subscription request for",u,"at",Rr),!h){let Te;h=new Promise(Rt=>{de.debug?.("Waiting for subscription to database "+u),Te=Rt}),h.ready=Te,sc.set(u,h)}if(r.name)ie=Kt().subscribe(r.name),ie.then(async Te=>{ae=Te;for await(let Rt of ae){let Pt=Rt.value;if(!(Pt?.replicates===!0||Pt?.replicates?.receives||Pt?.subscriptions?.some(Ur=>(Ur.database||Ur.schema)===u&&Ur.publish!==!1))){re=!0,e.send((0,it.encode)([Hd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}}},Te=>{de.error?.(s,"Error subscribing to HDB nodes",Te)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,it.encode)([Hd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}if(Mr&&(de.debug?.(s,"stopping previous subscription",u),Mr.emit("close")),Rr.length===0)return;let ne=Rr[0],_e=o(Te=>{if(Te&&(ne.replicateByDefault?!ne.tables.includes(Te.tableName):ne.tables.includes(Te.tableName)))return{table:Te}},"tableToTableEntry"),me={txnTime:0},he,Ve,we=1/0,Ze,vr=o((Te,Rt)=>{if(Te.type==="end_txn"){me.txnTime&&(a[i]!==66&&de.error?.("Invalid encoding of message"),So(9),So(H_),K(Ze=Rt),Xs()),i=c,me.txnTime=0;return}let Pt=Te.nodeId,Ur=Te.tableId,Lt=Ve[Ur];if(!Lt&&(Lt=Ve[Ur]=_e(h.tableById[Ur]),!Lt))return de.debug?.("Not subscribed to table",Ur);let Rs=Lt.table,Dt=Rs.primaryStore,Zs=Dt.encoder;(Te.extendedType&Q_||!Zs.typedStructs)&&(Zs._mergeStructures(Zs.getStructures()),Zs.typedStructs&&(Zs.lastTypedStructuresLength=Zs.typedStructs.length));let _u=he[Pt];if(!(_u&&_u.startTime<Rt&&(!_u.endTime||_u.endTime>Rt)))return ZS&&de.trace?.(s,"skipping replication update",Te.recordId,"to:",g,"from:",Pt,"subscribed:",he),rv();ZS&&de.trace?.(s,"sending replication update",Te.recordId,"to:",g,"from:",Pt,"subscribed:",he);let db=Te.version;me.txnTime!==db&&(me.txnTime&&(ZS&&de.trace?.(s,"new txn time, sending queued txn",me.txnTime),a[i]!==66&&de.error?.("Invalid encoding of message"),Xs()),me.txnTime=db,i=c,K(db));let qc=Te.residencyId,fb=ba(qc,Rs),jE;if(fb&&!fb.includes(g)){let ei=ba(Te.previousResidencyId,Rs);if(ei&&!ei.includes(g)&&(Te.type==="put"||Te.type==="patch")||Rs.getResidencyById)return rv();let Qf=Te.recordId;de.trace?.(s,"sending invalidation",Qf,g,"from",Pt);let Jf=0;qc&&(Jf|=Qc),Te.previousResidencyId&&(Jf|=Jc);let hb,QE=null;for(let nv in Rs.indices){if(!QE){if(hb=Te.getValue(Dt,!0),!hb)break;QE={}}QE[nv]=hb[nv]}jE=Xc(Te.version,Ur,Qf,null,Pt,Te.user,Te.type==="put"||Te.type==="patch"?"invalidate":Te.type,Zs.encode(QE),Jf,qc,Te.previousResidencyId,Te.expiresAt)}function rv(){return de.trace?.(s,"skipping audit record",Te.recordId),H||(H=setTimeout(()=>{H=null,(Ze||0)+UV/2<we&&(ZS&&de.trace?.(s,"sending skipped sequence update",we),e.send((0,it.encode)([DV,we])))},UV).unref()),new Promise(setImmediate)}o(rv,"skipAuditRecord");let mb=Zs.typedStructs,pb=Zs.structures;if((mb?.length!=Lt.typed_length||pb?.length!=Lt.structure_length)&&(Lt.typed_length=mb?.length,Lt.structure_length=pb.length,de.debug?.(s,"send table struct",Lt.typed_length,Lt.structure_length),Lt.sentName||(Lt.sentName=!0),e.send((0,it.encode)([wC,{typedStructs:mb,structures:pb,attributes:Rs.attributes,schemaDefined:Rs.schemaDefined},Ur,Lt.table.tableName]))),qc&&!KE[qc]&&(e.send((0,it.encode)([PV,fb,qc])),KE[qc]=!0),jE)So(jE.length),Hc(jE);else{let ei=Te.encoded;Te.extendedType&Pn&&wm(()=>Te.getValue(Dt),Jf=>br(Jf,Te.recordId),Dt.rootStore);let Qf=ei[0]===66?8:0;So(ei.length-Qf),Hc(ei,Qf),de.trace?.("wrote record",Te.recordId,"length:",ei.length)}return e._socket.writableNeedDrain?new Promise(ei=>{de.debug?.(`Waiting for remote node ${g} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",ei)}):Fe>Yf?new Promise(ei=>{yr=ei}):new Promise(setImmediate)},"sendAuditRecord"),Xs=o(()=>{c-i>8?(e.send(a.subarray(i,c)),de.debug?.(s,"Sent message, size:",c-i),u!=="system"&&qe(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):de.debug?.(s,"skipping empty transaction")},"sendQueuedData");Mr=new MC.EventEmitter,Mr.once("close",()=>{re=!0,ae?.end()});for(let{startTime:Te}of Rr)Te<we&&(we=Te);(ie||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,Ve=h.tableById.map(_e),he=[];for(let{name:Rt,startTime:Pt,endTime:Ur}of Rr){let Lt=qS(Rt,f);de.debug?.("subscription to",Rt,"using local id",Lt,"starting",Pt),he[Lt]={startTime:Pt,endTime:Ur}}Eu(u),Zt||(Zt=Nl(Rt=>{Rt.databaseName===u&&Eu(u)}),$f=vp(Rt=>{Rt===u&&(e.send((0,it.encode)([Hd])),Vr())}),e.on("close",()=>{Zt?.remove(),$f?.remove()})),e.send((0,it.encode)([OV,Jp(h.auditStore),Rr.map(({name:Rt})=>Rt)]));let Te=!0;do{isFinite(we)||(de.warn?.("Invalid sequence id "+we),Vr(1008,"Invalid sequence id"+we));let Rt;if(Te&&!re&&(Te=!1,we===0)){de.info?.("Replicating all tables to",g);let Pt=we,Ur=nT(f);for(let Lt in E){if(!_e(Lt))continue;let Rs=E[Lt];for(let Dt of Rs.primaryStore.getRange({snapshot:!1,versions:!0})){if(re)return;if(Dt.localTime>=we){de.trace?.(s,"Copying record from",u,Lt,Dt.key,Dt.localTime),Pt=Math.max(Dt.localTime,Pt),Rt=!0,Ht()[ih]=1;let Zs=Xc(Dt.version,Rs.tableId,Dt.key,null,Ur,null,"put",wm(()=>Rs.primaryStore.encoder.encode(Dt.value),_u=>br(_u,Dt.key)),Dt.metadataFlags&-256,Dt.residencyId,null,Dt.expiresAt);await vr({recordId:Dt.key,tableId:Rs.tableId,type:"put",getValue(){return Dt.value},encoded:Zs,version:Dt.version,residencyId:Dt.residencyId,nodeId:Ur,extendedType:Dt.metadataFlags},Dt.localTime)}}}Rt&&vr({type:"end_txn"},we),Ht()[ih]=0,we=Pt}for(let{key:Pt,value:Ur}of f.getRange({start:we||1,exclusiveStart:!0,snapshot:!1})){if(re)return;let Lt=Mt(Ur);de.debug?.("sending audit record",new Date(Pt)),Ht()[ih]=Pt,we=Pt,await vr(Lt,Pt),Mr.startTime=Pt,Rt=!0}Rt&&vr({type:"end_txn"},we),Ht()[ih]=0,await f0(f)}while(!re)}).catch(Te=>{de.error?.(s,"Error handling subscription to node",Te),Vr(1008,"Error handling subscription to node")});break}}return}A.position=8;let I=!0,N,P;do{Ht();let M=A.readInt();if(M===9&&A.getUint8(A.position)==H_){A.position++,R=P=A.readFloat64(),m[PC]=R,m[LC]=Date.now(),m[DC]=zV,de.trace?.("received remote sequence update",R,u);break}let q=A.position,C=Mt(T,q,q+M),B=Uc[C.tableId];B||de.error?.(`No table found with an id of ${C.tableId}`);let G;C.residencyId&&(G=YE[C.residencyId],de.trace?.(s,"received residency list",G,C.type,C.recordId));try{let te=C.recordId;P_(()=>{N={table:B.name,id:C.recordId,type:C.type,nodeId:zf.get(C.nodeId),residencyList:G,timestamp:C.version,value:C.getValue(B),user:C.user,beginTxn:I,expiresAt:C.expiresAt}},f?.rootStore,X=>pu(X,te))}catch(te){throw te.message+="typed structures for current decoder"+JSON.stringify(B.decoder.typedStructs),te}I=!1,de.trace?.(s,"received replication message",C.type,"id",N.id,"version",new Date(C.version),"nodeId",N.nodeId),m[PC]=C.version,m[LC]=Date.now(),m[DC]=jV,h.send(N),A.position=q+M}while(A.position<T.byteLength);Oe++,u!=="system"&&qe(T.byteLength,"bytes-received",`${g}.${u}.${N?.table||"unknown_table"}`,"replication","ingest"),Oe>lb&&!Wf&&(Wf=!0,e.pause(),de.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),h.send({type:"end_txn",localTime:R,remoteNodeIds:S,async onCommit(){if(N){let M=Date.now()-N.timestamp;u!=="system"&&qe(M,"replication-latency",g+"."+u+"."+N.table,N.type,"ingest")}Oe--,Wf&&(Wf=!1,e.resume(),de.debug?.(`Replication resuming ${g}`)),$e.length>0&&await Promise.all($e),de.trace?.("All blobs finished"),!L&&P&&(de.trace?.(s,"queuing confirmation of a commit at",P),setTimeout(()=>{e.send((0,it.encode)([MV,L])),de.trace?.(s,"sent confirmation of a commit at",L),L=null},Ade)),L=P,de.debug?.("last sequence committed",new Date(P),u)}})}catch(A){de.error?.(s,"Error handling incoming replication message",A)}}o(xc,"onWSMessage"),e.on("ping",Xt),e.on("pong",()=>{if(t.connection){let T=performance.now()-j;t.connection.latency=T,Ht()&&(m[tT]=T),t.isSubscriptionConnection&&Ml({name:g,database:u,url:t.url,latency:T})}j=null}),e.on("close",(T,A)=>{clearInterval(O),clearTimeout(x),clearInterval(F),Mr&&Mr.emit("close"),go&&go.end();for(let[I,{reject:N}]of b)N(new Error(`Connection closed ${A?.toString()} ${T}`));de.debug?.(s,"closed",T,A?.toString())});function Vr(T,A){try{e.isFinished=!0,de.debug?.(s,"closing",g,u,T,A),e.close(T,A),t.connection?.emit("finished")}catch(I){de.error?.(s,"Error closing connection",I)}}o(Vr,"close");let Ra=new Set;async function br(T,A){let I=C_(T);if(Ra.has(I)){de.debug?.("Blob already being sent",I);return}Ra.add(I);try{let N;Fe++;for await(let P of T.stream())N&&(de.debug?.("Sending blob chunk",I,"length",N.length),e.send((0,it.encode)([JS,{fileId:I,size:T.size},N]))),N=P,e._socket.writableNeedDrain&&(de.debug?.("draining",I),await new Promise(M=>e._socket.once("drain",M)),de.debug?.("drained",I)),qe(P.length,"bytes-sent",`${g}.${u}`,"replication","blob");de.debug?.("Sending final blob chunk",I,"length",N.length),e.send((0,it.encode)([JS,{fileId:I,size:T.size,finished:!0},N]))}catch(N){de.warn?.("Error sending blob",N,"blob id",I,"for record",A),e.send((0,it.encode)([JS,{fileId:I,finished:!0,error:IC(N)},Buffer.alloc(0)]))}finally{Ra.delete(I),Fe--,Fe<Yf&&yr?.()}}o(br,"sendBlobs");function pu(T,A){let I=C_(T),N=Ie.get(I);de.debug?.("Received transaction with blob",I,"has stream",!!N,"ended",!!N?.writableEnded),N?N.writableEnded&&Ie.delete(I):(N=new CC.PassThrough,Ie.set(I,N)),N.connectedToBlob=!0,N.lastChunk=Date.now(),N.recordId=A,T.size===void 0&&N.expectedSize&&(T.size=N.expectedSize);let P=N.blob??createBlob(N,T);N.blob=P;let M=Po(()=>Am(P).saving,h.auditStore?.rootStore);return M&&(M.blobId=I,$e.push(M),M.finally(()=>{de.debug?.(`Finished receiving blob stream ${I}`),$e.splice($e.indexOf(M),1)})),P}o(pu,"receiveBlobs");function jf(){if(p||(p=!0,t.connection?.on("subscriptions-updated",jf)),!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 T=new Map;f||(f=h?.auditStore);try{for(let N of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let P of N.value.nodes||[])P.lastTxnTime>(T.get(P.id)??0)&&T.set(P.id,P.lastTxnTime)}catch(N){if(!N.message.includes("Can not re"))throw N}let A=t.connection?.nodeSubscriptions?.[0];S=[];let I=t.connection?.nodeSubscriptions.map((N,P)=>{let M=[],{replicateByDefault:q}=N;if(N.subscriptions){for(let te of N.subscriptions)if(te.subscribe&&(te.schema||te.database)===u){let X=te.table;E?.[X]?.replicate!==!1&&M.push(X)}q=!1}else for(let te in E)(q?E[te].replicate===!1:E[te].replicate)&&M.push(te);let C=f&&qS(N.name,f),B=h?.dbisDB?.get([Symbol.for("seq"),C])??1,G=Math.max(B?.seqId??1,(typeof N.startTime=="string"?new Date(N.startTime).getTime():N.startTime)??1);if(de.debug?.("Starting time recorded in db",N.name,C,u,B?.seqId,"start time:",G,new Date(G)),A!==N){let te=f&&qS(A.name,f),X=h?.dbisDB?.get([Symbol.for("seq"),te])??1;for(let $ of X?.nodes||[])$.name===N.name&&(G=$.seqId,de.debug?.("Using sequence id from proxy node",A.name,G))}if(C===void 0?de.warn("Starting subscription request from node",N,"but no node id found"):S.push(C),T.get(C)>G&&(G=T.get(C),de.debug?.("Updating start time from more recent txn recorded",A.name,G)),G===1&&XS)try{new URL(XS).hostname===N.name?(de.warn?.(`Requesting full copy of database ${u} from ${XS}`),G=0):G=Date.now()-6e4}catch(te){de.error?.("Error parsing leader URL",XS,te)}return de.trace?.(s,"defining subscription request",N.name,u,new Date(G)),{name:N.name,replicateByDefault:q,tables:M,startTime:G,endTime:N.endTime}});if(I)if(de.debug?.(s,"sending subscription request",I,h?.dbisDB?.path),clearTimeout(W),I.length>0)e.send((0,it.encode)([NV,I]));else{let N=o(()=>{let P=performance.now();W=setTimeout(()=>{fe<=P?Vr(1008,"Connection has no subscriptions and is no longer used"):N()},Q).unref()},"scheduleClose");N()}}o(jf,"sendSubscriptionRequestUpdate");function ba(T,A){if(!T)return;let I=Kf[T];return I||(I=A.getResidencyRecord(T),Kf[T]=I),I}o(ba,"getResidence");function hu(T){return!(nc&&nc!="*"&&!nc[T]&&!nc.includes?.(T)&&!nc.some?.(A=>A.name===T))}o(hu,"checkDatabaseAccess");function Bc(T){if(h=h||d.get(T),!hu(T))throw new Error(`Access to database "${T}" is not permitted`);h||de.warn?.(`No database named "${T}" was declared and registered`),f=h?.auditStore,E||(E=at()?.[T]);let A=st();if(A===g)throw A?new Error("Should not connect to self",A):new Error("Node name not defined");return Fc(A,T),!0}o(Bc,"setDatabase");function Fc(T,A){let I=at()?.[A],N=[];for(let P in I){let M=I[P];N.push({table:P,schemaDefined:M.schemaDefined,attributes:M.attributes.map(q=>({name:q.name,type:q.type,isPrimaryKey:q.isPrimaryKey}))})}de.trace?.("Sending database info for node",T,"database name",A),e.send((0,it.encode)([CV,T,A,N]))}o(Fc,"sendNodeDBName");function Eu(T){let A=at()?.[T],I=[];for(let N in A){if(Rr&&!Rr.some(M=>M.replicateByDefault?!M.tables.includes(N):M.tables.includes(N)))continue;let P=A[N];I.push({table:N,schemaDefined:P.schemaDefined,attributes:P.attributes.map(M=>({name:M.name,type:M.type,isPrimaryKey:M.isPrimaryKey}))})}e.send((0,it.encode)([vV,I,T]))}o(Eu,"sendDBSchema"),F=setInterval(()=>{for(let[T,A]of Ie)A.lastChunk+Re<Date.now()&&(de.warn?.(`Timeout waiting for blob stream to finish ${T} for record ${A.recordId??"unknown"} from ${g}`),Ie.delete(T),A.end())},Re).unref();let zE=1,kc=[];return{end(){go&&go.end(),Mr&&Mr.emit("close")},getRecord(T){let A=zE++;return new Promise((I,N)=>{let P=[LV,A,T.table.tableId,T.id];kc[T.table.tableId]||(P.push(T.table.tableName),kc[T.table.tableId]=!0),e.send((0,it.encode)(P)),fe=performance.now(),b.set(A,{tableId:T.table.tableId,key:T.id,resolve(M){let{table:q,entry:C}=T;if(I(M),M)return q._recordRelocate(C,M)},reject:N})})},sendOperation(T){let A=zE++;return T.requestId=A,e.send((0,it.encode)([OC,T])),new Promise((I,N)=>{b.set(A,{resolve:I,reject:N})})}};function So(T){_(5),T<128?a[c++]=T:T<16384?(l.setUint16(c,T|32768),c+=2):T<1056964608?(l.setUint32(c,T|3221225472),c+=4):(a[c]=255,l.setUint32(c+1,T),c+=5)}function Hc(T,A=0,I=T.length){let N=I-A;_(N),T.copy(a,c,A,I),c+=N}function K(T){_(8),l.setFloat64(c,T),c+=8}function _(T){if(T+16>a.length-c){let A=Buffer.allocUnsafeSlow(c+T-i+65536>>10<<11);a.copy(A,0,i,c),c=c-i,i=0,a=A,l=new DataView(a.buffer,0,a.length)}}function y(T,A){let I=T.database??"data";A||(A={});let N=A.schemaDefined,P=!1,M=T.schemaDefined,q=A.attributes||[];for(let C=0;C<T.attributes?.length;C++){let B=T.attributes[C],G=q.find(te=>te.name===B.name);(!G||G.type!==B.type)&&(N?de.error?.(`Schema for '${u}.${T.table}' is defined locally, but attribute '${B.name}: ${B.type}' from '${g}' does not match local attribute ${G?"'"+G.name+": "+G.type+"'":"which does not exist"}`):(P=!0,M||(B.indexed=!0),G?q[q.indexOf(G)]=B:q.push(B)))}return P?(de.debug?.("(Re)creating",T),Xe({table:T.table,database:T.database,schemaDefined:T.schemaDefined,attributes:q,...A})):A}}var FV,it,kV,HV,qV,MC,GV,$V,xl,VV,CC,KV,YV,Rde,IC,de,NV,CV,OV,Hd,PV,wC,LV,jS,OC,QS,DV,MV,vV,JS,WV,PC,LC,ih,tT,DC,zV,jV,bde,XS,vC,sc,ZS,UV,Ade,xV,NC,eT,BV,qd,UC=oe(()=>{Ne();Ro();uC();VA();ls();FV=w(le());k();Zc();it=require("msgpackr"),kV=require("ws"),HV=require("worker_threads"),qV=w(z());rh();MC=require("events"),GV=w(ds()),$V=w(require("node:tls"));Ud();xl=w(require("node:process")),VV=require("node:net");jn();As();CC=require("node:stream"),KV=require("lmdb"),YV=w(require("minimist")),{forComponent:Rde,errorToString:IC}=qV.default,de=Rde("replication").conditional,NV=129,CV=140,OV=141,Hd=142,PV=130,wC=132,LV=133,jS=134,OC=136,QS=137,DV=143,MV=144,vV=145,JS=146,WV=0,PC=1,LC=2,ih=3,tT=4,DC=5,zV=0,jV=1,bde=(0,YV.default)(xl.argv),XS=bde.HDB_LEADER_URL??xl.env.HDB_LEADER_URL,vC=new Map,sc=new Map,ZS=!0,UV=300,Ade=2,xV=3e4;o(rT,"createWebSocket");BV=500,qd=class extends MC.EventEmitter{static{o(this,"NodeReplicationConnection")}socket;startTime;retryTime=BV;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??Ei(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await rT(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;de.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${xl.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),de[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=BV,this.nodeSubscriptions&&Ml({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=oh(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(de.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),n.isHandled=!0):n.code!=="ECONNREFUSED"&&(n.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?de.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):de.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&Bd({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();de.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};o(oh,"replicateOverWS")});function ah(e){return e===XV||e===Ide}function wde(e){return e===ZV||e===e1}function xC(e){return e===XV?ZV:e1}function Nde(){if(JV)return;JV=!0;let e=Bl.CryptoEngine.prototype,t=Bl.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 ah(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return ah(s)?{name:xC(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return wde(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=Bl.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(ah(i)){let a=xC(i);return s.importKey("spki",this.subjectPublicKeyInfo.toSchema().toBER(!1),a,!0,["verify"])}return r.getPublicKey.call(this,...n)},t.verify=async function(...n){let[s]=n;if(ah(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),a=s.toSchema().toBER(!1),c=new ch.X509Certificate(Buffer.from(i)),l=new ch.X509Certificate(Buffer.from(a));return c.verify(l.publicKey)}catch{return!1}return r.certificateVerify.call(this,...n)},r.verifyWithPublicKey&&(e.verifyWithPublicKey=async function(...n){let[s,i,a]=n,c=a.algorithm.algorithmId;if(ah(c)){let l=xC(c);try{let u=this.crypto?.subtle||this.subtle||Bl.getCrypto(!0)?.subtle||ch.webcrypto?.subtle;if(!u)throw new Error("No crypto.subtle available");let d=await u.importKey("spki",a.toSchema().toBER(!1),l,!1,["verify"]),f=i.valueBlock.valueHexView;return i.valueBlock.unusedBits>0&&(f=f.slice(0,f.length-1)),await u.verify(l,d,f,s)}catch{return!1}}return r.verifyWithPublicKey.call(this,...n)})}var Bl,ch,XV,Ide,ZV,e1,JV,t1=oe(()=>{Bl=w(require("pkijs")),ch=require("node:crypto"),XV="1.3.101.112",Ide="1.3.101.113",ZV="Ed25519",e1="Ed448",JV=!1;o(ah,"isEd25519OrEd448");o(wde,"isEdDSAAlgorithmName");o(xC,"getEdDSAAlgorithmName");o(Nde,"applyEd25519Patch");Nde()});function Cde(){return sT||(sT=Xe({table:"hdb_certificate_cache",database:"system",attributes:[{name:"certificate_id",isPrimaryKey:!0},{name:"status"},{name:"reason"},{name:"checked_at"},{name:"expiresAt",expiresAt:!0,indexed:!0},{name:"method"}]}),sT.sourcedFrom(BC)),sT}function Ode(e){if(Wt.trace?.("getCertificateVerificationConfig called with:",{mtlsConfig:e}),!e)return!1;if(e===!0)return Wt.debug?.("mTLS enabled with default certificate verification"),{};let t=e.certificateVerification;return Wt.trace?.("Certificate verification config:",{verificationConfig:t}),t==null?{}:t===!1?!1:t===!0?{}:t}async function Gd(e,t){Wt.debug?.("verifyCertificate called for:",e.subject?.CN||"unknown");let r=Ode(t);if(r===!1)return Wt.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=Dde(e);return Wt.trace?.("Certificate chain length:",n.length),n.length===1&&!n[0].issuer?(Wt.debug?.("Certificate without issuer - cannot perform OCSP check"),{valid:!0,status:"no-issuer-cert",method:"disabled"}):n.length<2||!n[0].issuer?(Wt.debug?.("Certificate chain too short for revocation checking"),{valid:!0,status:"insufficient-chain",method:"disabled"}):Pde(n[0].cert,n[0].issuer,r)}async function Pde(e,t,r){Wt.debug?.("verifyOCSP called");try{Buffer.isBuffer(e)&&(e=r1(e,"CERTIFICATE")),Buffer.isBuffer(t)&&(t=r1(t,"CERTIFICATE"));let n={certPem:e,issuerPem:t,method:"ocsp"},i=`ocsp:${(0,s1.createHash)("sha256").update(JSON.stringify(n)).digest("hex")}`;Wt.trace?.("OCSP cache key:",i);let c=await Cde().get(i,{certPem:e,issuerPem:t,config:r||{}});if(!c)return(r?.failureMode??lh.failureMode)==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"ocsp"}:(Wt.warn?.("OCSP cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"});let l=c,u=c.wasLoadedFromSource?.();return Wt.trace?.(`OCSP ${u?"source fetch":"cache hit"} for certificate`),{valid:l.status==="good",status:l.status,cached:!u,method:l.method||"ocsp"}}catch(n){return Wt.error?.("OCSP verification error:",n),(r?.failureMode??lh.failureMode)==="fail-closed"?{valid:!1,status:"error",error:n.message,method:"ocsp"}:(Wt.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"})}}async function Lde(e,t,r){Wt.trace?.("Calling getCertStatus with timeout:",r);let n=await(0,n1.getCertStatus)(e,{ca:t,timeout:r});return Wt.debug?.("OCSP response from easy-ocsp:",{status:n.status,revocationReason:n.revocationReason,responseData:n}),n.status==="good"?{status:"good"}:n.status==="revoked"?{status:"revoked",reason:n.revocationReason?.toString()||"unspecified"}:{status:"unknown",reason:"unknown-status"}}function r1(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(`
|
|
20
|
+
`)}function Dde(e){let t=[],r=e;for(;r?.raw;){let n={cert:r.raw};if(r.issuerCertificate&&r.issuerCertificate!==r&&r.issuerCertificate.raw&&(n.issuer=r.issuerCertificate.raw),t.push(n),r.issuerCertificate&&r.issuerCertificate!==r)r=r.issuerCertificate;else break}return t}var n1,s1,i1,Wt,BC,lh,sT,iT=oe(()=>{t1();n1=require("easy-ocsp"),s1=require("node:crypto"),i1=w(zn());Ne();va();Wt=(0,i1.loggerWithTag)("cert-verification"),BC=class extends Fr{static{o(this,"CertificateVerificationSource")}async get(t){Wt.debug?.("CertificateVerificationSource.get called for:",t);let r=this.getContext(),n=r?.requestContext;if(!n||!n.certPem||!n.issuerPem)throw new Error(`No certificate data provided for cache key: ${t}`);let{certPem:s,issuerPem:i,config:a}=n;Wt.trace?.("Performing OCSP check with config:",a);try{let c=a?.timeout??lh.timeout,l=await Promise.race([Lde(s,i,c),new Promise((d,f)=>setTimeout(()=>f(new Error("OCSP timeout")),c))]);Wt.debug?.("OCSP check result:",l);let u=a?.cacheTtl??lh.cacheTtl;return r&&(r.expiresAt=Date.now()+u),{certificate_id:t,status:l.status,reason:l.reason,checked_at:Date.now(),expiresAt:Date.now()+u,method:"ocsp"}}catch(c){return Wt.error?.("OCSP verification error:",c),(a?.failureMode??lh.failureMode)==="fail-closed"?(r&&(r.expiresAt=Date.now()+3e5),{certificate_id:t,status:"unknown",reason:c.message,checked_at:Date.now(),expiresAt:Date.now()+3e5,method:"ocsp"}):(Wt.warn?.("OCSP check failed, allowing connection (fail-open mode)"),null)}}},lh={timeout:5e3,cacheTtl:36e5,failureMode:"fail-open"};o(Cde,"getCertificateCacheTable");o(Ode,"getCertificateVerificationConfig");o(Gd,"verifyCertificate");o(Pde,"verifyOCSP");o(Lde,"performOCSPCheck");o(r1,"bufferToPem");o(Dde,"extractCertificateChain")});var Yo={};be(Yo,{clearThisNodeName:()=>qde,disableReplication:()=>xde,enabledDatabases:()=>nc,forEachReplicatedDatabase:()=>Xa,getThisNodeId:()=>nT,getThisNodeName:()=>st,getThisNodeUrl:()=>Za,hostnameToUrl:()=>lT,lastTimeInAuditStore:()=>Xp,monitorNodeCAs:()=>p1,replicateOperation:()=>$de,replicationCertificateAuthorities:()=>Wo,sendOperationToNode:()=>uh,servers:()=>vde,setReplicator:()=>E1,start:()=>Ude,startOnMainThread:()=>fC,subscribeToNode:()=>th,unsubscribeFromNode:()=>VS,urlToNodeName:()=>Ei});function Ude(e){if(!e.port&&!e.securePort&&(e.port=Bs.default.get(U.OPERATIONSAPI_NETWORK_PORT),e.securePort=Bs.default.get(U.OPERATIONSAPI_NETWORK_SECUREPORT)),!st())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let s of eh(e))t.set(Ei(s.url),s);Bde(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=Me.ws(async(s,i,a,c)=>{if(yt.debug("Incoming WS connection received "+i.url),i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,a);s._socket.unref(),oh(s,e,a.then(()=>i?.user)),s.on("error",l=>{l.code!=="ECONNREFUSED"&&yt.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,Me.http(async(s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){yt.debug("Incoming replication WS connection received, authorized: "+s.authorized),!s.authorized&&s._nodeRequest.socket.authorizationError&&yt.error(`Incoming client connection from ${s.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,s._nodeRequest.socket.authorizationError);let a=Kt().primaryStore;if(s.authorized&&s.peerCertificate.subjectaltname){let c=(0,f1.getHostnamesFromCertificate)(s.peerCertificate),l;for(let u of c)if(l=u&&(a.get(u)||t.get(u)),l)break;if(l){let u=await Gd(s.peerCertificate,e);if(!u.valid){yt.warn("Certificate verification failed:",u.status,"for node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}if(l?.revoked_certificates?.includes(s.peerCertificate.serialNumber)){yt.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l}else yt.warn(`No node found for certificate common name/SANs: ${c}, available nodes are ${Array.from(a.getRange({}).filter(({value:u})=>u).map(({key:u})=>u)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let c=a.get(s.ip)||t.get(s.ip);c?s.user=c:yt.warn(`No node found for IP address ${s.ip}, available nodes are ${Array.from(new Set([...a.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return i(s)},e);let n=[];for(let s of r)if(s.secureContexts){let i=o(()=>{let a=new Set(s.secureContexts.values());s.defaultContext&&a.add(s.defaultContext);for(let c of a)try{let l=Array.from(Wo);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=cT.createSecureContext(u)}catch(l){yt.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),Bs.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1&&i()}p1(()=>{for(let s of n)s()})}function p1(e){let t=0;vd(r=>{r?.ca&&(Wo.add(r.ca),Wo.size!==t&&(t=Wo.size,e?.()))})}function xde(e=!0){m1=e}function Bde(e){m1||(at(),nc=e.databases,Xa(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||sc;for(let[s,i]of aT){let a=i.get(r);a&&(a.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];E1(r,s,e),vC.get(s)?.forEach(i=>i(s))}}))}function E1(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 h1 extends Fr{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||sc,a=i.get(e),c=a?.tableById||[];c[t.tableId]=t;let l=a?.ready;if(yt.trace("Setting up replicator subscription to database",e),!a?.auditStore)return this.subscription=a=new Wn,i.set(e,a),a.tableById=c,a.auditStore=t.auditStore,a.dbisDB=t.dbisDB,a.databaseName=e,l&&l(a),a;this.subscription=a}static subscribeOnThisThread(i,a){return!0}static async load(i){if(i){let a=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),a]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let h of c){if(u.has(h)||h===Me.hostname)continue;let E=kde(h,h1.subscription,e);if(E?.isConnected){let g=Md(t.auditStore,e,h)[tT];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new u1.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:Mde++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;yt.warn("Error in load from node",Fl,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function Fde(e,t,r,n,s){let i=aT.get(e);i||aT.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new qd(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function kde(e,t,r){let n=o1.get(Fl);n||(n=new Map,o1.set(Fl,n));let s=n.get(r);if(s)return s;let i=Kt().primaryStore.get(e);return i?.url&&(s=new qd(i.url,t,r,Fl,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function uh(e,t,r){r||(r={}),r.serverName=e.name;let n=await rT(e.url,r),s=oh(n,{},{});return new Promise((i,a)=>{n.on("open",()=>{yt.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{a(c)}),n.on("close",c=>{yt.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function th(e){try{d1.isMainThread&&yt.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=sc.get(e.database);if(!t){let n;t=new Promise(s=>{yt.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,sc.set(e.database,t)}let r=Fde(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>Zp(n,e.database)),e.replicateByDefault)}catch(t){yt.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function VS({name:e,url:t,database:r}){yt.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(Kt().primaryStore.getRange({})));let n=aT.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function Hde(){if(FC!==void 0)return FC;let e=Bs.default.get(U.OPERATIONSAPI_TLS_CERTIFICATE)||Bs.default.get(U.TLS_CERTIFICATE);if(e)return FC=new c1.X509Certificate((0,l1.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function st(){return Fl||(Fl=Bs.default.get("replication_hostname")??Ei(Bs.default.get("replication_url"))??Hde()??a1("operationsapi_network_secureport")??a1("operationsapi_network_port")??"127.0.0.1")}function qde(){Fl=void 0}function a1(e){let t=Bs.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function oT(e){let t=Bs.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function nT(e){return Jp(e)?.[st()]}function Za(){let e=Bs.default.get("replication_url");return e||lT(st())}function lT(e){let t=oT("replication_port");if(t)return`ws://${e}:${t}`;if(t=oT("replication_secureport"),t)return`wss://${e}:${t}`;if(t=oT("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=oT("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Ei(e){if(e)return new URL(e).hostname}function Xa(e,t){for(let n of Object.getOwnPropertyNames(De))r(n);return vp(n=>{r(n)}),Nl((n,s)=>{r(n.databaseName)});function r(n){let s=De[n];yt.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):Gde(n)&&t(s,n,!1)}o(r,"forDatabase")}function Gde(e){let t=De[e];for(let r in t)if(t[r].replicate)return!0}function Xp(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function $de(e){let t={message:""};if(e.replicated){e.replicated=!1,yt.trace?.("Replicating operation",e.operation,"to nodes",Me.nodes.map(n=>n.name));let r=await Promise.allSettled(Me.nodes.map(n=>uh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Me.nodes[s]?.name,i})}return t}var Bs,yt,c1,l1,cT,u1,d1,f1,m1,Mde,vde,Wo,nc,aT,o1,FC,Fl,ls=oe(()=>{Ne();va();yu();UC();xr();Bs=w(le()),yt=w(z()),c1=require("crypto");iT();l1=require("fs");rh();Ud();k();uC();cT=w(require("node:tls")),u1=w(Ee()),d1=require("worker_threads"),f1=w(ds()),Mde=1,vde=[],Wo=Bs.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1?new Set(cT.rootCertificates):new Set;o(Ude,"start");o(p1,"monitorNodeCAs");o(xde,"disableReplication");o(Bde,"assignReplicationSource");o(E1,"setReplicator");aT=new Map;o(Fde,"getSubscriptionConnection");o1=new Map;o(kde,"getRetrievalConnectionByName");o(uh,"sendOperationToNode");o(th,"subscribeToNode");o(VS,"unsubscribeFromNode");o(Hde,"getCommonNameFromCert");o(st,"getThisNodeName");o(qde,"clearThisNodeName");Object.defineProperty(Me,"hostname",{get(){return st()}});o(a1,"getHostFromListeningPort");o(oT,"getPortFromListeningPort");o(nT,"getThisNodeId");Me.replication={getThisNodeId:nT,exportIdMapping:Jp};o(Za,"getThisNodeUrl");o(lT,"hostnameToUrl");o(Ei,"urlToNodeName");o(Xa,"forEachReplicatedDatabase");o(Gde,"hasExplicitlyReplicatedTable");o(Xp,"lastTimeInAuditStore");o($de,"replicateOperation")});var mh=v((O0e,y1)=>{"use strict";var $d=_$(),{validateBySchema:dh}=ot(),{commonValidators:Vd,schemaRegex:kC}=ki(),pr=require("joi"),Vde=z(),Kde=require("uuid").v4,fT=xo(),Kd=(k(),D(Y)),Yde=require("util"),ic=rs(),{handleHDBError:zo,hdbErrors:Wde,ClientError:fh}=Ee(),{HDB_ERROR_MSGS:uT,HTTP_STATUS_CODES:jo}=Wde,{SchemaEventMsg:mT}=Zn(),_1=xt(),{getDatabases:zde}=(Ne(),D(ft)),{transformReq:Yd}=ce(),{replicateOperation:g1}=(ls(),D(Yo)),dT=pr.string().min(1).max(Vd.schema_length.maximum).pattern(kC).messages({"string.pattern.base":"{:#label} "+Vd.schema_format.message}),jde=pr.string().min(1).max(Vd.schema_length.maximum).pattern(kC).messages({"string.pattern.base":"{:#label} "+Vd.schema_format.message}).required(),Qde=pr.string().min(1).max(Vd.schema_length.maximum).pattern(kC).messages({"string.pattern.base":"{:#label} "+Vd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();y1.exports={createSchema:Jde,createSchemaStructure:S1,createTable:Xde,createTableStructure:T1,createAttribute:nfe,dropSchema:Zde,dropTable:efe,dropAttribute:tfe,getBackup:sfe};async function Jde(e){let t=await S1(e);return fT.signalSchemaChange(new mT(process.pid,e.operation,e.schema)),t}o(Jde,"createSchema");async function S1(e){let t=dh(e,pr.object({database:dT,schema:dT}));if(t)throw new fh(t.message);if(Yd(e),!await $d.checkSchemaExists(e.schema))throw zo(new Error,uT.SCHEMA_EXISTS_ERR(e.schema),jo.BAD_REQUEST,Kd.LOG_LEVELS.ERROR,uT.SCHEMA_EXISTS_ERR(e.schema),!0);return await ic.createSchema(e),`database '${e.schema}' successfully created`}o(S1,"createSchemaStructure");async function Xde(e){return Yd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await T1(e)}o(Xde,"createTable");async function T1(e){let t=dh(e,pr.object({database:dT,schema:dT,table:jde,residence:pr.array().items(pr.string().min(1)).optional(),hash_attribute:Qde}));if(t)throw new fh(t.message);if(!await $d.checkSchemaTableExists(e.schema,e.table))throw zo(new Error,uT.TABLE_EXISTS_ERR(e.schema,e.table),jo.BAD_REQUEST,Kd.LOG_LEVELS.ERROR,uT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Kde(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ic.createTable(n,e);else throw zo(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",jo.BAD_REQUEST);else await ic.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(T1,"createTableStructure");async function Zde(e){let t=dh(e,pr.object({database:pr.string(),schema:pr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new fh(t.message);Yd(e);let r=await $d.checkSchemaExists(e.schema);if(r)throw zo(new Error,r,jo.NOT_FOUND,Kd.LOG_LEVELS.ERROR,r,!0);let n=await $d.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await ic.dropSchema(e),fT.signalSchemaChange(new mT(process.pid,e.operation,e.schema)),await _1.purgeSchemaTableStreams(e.schema,s);let i=await g1(e);return i.message=`successfully deleted '${e.schema}'`,i}o(Zde,"dropSchema");async function efe(e){let t=dh(e,pr.object({database:pr.string(),schema:pr.string(),table:pr.string().required()}));if(t)throw new fh(t.message);Yd(e);let r=await $d.checkSchemaTableExists(e.schema,e.table);if(r)throw zo(new Error,r,jo.NOT_FOUND,Kd.LOG_LEVELS.ERROR,r,!0);await ic.dropTable(e),await _1.purgeTableStream(e.schema,e.table);let n=await g1(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(efe,"dropTable");async function tfe(e){let t=dh(e,pr.object({database:pr.string(),schema:pr.string(),table:pr.string().required(),attribute:pr.string().required()}));if(t)throw new fh(t.message);Yd(e);let r=await $d.checkSchemaTableExists(e.schema,e.table);if(r)throw zo(new Error,r,jo.NOT_FOUND,Kd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw zo(new Error,"You cannot drop a hash attribute",jo.BAD_REQUEST,void 0,void 0,!0);if(Kd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw zo(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,jo.BAD_REQUEST,void 0,void 0,!0);try{return await ic.dropAttribute(e),rfe(e),fT.signalSchemaChange(new mT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Vde.error(`Got an error deleting attribute ${Yde.inspect(e)}.`),n}}o(tfe,"dropAttribute");function rfe(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}o(rfe,"dropAttributeFromGlobal");async function nfe(e){Yd(e);let t=zde()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw zo(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,jo.BAD_REQUEST,void 0,void 0,!0);return await ic.createAttribute(e),fT.signalSchemaChange(new mT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(nfe,"createAttribute");function sfe(e){return ic.getBackup(e)}o(sfe,"getBackup")});var b1=v((L0e,R1)=>{"use strict";var{OPERATIONS_ENUM:ife}=(k(),D(Y)),HC=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=ife.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};R1.exports=HC});var qC=v((v0e,C1)=>{"use strict";var ofe=rs(),M0e=b1(),pT=ce(),hT=(k(),D(Y)),afe=le(),{handleHDBError:A1,hdbErrors:cfe}=Ee(),{HDB_ERROR_MSGS:I1,HTTP_STATUS_CODES:w1}=cfe,lfe=Object.values(hT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),N1="To use this operation audit log must be enabled in harperdb-config.yaml";C1.exports=ufe;async function ufe(e){if(pT.isEmpty(e.schema))throw new Error(I1.SCHEMA_REQUIRED_ERR);if(pT.isEmpty(e.table))throw new Error(I1.TABLE_REQUIRED_ERR);if(!afe.get(hT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw A1(new Error,N1,w1.BAD_REQUEST,hT.LOG_LEVELS.ERROR,N1,!0);let t=pT.checkSchemaTableExist(e.schema,e.table);if(t)throw A1(new Error,t,w1.NOT_FOUND,hT.LOG_LEVELS.ERROR,t,!0);if(!pT.isEmpty(e.search_type)&&lfe.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await ofe.readAuditLog(e)}o(ufe,"readAuditLog")});var P1=v((x0e,O1)=>{"use strict";var{OPERATIONS_ENUM:dfe}=(k(),D(Y)),GC=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=dfe.GET_BACKUP,this.schema=t,this.table=r}};O1.exports=GC});var M1=v((H0e,D1)=>{"use strict";var ffe=rs(),F0e=P1(),$C=ce(),mfe=(k(),D(Y)),k0e=le(),{handleHDBError:pfe,hdbErrors:hfe}=Ee(),{HDB_ERROR_MSGS:L1,HTTP_STATUS_CODES:Efe}=hfe;D1.exports=_fe;async function _fe(e){if($C.isEmpty(e.schema))throw new Error(L1.SCHEMA_REQUIRED_ERR);if($C.isEmpty(e.table))throw new Error(L1.TABLE_REQUIRED_ERR);let t=$C.checkSchemaTableExist(e.schema,e.table);if(t)throw pfe(new Error,t,Efe.NOT_FOUND,mfe.LOG_LEVELS.ERROR,t,!0);return await ffe.getBackup(readAuditLogObject)}o(_fe,"getBackup")});var B1=v((G0e,x1)=>{"use strict";var gfe=le(),oc=require("joi"),Sfe=ot(),v1=require("moment"),Tfe=require("fs-extra"),VC=require("path"),yfe=require("lodash"),ph=(k(),D(Y)),{LOG_LEVELS:kl}=(k(),D(Y)),Rfe="YYYY-MM-DD hh:mm:ss",bfe=VC.resolve(__dirname,"../logs");x1.exports=function(e){return Sfe.validateBySchema(e,Afe)};var Afe=oc.object({from:oc.custom(U1),until:oc.custom(U1),level:oc.valid(kl.NOTIFY,kl.FATAL,kl.ERROR,kl.WARN,kl.INFO,kl.DEBUG,kl.TRACE),order:oc.valid("asc","desc"),limit:oc.number().min(1),start:oc.number().min(0),log_name:oc.custom(Ife)});function U1(e,t){if(v1(e,v1.ISO_8601).format(Rfe)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(U1,"validateDatetime");function Ife(e,t){if(yfe.invert(ph.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=gfe.get(ph.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?ph.LOG_NAMES.HDB:e,i=s===ph.LOG_NAMES.INSTALL?VC.join(bfe,ph.LOG_NAMES.INSTALL):VC.join(n,s);return Tfe.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(Ife,"validateReadLogPath")});var YC=v((V0e,k1)=>{"use strict";var ET=(k(),D(Y)),wfe=z(),Nfe=le(),Cfe=B1(),KC=require("path"),F1=require("fs-extra"),{once:Ofe}=require("events"),{handleHDBError:Pfe,hdbErrors:Lfe}=Ee(),{PACKAGE_ROOT:Dfe}=bt(),{replicateOperation:Mfe}=(ls(),D(Yo)),vfe=KC.join(Dfe,"logs"),Ufe=1e3,xfe=200;k1.exports=Bfe;async function Bfe(e){let t=Cfe(e);if(t)throw Pfe(t,t.message,Lfe.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Mfe(e),n=Nfe.get(ET.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?ET.LOG_NAMES.HDB:e.log_name,i=s===ET.LOG_NAMES.INSTALL?KC.join(vfe,ET.LOG_NAMES.INSTALL):KC.join(n,s),a=e.level!==void 0,c=a?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.until!==void 0,f=d?new Date(e.until):void 0,m=e.limit===void 0?Ufe:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,g=0;p==="desc"&&!u&&!f&&(g=Math.max(F1.statSync(i).size-(E+5)*xfe,0));let b=F1.createReadStream(i,{start:g});b.on("error",H=>{wfe.error(H)});let S=0,R=[],L="",O;b.on("data",H=>{let F=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;H=L+H;let Q=0,W;for(;(W=F.exec(H))&&!b.destroyed;){O&&(O.message=H.slice(Q,W.index),x(O));let[fe,ue,ee]=W,Re=ee.split("] ["),Ie=Re[0],$e=Re[1];Re.splice(0,2),O={timestamp:ue,thread:Ie,level:$e,tags:Re,message:""},Q=W.index+fe.length}L=H.slice(Q)}),b.on("end",H=>{b.destroyed||O&&(O.message=L.trim(),x(O))}),b.resume();function x(H){let F,Q,W;switch(!0){case(a&&l&&d):F=new Date(H.timestamp),Q=new Date(u),W=new Date(f),H.level===c&&F>=Q&&F<=W&&S<h?S++:H.level===c&&F>=Q&&F<=W&&(to(H,p,R),S++,S===E&&b.destroy());break;case(a&&l):F=new Date(H.timestamp),Q=new Date(u),H.level===c&&F>=Q&&S<h?S++:H.level===c&&F>=Q&&(to(H,p,R),S++,S===E&&b.destroy());break;case(a&&d):F=new Date(H.timestamp),W=new Date(f),H.level===c&&F<=W&&S<h?S++:H.level===c&&F<=W&&(to(H,p,R),S++,S===E&&b.destroy());break;case(l&&d):F=new Date(H.timestamp),Q=new Date(u),W=new Date(f),F>=Q&&F<=W&&S<h?S++:F>=Q&&F<=W&&(to(H,p,R),S++,S===E&&b.destroy());break;case a:H.level===c&&S<h?S++:H.level===c&&(to(H,p,R),S++,S===E&&b.destroy());break;case l:F=new Date(H.timestamp),Q=new Date(u),F>=Q&&S<h?S++:F>=Q&&S>=h&&(to(H,p,R),S++,S===E&&b.destroy());break;case d:F=new Date(H.timestamp),W=new Date(f),F<=W&&S<h?S++:F<=W&&S>=h&&(to(H,p,R),S++,S===E&&b.destroy());break;default:S<h?S++:(to(H,p,R),S++,S===E&&b.destroy())}}o(x,"onLogMessage"),await Ofe(b,"close");let j=await r;if(j.replicated){for(let H of R)H.node=server.hostname;for(let H of j.replicated){let F=H.node;if(H.status==="failed")to({timestamp:new Date().toISOString(),level:"error",node:F,message:`Error retrieving logs: ${H.reason}`},p,R);else for(let Q of H.results)Q.node=F,to(Q,p,R)}}return R}o(Bfe,"readLog");function to(e,t,r){t==="desc"?Ffe(e,r):t==="asc"?kfe(e,r):r.push(e)}o(to,"pushLineToResult");function Ffe(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}o(Ffe,"insertDescending");function kfe(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}o(kfe,"insertAscending")});var _T=v((Q0e,$1)=>{"use strict";var WC=require("joi"),{string:Wd,boolean:H1,date:Hfe}=WC.types(),qfe=ot(),{validateSchemaExists:Y0e,validateTableExists:W0e,validateSchemaName:z0e}=ki(),Gfe=(k(),D(Y)),$fe=mt(),q1=le();q1.initSync();var j0e=Wd.invalid(q1.get(Gfe.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern($fe.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),G1={operation:Wd.valid("add_node","update_node","set_node_replication"),node_name:Wd.optional(),subscriptions:WC.array().items({table:Wd.optional(),schema:Wd.optional(),database:Wd.optional(),subscribe:H1.required(),publish:H1.required().custom(Kfe),start_time:Hfe.iso()})};function Vfe(e){return qfe.validateBySchema(e,WC.object(G1))}o(Vfe,"addUpdateNodeValidator");function Kfe(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}o(Kfe,"checkForFalsy");$1.exports={addUpdateNodeValidator:Vfe,validationSchema:G1}});var ac=v((X0e,V1)=>{"use strict";var zC=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},jC=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};V1.exports={Node:zC,NodeSubscription:jC}});var Y1=v((eBe,K1)=>{"use strict";var Yfe=(k(),D(Y)).OPERATIONS_ENUM,QC=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Yfe.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};K1.exports=QC});var hh=v((rBe,W1)=>{"use strict";var JC=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},XC=class{static{o(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,a,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=a,c!==void 0&&(this.attributes=c)}};W1.exports={RemotePayloadObject:JC,RemotePayloadSubscription:XC}});var j1=v((sBe,z1)=>{"use strict";var ZC=class{static{o(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,a=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=a}};z1.exports=ZC});var J1=v((uBe,Q1)=>{"use strict";var Wfe=j1(),oBe=Gt(),aBe=pt(),zfe=z(),{getSchemaPath:cBe,getTransactionAuditStorePath:lBe}=St(),{getDatabases:jfe}=(Ne(),D(ft));Q1.exports=Qfe;async function Qfe(e){let t=new Wfe;try{let r=jfe()[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){zfe.warn(`unable to stat table dbi due to ${r}`)}return t}o(Qfe,"lmdbGetTableSize")});var Z1=v((fBe,X1)=>{"use strict";var eO=class{static{o(this,"SystemInformationObject")}constructor(t,r,n,s,i,a,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=a,this.harperdb_processes=c}};X1.exports=eO});var _h=v((gBe,nK)=>{"use strict";var Jfe=require("fs-extra"),Xfe=require("path"),Sn=require("systeminformation"),cc=z(),eK=xt(),pBe=mt(),zd=(k(),D(Y)),Zfe=J1(),eme=Ja(),{getThreadInfo:tK}=Je(),Eh=le();Eh.initSync();var tme=Z1(),{openEnvironment:hBe}=pt(),{getSchemaPath:EBe}=St(),{database:_Be,databases:tO}=(Ne(),D(ft)),gT;nK.exports={getHDBProcessInfo:iO,getNetworkInfo:aO,getDiskInfo:oO,getMemoryInfo:sO,getCPUInfo:nO,getTimeInfo:rO,getSystemInformation:cO,systemInformation:rme,getTableSize:lO,getMetrics:uO};function rO(){return Sn.time()}o(rO,"getTimeInfo");async function nO(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await Sn.cpu();d.cpu_speed=await Sn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:g,cpus:b,...S}=await Sn.currentLoad();return S.cpus=[],b.forEach(R=>{let{rawLoad:L,rawLoadIdle:O,rawLoadIrq:x,rawLoadNice:j,rawLoadSystem:H,rawLoadUser:F,...Q}=R;S.cpus.push(Q)}),d.current_load=S,d}catch(e){return cc.error(`error in getCPUInfo: ${e}`),{}}}o(nO,"getCPUInfo");async function sO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Sn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return cc.error(`error in getMemoryInfo: ${e}`),{}}}o(sO,"getMemoryInfo");async function iO(){let e={core:[],clustering:[]};try{let t=await Sn.processes(),r;try{r=Number.parseInt(await Jfe.readFile(Xfe.join(Eh.get(zd.CONFIG_PARAMS.ROOTPATH),zd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===zd.NODE_ERROR_CODES.ENOENT)cc.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 cc.error(`error in getHDBProcessInfo: ${t}`),e}}o(iO,"getHDBProcessInfo");async function oO(){let e={};try{if(!Eh.get(zd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Sn.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await Sn.fsStats();return e.read_write=u,e.size=await Sn.fsSize(),e}catch(t){return cc.error(`error in getDiskInfo: ${t}`),e}}o(oO,"getDiskInfo");async function aO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Eh.get(zd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await Sn.networkInterfaceDefault(),e.latency=await Sn.inetChecksite("google.com"),(await Sn.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:a,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await Sn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return cc.error(`error in getNetworkInfo: ${t}`),e}}o(aO,"getNetworkInfo");async function cO(){if(gT!==void 0)return gT;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await Sn.osInfo();e=c;let l=await Sn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,gT=e,gT}catch(t){return cc.error(`error in getSystemInformation: ${t}`),e}}o(cO,"getSystemInformation");async function lO(){let e=[],t=await eme.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Zfe(n));return e}o(lO,"getTableSize");async function uO(){let e={};for(let t in tO){let r=e[t]={},n=r.tables={};for(let s in tO[t])try{let i=tO[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let a=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=a[l];n[s]=c}catch(i){cc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(uO,"getMetrics");async function rK(){if(Eh.get(zd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await eK.getNATSReferences(),t=await eK.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let a={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(a)}return r}}o(rK,"getNatsStreamInfo");async function rme(e){let t=new tme;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await cO(),t.time=rO(),t.cpu=await nO(),t.memory=await sO(),t.disk=await oO(),t.network=await aO(),t.harperdb_processes=await iO(),t.table_size=await lO(),t.metrics=await uO(),t.threads=await tK(),t.replication=await rK(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await cO();break;case"time":t.time=rO();break;case"cpu":t.cpu=await nO();break;case"memory":t.memory=await sO();break;case"disk":t.disk=await oO();break;case"network":t.network=await aO();break;case"harperdb_processes":t.harperdb_processes=await iO();break;case"table_size":t.table_size=await lO();break;case"database_metrics":case"metrics":t.metrics=await uO();break;case"threads":t.threads=await tK();break;case"replication":t.replication=await rK();break;default:break}return t}o(rme,"systemInformation")});var Fs=v((bBe,aK)=>{"use strict";var nme=un(),dO=ce(),sme=require("util"),Hl=(k(),D(Y)),sK=le();sK.initSync();var ime=qN(),iK=fn(),{Node:TBe,NodeSubscription:yBe}=ac(),ome=Yu(),ame=Y1(),{RemotePayloadObject:cme,RemotePayloadSubscription:lme}=hh(),{handleHDBError:ume,hdbErrors:dme}=Ee(),{HTTP_STATUS_CODES:fme,HDB_ERROR_MSGS:mme}=dme,pme=ai(),hme=_h(),{packageJson:Eme}=bt(),{getDatabases:_me}=(Ne(),D(ft)),RBe=sme.promisify(ime.authorize),gme=iK.searchByHash,Sme=iK.searchByValue;aK.exports={isEmpty:Tme,getNodeRecord:yme,upsertNodeRecord:Rme,buildNodePayloads:bme,checkClusteringEnabled:Ame,getAllNodeRecords:Ime,getSystemInfo:wme,reverseSubscription:oK};function Tme(e){return e==null}o(Tme,"isEmpty");async function yme(e){let t=new ome(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return gme(t)}o(yme,"getNodeRecord");async function Rme(e){let t=new ame(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return nme.upsert(t)}o(Rme,"upsertNodeRecord");function oK(e){if(dO.isEmpty(e.subscribe)||dO.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}o(oK,"reverseSubscription");function bme(e,t,r,n){let s=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:l,table:u}=c,d=dO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=oK(c),p=_me()[l]?.[u],h=new lme(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new cme(r,t,s,n)}o(bme,"buildNodePayloads");function Ame(){if(!sK.get(Hl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ume(new Error,mme.CLUSTERING_NOT_ENABLED,fme.BAD_REQUEST,void 0,void 0,!0)}o(Ame,"checkClusteringEnabled");async function Ime(){let e=new pme(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Sme(e))}o(Ime,"getAllNodeRecords");async function wme(){let e=await hme.getSystemInformation();return{hdb_version:Eme.version,node_version:e.node_version,platform:e.platform}}o(wme,"getSystemInfo")});var fO=v((IBe,hK)=>{"use strict";var ST=xt(),cK=ce(),lK=mt(),uK=(k(),D(Y)),TT=z(),dK=mh(),Nme=zu(),{RemotePayloadObject:Cme}=hh(),{handleHDBError:fK,hdbErrors:Ome}=Ee(),{HTTP_STATUS_CODES:mK}=Ome,{NodeSubscription:pK}=ac();hK.exports=Pme;async function Pme(e,t){let r;try{r=await ST.request(`${t}.${lK.REQUEST_SUFFIX}`,new Cme(uK.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),TT.trace("Response from remote describe all request:",r)}catch(a){TT.error(`addNode received error from describe all request to remote node: ${a}`);let c=ST.requestErrorHandler(a,"add_node",t);throw fK(new Error,c,mK.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===lK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw fK(new Error,a,mK.INTERNAL_SERVER_ERROR,"error",a)}let n=r.message,s=[],i=[];for(let a of e){let{table:c}=a,l=a.database??a.schema??"data";if(l===uK.SYSTEM_SCHEMA_NAME){await ST.createLocalTableStream(l,c);let h=new pK(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h);continue}let u=cK.doesSchemaExist(l),d=n[l]!==void 0,f=c?cK.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(TT.trace(`addNode creating schema: ${l}`),await dK.createSchema({operation:"create_schema",schema:l})),!f&&m){TT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Nme(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await dK.createTable(h)}await ST.createLocalTableStream(l,c);let p=new pK(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p)}return{added:i,skipped:s}}o(Pme,"reviewSubscriptions")});var jd={};be(jd,{addNodeBack:()=>mO,removeNodeBack:()=>pO,setNode:()=>vme});async function vme(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=Ei(t)):t=lT(r);let n=(0,_K.validateBySchema)(e,Mme);if(n)throw(0,Qo.handleHDBError)(n,n.message,Dme.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new Qo.ClientError("url or hostname is required for remove_node operation");let p=r,h=Kt(),E=await h.get(p);if(!E)throw new Qo.ClientError(p+" does not exist");try{await uh({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?st():p},void 0)}catch(g){fs.warn(`Error removing node from target node ${p}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new Qo.ClientError("url required for this operation");let s=Za();if(s==null)throw new Qo.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,ks.getReplicationCert)();let p=await(0,ks.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(a=await(0,ks.createCsr)(),fs.info("Sending CSR to target node:",t)):p&&(c=p.certificate,fs.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,uc.get)(U.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,uc.get)(U.REPLICATION_SHARD)!==void 0&&(l.shard=(0,uc.get)(U.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(EK):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=EK(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 uh({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,fs.warn("Error adding node:",t,"to cluster:",p),d=p}if(a&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);a&&(fs.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,ks.setCertTable)({name:Lme.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,ks.setCertTable)({name:st(),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,uc.get)(U.REPLICATION_SHARD)!==void 0&&(p.shard=(0,uc.get)(U.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await Vo(st(),p)}await Vo(u?u.nodeName:f.name??Ei(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 mO(e){fs.trace("addNodeBack received request:",e);let t=await(0,ks.signCertificate)(e),r;e.csr?(r=t.signingCA,fs.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,fs.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,ks.getReplicationCertAuth)();if(n.replicates){let i={url:Za(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,uc.get)(U.REPLICATION_SHARD)!==void 0&&(i.shard=(0,uc.get)(U.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Vo(st(),i)}return await Vo(e.hostname,n),t.nodeName=st(),t.usingCA=s?.certificate,fs.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function pO(e){fs.trace("removeNodeBack received request:",e),await Kt().delete(e.name)}function EK(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var ks,_K,lc,uc,fs,Qo,Lme,Dme,Mme,Qd=oe(()=>{ks=w(ds()),_K=w(ot()),lc=w(require("joi")),uc=w(le());k();rh();Ud();ls();fs=w(z()),Qo=w(Ee()),{pki:Lme}=require("node-forge"),{HTTP_STATUS_CODES:Dme}=Qo.hdbErrors,Mme=lc.default.object({hostname:lc.default.string(),verify_tls:lc.default.boolean(),replicates:lc.default.boolean(),subscriptions:lc.default.array(),revoked_certificates:lc.default.array(),shard:lc.default.number()});o(vme,"setNode");o(mO,"addNodeBack");o(pO,"removeNodeBack");o(EK,"reverseSubscription")});var IT=v((vBe,SK)=>{"use strict";var{handleHDBError:yT,hdbErrors:Ume}=Ee(),{HTTP_STATUS_CODES:RT}=Ume,{addUpdateNodeValidator:xme}=_T(),bT=z(),AT=(k(),D(Y)),gK=mt(),Bme=ce(),gh=xt(),Sh=Fs(),hO=le(),Fme=fO(),{Node:kme,NodeSubscription:Hme}=ac(),{broadcast:qme}=Je(),{setNode:Gme}=(Qd(),D(jd)),DBe=le(),MBe=(k(),D(Y)),$me="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Vme="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Kme=hO.get(AT.CONFIG_PARAMS.CLUSTERING_NODENAME);SK.exports=Yme;async function Yme(e,t=!1){if(bT.trace("addNode called with:",e),hO.get(AT.CONFIG_PARAMS.REPLICATION_URL)||hO.get(AT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Gme(e);Sh.checkClusteringEnabled();let r=xme(e);if(r)throw yT(r,r.message,RT.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await Sh.getNodeRecord(n);if(!Bme.isEmptyOrZeroLength(f))throw yT(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,RT.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Fme(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=$me,a;let c=Sh.buildNodePayloads(s,Kme,AT.OPERATIONS_ENUM.ADD_NODE,await Sh.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 Hme(p.schema,p.table,p.publish,p.subscribe))}bT.trace("addNode sending remote payload:",c);let u;try{u=await gh.request(`${n}.${gK.REQUEST_SUFFIX}`,c)}catch(f){bT.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 gh.updateRemoteConsumer(E,n)}let m=gh.requestErrorHandler(f,"add_node",n);throw yT(new Error,m,RT.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===gK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw yT(new Error,f,RT.INTERNAL_SERVER_ERROR,"error",f)}bT.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await gh.updateRemoteConsumer(p,n),p.subscribe===!0&&await gh.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new kme(n,l,u.system_info);return await Sh.upsertNodeRecord(d),qme({type:"nats_update"}),i.length>0?a.message=Vme:a.message=`Successfully added '${n}' to manifest`,a}o(Yme,"addNode")});var SO=v((BBe,yK)=>{"use strict";var{handleHDBError:EO,hdbErrors:Wme}=Ee(),{HTTP_STATUS_CODES:_O}=Wme,{addUpdateNodeValidator:zme}=_T(),Th=z(),wT=(k(),D(Y)),TK=mt(),xBe=ce(),yh=xt(),Rh=Fs(),gO=le(),{cloneDeep:jme}=require("lodash"),Qme=fO(),{Node:Jme,NodeSubscription:Xme}=ac(),{broadcast:Zme}=Je(),{setNode:epe}=(Qd(),D(jd)),tpe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",rpe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",npe=gO.get(wT.CONFIG_PARAMS.CLUSTERING_NODENAME);yK.exports=spe;async function spe(e){if(Th.trace("updateNode called with:",e),gO.get(wT.CONFIG_PARAMS.REPLICATION_URL)??gO.get(wT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return epe(e);Rh.checkClusteringEnabled();let t=zme(e);if(t)throw EO(t,t.message,_O.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Rh.getNodeRecord(r);s.length>0&&(n=jme(s));let{added:i,skipped:a}=await Qme(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=tpe,c;let l=Rh.buildNodePayloads(i,npe,wT.OPERATIONS_ENUM.UPDATE_NODE,await Rh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];Th.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}Th.trace("updateNode sending remote payload:",l);let u;try{u=await yh.request(`${r}.${TK.REQUEST_SUFFIX}`,l)}catch(d){Th.error(`updateNode received error from request: ${d}`);let f=yh.requestErrorHandler(d,"update_node",r);throw EO(new Error,f,_O.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===TK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw EO(new Error,d,_O.INTERNAL_SERVER_ERROR,"error",d)}Th.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await yh.updateRemoteConsumer(m,r),m.subscribe===!0?await yh.updateConsumerIterator(m.schema,m.table,r,"start"):await yh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new Jme(r,[],u.system_info)]),await ipe(n[0],i,u.system_info),a.length>0?c.message=rpe:c.message=`Successfully updated '${r}'`,c}o(spe,"updateNode");async function ipe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let a=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===a.schema&&d.table===a.table){d.publish=a.publish,d.subscribe=a.subscribe,c=!0;break}}c||n.subscriptions.push(new Xme(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await Rh.upsertNodeRecord(n),Zme({type:"nats_update"})}o(ipe,"updateNodeTable")});var wK=v((kBe,IK)=>{"use strict";var AK=require("joi"),{string:RK}=AK.types(),ope=ot(),bK=(k(),D(Y)),ape=le(),cpe=mt();IK.exports=lpe;function lpe(e){let t=RK.invalid(ape.get(bK.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(cpe.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=AK.object({operation:RK.valid(bK.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return ope.validateBySchema(e,r)}o(lpe,"removeNodeValidator")});var NT=v((qBe,LK)=>{"use strict";var{handleHDBError:NK,hdbErrors:upe}=Ee(),{HTTP_STATUS_CODES:CK}=upe,dpe=wK(),bh=z(),OK=Fs(),fpe=ce(),Jd=(k(),D(Y)),PK=mt(),TO=xt(),yO=le(),{RemotePayloadObject:mpe}=hh(),{NodeSubscription:ppe}=ac(),hpe=Wu(),Epe=Ga(),{broadcast:_pe}=Je(),{setNode:gpe}=(Qd(),D(jd)),Spe=yO.get(Jd.CONFIG_PARAMS.CLUSTERING_NODENAME);LK.exports=Tpe;async function Tpe(e){if(bh.trace("removeNode called with:",e),yO.get(Jd.CONFIG_PARAMS.REPLICATION_URL)??yO.get(Jd.CONFIG_PARAMS.REPLICATION_HOSTNAME))return gpe(e);OK.checkClusteringEnabled();let t=dpe(e);if(t)throw NK(t,t.message,CK.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await OK.getNodeRecord(r);if(fpe.isEmptyOrZeroLength(n))throw NK(new Error,`Node '${r}' was not found.`,CK.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new mpe(Jd.OPERATIONS_ENUM.REMOVE_NODE,Spe,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await TO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await TO.updateRemoteConsumer(new ppe(d.schema,d.table,!1,!1),r)}catch(f){bh.error(f)}}try{i=await TO.request(`${r}.${PK.REQUEST_SUFFIX}`,s),bh.trace("Remove node reply from remote node:",r,i)}catch(l){bh.error("removeNode received error from request:",l),a=!0}let c=new hpe(Jd.SYSTEM_SCHEMA_NAME,Jd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Epe.deleteRecord(c),_pe({type:"nats_update"}),i?.status===PK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(bh.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}o(Tpe,"removeNode")});var vK=v(($Be,MK)=>{"use strict";var DK=require("joi"),{string:ype,array:Rpe}=DK.types(),bpe=ot(),Ape=_T();MK.exports=Ipe;function Ipe(e){let t=DK.object({operation:ype.valid("configure_cluster").required(),connections:Rpe.items(Ape.validationSchema).required()});return bpe.validateBySchema(e,t)}o(Ipe,"configureClusterValidator")});var RO=v((KBe,kK)=>{"use strict";var UK=(k(),D(Y)),CT=z(),wpe=ce(),Npe=le(),Cpe=NT(),Ope=IT(),Ppe=Fs(),Lpe=vK(),{handleHDBError:xK,hdbErrors:Dpe}=Ee(),{HTTP_STATUS_CODES:BK}=Dpe,Mpe="Configure cluster complete.",vpe="Failed to configure the cluster. Check the logs for more details.",Upe="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";kK.exports=xpe;async function xpe(e){CT.trace("configure cluster called with:",e);let t=Lpe(e);if(t)throw xK(t,t.message,BK.BAD_REQUEST,void 0,void 0,!0);let r=await Ppe.getAllNodeRecords(),n=[];if(Npe.get(UK.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await FK(Cpe,{operation:UK.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}CT.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 FK(Ope,f,f.node_name);s.push(m)}CT.trace("All results from configure_cluster add node:",s);let a=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(CT.error(m.node_name,m?.error?.message,m?.error?.stack),a.includes(m.node_name)||a.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(wpe.isEmptyOrZeroLength(a))return{message:Mpe,connections:c};if(l)return{message:Upe,failed_nodes:a,connections:c};throw xK(new Error,vpe,BK.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(xpe,"configureCluster");async function FK(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(FK,"functionWrapper")});var $K=v((WBe,GK)=>{"use strict";var Ah=require("joi"),Bpe=ot(),{validateSchemaExists:HK,validateTableExists:Fpe,validateSchemaName:qK}=ki(),kpe=Ah.object({operation:Ah.string().valid("purge_stream"),schema:Ah.string().custom(HK).custom(qK).optional(),database:Ah.string().custom(HK).custom(qK).optional(),table:Ah.string().custom(Fpe).required()});function Hpe(e){return Bpe.validateBySchema(e,kpe)}o(Hpe,"purgeStreamValidator");GK.exports=Hpe});var bO=v((jBe,VK)=>{"use strict";var{handleHDBError:qpe,hdbErrors:Gpe}=Ee(),{HTTP_STATUS_CODES:$pe}=Gpe,Vpe=$K(),Kpe=xt(),Ype=Fs();VK.exports=Wpe;async function Wpe(e){e.schema=e.schema??e.database;let t=Vpe(e);if(t)throw qpe(t,t.message,$pe.BAD_REQUEST,void 0,void 0,!0);Ype.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Kpe.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(Wpe,"purgeStream")});var wO=v((JBe,XK)=>{"use strict";var IO=Fs(),zpe=xt(),PT=le(),Xd=(k(),D(Y)),ql=mt(),jpe=ce(),AO=z(),{RemotePayloadObject:Qpe}=hh(),{ErrorCode:KK}=require("nats"),{parentPort:YK}=require("worker_threads"),{onMessageByType:Jpe}=Je(),{getThisNodeName:Xpe}=(ls(),D(Yo)),{requestClusterStatus:Zpe}=(rh(),D(iV)),{getReplicationSharedStatus:ehe,getHDBNodeTable:the}=(Ud(),D(eV)),{CONFIRMATION_STATUS_POSITION:rhe,RECEIVED_VERSION_POSITION:WK,RECEIVED_TIME_POSITION:nhe,SENDING_TIME_POSITION:she,RECEIVING_STATUS_POSITION:ihe,RECEIVING_STATUS_RECEIVING:ohe}=(UC(),D(QV)),zK=PT.get(Xd.CONFIG_PARAMS.CLUSTERING_ENABLED),jK=PT.get(Xd.CONFIG_PARAMS.CLUSTERING_NODENAME);XK.exports={clusterStatus:ahe,buildNodeStatus:JK};var QK;Jpe("cluster-status",async e=>{QK(e)});async function ahe(){if(PT.get(Xd.CONFIG_PARAMS.REPLICATION_URL)||PT.get(Xd.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(YK){YK.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{QK=i});for(let i of n.connections){let a=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=ehe(u,l,a);c.lastCommitConfirmed=OT(d[rhe]),c.lastReceivedRemoteTime=OT(d[WK]),c.lastReceivedLocalTime=OT(d[nhe]),c.lastReceivedVersion=d[WK],c.sendingMessage=OT(d[she]),c.lastReceivedStatus=d[ihe]===ohe?"Receiving":"Waiting"}}}else n=Zpe();n.node_name=Xpe();let s=the().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:jK,is_enabled:zK,connections:[]};if(!zK)return e;let t=await IO.getAllNodeRecords();if(jpe.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(JK(t[n],e.connections));return await Promise.allSettled(r),e}o(ahe,"clusterStatus");function OT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(OT,"asDate");async function JK(e,t){let r=e.name,n=new Qpe(Xd.OPERATIONS_ENUM.CLUSTER_STATUS,jK,void 0,await IO.getSystemInfo()),s,i,a=ql.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await zpe.request(ql.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===ql.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=ql.CLUSTER_STATUS_STATUSES.CLOSED,AO.error(`Error getting node status from ${r} `,s))}catch(l){AO.warn(`Error getting node status from ${r}`,l),l.code===KK.NoResponders?a=ql.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===KK.Timeout?a=ql.CLUSTER_STATUS_STATUSES.TIMEOUT:a=ql.CLUSTER_STATUS_STATUSES.CLOSED}let c=new che(r,a,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Xd.PRE_4_0_0_VERSION&&await IO.upsertNodeRecord(l)}catch(l){AO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(JK,"buildNodeStatus");function che(e,t,r,n,s,i,a,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=a,this.system_info=c}o(che,"NodeStatusObject")});var CO=v((ZBe,ZK)=>{"use strict";var{handleHDBError:lhe,hdbErrors:uhe}=Ee(),{HTTP_STATUS_CODES:dhe}=uhe,fhe=xt(),mhe=Fs(),NO=ce(),LT=require("joi"),phe=ot(),hhe=2e3,Ehe=LT.object({timeout:LT.number().min(1),connected_nodes:LT.boolean(),routes:LT.boolean()});ZK.exports=_he;async function _he(e){mhe.checkClusteringEnabled();let t=phe.validateBySchema(e,Ehe);if(t)throw lhe(t,t.message,dhe.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||NO.autoCastBoolean(n),a=s===void 0||NO.autoCastBoolean(s),c={nodes:[]},l=await fhe.getServerList(r??hhe),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,p=l[d].data;if(m.name.endsWith("-hub")){let h={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[m.name]&&u[m.name].forEach(E=>{h.connected_nodes.includes(E.name.slice(0,-4))||h.connected_nodes.push(E.name.slice(0,-4))})),a&&(h.routes=p.cluster?.urls?p.cluster?.urls.map(E=>({host:E.split(":")[0],port:NO.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}o(_he,"clusterNetwork")});var nY=v((tFe,rY)=>{"use strict";var OO=require("joi"),eY=ot(),{routeConstraints:tY}=Mw();rY.exports={setRoutesValidator:ghe,deleteRoutesValidator:She};function ghe(e){let t=OO.object({server:OO.valid("hub","leaf"),routes:tY.required()});return eY.validateBySchema(e,t)}o(ghe,"setRoutesValidator");function She(e){let t=OO.object({routes:tY.required()});return eY.validateBySchema(e,t)}o(She,"deleteRoutesValidator")});var DT=v((nFe,uY)=>{"use strict";var Jo=Et(),PO=ce(),Hs=(k(),D(Y)),Zd=le(),sY=nY(),{handleHDBError:iY,hdbErrors:The}=Ee(),{HTTP_STATUS_CODES:oY}=The,aY="cluster routes successfully set",cY="cluster routes successfully deleted";uY.exports={setRoutes:Rhe,getRoutes:bhe,deleteRoutes:Ahe};function yhe(e){let t=Jo.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let a=0,c=e.routes.length;a<c;a++){let l=e.routes[a];l.port=PO.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"?Jo.updateConfigValue(Hs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):Jo.updateConfigValue(Hs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:aY,set:i,skipped:s}}o(yhe,"setRoutesNats");function Rhe(e){let t=sY.setRoutesValidator(e);if(t)throw iY(t,t.message,oY.BAD_REQUEST,void 0,void 0,!0);if(Zd.get(Hs.CONFIG_PARAMS.CLUSTERING_ENABLED))return yhe(e);let r=[],n=[],s=Zd.get(Hs.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{lY(s,i)?n.push(i):(s.push(i),r.push(i))}),Jo.updateConfigValue(Hs.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:aY,set:r,skipped:n}}o(Rhe,"setRoutes");function lY(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}o(lY,"existsInArray");function bhe(){if(Zd.get(Hs.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=Jo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return Zd.get(Hs.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(bhe,"getRoutes");function Ahe(e){let t=sY.deleteRoutesValidator(e);if(t)throw iY(t,t.message,oY.BAD_REQUEST,void 0,void 0,!0);if(Zd.get(Hs.CONFIG_PARAMS.CLUSTERING_ENABLED))return Ihe(e);let r=[],n=[],s=Zd.get(Hs.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{lY(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),Jo.updateConfigValue(Hs.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:cY,deleted:r,skipped:n}}o(Ahe,"deleteRoutes");function Ihe(e){let t=Jo.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],a=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,p=r.length;m<p;m++){let h=r[m];if(d.host===h.host&&d.port===h.port){r.splice(m,1),f=!0,a=!0,s.push(d);break}}if(!f){let m=!0;for(let p=0,h=n.length;p<h;p++){let E=n[p];if(d.host===E.host&&d.port===E.port){n.splice(p,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return a&&(r=PO.isEmptyOrZeroLength(r)?null:r,Jo.updateConfigValue(Hs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=PO.isEmptyOrZeroLength(n)?null:n,Jo.updateConfigValue(Hs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:cY,deleted:s,skipped:i}}o(Ihe,"deleteRoutesNats")});var fY=v((iFe,dY)=>{"use strict";var Ih=require("alasql"),Gl=require("recursive-iterator"),Si=z(),whe=ce(),wh=(k(),D(Y)),LO=class{static{o(this,"sqlStatementBucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,Che(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=>wh.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=>!wh.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,a=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[a]&&t[i].tables[a][wh.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=Nhe(t[i].tables[a].attribute_permissions):c=global.hdb_schema[i][a].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(a).filter(u=>!wh.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new Ih.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(a,l)}}),this.ast}};function Nhe(e){return e.filter(t=>t[wh.PERMS_CRUD_ENUM.READ])}o(Nhe,"filterReadRestrictedAttrs");function Che(e,t,r,n,s){Ohe(e,t,r,n,s)}o(Che,"interpretAST");function Nh(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,a=e.tableid;e.as&&(a=e.as),s.set(a,i)}}o(Nh,"addSchemaTableToMap");function Ohe(e,t,r,n,s){if(!e){Si.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Ih.yy.Insert?Mhe(e,t,r):e instanceof Ih.yy.Select?Phe(e,t,r,n,s):e instanceof Ih.yy.Update?Lhe(e,t,r):e instanceof Ih.yy.Delete?Dhe(e,t,r):Si.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(Ohe,"getRecordAttributesAST");function Phe(e,t,r,n,s){if(!e){Si.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(whe.isEmptyOrZeroLength(i)){Si.error("No schema specified");return}e.from.forEach(c=>{Nh(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Nh(c.table,t,r,n,s)});let a=new Gl(e.columns);for(let{node:c}of a)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{Si.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 Gl(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{Si.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 Gl(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{Si.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 Gl(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{Si.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}o(Phe,"getSelectAttributes");function Lhe(e,t,r){if(!e){Si.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Gl(e.columns),s=e.table.databaseid;Nh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&DO(e.table.tableid,s,i.columnid,t,r)}o(Lhe,"getUpdateAttributes");function Dhe(e,t,r){if(!e){Si.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Gl(e.where),s=e.table.databaseid;Nh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&DO(e.table.tableid,s,i.columnid,t,r)}o(Dhe,"getDeleteAttributes");function Mhe(e,t,r){if(!e){Si.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Gl(e.columns),s=e.into.databaseid;Nh(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&DO(e.into.tableid,s,i.columnid,t,r)}o(Mhe,"getInsertAttributes");function DO(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}o(DO,"pushAttribute");dY.exports=LO});var pY=v((aFe,mY)=>{"use strict";var vhe=mt(),MO=class{static{o(this,"HubConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f,m,p,h){this.port=t,a===null&&(a=void 0),this.server_name=r+vhe.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};mY.exports=MO});var _Y=v((lFe,EY)=>{"use strict";var hY=mt(),vO=class{static{o(this,"LeafConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+hY.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+hY.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};EY.exports=vO});var SY=v((dFe,gY)=>{"use strict";var UO=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};gY.exports=UO});var yY=v((mFe,TY)=>{"use strict";var Uhe=mt(),xO=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+Uhe.SERVER_SUFFIX.ADMIN,this.password=r}};TY.exports=xO});var xT=v((hFe,AY)=>{"use strict";var $l=require("path"),Vl=require("fs-extra"),xhe=pY(),Bhe=_Y(),Fhe=SY(),khe=yY(),BO=os(),tf=ce(),Hn=Et(),vT=(k(),D(Y)),Ch=mt(),{CONFIG_PARAMS:nr}=vT,rf=z(),Oh=le(),RY=Ki(),FO=xt(),Hhe=ds(),ef="clustering",qhe=1e4,bY=50;AY.exports={generateNatsConfig:$he,removeNatsConfig:Vhe,getHubConfigPath:Ghe};function Ghe(){let e=Oh.get(nr.ROOTPATH);return $l.join(e,ef,Ch.NATS_CONFIG_FILES.HUB_SERVER)}o(Ghe,"getHubConfigPath");async function $he(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=Oh.get(nr.ROOTPATH);Vl.ensureDirSync($l.join(r,"clustering","leaf")),Oh.initSync();let n=Hn.getConfigFromFile(nr.CLUSTERING_TLS_CERT_AUTH),s=Hn.getConfigFromFile(nr.CLUSTERING_TLS_PRIVATEKEY),i=Hn.getConfigFromFile(nr.CLUSTERING_TLS_CERTIFICATE);!await Vl.exists(i)&&!await Vl.exists(!n)&&await Hhe.createNatsCerts();let a=$l.join(r,ef,Ch.PID_FILES.HUB),c=$l.join(r,ef,Ch.PID_FILES.LEAF),l=Hn.getConfigFromFile(nr.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=$l.join(r,ef,Ch.NATS_CONFIG_FILES.HUB_SERVER),d=$l.join(r,ef,Ch.NATS_CONFIG_FILES.LEAF_SERVER),f=Hn.getConfigFromFile(nr.CLUSTERING_TLS_INSECURE),m=Hn.getConfigFromFile(nr.CLUSTERING_TLS_VERIFY),p=Hn.getConfigFromFile(nr.CLUSTERING_NODENAME),h=Hn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await FO.checkNATSServerInstalled()||UT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await BO.listUsers(),g=Hn.getConfigFromFile(nr.CLUSTERING_USER),b=await BO.getClusterUser();(tf.isEmpty(b)||b.active!==!0)&&UT(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await MT(nr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await MT(nr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await MT(nr.CLUSTERING_HUBSERVER_NETWORK_PORT),await MT(nr.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],R=[];for(let[Q,W]of E.entries())W.role?.role===vT.ROLE_TYPES_ENUM.CLUSTER_USER&&W.active&&(S.push(new khe(W.username,RY.decrypt(W.hash))),R.push(new Fhe(W.username,RY.decrypt(W.hash))));let L=[],{hub_routes:O}=Hn.getClusteringRoutes();if(!tf.isEmptyOrZeroLength(O))for(let Q of O)L.push(`tls://${b.sys_name_encoded}:${b.uri_encoded_d_hash}@${Q.host}:${Q.port}`);let x=new xhe(Hn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_NETWORK_PORT),p,a,i,s,n,f,m,h,Hn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_CLUSTER_NAME),Hn.getConfigFromFile(nr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),L,S,R);n==null&&(delete x.tls.ca_file,delete x.leafnodes.tls.ca_file),t=tf.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===vT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Vl.writeJson(u,x),rf.trace(`Hub server config written to ${u}`));let j=`tls://${b.sys_name_encoded}:${b.uri_encoded_d_hash}@0.0.0.0:${h}`,H=`tls://${b.uri_encoded_name}:${b.uri_encoded_d_hash}@0.0.0.0:${h}`,F=new Bhe(Hn.getConfigFromFile(nr.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[j],[H],S,R,i,s,n,f);n==null&&delete F.tls.ca_file,(t===void 0||t===vT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Vl.writeJson(d,F),rf.trace(`Leaf server config written to ${d}`))}o($he,"generateNatsConfig");async function MT(e){let t=Oh.get(e);return tf.isEmpty(t)&&UT(`port undefined for '${e}'`),await tf.isPortTaken(t)&&UT(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}o(MT,"isPortAvailable");function UT(e){let t=`Error generating clustering config: ${e}`;rf.error(t),console.error(t),process.exit(1)}o(UT,"generateNatsConfigError");async function Vhe(e){let{port:t,config_file:r}=FO.getServerConfig(e),{username:n,decrypt_hash:s}=await BO.getClusterUser(),i=0,a=2e3;for(;i<bY;){try{let d=await FO.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){rf.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=bY)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=a*(i*2);u>3e4&&rf.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await tf.asyncSetTimeout(u)}let c="0".repeat(qhe),l=$l.join(Oh.get(nr.ROOTPATH),ef,r);await Vl.writeFile(l,c),await Vl.remove(l),rf.notify(e,"started.")}o(Vhe,"removeNatsConfig")});var PY=v((_Fe,OY)=>{"use strict";var ms=le(),Qe=(k(),D(Y)),Ph=mt(),Xo=require("path"),{PACKAGE_ROOT:FT}=bt(),IY=le(),BT=ce(),nf="/dev/null",Khe=Xo.join(FT,"launchServiceScripts"),wY=Xo.join(FT,"utility/scripts"),Yhe=Xo.join(wY,Qe.HDB_RESTART_SCRIPT),NY=Xo.resolve(FT,"dependencies",`${process.platform}-${process.arch}`,Ph.NATS_BINARY_NAME);function CY(){let e={[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0,...process.env};return BT.noBootFile()&&(e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=BT.getEnvCliRootPath()),{name:Qe.PROCESS_DESCRIPTORS.HDB,script:Qe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,execArgv:process.execArgv,cwd:FT}}o(CY,"generateMainServerConfig");var Whe=9930;function zhe(){ms.initSync(!0);let e=ms.get(Qe.CONFIG_PARAMS.ROOTPATH),t=Xo.join(e,"clustering",Ph.NATS_CONFIG_FILES.HUB_SERVER),r=Xo.join(ms.get(Qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Qe.LOG_NAMES.HDB),n=IY.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Ph.LOG_LEVEL_FLAGS[ms.get(Qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Whe?"-"+n:""),binFile:NY,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return ms.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=nf,i.error_file=nf),i}o(zhe,"generateNatsHubServerConfig");var jhe=9940;function Qhe(){ms.initSync(!0);let e=ms.get(Qe.CONFIG_PARAMS.ROOTPATH),t=Xo.join(e,"clustering",Ph.NATS_CONFIG_FILES.LEAF_SERVER),r=Xo.join(ms.get(Qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Qe.LOG_NAMES.HDB),n=IY.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Ph.LOG_LEVEL_FLAGS[ms.get(Qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==jhe?"-"+n:""),binFile:NY,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return ms.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=nf,i.error_file=nf),i}o(Qhe,"generateNatsLeafServerConfig");function Jhe(){ms.initSync();let e=Xo.join(ms.get(Qe.CONFIG_PARAMS.LOGGING_ROOT),Qe.LOG_NAMES.HDB),t={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,binFile:Qe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Khe,autorestart:!1};return ms.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=nf,t.error_file=nf),t}o(Jhe,"generateClusteringUpgradeV4ServiceConfig");function Xhe(){let e={[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.RESTART_HDB};return BT.noBootFile()&&(e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=BT.getEnvCliRootPath()),{...{name:Qe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:wY},script:Yhe}}o(Xhe,"generateRestart");function Zhe(){return{apps:[CY()]}}o(Zhe,"generateAllServiceConfigs");OY.exports={generateAllServiceConfigs:Zhe,generateMainServerConfig:CY,generateRestart:Xhe,generateNatsHubServerConfig:zhe,generateNatsLeafServerConfig:Qhe,generateClusteringUpgradeV4ServiceConfig:Jhe}});var sf=v((TFe,BY)=>{"use strict";var Cr=(k(),D(Y)),SFe=ce(),ea=xT(),kT=xt(),Zo=mt(),dc=PY(),HO=le(),fc=z(),eEe=Fs(),{startWorker:LY,onMessageFromWorkers:tEe}=Je(),DY=require("fs"),rEe=require("node:path"),nEe=(k(),D(Y)),{setTimeout:sEe}=require("node:timers/promises"),{execFile:iEe,fork:oEe}=require("node:child_process");BY.exports={start:mc,restart:cEe,kill:fEe,startAllServices:mEe,startService:vY,restartHdb:lEe,startClusteringProcesses:UY,startClusteringThreads:xY,isHdbRestartRunning:uEe,getHdbPid:dEe,cleanupChildrenProcesses:Lh,reloadClustering:hEe,expectedRestartOfChildren:MY};tEe(e=>{e.type==="restart"&&HO.initSync(!0)});var ro=[],aEe=10,kO;function mc(e,t=!1){let r=typeof e.args=="string"?e.args.split(" "):e.args;e.silent=!0,e.detached=!0;let n=e.script?oEe(e.script,r,e):iEe(e.binFile,r,e);n.name=e.name,n.config=e,n.on("error",(a,c)=>{console.error(a,c)}),n.on("exit",async a=>{let c=ro.indexOf(n);c>-1&&ro.splice(c,1),!kO&&a!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<aEe&&(DY.existsSync(ea.getHubConfigPath())?mc(e):(await ea.generateNatsConfig(!0),mc(e),await new Promise(l=>setTimeout(l,3e3)),await ea.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ea.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function i(a){let c=HO.get(Cr.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),l=/\[\d+][^\[]+\[(\w+)]/g,u,d=0,f;for(;u=l.exec(a);){if(u.index&&Zo.LOG_LEVEL_HIERARCHY[c]>=Zo.LOG_LEVEL_HIERARCHY[f||"info"]){let h=f===Zo.LOG_LEVELS.ERR||f===Zo.LOG_LEVELS.WRN?fc.OUTPUTS.STDERR:fc.OUTPUTS.STDOUT;fc.logCustomLevel(f||"info",h,s,a.slice(d,u.index).trim())}let[m,p]=u;d=u.index+m.length,f=Zo.LOG_LEVELS[p]}if(Zo.LOG_LEVEL_HIERARCHY[c]>=Zo.LOG_LEVEL_HIERARCHY[f||"info"]){let m=f===Zo.LOG_LEVELS.ERR||f===Zo.LOG_LEVELS.WRN?fc.OUTPUTS.STDERR:fc.OUTPUTS.STDOUT;fc.logCustomLevel(f||"info",m,s,a.toString().slice(d).trim())}}o(i,"extractMessages"),n.stdout.on("data",i),n.stderr.on("data",i),n.unref(),ro.length===0&&(t||(process.on("exit",Lh),process.on("SIGINT",Lh),process.on("SIGQUIT",Lh),process.on("SIGTERM",Lh))),ro.push(n)}o(mc,"start");function Lh(e=!0){if(!kO&&(kO=!0,ro.length!==0))if(fc.info("Killing child processes..."),ro.map(t=>t.kill()),e)process.exit(0);else return sEe(2e3)}o(Lh,"cleanupChildrenProcesses");function cEe(e){MY();for(let t of ro)t.name===e&&t.kill()}o(cEe,"restart");function MY(){for(let e of ro)e.config&&(e.config.restarts=0)}o(MY,"expectedRestartOfChildren");async function lEe(){await mc(dc.generateRestart())}o(lEe,"restartHdb");async function uEe(){let e=await list();for(let t in e)if(e[t].name===Cr.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(uEe,"isHdbRestartRunning");function dEe(){let e=HO.getHdbBasePath();if(!e)return;let t=rEe.join(e,nEe.HDB_PID_FILE),r=EEe(t);if(r&&_Ee(r))return r}o(dEe,"getHdbPid");function fEe(){for(let e of ro)e.kill();ro=[]}o(fEe,"kill");async function mEe(){await UY(),await xY(),await mc(dc.generateAllServiceConfigs())}o(mEe,"startAllServices");async function vY(e,t=!1){let r;switch(e=e.toLowerCase(),e){case Cr.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=dc.generateMainServerConfig();break;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=dc.generateNatsIngestServiceConfig();break;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=dc.generateNatsReplyServiceConfig();break;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=dc.generateNatsHubServerConfig(),await mc(r,t),await ea.removeNatsConfig(e);return;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=dc.generateNatsLeafServerConfig(),await mc(r,t),await ea.removeNatsConfig(e);return;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=dc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}mc(r,t)}o(vY,"startService");var pEe;async function UY(e=!1){for(let t in Cr.CLUSTERING_PROCESSES){let r=Cr.CLUSTERING_PROCESSES[t];await vY(r,e)}}o(UY,"startClusteringProcesses");async function xY(){pEe=LY(Cr.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Cr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await kT.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await kT.updateLocalStreams();let e=await eEe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Cr.PRE_4_0_0_VERSION){fc.info("Starting clustering upgrade 4.0.0 process"),LY(Cr.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(xY,"startClusteringThreads");async function hEe(){await ea.generateNatsConfig(!0),await kT.reloadNATSHub(),await kT.reloadNATSLeaf(),await ea.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ea.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(hEe,"reloadClustering");function EEe(e){try{return Number.parseInt(DY.readFileSync(e,"utf8"),10)}catch{return null}}o(EEe,"readPidFile");function _Ee(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}o(_Ee,"isProcessRunning")});var $O={};be($O,{compactOnStart:()=>gEe,copyDb:()=>$Y});async function gEe(){pc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,qO.get)(U.ROOTPATH),t=new Map,r=at();(0,GO.updateConfigValue)(U.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,HT.join)(e,"backup",n+".mdb"),a=(0,HT.join)(e,Gc,n+"-copy.mdb"),c=0;try{c=await FY(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){pc.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:a,backupDest:i,recordCount:c}),await $Y(n,a),console.log("Backing up",n,"to",i);try{await(0,Kl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{hd()}catch(n){pc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{dbPath:s,copyDest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Kl.move)(i,s,{overwrite:!0}),await(0,Kl.remove)((0,HT.join)(e,Gc,`${n}-copy.mdb-lock`));try{hd()}catch(n){pc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){pc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,GO.updateConfigValue)(U.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:a}]of t){console.error("Moving backup database",a,"back to",i);try{await(0,Kl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw hd(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=!0,c=await FY(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){a=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
21
21
|
Total record count before compaction: ${i}, total after: ${c}.
|
|
22
|
-
Database backup has not been removed and can be found here: ${s}`;pc.error(l),console.error(l)}(0,qO.get)(U.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||a===!1||(console.log("Removing backup",s),await(0,Kl.remove)(s))}}async function
|
|
22
|
+
Database backup has not been removed and can be found here: ${s}`;pc.error(l),console.error(l)}(0,qO.get)(U.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||a===!1||(console.log("Removing backup",s),await(0,Kl.remove)(s))}}async function FY(e){let t=await(0,GY.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}function of(){}async function $Y(e,t){console.log(`Copying database ${e} to ${t}`);let r=at()[e];if(!r)throw new Error(`Source database not found: ${e}`);let n;for(let f in r){let m=r[f];m.primaryStore.put=of,m.primaryStore.remove=of;for(let p in m.indices){let h=m.indices[p];h.put=of,h.remove=of}m.auditStore&&(m.auditStore.put=of,m.auditStore.remove=of),n=m.primaryStore.rootStore}if(!n)throw new Error(`Source database does not have any tables: ${e}`);let s=n.dbisDb,i=n.auditStore,a=(0,kY.open)(new HY.default(t)),c=a.openDB(qT.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:m,value:p}of s.getRange({transaction:d})){let h=p.is_hash_attribute||p.isPrimaryKey,E,g;if(h&&(E=p.compression,g=lS(),g?p.compression=g:delete p.compression,E?.dictionary?.toString()===g?.dictionary?.toString()&&(E=null,g=null)),c.put(m,p),!(h||p.indexed))continue;let b=new qY.OpenDBIObject(!h,h);b.encoding="binary",b.compression=E;let S=n.openDB(m,b);S.decoder=null,S.decoderCopies=!1,S.encoding="binary",b.compression=g;let R=a.openDB(m,b);R.encoder=null,console.log("copying",m,"from",e,"to",t),await f(S,R,h,d)}if(i){let m=n.openDB(qT.AUDIT_STORE_NAME,Pm);console.log("copying audit log for",e,"to",t),f(i,m,!1,d)}async function f(m,p,h,E){let g=0,b=0,S=1e7,R=null;for(;S-- >0;)try{for(let L of m.getKeys({start:R,transaction:E}))try{R=L;let{value:O,version:x}=m.getEntry(L,{transaction:E});l=p.put(L,O,h?x:void 0),g++,E.openTimer&&(E.openTimer=0),b+=(L?.length||10)+O.length,u++>5e3&&(await l,console.log("copied",g,"entries",b,"bytes"),u=0)}catch(O){console.error("Error copying record",typeof L=="symbol"?"symbol":L,"from",e,"to",t,O)}console.log("finish copying, copied",g,"entries",b,"bytes");return}catch{if(typeof R=="string"){if(R==="z")return console.error("Reached end of dbi",R,"for",e,"to",t);R=R.slice(0,-2)+"z"}else if(typeof R=="number")R++;else return console.error("Unknown key type",R,"for",e,"to",t)}}o(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),a.close()}}var kY,HT,Kl,qO,HY,qY,qT,GY,GO,pc,VO=oe(()=>{Ne();kY=require("lmdb"),HT=require("path"),Kl=require("fs-extra"),qO=w(le()),HY=w($m()),qY=w(Gm()),qT=w(Gt());k();Ro();GY=w(Ja()),GO=w(Et()),pc=w(z());o(gEe,"compactOnStart");o(FY,"getTotalDBRecordCount");o(of,"noop");o($Y,"copyDb")});var YO=v((wFe,VY)=>{"use strict";var Dh=le();Dh.initSync();var af=require("fs-extra"),KO=require("path"),cf=(k(),D(Y)),SEe=require("crypto"),TEe=require("uuid").v4;VY.exports=yEe;function yEe(){if(Dh.getHdbBasePath()!==void 0){let e=KO.join(Dh.getHdbBasePath(),cf.LICENSE_KEY_DIR_NAME,cf.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=KO.join(Dh.getHdbBasePath(),cf.LICENSE_KEY_DIR_NAME,cf.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=KO.join(Dh.getHdbBasePath(),cf.LICENSE_KEY_DIR_NAME,cf.JWT_ENUM.JWT_PASSPHRASE_NAME);try{af.accessSync(r),af.accessSync(e),af.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=TEe(),i=SEe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});af.writeFileSync(r,s),af.writeFileSync(e,i.privateKey),af.writeFileSync(t,i.publicKey)}else throw n}}}o(yEe,"checkJWTTokenExist")});var YY=v((CFe,KY)=>{"use strict";var WO=class{static{o(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};KY.exports={HdbInfoInsertObject:WO}});var jY=v((PFe,zY)=>{"use strict";var WY=(k(),D(Y)),zO=class{static{o(this,"UpgradeObject")}constructor(t,r){this[WY.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[WY.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};zY.exports={UpgradeObject:zO}});var GT=v((DFe,JY)=>{"use strict";var qs=require("prompt"),lf=require("chalk"),QY=z(),Ti=require("os"),jO=$c(),QO=["yes","y"];async function REe(e){let t=`${Ti.EOL}`+lf.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Ti.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ti.EOL}${Ti.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Ti.EOL}`;qs.override=jO(["CONFIRM_UPGRADE"]),qs.start(),qs.message=t;let r={properties:{CONFIRM_UPGRADE:{description:lf.magenta(`${Ti.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await qs.get([r])}catch(s){return QY.error("There was an error when prompting user about an upgrade."),QY.error(s),!1}return QO.includes(n.CONFIRM_UPGRADE)}o(REe,"forceUpdatePrompt");async function bEe(e){let t=`${Ti.EOL}`+lf.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.${Ti.EOL}`);qs.override=jO(["CONFIRM_DOWNGRADE"]),qs.start(),qs.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:lf.magenta(`${Ti.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await qs.get([r]);return QO.includes(n.CONFIRM_DOWNGRADE)}o(bEe,"forceDowngradePrompt");async function AEe(){let e=`${Ti.EOL}`+lf.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");qs.override=jO(["GENERATE_CERTS"]),qs.start(),qs.message=e;let t={properties:{GENERATE_CERTS:{description:lf.magenta(`${Ti.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await qs.get([t]);return QO.includes(r.GENERATE_CERTS)}o(AEe,"upgradeCertsPrompt");JY.exports={forceUpdatePrompt:REe,forceDowngradePrompt:bEe,upgradeCertsPrompt:AEe}});var $T=v((vFe,XY)=>{"use strict";var JO=class{static{o(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};XY.exports=JO});var eW=v((HFe,ZY)=>{"use strict";var IEe=ce(),wEe=Et(),xFe=z(),BFe=require("path"),FFe=require("fs"),kFe=(k(),D(Y));ZY.exports={getOldPropsValue:NEe};function NEe(e,t,r=!1){let n=t.getRaw(e);return IEe.isNotEmptyAndHasValue(n)?n:r?wEe.getDefaultConfig(e):""}o(NEe,"getOldPropsValue")});var sW=v((GFe,nW)=>{"use strict";var hc=require("path"),Ec=require("fs-extra"),CEe=require("properties-reader"),OEe=$T(),hr=z(),{getOldPropsValue:_t}=eW(),{HDB_SETTINGS_NAMES:Se,CONFIG_PARAMS:Yl}=(k(),D(Y)),Wl=Et(),VT=le(),tW=ce(),no=(k(),D(Y)),XO=new OEe("3.1.0"),rW=[];function PEe(){let e=CEe(VT.get(Se.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),hr.info(t);let r=` ;Settings for the HarperDB process.
|
|
23
23
|
|
|
24
24
|
;The directory selected during install where the database files reside.
|
|
25
25
|
${Se.HDB_ROOT_KEY} = ${_t(Se.HDB_ROOT_KEY,e)}
|
|
@@ -88,52 +88,52 @@ ${Se.CUSTOM_FUNCTIONS_PORT_KEY} = ${Wl.getDefaultConfig(Yl.HTTP_PORT)}
|
|
|
88
88
|
${Se.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${hc.join(_t(Se.HDB_ROOT_KEY,e),"custom_functions")}
|
|
89
89
|
;Set the max number of processes HarperDB will start for the Custom Functions server
|
|
90
90
|
${Se.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Wl.getDefaultConfig(Yl.HTTP_THREADS)}
|
|
91
|
-
`,n=
|
|
91
|
+
`,n=VT.get("settings_path"),s=hc.dirname(n),i=hc.join(s,"3_1_0_upgrade_settings.bak");try{hr.info(`Backing up old settings file to: ${i}`),Ec.copySync(n,i)}catch(c){throw hr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{hr.info("New settings file values for 3.1.0 upgrade:",r),hr.info(`Creating new/upgraded settings file at '${n}'`),Ec.writeFileSync(n,r),hr.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."),hr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),hr.error(c),Ec.copySync(i,n),c}VT.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),hr.info(a),a}o(PEe,"updateSettingsFile310");function LEe(){let e=hc.join(tW.getHomeDir(),no.HDB_HOME_DIR_NAME,no.LICENSE_KEY_DIR_NAME,no.LICENSE_FILE_NAME),t=hc.join(tW.getHomeDir(),no.HDB_HOME_DIR_NAME,no.LICENSE_KEY_DIR_NAME,no.REG_KEY_FILE_NAME),r=hc.join(VT.getHdbBasePath(),no.LICENSE_KEY_DIR_NAME,no.LICENSE_FILE_NAME),n=hc.join(r,no.LICENSE_FILE_NAME),s=hc.join(r,no.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),hr.info(i);let a="Creating .license directory";console.log(a),hr.info(a),Ec.mkdirpSync(r);try{Ec.accessSync(e);try{let c="Moving licence file";console.log(c),hr.info(c),Ec.moveSync(e,n);let l="License file successfully moved.";console.log(l),hr.info(l)}catch{let l="moving license file failed";console.error(l),hr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),hr.warn(l)}try{Ec.accessSync(t);try{let c="Moving registration file";console.log(c),hr.info(c),Ec.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),hr.info(l)}catch{let l="moving registration file failed";console.error(l),hr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),hr.warn(l)}}o(LEe,"moveLicenseFiles");XO.sync_functions.push(PEe);XO.sync_functions.push(LEe);rW.push(XO);nW.exports=rW});var lW=v((VFe,cW)=>{"use strict";var ps=pt(),{insertRecords:DEe}=ol(),MEe=Cn(),_c=Gt(),vEe=ce(),ta=z(),UEe=ce(),so=require("fs-extra"),ra=require("path"),xEe=require("cli-progress"),Mh=require("assert"),BEe=require("pino"),FEe=le();cW.exports=kEe;var KT,iW,YT,ZO,Tn,vh=!1;async function kEe(e=!0){return KT=FEe.getHdbBasePath(),iW=ra.join(KT,"schema"),YT=ra.join(KT,"4_0_0_upgrade_tmp"),ZO=ra.join(KT,"transactions"),console.info("Reindexing upgrade started for schemas"),ta.notify("Reindexing upgrade started for schemas"),await oW(iW,!1,e),await so.pathExists(ZO)&&(console.info(`
|
|
92
92
|
|
|
93
|
-
Reindexing upgrade started for transaction logs`),ta.notify("Reindexing upgrade started for transaction logs"),await
|
|
94
|
-
install_user = ${l}`;try{gc.writeFileSync(a,u)}catch(f){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),f}try{eP.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{gc.removeSync(r),console.log(d),zl.info(d)}catch(f){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),f}}o(o_e,"updateSettingsFile400");Bh.async_functions.push(o_e);Bh.async_functions.push(s_e);Bh.async_functions.push(r_e);Bh.async_functions.push(i_e);dW.push(Bh);fW.exports=dW});var _W=v((XFe,EW)=>{var a_e=VT(),{databases:c_e,table:l_e}=(Ne(),D(ft)),u_e=qi(),tP=z(),pW=new a_e("4.7.0"),hW=[];async function d_e(){let e=c_e.system?.hdb_license;if(!e){tP.debug?.("system.hdb_license table not found; no migration necessary");return}return tP.debug?.("Dropping existing system.hdb_license table"),await e.dropTable(),tP.debug?.("Creating new usage block system.hdb_license table"),l_e(u_e.hdb_license)}o(d_e,"convertToUsageBlockLicenses");pW.async_functions.push(d_e);hW.push(pW);EW.exports=hW});var rP=v((eke,RW)=>{"use strict";var jl=ce(),f_e=(k(),D(Y)),gW=z(),{DATA_VERSION:m_e,UPGRADE_VERSION:p_e}=f_e.UPGRADE_JSON_FIELD_NAMES_ENUM,SW=nW(),QT=mW(),TW=_W(),Sc=new Map;SW&&SW.forEach(e=>{Sc.set(e.version,e)});QT&&QT.forEach(e=>{Sc.set(e.version,e)});QT&&QT.forEach(e=>{Sc.set(e.version,e)});TW&&TW.forEach(e=>{Sc.set(e.version,e)});function h_e(){return[...Sc.keys()].sort(jl.compareVersions)}o(h_e,"getSortedVersions");function yW(e){let t=e[m_e],r=e[p_e];return jl.isEmptyOrZeroLength(t)||jl.isEmptyOrZeroLength(r)?(gW.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),gW.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."),[]):[...Sc.keys()].sort(jl.compareVersions).filter(function(n){return jl.compareVersions(n,t)>0&&jl.compareVersions(n,r)<=0})}o(yW,"getVersionsForUpgrade");function E_e(e){return yW(e).length>0}o(E_e,"hasUpgradesRequired");function __e(e){return jl.isEmptyOrZeroLength(e)?null:Sc.has(e)?Sc.get(e):null}o(__e,"getDirectiveByVersion");RW.exports={getSortedVersions:h_e,getDirectiveByVersion:__e,getVersionsForUpgrade:yW,hasUpgradesRequired:E_e}});var XT=v((rke,NW)=>{"use strict";var g_e=require("util"),nP=require("chalk"),S_e=require("os"),AW=un(),T_e=fn(),hs=(k(),D(Y)),IW=KY(),iP=uw(),{UpgradeObject:bW}=zY(),{forceDowngradePrompt:y_e}=$T(),{packageJson:R_e}=At(),JT=z(),uf=ce(),oP=li(),b_e=(Ne(),D(ft)),A_e=rP(),I_e=g_e.promisify(oP.setSchemaDataToGlobal),w_e=T_e.searchByValue,N_e="info_id",C_e="2.9.9",O_e="3.0.0";async function P_e(e){let t=new IW.HdbInfoInsertObject(1,e,e),r=new iP.InsertObject(hs.OPERATIONS_ENUM.INSERT,hs.SYSTEM_SCHEMA_NAME,hs.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,hs.INFO_TABLE_HASH_ATTRIBUTE,[t]);return oP.setSchemaDataToGlobal(),AW.insert(r)}o(P_e,"insertHdbInstallInfo");async function sP(e){let t,r=await wW(),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 IW.HdbInfoInsertObject(i,e,e);let a=new iP.InsertObject(hs.OPERATIONS_ENUM.INSERT,hs.SYSTEM_SCHEMA_NAME,hs.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,hs.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await I_e(),AW.insert(a)}o(sP,"insertHdbUpgradeInfo");async function wW(){let e=new iP.NoSQLSeachObject(hs.SYSTEM_SCHEMA_NAME,hs.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,N_e,hs.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await w_e(e))}catch(r){console.error(r)}return t}o(wW,"getAllHdbInfoRecords");async function L_e(){let e=await wW();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}o(L_e,"getLatestHdbInfoRecord");async function D_e(){JT.info("Checking if HDB software has been updated");try{let e=R_e.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await L_e(),r;if(uf.isEmpty(t))r=C_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(nP.yellow(`This instance's data was last run on version ${r}`)),console.error(nP.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.${S_e.EOL}${hs.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");uf.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(nP.yellow(`This instance's data was last run on version ${r}`)),await y_e(new bW(r,e))?await sP(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(oP.setSchemaDataToGlobal(),M_e(r),e.toString()===r.toString())return;let n=new bW(r,e);if(A_e.hasUpgradesRequired(n))return n;uf.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await sP(n.upgrade_version),JT.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw JT.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),JT.fatal(e),e}}o(D_e,"getVersionUpdateInfo");function M_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 ${hs.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in b_e.databases.system))throw console.log(t),new Error(t);if(!uf.isEmpty(e)&&e<O_e)throw console.log(t),new Error(t)}o(M_e,"checkIfInstallIsSupported");NW.exports={insertHdbInstallInfo:P_e,insertHdbUpgradeInfo:sP,getVersionUpdateInfo:D_e}});var LW=v((ske,PW)=>{"use strict";var ZT=require("joi"),{boolean:v_e,string:aP,number:U_e}=ZT.types(),CW=require("fs-extra"),Fh=(k(),D(Y)),OW=require("path"),x_e=ot();PW.exports=B_e;function B_e(e){let t=aP.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=ZT.object({[Fh.INSTALL_PROMPTS.ROOTPATH]:ZT.custom(F_e),[Fh.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:ZT.alternatives([U_e.min(0),aP]).allow("null",null),[Fh.INSTALL_PROMPTS.TC_AGREEMENT]:aP.valid("yes","YES","Yes"),[Fh.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Fh.INSTALL_PROMPTS.CLUSTERING_ENABLED]:v_e});return x_e.validateBySchema(e,r)}o(B_e,"installValidator");function F_e(e,t){if(CW.existsSync(OW.join(e,"system/hdb_user/data.mdb"))||CW.existsSync(OW.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(F_e,"validateRootAvailable")});var MW=v((oke,DW)=>{"use strict";var{mkdirpSync:k_e,copySync:H_e}=require("fs-extra"),Tc=require("path"),kh=(k(),D(Y)),{PACKAGE_ROOT:q_e}=At(),lP=z(),G_e=rs(),cP=qi(),$_e=St(),{NON_REPLICATING_SYSTEM_TABLES:V_e}=(Ne(),D(ft));DW.exports=K_e;async function K_e(e){lP.trace("Mounting HarperDB"),Ql(e),Ql(Tc.join(e,"backup")),Ql(Tc.join(e,"keys")),Ql(Tc.join(e,"keys",kh.LICENSE_FILE_NAME)),Ql(Tc.join(e,"log")),Ql(Tc.join(e,"database")),Ql(Tc.join(e,"components")),H_e(Tc.resolve(q_e,"./utility/install/README.md"),Tc.join(e,"README.md")),await Y_e()}o(K_e,"mountHdb");async function Y_e(){let e=zu(),t=Object.keys(cP);for(let r of t){let n=cP[r].hash_attribute;try{$_e.initSystemSchemaPaths(kh.SYSTEM_SCHEMA_NAME,r);let s=new e(kh.SYSTEM_SCHEMA_NAME,r,n);s.attributes=cP[r].attributes;let i=s.attributes.find(({attribute:a})=>a===n);i.isPrimaryKey=!0,V_e.includes(r)||(s.audit=!0),await G_e.createTable(r,s)}catch(s){throw lP.error(`issue creating environment for ${kh.SYSTEM_SCHEMA_NAME}.${r}: ${s}`),s}}}o(Y_e,"createLMDBTables");function Ql(e){k_e(e,{mode:kh.HDB_FILE_PERMISSIONS}),lP.info(`Directory ${e} created`)}o(Ql,"makeDirectory")});var WW=v((uke,YW)=>{"use strict";var fP=require("os"),FW=require("inquirer"),$s=require("fs-extra"),W_e=require("properties-reader"),Xl=require("chalk"),oo=require("path"),z_e=require("human-readable-ids").hri,uP,j_e=require("yaml"),Er=z(),yc=le(),Hh=ce(),ty=$c(),kW=XT(),{packageJson:HW}=At(),pe=(k(),D(Y)),{CONFIG_PARAM_MAP:cke,CONFIG_PARAMS:Bt}=pe,Q_e=LW(),J_e=MW(),mP=Et(),X_e=os(),Z_e=xp(),ege=YO(),tge=li(),rge=require("util").promisify,nge=rge(tge.setSchemaDataToGlobal),vW=ds(),Jl=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),tn=o(e=>Xl.magenta.bold(e),"HDB_PROMPT_MSG"),sge="https://harperdb.io/legal/end-user-license-agreement",Rc=fP.EOL,na="",ige="yes",UW="Starting HarperDB install...",xW="HarperDB installation was successful.",BW="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",oge="An out of date version of HarperDB is already installed.",dP="It appears that HarperDB is already installed. Exiting install...",age="Aborting install",lke=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])$/),cge=new RegExp(/^[^\s.,*>]+$/),lge=fP.homedir(),uge=oo.join(lge,pe.HDB_ROOT_DIR_NAME),dge="HDB_ADMIN",fge="CLUSTER_USER",mge="dev",pge="localhost",ey={[Bt.HTTP_CORS]:!0,[Bt.HTTP_CORSACCESSLIST]:["*"],[Bt.HTTP_PORT]:9926,[Bt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[Bt.THREADS_COUNT]:1,[Bt.THREADS_DEBUG]:!0,[Bt.LOGGING_STDSTREAMS]:!0,[Bt.LOGGING_LEVEL]:"info",[Bt.OPERATIONSAPI_NETWORK_PORT]:9925,[Bt.LOCALSTUDIO_ENABLED]:!0},en={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:"},bc=ty([pe.INSTALL_PROMPTS.HDB_CONFIG]),io,qW=!1,pP=!1,GW=!1;YW.exports={install:$W,updateConfigEnv:Ige,setIgnoreExisting:wge};$W.createSuperUser=KW;async function $W(){console.log(tn(Rc+UW+Rc)),Er.notify(UW);let e;bc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&(e=hge());let t=_ge();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&&(GW=!0,t[pe.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=Q_e(t);if(r)throw r.message;await gge(),await Sge(t);let n=await Ege(t);io=n[pe.INSTALL_PROMPTS.ROOTPATH],bc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&oo.dirname(bc[pe.INSTALL_PROMPTS.HDB_CONFIG])===io&&(qW=!0),!pP&&!bc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&await $s.pathExists(oo.join(io,pe.HDB_CONFIG_FILE))&&(console.error(dP),process.exit()),uP||(uP=(await import("ora")).default);let s=uP({prefixText:tn("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),Hh.isEmpty(io))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");yc.setHdbBasePath(io),await J_e(io),await Tge(),await yge(n),Er.initLogSettings(!0),await KW(n),await bge(n),await vW.updateConfigCert(),await vW.generateCertsKeys(),await Age(),ege(),s.stop(),console.log(tn(Rc+xW+Rc)),Er.notify(xW)}o($W,"install");function hge(){let e=j_e.parseDocument($s.readFileSync(bc[pe.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=mP.flattenConfig(e.toJSON());return t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}o(hge,"getConfigFromFile");async function Ege(e){Er.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Jl,when:sa(e[pe.INSTALL_PROMPTS.ROOTPATH],en.DESTINATION),name:pe.INSTALL_PROMPTS.ROOTPATH,prefix:na,default:uge,validate:o(async s=>Gs(s)?Gs(s):await $s.pathExists(oo.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:tn(en.DESTINATION)},{type:"input",transformer:Jl,when:sa(e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],en.HDB_USERNAME),name:pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:na,default:dge,validate:o(s=>Gs(s)?Gs(s):(t=s,!0),"validate"),message:tn(en.HDB_USERNAME)},{type:"password",when:sa(e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],en.HDB_PASS),name:pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:na,validate:o(s=>Gs(s)?Gs(s):!0,"validate"),message:tn(en.HDB_PASS)},{type:"input",transformer:Jl,when:sa(e[pe.INSTALL_PROMPTS.DEFAULTS_MODE],en.DEFAULTS_MODE),name:pe.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:na,default:mge,validate:o(s=>Gs(s)?Gs(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:tn(en.DEFAULTS_MODE)}];if(GW||r.push({type:"input",name:pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:Jl,when:sa(e[pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME],en.REPLICATION_HOSTNAME),prefix:na,default:pge,message:tn(en.REPLICATION_HOSTNAME)}),Hh.autoCastBoolean(e[pe.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Jl,when:sa(e[pe.INSTALL_PROMPTS.CLUSTERING_NODENAME],en.NODE_NAME),name:pe.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:na,default:z_e.random(),validate:o(i=>cge.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:tn(en.NODE_NAME)},{type:"input",transformer:Jl,when:sa(e[pe.INSTALL_PROMPTS.CLUSTERING_USER],en.CLUSTER_USERNAME),name:pe.INSTALL_PROMPTS.CLUSTERING_USER,prefix:na,default:fge,validate:o(i=>Gs(i)?Gs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:tn(en.CLUSTER_USERNAME)},{type:"password",when:sa(e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD],en.CLUSTER_PASS),name:pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:na,validate:o(i=>Gs(i)?Gs(i):!0,"validate"),message:tn(en.CLUSTER_PASS)}];r.push(...s)}let n=await FW.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}o(Ege,"installPrompts");function sa(e,t){return e!==void 0?(t.includes("password")?(console.log(`${tn(t)} ${Xl.gray("[hidden]")}`),Er.trace(`${tn(t)} [hidden]`)):(console.log(`${tn(t)} ${e}`),Er.trace(`${tn(t)} ${e}`)),!1):!0}o(sa,"displayCmdEnvVar");function Gs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Gs,"checkForEmptyValue");function _ge(){let e=Object.keys(pe.INSTALL_PROMPTS),t=ty(e),r=ty(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}o(_ge,"checkForPromptOverride");async function gge(){Er.trace("Checking for existing install.");let e=Hh.getPropsFilePath(),t=await $s.pathExists(e),r;if(t){Er.trace(`Install found an existing boot prop file at:${e}`);let n=W_e(e),s=mP.getConfigValue(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await $s.pathExists(s)}if(!t&&Hh.noBootFile()&&(r=!0),r&&!pP){if(Er.trace(`Install found existing HDB config at:${e}`),await kW.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${HW.version}. Exiting install...`;console.log(Rc+Xl.magenta.bold(oge)),console.log(Xl.magenta.bold(s)),Er.error(s)}else console.log(Rc+Xl.magenta.bold(dP)),Er.error(dP);process.exit(0)}}o(gge,"checkForExistingInstall");async function Sge(e){Er.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${sge}${Rc}and can be viewed by typing or copying and pasting the URL into your web browser.${Rc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:na,transformer:Jl,when:sa(e[pe.INSTALL_PROMPTS.TC_AGREEMENT],t),name:pe.INSTALL_PROMPTS.TC_AGREEMENT,message:tn(t),validate:o(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:Xl.yellow("Please enter 'yes' or 'no'"),"validate")},n=await FW.prompt([r]);n[pe.INSTALL_PROMPTS.TC_AGREEMENT]&&n[pe.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==ige&&(console.log(Xl.yellow(BW)),Er.error(BW),process.exit(0))}o(Sge,"termsAgreement");async function Tge(){let e=oo.join(io,pe.HDB_CONFIG_FILE),t;try{t=fP.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}
|
|
95
|
-
install_user = ${t}`,n=Hh.getHomeDir(),s=oo.join(n,pe.HDB_HOME_DIR_NAME),i=oo.join(s,pe.LICENSE_KEY_DIR_NAME);try{$s.mkdirpSync(s,{mode:pe.HDB_FILE_PERMISSIONS}),$s.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 a=oo.join(s,pe.BOOT_PROPS_FILE_NAME);try{await $s.writeFile(a,r)}catch(c){throw Er.error(`There was an error creating the boot file at path: ${a}`),c}yc.setProperty(pe.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),yc.setProperty(pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),yc.setProperty(yc.BOOT_PROPS_FILE_PATH,a)}}o(
|
|
93
|
+
Reindexing upgrade started for transaction logs`),ta.notify("Reindexing upgrade started for transaction logs"),await oW(ZO,!0,e)),ta.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(vh?", but errors occurred":"")}o(kEe,"reindexUpgrade");async function oW(e,t,r){let n=await so.readdir(e),s=n.length;for(let i=0;i<s;i++){let a=n[i],c=ra.join(e,a.toString());if(a===".DS_Store")continue;let l=await so.readdir(c),u=l.length;for(let d=0;d<u;d++){let f=l[d];if(f!==".DS_Store"&&so.statSync(ra.join(c,f)).isDirectory())try{await HEe(a,f,t),Tn.info(`Reindexing started for ${a}.${f}`),ta.notify(`${t?"Transaction":"Schema"} reindexing started for ${a}.${f}`),await GEe(a,f,c,t,r),Tn.info(`Reindexing completed for ${a}.${f}`),ta.notify(`Reindexing completed for ${a}.${f}`)}catch(m){vh=!0,m.schema_path=c,m.table_name=f,ta.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),ta.error(m),Tn.error(m),console.error(m)}}}if(!vh)try{await so.rm(YT,{recursive:!0})}catch{}}o(oW,"processTables");async function HEe(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=ra.join(YT,s);await so.ensureDir(YT),await so.writeFile(i,""),Tn=BEe({level:"debug",formatters:{bindings(){}}},i)}o(HEe,"initPinoLogger");var qEe=20;async function GEe(e,t,r,n,s){let i;try{i=await ps.openEnvironment(r,t,n)}catch(S){if(S.message==="MDB_INVALID: File is not an LMDB file"){ta.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),Tn.error(S);return}throw S}let a=KEe(i.dbis),c=ps.openDBI(i,a),l=Object.keys(i.dbis),u=ps.statDBI(i,a);Tn.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new xEe.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 ps.createEnvironment(r,t,!1);ps.createDBI(f,a,!1,!0);let m=[];try{for(let S of c.getRange({start:!1}))S.value={...S.value},m.push(S),n||e==="system"&&(t==="hdb_schema"&&(S.key=S.key.toString(),S.value.name=S.value.name.toString()),t==="hdb_table"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.name=S.value.name.toString()),t==="hdb_attribute"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.table=S.value.table.toString(),S.value.attribute=S.value.attribute.toString())),m.length>qEe&&await p();await p()}catch(S){throw vh=!0,Tn.error(S),S}async function p(){let S,R=m.map(({value:O})=>O);n?S=await Promise.all(R.map(O=>$Ee(f,O))):S=await DEe(f,a,l.filter(O=>O!=="__blob__"),R,!1);for(let O=0,x=m.length;O<x;O++){let{key:j,value:H}=m[O];Tn.info(`Record hash value: ${j} hash: ${a}`);let F;n?F=S[O]:F=S.written_hashes.indexOf(j)>-1,Mh(F,!0),VEe(f,a,H[a],n),Tn.info(`Insert success, written hashes: ${S.written_hashes}`),d.increment()}m=[],d.value/d.total*100%10===0&&ta.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),Tn.info(`${d.value}/${d.total} records inserted`)}o(p,"finishOutstanding"),d.stop();let h=ps.statDBI(i,a),E=ps.statDBI(f,a);if(Tn.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${E.entryCount}`),Mh.deepStrictEqual(h.entryCount,E.entryCount),await ps.closeEnvironment(i),await ps.closeEnvironment(f),delete global.lmdb_map[`${e}.${t}`],s){let S=ra.join(r,t),R=ra.join(S,"data.mdb"),L=ra.join(S,"lock.mdb");await so.unlink(R),await so.unlink(L),await so.rmdir(S),Tn.info(`Deleted old environment files from schema folder: ${R}, ${L}`)}let g=await ps.openEnvironment(r,t),b=ps.statDBI(g,a);Tn.info(`New stats: ${JSON.stringify(E)}. New stats after move: ${JSON.stringify(b)}`),Mh.deepStrictEqual(b.entryCount,E.entryCount),await ps.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}o(GEe,"processTable");async function $Ee(e,t){ps.initializeDBIs(e,_c.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,_c.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[_c.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[_c.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),UEe.isEmpty(t.user_name)||e.dbis[_c.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[_c.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}o($Ee,"insertTransaction");function VEe(e,t,r,n){let i=e.dbis[t].get(r);Mh.deepStrictEqual(typeof i,"object");let a;if(n){let c={[_c.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[_c.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};a=Object.entries(c)}else a=Object.entries(i);for(let[c,l]of a)if(c!==t&&e.dbis[c]!==void 0&&!vEe.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let f=l[u];aW(e,c,f,r)}else aW(e,c,l,r)}o(VEe,"validateIndices");function aW(e,t,r,n){try{let s=!1,i=MEe.getIndexedValues(r);if(!i)return;for(let a of i)s=e.dbis[t].doesExist(a,n),s||Tn.info(`Validate indices did not find value in new DBI: ${a}. Hash: ${n}`),Mh.deepStrictEqual(s,!0)}catch(s){vh=!0,Tn.error(s),console.error(s)}}o(aW,"validateIndex");function KEe(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}o(KEe,"getHashDBI")});var pW=v((WFe,mW)=>{"use strict";var WT=require("path"),gc=require("fs-extra"),YEe=$T(),zl=z(),uW=Et(),eP=le(),yi=(k(),D(Y)),zT=ce(),WEe=require("properties-reader"),zEe=ai(),jEe=Hp(),QEe=fn(),YFe=require("util"),JEe=QEe.searchByValue,XEe=un(),ZEe=DT(),e_e=mt(),t_e=lW(),dW=ds(),r_e=GT(),Bh=new YEe("4.0.0"),fW=[],Uh,xh;async function n_e(){try{if(await r_e.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Uh){let t=zT.changeExtension(Uh,".bak");await gc.move(Uh,t)}if(xh){let t=zT.changeExtension(xh,".bak");await gc.move(xh,t)}await dW.generateKeys()}else console.log("Using existing certificates."),dW.updateConfigCert(Uh,xh,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}o(n_e,"generateNewKeys");async function s_e(){console.log("Updating HarperDB nodes."),zl.info("Updating HarperDB nodes.");let e=[];try{let t=new zEe(yi.SYSTEM_SCHEMA_NAME,yi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await JEe(t)),n=[];for(let i=0,a=r.length;i<a;i++){let c=r[i];if(!e_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:yi.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(zT.isEmptyOrZeroLength(n))return;let s=new jEe(yi.SYSTEM_SCHEMA_NAME,yi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await XEe.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{ZEe.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}o(s_e,"updateNodes");async function i_e(){let e=eP.get(yi.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(WT.join("config","settings.js"))){zl.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),zl.info(t);let r=WT.dirname(e),n=eP.get(yi.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=WT.join(n,"backup","4_0_0_upgrade_settings.bak"),i=WT.join(n,yi.HDB_CONFIG_FILE);try{zl.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),gc.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{zl.info(`Creating new/upgraded settings file at '${new_settings_path}'`),console.log(`Creating new/upgraded settings file at '${new_settings_path}'`),zl.info("Updating env variables with new settings values");let f=uW.initOldConfig(e);Uh=f[yi.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],xh=f[yi.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],uW.createConfigFile(f)}catch(f){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),f}let a=zT.getPropsFilePath();gc.accessSync(a,gc.constants.F_OK|gc.constants.R_OK);let l=WEe(a).get(yi.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
|
|
94
|
+
install_user = ${l}`;try{gc.writeFileSync(a,u)}catch(f){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),f}try{eP.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{gc.removeSync(r),console.log(d),zl.info(d)}catch(f){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),f}}o(i_e,"updateSettingsFile400");Bh.async_functions.push(i_e);Bh.async_functions.push(n_e);Bh.async_functions.push(t_e);Bh.async_functions.push(s_e);fW.push(Bh);mW.exports=fW});var gW=v((jFe,_W)=>{var o_e=$T(),{databases:a_e,table:c_e}=(Ne(),D(ft)),l_e=qi(),tP=z(),hW=new o_e("4.7.0"),EW=[];async function u_e(){let e=a_e.system?.hdb_license;if(!e){tP.debug?.("system.hdb_license table not found; no migration necessary");return}return tP.debug?.("Dropping existing system.hdb_license table"),await e.dropTable(),tP.debug?.("Creating new usage block system.hdb_license table"),c_e(l_e.hdb_license)}o(u_e,"convertToUsageBlockLicenses");hW.async_functions.push(u_e);EW.push(hW);_W.exports=EW});var rP=v((JFe,bW)=>{"use strict";var jl=ce(),d_e=(k(),D(Y)),SW=z(),{DATA_VERSION:f_e,UPGRADE_VERSION:m_e}=d_e.UPGRADE_JSON_FIELD_NAMES_ENUM,TW=sW(),jT=pW(),yW=gW(),Sc=new Map;TW&&TW.forEach(e=>{Sc.set(e.version,e)});jT&&jT.forEach(e=>{Sc.set(e.version,e)});jT&&jT.forEach(e=>{Sc.set(e.version,e)});yW&&yW.forEach(e=>{Sc.set(e.version,e)});function p_e(){return[...Sc.keys()].sort(jl.compareVersions)}o(p_e,"getSortedVersions");function RW(e){let t=e[f_e],r=e[m_e];return jl.isEmptyOrZeroLength(t)||jl.isEmptyOrZeroLength(r)?(SW.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),SW.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."),[]):[...Sc.keys()].sort(jl.compareVersions).filter(function(n){return jl.compareVersions(n,t)>0&&jl.compareVersions(n,r)<=0})}o(RW,"getVersionsForUpgrade");function h_e(e){return RW(e).length>0}o(h_e,"hasUpgradesRequired");function E_e(e){return jl.isEmptyOrZeroLength(e)?null:Sc.has(e)?Sc.get(e):null}o(E_e,"getDirectiveByVersion");bW.exports={getSortedVersions:p_e,getDirectiveByVersion:E_e,getVersionsForUpgrade:RW,hasUpgradesRequired:h_e}});var JT=v((ZFe,CW)=>{"use strict";var __e=require("util"),nP=require("chalk"),g_e=require("os"),IW=un(),S_e=fn(),hs=(k(),D(Y)),wW=YY(),iP=uw(),{UpgradeObject:AW}=jY(),{forceDowngradePrompt:T_e}=GT(),{packageJson:y_e}=bt(),QT=z(),uf=ce(),oP=li(),R_e=(Ne(),D(ft)),b_e=rP(),A_e=__e.promisify(oP.setSchemaDataToGlobal),I_e=S_e.searchByValue,w_e="info_id",N_e="2.9.9",C_e="3.0.0";async function O_e(e){let t=new wW.HdbInfoInsertObject(1,e,e),r=new iP.InsertObject(hs.OPERATIONS_ENUM.INSERT,hs.SYSTEM_SCHEMA_NAME,hs.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,hs.INFO_TABLE_HASH_ATTRIBUTE,[t]);return oP.setSchemaDataToGlobal(),IW.insert(r)}o(O_e,"insertHdbInstallInfo");async function sP(e){let t,r=await NW(),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 wW.HdbInfoInsertObject(i,e,e);let a=new iP.InsertObject(hs.OPERATIONS_ENUM.INSERT,hs.SYSTEM_SCHEMA_NAME,hs.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,hs.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await A_e(),IW.insert(a)}o(sP,"insertHdbUpgradeInfo");async function NW(){let e=new iP.NoSQLSeachObject(hs.SYSTEM_SCHEMA_NAME,hs.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,w_e,hs.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await I_e(e))}catch(r){console.error(r)}return t}o(NW,"getAllHdbInfoRecords");async function P_e(){let e=await NW();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}o(P_e,"getLatestHdbInfoRecord");async function L_e(){QT.info("Checking if HDB software has been updated");try{let e=y_e.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await P_e(),r;if(uf.isEmpty(t))r=N_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(nP.yellow(`This instance's data was last run on version ${r}`)),console.error(nP.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.${g_e.EOL}${hs.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");uf.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(nP.yellow(`This instance's data was last run on version ${r}`)),await T_e(new AW(r,e))?await sP(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(oP.setSchemaDataToGlobal(),D_e(r),e.toString()===r.toString())return;let n=new AW(r,e);if(b_e.hasUpgradesRequired(n))return n;uf.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await sP(n.upgrade_version),QT.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw QT.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),QT.fatal(e),e}}o(L_e,"getVersionUpdateInfo");function D_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 ${hs.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in R_e.databases.system))throw console.log(t),new Error(t);if(!uf.isEmpty(e)&&e<C_e)throw console.log(t),new Error(t)}o(D_e,"checkIfInstallIsSupported");CW.exports={insertHdbInstallInfo:O_e,insertHdbUpgradeInfo:sP,getVersionUpdateInfo:L_e}});var DW=v((tke,LW)=>{"use strict";var XT=require("joi"),{boolean:M_e,string:aP,number:v_e}=XT.types(),OW=require("fs-extra"),Fh=(k(),D(Y)),PW=require("path"),U_e=ot();LW.exports=x_e;function x_e(e){let t=aP.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=XT.object({[Fh.INSTALL_PROMPTS.ROOTPATH]:XT.custom(B_e),[Fh.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:XT.alternatives([v_e.min(0),aP]).allow("null",null),[Fh.INSTALL_PROMPTS.TC_AGREEMENT]:aP.valid("yes","YES","Yes"),[Fh.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Fh.INSTALL_PROMPTS.CLUSTERING_ENABLED]:M_e});return U_e.validateBySchema(e,r)}o(x_e,"installValidator");function B_e(e,t){if(OW.existsSync(PW.join(e,"system/hdb_user/data.mdb"))||OW.existsSync(PW.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(B_e,"validateRootAvailable")});var vW=v((nke,MW)=>{"use strict";var{mkdirpSync:F_e,copySync:k_e}=require("fs-extra"),Tc=require("path"),kh=(k(),D(Y)),{PACKAGE_ROOT:H_e}=bt(),lP=z(),q_e=rs(),cP=qi(),G_e=St(),{NON_REPLICATING_SYSTEM_TABLES:$_e}=(Ne(),D(ft));MW.exports=V_e;async function V_e(e){lP.trace("Mounting HarperDB"),Ql(e),Ql(Tc.join(e,"backup")),Ql(Tc.join(e,"keys")),Ql(Tc.join(e,"keys",kh.LICENSE_FILE_NAME)),Ql(Tc.join(e,"log")),Ql(Tc.join(e,"database")),Ql(Tc.join(e,"components")),k_e(Tc.resolve(H_e,"./utility/install/README.md"),Tc.join(e,"README.md")),await K_e()}o(V_e,"mountHdb");async function K_e(){let e=zu(),t=Object.keys(cP);for(let r of t){let n=cP[r].hash_attribute;try{G_e.initSystemSchemaPaths(kh.SYSTEM_SCHEMA_NAME,r);let s=new e(kh.SYSTEM_SCHEMA_NAME,r,n);s.attributes=cP[r].attributes;let i=s.attributes.find(({attribute:a})=>a===n);i.isPrimaryKey=!0,$_e.includes(r)||(s.audit=!0),await q_e.createTable(r,s)}catch(s){throw lP.error(`issue creating environment for ${kh.SYSTEM_SCHEMA_NAME}.${r}: ${s}`),s}}}o(K_e,"createLMDBTables");function Ql(e){F_e(e,{mode:kh.HDB_FILE_PERMISSIONS}),lP.info(`Directory ${e} created`)}o(Ql,"makeDirectory")});var zW=v((ake,WW)=>{"use strict";var fP=require("os"),kW=require("inquirer"),$s=require("fs-extra"),Y_e=require("properties-reader"),Xl=require("chalk"),oo=require("path"),W_e=require("human-readable-ids").hri,uP,z_e=require("yaml"),Er=z(),yc=le(),Hh=ce(),ey=$c(),HW=JT(),{packageJson:qW}=bt(),pe=(k(),D(Y)),{CONFIG_PARAM_MAP:ike,CONFIG_PARAMS:Bt}=pe,j_e=DW(),Q_e=vW(),mP=Et(),J_e=os(),X_e=xp(),Z_e=YO(),ege=li(),tge=require("util").promisify,rge=tge(ege.setSchemaDataToGlobal),UW=ds(),Jl=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),tn=o(e=>Xl.magenta.bold(e),"HDB_PROMPT_MSG"),nge="https://harperdb.io/legal/end-user-license-agreement",Rc=fP.EOL,na="",sge="yes",xW="Starting HarperDB install...",BW="HarperDB installation was successful.",FW="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",ige="An out of date version of HarperDB is already installed.",dP="It appears that HarperDB is already installed. Exiting install...",oge="Aborting install",oke=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])$/),age=new RegExp(/^[^\s.,*>]+$/),cge=fP.homedir(),lge=oo.join(cge,pe.HDB_ROOT_DIR_NAME),uge="HDB_ADMIN",dge="CLUSTER_USER",fge="dev",mge="localhost",ZT={[Bt.HTTP_CORS]:!0,[Bt.HTTP_CORSACCESSLIST]:["*"],[Bt.HTTP_PORT]:9926,[Bt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[Bt.THREADS_COUNT]:1,[Bt.THREADS_DEBUG]:!0,[Bt.LOGGING_STDSTREAMS]:!0,[Bt.LOGGING_LEVEL]:"info",[Bt.OPERATIONSAPI_NETWORK_PORT]:9925,[Bt.LOCALSTUDIO_ENABLED]:!0},en={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:"},bc=ey([pe.INSTALL_PROMPTS.HDB_CONFIG]),io,GW=!1,pP=!1,$W=!1;WW.exports={install:VW,updateConfigEnv:Age,setIgnoreExisting:Ige};VW.createSuperUser=YW;async function VW(){console.log(tn(Rc+xW+Rc)),Er.notify(xW);let e;bc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&(e=pge());let t=Ege();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&&($W=!0,t[pe.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=j_e(t);if(r)throw r.message;await _ge(),await gge(t);let n=await hge(t);io=n[pe.INSTALL_PROMPTS.ROOTPATH],bc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&oo.dirname(bc[pe.INSTALL_PROMPTS.HDB_CONFIG])===io&&(GW=!0),!pP&&!bc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&await $s.pathExists(oo.join(io,pe.HDB_CONFIG_FILE))&&(console.error(dP),process.exit()),uP||(uP=(await import("ora")).default);let s=uP({prefixText:tn("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),Hh.isEmpty(io))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");yc.setHdbBasePath(io),await Q_e(io),await Sge(),await Tge(n),Er.initLogSettings(!0),await YW(n),await Rge(n),await UW.updateConfigCert(),await UW.generateCertsKeys(),await bge(),Z_e(),s.stop(),console.log(tn(Rc+BW+Rc)),Er.notify(BW)}o(VW,"install");function pge(){let e=z_e.parseDocument($s.readFileSync(bc[pe.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=mP.flattenConfig(e.toJSON());return t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}o(pge,"getConfigFromFile");async function hge(e){Er.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Jl,when:sa(e[pe.INSTALL_PROMPTS.ROOTPATH],en.DESTINATION),name:pe.INSTALL_PROMPTS.ROOTPATH,prefix:na,default:lge,validate:o(async s=>Gs(s)?Gs(s):await $s.pathExists(oo.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:tn(en.DESTINATION)},{type:"input",transformer:Jl,when:sa(e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],en.HDB_USERNAME),name:pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:na,default:uge,validate:o(s=>Gs(s)?Gs(s):(t=s,!0),"validate"),message:tn(en.HDB_USERNAME)},{type:"password",when:sa(e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],en.HDB_PASS),name:pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:na,validate:o(s=>Gs(s)?Gs(s):!0,"validate"),message:tn(en.HDB_PASS)},{type:"input",transformer:Jl,when:sa(e[pe.INSTALL_PROMPTS.DEFAULTS_MODE],en.DEFAULTS_MODE),name:pe.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:na,default:fge,validate:o(s=>Gs(s)?Gs(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:tn(en.DEFAULTS_MODE)}];if($W||r.push({type:"input",name:pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:Jl,when:sa(e[pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME],en.REPLICATION_HOSTNAME),prefix:na,default:mge,message:tn(en.REPLICATION_HOSTNAME)}),Hh.autoCastBoolean(e[pe.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Jl,when:sa(e[pe.INSTALL_PROMPTS.CLUSTERING_NODENAME],en.NODE_NAME),name:pe.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:na,default:W_e.random(),validate:o(i=>age.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:tn(en.NODE_NAME)},{type:"input",transformer:Jl,when:sa(e[pe.INSTALL_PROMPTS.CLUSTERING_USER],en.CLUSTER_USERNAME),name:pe.INSTALL_PROMPTS.CLUSTERING_USER,prefix:na,default:dge,validate:o(i=>Gs(i)?Gs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:tn(en.CLUSTER_USERNAME)},{type:"password",when:sa(e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD],en.CLUSTER_PASS),name:pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:na,validate:o(i=>Gs(i)?Gs(i):!0,"validate"),message:tn(en.CLUSTER_PASS)}];r.push(...s)}let n=await kW.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}o(hge,"installPrompts");function sa(e,t){return e!==void 0?(t.includes("password")?(console.log(`${tn(t)} ${Xl.gray("[hidden]")}`),Er.trace(`${tn(t)} [hidden]`)):(console.log(`${tn(t)} ${e}`),Er.trace(`${tn(t)} ${e}`)),!1):!0}o(sa,"displayCmdEnvVar");function Gs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Gs,"checkForEmptyValue");function Ege(){let e=Object.keys(pe.INSTALL_PROMPTS),t=ey(e),r=ey(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}o(Ege,"checkForPromptOverride");async function _ge(){Er.trace("Checking for existing install.");let e=Hh.getPropsFilePath(),t=await $s.pathExists(e),r;if(t){Er.trace(`Install found an existing boot prop file at:${e}`);let n=Y_e(e),s=mP.getConfigValue(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await $s.pathExists(s)}if(!t&&Hh.noBootFile()&&(r=!0),r&&!pP){if(Er.trace(`Install found existing HDB config at:${e}`),await HW.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${qW.version}. Exiting install...`;console.log(Rc+Xl.magenta.bold(ige)),console.log(Xl.magenta.bold(s)),Er.error(s)}else console.log(Rc+Xl.magenta.bold(dP)),Er.error(dP);process.exit(0)}}o(_ge,"checkForExistingInstall");async function gge(e){Er.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${nge}${Rc}and can be viewed by typing or copying and pasting the URL into your web browser.${Rc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:na,transformer:Jl,when:sa(e[pe.INSTALL_PROMPTS.TC_AGREEMENT],t),name:pe.INSTALL_PROMPTS.TC_AGREEMENT,message:tn(t),validate:o(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:Xl.yellow("Please enter 'yes' or 'no'"),"validate")},n=await kW.prompt([r]);n[pe.INSTALL_PROMPTS.TC_AGREEMENT]&&n[pe.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==sge&&(console.log(Xl.yellow(FW)),Er.error(FW),process.exit(0))}o(gge,"termsAgreement");async function Sge(){let e=oo.join(io,pe.HDB_CONFIG_FILE),t;try{t=fP.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}
|
|
95
|
+
install_user = ${t}`,n=Hh.getHomeDir(),s=oo.join(n,pe.HDB_HOME_DIR_NAME),i=oo.join(s,pe.LICENSE_KEY_DIR_NAME);try{$s.mkdirpSync(s,{mode:pe.HDB_FILE_PERMISSIONS}),$s.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 a=oo.join(s,pe.BOOT_PROPS_FILE_NAME);try{await $s.writeFile(a,r)}catch(c){throw Er.error(`There was an error creating the boot file at path: ${a}`),c}yc.setProperty(pe.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),yc.setProperty(pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),yc.setProperty(yc.BOOT_PROPS_FILE_PATH,a)}}o(Sge,"createBootPropertiesFile");async function Tge(e){Er.trace("Creating HarperDB config file");let t=ey(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 ZT){if(r===Bt.HTTP_PORT&&t[Bt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??ZT[r],t[Bt.HTTP_SECUREPORT]=null;continue}else if(r===Bt.HTTP_PORT)continue;if(r===Bt.OPERATIONSAPI_NETWORK_PORT&&t[Bt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??ZT[r],t[Bt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===Bt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=ZT[r])}}else t[Bt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[Bt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[Bt.HTTP_PORT.toLowerCase()]&&(t[Bt.HTTP_SECUREPORT]=null);try{bc[pe.INSTALL_PROMPTS.HDB_CONFIG]||mP.createConfigFile(t),yc.initSync()}catch(r){yge(r)}}o(Tge,"createConfigFile");function yge(e){Er.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(oge);let t=oo.resolve(yc.get(yc.BOOT_PROPS_FILE_PATH),"../");t&&$s.removeSync(t),io&&(GW?$s.readdirSync(io,{withFileTypes:!0}).forEach(n=>{let s=oo.join(n.path,n.name);s!==bc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&$s.removeSync(s)}):$s.removeSync(io)),process.exit(1)}o(yge,"rollbackInstall");async function KW(e,t){Er.trace("Creating admin user"),await rge();let r;try{r=await X_e.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 J_e.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}o(KW,"createAdminUser");async function YW(e){Er.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 KW(t,r),delete e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(YW,"createSuperUser");async function Rge(e){Er.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 KW({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[pe.INSTALL_PROMPTS.CLUSTERING_USER],delete e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(Rge,"createClusterUser");async function bge(){let e=qW.version;if(e)await HW.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(bge,"insertHdbVersionInfo");function Age(e){bc[pe.INSTALL_PROMPTS.HDB_CONFIG]=e}o(Age,"updateConfigEnv");function Ige(e){pP=e}o(Ige,"setIgnoreExisting")});var EP={};be(EP,{isHdbInstalled:()=>wge});function wge(e,t){try{hP.default.statSync((0,ty.getPropsFilePath)()),hP.default.statSync(e.get(tm.SETTINGS_PATH_KEY))}catch(r){if((0,ty.noBootFile)())return!0;if(r.code==="ENOENT")return!1;throw t.error(`Error checking for HDB install - ${r}`),r}return!0}var hP,ty,_P=oe(()=>{k();hP=w(require("node:fs")),ty=w(ce());o(wge,"isHdbInstalled")});var JW=v((uke,QW)=>{"use strict";var gP=ce(),Es=z(),jW=rP();QW.exports={processDirectives:Nge};async function Nge(e){console.log("Starting upgrade process...");let t=jW.getVersionsForUpgrade(e),r=Pge(t),n=[],s=r.length;for(let i=0;i<s;i++){let a=r[i],c=`Running upgrade for version ${a.version}`;Es.notify(c),console.log(c);let l=[],u=[];try{l=Cge(a.sync_functions)}catch(d){throw Es.error(`Error while running an upgrade script for ${a.version}`),d}try{u=await Oge(a.async_functions)}catch(d){throw Es.error(`Error while running an upgrade script for ${a.version}`),d}n.push(...l,...u)}return n}o(Nge,"processDirectives");function Cge(e){if(gP.isEmptyOrZeroLength(e))return Es.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Es.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Es.info(`Running function ${r.name}`),!(r instanceof Function)){Es.info("Variable being processed is not a function");continue}let n=r();Es.info(n),t.push(n)}return t}o(Cge,"runSyncFunctions");async function Oge(e){if(gP.isEmptyOrZeroLength(e))return Es.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Es.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(Es.info(`Running function ${s.name}`),!(s instanceof Function)){Es.info("Variable being processed is not a function");continue}let i=await s();Es.info(i),t.push(i)}return t}o(Oge,"runAsyncFunctions");function Pge(e){if(gP.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=jW.getDirectiveByVersion(r);n&&t.push(n)}return t}o(Pge,"getUpgradeDirectivesToInstall")});var nz=v((pke,rz)=>{"use strict";var ez=le();ez.initSync();var Lge=require("chalk"),ia=z(),df=(k(),D(Y)),Dge=JW(),fke=ce(),Mge=(_P(),D(EP)),tz=JT(),vge=GT(),mke=Ib(),Uge=li(),{packageJson:XW}=bt(),xge=require("util").promisify,Bge=xge(Uge.setSchemaDataToGlobal),ZW,{UPGRADE_VERSION:SP}=df.UPGRADE_JSON_FIELD_NAMES_ENUM;rz.exports={upgrade:Fge};async function Fge(e){await Bge(),ZW===void 0&&(ZW=sf()),Mge.isHdbInstalled(ez,ia)||(ry("Harper is not installed. Harper must be installed before running an upgrade.",df.LOG_LEVELS.ERROR),process.exit(1));let r=e;r||(r=await tz.getVersionUpdateInfo(),r||(console.log("HarperDB version is current"),process.exit(0))),ry(`This version of HarperDB is ${XW.version}`,df.LOG_LEVELS.INFO);let n=r[SP]??XW.version;n||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${df.HDB_SUPPORT_ADDRESS}`),ia.notify("Missing new version field from upgrade info object"),process.exit(1));let s,i=0;try{s=await vge.forceUpdatePrompt(r)}catch(a){ia.error("There was an error when prompting user about upgrade."),ia.error(a),s=!1,i=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(i)),ia.info(`Starting upgrade to version ${n}`),await kge(r),ry(`HarperDB was successfully upgraded to version ${r[SP]}`,df.LOG_LEVELS.INFO)}o(Fge,"upgrade");async function kge(e){try{await Dge.processDirectives(e)}catch(t){throw ry("There was an error during the data upgrade. Please check the logs.",df.LOG_LEVELS.ERROR),t}try{await tz.insertHdbUpgradeInfo(e[SP])}catch(t){ia.error("Error updating the 'hdb_info' system table."),ia.error(t)}}o(kge,"runUpgrade");function ry(e,t=void 0){t||(t=ia.info),ia[t](e),console.log(Lge.magenta(e))}o(ry,"printToLogAndConsole")});var sz={};be(sz,{SERVERS:()=>ff,portServer:()=>TP,setPortServerMap:()=>ny});function ny(e,t){let r=TP.get(e)??[];TP.set(e,[...r,t])}var ff,TP,yP=oe(()=>{ff={},TP=new Map;o(ny,"setPortServerMap")});function qge(e){if(typeof e!="string")throw new sy(`License must be a string; received ${typeof e}: ${e}`);let t;try{t=e.split(".")}catch(l){let u=new sy(`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 mf(`License must have three dot-separated parts; got ${t.length}`);let[r,n,s]=t,i=Hge.getKey();if(!(0,oy.verify)(null,Buffer.from(r+"."+n,"utf8"),i,Buffer.from(s,"base64url")))throw new bP("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 Gge(e){if(e?.typ!=="Harper-License")throw new qh(`Invalid license header; typ must be 'Harper-License'; got: ${e?.typ}`);if(e?.alg!=="EdDSA")throw new qh(`Invalid license header; alg must be 'EdDSA'; got: ${e?.alg}`)}function $ge(e,t){return e.required?typeof t===e.type:typeof t>"u"||typeof t===e.type}function Vge(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(!$ge(t[r],e[r]))throw new iy(`Invalid license payload; ${i} must be a ${s}; got: ${typeof e[r]}`)}}function oz(e){let{header:t,payload:r}=qge(e),n;try{n=JSON.parse(t)}catch(i){let a=new qh;throw a.cause=i,a}Gge(n);let s;try{s=JSON.parse(r)}catch(i){let a=new iy;throw a.cause=i,a}return Vge(s),s}var oy,iz,RP,sy,mf,bP,qh,iy,Hge,az=oe(()=>{oy=require("node:crypto"),iz=w(le());k();RP=class{static{o(this,"PublicKey")}pem;constructor(t){t&&(t==="test"||t==="development")?this.pem=`-----BEGIN PUBLIC KEY-----
|
|
96
96
|
MCowBQYDK2VwAyEAO301jvpO12znGdK/Izrre518pgmQNk9hSMXf4wDMucM=
|
|
97
97
|
-----END PUBLIC KEY-----
|
|
98
98
|
`:this.pem=`-----BEGIN PUBLIC KEY-----
|
|
99
99
|
MCowBQYDK2VwAyEAMtpzMn9YfS0fGaDLcAmYQx2OH8kVevwbNyQ1RIj5cvw=
|
|
100
100
|
-----END PUBLIC KEY-----
|
|
101
|
-
`}getKey(){return(0,ay.createPublicKey)(this.pem)}toString(){return this.pem}},iy=class extends TypeError{static{o(this,"LicenseEncodingError")}},mf=class extends TypeError{static{o(this,"InvalidLicenseError")}},bP=class extends mf{static{o(this,"InvalidLicenseSignatureError")}},qh=class extends mf{static{o(this,"InvalidHeaderError")}},oy=class extends mf{static{o(this,"InvalidPayloadError")}},qge=new RP(sz.get(U.LICENSE_MODE));o(Gge,"validateLicenseSignature");o($ge,"validateLicenseHeader");o(Vge,"valid");o(Kge,"validateLicensePayload");o(iz,"validateLicense")});var cy={};be(cy,{getActiveLicense:()=>CP,getUsageLicenses:()=>Ez,getUsageLicensesOp:()=>PP,installUsageLicense:()=>NP,installUsageLicenseOp:()=>wP,isActiveLicense:()=>pz,isLicensed:()=>OP,loadAndWatchLicensesDir:()=>zge,recordUsage:()=>hz});async function wP(e){let t=e.license;try{await NP(t)}catch(r){let n=new lz.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function NP(e){let t=iz(e),{id:r}=t;if(await De.system.hdb_license.get(r))throw new IP(`A usage license with ${r} already exists`);return ao.info?.("Installing usage license:",t),De.system.hdb_license.put(r,t)}function pz(e){return(e.usedReads??0)<e.reads&&(e.usedReadBytes??0)<e.readBytes&&(e.usedWrites??0)<e.writes&&(e.usedWriteBytes??0)<e.writeBytes&&(e.usedRealTimeMessages??0)<e.realTimeMessages&&(e.usedRealTimeBytes??0)<e.realTimeBytes&&(e.usedCpuTime??0)<e.cpuTime&&(e.usedStorage??0)<e.storage||e.reads===-1&&e.readBytes===-1&&e.writes===-1&&e.writeBytes===-1&&e.realTimeMessages===-1&&e.realTimeBytes===-1&&e.cpuTime===-1&&e.storage===-1}async function CP(){let e=uz.get(U.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=De.system.hdb_license?.search(t);for await(let n of r??[])if(pz(n))return n}async function OP(){return await CP()!==void 0}async function hz(e){oa=ao.forComponent("license"),oa.trace?.("Recording usage into license from analytics");let t,r=(await CP())?.id;if(r){oa.trace?.("Found license to record usage into:",r);let n={};Tt(n,()=>{t=De.system.hdb_license.update(r,n);for(let s of e)switch(oa.trace?.("Processing analytics record:",s),s.metric){case"db-read":oa.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":oa.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":oa.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"&&(oa.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:oa.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.";az||(console.error(n),az=!0),cz===void 0&&(cz=setInterval(()=>{ao.notify(n)},Yge).unref())}}function PP(e){let t={};return e.region&&(t.region=e.region),Ez(t)}function Ez(e){let t=[],r=typeof e=="object"?Object.keys(e):[];return r.length>0&&r.forEach(n=>{t.push({attribute:n,comparator:"equals",value:e[n]})}),De.system.hdb_license.search({sort:{attribute:"__createdtime__"},conditions:t})}async function Wge(e){ao.trace?.("Loading usage license from file:",e);let t=await fz.readFile(e,{encoding:"utf-8"});try{await NP(t)}catch(r){ao.error?.("Failed to install usage license from file:",e,r)}}function zge(){let e=AP.default.join(AP.default.dirname(dz.getConfigFilePath()),"licenses");(0,mz.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:o((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",Wge)}var lz,ao,uz,AP,dz,fz,mz,IP,az,cz,Yge,oa,Gh=oe(()=>{oz();lz=w(Ee()),ao=w(z());jn();Na();uz=w(le());k();Ne();AP=w(require("node:path")),dz=w(Et()),fz=w(require("node:fs/promises")),mz=require("chokidar"),IP=class extends Error{static{o(this,"ExistingLicenseError")}};o(wP,"installUsageLicenseOp");o(NP,"installUsageLicense");az=!1,Yge=6e5;o(pz,"isActiveLicense");o(CP,"getActiveLicense");o(OP,"isLicensed");o(hz,"recordUsage");IA(hz);o(PP,"getUsageLicensesOp");o(Ez,"getUsageLicenses");o(Wge,"loadLicenseFile");o(zge,"loadAndWatchLicensesDir")});var py={};be(py,{deliverSocket:()=>Cz,getHttpOptions:()=>Xge,getRequestId:()=>Dz,handleApplication:()=>Jge,httpServer:()=>FP,logRequest:()=>Kh,proxyRequest:()=>Zge,registerServer:()=>xP,suppressHandleApplicationWarning:()=>Qge});function Jge(e){Yh=e.options.getAll(),e.options.on("change",t=>{Yh=e.options.getAll()})}function Xge(){return Yh}function Cz(e,t,r){let n=e?.read?e:new yz.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=ff[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=o(a=>{setTimeout(()=>{let c=ff[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):a<5?i(a+1):(aa.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function Zge(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=_z.get(s),r){case"connection":i=Cz(void 0,t),_z.set(s,i),i.write=(c,l,u)=>(uy.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(uy.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let a=i.destroy;i.destroy=()=>{a.call(i),uy.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 xP(e,t,r=!0){t||(t=Or.default.get(U.HTTP_PORT));let n=ff[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",Tz),s.on("unhandled",(i,a)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,a)}),n.lastServer=e}else ff[t]=e;e.on("unhandled",Tz)}function BP(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=[],Or.default.get(U.HTTP_PORT)!=null&&t.push({port:Or.default.get(U.HTTP_PORT),secure:Or.default.get(U.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Or.default.get(U.HTTP_SECUREPORT)!=null&&t.push({port:Or.default.get(U.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Or.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,Rz.resolvePath)(Or.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function FP(e,t){let r=[];for(let{port:n,secure:s}of BP(t))r.push(Oz(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?vP[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,xP(e,n,!1)),dy[n]=fy(vP,n);return r}function Oz(e,t,r,n){if(sy(e,{protocol_name:t?"HTTPS":"HTTP",name:hy()}),!ly[e]){let s=r?"operationsApi_network":"http",i=Or.default.get(s+"_keepAliveTimeout"),a=Or.default.get(s+"_timeout"),c=Or.default.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:a,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Or.default.get(U.HTTP_MAXHEADERSIZE)},u=Or.default.get(s+"_mtls"),d=Or.default.get(s+"_mtls_required"),f;if(t){let E=Or.default.get("tls");f=Or.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,bz.getTicketKeys)(),SNICallback:(0,Az.createTLSSelector)(r?"operations-api":"server",u),ciphers:E.ciphers??E[0]?.ciphers})}let m=o(async(E,g)=>{let b=performance.now(),S=0;try{let L=new Qa(E,g);r&&(L.isOperationsServer=!0),Yh.logging?.id&&(L.requestId=S=Dz());let O=await dy[e](L);if(!O){if(L._nodeResponse.statusCode){Kh(E,L._nodeResponse.statusCode,S,performance.now()-b);return}O=Pz(L)}if(O.headers?.set||(O.headers=new Ds(O.headers)),await OP()?O.headers.set("Server","HarperDB"):O.headers.set("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"),O.status===-1){for(let ee of O.headers||[])g.setHeader(ee[0],ee[1]);return E.baseRequest=L,g.baseResponse=O,ly[e].emit("unhandled",E,g)}let x=O.status||200;g.statusCode=x;let j=performance.now(),H=j-b,F=O.body,Q,W=!1;if(!O.handlesHeaders){let ee=O.headers||new Ds;F?F.length>=0?(typeof F=="string"?ee.set("Content-Length",Buffer.byteLength(F)):ee.set("Content-Length",F.length),Q=!0):F instanceof bs&&(F.size?ee.set("Content-Length",F.size):F.on&&(W=!0,F.on("size",Ie=>{g.headersSent||g.setHeader("Content-Length",Ie)})),F=F.stream()):(ee.set("Content-Length","0"),Q=!0);let Re=`hdb;dur=${H.toFixed(2)}`;if(O.wasCacheMiss&&(Re+=", miss"),bp(ee,"Server-Timing",Re,!0),!g.headersSent)if(W){if(ee)if(ee[Symbol.iterator])for(let[Ie,$e]of ee)g.setHeader(Ie,$e);else for(let Ie in ee)g.setHeader(Ie,ee[Ie])}else g.writeHead(x,ee&&(ee[Symbol.iterator]?Array.from(ee):ee));Q&&g.end(F)}let fe=L.handlerPath,ue=L.method;if(qe(H,"duration",fe,ue,O.wasCacheMiss==null?void 0:O.wasCacheMiss?"cache-miss":"cache-hit"),zr(x<400,"success",fe,ue),zr(1,"response_"+x,fe,ue),Kh(E,x,S,H),!Q)if(F instanceof ReadableStream&&(F=MP.Readable.fromWeb(F)),(F[Symbol.iterator]||F[Symbol.asyncIterator])&&(F=MP.Readable.from(F)),F?.pipe){F.pipe(g),F.destroy&&g.on("close",()=>{F.destroy()});let ee=0;F.on("data",Re=>{ee+=Re.length}),F.on("end",()=>{qe(performance.now()-j,"transfer",fe,ue),qe(ee,"bytes-sent",fe,ue)})}else F?.then?F.then(ee=>{g.end(ee)},R):g.end(F)}catch(L){R(L)}function R(L){let O=L.headers,x=L.statusCode||500;g.writeHead(x,O&&(O[Symbol.iterator]?Array.from(O):O)),g.end(jge(L)),Kh(E,x,S,performance.now()-b),L.statusCode?L.statusCode===500?aa.default.warn(L):aa.default.info(L):aa.default.error(L)}o(R,"onError")},"requestHandler"),p=jg(m,(E,g)=>{g.statusCode=503,g.end("Service unavailable, exceeded request queue limit"),qe(!0,"service-unavailable",e)},Or.default.get(s+"_requestQueueLimit")),h=ly[e]=(t?f?Iz.createSecureServer:wz.createServer:my.createServer)(l,(E,g)=>{let b=E.method;b==="GET"||b==="OPTIONS"||b==="HEAD"?m(E,g):p(E,g)});i>=0&&(h.keepAliveTimeout=i),c>=0&&(h.headersTimeout=c),t&&(h.ports||(h.ports=[]),h.ports.push(e),l.SNICallback.initialize(h),u&&(h.mtlsConfig=u),h.on("secureConnection",E=>{E._parent.startTime&&qe(performance.now()-E._parent.startTime,"tls-handshake",e),qe(E.isSessionReused(),"tls-reused",e)}),h.isSecure=!0),xP(h,e)}return ly[e]}function fy(e,t){let r=Pz;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let a=r;r=o((...c)=>s(...c,a),"nextCallback")}}return r}function Pz(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Ds}}function eSe(e,t){FP(e,{requestOnly:!0,...t})}function Lz(e,t){for(let{port:r}of BP(t))gz[t?.runFirst?"unshift":"push"]({listener:e,port:r}),UP[r]=fy(gz,r)}function tSe(e,t){let r=[];for(let{port:n,secure:s}of BP(t)){sy(n,{protocol_name:s?"WSS":"WS",name:hy()});let i=Oz(n,s,t?.isOperationsServer,t?.mtls);$h[n]||($h[n]=new Nz.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),$h[n].on("connection",(a,c)=>{try{let l=new Qa(c);l.isWebSocket=!0;let u=dy[n](l);aa.default.debug("Received WS connection, calling listeners",LP),Sz[n](a,l,u)}catch(l){aa.default.warn("Error in handling WS connection",l)}}),Lz((a,c,l,u)=>a.__harperdbRequestUpgraded?u(a,c,l):$h[n].handleUpgrade(a,c,l,d=>{a.__harperdbRequestUpgraded=!0,u(a,c,l),$h[n].emit("connection",d,a)}),{port:n}),i.on("upgrade",(a,c,l)=>{UP[n]&&UP[n](a,c,l)})),r.push(i),LP[t?.runFirst?"unshift":"push"]({listener:e,port:n}),Sz[n]=fy(LP,n),dy[n]=fy(vP,n)}return r}function Tz(e,t){t.writeHead(404),t.end(`Not found
|
|
102
|
-
`),Kh(e,404,0,e.requestId)}function Kh(e,t,r,n){let s=Yh.logging;if(s){DP||(DP=aa.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";DP[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+
|
|
101
|
+
`}getKey(){return(0,oy.createPublicKey)(this.pem)}toString(){return this.pem}},sy=class extends TypeError{static{o(this,"LicenseEncodingError")}},mf=class extends TypeError{static{o(this,"InvalidLicenseError")}},bP=class extends mf{static{o(this,"InvalidLicenseSignatureError")}},qh=class extends mf{static{o(this,"InvalidHeaderError")}},iy=class extends mf{static{o(this,"InvalidPayloadError")}},Hge=new RP(iz.get(U.LICENSE_MODE));o(qge,"validateLicenseSignature");o(Gge,"validateLicenseHeader");o($ge,"valid");o(Vge,"validateLicensePayload");o(oz,"validateLicense")});var ay={};be(ay,{getActiveLicense:()=>CP,getUsageLicenses:()=>_z,getUsageLicensesOp:()=>PP,installUsageLicense:()=>NP,installUsageLicenseOp:()=>wP,isActiveLicense:()=>hz,isLicensed:()=>OP,loadAndWatchLicensesDir:()=>Wge,recordUsage:()=>Ez});async function wP(e){let t=e.license;try{await NP(t)}catch(r){let n=new uz.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function NP(e){let t=oz(e),{id:r}=t;if(await De.system.hdb_license.get(r))throw new IP(`A usage license with ${r} already exists`);return ao.info?.("Installing usage license:",t),De.system.hdb_license.put(r,t)}function hz(e){return(e.usedReads??0)<e.reads&&(e.usedReadBytes??0)<e.readBytes&&(e.usedWrites??0)<e.writes&&(e.usedWriteBytes??0)<e.writeBytes&&(e.usedRealTimeMessages??0)<e.realTimeMessages&&(e.usedRealTimeBytes??0)<e.realTimeBytes&&(e.usedCpuTime??0)<e.cpuTime&&(e.usedStorage??0)<e.storage||e.reads===-1&&e.readBytes===-1&&e.writes===-1&&e.writeBytes===-1&&e.realTimeMessages===-1&&e.realTimeBytes===-1&&e.cpuTime===-1&&e.storage===-1}async function CP(){let e=dz.get(U.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=De.system.hdb_license?.search(t);for await(let n of r??[])if(hz(n))return n}async function OP(){return await CP()!==void 0}async function Ez(e){oa=ao.forComponent("license"),oa.trace?.("Recording usage into license from analytics");let t,r=(await CP())?.id;if(r){oa.trace?.("Found license to record usage into:",r);let n={};Tt(n,()=>{t=De.system.hdb_license.update(r,n);for(let s of e)switch(oa.trace?.("Processing analytics record:",s),s.metric){case"db-read":oa.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":oa.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":oa.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"&&(oa.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:oa.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.";cz||(console.error(n),cz=!0),lz===void 0&&(lz=setInterval(()=>{ao.notify(n)},Kge).unref())}}function PP(e){let t={};return e.region&&(t.region=e.region),_z(t)}function _z(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]})}),De.system.hdb_license.search({sort:{attribute:"__createdtime__"},conditions:t})}async function Yge(e){ao.trace?.("Loading usage license from file:",e);let t=await mz.readFile(e,{encoding:"utf-8"});try{await NP(t)}catch(r){ao.error?.("Failed to install usage license from file:",e,r)}}function Wge(){let e=AP.default.join(AP.default.dirname(fz.getConfigFilePath()),"licenses");(0,pz.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:o((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",Yge)}var uz,ao,dz,AP,fz,mz,pz,IP,cz,lz,Kge,oa,Gh=oe(()=>{az();uz=w(Ee()),ao=w(z());jn();Na();dz=w(le());k();Ne();AP=w(require("node:path")),fz=w(Et()),mz=w(require("node:fs/promises")),pz=require("chokidar"),IP=class extends Error{static{o(this,"ExistingLicenseError")}};o(wP,"installUsageLicenseOp");o(NP,"installUsageLicense");cz=!1,Kge=6e5;o(hz,"isActiveLicense");o(CP,"getActiveLicense");o(OP,"isLicensed");o(Ez,"recordUsage");IA(Ez);o(PP,"getUsageLicensesOp");o(_z,"getUsageLicenses");o(Yge,"loadLicenseFile");o(Wge,"loadAndWatchLicensesDir")});var my={};be(my,{deliverSocket:()=>Oz,getHttpOptions:()=>Jge,getRequestId:()=>Mz,handleApplication:()=>Qge,httpServer:()=>FP,logRequest:()=>Kh,proxyRequest:()=>Xge,registerServer:()=>xP,suppressHandleApplicationWarning:()=>jge});function Qge(e){Yh=e.options.getAll(),e.options.on("change",t=>{Yh=e.options.getAll()})}function Jge(){return Yh}function Oz(e,t,r){let n=e?.read?e:new Rz.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=ff[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=o(a=>{setTimeout(()=>{let c=ff[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):a<5?i(a+1):(aa.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function Xge(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=gz.get(s),r){case"connection":i=Oz(void 0,t),gz.set(s,i),i.write=(c,l,u)=>(ly.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(ly.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let a=i.destroy;i.destroy=()=>{a.call(i),ly.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 xP(e,t,r=!0){t||(t=Or.default.get(U.HTTP_PORT));let n=ff[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",yz),s.on("unhandled",(i,a)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,a)}),n.lastServer=e}else ff[t]=e;e.on("unhandled",yz)}function BP(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=[],Or.default.get(U.HTTP_PORT)!=null&&t.push({port:Or.default.get(U.HTTP_PORT),secure:Or.default.get(U.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Or.default.get(U.HTTP_SECUREPORT)!=null&&t.push({port:Or.default.get(U.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Or.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,bz.resolvePath)(Or.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function FP(e,t){let r=[];for(let{port:n,secure:s}of BP(t))r.push(Pz(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?vP[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,xP(e,n,!1)),uy[n]=dy(vP,n);return r}function Pz(e,t,r,n){if(ny(e,{protocol_name:t?"HTTPS":"HTTP",name:py()}),!cy[e]){let s=r?"operationsApi_network":"http",i=Or.default.get(s+"_keepAliveTimeout"),a=Or.default.get(s+"_timeout"),c=Or.default.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:a,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Or.default.get(U.HTTP_MAXHEADERSIZE)},u=Or.default.get(s+"_mtls"),d=Or.default.get(s+"_mtls_required"),f;if(t){let E=Or.default.get("tls");f=Or.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,Az.getTicketKeys)(),SNICallback:(0,Iz.createTLSSelector)(r?"operations-api":"server",u),ciphers:E.ciphers??E[0]?.ciphers})}let m=o(async(E,g)=>{let b=performance.now(),S=0;try{let L=new Qa(E,g);r&&(L.isOperationsServer=!0),Yh.logging?.id&&(L.requestId=S=Mz());let O=await uy[e](L);if(!O){if(L._nodeResponse.statusCode){Kh(E,L._nodeResponse.statusCode,S,performance.now()-b);return}O=Lz(L)}if(O.headers?.set||(O.headers=new Ds(O.headers)),await OP()?O.headers.set("Server","HarperDB"):O.headers.set("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"),O.status===-1){for(let ee of O.headers||[])g.setHeader(ee[0],ee[1]);return E.baseRequest=L,g.baseResponse=O,cy[e].emit("unhandled",E,g)}let x=O.status||200;g.statusCode=x;let j=performance.now(),H=j-b,F=O.body,Q,W=!1;if(!O.handlesHeaders){let ee=O.headers||new Ds;F?F.length>=0?(typeof F=="string"?ee.set("Content-Length",Buffer.byteLength(F)):ee.set("Content-Length",F.length),Q=!0):F instanceof bs&&(F.size?ee.set("Content-Length",F.size):F.on&&(W=!0,F.on("size",Ie=>{g.headersSent||g.setHeader("Content-Length",Ie)})),F=F.stream()):(ee.set("Content-Length","0"),Q=!0);let Re=`hdb;dur=${H.toFixed(2)}`;if(O.wasCacheMiss&&(Re+=", miss"),bp(ee,"Server-Timing",Re,!0),!g.headersSent)if(W){if(ee)if(ee[Symbol.iterator])for(let[Ie,$e]of ee)g.setHeader(Ie,$e);else for(let Ie in ee)g.setHeader(Ie,ee[Ie])}else g.writeHead(x,ee&&(ee[Symbol.iterator]?Array.from(ee):ee));Q&&g.end(F)}let fe=L.handlerPath,ue=L.method;if(qe(H,"duration",fe,ue,O.wasCacheMiss==null?void 0:O.wasCacheMiss?"cache-miss":"cache-hit"),zr(x<400,"success",fe,ue),zr(1,"response_"+x,fe,ue),Kh(E,x,S,H),!Q)if(F instanceof ReadableStream&&(F=MP.Readable.fromWeb(F)),(F[Symbol.iterator]||F[Symbol.asyncIterator])&&(F=MP.Readable.from(F)),F?.pipe){F.pipe(g),F.destroy&&g.on("close",()=>{F.destroy()});let ee=0;F.on("data",Re=>{ee+=Re.length}),F.on("end",()=>{qe(performance.now()-j,"transfer",fe,ue),qe(ee,"bytes-sent",fe,ue)})}else F?.then?F.then(ee=>{g.end(ee)},R):g.end(F)}catch(L){R(L)}function R(L){let O=L.headers,x=L.statusCode||500;g.writeHead(x,O&&(O[Symbol.iterator]?Array.from(O):O)),g.end(zge(L)),Kh(E,x,S,performance.now()-b),L.statusCode?L.statusCode===500?aa.default.warn(L):aa.default.info(L):aa.default.error(L)}o(R,"onError")},"requestHandler"),p=zg(m,(E,g)=>{g.statusCode=503,g.end("Service unavailable, exceeded request queue limit"),qe(!0,"service-unavailable",e)},Or.default.get(s+"_requestQueueLimit")),h=cy[e]=(t?f?wz.createSecureServer:Nz.createServer:fy.createServer)(l,(E,g)=>{let b=E.method;b==="GET"||b==="OPTIONS"||b==="HEAD"?m(E,g):p(E,g)});i>=0&&(h.keepAliveTimeout=i),c>=0&&(h.headersTimeout=c),t&&(h.ports||(h.ports=[]),h.ports.push(e),l.SNICallback.initialize(h),u&&(h.mtlsConfig=u),h.on("secureConnection",E=>{E._parent.startTime&&qe(performance.now()-E._parent.startTime,"tls-handshake",e),qe(E.isSessionReused(),"tls-reused",e)}),h.isSecure=!0),xP(h,e)}return cy[e]}function dy(e,t){let r=Lz;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let a=r;r=o((...c)=>s(...c,a),"nextCallback")}}return r}function Lz(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Ds}}function Zge(e,t){FP(e,{requestOnly:!0,...t})}function Dz(e,t){for(let{port:r}of BP(t))Sz[t?.runFirst?"unshift":"push"]({listener:e,port:r}),UP[r]=dy(Sz,r)}function eSe(e,t){let r=[];for(let{port:n,secure:s}of BP(t)){ny(n,{protocol_name:s?"WSS":"WS",name:py()});let i=Pz(n,s,t?.isOperationsServer,t?.mtls);$h[n]||($h[n]=new Cz.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),$h[n].on("connection",(a,c)=>{try{let l=new Qa(c);l.isWebSocket=!0;let u=uy[n](l);aa.default.debug("Received WS connection, calling listeners",LP),Tz[n](a,l,u)}catch(l){aa.default.warn("Error in handling WS connection",l)}}),Dz((a,c,l,u)=>a.__harperdbRequestUpgraded?u(a,c,l):$h[n].handleUpgrade(a,c,l,d=>{a.__harperdbRequestUpgraded=!0,u(a,c,l),$h[n].emit("connection",d,a)}),{port:n}),i.on("upgrade",(a,c,l)=>{UP[n]&&UP[n](a,c,l)})),r.push(i),LP[t?.runFirst?"unshift":"push"]({listener:e,port:n}),Tz[n]=dy(LP,n),uy[n]=dy(vP,n)}return r}function yz(e,t){t.writeHead(404),t.end(`Not found
|
|
102
|
+
`),Kh(e,404,0,e.requestId)}function Kh(e,t,r,n){let s=Yh.logging;if(s){DP||(DP=aa.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";DP[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+tSe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function tSe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function Mz(){return Vh||(Vh=new BigInt64Array([1n]),Vh=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",Vh.buffer))),Number(Atomics.add(Vh,0,1n))}var Rz,aa,ly,Or,bz,Az,Iz,wz,Nz,fy,MP,Cz,zge,$h,cy,uy,vP,Yh,jge,gz,Sz,UP,LP,Tz,DP,Vh,kP=oe(()=>{Rz=require("node:net"),aa=w(z()),ly=require("node:worker_threads"),Or=w(le());k();bz=w(Et()),Az=w(Je()),Iz=w(ds()),wz=require("node:http2"),Nz=require("node:https"),fy=require("node:http");Fp();Ap();As();jn();MP=require("node:stream");xr();yP();Wh();sN();Cz=require("ws");Gh();({errorToString:zge}=aa.default);Me.http=FP;Me.request=Zge;Me.ws=eSe;Me.upgrade=Dz;$h={},cy={},uy={},vP=[],Yh={},jge=!0;o(Qge,"handleApplication");o(Jge,"getHttpOptions");o(Oz,"deliverSocket");gz=new Map;o(Xge,"proxyRequest");o(xP,"registerServer");o(BP,"getPorts");o(FP,"httpServer");o(Pz,"getHTTPServer");o(dy,"makeCallbackChain");o(Lz,"unhandled");o(Zge,"onRequest");Object.defineProperty(fy.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){}});Sz=[],UP={};o(Dz,"onUpgrade");LP=[],Tz={};o(eSe,"onWebSocket");o(yz,"defaultNotFound");o(Kh,"logRequest");o(tSe,"headersToString");o(Mz,"getRequestId")});var qP=v(jh=>{"use strict";JE();var{isMainThread:HP,parentPort:vz,threadId:hy,workerData:rSe}=require("node:worker_threads"),{createServer:nSe}=require("node:net"),{unlinkSync:xz,existsSync:sSe}=require("fs"),Bz;jh.whenComponentsLoaded=new Promise(e=>{Bz=e});var Ri=z(),Vs=le(),_s=(k(),D(Y)),{server:iSe}=(xr(),D(nm)),{createServer:oSe}=require("node:tls"),{restartNumber:aSe,getWorkerIndex:pf}=Je(),{createReuseportFd:zh}=(Fp(),D(xG)),{createTLSSelector:cSe}=ds(),{resolvePath:lSe}=Et(),{startupLog:uSe}=Ey(),{SERVERS:hf,setPortServerMap:Uz,portServer:dSe}=(yP(),D(sz)),fSe=(kP(),D(my)),mSe=ri(),Fz=Vs.get(_s.CONFIG_PARAMS.THREADS_DEBUG),pSe=Vs.get(_s.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);iSe.socket=hSe;if(Fz){let e;if(HP)e=Vs.get(_s.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Ri.info("Could not close debugger",t)}});else{let t=Vs.get(_s.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&pf()>=0&&(e=t+pf())}if(e){let t=Vs.get(_s.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=Vs.get(_s.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Ri.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&HP)try{require("inspector").open(9229)}catch(e){aSe<=1&&Ri.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"&&Ri.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:vke,CONFIG_PARAMS:Uke}=_s;Vs.initSync();jh.globals=mSe;jh.listenOnPorts=Hz;jh.startServers=kz;function kz(){let e=Vs.get(_s.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=gy().loadRootComponents(!0).then(()=>{vz?.on("message",n=>{let{port:s,fd:i,data:a}=n;if(i)deliverSocket(i,s,a);else if(n.requestId)fSe.proxyRequest(n);else if(n.type===_s.ITC_EVENT_TYPES.SHUTDOWN){Ri.trace("received shutdown request",hy);for(let c in hf){let l=hf[c],u;if(l.closeIdleConnections){let f=Object.getOwnPropertySymbols(l).find(h=>h.description.includes("connections")),m=0,p=setInterval(()=>{m++;let h=m>=100,E=l[f][h?"all":"idle"]();if(E.length===0){h&&clearInterval(p);return}m===1?Ri.info(`Closing ${E.length} idle connections`):h&&Ri.warn(`Forcefully closing ${E.length} active connections`);for(let g=0,b=E.length;g<b;g++){let S=E[g].socket;S._httpMessage&&!S._httpMessage.finished&&!h||(h?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
|
|
103
103
|
Connection: close\r
|
|
104
104
|
\r
|
|
105
|
-
`))}},25).unref()}l.close?.(()=>{if(Vs.get(_s.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&pf()==0)try{Uz(uSe(Vs.get(_s.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,Ey),l.cantCleanupProperly||Ri.warn("Had to forcefully exit the thread",Ey),process.exit(0)},5e3).unref()})}if(Bz||process.env.DEV_MODE)try{require("inspector").close()}catch(c){Ri.info("Could not close debugger",c)}}}).ref();let r;zh&&!hSe&&(r=kz()),Promise.resolve(r).then(()=>{if(pf()===0)try{dSe(fSe)}catch(n){console.error("Error displaying start-up log",n)}Mz?.postMessage({type:_s.ITC_EVENT_TYPES.CHILD_STARTED})})});return xz(t),t}o(Fz,"startServers");function kz(){let e=[];for(let t in hf){let r=hf[t];if(t.includes?.("/")&&pf()==0){iSe(t)&&Uz(t),e.push(new Promise((a,c)=>{r.listen({path:t},()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),Ri.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=Vs.get(_s.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let a=typeof s=="string"?s.split("-"):s,c=pf();if(c<a[0]||c>a[1])continue}let i;try{let a=t.lastIndexOf(":");a>0?zh?n={fd:zh(+t.slice(a+1).replace(/[\[\]]/g,""),t.slice(0,a))}:n={host:+t.slice(a+1).replace(/[\[\]]/g,""),port:t.slice(0,a)}:zh?n={fd:zh(+t,"::")}:n={port:t}}catch(a){console.error(`Unable to bind to port ${t}`,a);continue}e.push(new Promise((a,c)=>{r.listen(n,()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),Ri.trace("Listening on port "+t,Ey)}).on("error",c)}))}return Promise.all(e)}o(kz,"listenOnPorts");!HP&&!nSe?.noServerStart&&Fz();function ESe(e,t){let r=(Wh(),D(gy)).getComponentName,n;if(t.securePort){vz(t.securePort,{protocol_name:"TLS",name:r()});let s=lSe("server",t.mtls),i=Vs.get("tls");n=aSe({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),hf[t.securePort]=n}return t.port&&(vz(t.port,{protocol_name:"TCP",name:r()}),n=sSe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),hf[t.port]=n),n}o(ESe,"onSocket")});var Wz={};be(Wz,{startHTTPThreads:()=>_Se,startSocketServer:()=>KP,updateWorkerIdleness:()=>Yz});async function _Se(e=2,t){bA().catch(r=>Tf.error?.("Error recording hostname for analytics:",r));try{if(t)$P(0,1,!0);else{let{loadRootComponents:r}=Sy();if(e===0)return(0,co.setMainIsWorker)(!0),await qP().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)$P(r,e);return Promise.all(Kz)}finally{(0,co.threadsHaveStarted)()}}function $P(e,t=1,r){if(GP++,(0,co.startWorker)("server/threads/threadServer.js",{name:Ab.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((a,c)=>{function l(u){u.type===yb.CHILD_STARTED&&(n.removeListener("message",l),a(n))}o(l,"onMessage"),n.on("message",l),n.on("error",c)});Kz.push(s),await s,Ef.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",a=>{if(a.requestId){let c=yy.get(a.requestId);c&&c(a)}}),n.on("exit",i),n.on("shutdown",i);function i(){let a=Ef.indexOf(n);a>-1&&Ef.splice(a,1)}if(o(i,"removeWorker"),_f){let a=_f;_f=[];for(let c of a)Vz[c.localPort](null,c)}}}),r){let n=setInterval(()=>{VP?VP=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,co.shutdownWorkers)(),GP=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function KP(e=0,t){if(typeof e=="string")try{(0,Ry.existsSync)(e)&&(0,Ry.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=gSe:r=SSe(t):r=YP;let n=(0,gf.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=Vz[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),VP=!0,r(i,(a,c)=>{if(!a){if(Hz){let u=i._socket||new gf.Socket({handle:i,writable:!0,readable:!0});Hz.deliverSocket(u,e,c),u.resume()}else GP>0?(_f.length===0&&setTimeout(()=>{_f.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,_f.push(i)):(console.log("start up a dynamic thread to handle request"),$P(0));qe(!1,"socket-routed");return}a.requests++;let l=i.fd;if(l>=0)a.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new gf.Socket({handle:i,writable:!0,readable:!0});RSe(u,a,e)}qe(!0,"socket-routed")})},Tf.info(`HarperDB ${$z.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 YP(e,t){let r,n=0;for(let s of Ef){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Ty)return Ty=i,t(r);n=i}Ty=0,t(r)}function gSe(e,t){let r={};e.getpeername(r);let n=r.address,s=Sf.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);YP(e,a=>{Sf.set(n,{worker:a,lastUsed:i}),t(a)})}function SSe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new gf.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",a=>{n.readStop();let l=a.toString("latin1").match(t)?.[1],u=Sf.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);YP(n,f=>{Sf.set(l,{worker:f,lastUsed:d}),s(f,a)})})}o(r,"findByHeaderAffinity")}function Yz(){Ty=0;for(let e of Ef)e.expectedIdle=e.recentELU.idle+TSe,e.requests=1;Ef.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function RSe(e,t,r){let n=ySe++;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(),yy.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")),yy.delete(n)),s.event=="destroy"&&(e.destroy(),yy.delete(n))})}var co,gf,Tf,Ry,Gz,$z,Ef,_f,Vz,Hz,GP,Kz,VP,Ty,qz,Sf,TSe,yy,ySe,WP=oe(()=>{co=w(Je()),gf=require("net");k();Tf=w(z()),Ry=require("fs");jn();Gz=require("worker_threads"),$z=w(At()),Ef=[],_f=[],Vz=[],GP=0,Kz=[];Gz.isMainThread&&process.on("uncaughtException",e=>{if(e.code!=="ECONNRESET"){if(e.code==="EIO"){Tf.disableStdio();return}console.error("uncaughtException",e)}});o(_Se,"startHTTPThreads");o($P,"startHTTPWorker");o(KP,"startSocketServer");Ty=0;o(YP,"findMostIdleWorker");qz=36e5,Sf=new Map;o(gSe,"findByRemoteAddressAffinity");o(SSe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Sf)r.lastUsed+qz<e&&Sf.delete(t)},qz).unref();TSe=1e3;o(Yz,"updateWorkerIdleness");(0,co.setMonitorListener)(Yz);yy=new Map,ySe=1;o(RSe,"proxySocket")});var _y=v(Ay=>{"use strict";var ye=le();ye.initSync();Af();var rn=(k(),D(Y)),{CONFIG_PARAMS:Ue}=rn,sr=z(),Rf=require("fs-extra"),Ac=require("path"),bSe=YO(),{install:ASe}=WW(),zP=require("chalk"),{packageJson:ISe,PACKAGE_ROOT:wSe}=At(),bf=ce(),NSe=(_P(),D(EP)),jP=Et(),jz=$c(),zz=BT(),CSe=rz(),{compactOnStart:OSe}=(VO(),D($O)),PSe=require("minimist"),LSe=ds(),{startHTTPThreads:DSe}=(WP(),D(Wz)),MSe=XT(),{isMainThread:vSe}=require("worker_threads"),$ke=qi(),Vke=Ja(),Kke=BI(),Yke=zu(),by=(k(),D(Y)),{getHdbPid:USe}=sf(),Ic,yf,Qz=!1,xSe="Upgrade complete. Starting HarperDB.",BSe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",FSe="HarperDB not found, starting install process.",kSe="There was an error during install, check install_log.log for more details. Exiting.",HSe="HarperDB successfully started.";function qSe(){process.on("unhandledRejection",(e,t)=>{sr.error("Unhandled promise rejection: Promise",t,"reason:",e)})}o(qSe,"addUnhandleRejectionListener");function GSe(){if(!Qz){let e=o(()=>{Rf.removeSync(Ac.join(ye.get(rn.CONFIG_PARAMS.ROOTPATH),rn.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}o(GSe,"addExitListeners");async function Jz(e=!1,t=!1){if(console.log(zP.magenta("Starting HarperDB...")),qSe(),sr.suppressLogging?.(()=>{console.log(zP.magenta(""+Rf.readFileSync(Ac.join(wSe,"utility/install/ascii_logo.txt"))))}),sr.debug("Checking to make sure hdb is installed"),NSe.isHdbInstalled(ye,sr)===!1){console.log(FSe);try{await ASe()}catch(a){console.error(kSe,a),sr.error(a),process.exit(1)}}if(!e){let a=jz(Object.keys(rn.CONFIG_PARAM_MAP),!0);!bf.isEmpty(a)&&!bf.isEmptyOrZeroLength(Object.keys(a))&&jP.updateConfigValue(void 0,void 0,a,!0,!0)}let r=yf?.service==="clustering";yf?.service&&!r&&(console.error("Unrecognized service argument"),sr.debug("Unrecognized service argument"),process.exit(1));let n=USe();n&&(r||(sr.debug("Error: HarperDB is already running"),console.error(`Error: HarperDB is already running (pid: ${n})`),process.exit(4))),Ic===void 0&&(Ic=sf()),sr.debug("Checking for service clustering"),r&&(n||(console.error("HarperDB must be running to start clustering."),process.exit()),ye.get(rn.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await zz.generateNatsConfig(),await Ic.startClusteringProcesses(!0),process.exit()),GSe(),t&&await Rf.writeFile(Ac.join(ye.get(by.CONFIG_PARAMS.ROOTPATH),by.HDB_PID_FILE),`${process.pid}`),sr.info("HarperDB PID",process.pid);let s;try{let a=await MSe.getVersionUpdateInfo();a!==void 0&&(s=a[rn.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await CSe.upgrade(a),console.log(xSe))}catch(a){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`,a),sr.error(a)):(console.error(BSe,a),sr.error(a)),process.exit(1)}bSe(),KSe(),await LSe.reviewSelfSignedCert(),bf.autoCastBoolean(ye.get(rn.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&vSe&&await zz.generateNatsConfig(t)}o(Jz,"initialize");async function $Se(e=!1){try{yf=PSe(process.argv),yf.ROOTPATH&&jP.updateConfigObject("settings_path",Ac.join(yf.ROOTPATH,rn.HDB_CONFIG_FILE)),await Jz(e,!0),ye.get(rn.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await OSe();let t=process.env.IS_SCRIPTED_SERVICE&&!yf.service;bf.autoCastBoolean(ye.get(rn.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(await Ic.startClusteringProcesses(),await Ic.startClusteringThreads()),await DSe(process.env.DEV_MODE?1:ye.get(by.CONFIG_PARAMS.THREADS_COUNT)??ye.get(by.CONFIG_PARAMS.THREADS)),t||Xz()}catch(t){console.error(t),sr.error(t),process.exit(1)}}o($Se,"main");function Xz(){sr.suppressLogging(()=>{console.log(zP.magenta(`HarperDB ${ISe.version} successfully started`))}),sr.notify(HSe)}o(Xz,"started");async function VSe(e=!0){Qz=!e;try{Ic===void 0&&(Ic=sf()),sr.debug("initializing processManagement..."),await Jz(),sr.debug("Starting new main process"),await Ic.startService(rn.PROCESS_DESCRIPTORS.HDB,!0),Xz(),e&&process.exit(0)}catch(t){console.error(t),sr.error(t),process.exit(1)}}o(VSe,"launch");function KSe(){let e=Ac.join(ye.get(rn.CONFIG_PARAMS.ROOTPATH),rn.LICENSE_KEY_DIR_NAME,rn.LICENSE_FILE_NAME),t=Ac.join(e,rn.LICENSE_FILE_NAME),r=Ac.join(e,rn.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=jz(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(bf.isEmpty(n)||bf.isEmpty(s))return;Rf.mkdirpSync(e),Rf.writeFileSync(r,n),Rf.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),sr.error(s)}}o(KSe,"writeLicenseFromVars");Ay.launch=VSe;Ay.main=$Se;Ay.startupLog=YSe;function YSe(e){let r=o(p=>p.padEnd(20),"pad"),n=`
|
|
106
|
-
`;ye.get(
|
|
107
|
-
`),ye.get(
|
|
108
|
-
`),n+=`${r("Worker Threads:")}${ye.get(
|
|
109
|
-
`,n+=`${r("Root Path:")}${ye.get(
|
|
110
|
-
`,ye.get(
|
|
105
|
+
`))}},25).unref()}l.close?.(()=>{if(Vs.get(_s.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&pf()==0)try{xz(lSe(Vs.get(_s.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,hy),l.cantCleanupProperly||Ri.warn("Had to forcefully exit the thread",hy),process.exit(0)},5e3).unref()})}if(Fz||process.env.DEV_MODE)try{require("inspector").close()}catch(c){Ri.info("Could not close debugger",c)}}}).ref();let r;zh&&!pSe&&(r=Hz()),Promise.resolve(r).then(()=>{if(pf()===0)try{uSe(dSe)}catch(n){console.error("Error displaying start-up log",n)}vz?.postMessage({type:_s.ITC_EVENT_TYPES.CHILD_STARTED})})});return Bz(t),t}o(kz,"startServers");function Hz(){let e=[];for(let t in hf){let r=hf[t];if(t.includes?.("/")&&pf()==0){sSe(t)&&xz(t),e.push(new Promise((a,c)=>{r.listen({path:t},()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),Ri.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=Vs.get(_s.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let a=typeof s=="string"?s.split("-"):s,c=pf();if(c<a[0]||c>a[1])continue}let i;try{let a=t.lastIndexOf(":");a>0?zh?n={fd:zh(+t.slice(a+1).replace(/[\[\]]/g,""),t.slice(0,a))}:n={host:+t.slice(a+1).replace(/[\[\]]/g,""),port:t.slice(0,a)}:zh?n={fd:zh(+t,"::")}:n={port:t}}catch(a){console.error(`Unable to bind to port ${t}`,a);continue}e.push(new Promise((a,c)=>{r.listen(n,()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),Ri.trace("Listening on port "+t,hy)}).on("error",c)}))}return Promise.all(e)}o(Hz,"listenOnPorts");!HP&&!rSe?.noServerStart&&kz();function hSe(e,t){let r=(Wh(),D(_y)).getComponentName,n;if(t.securePort){Uz(t.securePort,{protocol_name:"TLS",name:r()});let s=cSe("server",t.mtls),i=Vs.get("tls");n=oSe({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),hf[t.securePort]=n}return t.port&&(Uz(t.port,{protocol_name:"TCP",name:r()}),n=nSe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),hf[t.port]=n),n}o(hSe,"onSocket")});var zz={};be(zz,{startHTTPThreads:()=>ESe,startSocketServer:()=>KP,updateWorkerIdleness:()=>Wz});async function ESe(e=2,t){bA().catch(r=>Tf.error?.("Error recording hostname for analytics:",r));try{if(t)$P(0,1,!0);else{let{loadRootComponents:r}=gy();if(e===0)return(0,co.setMainIsWorker)(!0),await qP().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)$P(r,e);return Promise.all(Yz)}finally{(0,co.threadsHaveStarted)()}}function $P(e,t=1,r){if(GP++,(0,co.startWorker)("server/threads/threadServer.js",{name:Ab.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((a,c)=>{function l(u){u.type===yb.CHILD_STARTED&&(n.removeListener("message",l),a(n))}o(l,"onMessage"),n.on("message",l),n.on("error",c)});Yz.push(s),await s,Ef.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",a=>{if(a.requestId){let c=Ty.get(a.requestId);c&&c(a)}}),n.on("exit",i),n.on("shutdown",i);function i(){let a=Ef.indexOf(n);a>-1&&Ef.splice(a,1)}if(o(i,"removeWorker"),_f){let a=_f;_f=[];for(let c of a)Kz[c.localPort](null,c)}}}),r){let n=setInterval(()=>{VP?VP=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,co.shutdownWorkers)(),GP=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function KP(e=0,t){if(typeof e=="string")try{(0,yy.existsSync)(e)&&(0,yy.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=_Se:r=gSe(t):r=YP;let n=(0,gf.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=Kz[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),VP=!0,r(i,(a,c)=>{if(!a){if(qz){let u=i._socket||new gf.Socket({handle:i,writable:!0,readable:!0});qz.deliverSocket(u,e,c),u.resume()}else GP>0?(_f.length===0&&setTimeout(()=>{_f.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,_f.push(i)):(console.log("start up a dynamic thread to handle request"),$P(0));qe(!1,"socket-routed");return}a.requests++;let l=i.fd;if(l>=0)a.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new gf.Socket({handle:i,writable:!0,readable:!0});ySe(u,a,e)}qe(!0,"socket-routed")})},Tf.info(`HarperDB ${Vz.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 YP(e,t){let r,n=0;for(let s of Ef){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Sy)return Sy=i,t(r);n=i}Sy=0,t(r)}function _Se(e,t){let r={};e.getpeername(r);let n=r.address,s=Sf.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);YP(e,a=>{Sf.set(n,{worker:a,lastUsed:i}),t(a)})}function gSe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new gf.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",a=>{n.readStop();let l=a.toString("latin1").match(t)?.[1],u=Sf.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);YP(n,f=>{Sf.set(l,{worker:f,lastUsed:d}),s(f,a)})})}o(r,"findByHeaderAffinity")}function Wz(){Sy=0;for(let e of Ef)e.expectedIdle=e.recentELU.idle+SSe,e.requests=1;Ef.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function ySe(e,t,r){let n=TSe++;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(),Ty.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")),Ty.delete(n)),s.event=="destroy"&&(e.destroy(),Ty.delete(n))})}var co,gf,Tf,yy,$z,Vz,Ef,_f,Kz,qz,GP,Yz,VP,Sy,Gz,Sf,SSe,Ty,TSe,WP=oe(()=>{co=w(Je()),gf=require("net");k();Tf=w(z()),yy=require("fs");jn();$z=require("worker_threads"),Vz=w(bt()),Ef=[],_f=[],Kz=[],GP=0,Yz=[];$z.isMainThread&&process.on("uncaughtException",e=>{if(e.code!=="ECONNRESET"){if(e.code==="EIO"){Tf.disableStdio();return}console.error("uncaughtException",e)}});o(ESe,"startHTTPThreads");o($P,"startHTTPWorker");o(KP,"startSocketServer");Sy=0;o(YP,"findMostIdleWorker");Gz=36e5,Sf=new Map;o(_Se,"findByRemoteAddressAffinity");o(gSe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Sf)r.lastUsed+Gz<e&&Sf.delete(t)},Gz).unref();SSe=1e3;o(Wz,"updateWorkerIdleness");(0,co.setMonitorListener)(Wz);Ty=new Map,TSe=1;o(ySe,"proxySocket")});var Ey=v(by=>{"use strict";var ye=le();ye.initSync();Af();var rn=(k(),D(Y)),{CONFIG_PARAMS:ve}=rn,sr=z(),Rf=require("fs-extra"),Ac=require("path"),RSe=YO(),{install:bSe}=zW(),zP=require("chalk"),{packageJson:ASe,PACKAGE_ROOT:ISe}=bt(),bf=ce(),wSe=(_P(),D(EP)),jP=Et(),Qz=$c(),jz=xT(),NSe=nz(),{compactOnStart:CSe}=(VO(),D($O)),OSe=require("minimist"),PSe=ds(),{startHTTPThreads:LSe}=(WP(),D(zz)),DSe=JT(),{isMainThread:MSe}=require("worker_threads"),Hke=qi(),qke=Ja(),Gke=BI(),$ke=zu(),Ry=(k(),D(Y)),{getHdbPid:vSe}=sf(),Ic,yf,Jz=!1,USe="Upgrade complete. Starting HarperDB.",xSe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",BSe="HarperDB not found, starting install process.",FSe="There was an error during install, check install_log.log for more details. Exiting.",kSe="HarperDB successfully started.";function HSe(){process.on("unhandledRejection",(e,t)=>{sr.error("Unhandled promise rejection: Promise",t,"reason:",e)})}o(HSe,"addUnhandleRejectionListener");function qSe(){if(!Jz){let e=o(()=>{Rf.removeSync(Ac.join(ye.get(rn.CONFIG_PARAMS.ROOTPATH),rn.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}o(qSe,"addExitListeners");async function Xz(e=!1,t=!1){if(console.log(zP.magenta("Starting HarperDB...")),HSe(),sr.suppressLogging?.(()=>{console.log(zP.magenta(""+Rf.readFileSync(Ac.join(ISe,"utility/install/ascii_logo.txt"))))}),sr.debug("Checking to make sure hdb is installed"),wSe.isHdbInstalled(ye,sr)===!1){console.log(BSe);try{await bSe()}catch(a){console.error(FSe,a),sr.error(a),process.exit(1)}}if(!e){let a=Qz(Object.keys(rn.CONFIG_PARAM_MAP),!0);!bf.isEmpty(a)&&!bf.isEmptyOrZeroLength(Object.keys(a))&&jP.updateConfigValue(void 0,void 0,a,!0,!0)}let r=yf?.service==="clustering";yf?.service&&!r&&(console.error("Unrecognized service argument"),sr.debug("Unrecognized service argument"),process.exit(1));let n=vSe();n&&(r||(sr.debug("Error: HarperDB is already running"),console.error(`Error: HarperDB is already running (pid: ${n})`),process.exit(4))),Ic===void 0&&(Ic=sf()),sr.debug("Checking for service clustering"),r&&(n||(console.error("HarperDB must be running to start clustering."),process.exit()),ye.get(rn.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await jz.generateNatsConfig(),await Ic.startClusteringProcesses(!0),process.exit()),qSe(),t&&await Rf.writeFile(Ac.join(ye.get(Ry.CONFIG_PARAMS.ROOTPATH),Ry.HDB_PID_FILE),`${process.pid}`),sr.info("HarperDB PID",process.pid);let s;try{let a=await DSe.getVersionUpdateInfo();a!==void 0&&(s=a[rn.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await NSe.upgrade(a),console.log(USe))}catch(a){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`,a),sr.error(a)):(console.error(xSe,a),sr.error(a)),process.exit(1)}RSe(),VSe(),await PSe.reviewSelfSignedCert(),bf.autoCastBoolean(ye.get(rn.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&MSe&&await jz.generateNatsConfig(t)}o(Xz,"initialize");async function GSe(e=!1){try{yf=OSe(process.argv),yf.ROOTPATH&&jP.updateConfigObject("settings_path",Ac.join(yf.ROOTPATH,rn.HDB_CONFIG_FILE)),await Xz(e,!0),ye.get(rn.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await CSe();let t=process.env.IS_SCRIPTED_SERVICE&&!yf.service;bf.autoCastBoolean(ye.get(rn.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(await Ic.startClusteringProcesses(),await Ic.startClusteringThreads()),await LSe(process.env.DEV_MODE?1:ye.get(Ry.CONFIG_PARAMS.THREADS_COUNT)??ye.get(Ry.CONFIG_PARAMS.THREADS)),t||Zz()}catch(t){console.error(t),sr.error(t),process.exit(1)}}o(GSe,"main");function Zz(){sr.suppressLogging(()=>{console.log(zP.magenta(`HarperDB ${ASe.version} successfully started`))}),sr.notify(kSe)}o(Zz,"started");async function $Se(e=!0){Jz=!e;try{Ic===void 0&&(Ic=sf()),sr.debug("initializing processManagement..."),await Xz(),sr.debug("Starting new main process"),await Ic.startService(rn.PROCESS_DESCRIPTORS.HDB,!0),Zz(),e&&process.exit(0)}catch(t){console.error(t),sr.error(t),process.exit(1)}}o($Se,"launch");function VSe(){let e=Ac.join(ye.get(rn.CONFIG_PARAMS.ROOTPATH),rn.LICENSE_KEY_DIR_NAME,rn.LICENSE_FILE_NAME),t=Ac.join(e,rn.LICENSE_FILE_NAME),r=Ac.join(e,rn.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=Qz(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(bf.isEmpty(n)||bf.isEmpty(s))return;Rf.mkdirpSync(e),Rf.writeFileSync(r,n),Rf.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),sr.error(s)}}o(VSe,"writeLicenseFromVars");by.launch=$Se;by.main=GSe;by.startupLog=KSe;function KSe(e){let r=o(p=>p.padEnd(20),"pad"),n=`
|
|
106
|
+
`;ye.get(ve.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${ye.get(ve.REPLICATION_HOSTNAME)}
|
|
107
|
+
`),ye.get(ve.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${ye.get(ve.REPLICATION_URL)}
|
|
108
|
+
`),n+=`${r("Worker Threads:")}${ye.get(ve.THREADS_COUNT)}
|
|
109
|
+
`,n+=`${r("Root Path:")}${ye.get(ve.ROOTPATH)}
|
|
110
|
+
`,ye.get(ve.THREADS_DEBUG)!==!1&&(n+=`${r("Debugging:")}enabled: true`,n+=ye.get(ve.THREADS_DEBUG_PORT)?`, TCP: ${ye.get(ve.THREADS_DEBUG_PORT)}
|
|
111
111
|
`:`
|
|
112
|
-
`);let s=Ac.join(ye.get(
|
|
113
|
-
`,n+=r("Default:"),n+=ye.get(
|
|
114
|
-
`,n+=r("Operations API:"),n+=ye.get(
|
|
115
|
-
`,n+=r("MQTT:"),n+=ye.get(
|
|
112
|
+
`);let s=Ac.join(ye.get(ve.LOGGING_ROOT),"hdb.log");n+=`${r("Logging:")}level: ${ye.get(ve.LOGGING_LEVEL)}, location: ${s+(ye.get(ve.LOGGING_STDSTREAMS)?", stdout/err":"")}
|
|
113
|
+
`,n+=r("Default:"),n+=ye.get(ve.HTTP_PORT)?`HTTP (and WS): ${ye.get(ve.HTTP_PORT)}, `:"",n+=ye.get(ve.HTTP_SECUREPORT)?`HTTPS (and WS): ${ye.get(ve.HTTP_SECUREPORT)}, `:"",n+=`CORS: ${ye.get(ve.HTTP_CORS)?`enabled for ${ye.get(ve.HTTP_CORSACCESSLIST)}`:"disabled"}
|
|
114
|
+
`,n+=r("Operations API:"),n+=ye.get(ve.OPERATIONSAPI_NETWORK_PORT)?`HTTP: ${ye.get(ve.OPERATIONSAPI_NETWORK_PORT)}, `:"",n+=ye.get(ve.OPERATIONSAPI_NETWORK_SECUREPORT)?`HTTPS: ${ye.get(ve.OPERATIONSAPI_NETWORK_SECUREPORT)}, `:"",n+=`CORS: ${ye.get(ve.OPERATIONSAPI_NETWORK_CORS)?`enabled for ${ye.get(ve.OPERATIONSAPI_NETWORK_CORSACCESSLIST)}`:"disabled"}`,n+=`, unix socket: ${ye.get(ve.OPERATIONSAPI_NETWORK_DOMAINSOCKET)}
|
|
115
|
+
`,n+=r("MQTT:"),n+=ye.get(ve.MQTT_NETWORK_PORT)?`TCP: ${ye.get(ve.MQTT_NETWORK_PORT)}, `:"",n+=ye.get(ve.MQTT_NETWORK_SECUREPORT)?`TLS: ${ye.get(ve.MQTT_NETWORK_SECUREPORT)}`:"",n+=ye.get(ve.MQTT_WEBSOCKET)&&ye.get(ve.HTTP_PORT)?`, WS: ${ye.get(ve.HTTP_PORT)}`:"",n+=ye.get(ve.MQTT_WEBSOCKET)&&ye.get(ve.HTTP_SECUREPORT)?`, WSS: ${ye.get(ve.HTTP_SECUREPORT)}
|
|
116
116
|
`:`
|
|
117
|
-
`;let i=ye.get(
|
|
117
|
+
`;let i=ye.get(ve.REPLICATION_PORT)??ye.get(ve.OPERATIONSAPI_NETWORK_PORT),a=ye.get(ve.REPLICATION_SECUREPORT)??ye.get(ve.OPERATIONSAPI_NETWORK_SECUREPORT),c=r("Replication:");c+=i?`WS: ${i}, `:"",c+=a?`WSS: ${a} `:"",n+=`${c.slice(0,-2)}
|
|
118
118
|
`;let l=[],u=jP.getConfigObj();for(let p in u)u[p].package&&l.push(p);let d={},f=`${r("REST:")}`;for(let[p,h]of e)for(let E of h){let g=E.name;g==="rest"&&(f+=`${E.protocol_name}: ${p}, `),l.includes(g)&&(d[g]?d[g]+=`${E.protocol_name}: ${p}, `:d[g]=`${E.protocol_name}: ${p}, `)}f.length>21&&(f=f.slice(0,-2),n+=`${f}
|
|
119
|
-
`);let m=ye.get(
|
|
119
|
+
`);let m=ye.get(ve.HTTP_PORT)?`HTTP: ${ye.get(ve.HTTP_PORT)}, `:"";m+=ye.get(ve.HTTP_SECUREPORT)?`HTTPS: ${ye.get(ve.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)}
|
|
120
120
|
`:n+=`${r(p+": ")}${m}
|
|
121
|
-
`;console.log(n),ye.get(
|
|
122
|
-
${r.stack}`;throw tL.error(n),ij(new Error)}}}o(fTe,"getRolePermissions");function mTe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[qn.SYSTEM_SCHEMA_NAME]=n[qn.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]=pTe(t[i]);return}r[i]=lj(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(a=>{if(n[i].tables[a]){let c=n[i].tables[a],l=t[i][a],u=hTe(c,l);r[i].describe||dj.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[a]=u}else r[i].tables[a]=rL()})):Object.keys(t[i]).forEach(a=>{r[i].tables[a]=rL()})}),r}o(mTe,"translateRolePermissions");function pTe(e){let t=lj(!0);return Object.keys(e).forEach(r=>{t.tables[r]=rL(!0,!0,!0,!0,!0)}),t}o(pTe,"createStructureUserPermissions");function hTe(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 qn.TIME_STAMP_NAMES.includes(f)&&(m=aj(f,d[Xh])),u[f]=m,u},{}),a=t.primaryKey||t.hash_attribute,c=!!i[a],l=oj(a);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=mj(d),s.attribute_permissions.push(d),c||ETe(d,l)}else if(u!==a){let d;qn.TIME_STAMP_NAMES.includes(u)?d=aj(u):d=oj(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=cj(s),s}else return e.describe=cj(e),e}o(hTe,"getTableAttrPerms");function cj(e){return dj.filter(t=>e[t]).length>0}o(cj,"getSchemaTableDescribePerm");function mj(e){return fj.filter(t=>e[t]).length>0}o(mj,"getAttributeDescribePerm");function ETe(e,t){fj.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}o(ETe,"checkForHashPerms")});var Zh={};be(Zh,{authentication:()=>Aj,bypassAuth:()=>CTe,login:()=>oL,logout:()=>aL,start:()=>OTe});function CTe(){bj=!0}async function Aj(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,a=[];try{if(i){let p=e.isOperationsServer?ATe?bTe:[]:RTe?yTe:[];if(p.includes(i)||p.includes("*")){if(e.method==="OPTIONS"){let h=yn.get(U.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",E=new Ds([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",h],["Access-Control-Allow-Origin",i]]);return Ny&&E.set("Access-Control-Allow-Credentials","true"),{status:200,headers:E}}a.push("Access-Control-Allow-Origin",i),Ny&&a.push("Access-Control-Allow-Credentials","true")}}let l,u;if(Ny){i||(i=r.host);let p=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let E of h)if(E.startsWith(p)){let g=E.indexOf(";");l=E.slice(p.length,g===-1?E.length:g),u=await Ej.get(l);break}e.session=u||(u={})}let d=o((p,h,E)=>{let g=new gTe(p,h,Aa.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=E,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),h===ti.SUCCESS?wy.info?.(g):wy.error?.(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&wy.error?.("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let p=await Gd(e.peerCertificate,e.mtlsConfig);if(!p.valid)return wy.error?.("Certificate verification failed:",p.status,"for",e.peerCertificate.subject.CN),c({status:401,body:Io({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 Me.getUser(h,null,e),d(h,ti.SUCCESS,"mTLS")):TTe("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=tu.get(n),!f){let p=n.indexOf(" "),h=n.slice(0,p),E=n.slice(p+1),g,b;try{switch(h){case"Basic":let S=atob(E),R=S.indexOf(":");g=S.slice(0,R),b=S.slice(R+1),f=g||b?await Me.getUser(g,b,e):null;break;case"Bearer":try{f=await HN(E)}catch(L){if(L.message==="invalid token")try{return await wS(E),c({status:-1})}catch{throw L}}break}}catch(S){return wTe&&(tu.get(E)||(tu.set(E,E),d(g,ti.FAILURE,h))),c({status:401,body:Io({error:S.message},e)})}tu.set(n,f),ITe&&d(f.username,ti.SUCCESS,h)}e.user=f}else u?.user?e.user=await Me.getUser(u.user,null,e):(bj&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,gj.getSuperUser)());Ny&&(e.session.update=function(p){let h=yn.get(U.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,Sj.v4)();let g=yn.get(U.AUTHENTICATION_COOKIE_DOMAINS),b=h?new Date(Date.now()+(0,iL.convertToMS)(h)).toUTCString():NTe,S=r.host&&g?.find(O=>{O.startsWith(".")&&(O=O.slice(1));let x=r.host.indexOf(":");return(x!==-1?r.host.slice(0,x):r.host).endsWith(O)}),L=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${b}; HttpOnly`;S&&(L+=`; Domain=${S}`),E&&(L+="; SameSite=None; Secure"),a?a.push("Set-Cookie",L):m?.headers?.set&&m.headers.set("Set-Cookie",L)}return E&&(a?(i&&a.push("Access-Control-Expose-Headers","X-Hdb-Session"),a.push("X-Hdb-Session","Secure")):m?.headers?.set&&(i&&m.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),m.headers.set("X-Hdb-Session","Secure"))),p.id=l,Ej.put(p,{expiresAt:h?Date.now()+(0,iL.convertToMS)(h):void 0})},e.login=async function(p,h){let E=e.user=await Me.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")&&Cs.loginPath?(m.status=302,m.headers.set("Location",Cs.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=a.length;if(u>0){let d=l.headers;d||(l.headers=d=new Ds);for(let f=0;f<u;){let m=a[f++];d.set(m,a[f++])}}return a=null,l}o(c,"applyResponseHeaders")}function OTe({server:e,port:t,securePort:r}){e.http(Aj,t||r?{port:t,securePort:r}:{port:"all"}),_j||(_j=!0,setInterval(()=>{tu=new Map},yn.get(U.AUTHENTICATION_CACHETTL)).unref(),STe.addListener(()=>{tu=new Map}))}async function oL(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 aL(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var gj,Sj,yn,Tj,yj,iL,_Te,gTe,STe,Rj,TTe,wy,yTe,RTe,bTe,ATe,Ej,Ny,bj,ITe,wTe,NTe,tu,_j,Cy=oe(()=>{gj=w(os());xr();Ua();Id();Ne();Sj=require("uuid"),yn=w(le());k();Tj=w(z()),yj=w(yp());Ap();iL=w(ce());oT();No();({forComponent:_Te,AuthAuditLog:gTe}=Tj.default),{user:STe}=yj.default,Rj=_Te("authentication"),{debug:TTe}=Rj,wy=Rj.withTag("auth-event");yn.initSync();yTe=yn.get(U.HTTP_CORSACCESSLIST),RTe=yn.get(U.HTTP_CORS),bTe=yn.get(U.OPERATIONSAPI_NETWORK_CORSACCESSLIST),ATe=yn.get(U.OPERATIONSAPI_NETWORK_CORS),Ej=Xe({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Ny=yn.get(U.AUTHENTICATION_ENABLESESSIONS)??!0,bj=process.env.AUTHENTICATION_AUTHORIZELOCAL??yn.get(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,ITe=yn.get(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,wTe=yn.get(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,NTe="Tue, 01 Oct 8307 19:33:20 GMT",tu=new Map;Me.onInvalidatedUser(()=>{tu=new Map});o(CTe,"bypassAuth");o(Aj,"authentication");o(OTe,"start");o(oL,"login");o(aL,"logout")});var Lj=v((fHe,Pj)=>{"use strict";var Ce=require("joi"),Ij=require("fs-extra"),wj=require("path"),gs=ot(),Nj=le(),Cj=(k(),D(Y)),Oj=z(),{hdbErrors:PTe}=Ee(),{HDB_ERROR_MSGS:Rn}=PTe,la=/^[a-zA-Z0-9-_]+$/,LTe=/^[a-zA-Z0-9-_]+$/;Pj.exports={getDropCustomFunctionValidator:MTe,setCustomFunctionValidator:vTe,addComponentValidator:FTe,dropCustomFunctionProjectValidator:kTe,packageComponentValidator:HTe,deployComponentValidator:qTe,setComponentFileValidator:UTe,getComponentFileValidator:BTe,dropComponentFileValidator:xTe,addSSHKeyValidator:GTe,updateSSHKeyValidator:$Te,deleteSSHKeyValidator:VTe,setSSHKnownHostsValidator:KTe};function Oy(e,t,r){try{let n=Nj.get(Cj.CONFIG_PARAMS.COMPONENTSROOT),s=wj.join(n,t);return Ij.existsSync(s)?e?t:r.message(Rn.PROJECT_EXISTS):e?r.message(Rn.NO_PROJECT):t}catch(n){return Oj.error(n),r.message(Rn.VALIDATION_ERR)}}o(Oy,"checkProjectExists");function eE(e,t){return e.includes("..")?t.message("Invalid file path"):e}o(eE,"checkFilePath");function DTe(e,t,r,n){try{let s=Nj.get(Cj.CONFIG_PARAMS.COMPONENTSROOT),i=wj.join(s,e,t,r+".js");return Ij.existsSync(i)?r:n.message(Rn.NO_FILE)}catch(s){return Oj.error(s),n.message(Rn.VALIDATION_ERR)}}o(DTe,"checkFileExists");function MTe(e){let t=Ce.object({project:Ce.string().pattern(la).custom(Oy.bind(null,!0)).required().messages({"string.pattern.base":Rn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(la).custom(DTe.bind(null,e.project,e.type)).custom(eE).required().messages({"string.pattern.base":Rn.BAD_FILE_NAME})});return gs.validateBySchema(e,t)}o(MTe,"getDropCustomFunctionValidator");function vTe(e){let t=Ce.object({project:Ce.string().pattern(la).custom(Oy.bind(null,!0)).required().messages({"string.pattern.base":Rn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(eE).required(),function_content:Ce.string().required()});return gs.validateBySchema(e,t)}o(vTe,"setCustomFunctionValidator");function UTe(e){let t=Ce.object({project:Ce.string().pattern(la).required().messages({"string.pattern.base":Rn.BAD_PROJECT_NAME}),file:Ce.string().custom(eE).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return gs.validateBySchema(e,t)}o(UTe,"setComponentFileValidator");function xTe(e){let t=Ce.object({project:Ce.string().pattern(la).required().messages({"string.pattern.base":Rn.BAD_PROJECT_NAME}),file:Ce.string().custom(eE).optional()});return gs.validateBySchema(e,t)}o(xTe,"dropComponentFileValidator");function BTe(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(eE).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return gs.validateBySchema(e,t)}o(BTe,"getComponentFileValidator");function FTe(e){let t=Ce.object({project:Ce.string().pattern(la).custom(Oy.bind(null,!1)).required().messages({"string.pattern.base":Rn.BAD_PROJECT_NAME})});return gs.validateBySchema(e,t)}o(FTe,"addComponentValidator");function kTe(e){let t=Ce.object({project:Ce.string().pattern(la).custom(Oy.bind(null,!0)).required().messages({"string.pattern.base":Rn.BAD_PROJECT_NAME})});return gs.validateBySchema(e,t)}o(kTe,"dropCustomFunctionProjectValidator");function HTe(e){let t=Ce.object({project:Ce.string().pattern(la).required().messages({"string.pattern.base":Rn.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean(),skip_symlinks:Ce.boolean()});return gs.validateBySchema(e,t)}o(HTe,"packageComponentValidator");function qTe(e){let t=Ce.object({project:Ce.string().pattern(la).required().messages({"string.pattern.base":Rn.BAD_PROJECT_NAME}),package:Ce.string().optional(),restart:Ce.alternatives().try(Ce.boolean(),Ce.string().valid("rolling")).optional()});return gs.validateBySchema(e,t)}o(qTe,"deployComponentValidator");function GTe(e){let t=Ce.object({name:Ce.string().pattern(LTe).required().messages({"string.pattern.base":Rn.BAD_SSH_KEY_NAME}),key:Ce.string().required(),host:Ce.string().required(),hostname:Ce.string().required(),known_hosts:Ce.string().optional()});return gs.validateBySchema(e,t)}o(GTe,"addSSHKeyValidator");function $Te(e){let t=Ce.object({name:Ce.string().required(),key:Ce.string().required()});return gs.validateBySchema(e,t)}o($Te,"updateSSHKeyValidator");function VTe(e){let t=Ce.object({name:Ce.string().required()});return gs.validateBySchema(e,t)}o(VTe,"deleteSSHKeyValidator");function KTe(e){let t=Ce.object({known_hosts:Ce.string().required()});return gs.validateBySchema(e,t)}o(KTe,"setSSHKnownHostsValidator")});var Uj={};be(Uj,{packageDirectory:()=>YTe});function YTe(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];Mj.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,Dj.join)("cache","webpack")):void 0,map:o(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,vj.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var Dj,Mj,vj,xj=oe(()=>{Dj=require("path"),Mj=w(require("tar-fs")),vj=require("node:zlib");o(YTe,"packageDirectory")});var Ly={};be(Ly,{Application:()=>Py,assertApplicationConfig:()=>Gj,extractApplication:()=>$j,installApplication:()=>Vj,installApplications:()=>zTe,nonInteractiveSpawn:()=>tE,prepareApplication:()=>Kj});function Gj(e,t){if(typeof t.package!="string")throw new TypeError(`Invalid 'package' property for application ${e}: expected string, got ${typeof t.package}`);if("install"in t){if(typeof t.install!="object"||t.install===null)throw new TypeError(`Invalid 'install' property for application ${e}: expected object, got ${typeof t.install}`);if("command"in t.install&&typeof t.install.command!="string")throw new TypeError(`Invalid 'install.command' property for application ${e}: expected string, got ${typeof t.install.command}`);if("timeout"in t.install&&(typeof t.install.timeout!="number"||t.install.timeout<0))throw new TypeError(`Invalid 'install.timeout' property for application ${e}: expected non-negativenumber, got ${typeof t.install.timeout}`)}}async function $j(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=Fj.Readable.from(e.payload instanceof Buffer?e.payload:Buffer.from(e.payload,"base64"));else{let s=(0,Ai.dirname)(e.dirPath);if(e.packageIdentifier.startsWith("file:")){let i=e.packageIdentifier.slice(5);try{let a=await(0,dt.stat)(i);if(a.isDirectory()){await(0,dt.symlink)(i,e.dirPath,"dir");return}if(!a.isFile())throw new Error(`File path specified in package identifier is not a file or directory: ${i}`);t=i,r=(0,rE.createReadStream)(t)}catch(a){throw a.code==="ENOENT"?new Error(`File path specified in package identifier does not exist: ${i}`):a}}else{let{stdout:i}=await tE(e.name,"npm",["pack",e.packageIdentifier],s);t=(0,Ai.join)(s,i.trim()),r=(0,rE.createReadStream)(t)}}try{await(0,dt.access)(e.dirPath,dt.constants.F_OK),await(0,dt.rm)(e.dirPath,{recursive:!0,force:!0})}catch(s){if(s.code!=="ENOENT")throw s}await(0,dt.mkdir)(e.dirPath,{recursive:!0}),await(0,kj.pipeline)(r,(0,qj.default)(),(0,Hj.extract)(e.dirPath));let n=await(0,dt.readdir)(e.dirPath,{withFileTypes:!0});if(n.length===1&&n[0].isDirectory()){let s=(0,Ai.join)(e.dirPath,n[0].name),i=await(0,dt.mkdtemp)(e.dirPath);await(0,dt.cp)(s,i,{recursive:!0}),await(0,dt.rm)(s,{recursive:!0,force:!0}),await(0,dt.cp)(i,e.dirPath,{recursive:!0}),await(0,dt.rm)(i,{recursive:!0,force:!0})}t&&await(0,dt.rm)(t,{force:!0})}async function Vj(e){try{await(0,dt.access)((0,Ai.join)(e.dirPath,"package.json"),dt.constants.F_OK)}catch(i){if(i.code!=="ENOENT")throw i;e.logger.debug(`Application ${e.name} has no package.json; skipping install`);return}try{await(0,dt.access)((0,Ai.join)(e.dirPath,"node_modules"),dt.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,...a]=e.install.command.split(" "),{stderr:c,code:l}=await tE(e.name,i,a,e.dirPath,e.install?.timeout);if(l===0)return;throw If(e.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using custom install command: ${e.install.command}. Exit code: ${l}`)}let t=JSON.parse(await(0,dt.readFile)((0,Ai.join)(e.dirPath,"package.json"),"utf8")),{packageManager:r}=t.devEngines||{};if(r){let i=r.onFail,a=["ignore","warn","error"];i==="download"?(e.logger.warn('Harper currently does not support `devEngines.packageManager.onFail = "download"`. Defaulting to "error"'),i="error"):i&&!a.includes(i)&&(e.logger.error(`Invalid \`devEngines.packageManager.onFail\` value: "${i}". Expected one of ${a.map(u=>`"${u}"`).join(", ")}. Defaulting to "error"`),i="error"),i=i||"error";let{stderr:c,code:l}=await tE(e.name,r.name,["install"],e.dirPath,e.install?.timeout);if(l===0)return;if(i==="error")throw If(r.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using ${r.name}. Exit code: ${l}`);i==="warn"&&(If(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 tE(e.name,"npm",["install","--force"],e.dirPath);if(s!==0)throw If(e.name,n,"error"),new Error(`Failed to install dependencies for ${e.name} using npm default. Exit code: ${s}`)}function WTe(e){return e.includes(":")?e:e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?`npm:${e}`:(0,Ai.extname)(e)||(0,rE.existsSync)(e)?`file:${e}`:`github:${e}`}function Kj(e){return $j(e).then(()=>Vj(e))}async function zTe(){let e=(0,nE.getConfigObj)(),t=(0,nE.getConfigValue)(U.COMPONENTSROOT);await(0,dt.mkdir)(t,{recursive:!0});let r=[];for(let[s,i]of Object.entries(e)){if(typeof i!="object"||i===null||!("package"in i))continue;Gj(s,i);let a=new Py({name:s,packageIdentifier:i.package,install:i.install});r.push(Kj(a))}let n=await Promise.allSettled(r);wc.default.debug(n),wc.default.info("All root applications loaded")}function tE(e,t,r,n,s=300*1e3){return new Promise((i,a)=>{wc.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Executing \`${t} ${r.join(" ")}\` in ${n}`);let c=(0,Bj.spawn)(t,r,{shell:!0,cwd:n,stdio:["ignore","pipe","pipe"]}),l=setTimeout(()=>{c.kill(),a(new Error(`Command\`${t} ${r.join(" ")}\` timed out after ${s}ms`))},s),u="";c.stdout.on("data",f=>{u+=f.toString(),wc.default.loggerWithTag(`${e}:spawn:${t}:stdout`).debug(f.toString())});let d="";c.stderr.on("data",f=>{d+=f.toString()}),c.on("error",f=>{clearTimeout(l),d&&If(e,t,d),a(f)}),c.on("close",f=>{clearTimeout(l),d&&If(e,t,d),wc.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Process exited with code ${f}`),i({stdout:u,stderr:d,code:f})})})}function If(e,t,r,n="debug"){let s=wc.default.loggerWithTag(`${e}:spawn:${t}:stderr`);for(let i of r.split(`
|
|
123
|
-
`))s[n](i)}var nE,wc,Ai,dt,Bj,rE,Fj,kj,Hj,qj,Py,Dy=oe(()=>{nE=w(Et());k();wc=w(z()),Ai=require("node:path"),dt=require("node:fs/promises"),Bj=require("node:child_process"),rE=require("node:fs"),Fj=require("node:stream"),kj=require("node:stream/promises"),Hj=require("tar-fs"),qj=w(require("gunzip-maybe"));o(Gj,"assertApplicationConfig");o($j,"extractApplication");o(Vj,"installApplication");Py=class{static{o(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&&WTe(n),this.install=s,this.dirPath=(0,Ai.join)((0,nE.getConfigValue)(U.COMPONENTSROOT),t),this.logger=wc.default.loggerWithTag(t)}};o(WTe,"derivePackageIdentifier");o(Kj,"prepareApplication");o(zTe,"installApplications");o(tE,"nonInteractiveSpawn");o(If,"printStderr")});var uL=v(or=>{"use strict";var Be=require("node:path"),{isMainThread:jTe}=require("node:worker_threads"),Pe=require("fs-extra"),cL=require("fast-glob"),lL=require("normalize-path"),Gn=Lj(),ir=z(),Rt=(k(),D(Y)),_r=le(),sE=Et(),QTe=ce(),{PACKAGE_ROOT:JTe}=At(),{handleHDBError:zt,hdbErrors:XTe}=Ee(),ZTe=le(),{HDB_ERROR_MSGS:ru,HTTP_STATUS_CODES:jt}=XTe,Yj=Je(),{replicateOperation:Ii}=(ls(),D(Yo)),{packageDirectory:eye}=(xj(),D(Uj)),tye=Be.join(JTe,"application-template"),rye=_r.get(Rt.CONFIG_PARAMS.ROOTPATH),Nc=Be.join(rye,"ssh"),ua=Be.join(Nc,"known_hosts"),{Resources:nye}=(Ua(),D(HA)),{Application:sye,prepareApplication:iye}=(Dy(),D(Ly));function oye(){ir.trace("getting custom api status");let e={};try{e={port:_r.get(Rt.CONFIG_PARAMS.HTTP_PORT),directory:_r.get(Rt.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw zt(new Error,ru.FUNCTION_STATUS,jt.INTERNAL_SERVER_ERROR,ir.ERR,t)}return e}o(oye,"customFunctionsStatus");function aye(){ir.trace("getting custom api endpoints");let e={},t=_r.get(Rt.CONFIG_PARAMS.COMPONENTSROOT);try{cL.sync(lL(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:cL.sync(lL(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:cL.sync(lL(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw zt(new Error,ru.GET_FUNCTIONS,jt.INTERNAL_SERVER_ERROR,ir.ERR,r)}return e}o(aye,"getCustomFunctions");function cye(e){e.project&&(e.project=Be.parse(e.project).name),e.file&&(e.file=Be.parse(e.file).name);let t=Gn.getDropCustomFunctionValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);ir.trace("getting custom api endpoint file content");let r=_r.get(Rt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,a=Be.join(r,n,s,i+".js");try{return Pe.readFileSync(a,{encoding:"utf8"})}catch(c){throw zt(new Error,ru.GET_FUNCTION,jt.INTERNAL_SERVER_ERROR,ir.ERR,c)}}o(cye,"getCustomFunction");async function lye(e){e.project&&(e.project=Be.parse(e.project).name),e.file&&(e.file=Be.parse(e.file).name);let t=Gn.setCustomFunctionValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);ir.trace("setting custom function file content");let r=_r.get(Rt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:a}=e;try{Pe.outputFileSync(Be.join(r,n,s,i+".js"),a);let c=await Ii(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw zt(new Error,ru.SET_FUNCTION,jt.INTERNAL_SERVER_ERROR,ir.ERR,c)}}o(lye,"setCustomFunction");async function uye(e){e.project&&(e.project=Be.parse(e.project).name),e.file&&(e.file=Be.parse(e.file).name);let t=Gn.getDropCustomFunctionValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);ir.trace("dropping custom function file");let r=_r.get(Rt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Pe.unlinkSync(Be.join(r,n,s,i+".js"));let a=await Ii(e);return a.message=`Successfully deleted custom function: ${i}.js`,a}catch(a){throw zt(new Error,ru.DROP_FUNCTION,jt.INTERNAL_SERVER_ERROR,ir.ERR,a)}}o(uye,"dropCustomFunction");async function dye(e){e.project&&(e.project=Be.parse(e.project).name);let t=Gn.addComponentValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);ir.trace("adding component");let r=_r.get(Rt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Be.join(r,n);Pe.mkdirSync(s,{recursive:!0}),Pe.copySync(tye,s);let i=await Ii(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw zt(new Error,ru.ADD_FUNCTION,jt.INTERNAL_SERVER_ERROR,ir.ERR,s)}}o(dye,"addComponent");async function fye(e){e.project&&(e.project=Be.parse(e.project).name);let t=Gn.dropCustomFunctionProjectValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);ir.trace("dropping custom function project");let r=_r.get(Rt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=_r.get(Rt.CONFIG_PARAMS.APPS);if(!QTe.isEmptyOrZeroLength(s)){let i=!1;for(let[a,c]of s.entries())if(c.name===n){s.splice(a,1),i=!0;break}if(i)return sE.updateConfigValue(Rt.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Be.join(r,n);Pe.rmSync(i,{recursive:!0});let a=await Ii(e);return a.message=`Successfully deleted project: ${n}`,a}catch(i){throw zt(new Error,ru.DROP_FUNCTION_PROJECT,jt.INTERNAL_SERVER_ERROR,ir.ERR,i)}}o(fye,"dropCustomFunctionProject");async function mye(e){e.project&&(e.project=Be.parse(e.project).name);let t=Gn.packageComponentValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);let r=_r.get(Rt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;ir.trace("packaging component",n);let s;try{s=await Pe.realpath(Be.join(r,n))}catch(a){if(a.code!==Rt.NODE_ERROR_CODES.ENOENT)throw a;try{s=await Pe.realpath(Be.join(_r.get(Rt.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===Rt.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await eye(s,e)).toString("base64");return{project:n,payload:i}}o(mye,"packageComponent");async function pye(e){e.project?e.project=Be.parse(e.project).name:e.package&&(e.project=hye(e.package));let t=Gn.deployComponentValidator(e);if(t)throw zt(t,t.message,jt.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 sE.addConfig(e.project,l)}let r=new sye({name:e.project,payload:e.payload,packageIdentifier:e.package,install:{command:e.install_command,timeout:e.install_timeout}});if(await iye(r),jTe)return;let n=new nye;n.isWorker=!0;let s=(Wh(),D(gy)),i;if(s.setErrorReporter(l=>i=l),await s.loadComponent(r.dirPath,n),i)throw i;let a=e.restart==="rolling";e.restart=a?!1:e.restart;let c=await Ii(e);if(e.restart===!0)Yj.restartWorkers("http"),c.message=`Successfully deployed: ${r.name}, restarting HarperDB`;else if(a){let u=await(fL(),D(dL)).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}o(pye,"deployComponent");function hye(e){if(e.startsWith("git+ssh://"))return Be.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return Be.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Pe.readFileSync(Be.join(e,"package.json"),"utf8"));return Be.basename(t)}catch{}return Be.basename(e)}o(hye,"getProjectNameFromPackage");async function Eye(){let e=sE.getConfiguration(),t=o(async(i,a)=>{try{let c=await Pe.readdir(i,{withFileTypes:!0});for(let l of c){let u=l.name;if(u.startsWith(".")||u==="node_modules")continue;let d=Be.join(i,u);if(l.isDirectory()||l.isSymbolicLink()){let f={name:u,entries:[]};a.entries.push(f),await t(d,f)}else{let f=await Pe.stat(d),m={name:Be.basename(u),mtime:f.mtime,size:f.size};a.entries.push(m)}}return a}catch(c){return ir.warn("Error loading package",c),{error:c.toString(),entries:[]}}},"walkDir"),r=await t(_r.get(Rt.CONFIG_PARAMS.COMPONENTSROOT),{name:_r.get(Rt.CONFIG_PARAMS.COMPONENTSROOT).split(Be.sep).slice(-1).pop(),entries:[]});for(let i of r.entries){let a=e[i.name]?.package;a&&(i.package=a)}let{internal:n}=(Sp(),D(Zw)),s;try{s=await n.ComponentStatusRegistry.getAggregatedFromAllThreads(n.componentStatusRegistry)}catch(i){ir.debug(`Failed to get component status from threads: ${i.message}`)}for(let i of r.entries){let a=s?.get(i.name);a?i.status=structuredClone(a):i.status={status:"unknown",message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}}}return r}o(Eye,"getComponents");async function _ye(e){let t=Gn.getComponentFileValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);let n=sE.getConfigObj()[e.project]||e.project==="harperdb"?Be.join(ZTe.get(Rt.CONFIG_PARAMS.ROOTPATH),"node_modules"):_r.get(Rt.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Pe.stat(Be.join(n,e.project,e.file));return{message:await Pe.readFile(Be.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Rt.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Be.join(e.project,e.file)}'`):i}}o(_ye,"getComponentFile");async function gye(e){let t=Gn.setComponentFileValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Be.join(_r.get(Rt.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Pe.ensureFile(n),await Pe.outputFile(n,e.payload,r)):await Pe.ensureDir(n);let s=await Ii(e);return s.message="Successfully set component: "+e.file,s}o(gye,"setComponentFile");async function Sye(e){let t=Gn.dropComponentFileValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?Be.join(r,n):r,i=Be.join(_r.get(Rt.CONFIG_PARAMS.COMPONENTSROOT),s),a=Be.join(_r.get(Rt.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Pe.pathExists(a)&&await Pe.unlink(a),await Pe.pathExists(i)&&await Pe.remove(i);let c=Be.join(_r.get(Rt.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Pe.pathExists(c)){let u=JSON.parse(await Pe.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Pe.writeFile(c,JSON.stringify(u,null,2),"utf8")}sE.deleteConfigFromFile([r]);let l=await Ii(e);return e.restart===!0?(Yj.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}o(Sye,"dropComponent");async function Tye(e){let t=Gn.addSSHKeyValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:a}=e;ir.trace("adding ssh key",r);let c=Be.join(Nc,r+".key"),l=Be.join(Nc,"config");if(await Pe.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Pe.outputFile(c,n),await Pe.chmod(c,"0600");let u=`#${r}
|
|
121
|
+
`;console.log(n),ye.get(ve.LOGGING_STDSTREAMS)&&sr.logsAtLevel("info")&&sr.suppressLogging(()=>{console.log(`Note that log messages are being sent to the console (stdout and stderr) in addition to the log file ${s}. This can be disabled by setting logging.stdStreams to false, and the log file can be directly monitored/tailed.`)})}o(KSe,"startupLog")});var Af=v((jke,ij)=>{"use strict";var YSe=require("minimist"),{isMainThread:ZP,parentPort:Qh,threadId:Yke}=require("worker_threads"),Ft=(k(),D(Y)),bi=z(),WSe=ce(),Ay=xT(),QP=xt(),Wke=mt(),zSe=Et(),Zl=sf(),ej=_h(),{compactOnStart:jSe}=(VO(),D($O)),zke=$c(),{restartWorkers:XP,onMessageByType:QSe,shutdownWorkersNow:JSe}=Je(),{handleHDBError:XSe,hdbErrors:ZSe}=Ee(),{HTTP_STATUS_CODES:eTe}=ZSe,Jh=le(),{sendOperationToNode:tj,getThisNodeName:tTe,monitorNodeCAs:rTe}=(ls(),D(Yo)),nTe=require("node:path"),{unlinkSync:sTe}=require("node:fs");Jh.initSync();var JP=`Restarting HarperDB. This may take up to ${Ft.RESTART_TIMEOUT_MS/1e3} seconds.`,rj="Clustering is not enabled so cannot be restarted",iTe="Invalid service",ca;ij.exports={restart:sj,restartService:eL};ZP&&QSe(Ft.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await eL({service:e.workerType}):sj({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function sj(e){ca=Object.keys(e).length===0;let t=YSe(process.argv);if(t.service){await eL(t);return}if(ca){let r=Zl.getHdbPid();return console.error(r?"Restarting Harper...":"Starting Harper..."),Ey().launch(!0),JP}return ZP?(bi.notify(JP),Jh.get(Ft.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await jSe(),process.env.HARPER_EXIT_ON_RESTART&&(bi.warn("Exiting Harper process to trigger a container restart"),process.exit(0)),setTimeout(async()=>{bi.debug("Shutdown workers"),await JSe(),await Zl.cleanupChildrenProcesses(!1),await sTe(nTe.join(Jh.get(Ft.CONFIG_PARAMS.ROOTPATH),Ft.HDB_PID_FILE),`${process.pid}`),bi.debug("Starting new process..."),Ey().launch(!0)},50)):Qh.postMessage({type:Ft.ITC_EVENT_TYPES.RESTART}),JP}o(sj,"restart");async function eL(e){let{service:t}=e;if(Ft.HDB_PROCESS_SERVICES[t]===void 0)throw XSe(new Error,iTe,eTe.BAD_REQUEST,void 0,void 0,!0);if(Zl.expectedRestartOfChildren(),!ZP){e.replicated&&rTe(),Qh.postMessage({type:Ft.ITC_EVENT_TYPES.RESTART,workerType:t}),Qh.ref(),await new Promise(s=>{Qh.on("message",i=>{i.type==="restart-complete"&&(s(),Qh.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===tTe())continue;let i;try{({job_id:i}=await tj(s,e))}catch(a){n.push({node:s.name,message:a.message});continue}n.push(await new Promise((a,c)=>{let u=2400,d=setInterval(async()=>{if(u--<=0){clearInterval(d);let p=new Error("Timed out waiting for restart job to complete");p.replicated=n,c(p)}let m=(await tj(s,{operation:"get_job",id:i})).results[0];if(m.status==="COMPLETE"&&(clearInterval(d),a({node:s.name,message:m.message})),m.status==="ERROR"){clearInterval(d);let p=new Error(m.message);p.replicated=n,c(p)}},250)}))}return{replicated:n}}return}let r;switch(t){case Ft.HDB_PROCESS_SERVICES.clustering:if(!Jh.get(Ft.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=rj;break}ca&&console.log("Restarting clustering"),bi.notify("Restarting clustering"),await oTe();break;case Ft.HDB_PROCESS_SERVICES.clustering_config:case Ft.HDB_PROCESS_SERVICES["clustering config"]:if(!Jh.get(Ft.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=rj;break}ca&&console.log("Restarting clusteringConfig"),bi.notify("Restarting clustering_config"),await Zl.reloadClustering();break;case"custom_functions":case"custom functions":case Ft.HDB_PROCESS_SERVICES.harperdb:case Ft.HDB_PROCESS_SERVICES.http_workers:case Ft.HDB_PROCESS_SERVICES.http:ca&&console.log("Restarting httpWorkers"),bi.notify("Restarting http_workers"),ca?await Zl.restart(Ft.PROCESS_DESCRIPTORS.HDB):await XP("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(bi.error(r),ca&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}o(eL,"restartService");async function oTe(){if(!zSe.getConfigFromFile(Ft.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await ej.getHDBProcessInfo()).clustering.length===0)bi.trace("Clustering not running, restart will start clustering services"),await Ay.generateNatsConfig(!0),await Zl.startClusteringProcesses(),await Zl.startClusteringThreads(),await nj(),ca&&await QP.closeConnection();else{await Ay.generateNatsConfig(!0),(await ej.getHDBProcessInfo()).clustering.forEach(s=>{bi.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await WSe.asyncSetTimeout(3e3),await nj(),await QP.updateLocalStreams(),ca&&await QP.closeConnection(),bi.trace("Restart clustering restarting ingest and reply service threads");let r=XP(Ft.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),n=XP(Ft.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await r,await n}}o(oTe,"restartClustering");async function nj(){await Ay.removeNatsConfig(Ft.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ay.removeNatsConfig(Ft.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}o(nj,"removeNatsConfig")});var Ej=v((Xke,hj)=>{"use strict";var Jke=require("lodash"),qn=(k(),D(Y)),{handleHDBError:oj,hdbErrors:aTe}=Ee(),{HDB_ERROR_MSGS:cTe,HTTP_STATUS_CODES:lTe}=aTe,tL=z();hj.exports={getRolePermissions:dTe};var eu=Object.create(null),uTe=o(e=>({key:e,perms:{}}),"permsTemplateObj"),uj=o((e=!1)=>({describe:e,tables:{}}),"schemaPermsTemplate"),dj=o((e=!1,t=!1,r=!1,n=!1)=>({[qn.PERMS_CRUD_ENUM.READ]:e,[qn.PERMS_CRUD_ENUM.INSERT]:t,[qn.PERMS_CRUD_ENUM.UPDATE]:r,[qn.PERMS_CRUD_ENUM.DELETE]:n}),"permissionsTemplate"),rL=o((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...dj(t,r,n,s)}),"tablePermsTemplate"),aj=o((e,t=dj())=>({attribute_name:e,describe:pj(t),[Xh]:t[Xh],[nL]:t[nL],[sL]:t[sL]}),"attrPermsTemplate"),cj=o((e,t=!1)=>({attribute_name:e,describe:t,[Xh]:t}),"timestampAttrPermsTemplate"),{READ:Xh,INSERT:nL,UPDATE:sL}=qn.PERMS_CRUD_ENUM,fj=Object.values(qn.PERMS_CRUD_ENUM),mj=[Xh,nL,sL];function dTe(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[qn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(eu[t]&&eu[t].key===n)return eu[t].perms;let s=fTe(e,r);return eu[t]?eu[t].key=n:eu[t]=uTe(n),eu[t].perms=s,s}catch(r){if(!e[qn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[qn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<qn.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 tL.error(n),tL.debug(r),oj(new Error,cTe.OUTDATED_PERMS_TRANSLATION_ERROR,lTe.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
|
|
122
|
+
${r.stack}`;throw tL.error(n),oj(new Error)}}}o(dTe,"getRolePermissions");function fTe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[qn.SYSTEM_SCHEMA_NAME]=n[qn.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]=mTe(t[i]);return}r[i]=uj(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(a=>{if(n[i].tables[a]){let c=n[i].tables[a],l=t[i][a],u=pTe(c,l);r[i].describe||fj.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[a]=u}else r[i].tables[a]=rL()})):Object.keys(t[i]).forEach(a=>{r[i].tables[a]=rL()})}),r}o(fTe,"translateRolePermissions");function mTe(e){let t=uj(!0);return Object.keys(e).forEach(r=>{t.tables[r]=rL(!0,!0,!0,!0,!0)}),t}o(mTe,"createStructureUserPermissions");function pTe(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 qn.TIME_STAMP_NAMES.includes(f)&&(m=cj(f,d[Xh])),u[f]=m,u},{}),a=t.primaryKey||t.hash_attribute,c=!!i[a],l=aj(a);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=pj(d),s.attribute_permissions.push(d),c||hTe(d,l)}else if(u!==a){let d;qn.TIME_STAMP_NAMES.includes(u)?d=cj(u):d=aj(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=lj(s),s}else return e.describe=lj(e),e}o(pTe,"getTableAttrPerms");function lj(e){return fj.filter(t=>e[t]).length>0}o(lj,"getSchemaTableDescribePerm");function pj(e){return mj.filter(t=>e[t]).length>0}o(pj,"getAttributeDescribePerm");function hTe(e,t){mj.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}o(hTe,"checkForHashPerms")});var Zh={};be(Zh,{authentication:()=>Ij,bypassAuth:()=>NTe,login:()=>oL,logout:()=>aL,start:()=>CTe});function NTe(){Aj=!0}async function Ij(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,a=[];try{if(i){let p=e.isOperationsServer?bTe?RTe:[]:yTe?TTe:[];if(p.includes(i)||p.includes("*")){if(e.method==="OPTIONS"){let h=yn.get(U.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",E=new Ds([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",h],["Access-Control-Allow-Origin",i]]);return wy&&E.set("Access-Control-Allow-Credentials","true"),{status:200,headers:E}}a.push("Access-Control-Allow-Origin",i),wy&&a.push("Access-Control-Allow-Credentials","true")}}let l,u;if(wy){i||(i=r.host);let p=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let E of h)if(E.startsWith(p)){let g=E.indexOf(";");l=E.slice(p.length,g===-1?E.length:g),u=await _j.get(l);break}e.session=u||(u={})}let d=o((p,h,E)=>{let g=new _Te(p,h,Aa.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=E,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),h===ti.SUCCESS?Iy.info?.(g):Iy.error?.(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&Iy.error?.("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let p=await Gd(e.peerCertificate,e.mtlsConfig);if(!p.valid)return Iy.error?.("Certificate verification failed:",p.status,"for",e.peerCertificate.subject.CN),c({status:401,body:Io({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 Me.getUser(h,null,e),d(h,ti.SUCCESS,"mTLS")):STe("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=tu.get(n),!f){let p=n.indexOf(" "),h=n.slice(0,p),E=n.slice(p+1),g,b;try{switch(h){case"Basic":let S=atob(E),R=S.indexOf(":");g=S.slice(0,R),b=S.slice(R+1),f=g||b?await Me.getUser(g,b,e):null;break;case"Bearer":try{f=await HN(E)}catch(L){if(L.message==="invalid token")try{return await IS(E),c({status:-1})}catch{throw L}}break}}catch(S){return ITe&&(tu.get(E)||(tu.set(E,E),d(g,ti.FAILURE,h))),c({status:401,body:Io({error:S.message},e)})}tu.set(n,f),ATe&&d(f.username,ti.SUCCESS,h)}e.user=f}else u?.user?e.user=await Me.getUser(u.user,null,e):(Aj&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,Sj.getSuperUser)());wy&&(e.session.update=function(p){let h=yn.get(U.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,Tj.v4)();let g=yn.get(U.AUTHENTICATION_COOKIE_DOMAINS),b=h?new Date(Date.now()+(0,iL.convertToMS)(h)).toUTCString():wTe,S=r.host&&g?.find(O=>{O.startsWith(".")&&(O=O.slice(1));let x=r.host.indexOf(":");return(x!==-1?r.host.slice(0,x):r.host).endsWith(O)}),L=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${b}; HttpOnly`;S&&(L+=`; Domain=${S}`),E&&(L+="; SameSite=None; Secure"),a?a.push("Set-Cookie",L):m?.headers?.set&&m.headers.set("Set-Cookie",L)}return E&&(a?(i&&a.push("Access-Control-Expose-Headers","X-Hdb-Session"),a.push("X-Hdb-Session","Secure")):m?.headers?.set&&(i&&m.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),m.headers.set("X-Hdb-Session","Secure"))),p.id=l,_j.put(p,{expiresAt:h?Date.now()+(0,iL.convertToMS)(h):void 0})},e.login=async function(p,h){let E=e.user=await Me.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")&&Cs.loginPath?(m.status=302,m.headers.set("Location",Cs.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=a.length;if(u>0){let d=l.headers;d||(l.headers=d=new Ds);for(let f=0;f<u;){let m=a[f++];d.set(m,a[f++])}}return a=null,l}o(c,"applyResponseHeaders")}function CTe({server:e,port:t,securePort:r}){e.http(Ij,t||r?{port:t,securePort:r}:{port:"all"}),gj||(gj=!0,setInterval(()=>{tu=new Map},yn.get(U.AUTHENTICATION_CACHETTL)).unref(),gTe.addListener(()=>{tu=new Map}))}async function oL(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 aL(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var Sj,Tj,yn,yj,Rj,iL,ETe,_Te,gTe,bj,STe,Iy,TTe,yTe,RTe,bTe,_j,wy,Aj,ATe,ITe,wTe,tu,gj,Ny=oe(()=>{Sj=w(os());xr();Ua();Id();Ne();Tj=require("uuid"),yn=w(le());k();yj=w(z()),Rj=w(yp());Ap();iL=w(ce());iT();No();({forComponent:ETe,AuthAuditLog:_Te}=yj.default),{user:gTe}=Rj.default,bj=ETe("authentication"),{debug:STe}=bj,Iy=bj.withTag("auth-event");yn.initSync();TTe=yn.get(U.HTTP_CORSACCESSLIST),yTe=yn.get(U.HTTP_CORS),RTe=yn.get(U.OPERATIONSAPI_NETWORK_CORSACCESSLIST),bTe=yn.get(U.OPERATIONSAPI_NETWORK_CORS),_j=Xe({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),wy=yn.get(U.AUTHENTICATION_ENABLESESSIONS)??!0,Aj=process.env.AUTHENTICATION_AUTHORIZELOCAL??yn.get(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,ATe=yn.get(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,ITe=yn.get(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,wTe="Tue, 01 Oct 8307 19:33:20 GMT",tu=new Map;Me.onInvalidatedUser(()=>{tu=new Map});o(NTe,"bypassAuth");o(Ij,"authentication");o(CTe,"start");o(oL,"login");o(aL,"logout")});var Dj=v((lHe,Lj)=>{"use strict";var Ce=require("joi"),wj=require("fs-extra"),Nj=require("path"),gs=ot(),Cj=le(),Oj=(k(),D(Y)),Pj=z(),{hdbErrors:OTe}=Ee(),{HDB_ERROR_MSGS:Rn}=OTe,la=/^[a-zA-Z0-9-_]+$/,PTe=/^[a-zA-Z0-9-_]+$/;Lj.exports={getDropCustomFunctionValidator:DTe,setCustomFunctionValidator:MTe,addComponentValidator:BTe,dropCustomFunctionProjectValidator:FTe,packageComponentValidator:kTe,deployComponentValidator:HTe,setComponentFileValidator:vTe,getComponentFileValidator:xTe,dropComponentFileValidator:UTe,addSSHKeyValidator:qTe,updateSSHKeyValidator:GTe,deleteSSHKeyValidator:$Te,setSSHKnownHostsValidator:VTe};function Cy(e,t,r){try{let n=Cj.get(Oj.CONFIG_PARAMS.COMPONENTSROOT),s=Nj.join(n,t);return wj.existsSync(s)?e?t:r.message(Rn.PROJECT_EXISTS):e?r.message(Rn.NO_PROJECT):t}catch(n){return Pj.error(n),r.message(Rn.VALIDATION_ERR)}}o(Cy,"checkProjectExists");function eE(e,t){return e.includes("..")?t.message("Invalid file path"):e}o(eE,"checkFilePath");function LTe(e,t,r,n){try{let s=Cj.get(Oj.CONFIG_PARAMS.COMPONENTSROOT),i=Nj.join(s,e,t,r+".js");return wj.existsSync(i)?r:n.message(Rn.NO_FILE)}catch(s){return Pj.error(s),n.message(Rn.VALIDATION_ERR)}}o(LTe,"checkFileExists");function DTe(e){let t=Ce.object({project:Ce.string().pattern(la).custom(Cy.bind(null,!0)).required().messages({"string.pattern.base":Rn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(la).custom(LTe.bind(null,e.project,e.type)).custom(eE).required().messages({"string.pattern.base":Rn.BAD_FILE_NAME})});return gs.validateBySchema(e,t)}o(DTe,"getDropCustomFunctionValidator");function MTe(e){let t=Ce.object({project:Ce.string().pattern(la).custom(Cy.bind(null,!0)).required().messages({"string.pattern.base":Rn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(eE).required(),function_content:Ce.string().required()});return gs.validateBySchema(e,t)}o(MTe,"setCustomFunctionValidator");function vTe(e){let t=Ce.object({project:Ce.string().pattern(la).required().messages({"string.pattern.base":Rn.BAD_PROJECT_NAME}),file:Ce.string().custom(eE).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return gs.validateBySchema(e,t)}o(vTe,"setComponentFileValidator");function UTe(e){let t=Ce.object({project:Ce.string().pattern(la).required().messages({"string.pattern.base":Rn.BAD_PROJECT_NAME}),file:Ce.string().custom(eE).optional()});return gs.validateBySchema(e,t)}o(UTe,"dropComponentFileValidator");function xTe(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(eE).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return gs.validateBySchema(e,t)}o(xTe,"getComponentFileValidator");function BTe(e){let t=Ce.object({project:Ce.string().pattern(la).custom(Cy.bind(null,!1)).required().messages({"string.pattern.base":Rn.BAD_PROJECT_NAME})});return gs.validateBySchema(e,t)}o(BTe,"addComponentValidator");function FTe(e){let t=Ce.object({project:Ce.string().pattern(la).custom(Cy.bind(null,!0)).required().messages({"string.pattern.base":Rn.BAD_PROJECT_NAME})});return gs.validateBySchema(e,t)}o(FTe,"dropCustomFunctionProjectValidator");function kTe(e){let t=Ce.object({project:Ce.string().pattern(la).required().messages({"string.pattern.base":Rn.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean(),skip_symlinks:Ce.boolean()});return gs.validateBySchema(e,t)}o(kTe,"packageComponentValidator");function HTe(e){let t=Ce.object({project:Ce.string().pattern(la).required().messages({"string.pattern.base":Rn.BAD_PROJECT_NAME}),package:Ce.string().optional(),restart:Ce.alternatives().try(Ce.boolean(),Ce.string().valid("rolling")).optional()});return gs.validateBySchema(e,t)}o(HTe,"deployComponentValidator");function qTe(e){let t=Ce.object({name:Ce.string().pattern(PTe).required().messages({"string.pattern.base":Rn.BAD_SSH_KEY_NAME}),key:Ce.string().required(),host:Ce.string().required(),hostname:Ce.string().required(),known_hosts:Ce.string().optional()});return gs.validateBySchema(e,t)}o(qTe,"addSSHKeyValidator");function GTe(e){let t=Ce.object({name:Ce.string().required(),key:Ce.string().required()});return gs.validateBySchema(e,t)}o(GTe,"updateSSHKeyValidator");function $Te(e){let t=Ce.object({name:Ce.string().required()});return gs.validateBySchema(e,t)}o($Te,"deleteSSHKeyValidator");function VTe(e){let t=Ce.object({known_hosts:Ce.string().required()});return gs.validateBySchema(e,t)}o(VTe,"setSSHKnownHostsValidator")});var xj={};be(xj,{packageDirectory:()=>KTe});function KTe(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];vj.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,Mj.join)("cache","webpack")):void 0,map:o(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,Uj.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var Mj,vj,Uj,Bj=oe(()=>{Mj=require("path"),vj=w(require("tar-fs")),Uj=require("node:zlib");o(KTe,"packageDirectory")});var Py={};be(Py,{Application:()=>Oy,assertApplicationConfig:()=>$j,extractApplication:()=>Vj,installApplication:()=>Kj,installApplications:()=>WTe,nonInteractiveSpawn:()=>tE,prepareApplication:()=>Yj});function $j(e,t){if(typeof t.package!="string")throw new TypeError(`Invalid 'package' property for application ${e}: expected string, got ${typeof t.package}`);if("install"in t){if(typeof t.install!="object"||t.install===null)throw new TypeError(`Invalid 'install' property for application ${e}: expected object, got ${typeof t.install}`);if("command"in t.install&&typeof t.install.command!="string")throw new TypeError(`Invalid 'install.command' property for application ${e}: expected string, got ${typeof t.install.command}`);if("timeout"in t.install&&(typeof t.install.timeout!="number"||t.install.timeout<0))throw new TypeError(`Invalid 'install.timeout' property for application ${e}: expected non-negativenumber, got ${typeof t.install.timeout}`)}}async function Vj(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=kj.Readable.from(e.payload instanceof Buffer?e.payload:Buffer.from(e.payload,"base64"));else{let s=(0,Ai.dirname)(e.dirPath);if(e.packageIdentifier.startsWith("file:")){let i=e.packageIdentifier.slice(5);try{let a=await(0,dt.stat)(i);if(a.isDirectory()){await(0,dt.symlink)(i,e.dirPath,"dir");return}if(!a.isFile())throw new Error(`File path specified in package identifier is not a file or directory: ${i}`);t=i,r=(0,rE.createReadStream)(t)}catch(a){throw a.code==="ENOENT"?new Error(`File path specified in package identifier does not exist: ${i}`):a}}else{let{stdout:i}=await tE(e.name,"npm",["pack",e.packageIdentifier],s);t=(0,Ai.join)(s,i.trim()),r=(0,rE.createReadStream)(t)}}try{await(0,dt.access)(e.dirPath,dt.constants.F_OK),await(0,dt.rm)(e.dirPath,{recursive:!0,force:!0})}catch(s){if(s.code!=="ENOENT")throw s}await(0,dt.mkdir)(e.dirPath,{recursive:!0}),await(0,Hj.pipeline)(r,(0,Gj.default)(),(0,qj.extract)(e.dirPath));let n=await(0,dt.readdir)(e.dirPath,{withFileTypes:!0});if(n.length===1&&n[0].isDirectory()){let s=(0,Ai.join)(e.dirPath,n[0].name),i=await(0,dt.mkdtemp)(e.dirPath);await(0,dt.cp)(s,i,{recursive:!0}),await(0,dt.rm)(s,{recursive:!0,force:!0}),await(0,dt.cp)(i,e.dirPath,{recursive:!0}),await(0,dt.rm)(i,{recursive:!0,force:!0})}t&&await(0,dt.rm)(t,{force:!0})}async function Kj(e){try{await(0,dt.access)((0,Ai.join)(e.dirPath,"package.json"),dt.constants.F_OK)}catch(i){if(i.code!=="ENOENT")throw i;e.logger.debug(`Application ${e.name} has no package.json; skipping install`);return}try{await(0,dt.access)((0,Ai.join)(e.dirPath,"node_modules"),dt.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,...a]=e.install.command.split(" "),{stderr:c,code:l}=await tE(e.name,i,a,e.dirPath,e.install?.timeout);if(l===0)return;throw If(e.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using custom install command: ${e.install.command}. Exit code: ${l}`)}let t=JSON.parse(await(0,dt.readFile)((0,Ai.join)(e.dirPath,"package.json"),"utf8")),{packageManager:r}=t.devEngines||{};if(r){let i=r.onFail,a=["ignore","warn","error"];i==="download"?(e.logger.warn('Harper currently does not support `devEngines.packageManager.onFail = "download"`. Defaulting to "error"'),i="error"):i&&!a.includes(i)&&(e.logger.error(`Invalid \`devEngines.packageManager.onFail\` value: "${i}". Expected one of ${a.map(u=>`"${u}"`).join(", ")}. Defaulting to "error"`),i="error"),i=i||"error";let{stderr:c,code:l}=await tE(e.name,r.name,["install"],e.dirPath,e.install?.timeout);if(l===0)return;if(i==="error")throw If(r.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using ${r.name}. Exit code: ${l}`);i==="warn"&&(If(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 tE(e.name,"npm",["install","--force"],e.dirPath);if(s!==0)throw If(e.name,n,"error"),new Error(`Failed to install dependencies for ${e.name} using npm default. Exit code: ${s}`)}function YTe(e){return e.includes(":")?e:e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?`npm:${e}`:(0,Ai.extname)(e)||(0,rE.existsSync)(e)?`file:${e}`:`github:${e}`}function Yj(e){return Vj(e).then(()=>Kj(e))}async function WTe(){let e=(0,nE.getConfigObj)(),t=(0,nE.getConfigValue)(U.COMPONENTSROOT);await(0,dt.mkdir)(t,{recursive:!0});let r=[];for(let[s,i]of Object.entries(e)){if(typeof i!="object"||i===null||!("package"in i))continue;$j(s,i);let a=new Oy({name:s,packageIdentifier:i.package,install:i.install});r.push(Yj(a))}let n=await Promise.allSettled(r);wc.default.debug(n),wc.default.info("All root applications loaded")}function tE(e,t,r,n,s=300*1e3){return new Promise((i,a)=>{wc.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Executing \`${t} ${r.join(" ")}\` in ${n}`);let c=(0,Fj.spawn)(t,r,{shell:!0,cwd:n,stdio:["ignore","pipe","pipe"]}),l=setTimeout(()=>{c.kill(),a(new Error(`Command\`${t} ${r.join(" ")}\` timed out after ${s}ms`))},s),u="";c.stdout.on("data",f=>{u+=f.toString(),wc.default.loggerWithTag(`${e}:spawn:${t}:stdout`).debug(f.toString())});let d="";c.stderr.on("data",f=>{d+=f.toString()}),c.on("error",f=>{clearTimeout(l),d&&If(e,t,d),a(f)}),c.on("close",f=>{clearTimeout(l),d&&If(e,t,d),wc.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Process exited with code ${f}`),i({stdout:u,stderr:d,code:f})})})}function If(e,t,r,n="debug"){let s=wc.default.loggerWithTag(`${e}:spawn:${t}:stderr`);for(let i of r.split(`
|
|
123
|
+
`))s[n](i)}var nE,wc,Ai,dt,Fj,rE,kj,Hj,qj,Gj,Oy,Ly=oe(()=>{nE=w(Et());k();wc=w(z()),Ai=require("node:path"),dt=require("node:fs/promises"),Fj=require("node:child_process"),rE=require("node:fs"),kj=require("node:stream"),Hj=require("node:stream/promises"),qj=require("tar-fs"),Gj=w(require("gunzip-maybe"));o($j,"assertApplicationConfig");o(Vj,"extractApplication");o(Kj,"installApplication");Oy=class{static{o(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&&YTe(n),this.install=s,this.dirPath=(0,Ai.join)((0,nE.getConfigValue)(U.COMPONENTSROOT),t),this.logger=wc.default.loggerWithTag(t)}};o(YTe,"derivePackageIdentifier");o(Yj,"prepareApplication");o(WTe,"installApplications");o(tE,"nonInteractiveSpawn");o(If,"printStderr")});var uL=v(or=>{"use strict";var ke=require("node:path"),{isMainThread:zTe}=require("node:worker_threads"),Pe=require("fs-extra"),cL=require("fast-glob"),lL=require("normalize-path"),Gn=Dj(),ir=z(),wt=(k(),D(Y)),_r=le(),Dy=Et(),jTe=ce(),{PACKAGE_ROOT:QTe}=bt(),{handleHDBError:zt,hdbErrors:JTe}=Ee(),pHe=le(),{HDB_ERROR_MSGS:ru,HTTP_STATUS_CODES:jt}=JTe,Wj=Je(),{replicateOperation:Ii}=(ls(),D(Yo)),{packageDirectory:XTe}=(Bj(),D(xj)),ZTe=ke.join(QTe,"application-template"),eye=_r.get(wt.CONFIG_PARAMS.ROOTPATH),Nc=ke.join(eye,"ssh"),ua=ke.join(Nc,"known_hosts"),{Resources:tye}=(Ua(),D(HA)),{Application:rye,prepareApplication:nye}=(Ly(),D(Py));function sye(){ir.trace("getting custom api status");let e={};try{e={port:_r.get(wt.CONFIG_PARAMS.HTTP_PORT),directory:_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw zt(new Error,ru.FUNCTION_STATUS,jt.INTERNAL_SERVER_ERROR,ir.ERR,t)}return e}o(sye,"customFunctionsStatus");function iye(){ir.trace("getting custom api endpoints");let e={},t=_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT);try{cL.sync(lL(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:cL.sync(lL(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:cL.sync(lL(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw zt(new Error,ru.GET_FUNCTIONS,jt.INTERNAL_SERVER_ERROR,ir.ERR,r)}return e}o(iye,"getCustomFunctions");function oye(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=Gn.getDropCustomFunctionValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);ir.trace("getting custom api endpoint file content");let r=_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,a=ke.join(r,n,s,i+".js");try{return Pe.readFileSync(a,{encoding:"utf8"})}catch(c){throw zt(new Error,ru.GET_FUNCTION,jt.INTERNAL_SERVER_ERROR,ir.ERR,c)}}o(oye,"getCustomFunction");async function aye(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=Gn.setCustomFunctionValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);ir.trace("setting custom function file content");let r=_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:a}=e;try{Pe.outputFileSync(ke.join(r,n,s,i+".js"),a);let c=await Ii(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw zt(new Error,ru.SET_FUNCTION,jt.INTERNAL_SERVER_ERROR,ir.ERR,c)}}o(aye,"setCustomFunction");async function cye(e){e.project&&(e.project=ke.parse(e.project).name),e.file&&(e.file=ke.parse(e.file).name);let t=Gn.getDropCustomFunctionValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);ir.trace("dropping custom function file");let r=_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Pe.unlinkSync(ke.join(r,n,s,i+".js"));let a=await Ii(e);return a.message=`Successfully deleted custom function: ${i}.js`,a}catch(a){throw zt(new Error,ru.DROP_FUNCTION,jt.INTERNAL_SERVER_ERROR,ir.ERR,a)}}o(cye,"dropCustomFunction");async function lye(e){e.project&&(e.project=ke.parse(e.project).name);let t=Gn.addComponentValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);ir.trace("adding component");let r=_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=ke.join(r,n);Pe.mkdirSync(s,{recursive:!0}),Pe.copySync(ZTe,s);let i=await Ii(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw zt(new Error,ru.ADD_FUNCTION,jt.INTERNAL_SERVER_ERROR,ir.ERR,s)}}o(lye,"addComponent");async function uye(e){e.project&&(e.project=ke.parse(e.project).name);let t=Gn.dropCustomFunctionProjectValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);ir.trace("dropping custom function project");let r=_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=_r.get(wt.CONFIG_PARAMS.APPS);if(!jTe.isEmptyOrZeroLength(s)){let i=!1;for(let[a,c]of s.entries())if(c.name===n){s.splice(a,1),i=!0;break}if(i)return Dy.updateConfigValue(wt.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=ke.join(r,n);Pe.rmSync(i,{recursive:!0});let a=await Ii(e);return a.message=`Successfully deleted project: ${n}`,a}catch(i){throw zt(new Error,ru.DROP_FUNCTION_PROJECT,jt.INTERNAL_SERVER_ERROR,ir.ERR,i)}}o(uye,"dropCustomFunctionProject");async function dye(e){e.project&&(e.project=ke.parse(e.project).name);let t=Gn.packageComponentValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);let r=_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;ir.trace("packaging component",n);let s;try{s=await Pe.realpath(ke.join(r,n))}catch(a){if(a.code!==wt.NODE_ERROR_CODES.ENOENT)throw a;try{s=await Pe.realpath(ke.join(_r.get(wt.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===wt.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await XTe(s,e)).toString("base64");return{project:n,payload:i}}o(dye,"packageComponent");async function fye(e){e.project?e.project=ke.parse(e.project).name:e.package&&(e.project=mye(e.package));let t=Gn.deployComponentValidator(e);if(t)throw zt(t,t.message,jt.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 Dy.addConfig(e.project,l)}let r=new rye({name:e.project,payload:e.payload,packageIdentifier:e.package,install:{command:e.install_command,timeout:e.install_timeout}});if(await nye(r),zTe)return;let n=new tye;n.isWorker=!0;let s=(Wh(),D(_y)),i;if(s.setErrorReporter(l=>i=l),await s.loadComponent(r.dirPath,n),i)throw i;let a=e.restart==="rolling";e.restart=a?!1:e.restart;let c=await Ii(e);if(e.restart===!0)Wj.restartWorkers("http"),c.message=`Successfully deployed: ${r.name}, restarting HarperDB`;else if(a){let u=await(fL(),D(dL)).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}o(fye,"deployComponent");function mye(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(Pe.readFileSync(ke.join(e,"package.json"),"utf8"));return ke.basename(t)}catch{}return ke.basename(e)}o(mye,"getProjectNameFromPackage");async function pye(){let e=Dy.getConfiguration(),t=o(async(i,a)=>{try{let c=await Pe.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:[]};a.entries.push(f),await t(d,f)}else{let f=await Pe.stat(d),m={name:ke.basename(u),mtime:f.mtime,size:f.size};a.entries.push(m)}}return a}catch(c){return ir.warn("Error loading package",c),{error:c.toString(),entries:[]}}},"walkDir"),r=await t(_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT),{name:_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT).split(ke.sep).slice(-1).pop(),entries:[]});for(let i of r.entries){let a=e[i.name]?.package;a&&(i.package=a)}let{internal:n}=(Sp(),D(Zw)),s;try{s=await n.ComponentStatusRegistry.getAggregatedFromAllThreads(n.componentStatusRegistry)}catch(i){ir.debug(`Failed to get component status from threads: ${i.message}`)}for(let i of r.entries){let a=s?.get(i.name);a?i.status=structuredClone(a):i.status={status:"unknown",message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}}}return r}o(pye,"getComponents");async function hye(e){let t=Gn.getComponentFileValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);let r=_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let s=await Pe.stat(ke.join(r,e.project,e.file));return{message:await Pe.readFile(ke.join(r,e.project,e.file),n),size:s.size,birthtime:s.birthtime,mtime:s.mtime}}catch(s){throw s.code===wt.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${ke.join(e.project,e.file)}'`):s}}o(hye,"getComponentFile");async function Eye(e){let t=Gn.setComponentFileValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=ke.join(_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Pe.ensureFile(n),await Pe.outputFile(n,e.payload,r)):await Pe.ensureDir(n);let s=await Ii(e);return s.message="Successfully set component: "+e.file,s}o(Eye,"setComponentFile");async function _ye(e){let t=Gn.dropComponentFileValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?ke.join(r,n):r,i=ke.join(_r.get(wt.CONFIG_PARAMS.COMPONENTSROOT),s),a=ke.join(_r.get(wt.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Pe.pathExists(a)&&await Pe.unlink(a),await Pe.pathExists(i)&&await Pe.remove(i);let c=ke.join(_r.get(wt.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Pe.pathExists(c)){let u=JSON.parse(await Pe.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Pe.writeFile(c,JSON.stringify(u,null,2),"utf8")}Dy.deleteConfigFromFile([r]);let l=await Ii(e);return e.restart===!0?(Wj.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}o(_ye,"dropComponent");async function gye(e){let t=Gn.addSSHKeyValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:a}=e;ir.trace("adding ssh key",r);let c=ke.join(Nc,r+".key"),l=ke.join(Nc,"config");if(await Pe.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Pe.outputFile(c,n),await Pe.chmod(c,"0600");let u=`#${r}
|
|
124
124
|
Host ${s}
|
|
125
125
|
HostName ${i}
|
|
126
126
|
User git
|
|
127
127
|
IdentityFile ${c}
|
|
128
128
|
IdentitiesOnly yes`;await Pe.pathExists(l)?await Pe.appendFile(l,`
|
|
129
129
|
`+u):await Pe.outputFile(l,u);let d="";if(await Pe.pathExists(ua)||(await Pe.writeFile(ua,""),await Pe.chmod(ua,"0600")),i=="github.com"&&!(await Pe.readFile(ua,"utf8")).includes("github.com"))try{let E=(await(await fetch("https://api.github.com/meta")).json()).ssh_keys;for(let g of E)Pe.appendFile(ua,"github.com "+g+`
|
|
130
|
-
`)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}a&&await Pe.appendFile(ua,a);let f=await Ii(e);return f.message=`Added ssh key: ${r}${d}`,f}o(
|
|
130
|
+
`)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}a&&await Pe.appendFile(ua,a);let f=await Ii(e);return f.message=`Added ssh key: ${r}${d}`,f}o(gye,"addSSHKey");async function Sye(e){let t=Gn.updateSSHKeyValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);let{name:r,key:n}=e;ir.trace("updating ssh key",r);let s=ke.join(Nc,r+".key");if(!await Pe.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Pe.outputFile(s,n);let i=await Ii(e);return i.message=`Updated ssh key: ${r}`,i}o(Sye,"updateSSHKey");async function Tye(e){let t=Gn.deleteSSHKeyValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);let{name:r}=e;ir.trace("deleting ssh key",r);let n=ke.join(Nc,r+".key"),s=ke.join(Nc,"config");if(!await Pe.pathExists(n))throw new Error("Key does not exist");let i=await Pe.readFile(s,"utf8"),a=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(a,""),await Pe.outputFile(s,i),Pe.removeSync(n);let c=await Ii(e);return c.message=`Deleted ssh key: ${r}`,c}o(Tye,"deleteSSHKey");async function yye(e){let t=[];return await Pe.pathExists(Nc)&&(await Pe.readdir(Nc)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}o(yye,"listSSHKeys");async function Rye(e){let t=Gn.setSSHKnownHostsValidator(e);if(t)throw zt(t,t.message,jt.BAD_REQUEST);let{known_hosts:r}=e;await Pe.outputFile(ua,r);let n=await Ii(e);return n.message="Known hosts successfully set",n}o(Rye,"setSSHKnownHosts");async function bye(e){return await Pe.pathExists(ua)?{known_hosts:await Pe.readFile(ua,"utf8")}:{known_hosts:null}}o(bye,"getSSHKnownHosts");or.customFunctionsStatus=sye;or.getCustomFunctions=iye;or.getCustomFunction=oye;or.setCustomFunction=aye;or.dropCustomFunction=cye;or.addComponent=lye;or.dropCustomFunctionProject=uye;or.packageComponent=dye;or.deployComponent=fye;or.getComponents=pye;or.getComponentFile=hye;or.setComponentFile=Eye;or.dropComponent=_ye;or.addSSHKey=gye;or.updateSSHKey=Sye;or.deleteSSHKey=Tye;or.listSSHKeys=yye;or.setSSHKnownHosts=Rye;or.getSSHKnownHosts=bye});var mL=v((_He,jj)=>{"use strict";var Ks=require("joi"),zj=ot();jj.exports={readTransactionLogValidator:Aye,deleteTransactionLogsBeforeValidator:Iye};function Aye(e){let t=Ks.object({schema:Ks.string(),database:Ks.string(),table:Ks.string().required(),from:Ks.date().timestamp(),to:Ks.date().timestamp(),limit:Ks.number().min(1)});return zj.validateBySchema(e,t)}o(Aye,"readTransactionLogValidator");function Iye(e){let t=Ks.object({schema:Ks.string(),database:Ks.string(),table:Ks.string().required(),timestamp:Ks.date().timestamp().required()});return zj.validateBySchema(e,t)}o(Iye,"deleteTransactionLogsBeforeValidator")});var Uy=v((SHe,t4)=>{"use strict";var pL=(k(),D(Y)),sE=xt(),Qj=ce(),Jj=le(),Xj=Ki(),Zj=z(),{handleHDBError:My,hdbErrors:wye}=Ee(),{HTTP_STATUS_CODES:vy}=wye,{readTransactionLogValidator:Nye,deleteTransactionLogsBeforeValidator:Cye}=mL(),e4=rs(),Oye="Logs successfully deleted from transaction log.",Pye="All logs successfully deleted from transaction log.";t4.exports={readTransactionLog:Lye,deleteTransactionLogsBefore:Mye};async function Lye(e){let t=Nye(e);if(t)throw My(t,t.message,vy.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=Qj.checkSchemaTableExist(e.database,e.table);if(r)throw My(new Error,r,vy.NOT_FOUND,void 0,void 0,!0);return Jj.get(pL.CONFIG_PARAMS.CLUSTERING_ENABLED)?await Dye(e):(Zj.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)),e4.readAuditLog(e))}o(Lye,"readTransactionLog");async function*Dye(e){let t=Xj.createNatsTableStreamName(e.database,e.table),r=await sE.viewStreamIterator(t,parseInt(e.from),e.limit);for await(let n of r){let s=Math.floor(n?.nats_timestamp/1e6);if(e.to&&s>e.to)break;let i={operation:n?.entry?.operation,user:n?.entry?.__origin?.user,timestamp:s,records:n?.entry?.records,attributes:n?.entry?.attributes};n?.entry?.operation===pL.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}o(Dye,"readTransactionLogNats");async function Mye(e){let t=Cye(e);if(t)throw My(t,t.message,vy.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!Jj.get(pL.CONFIG_PARAMS.CLUSTERING_ENABLED))return Zj.info("Delete transaction logs called for Plexus"),e4.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=Qj.checkSchemaTableExist(r,n);if(i)throw My(new Error,i,vy.NOT_FOUND,void 0,void 0,!0);let a=Xj.createNatsTableStreamName(r,n),{jsm:c}=await sE.getNATSReferences(),l=await sE.getStreamInfo(a),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=Oye,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=Pye):f=(await sE.viewStream(a,parseInt(s),1))[0].nats_sequence,await sE.purgeTableStream(r,n,{seq:f}),d}o(Mye,"deleteTransactionLogsBefore")});var hL=v((yHe,n4)=>{"use strict";var xy=require("joi"),vye=require("path"),{handleHDBError:Uye,hdbErrors:xye}=Ee(),{HTTP_STATUS_CODES:Bye}=xye,Fye=ot(),r4=z();n4.exports={installModules:Gye};var{CONFIG_PARAMS:kye}=(k(),D(Y)),{getConfigValue:Hye}=Et(),{nonInteractiveSpawn:qye}=(Ly(),D(Py));async function Gye(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";r4.warn(t,e.projects);let r=Vye(e);if(r)throw Uye(r,r.message,Bye.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=Hye(kye.COMPONENTSROOT),a={},c=["install","--force","--omit=dev","--json"];s&&c.push("--dry-run");for(let l of n){a[l]={npm_output:null,npm_error:null};let u=vye.join(i,l);try{let{stdout:d,stderr:f}=qye(l,"npm",c,u);d=d?d.replace(`
|
|
131
131
|
`,""):null,f=f?f.replace(`
|
|
132
|
-
`,""):null;try{a[l].npm_output=JSON.parse(d)}catch{a[l].npm_output=d}try{a[l].npm_error=JSON.parse(f)}catch{a[l].npm_error=f}}catch(d){d.stderr?a[l].npm_error
|
|
133
|
-
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}o(Kye,"parseNPMStdErr");function Yye(e){let t=xy.object({projects:xy.array().min(1).items(xy.string()).required(),dry_run:xy.boolean().default(!1)});return Hye.validateBySchema(e,t)}o(Yye,"modulesValidator")});var SL={};be(SL,{describeMetric:()=>c4,describeMetricOp:()=>gL,get:()=>o4,getOp:()=>EL,listMetrics:()=>a4,listMetricsOp:()=>_L});async function zye(e){return(await G_().get(e)).hostname}function n4(e,t){return e.length===0||e.includes(t)}function EL(e){return oE.trace?.("get_analytics request:",e),o4(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function i4(e){return"conditions"in e?{...e,conditions:e.conditions.map(i4)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function o4(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(i4));let a=t??[];n4(a,"id")||a.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i};return a.length>0&&(c.select=a),oE.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],n4(a,"node")&&(oE.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await zye(d)),oE.trace?.("get_analytics result:",JSON.stringify(u)),u})}function _L(e){return a4(e.metric_types)}async function a4(e=["builtin"]){let t=[],r=Object.values(Lo);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,a=await databases.system.hdb_analytics.search(s);for await(let c of a)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function gL(e){return c4(e.metric)}async function c4(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let a in s)n.push({name:a,type:typeof s[a]});let i={attributes:n};return oE.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var s4,Wye,oE,TL=oe(()=>{s4=w(z());EA();_A();({forComponent:Wye}=s4.default),oE=Wye("analytics").conditional;o(zye,"lookupHostname");o(n4,"isSelected");o(EL,"getOp");o(i4,"conformCondition");o(o4,"get");o(_L,"listMetricsOp");o(a4,"listMetrics");o(gL,"describeMetricOp");o(c4,"describeMetric")});var By,Fy,aE,ky=oe(()=>{By={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},Fy=Object.keys(By),aE="primary"});function u4(e){return l4.validateBySchema(e,Xye)}var cE,l4,jye,Qye,Jye,Xye,d4=oe(()=>{cE=w(require("joi")),l4=w(ot());ky();jye=Fy,Qye=Object.entries(By).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),Jye=o(()=>{let e=cE.default.string().min(1).max(512);return Object.entries(By).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:cE.default.string().valid(...r.allowedValues).messages({"any.only":Qye[t]})}))}),e.required()},"createStatusValidationSchema"),Xye=cE.default.object({id:cE.default.string().valid(...jye).required(),status:Jye()});o(u4,"validateStatus")});function f4(){yL||(yL=da.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),RL=new Uint8Array(yL))}function m4(){f4(),RL[0]=1}function p4(){return f4(),RL[0]===1}var yL,RL,bL=oe(()=>{lE();o(f4,"ensureInitialized");o(m4,"requestRestart");o(p4,"restartNeeded")});var CL={};be(CL,{DEFAULT_STATUS_ID:()=>aE,STATUS_IDS:()=>Fy,Status:()=>da,clear:()=>IL,get:()=>wL,set:()=>NL});function dE(){return AL||(AL=Xe({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),AL}function IL({id:e}){return uE.debug?.("clearStatus",e),dE().delete(e)}async function eRe(){uE.debug?.("getAllStatus");let e=dE().get({}),t=await gp.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=p4();return{systemStatus:e,componentStatus:r,restartRequired:n}}function wL({id:e}){return e?(uE.debug?.("getStatus",e),dE().get(e)):(uE.debug?.("getStatus","all"),eRe())}function NL({status:e,id:t=aE}){let r=u4({status:e,id:t});if(r)throw(0,Hy.handleHDBError)(r,r.message,Zye.BAD_REQUEST);return uE.debug?.("setStatus",t,e),dE().put(t,{status:e})}var Hy,h4,Zye,AL,da,uE,lE=oe(()=>{Ne();Hy=w(Ee()),h4=w(zn());d4();ky();Sp();bL();ky();({HTTP_STATUS_CODES:Zye}=Hy.hdbErrors);o(dE,"getStatusTable");da={get primaryStore(){return dE().primaryStore}},uE=(0,h4.loggerWithTag)("status");o(IL,"clearStatus");o(eRe,"getAllStatus");o(wL,"getStatus");o(NL,"setStatus")});var DL={};be(DL,{getFingerprint:()=>PL,getRegistrationInfo:()=>OL,setLicense:()=>LL});function OL(){return{version:E4.packageJson.version,deprecated:!0}}function PL(){return{message:"this-is-deprecated",deprecated:!0}}function LL(){return{deprecated:!0}}var E4,ML=oe(()=>{E4=w(At());o(OL,"getRegistrationInfo");o(PL,"getFingerprint");o(LL,"setLicense")});var g4=v(($He,_4)=>{"use strict";var vL=class{static{o(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};_4.exports=vL});var T4=v((KHe,S4)=>{"use strict";var UL=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};S4.exports=UL});var BL=v((WHe,R4)=>{"use strict";var y4=g4(),tRe=T4(),{HDB_ERROR_MSGS:rRe}=Kr(),xL=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=rRe.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 y4(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new tRe(c,s[c]);i.push(l)});let a=`${r}_${n}`;if(this.unauthorized_access[a])this.unauthorized_access[a].required_attribute_permissions=i;else{let c=new y4(r,n,[],i);this.unauthorized_access[a]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};R4.exports=xL});var Vy=v((jHe,k4)=>{"use strict";var FL=un(),qy=fn(),Ys=mh(),pE=Ja(),kL=Ga(),nRe=qC(),sRe=M1(),hE=os(),Gy=xp(),Pr=z(),iRe=YC(),oRe=wT(),aRe=SO(),cRe=CT(),lRe=RO(),uRe=bO(),dRe=wO(),fRe=CO(),HL=MT(),fa=ce(),mRe=dY(),I4=Af(),bn=(k(),D(Y)),w4=hj(),pRe=_h(),N4=(Id(),D($p)),C4=(Cy(),D(Zh)),O4=Et(),gr=uL(),hRe=require("alasql"),P4=Uy(),ERe=hL(),wf=ds(),L4=(Qd(),D(jd)),qL=(TL(),D(SL)),GL=(lE(),D(CL)),D4=(Gh(),D(cy)),$L=(ML(),D(DL)),M4=BL(),{handleHDBError:$n,hdbErrors:v4}=Ee(),{HDB_ERROR_MSGS:nn,HTTP_STATUS_CODES:fE}=v4,Z=new Map,U4="delete",Cc="insert",Ws="read",nu="update",mE="describe",b4=pE.describeSchema.name,A4=pE.describeTable.name,x4={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},_Re={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},gRe="catchup",SRe="handleGetJob",TRe="handleGetJobsByStartDate",$y={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},yRe=[Ys.createTable.name,Ys.createAttribute.name,Ys.dropTable.name,Ys.dropAttribute.name],B4={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},se=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};Z.set(FL.insert.name,new se(!1,[Cc]));Z.set(FL.update.name,new se(!1,[nu]));Z.set(FL.upsert.name,new se(!1,[Cc,nu]));Z.set(qy.searchByConditions.name,new se(!1,[Ws]));Z.set(qy.searchByHash.name,new se(!1,[Ws]));Z.set(qy.searchByValue.name,new se(!1,[Ws]));Z.set(qy.search.name,new se(!1,[Ws]));Z.set(Ys.createSchema.name,new se(!0,[]));Z.set(Ys.createTable.name,new se(!0,[]));Z.set(Ys.createAttribute.name,new se(!1,[Cc]));Z.set(Ys.dropSchema.name,new se(!0,[]));Z.set(Ys.dropTable.name,new se(!0,[]));Z.set(Ys.dropAttribute.name,new se(!0,[]));Z.set(pE.describeSchema.name,new se(!1,[Ws]));Z.set(pE.describeTable.name,new se(!1,[Ws]));Z.set(kL.deleteRecord.name,new se(!1,[U4]));Z.set(hE.addUser.name,new se(!0,[]));Z.set(hE.alterUser.name,new se(!0,[]));Z.set(hE.dropUser.name,new se(!0,[]));Z.set(hE.listUsersExternal.name,new se(!0,[]));Z.set(Gy.listRoles.name,new se(!0,[]));Z.set(Gy.addRole.name,new se(!0,[]));Z.set(Gy.alterRole.name,new se(!0,[]));Z.set(Gy.dropRole.name,new se(!0,[]));Z.set(iRe.name,new se(!0,[]));Z.set(oRe.name,new se(!0,[]));Z.set(aRe.name,new se(!0,[]));Z.set(cRe.name,new se(!0,[]));Z.set(lRe.name,new se(!0,[]));Z.set(uRe.name,new se(!0,[]));Z.set(HL.setRoutes.name,new se(!0,[]));Z.set(HL.getRoutes.name,new se(!0,[]));Z.set(HL.deleteRoutes.name,new se(!0,[]));Z.set(O4.setConfiguration.name,new se(!0,[]));Z.set(dRe.clusterStatus.name,new se(!0,[]));Z.set(fRe.name,new se(!0,[]));Z.set(kL.deleteFilesBefore.name,new se(!0,[]));Z.set(kL.deleteAuditLogsBefore.name,new se(!0,[]));Z.set(I4.restart.name,new se(!0,[]));Z.set(I4.restartService.name,new se(!0,[]));Z.set(nRe.name,new se(!0,[]));Z.set(sRe.name,new se(!0,[Ws]));Z.set(pRe.systemInformation.name,new se(!0,[]));Z.set(O4.getConfiguration.name,new se(!0,[]));Z.set(P4.readTransactionLog.name,new se(!0,[]));Z.set(P4.deleteTransactionLogsBefore.name,new se(!0,[]));Z.set(ERe.installModules.name,new se(!0,[]));Z.set(wf.createCsr.name,new se(!0,[]));Z.set(wf.signCertificate.name,new se(!0,[]));Z.set(wf.listCertificates.name,new se(!0,[]));Z.set(wf.addCertificate.name,new se(!0,[]));Z.set(wf.removeCertificate.name,new se(!0,[]));Z.set(wf.getKey.name,new se(!0,[]));Z.set(L4.addNodeBack.name,new se(!0,[]));Z.set(L4.removeNodeBack.name,new se(!0,[]));Z.set(qL.getOp.name,new se(!1,[Ws]));Z.set(qL.listMetricsOp.name,new se(!1,[Ws]));Z.set(qL.describeMetricOp.name,new se(!1,[Ws]));Z.set(GL.clear.name,new se(!0,[]));Z.set(GL.get.name,new se(!0,[]));Z.set(GL.set.name,new se(!0,[]));Z.set(D4.installUsageLicenseOp.name,new se(!0,[]));Z.set(D4.getUsageLicensesOp.name,new se(!0,[]));Z.set($L.getFingerprint.name,new se(!0,[]));Z.set($L.setLicense.name,new se(!0,[]));Z.set(N4.createTokens.name,new se(!1,[]));Z.set(N4.refreshOperationToken.name,new se(!1,[]));Z.set(C4.login.name,new se(!1,[]));Z.set(C4.logout.name,new se(!1,[]));Z.set(gr.customFunctionsStatus.name,new se(!0,[]));Z.set(gr.getCustomFunctions.name,new se(!0,[]));Z.set(gr.getComponents.name,new se(!0,[]));Z.set(gr.getComponentFile.name,new se(!0,[]));Z.set(gr.setComponentFile.name,new se(!0,[]));Z.set(gr.dropComponent.name,new se(!0,[]));Z.set(gr.getCustomFunction.name,new se(!0,[]));Z.set(gr.setCustomFunction.name,new se(!0,[]));Z.set(gr.dropCustomFunction.name,new se(!0,[]));Z.set(gr.addComponent.name,new se(!0,[]));Z.set(gr.dropCustomFunctionProject.name,new se(!0,[]));Z.set(gr.packageComponent.name,new se(!0,[]));Z.set(gr.deployComponent.name,new se(!0,[]));Z.set(gr.addSSHKey.name,new se(!0,[]));Z.set(gr.updateSSHKey.name,new se(!0,[]));Z.set(gr.deleteSSHKey.name,new se(!0,[]));Z.set(gr.listSSHKeys.name,new se(!0,[]));Z.set(gr.setSSHKnownHosts.name,new se(!0,[]));Z.set(gr.getSSHKnownHosts.name,new se(!0,[]));Z.set($L.getRegistrationInfo.name,new se(!1,[]));Z.set(hE.userInfo.name,new se(!1,[]));Z.set(pE.describeAll.name,new se(!1,[]));Z.set(SRe,new se(!1,[]));Z.set(TRe,new se(!0,[]));Z.set(gRe,new se(!0,[]));Z.set($y.CSV_DATA_LOAD,new se(!1,[Cc,nu]));Z.set($y.CSV_URL_LOAD,new se(!1,[Cc,nu]));Z.set($y.CSV_FILE_LOAD,new se(!1,[Cc,nu]));Z.set($y.IMPORT_FROM_S3,new se(!1,[Cc,nu]));Z.set(B4.EXPORT_TO_S3,new se(!0,[]));Z.set(B4.EXPORT_LOCAL,new se(!0,[]));Z.set(bn.VALID_SQL_OPS_ENUM.DELETE,new se(!1,[U4]));Z.set(bn.VALID_SQL_OPS_ENUM.SELECT,new se(!1,[Ws]));Z.set(bn.VALID_SQL_OPS_ENUM.INSERT,new se(!1,[Cc]));Z.set(bn.VALID_SQL_OPS_ENUM.UPDATE,new se(!1,[nu]));k4.exports={verifyPerms:bRe,verifyPermsAst:RRe,verifyBulkLoadAttributePerms:IRe};function RRe(e,t,r){if(fa.isEmptyOrZeroLength(e))throw Pr.info("verify_perms_ast has an empty user parameter"),$n(new Error);if(fa.isEmptyOrZeroLength(t))throw Pr.info("verify_perms_ast has an empty user parameter"),$n(new Error);if(fa.isEmptyOrZeroLength(r))throw Pr.info("verify_perms_ast has a null operation parameter"),$n(new Error);try{let n=new M4,s=new mRe(e),i=s.getSchemas(),a=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Pr.info("No schemas defined in verifyPermsAst(), will not continue."),$n(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&x4[r])throw $n(new Error,nn.DROP_SYSTEM,fE.FORBIDDEN);if(c&&!l)return null;let u=w4.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof hRe.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let f=0;f<i.length;f++){let m=s.getTablesBySchemaName(i[f]);m&&a.set(i[f],m)}let d=F4(t,r,a,n);return d||(a.forEach((f,m)=>{for(let p=0;p<f.length;p++){let h=s.getAttributesBySchemaTableName(m,f[p]),E=KL(t.role.permission,m,f[p]);VL(h,E,r,f[p],m,n)}}),n.getPermsResponse())}catch(n){throw $n(n)}}o(RRe,"verifyPermsAst");function bRe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Pr.info("null required parameter in verifyPerms"),$n(new Error,nn.DEFAULT_INVALID_REQUEST,fE.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,a=new Map;s&&i&&a.set(s,[i]);let c=new M4;if(fa.isEmptyOrZeroLength(e.hdb_user?.role)||fa.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Pr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(nn.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=a.has(bn.SYSTEM_SCHEMA_NAME)||s===bn.SYSTEM_SCHEMA_NAME;if(l&&d&&_Re[e.operation]&&(i===bn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===bn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===bn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&x4[r])throw $n(new Error,nn.DROP_SYSTEM,fE.FORBIDDEN);if(l&&!d||u===!0&&(r===Ys.createSchema.name||r===Ys.dropSchema.name))return null;if(yRe.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=w4.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===b4||r===A4)&&!f.super_user){if(s===bn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(nn.SCHEMA_PERM_ERROR(s));if(r===b4&&(!f[s]||!f[s][mE]))return c.handleInvalidItem(nn.SCHEMA_NOT_FOUND(s));if(r===A4&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][mE]))return c.handleInvalidItem(nn.TABLE_NOT_FOUND(s,i))}let m=F4(e.hdb_user,r,a,c,n);if(m)return m;if(Z.get(r)&&Z.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&bn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],g=f[s].tables[i];g[bn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(S=>S[bn.PERMS_CRUD_ENUM.READ]).forEach(S=>{E.push(S.attribute_name)}):E=global.hdb_schema[s][i].attributes.map(b=>b.attribute),e.get_attributes=E)}let p=ARe(e),h=KL(e.hdb_user?.role?.permission,s,i);return VL(p,h,r,i,s,c,n),c.getPermsResponse()}o(bRe,"verifyPerms");function F4(e,t,r,n,s){if(fa.arrayHasEmptyValues([e,t,r]))throw Pr.info("hasPermissions has an invalid parameter"),$n(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||Z.get(t).requires_su))return null;if(!Z.get(t))throw Pr.info(`operation ${t} not found.`),$n(new Error,nn.OP_NOT_FOUND(t),fE.BAD_REQUEST);if(Z.get(t)&&Z.get(t).requires_su)return Pr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(nn.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!a[l]||a[l][mE]===!1){n.addInvalidItem(nn.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(nn.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=a[l].tables[d];if(!f||f[mE]===!1)n.addInvalidItem(nn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=Z.get(t).perms;!fa.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],g=f[E];(g==null||g===!1)&&(Pr.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=nn.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Pr.error(p),Pr.error(m),$n(v4.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}o(F4,"hasPermissions");function VL(e,t,r,n,s,i,a){if(!e||!t)throw Pr.info("no attributes specified in checkAttributePerms."),$n(new Error);let c=Z.get(r).perms;if(!c||c==="")throw Pr.info(`no permissions found for ${r} in checkAttributePerms().`),$n(new Error);if(fa.isEmptyOrZeroLength(t))return Pr.info("No role permissions set (this is OK)."),null;a&&c.includes(a)&&(c=[a]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[mE]===!1){i.addInvalidItem(nn.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(bn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Ws)throw $n(new Error,nn.SYSTEM_TIMESTAMP_PERMS_ERR,fE.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(nn.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}o(VL,"checkAttributePerms");function ARe(e){let t=new Set;try{if(e.action)return t;if(e.operation===bn.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){Pr.info(r)}return t}o(ARe,"getRecordAttributes");function KL(e,t,r){let n=new Map;if(fa.isEmpty(e))return Pr.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{Pr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}o(KL,"getAttributePermissions");function IRe(e,t,r,n,s,i,a){let c=new Set(i),l=KL(e,n,s);VL(c,l,t,s,n,a,r)}o(IRe,"verifyBulkLoadAttributePerms")});var Yy=v((JHe,V4)=>{"use strict";V4.exports={evaluateSQL:FRe,processAST:$4,convertSQLToAST:G4,checkASTPermissions:q4};var wRe=un(),H4=require("util"),NRe=H4.callbackify(wRe.insert),CRe=fn().search,ORe=o$().update,PRe=H4.callbackify(ORe),LRe=c$().convertDelete,Oc=require("alasql"),DRe=Vy(),Ky=z(),MRe=Ug(),vRe=ce(),EE=(k(),D(Y)),{hdbErrors:URe,handleHDBError:YL}=Ee(),{HTTP_STATUS_CODES:WL}=URe;MRe(Oc);var xRe=403,BRe="There was a problem performing this insert. Please check the logs and try again.",zL=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function FRe(e,t){let r=e.parsed_sql_object;if(!r){r=G4(e.sql);let n,s=r.ast.statements[0];if(s instanceof Oc.yy.Insert?n=s.into.databaseid:s instanceof Oc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Oc.yy.Update||s instanceof Oc.yy.Delete?n=s.table.databaseid:Ky.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Oc.yy.Select)&&vRe.isEmptyOrZeroLength(n))return t("No schema specified",null)}$4(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(FRe,"evaluateSQL");function q4(e,t){let r;try{r=DRe.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(q4,"checkASTPermissions");function G4(e){let t=new zL;if(!e)throw YL(new Error,"The 'sql' parameter is missing from the request body",WL.BAD_REQUEST);try{let r=e.trim(),n=Oc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
134
|
-
`);throw n[1]?YL(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,WL.BAD_REQUEST):YL(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",WL.BAD_REQUEST)}return t}o(G4,"convertSQLToAST");function $4(e,t,r){try{let n=kRe;if(!e.bypass_auth&&!t.permissions_checked){let i=q4(e,t);if(i&&i.length>0)return r(xRe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case EE.VALID_SQL_OPS_ENUM.SELECT:n=CRe,s=t.ast.statements[0];break;case EE.VALID_SQL_OPS_ENUM.INSERT:n=HRe;break;case EE.VALID_SQL_OPS_ENUM.UPDATE:n=PRe;break;case EE.VALID_SQL_OPS_ENUM.DELETE:n=LRe;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,a)=>{if(i){r(i);return}r(null,a)})}catch(n){return r(n)}}o($4,"processAST");function kRe(e,t){Ky.info(e),t("unknown sql statement")}o(kRe,"nullFunction");function HRe({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(a=>a.columnid);try{s.records=qRe(i,e.values)}catch(a){return r(a)}NRe(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){Ky.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(HRe,"convertInsert");function qRe(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]]=Oc.compile(`SELECT ${s.toString()} AS [${EE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Ky.error(r),new Error(BRe)}}o(qRe,"createDataObjects")});var eD=v((tqe,z4)=>{var Qy=require("clone"),Jy=ot(),GRe=ce(),zy=(k(),D(Y)),ZHe=z(),jL=require("fs"),JL=require("joi"),{string:jy}=JL.types(),{hdbErrors:$Re,handleHDBError:Wy}=Ee(),{HDB_ERROR_MSGS:eqe,HTTP_STATUS_CODES:QL}=$Re,{commonValidators:Nf}=ki(),K4=" is required",VRe=["insert","update","upsert"],XL={database:{presence:!1,format:Nf.schema_format,length:Nf.schema_length},schema:{presence:!1,format:Nf.schema_format,length:Nf.schema_length},table:{presence:!0,format:Nf.schema_format,length:Nf.schema_length},action:{inclusion:{within:VRe,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},KRe={schema:jy.required(),table:jy.required(),action:jy.valid("insert","update","upsert")},{AWS_ACCESS_KEY:YRe,AWS_SECRET:WRe,AWS_BUCKET:zRe,AWS_FILE_KEY:jRe,REGION:QRe}=zy.S3_BUCKET_AUTH_KEYS,JRe={s3:{presence:!0},[`s3.${YRe}`]:{presence:!0,type:"String"},[`s3.${WRe}`]:{presence:!0,type:"String"},[`s3.${zRe}`]:{presence:!0,type:"String"},[`s3.${jRe}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${QRe}`]:{presence:!0,type:"String"}},Y4=Qy(XL);Y4.data.presence={message:K4};var W4=Qy(XL);W4.file_path.presence={message:K4};var XRe=Object.assign(Qy(XL),JRe),ZL=Qy(KRe);ZL.csv_url=jy.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();ZL.passthrough_headers=JL.object();function ZRe(e){let t=Jy.validateObject(e,Y4);return Xy(e,t)}o(ZRe,"dataObject");function ebe(e){let t=Jy.validateBySchema(e,JL.object(ZL));return Xy(e,t)}o(ebe,"urlObject");function tbe(e){let t=Jy.validateObject(e,W4);return Xy(e,t)}o(tbe,"fileObject");function rbe(e){let t=Jy.validateObject(e,XRe);return Xy(e,t)}o(rbe,"s3FileObject");function Xy(e,t){if(!t){let r=GRe.checkGlobalSchemaTable(e.schema,e.table);if(r)return Wy(new Error,r,QL.BAD_REQUEST);if(e.operation===zy.OPERATIONS_ENUM.CSV_FILE_LOAD)try{jL.accessSync(e.file_path,jL.constants.R_OK|jL.constants.F_OK)}catch(n){return n.code===zy.NODE_ERROR_CODES.ENOENT?Wy(n,`No such file or directory ${n.path}`,QL.BAD_REQUEST):n.code===zy.NODE_ERROR_CODES.EACCES?Wy(n,`Permission denied ${n.path}`,QL.BAD_REQUEST):Wy(n)}}return t}o(Xy,"postValidateChecks");z4.exports={dataObject:ZRe,urlObject:ebe,fileObject:tbe,s3FileObject:rbe}});var tD=v((nqe,j4)=>{"use strict";var _E=z(),Zy=(k(),D(Y));async function nbe(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===Zy.OPERATIONS_ENUM.INSERT||t.operation===Zy.OPERATIONS_ENUM.UPDATE||t.operation===Zy.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===Zy.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(_E.info(i.message),i):i.http_resp_msg?(_E.error(`Error calling operation: ${e.name}`),_E.error(i.http_resp_msg),i):(_E.error(`Error calling operation: ${e.name}`),_E.error(i),i)}}o(nbe,"callOperationFunctionAsAwait");j4.exports={callOperationFunctionAsAwait:nbe}});var rD=v((iqe,J4)=>{"use strict";var{S3:sbe,GetObjectCommand:ibe}=require("@aws-sdk/client-s3");J4.exports={getFileStreamFromS3:obe,getS3AuthObj:Q4};async function obe(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await Q4(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new ibe(r))).Body}o(obe,"getFileStreamFromS3");function Q4(e,t,r){return new sbe({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(Q4,"getS3AuthObj")});var Z4=v((aqe,X4)=>{"use strict";var nD=class{static{o(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,a,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=a,this.role_perms=c}},sD=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};X4.exports={BulkLoadFileObject:nD,BulkLoadDataObject:sD}});var oD=v((lqe,eQ)=>{"use strict";var iD=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};eQ.exports=iD});var fD=v((hqe,_Q)=>{"use strict";var eR=un(),rR=eD(),abe=require("needle"),wi=(k(),D(Y)),dqe=mt(),Cf=ce(),{handleHDBError:Qt,hdbErrors:lQ}=Ee(),{HTTP_STATUS_CODES:sn,HDB_ERROR_MSGS:Lr,CHECK_LOGS_WRAPPER:iu}=lQ,Of=z(),aD=require("papaparse");Cf.promisifyPapaParse();var Ni=require("fs-extra"),cbe=require("path"),{chain:tQ}=require("stream-chain"),rQ=require("stream-json/streamers/StreamArray"),nQ=require("stream-json/utils/Batch"),sQ=require("stream-chain/utils/comp"),{finished:iQ}=require("stream"),lbe=le(),uQ=tD(),ube=rD(),{BulkLoadFileObject:lD,BulkLoadDataObject:dbe}=Z4(),uD=BL(),{verifyBulkLoadAttributePerms:dQ}=Vy(),fqe=oD(),mqe=xt(),pqe=Ki(),{databases:fbe}=(Ne(),D(ft)),{coerceType:mbe}=(ng(),D(vq)),oQ="No records parsed from csv file.",su=`${lbe.get("HDB_ROOT")}/tmp`,{schemaRegex:pbe}=ki(),aQ=1024*1024*2,cQ=5e3,hbe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};_Q.exports={csvDataLoad:Ebe,csvURLLoad:_be,csvFileLoad:gbe,importFromS3:Sbe};async function Ebe(e,t){let r=rR.dataObject(e);if(r)throw Qt(r,r.message,sn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=pQ(e.schema,e.table),i=aD.parse(e.data,{header:!0,skipEmptyLines:!0,transform:cD.bind(null,s),dynamicTyping:!1}),a=new uD;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&dQ(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,a);let c=a.getPermsResponse();if(c)throw Qt(new Error,c,sn.BAD_REQUEST,void 0,void 0,!0);let l=new dbe(e.action,e.schema,e.table,i.data);return n=await uQ.callOperationFunctionAsAwait(hQ,l,null),n.message===oQ?oQ:EQ(n.records,n.number_written)}catch(s){throw ou(s)}}o(Ebe,"csvDataLoad");async function _be(e){let t=rR.urlObject(e);if(t)throw Qt(t,t.message,sn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${su}/${r}`;try{await Tbe(e,r)}catch(s){throw Of.error(Lr.DOWNLOAD_FILE_ERR(r)+" - "+s),Qt(s,iu(Lr.DOWNLOAD_FILE_ERR(r)))}try{let s=new lD(this.job_operation_function.name,e.action,e.schema,e.table,n,wi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await dD(s);return await tR(n),i}catch(s){throw await tR(n),ou(s)}}o(_be,"csvURLLoad");async function gbe(e){let t=rR.fileObject(e);if(t)throw Qt(t,t.message,sn.BAD_REQUEST,void 0,void 0,!0);let r=new lD(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,wi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await dD(r)}catch(n){throw ou(n)}}o(gbe,"csvFileLoad");async function Sbe(e){let t=rR.s3FileObject(e);if(t)throw Qt(t,t.message,sn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=cbe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${su}/${s}`;let i=new lD(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await ybe(s,e);let a=await dD(i);return await tR(r),a}catch(n){throw await tR(r),ou(n)}}o(Sbe,"importFromS3");async function Tbe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await abe("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 Qt(n,s,n.statusCode,wi.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}bbe(r,e.csv_url),await Rbe(t,r.raw)}o(Tbe,"downloadCSVFile");async function ybe(e,t){try{let r=`${su}/${e}`;await Ni.mkdirp(su),await Ni.writeFile(`${su}/${e}`,"",{flag:"a+"});let n=await Ni.createWriteStream(r),s=await ube.getFileStreamFromS3(t);await new Promise((i,a)=>{s.on("error",function(c){a(c)}),s.pipe(n).on("error",function(c){a(c)}).on("close",function(){Of.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Of.error(Lr.S3_DOWNLOAD_ERR+" - "+r),Qt(r,iu(Lr.S3_DOWNLOAD_ERR))}}o(ybe,"downloadFileFromS3");async function Rbe(e,t){try{await Ni.mkdirp(su),await Ni.writeFile(`${su}/${e}`,t)}catch(r){throw Of.error(Lr.WRITE_TEMP_FILE_ERR),Qt(r,iu(Lr.DEFAULT_BULK_LOAD_ERR))}}o(Rbe,"writeFileToTempFolder");async function tR(e){if(e)try{await Ni.access(e),await Ni.unlink(e)}catch{Of.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(tR,"deleteTempFile");function bbe(e,t){if(e.statusCode!==lQ.HTTP_STATUS_CODES.OK)throw Qt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,sn.BAD_REQUEST);if(!hbe[e.headers["content-type"]])throw Qt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,sn.BAD_REQUEST);if(!e.raw)throw Qt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,sn.BAD_REQUEST)}o(bbe,"validateURLResponse");async function dD(e){try{let t;switch(e.file_type){case wi.VALID_S3_FILE_TYPES.CSV:t=await Abe(e);break;case wi.VALID_S3_FILE_TYPES.JSON:t=await Ibe(e);break;default:throw Qt(new Error,Lr.DEFAULT_BULK_LOAD_ERR,sn.BAD_REQUEST,wi.LOG_LEVELS.ERROR,Lr.INVALID_FILE_EXT_ERR(e))}return EQ(t.records,t.number_written)}catch(t){throw ou(t)}}o(dD,"fileLoad");async function fQ(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let a={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await eR.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&dQ(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Qt(c);r(l)}}o(fQ,"validateChunk");async function mQ(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Cf.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!Cf.isEmpty(c)&&!Cf.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),a=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await uQ.callOperationFunctionAsAwait(hQ,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Qt(c,iu(Lr.INSERT_CSV_ERR),sn.INTERNAL_SERVER_ERROR,wi.LOG_LEVELS.ERROR,Lr.INSERT_CSV_ERR+" - "+c);r(l)}}o(mQ,"insertChunk");async function Abe(e){let t={records:0,number_written:0},r=pQ(e.schema,e.table);try{let n=new uD,s=Ni.createReadStream(e.file_path,{highWaterMark:aQ});s.setEncoding("utf8"),await aD.parsePromise(s,fQ.bind(null,e,n),cD.bind(null,r));let i=n.getPermsResponse();if(i)throw Qt(new Error,i,sn.BAD_REQUEST);return s=Ni.createReadStream(e.file_path,{highWaterMark:aQ}),s.setEncoding("utf8"),await aD.parsePromise(s,mQ.bind(null,e,t),cD.bind(null,r)),s.destroy(),t}catch(n){throw Qt(n,iu(Lr.PAPA_PARSE_ERR),sn.INTERNAL_SERVER_ERROR,wi.LOG_LEVELS.ERROR,Lr.PAPA_PARSE_ERR+n)}}o(Abe,"callPapaParse");function pQ(e,t){let r=fbe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>mbe(i,s));return n}o(pQ,"createTransformMap");function cD(e,t,r){let n=e.get(r);return n?n(t):Cf.autoCast(t)}o(cD,"typeFunction");async function Ibe(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new uD,s=tQ([Ni.createReadStream(e.file_path,{encoding:"utf-8"}),rQ.withParser(),c=>c.value,new nQ({batchSize:cQ}),sQ(async c=>{await fQ(e,n,r,c)})]);await new Promise((c,l)=>{iQ(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Qt(new Error,i,sn.BAD_REQUEST);let a=tQ([Ni.createReadStream(e.file_path,{encoding:"utf-8"}),rQ.withParser(),c=>c.value,new nQ({batchSize:cQ}),sQ(async c=>{await mQ(e,t,r,c)})]);return await new Promise((c,l)=>{iQ(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw Qt(n,iu(Lr.INSERT_JSON_ERR),sn.INTERNAL_SERVER_ERROR,wi.LOG_LEVELS.ERROR,Lr.INSERT_JSON_ERR+n)}}o(Ibe,"insertJson");async function hQ(e){let t={};try{e.data&&e.data.length>0&&wbe(e.data[0])?t=await Nbe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Of.info(t.message))}catch(r){throw ou(r)}return t}o(hQ,"callBulkFileLoad");function wbe(e){let t=Object.keys(e);for(let r of t)if(!pbe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(wbe,"validateColumnNames");async function Nbe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=eR.insert;break;case"update":i=eR.update;break;case"upsert":i=eR.upsert;break;default:throw Qt(new Error,Lr.INVALID_ACTION_PARAM_ERR(n),sn.BAD_REQUEST,wi.LOG_LEVELS.ERROR,Lr.INVALID_ACTION_PARAM_ERR(n))}try{let a=await i(s),c;switch(n){case"insert":c=a.inserted_hashes;break;case"update":c=a.update_hashes;break;case"upsert":c=a.upserted_hashes;break;default:break}if(Array.isArray(a.skipped_hashes)&&a.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)a.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=Cf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw ou(a)}}o(Nbe,"bulkFileLoad");function EQ(e,t){return`successfully loaded ${t} of ${e} records`}o(EQ,"buildResponseMsg");function ou(e){return Qt(e,iu(Lr.DEFAULT_BULK_LOAD_ERR),sn.INTERNAL_SERVER_ERROR,wi.LOG_LEVELS.ERROR,Lr.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(ou,"buildTopLevelErrMsg")});var hD=v((_qe,IQ)=>{"use strict";var pD=fn(),Cbe=rD(),{AsyncParser:Obe}=require("json2csv"),nR=require("stream"),Ss=ce(),mD=require("fs-extra"),Pbe=require("path"),zs=z(),{promisify:TQ}=require("util"),gE=ce(),{handleHDBError:Sr,hdbErrors:Lbe}=Ee(),{HDB_ERROR_MSGS:Vn,HTTP_STATUS_CODES:Tr}=Lbe,{streamAsJSON:Dbe}=($b(),D(NU)),{Upload:Mbe}=require("@aws-sdk/lib-storage"),{toCsvStream:vbe}=(No(),D(BU)),gQ=["search_by_value","search_by_hash","sql","search_by_conditions"],SQ=["json","csv"],yQ="json",RQ="csv",Ube="Successfully exported JSON locally.",xbe="Successfully exported CSV locally.",Bbe=1e3,Fbe=pD.searchByHash,kbe=pD.searchByValue,Hbe=TQ(nR.finished);IQ.exports={export_to_s3:Vbe,export_local:qbe};async function qbe(e){zs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=bQ(e);if(!Ss.isEmpty(t))throw zs.error(t),Sr(new Error,t,Tr.BAD_REQUEST,void 0,void 0,!0);if(Ss.isEmpty(e.path))throw zs.error(Vn.MISSING_VALUE("path")),Sr(new Error,Vn.MISSING_VALUE("path"),Tr.BAD_REQUEST,void 0,void 0,!0);let r=(Ss.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Pbe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Ss.buildFolderPath(e.path,r);await Gbe(e.path);let s=await AQ(e);return await $be(n,e.format,s)}o(qbe,"export_local");async function Gbe(e){if(zs.trace("in confirmPath"),Ss.isEmptyOrZeroLength(e))throw Sr(new Error,`Invalid path: ${e}`,Tr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await mD.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),Sr(new Error,n,Tr.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),Sr(new Error,r,Tr.BAD_REQUEST,void 0,void 0,!0)}return!0}o(Gbe,"confirmPath");async function $be(e,t,r){if(zs.trace("in saveToLocal"),gE.isEmptyOrZeroLength(e))throw Sr(new Error,Vn.INVALID_VALUE("file_path"),Tr.BAD_REQUEST,void 0,void 0,!0);if(gE.isEmptyOrZeroLength(t))throw Sr(new Error,Vn.INVALID_VALUE("Source format"),Tr.BAD_REQUEST,void 0,void 0,!0);if(gE.isEmpty(r))throw Sr(new Error,Vn.NOT_FOUND("Data"),Tr.BAD_REQUEST,void 0,void 0,!0);if(t===yQ){let n=mD.createWriteStream(e);return Dbe(r).pipe(n),await Hbe(n),{message:Ube,path:e}}else if(t===RQ){let n=mD.createWriteStream(e),s=nR.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new Obe(i,c).fromInput(s).toOutput(n).promise(!1),{message:xbe,path:e}}throw Sr(new Error,Vn.INVALID_VALUE("format"),Tr.BAD_REQUEST)}o($be,"saveToLocal");async function Vbe(e){if(!e.s3||Object.keys(e.s3).length===0)throw Sr(new Error,Vn.MISSING_VALUE("S3 object"),Tr.BAD_REQUEST);if(Ss.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Sr(new Error,Vn.MISSING_VALUE("aws_access_key_id"),Tr.BAD_REQUEST);if(Ss.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Sr(new Error,Vn.MISSING_VALUE("aws_secret_access_key"),Tr.BAD_REQUEST);if(Ss.isEmptyOrZeroLength(e.s3.bucket))throw Sr(new Error,Vn.MISSING_VALUE("bucket"),Tr.BAD_REQUEST);if(Ss.isEmptyOrZeroLength(e.s3.key))throw Sr(new Error,Vn.MISSING_VALUE("key"),Tr.BAD_REQUEST);if(Ss.isEmptyOrZeroLength(e.s3.region))throw Sr(new Error,Vn.MISSING_VALUE("region"),Tr.BAD_REQUEST);let t=bQ(e);if(!Ss.isEmpty(t))throw Sr(new Error,t,Tr.BAD_REQUEST);zs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await AQ(e)}catch(l){throw zs.error(l),l}let n,s=await Cbe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new nR.PassThrough;if(e.format===RQ){i=e.s3.key+".csv";let l=vbe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===yQ){i=e.s3.key+".json";let l=new nR.Readable;l.pipe(a),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let p=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=p,f!==0&&f%Bbe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw Sr(new Error,Vn.INVALID_VALUE("format"),Tr.BAD_REQUEST);return new Mbe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(Vbe,"export_to_s3");function bQ(e){if(zs.trace("in exportCoreValidation"),Ss.isEmpty(e.format))return"format missing";if(SQ.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${SQ.join(", ")}`;let t=e.search_operation.operation;if(Ss.isEmpty(t))return"search_operation.operation missing";if(gQ.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${gQ.join(", ")}`}o(bQ,"exportCoreValidation");async function AQ(e){zs.trace("in getRecords");let t,r;if(gE.isEmpty(e.search_operation)||gE.isEmptyOrZeroLength(e.search_operation.operation))throw Sr(new Error,Vn.INVALID_VALUE("Search operation"),Tr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=kbe;break;case"search_by_hash":t=Fbe;break;case"search_by_conditions":t=pD.searchByConditions;break;case"sql":{let n=Yy();t=TQ(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,zs.error(r),Sr(new Error,r,Tr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}o(AQ,"getRecords")});var NQ=v((Sqe,wQ)=>{"use strict";var ED=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};wQ.exports=ED});var PQ=v((yqe,OQ)=>{"use strict";var Kbe=(k(),D(Y)),CQ=require("moment"),Ybe=require("uuid").v4,_D=class{static{o(this,"JobObject")}constructor(){this.id=Ybe(),this.type=void 0,this.start_datetime=CQ().valueOf(),this.created_datetime=CQ().valueOf(),this.end_datetime=void 0,this.status=Kbe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};OQ.exports=_D});var gD=v((bqe,FQ)=>{"use strict";var Wbe=require("uuid").v4,UQ=un(),xQ=fn(),zbe=ai(),jbe=Yu(),Qbe=NQ(),Nt=(k(),D(Y)),Jbe=PQ(),Xbe=Hp(),Ci=z(),Zbe=um(),Pf=ce(),{promisify:eAe}=require("util"),au=require("moment"),tAe=Yy(),sR=eD(),LQ=iw(),{deleteTransactionLogsBeforeValidator:rAe}=mL(),{handleHDBError:DQ,hdbErrors:nAe,ClientError:sAe}=Ee(),{HTTP_STATUS_CODES:MQ}=nAe,vQ=xQ.searchByValue,iAe=xQ.searchByHash,oAe=UQ.insert,aAe=eAe(tAe.evaluateSQL),cAe=UQ.update;FQ.exports={addJob:dAe,updateJob:mAe,handleGetJob:lAe,handleGetJobsByStartDate:uAe,getJobById:BQ};async function lAe(e){if(e.id===void 0)throw new sAe("'id' is required");let t=await BQ(e.id);return Pf.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}o(lAe,"handleGetJob");async function uAe(e){try{let t=await fAe(e);if(Ci.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=au(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=au(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 Ci.error(r),new Error(r)}}o(uAe,"handleGetJobsByStartDate");async function dAe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Pf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Ci.info(d),t.error=d,t}if(!Nt.JOB_TYPE_ENUM[e.operation])return Ci.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Nt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=sR.fileObject(e);break;case Nt.OPERATIONS_ENUM.CSV_URL_LOAD:n=sR.urlObject(e);break;case Nt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=sR.dataObject(e);break;case Nt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=sR.s3FileObject(e);break;case Nt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Nt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=LQ(e,"date");break;case Nt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=LQ(e,"timestamp");break;case Nt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=rAe(e);break;case Nt.OPERATIONS_ENUM.RESTART_SERVICE:if(Nt.HDB_PROCESS_SERVICES[e.service]===void 0)throw DQ(new Error,"Invalid service",MQ.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw DQ(n,n.message,MQ.BAD_REQUEST,void 0,void 0,!0);let s=new Jbe;s.type=e.operation===Nt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Nt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new zbe(Nt.SYSTEM_SCHEMA_NAME,Nt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await vQ(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ci.error(f),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){s.id=Wbe();try{a=await vQ(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ci.error(f),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return Ci.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new Zbe(Nt.SYSTEM_SCHEMA_NAME,Nt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await oAe(l)}catch(d){return Ci.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,Ci.trace(d)}return t}o(dAe,"addJob");async function fAe(e){let t=au(e.from_date,au.ISO_8601),r=au(e.to_date,au.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 Qbe(n,e.hdb_user);try{return await aAe(s)}catch(i){throw Ci.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}o(fAe,"getJobsInDateRange");async function BQ(e){if(Pf.isEmptyOrZeroLength(e))return Pf.errorizeMessage("Invalid job ID specified.");let t=new jbe(Nt.SYSTEM_SCHEMA_NAME,Nt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await iAe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Ci.error(n),Pf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o(BQ,"getJobById");async function mAe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Pf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Nt.JOB_STATUS_ENUM.COMPLETE||e.status===Nt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=au().valueOf());let t=new Xbe(Nt.SYSTEM_SCHEMA_NAME,Nt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await cAe(t),r}o(mAe,"updateJob")});var YQ=v((Iqe,KQ)=>{"use strict";var kQ=ce(),Dr=(k(),D(Y)),pAe=require("moment"),iR=fD(),SE=z(),HQ=gD(),qQ=hD(),GQ=Ga(),$Q=Je(),hAe=Uy(),EAe=Af(),{parentPort:_Ae,isMainThread:VQ}=require("worker_threads"),{onMessageByType:gAe}=Je(),SD=class{static{o(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function SAe(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(kQ.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(kQ.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Dr.JOB_TYPE_ENUM.csv_file_load:await lo(e,iR.csvFileLoad);break;case Dr.JOB_TYPE_ENUM.csv_url_load:await lo(e,iR.csvURLLoad);break;case Dr.JOB_TYPE_ENUM.csv_data_load:await lo(e,iR.csvDataLoad);break;case Dr.JOB_TYPE_ENUM.import_from_s3:await lo(e,iR.importFromS3);break;case Dr.JOB_TYPE_ENUM.empty_trash:break;case Dr.JOB_TYPE_ENUM.export_local:await lo(e,qQ.export_local);break;case Dr.JOB_TYPE_ENUM.export_to_s3:await lo(e,qQ.export_to_s3);break;case Dr.JOB_TYPE_ENUM.delete_files_before:case Dr.JOB_TYPE_ENUM.delete_records_before:await lo(e,GQ.deleteFilesBefore);break;case Dr.JOB_TYPE_ENUM.delete_audit_logs_before:await lo(e,GQ.deleteAuditLogsBefore);break;case Dr.JOB_TYPE_ENUM.delete_transaction_logs_before:await lo(e,hAe.deleteTransactionLogsBefore);break;case Dr.JOB_TYPE_ENUM.restart_service:return await lo(e,EAe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o(SAe,"parseMessage");async function lo(e,t){try{e.job.status=Dr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=pAe().valueOf(),await HQ.updateJob(e.job),await TAe(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):SE.error(`There was an error running ${t.name} job with id ${e.job.id}`),SE.error(n),e.job.message=n,e.job.status=Dr.JOB_STATUS_ENUM.ERROR;try{await HQ.updateJob(e.job)}catch(s){throw SE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(lo,"runJob");async function TAe(e){SE.trace("launching job thread:",e),VQ?$Q.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Dr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):_Ae.postMessage({type:Dr.ITC_EVENT_TYPES.START_JOB,jobId:e})}o(TAe,"launchJobThread");VQ&&gAe(Dr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{$Q.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Dr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){SE.error(r)}});KQ.exports={parseMessage:SAe,RunnerMessage:SD}});var zQ=v((Nqe,WQ)=>{"use strict";var yAe=ce(),TD=le(),Pc=(k(),D(Y)),RAe=mt(),bAe=xt(),uo=z(),AAe=oD(),IAe=Ki();TD.initSync();WQ.exports={postOperationHandler:NAe,sendOperationTransaction:TE};async function TE(e,t,r,n){if(e.schema===Pc.SYSTEM_SCHEMA_NAME)return;let s=wAe(e,t,r);s&&(uo.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await bAe.publishToStream(`${RAe.SUBJECT_PREFIXES.TXN}.${e.schema}`,IAe.createNatsTableStreamName(e.schema,e.table),n,s))}o(TE,"sendOperationTransaction");function wAe(e,t,r){if(yAe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Pc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(wAe,"convertCRUDOperationToTransaction");async function NAe(e,t,r){if(!TD.get(Pc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;uo.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=TD.get(Pc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new AAe(t.txn_time,n,s);switch(e.operation){case Pc.OPERATIONS_ENUM.INSERT:try{await TE(e,t.inserted_hashes,i,r)}catch(a){uo.error("There was an error calling clustering postOperationHandler for insert."),uo.error(a)}break;case Pc.OPERATIONS_ENUM.DELETE:try{await TE(e,t.deleted_hashes,i,r)}catch(a){uo.error("There was an error calling clustering postOperationHandler for delete."),uo.error(a)}break;case Pc.OPERATIONS_ENUM.UPDATE:try{await TE(e,t.update_hashes,i,r)}catch(a){uo.error("There was an error calling clustering postOperationHandler for update."),uo.error(a)}break;case Pc.OPERATIONS_ENUM.UPSERT:try{await TE(e,t.upserted_hashes,i,r)}catch(a){uo.error("There was an error calling clustering postOperationHandler for upsert."),uo.error(a)}break;default:break}return t}o(NAe,"postOperationHandler")});var J,jQ=oe(()=>{J=class{static{o(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var dL={};be(dL,{chooseOperation:()=>h2,executeJob:()=>js,getOperationFunction:()=>E2,operation:()=>CD,processLocalTransaction:()=>p2});async function p2(e,t){try{if(e.body.operation!=="read_log"&&(AE.default.log_level===Zf.INFO||AE.default.log_level===Zf.DEBUG||AE.default.log_level===Zf.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:a,...c}=e.body;An.info(c)}}catch(n){An.error(n)}let r=await f2.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return LAe[e.body.operation]&&a2.default.setSchemaDataToGlobal(n=>{n&&An.error(n)}),r}function h2(e){let t;try{t=E2(e)}catch(s){throw An.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=aR.default.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let a=aR.default.checkASTPermissions(e,i);if(a)throw An.error(`${QQ.FORBIDDEN} from operation ${e.operation}`),An.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,Qs.handleHDBError)(new Error,a,Qs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.LOGIN&&e.operation!==V.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let a=o2.default.verifyPerms(i,s);if(a)throw An.error(`${QQ.FORBIDDEN} from operation ${e.operation}`),An.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,Qs.handleHDBError)(new Error,a,Qs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,Qs.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function E2(e){if(An.trace(`getOperationFunction with operation: ${e.operation}`),JQ.has(e.operation))return JQ.get(e.operation);throw(0,Qs.handleHDBError)(new Error,Qs.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Qs.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function CD(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=h2(e);return p2({body:e},n)}async function DAe(e){An.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[Rb]=!0;let a;switch(i.operation){case V.INSERT:a=await lu.default.insert(i);break;case V.UPDATE:a=await lu.default.update(i);break;case V.UPSERT:a=await lu.default.upsert(i);break;case V.DELETE:a=await Mf.default.deleteRecord(i);break;default:An.warn("invalid operation in catchup");break}await CAe.postOperationHandler(i,a,e)}catch(a){An.info("Invalid operation in transaction"),An.error(a)}}async function js(e){(0,d2.transformReq)(e);let t,r;try{if(r=await cR.default.addJob(e),r){t=r.createdJob,An.info("addJob result",r);let n=new AD.default.RunnerMessage(t,e);return{message:await AD.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 An.error(i),(0,Qs.handleHDBError)(n,i)}}function MAe(){let e=new Map;return e.set(V.INSERT,new J(lu.default.insert)),e.set(V.UPDATE,new J(lu.default.update)),e.set(V.UPSERT,new J(lu.default.upsert)),e.set(V.SEARCH_BY_CONDITIONS,new J(Df.default.searchByConditions)),e.set(V.SEARCH_BY_HASH,new J(Df.default.searchByHash)),e.set(V.SEARCH_BY_ID,new J(Df.default.searchByHash)),e.set(V.SEARCH_BY_VALUE,new J(Df.default.searchByValue)),e.set(V.SEARCH,new J(OAe)),e.set(V.SQL,new J(PAe)),e.set(V.CSV_DATA_LOAD,new J(js,yE.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new J(js,yE.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new J(js,yE.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new J(js,yE.default.importFromS3)),e.set(V.CREATE_SCHEMA,new J(fo.default.createSchema)),e.set(V.CREATE_DATABASE,new J(fo.default.createSchema)),e.set(V.CREATE_TABLE,new J(fo.default.createTable)),e.set(V.CREATE_ATTRIBUTE,new J(fo.default.createAttribute)),e.set(V.DROP_SCHEMA,new J(fo.default.dropSchema)),e.set(V.DROP_DATABASE,new J(fo.default.dropSchema)),e.set(V.DROP_TABLE,new J(fo.default.dropTable)),e.set(V.DROP_ATTRIBUTE,new J(fo.default.dropAttribute)),e.set(V.DESCRIBE_SCHEMA,new J(RE.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new J(RE.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new J(RE.default.describeTable)),e.set(V.DESCRIBE_ALL,new J(RE.default.describeAll)),e.set(V.DELETE,new J(Mf.default.deleteRecord)),e.set(V.ADD_USER,new J(Lf.default.addUser)),e.set(V.ALTER_USER,new J(Lf.default.alterUser)),e.set(V.DROP_USER,new J(Lf.default.dropUser)),e.set(V.LIST_USERS,new J(Lf.default.listUsersExternal)),e.set(V.LIST_ROLES,new J(bE.default.listRoles)),e.set(V.ADD_ROLE,new J(bE.default.addRole)),e.set(V.ALTER_ROLE,new J(bE.default.alterRole)),e.set(V.DROP_ROLE,new J(bE.default.dropRole)),e.set(V.USER_INFO,new J(Lf.default.userInfo)),e.set(V.READ_LOG,new J(ZQ.default)),e.set(V.ADD_NODE,new J(e2.default)),e.set(V.UPDATE_NODE,new J(yD.default)),e.set(V.SET_NODE_REPLICATION,new J(yD.default)),e.set(V.REMOVE_NODE,new J(t2.default)),e.set(V.CONFIGURE_CLUSTER,new J(r2.default)),e.set(V.PURGE_STREAM,new J(n2.default)),e.set(V.SET_CONFIGURATION,new J(ID.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new J(s2.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new J(i2.default)),e.set(V.CLUSTER_SET_ROUTES,new J(oR.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new J(oR.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new J(oR.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new J(js,RD.default.export_to_s3)),e.set(V.CREATE_CSR,new J(cu.default.createCsr)),e.set(V.SIGN_CERTIFICATE,new J(cu.default.signCertificate)),e.set(V.LIST_CERTIFICATES,new J(cu.default.listCertificates)),e.set(V.ADD_CERTIFICATES,new J(cu.default.addCertificate)),e.set(V.REMOVE_CERTIFICATE,new J(cu.default.removeCertificate)),e.set(V.GET_KEY,new J(cu.default.getKey)),e.set(V.ADD_NODE_BACK,new J(mO)),e.set(V.REMOVE_NODE_BACK,new J(pO)),e.set(V.DELETE_FILES_BEFORE,new J(js,Mf.default.deleteFilesBefore)),e.set(V.DELETE_RECORDS_BEFORE,new J(js,Mf.default.deleteFilesBefore)),e.set(V.EXPORT_LOCAL,new J(js,RD.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new J(cR.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new J(cR.default.handleGetJob)),e.set(V.GET_REGISTRATION_INFO,new J(OL)),e.set(V.GET_FINGERPRINT,new J(PL)),e.set(V.SET_LICENSE,new J(LL)),e.set(V.RESTART,new J(bD.default.restart)),e.set(V.RESTART_SERVICE,new J(js,bD.default.restartService)),e.set(V.CATCHUP,new J(DAe)),e.set(V.SYSTEM_INFORMATION,new J(c2.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new J(js,Mf.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new J(XQ.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new J(FN)),e.set(V.REFRESH_OPERATION_TOKEN,new J(kN)),e.set(V.LOGIN,new J(oL)),e.set(V.LOGOUT,new J(aL)),e.set(V.GET_CONFIGURATION,new J(ID.default.getConfiguration)),e.set(V.CUSTOM_FUNCTIONS_STATUS,new J(Ct.default.customFunctionsStatus)),e.set(V.GET_CUSTOM_FUNCTIONS,new J(Ct.default.getCustomFunctions)),e.set(V.GET_COMPONENT_FILE,new J(Ct.default.getComponentFile)),e.set(V.GET_COMPONENTS,new J(Ct.default.getComponents)),e.set(V.SET_COMPONENT_FILE,new J(Ct.default.setComponentFile)),e.set(V.DROP_COMPONENT,new J(Ct.default.dropComponent)),e.set(V.GET_CUSTOM_FUNCTION,new J(Ct.default.getCustomFunction)),e.set(V.SET_CUSTOM_FUNCTION,new J(Ct.default.setCustomFunction)),e.set(V.DROP_CUSTOM_FUNCTION,new J(Ct.default.dropCustomFunction)),e.set(V.ADD_CUSTOM_FUNCTION_PROJECT,new J(Ct.default.addComponent)),e.set(V.ADD_COMPONENT,new J(Ct.default.addComponent)),e.set(V.DROP_CUSTOM_FUNCTION_PROJECT,new J(Ct.default.dropCustomFunctionProject)),e.set(V.PACKAGE_CUSTOM_FUNCTION_PROJECT,new J(Ct.default.packageComponent)),e.set(V.PACKAGE_COMPONENT,new J(Ct.default.packageComponent)),e.set(V.DEPLOY_CUSTOM_FUNCTION_PROJECT,new J(Ct.default.deployComponent)),e.set(V.DEPLOY_COMPONENT,new J(Ct.default.deployComponent)),e.set(V.READ_TRANSACTION_LOG,new J(wD.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new J(js,wD.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new J(l2.default.installModules)),e.set(V.GET_BACKUP,new J(fo.default.getBackup)),e.set(V.ADD_SSH_KEY,new J(Ct.default.addSSHKey)),e.set(V.UPDATE_SSH_KEY,new J(Ct.default.updateSSHKey)),e.set(V.DELETE_SSH_KEY,new J(Ct.default.deleteSSHKey)),e.set(V.LIST_SSH_KEYS,new J(Ct.default.listSSHKeys)),e.set(V.SET_SSH_KNOWN_HOSTS,new J(Ct.default.setSSHKnownHosts)),e.set(V.GET_SSH_KNOWN_HOSTS,new J(Ct.default.getSSHKnownHosts)),e.set(V.GET_ANALYTICS,new J(EL)),e.set(V.LIST_METRICS,new J(_L)),e.set(V.DESCRIBE_METRIC,new J(gL)),e.set(V.GET_STATUS,new J(wL)),e.set(V.SET_STATUS,new J(NL)),e.set(V.CLEAR_STATUS,new J(IL)),e.set(V.INSTALL_USAGE_LICENSE,new J(wP)),e.set(V.GET_USAGE_LICENSES,new J(PP)),e}var Df,aR,yE,fo,RE,Mf,XQ,Lf,bE,Ct,AE,ZQ,e2,yD,t2,r2,n2,s2,i2,oR,RD,o2,cR,Qs,bD,ND,lu,a2,c2,AD,ID,wD,l2,u2,d2,cu,f2,m2,QQ,An,CAe,OAe,PAe,LAe,JQ,fL=oe(()=>{Df=w(fn()),aR=w(Yy()),yE=w(fD()),fo=w(mh()),RE=w(Ja()),Mf=w(Ga()),XQ=w(qC()),Lf=w(os()),bE=w(xp()),Ct=w(uL()),AE=w(z()),ZQ=w(YC()),e2=w(wT()),yD=w(SO()),t2=w(CT()),r2=w(RO()),n2=w(bO()),s2=w(wO()),i2=w(CO()),oR=w(MT()),RD=w(hD()),o2=w(Vy()),cR=w(gD());k();Qs=w(Ee()),bD=w(Af()),ND=w(require("util")),lu=w(un()),a2=w(li()),c2=w(_h()),AD=w(YQ());Id();Cy();ID=w(Et()),wD=w(Uy()),l2=w(hL()),u2=w(ri()),d2=w(ce());xr();cu=w(ds());Qd();TL();f2=w(tD()),m2=w(zQ());lE();Gh();ML();jQ();({HTTP_STATUS_CODES:QQ}=Qs.hdbErrors),An=AE.default.loggerWithTag("operation"),{transactToClusteringUtils:CAe}=m2.default,OAe=ND.promisify(Df.default.search),PAe=ND.promisify(aR.default.evaluateSQL),LAe={[V.CREATE_ATTRIBUTE]:!0,[V.CREATE_TABLE]:!0,[V.CREATE_SCHEMA]:!0,[V.DROP_ATTRIBUTE]:!0,[V.DROP_TABLE]:!0,[V.DROP_SCHEMA]:!0};o(p2,"processLocalTransaction");JQ=MAe();Me.operation=CD;o(h2,"chooseOperation");o(E2,"getOperationFunction");(0,u2._assignPackageExport)("operation",CD);o(CD,"operation");o(DAe,"catchup");o(js,"executeJob");o(MAe,"initializeOperationFunctionMap")});var dR=v((vqe,S2)=>{"use strict";var lR=(k(),D(Y)),vAe=ce(),IE=z(),{handleHDBError:OD,hdbErrors:uR}=Ee(),{isMainThread:UAe}=require("worker_threads"),{Readable:xAe}=require("stream"),_2=require("os"),BAe=require("util"),FAe=qN(),kAe=BAe.promisify(FAe.authorize),g2=(fL(),D(dL)),{createGzip:HAe,constants:qAe}=require("zlib"),GAe=[lR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,lR.OPERATIONS_ENUM.LOGIN,lR.OPERATIONS_ENUM.LOGOUT];function $Ae(e){let t=`Found an uncaught exception with message: ${e.message}. ${_2.EOL}Stack: ${e.stack} ${_2.EOL}Terminating ${UAe?"HDB":"thread"}.`;console.error(t),IE.fatal(t),process.exit(1)}o($Ae,"handleServerUncaughtException");function VAe(e,t,r){if(IE[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:uR.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}o(VAe,"serverErrorHandler");function KAe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=OD(new Error,"Invalid JSON.",uR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(vAe.isEmpty(e.body.operation)){let n=OD(new Error,"Request body must include an 'operation' property.",uR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o(KAe,"reqBodyValidationHandler");function YAe(e,t,r){let n;!GAe.includes(e.body.operation)||e.body.operation===lR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?kAe(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{IE.warn(i),IE.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(OD(i,a,uR.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}o(YAe,"authHandler");async function WAe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=g2.chooseOperation(e.body);let s=await g2.processLocalTransaction(e,n);if(s instanceof xAe&&s.headers){for(let[i,a]of s.headers)t.header(i,a);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(HAe({level:qAe.Z_BEST_SPEED})))}return s}catch(s){throw IE.error(s),s}}o(WAe,"handlePostRequest");S2.exports={authHandler:YAe,handlePostRequest:WAe,handleServerUncaughtException:$Ae,serverErrorHandler:VAe,reqBodyValidationHandler:KAe}});var b2=v((xqe,R2)=>{"use strict";var zAe=require("fastify-plugin"),{handlePostRequest:T2,authHandler:jAe,reqBodyValidationHandler:QAe}=dR();async function JAe(e){e.decorate("hdbCore",{preValidation:[QAe,jAe],request:o(t=>y2(T2(t,response)),"request"),requestWithoutAuthentication:o((t,r)=>y2(T2(t,r,!0)),"requestWithoutAuthentication")})}o(JAe,"hdbCore");async function y2(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}o(y2,"convertAsyncIterators");R2.exports=zAe(JAe)});var I2=v((kqe,A2)=>{"use strict";var Fqe=require("fs"),fR=le();fR.initSync();var{CONFIG_PARAMS:PD}=(k(),D(Y)),XAe=1024*1024*1024;function ZAe(e){let t=fR.get(PD.HTTP_TIMEOUT),r=fR.get(PD.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:XAe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:fR.get(PD.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o(ZAe,"getServerOptions");A2.exports=ZAe});var C2=v((qqe,N2)=>{"use strict";var LD=le();LD.initSync();var{CONFIG_PARAMS:w2}=(k(),D(Y));function eIe(){let e=LD.get(w2.HTTP_CORSACCESSLIST),t=LD.get(w2.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}o(eIe,"getCORSOptions");N2.exports=eIe});var L2=v(($qe,P2)=>{"use strict";var O2=le();O2.initSync();var tIe=(k(),D(Y));function rIe(){return O2.get(tIe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o(rIe,"getHeaderTimeoutConfig");P2.exports=rIe});var MD={};be(MD,{customFunctionsServer:()=>iIe,ready:()=>K2,start:()=>sIe});function sIe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){ma||(ma=V2(t),Me.http((await ma).server));let a=await ma,c=(0,DD.dirname)(s),l=(0,DD.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!D2.has(c)){D2.add(c);try{a.register(aIe(c,l))}catch(u){if(u.message==="Root plugin has already booted")gt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:K2}}async function iIe(){try{gt.info("In Custom Functions Fastify server"+process.cwd()),gt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),gt.debug(`Custom Functions server process ${process.pid} starting up.`),await oIe();let e=F2.get(U.HTTP_SECUREPORT)>0,t;try{t=ma=await V2(e)}catch(r){throw gt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw gt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){gt.error(`Custom Functions ${process.pid} Error: ${e}`),gt.error(e),process.exit(1)}}async function oIe(){try{gt.info("Custom Functions starting configuration."),await k2.setUsersWithRolesCache(),gt.info("Custom Functions completed configuration.")}catch(e){gt.error(e)}}function aIe(e,t){return async function(r){try{gt.info("Custom Functions starting buildRoutes"),gt.trace("Loading fastify routes folder "+e),(0,M2.existsSync)(e)&&r.register(B2.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:gt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,a)=>{s?.message?gt.error(s.message):s&>.error(s),a()})}catch(n){gt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function V2(e){gt.info("Custom Functions starting buildServer.");let t=(0,H2.default)(e),r=(0,v2.default)(t);r.server.headersTimeout=(0,G2.default)(),r.setErrorHandler($2.serverErrorHandler);let n=(0,q2.default)();return n&&r.register(U2.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(x2.default),await r.register(nIe),await r.after(),gm(r),gt.info("Custom Functions completed buildServer."),r}function K2(){if(ma)return ma.then?ma.then(e=>e.ready()):ma.ready()}var DD,M2,v2,U2,x2,B2,F2,gt,nIe,k2,H2,q2,G2,$2,ma,D2,Y2=oe(()=>{DD=require("path"),M2=require("fs"),v2=w(require("fastify")),U2=w(require("@fastify/cors")),x2=w(vN()),B2=w(require("@fastify/autoload")),F2=w(le());k();gt=w(z()),nIe=w(b2()),k2=w(os()),H2=w(I2()),q2=w(C2()),G2=w(L2()),$2=w(dR());No();xr();D2=new Set;o(sIe,"start");o(iIe,"customFunctionsServer");o(oIe,"setUp");o(aIe,"buildRouteFolder");o(V2,"buildServer");o(K2,"ready")});var UD={};be(UD,{handleApplication:()=>cIe,suppressHandleApplicationWarning:()=>lIe});function cIe(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,Uf.join)(n.absolutePath,"index.html");(0,vf.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,Uf.dirname)(n.urlPath),n.absolutePath);break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,Uf.dirname)(n.urlPath));break}}),e.server.http((n,s)=>{if(n.method!=="GET"||n.isWebSocket)return s(n);let i=e.options.get(["fallthrough"])??!0;if(typeof i!="boolean")throw new Error(`Invalid fallthrough option: ${i}. Must be a boolean.`);let a=t.get(n.pathname);if(!a){let d=e.options.get(["index"])??!1;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);d&&(a=r.get(n.pathname))}if(!a){let d=e.options.get(["extensions"])??[];if(!Array.isArray(d)||d.some(f=>typeof f!="string"))throw new Error(`Invalid extensions option: ${d}. Must be an array of strings.`);for(let f of d)if(a=t.get(`${n.pathname}.${f}`),a)break}if(a)return{handlesHeaders:!0,body:(0,vD.default)(n,(0,vf.realpathSync)(a))};if(i)return s(n);let c=e.options.get(["notFound"]);if(uIe(c),!c)return{status:404,body:"File not found"};let l=(0,Uf.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,vf.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,vD.default)(n,(0,vf.realpathSync)(l))}},{runFirst:!0})}function uIe(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 vf,Uf,vD,lIe,W2=oe(()=>{vf=require("node:fs"),Uf=require("node:path"),vD=w(require("send"));o(cIe,"handleApplication");lIe=!0;o(uIe,"validateNotFoundOption")});var xD={};be(xD,{start:()=>dIe});function dIe({override:e}){return{handleFile:o((t,r,n)=>{mR.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,z2.parse)(t))){if(process.env[s]!==void 0)if(mR.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)mR.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var z2,mR,j2=oe(()=>{z2=require("dotenv"),mR=w(z());o(dIe,"start")});var BD={};be(BD,{DataLoaderError:()=>Ts,DataLoaderResult:()=>xf,EmptyFileError:()=>ER,FileParseError:()=>hR,InvalidPropertyTypeError:()=>_R,MissingRequiredPropertyError:()=>wE,RecordProcessingError:()=>NE,SystemDatabaseError:()=>gR,UnsupportedFileExtensionError:()=>pR,handleApplication:()=>mIe,loadDataFile:()=>eJ,suppressHandleApplicationWarning:()=>fIe});function mIe(e){if((0,J2.getWorkerIndex)()!==0){mo.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||eJ(t,En,De).then(r=>{mo.debug?.("Data loader processed file: %s: %s",(0,pa.basename)(t.absolutePath),r.message)})})}async function eJ({contents:e,absolutePath:t,stats:r},n,s){let i=(0,pa.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,Q2.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new pR(t,i);a.mtime=r.mtimeMs}catch(f){throw f instanceof Ts?f:new hR(t,f)}if(!a)throw new ER(t);let{database:c,table:l,records:u}=a;if(!l)throw new wE(t,"table");if(!u)throw new wE(t,"records");if(!Array.isArray(u))throw new _R(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new gR(c,l);try{let f;if(c&&s[c]&&s[c][l])mo.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])mo.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{mo.debug?.(`Table ${d} not found, creating new table`);let b=[];if(u.length>0){let S=u[0];Object.keys(S).map(R=>{let L={name:R,type:typeof S[R]};return R==="id"&&(L.isPrimaryKey=!0),L}).forEach(R=>{b.push(R)})}f=await Xe({database:c,table:l,attributes:b})}let m=u.length,p=0,h=0,E=0,g=100;for(let b=0;b<u.length;b+=g){let S=u.slice(b,b+g),R=[];for(let L of S)R.push(async()=>{try{let O=null,x=L.id;if(x!==void 0&&(O=await f.get(x)),!O)return p++,f.put(L);let j=O.getUpdatedTime();return a.mtime>j?(h++,f.put(L)):(E++,Promise.resolve({inserted:0,updated:0}))}catch(O){if(O instanceof Ts)mo.error?.(`Record processing error: ${O.message}`);else{let x=new NE(d,O);mo.error?.(`Record processing error: ${x.message}`)}return Promise.resolve({inserted:0,updated:0,error:O.message})}});await Promise.all(R.map(L=>L()))}if(p>0||h>0){let b=`Loaded ${p} new and updated ${h} records in ${d}`;return E>0&&(b+=` (${E} records skipped)`),mo.info?.(b),new xf(t,c,l,"success",p+h,b)}else if(E>0){let b=`All ${E} records in ${d} already up-to-date`;return mo.info?.(b),new xf(t,c,l,"skipped",m,b)}else{let b=`No records to process in ${d}`;return mo.info?.(b),new xf(t,c,l,"success",0,b)}}catch(f){throw f instanceof Ts?f:new NE(d,f)}}var pa,Q2,J2,ha,X2,Z2,mo,fIe,Ts,pR,hR,ER,wE,_R,gR,NE,xf,tJ=oe(()=>{pa=require("node:path"),Q2=require("yaml");Ne();J2=w(Je()),ha=w(Kr()),X2=w(Ee()),Z2=w(z()),mo=Z2.default.forComponent("dataLoader"),fIe=!0;o(mIe,"handleApplication");o(eJ,"loadDataFile");Ts=class extends X2.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=ha.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},pR=class extends Ts{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,pa.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,ha.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},hR=class extends Ts{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,pa.basename)(t)}: ${r.message}`,ha.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},ER=class extends Ts{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,pa.basename)(t)} is empty or invalid`,ha.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},wE=class extends Ts{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,pa.basename)(t)} is missing required "${r}" property`,ha.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},_R=class extends Ts{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,pa.basename)(t)} has invalid "${r}" property, expected ${n}`,ha.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},gR=class extends Ts{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,ha.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},NE=class extends Ts{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,ha.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},xf=class{static{o(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,a){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=a}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#r}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#r,status:this.#n,count:this.#s,message:this.#i}}}});var FD={};be(FD,{hdbServer:()=>_Ie,start:()=>_Ie});async function _Ie(e){try{po.default.debug("In Fastify server"+process.cwd()),po.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),po.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=rJ.default.isMaster,await gIe();let t=e.securePort>0;Bf=SIe(t),await Bf.ready(),e||(e={}),e.isOperationsServer=!0;try{Me.http(Bf.server,e),Bf.server.closeIdleConnections||await Bf.listen({port:0,host:"::"})}catch(r){throw Bf.close(),po.default.error(r),po.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),po.default.fatal(t),process.exit(1)}}async function gIe(){return po.default.trace("Configuring HarperDB process."),uJ.default.setSchemaDataToGlobal(),fJ.default.setUsersWithRolesCache()}function SIe(e){po.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=TIe(e),r=(0,nJ.default)(t);r.server.headersTimeout=RIe(),r.setErrorHandler(Dc.serverErrorHandler);let n=yIe();n&&r.register(sJ.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(aJ.default),r.register(iJ.default),r.register(oJ.default,{root:cJ.default.join(lJ.PACKAGE_ROOT,"studio/web")}),gm(r);let s=Lc.default.get(tm.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!dJ.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.sendFile("running.html")}),r.post("/",{preValidation:[Dc.reqBodyValidationHandler,Dc.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,Dc.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),po.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function TIe(e){let t=Lc.default.get(CE.OPERATIONSAPI_NETWORK_TIMEOUT),r=Lc.default.get(CE.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:hIe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}function yIe(){let e=Lc.default.get(CE.OPERATIONSAPI_NETWORK_CORS),t=Lc.default.get(CE.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===EIe)&&(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 RIe(){return Lc.default.get(CE.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??pIe}var rJ,Lc,po,nJ,sJ,iJ,oJ,aJ,cJ,lJ,uJ,dJ,fJ,Dc,pIe,hIe,EIe,CE,Bf,mJ=oe(()=>{rJ=w(require("cluster")),Lc=w(le());k();po=w(z()),nJ=w(require("fastify")),sJ=w(require("@fastify/cors")),iJ=w(require("@fastify/compress")),oJ=w(require("@fastify/static")),aJ=w(vN()),cJ=w(require("path")),lJ=w(At()),uJ=w(li()),dJ=w(ce()),fJ=w(os());xr();Dc=w(dR());No();Lc.default.initSync();pIe=6e4,hIe=1024*1024*1024,EIe="TRUE",{CONFIG_PARAMS:CE}=Y;o(_Ie,"operationsServer");o(gIe,"setUp");o(SIe,"buildServer");o(TIe,"getServerOptions");o(yIe,"getCORSOpts");o(RIe,"getHeaderTimeoutConfig")});var VD={};be(VD,{disableNATS:()=>AIe,publishToStream:()=>yR,setNATSReplicator:()=>kD,setPublishToStream:()=>IIe,setSubscription:()=>$D,start:()=>bIe});function bIe(){OE.default.get(U.CLUSTERING_ENABLED)&&NIe()}function AIe(e=!0){gJ=e}function IIe(e,t){yR=e,$D=t}function NIe(){if(gJ||process.env._DISABLE_NATS)return;let e=at(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];kD(s,r,i)}}Nl((r,n)=>{kD(r.tableName,r.databaseName,r),n&&TJ(r)}),!pJ&&(pJ=!0)}function kD(e,t,r){if(t==="system"&&CIe.includes(e))return;if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends Fr{static{o(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){TJ(i)}static subscribe(){let i=new Wn;return $D(t,e,i),i}static subscribeOnThisThread(i){return i<(OE.default.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??wIe)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new SR(s.transaction,s);let a=s.transaction;for(;a.next;)a=a.next;a.next=s.transaction.nats,i.user=s.user,i.context=s}else i=SJ;return i}o(n,"getNATSTransaction")}function TJ(e){let t=OE.default.get(U.CLUSTERING_NODENAME);yR(`${qD.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,GD.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 hJ,qD,GD,EJ,_J,OE,TR,gJ,yR,$D,wIe,SJ,pJ,CIe,SR,HD,yJ=oe(()=>{Ne();va();hJ=w(xt()),qD=w(mt()),GD=w(Ki());yu();EJ=w(XN()),_J=w(Cn()),OE=w(le());k();TR=w(z());o(bIe,"start");o(AIe,"disableNATS");yR=hJ.publishToStream,$D=EJ.setSubscription;o(IIe,"setPublishToStream");wIe=2;o(NIe,"assignReplicationSource");CIe=["hdb_job","hdb_raw_analytics","hdb_info"];o(kD,"setNATSReplicator");o(TJ,"publishSchema");SR=class{constructor(t,r){this.transaction=t;this.options=r}static{o(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=OE.default.get(U.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let a=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(TR.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=a)),l.table===f&&l.operation===m?(a.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(yR(`${qD.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,GD.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw TR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},HD=class extends SR{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,_J.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};SJ=new HD});async function wJ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await KD.get(e,{returnNonexistent:!0});i=new zD(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await KD.get(e);a&&a.delete()}i=new bR(e,t)}return n&&(n.id=e,n.user={username:t?.username},PE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function YD(){return RR++,RR>65500&&(RR=1),RR}function WD(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=Cs.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let a=new si(i.relativeURL);a.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return Tt(r,()=>s?t===void 0?c.delete(a,r):c.put(a,e.data,r):c.publish(a,e.data,r))}var bJ,Mc,AJ,IJ,RJ,KD,PE,RR,bR,zD,NJ=oe(()=>{Ne();Ua();bJ=w(Cn()),Mc=w(z());Na();AJ=w(Je()),IJ=w(qP());xr();sg();RJ=100,KD=Xe({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),PE=Xe({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,AJ.getWorkerIndex)()===0&&(async()=>{await IJ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of PE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Me.getUser(r.user.username));try{await WD(r,t,r)}catch{(0,Mc.warn)("Failed to publish will",t)}PE.delete(e.id)}})();o(wJ,"getSession");RR=1;o(YD,"getNextMessageId");bR=class{static{o(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:a}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(S=>S.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:a,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};a&&(0,Mc.trace)("Resuming subscription from",s,"from",a);let p=Cs.getMatch(u,"mqtt");if(!p){let S=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw S.statusCode=404,S}m.url=p.relativeURL;let h;if(m.url.indexOf("+")>-1||(h=m.url.indexOf("#"))>-1){let S=m.url.slice(1);if(h--,h>-1&&h!==S.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,S.indexOf("+")===S.length-1)m.onlyChildren=!0,m.url="/"+S.slice(0,S.length-1);else{let R=S.split("/"),L;for(let j=0;j<R.length;j++)if(R[j].indexOf("+")>-1)if(R[j]==="+")L=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&L)throw new Error("Filters can not be combined");let O=!0;R[R.length-1]==="#"&&(R.length--,O=!1),L&&(n=o(j=>{let H=j.id;if(!Array.isArray(H))if(H?.indexOf?.("/")>-1)H=H.split("/");else return!1;if(O&&H.length!==R.length)return!1;for(let F=0;F<R.length;F++)if(R[F]!=="+"&&R[F]!==H[F])return!1;return!0},"filter"));let x=R.indexOf("+");m.url="/"+(x>-1?R.slice(0,x):R).concat("").join("/")}}else m.isCollection=!1;let E=p.path,g=p.Resource,b=await Tt(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let R=await g.subscribe(m,S);if(!R)return;if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let L=(async()=>{for await(let O of R)try{let x;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"&&O.type!=="patch"||n&&!n(O))continue;r?(O.topic=s,x=this.needsAcknowledge(O)):(O.acknowledge?.(),x=YD());let j=O.id;if(Array.isArray(j)&&(j=ku(j)),j==null&&(j=""),await this.listener(E+"/"+j,O.value,x,t)===!1)break;this.awaitingAcks?.size>RJ?await new Promise(F=>setTimeout(F,this.awaitingAcks.size-RJ)):await new Promise(setImmediate)}catch(x){(0,Mc.warn)(x)}})();return R});if(b)return b.topic=s,b.qos=t.qos,this.subscriptions.push(b),b}resume(){}needsAcknowledge(t){let r=YD();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 WD(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();Tt(r,async()=>{try{if(!t){let n=await PE.get(this.sessionId);n?.doesExist()&&await WD(n,n.data,r)}}finally{await PE.delete(this.sessionId)}}).catch(n=>{(0,Mc.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};o(WD,"publish");zD=class extends bR{static{o(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=YD(),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,Mc.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,bJ.getNextMonotonicTime)()),(0,Mc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),KD.put(this.sessionRecord)}}});var jD={};be(jD,{bypassAuth:()=>OIe,start:()=>LIe});function OIe(){vJ=!0}function LIe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new MJ.EventEmitter},e.mqtt.events.on("error",()=>{}));let a=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);a.events.emit("connection",u),Jt.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=OJ(u,E=>{u.send(E)},d,Promise.resolve(f).then(()=>d?.user),a);u.on("message",p),u.on("close",h),u.on("error",E=>{Jt.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(a.events.emit("connection",u),Jt.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let p=u.getPeerCertificate(!0);if(p?.subject){let E=await Gd(p,l);if(!E.valid)throw Jt.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,Ff.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&IR.notify?.({username:d?.username,status:ti.SUCCESS,type:Aa.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,Ff.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&IR.error?.({username:h,status:ti.FAILURE,type:Aa.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else Jt.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){a.events.emit("error",p,u),Jt.error?.(p)}else if(l.required)return Jt.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&PIe(u.remoteAddress)&&(d=await(0,PJ.getSuperUser)(),Jt.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=OJ(u,p=>u.write(p),null,d,a);u.on("data",f),u.on("close",m),u.on("error",p=>{Jt.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function OJ(e,t,r,n,s){CJ||(CJ=!0,Bm(f=>{AR>0&&f.push({metric:"mqtt-connections",connections:AR,byThread:!0})}));let i;AR++;let a,c={protocolVersion:4},l=(0,wR.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){AR--,i||(i=!0,a?.disconnect?.(),s.events.emit("disconnected",a,e),s.sessions.delete(a),zr(!1,"connection","mqtt","disconnect"),Jt.debug?.("MQTT connection was closed",e.remoteAddress))}return o(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(R){e.close?.(1008,"Unauthorized"),Jt.info?.(R);return}let m=f.cmd;if(a)a.then&&await a;else if(m!=="connect"){Jt.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;qe(f.length,"bytes-received",E,b(f),"mqtt");try{switch(a?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Me.getUser(f.username,f.password.toString(),r),(0,Ff.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&IR.notify?.({username:n?.username,status:ti.SUCCESS,type:Aa.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(Q){return(0,Ff.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&IR.error?.({username:f.username,status:ti.FAILURE,type:Aa.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,Q),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let Q=e.deserialize||(e.deserialize=wo(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?Q(f.will.payload):void 0,delete f.will.payload}a=wJ({user:n,...f}),a=await a,a.socket=e,r&&(a.request=r),s.sessions.add(a)}catch(Q){return Jt.error?.(Q),s.events.emit("auth-failed",f,e,Q),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:Q.code||5,returnCode:Q.code||128})}s.events.emit("connected",a,e),zr(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:a.sessionWasPresent,reasonCode:0,returnCode:0});let R=o(async(Q,W,fe,ue)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",Q);let ee=Q.indexOf("/",1),Re=ee>0?Q.slice(0,ee):Q;g({cmd:"publish",topic:Q,payload:await S(W),messageId:fe||Math.floor(Math.random()*1e8),qos:ue.qos},Re);let Ie=e._socket??e;return Ie.writableNeedDrain?new Promise($e=>Ie.once("drain",$e)):!Ie.closed}catch(ee){return Jt.error?.(ee),a?.disconnect(),s.sessions.delete(a),!1}},"listener");a.setListener(R),a.sessionWasPresent&&await a.resume();break;case"subscribe":let L=[];for(let Q of f.subscriptions){let W;try{let fe=await a.addSubscription(Q,Q.qos>=1);W=fe?fe.qos||0:c.protocolVersion<5?128:143}catch(fe){s.events.emit("error",fe,e,Q,a),fe.statusCode?fe.statusCode===500?Jt.warn?.(fe):Jt.info?.(fe):Jt.error?.(fe),W=c.protocolVersion<5?128:fe.statusCode===403?135:fe.statusCode===404?143:128}L.push(W)}await a.committed,g({cmd:"suback",granted:L,messageId:f.messageId});break;case"unsubscribe":{let Q=[];for(let W of f.unsubscriptions)Q.push(a.removeSubscription(W)?0:17);g({cmd:"unsuback",granted:Q,messageId:f.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let O=f.qos===2?"pubrec":"puback",x=e.deserialize||(e.deserialize=wo(r?.headers.get?.("content-type"))),H=(f.payload?.length||0)>0?x(f.payload):void 0,F;try{F=await a.publish(f,H)}catch(Q){s.events.emit("error",Q,e,f,a),Jt.warn?.(Q),f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:F===!1?144:0},f.topic);break;case"pubrec":g({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":a.acknowledge(f.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,a?.disconnect(!0),s.events.emit("disconnected",a,e),s.sessions.delete(a),zr(!0,"connection","mqtt","disconnect"),Jt.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(R){s.events.emit("error",R,e,f,a),Jt.error?.(R),g({cmd:"disconnect"})}function g(R,L){let O=(0,wR.generate)(R,c);t(O),qe(O.length,"bytes-sent",L,b(R),"mqtt")}o(g,"sendPacket");function b(R){return R.qos>0?R.cmd+",qos="+R.qos:R.cmd}o(b,"packetMethodName");function S(R){return Io(R,r)}o(S,"serialize")}),l.on("error",f=>{Jt.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var wR,PJ,Ff,LJ,DJ,MJ,IR,Jt,vJ,PIe,CJ,AR,UJ=oe(()=>{wR=require("mqtt-packet");NJ();PJ=w(os());No();jn();xr();Ff=w(le());k();LJ=w(zn()),DJ=w(z()),MJ=require("events");oT();IR=(0,LJ.loggerWithTag)("auth-event"),Jt=(0,DJ.forComponent)("mqtt"),vJ=(0,Ff.get)(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(OIe,"bypassAuth");PIe=o(e=>vJ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(LIe,"start");AR=0;o(OJ,"onSocket")});function NR(e,t){if(t?.includes(".."))throw new QD(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var QD,JD=oe(()=>{QD=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(NR,"resolveBaseURLPath")});function xJ(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(a=>a[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var BJ=oe(()=>{o(xJ,"deriveCommonPatternBase")});function CR(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=o((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var XD=oe(()=>{o(CR,"deriveGlobOptions")});var FJ,ZD,LE,kJ=oe(()=>{JD();BJ();XD();FJ=require("micromatch"),ZD=class extends Error{static{o(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},LE=class{static{o(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=NR(this.name,this.config.urlPath),this.globOptions=CR(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new ZD(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,FJ.scan)(s).base),this.commonPatternBase=xJ(this.patternBases)}}});function HJ(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function uu(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(HJ(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(HJ(n,t)){t=t.slice(n.length+1);break}}}return(0,qJ.join)(e.baseURLPath,t)}var qJ,eM=oe(()=>{qJ=require("node:path");o(HJ,"pathStartsWithBase");o(uu,"deriveURLPath")});function GJ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var PR,$J,VJ,tM,KJ,YJ,OR,WJ=oe(()=>{PR=require("node:events");kJ();$J=w(z()),VJ=w(require("chokidar")),tM=require("node:path"),KJ=require("node:fs/promises");eM();YJ=require("micromatch"),OR=class extends PR.EventEmitter{static{o(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new LE(t,r,GJ(n)),this.#r=s||$J.default.loggerWithTag(t),this.ready=(0,PR.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#n(...[t,r,n]){if(r===""&&(r="/"),!(0,YJ.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,tM.join)(this.directory,r);switch(t){case"add":case"change":{let i=uu(this.#e,r,"file");(0,KJ.readFile)(s).then(a=>{let c={eventType:t,entryType:"file",contents:a,stats:n,absolutePath:s,urlPath:i};this.emit("all",c),this.emit(t,c)});break}case"unlink":{let i=uu(this.#e,r,"file"),a={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}case"addDir":case"unlinkDir":{let i=uu(this.#e,r,"directory"),a={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}}}#s(t){this.emit("error",t)}#i(){this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,tM.join)(this.#e.directory,r));return this.#t=VJ.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:o(r=>r!==this.#e.directory&&t.every(n=>!r.startsWith(n)),"ignored")}).on("all",this.#n.bind(this)).on("error",this.#s.bind(this)).on("ready",this.#i.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new LE(this.name,this.directory,GJ(t)),this.#a()}};o(GJ,"castConfig")});var LR,rM=oe(()=>{LR={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var MR,zJ,jJ,QJ,JJ,XJ,nM,sM,iM,oM,aM,DR,ZJ=oe(()=>{MR=require("events"),zJ=w(require("yaml")),jJ=w(require("chokidar")),QJ=require("node:fs/promises"),JJ=require("util"),XJ=w(z());rM();nM=class extends Error{static{o(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},sM=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},iM=class extends Error{static{o(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},oM=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},aM=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},DR=class extends MR.EventEmitter{static{o(this,"OptionsWatcher")}#e;#t;#r;#n;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||XJ.default.loggerWithTag(t),this.ready=(0,MR.once)(this,"ready"),this.#t=jJ.default.watch(r,{persistent:!1}).on("add",this.#a.bind(this)).on("change",this.#a.bind(this)).on("error",this.#d.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#a.bind(this))}#a(){(0,QJ.readFile)(this.#e,"utf-8").then(t=>{this.#n=zJ.default.parse(t),this.#n&&this.#s in this.#n?this.#r?this.#f(this.#n[this.#s],this.#r):(this.#r=this.#n[this.#s],this.emit("ready",this.#r)):this.#r&&(this.#r=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#n?(this.#o(),this.emit("remove")):(this.#o(),this.emit("ready"));return}this.emit("error",t)})}#d(t){this.emit("error",new nM(this.#e,t))}#c(t){this.#i.warn(`Configuration file ${t} was deleted. Reverting to default configuration. Recreate it to restore the options watcher.`),this.#o(),this.emit("remove")}#o(){this.#n=LR,this.#r=this.#n[this.#s]}#f(t,r,n=[]){if(!this.#l(r)||!this.#l(t)){this.#u(n,t);return}for(let s of Object.keys(r))s in t||this.#u(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let a=n.concat(s),c=this.#m(a);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#u(a,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#l(c)?this.#f(i,c,a):this.#u(a,i);continue}(0,JJ.isDeepStrictEqual)(i,c)||this.#u(a,i)}}#l(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#m(t){let r=this.#r;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#u(t,r){if(!this.#r)throw new sM;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new iM(t,r);let n=this.#r;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new oM(t,s);n=n[s]}if(n==null||typeof n!="object")throw new aM(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#r)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#r?this.#m(t):void 0}getAll(){return structuredClone(this.#r)}getRoot(){return this.#n}}});var xR,e3,vR,UR,t3=oe(()=>{xR=require("node:events");WJ();ZJ();e3=w(z());bL();vR=class extends Error{static{o(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},UR=class extends xR.EventEmitter{static{o(this,"Scope")}#e;#t;#r;#n;#s;#i;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#r=t,this.#t=r,this.#e=n,this.#i=(0,e3.loggerWithTag)(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,xR.once)(this,"ready"),this.options=new DR(t,n,this.#i).on("error",this.#d.bind(this)).on("change",this.#f.bind(this)()).on("ready",this.#a.bind(this))}get logger(){return this.#i}get name(){return this.#r}get directory(){return this.#t}#a(){this.emit("ready")}#d(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#c(t){let r=new OR(this.#r,this.#t,t,this.#i).on("error",this.#d.bind(this)).on("add",this.#o("add")).on("change",this.#o("change")).on("unlink",this.#o("unlink")).on("addDir",this.#o("addDir")).on("unlinkDir",this.#o("unlinkDir"));return this.#s.push(r),r}#o(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#f(){let t=this;return o(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#n){t.#n=t.#c(i);return}t.#n.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#l(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return t.files}handleEntry(t,r){if(t===void 0){if(this.#n)return this.#n;let s=this.#l();if(s)return this.#n=this.#c(s),this.#n;this.emit("error",new vR);return}if(typeof t=="function"){if(this.#n)return this.#n.on("all",t);let s=this.#l();if(s)return this.#n=this.#c(s),this.#n.on("all",t);this.emit("error",new vR);return}let n=this.#c(t);return r?n.on("all",r):n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),m4()}}});function du(e){return typeof e=="string"&&e.trim()!==""}function cM(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>du(t))}function i3(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function DIe(e){e.config.root&&DE.default.warn("Resource extension 'root' option is deprecated. Due to backwards compatibility reasons it does not act as assumed. The glob pattern will always be evaluated from the component directory root. The option is only used for the initial root directory handling. Please remove and modify the 'files' glob pattern instead.");let t=[];if(e.config.root&&typeof e.config.files!="string")throw new hM(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(i3(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let a=(0,ME.join)(e.directory,i);BR.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,a,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,a,e.resources))}return s}async function o3(e){let t=!1;if(t=await DIe(e),t)return t;let r=await(0,r3.default)(e.globOptions.source,{cwd:e.directory,objectMode:!0,onlyFiles:e.globOptions.onlyFiles,onlyDirectories:e.globOptions.onlyDirectories,ignore:e.globOptions.ignore});for(let n of r){let s=(0,ME.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=uu(e,n.path,"directory");BR.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=uu(e,n.path,"file"),a=await(0,n3.readFile)(s);BR.isMainThread&&e.module.setupFile?(await e.module.setupFile(a,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(a,i,s,e.resources),t=!0)}else DE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var BR,r3,DE,ME,n3,s3,FR,Oi,lM,uM,dM,fM,mM,pM,hM,EM,_M,a3=oe(()=>{BR=require("node:worker_threads"),r3=w(require("fast-glob")),DE=w(z());JD();XD();ME=require("node:path"),n3=require("node:fs/promises");eM();s3=require("micromatch"),FR=class{static{o(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!du(this.config.files)&&!cM(this.config.files)&&!i3(this.config.files))throw new lM(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!cM(this.config.files.source)&&!du(this.config.files.source))throw new uM(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new dM(this);if(this.config.files.ignore!==void 0&&!cM(this.config.files.ignore)&&!du(this.config.files.ignore))throw new fM(this)}if(this.config.root!==void 0&&!du(this.config.root))throw new pM(this);if(this.config.path!==void 0&&!du(this.config.path))throw new EM(this);if(this.config.path&&(DE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!du(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new _M(this);this.globOptions=CR(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new mM(this,r);return r.startsWith("/")&&(DE.default.warn("Leading '/' in 'files' glob pattern is deprecated. For backwards compatibility purposes, it is currently transformed to the relative path of the component, but in the future will result in an error. Paths are automatically derived from the root of the component directory. Please remove (e.g. '/web/*' -> 'web/*')."),r=r==="/"?".":r.slice(1)),r}),this.patternBases=this.globOptions.source.map(r=>(0,s3.scan)(r).base),this.baseURLPath=NR(this.name,this.config.urlPath)}},Oi=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,ME.basename)(r.directory)}) ${t}`)}},lM=class extends Oi{static{o(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},uM=class extends Oi{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},dM=class extends Oi{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},fM=class extends Oi{static{o(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},mM=class extends Oi{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},pM=class extends Oi{static{o(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},hM=class extends Oi{static{o(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},EM=class extends Oi{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},_M=class extends Oi{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(du,"isNonEmptyString");o(cM,"isArrayOfNonEmptyStrings");o(i3,"isObject");o(DIe,"handleRoots");o(o3,"processResourceExtensionComponent")});var gy={};be(gy,{getComponentName:()=>hy,loadComponent:()=>GR,loadComponentDirectories:()=>d3,setErrorReporter:()=>vIe});function d3(e,t){t&&(SM=t),e&&(bM=e);let r=[];if((0,kt.existsSync)(gM)){let s=(0,kt.readdirSync)(gM,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,on.join)(gM,a);r.push(GR(c,SM,_b,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(GR(n,SM,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{u3=!0})}function vIe(e){HR=e}function UIe(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,on.join)(e,"node_modules");(0,kt.existsSync)(s)||(0,kt.mkdirSync)(s);let i=(0,on.join)(s,"harperdb");if((0,kt.existsSync)(i)){if((0,kt.realpathSync)(i)===(0,kt.realpathSync)(RM.PACKAGE_ROOT))return t();(0,kt.rmSync)(i,{recursive:!0,force:!0})}(0,kt.symlinkSync)(RM.PACKAGE_ROOT,i,"dir"),t()}finally{da.primaryStore.unlock(e,0)}})}function f3(e,t){return e.ready.then(()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.name}. Expected a number, received: ${typeof r}`);let n,s;return da.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(f3(e,t))})?Promise.race([t.handleApplication(e),new Promise((i,a)=>setTimeout(()=>a(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{da.primaryStore.unlock(e.name,0)}):new Promise((i,a)=>{n=i,s=setTimeout(()=>{a(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)})})}async function GR(e,t,r,n,s,i){let a=(0,kt.realpathSync)(e);if(kR.has(a))return kR.get(a);kR.set(a,!0),s&&(bM=s);try{let c,l=(0,on.join)(e,"harperdb-config.yaml");if((0,kt.existsSync)(l)?c=n?(0,$R.getConfigObj)():(0,yM.parseDocument)((0,kt.readFileSync)(l,"utf8")).toJSON():!n&&(0,kt.existsSync)(l=(0,on.join)(e,"config.yaml"))?c=(0,yM.parseDocument)((0,kt.readFileSync)(l,"utf8")).toJSON():c=LR,!n)try{await UIe(e)}catch(m){Ea.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&Ea.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=qR,d={};for(let m in c){let p=`${(0,on.basename)(e)}.${m}`;qR=m;let h=c[m];if(!h)continue;let E,g=h.package;try{if(g){let O;if(n)O=(0,on.join)(e,"components",m);else{let x=e;for(;!(0,kt.existsSync)(O=(0,on.join)(x,"node_modules",m));)if(x=(0,on.dirname)(x),x.length<(0,l3.getHdbBasePath)().length){O=null;break}}if(O)E=await GR(O,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${g}`)}else E=MIe[m];if(!E)continue;qo.loading(p);let b=o(O=>(O.origin=r,Xe(O)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,R=S?.securePort||S?.https&&S.port,L=!S?.https&&S?.port;if("handleApplication"in E&&("start"in E||"startOnMainThread"in E||"handleFile"in E||"handleDirectory"in E||"setupFile"in E||"setupDirectory"in E)){let O=new Error(`Plugin ${m} is exporting old extension APIs. Remove them.`);throw qo.failed(p,O,`Component '${p}' failed to load`),O}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&Ea.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let O=new UR(m,e,l,t,Me);await f3(O,E),qo.loaded(p,`Component '${p}' loaded successfully`);continue}if(TM.isMainThread&&(E=await E.startOnMainThread?.({server:Me,ensureTable:b,port:L,securePort:R,resources:t,...h})||E,n&&S))for(let O of[L,R])try{if(+O&&!c3.includes(O)){let x=AM.get(U.HTTP_SESSIONAFFINITY);x&&Ea.default.warn("Session affinity is not recommended and may cause memory leaks"),(x||!_S)&&(c3.push(O),KP(O,x))}}catch(x){console.error("Error listening on socket",O,x,m)}if(t.isWorker&&(E=await E.start?.({server:Me,ensureTable:b,port:L,securePort:R,resources:t,...h})||E),bM.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let O=new FR({config:h,name:m,directory:e,module:E,resources:t});d[m]=await o3(O)}qo.loaded(p,`Component '${p}' loaded successfully`)}catch(b){b.message=`Could not load component '${m}' for application '${(0,on.basename)(e)}' due to: ${b.message}`,HR?.(b),((0,vE.getWorkerIndex)()===0?console:Ea.default).error(b),t.set(h.path||"/",new sl(b),null,!0),qo.failed(p,b,`Could not load component '${p}'`)}}if(qR=u,TM.isMainThread&&!u3&&i&&(0,vE.watchDir)(e,async()=>d3()),c.extensionModule||c.pluginModule){let m=await pS((0,on.join)(e,c.extensionModule||c.pluginModule));return kR.set(a,m),m}let f=Object.values(d);if(f.length>0&&f.every(m=>!m)&&t.isWorker){let m=`${e} did not load any modules, resources, or files, is this a valid component?`;HR?.(new Error(m)),((0,vE.getWorkerIndex)()===0?console:Ea.default).error(m),qo.failed((0,on.basename)(e),m)}for(let[m,p]of Object.entries(d))p||Ea.default.warn(`Component ${m} from (${(0,on.basename)(e)}) did not load any functionality.`)}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,HR?.(c),t.set("",new sl(c))}}var kt,on,TM,yM,AM,RM,Ea,vE,l3,$R,gM,bM,u3,SM,MIe,c3,kR,HR,qR,hy,Wh=oe(()=>{kt=require("node:fs"),on=require("node:path"),TM=require("node:worker_threads"),yM=require("yaml"),AM=w(le()),RM=w(At());k();jq();iG();SG();IG();wG();qG();Y2();W2();j2();Ea=w(z());tJ();vE=w(Je());bN();xr();Ne();WP();l3=w(le());mJ();Cy();yJ();ls();UJ();$R=w(Et());Fp();kA();t3();a3();kP();lE();Sp();rM();gM=(0,$R.resolvePath)(AM.get(U.COMPONENTSROOT)),bM=new Map;o(d3,"loadComponentDirectories");MIe={REST:SS,rest:SS,graphql:hN,graphqlSchema:mN,roles:RN,jsResource:AN,fastifyRoutes:MD,login:wN,static:UD,operationsApi:FD,customFunctions:{},http:py,clustering:VD,replication:Yo,authentication:Zh,mqtt:jD,loadEnv:xD,logging:Ea.default,dataLoader:BD},c3=[],kR=new Map;o(vIe,"setErrorReporter");hy=o(()=>qR,"getComponentName");o(UIe,"symlinkHarperModule");o(f3,"sequentiallyHandleApplication");o(GR,"loadComponent")});var Sy=v((b$e,m3)=>{var{isMainThread:IM}=require("worker_threads"),{getTables:xIe}=(Ne(),D(ft)),{loadComponentDirectories:BIe,loadComponent:FIe}=(Wh(),D(gy)),{resetResources:kIe}=(Ua(),D(HA)),HIe=Et(),{dirname:qIe}=require("path"),{getConnection:GIe}=xt(),$Ie=le(),{CONFIG_PARAMS:VIe}=(k(),D(Y)),{loadCertificates:KIe}=ds(),{installApplications:YIe}=(Dy(),D(Ly)),{loadAndWatchLicensesDir:WIe}=(Gh(),D(cy)),wM=new Map;async function zIe(e=!1){!IM&&$Ie.get(VIe.CLUSTERING_ENABLED)&&GIe();try{IM&&await YIe()}catch(n){console.error(n)}let t=kIe();xIe(),t.isWorker=e,IM&&WIe(),await KIe(),await FIe(qIe(HIe.getConfigFilePath()),t,"hdb",!0,wM),await BIe(wM,t);let r=[];for(let[n]of wM)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o(zIe,"loadRootComponents");m3.exports.loadRootComponents=zIe});var Je=v((I$e,Li)=>{"use strict";XE();var{Worker:jIe,MessageChannel:QIe,parentPort:ho,isMainThread:LM,threadId:JIe,workerData:Eo}=require("worker_threads"),{PACKAGE_ROOT:XIe}=At(),{join:_3,isAbsolute:ZIe,extname:ewe}=require("path"),{server:g3}=(xr(),D(nm)),{watch:twe,readdir:rwe}=require("fs/promises"),{totalmem:p3}=require("os"),kf=(k(),D(Y)),S3=le(),Pi=z(),{randomBytes:nwe}=require("crypto"),{_assignPackageExport:swe}=ri(),h3=1024*1024,_a=[],Js=[],iwe=50,DM=1e4,owe="restart",T3="request_thread_info",y3="resource_report",R3="thread_info",b3="added-port",awe="ack",NM;swe("threads",Js);Li.exports={startWorker:CM,restartWorkers:vM,shutdownWorkers:O3,shutdownWorkersNow:fwe,workers:_a,setMonitorListener:Twe,onMessageFromWorkers:mwe,onMessageByType:L3,broadcast:hwe,broadcastWithAcknowledgement:_we,setChildListenerByType:dwe,getWorkerIndex:A3,getWorkerCount:I3,getTicketKeys:N3,setMainIsWorker:lwe,setTerminateTimeout:cwe,restartNumber:Eo?.restartNumber||1};Js.onMessageByType=L3;Js.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Js.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Li.exports.whenThreadsStarted=new Promise(e=>{Li.exports.threadsHaveStarted=e});var MM;function cwe(e){DM=e}o(cwe,"setTerminateTimeout");function A3(){return Eo?Eo.workerIndex:MM?0:void 0}o(A3,"getWorkerIndex");function I3(){return Eo?Eo.workerCount:MM?1:void 0}o(I3,"getWorkerCount");function lwe(e){MM=e,Li.exports.threadsHaveStarted()}o(lwe,"setMainIsWorker");var w3=1,VR;function N3(){return VR||(VR=LM?nwe(48):Eo.ticketKeys,VR)}o(N3,"getTicketKeys");Object.defineProperty(g3,"workerIndex",{get(){return A3()}});Object.defineProperty(g3,"workerCount",{get(){return I3()}});var C3={[T3](e,t){gwe(t)},[y3](e,t){Swe(t,e)}};function CM(e,t={}){let r=process.constrainedMemory?.()||p3();r=Math.min(r,p3(),2e4*h3);let n=S3.get(kf.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/h3/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],a=[];for(let l of Js){let u=new QIe;u.existingPort=l,i.push(u),a.push(u.port2)}ewe(e)||(e+=".js");let c=new jIe(ZIe(e)?e:_3(XIe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps","--expose-internals"],argv:process.argv.slice(2),workerData:{addPorts:a,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:w3=t.threadCount,name:t.name,restartNumber:Li.exports.restartNumber,ticketKeys:N3()},transferList:a,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:b3,port:l,threadId:c.threadId},[l]);return YR(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>CM(e,t),c.on("error",l=>{Pi.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{_a.splice(_a.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<iwe?(t.unexpectedRestarts=c.unexpectedRestarts+1,CM(e,t)):Pi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{C3[l.type]?.(l,c)}),_a.push(c),Rwe(),t.onStarted&&t.onStarted(c),c.name=t.name,c}o(CM,"startWorker");var uwe=[kf.THREAD_TYPES.HTTP];async function vM(e=null,t=Math.max(w3>3,1),r=!0){if(LM){try{process.chdir(process.cwd())}catch(a){Pi.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=Sy();await a()}Li.exports.restartNumber++,t<1&&(t=t*_a.length);let n=[],s=[];for(let a of _a.slice(0)){if(e&&a.name!==e||a.wasShutdown)continue;Pi.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:Li.exports.restartNumber,type:kf.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=uwe.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Pi.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},DM*2).unref();a.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&a.startCopy(),u()})});if(n.push(l),c&&r){let u=a.startCopy(),d=new Promise(f=>{let m=o(p=>{p.type===kf.ITC_EVENT_TYPES.CHILD_STARTED&&(Pi.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Pi.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}=Af();r&&(e==="http"||!e)&&S3.get(kf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else ho.postMessage({type:owe,workerType:e})}o(vM,"restartWorkers");function dwe(e,t){C3[e]=t}o(dwe,"setChildListenerByType");function O3(e){return vM(e,1/0,!1)}o(O3,"shutdownWorkers");function fwe(e){return O3(e),Promise.all(_a.map(t=>t.terminate()))}o(fwe,"shutdownWorkersNow");var P3=[];function mwe(e){P3.push(e)}o(mwe,"onMessageFromWorkers");var OM=new Map;function L3(e,t){let r=OM.get(e);r||OM.set(e,r=[]),r.push(t)}o(L3,"onMessageByType");var pwe=10;async function hwe(e,t){let r=0;for(let n of Js)try{n.postMessage(e),r++>pwe&&(r=0,await new Promise(setImmediate))}catch(s){Pi.error("Unable to send message to worker",s)}t&&M3(e,null)}o(hwe,"broadcast");var KR=new Map,Ewe=1;function _we(e){return new Promise(t=>{let r=0;for(let n of Js)try{let s=Ewe++,i=o(()=>{KR.delete(s),--r===0&&t(),n!==ho&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,KR.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of KR)a.port===n&&a()})),n.postMessage(e),r++}catch(s){Pi.error("Unable to send message to worker",s)}r===0&&t()})}o(_we,"broadcastWithAcknowledgement");function gwe(e){e.postMessage({type:R3,workers:D3()})}o(gwe,"sendThreadInfo");function D3(){let e=Date.now();return _a.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}o(D3,"getChildWorkerInfo");function Swe(e,t){e.resources=t,e.resources.updated=Date.now()}o(Swe,"recordResourceReport");var PM;function Twe(e){PM=e}o(Twe,"setMonitorListener");var ywe=1e3,E3=!1;function Rwe(){E3||(E3=!0,setInterval(()=>{for(let e of _a){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}PM&&PM()},ywe).unref())}o(Rwe,"startMonitoring");var bwe=1e3;if(ho&&Eo?.addPorts){YR(ho);for(let e=0,t=Eo.addPorts.length;e<t;e++){let r=Eo.addPorts[e];r.threadId=Eo.addThreadIds[e],YR(r)}setInterval(()=>{let e=process.memoryUsage();ho.postMessage({type:y3,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},bwe).unref(),NM=o(()=>new Promise((e,t)=>{ho.on("message",r),ho.postMessage({type:T3});function r(n){n.type===R3&&(ho.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else NM=D3;Li.exports.getThreadInfo=NM;function YR(e,t){Js.push(e),e.on("message",r=>{if(r.type===b3)r.port.threadId=r.threadId,YR(r.port);else if(r.type===awe){let n=KR.get(r.id);n&&n()}else M3(r,e)}).on("close",()=>{Js.splice(Js.indexOf(e),1)}).on("exit",()=>{Js.splice(Js.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(YR,"addPort");function M3(e,t){for(let n of P3)n(e,t);let r=OM.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Pi.error(s)}}o(M3,"notifyMessageListeners");if(LM){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await rwe(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(_3(s,a.name));try{for await(let{filename:a}of twe(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await vM(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(a){console.warn("Error trying to watch component directory",s,a)}},"watchDir");Li.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else ho.on("message",async e=>{let{type:t}=e;t===kf.ITC_EVENT_TYPES.SHUTDOWN&&(Li.exports.restartNumber=e.restartNumber,ho.unref(),setTimeout(()=>{Pi.warn("Thread did not voluntarily terminate",JIe),process.exit(0)},DM).unref())})});var k3=v((O$e,F3)=>{"use strict";var{promises:Hf,createReadStream:Awe,createWriteStream:Iwe}=require("fs"),{createGzip:wwe}=require("zlib"),{promisify:Nwe}=require("util"),{pipeline:Cwe}=require("stream"),Owe=Nwe(Cwe),xM=require("path"),B3=le();B3.initSync();var WR=z(),{CONFIG_PARAMS:Pwe,ITC_EVENT_TYPES:N$e}=(k(),D(Y)),{onMessageFromWorkers:C$e}=Je(),{convertToMS:v3}=ce(),{onStorageReclamation:Lwe}=(U_(),D(XU)),Dwe=6e4,Mwe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",vwe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",UM,U3;F3.exports=Uwe;function Uwe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(Lwe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(Mwe);if(!i)throw new Error(vwe);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=v3(r));let d;return UM=Date.now(),WR.trace("Log rotate enabled, maxSize:",t,"interval:",r),U3=setInterval(async()=>{if(l){let f;f=await Hf.stat(e.path),f.size>=l&&(d=await x3(e.path,i))}if(u&&Date.now()-UM>=u&&(d=await x3(e.path,i),UM=Date.now()),n||c){let f=v3(n??"1M")/(1+c);c=0;let m=await Hf.readdir(i);for(let p of m)try{let h=await Hf.stat(xM.join(i,p));Date.now()-h.mtimeMs>f&&await Hf.unlink(xM.join(i,p))}catch(h){WR.error("Error trying to remove log",p,h)}}},a??Dwe).unref(),{end(){clearInterval(U3)},getLastRotatedLogPath(){return d}}}o(Uwe,"logRotator");async function x3(e,t){let r=B3.get(Pwe.LOGGING_ROTATION_COMPRESS),n=xM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await Hf.rename(e,n),r&&(e=n,n+=".gz",await Owe(Awe(e),wwe(),Iwe(n)),await Hf.unlink(e)),WR.closeLogFile(),WR.notify(`hdb.log rotated, old log moved to ${n}`),n}o(x3,"moveLogFile")});var V3={};be(V3,{RootConfigWatcher:()=>BM});var H3,q3,G3,zR,$3,BM,K3=oe(()=>{H3=w(require("chokidar")),q3=require("node:fs/promises"),G3=w(Et()),zR=require("node:stream"),$3=require("yaml"),BM=class extends zR.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;ready;constructor(){super(),this.#e=(0,G3.getConfigFilePath)(),this.ready=(0,zR.once)(this,"ready"),this.#t=H3.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,q3.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,$3.parse)(t);if(!this.#r){this.#r=r,this.emit("ready",this.#r);return}this.emit("change",this.#r=r)}).catch(t=>{})}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var z=v((v$e,rb)=>{"use strict";var ga=require("fs-extra"),{workerData:xwe,threadId:Bwe,isMainThread:J3}=require("worker_threads"),BE=require("path"),X3=require("yaml"),Z3=require("properties-reader"),$r=(k(),D(Y)),Y3=$c(),Fwe=require("os"),{PACKAGE_ROOT:KM}=At(),{_assignPackageExport:kwe}=ri(),{Console:Hwe}=require("console"),kM=process.env.IS_SCRIPTED_SERVICE?function(){}:process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),W3=new Map,{join:Sa}=BE,z3=1e4,ar={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},qwe={STDOUT:"stdOut",STDERR:"stdErr"},M$e=Sa(KM,"logs"),Gwe=Sa(KM,"config/yaml/",$r.HDB_DEFAULT_CONFIG_FILE),$we=1e4,FE,kE,jR,_o,HM,FM,JR,Ot,ys,XR,ZR,qf,xE,UE;function QR(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=BE.dirname(n)):t.root?n=Sa(t.root,HM):(n=Ot.path,t.root||(t.root=BE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=ar[t.level]??Ot?.level??ar.info,eX(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Ot.path===e.path&&r)}o(QR,"updateLogger");function eX(e){let t=e.conditional??(e.conditional={});t.notify=ar.notify>=e.level?e.notify.bind(e):void 0,t.fatal=ar.fatal>=e.level?e.fatal.bind(e):void 0,t.error=ar.error>=e.level?e.error.bind(e):void 0,t.warn=ar.warn>=e.level?e.warn.bind(e):void 0,t.info=ar.info>=e.level?e.info.bind(e):void 0,t.debug=ar.debug>=e.level?e.debug.bind(e):void 0,t.trace=ar.trace>=e.level?e.trace.bind(e):void 0}o(eX,"updateConditional");async function qM(){UE||(UE=new lNe,await UE.ready,UE.on("change",qM));let e=UE.config,t=e.logging??{};QR(Ot,t),JR=Ot.path,FE=t.console??!1,t.external&&QR(ys,t.external);for(let r in e){let n=e[r];n.logging?QR(Ot.forComponent(r),n.logging,r):Ot.hasComponent(r)&&QR(Ot.forComponent(r),t,r)}}o(qM,"updateLogSettings");var GM=class extends Hwe{static{o(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){In="trace",this.level<=ar.trace&&super.info(...t),In="info"}debug(...t){In="debug",this.level<=ar.debug&&super.info(...t),In="info"}info(...t){In="info",this.level<=ar.info&&super.info(...t),In="info"}warn(...t){In="warn",this.level<=ar.warn&&super.warn(...t),In="info"}error(...t){In="error",this.level<=ar.error&&super.error(...t),In="info"}fatal(...t){qf=!0;try{In="fatal",this.level<=ar.fatal&&super.error(...t),In="info"}finally{qf=!1}}notify(...t){qf=!0;try{In="notify",this.level<=ar.notify&&super.info(...t),In="info"}finally{qf=!1}}withTag(t){return rX(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};xE===void 0&&tX();rb.exports={notify:Xwe,fatal:Zwe,error:VM,warn:eNe,info:jwe,debug:Jwe,trace:Qwe,logLevel:_o,loggerWithTag:rX,suppressLogging:Wwe,initLogSettings:tX,logCustomLevel:tNe,closeLogFile:nX,createLogger:tb,logsAtLevel:Kwe,getLogFilePath:o(()=>JR,"getLogFilePath"),forComponent:o(e=>Ot.forComponent(e),"forComponent"),setMainLogger:aNe,setLogLevel:nNe,OUTPUTS:qwe,AuthAuditLog:cNe,start:qM,startOnMainThread:qM,errorToString:oNe,disableStdio:Vwe};function Vwe(){kM=o(function(){},"nativeStdWrite")}o(Vwe,"disableStdio");rb.exports.externalLogger={notify(...e){ys.notify(...e)},fatal(...e){ys.fatal(...e)},error(...e){ys.error(...e)},warn(...e){ys.warn(...e)},info(...e){ys.info(...e)},debug(...e){ys.debug(...e)},trace(...e){ys.trace(...e)},withTag(e){return ys.withTag(e)}};kwe("logger",rb.exports.externalLogger);function Kwe(e){return ar[_o]<=ar[e]}o(Kwe,"logsAtLevel");function tX(e=!1){try{if(xE===void 0||e){nX();let t=rNe(),r=Y3(["ROOTPATH"]);try{xE=Z3(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!ga.pathExistsSync(Sa(r.ROOTPATH,$r.HDB_CONFIG_FILE)))throw s}let n;if({level:_o,configLogPath:FM,toFile:kE,logConsole:FE,rotation:n,toStream:jR}=sNe(r.ROOTPATH?Sa(r.ROOTPATH,$r.HDB_CONFIG_FILE):xE.get("settings_path")),HM=$r.LOG_NAMES.HDB,JR=Sa(FM,HM),Ot=tb({path:JR,level:_o,stdStreams:jR,rotation:n}),ys=Ot.forComponent("external"),ys.tag=null,J3)try{require("segfault-handler").registerHandler(Sa(FM,"crash.log"))}catch{}}}catch(t){if(xE=void 0,t.code===$r.NODE_ERROR_CODES.ENOENT||t.code===$r.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=Y3(Object.keys($r.CONFIG_PARAM_MAP),!0);for(let s in r){let i=$r.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let a=r[s];if(i===$r.CONFIG_PARAMS.LOGGING_LEVEL){_o=a;continue}i===$r.CONFIG_PARAMS.LOGGING_CONSOLE&&(FE=i)}let{defaultLevel:n}=iNe();kE=!1,jR=!0,_o=_o===void 0?n:_o,Ot=tb({level:_o}),ys=Ot.forComponent("external"),ys.tag=null;return}throw VM("Error initializing log settings"),VM(t),t}process.env.DEV_MODE&&(jR=!0),Ywe()}o(tX,"initLogSettings");var vc=!0;function Ywe(){kE&&(process.stdout.write=function(e){return typeof e=="string"&&vc&&FE&&(e=e.toString(),e[e.length-1]===`
|
|
135
|
-
`&&(e=e.slice(0,-1)),ZR(e)),kM.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&vc&&
|
|
136
|
-
`&&(e=e.slice(0,-1)),ZR(e)),kM.apply(process.stderr,arguments)})}o(
|
|
132
|
+
`,""):null;try{a[l].npm_output=JSON.parse(d)}catch{a[l].npm_output=d}try{a[l].npm_error=JSON.parse(f)}catch{a[l].npm_error=f}}catch(d){d.stderr?a[l].npm_error=$ye(d.stderr):a[l].npm_error=d.message;continue}}return r4.info(`finished installModules with response ${a}`),a.warning=t,a}o(Gye,"installModules");function $ye(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
|
|
133
|
+
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}o($ye,"parseNPMStdErr");function Vye(e){let t=xy.object({projects:xy.array().min(1).items(xy.string()).required(),dry_run:xy.boolean().default(!1)});return Fye.validateBySchema(e,t)}o(Vye,"modulesValidator")});var SL={};be(SL,{describeMetric:()=>l4,describeMetricOp:()=>gL,get:()=>a4,getOp:()=>EL,listMetrics:()=>c4,listMetricsOp:()=>_L});async function Yye(e){return(await q_().get(e)).hostname}function s4(e,t){return e.length===0||e.includes(t)}function EL(e){return iE.trace?.("get_analytics request:",e),a4(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function o4(e){return"conditions"in e?{...e,conditions:e.conditions.map(o4)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function a4(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(o4));let a=t??[];s4(a,"id")||a.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i};return a.length>0&&(c.select=a),iE.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],s4(a,"node")&&(iE.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await Yye(d)),iE.trace?.("get_analytics result:",JSON.stringify(u)),u})}function _L(e){return c4(e.metric_types)}async function c4(e=["builtin"]){let t=[],r=Object.values(Lo);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,a=await databases.system.hdb_analytics.search(s);for await(let c of a)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function gL(e){return l4(e.metric)}async function l4(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let a in s)n.push({name:a,type:typeof s[a]});let i={attributes:n};return iE.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var i4,Kye,iE,TL=oe(()=>{i4=w(z());EA();_A();({forComponent:Kye}=i4.default),iE=Kye("analytics").conditional;o(Yye,"lookupHostname");o(s4,"isSelected");o(EL,"getOp");o(o4,"conformCondition");o(a4,"get");o(_L,"listMetricsOp");o(c4,"listMetrics");o(gL,"describeMetricOp");o(l4,"describeMetric")});var By,Fy,oE,ky=oe(()=>{By={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},Fy=Object.keys(By),oE="primary"});function d4(e){return u4.validateBySchema(e,Qye)}var aE,u4,Wye,zye,jye,Qye,f4=oe(()=>{aE=w(require("joi")),u4=w(ot());ky();Wye=Fy,zye=Object.entries(By).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),jye=o(()=>{let e=aE.default.string().min(1).max(512);return Object.entries(By).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:aE.default.string().valid(...r.allowedValues).messages({"any.only":zye[t]})}))}),e.required()},"createStatusValidationSchema"),Qye=aE.default.object({id:aE.default.string().valid(...Wye).required(),status:jye()});o(d4,"validateStatus")});function m4(){yL||(yL=da.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),RL=new Uint8Array(yL))}function p4(){m4(),RL[0]=1}function h4(){return m4(),RL[0]===1}var yL,RL,bL=oe(()=>{cE();o(m4,"ensureInitialized");o(p4,"requestRestart");o(h4,"restartNeeded")});var CL={};be(CL,{DEFAULT_STATUS_ID:()=>oE,STATUS_IDS:()=>Fy,Status:()=>da,clear:()=>IL,get:()=>wL,set:()=>NL});function uE(){return AL||(AL=Xe({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),AL}function IL({id:e}){return lE.debug?.("clearStatus",e),uE().delete(e)}async function Xye(){lE.debug?.("getAllStatus");let e=uE().get({}),t=await gp.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=h4();return{systemStatus:e,componentStatus:r,restartRequired:n}}function wL({id:e}){return e?(lE.debug?.("getStatus",e),uE().get(e)):(lE.debug?.("getStatus","all"),Xye())}function NL({status:e,id:t=oE}){let r=d4({status:e,id:t});if(r)throw(0,Hy.handleHDBError)(r,r.message,Jye.BAD_REQUEST);return lE.debug?.("setStatus",t,e),uE().put(t,{status:e})}var Hy,E4,Jye,AL,da,lE,cE=oe(()=>{Ne();Hy=w(Ee()),E4=w(zn());f4();ky();Sp();bL();ky();({HTTP_STATUS_CODES:Jye}=Hy.hdbErrors);o(uE,"getStatusTable");da={get primaryStore(){return uE().primaryStore}},lE=(0,E4.loggerWithTag)("status");o(IL,"clearStatus");o(Xye,"getAllStatus");o(wL,"getStatus");o(NL,"setStatus")});var DL={};be(DL,{getFingerprint:()=>PL,getRegistrationInfo:()=>OL,setLicense:()=>LL});function OL(){return{version:_4.packageJson.version,deprecated:!0}}function PL(){return{message:"this-is-deprecated",deprecated:!0}}function LL(){return{deprecated:!0}}var _4,ML=oe(()=>{_4=w(bt());o(OL,"getRegistrationInfo");o(PL,"getFingerprint");o(LL,"setLicense")});var S4=v((qHe,g4)=>{"use strict";var vL=class{static{o(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};g4.exports=vL});var y4=v(($He,T4)=>{"use strict";var UL=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};T4.exports=UL});var BL=v((KHe,b4)=>{"use strict";var R4=S4(),Zye=y4(),{HDB_ERROR_MSGS:eRe}=Kr(),xL=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=eRe.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 R4(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Zye(c,s[c]);i.push(l)});let a=`${r}_${n}`;if(this.unauthorized_access[a])this.unauthorized_access[a].required_attribute_permissions=i;else{let c=new R4(r,n,[],i);this.unauthorized_access[a]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};b4.exports=xL});var Vy=v((WHe,H4)=>{"use strict";var FL=un(),qy=fn(),Ys=mh(),mE=Ja(),kL=Ga(),tRe=qC(),rRe=M1(),pE=os(),Gy=xp(),Pr=z(),nRe=YC(),sRe=IT(),iRe=SO(),oRe=NT(),aRe=RO(),cRe=bO(),lRe=wO(),uRe=CO(),HL=DT(),fa=ce(),dRe=fY(),w4=Af(),bn=(k(),D(Y)),N4=Ej(),fRe=_h(),C4=(Id(),D($p)),O4=(Ny(),D(Zh)),P4=Et(),gr=uL(),mRe=require("alasql"),L4=Uy(),pRe=hL(),wf=ds(),D4=(Qd(),D(jd)),qL=(TL(),D(SL)),GL=(cE(),D(CL)),M4=(Gh(),D(ay)),$L=(ML(),D(DL)),v4=BL(),{handleHDBError:$n,hdbErrors:U4}=Ee(),{HDB_ERROR_MSGS:nn,HTTP_STATUS_CODES:dE}=U4,Z=new Map,x4="delete",Cc="insert",Ws="read",nu="update",fE="describe",A4=mE.describeSchema.name,I4=mE.describeTable.name,B4={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},hRe={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},ERe="catchup",_Re="handleGetJob",gRe="handleGetJobsByStartDate",$y={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},SRe=[Ys.createTable.name,Ys.createAttribute.name,Ys.dropTable.name,Ys.dropAttribute.name],F4={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},se=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};Z.set(FL.insert.name,new se(!1,[Cc]));Z.set(FL.update.name,new se(!1,[nu]));Z.set(FL.upsert.name,new se(!1,[Cc,nu]));Z.set(qy.searchByConditions.name,new se(!1,[Ws]));Z.set(qy.searchByHash.name,new se(!1,[Ws]));Z.set(qy.searchByValue.name,new se(!1,[Ws]));Z.set(qy.search.name,new se(!1,[Ws]));Z.set(Ys.createSchema.name,new se(!0,[]));Z.set(Ys.createTable.name,new se(!0,[]));Z.set(Ys.createAttribute.name,new se(!1,[Cc]));Z.set(Ys.dropSchema.name,new se(!0,[]));Z.set(Ys.dropTable.name,new se(!0,[]));Z.set(Ys.dropAttribute.name,new se(!0,[]));Z.set(mE.describeSchema.name,new se(!1,[Ws]));Z.set(mE.describeTable.name,new se(!1,[Ws]));Z.set(kL.deleteRecord.name,new se(!1,[x4]));Z.set(pE.addUser.name,new se(!0,[]));Z.set(pE.alterUser.name,new se(!0,[]));Z.set(pE.dropUser.name,new se(!0,[]));Z.set(pE.listUsersExternal.name,new se(!0,[]));Z.set(Gy.listRoles.name,new se(!0,[]));Z.set(Gy.addRole.name,new se(!0,[]));Z.set(Gy.alterRole.name,new se(!0,[]));Z.set(Gy.dropRole.name,new se(!0,[]));Z.set(nRe.name,new se(!0,[]));Z.set(sRe.name,new se(!0,[]));Z.set(iRe.name,new se(!0,[]));Z.set(oRe.name,new se(!0,[]));Z.set(aRe.name,new se(!0,[]));Z.set(cRe.name,new se(!0,[]));Z.set(HL.setRoutes.name,new se(!0,[]));Z.set(HL.getRoutes.name,new se(!0,[]));Z.set(HL.deleteRoutes.name,new se(!0,[]));Z.set(P4.setConfiguration.name,new se(!0,[]));Z.set(lRe.clusterStatus.name,new se(!0,[]));Z.set(uRe.name,new se(!0,[]));Z.set(kL.deleteFilesBefore.name,new se(!0,[]));Z.set(kL.deleteAuditLogsBefore.name,new se(!0,[]));Z.set(w4.restart.name,new se(!0,[]));Z.set(w4.restartService.name,new se(!0,[]));Z.set(tRe.name,new se(!0,[]));Z.set(rRe.name,new se(!0,[Ws]));Z.set(fRe.systemInformation.name,new se(!0,[]));Z.set(P4.getConfiguration.name,new se(!0,[]));Z.set(L4.readTransactionLog.name,new se(!0,[]));Z.set(L4.deleteTransactionLogsBefore.name,new se(!0,[]));Z.set(pRe.installModules.name,new se(!0,[]));Z.set(wf.createCsr.name,new se(!0,[]));Z.set(wf.signCertificate.name,new se(!0,[]));Z.set(wf.listCertificates.name,new se(!0,[]));Z.set(wf.addCertificate.name,new se(!0,[]));Z.set(wf.removeCertificate.name,new se(!0,[]));Z.set(wf.getKey.name,new se(!0,[]));Z.set(D4.addNodeBack.name,new se(!0,[]));Z.set(D4.removeNodeBack.name,new se(!0,[]));Z.set(qL.getOp.name,new se(!1,[Ws]));Z.set(qL.listMetricsOp.name,new se(!1,[Ws]));Z.set(qL.describeMetricOp.name,new se(!1,[Ws]));Z.set(GL.clear.name,new se(!0,[]));Z.set(GL.get.name,new se(!0,[]));Z.set(GL.set.name,new se(!0,[]));Z.set(M4.installUsageLicenseOp.name,new se(!0,[]));Z.set(M4.getUsageLicensesOp.name,new se(!0,[]));Z.set($L.getFingerprint.name,new se(!0,[]));Z.set($L.setLicense.name,new se(!0,[]));Z.set(C4.createTokens.name,new se(!1,[]));Z.set(C4.refreshOperationToken.name,new se(!1,[]));Z.set(O4.login.name,new se(!1,[]));Z.set(O4.logout.name,new se(!1,[]));Z.set(gr.customFunctionsStatus.name,new se(!0,[]));Z.set(gr.getCustomFunctions.name,new se(!0,[]));Z.set(gr.getComponents.name,new se(!0,[]));Z.set(gr.getComponentFile.name,new se(!0,[]));Z.set(gr.setComponentFile.name,new se(!0,[]));Z.set(gr.dropComponent.name,new se(!0,[]));Z.set(gr.getCustomFunction.name,new se(!0,[]));Z.set(gr.setCustomFunction.name,new se(!0,[]));Z.set(gr.dropCustomFunction.name,new se(!0,[]));Z.set(gr.addComponent.name,new se(!0,[]));Z.set(gr.dropCustomFunctionProject.name,new se(!0,[]));Z.set(gr.packageComponent.name,new se(!0,[]));Z.set(gr.deployComponent.name,new se(!0,[]));Z.set(gr.addSSHKey.name,new se(!0,[]));Z.set(gr.updateSSHKey.name,new se(!0,[]));Z.set(gr.deleteSSHKey.name,new se(!0,[]));Z.set(gr.listSSHKeys.name,new se(!0,[]));Z.set(gr.setSSHKnownHosts.name,new se(!0,[]));Z.set(gr.getSSHKnownHosts.name,new se(!0,[]));Z.set($L.getRegistrationInfo.name,new se(!1,[]));Z.set(pE.userInfo.name,new se(!1,[]));Z.set(mE.describeAll.name,new se(!1,[]));Z.set(_Re,new se(!1,[]));Z.set(gRe,new se(!0,[]));Z.set(ERe,new se(!0,[]));Z.set($y.CSV_DATA_LOAD,new se(!1,[Cc,nu]));Z.set($y.CSV_URL_LOAD,new se(!1,[Cc,nu]));Z.set($y.CSV_FILE_LOAD,new se(!1,[Cc,nu]));Z.set($y.IMPORT_FROM_S3,new se(!1,[Cc,nu]));Z.set(F4.EXPORT_TO_S3,new se(!0,[]));Z.set(F4.EXPORT_LOCAL,new se(!0,[]));Z.set(bn.VALID_SQL_OPS_ENUM.DELETE,new se(!1,[x4]));Z.set(bn.VALID_SQL_OPS_ENUM.SELECT,new se(!1,[Ws]));Z.set(bn.VALID_SQL_OPS_ENUM.INSERT,new se(!1,[Cc]));Z.set(bn.VALID_SQL_OPS_ENUM.UPDATE,new se(!1,[nu]));H4.exports={verifyPerms:yRe,verifyPermsAst:TRe,verifyBulkLoadAttributePerms:bRe};function TRe(e,t,r){if(fa.isEmptyOrZeroLength(e))throw Pr.info("verify_perms_ast has an empty user parameter"),$n(new Error);if(fa.isEmptyOrZeroLength(t))throw Pr.info("verify_perms_ast has an empty user parameter"),$n(new Error);if(fa.isEmptyOrZeroLength(r))throw Pr.info("verify_perms_ast has a null operation parameter"),$n(new Error);try{let n=new v4,s=new dRe(e),i=s.getSchemas(),a=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Pr.info("No schemas defined in verifyPermsAst(), will not continue."),$n(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&B4[r])throw $n(new Error,nn.DROP_SYSTEM,dE.FORBIDDEN);if(c&&!l)return null;let u=N4.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof mRe.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let f=0;f<i.length;f++){let m=s.getTablesBySchemaName(i[f]);m&&a.set(i[f],m)}let d=k4(t,r,a,n);return d||(a.forEach((f,m)=>{for(let p=0;p<f.length;p++){let h=s.getAttributesBySchemaTableName(m,f[p]),E=KL(t.role.permission,m,f[p]);VL(h,E,r,f[p],m,n)}}),n.getPermsResponse())}catch(n){throw $n(n)}}o(TRe,"verifyPermsAst");function yRe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Pr.info("null required parameter in verifyPerms"),$n(new Error,nn.DEFAULT_INVALID_REQUEST,dE.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,a=new Map;s&&i&&a.set(s,[i]);let c=new v4;if(fa.isEmptyOrZeroLength(e.hdb_user?.role)||fa.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Pr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(nn.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=a.has(bn.SYSTEM_SCHEMA_NAME)||s===bn.SYSTEM_SCHEMA_NAME;if(l&&d&&hRe[e.operation]&&(i===bn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===bn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===bn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&B4[r])throw $n(new Error,nn.DROP_SYSTEM,dE.FORBIDDEN);if(l&&!d||u===!0&&(r===Ys.createSchema.name||r===Ys.dropSchema.name))return null;if(SRe.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=N4.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===A4||r===I4)&&!f.super_user){if(s===bn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(nn.SCHEMA_PERM_ERROR(s));if(r===A4&&(!f[s]||!f[s][fE]))return c.handleInvalidItem(nn.SCHEMA_NOT_FOUND(s));if(r===I4&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][fE]))return c.handleInvalidItem(nn.TABLE_NOT_FOUND(s,i))}let m=k4(e.hdb_user,r,a,c,n);if(m)return m;if(Z.get(r)&&Z.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&bn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],g=f[s].tables[i];g[bn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(S=>S[bn.PERMS_CRUD_ENUM.READ]).forEach(S=>{E.push(S.attribute_name)}):E=global.hdb_schema[s][i].attributes.map(b=>b.attribute),e.get_attributes=E)}let p=RRe(e),h=KL(e.hdb_user?.role?.permission,s,i);return VL(p,h,r,i,s,c,n),c.getPermsResponse()}o(yRe,"verifyPerms");function k4(e,t,r,n,s){if(fa.arrayHasEmptyValues([e,t,r]))throw Pr.info("hasPermissions has an invalid parameter"),$n(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||Z.get(t).requires_su))return null;if(!Z.get(t))throw Pr.info(`operation ${t} not found.`),$n(new Error,nn.OP_NOT_FOUND(t),dE.BAD_REQUEST);if(Z.get(t)&&Z.get(t).requires_su)return Pr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(nn.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!a[l]||a[l][fE]===!1){n.addInvalidItem(nn.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(nn.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=a[l].tables[d];if(!f||f[fE]===!1)n.addInvalidItem(nn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=Z.get(t).perms;!fa.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],g=f[E];(g==null||g===!1)&&(Pr.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=nn.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Pr.error(p),Pr.error(m),$n(U4.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}o(k4,"hasPermissions");function VL(e,t,r,n,s,i,a){if(!e||!t)throw Pr.info("no attributes specified in checkAttributePerms."),$n(new Error);let c=Z.get(r).perms;if(!c||c==="")throw Pr.info(`no permissions found for ${r} in checkAttributePerms().`),$n(new Error);if(fa.isEmptyOrZeroLength(t))return Pr.info("No role permissions set (this is OK)."),null;a&&c.includes(a)&&(c=[a]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[fE]===!1){i.addInvalidItem(nn.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(bn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Ws)throw $n(new Error,nn.SYSTEM_TIMESTAMP_PERMS_ERR,dE.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(nn.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}o(VL,"checkAttributePerms");function RRe(e){let t=new Set;try{if(e.action)return t;if(e.operation===bn.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){Pr.info(r)}return t}o(RRe,"getRecordAttributes");function KL(e,t,r){let n=new Map;if(fa.isEmpty(e))return Pr.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{Pr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}o(KL,"getAttributePermissions");function bRe(e,t,r,n,s,i,a){let c=new Set(i),l=KL(e,n,s);VL(c,l,t,s,n,a,r)}o(bRe,"verifyBulkLoadAttributePerms")});var Yy=v((jHe,K4)=>{"use strict";K4.exports={evaluateSQL:xRe,processAST:V4,convertSQLToAST:$4,checkASTPermissions:G4};var ARe=un(),q4=require("util"),IRe=q4.callbackify(ARe.insert),wRe=fn().search,NRe=o$().update,CRe=q4.callbackify(NRe),ORe=c$().convertDelete,Oc=require("alasql"),PRe=Vy(),Ky=z(),LRe=vg(),DRe=ce(),hE=(k(),D(Y)),{hdbErrors:MRe,handleHDBError:YL}=Ee(),{HTTP_STATUS_CODES:WL}=MRe;LRe(Oc);var vRe=403,URe="There was a problem performing this insert. Please check the logs and try again.",zL=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function xRe(e,t){let r=e.parsed_sql_object;if(!r){r=$4(e.sql);let n,s=r.ast.statements[0];if(s instanceof Oc.yy.Insert?n=s.into.databaseid:s instanceof Oc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Oc.yy.Update||s instanceof Oc.yy.Delete?n=s.table.databaseid:Ky.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Oc.yy.Select)&&DRe.isEmptyOrZeroLength(n))return t("No schema specified",null)}V4(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(xRe,"evaluateSQL");function G4(e,t){let r;try{r=PRe.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(G4,"checkASTPermissions");function $4(e){let t=new zL;if(!e)throw YL(new Error,"The 'sql' parameter is missing from the request body",WL.BAD_REQUEST);try{let r=e.trim(),n=Oc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
134
|
+
`);throw n[1]?YL(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,WL.BAD_REQUEST):YL(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",WL.BAD_REQUEST)}return t}o($4,"convertSQLToAST");function V4(e,t,r){try{let n=BRe;if(!e.bypass_auth&&!t.permissions_checked){let i=G4(e,t);if(i&&i.length>0)return r(vRe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case hE.VALID_SQL_OPS_ENUM.SELECT:n=wRe,s=t.ast.statements[0];break;case hE.VALID_SQL_OPS_ENUM.INSERT:n=FRe;break;case hE.VALID_SQL_OPS_ENUM.UPDATE:n=CRe;break;case hE.VALID_SQL_OPS_ENUM.DELETE:n=ORe;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,a)=>{if(i){r(i);return}r(null,a)})}catch(n){return r(n)}}o(V4,"processAST");function BRe(e,t){Ky.info(e),t("unknown sql statement")}o(BRe,"nullFunction");function FRe({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(a=>a.columnid);try{s.records=kRe(i,e.values)}catch(a){return r(a)}IRe(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){Ky.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(FRe,"convertInsert");function kRe(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]]=Oc.compile(`SELECT ${s.toString()} AS [${hE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Ky.error(r),new Error(URe)}}o(kRe,"createDataObjects")});var eD=v((ZHe,j4)=>{var Qy=require("clone"),Jy=ot(),HRe=ce(),zy=(k(),D(Y)),JHe=z(),jL=require("fs"),JL=require("joi"),{string:jy}=JL.types(),{hdbErrors:qRe,handleHDBError:Wy}=Ee(),{HDB_ERROR_MSGS:XHe,HTTP_STATUS_CODES:QL}=qRe,{commonValidators:Nf}=ki(),Y4=" is required",GRe=["insert","update","upsert"],XL={database:{presence:!1,format:Nf.schema_format,length:Nf.schema_length},schema:{presence:!1,format:Nf.schema_format,length:Nf.schema_length},table:{presence:!0,format:Nf.schema_format,length:Nf.schema_length},action:{inclusion:{within:GRe,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},$Re={schema:jy.required(),table:jy.required(),action:jy.valid("insert","update","upsert")},{AWS_ACCESS_KEY:VRe,AWS_SECRET:KRe,AWS_BUCKET:YRe,AWS_FILE_KEY:WRe,REGION:zRe}=zy.S3_BUCKET_AUTH_KEYS,jRe={s3:{presence:!0},[`s3.${VRe}`]:{presence:!0,type:"String"},[`s3.${KRe}`]:{presence:!0,type:"String"},[`s3.${YRe}`]:{presence:!0,type:"String"},[`s3.${WRe}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${zRe}`]:{presence:!0,type:"String"}},W4=Qy(XL);W4.data.presence={message:Y4};var z4=Qy(XL);z4.file_path.presence={message:Y4};var QRe=Object.assign(Qy(XL),jRe),ZL=Qy($Re);ZL.csv_url=jy.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();ZL.passthrough_headers=JL.object();function JRe(e){let t=Jy.validateObject(e,W4);return Xy(e,t)}o(JRe,"dataObject");function XRe(e){let t=Jy.validateBySchema(e,JL.object(ZL));return Xy(e,t)}o(XRe,"urlObject");function ZRe(e){let t=Jy.validateObject(e,z4);return Xy(e,t)}o(ZRe,"fileObject");function ebe(e){let t=Jy.validateObject(e,QRe);return Xy(e,t)}o(ebe,"s3FileObject");function Xy(e,t){if(!t){let r=HRe.checkGlobalSchemaTable(e.schema,e.table);if(r)return Wy(new Error,r,QL.BAD_REQUEST);if(e.operation===zy.OPERATIONS_ENUM.CSV_FILE_LOAD)try{jL.accessSync(e.file_path,jL.constants.R_OK|jL.constants.F_OK)}catch(n){return n.code===zy.NODE_ERROR_CODES.ENOENT?Wy(n,`No such file or directory ${n.path}`,QL.BAD_REQUEST):n.code===zy.NODE_ERROR_CODES.EACCES?Wy(n,`Permission denied ${n.path}`,QL.BAD_REQUEST):Wy(n)}}return t}o(Xy,"postValidateChecks");j4.exports={dataObject:JRe,urlObject:XRe,fileObject:ZRe,s3FileObject:ebe}});var tD=v((tqe,Q4)=>{"use strict";var EE=z(),Zy=(k(),D(Y));async function tbe(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===Zy.OPERATIONS_ENUM.INSERT||t.operation===Zy.OPERATIONS_ENUM.UPDATE||t.operation===Zy.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===Zy.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(EE.info(i.message),i):i.http_resp_msg?(EE.error(`Error calling operation: ${e.name}`),EE.error(i.http_resp_msg),i):(EE.error(`Error calling operation: ${e.name}`),EE.error(i),i)}}o(tbe,"callOperationFunctionAsAwait");Q4.exports={callOperationFunctionAsAwait:tbe}});var rD=v((nqe,X4)=>{"use strict";var{S3:rbe,GetObjectCommand:nbe}=require("@aws-sdk/client-s3");X4.exports={getFileStreamFromS3:sbe,getS3AuthObj:J4};async function sbe(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await J4(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new nbe(r))).Body}o(sbe,"getFileStreamFromS3");function J4(e,t,r){return new rbe({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(J4,"getS3AuthObj")});var eQ=v((iqe,Z4)=>{"use strict";var nD=class{static{o(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,a,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=a,this.role_perms=c}},sD=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};Z4.exports={BulkLoadFileObject:nD,BulkLoadDataObject:sD}});var oD=v((aqe,tQ)=>{"use strict";var iD=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};tQ.exports=iD});var fD=v((mqe,gQ)=>{"use strict";var eR=un(),rR=eD(),ibe=require("needle"),wi=(k(),D(Y)),lqe=mt(),Cf=ce(),{handleHDBError:Qt,hdbErrors:uQ}=Ee(),{HTTP_STATUS_CODES:sn,HDB_ERROR_MSGS:Lr,CHECK_LOGS_WRAPPER:iu}=uQ,Of=z(),aD=require("papaparse");Cf.promisifyPapaParse();var Ni=require("fs-extra"),obe=require("path"),{chain:rQ}=require("stream-chain"),nQ=require("stream-json/streamers/StreamArray"),sQ=require("stream-json/utils/Batch"),iQ=require("stream-chain/utils/comp"),{finished:oQ}=require("stream"),abe=le(),dQ=tD(),cbe=rD(),{BulkLoadFileObject:lD,BulkLoadDataObject:lbe}=eQ(),uD=BL(),{verifyBulkLoadAttributePerms:fQ}=Vy(),uqe=oD(),dqe=xt(),fqe=Ki(),{databases:ube}=(Ne(),D(ft)),{coerceType:dbe}=(rg(),D(vq)),aQ="No records parsed from csv file.",su=`${abe.get("HDB_ROOT")}/tmp`,{schemaRegex:fbe}=ki(),cQ=1024*1024*2,lQ=5e3,mbe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};gQ.exports={csvDataLoad:pbe,csvURLLoad:hbe,csvFileLoad:Ebe,importFromS3:_be};async function pbe(e,t){let r=rR.dataObject(e);if(r)throw Qt(r,r.message,sn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=hQ(e.schema,e.table),i=aD.parse(e.data,{header:!0,skipEmptyLines:!0,transform:cD.bind(null,s),dynamicTyping:!1}),a=new uD;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&fQ(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,a);let c=a.getPermsResponse();if(c)throw Qt(new Error,c,sn.BAD_REQUEST,void 0,void 0,!0);let l=new lbe(e.action,e.schema,e.table,i.data);return n=await dQ.callOperationFunctionAsAwait(EQ,l,null),n.message===aQ?aQ:_Q(n.records,n.number_written)}catch(s){throw ou(s)}}o(pbe,"csvDataLoad");async function hbe(e){let t=rR.urlObject(e);if(t)throw Qt(t,t.message,sn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${su}/${r}`;try{await gbe(e,r)}catch(s){throw Of.error(Lr.DOWNLOAD_FILE_ERR(r)+" - "+s),Qt(s,iu(Lr.DOWNLOAD_FILE_ERR(r)))}try{let s=new lD(this.job_operation_function.name,e.action,e.schema,e.table,n,wi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await dD(s);return await tR(n),i}catch(s){throw await tR(n),ou(s)}}o(hbe,"csvURLLoad");async function Ebe(e){let t=rR.fileObject(e);if(t)throw Qt(t,t.message,sn.BAD_REQUEST,void 0,void 0,!0);let r=new lD(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,wi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await dD(r)}catch(n){throw ou(n)}}o(Ebe,"csvFileLoad");async function _be(e){let t=rR.s3FileObject(e);if(t)throw Qt(t,t.message,sn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=obe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${su}/${s}`;let i=new lD(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await Sbe(s,e);let a=await dD(i);return await tR(r),a}catch(n){throw await tR(r),ou(n)}}o(_be,"importFromS3");async function gbe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await ibe("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 Qt(n,s,n.statusCode,wi.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}ybe(r,e.csv_url),await Tbe(t,r.raw)}o(gbe,"downloadCSVFile");async function Sbe(e,t){try{let r=`${su}/${e}`;await Ni.mkdirp(su),await Ni.writeFile(`${su}/${e}`,"",{flag:"a+"});let n=await Ni.createWriteStream(r),s=await cbe.getFileStreamFromS3(t);await new Promise((i,a)=>{s.on("error",function(c){a(c)}),s.pipe(n).on("error",function(c){a(c)}).on("close",function(){Of.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Of.error(Lr.S3_DOWNLOAD_ERR+" - "+r),Qt(r,iu(Lr.S3_DOWNLOAD_ERR))}}o(Sbe,"downloadFileFromS3");async function Tbe(e,t){try{await Ni.mkdirp(su),await Ni.writeFile(`${su}/${e}`,t)}catch(r){throw Of.error(Lr.WRITE_TEMP_FILE_ERR),Qt(r,iu(Lr.DEFAULT_BULK_LOAD_ERR))}}o(Tbe,"writeFileToTempFolder");async function tR(e){if(e)try{await Ni.access(e),await Ni.unlink(e)}catch{Of.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(tR,"deleteTempFile");function ybe(e,t){if(e.statusCode!==uQ.HTTP_STATUS_CODES.OK)throw Qt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,sn.BAD_REQUEST);if(!mbe[e.headers["content-type"]])throw Qt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,sn.BAD_REQUEST);if(!e.raw)throw Qt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,sn.BAD_REQUEST)}o(ybe,"validateURLResponse");async function dD(e){try{let t;switch(e.file_type){case wi.VALID_S3_FILE_TYPES.CSV:t=await Rbe(e);break;case wi.VALID_S3_FILE_TYPES.JSON:t=await bbe(e);break;default:throw Qt(new Error,Lr.DEFAULT_BULK_LOAD_ERR,sn.BAD_REQUEST,wi.LOG_LEVELS.ERROR,Lr.INVALID_FILE_EXT_ERR(e))}return _Q(t.records,t.number_written)}catch(t){throw ou(t)}}o(dD,"fileLoad");async function mQ(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let a={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await eR.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&fQ(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Qt(c);r(l)}}o(mQ,"validateChunk");async function pQ(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Cf.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!Cf.isEmpty(c)&&!Cf.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),a=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await dQ.callOperationFunctionAsAwait(EQ,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Qt(c,iu(Lr.INSERT_CSV_ERR),sn.INTERNAL_SERVER_ERROR,wi.LOG_LEVELS.ERROR,Lr.INSERT_CSV_ERR+" - "+c);r(l)}}o(pQ,"insertChunk");async function Rbe(e){let t={records:0,number_written:0},r=hQ(e.schema,e.table);try{let n=new uD,s=Ni.createReadStream(e.file_path,{highWaterMark:cQ});s.setEncoding("utf8"),await aD.parsePromise(s,mQ.bind(null,e,n),cD.bind(null,r));let i=n.getPermsResponse();if(i)throw Qt(new Error,i,sn.BAD_REQUEST);return s=Ni.createReadStream(e.file_path,{highWaterMark:cQ}),s.setEncoding("utf8"),await aD.parsePromise(s,pQ.bind(null,e,t),cD.bind(null,r)),s.destroy(),t}catch(n){throw Qt(n,iu(Lr.PAPA_PARSE_ERR),sn.INTERNAL_SERVER_ERROR,wi.LOG_LEVELS.ERROR,Lr.PAPA_PARSE_ERR+n)}}o(Rbe,"callPapaParse");function hQ(e,t){let r=ube[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>dbe(i,s));return n}o(hQ,"createTransformMap");function cD(e,t,r){let n=e.get(r);return n?n(t):Cf.autoCast(t)}o(cD,"typeFunction");async function bbe(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new uD,s=rQ([Ni.createReadStream(e.file_path,{encoding:"utf-8"}),nQ.withParser(),c=>c.value,new sQ({batchSize:lQ}),iQ(async c=>{await mQ(e,n,r,c)})]);await new Promise((c,l)=>{oQ(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Qt(new Error,i,sn.BAD_REQUEST);let a=rQ([Ni.createReadStream(e.file_path,{encoding:"utf-8"}),nQ.withParser(),c=>c.value,new sQ({batchSize:lQ}),iQ(async c=>{await pQ(e,t,r,c)})]);return await new Promise((c,l)=>{oQ(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw Qt(n,iu(Lr.INSERT_JSON_ERR),sn.INTERNAL_SERVER_ERROR,wi.LOG_LEVELS.ERROR,Lr.INSERT_JSON_ERR+n)}}o(bbe,"insertJson");async function EQ(e){let t={};try{e.data&&e.data.length>0&&Abe(e.data[0])?t=await Ibe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Of.info(t.message))}catch(r){throw ou(r)}return t}o(EQ,"callBulkFileLoad");function Abe(e){let t=Object.keys(e);for(let r of t)if(!fbe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(Abe,"validateColumnNames");async function Ibe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=eR.insert;break;case"update":i=eR.update;break;case"upsert":i=eR.upsert;break;default:throw Qt(new Error,Lr.INVALID_ACTION_PARAM_ERR(n),sn.BAD_REQUEST,wi.LOG_LEVELS.ERROR,Lr.INVALID_ACTION_PARAM_ERR(n))}try{let a=await i(s),c;switch(n){case"insert":c=a.inserted_hashes;break;case"update":c=a.update_hashes;break;case"upsert":c=a.upserted_hashes;break;default:break}if(Array.isArray(a.skipped_hashes)&&a.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)a.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=Cf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw ou(a)}}o(Ibe,"bulkFileLoad");function _Q(e,t){return`successfully loaded ${t} of ${e} records`}o(_Q,"buildResponseMsg");function ou(e){return Qt(e,iu(Lr.DEFAULT_BULK_LOAD_ERR),sn.INTERNAL_SERVER_ERROR,wi.LOG_LEVELS.ERROR,Lr.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(ou,"buildTopLevelErrMsg")});var hD=v((hqe,wQ)=>{"use strict";var pD=fn(),wbe=rD(),{AsyncParser:Nbe}=require("json2csv"),nR=require("stream"),Ss=ce(),mD=require("fs-extra"),Cbe=require("path"),zs=z(),{promisify:yQ}=require("util"),_E=ce(),{handleHDBError:Sr,hdbErrors:Obe}=Ee(),{HDB_ERROR_MSGS:Vn,HTTP_STATUS_CODES:Tr}=Obe,{streamAsJSON:Pbe}=($b(),D(NU)),{Upload:Lbe}=require("@aws-sdk/lib-storage"),{toCsvStream:Dbe}=(No(),D(BU)),SQ=["search_by_value","search_by_hash","sql","search_by_conditions"],TQ=["json","csv"],RQ="json",bQ="csv",Mbe="Successfully exported JSON locally.",vbe="Successfully exported CSV locally.",Ube=1e3,xbe=pD.searchByHash,Bbe=pD.searchByValue,Fbe=yQ(nR.finished);wQ.exports={export_to_s3:Gbe,export_local:kbe};async function kbe(e){zs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=AQ(e);if(!Ss.isEmpty(t))throw zs.error(t),Sr(new Error,t,Tr.BAD_REQUEST,void 0,void 0,!0);if(Ss.isEmpty(e.path))throw zs.error(Vn.MISSING_VALUE("path")),Sr(new Error,Vn.MISSING_VALUE("path"),Tr.BAD_REQUEST,void 0,void 0,!0);let r=(Ss.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Cbe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Ss.buildFolderPath(e.path,r);await Hbe(e.path);let s=await IQ(e);return await qbe(n,e.format,s)}o(kbe,"export_local");async function Hbe(e){if(zs.trace("in confirmPath"),Ss.isEmptyOrZeroLength(e))throw Sr(new Error,`Invalid path: ${e}`,Tr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await mD.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),Sr(new Error,n,Tr.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),Sr(new Error,r,Tr.BAD_REQUEST,void 0,void 0,!0)}return!0}o(Hbe,"confirmPath");async function qbe(e,t,r){if(zs.trace("in saveToLocal"),_E.isEmptyOrZeroLength(e))throw Sr(new Error,Vn.INVALID_VALUE("file_path"),Tr.BAD_REQUEST,void 0,void 0,!0);if(_E.isEmptyOrZeroLength(t))throw Sr(new Error,Vn.INVALID_VALUE("Source format"),Tr.BAD_REQUEST,void 0,void 0,!0);if(_E.isEmpty(r))throw Sr(new Error,Vn.NOT_FOUND("Data"),Tr.BAD_REQUEST,void 0,void 0,!0);if(t===RQ){let n=mD.createWriteStream(e);return Pbe(r).pipe(n),await Fbe(n),{message:Mbe,path:e}}else if(t===bQ){let n=mD.createWriteStream(e),s=nR.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new Nbe(i,c).fromInput(s).toOutput(n).promise(!1),{message:vbe,path:e}}throw Sr(new Error,Vn.INVALID_VALUE("format"),Tr.BAD_REQUEST)}o(qbe,"saveToLocal");async function Gbe(e){if(!e.s3||Object.keys(e.s3).length===0)throw Sr(new Error,Vn.MISSING_VALUE("S3 object"),Tr.BAD_REQUEST);if(Ss.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Sr(new Error,Vn.MISSING_VALUE("aws_access_key_id"),Tr.BAD_REQUEST);if(Ss.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Sr(new Error,Vn.MISSING_VALUE("aws_secret_access_key"),Tr.BAD_REQUEST);if(Ss.isEmptyOrZeroLength(e.s3.bucket))throw Sr(new Error,Vn.MISSING_VALUE("bucket"),Tr.BAD_REQUEST);if(Ss.isEmptyOrZeroLength(e.s3.key))throw Sr(new Error,Vn.MISSING_VALUE("key"),Tr.BAD_REQUEST);if(Ss.isEmptyOrZeroLength(e.s3.region))throw Sr(new Error,Vn.MISSING_VALUE("region"),Tr.BAD_REQUEST);let t=AQ(e);if(!Ss.isEmpty(t))throw Sr(new Error,t,Tr.BAD_REQUEST);zs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await IQ(e)}catch(l){throw zs.error(l),l}let n,s=await wbe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new nR.PassThrough;if(e.format===bQ){i=e.s3.key+".csv";let l=Dbe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===RQ){i=e.s3.key+".json";let l=new nR.Readable;l.pipe(a),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let p=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=p,f!==0&&f%Ube===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw Sr(new Error,Vn.INVALID_VALUE("format"),Tr.BAD_REQUEST);return new Lbe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(Gbe,"export_to_s3");function AQ(e){if(zs.trace("in exportCoreValidation"),Ss.isEmpty(e.format))return"format missing";if(TQ.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${TQ.join(", ")}`;let t=e.search_operation.operation;if(Ss.isEmpty(t))return"search_operation.operation missing";if(SQ.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${SQ.join(", ")}`}o(AQ,"exportCoreValidation");async function IQ(e){zs.trace("in getRecords");let t,r;if(_E.isEmpty(e.search_operation)||_E.isEmptyOrZeroLength(e.search_operation.operation))throw Sr(new Error,Vn.INVALID_VALUE("Search operation"),Tr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Bbe;break;case"search_by_hash":t=xbe;break;case"search_by_conditions":t=pD.searchByConditions;break;case"sql":{let n=Yy();t=yQ(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,zs.error(r),Sr(new Error,r,Tr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}o(IQ,"getRecords")});var CQ=v((_qe,NQ)=>{"use strict";var ED=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};NQ.exports=ED});var LQ=v((Sqe,PQ)=>{"use strict";var $be=(k(),D(Y)),OQ=require("moment"),Vbe=require("uuid").v4,_D=class{static{o(this,"JobObject")}constructor(){this.id=Vbe(),this.type=void 0,this.start_datetime=OQ().valueOf(),this.created_datetime=OQ().valueOf(),this.end_datetime=void 0,this.status=$be.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};PQ.exports=_D});var gD=v((yqe,kQ)=>{"use strict";var Kbe=require("uuid").v4,xQ=un(),BQ=fn(),Ybe=ai(),Wbe=Yu(),zbe=CQ(),Nt=(k(),D(Y)),jbe=LQ(),Qbe=Hp(),Ci=z(),Jbe=um(),Pf=ce(),{promisify:Xbe}=require("util"),au=require("moment"),Zbe=Yy(),sR=eD(),DQ=iw(),{deleteTransactionLogsBeforeValidator:eAe}=mL(),{handleHDBError:MQ,hdbErrors:tAe,ClientError:rAe}=Ee(),{HTTP_STATUS_CODES:vQ}=tAe,UQ=BQ.searchByValue,nAe=BQ.searchByHash,sAe=xQ.insert,iAe=Xbe(Zbe.evaluateSQL),oAe=xQ.update;kQ.exports={addJob:lAe,updateJob:dAe,handleGetJob:aAe,handleGetJobsByStartDate:cAe,getJobById:FQ};async function aAe(e){if(e.id===void 0)throw new rAe("'id' is required");let t=await FQ(e.id);return Pf.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}o(aAe,"handleGetJob");async function cAe(e){try{let t=await uAe(e);if(Ci.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=au(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=au(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 Ci.error(r),new Error(r)}}o(cAe,"handleGetJobsByStartDate");async function lAe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Pf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Ci.info(d),t.error=d,t}if(!Nt.JOB_TYPE_ENUM[e.operation])return Ci.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Nt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=sR.fileObject(e);break;case Nt.OPERATIONS_ENUM.CSV_URL_LOAD:n=sR.urlObject(e);break;case Nt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=sR.dataObject(e);break;case Nt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=sR.s3FileObject(e);break;case Nt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Nt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=DQ(e,"date");break;case Nt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=DQ(e,"timestamp");break;case Nt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=eAe(e);break;case Nt.OPERATIONS_ENUM.RESTART_SERVICE:if(Nt.HDB_PROCESS_SERVICES[e.service]===void 0)throw MQ(new Error,"Invalid service",vQ.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw MQ(n,n.message,vQ.BAD_REQUEST,void 0,void 0,!0);let s=new jbe;s.type=e.operation===Nt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Nt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new Ybe(Nt.SYSTEM_SCHEMA_NAME,Nt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await UQ(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ci.error(f),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){s.id=Kbe();try{a=await UQ(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ci.error(f),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return Ci.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new Jbe(Nt.SYSTEM_SCHEMA_NAME,Nt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await sAe(l)}catch(d){return Ci.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,Ci.trace(d)}return t}o(lAe,"addJob");async function uAe(e){let t=au(e.from_date,au.ISO_8601),r=au(e.to_date,au.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 zbe(n,e.hdb_user);try{return await iAe(s)}catch(i){throw Ci.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}o(uAe,"getJobsInDateRange");async function FQ(e){if(Pf.isEmptyOrZeroLength(e))return Pf.errorizeMessage("Invalid job ID specified.");let t=new Wbe(Nt.SYSTEM_SCHEMA_NAME,Nt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await nAe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Ci.error(n),Pf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o(FQ,"getJobById");async function dAe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Pf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Nt.JOB_STATUS_ENUM.COMPLETE||e.status===Nt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=au().valueOf());let t=new Qbe(Nt.SYSTEM_SCHEMA_NAME,Nt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await oAe(t),r}o(dAe,"updateJob")});var WQ=v((bqe,YQ)=>{"use strict";var HQ=ce(),Dr=(k(),D(Y)),fAe=require("moment"),iR=fD(),gE=z(),qQ=gD(),GQ=hD(),$Q=Ga(),VQ=Je(),mAe=Uy(),pAe=Af(),{parentPort:hAe,isMainThread:KQ}=require("worker_threads"),{onMessageByType:EAe}=Je(),SD=class{static{o(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(HQ.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(HQ.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Dr.JOB_TYPE_ENUM.csv_file_load:await lo(e,iR.csvFileLoad);break;case Dr.JOB_TYPE_ENUM.csv_url_load:await lo(e,iR.csvURLLoad);break;case Dr.JOB_TYPE_ENUM.csv_data_load:await lo(e,iR.csvDataLoad);break;case Dr.JOB_TYPE_ENUM.import_from_s3:await lo(e,iR.importFromS3);break;case Dr.JOB_TYPE_ENUM.empty_trash:break;case Dr.JOB_TYPE_ENUM.export_local:await lo(e,GQ.export_local);break;case Dr.JOB_TYPE_ENUM.export_to_s3:await lo(e,GQ.export_to_s3);break;case Dr.JOB_TYPE_ENUM.delete_files_before:case Dr.JOB_TYPE_ENUM.delete_records_before:await lo(e,$Q.deleteFilesBefore);break;case Dr.JOB_TYPE_ENUM.delete_audit_logs_before:await lo(e,$Q.deleteAuditLogsBefore);break;case Dr.JOB_TYPE_ENUM.delete_transaction_logs_before:await lo(e,mAe.deleteTransactionLogsBefore);break;case Dr.JOB_TYPE_ENUM.restart_service:return await lo(e,pAe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o(_Ae,"parseMessage");async function lo(e,t){try{e.job.status=Dr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=fAe().valueOf(),await qQ.updateJob(e.job),await gAe(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):gE.error(`There was an error running ${t.name} job with id ${e.job.id}`),gE.error(n),e.job.message=n,e.job.status=Dr.JOB_STATUS_ENUM.ERROR;try{await qQ.updateJob(e.job)}catch(s){throw gE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(lo,"runJob");async function gAe(e){gE.trace("launching job thread:",e),KQ?VQ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Dr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):hAe.postMessage({type:Dr.ITC_EVENT_TYPES.START_JOB,jobId:e})}o(gAe,"launchJobThread");KQ&&EAe(Dr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{VQ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Dr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){gE.error(r)}});YQ.exports={parseMessage:_Ae,RunnerMessage:SD}});var jQ=v((Iqe,zQ)=>{"use strict";var SAe=ce(),TD=le(),Pc=(k(),D(Y)),TAe=mt(),yAe=xt(),uo=z(),RAe=oD(),bAe=Ki();TD.initSync();zQ.exports={postOperationHandler:IAe,sendOperationTransaction:SE};async function SE(e,t,r,n){if(e.schema===Pc.SYSTEM_SCHEMA_NAME)return;let s=AAe(e,t,r);s&&(uo.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await yAe.publishToStream(`${TAe.SUBJECT_PREFIXES.TXN}.${e.schema}`,bAe.createNatsTableStreamName(e.schema,e.table),n,s))}o(SE,"sendOperationTransaction");function AAe(e,t,r){if(SAe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Pc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(AAe,"convertCRUDOperationToTransaction");async function IAe(e,t,r){if(!TD.get(Pc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;uo.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=TD.get(Pc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new RAe(t.txn_time,n,s);switch(e.operation){case Pc.OPERATIONS_ENUM.INSERT:try{await SE(e,t.inserted_hashes,i,r)}catch(a){uo.error("There was an error calling clustering postOperationHandler for insert."),uo.error(a)}break;case Pc.OPERATIONS_ENUM.DELETE:try{await SE(e,t.deleted_hashes,i,r)}catch(a){uo.error("There was an error calling clustering postOperationHandler for delete."),uo.error(a)}break;case Pc.OPERATIONS_ENUM.UPDATE:try{await SE(e,t.update_hashes,i,r)}catch(a){uo.error("There was an error calling clustering postOperationHandler for update."),uo.error(a)}break;case Pc.OPERATIONS_ENUM.UPSERT:try{await SE(e,t.upserted_hashes,i,r)}catch(a){uo.error("There was an error calling clustering postOperationHandler for upsert."),uo.error(a)}break;default:break}return t}o(IAe,"postOperationHandler")});var J,QQ=oe(()=>{J=class{static{o(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var dL={};be(dL,{chooseOperation:()=>E2,executeJob:()=>js,getOperationFunction:()=>_2,operation:()=>CD,processLocalTransaction:()=>h2});async function h2(e,t){try{if(e.body.operation!=="read_log"&&(bE.default.log_level===Zf.INFO||bE.default.log_level===Zf.DEBUG||bE.default.log_level===Zf.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:a,...c}=e.body;An.info(c)}}catch(n){An.error(n)}let r=await m2.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return OAe[e.body.operation]&&c2.default.setSchemaDataToGlobal(n=>{n&&An.error(n)}),r}function E2(e){let t;try{t=_2(e)}catch(s){throw An.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=aR.default.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let a=aR.default.checkASTPermissions(e,i);if(a)throw An.error(`${JQ.FORBIDDEN} from operation ${e.operation}`),An.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,Qs.handleHDBError)(new Error,a,Qs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.LOGIN&&e.operation!==V.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let a=a2.default.verifyPerms(i,s);if(a)throw An.error(`${JQ.FORBIDDEN} from operation ${e.operation}`),An.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,Qs.handleHDBError)(new Error,a,Qs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,Qs.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function _2(e){if(An.trace(`getOperationFunction with operation: ${e.operation}`),XQ.has(e.operation))return XQ.get(e.operation);throw(0,Qs.handleHDBError)(new Error,Qs.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Qs.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function CD(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=E2(e);return h2({body:e},n)}async function PAe(e){An.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[Rb]=!0;let a;switch(i.operation){case V.INSERT:a=await lu.default.insert(i);break;case V.UPDATE:a=await lu.default.update(i);break;case V.UPSERT:a=await lu.default.upsert(i);break;case V.DELETE:a=await Mf.default.deleteRecord(i);break;default:An.warn("invalid operation in catchup");break}await wAe.postOperationHandler(i,a,e)}catch(a){An.info("Invalid operation in transaction"),An.error(a)}}async function js(e){(0,f2.transformReq)(e);let t,r;try{if(r=await cR.default.addJob(e),r){t=r.createdJob,An.info("addJob result",r);let n=new AD.default.RunnerMessage(t,e);return{message:await AD.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 An.error(i),(0,Qs.handleHDBError)(n,i)}}function LAe(){let e=new Map;return e.set(V.INSERT,new J(lu.default.insert)),e.set(V.UPDATE,new J(lu.default.update)),e.set(V.UPSERT,new J(lu.default.upsert)),e.set(V.SEARCH_BY_CONDITIONS,new J(Df.default.searchByConditions)),e.set(V.SEARCH_BY_HASH,new J(Df.default.searchByHash)),e.set(V.SEARCH_BY_ID,new J(Df.default.searchByHash)),e.set(V.SEARCH_BY_VALUE,new J(Df.default.searchByValue)),e.set(V.SEARCH,new J(NAe)),e.set(V.SQL,new J(CAe)),e.set(V.CSV_DATA_LOAD,new J(js,TE.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new J(js,TE.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new J(js,TE.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new J(js,TE.default.importFromS3)),e.set(V.CREATE_SCHEMA,new J(fo.default.createSchema)),e.set(V.CREATE_DATABASE,new J(fo.default.createSchema)),e.set(V.CREATE_TABLE,new J(fo.default.createTable)),e.set(V.CREATE_ATTRIBUTE,new J(fo.default.createAttribute)),e.set(V.DROP_SCHEMA,new J(fo.default.dropSchema)),e.set(V.DROP_DATABASE,new J(fo.default.dropSchema)),e.set(V.DROP_TABLE,new J(fo.default.dropTable)),e.set(V.DROP_ATTRIBUTE,new J(fo.default.dropAttribute)),e.set(V.DESCRIBE_SCHEMA,new J(yE.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new J(yE.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new J(yE.default.describeTable)),e.set(V.DESCRIBE_ALL,new J(yE.default.describeAll)),e.set(V.DELETE,new J(Mf.default.deleteRecord)),e.set(V.ADD_USER,new J(Lf.default.addUser)),e.set(V.ALTER_USER,new J(Lf.default.alterUser)),e.set(V.DROP_USER,new J(Lf.default.dropUser)),e.set(V.LIST_USERS,new J(Lf.default.listUsersExternal)),e.set(V.LIST_ROLES,new J(RE.default.listRoles)),e.set(V.ADD_ROLE,new J(RE.default.addRole)),e.set(V.ALTER_ROLE,new J(RE.default.alterRole)),e.set(V.DROP_ROLE,new J(RE.default.dropRole)),e.set(V.USER_INFO,new J(Lf.default.userInfo)),e.set(V.READ_LOG,new J(e2.default)),e.set(V.ADD_NODE,new J(t2.default)),e.set(V.UPDATE_NODE,new J(yD.default)),e.set(V.SET_NODE_REPLICATION,new J(yD.default)),e.set(V.REMOVE_NODE,new J(r2.default)),e.set(V.CONFIGURE_CLUSTER,new J(n2.default)),e.set(V.PURGE_STREAM,new J(s2.default)),e.set(V.SET_CONFIGURATION,new J(ID.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new J(i2.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new J(o2.default)),e.set(V.CLUSTER_SET_ROUTES,new J(oR.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new J(oR.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new J(oR.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new J(js,RD.default.export_to_s3)),e.set(V.CREATE_CSR,new J(cu.default.createCsr)),e.set(V.SIGN_CERTIFICATE,new J(cu.default.signCertificate)),e.set(V.LIST_CERTIFICATES,new J(cu.default.listCertificates)),e.set(V.ADD_CERTIFICATES,new J(cu.default.addCertificate)),e.set(V.REMOVE_CERTIFICATE,new J(cu.default.removeCertificate)),e.set(V.GET_KEY,new J(cu.default.getKey)),e.set(V.ADD_NODE_BACK,new J(mO)),e.set(V.REMOVE_NODE_BACK,new J(pO)),e.set(V.DELETE_FILES_BEFORE,new J(js,Mf.default.deleteFilesBefore)),e.set(V.DELETE_RECORDS_BEFORE,new J(js,Mf.default.deleteFilesBefore)),e.set(V.EXPORT_LOCAL,new J(js,RD.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new J(cR.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new J(cR.default.handleGetJob)),e.set(V.GET_REGISTRATION_INFO,new J(OL)),e.set(V.GET_FINGERPRINT,new J(PL)),e.set(V.SET_LICENSE,new J(LL)),e.set(V.RESTART,new J(bD.default.restart)),e.set(V.RESTART_SERVICE,new J(js,bD.default.restartService)),e.set(V.CATCHUP,new J(PAe)),e.set(V.SYSTEM_INFORMATION,new J(l2.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new J(js,Mf.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new J(ZQ.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new J(FN)),e.set(V.REFRESH_OPERATION_TOKEN,new J(kN)),e.set(V.LOGIN,new J(oL)),e.set(V.LOGOUT,new J(aL)),e.set(V.GET_CONFIGURATION,new J(ID.default.getConfiguration)),e.set(V.CUSTOM_FUNCTIONS_STATUS,new J(Ct.default.customFunctionsStatus)),e.set(V.GET_CUSTOM_FUNCTIONS,new J(Ct.default.getCustomFunctions)),e.set(V.GET_COMPONENT_FILE,new J(Ct.default.getComponentFile)),e.set(V.GET_COMPONENTS,new J(Ct.default.getComponents)),e.set(V.SET_COMPONENT_FILE,new J(Ct.default.setComponentFile)),e.set(V.DROP_COMPONENT,new J(Ct.default.dropComponent)),e.set(V.GET_CUSTOM_FUNCTION,new J(Ct.default.getCustomFunction)),e.set(V.SET_CUSTOM_FUNCTION,new J(Ct.default.setCustomFunction)),e.set(V.DROP_CUSTOM_FUNCTION,new J(Ct.default.dropCustomFunction)),e.set(V.ADD_CUSTOM_FUNCTION_PROJECT,new J(Ct.default.addComponent)),e.set(V.ADD_COMPONENT,new J(Ct.default.addComponent)),e.set(V.DROP_CUSTOM_FUNCTION_PROJECT,new J(Ct.default.dropCustomFunctionProject)),e.set(V.PACKAGE_CUSTOM_FUNCTION_PROJECT,new J(Ct.default.packageComponent)),e.set(V.PACKAGE_COMPONENT,new J(Ct.default.packageComponent)),e.set(V.DEPLOY_CUSTOM_FUNCTION_PROJECT,new J(Ct.default.deployComponent)),e.set(V.DEPLOY_COMPONENT,new J(Ct.default.deployComponent)),e.set(V.READ_TRANSACTION_LOG,new J(wD.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new J(js,wD.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new J(u2.default.installModules)),e.set(V.GET_BACKUP,new J(fo.default.getBackup)),e.set(V.ADD_SSH_KEY,new J(Ct.default.addSSHKey)),e.set(V.UPDATE_SSH_KEY,new J(Ct.default.updateSSHKey)),e.set(V.DELETE_SSH_KEY,new J(Ct.default.deleteSSHKey)),e.set(V.LIST_SSH_KEYS,new J(Ct.default.listSSHKeys)),e.set(V.SET_SSH_KNOWN_HOSTS,new J(Ct.default.setSSHKnownHosts)),e.set(V.GET_SSH_KNOWN_HOSTS,new J(Ct.default.getSSHKnownHosts)),e.set(V.GET_ANALYTICS,new J(EL)),e.set(V.LIST_METRICS,new J(_L)),e.set(V.DESCRIBE_METRIC,new J(gL)),e.set(V.GET_STATUS,new J(wL)),e.set(V.SET_STATUS,new J(NL)),e.set(V.CLEAR_STATUS,new J(IL)),e.set(V.INSTALL_USAGE_LICENSE,new J(wP)),e.set(V.GET_USAGE_LICENSES,new J(PP)),e}var Df,aR,TE,fo,yE,Mf,ZQ,Lf,RE,Ct,bE,e2,t2,yD,r2,n2,s2,i2,o2,oR,RD,a2,cR,Qs,bD,ND,lu,c2,l2,AD,ID,wD,u2,d2,f2,cu,m2,p2,JQ,An,wAe,NAe,CAe,OAe,XQ,fL=oe(()=>{Df=w(fn()),aR=w(Yy()),TE=w(fD()),fo=w(mh()),yE=w(Ja()),Mf=w(Ga()),ZQ=w(qC()),Lf=w(os()),RE=w(xp()),Ct=w(uL()),bE=w(z()),e2=w(YC()),t2=w(IT()),yD=w(SO()),r2=w(NT()),n2=w(RO()),s2=w(bO()),i2=w(wO()),o2=w(CO()),oR=w(DT()),RD=w(hD()),a2=w(Vy()),cR=w(gD());k();Qs=w(Ee()),bD=w(Af()),ND=w(require("util")),lu=w(un()),c2=w(li()),l2=w(_h()),AD=w(WQ());Id();Ny();ID=w(Et()),wD=w(Uy()),u2=w(hL()),d2=w(ri()),f2=w(ce());xr();cu=w(ds());Qd();TL();m2=w(tD()),p2=w(jQ());cE();Gh();ML();QQ();({HTTP_STATUS_CODES:JQ}=Qs.hdbErrors),An=bE.default.loggerWithTag("operation"),{transactToClusteringUtils:wAe}=p2.default,NAe=ND.promisify(Df.default.search),CAe=ND.promisify(aR.default.evaluateSQL),OAe={[V.CREATE_ATTRIBUTE]:!0,[V.CREATE_TABLE]:!0,[V.CREATE_SCHEMA]:!0,[V.DROP_ATTRIBUTE]:!0,[V.DROP_TABLE]:!0,[V.DROP_SCHEMA]:!0};o(h2,"processLocalTransaction");XQ=LAe();Me.operation=CD;o(E2,"chooseOperation");o(_2,"getOperationFunction");(0,d2._assignPackageExport)("operation",CD);o(CD,"operation");o(PAe,"catchup");o(js,"executeJob");o(LAe,"initializeOperationFunctionMap")});var dR=v((Dqe,T2)=>{"use strict";var lR=(k(),D(Y)),DAe=ce(),AE=z(),{handleHDBError:OD,hdbErrors:uR}=Ee(),{isMainThread:MAe}=require("worker_threads"),{Readable:vAe}=require("stream"),g2=require("os"),UAe=require("util"),xAe=qN(),BAe=UAe.promisify(xAe.authorize),S2=(fL(),D(dL)),{createGzip:FAe,constants:kAe}=require("zlib"),HAe=[lR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,lR.OPERATIONS_ENUM.LOGIN,lR.OPERATIONS_ENUM.LOGOUT];function qAe(e){let t=`Found an uncaught exception with message: ${e.message}. ${g2.EOL}Stack: ${e.stack} ${g2.EOL}Terminating ${MAe?"HDB":"thread"}.`;console.error(t),AE.fatal(t),process.exit(1)}o(qAe,"handleServerUncaughtException");function GAe(e,t,r){if(AE[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:uR.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}o(GAe,"serverErrorHandler");function $Ae(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=OD(new Error,"Invalid JSON.",uR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(DAe.isEmpty(e.body.operation)){let n=OD(new Error,"Request body must include an 'operation' property.",uR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o($Ae,"reqBodyValidationHandler");function VAe(e,t,r){let n;!HAe.includes(e.body.operation)||e.body.operation===lR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?BAe(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{AE.warn(i),AE.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(OD(i,a,uR.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}o(VAe,"authHandler");async function KAe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=S2.chooseOperation(e.body);let s=await S2.processLocalTransaction(e,n);if(s instanceof vAe&&s.headers){for(let[i,a]of s.headers)t.header(i,a);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(FAe({level:kAe.Z_BEST_SPEED})))}return s}catch(s){throw AE.error(s),s}}o(KAe,"handlePostRequest");T2.exports={authHandler:VAe,handlePostRequest:KAe,handleServerUncaughtException:qAe,serverErrorHandler:GAe,reqBodyValidationHandler:$Ae}});var A2=v((vqe,b2)=>{"use strict";var YAe=require("fastify-plugin"),{handlePostRequest:y2,authHandler:WAe,reqBodyValidationHandler:zAe}=dR();async function jAe(e){e.decorate("hdbCore",{preValidation:[zAe,WAe],request:o(t=>R2(y2(t,response)),"request"),requestWithoutAuthentication:o((t,r)=>R2(y2(t,r,!0)),"requestWithoutAuthentication")})}o(jAe,"hdbCore");async function R2(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}o(R2,"convertAsyncIterators");b2.exports=YAe(jAe)});var w2=v((Bqe,I2)=>{"use strict";var xqe=require("fs"),fR=le();fR.initSync();var{CONFIG_PARAMS:PD}=(k(),D(Y)),QAe=1024*1024*1024;function JAe(e){let t=fR.get(PD.HTTP_TIMEOUT),r=fR.get(PD.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:QAe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:fR.get(PD.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o(JAe,"getServerOptions");I2.exports=JAe});var O2=v((kqe,C2)=>{"use strict";var LD=le();LD.initSync();var{CONFIG_PARAMS:N2}=(k(),D(Y));function XAe(){let e=LD.get(N2.HTTP_CORSACCESSLIST),t=LD.get(N2.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}o(XAe,"getCORSOptions");C2.exports=XAe});var D2=v((qqe,L2)=>{"use strict";var P2=le();P2.initSync();var ZAe=(k(),D(Y));function eIe(){return P2.get(ZAe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o(eIe,"getHeaderTimeoutConfig");L2.exports=eIe});var MD={};be(MD,{customFunctionsServer:()=>nIe,ready:()=>Y2,start:()=>rIe});function rIe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){ma||(ma=K2(t),Me.http((await ma).server));let a=await ma,c=(0,DD.dirname)(s),l=(0,DD.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!M2.has(c)){M2.add(c);try{a.register(iIe(c,l))}catch(u){if(u.message==="Root plugin has already booted")gt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:Y2}}async function nIe(){try{gt.info("In Custom Functions Fastify server"+process.cwd()),gt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),gt.debug(`Custom Functions server process ${process.pid} starting up.`),await sIe();let e=k2.get(U.HTTP_SECUREPORT)>0,t;try{t=ma=await K2(e)}catch(r){throw gt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw gt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){gt.error(`Custom Functions ${process.pid} Error: ${e}`),gt.error(e),process.exit(1)}}async function sIe(){try{gt.info("Custom Functions starting configuration."),await H2.setUsersWithRolesCache(),gt.info("Custom Functions completed configuration.")}catch(e){gt.error(e)}}function iIe(e,t){return async function(r){try{gt.info("Custom Functions starting buildRoutes"),gt.trace("Loading fastify routes folder "+e),(0,v2.existsSync)(e)&&r.register(F2.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:gt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,a)=>{s?.message?gt.error(s.message):s&>.error(s),a()})}catch(n){gt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function K2(e){gt.info("Custom Functions starting buildServer.");let t=(0,q2.default)(e),r=(0,U2.default)(t);r.server.headersTimeout=(0,$2.default)(),r.setErrorHandler(V2.serverErrorHandler);let n=(0,G2.default)();return n&&r.register(x2.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(B2.default),await r.register(tIe),await r.after(),gm(r),gt.info("Custom Functions completed buildServer."),r}function Y2(){if(ma)return ma.then?ma.then(e=>e.ready()):ma.ready()}var DD,v2,U2,x2,B2,F2,k2,gt,tIe,H2,q2,G2,$2,V2,ma,M2,W2=oe(()=>{DD=require("path"),v2=require("fs"),U2=w(require("fastify")),x2=w(require("@fastify/cors")),B2=w(vN()),F2=w(require("@fastify/autoload")),k2=w(le());k();gt=w(z()),tIe=w(A2()),H2=w(os()),q2=w(w2()),G2=w(O2()),$2=w(D2()),V2=w(dR());No();xr();M2=new Set;o(rIe,"start");o(nIe,"customFunctionsServer");o(sIe,"setUp");o(iIe,"buildRouteFolder");o(K2,"buildServer");o(Y2,"ready")});var UD={};be(UD,{handleApplication:()=>oIe,suppressHandleApplicationWarning:()=>aIe});function oIe(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,Uf.join)(n.absolutePath,"index.html");(0,vf.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,Uf.dirname)(n.urlPath),n.absolutePath);break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,Uf.dirname)(n.urlPath));break}}),e.server.http((n,s)=>{if(n.method!=="GET"||n.isWebSocket)return s(n);let i=e.options.get(["fallthrough"])??!0;if(typeof i!="boolean")throw new Error(`Invalid fallthrough option: ${i}. Must be a boolean.`);let a=t.get(n.pathname);if(!a){let d=e.options.get(["index"])??!1;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);d&&(a=r.get(n.pathname))}if(!a){let d=e.options.get(["extensions"])??[];if(!Array.isArray(d)||d.some(f=>typeof f!="string"))throw new Error(`Invalid extensions option: ${d}. Must be an array of strings.`);for(let f of d)if(a=t.get(`${n.pathname}.${f}`),a)break}if(a)return{handlesHeaders:!0,body:(0,vD.default)(n,(0,vf.realpathSync)(a))};if(i)return s(n);let c=e.options.get(["notFound"]);if(cIe(c),!c)return{status:404,body:"File not found"};let l=(0,Uf.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,vf.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,vD.default)(n,(0,vf.realpathSync)(l))}},{runFirst:!0})}function cIe(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 vf,Uf,vD,aIe,z2=oe(()=>{vf=require("node:fs"),Uf=require("node:path"),vD=w(require("send"));o(oIe,"handleApplication");aIe=!0;o(cIe,"validateNotFoundOption")});var xD={};be(xD,{start:()=>lIe});function lIe({override:e}){return{handleFile:o((t,r,n)=>{mR.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,j2.parse)(t))){if(process.env[s]!==void 0)if(mR.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)mR.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var j2,mR,Q2=oe(()=>{j2=require("dotenv"),mR=w(z());o(lIe,"start")});var BD={};be(BD,{DataLoaderError:()=>Ts,DataLoaderResult:()=>xf,EmptyFileError:()=>ER,FileParseError:()=>hR,InvalidPropertyTypeError:()=>_R,MissingRequiredPropertyError:()=>IE,RecordProcessingError:()=>wE,SystemDatabaseError:()=>gR,UnsupportedFileExtensionError:()=>pR,handleApplication:()=>dIe,loadDataFile:()=>tJ,suppressHandleApplicationWarning:()=>uIe});function dIe(e){if((0,X2.getWorkerIndex)()!==0){mo.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||tJ(t,En,De).then(r=>{mo.debug?.("Data loader processed file: %s: %s",(0,pa.basename)(t.absolutePath),r.message)})})}async function tJ({contents:e,absolutePath:t,stats:r},n,s){let i=(0,pa.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,J2.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new pR(t,i);a.mtime=r.mtimeMs}catch(f){throw f instanceof Ts?f:new hR(t,f)}if(!a)throw new ER(t);let{database:c,table:l,records:u}=a;if(!l)throw new IE(t,"table");if(!u)throw new IE(t,"records");if(!Array.isArray(u))throw new _R(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new gR(c,l);try{let f;if(c&&s[c]&&s[c][l])mo.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])mo.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{mo.debug?.(`Table ${d} not found, creating new table`);let b=[];if(u.length>0){let S=u[0];Object.keys(S).map(R=>{let L={name:R,type:typeof S[R]};return R==="id"&&(L.isPrimaryKey=!0),L}).forEach(R=>{b.push(R)})}f=await Xe({database:c,table:l,attributes:b})}let m=u.length,p=0,h=0,E=0,g=100;for(let b=0;b<u.length;b+=g){let S=u.slice(b,b+g),R=[];for(let L of S)R.push(async()=>{try{let O=null,x=L.id;if(x!==void 0&&(O=await f.get(x)),!O)return p++,f.put(L);let j=O.getUpdatedTime();return a.mtime>j?(h++,f.put(L)):(E++,Promise.resolve({inserted:0,updated:0}))}catch(O){if(O instanceof Ts)mo.error?.(`Record processing error: ${O.message}`);else{let x=new wE(d,O);mo.error?.(`Record processing error: ${x.message}`)}return Promise.resolve({inserted:0,updated:0,error:O.message})}});await Promise.all(R.map(L=>L()))}if(p>0||h>0){let b=`Loaded ${p} new and updated ${h} records in ${d}`;return E>0&&(b+=` (${E} records skipped)`),mo.info?.(b),new xf(t,c,l,"success",p+h,b)}else if(E>0){let b=`All ${E} records in ${d} already up-to-date`;return mo.info?.(b),new xf(t,c,l,"skipped",m,b)}else{let b=`No records to process in ${d}`;return mo.info?.(b),new xf(t,c,l,"success",0,b)}}catch(f){throw f instanceof Ts?f:new wE(d,f)}}var pa,J2,X2,ha,Z2,eJ,mo,uIe,Ts,pR,hR,ER,IE,_R,gR,wE,xf,rJ=oe(()=>{pa=require("node:path"),J2=require("yaml");Ne();X2=w(Je()),ha=w(Kr()),Z2=w(Ee()),eJ=w(z()),mo=eJ.default.forComponent("dataLoader"),uIe=!0;o(dIe,"handleApplication");o(tJ,"loadDataFile");Ts=class extends Z2.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=ha.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},pR=class extends Ts{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,pa.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,ha.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},hR=class extends Ts{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,pa.basename)(t)}: ${r.message}`,ha.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},ER=class extends Ts{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,pa.basename)(t)} is empty or invalid`,ha.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},IE=class extends Ts{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,pa.basename)(t)} is missing required "${r}" property`,ha.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},_R=class extends Ts{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,pa.basename)(t)} has invalid "${r}" property, expected ${n}`,ha.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},gR=class extends Ts{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,ha.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},wE=class extends Ts{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,ha.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},xf=class{static{o(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,a){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=a}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#r}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#r,status:this.#n,count:this.#s,message:this.#i}}}});var FD={};be(FD,{hdbServer:()=>hIe,start:()=>hIe});async function hIe(e){try{po.default.debug("In Fastify server"+process.cwd()),po.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),po.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=nJ.default.isMaster,await EIe();let t=e.securePort>0;Bf=_Ie(t),await Bf.ready(),e||(e={}),e.isOperationsServer=!0;try{Me.http(Bf.server,e),Bf.server.closeIdleConnections||await Bf.listen({port:0,host:"::"})}catch(r){throw Bf.close(),po.default.error(r),po.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),po.default.fatal(t),process.exit(1)}}async function EIe(){return po.default.trace("Configuring HarperDB process."),dJ.default.setSchemaDataToGlobal(),mJ.default.setUsersWithRolesCache()}function _Ie(e){po.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=gIe(e),r=(0,sJ.default)(t);r.server.headersTimeout=TIe(),r.setErrorHandler(Dc.serverErrorHandler);let n=SIe();n&&r.register(iJ.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(cJ.default),r.register(oJ.default),r.register(aJ.default,{root:lJ.default.join(uJ.PACKAGE_ROOT,"studio/web")}),gm(r);let s=Lc.default.get(tm.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!fJ.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.sendFile("running.html")}),r.post("/",{preValidation:[Dc.reqBodyValidationHandler,Dc.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,Dc.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),po.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function gIe(e){let t=Lc.default.get(NE.OPERATIONSAPI_NETWORK_TIMEOUT),r=Lc.default.get(NE.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:mIe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}function SIe(){let e=Lc.default.get(NE.OPERATIONSAPI_NETWORK_CORS),t=Lc.default.get(NE.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===pIe)&&(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 TIe(){return Lc.default.get(NE.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??fIe}var nJ,Lc,po,sJ,iJ,oJ,aJ,cJ,lJ,uJ,dJ,fJ,mJ,Dc,fIe,mIe,pIe,NE,Bf,pJ=oe(()=>{nJ=w(require("cluster")),Lc=w(le());k();po=w(z()),sJ=w(require("fastify")),iJ=w(require("@fastify/cors")),oJ=w(require("@fastify/compress")),aJ=w(require("@fastify/static")),cJ=w(vN()),lJ=w(require("path")),uJ=w(bt()),dJ=w(li()),fJ=w(ce()),mJ=w(os());xr();Dc=w(dR());No();Lc.default.initSync();fIe=6e4,mIe=1024*1024*1024,pIe="TRUE",{CONFIG_PARAMS:NE}=Y;o(hIe,"operationsServer");o(EIe,"setUp");o(_Ie,"buildServer");o(gIe,"getServerOptions");o(SIe,"getCORSOpts");o(TIe,"getHeaderTimeoutConfig")});var VD={};be(VD,{disableNATS:()=>RIe,publishToStream:()=>yR,setNATSReplicator:()=>kD,setPublishToStream:()=>bIe,setSubscription:()=>$D,start:()=>yIe});function yIe(){CE.default.get(U.CLUSTERING_ENABLED)&&IIe()}function RIe(e=!0){SJ=e}function bIe(e,t){yR=e,$D=t}function IIe(){if(SJ||process.env._DISABLE_NATS)return;let e=at(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];kD(s,r,i)}}Nl((r,n)=>{kD(r.tableName,r.databaseName,r),n&&yJ(r)}),!hJ&&(hJ=!0)}function kD(e,t,r){if(t==="system"&&wIe.includes(e))return;if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends Fr{static{o(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){yJ(i)}static subscribe(){let i=new Wn;return $D(t,e,i),i}static subscribeOnThisThread(i){return i<(CE.default.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??AIe)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new SR(s.transaction,s);let a=s.transaction;for(;a.next;)a=a.next;a.next=s.transaction.nats,i.user=s.user,i.context=s}else i=TJ;return i}o(n,"getNATSTransaction")}function yJ(e){let t=CE.default.get(U.CLUSTERING_NODENAME);yR(`${qD.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,GD.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var EJ,qD,GD,_J,gJ,CE,TR,SJ,yR,$D,AIe,TJ,hJ,wIe,SR,HD,RJ=oe(()=>{Ne();va();EJ=w(xt()),qD=w(mt()),GD=w(Ki());yu();_J=w(XN()),gJ=w(Cn()),CE=w(le());k();TR=w(z());o(yIe,"start");o(RIe,"disableNATS");yR=EJ.publishToStream,$D=_J.setSubscription;o(bIe,"setPublishToStream");AIe=2;o(IIe,"assignReplicationSource");wIe=["hdb_job","hdb_raw_analytics","hdb_info"];o(kD,"setNATSReplicator");o(yJ,"publishSchema");SR=class{constructor(t,r){this.transaction=t;this.options=r}static{o(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=CE.default.get(U.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let a=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(TR.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=a)),l.table===f&&l.operation===m?(a.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(yR(`${qD.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,GD.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw TR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},HD=class extends SR{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,gJ.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};TJ=new HD});async function NJ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await KD.get(e,{returnNonexistent:!0});i=new zD(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await KD.get(e);a&&a.delete()}i=new bR(e,t)}return n&&(n.id=e,n.user={username:t?.username},OE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function YD(){return RR++,RR>65500&&(RR=1),RR}function WD(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=Cs.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let a=new si(i.relativeURL);a.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return Tt(r,()=>s?t===void 0?c.delete(a,r):c.put(a,e.data,r):c.publish(a,e.data,r))}var AJ,Mc,IJ,wJ,bJ,KD,OE,RR,bR,zD,CJ=oe(()=>{Ne();Ua();AJ=w(Cn()),Mc=w(z());Na();IJ=w(Je()),wJ=w(qP());xr();ng();bJ=100,KD=Xe({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),OE=Xe({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,IJ.getWorkerIndex)()===0&&(async()=>{await wJ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of OE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Me.getUser(r.user.username));try{await WD(r,t,r)}catch{(0,Mc.warn)("Failed to publish will",t)}OE.delete(e.id)}})();o(NJ,"getSession");RR=1;o(YD,"getNextMessageId");bR=class{static{o(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:a}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(S=>S.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:a,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};a&&(0,Mc.trace)("Resuming subscription from",s,"from",a);let p=Cs.getMatch(u,"mqtt");if(!p){let S=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw S.statusCode=404,S}m.url=p.relativeURL;let h;if(m.url.indexOf("+")>-1||(h=m.url.indexOf("#"))>-1){let S=m.url.slice(1);if(h--,h>-1&&h!==S.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,S.indexOf("+")===S.length-1)m.onlyChildren=!0,m.url="/"+S.slice(0,S.length-1);else{let R=S.split("/"),L;for(let j=0;j<R.length;j++)if(R[j].indexOf("+")>-1)if(R[j]==="+")L=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&L)throw new Error("Filters can not be combined");let O=!0;R[R.length-1]==="#"&&(R.length--,O=!1),L&&(n=o(j=>{let H=j.id;if(!Array.isArray(H))if(H?.indexOf?.("/")>-1)H=H.split("/");else return!1;if(O&&H.length!==R.length)return!1;for(let F=0;F<R.length;F++)if(R[F]!=="+"&&R[F]!==H[F])return!1;return!0},"filter"));let x=R.indexOf("+");m.url="/"+(x>-1?R.slice(0,x):R).concat("").join("/")}}else m.isCollection=!1;let E=p.path,g=p.Resource,b=await Tt(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let R=await g.subscribe(m,S);if(!R)return;if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let L=(async()=>{for await(let O of R)try{let x;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"&&O.type!=="patch"||n&&!n(O))continue;r?(O.topic=s,x=this.needsAcknowledge(O)):(O.acknowledge?.(),x=YD());let j=O.id;if(Array.isArray(j)&&(j=ku(j)),j==null&&(j=""),await this.listener(E+"/"+j,O.value,x,t)===!1)break;this.awaitingAcks?.size>bJ?await new Promise(F=>setTimeout(F,this.awaitingAcks.size-bJ)):await new Promise(setImmediate)}catch(x){(0,Mc.warn)(x)}})();return R});if(b)return b.topic=s,b.qos=t.qos,this.subscriptions.push(b),b}resume(){}needsAcknowledge(t){let r=YD();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 WD(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();Tt(r,async()=>{try{if(!t){let n=await OE.get(this.sessionId);n?.doesExist()&&await WD(n,n.data,r)}}finally{await OE.delete(this.sessionId)}}).catch(n=>{(0,Mc.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};o(WD,"publish");zD=class extends bR{static{o(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=YD(),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,Mc.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,AJ.getNextMonotonicTime)()),(0,Mc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),KD.put(this.sessionRecord)}}});var jD={};be(jD,{bypassAuth:()=>NIe,start:()=>OIe});function NIe(){UJ=!0}function OIe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new vJ.EventEmitter},e.mqtt.events.on("error",()=>{}));let a=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);a.events.emit("connection",u),Jt.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=PJ(u,E=>{u.send(E)},d,Promise.resolve(f).then(()=>d?.user),a);u.on("message",p),u.on("close",h),u.on("error",E=>{Jt.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(a.events.emit("connection",u),Jt.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let p=u.getPeerCertificate(!0);if(p?.subject){let E=await Gd(p,l);if(!E.valid)throw Jt.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,Ff.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&IR.notify?.({username:d?.username,status:ti.SUCCESS,type:Aa.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,Ff.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&IR.error?.({username:h,status:ti.FAILURE,type:Aa.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else Jt.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){a.events.emit("error",p,u),Jt.error?.(p)}else if(l.required)return Jt.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&CIe(u.remoteAddress)&&(d=await(0,LJ.getSuperUser)(),Jt.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=PJ(u,p=>u.write(p),null,d,a);u.on("data",f),u.on("close",m),u.on("error",p=>{Jt.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function PJ(e,t,r,n,s){OJ||(OJ=!0,Bm(f=>{AR>0&&f.push({metric:"mqtt-connections",connections:AR,byThread:!0})}));let i;AR++;let a,c={protocolVersion:4},l=(0,wR.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){AR--,i||(i=!0,a?.disconnect?.(),s.events.emit("disconnected",a,e),s.sessions.delete(a),zr(!1,"connection","mqtt","disconnect"),Jt.debug?.("MQTT connection was closed",e.remoteAddress))}return o(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(R){e.close?.(1008,"Unauthorized"),Jt.info?.(R);return}let m=f.cmd;if(a)a.then&&await a;else if(m!=="connect"){Jt.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;qe(f.length,"bytes-received",E,b(f),"mqtt");try{switch(a?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Me.getUser(f.username,f.password.toString(),r),(0,Ff.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&IR.notify?.({username:n?.username,status:ti.SUCCESS,type:Aa.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(Q){return(0,Ff.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&IR.error?.({username:f.username,status:ti.FAILURE,type:Aa.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,Q),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let Q=e.deserialize||(e.deserialize=wo(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?Q(f.will.payload):void 0,delete f.will.payload}a=NJ({user:n,...f}),a=await a,a.socket=e,r&&(a.request=r),s.sessions.add(a)}catch(Q){return Jt.error?.(Q),s.events.emit("auth-failed",f,e,Q),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:Q.code||5,returnCode:Q.code||128})}s.events.emit("connected",a,e),zr(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:a.sessionWasPresent,reasonCode:0,returnCode:0});let R=o(async(Q,W,fe,ue)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",Q);let ee=Q.indexOf("/",1),Re=ee>0?Q.slice(0,ee):Q;g({cmd:"publish",topic:Q,payload:await S(W),messageId:fe||Math.floor(Math.random()*1e8),qos:ue.qos},Re);let Ie=e._socket??e;return Ie.writableNeedDrain?new Promise($e=>Ie.once("drain",$e)):!Ie.closed}catch(ee){return Jt.error?.(ee),a?.disconnect(),s.sessions.delete(a),!1}},"listener");a.setListener(R),a.sessionWasPresent&&await a.resume();break;case"subscribe":let L=[];for(let Q of f.subscriptions){let W;try{let fe=await a.addSubscription(Q,Q.qos>=1);W=fe?fe.qos||0:c.protocolVersion<5?128:143}catch(fe){s.events.emit("error",fe,e,Q,a),fe.statusCode?fe.statusCode===500?Jt.warn?.(fe):Jt.info?.(fe):Jt.error?.(fe),W=c.protocolVersion<5?128:fe.statusCode===403?135:fe.statusCode===404?143:128}L.push(W)}await a.committed,g({cmd:"suback",granted:L,messageId:f.messageId});break;case"unsubscribe":{let Q=[];for(let W of f.unsubscriptions)Q.push(a.removeSubscription(W)?0:17);g({cmd:"unsuback",granted:Q,messageId:f.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let O=f.qos===2?"pubrec":"puback",x=e.deserialize||(e.deserialize=wo(r?.headers.get?.("content-type"))),H=(f.payload?.length||0)>0?x(f.payload):void 0,F;try{F=await a.publish(f,H)}catch(Q){s.events.emit("error",Q,e,f,a),Jt.warn?.(Q),f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:F===!1?144:0},f.topic);break;case"pubrec":g({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":a.acknowledge(f.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,a?.disconnect(!0),s.events.emit("disconnected",a,e),s.sessions.delete(a),zr(!0,"connection","mqtt","disconnect"),Jt.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(R){s.events.emit("error",R,e,f,a),Jt.error?.(R),g({cmd:"disconnect"})}function g(R,L){let O=(0,wR.generate)(R,c);t(O),qe(O.length,"bytes-sent",L,b(R),"mqtt")}o(g,"sendPacket");function b(R){return R.qos>0?R.cmd+",qos="+R.qos:R.cmd}o(b,"packetMethodName");function S(R){return Io(R,r)}o(S,"serialize")}),l.on("error",f=>{Jt.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var wR,LJ,Ff,DJ,MJ,vJ,IR,Jt,UJ,CIe,OJ,AR,xJ=oe(()=>{wR=require("mqtt-packet");CJ();LJ=w(os());No();jn();xr();Ff=w(le());k();DJ=w(zn()),MJ=w(z()),vJ=require("events");iT();IR=(0,DJ.loggerWithTag)("auth-event"),Jt=(0,MJ.forComponent)("mqtt"),UJ=(0,Ff.get)(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(NIe,"bypassAuth");CIe=o(e=>UJ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(OIe,"start");AR=0;o(PJ,"onSocket")});function NR(e,t){if(t?.includes(".."))throw new QD(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var QD,JD=oe(()=>{QD=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(NR,"resolveBaseURLPath")});function BJ(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(a=>a[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var FJ=oe(()=>{o(BJ,"deriveCommonPatternBase")});function CR(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=o((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var XD=oe(()=>{o(CR,"deriveGlobOptions")});var kJ,ZD,PE,HJ=oe(()=>{JD();FJ();XD();kJ=require("micromatch"),ZD=class extends Error{static{o(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},PE=class{static{o(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=NR(this.name,this.config.urlPath),this.globOptions=CR(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new ZD(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,kJ.scan)(s).base),this.commonPatternBase=BJ(this.patternBases)}}});function qJ(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function uu(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(qJ(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(qJ(n,t)){t=t.slice(n.length+1);break}}}return(0,GJ.join)(e.baseURLPath,t)}var GJ,eM=oe(()=>{GJ=require("node:path");o(qJ,"pathStartsWithBase");o(uu,"deriveURLPath")});function $J(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var PR,VJ,KJ,tM,YJ,WJ,OR,zJ=oe(()=>{PR=require("node:events");HJ();VJ=w(z()),KJ=w(require("chokidar")),tM=require("node:path"),YJ=require("node:fs/promises");eM();WJ=require("micromatch"),OR=class extends PR.EventEmitter{static{o(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new PE(t,r,$J(n)),this.#r=s||VJ.default.loggerWithTag(t),this.ready=(0,PR.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#n(...[t,r,n]){if(r===""&&(r="/"),!(0,WJ.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,tM.join)(this.directory,r);switch(t){case"add":case"change":{let i=uu(this.#e,r,"file");(0,YJ.readFile)(s).then(a=>{let c={eventType:t,entryType:"file",contents:a,stats:n,absolutePath:s,urlPath:i};this.emit("all",c),this.emit(t,c)});break}case"unlink":{let i=uu(this.#e,r,"file"),a={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}case"addDir":case"unlinkDir":{let i=uu(this.#e,r,"directory"),a={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}}}#s(t){this.emit("error",t)}#i(){this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,tM.join)(this.#e.directory,r));return this.#t=KJ.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:o(r=>r!==this.#e.directory&&t.every(n=>!r.startsWith(n)),"ignored")}).on("all",this.#n.bind(this)).on("error",this.#s.bind(this)).on("ready",this.#i.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new PE(this.name,this.directory,$J(t)),this.#a()}};o($J,"castConfig")});var LR,rM=oe(()=>{LR={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var MR,jJ,QJ,JJ,XJ,ZJ,nM,sM,iM,oM,aM,DR,e3=oe(()=>{MR=require("events"),jJ=w(require("yaml")),QJ=w(require("chokidar")),JJ=require("node:fs/promises"),XJ=require("util"),ZJ=w(z());rM();nM=class extends Error{static{o(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},sM=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},iM=class extends Error{static{o(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},oM=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},aM=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},DR=class extends MR.EventEmitter{static{o(this,"OptionsWatcher")}#e;#t;#r;#n;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||ZJ.default.loggerWithTag(t),this.ready=(0,MR.once)(this,"ready"),this.#t=QJ.default.watch(r,{persistent:!1}).on("add",this.#a.bind(this)).on("change",this.#a.bind(this)).on("error",this.#d.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#a.bind(this))}#a(){(0,JJ.readFile)(this.#e,"utf-8").then(t=>{this.#n=jJ.default.parse(t),this.#n&&this.#s in this.#n?this.#r?this.#f(this.#n[this.#s],this.#r):(this.#r=this.#n[this.#s],this.emit("ready",this.#r)):this.#r&&(this.#r=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#n?(this.#o(),this.emit("remove")):(this.#o(),this.emit("ready"));return}this.emit("error",t)})}#d(t){this.emit("error",new nM(this.#e,t))}#c(t){this.#i.warn(`Configuration file ${t} was deleted. Reverting to default configuration. Recreate it to restore the options watcher.`),this.#o(),this.emit("remove")}#o(){this.#n=LR,this.#r=this.#n[this.#s]}#f(t,r,n=[]){if(!this.#l(r)||!this.#l(t)){this.#u(n,t);return}for(let s of Object.keys(r))s in t||this.#u(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let a=n.concat(s),c=this.#m(a);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#u(a,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#l(c)?this.#f(i,c,a):this.#u(a,i);continue}(0,XJ.isDeepStrictEqual)(i,c)||this.#u(a,i)}}#l(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#m(t){let r=this.#r;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#u(t,r){if(!this.#r)throw new sM;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new iM(t,r);let n=this.#r;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new oM(t,s);n=n[s]}if(n==null||typeof n!="object")throw new aM(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#r)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#r?this.#m(t):void 0}getAll(){return structuredClone(this.#r)}getRoot(){return this.#n}}});var xR,t3,vR,UR,r3=oe(()=>{xR=require("node:events");zJ();e3();t3=w(z());bL();vR=class extends Error{static{o(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},UR=class extends xR.EventEmitter{static{o(this,"Scope")}#e;#t;#r;#n;#s;#i;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#r=t,this.#t=r,this.#e=n,this.#i=(0,t3.loggerWithTag)(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,xR.once)(this,"ready"),this.options=new DR(t,n,this.#i).on("error",this.#d.bind(this)).on("change",this.#f.bind(this)()).on("ready",this.#a.bind(this))}get logger(){return this.#i}get name(){return this.#r}get directory(){return this.#t}#a(){this.emit("ready")}#d(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#c(t){let r=new OR(this.#r,this.#t,t,this.#i).on("error",this.#d.bind(this)).on("add",this.#o("add")).on("change",this.#o("change")).on("unlink",this.#o("unlink")).on("addDir",this.#o("addDir")).on("unlinkDir",this.#o("unlinkDir"));return this.#s.push(r),r}#o(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#f(){let t=this;return o(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#n){t.#n=t.#c(i);return}t.#n.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#l(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return t.files}handleEntry(t,r){if(t===void 0){if(this.#n)return this.#n;let s=this.#l();if(s)return this.#n=this.#c(s),this.#n;this.emit("error",new vR);return}if(typeof t=="function"){if(this.#n)return this.#n.on("all",t);let s=this.#l();if(s)return this.#n=this.#c(s),this.#n.on("all",t);this.emit("error",new vR);return}let n=this.#c(t);return r?n.on("all",r):n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),p4()}}});function du(e){return typeof e=="string"&&e.trim()!==""}function cM(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>du(t))}function o3(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function PIe(e){e.config.root&&LE.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 hM(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(o3(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let a=(0,DE.join)(e.directory,i);BR.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,a,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,a,e.resources))}return s}async function a3(e){let t=!1;if(t=await PIe(e),t)return t;let r=await(0,n3.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,DE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=uu(e,n.path,"directory");BR.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=uu(e,n.path,"file"),a=await(0,s3.readFile)(s);BR.isMainThread&&e.module.setupFile?(await e.module.setupFile(a,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(a,i,s,e.resources),t=!0)}else LE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var BR,n3,LE,DE,s3,i3,FR,Oi,lM,uM,dM,fM,mM,pM,hM,EM,_M,c3=oe(()=>{BR=require("node:worker_threads"),n3=w(require("fast-glob")),LE=w(z());JD();XD();DE=require("node:path"),s3=require("node:fs/promises");eM();i3=require("micromatch"),FR=class{static{o(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!du(this.config.files)&&!cM(this.config.files)&&!o3(this.config.files))throw new lM(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!cM(this.config.files.source)&&!du(this.config.files.source))throw new uM(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new dM(this);if(this.config.files.ignore!==void 0&&!cM(this.config.files.ignore)&&!du(this.config.files.ignore))throw new fM(this)}if(this.config.root!==void 0&&!du(this.config.root))throw new pM(this);if(this.config.path!==void 0&&!du(this.config.path))throw new EM(this);if(this.config.path&&(LE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!du(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new _M(this);this.globOptions=CR(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new mM(this,r);return r.startsWith("/")&&(LE.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,i3.scan)(r).base),this.baseURLPath=NR(this.name,this.config.urlPath)}},Oi=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,DE.basename)(r.directory)}) ${t}`)}},lM=class extends Oi{static{o(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},uM=class extends Oi{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},dM=class extends Oi{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},fM=class extends Oi{static{o(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},mM=class extends Oi{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},pM=class extends Oi{static{o(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},hM=class extends Oi{static{o(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},EM=class extends Oi{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},_M=class extends Oi{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(du,"isNonEmptyString");o(cM,"isArrayOfNonEmptyStrings");o(o3,"isObject");o(PIe,"handleRoots");o(a3,"processResourceExtensionComponent")});var _y={};be(_y,{getComponentName:()=>py,loadComponent:()=>GR,loadComponentDirectories:()=>f3,setErrorReporter:()=>DIe});function f3(e,t){t&&(SM=t),e&&(bM=e);let r=[];if((0,kt.existsSync)(gM)){let s=(0,kt.readdirSync)(gM,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,on.join)(gM,a);r.push(GR(c,SM,_b,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(GR(n,SM,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{d3=!0})}function DIe(e){HR=e}function MIe(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,on.join)(e,"node_modules");(0,kt.existsSync)(s)||(0,kt.mkdirSync)(s);let i=(0,on.join)(s,"harperdb");if((0,kt.existsSync)(i)){if((0,kt.realpathSync)(i)===(0,kt.realpathSync)(RM.PACKAGE_ROOT))return t();(0,kt.rmSync)(i,{recursive:!0,force:!0})}(0,kt.symlinkSync)(RM.PACKAGE_ROOT,i,"dir"),t()}finally{da.primaryStore.unlock(e,0)}})}function m3(e,t){return e.ready.then(()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.name}. Expected a number, received: ${typeof r}`);let n,s;return da.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(m3(e,t))})?Promise.race([t.handleApplication(e),new Promise((i,a)=>setTimeout(()=>a(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{da.primaryStore.unlock(e.name,0)}):new Promise((i,a)=>{n=i,s=setTimeout(()=>{a(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)})})}async function GR(e,t,r,n,s,i){let a=(0,kt.realpathSync)(e);if(kR.has(a))return kR.get(a);kR.set(a,!0),s&&(bM=s);try{let c,l=(0,on.join)(e,"harperdb-config.yaml");if((0,kt.existsSync)(l)?c=n?(0,$R.getConfigObj)():(0,yM.parseDocument)((0,kt.readFileSync)(l,"utf8")).toJSON():!n&&(0,kt.existsSync)(l=(0,on.join)(e,"config.yaml"))?c=(0,yM.parseDocument)((0,kt.readFileSync)(l,"utf8")).toJSON():c=LR,!n)try{await MIe(e)}catch(m){Ea.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&Ea.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=qR,d={};for(let m in c){let p=`${(0,on.basename)(e)}.${m}`;qR=m;let h=c[m];if(!h)continue;let E,g=h.package;try{if(g){let O;if(n)O=(0,on.join)(e,"components",m);else{let x=e;for(;!(0,kt.existsSync)(O=(0,on.join)(x,"node_modules",m));)if(x=(0,on.dirname)(x),x.length<(0,u3.getHdbBasePath)().length){O=null;break}}if(O)E=await GR(O,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${g}`)}else E=LIe[m];if(!E)continue;qo.loading(p);let b=o(O=>(O.origin=r,Xe(O)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,R=S?.securePort||S?.https&&S.port,L=!S?.https&&S?.port;if("handleApplication"in E&&("start"in E||"startOnMainThread"in E||"handleFile"in E||"handleDirectory"in E||"setupFile"in E||"setupDirectory"in E)){let O=new Error(`Plugin ${m} is exporting old extension APIs. Remove them.`);throw qo.failed(p,O,`Component '${p}' failed to load`),O}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&Ea.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let O=new UR(m,e,l,t,Me);await m3(O,E),qo.loaded(p,`Component '${p}' loaded successfully`);continue}if(TM.isMainThread&&(E=await E.startOnMainThread?.({server:Me,ensureTable:b,port:L,securePort:R,resources:t,...h})||E,n&&S))for(let O of[L,R])try{if(+O&&!l3.includes(O)){let x=AM.get(U.HTTP_SESSIONAFFINITY);x&&Ea.default.warn("Session affinity is not recommended and may cause memory leaks"),(x||!ES)&&(l3.push(O),KP(O,x))}}catch(x){console.error("Error listening on socket",O,x,m)}if(t.isWorker&&(E=await E.start?.({server:Me,ensureTable:b,port:L,securePort:R,resources:t,...h})||E),bM.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let O=new FR({config:h,name:m,directory:e,module:E,resources:t});d[m]=await a3(O)}qo.loaded(p,`Component '${p}' loaded successfully`)}catch(b){b.message=`Could not load component '${m}' for application '${(0,on.basename)(e)}' due to: ${b.message}`,HR?.(b),((0,ME.getWorkerIndex)()===0?console:Ea.default).error(b),t.set(h.path||"/",new sl(b),null,!0),qo.failed(p,b,`Could not load component '${p}'`)}}if(qR=u,TM.isMainThread&&!d3&&i&&(0,ME.watchDir)(e,async()=>f3()),c.extensionModule||c.pluginModule){let m=await mS((0,on.join)(e,c.extensionModule||c.pluginModule));return kR.set(a,m),m}let f=Object.values(d);if(f.length>0&&f.every(m=>!m)&&t.isWorker){let m=`${e} did not load any modules, resources, or files, is this a valid component?`;HR?.(new Error(m)),((0,ME.getWorkerIndex)()===0?console:Ea.default).error(m),qo.failed((0,on.basename)(e),m)}for(let[m,p]of Object.entries(d))p||Ea.default.warn(`Component ${m} from (${(0,on.basename)(e)}) did not load any functionality.`)}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,HR?.(c),t.set("",new sl(c))}}var kt,on,TM,yM,AM,RM,Ea,ME,u3,$R,gM,bM,d3,SM,LIe,l3,kR,HR,qR,py,Wh=oe(()=>{kt=require("node:fs"),on=require("node:path"),TM=require("node:worker_threads"),yM=require("yaml"),AM=w(le()),RM=w(bt());k();jq();iG();SG();IG();wG();qG();W2();z2();Q2();Ea=w(z());rJ();ME=w(Je());bN();xr();Ne();WP();u3=w(le());pJ();Ny();RJ();ls();xJ();$R=w(Et());Fp();kA();r3();c3();kP();cE();Sp();rM();gM=(0,$R.resolvePath)(AM.get(U.COMPONENTSROOT)),bM=new Map;o(f3,"loadComponentDirectories");LIe={REST:gS,rest:gS,graphql:hN,graphqlSchema:mN,roles:RN,jsResource:AN,fastifyRoutes:MD,login:wN,static:UD,operationsApi:FD,customFunctions:{},http:my,clustering:VD,replication:Yo,authentication:Zh,mqtt:jD,loadEnv:xD,logging:Ea.default,dataLoader:BD},l3=[],kR=new Map;o(DIe,"setErrorReporter");py=o(()=>qR,"getComponentName");o(MIe,"symlinkHarperModule");o(m3,"sequentiallyHandleApplication");o(GR,"loadComponent")});var gy=v((y$e,p3)=>{var{isMainThread:IM}=require("worker_threads"),{getTables:vIe}=(Ne(),D(ft)),{loadComponentDirectories:UIe,loadComponent:xIe}=(Wh(),D(_y)),{resetResources:BIe}=(Ua(),D(HA)),FIe=Et(),{dirname:kIe}=require("path"),{getConnection:HIe}=xt(),qIe=le(),{CONFIG_PARAMS:GIe}=(k(),D(Y)),{loadCertificates:$Ie}=ds(),{installApplications:VIe}=(Ly(),D(Py)),{loadAndWatchLicensesDir:KIe}=(Gh(),D(ay)),wM=new Map;async function YIe(e=!1){!IM&&qIe.get(GIe.CLUSTERING_ENABLED)&&HIe();try{IM&&await VIe()}catch(n){console.error(n)}let t=BIe();vIe(),t.isWorker=e,IM&&KIe(),await $Ie(),await xIe(kIe(FIe.getConfigFilePath()),t,"hdb",!0,wM),await UIe(wM,t);let r=[];for(let[n]of wM)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o(YIe,"loadRootComponents");p3.exports.loadRootComponents=YIe});var Je=v((b$e,Li)=>{"use strict";JE();var{Worker:WIe,MessageChannel:zIe,parentPort:ho,isMainThread:LM,threadId:jIe,workerData:Eo}=require("worker_threads"),{PACKAGE_ROOT:QIe}=bt(),{join:g3,isAbsolute:JIe,extname:XIe}=require("path"),{server:S3}=(xr(),D(nm)),{watch:ZIe,readdir:ewe}=require("fs/promises"),{totalmem:h3}=require("os"),kf=(k(),D(Y)),T3=le(),Pi=z(),{randomBytes:twe}=require("crypto"),{_assignPackageExport:rwe}=ri(),E3=1024*1024,_a=[],Js=[],nwe=50,DM=1e4,swe="restart",y3="request_thread_info",R3="resource_report",b3="thread_info",A3="added-port",iwe="ack",NM;rwe("threads",Js);Li.exports={startWorker:CM,restartWorkers:vM,shutdownWorkers:P3,shutdownWorkersNow:uwe,workers:_a,setMonitorListener:gwe,onMessageFromWorkers:dwe,onMessageByType:D3,broadcast:mwe,broadcastWithAcknowledgement:hwe,setChildListenerByType:lwe,getWorkerIndex:I3,getWorkerCount:w3,getTicketKeys:C3,setMainIsWorker:awe,setTerminateTimeout:owe,restartNumber:Eo?.restartNumber||1};Js.onMessageByType=D3;Js.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Js.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Li.exports.whenThreadsStarted=new Promise(e=>{Li.exports.threadsHaveStarted=e});var MM;function owe(e){DM=e}o(owe,"setTerminateTimeout");function I3(){return Eo?Eo.workerIndex:MM?0:void 0}o(I3,"getWorkerIndex");function w3(){return Eo?Eo.workerCount:MM?1:void 0}o(w3,"getWorkerCount");function awe(e){MM=e,Li.exports.threadsHaveStarted()}o(awe,"setMainIsWorker");var N3=1,VR;function C3(){return VR||(VR=LM?twe(48):Eo.ticketKeys,VR)}o(C3,"getTicketKeys");Object.defineProperty(S3,"workerIndex",{get(){return I3()}});Object.defineProperty(S3,"workerCount",{get(){return w3()}});var O3={[y3](e,t){Ewe(t)},[R3](e,t){_we(t,e)}};function CM(e,t={}){let r=process.constrainedMemory?.()||h3();r=Math.min(r,h3(),2e4*E3);let n=T3.get(kf.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/E3/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],a=[];for(let l of Js){let u=new zIe;u.existingPort=l,i.push(u),a.push(u.port2)}XIe(e)||(e+=".js");let c=new WIe(JIe(e)?e:g3(QIe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps","--expose-internals"],argv:process.argv.slice(2),workerData:{addPorts:a,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:N3=t.threadCount,name:t.name,restartNumber:Li.exports.restartNumber,ticketKeys:C3()},transferList:a,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:A3,port:l,threadId:c.threadId},[l]);return YR(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>CM(e,t),c.on("error",l=>{Pi.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{_a.splice(_a.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<nwe?(t.unexpectedRestarts=c.unexpectedRestarts+1,CM(e,t)):Pi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{O3[l.type]?.(l,c)}),_a.push(c),Twe(),t.onStarted&&t.onStarted(c),c.name=t.name,c}o(CM,"startWorker");var cwe=[kf.THREAD_TYPES.HTTP];async function vM(e=null,t=Math.max(N3>3,1),r=!0){if(LM){try{process.chdir(process.cwd())}catch(a){Pi.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=gy();await a()}Li.exports.restartNumber++,t<1&&(t=t*_a.length);let n=[],s=[];for(let a of _a.slice(0)){if(e&&a.name!==e||a.wasShutdown)continue;Pi.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:Li.exports.restartNumber,type:kf.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=cwe.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Pi.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},DM*2).unref();a.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&a.startCopy(),u()})});if(n.push(l),c&&r){let u=a.startCopy(),d=new Promise(f=>{let m=o(p=>{p.type===kf.ITC_EVENT_TYPES.CHILD_STARTED&&(Pi.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Pi.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}=Af();r&&(e==="http"||!e)&&T3.get(kf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else ho.postMessage({type:swe,workerType:e})}o(vM,"restartWorkers");function lwe(e,t){O3[e]=t}o(lwe,"setChildListenerByType");function P3(e){return vM(e,1/0,!1)}o(P3,"shutdownWorkers");function uwe(e){return P3(e),Promise.all(_a.map(t=>t.terminate()))}o(uwe,"shutdownWorkersNow");var L3=[];function dwe(e){L3.push(e)}o(dwe,"onMessageFromWorkers");var OM=new Map;function D3(e,t){let r=OM.get(e);r||OM.set(e,r=[]),r.push(t)}o(D3,"onMessageByType");var fwe=10;async function mwe(e,t){let r=0;for(let n of Js)try{n.postMessage(e),r++>fwe&&(r=0,await new Promise(setImmediate))}catch(s){Pi.error("Unable to send message to worker",s)}t&&v3(e,null)}o(mwe,"broadcast");var KR=new Map,pwe=1;function hwe(e){return new Promise(t=>{let r=0;for(let n of Js)try{let s=pwe++,i=o(()=>{KR.delete(s),--r===0&&t(),n!==ho&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,KR.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of KR)a.port===n&&a()})),n.postMessage(e),r++}catch(s){Pi.error("Unable to send message to worker",s)}r===0&&t()})}o(hwe,"broadcastWithAcknowledgement");function Ewe(e){e.postMessage({type:b3,workers:M3()})}o(Ewe,"sendThreadInfo");function M3(){let e=Date.now();return _a.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}o(M3,"getChildWorkerInfo");function _we(e,t){e.resources=t,e.resources.updated=Date.now()}o(_we,"recordResourceReport");var PM;function gwe(e){PM=e}o(gwe,"setMonitorListener");var Swe=1e3,_3=!1;function Twe(){_3||(_3=!0,setInterval(()=>{for(let e of _a){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}PM&&PM()},Swe).unref())}o(Twe,"startMonitoring");var ywe=1e3;if(ho&&Eo?.addPorts){YR(ho);for(let e=0,t=Eo.addPorts.length;e<t;e++){let r=Eo.addPorts[e];r.threadId=Eo.addThreadIds[e],YR(r)}setInterval(()=>{let e=process.memoryUsage();ho.postMessage({type:R3,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},ywe).unref(),NM=o(()=>new Promise((e,t)=>{ho.on("message",r),ho.postMessage({type:y3});function r(n){n.type===b3&&(ho.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else NM=M3;Li.exports.getThreadInfo=NM;function YR(e,t){Js.push(e),e.on("message",r=>{if(r.type===A3)r.port.threadId=r.threadId,YR(r.port);else if(r.type===iwe){let n=KR.get(r.id);n&&n()}else v3(r,e)}).on("close",()=>{Js.splice(Js.indexOf(e),1)}).on("exit",()=>{Js.splice(Js.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(YR,"addPort");function v3(e,t){for(let n of L3)n(e,t);let r=OM.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Pi.error(s)}}o(v3,"notifyMessageListeners");if(LM){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await ewe(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(g3(s,a.name));try{for await(let{filename:a}of ZIe(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await vM(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(a){console.warn("Error trying to watch component directory",s,a)}},"watchDir");Li.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else ho.on("message",async e=>{let{type:t}=e;t===kf.ITC_EVENT_TYPES.SHUTDOWN&&(Li.exports.restartNumber=e.restartNumber,ho.unref(),setTimeout(()=>{Pi.warn("Thread did not voluntarily terminate",jIe),process.exit(0)},DM).unref())})});var H3=v((N$e,k3)=>{"use strict";var{promises:Hf,createReadStream:Rwe,createWriteStream:bwe}=require("fs"),{createGzip:Awe}=require("zlib"),{promisify:Iwe}=require("util"),{pipeline:wwe}=require("stream"),Nwe=Iwe(wwe),xM=require("path"),F3=le();F3.initSync();var WR=z(),{CONFIG_PARAMS:Cwe,ITC_EVENT_TYPES:I$e}=(k(),D(Y)),{onMessageFromWorkers:w$e}=Je(),{convertToMS:U3}=ce(),{onStorageReclamation:Owe}=(v_(),D(XU)),Pwe=6e4,Lwe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Dwe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",UM,x3;k3.exports=Mwe;function Mwe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(Owe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(Lwe);if(!i)throw new Error(Dwe);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=U3(r));let d;return UM=Date.now(),WR.trace("Log rotate enabled, maxSize:",t,"interval:",r),x3=setInterval(async()=>{if(l){let f;f=await Hf.stat(e.path),f.size>=l&&(d=await B3(e.path,i))}if(u&&Date.now()-UM>=u&&(d=await B3(e.path,i),UM=Date.now()),n||c){let f=U3(n??"1M")/(1+c);c=0;let m=await Hf.readdir(i);for(let p of m)try{let h=await Hf.stat(xM.join(i,p));Date.now()-h.mtimeMs>f&&await Hf.unlink(xM.join(i,p))}catch(h){WR.error("Error trying to remove log",p,h)}}},a??Pwe).unref(),{end(){clearInterval(x3)},getLastRotatedLogPath(){return d}}}o(Mwe,"logRotator");async function B3(e,t){let r=F3.get(Cwe.LOGGING_ROTATION_COMPRESS),n=xM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await Hf.rename(e,n),r&&(e=n,n+=".gz",await Nwe(Rwe(e),Awe(),bwe(n)),await Hf.unlink(e)),WR.closeLogFile(),WR.notify(`hdb.log rotated, old log moved to ${n}`),n}o(B3,"moveLogFile")});var K3={};be(K3,{RootConfigWatcher:()=>BM});var q3,G3,$3,zR,V3,BM,Y3=oe(()=>{q3=w(require("chokidar")),G3=require("node:fs/promises"),$3=w(Et()),zR=require("node:stream"),V3=require("yaml"),BM=class extends zR.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;ready;constructor(){super(),this.#e=(0,$3.getConfigFilePath)(),this.ready=(0,zR.once)(this,"ready"),this.#t=q3.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,G3.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,V3.parse)(t);if(!this.#r){this.#r=r,this.emit("ready",this.#r);return}this.emit("change",this.#r=r)}).catch(t=>{})}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var z=v((D$e,rb)=>{"use strict";var ga=require("fs-extra"),{workerData:vwe,threadId:Uwe,isMainThread:X3}=require("worker_threads"),xE=require("path"),Z3=require("yaml"),eX=require("properties-reader"),$r=(k(),D(Y)),W3=$c(),xwe=require("os"),{PACKAGE_ROOT:KM}=bt(),{_assignPackageExport:Bwe}=ri(),{Console:Fwe}=require("console"),kM=process.env.IS_SCRIPTED_SERVICE?function(){}:process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),z3=new Map,{join:Sa}=xE,j3=1e4,ar={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},kwe={STDOUT:"stdOut",STDERR:"stdErr"},L$e=Sa(KM,"logs"),Hwe=Sa(KM,"config/yaml/",$r.HDB_DEFAULT_CONFIG_FILE),qwe=1e4,BE,FE,jR,_o,HM,FM,JR,Ot,ys,XR,ZR,qf,UE,vE;function QR(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=xE.dirname(n)):t.root?n=Sa(t.root,HM):(n=Ot.path,t.root||(t.root=xE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=ar[t.level]??Ot?.level??ar.info,tX(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Ot.path===e.path&&r)}o(QR,"updateLogger");function tX(e){let t=e.conditional??(e.conditional={});t.notify=ar.notify>=e.level?e.notify.bind(e):void 0,t.fatal=ar.fatal>=e.level?e.fatal.bind(e):void 0,t.error=ar.error>=e.level?e.error.bind(e):void 0,t.warn=ar.warn>=e.level?e.warn.bind(e):void 0,t.info=ar.info>=e.level?e.info.bind(e):void 0,t.debug=ar.debug>=e.level?e.debug.bind(e):void 0,t.trace=ar.trace>=e.level?e.trace.bind(e):void 0}o(tX,"updateConditional");async function qM(){vE||(vE=new aNe,await vE.ready,vE.on("change",qM));let e=vE.config,t=e.logging??{};QR(Ot,t),JR=Ot.path,BE=t.console??!1,t.external&&QR(ys,t.external);for(let r in e){let n=e[r];n.logging?QR(Ot.forComponent(r),n.logging,r):Ot.hasComponent(r)&&QR(Ot.forComponent(r),t,r)}}o(qM,"updateLogSettings");var GM=class extends Fwe{static{o(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){In="trace",this.level<=ar.trace&&super.info(...t),In="info"}debug(...t){In="debug",this.level<=ar.debug&&super.info(...t),In="info"}info(...t){In="info",this.level<=ar.info&&super.info(...t),In="info"}warn(...t){In="warn",this.level<=ar.warn&&super.warn(...t),In="info"}error(...t){In="error",this.level<=ar.error&&super.error(...t),In="info"}fatal(...t){qf=!0;try{In="fatal",this.level<=ar.fatal&&super.error(...t),In="info"}finally{qf=!1}}notify(...t){qf=!0;try{In="notify",this.level<=ar.notify&&super.info(...t),In="info"}finally{qf=!1}}withTag(t){return nX(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};UE===void 0&&rX();rb.exports={notify:Qwe,fatal:Jwe,error:VM,warn:Xwe,info:Wwe,debug:jwe,trace:zwe,logLevel:_o,loggerWithTag:nX,suppressLogging:Kwe,initLogSettings:rX,logCustomLevel:Zwe,closeLogFile:sX,createLogger:tb,logsAtLevel:$we,getLogFilePath:o(()=>JR,"getLogFilePath"),forComponent:o(e=>Ot.forComponent(e),"forComponent"),setMainLogger:iNe,setLogLevel:tNe,OUTPUTS:kwe,AuthAuditLog:oNe,start:qM,startOnMainThread:qM,errorToString:sNe,disableStdio:Gwe};function Gwe(){kM=o(function(){},"nativeStdWrite")}o(Gwe,"disableStdio");rb.exports.externalLogger={notify(...e){ys.notify(...e)},fatal(...e){ys.fatal(...e)},error(...e){ys.error(...e)},warn(...e){ys.warn(...e)},info(...e){ys.info(...e)},debug(...e){ys.debug(...e)},trace(...e){ys.trace(...e)},withTag(e){return ys.withTag(e)}};Bwe("logger",rb.exports.externalLogger);function $we(e){return ar[_o]<=ar[e]}o($we,"logsAtLevel");function rX(e=!1){try{if(UE===void 0||e){sX();let t=eNe(),r=W3(["ROOTPATH"]);try{UE=eX(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!ga.pathExistsSync(Sa(r.ROOTPATH,$r.HDB_CONFIG_FILE)))throw s}let n;if({level:_o,configLogPath:FM,toFile:FE,logConsole:BE,rotation:n,toStream:jR}=rNe(r.ROOTPATH?Sa(r.ROOTPATH,$r.HDB_CONFIG_FILE):UE.get("settings_path")),HM=$r.LOG_NAMES.HDB,JR=Sa(FM,HM),Ot=tb({path:JR,level:_o,stdStreams:jR,rotation:n}),ys=Ot.forComponent("external"),ys.tag=null,X3)try{require("segfault-handler").registerHandler(Sa(FM,"crash.log"))}catch{}}}catch(t){if(UE=void 0,t.code===$r.NODE_ERROR_CODES.ENOENT||t.code===$r.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=W3(Object.keys($r.CONFIG_PARAM_MAP),!0);for(let s in r){let i=$r.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let a=r[s];if(i===$r.CONFIG_PARAMS.LOGGING_LEVEL){_o=a;continue}i===$r.CONFIG_PARAMS.LOGGING_CONSOLE&&(BE=i)}let{defaultLevel:n}=nNe();FE=!1,jR=!0,_o=_o===void 0?n:_o,Ot=tb({level:_o}),ys=Ot.forComponent("external"),ys.tag=null;return}throw VM("Error initializing log settings"),VM(t),t}process.env.DEV_MODE&&(jR=!0),Vwe()}o(rX,"initLogSettings");var vc=!0;function Vwe(){FE&&(process.stdout.write=function(e){return typeof e=="string"&&vc&&BE&&(e=e.toString(),e[e.length-1]===`
|
|
135
|
+
`&&(e=e.slice(0,-1)),ZR(e)),kM.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&vc&&BE&&(e[e.length-1]===`
|
|
136
|
+
`&&(e=e.slice(0,-1)),ZR(e)),kM.apply(process.stderr,arguments)})}o(Vwe,"stdioLogging");function nX(e,t,r=Ot){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<=ar[i]?function(...a){eb=e;try{return s.call(r,...a)}finally{eb=void 0}}:null}o(n,"logWithTag")}o(nX,"loggerWithTag");function Kwe(e){try{vc=!1,e()}finally{vc=!0}}o(Kwe,"suppressLogging");var Ywe=vwe?.name?.replace(/ /g,"-")||"main",In="info",$M,eb;function tb({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:a}){t||(t="info");let c=ar[t],l;function u(p){if(FE)if(l.logToStdstreams){f(p.replace(/\x1b\[[0-9;]*m/g,"")),vc=!1;try{process.stdout.write(p)}finally{vc=!0}}else f(p);else r&&process.stdout.write(p)}o(u,"logStdOut");function d(p){if(FE){if(f(p),r){vc=!1;try{process.stderr.write(p)}finally{vc=!0}}}else r&&process.stderr.write(p)}o(d,"logStdErr");let f=e&&J3(e,n,s);function m(p){return{write(h){let E=[In];E.unshift($M||Ywe+"/"+Uwe),eb&&E.push(eb),l.tag&&E.push(l.tag),p(`[${E.join("] [")}]: ${h}`)}}}if(o(m,"logPrepend"),s&&(ZR=f),l=new GM({stdout:m(i??u),stderr:m(i??d),colorMode:r??!1},c),tX(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(p){e=p,f=J3(e,l.rotation,s),s&&(ZR=f)},enumerable:!0}),l.closeLogFile=f?.closeLogFile,l.logToStdstreams=r,!a){let p=new Map;l.forComponent=function(h){let E=p.get(h);return E||(E=tb({path:e,level:t,stdStreams:r,isExternalInstance:h==="external",rotation:n,writeToLog:i,component:!0}),p.set(h,E)),E},l.hasComponent=function(h){return p.has(h)}}return l}o(tb,"createLogger");var Q3=100;function J3(e,t,r){let n=z3.get(e),s,i,a,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,z3.set(e,n)),X3&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let h=H3();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(`
|
|
137
137
|
`)?"":`
|
|
138
|
-
`}`;c?(c.length<
|
|
139
|
-
`),qf&&(clearTimeout(a),f())):qf||l<performance.now()+j3?f(E):(l=Math.min(l,performance.now()+j3),c=[E],a=setTimeout(f,1))}function f(h){if(p(),s){let E=performance.now();ga.appendFileSync(s,c?c.join(""):h);let g=performance.now();l=Math.max(g,l)+(g-E)*50}else i||console.log(c?c.join(""):h);c&&(c=null)}function m(){try{ga.closeSync(s)}catch{}s=null,r&&(XR=null)}function p(h){if(!s){try{s=ga.openSync(e,"a"),r&&(XR=s)}catch(E){if(E.code==="ENOENT"&&!h)return ga.mkdirpSync(BE.dirname(e)),p(!0);i||(i=!0,console.error(E))}setTimeout(()=>{m()},$we).unref()}}}o(Q3,"getFileLogger");function jwe(...e){Ot.info(...e)}o(jwe,"info");function Qwe(...e){Ot.trace(...e)}o(Qwe,"trace");function VM(...e){Ot.error(...e)}o(VM,"error");function Jwe(...e){Ot.debug(...e)}o(Jwe,"debug");function Xwe(...e){Ot.notify(...e)}o(Xwe,"notify");function Zwe(...e){Ot.fatal(...e)}o(Zwe,"fatal");function eNe(...e){Ot.warn(...e)}o(eNe,"warn");function tNe(e,t,r,...n){$M=r.service_name;try{Ot[e](...n)}finally{$M=void 0}}o(tNe,"logCustomLevel");function rNe(){let e;try{e=Fwe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Sa(e,$r.HDB_HOME_DIR_NAME,$r.BOOT_PROPS_FILE_NAME);return ga.existsSync(t)||(t=Sa(KM,"utility/hdb_boot_properties.file")),t}o(rNe,"getPropsFilePath");function nNe(e){_o=e}o(nNe,"setLogLevel");function sNe(e){try{if(e.includes("config/settings.js")){let l=Z3(e);return{level:l.get($r.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:BE.dirname(l.get($r.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:l.get($r.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:l.get($r.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=X3.parseDocument(ga.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),a=t.getIn(["logging","console"]),c=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:a,rotation:c}}catch(t){if(t.code===$r.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(sNe,"getLogConfig");function iNe(){try{let e=X3.parseDocument(ga.readFileSync(Gwe,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{defaultLevel:t,defaultToFile:r,defaultToStream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}o(iNe,"getDefaultConfig");function oNe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}o(oNe,"errorToString");function aNe(e){Ot=e}o(aNe,"setMainLogger");function nX(){try{ga.closeSync(XR)}catch{}XR=null}o(nX,"closeLogFile");function cNe(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}o(cNe,"AuthAuditLog");var{RootConfigWatcher:lNe}=(K3(),D(V3))});var le=v((cX,lX)=>{"use strict";var YM=require("fs-extra"),fu=require("path"),sX=require("os"),uNe=require("properties-reader"),qE=z(),HE=ce(),Fe=(k(),D(Y)),nb=Et(),dNe="Error initializing environment manager",sb="BOOT_PROPS_FILE_PATH",iX=!1,fNe={[Fe.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Fe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ta={};Object.assign(cX,lX.exports={BOOT_PROPS_FILE_PATH:sb,getHdbBasePath:mNe,setHdbBasePath:pNe,get:oX,initSync:ENe,setProperty:tt,initTestEnvironment:gNe,setCloneVar:_Ne});function mNe(){return Ta[Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(mNe,"getHdbBasePath");function pNe(e){Ta[Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(pNe,"setHdbBasePath");function oX(e){let t=nb.getConfigValue(e);return t===void 0?Ta[e]:t}o(oX,"get");function tt(e,t){fNe[e]&&(Ta[e]=t),nb.updateConfigObject(e,t)}o(tt,"setProperty");function hNe(){let e;try{e=HE.getPropsFilePath(),YM.accessSync(e,YM.constants.F_OK|YM.constants.R_OK),iX=!0;let t=uNe(e);return Ta[Fe.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Fe.HDB_SETTINGS_NAMES.INSTALL_USER),Ta[Fe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Fe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ta[sb]=e,!0}catch{return qE.trace(`Environment manager found no properties file at ${e}`),!1}}o(hNe,"doesPropFileExist");function ENe(e=!1){try{((iX||hNe()||HE.noBootFile())&&!aX||e)&&(nb.initConfig(e),Ta[Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=nb.getConfigValue(Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){qE.error(dNe),qE.error(t),console.error(t),process.exit(1)}}o(ENe,"initSync");var aX=!1;function _Ne(e){aX=e}o(_Ne,"setCloneVar");function gNe(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:a,local_studio_on:c}=e,l=fu.join(__dirname,"../../","unitTests");Ta[sb]=fu.join(l,"hdb_boot_properties.file"),tt(Fe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,fu.join(l,"settings.test")),tt(Fe.HDB_SETTINGS_NAMES.INSTALL_USER,sX.userInfo()?sX.userInfo().username:void 0),tt(Fe.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),tt(Fe.HDB_SETTINGS_NAMES.LOG_PATH_KEY,fu.join(l,"envDir","log")),tt(Fe.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),tt(Fe.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),tt(Fe.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),tt(Fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,fu.join(l,"envDir")),tt(Fe.CONFIG_PARAMS.STORAGE_PATH,fu.join(l,"envDir")),s&&(tt(Fe.CONFIG_PARAMS.HTTP_SECUREPORT,oX(Fe.CONFIG_PARAMS.HTTP_PORT)),tt(Fe.CONFIG_PARAMS.HTTP_PORT,null)),tt(Fe.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),tt(Fe.CONFIG_PARAMS.HTTP_PORT,9926),tt(Fe.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),tt(Fe.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),tt(Fe.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,HE.isEmpty(i)?!1:i),tt(Fe.CONFIG_PARAMS.HTTP_CORS,HE.isEmpty(i)?!1:i),tt(Fe.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),tt(Fe.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),tt(Fe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),tt(Fe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),tt(Fe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,fu.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),tt(Fe.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,HE.isEmpty(c)?!1:c),a&&(tt("CORS_ACCESSLIST",a),tt(Fe.CONFIG_PARAMS.HTTP_CORSACCESSLIST,a)),n&&(tt(Fe.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),tt(Fe.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(tt(Fe.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),tt(Fe.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(tt(Fe.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),tt(Fe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${sb}. Please check your boot props and settings files`;qE.fatal(r),qE.error(t)}}o(gNe,"initTestEnvironment")});var pX=v((B$e,mX)=>{"use strict";var fX=require("joi"),{string:GE,boolean:uX,array:SNe}=fX.types(),dX=(k(),D(Y)),TNe=ot();mX.exports=yNe;function yNe(e){let t=fX.object({operation:GE.valid(dX.OPERATIONS_ENUM.ADD_NODE,dX.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:GE.required(),subscriptions:SNe.items({schema:GE.required(),table:GE.optional(),hash_attribute:GE.optional(),subscribe:uX.required(),publish:uX.required()}).min(1).required()});return TNe.validateBySchema(e,t)}o(yNe,"updateRemoteSourceValidator")});var $E=v((k$e,hX)=>{"use strict";var WM=class{static{o(this,"UpdateRemoteResponseObject")}constructor(t,r,n=void 0){this.status=t,this.message=r,this.system_info=n}};hX.exports=WM});var SX=v((q$e,gX)=>{"use strict";var RNe=pX(),ya=z(),zM=mt(),bNe=(k(),D(Y)),jM=Fs(),mu=xt(),EX=mh(),ANe=zu(),{Node:INe,NodeSubscription:_X}=ac(),QM=$E(),JM=ce(),wNe=le(),{cloneDeep:NNe}=require("lodash"),{broadcast:CNe}=Je();gX.exports=ONe;async function ONe(e){try{let t=RNe(e);if(t)return ya.error(`Validation error in updateRemoteSource: ${t.message}`),new QM(zM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:n,system_info:s}=e,i=[],a=NNe(await jM.getNodeRecord(n)),c=!JM.isEmptyOrZeroLength(a);a=c?a[0]:a,c&&ya.trace(`Existing record found for ${n}, updating records subscriptions`);for(let u=0,d=r.length;u<d;u++){let f=r[u],m=f.schema,p=f.table;if(!JM.doesSchemaExist(m)){ya.trace(`updateRemoteSource creating schema: ${m}`);try{await EX.createSchema({operation:"create_schema",schema:m})}catch(h){ya.error(h)}}if(p&&!JM.doesTableExist(m,p)){let h=new ANe(m,p,f.hash_attribute);f.attributes&&(h.attributes=f.attributes),ya.trace(`updateRemoteSource creating table: ${p} in schema: ${m} with attributes: ${JSON.stringify(f.attributes)}`);try{await EX.createTable(h)}catch(E){ya.error(E)}}if(ya.trace(`Creating local stream for ${m}.${p}`),await mu.createLocalTableStream(m,p),c?(await mu.updateConsumerIterator(m,p,n,"stop"),await mu.updateRemoteConsumer(f,n),f.subscribe===!0&&await mu.updateConsumerIterator(m,p,n,"start")):(await mu.updateRemoteConsumer(f,n),f.subscribe===!0?await mu.updateConsumerIterator(m,p,n,"start"):await mu.updateConsumerIterator(m,p,n,"stop")),c){let h=!1;for(let E=0,g=a.subscriptions.length;E<g;E++){let b=a.subscriptions[E];if(b.schema===m&&b.table===p){b.publish=f.publish,b.subscribe=f.subscribe,h=!0;break}}h||a.subscriptions.push(new _X(m,p,f.publish,f.subscribe))}else i.push(new _X(m,p,f.publish,f.subscribe))}c||(a=new INe(n,i,void 0),ya.trace(`No record found for ${n}, creating a new one`));let l=Object.create({});return Object.assign(l,a),l.system_info=s,await jM.upsertNodeRecord(l),CNe({type:"nats_update"}),new QM(zM.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${wNe.get(bNe.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await jM.getSystemInfo())}catch(t){ya.error(t);let r=t.message?t.message:t;return new QM(zM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}o(ONe,"updateRemoteSource")});var bX=v(($$e,RX)=>{"use strict";var yX=require("joi"),{string:TX}=yX.types(),PNe=(k(),D(Y)),LNe=ot();RX.exports=DNe;function DNe(e){let t=yX.object({operation:TX.valid(PNe.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:TX.required()});return LNe.validateBySchema(e,t)}o(DNe,"removeRemoteSourceValidator")});var wX=v((K$e,IX)=>{"use strict";var MNe=bX(),ib=z(),ob=mt(),XM=(k(),D(Y)),vNe=Fs(),UNe=ce(),AX=xt(),xNe=le(),ab=$E(),{NodeSubscription:BNe}=ac(),FNe=Wu(),kNe=Ga(),{broadcast:HNe}=Je(),qNe=xNe.get(XM.CONFIG_PARAMS.CLUSTERING_NODENAME);IX.exports=GNe;async function GNe(e){try{let t=MNe(e);if(t)return ib.error(`Validation error in removeRemoteSource: ${t.message}`),new ab(ob.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,n=await vNe.getNodeRecord(r);if(UNe.isEmptyOrZeroLength(n)){let i=`No record found for node '${r}'`;return ib.error(i),new ab(ob.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}n=n[0];for(let i=0,a=n.subscriptions.length;i<a;i++){let c=n.subscriptions[i];ib.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let l=new BNe(c.schema,c.table,!1,!1);await AX.updateConsumerIterator(c.schema,c.table,r,"stop"),await AX.updateRemoteConsumer(l,r)}let s=new FNe(XM.SYSTEM_SCHEMA_NAME,XM.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await kNe.deleteRecord(s),HNe({type:"nats_update"}),new ab(ob.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${qNe} successfully removed node '${r}'.`)}catch(t){ib.error(t);let r=t.message?t.message:t;return new ab(ob.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}o(GNe,"removeRemoteSource")});var PX=v((W$e,OX)=>{"use strict";var cb=z(),VE=(k(),D(Y)),NX=mt(),ZM=le(),$Ne=ce(),CX=$E(),VNe=Fs(),KNe=Hp(),YNe=un();OX.exports=WNe;async function WNe(e){try{cb.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=$Ne.ms_to_time(t),n=new zNe(ZM.get(VE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),ZM.get(VE.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)??ZM.get(VE.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT),r,await VNe.getSystemInfo());try{let s={name:e.node_name,system_info:e.system_info},i=new KNe(VE.SYSTEM_SCHEMA_NAME,VE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[s]);await YNe.update(i)}catch(s){cb.error("Get remote config encountered an error updating system info for node:",e.node_name,s)}return cb.trace("getRemoteSourceConfig response:",n),new CX(NX.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,n)}catch(t){cb.error(t);let r=t.message?t.message:t;return new CX(NX.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}o(WNe,"getRemoteSourceConfig");function zNe(e,t,r,n){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=n}o(zNe,"ConfigResponseObject")});var vX=v((j$e,MX)=>{"use strict";XE();var LX=le();LX.initSync();var DX=xt(),KE=z(),Gf=(k(),D(Y)),ev=mt(),jNe=SX(),QNe=wX(),JNe=PX(),XNe=$E(),{encode:ZNe,decode:eCe}=require("msgpackr"),tCe=li(),rCe=Ja(),nCe=require("util"),sCe=(k(),D(Y)),{isMainThread:iCe,parentPort:oCe}=require("worker_threads");Je();var aCe=nCe.promisify(tCe.setSchemaDataToGlobal),tv=LX.get(Gf.CONFIG_PARAMS.CLUSTERING_NODENAME);MX.exports=cCe;async function cCe(){try{KE.notify("Starting reply service."),await aCe();let e=await DX.getConnection(),t=`${tv}.__request__`,r=e.subscribe(t,{queue:tv});await lCe(r)}catch(e){KE.error(e)}}o(cCe,"initialize");async function lCe(e){for await(let t of e){let r=eCe(t.data),n;switch(r.operation){case Gf.OPERATIONS_ENUM.ADD_NODE:case Gf.OPERATIONS_ENUM.UPDATE_NODE:n=await jNe(r);break;case Gf.OPERATIONS_ENUM.REMOVE_NODE:n=await QNe(r);break;case Gf.OPERATIONS_ENUM.CLUSTER_STATUS:n=await JNe(r);break;case Gf.OPERATIONS_ENUM.DESCRIBE_ALL:n=await uCe();break;default:let s=`node '${tv}' reply service received unrecognized request operation`;KE.error(s),n=new XNe(ev.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,s)}KE.trace(n),t.respond(ZNe(n))}}o(lCe,"handleRequest");async function uCe(){try{return{status:ev.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await rCe.describeAll({bypass_auth:!0})}}catch(e){return KE.error(e),{status:ev.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}o(uCe,"getRemoteDescribeAll");iCe||oCe.on("message",async e=>{let{type:t}=e;t===sCe.ITC_EVENT_TYPES.SHUTDOWN&&DX.closeConnection()})});var dCe=vX();(async()=>{try{await dCe()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
|
|
138
|
+
`}`;c?(c.length<j3?c.push(E):c.length===j3&&c.push(`Maximum log buffer rate reached, logs will be throttled
|
|
139
|
+
`),qf&&(clearTimeout(a),f())):qf||l<performance.now()+Q3?f(E):(l=Math.min(l,performance.now()+Q3),c=[E],a=setTimeout(f,1))}function f(h){if(p(),s){let E=performance.now();ga.appendFileSync(s,c?c.join(""):h);let g=performance.now();l=Math.max(g,l)+(g-E)*50}else i||console.log(c?c.join(""):h);c&&(c=null)}function m(){try{ga.closeSync(s)}catch{}s=null,r&&(XR=null)}function p(h){if(!s){try{s=ga.openSync(e,"a"),r&&(XR=s)}catch(E){if(E.code==="ENOENT"&&!h)return ga.mkdirpSync(xE.dirname(e)),p(!0);i||(i=!0,console.error(E))}setTimeout(()=>{m()},qwe).unref()}}}o(J3,"getFileLogger");function Wwe(...e){Ot.info(...e)}o(Wwe,"info");function zwe(...e){Ot.trace(...e)}o(zwe,"trace");function VM(...e){Ot.error(...e)}o(VM,"error");function jwe(...e){Ot.debug(...e)}o(jwe,"debug");function Qwe(...e){Ot.notify(...e)}o(Qwe,"notify");function Jwe(...e){Ot.fatal(...e)}o(Jwe,"fatal");function Xwe(...e){Ot.warn(...e)}o(Xwe,"warn");function Zwe(e,t,r,...n){$M=r.service_name;try{Ot[e](...n)}finally{$M=void 0}}o(Zwe,"logCustomLevel");function eNe(){let e;try{e=xwe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Sa(e,$r.HDB_HOME_DIR_NAME,$r.BOOT_PROPS_FILE_NAME);return ga.existsSync(t)||(t=Sa(KM,"utility/hdb_boot_properties.file")),t}o(eNe,"getPropsFilePath");function tNe(e){_o=e}o(tNe,"setLogLevel");function rNe(e){try{if(e.includes("config/settings.js")){let l=eX(e);return{level:l.get($r.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:xE.dirname(l.get($r.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:l.get($r.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:l.get($r.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Z3.parseDocument(ga.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),a=t.getIn(["logging","console"]),c=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:a,rotation:c}}catch(t){if(t.code===$r.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(rNe,"getLogConfig");function nNe(){try{let e=Z3.parseDocument(ga.readFileSync(Hwe,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{defaultLevel:t,defaultToFile:r,defaultToStream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}o(nNe,"getDefaultConfig");function sNe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}o(sNe,"errorToString");function iNe(e){Ot=e}o(iNe,"setMainLogger");function sX(){try{ga.closeSync(XR)}catch{}XR=null}o(sX,"closeLogFile");function oNe(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}o(oNe,"AuthAuditLog");var{RootConfigWatcher:aNe}=(Y3(),D(K3))});var le=v((cX,lX)=>{"use strict";var YM=require("fs-extra"),fu=require("path"),iX=require("os"),cNe=require("properties-reader"),HE=z(),kE=ce(),Be=(k(),D(Y)),nb=Et(),lNe="Error initializing environment manager",sb="BOOT_PROPS_FILE_PATH",oX=!1,uNe={[Be.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Be.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ta={};Object.assign(cX,lX.exports={BOOT_PROPS_FILE_PATH:sb,getHdbBasePath:dNe,setHdbBasePath:fNe,get:aX,initSync:pNe,setProperty:tt,initTestEnvironment:hNe});function dNe(){return Ta[Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(dNe,"getHdbBasePath");function fNe(e){Ta[Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(fNe,"setHdbBasePath");function aX(e){let t=nb.getConfigValue(e);return t===void 0?Ta[e]:t}o(aX,"get");function tt(e,t){uNe[e]&&(Ta[e]=t),nb.updateConfigObject(e,t)}o(tt,"setProperty");function mNe(){let e;try{e=kE.getPropsFilePath(),YM.accessSync(e,YM.constants.F_OK|YM.constants.R_OK),oX=!0;let t=cNe(e);return Ta[Be.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Be.HDB_SETTINGS_NAMES.INSTALL_USER),Ta[Be.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Be.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ta[sb]=e,!0}catch{return HE.trace(`Environment manager found no properties file at ${e}`),!1}}o(mNe,"doesPropFileExist");function pNe(e=!1){try{(oX||mNe()||kE.noBootFile()||e)&&(nb.initConfig(e),Ta[Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=nb.getConfigValue(Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){HE.error(lNe),HE.error(t),console.error(t),process.exit(1)}}o(pNe,"initSync");function hNe(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:a,local_studio_on:c}=e,l=fu.join(__dirname,"../../","unitTests");Ta[sb]=fu.join(l,"hdb_boot_properties.file"),tt(Be.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,fu.join(l,"settings.test")),tt(Be.HDB_SETTINGS_NAMES.INSTALL_USER,iX.userInfo()?iX.userInfo().username:void 0),tt(Be.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),tt(Be.HDB_SETTINGS_NAMES.LOG_PATH_KEY,fu.join(l,"envDir","log")),tt(Be.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),tt(Be.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),tt(Be.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),tt(Be.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,fu.join(l,"envDir")),tt(Be.CONFIG_PARAMS.STORAGE_PATH,fu.join(l,"envDir")),s&&(tt(Be.CONFIG_PARAMS.HTTP_SECUREPORT,aX(Be.CONFIG_PARAMS.HTTP_PORT)),tt(Be.CONFIG_PARAMS.HTTP_PORT,null)),tt(Be.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),tt(Be.CONFIG_PARAMS.HTTP_PORT,9926),tt(Be.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),tt(Be.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),tt(Be.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,kE.isEmpty(i)?!1:i),tt(Be.CONFIG_PARAMS.HTTP_CORS,kE.isEmpty(i)?!1:i),tt(Be.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),tt(Be.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),tt(Be.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),tt(Be.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),tt(Be.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,fu.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),tt(Be.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,kE.isEmpty(c)?!1:c),a&&(tt("CORS_ACCESSLIST",a),tt(Be.CONFIG_PARAMS.HTTP_CORSACCESSLIST,a)),n&&(tt(Be.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),tt(Be.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(tt(Be.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),tt(Be.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(tt(Be.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),tt(Be.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${sb}. Please check your boot props and settings files`;HE.fatal(r),HE.error(t)}}o(hNe,"initTestEnvironment")});var pX=v((U$e,mX)=>{"use strict";var fX=require("joi"),{string:qE,boolean:uX,array:ENe}=fX.types(),dX=(k(),D(Y)),_Ne=ot();mX.exports=gNe;function gNe(e){let t=fX.object({operation:qE.valid(dX.OPERATIONS_ENUM.ADD_NODE,dX.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:qE.required(),subscriptions:ENe.items({schema:qE.required(),table:qE.optional(),hash_attribute:qE.optional(),subscribe:uX.required(),publish:uX.required()}).min(1).required()});return _Ne.validateBySchema(e,t)}o(gNe,"updateRemoteSourceValidator")});var GE=v((B$e,hX)=>{"use strict";var WM=class{static{o(this,"UpdateRemoteResponseObject")}constructor(t,r,n=void 0){this.status=t,this.message=r,this.system_info=n}};hX.exports=WM});var SX=v((k$e,gX)=>{"use strict";var SNe=pX(),ya=z(),zM=mt(),TNe=(k(),D(Y)),jM=Fs(),mu=xt(),EX=mh(),yNe=zu(),{Node:RNe,NodeSubscription:_X}=ac(),QM=GE(),JM=ce(),bNe=le(),{cloneDeep:ANe}=require("lodash"),{broadcast:INe}=Je();gX.exports=wNe;async function wNe(e){try{let t=SNe(e);if(t)return ya.error(`Validation error in updateRemoteSource: ${t.message}`),new QM(zM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:n,system_info:s}=e,i=[],a=ANe(await jM.getNodeRecord(n)),c=!JM.isEmptyOrZeroLength(a);a=c?a[0]:a,c&&ya.trace(`Existing record found for ${n}, updating records subscriptions`);for(let u=0,d=r.length;u<d;u++){let f=r[u],m=f.schema,p=f.table;if(!JM.doesSchemaExist(m)){ya.trace(`updateRemoteSource creating schema: ${m}`);try{await EX.createSchema({operation:"create_schema",schema:m})}catch(h){ya.error(h)}}if(p&&!JM.doesTableExist(m,p)){let h=new yNe(m,p,f.hash_attribute);f.attributes&&(h.attributes=f.attributes),ya.trace(`updateRemoteSource creating table: ${p} in schema: ${m} with attributes: ${JSON.stringify(f.attributes)}`);try{await EX.createTable(h)}catch(E){ya.error(E)}}if(ya.trace(`Creating local stream for ${m}.${p}`),await mu.createLocalTableStream(m,p),c?(await mu.updateConsumerIterator(m,p,n,"stop"),await mu.updateRemoteConsumer(f,n),f.subscribe===!0&&await mu.updateConsumerIterator(m,p,n,"start")):(await mu.updateRemoteConsumer(f,n),f.subscribe===!0?await mu.updateConsumerIterator(m,p,n,"start"):await mu.updateConsumerIterator(m,p,n,"stop")),c){let h=!1;for(let E=0,g=a.subscriptions.length;E<g;E++){let b=a.subscriptions[E];if(b.schema===m&&b.table===p){b.publish=f.publish,b.subscribe=f.subscribe,h=!0;break}}h||a.subscriptions.push(new _X(m,p,f.publish,f.subscribe))}else i.push(new _X(m,p,f.publish,f.subscribe))}c||(a=new RNe(n,i,void 0),ya.trace(`No record found for ${n}, creating a new one`));let l=Object.create({});return Object.assign(l,a),l.system_info=s,await jM.upsertNodeRecord(l),INe({type:"nats_update"}),new QM(zM.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${bNe.get(TNe.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await jM.getSystemInfo())}catch(t){ya.error(t);let r=t.message?t.message:t;return new QM(zM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}o(wNe,"updateRemoteSource")});var bX=v((q$e,RX)=>{"use strict";var yX=require("joi"),{string:TX}=yX.types(),NNe=(k(),D(Y)),CNe=ot();RX.exports=ONe;function ONe(e){let t=yX.object({operation:TX.valid(NNe.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:TX.required()});return CNe.validateBySchema(e,t)}o(ONe,"removeRemoteSourceValidator")});var wX=v(($$e,IX)=>{"use strict";var PNe=bX(),ib=z(),ob=mt(),XM=(k(),D(Y)),LNe=Fs(),DNe=ce(),AX=xt(),MNe=le(),ab=GE(),{NodeSubscription:vNe}=ac(),UNe=Wu(),xNe=Ga(),{broadcast:BNe}=Je(),FNe=MNe.get(XM.CONFIG_PARAMS.CLUSTERING_NODENAME);IX.exports=kNe;async function kNe(e){try{let t=PNe(e);if(t)return ib.error(`Validation error in removeRemoteSource: ${t.message}`),new ab(ob.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,n=await LNe.getNodeRecord(r);if(DNe.isEmptyOrZeroLength(n)){let i=`No record found for node '${r}'`;return ib.error(i),new ab(ob.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}n=n[0];for(let i=0,a=n.subscriptions.length;i<a;i++){let c=n.subscriptions[i];ib.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let l=new vNe(c.schema,c.table,!1,!1);await AX.updateConsumerIterator(c.schema,c.table,r,"stop"),await AX.updateRemoteConsumer(l,r)}let s=new UNe(XM.SYSTEM_SCHEMA_NAME,XM.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await xNe.deleteRecord(s),BNe({type:"nats_update"}),new ab(ob.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${FNe} successfully removed node '${r}'.`)}catch(t){ib.error(t);let r=t.message?t.message:t;return new ab(ob.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}o(kNe,"removeRemoteSource")});var PX=v((K$e,OX)=>{"use strict";var cb=z(),$E=(k(),D(Y)),NX=mt(),ZM=le(),HNe=ce(),CX=GE(),qNe=Fs(),GNe=Hp(),$Ne=un();OX.exports=VNe;async function VNe(e){try{cb.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=HNe.ms_to_time(t),n=new KNe(ZM.get($E.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),ZM.get($E.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)??ZM.get($E.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT),r,await qNe.getSystemInfo());try{let s={name:e.node_name,system_info:e.system_info},i=new GNe($E.SYSTEM_SCHEMA_NAME,$E.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[s]);await $Ne.update(i)}catch(s){cb.error("Get remote config encountered an error updating system info for node:",e.node_name,s)}return cb.trace("getRemoteSourceConfig response:",n),new CX(NX.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,n)}catch(t){cb.error(t);let r=t.message?t.message:t;return new CX(NX.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}o(VNe,"getRemoteSourceConfig");function KNe(e,t,r,n){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=n}o(KNe,"ConfigResponseObject")});var vX=v((W$e,MX)=>{"use strict";JE();var LX=le();LX.initSync();var DX=xt(),VE=z(),Gf=(k(),D(Y)),ev=mt(),YNe=SX(),WNe=wX(),zNe=PX(),jNe=GE(),{encode:QNe,decode:JNe}=require("msgpackr"),XNe=li(),ZNe=Ja(),eCe=require("util"),tCe=(k(),D(Y)),{isMainThread:rCe,parentPort:nCe}=require("worker_threads");Je();var sCe=eCe.promisify(XNe.setSchemaDataToGlobal),tv=LX.get(Gf.CONFIG_PARAMS.CLUSTERING_NODENAME);MX.exports=iCe;async function iCe(){try{VE.notify("Starting reply service."),await sCe();let e=await DX.getConnection(),t=`${tv}.__request__`,r=e.subscribe(t,{queue:tv});await oCe(r)}catch(e){VE.error(e)}}o(iCe,"initialize");async function oCe(e){for await(let t of e){let r=JNe(t.data),n;switch(r.operation){case Gf.OPERATIONS_ENUM.ADD_NODE:case Gf.OPERATIONS_ENUM.UPDATE_NODE:n=await YNe(r);break;case Gf.OPERATIONS_ENUM.REMOVE_NODE:n=await WNe(r);break;case Gf.OPERATIONS_ENUM.CLUSTER_STATUS:n=await zNe(r);break;case Gf.OPERATIONS_ENUM.DESCRIBE_ALL:n=await aCe();break;default:let s=`node '${tv}' reply service received unrecognized request operation`;VE.error(s),n=new jNe(ev.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,s)}VE.trace(n),t.respond(QNe(n))}}o(oCe,"handleRequest");async function aCe(){try{return{status:ev.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await ZNe.describeAll({bypass_auth:!0})}}catch(e){return VE.error(e),{status:ev.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}o(aCe,"getRemoteDescribeAll");rCe||nCe.on("message",async e=>{let{type:t}=e;t===tCe.ITC_EVENT_TYPES.SHUTDOWN&&DX.closeConnection()})});var cCe=vX();(async()=>{try{await cCe()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
|