harperdb 4.3.0-beta.2 → 4.3.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,27 +1,30 @@
1
- "use strict";var Wx=Object.create;var Ka=Object.defineProperty;var Qx=Object.getOwnPropertyDescriptor;var zx=Object.getOwnPropertyNames;var Jx=Object.getPrototypeOf,Xx=Object.prototype.hasOwnProperty;var a=(e,t)=>Ka(e,"name",{value:t,configurable:!0});var Oe=(e,t)=>()=>(e&&(t=e(e=0)),t);var g=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ve=(e,t)=>{for(var r in t)Ka(e,r,{get:t[r],enumerable:!0})},gA=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of zx(t))!Xx.call(e,s)&&s!==r&&Ka(e,s,{get:()=>t[s],enumerable:!(n=Qx(t,s))||n.enumerable});return e};var B=(e,t,r)=>(r=e!=null?Wx(Jx(e)):{},gA(t||!e||!e.__esModule?Ka(r,"default",{value:e,enumerable:!0}):r,e)),te=e=>gA(Ka({},"__esModule",{value:!0}),e);var OA=g((Lie,AA)=>{var jx=require("fast-glob"),{statSync:QE,existsSync:zE,readFileSync:Zx,writeFileSync:eF}=require("fs"),{spawnSync:tF,spawn:rF,execFileSync:Die}=require("child_process"),{isMainThread:nF}=require("worker_threads"),{join:ks,relative:RA}=require("path"),{PACKAGE_ROOT:mn}=M(),{tmpdir:sF,platform:iF}=require("os");require("source-map-support").install();var oF=["resources","server","dataLayer","components"],Wa="ts-build",JE,aF=__filename.endsWith("tsBuild.js");if(aF){if(nF){let r;try{QE(ks(mn,Wa)),r=!0}catch{}if(r)for(let n of jx.sync(oF.map(s=>s+"/**/*.ts"),{cwd:mn})){let s=0,i=0;try{s=QE(ks(mn,n)).mtimeMs-5e3,i=QE(ks(mn,Wa,n.replace(/.ts$/,".js"))).mtimeMs}catch{}if(s>i){console.warn(`TypeScript ${n} is not compiled`+(i?` (TS source file was modified at ${new Date(s)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),JE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),JE=!0;if(JE){let n=ks(mn,"node_modules/.bin/tsc");iF()==="win32"&&(n+=".cmd");let s=tF(n,{cwd:mn});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=ks(sF(),"harperdb-tsc.pid"),o;if(zE(i))try{process.kill(+Zx(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=rF(n,["--watch"],{cwd:mn,detached:!0,stdio:"ignore"});eF(i,c.pid.toString()),c.unref()}}}}let e=AA.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(mn)&&!n[0].includes("node_modules")){let i=RA(mn,n[0]),o;i.startsWith(Wa)?o=ks(mn,RA(Wa,i)):o=ks(mn,Wa,i);let c=ks(o,r),u=c+".js";if(zE(u))return u;if(c.includes(".")&&zE(c))return c}return t(r,n,s)}}});var M=g((Pie,HA)=>{"use strict";var zr=require("path"),cF=require("fs"),{relative:Mie,join:Uie}=zr,{existsSync:uF}=cF;function lF(){let e=__dirname;for(;!uF(zr.join(e,"package.json"));){let t=zr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(lF,"getHDBPackageRoot");var Vs=lF(),bA="js",Il=bA,_F="harperdb-config.yaml",dF="defaultConfig.yaml",fF="hdb",NA=`harperdb.${Il}`,yA=`customFunctionsServer.${Il}`,EF=`restartHdb.${Il}`,jE="HarperDB",wl="Custom Functions",Cl="Clustering Hub",Dl="Clustering Leaf",hF="Clustering Ingest Service",mF="Clustering Reply Service",pF="foreground.pid",SF="hdb.pid",TF="data",gF={HDB:jE,CLUSTERING_HUB:Cl,CLUSTERING_LEAF:Dl,CLUSTERING_INGEST_SERVICE:hF,CLUSTERING_REPLY_SERVICE:mF,CUSTOM_FUNCTIONS:wl,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"},RF={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},AF={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},OF={harperdb:jE,"clustering hub":Cl,"clustering leaf":Dl,"custom functions":wl,custom_functions:wl,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},bF={CLUSTERING_HUB_PROC_DESCRIPTOR:Cl,CLUSTERING_LEAF_PROC_DESCRIPTOR:Dl},XE={HDB:zr.join(Vs,"server/harperdb"),CUSTOM_FUNCTIONS:zr.join(Vs,"server/customFunctions"),CLUSTERING_HUB:zr.join(Vs,"server/nats"),CLUSTERING_LEAF:zr.join(Vs,"server/nats")},NF={HDB:zr.join(XE.HDB,NA),CUSTOM_FUNCTIONS:zr.join(XE.CUSTOM_FUNCTIONS,yA)},yF={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:zr.join(Vs,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:zr.join(Vs,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:zr.join(Vs,"launchServiceScripts/launchUpdateNodes4-0-0.js")},wF={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},wA="support@harperdb.io",IF="customer-success@harperdb.io",IA=1,CF=4141,CA="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",DF="https://www.harperdb.io/product",LF=`For support, please submit a request at ${CA} or contact ${wA}`,DA=`For license support, please contact ${IF}`,MF="None of the specified records were found.",UF="hash attribute not found",PF=`Your current license only supports ${IA} role. ${DA}`,vF="Your current license only supports 3 connections to a node.",BF="127.0.0.1",HF=1,xF=/^\.$/,FF=/^\.\.$/,qF="U+002E",GF=/\//g,kF="U+002F",VF=/U\+002F/g,$F=/^U\+002E$/,YF=/^U\+002EU\+002E$/,KF="d",WF=999999,QF="*",zF="--max-old-space-size=",JF="system",XF="__hdb_hash",jF=".harperdb",ZF=".hdb",eq="keys",tq="hdb_boot_properties.file",rq=".updateConfig.json",nq="SIGTSTP",sq=24,iq=6e4,oq=448,aq="blob",cq="trash",uq="database",lq="schema",_q="transactions",dq=".count",fq="id",Eq="PROCESS_NAME",LA={SETTINGS_PATH_KEY:"settings_path"},MA=require("lodash"),hq={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",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",OPERATIONSAPI_NETWORK_SECUREPORT:"OPERATIONSAPI_NETWORK_SECUREPORT",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},mq={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},pq={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Sq={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"},Tq={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},Ar="hdb_internal:",gq={CREATE_SCHEMA:Ar+"create_schema",CREATE_TABLE:Ar+"create_table",CREATE_ATTRIBUTE:Ar+"create_attribute",ADD_USER:Ar+"add_user",ALTER_USER:Ar+"alter_user",DROP_USER:Ar+"drop_user",HDB_NODES:Ar+"hdb_nodes",HDB_USERS:Ar+"hdb_users",HDB_WORKERS:Ar+"hdb_workers",CATCHUP:Ar+"catchup",SCHEMA_CATCHUP:Ar+"schema_catchup",WORKER_ROOM:Ar+"cluster_workers"},Rq={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"},Aq="060493.ks",Oq=".license",bq={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},j={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",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_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup"},Nq={CSV:".csv",JSON:".json"},yq={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},wq={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Qa={};Qa[j.INSERT]=j.INSERT;Qa[j.UPDATE]=j.UPDATE;Qa[j.UPSERT]=j.UPSERT;Qa[j.DELETE]=j.DELETE;var Be=Object.create(null);Be[j.DESCRIBE_ALL]=j.DESCRIBE_ALL;Be[j.DESCRIBE_TABLE]=j.DESCRIBE_TABLE;Be[j.DESCRIBE_SCHEMA]=j.DESCRIBE_SCHEMA;Be[j.READ_LOG]=j.READ_LOG;Be[j.ADD_NODE]=j.ADD_NODE;Be[j.LIST_USERS]=j.LIST_USERS;Be[j.LIST_ROLES]=j.LIST_ROLES;Be[j.USER_INFO]=j.USER_INFO;Be[j.SQL]=j.SQL;Be[j.GET_JOB]=j.GET_JOB;Be[j.SEARCH_JOBS_BY_START_DATE]=j.SEARCH_JOBS_BY_START_DATE;Be[j.DELETE_FILES_BEFORE]=j.DELETE_FILES_BEFORE;Be[j.EXPORT_LOCAL]=j.EXPORT_LOCAL;Be[j.EXPORT_TO_S3]=j.EXPORT_TO_S3;Be[j.CLUSTER_STATUS]=j.CLUSTER_STATUS;Be[j.REMOVE_NODE]=j.REMOVE_NODE;Be[j.RESTART]=j.RESTART;Be[j.CUSTOM_FUNCTIONS_STATUS]=j.CUSTOM_FUNCTIONS_STATUS;Be[j.GET_CUSTOM_FUNCTIONS]=j.GET_CUSTOM_FUNCTIONS;Be[j.GET_CUSTOM_FUNCTION]=j.GET_CUSTOM_FUNCTION;Be[j.SET_CUSTOM_FUNCTION]=j.SET_CUSTOM_FUNCTION;Be[j.DROP_CUSTOM_FUNCTION]=j.DROP_CUSTOM_FUNCTION;Be[j.ADD_CUSTOM_FUNCTION_PROJECT]=j.ADD_CUSTOM_FUNCTION_PROJECT;Be[j.DROP_CUSTOM_FUNCTION_PROJECT]=j.DROP_CUSTOM_FUNCTION_PROJECT;Be[j.PACKAGE_CUSTOM_FUNCTION_PROJECT]=j.PACKAGE_CUSTOM_FUNCTION_PROJECT;Be[j.DEPLOY_CUSTOM_FUNCTION_PROJECT]=j.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Iq={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs"},Cq={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},UA={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"},Dq=MA.invert(UA),Lq={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"},C={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",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_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",MAXHEAPMEMORY:"maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",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",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",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_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_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",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_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",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"},PA={settings_path:LA.SETTINGS_PATH_KEY,hdb_root_key:C.ROOTPATH,hdb_root:C.ROOTPATH,rootpath:C.ROOTPATH,server_port_key:C.OPERATIONSAPI_NETWORK_PORT,server_port:C.OPERATIONSAPI_NETWORK_PORT,cert_key:C.TLS_CERTIFICATE,certificate:C.TLS_CERTIFICATE,private_key_key:C.TLS_PRIVATEKEY,private_key:C.TLS_PRIVATEKEY,http_secure_enabled_key:C.OPERATIONSAPI_NETWORK_HTTPS,https_on:C.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:C.OPERATIONSAPI_NETWORK_CORS,cors_on:C.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:C.LOGGING_LEVEL,log_level:C.LOGGING_LEVEL,log_path_key:C.LOGGING_ROOT,log_path:C.LOGGING_ROOT,clustering_node_name_key:C.CLUSTERING_NODENAME,node_name:C.CLUSTERING_NODENAME,clustering_enabled_key:C.CLUSTERING_ENABLED,clustering:C.CLUSTERING_ENABLED,max_http_threads:C.THREADS,max_hdb_processes:C.THREADS,server_timeout_key:C.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:C.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:C.LOGGING_AUDITLOG,disable_transaction_log:C.LOGGING_AUDITLOG,operation_token_timeout_key:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:C.HTTP_PORT,custom_functions_port:C.HTTP_PORT,custom_functions_directory_key:C.COMPONENTSROOT,custom_functions_directory:C.COMPONENTSROOT,max_custom_function_processes:C.THREADS,log_to_file:C.LOGGING_FILE,log_to_stdstreams:C.LOGGING_STDSTREAMS,local_studio_on:C.LOCALSTUDIO_ENABLED,clustering_port:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:C.CLUSTERING_USER,clustering_enabled:C.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:C.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:C.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:C.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:C.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:C.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:C.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:C.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:C.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:C.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:C.CLUSTERING_NODENAME,clustering_tls_certificate:C.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:C.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:C.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:C.CLUSTERING_TLS_INSECURE,clustering_tls_verify:C.CLUSTERING_TLS_VERIFY,clustering_loglevel:C.CLUSTERING_LOGLEVEL,clustering_republishmessages:C.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:C.CLUSTERING_DATABASELEVEL,customfunctions_network_port:C.HTTP_PORT,customfunctions_tls_certificate:C.TLS_CERTIFICATE,customfunctions_network_cors:C.HTTP_CORS,customfunctions_network_corsaccesslist:C.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:C.HTTP_HEADERSTIMEOUT,customfunctions_network_https:C.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:C.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:C.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:C.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:C.HTTP_TIMEOUT,http_threads:C.THREADS,threads:C.THREADS,maxheapmemory:C.MAXHEAPMEMORY,http_session_affinity:C.HTTP_SESSIONAFFINITY,http_compressionthreshold:C.HTTP_COMPRESSIONTHRESHOLD,http_cors:C.HTTP_CORS,http_corsaccesslist:C.HTTP_CORSACCESSLIST,http_headerstimeout:C.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:C.HTTP_KEEPALIVETIMEOUT,http_timeout:C.HTTP_TIMEOUT,http_port:C.HTTP_PORT,http_secureport:C.HTTP_SECUREPORT,http_mtls:C.HTTP_MTLS,http_mtls_user:C.HTTP_MTLS_USER,http_mtls_required:C.HTTP_MTLS_REQUIRED,customfunctions_processes:C.THREADS,customfunctions_root:C.COMPONENTSROOT,localstudio_enabled:C.LOCALSTUDIO_ENABLED,logging_file:C.LOGGING_FILE,logging_level:C.LOGGING_LEVEL,logging_root:C.LOGGING_ROOT,logging_rotation_enabled:C.LOGGING_ROTATION_ENABLED,logging_rotation_compress:C.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:C.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:C.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:C.LOGGING_ROTATION_PATH,logging_stdstreams:C.LOGGING_STDSTREAMS,logging_auditlog:C.LOGGING_AUDITLOG,logging_auditretention:C.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:C.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:C.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:C.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:C.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:C.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:C.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:C.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:C.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:C.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:C.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:C.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:C.ROOTPATH,databases:C.DATABASES,storage_path:C.STORAGE_PATH,ignorescripts:C.IGNORE_SCRIPTS,mqtt_network_port:C.MQTT_NETWORK_PORT,mqtt_websocket:C.MQTT_WEBSOCKET,mqtt_network_secureport:C.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:C.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:C.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:C.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:C.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:C.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:C.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:C.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:C.AUTHENTICATION_CACHETTL,authentication_enablesessions:C.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:C.COMPONENTSROOT,tls_certificate:C.TLS_CERTIFICATE,tls_privatekey:C.TLS_PRIVATEKEY,tls_certificateauthority:C.TLS_CERTIFICATEAUTHORITY,tls_ciphers:C.TLS_CIPHERS};for(let e in C){let t=C[e];PA[t.toLowerCase()]=t}var Mq={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},Uq={csv_file_load:"csv_file_load",csv_data_load:j.CSV_DATA_LOAD,csv_url_load:j.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"},Pq={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"},vq={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Bq={VERSION_DEFAULT:"2.2.0"},Hq={DEVELOPMENT:8192,DEFAULT:512},xq={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},Fq={1e3:"SUCCESSFUL_SHUTDOWN",1001:"CLOSE_GOING_AWAY",1002:"CLOSE_PROTOCOL_ERROR",1003:"CLOSE_UNSUPPORTED",1005:"CLOSE_NO_STATUS",1006:"CLOSE_ABNORMAL",1007:"UNSUPPORTED_PAYLOAD",1008:"POLICY_VIOLATION",1009:"CLOSE_TOO_LARGE",1010:"MANDATORY_EXTENSION",1011:"SERVER_ERROR",1012:"SERVICE_RESTART",1013:"SERVER_BUSY",1014:"BAD_GATEWAY",1015:"HANDSHAKE_FAIL",4141:"LICENSE_LIMIT_REACHED"},qq={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},vA={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Gq=Symbol("metadata"),kq="__clustering__",Vq=Object.values(vA),$q=15984864e5,BA={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Yq=MA.invert(BA),Kq={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},Wq=111,Qq=`\r
2
- `,zq={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Jq=["*","%"],Xq="unauthorized_access",jq="func_val",Zq={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},eG={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},tG={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"},rG={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},nG={HTTP:"http"},sG={STOPPED:"stopped",ONLINE:"online"},iG="3.x.x",oG={SUCCESS:"success",FAILURE:"failure"},aG={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};HA.exports={LOCAL_HARPERDB_OPERATIONS:Be,HDB_SUPPORT_ADDRESS:wA,HDB_SUPPORT_URL:CA,HDB_PRICING_URL:DF,SUPPORT_HELP_MSG:LF,LICENSE_HELP_MSG:DA,HDB_PROC_NAME:NA,HDB_PROC_DESCRIPTOR:jE,CLUSTERING_LEAF_PROC_DESCRIPTOR:Dl,CLUSTERING_HUB_PROC_DESCRIPTOR:Cl,SYSTEM_SCHEMA_NAME:JF,HASH_FOLDER_NAME:XF,HDB_HOME_DIR_NAME:jF,UPDATE_FILE_NAME:rq,LICENSE_KEY_DIR_NAME:eq,BOOT_PROPS_FILE_NAME:tq,JOB_TYPE_ENUM:Uq,JOB_STATUS_ENUM:bq,SYSTEM_TABLE_NAMES:Sq,SYSTEM_TABLE_HASH_ATTRIBUTES:Tq,OPERATIONS_ENUM:j,VALID_S3_FILE_TYPES:Nq,S3_BUCKET_AUTH_KEYS:yq,VALID_SQL_OPS_ENUM:wq,GEO_CONVERSION_ENUM:Cq,HDB_SETTINGS_NAMES:UA,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Dq,SERVICE_ACTIONS_ENUM:Iq,CLUSTER_MESSAGE_TYPE_ENUM:Pq,CLUSTER_CONNECTION_DIRECTION_ENUM:vq,CLUSTER_EVENTS_DEFS_ENUM:xq,PERIOD_REGEX:xF,DOUBLE_PERIOD_REGEX:FF,UNICODE_PERIOD:qF,FORWARD_SLASH_REGEX:GF,UNICODE_FORWARD_SLASH:kF,ESCAPED_FORWARD_SLASH_REGEX:VF,ESCAPED_PERIOD_REGEX:$F,ESCAPED_DOUBLE_PERIOD_REGEX:YF,REG_KEY_FILE_NAME:Aq,RESTART_TIMEOUT_MS:iq,HDB_FILE_PERMISSIONS:oq,DATABASES_DIR_NAME:uq,LEGACY_DATABASES_DIR_NAME:lq,TRANSACTIONS_DIR_NAME:_q,LIMIT_COUNT_NAME:dq,ID_ATTRIBUTE_STRING:fq,INSERT_MODULE_ENUM:mq,UPGRADE_JSON_FIELD_NAMES_ENUM:pq,RESTART_CODE:nq,RESTART_CODE_NUM:sq,CLUSTER_OPERATIONS:Qa,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:Rq,HDB_INTERNAL_SC_CHANNEL_PREFIX:Ar,INTERNAL_SC_CHANNELS:gq,CLUSTERING_MESSAGE_TYPES:Kq,HDB_FILE_SUFFIX:ZF,BLOB_FOLDER_NAME:aq,HDB_TRASH_DIR:cq,ORIGINATOR_SET_VALUE:Wq,LICENSE_VALUES:Bq,RAM_ALLOCATION_ENUM:Hq,TIME_STAMP_NAMES_ENUM:vA,TIME_STAMP_NAMES:Vq,PERMS_UPDATE_RELEASE_TIMESTAMP:$q,SEARCH_NOT_FOUND_MESSAGE:MF,SEARCH_ATTRIBUTE_NOT_FOUND:UF,LICENSE_ROLE_DENIED_RESPONSE:PF,LICENSE_MAX_CONNS_REACHED:vF,BASIC_LICENSE_MAX_NON_CU_ROLES:IA,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:CF,VALUE_SEARCH_COMPARATORS:BA,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Yq,LICENSE_FILE_NAME:Oq,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Fq,NEW_LINE:Qq,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:HF,MOMENT_DAYS_TAG:KF,API_TURNOVER_SEC:WF,LOOPBACK:BF,CODE_EXTENSION:Il,WILDCARD_SEARCH_VALUE:QF,NODE_ERROR_CODES:qq,JAVASCRIPT_EXTENSION:bA,PERMS_CRUD_ENUM:zq,UNAUTHORIZED_PERMISSION_NAME:Xq,SEARCH_WILDCARDS:Jq,FUNC_VAL:jq,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:Zq,JWT_ENUM:eG,CLUSTERING_FLAG:kq,ITC_EVENT_TYPES:tG,CUSTOM_FUNCTION_PROC_NAME:yA,CUSTOM_FUNCTION_PROC_DESCRIPTOR:wl,SERVICES:rG,THREAD_TYPES:nG,MEM_SETTING_KEY:zF,HDB_RESTART_SCRIPT:EF,PROCESS_DESCRIPTORS:gF,SERVICE_SERVERS:NF,SERVICE_SERVERS_CWD:XE,PROCESS_DESCRIPTORS_VALIDATE:OF,LAUNCH_SERVICE_SCRIPTS:yF,LOG_LEVELS:AF,PROCESS_NAME_ENV_PROP:Eq,LOG_NAMES:RF,PM2_PROCESS_STATUSES:sG,CONFIG_PARAM_MAP:PA,CONFIG_PARAMS:C,HDB_CONFIG_FILE:_F,HDB_DEFAULT_CONFIG_FILE:dF,ROLE_TYPES_ENUM:wF,BOOT_PROP_PARAMS:LA,INSTALL_PROMPTS:hq,HDB_ROOT_DIR_NAME:fF,CLUSTERING_PROCESSES:bF,FOREGROUND_PID_FILE:pF,PACKAGE_ROOT:Vs,PRE_4_0_0_VERSION:iG,DATABASES_PARAM_CONFIG:Mq,METADATA_PROPERTY:Gq,AUTH_AUDIT_STATUS:oG,AUTH_AUDIT_TYPES:aG,HDB_PID_FILE:SF,DEFAULT_DATABASE_NAME:TF,LEGACY_CONFIG_PARAMS:Lq};OA()});var ZE=g((Bie,qA)=>{"use strict";var xA=require("minimist");qA.exports=cG;function cG(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=FA(process.env),n=FA(xA(process.argv))):(r=process.env,n=xA(process.argv));let s={};for(let i=0,o=e.length;i<o;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}a(cG,"assignCMDENVVariables");function FA(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(FA,"objKeysToLowerCase")});var Y=g((xie,oh)=>{"use strict";var Oi=require("fs-extra"),{workerData:uG,threadId:lG}=require("worker_threads"),us=require("path"),VA=require("yaml"),$A=require("properties-reader"),St=M(),GA=ZE(),_G=require("os"),{PACKAGE_ROOT:th}=M(),{_assignPackageExport:dG}=require("../../index"),Ja={};for(let e in console)Ja[e]||(Ja[e]=console[e]);var Xt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},YA={STDOUT:"stdOut",STDERR:"stdErr"},fG=us.join(th,"logs"),EG=us.join(th,"config/yaml/",St.HDB_DEFAULT_CONFIG_FILE),hG=1e4,cs,xn,Jt,Ll,Ml,Xa,Do,za;za===void 0&&KA();oh.exports={notify:zA,fatal:JA,error:ja,warn:ih,info:Ul,debug:sh,trace:nh,setLogLevel:AG,log_level:Jt,loggerWithTag:mG,suppressLogging:pG,initLogSettings:KA,setupConsoleLogging:WA,logCustomLevel:gG,closeLogFile:rh,getLogFilePath:()=>Xa,OUTPUTS:YA,AuthAuditLog:NG};dG("logger",oh.exports);function KA(e=!1){try{if(za===void 0||e){rh();let t=RG(),r=GA(["ROOTPATH"]);try{za=$A(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Oi.pathExistsSync(us.join(r.ROOTPATH,St.HDB_CONFIG_FILE)))throw n}({level:Jt,config_log_path:Ml,to_file:cs,to_stream:xn}=OG(r.ROOTPATH?us.join(r.ROOTPATH,St.HDB_CONFIG_FILE):za.get("settings_path"))),Ll=St.LOG_NAMES.HDB,Xa=us.join(Ml,Ll)}}catch(t){if(za=void 0,t.code===St.NODE_ERROR_CODES.ENOENT){let r=GA(Object.keys(St.CONFIG_PARAM_MAP),!0);for(let o in r){let c=St.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===St.CONFIG_PARAMS.LOGGING_LEVEL){Jt=u;continue}if(c===St.CONFIG_PARAMS.LOGGING_STDSTREAMS){xn=u;continue}c===St.CONFIG_PARAMS.LOGGING_FILE&&(cs=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=bG();cs=cs===void 0?s:cs,cs=kA(cs),xn=xn===void 0?i:xn,xn=kA(xn),Jt=Jt===void 0?n:Jt,Ml=fG,Ll=St.LOG_NAMES.INSTALL,Xa=us.join(Ml,Ll);return}throw ja("Error initializing log settings"),ja(t),t}process.env.DEV_MODE&&(xn=!0),WA()}a(KA,"initLogSettings");var eh=!0;function WA(){Co("error",ja),Co("warn",ih),Co("log",Ul),Co("info",Ul),Co("debug",sh),Co("trace",nh)}a(WA,"setupConsoleLogging");function Co(e,t){console[e]=function(...r){if(eh&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Ja[e](...r)}}a(Co,"logConsole");function mG(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(zA),fatal:r(JA),error:r(ja),warn:r(ih),info:r(Ul),debug:r(sh),trace:r(nh)};function r(n){return function(...s){return n(t,...s)}}}a(mG,"loggerWithTag");function pG(e){try{eh=!1,e()}finally{eh=!0}}a(pG,"suppressLogging");var SG=uG?.name?.replace(/ /g,"-")||"main";function ls(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||SG+"/"+lG);c<s;c++){let _=t[c];_ instanceof Error&&_.stack?n+=_.stack:typeof _=="object"?n+=JSON.stringify(_):n+=_,c<i&&(n+=" ")}return`${r} [${o.join("] [")}]: ${n}
3
- `}a(ls,"createLogRecord");function Za(e){cs&&QA(e),xn&&process.stdout.write(e)}a(Za,"logStdOut");function Pl(e){cs&&QA(e),xn&&process.stderr.write(e)}a(Pl,"logStdErr");function QA(e){TG(),Do?Oi.appendFileSync(Do,e):Ja.log(e)}a(QA,"logToFile");function rh(){try{Oi.closeSync(Do)}catch{}Do=null}a(rh,"closeLogFile");function TG(){if(!Do){try{if(!Xa)debugger;Do=Oi.openSync(Xa,"a")}catch(e){Ja.error(e)}setTimeout(()=>{rh()},hG).unref()}}a(TG,"openLogFile");function Ul(...e){Xt[Jt]<=Xt.info&&Za(ls("info",e))}a(Ul,"info");function nh(...e){Xt[Jt]<=Xt.trace&&Za(ls("trace",e))}a(nh,"trace");function ja(...e){Xt[Jt]<=Xt.error&&Pl(ls("error",e))}a(ja,"error");function sh(...e){Xt[Jt]<=Xt.debug&&Za(ls("debug",e))}a(sh,"debug");function zA(...e){Xt[Jt]<=Xt.notify&&Za(ls("notify",e))}a(zA,"notify");function JA(...e){Xt[Jt]<=Xt.fatal&&Pl(ls("fatal",e))}a(JA,"fatal");function ih(...e){Xt[Jt]<=Xt.warn&&Pl(ls("warn",e))}a(ih,"warn");function gG(e,t,...r){t===YA.STDERR?Pl(ls(e,r)):Za(ls(e,r))}a(gG,"logCustomLevel");function RG(){let e;try{e=_G.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=us.join(e,St.HDB_HOME_DIR_NAME,St.BOOT_PROPS_FILE_NAME);return Oi.existsSync(t)||(t=us.join(th,"utility/hdb_boot_properties.file")),t}a(RG,"getPropsFilePath");function AG(e){Jt=e}a(AG,"setLogLevel");function kA(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(kA,"autoCastBoolean");function OG(e){try{if(e.includes("config/settings.js")){let o=$A(e);return{level:o.get(St.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:us.dirname(o.get(St.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(St.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(St.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=VA.parseDocument(Oi.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===St.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(OG,"getLogConfig");function bG(){try{let e=VA.parseDocument(Oi.readFileSync(EG,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(bG,"getDefaultConfig");function NG(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}a(NG,"AuthAuditLog")});var jA=g((qie,XA)=>{"use strict";var yG=require("util"),wG=require("path"),IG=require("child_process"),CG=yG.promisify(IG.execFile),DG=1e3*1e3*10;XA.exports={findPs:LG};async function LG(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await CG("ps",["wwxo",`pid,${r}`],{maxBuffer:DG});for(let s of n.trim().split(`
4
- `).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}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:wG.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"])}))}a(LG,"findPs")});var lt=g((kie,eO)=>{"use strict";var MG="__dbis__",UG="__txns__",PG="__environment_name__",vG="__dbi_defintion__",BG={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"},HG=["__createdtime__","__updatedtime__"],xG="\uFFFF",ZA={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},FG=Object.values(ZA);eO.exports={AUDIT_STORE_NAME:UG,INTERNAL_DBIS_NAME:MG,DBI_DEFINITION_NAME:vG,SEARCH_TYPES:BG,TIMESTAMP_NAMES:HG,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:PG,TRANSACTIONS_DBI_NAMES_ENUM:ZA,TRANSACTIONS_DBIS:FG,OVERFLOW_MARKER:xG}});var Or=g((Vie,uO)=>{"use strict";var tO=M(),rO=lt(),nO={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},sO=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),iO={500:sO("There was an error processing your request."),400:"Invalid request"},qG=iO[nO.INTERNAL_SERVER_ERROR],GG={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},kG={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},VG={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:e=>`There was an error downloading '${e}'.`,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:e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,INVALID_FILE_EXT_ERR:e=>`Error selecting correct parser - valid file type not found in json - ${e}`,MAX_FILE_SIZE_ERR:(e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:e=>`There was an error downloading '${e}' from AWS.`,WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},$G={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:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_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 ${rO.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${rO.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"},YG={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${tO.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,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 ${tO.INSERT_MODULE_ENUM.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"},oO={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"},KG={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:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' 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:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},WG={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a 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:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,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:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},QG={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},zG={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},JG={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},aO={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`},cO={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:e=>`ITC server received invalid event type: ${e}`},XG={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."},jG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},ZG={...oO,...VG,...GG,...KG,...WG,...QG,...zG,...JG,...YG,...aO,...cO,...XG,...jG,...kG};uO.exports={CHECK_LOGS_WRAPPER:sO,HDB_ERROR_MSGS:ZG,DEFAULT_ERROR_MSGS:iO,DEFAULT_ERROR_RESP:qG,HTTP_STATUS_CODES:nO,LMDB_ERRORS_ENUM:$G,AUTHENTICATION_ERROR_MSGS:oO,VALIDATION_ERROR_MSGS:aO,ITC_ERRORS:cO}});var ee=g((Yie,dO)=>{"use strict";var Lo=Or(),ek=Y(),tk=M(),vl=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,lO),this.statusCode=n||Lo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Lo.DEFAULT_ERROR_MSGS[n]?Lo.DEFAULT_ERROR_MSGS[n]:Lo.DEFAULT_ERROR_MSGS[Lo.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&&ek[s](i)}},ah=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},ch=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function lO(e,t,r,n=tk.LOG_LEVELS.ERROR,s=null,i=!1){if(_O(e))return e;let o=new vl(e,t,r,n,s);return i&&delete o.stack,o}a(lO,"handleHDBError");function _O(e){return e.__proto__.constructor.name===vl.name}a(_O,"isHDBError");dO.exports={isHDBError:_O,handleHDBError:lO,ClientError:ah,ServerError:ch,hdb_errors:Lo}});var EO=g((Wie,fO)=>{"use strict";var rk={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
1
+ "use strict";var Jx=Object.create;var za=Object.defineProperty;var Xx=Object.getOwnPropertyDescriptor;var jx=Object.getOwnPropertyNames;var Zx=Object.getPrototypeOf,eF=Object.prototype.hasOwnProperty;var a=(e,t)=>za(e,"name",{value:t,configurable:!0});var Oe=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ke=(e,t)=>{for(var r in t)za(e,r,{get:t[r],enumerable:!0})},OA=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of jx(t))!eF.call(e,s)&&s!==r&&za(e,s,{get:()=>t[s],enumerable:!(n=Xx(t,s))||n.enumerable});return e};var x=(e,t,r)=>(r=e!=null?Jx(Zx(e)):{},OA(t||!e||!e.__esModule?za(r,"default",{value:e,enumerable:!0}):r,e)),te=e=>OA(za({},"__esModule",{value:!0}),e);var NA=T((Lie,yA)=>{var tF=require("fast-glob"),{statSync:WE,existsSync:QE,readFileSync:rF,writeFileSync:nF}=require("fs"),{spawnSync:sF,spawn:iF,execFileSync:Die}=require("child_process"),{isMainThread:oF}=require("worker_threads"),{join:$s,relative:bA}=require("path"),{PACKAGE_ROOT:Sn}=U(),{tmpdir:aF,platform:cF}=require("os");require("source-map-support").install();var uF=["resources","server","dataLayer","components"],Ja="ts-build",zE,lF=__filename.endsWith("tsBuild.js");if(lF){if(oF){let r;try{WE($s(Sn,Ja)),r=!0}catch{}if(r)for(let n of tF.sync(uF.map(s=>s+"/**/*.ts"),{cwd:Sn})){let s=0,i=0;try{s=WE($s(Sn,n)).mtimeMs-5e3,i=WE($s(Sn,Ja,n.replace(/.ts$/,".js"))).mtimeMs}catch{}if(s>i){console.warn(`TypeScript ${n} is not compiled`+(i?` (TS source file was modified at ${new Date(s)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),zE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),zE=!0;if(zE){let n=$s(Sn,"node_modules/.bin/tsc");cF()==="win32"&&(n+=".cmd");let s=sF(n,{cwd:Sn});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=$s(aF(),"harperdb-tsc.pid"),o;if(QE(i))try{process.kill(+rF(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=iF(n,["--watch"],{cwd:Sn,detached:!0,stdio:"ignore"});nF(i,c.pid.toString()),c.unref()}}}}let e=yA.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(Sn)&&!n[0].includes("node_modules")){let i=bA(Sn,n[0]),o;i.startsWith(Ja)?o=$s(Sn,bA(Ja,i)):o=$s(Sn,Ja,i);let c=$s(o,r),u=c+".js";if(QE(u))return u;if(c.includes(".")&&QE(c))return c}return t(r,n,s)}}});var U=T((Pie,qA)=>{"use strict";var Jr=require("path"),_F=require("fs"),{relative:Mie,join:Uie}=Jr,{existsSync:dF}=_F;function fF(){let e=__dirname;for(;!dF(Jr.join(e,"package.json"));){let t=Jr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(fF,"getHDBPackageRoot");var Ys=fF(),wA="js",Cl=wA,EF="harperdb-config.yaml",hF="defaultConfig.yaml",mF="hdb",IA=`harperdb.${Cl}`,CA=`customFunctionsServer.${Cl}`,pF=`restartHdb.${Cl}`,XE="HarperDB",Il="Custom Functions",Dl="Clustering Hub",Ll="Clustering Leaf",SF="Clustering Ingest Service",TF="Clustering Reply Service",gF="foreground.pid",RF="hdb.pid",AF="data",OF={HDB:XE,CLUSTERING_HUB:Dl,CLUSTERING_LEAF:Ll,CLUSTERING_INGEST_SERVICE:SF,CLUSTERING_REPLY_SERVICE:TF,CUSTOM_FUNCTIONS:Il,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"},bF={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},yF={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},NF={harperdb:XE,"clustering hub":Dl,"clustering leaf":Ll,"custom functions":Il,custom_functions:Il,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},wF={CLUSTERING_HUB_PROC_DESCRIPTOR:Dl,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ll},JE={HDB:Jr.join(Ys,"server/harperdb"),CUSTOM_FUNCTIONS:Jr.join(Ys,"server/customFunctions"),CLUSTERING_HUB:Jr.join(Ys,"server/nats"),CLUSTERING_LEAF:Jr.join(Ys,"server/nats")},IF={HDB:Jr.join(JE.HDB,IA),CUSTOM_FUNCTIONS:Jr.join(JE.CUSTOM_FUNCTIONS,CA)},CF={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Jr.join(Ys,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Jr.join(Ys,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Jr.join(Ys,"launchServiceScripts/launchUpdateNodes4-0-0.js")},DF={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},DA="support@harperdb.io",LF="customer-success@harperdb.io",LA=1,MF=4141,MA="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",UF="https://www.harperdb.io/product",PF=`For support, please submit a request at ${MA} or contact ${DA}`,UA=`For license support, please contact ${LF}`,vF="None of the specified records were found.",BF="hash attribute not found",HF=`Your current license only supports ${LA} role. ${UA}`,xF="Your current license only supports 3 connections to a node.",FF="127.0.0.1",qF=1,GF=/^\.$/,kF=/^\.\.$/,VF="U+002E",$F=/\//g,YF="U+002F",KF=/U\+002F/g,WF=/^U\+002E$/,QF=/^U\+002EU\+002E$/,zF="d",JF=999999,XF="*",jF="--max-old-space-size=",ZF="system",eq="__hdb_hash",tq=".harperdb",rq=".hdb",nq="keys",sq="hdb_boot_properties.file",iq=".updateConfig.json",oq="SIGTSTP",aq=24,cq=6e4,uq=448,lq="blob",_q="trash",dq="database",fq="schema",Eq="transactions",hq=".count",mq="id",pq="PROCESS_NAME",PA={SETTINGS_PATH_KEY:"settings_path"},vA=require("lodash"),Sq={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",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",OPERATIONSAPI_NETWORK_SECUREPORT:"OPERATIONSAPI_NETWORK_SECUREPORT",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},Tq={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},gq={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Rq={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"},Aq={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},Or="hdb_internal:",Oq={CREATE_SCHEMA:Or+"create_schema",CREATE_TABLE:Or+"create_table",CREATE_ATTRIBUTE:Or+"create_attribute",ADD_USER:Or+"add_user",ALTER_USER:Or+"alter_user",DROP_USER:Or+"drop_user",HDB_NODES:Or+"hdb_nodes",HDB_USERS:Or+"hdb_users",HDB_WORKERS:Or+"hdb_workers",CATCHUP:Or+"catchup",SCHEMA_CATCHUP:Or+"schema_catchup",WORKER_ROOM:Or+"cluster_workers"},bq={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"},yq="060493.ks",Nq=".license",wq={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},X={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",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_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup"},Iq={CSV:".csv",JSON:".json"},Cq={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Dq={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Xa={};Xa[X.INSERT]=X.INSERT;Xa[X.UPDATE]=X.UPDATE;Xa[X.UPSERT]=X.UPSERT;Xa[X.DELETE]=X.DELETE;var Be=Object.create(null);Be[X.DESCRIBE_ALL]=X.DESCRIBE_ALL;Be[X.DESCRIBE_TABLE]=X.DESCRIBE_TABLE;Be[X.DESCRIBE_SCHEMA]=X.DESCRIBE_SCHEMA;Be[X.READ_LOG]=X.READ_LOG;Be[X.ADD_NODE]=X.ADD_NODE;Be[X.LIST_USERS]=X.LIST_USERS;Be[X.LIST_ROLES]=X.LIST_ROLES;Be[X.USER_INFO]=X.USER_INFO;Be[X.SQL]=X.SQL;Be[X.GET_JOB]=X.GET_JOB;Be[X.SEARCH_JOBS_BY_START_DATE]=X.SEARCH_JOBS_BY_START_DATE;Be[X.DELETE_FILES_BEFORE]=X.DELETE_FILES_BEFORE;Be[X.EXPORT_LOCAL]=X.EXPORT_LOCAL;Be[X.EXPORT_TO_S3]=X.EXPORT_TO_S3;Be[X.CLUSTER_STATUS]=X.CLUSTER_STATUS;Be[X.REMOVE_NODE]=X.REMOVE_NODE;Be[X.RESTART]=X.RESTART;Be[X.CUSTOM_FUNCTIONS_STATUS]=X.CUSTOM_FUNCTIONS_STATUS;Be[X.GET_CUSTOM_FUNCTIONS]=X.GET_CUSTOM_FUNCTIONS;Be[X.GET_CUSTOM_FUNCTION]=X.GET_CUSTOM_FUNCTION;Be[X.SET_CUSTOM_FUNCTION]=X.SET_CUSTOM_FUNCTION;Be[X.DROP_CUSTOM_FUNCTION]=X.DROP_CUSTOM_FUNCTION;Be[X.ADD_CUSTOM_FUNCTION_PROJECT]=X.ADD_CUSTOM_FUNCTION_PROJECT;Be[X.DROP_CUSTOM_FUNCTION_PROJECT]=X.DROP_CUSTOM_FUNCTION_PROJECT;Be[X.PACKAGE_CUSTOM_FUNCTION_PROJECT]=X.PACKAGE_CUSTOM_FUNCTION_PROJECT;Be[X.DEPLOY_CUSTOM_FUNCTION_PROJECT]=X.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Lq={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs"},Mq={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},BA={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"},Uq=vA.invert(BA),Pq={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"},C={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",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_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",MAXHEAPMEMORY:"maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",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",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",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_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_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",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_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",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"},HA={settings_path:PA.SETTINGS_PATH_KEY,hdb_root_key:C.ROOTPATH,hdb_root:C.ROOTPATH,rootpath:C.ROOTPATH,server_port_key:C.OPERATIONSAPI_NETWORK_PORT,server_port:C.OPERATIONSAPI_NETWORK_PORT,cert_key:C.TLS_CERTIFICATE,certificate:C.TLS_CERTIFICATE,private_key_key:C.TLS_PRIVATEKEY,private_key:C.TLS_PRIVATEKEY,http_secure_enabled_key:C.OPERATIONSAPI_NETWORK_HTTPS,https_on:C.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:C.OPERATIONSAPI_NETWORK_CORS,cors_on:C.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:C.LOGGING_LEVEL,log_level:C.LOGGING_LEVEL,log_path_key:C.LOGGING_ROOT,log_path:C.LOGGING_ROOT,clustering_node_name_key:C.CLUSTERING_NODENAME,node_name:C.CLUSTERING_NODENAME,clustering_enabled_key:C.CLUSTERING_ENABLED,clustering:C.CLUSTERING_ENABLED,max_http_threads:C.THREADS,max_hdb_processes:C.THREADS,server_timeout_key:C.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:C.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:C.LOGGING_AUDITLOG,disable_transaction_log:C.LOGGING_AUDITLOG,operation_token_timeout_key:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:C.HTTP_PORT,custom_functions_port:C.HTTP_PORT,custom_functions_directory_key:C.COMPONENTSROOT,custom_functions_directory:C.COMPONENTSROOT,max_custom_function_processes:C.THREADS,log_to_file:C.LOGGING_FILE,log_to_stdstreams:C.LOGGING_STDSTREAMS,local_studio_on:C.LOCALSTUDIO_ENABLED,clustering_port:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:C.CLUSTERING_USER,clustering_enabled:C.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:C.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:C.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:C.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:C.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:C.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:C.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:C.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:C.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:C.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:C.CLUSTERING_NODENAME,clustering_tls_certificate:C.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:C.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:C.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:C.CLUSTERING_TLS_INSECURE,clustering_tls_verify:C.CLUSTERING_TLS_VERIFY,clustering_loglevel:C.CLUSTERING_LOGLEVEL,clustering_republishmessages:C.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:C.CLUSTERING_DATABASELEVEL,customfunctions_network_port:C.HTTP_PORT,customfunctions_tls_certificate:C.TLS_CERTIFICATE,customfunctions_network_cors:C.HTTP_CORS,customfunctions_network_corsaccesslist:C.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:C.HTTP_HEADERSTIMEOUT,customfunctions_network_https:C.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:C.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:C.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:C.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:C.HTTP_TIMEOUT,http_threads:C.THREADS,threads:C.THREADS,maxheapmemory:C.MAXHEAPMEMORY,http_session_affinity:C.HTTP_SESSIONAFFINITY,http_compressionthreshold:C.HTTP_COMPRESSIONTHRESHOLD,http_cors:C.HTTP_CORS,http_corsaccesslist:C.HTTP_CORSACCESSLIST,http_headerstimeout:C.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:C.HTTP_KEEPALIVETIMEOUT,http_timeout:C.HTTP_TIMEOUT,http_port:C.HTTP_PORT,http_secureport:C.HTTP_SECUREPORT,http_mtls:C.HTTP_MTLS,http_mtls_user:C.HTTP_MTLS_USER,http_mtls_required:C.HTTP_MTLS_REQUIRED,customfunctions_processes:C.THREADS,customfunctions_root:C.COMPONENTSROOT,localstudio_enabled:C.LOCALSTUDIO_ENABLED,logging_file:C.LOGGING_FILE,logging_level:C.LOGGING_LEVEL,logging_root:C.LOGGING_ROOT,logging_rotation_enabled:C.LOGGING_ROTATION_ENABLED,logging_rotation_compress:C.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:C.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:C.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:C.LOGGING_ROTATION_PATH,logging_stdstreams:C.LOGGING_STDSTREAMS,logging_auditlog:C.LOGGING_AUDITLOG,logging_auditretention:C.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:C.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:C.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:C.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:C.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:C.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:C.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:C.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:C.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:C.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:C.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:C.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:C.ROOTPATH,databases:C.DATABASES,storage_path:C.STORAGE_PATH,ignorescripts:C.IGNORE_SCRIPTS,mqtt_network_port:C.MQTT_NETWORK_PORT,mqtt_websocket:C.MQTT_WEBSOCKET,mqtt_network_secureport:C.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:C.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:C.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:C.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:C.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:C.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:C.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:C.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:C.AUTHENTICATION_CACHETTL,authentication_enablesessions:C.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:C.COMPONENTSROOT,tls_certificate:C.TLS_CERTIFICATE,tls_privatekey:C.TLS_PRIVATEKEY,tls_certificateauthority:C.TLS_CERTIFICATEAUTHORITY,tls_ciphers:C.TLS_CIPHERS};for(let e in C){let t=C[e];HA[t.toLowerCase()]=t}var vq={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},Bq={csv_file_load:"csv_file_load",csv_data_load:X.CSV_DATA_LOAD,csv_url_load:X.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"},Hq={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"},xq={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Fq={VERSION_DEFAULT:"2.2.0"},qq={DEVELOPMENT:8192,DEFAULT:512},Gq={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},kq={1e3:"SUCCESSFUL_SHUTDOWN",1001:"CLOSE_GOING_AWAY",1002:"CLOSE_PROTOCOL_ERROR",1003:"CLOSE_UNSUPPORTED",1005:"CLOSE_NO_STATUS",1006:"CLOSE_ABNORMAL",1007:"UNSUPPORTED_PAYLOAD",1008:"POLICY_VIOLATION",1009:"CLOSE_TOO_LARGE",1010:"MANDATORY_EXTENSION",1011:"SERVER_ERROR",1012:"SERVICE_RESTART",1013:"SERVER_BUSY",1014:"BAD_GATEWAY",1015:"HANDSHAKE_FAIL",4141:"LICENSE_LIMIT_REACHED"},Vq={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},xA={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},$q=Symbol("metadata"),Yq="__clustering__",Kq=Object.values(xA),Wq=15984864e5,FA={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Qq=vA.invert(FA),zq={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},Jq=111,Xq=`\r
2
+ `,jq={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Zq=["*","%"],eG="unauthorized_access",tG="func_val",rG={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},nG={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},sG={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"},iG={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},oG={HTTP:"http"},aG={STOPPED:"stopped",ONLINE:"online"},cG="3.x.x",uG={SUCCESS:"success",FAILURE:"failure"},lG={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};qA.exports={LOCAL_HARPERDB_OPERATIONS:Be,HDB_SUPPORT_ADDRESS:DA,HDB_SUPPORT_URL:MA,HDB_PRICING_URL:UF,SUPPORT_HELP_MSG:PF,LICENSE_HELP_MSG:UA,HDB_PROC_NAME:IA,HDB_PROC_DESCRIPTOR:XE,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ll,CLUSTERING_HUB_PROC_DESCRIPTOR:Dl,SYSTEM_SCHEMA_NAME:ZF,HASH_FOLDER_NAME:eq,HDB_HOME_DIR_NAME:tq,UPDATE_FILE_NAME:iq,LICENSE_KEY_DIR_NAME:nq,BOOT_PROPS_FILE_NAME:sq,JOB_TYPE_ENUM:Bq,JOB_STATUS_ENUM:wq,SYSTEM_TABLE_NAMES:Rq,SYSTEM_TABLE_HASH_ATTRIBUTES:Aq,OPERATIONS_ENUM:X,VALID_S3_FILE_TYPES:Iq,S3_BUCKET_AUTH_KEYS:Cq,VALID_SQL_OPS_ENUM:Dq,GEO_CONVERSION_ENUM:Mq,HDB_SETTINGS_NAMES:BA,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Uq,SERVICE_ACTIONS_ENUM:Lq,CLUSTER_MESSAGE_TYPE_ENUM:Hq,CLUSTER_CONNECTION_DIRECTION_ENUM:xq,CLUSTER_EVENTS_DEFS_ENUM:Gq,PERIOD_REGEX:GF,DOUBLE_PERIOD_REGEX:kF,UNICODE_PERIOD:VF,FORWARD_SLASH_REGEX:$F,UNICODE_FORWARD_SLASH:YF,ESCAPED_FORWARD_SLASH_REGEX:KF,ESCAPED_PERIOD_REGEX:WF,ESCAPED_DOUBLE_PERIOD_REGEX:QF,REG_KEY_FILE_NAME:yq,RESTART_TIMEOUT_MS:cq,HDB_FILE_PERMISSIONS:uq,DATABASES_DIR_NAME:dq,LEGACY_DATABASES_DIR_NAME:fq,TRANSACTIONS_DIR_NAME:Eq,LIMIT_COUNT_NAME:hq,ID_ATTRIBUTE_STRING:mq,INSERT_MODULE_ENUM:Tq,UPGRADE_JSON_FIELD_NAMES_ENUM:gq,RESTART_CODE:oq,RESTART_CODE_NUM:aq,CLUSTER_OPERATIONS:Xa,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:bq,HDB_INTERNAL_SC_CHANNEL_PREFIX:Or,INTERNAL_SC_CHANNELS:Oq,CLUSTERING_MESSAGE_TYPES:zq,HDB_FILE_SUFFIX:rq,BLOB_FOLDER_NAME:lq,HDB_TRASH_DIR:_q,ORIGINATOR_SET_VALUE:Jq,LICENSE_VALUES:Fq,RAM_ALLOCATION_ENUM:qq,TIME_STAMP_NAMES_ENUM:xA,TIME_STAMP_NAMES:Kq,PERMS_UPDATE_RELEASE_TIMESTAMP:Wq,SEARCH_NOT_FOUND_MESSAGE:vF,SEARCH_ATTRIBUTE_NOT_FOUND:BF,LICENSE_ROLE_DENIED_RESPONSE:HF,LICENSE_MAX_CONNS_REACHED:xF,BASIC_LICENSE_MAX_NON_CU_ROLES:LA,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:MF,VALUE_SEARCH_COMPARATORS:FA,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Qq,LICENSE_FILE_NAME:Nq,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:kq,NEW_LINE:Xq,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:qF,MOMENT_DAYS_TAG:zF,API_TURNOVER_SEC:JF,LOOPBACK:FF,CODE_EXTENSION:Cl,WILDCARD_SEARCH_VALUE:XF,NODE_ERROR_CODES:Vq,JAVASCRIPT_EXTENSION:wA,PERMS_CRUD_ENUM:jq,UNAUTHORIZED_PERMISSION_NAME:eG,SEARCH_WILDCARDS:Zq,FUNC_VAL:tG,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:rG,JWT_ENUM:nG,CLUSTERING_FLAG:Yq,ITC_EVENT_TYPES:sG,CUSTOM_FUNCTION_PROC_NAME:CA,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Il,SERVICES:iG,THREAD_TYPES:oG,MEM_SETTING_KEY:jF,HDB_RESTART_SCRIPT:pF,PROCESS_DESCRIPTORS:OF,SERVICE_SERVERS:IF,SERVICE_SERVERS_CWD:JE,PROCESS_DESCRIPTORS_VALIDATE:NF,LAUNCH_SERVICE_SCRIPTS:CF,LOG_LEVELS:yF,PROCESS_NAME_ENV_PROP:pq,LOG_NAMES:bF,PM2_PROCESS_STATUSES:aG,CONFIG_PARAM_MAP:HA,CONFIG_PARAMS:C,HDB_CONFIG_FILE:EF,HDB_DEFAULT_CONFIG_FILE:hF,ROLE_TYPES_ENUM:DF,BOOT_PROP_PARAMS:PA,INSTALL_PROMPTS:Sq,HDB_ROOT_DIR_NAME:mF,CLUSTERING_PROCESSES:wF,FOREGROUND_PID_FILE:gF,PACKAGE_ROOT:Ys,PRE_4_0_0_VERSION:cG,DATABASES_PARAM_CONFIG:vq,METADATA_PROPERTY:$q,AUTH_AUDIT_STATUS:uG,AUTH_AUDIT_TYPES:lG,HDB_PID_FILE:RF,DEFAULT_DATABASE_NAME:AF,LEGACY_CONFIG_PARAMS:Pq};NA()});var jE=T((Bie,VA)=>{"use strict";var GA=require("minimist");VA.exports=_G;function _G(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=kA(process.env),n=kA(GA(process.argv))):(r=process.env,n=GA(process.argv));let s={};for(let i=0,o=e.length;i<o;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}a(_G,"assignCMDENVVariables");function kA(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(kA,"objKeysToLowerCase")});var W=T((xie,ih)=>{"use strict";var yi=require("fs-extra"),{workerData:dG,threadId:fG}=require("worker_threads"),_s=require("path"),KA=require("yaml"),WA=require("properties-reader"),Tt=U(),$A=jE(),EG=require("os"),{PACKAGE_ROOT:eh}=U(),{_assignPackageExport:hG}=require("../../index"),Za={};for(let e in console)Za[e]||(Za[e]=console[e]);var Jt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},QA={STDOUT:"stdOut",STDERR:"stdErr"},mG=_s.join(eh,"logs"),pG=_s.join(eh,"config/yaml/",Tt.HDB_DEFAULT_CONFIG_FILE),SG=1e4,ls,qn,zt,Ml,Ul,ec,Mo,ja;ja===void 0&&zA();ih.exports={notify:jA,fatal:ZA,error:tc,warn:sh,info:Pl,debug:nh,trace:rh,setLogLevel:yG,log_level:zt,loggerWithTag:TG,suppressLogging:gG,initLogSettings:zA,setupConsoleLogging:JA,logCustomLevel:OG,closeLogFile:th,getLogFilePath:()=>ec,OUTPUTS:QA,AuthAuditLog:IG};hG("logger",ih.exports);function zA(e=!1){try{if(ja===void 0||e){th();let t=bG(),r=$A(["ROOTPATH"]);try{ja=WA(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!yi.pathExistsSync(_s.join(r.ROOTPATH,Tt.HDB_CONFIG_FILE)))throw n}({level:zt,config_log_path:Ul,to_file:ls,to_stream:qn}=NG(r.ROOTPATH?_s.join(r.ROOTPATH,Tt.HDB_CONFIG_FILE):ja.get("settings_path"))),Ml=Tt.LOG_NAMES.HDB,ec=_s.join(Ul,Ml)}}catch(t){if(ja=void 0,t.code===Tt.NODE_ERROR_CODES.ENOENT){let r=$A(Object.keys(Tt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Tt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===Tt.CONFIG_PARAMS.LOGGING_LEVEL){zt=u;continue}if(c===Tt.CONFIG_PARAMS.LOGGING_STDSTREAMS){qn=u;continue}c===Tt.CONFIG_PARAMS.LOGGING_FILE&&(ls=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=wG();ls=ls===void 0?s:ls,ls=YA(ls),qn=qn===void 0?i:qn,qn=YA(qn),zt=zt===void 0?n:zt,Ul=mG,Ml=Tt.LOG_NAMES.INSTALL,ec=_s.join(Ul,Ml);return}throw tc("Error initializing log settings"),tc(t),t}process.env.DEV_MODE&&(qn=!0),JA()}a(zA,"initLogSettings");var ZE=!0;function JA(){Lo("error",tc),Lo("warn",sh),Lo("log",Pl),Lo("info",Pl),Lo("debug",nh),Lo("trace",rh)}a(JA,"setupConsoleLogging");function Lo(e,t){console[e]=function(...r){if(ZE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Za[e](...r)}}a(Lo,"logConsole");function TG(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(jA),fatal:r(ZA),error:r(tc),warn:r(sh),info:r(Pl),debug:r(nh),trace:r(rh)};function r(n){return function(...s){return n(t,...s)}}}a(TG,"loggerWithTag");function gG(e){try{ZE=!1,e()}finally{ZE=!0}}a(gG,"suppressLogging");var RG=dG?.name?.replace(/ /g,"-")||"main";function ds(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||RG+"/"+fG);c<s;c++){let _=t[c];_ instanceof Error&&_.stack?n+=_.stack:typeof _=="object"?n+=JSON.stringify(_):n+=_,c<i&&(n+=" ")}return`${r} [${o.join("] [")}]: ${n}
3
+ `}a(ds,"createLogRecord");function rc(e){ls&&XA(e),qn&&process.stdout.write(e)}a(rc,"logStdOut");function vl(e){ls&&XA(e),qn&&process.stderr.write(e)}a(vl,"logStdErr");function XA(e){AG(),Mo?yi.appendFileSync(Mo,e):Za.log(e)}a(XA,"logToFile");function th(){try{yi.closeSync(Mo)}catch{}Mo=null}a(th,"closeLogFile");function AG(){if(!Mo){try{if(!ec)debugger;Mo=yi.openSync(ec,"a")}catch(e){Za.error(e)}setTimeout(()=>{th()},SG).unref()}}a(AG,"openLogFile");function Pl(...e){Jt[zt]<=Jt.info&&rc(ds("info",e))}a(Pl,"info");function rh(...e){Jt[zt]<=Jt.trace&&rc(ds("trace",e))}a(rh,"trace");function tc(...e){Jt[zt]<=Jt.error&&vl(ds("error",e))}a(tc,"error");function nh(...e){Jt[zt]<=Jt.debug&&rc(ds("debug",e))}a(nh,"debug");function jA(...e){Jt[zt]<=Jt.notify&&rc(ds("notify",e))}a(jA,"notify");function ZA(...e){Jt[zt]<=Jt.fatal&&vl(ds("fatal",e))}a(ZA,"fatal");function sh(...e){Jt[zt]<=Jt.warn&&vl(ds("warn",e))}a(sh,"warn");function OG(e,t,...r){t===QA.STDERR?vl(ds(e,r)):rc(ds(e,r))}a(OG,"logCustomLevel");function bG(){let e;try{e=EG.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=_s.join(e,Tt.HDB_HOME_DIR_NAME,Tt.BOOT_PROPS_FILE_NAME);return yi.existsSync(t)||(t=_s.join(eh,"utility/hdb_boot_properties.file")),t}a(bG,"getPropsFilePath");function yG(e){zt=e}a(yG,"setLogLevel");function YA(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(YA,"autoCastBoolean");function NG(e){try{if(e.includes("config/settings.js")){let o=WA(e);return{level:o.get(Tt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:_s.dirname(o.get(Tt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Tt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Tt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=KA.parseDocument(yi.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===Tt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(NG,"getLogConfig");function wG(){try{let e=KA.parseDocument(yi.readFileSync(pG,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(wG,"getDefaultConfig");function IG(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}a(IG,"AuthAuditLog")});var tO=T((qie,eO)=>{"use strict";var CG=require("util"),DG=require("path"),LG=require("child_process"),MG=CG.promisify(LG.execFile),UG=1e3*1e3*10;eO.exports={findPs:PG};async function PG(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await MG("ps",["wwxo",`pid,${r}`],{maxBuffer:UG});for(let s of n.trim().split(`
4
+ `).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}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:DG.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"])}))}a(PG,"findPs")});var lt=T((kie,nO)=>{"use strict";var vG="__dbis__",BG="__txns__",HG="__environment_name__",xG="__dbi_defintion__",FG={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"},qG=["__createdtime__","__updatedtime__"],GG="\uFFFF",rO={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},kG=Object.values(rO);nO.exports={AUDIT_STORE_NAME:BG,INTERNAL_DBIS_NAME:vG,DBI_DEFINITION_NAME:xG,SEARCH_TYPES:FG,TIMESTAMP_NAMES:qG,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:HG,TRANSACTIONS_DBI_NAMES_ENUM:rO,TRANSACTIONS_DBIS:kG,OVERFLOW_MARKER:GG}});var br=T((Vie,dO)=>{"use strict";var sO=U(),iO=lt(),oO={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},aO=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),cO={500:aO("There was an error processing your request."),400:"Invalid request"},VG=cO[oO.INTERNAL_SERVER_ERROR],$G={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},YG={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},KG={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:e=>`There was an error downloading '${e}'.`,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:e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,INVALID_FILE_EXT_ERR:e=>`Error selecting correct parser - valid file type not found in json - ${e}`,MAX_FILE_SIZE_ERR:(e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:e=>`There was an error downloading '${e}' from AWS.`,WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},WG={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:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_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 ${iO.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${iO.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"},QG={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${sO.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,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 ${sO.INSERT_MODULE_ENUM.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"},uO={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"},zG={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:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' 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:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},JG={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a 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:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,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:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},XG={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},jG={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},ZG={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},lO={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`},_O={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:e=>`ITC server received invalid event type: ${e}`},ek={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."},tk={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},rk={...uO,...KG,...$G,...zG,...JG,...XG,...jG,...ZG,...QG,...lO,..._O,...ek,...tk,...YG};dO.exports={CHECK_LOGS_WRAPPER:aO,HDB_ERROR_MSGS:rk,DEFAULT_ERROR_MSGS:cO,DEFAULT_ERROR_RESP:VG,HTTP_STATUS_CODES:oO,LMDB_ERRORS_ENUM:WG,AUTHENTICATION_ERROR_MSGS:uO,VALIDATION_ERROR_MSGS:lO,ITC_ERRORS:_O}});var ee=T((Yie,hO)=>{"use strict";var Uo=br(),nk=W(),sk=U(),Bl=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,fO),this.statusCode=n||Uo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Uo.DEFAULT_ERROR_MSGS[n]?Uo.DEFAULT_ERROR_MSGS[n]:Uo.DEFAULT_ERROR_MSGS[Uo.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&&nk[s](i)}},oh=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},ah=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function fO(e,t,r,n=sk.LOG_LEVELS.ERROR,s=null,i=!1){if(EO(e))return e;let o=new Bl(e,t,r,n,s);return i&&delete o.stack,o}a(fO,"handleHDBError");function EO(e){return e.__proto__.constructor.name===Bl.name}a(EO,"isHDBError");hO.exports={isHDBError:EO,handleHDBError:fO,ClientError:oh,ServerError:ah,hdb_errors:Uo}});var pO=T((Wie,mO)=>{"use strict";var ik={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
5
5
  `),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
6
- `)},nk="certificate.pem",sk="privateKey.pem",ik="ca.pem";fO.exports={CERTIFICATE_VALUES:rk,CERTIFICATE_PEM_NAME:nk,PRIVATEKEY_PEM_NAME:sk,CA_PEM_NAME:ik}});var Xe=g((Qie,hO)=>{"use strict";var jt=require("validate.js");jt.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||jt.validators.type.checks[t](e)?null:` must be a '${t}' value`};jt.validators.type.checks={Object:function(e){return jt.isObject(e)&&!jt.isArray(e)},Array:jt.isArray,Integer:jt.isInteger,Number:jt.isNumber,String:jt.isString,Date:jt.isDate,Boolean:function(e){return typeof e=="boolean"}};jt.validators.hasValidFileExt=function(e,t){return jt.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};hO.exports={validateObject:ok,validateObjectAsync:ak,validateBySchema:ck};function ok(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=jt(e,t,{format:"flat"});return r?new Error(r):null}a(ok,"validateObject");async function ak(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await jt.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(ak,"validateObjectAsync");function ck(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(ck,"validateBySchema")});var lh=g((Xie,gO)=>{"use strict";var TO=require("fs-extra"),ce=require("joi"),uk=require("os"),{boolean:De,string:br,number:It,array:uh}=ce.types(),{totalmem:mO}=require("os"),bi=require("path"),lk=Y(),Bl=J(),Jie=EO(),pO=M(),_k=Xe(),SO="log",dk="components",fk="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Ek="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",hk="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",mk="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",pk="rootPath config parameter is undefined",Sk="clustering.enabled config parameter is undefined",Ni=It.min(0).required(),Hl=uh.items({host:br.required(),port:Ni}).empty(null),Fn;gO.exports={configValidator:Tk,routesValidator:Nk,route_constraints:Hl};function Tk(e){if(Fn=e.rootPath,Bl.isEmpty(Fn))throw pk;let t=De.required(),r=It.min(0).max(1e3).empty(null).default(bk),n=br.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(ec),s=br.optional().empty(null),i=br.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ce.string().empty(null).default(ec),c=ce.custom(Rk).empty(null).default(ec),u=e.clustering?.enabled;if(Bl.isEmpty(u))throw Sk;let _;return u===!0?_=ce.object({enabled:t,hubServer:ce.object({cluster:ce.object({name:ce.required().empty(null),network:ce.object({port:Ni,routes:Hl}).required()}).required(),leafNodes:ce.object({network:ce.object({port:Ni}).required()}).required(),network:ce.object({port:Ni}).required()}).required(),leafServer:ce.object({network:ce.object({port:Ni,routes:Hl}).required(),streams:ce.object({maxAge:It.min(120).allow(null).optional(),maxBytes:It.min(1).allow(null).optional(),maxMsgs:It.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ce.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:De.optional(),databaseLevel:De.optional(),tls:ce.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:De.required(),verify:De.optional()}),user:br.optional().empty(null)}).required():_=ce.object({enabled:t,tls:ce.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:De.required()})}).required(),ce.object({authentication:ce.object({authorizeLocal:De,cacheTTL:It.required(),enableSessions:De}),analytics:ce.object({aggregatePeriod:It}),componentsRoot:n.optional(),clustering:_,localStudio:ce.object({enabled:t}).required(),logging:ce.object({auditAuthEvents:ce.object({logFailed:De,logSuccessful:De}),file:De.required(),level:ce.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ce.object({enabled:De.optional(),compress:De.optional(),interval:br.custom(Ok).optional().empty(null),maxSize:br.custom(Ak).optional().empty(null),path:br.optional().empty(null).default(ec)}).required(),root:n,stdStreams:De.required(),auditLog:De.required()}).required(),operationsApi:ce.object({network:ce.object({cors:De.optional(),corsAccessList:uh.optional(),headersTimeout:It.min(1).optional(),keepAliveTimeout:It.min(1).optional(),port:It.optional().empty(null),domainSocket:ce.optional().empty("hdb/operations-server").default(ec),securePort:It.optional().empty(null),timeout:It.min(1).optional()}).optional(),tls:ce.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:br.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ce.object({network:ce.object({port:Ni,securePort:Ni,mtls:ce.alternatives([De.optional(),ce.object({user:br.optional(),certificateAuthority:s,required:De.optional()})])}).required(),webSocket:De.optional(),requireAuthentication:De.optional()}),http:ce.object({compressionThreshold:It.optional(),cors:De.optional(),corsAccessList:uh.optional(),headersTimeout:It.min(1).optional(),port:It.min(0).optional().empty(null),securePort:It.min(0).optional().empty(null),mtls:ce.alternatives([De.optional(),ce.object({user:br.optional(),certificateAuthority:s,required:De.optional()})])}).required(),threads:r.optional(),maxHeapMemory:It.min(0).optional(),storage:ce.object({writeAsync:De.required(),overlappingSync:De.optional(),caching:De.optional(),compression:De.optional(),noReadAhead:De.optional(),path:c,prefetchWrites:De.optional()}).required(),ignoreScripts:De.optional(),tls:ce.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:br.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(Tk,"configValidator");function gk(e){return TO.existsSync(e)?null:`Specified path ${e} does not exist.`}a(gk,"doesPathExist");function Rk(e,t){ce.assert(e,br.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=gk(e);if(r)return t.message(r)}a(Rk,"validatePath");function Ak(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(fk);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(hk):e}a(Ak,"validateRotationMaxSize");function Ok(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Ek);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(mk):e}a(Ok,"validateRotationInterval");function bk(e,t){let r=t.state.path.join("."),n=uk.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||mO();return i=Math.round(Math.min(i,mO())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),lk.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(bk,"setDefaultThreads");function ec(e,t){let r=t.state.path.join(".");if(!Bl.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Bl.isEmpty(Fn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return bi.join(Fn,dk);case"logging.root":return bi.join(Fn,SO);case"clustering.leafServer.streams.path":return bi.join(Fn,"clustering","leaf");case"storage.path":let n=bi.join(Fn,pO.LEGACY_DATABASES_DIR_NAME);return TO.existsSync(n)?n:bi.join(Fn,pO.DATABASES_DIR_NAME);case"logging.rotation.path":return bi.join(Fn,SO);case"operationsApi.network.domainSocket":return r==null?null:bi.join(Fn,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(ec,"setDefaultRoot");function Nk(e){let t=ce.object({routes:Hl});return _k.validateBySchema({routes:e},t)}a(Nk,"routesValidator")});var yi={};Ve(yi,{server:()=>je});var RO,je,Zt=Oe(()=>{RO=require("../../index"),je={};(0,RO._assignPackageExport)("server",je)});var wr=g((eoe,DO)=>{"use strict";var yr=M(),Ct=J(),Tt=Y(),{configValidator:yk,routesValidator:AO}=lh(),er=require("fs-extra"),wk=require("yaml"),pn=require("path"),Ik=require("is-number"),bO=require("properties-reader"),Ck=require("lodash"),{handleHDBError:Dk}=ee(),{HTTP_STATUS_CODES:Lk,HDB_ERROR_MSGS:xl}=Or(),Zie=require("minimist"),{server:Mk}=(Zt(),te(yi)),{DATABASES_PARAM_CONFIG:tc,CONFIG_PARAMS:Nr,CONFIG_PARAM_MAP:Sn}=yr,Uk="Unable to get config value because config is uninitialized",Pk="Config successfully initialized",vk="Error backing up config file",Bk="Empty parameter sent to getConfigValue",NO=pn.join(yr.PACKAGE_ROOT,"config","yaml",yr.HDB_DEFAULT_CONFIG_FILE),Hk="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",OO={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"},Fl,gt,ql;DO.exports={createConfigFile:xk,getDefaultConfig:Fk,getConfigValue:wO,initConfig:dh,flattenConfig:Mo,updateConfigValue:IO,updateConfigObject:Gk,getConfiguration:$k,setConfiguration:Yk,readConfigFile:Eh,getClusteringRoutes:Kk,initOldConfig:CO,getConfigFromFile:Wk,getConfigFilePath:wi,addConfig:Qk,deleteConfigFromFile:zk,getConfigObj:Jk};function xk(e){let t=$s(NO);Fl=Mo(t.toJSON());let r;for(let o in e){let c=Sn[o.toLowerCase()];if(c===Nr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=_h(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){Tt.error(l)}}}r&&yO(t,r),fh(t);let n=t.toJSON();gt=Mo(n);let s=t.getIn(["rootPath"]),i=pn.join(s,yr.HDB_CONFIG_FILE);er.createFileSync(i),er.writeFileSync(i,String(t)),Tt.trace(`Config file written to ${i}`)}a(xk,"createConfigFile");function yO(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Ct.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(tc.TABLES))for(let i in n[s][tc.TABLES])for(let o in n[s][tc.TABLES][i]){let c=n[s][tc.TABLES][i][o],u=[Nr.DATABASES,s,tc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in n[s]){let o=n[s][i],c=[Nr.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Tt.error("Error parsing schemas CLI/env config arguments",n)}}a(yO,"setSchemasConfig");function Fk(e){if(Fl===void 0){let r=$s(NO);Fl=Mo(r.toJSON())}let t=Sn[e.toLowerCase()];if(t!==void 0)return Fl[t.toLowerCase()]}a(Fk,"getDefaultConfig");function wO(e){if(e==null){Tt.error(Bk);return}if(gt===void 0){Tt.trace(Uk);return}let t=Sn[e.toLowerCase()];if(t!==void 0)return gt[t.toLowerCase()]}a(wO,"getConfigValue");function wi(e=Ct.getPropsFilePath()){let t=Ct.getEnvCliRootPath();return t?pn.join(t,yr.HDB_CONFIG_FILE):bO(e).get(yr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(wi,"getConfigFilePath");function dh(e=!1){if(gt===void 0||e){let t;if(!Ct.noBootFile()){t=Ct.getPropsFilePath();try{er.accessSync(t,er.constants.F_OK|er.constants.R_OK)}catch(i){throw Tt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=wi(t),n;if(r.includes("config/settings.js"))try{CO(r);return}catch(i){if(i.code!==yr.NODE_ERROR_CODES.ENOENT)throw i}try{n=$s(r)}catch(i){if(i.code===yr.NODE_ERROR_CODES.ENOENT){Tt.trace(`HarperDB config file not found at ${r}.
7
- This can occur during early stages of install where the config file has not yet been created`);return}else throw Tt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}qk(n,r),fh(n);let s=n.toJSON();if(Mk.config=s,gt=Mo(s),gt.logging_rotation_rotate)for(let i in OO)gt[i]&&Tt.error(`Config ${OO[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Tt.trace(Pk)}}a(dh,"initConfig");function qk(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],pn.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],pn.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],pn.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(Tt.trace("Updating config file with missing config params"),er.writeFileSync(t,String(e)))}a(qk,"checkForUpdatedConfig");function fh(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=yk(t);if(r.error)throw xl.CONFIG_VALIDATION(r.error.message);e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],r.value?.operationsApi?.network?.domainSocket)}a(fh,"validateConfig");function Gk(e,t){gt===void 0&&(gt={});let r=Sn[e.toLowerCase()];if(r===void 0){Tt.trace(`Unable to update config object because config param '${e}' does not exist`);return}gt[r.toLowerCase()]=t}a(Gk,"updateConfigObject");function IO(e,t,r=void 0,n=!1,s=!1,i=!1){gt===void 0&&dh();let o=wO(Sn.hdb_root),c=pn.join(o,yr.HDB_CONFIG_FILE),u=$s(c),_;if(r===void 0&&e.toLowerCase()===Nr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=Sn[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=_h(f,t);u.setIn([...E],h)}else for(let f in r){let E=Sn[f.toLowerCase()];if(E===Nr.HTTP_SECUREPORT&&r[f]===gt[Nr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Nr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===gt[Nr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Nr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=yr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=_h(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(T){Tt.error(T)}}}_&&yO(u,_),fh(u);let l=u.getIn(["rootPath"]),d=pn.join(l,yr.HDB_CONFIG_FILE);n===!0&&kk(c,l),er.writeFileSync(d,String(u)),s&&(gt=Mo(u.toJSON())),Tt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(IO,"updateConfigValue");function kk(e,t){try{let r=pn.join(t,"backup",`${yr.HDB_CONFIG_FILE}.bak`);er.copySync(e,r),Tt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Tt.error(vk),Tt.error(r)}}a(kk,"backupConfigFile");var Vk=["databases"];function Mo(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),ql=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])&&!Vk.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Nr[u.toUpperCase()]&&Sn[u]&&(s[Sn[u].toLowerCase()]=o[c]),s[u]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Mo,"flattenConfig");function _h(e,t){if(e===Nr.CLUSTERING_NODENAME||e===Nr.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(Ik(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Ct.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 Ct.autoCast(t)}a(_h,"castConfigValue");function $k(){let e=Ct.getPropsFilePath(),t=wi(e);return $s(t).toJSON()}a($k,"getConfiguration");async function Yk(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return IO(void 0,void 0,s,!0),Hk}catch(i){throw typeof i=="string"||i instanceof String?Dk(i,i,Lk.BAD_REQUEST,void 0,void 0,!0):i}}a(Yk,"setConfiguration");function Eh(){let e=Ct.getPropsFilePath();try{er.accessSync(e,er.constants.F_OK|er.constants.R_OK)}catch(n){if(!Ct.noBootFile())throw Tt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=wi(e);return $s(t).toJSON()}a(Eh,"readConfigFile");function $s(e){return wk.parseDocument(er.readFileSync(e,"utf8"),{simpleKeys:!0})}a($s,"parseYamlDoc");function Kk(){let e=Eh(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Ct.isEmptyOrZeroLength(t)?[]:t;let r=AO(t);if(r)throw xl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Ct.isEmptyOrZeroLength(n)?[]:n;let s=AO(n);if(s)throw xl.CONFIG_VALIDATION(s.message);if(!Ct.isEmptyOrZeroLength(n)&&!Ct.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Ct.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw xl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(Kk,"getClusteringRoutes");function CO(e){let t=bO(e);gt={};for(let r in Sn){let n=t.get(r.toUpperCase());if(Ct.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Sn[r].toLowerCase();s===Nr.LOGGING_ROOT?gt[s]=pn.dirname(n):gt[s]=n}return gt}a(CO,"initOldConfig");function Wk(e){let t=Eh();return Ck.get(t,e.replaceAll("_","."))}a(Wk,"getConfigFromFile");async function Qk(e,t){let r=$s(wi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await er.writeFile(wi(),String(r))}a(Qk,"addConfig");function zk(e){let t=wi(Ct.getPropsFilePath()),r=$s(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=pn.join(n,yr.HDB_CONFIG_FILE);er.writeFileSync(s,String(r))}a(zk,"deleteConfigFromFile");function Jk(){return ql||(dh(),ql)}a(Jk,"getConfigObj")});var Z=g((roe,PO)=>{"use strict";var hh=require("fs-extra"),Ii=require("path"),LO=require("os"),Xk=require("properties-reader"),nc=Y(),rc=J(),ue=M(),Gl=wr(),jk="Error initializing environment manager",kl="BOOT_PROPS_FILE_PATH",MO=!1,Zk={[ue.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},_s={};PO.exports={BOOT_PROPS_FILE_PATH:kl,getHdbBasePath:eV,setHdbBasePath:tV,get:UO,initSync:nV,setProperty:Le,initTestEnvironment:sV};function eV(){return _s[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(eV,"getHdbBasePath");function tV(e){_s[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(tV,"setHdbBasePath");function UO(e){let t=Gl.getConfigValue(e);return t===void 0?_s[e]:t}a(UO,"get");function Le(e,t){Zk[e]&&(_s[e]=t),Gl.updateConfigObject(e,t)}a(Le,"setProperty");function rV(){let e;try{e=rc.getPropsFilePath(),hh.accessSync(e,hh.constants.F_OK|hh.constants.R_OK),MO=!0;let t=Xk(e);return _s[ue.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ue.HDB_SETTINGS_NAMES.INSTALL_USER),_s[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),_s[kl]=e,!0}catch{return nc.trace(`Environment manager found no properties file at ${e}`),!1}}a(rV,"doesPropFileExist");function nV(e=!1){try{(MO||rV()||rc.noBootFile())&&(Gl.initConfig(e),_s[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Gl.getConfigValue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){nc.error(jk),nc.error(t),console.error(t),process.exit(1)}}a(nV,"initSync");function sV(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Ii.join(__dirname,"../../","unitTests");_s[kl]=Ii.join(u,"hdb_boot_properties.file"),Le(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ii.join(u,"settings.test")),Le(ue.HDB_SETTINGS_NAMES.INSTALL_USER,LO.userInfo()?LO.userInfo().username:void 0),Le(ue.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Le(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ii.join(u,"envDir","log")),Le(ue.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Le(ue.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Le(ue.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Le(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ii.join(u,"envDir")),Le(ue.CONFIG_PARAMS.STORAGE_PATH,Ii.join(u,"envDir")),s&&(Le(ue.CONFIG_PARAMS.HTTP_SECUREPORT,UO(ue.CONFIG_PARAMS.HTTP_PORT)),Le(ue.CONFIG_PARAMS.HTTP_PORT,null)),Le(ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Le(ue.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Le(ue.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,rc.isEmpty(i)?!1:i),Le(ue.CONFIG_PARAMS.HTTP_CORS,rc.isEmpty(i)?!1:i),Le(ue.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Le(ue.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Le(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Le(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Le(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ii.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Le(ue.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,rc.isEmpty(c)?!1:c),o&&(Le("CORS_ACCESSLIST",o),Le(ue.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Le(ue.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Le(ue.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Le(ue.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Le(ue.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Le(ue.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Le(ue.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${kl}. Please check your boot props and settings files`;nc.fatal(r),nc.error(t)}}a(sV,"initTestEnvironment")});var Ke=g((soe,GO)=>{"use strict";var cc=M(),iV=J(),tr=Z(),uc=require("path"),oV=require("minimist"),vO=require("fs-extra"),BO=require("lodash");tr.initSync();var{CONFIG_PARAMS:Ys,DATABASES_PARAM_CONFIG:sc,SYSTEM_SCHEMA_NAME:Vl}=cc,ic,oc,ac;function HO(){if(ic!==void 0)return ic;if(tr.getHdbBasePath()!==void 0)return ic=tr.get(Ys.STORAGE_PATH)||uc.join(tr.getHdbBasePath(),cc.DATABASES_DIR_NAME),ic}a(HO,"getBaseSchemaPath");function xO(){if(oc!==void 0)return oc;if(tr.getHdbBasePath()!==void 0)return oc=qO(Vl),oc}a(xO,"getSystemSchemaPath");function FO(){if(ac!==void 0)return ac;if(tr.getHdbBasePath()!==void 0)return ac=tr.get(cc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||uc.join(tr.getHdbBasePath(),cc.TRANSACTIONS_DIR_NAME),ac}a(FO,"getTransactionAuditStoreBasePath");function aV(e,t){let r=tr.get(Ys.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||uc.join(FO(),e.toString())}a(aV,"getTransactionAuditStorePath");function qO(e,t){e=e.toString(),t=t&&t.toString();let r=tr.get(cc.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||uc.join(HO(),e)}a(qO,"getSchemaPath");function cV(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,oV(process.argv));let n=r[Ys.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!iV.isObject(n))throw o;i=n}for(let o of i){let c=o[Vl];if(!c)continue;let u=tr.get(Ys.DATABASES);u=u??{};let _=c?.tables?.[t]?.[sc.PATH];if(_)return BO.set(u,[Vl,sc.TABLES,t,sc.PATH],_),tr.setProperty(Ys.DATABASES,u),_;let l=c?.[sc.PATH];if(l)return BO.set(u,[Vl,sc.PATH],l),tr.setProperty(Ys.DATABASES,u),l}}let s=r[Ys.STORAGE_PATH.toUpperCase()];if(s){if(!vO.pathExistsSync(s))throw new Error(s+" does not exist");let i=uc.join(s,e);return vO.mkdirsSync(i),tr.setProperty(Ys.STORAGE_PATH,s),i}return xO()}a(cV,"initSystemSchemaPaths");function uV(){ic=void 0,oc=void 0,ac=void 0}a(uV,"resetPaths");GO.exports={getBaseSchemaPath:HO,getSystemSchemaPath:xO,getTransactionAuditStorePath:aV,getTransactionAuditStoreBasePath:FO,getSchemaPath:qO,initSystemSchemaPaths:cV,resetPaths:uV}});var Ir=g((coe,KO)=>{"use strict";var lV=Or().LMDB_ERRORS_ENUM,ooe=require("lmdb"),_V=lt(),aoe=require("buffer").Buffer,{OVERFLOW_MARKER:kO,MAX_SEARCH_KEY_LENGTH:$l}=_V,VO=["number","string","symbol","boolean","bigint"];function dV(e){if(e=e?.primaryStore||e,!e)throw new Error(lV.ENV_REQUIRED)}a(dV,"validateEnv");function fV(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(fV,"stringifyData");function EV(e){return e instanceof Date?e.valueOf():e}a(EV,"convertKeyValueToWrite");function hV(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(VO.includes(typeof e))return e.length>$l?[e.slice(0,$l)+kO]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(VO.includes(typeof i))i.length>$l?r.push(i.slice(0,$l)+kO):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(hV,"getIndexedValues");var Yl=0,$O=0;function YO(){$O=Date.now()-performance.now()}a(YO,"adjustStartTime");YO();var mV=6e4;setInterval(YO,mV).unref();function pV(){let e=performance.now()+$O;return e>Yl?(Yl=e,e):(Yl+=488e-6,Yl)}a(pV,"getNextMonotonicTime");KO.exports={validateEnv:dV,stringifyData:fV,convertKeyValueToWrite:EV,getNextMonotonicTime:pV,getIndexedValues:hV}});var WO,Tn,mh,lc=Oe(()=>{WO=require("events"),Tn=class extends WO.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new mh;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(){return this.queue?.shift()}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)}},mh=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});var Sh={};Ve(Sh,{loadGQLSchema:()=>gV,start:()=>ph,startOnMainThread:()=>TV});function ph({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),s)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let F=function(v){if(v.kind==="NonNullType"){let W=F(v.type);return W.nullable=!1,W}if(v.kind==="ListType")return{type:"array",elements:F(v.type)};let z={type:v.name?.value};return Object.defineProperty(z,"location",{value:v.loc.startToken}),z};a(F,"getProperty");let T=S.name.value,A=[],b={table:null,database:null,properties:A};f.set(T,b);for(let v of S.directives){if(v.name.value==="table"){for(let P of v.arguments)b[P.name.value]=P.value.value;b.schema&&(b.database=b.schema),b.table||(b.table=T),b.audit&&(b.audit=b.audit!=="false"),b.attributes=b.properties,E.push(b)}if(v.name.value==="sealed"&&(b.sealed=!0),v.name.value==="export"){b.export=!0;for(let P of v.arguments)P.name.value==="name"&&(b.export={name:P.value.value})}}let H=!1;for(let v of S.fields){let P=F(v.type);P.name=v.name.value,A.push(P);for(let z of v.directives)if(z.name.value==="primaryKey")H?console.warn("Can not define two attributes as a primary key"):(P.isPrimaryKey=!0,H=!0);else if(z.name.value==="indexed")P.indexed=!0;else if(z.name.value==="relationship"){let W={};for(let Q of z.arguments)W[Q.name.value]=Q.value.value;P.relationship=W}else if(z.name.value==="createdTime")P.assignCreatedTime=!0;else if(z.name.value==="updatedTime")P.assignUpdatedTime=!0;else if(z.name.value==="expiresAt")P.expiresAt=!0;else if(z.name.value==="allow"){let W=P.authorizedRoles=[];for(let Q of z.arguments)Q.name.value==="role"&&W.push(Q.value.value)}}b.type=T,T==="Query"&&(h=b)}function p(S){let T=f.get(S.type);T?(Object.defineProperty(S,"properties",{value:T.properties}),Object.defineProperty(S,"definition",{value:T})):S.type==="array"?p(S.elements):SV.includes(S.type)||(0,QO.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(p,"connectPropertyType");for(let S of f.values())for(let T of S.properties)p(T);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Kl.dirname)(n),S.tableClass):i.set((0,Kl.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass));if(h)for(let S of h.properties){let T=f.get(S.type);if(!T)throw new Error(`${S.type} was not found as a Query export`);i.set((0,Kl.dirname)(n)+"/"+S.name,T.tableClass)}}}var Kl,QO,SV,TV,gV,zO=Oe(()=>{Kl=require("path");be();QO=B(Ze()),SV=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(ph,"start");TV=ph,gV=ph({ensureTable:ot}).handleFile});async function Wl(e){return RV?(_c||(_c=AV(bV)),(await(await _c).import(e)).namespace):import(e)}async function AV(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),_c=new Compartment({console,Math,Date,fetch:OV,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,XO.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Bt,tables:Cr,databases:et})}};let n=await(0,JO.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),_c}function OV(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 bV(){return{Resource:Bt,tables:Cr}}var JO,XO,RV,_c,Th=Oe(()=>{gn();be();JO=require("fs/promises"),XO=require("path"),RV=!1;a(Wl,"secureImport");a(AV,"getCompartment");a(OV,"secureOnlyFetch");a(bV,"getGlobalVars")});var Rh={};Ve(Rh,{handleFile:()=>NV});async function NV(e,t,r,n){let s=new Map,i=(0,jO.pathToFileURL)(r).toString(),o=await Wl(i);u(o.default)&&n.set((0,gh.dirname)(t),o.default),c(o,(0,gh.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?n.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),s}var jO,gh,ZO=Oe(()=>{jO=require("url");Th();gh=require("path");a(NV,"handleFile")});var Oh={};Ve(Oh,{start:()=>yV});function yV({resources:e}){e.set("login",Ah),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Ah,eb=Oe(()=>{gn();a(yV,"start");Ah=class extends Bt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var ab={};Ve(ab,{parse:()=>Nh,streamAsJSON:()=>dc,stringify:()=>Ci});function dc(e){return new bh({value:e})}function tb(e){return console.error(e),JSON.stringify(e.toString())}function rb(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Ci(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===ib)return ob(e);if(t.resolution)return t.resolution.then(()=>Ci(e));throw t}}function ob(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+=ob(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Ci(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Nh(e){return CV.test(e)?wV.parse(e):JSON.parse(e)}var nb,sb,wV,IV,ib,bh,CV,yh=Oe(()=>{nb=require("stream"),sb=B(require("json-bigint-fixes")),wV=(0,sb.default)({useNativeBigInt:!0}),IV=1e4,ib={};BigInt.prototype.toJSON=function(){throw ib};a(dc,"streamAsJSON");bh=class extends nb.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),tb)}catch(s){yield tb(s)}else yield Ci(t)}else yield Ci(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);rb(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),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>IV?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 rb(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(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(tb,"handleError");a(rb,"when");a(Ci,"stringify");a(ob,"jsStringify");CV=/-?\d{16,}/;a(Nh,"parse")});var gb=g((boe,Tb)=>{"use strict";var wh=require("recursive-iterator"),DV=require("alasql"),Ih=require("clone"),cb=J(),{handleHDBError:ub,hdb_errors:LV}=ee(),{HDB_ERROR_MSGS:lb,HTTP_STATUS_CODES:_b}=LV,{getDatabases:MV}=(be(),te(Fe)),UV=["DISTINCT_ARRAY"],db=Symbol("validateTables"),Ch=Symbol("validateTable"),Ooe=Symbol("getAllColumns"),fb=Symbol("validateAllColumns"),Ql=Symbol("findColumn"),Eb=Symbol("validateOrderBy"),fc=Symbol("validateSegment"),Dh=Symbol("validateColumn"),hb=Symbol("setColumnsForTable"),mb=Symbol("checkColumnsForAsterisk"),pb=Symbol("validateGroupBy"),Sb=Symbol("hasColumns"),Lh=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[db](),this[mb](),this[fb]()}[db](){if(this[Sb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Ch](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Ch](t.table)})}}[Sb](){let t=!1,r=new wh(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Ch](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=MV();if(!r[t.databaseid])throw ub(new Error,lb.SCHEMA_NOT_FOUND(t.databaseid),_b.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw ub(new Error,lb.TABLE_NOT_FOUND(t.databaseid,t.tableid),_b.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Ih(s);i.table=Ih(t),this.attributes.push(i)})}[Ql](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)}[mb](){let t=new wh(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[hb](r.tableid)}[hb](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new DV.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[fb](){this[fc](this.statement.columns,!1),this[fc](this.statement.joins,!1),this[fc](this.statement.where,!1),this[pb](this.statement.group,!1),this[fc](this.statement.order,!0)}[fc](t,r){if(!t)return;let n=new wh(t),s=[];for(let{node:i,path:o}of n)!cb.isEmpty(i)&&!cb.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Eb](i):s.push(this[Dh](i)));return s}[pb](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&UV.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Ih(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Ql](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[Ql](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.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`}[Eb](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[Dh](t)}[Dh](t){let r=this[Ql](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]}};Tb.exports=Lh});var Ab=g((yoe,Rb)=>{"use strict";var Mh=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};Rb.exports=Mh});var bb=g((Ioe,Ob)=>{"use strict";var Uh=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};Ob.exports=Uh});var Ib={};Ve(Ib,{HAS_EXPIRATION:()=>Gh,LAST_TIMESTAMP_PLACEHOLDER:()=>mc,LOCAL_TIMESTAMP:()=>PV,METADATA:()=>Ec,NO_TIMESTAMP:()=>vh,PENDING_LOCAL_TIME:()=>kh,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>qh,RecordEncoder:()=>xh,TIMESTAMP_ASSIGN_LAST:()=>BV,TIMESTAMP_ASSIGN_NEW:()=>yb,TIMESTAMP_ASSIGN_PREVIOUS:()=>wb,TIMESTAMP_PLACEHOLDER:()=>zl,TIMESTAMP_RECORD_PREVIOUS:()=>Bh,fromResource:()=>Zl,getUpdateRecord:()=>Vh,handleLocalTimeForGets:()=>e_});function xV(){return hc[0]=hc[0]^64,vV.getFloat64(0)}function Zl(e){Fh=!0;try{return e()}finally{Fh=!1}}function e_(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),u=c?.value,_=u?.[Ec];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[Ec]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[Ec];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){if(this.timerTracked||(this.timerTracked=!0,Di.push(new WeakRef(this))),!Fh)try{throw new Error("Read transaction used outside of resource")}catch(u){this.readStack=u.stack}o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Di.length;u++){let _=Di[u].deref();(!_||_.isDone||_.isCommitted)&&Di.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function Vh(e,t,r){return function(n,s,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?Uo=i?.localTime?Bh|wb:vh:Uo=u?i?.localTime?Bh|16384:yb|16384:vh,l>0&&(c|=Gh),Xl=c,Hh=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Uo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(n,s,h);if(u){let T=_?.user?.username;if(E&&(Jl=e.encoder.encode(E)),f&&i?.localTime){let A=i?.localTime,b=r.get(A);if(b){let H=Dt(b).previousLocalTime;return r.put(A,jl(o,t,n,H,T,d,Jl),{ifVersion:p}),S}}r.put(mc,jl(o,t,n,i?.localTime?1:0,T,d,Jl),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var Nb,Ph,zl,mc,qh,PV,Ec,hc,vV,vh,yb,BV,wb,Bh,Gh,kh,HV,Jl,Uo,Xl,Hh,xh,Loe,Fh,Di,Po=Oe(()=>{Nb=require("msgpackr");Li();Ph=B(Y()),zl=new Uint8Array([1,1,1,1,4,64,0,0]),mc=new Uint8Array([1,1,1,1,1,0,0,0]),qh=new Uint8Array([1,1,1,1,3,64,0,0]),PV=Symbol("local-timestamp"),Ec=Symbol("metadata"),hc=new Uint8Array(8),vV=new DataView(hc.buffer,0,8),vh=0,yb=0,BV=1,wb=3,Bh=4,Gh=16,kh=1,Uo=0,Xl=-1,Hh=0,xh=class extends Nb.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(Uo||Xl>=0){let i=0,o=Uo;o&&(i+=8,Uo=0);let c=Xl,u=Hh;c>=0&&(i+=2,Xl=-1,u&&(i+=8,Hh=0));let _=HV=r.call(this,n,s|2048|i);Jl=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(zl[4]=o,zl[5]=o>>8,_.set(zl,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,u;if(i===2){if(t.copy)t.copy(hc,0,c),c+=8;else for(let d=0;d<8;d++)hc[d]=t[c++];u=xV(),i=t[c]}let _;i<32&&(o=i,c+=2,o&Gh&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,s),s-c);return{localTime:u,value:l,[Ec]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(xV,"getTimestamp");Loe=Map.prototype.get;a(Zl,"fromResource");a(e_,"handleLocalTimeForGets");Di=[];setInterval(()=>{for(let e=0;e<Di.length;e++){let t=Di[e].deref();!t||t.isDone||t.isCommitted?Di.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Ph.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Ph.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();a(Vh,"getUpdateRecord")});var t_=g((Uoe,Cb)=>{"use strict";var Yh=Z(),Kh=M(),{RecordEncoder:FV}=(Po(),te(Ib));Yh.initSync();var qV=Yh.get(Kh.CONFIG_PARAMS.STORAGE_COMPRESSION),GV=Yh.get(Kh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,kV=Kh.UPDATES_PROPERTY,$h=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=qV&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=GV&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:FV},this.alwaysLazyProperty=n=>n===kV)}};Cb.exports=$h});var n_=g((voe,Lb)=>{"use strict";var vo=Z(),pc=M();vo.initSync();var VV=vo.get(pc.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||vo.get(pc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||vo.get(pc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Db=vo.get(pc.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),$V=vo.get(pc.CONFIG_PARAMS.STORAGE_NOREADAHEAD),r_=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=VV,this.noFSAccess=!0,Db!==void 0&&(this.overlappingSync=Db),this.noReadAhead=$V}};Lb.exports=r_;r_.MAX_DBS=1e4});var $e=g((Hoe,Gb)=>{"use strict";var Qh=require("lmdb"),Rn=require("fs-extra"),Dr=require("path"),s_=Ir(),Pb=Y(),rr=Or().LMDB_ERRORS_ENUM,i_=bb(),zh=t_(),vb=n_(),Ks=lt(),Mb=M(),{table:YV,resetDatabases:KV}=(be(),te(Fe)),Ub=Z(),An=Ks.INTERNAL_DBIS_NAME,Bb=Ks.DBI_DEFINITION_NAME,WV="data.mdb",QV="lock.mdb",Sc=".mdb",zV="-lock",Wh=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Jr(t,r),this.key_type=this.dbi[Ks.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ks.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new Qh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function o_(e,t){if(e===void 0)throw new Error(rr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(rr.ENV_NAME_REQUIRED)}a(o_,"pathEnvNameValidation");async function Jh(e,t,r=!0){try{await Rn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(rr.INVALID_BASE_PATH):n}try{let n=Dr.join(e,t+Sc);return await Rn.access(n,Rn.constants.R_OK|Rn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Rn.access(Dr.join(e,t,WV),Rn.constants.R_OK|Rn.constants.F_OK),Dr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(rr.INVALID_ENVIRONMENT)}else throw new Error(rr.INVALID_ENVIRONMENT);throw n}}a(Jh,"validateEnvironmentPath");function a_(e,t){if(s_.validateEnv(e),t===void 0)throw new Error(rr.DBI_NAME_REQUIRED)}a(a_,"validateEnvDBIName");async function JV(e,t,r=!1,n=!1){o_(e,t);let s=Dr.basename(e);t=t.toString();let i=Ub.get(Mb.CONFIG_PARAMS.DATABASES);i||Ub.setProperty(Mb.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Jh(e,t,n),Hb(e,t,r)}catch(o){if(o.message===rr.INVALID_ENVIRONMENT){let c=Dr.join(e,t);await Rn.mkdirp(n?c:e);let u=new vb(n?c:c+Sc,!1),_=Qh.open(u);_.dbis=Object.create(null);let l=new zh(!1);_.openDB(An,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Xh(e,t,r);return _[Ks.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(JV,"createEnvironment");async function XV(e,t,r,n=!0){o_(e,t),t=t.toString();let s=Dr.join(e,t);return YV({table:t,database:Dr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(XV,"copyEnvironment");async function Hb(e,t,r=!1){o_(e,t),t=t.toString();let n=Xh(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 Jh(e,t),i=Dr.join(e,t+Sc),o=s!=i,c=new vb(s,o),u=Qh.open(c);u.dbis=Object.create(null);let _=Fb(u);for(let l=0;l<_.length;l++)Jr(u,_[l]);return u[Ks.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=u,u}a(Hb,"openEnvironment");async function jV(e,t,r=!1){o_(e,t),t=t.toString();let n=Dr.join(e,t+Sc),s=await Jh(e,t);if(global.lmdb_map!==void 0){let i=Xh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await xb(o),delete global.lmdb_map[i]}}await Rn.remove(s),await Rn.remove(s===n?s+zV:Dr.join(Dr.dirname(s),QV))}a(jV,"deleteEnvironment");async function xb(e){s_.validateEnv(e);let t=e[Ks.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(xb,"closeEnvironment");function Xh(e,t,r=!1){let s=`${Dr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(Xh,"getCachedEnvironmentName");function ZV(e){s_.validateEnv(e);let t=Object.create(null),r=Jr(e,An);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==An)try{t[n]=Object.assign(new i_,s)}catch{Pb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(ZV,"listDBIDefinitions");function Fb(e){s_.validateEnv(e);let t=[],r=Jr(e,An);for(let{key:n}of r.getRange({start:!1}))n!==An&&t.push(n);return t}a(Fb,"listDBIs");function e$(e,t){let n=Jr(e,An).getEntry(t),s=new i_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{Pb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(e$,"getDBIDefinition");function qb(e,t,r,n=!r){if(a_(e,t),t=t.toString(),t===An)throw new Error(rr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Jr(e,t)}catch(s){if(s.message===rr.DBI_DOES_NOT_EXIST){let i=new zh(r,n===!0),o=e.openDB(t,i),c=new i_(r===!0,n);return o[Bb]=c,Jr(e,An).putSync(t,c),e.dbis[t]=o,o}throw s}}a(qb,"createDBI");function Jr(e,t){if(a_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==An?r=e$(e,t):r=new i_,r===void 0)throw new Error(rr.DBI_DOES_NOT_EXIST);let n;try{let s=new zh(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(rr.DBI_DOES_NOT_EXIST):s}return n[Bb]=r,e.dbis[t]=n,n}a(Jr,"openDBI");function t$(e,t){a_(e,t),t=t.toString();let r=Jr(e,t),n=r.getStats();return r[Ks.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(t$,"statDBI");async function r$(e,t){try{let r=Dr.join(e,t+Sc);return(await Rn.stat(r)).size}catch{throw new Error(rr.INVALID_ENVIRONMENT)}}a(r$,"environmentDataSize");function n$(e,t){if(a_(e,t),t=t.toString(),t===An)throw new Error(rr.CANNOT_DROP_INTERNAL_DBIS_NAME);Jr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Jr(e,An).removeSync(t)}a(n$,"dropDBI");function s$(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Jr(e,i)}catch(o){if(o.message===rr.DBI_DOES_NOT_EXIST)qb(e,i,i!==t,i===t),n=!0;else throw o}}n&&KV()}a(s$,"initializeDBIs");Gb.exports={openDBI:Jr,openEnvironment:Hb,createEnvironment:JV,listDBIs:Fb,listDBIDefinitions:ZV,createDBI:qb,dropDBI:n$,statDBI:t$,deleteEnvironment:jV,initializeDBIs:s$,TransactionCursor:Wh,environmentDataSize:r$,copyEnvironment:XV,closeEnvironment:xb}});var Vb=g((Foe,kb)=>{"use strict";var jh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};kb.exports=jh});var Yb=g((Goe,$b)=>{"use strict";var Zh=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};$b.exports=Zh});var Wb=g((Voe,Kb)=>{"use strict";var em=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};Kb.exports=em});var Bo=g((Qoe,Jb)=>{"use strict";var i$=$e(),o$=Vb(),a$=Yb(),c$=Wb(),qn=Ir(),Tc=Or().LMDB_ERRORS_ENUM,u$=lt(),ds=M(),l$=J(),_$=require("uuid"),Yoe=require("lmdb"),{handleHDBError:d$,hdb_errors:f$}=ee(),{OVERFLOW_MARKER:Koe,MAX_SEARCH_KEY_LENGTH:Woe}=u$,Qb=Z();Qb.initSync();var c_=Qb.get(ds.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),tm=ds.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Mi=ds.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function E$(e,t,r,n,s=qn.getNextMonotonicTime()){im(e,t,r,n),rm(e,t,r);let i=new o$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u];zb(_,!0,s);let l=h$(e,t,r,_),d=_[t];o.push(l),c.push(d)}return nm(o,c,n,i,s)}a(E$,"insertRecords");function h$(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][ds.FUNC_VAL],n[o]=c)}let u=qn.getIndexedValues(c),_=e.dbis[o];if(u){c_&&_.prefetch(u.map(l=>({key:l,value:s})),u_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],s)}}c_&&e.dbis[t].prefetch([s],u_),e.dbis[t].put(s,n,n[Mi])})}a(h$,"insertRecord");function m$(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(m$,"removeSkippedRecords");function zb(e,t,r){let n=r>0;(n||!Number.isInteger(e[Mi]))&&(e[Mi]=r||(r=qn.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[tm]))&&(e[tm]=r||qn.getNextMonotonicTime()):delete e[tm]}a(zb,"setTimestamps");function rm(e,t,r){r.indexOf(ds.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ds.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ds.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ds.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),i$.initializeDBIs(e,t,r)}a(rm,"initializeTransaction");async function p$(e,t,r,n,s=qn.getNextMonotonicTime()){im(e,t,r,n),rm(e,t,r);let i=new a$,o=[],c=[],u=[];for(let _=0;_<n.length;_++){let l=n[_],d=l[t],f;try{f=sm(e,t,l,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return nm(c,u,n,i,s,o)}a(p$,"updateRecords");async function S$(e,t,r,n,s=qn.getNextMonotonicTime()){try{im(e,t,r,n)}catch(u){throw d$(u,u.message,f$.HTTP_STATUS_CODES.BAD_REQUEST)}rm(e,t,r);let i=new c$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u],l;l$.isEmpty(_[t])?(l=_$.v4(),_[t]=l):l=_[t];let d=sm(e,t,_,l,i,!1,s);o.push(d),c.push(l)}return nm(o,c,n,i,s)}a(S$,"upsertRecords");async function nm(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||qn.getNextMonotonicTime(),m$(r,i),n}a(nm,"finalizeWrite");function sm(e,t,r,n,s,i=!1,o){let c=e.dbis[t],u=c.getEntry(n),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(zb(r,!l,o),Number.isInteger(r[Mi])&&_[Mi]>r[Mi])return!1;l&&s.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let T=_[h];if(typeof p=="function"){let b=p([[_]]);Array.isArray(b)&&(p=b[0][ds.FUNC_VAL],r[h]=p)}if(p===T)continue;let A=qn.getIndexedValues(T);if(A){c_&&S.prefetch(A.map(b=>({key:b,value:n})),u_);for(let b=0,H=A.length;b<H;b++)S.remove(A[b],n)}if(A=qn.getIndexedValues(p),A){c_&&S.prefetch(A.map(b=>({key:b,value:n})),u_);for(let b=0,H=A.length;b<H;b++)S.put(A[b],n)}}let E=Object.assign({},_,r);c.put(n,E,E[Mi])},"do_put");return u?d=c.ifVersion(n,u.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:sm(e,t,r,n,s,i,o))}a(sm,"updateUpsertRecord");function T$(e,t,r){if(qn.validateEnv(e),t===void 0)throw new Error(Tc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Tc.WRITE_ATTRIBUTES_REQUIRED):new Error(Tc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(T$,"validateBasic");function im(e,t,r,n){if(T$(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Tc.RECORDS_REQUIRED):new Error(Tc.RECORDS_MUST_BE_ARRAY)}a(im,"validateWrite");function u_(){}a(u_,"noop");Jb.exports={insertRecords:E$,updateRecords:p$,upsertRecords:S$}});var Ui=g((Joe,g$)=>{g$.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},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:"__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:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},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:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},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"}]}}});var kn=g((Xoe,Zb)=>{"use strict";var jb=J(),Xb=M(),Ho=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Gn=require("joi"),Ws={schema_format:{pattern:Ho,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},R$=Gn.alternatives(Gn.string().min(1).max(Ws.schema_length.maximum).pattern(Ho).messages({"string.pattern.base":"{:#label} "+Ws.schema_format.message}),Gn.number(),Gn.array()).required(),A$=Gn.alternatives(Gn.string().min(1).max(Ws.schema_length.maximum).pattern(Ho).messages({"string.pattern.base":"{:#label} "+Ws.schema_format.message}),Gn.number()),O$=Gn.alternatives(Gn.string().min(1).max(Ws.schema_length.maximum).pattern(Ho).messages({"string.pattern.base":"{:#label} "+Ws.schema_format.message}),Gn.number()).required();function b$(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Ws.schema_length.maximum?`'${e}' maximum of 250 characters`:Ho.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(b$,"checkValidTable");function N$(e,t){return jb.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(N$,"validateSchemaExists");function y$(e,t){let r=t.state.ancestors[0].schema;return jb.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(y$,"validateTableExists");function w$(e,t){return e.toLowerCase()===Xb.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Xb.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(w$,"validateSchemaName");Zb.exports={common_validators:Ws,schema_regex:Ho,hdb_schema_table:R$,validateSchemaExists:N$,validateTableExists:y$,validateSchemaName:w$,checkValidTable:b$,hdb_database:A$,hdb_table:O$}});var l_=g((Zoe,eN)=>{var{common_validators:Vn}=kn(),Rc=Xe(),gc="is required",_t={database:{presence:!1,format:Vn.schema_format,length:Vn.schema_length},schema:{presence:!1,format:Vn.schema_format,length:Vn.schema_length},table:{presence:!0,format:Vn.schema_format,length:Vn.schema_length},attribute:{presence:!0,format:Vn.schema_format,length:Vn.schema_length},hash_attribute:{presence:!0,format:Vn.schema_format,length:Vn.schema_length}};function Ac(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(Ac,"makeAttributesStrings");function I$(e){return e=Ac(e),_t.table.presence=!1,_t.attribute.presence=!1,_t.hash_attribute.presence=!1,Rc.validateObject(e,_t)}a(I$,"schema_object");function C$(e){return e=Ac(e),_t.table.presence={message:gc},_t.attribute.presence=!1,_t.hash_attribute.presence=!1,Rc.validateObject(e,_t)}a(C$,"table_object");function D$(e){return e=Ac(e),_t.table.presence={message:gc},_t.attribute.presence=!1,Rc.validateObject(e,_t)}a(D$,"create_table_object");function L$(e){return e=Ac(e),_t.table.presence={message:gc},_t.attribute.presence={message:gc},_t.hash_attribute.presence=!1,Rc.validateObject(e,_t)}a(L$,"attribute_object");function M$(e){return e=Ac(e),_t.table.presence={message:gc},_t.attribute.presence=!1,_t.hash_attribute.presence=!1,Rc.validateObject(e,_t)}a(M$,"describe_table");function U$(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(U$,"validateTableResidence");eN.exports={schema_object:I$,create_table_object:D$,table_object:C$,attribute_object:L$,describe_table:M$,validateTableResidence:U$}});var rN=g((tae,tN)=>{"use strict";var P$=require("uuid"),om=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||P$.v4(),this.schema_table=`${this.schema}.${this.table}`}};tN.exports=om});var __=g((nae,nN)=>{"use strict";var v$=rN(),am=class extends v${static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};nN.exports=am});var iN=g((iae,sN)=>{"use strict";sN.exports=H$;var B$="inserted";function H$(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===B$?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(H$,"returnObject")});var d_=g((aae,lN)=>{"use strict";var x$=M(),cm=$e(),F$=Bo(),{getSystemSchemaPath:q$,getSchemaPath:G$}=Ke(),k$=Ui(),V$=l_(),$$=__(),Y$=iN(),{handleHDBError:oN,hdb_errors:cN}=ee(),aN=J(),{HTTP_STATUS_CODES:K$}=cN,um=k$.hdb_attribute,uN=[];for(let e=0;e<um.attributes.length;e++)uN.push(um.attributes[e].attribute);var W$="inserted";lN.exports=Q$;async function Q$(e){let t=V$.attribute_object(e);if(t)throw oN(new Error,t.message,cN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&aN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw oN(new Error,r,K$.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=aN.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 $$(e.schema,e.table,e.attribute,e.id);try{let i=await cm.openEnvironment(G$(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);cm.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await cm.openEnvironment(q$(),x$.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await F$.insertRecords(o,um.hash_attribute,uN,[s]);return Y$(W$,c,{records:[s]},u)}catch(i){throw i}}a(Q$,"lmdbCreateAttribute")});var _m=g((uae,dN)=>{var{hdb_table:z$,hdb_database:_N}=kn(),J$=Xe(),lm=require("joi"),X$={undefined:"undefined",null:"null"},j$=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||X$[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),Z$=lm.object({database:_N,schema:_N,table:z$,records:lm.array().items(lm.object().custom(j$)).required()});dN.exports=function(e){return J$.validateBySchema(e,Z$)}});var Oc=g((dae,EN)=>{"use strict";var Es=J(),fN=Y(),_ae=_m(),{getDatabases:e1}=(be(),te(Fe)),{ClientError:Pi}=ee();EN.exports=t1;function t1(e){if(Es.isEmpty(e))throw new Pi("invalid update parameters defined.");if(Es.isEmptyOrZeroLength(e.schema))throw new Pi("invalid schema specified.");if(Es.isEmptyOrZeroLength(e.table))throw new Pi("invalid table specified.");if(!Array.isArray(e.records))throw new Pi("records must be an array");let t=e1()[e.schema]?.[e.table];if(Es.isEmpty(t))throw new Pi(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&Es.isEmptyOrZeroLength(o[r]))throw fN.error("a valid hash attribute must be provided with update record:",o),new Pi("a valid hash attribute must be provided with update record, check log for more info");if(!Es.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw fN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Pi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Es.isEmpty(o[r])&&o[r]!==""&&n.has(Es.autoCast(o[r]))&&(o.skip=!0),n.add(Es.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(t1,"insertUpdateValidate")});var bc=g((Eae,hN)=>{"use strict";var r1=M().OPERATIONS_ENUM,dm=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=r1.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};hN.exports=dm});var Ic=g((pae,mN)=>{"use strict";var mae=bc(),f_=M(),Em=J(),fm=Y(),n1=require("uuid"),{handleHDBError:Nc,hdb_errors:s1}=ee(),{HDB_ERROR_MSGS:yc,HTTP_STATUS_CODES:wc}=s1;mN.exports=i1;function i1(e,t,r){for(let s=0;s<t.length;s++)o1(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];a1(i,r,e.operation)}}a(i1,"processRows");function o1(e){if(Buffer.byteLength(String(e))>f_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Nc(new Error,yc.ATTR_NAME_LENGTH_ERR(e),wc.BAD_REQUEST,void 0,void 0,!0);if(Em.isEmptyOrZeroLength(e)||Em.isEmpty(e.trim()))throw Nc(new Error,yc.ATTR_NAME_NULLISH_ERR,wc.BAD_REQUEST,void 0,void 0,!0)}a(o1,"validateAttribute");function a1(e,t,r){if(!e.hasOwnProperty(t)||Em.isEmptyOrZeroLength(e[t])){if(r===f_.OPERATIONS_ENUM.INSERT||r===f_.OPERATIONS_ENUM.UPSERT){e[t]=n1.v4();return}throw fm.error("Update transaction aborted due to record with no hash value:",e),Nc(new Error,yc.RECORD_MISSING_HASH_ERR,wc.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>f_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw fm.error(e),Nc(new Error,yc.HASH_VAL_LENGTH_ERR,wc.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw fm.error(e),Nc(new Error,yc.INVALID_FORWARD_SLASH_IN_HASH_ERR,wc.BAD_REQUEST,void 0,void 0,!0)}a(a1,"validateHash")});var SN=g((Tae,pN)=>{"use strict";var hm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};pN.exports=hm});var RN=g((Rae,gN)=>{"use strict";var mm=$e(),c1=Y(),TN=Or().LMDB_ERRORS_ENUM;gN.exports=u1;async function u1(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await mm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==TN.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await mm.closeEnvironment(global.lmdb_map[n]),await mm.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==TN.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){c1.error(t)}}a(u1,"cleanLMDBMap")});var hs=g((Oae,NN)=>{"use strict";var Cc=require("crypto"),l1=Z(),{CONFIG_PARAMS:_1}=M(),ON="aes-256-cbc",d1=32,f1=16,pm=64,bN=32,E1=pm+bN,AN=new Map;NN.exports={encrypt:h1,decrypt:m1,createNatsTableStreamName:p1};function h1(e){let t=Cc.randomBytes(d1),r=Cc.randomBytes(f1),n=Cc.createCipheriv(ON,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(h1,"encrypt");function m1(e){let t=e.substr(0,pm),r=e.substr(pm,bN),n=e.substr(E1,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Cc.createDecipheriv(ON,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(m1,"decrypt");function p1(e,t){let r=l1.get(_1.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=AN.get(r);return n||(n=Cc.createHash("md5").update(r).digest("hex"),AN.set(r,n)),n}a(p1,"createNatsTableStreamName")});var vi=g((yae,wN)=>{"use strict";var Nae=Xr(),E_=Y(),yN=l_(),S1=hs(),h_=J(),{handleHDBError:m_,hdb_errors:T1}=ee(),{HDB_ERROR_MSGS:p_,HTTP_STATUS_CODES:Sm}=T1,g1=Z();g1.initSync();var{getDatabases:Tm}=(be(),te(Fe));wN.exports={describeAll:R1,describeTable:S_,describeSchema:A1};async function R1(e){try{let t=h_.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=Tm(),i={},o={},c=[],u=e?.exact_count;for(let l in s){i[l]=!0,!t&&!n&&(o[l]=e.hdb_user.role.permission[l].describe);let d=s[l];for(let f in d)try{let E;if(t||n)E=await S_({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await S_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){E_.error(E)}}let _={};for(let l in c)t||n?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||n?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return E_.error("Got an error in describeAll"),E_.error(t),m_(new Error,p_.DESCRIBE_ALL_ERR)}}a(R1,"describeAll");async function S_(e,t){h_.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=yN.describe_table(e);if(i)throw i;let c=Tm()[r];if(!c)throw m_(new Error,p_.SCHEMA_NOT_FOUND(e.schema),Sm.NOT_FOUND);let u=c[n];if(!u)throw m_(new Error,p_.TABLE_NOT_FOUND(e.schema,e.table),Sm.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(s){let f={};s.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=S1.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){E_.warn(`unable to stat table dbi due to ${f}`)}return d}a(S_,"descTable");async function A1(e){h_.transformReq(e);let t=yN.schema_object(e);if(t)throw t;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=Tm()[n];if(!i)throw m_(new Error,p_.SCHEMA_NOT_FOUND(e.schema),Sm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),h_.isEmpty(u)||u.describe){let _=await S_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(A1,"describeSchema")});var Qs=g((Dae,MN)=>{var O1=Ui(),{callbackify:CN,promisify:b1}=require("util"),{getDatabases:DN}=(be(),te(Fe));MN.exports={setSchemaDataToGlobal:IN,getTableSchema:N1,getSystemSchema:y1,setSchemaDataToGlobalAsync:b1(IN)};var LN=vi(),Iae=CN(LN.describeAll),Cae=CN(LN.describeTable);function IN(e){global.hdb_schema=DN(),e&&e()}a(IN,"setSchemaDataToGlobal");function N1(e,t,r){let n=DN()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(N1,"getTableSchema");function y1(){return O1}a(y1,"getSystemSchema")});var jr=g((Mae,BN)=>{"use strict";var g_=_m(),Ht=J(),w1=require("util"),R_=On(),I1=Qs(),UN=Y(),{handleHDBError:Bi,hdb_errors:C1}=ee(),{HTTP_STATUS_CODES:Hi}=C1,D1=w1.promisify(I1.getTableSchema),L1="updated",PN="inserted",vN="upserted";BN.exports={insert:U1,update:P1,upsert:v1,validation:M1,flush:B1};async function M1(e){if(Ht.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ht.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Ht.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await D1(e.schema,e.table),r=g_(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Ht.isEmptyOrZeroLength(c[n]))throw UN.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(!Ht.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw UN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Ht.isEmpty(c[n])&&c[n]!==""&&s.has(Ht.autoCast(c[n]))&&(c.skip=!0),s.add(Ht.autoCast(c[n]));for(let u in c)i[u]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(M1,"validation");async function U1(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=g_(e);if(t)throw Bi(new Error,t.message,Hi.BAD_REQUEST);Ht.transformReq(e);let r=Ht.checkSchemaTableExist(e.schema,e.table);if(r)throw Bi(new Error,r,Hi.BAD_REQUEST);let n=await R_.createRecords(e);return T_(PN,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(U1,"insertData");async function P1(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=g_(e);if(t)throw Bi(new Error,t.message,Hi.BAD_REQUEST);Ht.transformReq(e);let r=Ht.checkSchemaTableExist(e.schema,e.table);if(r)throw Bi(new Error,r,Hi.BAD_REQUEST);let n=await R_.updateRecords(e);return Ht.isEmpty(n.existing_rows)?T_(L1,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):T_(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(P1,"updateData");async function v1(e){if(e.operation!=="upsert")throw Bi(new Error,"invalid operation, must be upsert",Hi.INTERNAL_SERVER_ERROR);let t=g_(e);if(t)throw Bi(new Error,t.message,Hi.BAD_REQUEST);Ht.transformReq(e);let r=Ht.checkSchemaTableExist(e.schema,e.table);if(r)throw Bi(new Error,r,Hi.BAD_REQUEST);let n=await R_.upsertRecords(e);return T_(vN,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(v1,"upsertData");function T_(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===PN?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===vN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(T_,"returnObject");function B1(e){return Ht.transformReq(e),R_.flush(e.schema,e.table)}a(B1,"flush")});var Rm=g((Pae,FN)=>{var H1=Xe(),gm=require("joi"),{hdb_table:x1,hdb_database:HN}=kn(),xN={schema:HN,database:HN,table:x1},F1={date:gm.date().iso().required()},q1={timestamp:gm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};FN.exports=function(e,t){let r=t==="timestamp"?{...xN,...q1}:{...xN,...F1},n=gm.object(r);return H1.validateBySchema(e,n)}});var kN=g((vae,GN)=>{var G1=Xe(),Am=require("joi"),{hdb_table:k1,hdb_database:qN}=kn(),V1=Am.object({schema:qN,database:qN,table:k1,hash_values:Am.array().required(),ids:Am.array()});GN.exports=function(e){return G1.validateBySchema(e,V1)}});var $N=g((Bae,VN)=>{"use strict";var Om=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},bm=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},Nm=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};VN.exports={InsertObject:Om,NoSQLSeachObject:bm,DeleteResponseObject:Nm}});var qi=g((xae,zN)=>{"use strict";var KN=Rm(),$1=kN(),xi=J(),YN=require("moment"),WN=Y(),{promisify:Y1,callbackify:K1}=require("util"),Fi=M(),W1=Qs(),ym=Y1(W1.getTableSchema),wm=On(),{DeleteResponseObject:Q1}=$N(),{handleHDBError:zs,hdb_errors:z1}=ee(),{HDB_ERROR_MSGS:A_,HTTP_STATUS_CODES:Js}=z1,J1="records successfully deleted",X1=K1(QN);zN.exports={delete:X1,deleteRecord:QN,deleteFilesBefore:j1,deleteAuditLogsBefore:Z1};async function j1(e){let t=KN(e,"date");if(t)throw zs(t,t.message,Js.BAD_REQUEST,void 0,void 0,!0);if(xi.transformReq(e),!YN(e.date,YN.ISO_8601).isValid())throw zs(new Error,A_.INVALID_DATE,Js.BAD_REQUEST,Fi.LOG_LEVELS.ERROR,A_.INVALID_DATE,!0);let n=xi.checkSchemaTableExist(e.schema,e.table);if(n)throw zs(new Error,n,Js.NOT_FOUND,Fi.LOG_LEVELS.ERROR,n,!0);let s=await wm.deleteRecordsBefore(e);if(await ym(e.schema,e.table),WN.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(j1,"deleteFilesBefore");async function Z1(e){let t=KN(e,"timestamp");if(t)throw zs(t,t.message,Js.BAD_REQUEST,void 0,void 0,!0);if(xi.transformReq(e),isNaN(e.timestamp))throw zs(new Error,A_.INVALID_VALUE("Timestamp"),Js.BAD_REQUEST,Fi.LOG_LEVELS.ERROR,A_.INVALID_VALUE("Timestamp"),!0);let r=xi.checkSchemaTableExist(e.schema,e.table);if(r)throw zs(new Error,r,Js.NOT_FOUND,Fi.LOG_LEVELS.ERROR,r,!0);let n=await wm.deleteAuditLogsBefore(e);return await ym(e.schema,e.table),WN.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(Z1,"deleteAuditLogsBefore");async function QN(e){e.ids&&(e.hash_values=e.ids);let t=$1(e);if(t)throw zs(t,t.message,Js.BAD_REQUEST,void 0,void 0,!0);xi.transformReq(e);let r=xi.checkSchemaTableExist(e.schema,e.table);if(r)throw zs(new Error,r,Js.NOT_FOUND,Fi.LOG_LEVELS.ERROR,r,!0);try{await ym(e.schema,e.table);let n=await wm.deleteRecords(e);return xi.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${J1}`),n}catch(n){if(n.message===Fi.SEARCH_NOT_FOUND_MESSAGE){let s=new Q1;return s.message=Fi.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(QN,"deleteRecord")});var O_=g((qae,jN)=>{var eY=require("crypto"),JN=9;function tY(e){let t=nY(JN),r=XN(e+t);return t+r}a(tY,"createHash");function rY(e,t){let r=e?.substr(0,JN),n=r+XN(t+r);return e===n}a(rY,"validateHash");function nY(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(nY,"generateSalt");function XN(e){return eY.createHash("md5").update(e).digest("hex")}a(XN,"md5");jN.exports={hash:tY,validate:rY}});var ey=g((kae,ZN)=>{var Im=Xe(),$t={username:{presence:!0,format:"[\\w\\-\\_]+",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 sY(e){return $t.password.presence=!0,$t.username.presence=!0,$t.role.presence=!0,$t.active.presence=!0,Im.validateObject(e,$t)}a(sY,"addUserValidation");function iY(e){return $t.password.presence=!1,$t.username.presence=!0,$t.role.presence=!1,$t.active.presence=!1,Im.validateObject(e,$t)}a(iY,"alterUserValidation");function oY(e){return $t.password.presence=!1,$t.username.presence=!0,$t.role.presence=!1,$t.active.presence=!1,Im.validateObject(e,$t)}a(oY,"dropUserValidation");ZN.exports={addUserValidation:sY,alterUserValidation:iY,dropUserValidation:oY}});var tt=g((Yae,ry)=>{"use strict";var{platform:$ae}=require("os"),aY="nats-server.zip",Cm="nats-server",cY=process.platform==="win32"?`${Cm}.exe`:Cm,Dm="HDB",uY=/^[^\s.,*>]+$/,ty="__request__",lY=a(e=>`${e}.${ty}`,"REQUEST_SUBJECT"),_Y={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},dY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},fY={HUB:"hub.pid",LEAF:"leaf.pid"},EY={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},hY={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Dm,deliver_subject:"__HDB__.WORKQUEUE"},mY={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Dm,deliver_subject:"HDB.SCHEMAQUEUE"},pY={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Dm,deliver_subject:"HDB.USERQUEUE"},SY={SUCCESS:"success",ERROR:"error"},TY={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},gY={TXN:"txn",MSGID:"msgid"},xo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},RY={[xo.ERR]:1,[xo.WRN]:2,[xo.INF]:3,[xo.DBG]:4,[xo.TRC]:5},AY={debug:"-D",trace:"-DVV"};ry.exports={NATS_SERVER_ZIP:aY,NATS_SERVER_NAME:Cm,NATS_BINARY_NAME:cY,PID_FILES:fY,NATS_CONFIG_FILES:dY,SERVER_SUFFIX:EY,WORK_QUEUE_CONSUMER_NAMES:hY,SCHEMA_QUEUE_CONSUMER_NAMES:mY,USER_QUEUE_CONSUMER_NAMES:pY,NATS_TERM_CONSTRAINTS_RX:uY,REQUEST_SUFFIX:ty,UPDATE_REMOTE_RESPONSE_STATUSES:SY,CLUSTER_STATUS_STATUSES:TY,REQUEST_SUBJECT:lY,SUBJECT_PREFIXES:gY,MSG_HEADERS:_Y,LOG_LEVELS:xo,LOG_LEVEL_FLAGS:AY,LOG_LEVEL_HIERARCHY:RY}});var sy=g((Wae,ny)=>{"use strict";var b_=M(),N_=class{static{a(this,"BaseLicense")}constructor(t=0,r=b_.RAM_ALLOCATION_ENUM.DEFAULT,n=b_.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},Lm=class extends N_{static{a(this,"ExtendedLicense")}constructor(t=0,r=b_.RAM_ALLOCATION_ENUM.DEFAULT,n=b_.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};ny.exports={BaseLicense:N_,ExtendedLicense:Lm}});var Gi=g((zae,ly)=>{"use strict";var qo=require("fs-extra"),oy=O_(),ay=require("crypto"),OY=require("moment"),bY=require("uuid").v4,Yt=Y(),Um=require("path"),NY=J(),Xs=M(),{totalmem:iy}=require("os"),yY=sy().ExtendedLicense,Fo="invalid license key format",wY="061183",IY="mofi25",CY="aes-256-cbc",DY=16,LY=32,cy=Z();cy.initSync();var Mm;ly.exports={validateLicense:uy,generateFingerPrint:UY,licenseSearch:Bm,getLicense:BY,checkMemoryLimit:HY};function Pm(){return Um.join(cy.getHdbBasePath(),Xs.LICENSE_KEY_DIR_NAME,Xs.LICENSE_FILE_NAME)}a(Pm,"getLicenseDirPath");function MY(){let e=Pm();return Um.join(e,Xs.LICENSE_FILE_NAME)}a(MY,"getLicenseFilePath");function vm(){let e=Pm();return Um.join(e,Xs.REG_KEY_FILE_NAME)}a(vm,"getFingerPrintFilePath");async function UY(){let e=vm();try{return await qo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await PY();throw Yt.error(`Error writing fingerprint file to ${e}`),Yt.error(t),new Error("There was an error generating the fingerprint")}}a(UY,"generateFingerPrint");async function PY(){let e=bY(),t=oy.hash(e),r=vm();try{await qo.mkdirp(Pm()),await qo.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Yt.error(`Error writing fingerprint file to ${r}`),Yt.error(n),new Error("There was an error generating the fingerprint")}return t}a(PY,"writeFingerprint");function uy(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Xs.RAM_ALLOCATION_ENUM.DEFAULT,version:Xs.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Yt.error("empty license key passed to validate."),r;let n=vm(),s=!1;try{s=qo.statSync(n)}catch(i){Yt.error(i)}if(s){let i;try{i=qo.readFileSync(n,"utf8")}catch{Yt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(IY),c=o[1];c=Buffer.concat([Buffer.from(c)],DY);let u=Buffer.concat([Buffer.from(i)],LY),_=ay.createDecipheriv(CY,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=vY(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Fo),Yt.error(Fo),new Error(Fo)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Fo),Yt.error(Fo),new Error(Fo)}else r.exp_date=l;r.exp_date<OY().valueOf()&&(r.valid_date=!1),oy.validate(o[1],`${wY}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Yt.error("Invalid licence"),r}a(uy,"validateLicense");function vY(e,t){try{let r=ay.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Yt.warn("Check old license failed")}}a(vY,"checkOldLicense");function Bm(){let e=new yY,t=[];try{t=qo.readFileSync(MY(),"utf-8").split(Xs.NEW_LINE)}catch(r){r.code==="ENOENT"?Yt.info("no license file found"):Yt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(NY.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=uy(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){Yt.error("There was an error parsing the license string."),Yt.error(s),e.ram_allocation=Xs.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Mm=e,e}a(Bm,"licenseSearch");async function BY(){return Mm||await Bm(),Mm}a(BY,"getLicense");function HY(){let e=Bm().ram_allocation,t=process.constrainedMemory?.()||iy();if(t=Math.round(Math.min(t,iy())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(HY,"checkMemoryLimit")});var Zr=g((ece,yy)=>{"use strict";var Ey="username is required",hy="nothing to update, must supply active, role or password to update",my="password cannot be an empty string",py="If role is specified, it cannot be empty.",Sy="active must be true or false";yy.exports={addUser:KY,alterUser:WY,dropUser:zY,getSuperUser:ZY,userInfo:JY,listUsers:w_,listUsersExternal:XY,setUsersToGlobal:ko,findAndValidateUser:by,getClusterUser:eK,USERNAME_REQUIRED:Ey,ALTERUSER_NOTHING_TO_UPDATE:hy,EMPTY_PASSWORD:my,EMPTY_ROLE:py,ACTIVE_BOOLEAN:Sy};var Ty=jr(),xY=qi(),Fm=O_(),gy=ey(),Ry=Xr(),qm=ms(),Lr=J(),Ay=require("validate.js"),Ae=Y(),{promisify:FY}=require("util"),Gm=hs(),_y=M(),dy=tt(),qY=wr(),Xae=Z(),jae=Gi(),GY=Ui(),{table:Zae}=(be(),te(Fe)),{handleHDBError:$n,hdb_errors:kY}=ee(),{HTTP_STATUS_CODES:Yn,AUTHENTICATION_ERROR_MSGS:Hm,HDB_ERROR_MSGS:Go}=kY,{UserEventMsg:km}=bn(),xm=require("lodash"),{server:Vm}=(Zt(),te(yi)),VY=Y();Vm.getUser=(e,t)=>by(e,t,t!=null);var Oy={username:!0,active:!0,role:!0,password:!0},fy=new Map,y_=Ry.searchByValue,$Y=Ry.searchByHash,YY=FY(xY.delete);async function KY(e){let t=Ay.cleanAttributes(e,Oy),r=gy.addUserValidation(t);if(r)throw $n(new Error,r.message,Yn.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await y_(n),s=s&&Array.from(s)}catch(u){throw Ae.error("There was an error searching for a role in add user"),Ae.error(u),u}if(!s||s.length<1)throw $n(new Error,Go.ROLE_NAME_NOT_FOUND(t.role),Yn.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw $n(new Error,Go.DUP_ROLES_FOUND(t.role),Yn.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Gm.encrypt(t.password)),t.password=Fm.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Ty.insert(i)}catch(u){throw Ae.error("There was an error searching for a user."),Ae.error(u),u}Ae.debug(o);try{await ko()}catch(u){throw Ae.error("Got an error setting users to global"),Ae.error(u),u}if(o.skipped_hashes.length===1)throw $n(new Error,Go.USER_ALREADY_EXISTS(t.username),Yn.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],qm.signalUserChange(new km(process.pid)),`${c.username} successfully added`}a(KY,"addUser");async function WY(e){let t=Ay.cleanAttributes(e,Oy);if(Lr.isEmptyOrZeroLength(t.username))throw new Error(Ey);if(Lr.isEmptyOrZeroLength(t.password)&&Lr.isEmptyOrZeroLength(t.role)&&Lr.isEmptyOrZeroLength(t.active))throw new Error(hy);if(!Lr.isEmpty(t.password)&&Lr.isEmptyOrZeroLength(t.password.trim()))throw new Error(my);if(!Lr.isEmpty(t.active)&&!Lr.isBoolean(t.active))throw new Error(Sy);let r=QY(t.username);if(!Lr.isEmpty(t.password)&&!Lr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Gm.encrypt(t.password)),t.password=Fm.hash(t.password)),t.role==="")throw new Error(py);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await y_(i)||[])}catch(c){throw Ae.error("Got an error searching for a role."),Ae.error(c),c}if(!o||o.length===0){let c=Go.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ae.error(c),$n(new Error,c,Yn.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Go.ALTER_USER_DUP_ROLES(t.role);throw Ae.error(c),$n(new Error,c,Yn.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await Ty.update(n)}catch(i){throw Ae.error("Error during update."),Ae.error(i),i}try{await ko()}catch(i){throw Ae.error("Got an error setting users to global"),Ae.error(i),i}return qm.signalUserChange(new km(process.pid)),s}a(WY,"alterUser");function QY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(QY,"isClusterUser");async function zY(e){try{let t=gy.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Lr.isEmpty(global.hdb_users.get(e.username)))throw $n(new Error,Go.USER_NOT_EXIST(e.username),Yn.NOT_FOUND,void 0,void 0,!0);let n;try{n=await YY(r)}catch(s){throw Ae.error("Got an error deleting a user."),Ae.error(s),s}Ae.debug(n);try{await ko()}catch(s){throw Ae.error("Got an error setting users to global."),Ae.error(s),s}return qm.signalUserChange(new km(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(zY,"dropUser");async function JY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=xm.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await $Y(r)}catch(s){throw Ae.error("Got an error searching for a role."),Ae.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ae.error(r),r}return t}a(JY,"userInfo");async function XY(){let e;try{e=await w_()}catch(t){throw Ae.error("Got an error listing users."),Ae.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(XY,"listUsersExternal");async function w_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await y_(e)}catch(o){throw Ae.error("Got an error searching for roles."),Ae.error(o),o}let r={};for(let o of t)r[o.id]=xm.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await y_(n)}catch(o){throw Ae.error("Got an error searching for users."),Ae.error(o),o}let i=new Map;for(let o of s)o=xm.cloneDeep(o),o.role=r[o.role],jY(o.role),i.set(o.username,o);return i}catch(e){throw Ae.error("got an error listing users"),Ae.error(e),Lr.errorizeMessage(e)}return null}a(w_,"listUsers");function jY(e){try{if(!e){Ae.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(GY)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ae.error("Got an error trying to set system permissions."),Ae.error(t)}}a(jY,"appendSystemTablesToRole");async function ko(){try{let e=await w_();global.hdb_users=e}catch(e){throw Ae.error(e),e}}a(ko,"setUsersToGlobal");async function by(e,t,r=!0){global.hdb_users||await ko();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw $n(new Error,Hm.GENERIC_AUTH_FAIL,Yn.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw $n(new Error,Hm.USER_INACTIVE,Yn.UNAUTHORIZED,void 0,void 0,!0);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(fy.get(t)===n.password)return s;if(Fm.validate(n.password,t))fy.set(t,n.password);else throw $n(new Error,Hm.GENERIC_AUTH_FAIL,Yn.UNAUTHORIZED,void 0,void 0,!0)}return s}a(by,"findAndValidateUser");async function ZY(){global.hdb_users||await ko();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(ZY,"getSuperUser");async function eK(){let e=await w_(),t=qY.getConfigFromFile(_y.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Lr.isEmpty(r)&&r?.role?.role===_y.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Gm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+dy.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+dy.SERVER_SUFFIX.ADMIN,r}a(eK,"getClusterUser");var Ny=[];Vm.invalidateUser=function(e){for(let t of Ny)try{t(e)}catch(r){VY.error("Error invalidating user",r)}};Vm.onInvalidatedUser=function(e){Ny.push(e)}});var Lc=g((sce,Dy)=>{"use strict";var ki=Y(),Mr=M(),tK=RN(),rce=Qs(),nce=vi(),rK=Zr(),{validateEvent:wy}=bn(),Dc=On(),nK=require("process"),{resetDatabases:sK}=(be(),te(Fe)),iK={[Mr.ITC_EVENT_TYPES.SCHEMA]:oK,[Mr.ITC_EVENT_TYPES.USER]:Cy};async function oK(e){let t=wy(e);if(t){ki.error(t);return}ki.trace("ITC schemaHandler received schema event:",e),await tK(e.message),await aK(e.message)}a(oK,"schemaHandler");async function aK(e){try{Dc.resetReadTxn(Mr.SYSTEM_SCHEMA_NAME,Mr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Dc.resetReadTxn(Mr.SYSTEM_SCHEMA_NAME,Mr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Dc.resetReadTxn(Mr.SYSTEM_SCHEMA_NAME,Mr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=sK();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ki.error(t)}}a(aK,"syncSchemaMetadata");var Iy=[];async function Cy(e){try{try{Dc.resetReadTxn(Mr.SYSTEM_SCHEMA_NAME,Mr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Dc.resetReadTxn(Mr.SYSTEM_SCHEMA_NAME,Mr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ki.warn(r)}let t=wy(e);if(t){ki.error(t);return}ki.trace(`ITC userHandler ${Mr.HDB_ITC_CLIENT_PREFIX}${nK.pid} received user event:`,e),await rK.setUsersToGlobal();for(let r of Iy)r()}catch(t){ki.error(t)}}a(Cy,"userHandler");Cy.addListener=function(e){Iy.push(e)};Dy.exports=iK});var bn=g((lce,My)=>{"use strict";var oce=Y(),$m=J(),cK=M(),{ITC_ERRORS:Mc}=Or(),{parentPort:ace,threadId:uK,isMainThread:lK,workerData:cce}=require("worker_threads"),{onMessageFromWorkers:_K,broadcast:uce,broadcastWithAcknowledgement:dK}=Ze();My.exports={sendItcEvent:fK,validateEvent:Ly,SchemaEventMsg:EK,UserEventMsg:hK};var I_;_K(async(e,t)=>{I_=I_||Lc(),Ly(e),I_[e.type]&&await I_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function fK(e){return!lK&&e.message&&(e.message.originator=uK),dK(e)}a(fK,"sendItcEvent");function Ly(e){if(typeof e!="object")return Mc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||$m.isEmpty(e.type))return Mc.MISSING_TYPE;if(!e.hasOwnProperty("message")||$m.isEmpty(e.message))return Mc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||$m.isEmpty(e.message.originator))return Mc.MISSING_ORIGIN;if(cK.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Mc.INVALID_EVENT(e.type)}a(Ly,"validateEvent");function EK(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(EK,"SchemaEventMsg");function hK(e){this.originator=e}a(hK,"UserEventMsg")});var ms=g((fce,By)=>{"use strict";var Uy=M(),dce=J(),C_=Y(),Py=SN(),Vo,{sendItcEvent:vy}=bn();function mK(e){try{C_.trace("signalSchemaChange called with message:",e),Vo=Vo||Lc();let t=new Py(Uy.ITC_EVENT_TYPES.SCHEMA,e);return Vo.schema(t),vy(t)}catch(t){C_.error(t)}}a(mK,"signalSchemaChange");function pK(e){try{C_.trace("signalUserChange called with message:",e),Vo=Vo||Lc();let t=new Py(Uy.ITC_EVENT_TYPES.USER,e);return Vo.user(t),vy(t)}catch(t){C_.error(t)}}a(pK,"signalUserChange");By.exports={signalSchemaChange:mK,signalUserChange:pK}});var D_=g((hce,xy)=>{"use strict";var Hy=J(),SK=M(),TK=Y(),gK=d_(),RK=__(),AK=ms(),{SchemaEventMsg:OK}=bn(),bK="already exists in";xy.exports=NK;async function NK(e,t,r){if(Hy.isEmptyOrZeroLength(r))return r;let n=[];Hy.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 yK(e,t.schema,t.name,i)})),s}a(NK,"lmdbCheckForNewAttributes");async function yK(e,t,r,n){let s=new RK(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await wK(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(bK))TK.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(yK,"createNewAttribute");async function wK(e){let t;return t=await gK(e),AK.signalSchemaChange(new OK(process.pid,SK.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(wK,"createAttribute")});var $o=g((pce,Fy)=>{"use strict";var Ym=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};Fy.exports=Ym});var Gy=g((Tce,qy)=>{"use strict";var IK=$o(),CK=M().OPERATIONS_ENUM,Km=class extends IK{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(CK.INSERT,r,n,s,i),this.records=t}};qy.exports=Km});var Vy=g((Rce,ky)=>{"use strict";var DK=$o(),LK=M().OPERATIONS_ENUM,Wm=class extends DK{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(LK.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};ky.exports=Wm});var Yy=g((Oce,$y)=>{"use strict";var MK=$o(),UK=M().OPERATIONS_ENUM,Qm=class extends MK{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(UK.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};$y.exports=Qm});var Wy=g((Nce,Ky)=>{"use strict";var PK=$o(),vK=M().OPERATIONS_ENUM,zm=class extends PK{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(vK.DELETE,n,s,t,i),this.original_records=r}};Ky.exports=zm});var Uc=g((Ice,Xy)=>{"use strict";var wce=require("path"),Qy=$e(),BK=Gy(),HK=Vy(),xK=Yy(),FK=Wy(),Yo=lt(),zy=J(),{CONFIG_PARAMS:qK}=M(),Jy=Z();Jy.initSync();var L_=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:GK}=Ke();Xy.exports=kK;async function kK(e,t){if(Jy.get(qK.LOGGING_AUDITLOG)===!1)return;let r=GK(e.schema,e.table),n=await Qy.openEnvironment(r,e.table,!0),s=VK(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){Qy.initializeDBIs(n,Yo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Yo.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Yo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Yo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),zy.isEmpty(s.user_name)||n.dbis[Yo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Yo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(kK,"writeTransaction");function VK(e,t){let r=zy.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===L_.INSERT)return new BK(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===L_.UPDATE)return new HK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===L_.UPSERT)return new xK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===L_.DELETE)return new FK(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(VK,"createTransactionObject")});var Jm=g((Lce,jy)=>{"use strict";var $K=Oc(),Dce=bc(),Pc=M(),YK=Ic(),KK=Bo().insertRecords,WK=$e(),QK=Y(),zK=D_(),{getSchemaPath:JK}=Ke(),XK=Uc();jy.exports=jK;async function jK(e){try{let{schema_table:t,attributes:r}=$K(e);YK(e,r,t.hash_attribute),e.schema!==Pc.SYSTEM_SCHEMA_NAME&&(r.includes(Pc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Pc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Pc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Pc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await zK(e.hdb_auth_header,t,r),s=JK(e.schema,e.table),i=await WK.openEnvironment(s,e.table),o=await KK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await XK(e,o)}catch(c){QK.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(jK,"lmdbCreateRecords")});var tw=g((Uce,ew)=>{"use strict";var Zy=M(),ZK=Jm(),eW=bc(),tW=require("fs-extra"),{getSchemaPath:rW}=Ke();ew.exports=nW;async function nW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new eW(Zy.SYSTEM_SCHEMA_NAME,Zy.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await ZK(r),await tW.mkdirp(rW(e.schema))}a(nW,"lmdbCreateSchema")});var nw=g((vce,rw)=>{"use strict";var Xm=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};rw.exports=Xm});var aw=g((qce,ow)=>{"use strict";var sw=$e(),jm=Ir(),Zm=Or().LMDB_ERRORS_ENUM,sW=lt(),iw=Y(),Hce=J(),iW=require("lmdb"),oW=nw(),aW=M(),{OVERFLOW_MARKER:xce,MAX_SEARCH_KEY_LENGTH:Fce}=sW,cW=aW.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function uW(e,t,r,n){if(jm.validateEnv(e),t===void 0)throw new Error(Zm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Zm.IDS_REQUIRED):new Error(Zm.IDS_MUST_BE_ITERABLE);try{let s=sw.listDBIs(e);sw.initializeDBIs(e,t,s);let i=new oW,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||n&&h[cW]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,iW.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let T=s[S];if(!h.hasOwnProperty(T)||T===t)continue;let A=e.dbis[T],b=h[T];if(b!=null)try{let H=jm.getIndexedValues(b);if(H)for(let F=0,v=H.length;F<v;F++)A.remove(H[F],o)}catch{iw.warn(`cannot delete from attribute: ${T}, ${b}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){iw.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=jm.getNextMonotonicTime(),i}catch(s){throw s}}a(uW,"deleteRecords");ow.exports={deleteRecords:uW}});var vc=g((kce,uw)=>{"use strict";var Ko=J(),lW=aw(),_W=$e(),{getSchemaPath:dW}=Ke(),fW=Uc(),EW=Y();uw.exports=hW;async function hW(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ko.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ko.isEmptyOrZeroLength(e.hash_values)&&!Ko.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];Ko.isEmpty(u)||e.hash_values.push(u)}}if(Ko.isEmptyOrZeroLength(e.hash_values))return cw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ko.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=dW(e.schema,e.table),i=await _W.openEnvironment(s,e.table),o=await lW.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await fW(e,o)}catch(c){EW.error(`unable to write transaction due to ${c.message}`)}return cw(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(hW,"lmdbDeleteRecords");function cw(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(cw,"createDeleteResponse")});var tp=g((Yce,lw)=>{"use strict";var mW=M(),$ce=Ir();function ep(e,t){let r=Object.create(null);if(t.length===1&&mW.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(ep,"parseRow");function pW(e,t,r,n){let s=ep(r,e);n.push(s)}a(pW,"searchAll");function SW(e,t,r,n){let s=ep(r,e);n[t]=s}a(SW,"searchAllToMap");function TW(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(TW,"iterateDBI");function Vi(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Vi,"pushResults");function gW(e,t,r,n,s,i){t.toString().endsWith(e)&&Vi(t,r,n,s,i)}a(gW,"endsWith");function RW(e,t,r,n,s,i){t.toString().includes(e)&&Vi(t,r,n,s,i)}a(RW,"contains");function AW(e,t,r,n,s,i){t>e&&Vi(t,r,n,s,i)}a(AW,"greaterThanCompare");function OW(e,t,r,n,s,i){t>=e&&Vi(t,r,n,s,i)}a(OW,"greaterThanEqualCompare");function bW(e,t,r,n,s,i){t<e&&Vi(t,r,n,s,i)}a(bW,"lessThanCompare");function NW(e,t,r,n,s,i){t<=e&&Vi(t,r,n,s,i)}a(NW,"lessThanEqualCompare");lw.exports={parseRow:ep,searchAll:pW,searchAllToMap:SW,iterateDBI:TW,endsWith:gW,contains:RW,greaterThanCompare:AW,greaterThanEqualCompare:OW,lessThanCompare:bW,lessThanEqualCompare:NW,pushResults:Vi}});var Wo=g((Jce,pw)=>{"use strict";var js=$e(),Wce=Y(),Ur=Ir(),M_=lt(),at=Or().LMDB_ERRORS_ENUM,Qce=J(),yW=M(),U_=tp(),{parseRow:wW}=U_,zce=require("lmdb"),{OVERFLOW_MARKER:_w,MAX_SEARCH_KEY_LENGTH:IW}=M_;function dw(e,t,r,n=!1,s=void 0,i=void 0){return $i(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(dw,"iterateFullIndex");function Bc(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return $i(e,t,r,(l,d,f,E)=>{let A={transaction:l,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(A.values=!1,d.getRange(A).map(b=>({value:b}))):d.getRange(A)})}a(Bc,"iterateRangeBetween");function $i(e,t,r,n){let s=e.database||e,i=js.openDBI(s,r);i[M_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&js.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a($i,"setupTransaction");function fw(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(_w)){if(!s)if(r)s=js.openDBI(e,r);else{let u=js.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=js.openDBI(e,u[_]),!s[M_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(fw,"getOverflowCheck");function CW(e,t,r,n=!1,s=void 0,i=void 0){if(Ur.validateEnv(e),t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);return $i(e,t,t,(o,c,u)=>(P_(r),r=Hc(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>wW(_.value,r))))}a(CW,"searchAll");function DW(e,t,r,n=!1,s=void 0,i=void 0){if(Ur.validateEnv(e),t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);P_(r),r=Hc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of dw(e,t,t,n,s,i))o.set(c,U_.parseRow(u,r));return o}a(DW,"searchAllToMap");function LW(e,t,r=!1,n=void 0,s=void 0){if(Ur.validateEnv(e),t===void 0)throw new Error(at.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=dw(e,void 0,t,r,n,s),c=o.transaction,u=fw(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(LW,"iterateDBI");function MW(e,t){if(Ur.validateEnv(e),t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);return js.statDBI(e,t).entryCount}a(MW,"countAll");function UW(e,t,r,n,s=!1,i=void 0,o=void 0){return Zs(e,r,n),$i(e,t,r,(c,u,_,l)=>(n=Ur.convertKeyValueToWrite(n),l===r?u.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:u.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(UW,"equals");function PW(e,t,r){return Zs(e,t,r),js.openDBI(e,t).getValuesCount(r)}a(PW,"count");function vW(e,t,r,n,s=!1,i=void 0,o=void 0){return Zs(e,r,n),$i(e,null,r,(c,u)=>{n=Ur.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let l;if(s===!0){let d;for(let f of u.getKeys({transaction:c,start:n}))if(!f.startsWith(n)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(n))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(vW,"startsWith");function BW(e,t,r,n,s=!1,i=void 0,o=void 0){return Ew(e,t,r,n,s,i,o,!0)}a(BW,"endsWith");function Ew(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Zs(e,r,n),$i(e,null,r,(u,_,l,d)=>{let f=fw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:s?!1:void 0,reverse:s}).flatMap(E=>{let h=E.toString();return h.endsWith(_w)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(n):S.includes(n))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(n):h.includes(n))?_[M_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(Ew,"contains");function HW(e,t,r,n,s=!1,i=void 0,o=void 0){Zs(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Bc(e,t,r,n,u,s,i,o,!0,!1)}a(HW,"greaterThan");function xW(e,t,r,n,s=!1,i=void 0,o=void 0){Zs(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Bc(e,t,r,n,u,s,i,o,!1,!1)}a(xW,"greaterThanEqual");function FW(e,t,r,n,s=!1,i=void 0,o=void 0){Zs(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Bc(e,t,r,u,n,s,i,o,!1,!0)}a(FW,"lessThan");function qW(e,t,r,n,s=!1,i=void 0,o=void 0){Zs(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Bc(e,t,r,u,n,s,i,o,!1,!1)}a(qW,"lessThanEqual");function GW(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Ur.validateEnv(e),r===void 0)throw new Error(at.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(at.START_VALUE_REQUIRED);if(s===void 0)throw new Error(at.END_VALUE_REQUIRED);if(n=Ur.convertKeyValueToWrite(n),s=Ur.convertKeyValueToWrite(s),n>s)throw new Error(at.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Bc(e,t,r,n,s,i,o,c)}a(GW,"between");function kW(e,t,r,n){Ur.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);if(P_(r),r=Hc(s,r),n===void 0)throw new Error(at.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=U_.parseRow(c,r)),o}a(kW,"searchByHash");function VW(e,t,r){Ur.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(at.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(VW,"checkHashExists");function $W(e,t,r,n,s=[]){return mw(e,t,r,n,s),hw(e,t,r,n,s).map(i=>i[1])}a($W,"batchSearchByHash");function YW(e,t,r,n,s=[]){mw(e,t,r,n,s);let i=new Map;for(let[o,c]of hw(e,t,r,n,s))i.set(o,c);return i}a(YW,"batchSearchByHashToMap");function hw(e,t,r,n,s=[]){return $i(e,t,t,(i,o,c)=>{r=Hc(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,U_.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(hw,"batchHashSearch");function mw(e,t,r,n,s){if(Ur.validateEnv(e),t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);if(P_(r),n==null)throw new Error(at.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(at.IDS_MUST_BE_ITERABLE)}a(mw,"initializeBatchSearchByHash");function P_(e){if(!Array.isArray(e))throw e===void 0?new Error(at.FETCH_ATTRIBUTES_REQUIRED):new Error(at.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(P_,"validateFetchAttributes");function Zs(e,t,r){if(Ur.validateEnv(e),t===void 0)throw new Error(at.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(at.SEARCH_VALUE_REQUIRED);if(r?.length>IW)throw new Error(at.SEARCH_VALUE_TOO_LARGE)}a(Zs,"validateComparisonFunctions");function Hc(e,t){return t.length===1&&yW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=js.listDBIs(e)),t}a(Hc,"setGetWholeRowAttributes");pw.exports={searchAll:CW,searchAllToMap:DW,count:PW,countAll:MW,equals:UW,startsWith:vW,endsWith:BW,contains:Ew,searchByHash:kW,setGetWholeRowAttributes:Hc,batchSearchByHash:$W,batchSearchByHashToMap:YW,checkHashExists:VW,iterateDBI:LW,greaterThan:HW,greaterThanEqual:xW,lessThan:FW,lessThanEqual:qW,between:GW}});var Qo=g((jce,Aw)=>{var Sw=require("lodash"),Tw=Xe(),Ee=require("joi"),KW=J(),{hdb_schema_table:xc,checkValidTable:gw,hdb_table:Rw,hdb_database:v_}=kn(),{handleHDBError:WW,hdb_errors:QW}=ee(),{getDatabases:zW}=(be(),te(Fe)),{HTTP_STATUS_CODES:JW}=QW,XW=Ee.object({database:v_,schema:v_,table:Rw,search_attribute:xc,search_value:Ee.any().required(),get_attributes:Ee.array().min(1).items(Ee.alternatives(xc,Ee.object())).optional(),desc:Ee.bool(),limit:Ee.number().integer().min(1),offset:Ee.number().integer().min(0)}),jW=Ee.object({database:v_,schema:v_,table:Rw,operator:Ee.string().valid("and","or").default("and").lowercase(),offset:Ee.number().integer().min(0),limit:Ee.number().integer().min(1),get_attributes:Ee.array().min(1).items(Ee.alternatives(xc,Ee.object())).optional(),sort:Ee.object({attribute:Ee.alternatives(xc,Ee.array().min(1)),descending:Ee.bool().optional()}).optional(),conditions:Ee.array().min(1).items(Ee.alternatives(Ee.object({operator:Ee.string().valid("and","or").default("and").lowercase(),conditions:Ee.array()}),Ee.object({search_attribute:Ee.alternatives(xc,Ee.array().min(1)),search_type:Ee.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:Ee.when("search_type",{switch:[{is:"equals",then:Ee.any()},{is:"between",then:Ee.array().items(Ee.alternatives([Ee.string(),Ee.number()])).length(2)}],otherwise:Ee.alternatives(Ee.string(),Ee.number())}).required()}))).required()});Aw.exports=function(e,t){let r=null;switch(t){case"value":r=Tw.validateBySchema(e,XW);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(gw("database",e.schema)),i(gw("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=Tw.validateBySchema(e,jW);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=KW.checkGlobalSchemaTable(e.schema,e.table);if(s)return WW(new Error,s,JW.NOT_FOUND);let o=zW()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,f=l.conditions.length;d<f;d++){let E=l.conditions[d];E.conditions?u(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=Sw.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!Sw.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var rp=g((eue,Ow)=>{"use strict";var ZW=$e(),eQ=Qo(),{getSchemaPath:tQ}=Ke();Ow.exports=rQ;function rQ(e){let t=eQ(e,"hashes");if(t)throw t;let r=tQ(e.schema,e.table);return ZW.openEnvironment(r,e.table)}a(rQ,"initialize")});var np=g((rue,bw)=>{"use strict";var nQ=Wo(),sQ=rp();bw.exports=iQ;async function iQ(e){let t=await sQ(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return nQ.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(iQ,"lmdbGetDataByHash")});var zo=g((sue,Nw)=>{"use strict";var sp=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};Nw.exports=sp});var ww=g((aue,yw)=>{"use strict";var oue=zo(),oQ=Wo(),aQ=rp();yw.exports=cQ;async function cQ(e){let t=await aQ(e),r=global.hdb_schema[e.schema][e.table];return oQ.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(cQ,"lmdbSearchByHash")});var Kn=g((uue,Iw)=>{"use strict";var ip=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};Iw.exports=ip});var B_=g((_ue,Pw)=>{"use strict";var Kt=Wo(),uQ=$e(),lQ=J(),he=lt(),Yi=M(),_Q=Ui(),Cw=Or().LMDB_ERRORS_ENUM,{getSchemaPath:dQ}=Ke(),ps=Yi.SEARCH_WILDCARDS;async function fQ(e,t,r){let n;e.schema===Yi.SYSTEM_SCHEMA_NAME?n=_Q[e.table]:n=global.hdb_schema[e.schema][e.table];let s=Uw(e,n.hash_attribute,r,t);return Lw(e,s,n.hash_attribute,r)}a(fQ,"prepSearch");async function Lw(e,t,r,n){let s=dQ(e.schema,e.table),i=await uQ.openEnvironment(s,e.table),o=Mw(i,e,t,r),c=o.transaction||i;if([he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,he.SEARCH_TYPES.SEARCH_ALL,he.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(EQ(e,r)===!1){let l=e.search_attribute;if(l===r)return n?Dw(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return n?Dw(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return n===!0?Kt.batchSearchByHashToMap(c,r,e.get_attributes,_):Kt.batchSearchByHash(c,r,e.get_attributes,_)}a(Lw,"executeSearch");function Mw(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case he.SEARCH_TYPES.EQUALS:s=Kt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.CONTAINS:s=Kt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.ENDS_WITH:case he.SEARCH_TYPES._ENDS_WITH:s=Kt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.STARTS_WITH:case he.SEARCH_TYPES._STARTS_WITH:s=Kt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Kt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Kt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case he.SEARCH_TYPES.SEARCH_ALL:return Kt.searchAll(e,n,t.get_attributes,o,c,u);case he.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Kt.searchAllToMap(e,n,t.get_attributes,o,c,u);case he.SEARCH_TYPES.BETWEEN:s=Kt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case he.SEARCH_TYPES.GREATER_THAN:case he.SEARCH_TYPES._GREATER_THAN:s=Kt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.GREATER_THAN_EQUAL:case he.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Kt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.LESS_THAN:case he.SEARCH_TYPES._LESS_THAN:s=Kt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.LESS_THAN_EQUAL:case he.SEARCH_TYPES._LESS_THAN_EQUAL:s=Kt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return s}a(Mw,"searchByType");function Dw(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(Dw,"createMapFromIterable");function EQ(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(EQ,"checkToFetchMore");function Uw(e,t,r,n){if(lQ.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),ps.indexOf(s)>-1)return r===!0?he.SEARCH_TYPES.SEARCH_ALL_TO_MAP:he.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ps[0])<0&&s.indexOf(ps[1])<0)return c===!0?r===!0?he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:he.SEARCH_TYPES.EQUALS;if(ps.indexOf(i)>=0&&ps.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),he.SEARCH_TYPES.CONTAINS;if(ps.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),he.SEARCH_TYPES.ENDS_WITH;if(ps.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),he.SEARCH_TYPES.STARTS_WITH;if(s.includes(ps[0])||s.includes(ps[1]))return he.SEARCH_TYPES.EQUALS;throw new Error(Cw.UNKNOWN_SEARCH_TYPE)}else switch(n){case Yi.VALUE_SEARCH_COMPARATORS.BETWEEN:return he.SEARCH_TYPES.BETWEEN;case Yi.VALUE_SEARCH_COMPARATORS.GREATER:return he.SEARCH_TYPES.GREATER_THAN;case Yi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return he.SEARCH_TYPES.GREATER_THAN_EQUAL;case Yi.VALUE_SEARCH_COMPARATORS.LESS:return he.SEARCH_TYPES.LESS_THAN;case Yi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return he.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Cw.UNKNOWN_SEARCH_TYPE)}}a(Uw,"createSearchTypeFromSearchObject");Pw.exports={executeSearch:Lw,createSearchTypeFromSearchObject:Uw,prepSearch:fQ,searchByType:Mw}});var Bw=g((Eue,vw)=>{"use strict";var fue=Kn(),hQ=Qo(),mQ=J(),pQ=M(),SQ=B_();vw.exports=TQ;function TQ(e,t){if(!mQ.isEmpty(t)&&pQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=hQ(e,"value");if(n)throw n;return SQ.prepSearch(e,t,!0)}a(TQ,"lmdbGetDataByValue")});var Fc=g((pue,Hw)=>{"use strict";var mue=Kn(),gQ=Qo(),RQ=J(),AQ=M(),OQ=B_();Hw.exports=bQ;async function bQ(e,t){if(!RQ.isEmpty(t)&&AQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=gQ(e,"value");if(n)throw n;return OQ.prepSearch(e,t,!1)}a(bQ,"lmdbSearchByValue")});var Fw=g((gue,xw)=>{"use strict";var Tue=lt(),op=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},ap=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},cp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};xw.exports={SearchByConditionsObject:op,SearchCondition:ap,SortAttribute:cp}});var $w=g((bue,Vw)=>{"use strict";var Aue=Fw().SearchByConditionsObject,NQ=Kn(),yQ=Qo(),up=Wo(),H_=lt(),{Resource:Oue}=(gn(),te(lp)),kw=B_(),wQ=tp(),IQ=require("lodash"),{getSchemaPath:CQ}=Ke(),qw=$e(),{handleHDBError:DQ,hdb_errors:LQ}=ee(),{HTTP_STATUS_CODES:MQ}=LQ,UQ=1e8;Vw.exports=PQ;async function PQ(e){let t=yQ(e,"conditions");if(t)throw DQ(t,t.message,MQ.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=CQ(e.schema,e.table),n=await qw.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)qw.openDBI(n,_.search_attribute);let i=IQ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===H_.SEARCH_TYPES.EQUALS?_.estimated_count=up.count(n,_.search_attribute,_.search_value):l===H_.SEARCH_TYPES.CONTAINS||l===H_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=UQ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await Gw(o,e,i[0],s.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],l=i.slice(1).map(kw.filterByType),d=l.length,f=up.setGetWholeRowAttributes(n,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>wQ.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await Gw(o,e,f,s.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=up.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(PQ,"lmdbSearchByConditions");async function Gw(e,t,r,n){let s=new NQ(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===H_.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,kw.searchByType(e,s,i,n).map(o=>o.value)}a(Gw,"executeConditionSearch")});var qc=g((yue,Yw)=>{"use strict";var vQ=M().OPERATIONS_ENUM,_p=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=vQ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};Yw.exports=_p});var dp=g((Iue,Zw)=>{"use strict";var zw=Kn(),Jw=qc(),Xw=Fc(),jw=vc(),nr=M(),Kw=J(),Ww=$e(),{getTransactionAuditStorePath:BQ,getSchemaPath:HQ}=Ke(),Qw=Y();Zw.exports=xQ;async function xQ(e){try{if(Kw.isEmpty(global.hdb_schema[e.schema])||Kw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await FQ(e),await qQ(e);let t=HQ(e.schema,e.table);try{await Ww.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Qw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=BQ(e.schema,e.table);await Ww.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Qw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(xQ,"lmdbDropTable");async function FQ(e){let t=new zw(nr.SYSTEM_SCHEMA_NAME,nr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,nr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[nr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Xw(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new Jw(nr.SYSTEM_SCHEMA_NAME,nr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await jw(s)}a(FQ,"deleteAttributesFromSystem");async function qQ(e){let t=new zw(nr.SYSTEM_SCHEMA_NAME,nr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,nr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[nr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,nr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,nr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await Xw(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new Jw(nr.SYSTEM_SCHEMA_NAME,nr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await jw(s)}catch(i){throw i}}a(qQ,"dropTableFromSystem")});var tI=g((Due,eI)=>{"use strict";var GQ=require("fs-extra"),kQ=Kn(),VQ=zo(),$Q=qc(),YQ=dp(),KQ=vc(),WQ=np(),QQ=Fc(),Ss=M(),{getSchemaPath:zQ}=Ke(),{handleHDBError:JQ,hdb_errors:XQ}=ee(),{HDB_ERROR_MSGS:jQ,HTTP_STATUS_CODES:ZQ}=XQ;eI.exports=ez;async function ez(e){let t;try{t=await tz(e.schema);let r=new kQ(Ss.SYSTEM_SCHEMA_NAME,Ss.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ss.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Ss.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await QQ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await YQ(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new $Q(Ss.SYSTEM_SCHEMA_NAME,Ss.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await KQ(s);let i=zQ(t);await GQ.remove(i)}catch(r){throw r}}a(ez,"lmdbDropSchema");async function tz(e){let t=new VQ(Ss.SYSTEM_SCHEMA_NAME,Ss.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Ss.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await WQ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw JQ(new Error,jQ.SCHEMA_NOT_FOUND(e),ZQ.NOT_FOUND,void 0,void 0,!0);return n}a(tz,"validateDropSchema")});var Ep=g((Mue,rI)=>{"use strict";var fp=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};rI.exports=fp});var sI=g((vue,nI)=>{"use strict";var rz=require("fs-extra"),x_=$e(),{getTransactionAuditStorePath:nz}=Ke(),hp=lt(),Pue=Ep();nI.exports=sz;async function sz(e){let t;try{let r=nz(e.schema,e.table);await rz.mkdirp(r),t=await x_.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{x_.createDBI(t,hp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),x_.createDBI(t,hp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),x_.createDBI(t,hp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(sz,"createTransactionsAuditEnvironment")});var cI=g((Hue,aI)=>{"use strict";var mp=M(),iI=$e(),iz=Bo(),{getSystemSchemaPath:oz,getSchemaPath:az}=Ke(),cz=Ui(),uz=d_(),pp=__(),lz=Y(),_z=sI(),Tp=cz.hdb_table,oI=[];for(let e=0;e<Tp.attributes.length;e++)oI.push(Tp.attributes[e].attribute);aI.exports=dz;async function dz(e,t){let r=az(t.schema,t.table),n=new pp(t.schema,t.table,mp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new pp(t.schema,t.table,mp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new pp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await iI.createEnvironment(r,t.table),e!==void 0){let o=await iI.openEnvironment(oz(),mp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await iz.insertRecords(o,Tp.hash_attribute,oI,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Sp(n),await Sp(s),await Sp(i)}await _z(t)}catch(o){throw o}}a(dz,"lmdbCreateTable");async function Sp(e){try{await uz(e)}catch(t){lz.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Sp,"createAttribute")});var lI=g((Fue,uI)=>{"use strict";var fz=Oc(),Ez=Ic(),hz=D_(),Gc=M(),mz=Bo().updateRecords,pz=$e(),{getSchemaPath:Sz}=Ke(),Tz=Uc(),gz=Y();uI.exports=Rz;async function Rz(e){try{let{schema_table:t,attributes:r}=fz(e);Ez(e,r,t.hash_attribute),e.schema!==Gc.SYSTEM_SCHEMA_NAME&&(r.includes(Gc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Gc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Gc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Gc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await hz(e.hdb_auth_header,t,r),s=Sz(e.schema,e.table),i=await pz.openEnvironment(s,e.table),o=await mz(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Tz(e,o)}catch(c){gz.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(Rz,"lmdbUpdateRecords")});var dI=g((Gue,_I)=>{"use strict";var Az=M().OPERATIONS_ENUM,gp=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Az.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};_I.exports=gp});var EI=g(($ue,fI)=>{"use strict";var Vue=dI(),Oz=Oc(),bz=Ic(),Nz=D_(),kc=M(),yz=Bo().upsertRecords,wz=$e(),{getSchemaPath:Iz}=Ke(),Cz=Uc(),Dz=Y(),{handleHDBError:Lz,hdb_errors:Mz}=ee();fI.exports=Uz;async function Uz(e){let t;try{t=Oz(e)}catch(u){throw Lz(u,u.message,Mz.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;bz(e,n,r.hash_attribute),e.schema!==kc.SYSTEM_SCHEMA_NAME&&(n.includes(kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Nz(e.hdb_auth_header,r,n),i=Iz(e.schema,e.table),o=await wz.openEnvironment(i,e.table),c=await yz(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await Cz(e,c)}catch(u){Dz.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(Uz,"lmdbUpsertRecords")});var mI=g((Kue,hI)=>{"use strict";var Rp=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};hI.exports=Rp});var SI=g((Que,pI)=>{"use strict";var Ap=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};pI.exports=Ap});var RI=g((Xue,gI)=>{"use strict";var Op=$e(),{getTransactionAuditStorePath:Pz}=Ke(),Jue=mI(),Vc=lt(),vz=J(),TI=SI(),Bz=require("util").promisify,Hz=Bz(setTimeout),xz=1e4,Fz=100;gI.exports=qz;async function qz(e){let t=Pz(e.schema,e.table),r=await Op.openEnvironment(t,e.table,!0),n=Op.listDBIs(r);Op.initializeDBIs(r,Vc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new TI;do s=await Gz(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 Hz(Fz);while(s.transactions_deleted>0);return i}a(qz,"deleteAuditLogsBefore");async function Gz(e,t){let r=new TI;try{let n=e.dbis[Vc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[Vc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];vz.isEmpty(c)||(s=e.dbis[Vc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[Vc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>xz)break}return await s,r}catch(n){throw n}}a(Gz,"deleteTransactions")});var OI=g((Zue,AI)=>{"use strict";var bp=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};AI.exports=bp});var NI=g((rle,bI)=>{"use strict";var kz=Kn(),Vz=qc(),tle=OI(),Wn=M(),$z=J(),Np=$e(),Yz=Ui(),Kz=Fc(),Wz=vc(),{getSchemaPath:Qz}=Ke();bI.exports=zz;async function zz(e,t=!0){let r;e.schema===Wn.SYSTEM_SCHEMA_NAME?r=Yz[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await Xz(e),s=Qz(e.schema,e.table),i=await Np.openEnvironment(s,e.table);return t===!0&&await Jz(e,i,r.hash_attribute),Np.dropDBI(i,e.attribute),n}a(zz,"lmdbDropAttribute");async function Jz(e,t,r){let n=Np.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:u}of n.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);s=t.dbis[r].put(o,_,u)}await s}a(Jz,"removeAttributeFromAllObjects");async function Xz(e){let t=new kz(Wn.SYSTEM_SCHEMA_NAME,Wn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Wn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Wn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Wn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await Kz(t)).filter(o=>o[Wn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if($z.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Wn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Vz(Wn.SYSTEM_SCHEMA_NAME,Wn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Wz(i)}a(Xz,"dropAttributeFromSystem")});var LI=g((ile,DI)=>{"use strict";var yp=$e(),Jo=lt(),sle=Ir(),wp=M(),yI=J(),{getTransactionAuditStorePath:jz}=Ke(),Zz=Wo(),F_=$o(),eJ=Y();DI.exports=tJ;async function tJ(e){let t=jz(e.schema,e.table),r=await yp.openEnvironment(t,e.table,!0),n=yp.listDBIs(r);yp.initializeDBIs(r,Jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return wI(r,e.search_values);case wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,nJ(r,e.search_values,s);case wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return rJ(r,e.search_values);default:return wI(r)}}a(tJ,"readAuditLog");function wI(e,t=[0,Date.now()]){yI.isEmpty(t[0])&&(t[0]=0),yI.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Jo.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 F_,s))}a(wI,"searchTransactionsByTimestamp");function rJ(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[Jo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,CI(e,i))}return Object.fromEntries(r)}a(rJ,"searchTransactionsByUsername");function nJ(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=Zz.equals(e,Jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Jo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);n.has(f)?n.get(f).push(_.toString()):n.set(f,[_.toString()])}}let s=Array.from(n.keys()),i=CI(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);II(u,"records",r,l,o),II(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(nJ,"searchTransactionsByHashValues");function II(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(n.indexOf(u)>=0)if(s.has(u)){let _=s.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new F_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new F_(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(II,"loopRecords");function CI(e,t){let r=[];try{let n=e.dbis[Jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new F_,i);r.push(o)}}catch(i){eJ.warn(i)}return r}catch(n){throw n}}a(CI,"batchSearchTransactions")});var UI=g((ule,MI)=>{"use strict";var{getSchemaPath:ale}=Ke(),cle=$e(),{database:sJ}=(be(),te(Fe));MI.exports={writeTransaction:iJ};async function iJ(e,t,r){return sJ({database:e,table:t}).transaction(r)}a(iJ,"writeTransaction")});var HI=g((_le,BI)=>{"use strict";var{getSchemaPath:PI}=Ke(),vI=$e();BI.exports={flush:oJ,resetReadTxn:aJ};async function oJ(e,t){return(await vI.openEnvironment(PI(e,t),t.toString())).flushed}a(oJ,"flush");async function aJ(e,t){try{(await vI.openEnvironment(PI(e,t),t.toString())).resetReadTxn()}catch{}}a(aJ,"resetReadTxn")});var GI=g((fle,qI)=>{"use strict";var{Readable:cJ}=require("stream"),{getDatabases:uJ}=(be(),te(Fe)),{readSync:lJ,openSync:_J,createReadStream:xI}=require("fs"),{open:dJ}=require("lmdb"),FI=t_(),fJ=n_(),{AUDIT_STORE_OPTIONS:EJ}=(Li(),te(kI)),{INTERNAL_DBIS_NAME:hJ,AUDIT_STORE_NAME:mJ}=lt();qI.exports=SJ;var Ip=32768,pJ=100;async function SJ(e){let t=e.database||e.schema||"data",r=uJ()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let l=_.dbisDB,d=dJ({noSync:!0,maxDbs:fJ.MAX_DBS}),f,E=d.openDB(hJ,new FI(!1)),h=l.useReadTransaction(),p=0,S=a(async function(A,b){b.encoding="binary",b.encoder=void 0;let H=d.openDB(A,b),F=l.openDB(A,b);for(let{key:v,version:P,value:z}of F.getRange({transaction:h,versions:F.useVersions}))f=H.put(v,z,P),p++%pJ===0&&(await new Promise(W=>setTimeout(W,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:A,value:b}of l.getRange({transaction:h,start:!1}))if(s.some(H=>A.startsWith?.(H+"/"))){E.put(A,b);let[,H]=A.split("/"),F=!H,v=new FI(!F,F);await S(A,v)}e.include_audit&&await S(mJ,Object.assign({},EJ)),await f;let T=xI(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=_J(o.path);return o.transaction(()=>{let _=Buffer.alloc(Ip);lJ(c,_,0,Ip),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=xI(null,{fd:c,start:Ip}),f=new cJ.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(SJ,"getBackup")});var YI=g((hle,$I)=>{"use strict";var TJ=Y(),{handleHDBError:gJ}=ee(),RJ=Ab(),AJ=d_(),OJ=Jm(),bJ=tw(),NJ=vc(),yJ=np(),wJ=ww(),IJ=Bw(),CJ=Fc(),DJ=$w(),LJ=tI(),MJ=cI(),UJ=lI(),PJ=EI(),vJ=RI(),BJ=dp(),HJ=NI(),xJ=LI(),FJ=UI(),VI=HI(),qJ=GI(),Cp=class extends RJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return DJ(t)}async getDataByHash(t){return await yJ(t)}async searchByHash(t){return await wJ(t)}async getDataByValue(t,r){return await IJ(t,r)}async searchByValue(t){return await CJ(t)}async createSchema(t){return await bJ(t)}async dropSchema(t){return await LJ(t)}async createTable(t,r){return await MJ(t,r)}async dropTable(t){return await BJ(t)}async createAttribute(t){return await AJ(t)}async createRecords(t){return await OJ(t)}async updateRecords(t){return await UJ(t)}async upsertRecords(t){try{return await PJ(t)}catch(r){throw gJ(r,null,null,TJ.ERR,r)}}async deleteRecords(t){return await NJ(t)}async dropAttribute(t){return await HJ(t)}async deleteAuditLogsBefore(t){return await vJ(t)}async readAuditLog(t){return await xJ(t)}writeTransaction(t,r,n){return FJ.writeTransaction(t,r,n)}flush(t,r){return VI.flush(t,r)}resetReadTxn(t,r){return VI.resetReadTxn(t,r)}getBackup(t){return qJ(t)}};$I.exports=Cp});function $J(){VJ=setInterval(function(){for(let e of Dp)if(e.stale){let t=e[Ne]?.url;KI.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},kJ).unref()}var Lp,KI,GJ,Dp,Ki,q_,kJ,VJ,Mp=Oe(()=>{Lp=B(Ir()),KI=B(Y());gn();Po();GJ=100,Dp=new Set,Ki=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=!0;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)throw new Error("Can not start a read on a transaction that is no longer open");return this.readTxnsUsed=1,Zl(()=>{this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0)}),Dp.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),Zl(()=>{this.readTxn.use()}),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Dp.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}addWrite(t){if(!this.open&&!this.autoCommitMode)throw new Error("Can not use a transaction that is no longer open");this.writes.push(t),this.autoCommitMode&&this.commit()}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=t.timestamp||(0,Lp.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let T=S();E?E.push?E.push(T):E=[E,T]:E=T}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(l){throw this.abort(),l}n||this.doneReadTxn(),t?.prepared?.(),this.open=!1;let s,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,n)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){n>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);s=s||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<GJ>>n?u():s=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),s)return s.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=n+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=!1,this.writes=[]}},q_=class extends Ki{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Lp.getNextMonotonicTime)())}getReadTxn(){}},kJ=3e4;a($J,"startMonitoringTxns");$J()});function We(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.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 Ki;e.timestamp&&(n.timestamp=e.timestamp),n[Ne]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let u=n.commit(r?.resetTransaction?{prepared(){n.autoCommitMode=!0}}:{});return u.then?u.then(()=>c):c}function o(c){throw n.abort({}),c}}var WI,Wi=Oe(()=>{WI=require("../../index");gn();Mp();a(We,"transaction");(0,WI._assignPackageExport)("transaction",We);We.commit=function(e){let t=(e[Ne]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};We.abort=function(e){let t=(e[Ne]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var rC={};Ve(rC,{ResourceBridge:()=>vp});function Bp({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 zI(e,t){let r=Qn(e),n=Bp(e,r);if(!r)throw new Nn.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},o;We(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:s,select:n},i);return l=l&&k_(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function Qn(e){let t=e.database||e.schema||KJ,r=yn()[t];if(!r)throw(0,Nn.handleHDBError)(new Error,YJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function JI(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*XI(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(u)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[u]})}n&&(yield n)}var jI,G_,Nn,ZI,eC,wn,Up,Pp,tC,YJ,KJ,WJ,QJ,QI,vp,nC=Oe(()=>{"use strict";jI=B(YI()),G_=B(Qo()),Nn=B(ee());be();ZI=B(Oc()),eC=B(Ic()),wn=B(M()),Up=B(ms()),Pp=B(bn()),tC=B(J());Wi();V_();({HDB_ERROR_MSGS:YJ}=Nn.hdb_errors),KJ="data",WJ=1e4,QJ=10,vp=class extends jI.default{static{a(this,"ResourceBridge")}constructor(t){super(t),QI=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,G_.default)(t,"conditions");if(r)throw(0,Nn.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Qn(t);if(!n)throw new Nn.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Bp(t,n),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Nn.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}]}ot({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await Qn(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Qn(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,u)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,u),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Qn(t).dropTable()}createSchema(t){return $c({database:t.schema,table:null}),Up.signalSchemaChange(new Pp.SchemaEventMsg(process.pid,wn.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Hp(t.schema),Up.signalSchemaChange(new Pp.SchemaEventMsg(process.pid,wn.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,QI.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,ZI.default)(t);(0,eC.default)(t,n,r.primaryKey);let s,i=yn()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return We(o,async c=>{if(!i.schemaDefined){s=[];for(let l of n)i.attributes.find(f=>f.name==l)||s.push(l);s.length>0&&await i.addAttributes(s.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=k_(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=yn()[t.schema][t.table],n={user:t.hdb_user};return We(n,async s=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,n)?o.push(u):c.push(u);return JI(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=yn()[t.schema][t.table];if(!r.createdTimeProperty)throw new Nn.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:wn.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,tC.async_set_timeout)(QJ),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%WJ===0&&await _();return u.length>0&&await _(),s?JI(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,G_.default)(t,"hashes");if(r)throw r;return zI(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of zI(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&wn.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,G_.default)(t,"value");if(n)throw n;let s=Qn(t);if(!s)throw new Nn.ClientError(`Table ${t.table} not found`);let i=t.search_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===wn.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Bp(t,s)})}async getDataByValue(t,r){let n=new Map,s=Qn(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){Qn({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Qn(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Qn(t),n={};switch(t.search_type){case wn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case wn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of XI(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return XI(r,t.search_values?.[0],t.search_values?.[1])}}};a(Bp,"getSelect");a(zI,"getRecords");a(Qn,"getTable");a(JI,"createDeleteResponse");a(XI,"groupRecordsInHistory")});var On=g((Dle,sC)=>{"use strict";var{ResourceBridge:zJ}=(nC(),te(rC)),JJ=Z();JJ.initSync();var $_;function XJ(){return $_||($_=new zJ,$_)}a(XJ,"getBridge");sC.exports=XJ()});var cC=g((Mle,aC)=>{"use strict";var iC=require("lodash"),Yc=require("mathjs"),jJ=require("jsonata"),oC=J();aC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?iC.uniqWith(e,iC.isEqual):e,searchJSON:ZJ,mad:Kc.bind(null,Yc.mad),mean:Kc.bind(null,Yc.mean),mode:Kc.bind(null,Yc.mode),prod:Kc.bind(null,Yc.prod),median:Kc.bind(null,Yc.median)};function Kc(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Kc,"aggregateFunction");function ZJ(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(oC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),oC.isEmpty(this.__ala__.res[r])){let n=jJ(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(ZJ,"searchJSON")});var lC=g((Ple,uC)=>{"use strict";var dt=require("moment"),xp="YYYY-MM-DDTHH:mm:ss.SSSZZ";dt.suppressDeprecationWarnings=!0;uC.exports={current_date:()=>dt().utc().format("YYYY-MM-DD"),current_time:()=>dt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return dt(e).utc().format("YYYY");case"month":return dt(e).utc().format("MM");case"day":return dt(e).utc().format("DD");case"hour":return dt(e).utc().format("HH");case"minute":return dt(e).utc().format("mm");case"second":return dt(e).utc().format("ss");case"millisecond":return dt(e).utc().format("SSS");default:break}},date:e=>dt(e).utc().format(xp),date_format:(e,t)=>dt(e).utc().format(t),date_add:(e,t,r)=>dt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>dt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=dt(e).utc(),s=dt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>dt().utc().valueOf(),get_server_time:()=>dt().format(xp),offset_utc:(e,t)=>dt(e).utc().utcOffset(t).format(xp)}});var EC=g((vle,fC)=>{"use strict";var e2=require("@turf/area"),t2=require("@turf/length"),r2=require("@turf/circle"),n2=require("@turf/difference"),s2=require("@turf/distance"),i2=require("@turf/boolean-contains"),o2=require("@turf/boolean-equal"),a2=require("@turf/boolean-disjoint"),c2=require("@turf/helpers"),_C=M(),Te=J(),Ts=Y();fC.exports={geoArea:u2,geoLength:l2,geoCircle:_2,geoDifference:d2,geoDistance:dC,geoNear:f2,geoContains:E2,geoEqual:h2,geoCrosses:m2,geoConvert:p2};function u2(e){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return e2.default(e)}catch(t){return Ts.trace(t,e),NaN}}a(u2,"geoArea");function l2(e,t){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return t2.default(e,{units:t||"kilometers"})}catch(r){return Ts.trace(r,e),NaN}}a(l2,"geoLength");function _2(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return r2.default(e,t,{units:r||"kilometers"})}catch(n){return Ts.trace(n,e,t),NaN}}a(_2,"geoCircle");function d2(e,t){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return n2(e,t)}catch(r){return Ts.trace(r,e,t),NaN}}a(d2,"geoDifference");function dC(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return s2.default(e,t,{units:r||"kilometers"})}catch(n){return Ts.trace(n,e,t),NaN}}a(dC,"geoDistance");function f2(e,t,r,n){if(Te.isEmpty(e)||Te.isEmpty(t))return!1;if(Te.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return dC(e,t,n)<=r}catch(s){return Ts.trace(s,e,t),!1}}a(f2,"geoNear");function E2(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return i2.default(e,t)}catch(r){return Ts.trace(r,e,t),!1}}a(E2,"geoContains");function h2(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return o2.default(e,t)}catch(r){return Ts.trace(r,e,t),!1}}a(h2,"geoEqual");function m2(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return!a2.default(e,t)}catch(r){return Ts.trace(r,e,t),!1}}a(m2,"geoCrosses");function p2(e,t,r){if(Te.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Te.isEmpty(t))throw new Error("geo_type is required");if(Te.isEmpty(_C.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(_C.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Te.autoCastJSON(e)),c2[t](e,r)}a(p2,"geoConvert")});var Y_=g((Hle,hC)=>{var Qi=cC(),Pr=lC(),zn=EC();hC.exports=e=>{e.aggr.mad=e.aggr.MAD=Qi.mad,e.aggr.mean=e.aggr.MEAN=Qi.mean,e.aggr.mode=e.aggr.MODE=Qi.mode,e.aggr.prod=e.aggr.PROD=Qi.prod,e.aggr.median=e.aggr.MEDIAN=Qi.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Qi.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Qi.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Pr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Pr.current_time,e.fn.extract=e.fn.EXTRACT=Pr.extract,e.fn.date=e.fn.DATE=Pr.date,e.fn.date_format=e.fn.DATE_FORMAT=Pr.date_format,e.fn.date_add=e.fn.DATE_ADD=Pr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Pr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Pr.date_diff,e.fn.now=e.fn.NOW=Pr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Pr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Pr.get_server_time,e.fn.getdate=e.fn.GETDATE=Pr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Pr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=zn.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=zn.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=zn.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=zn.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=zn.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=zn.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=zn.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=zn.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=zn.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=zn.geoNear}});var TC=g((xle,SC)=>{"use strict";var Wc=require("lodash"),sr=require("alasql");sr.options.cache=!1;var S2=Y_(),mC=require("clone"),K_=require("recursive-iterator"),fe=Y(),Ce=J(),Xo=On(),T2=M(),{hdb_errors:g2}=ee(),{getDatabases:pC}=(be(),te(Fe)),R2="IS NULL",In="There was a problem performing this search. Please check the logs and try again.";S2(sr);var Fp=class{static{a(this,"SQLSearch")}constructor(t,r){if(Ce.isEmpty(t))throw fe.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(),Ce.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Ce.isEmptyOrZeroLength(n))return fe.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw fe.error("Error thrown from checkEmptySQL in SQLSearch class method search."),fe.error(n),new Error(In)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw fe.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),fe.error(n),new Error(In)}if(Object.keys(this.data).length===0)return fe.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw fe.error("Error thrown from processJoins in SQLSearch class method search."),fe.error(n),new Error(In)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw fe.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),fe.error(n),new Error(In)}try{return t=await this._finalSQL(),t}catch(n){throw fe.error("Error thrown from finalSQL in SQLSearch class method search."),fe.error(n),new Error(In)}}_getColumns(){let t=new K_(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(mC(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Wc.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].__hash_name=pC()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Ce.isEmpty(this.statement.where)){fe.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new K_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Ce.isEmpty(r)&&r.right)if(Ce.isNotEmptyAndHasValue(r.right.value)){let n=Ce.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new sr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Ce.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new sr.yy.LogicValue({value:i}):n instanceof sr.yy.StringValue&&Ce.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new sr.yy.NumValue({value:i}))});if(t){fe.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new K_(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Ce.isEmpty(T2.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Ce.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Ce.isEmptyOrZeroLength(r.left.columnid)||Ce.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Ce.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!Ce.isEmpty(r.right.value)||!Ce.isEmpty(r.left.value)?n.add(Ce.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)n.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&Ce.isEmptyOrZeroLength(this.statement.from)&&Ce.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&&Wc.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(Ce.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Ce.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(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&!Ce.isEmptyOrZeroLength(this.columns.columns))return t;if(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&Ce.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await sr.promise(r)}catch(r){throw fe.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),fe.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(mC(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Ce.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(R2)>-1&&this.tables.forEach(s=>{let i={columnid:pC()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Wc.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},u=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(u=!0),!Ce.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Ce.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await Xo.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(l){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(In)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await Xo.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]):(this.data[i].__merged_data[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,E))}))}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(In)}else if(!Ce.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Ce.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await Xo.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...n[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]):(this.data[i].__merged_data[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),fe.error(l),new Error(In)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await Xo.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),fe.error(l),new Error(In)}}}_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 sr.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new sr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new sr.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 sr.yy.FuncValue:new sr.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}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"";u=u.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,s);f=await sr.promise(h,t),t=null}catch(E){throw fe.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),fe.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=Wc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,T=p.length;S<T;S++){let A=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[A]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new K_(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=Wc.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 fe.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),fe.error(i),new Error(In)}}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].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},u=await Xo.getDataByHash(c),_=s.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=s.columns[h],S=E[p]===void 0?null:E[p];this.data[n].__merged_data[f].push(S)}}}}catch(r){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getData."),fe.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}`].__merged_data)),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}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===u}).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();fe.trace(`Final SQL: ${s}`),n=await sr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),fe.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw fe.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),fe.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 fe.error(g2.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),fe.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].__merged_attributes.forEach((o,c)=>{let u=s[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;n=n.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(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.search_attribute=n.attribute,i.search_value="*";let o=await Xo.getDataByValue(i);for(let[c,u]of o)this.data[s].__merged_data[c]||(u[n.attribute]===void 0&&(u[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=u[n.attribute]??null}catch(o){throw fe.error("There was an error when processing this SQL operation. Check your logs"),fe.error(o),new Error(In)}}return Object.values(Object.values(this.data)[0].__merged_data)}};SC.exports=Fp});var Xr=g((qle,gC)=>{"use strict";var A2=gb();gC.exports={searchByConditions:b2,searchByHash:N2,searchByValue:y2,search:w2};var qp=On(),{transformReq:Gp}=J(),O2=TC();async function b2(e){return Gp(e),qp.searchByConditions(e)}a(b2,"searchByConditions");async function N2(e){Gp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of qp.searchByHash(e))r&&t.push(r);return t}a(N2,"searchByHash");async function y2(e){Gp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of qp.searchByValue(e))t.push(r);return t}a(y2,"searchByValue");function w2(e,t){try{let r=new A2(e);r.validate(),new O2(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(w2,"search")});var W_=g((kle,RC)=>{"use strict";var I2=On();RC.exports={writeTransaction:C2};function C2(e,t,r){return I2.writeTransaction(e,t,r)}a(C2,"writeTransaction")});var NC=g((Yle,bC)=>{"use strict";var D2=Xr(),L2=Qs(),AC=Y(),M2=jr(),$le=W_(),U2=require("clone"),Vp=require("alasql"),P2=Y_(),OC=require("util"),v2=OC.promisify(L2.getTableSchema),B2=OC.promisify(D2.search),H2=M(),kp=J();P2(Vp);bC.exports={update:F2};var x2="There was a problem performing this update. Please check the logs and try again.";async function F2({statement:e,hdb_user:t}){let r=await v2(e.table.databaseid,e.table.tableid),n=q2(e.columns);kp.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=U2(s),c=kp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=Vp.parse(u).statements[0],l=await B2(_),d=G2(n,l);return k2(o,d,t)}a(F2,"update");function q2(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Vp.compile(`SELECT ${r.expression.toString()} AS [${H2.FUNC_VAL}] FROM ?`)}),t}catch(t){throw AC.error(t),new Error(x2)}}a(q2,"createUpdateRecord");function G2(e,t){return kp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(G2,"buildUpdateRecords");async function k2(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await M2.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){AC.error(`Error delete new_attributes from update response: ${i}`)}return s}a(k2,"updateRecords")});var wC=g((zle,yC)=>{var V2=require("alasql"),$2=Xr(),Y2=Y(),K2=On(),Yp=require("util"),$p=J(),W2=M(),Q2=Qs(),Wle=W_(),Qle=jr(),z2="record",J2="successfully deleted",X2=Yp.callbackify(t4),j2=Yp.promisify($2.search),Z2=Yp.promisify(Q2.getTableSchema);yC.exports={convertDelete:X2};function e4(e){return`${e.deleted_hashes.length} ${z2}${e.deleted_hashes.length===1?"":"s"} ${J2}`}a(e4,"generateReturnMessage");async function t4({statement:e,hdb_user:t}){let r=await Z2(e.table.databaseid,e.table.tableid);$p.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=$p.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=V2.parse(o).statements[0],u={operation:W2.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await j2(c);let _=await K2.deleteRecords(u);return $p.isEmptyOrZeroLength(_.message)&&(_.message=e4(_)),delete _.txn_time,_}catch(_){throw Y2.error(_),_.hdb_code?_.message:_}}a(t4,"convertDelete")});var MC=g((Xle,LC)=>{"use strict";var r4=vi(),{hdb_errors:IC}=ee(),{getDatabases:CC}=(be(),te(Fe));LC.exports={checkSchemaExists:DC,checkSchemaTableExists:n4,schema_describe:r4};async function DC(e){if(!CC()[e])return IC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(DC,"checkSchemaExists");async function n4(e,t){let r=await DC(e);if(r)return r;if(!CC()[e][t])return IC.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(n4,"checkSchemaTableExists")});var Qc=g((Zle,s4)=>{s4.exports={name:"harperdb",version:"4.3.0-beta.2",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.1","nats-server":"2.10.1"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.11.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.25.1","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.3-beta.5-debug",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.17.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",yaml:"2.3.4"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.3.3","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var jc={};Ve(jc,{addAnalyticsListener:()=>Xc,recordAction:()=>vr,recordActionBinary:()=>en,setAnalyticsEnabled:()=>i4});function i4(e){kC=e}function vr(e,t,r,n,s){if(!kC)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=J_.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},J_.set(i,o)}Q_||o4()}function en(e,t,r,n,s){vr(!!e,t,r,n,s)}function Xc(e){YC.push(e)}function o4(){Q_=performance.now(),setTimeout(async()=>{let e=performance.now()-Q_;Q_=0;let t=[],r={time:Date.now(),period:e,threadId:zi.threadId,metrics:t};for(let[s,i]of J_){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of KC){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,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 WC()}let n=process.memoryUsage();t.push({metric:"memory",threadId:zi.threadId,byThread:!0,...n});for(let s of YC)s(t);J_=new Map,zi.parentPort?zi.parentPort.postMessage({type:$C,report:r}):JC({report:r})},VC).unref()}async function a4(e,t=6e4){let r=Qp(),n=QC(),s;for(let h of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){s=h.value.time;break}if(Date.now()-t<s)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:T}=p;for(let A of S||[]){let{path:b,method:H,type:F,metric:v,count:P,total:z,distribution:W,threads:Q,...se}=A;P||(P=1);let pe=v+(b?"-"+b:"");H!==void 0&&(pe+="-"+H),F!==void 0&&(pe+="-"+F);let oe=o.get(pe);if(oe){if(oe.threads){let le=oe.threads[T];if(le)oe=le;else{oe.threads[T]=Object.assign({},se);continue}}oe.count||(oe.count=1);let xe=oe.count;for(let le in se){let wt=se[le];typeof wt=="number"&&(oe[le]=(oe[le]*xe+wt*P)/(xe+P))}oe.count+=P,z>=0&&(oe.total+=z,oe.ratio=oe.total/oe.count)}else oe=Object.assign({period:t},A),delete oe.distribution,o.set(pe,oe),oe.byThread&&(oe.threads=[],oe.threads[T]=Object.assign({},se),u.push(oe));if(W){W=W.map(le=>typeof le=="number"?{value:le,count:1}:le);let xe=c.get(pe);xe?xe.push(...W):c.set(pe,W)}}await WC()}for(let h of u){let{path:p,method:S,type:T,metric:A,count:b,total:H,distribution:F,threads:v,...P}=h;v=v.filter(z=>z);for(let z in P){if(typeof h[z]!="number")continue;let W=0;for(let Q of v){let se=Q[z];typeof se=="number"&&(W+=se)}h[z]=W}h.count=v.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((le,wt)=>le.value>wt.value?1:-1);let T=S.count-1,A=[],b=0,H=0,F;for(let le of KC){let wt=T*le;for(;b<wt;)F=p[H++],b+=F.count,H===1&&b--;let Ol=p[H>1?H-2:0];F||(F=p[0]),A.push(F.value-(F.value-Ol.value)*(b-wt)/F.count)}let[v,P,z,W,Q,se,pe,oe,xe]=A;Object.assign(S,{p1:v,p10:P,p25:z,median:W,p75:Q,p90:se,p95:pe,p99:oe,p999:xe})}let l;for(let[h,p]of o)p.id=(0,z_.getNextMonotonicTime)(),p.time=_,n.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||n.primaryStore.put(p.id,p)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,z_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-UC,active:E-PC,time:d,...process.memoryUsage()};n.primaryStore.put(h,p,{append:!0}).then(S=>{S||n.primaryStore.put(h,p)})}UC=f,PC=E}async function vC(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Qp(){return BC||(BC=ot({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function QC(){return HC||(HC=ot({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function l4(){zC=!0;let e=(0,Jc.get)(Wp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await a4(VC,e),await vC(Qp(),c4),await vC(QC(),u4)},Math.min(e/2,2147483647)).unref()}function JC(e,t){let r=e.report;r.threadId=t?.threadId||zi.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(xC+=n.mean*n.count);r.totalBytesProcessed=xC,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(FC.get(t))}),FC.set(t,t.performance.eventLoopUtilization())),r.id=(0,z_.getNextMonotonicTime)(),Qp().primaryStore.put(r.id,r),zC||l4(),_4&&(XC=f4(r))}async function f4(e){if(await XC,!ei){let r=(0,zc.dirname)((0,GC.getLogFilePath)());try{ei=await(0,Kp.open)((0,zc.join)(r,"analytics.log"),"r+")}catch{ei=await(0,Kp.open)((0,zc.join)(r,"analytics.log"),"w+")}}let t=(await ei.stat()).size;if(t>d4){let r=Buffer.alloc(t);await ei.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ei.write(r,{position:0}),await ei.truncate(r.length),t=r.length}await ei.write(JSON.stringify(e)+`
8
- `,t)}var zi,qC,GC,zc,Kp,z_,Jc,Wp,J_,kC,Q_,VC,$C,YC,KC,UC,PC,WC,c4,u4,BC,HC,zC,xC,FC,_4,XC,ei,d4,gs=Oe(()=>{zi=require("worker_threads"),qC=B(Ze());be();GC=B(Y()),zc=require("path"),Kp=require("fs/promises"),z_=B(Ir()),Jc=B(Z()),Wp=B(M());Zt();(0,Jc.initSync)();J_=new Map,kC=(0,Jc.get)(Wp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(i4,"setAnalyticsEnabled");a(vr,"recordAction");je.recordAnalytics=vr;a(en,"recordActionBinary");Q_=0,VC=1e3,$C="analytics-report",YC=[];a(Xc,"addAnalyticsListener");KC=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(o4,"sendAnalytics");a(a4,"aggregation");UC=0,PC=0,WC=a(()=>new Promise(setImmediate),"rest");a(vC,"cleanup");c4=36e5,u4=31536e6;a(Qp,"getRawAnalyticsTable");a(QC,"getAnalyticsTable");(0,qC.setChildListenerByType)($C,JC);a(l4,"startScheduledTasks");xC=0,FC=new Map,_4=!1;a(JC,"recordAnalytics");d4=1e6;a(f4,"logAnalytics")});var Rt=g((f_e,pD)=>{"use strict";var xt=Z();xt.initSync();var E4=require("fs-extra"),h4=require("semver"),tu=require("path"),{monotonicFactory:m4}=require("ulidx"),ZC=m4(),p4=require("util"),eD=require("child_process"),S4=p4.promisify(eD.exec),T4=eD.spawn,ye=tt(),Pe=M(),jp=J(),Br=Y(),X_=hs(),g4=W_(),Zc=wr(),{onMessageByType:R4}=Ze(),{isMainThread:A4}=require("worker_threads"),{Encoder:O4,decode:Zp}=require("msgpackr"),tD=new O4,{isEmpty:Zi}=jp,rD=Zr(),b4=48*36e11,N4=5e9;A4&&R4(Pe.ITC_EVENT_TYPES.RESTART,()=>{tn=void 0,ji=void 0});var{connect:y4,StorageType:nD,RetentionPolicy:sD,AckPolicy:j_,DeliverPolicy:Z_,DiscardPolicy:w4,NatsConnection:u_e,JetStreamManager:l_e,JetStreamClient:__e,StringCodec:d_e,JSONCodec:I4,createInbox:eS,headers:C4,ErrorCode:jC}=require("nats"),{PACKAGE_ROOT:D4}=M(),L4=Qc(),{recordAction:M4}=(gs(),te(jc)),iD=I4(),U4="clustering",P4=L4.engines[ye.NATS_SERVER_NAME],v4=tu.join(D4,"dependencies"),Xp=tu.join(v4,`${process.platform}-${process.arch}`,ye.NATS_BINARY_NAME),zp,Jp,eu,Ji,Xi;pD.exports={runCommand:oD,checkNATSServerInstalled:B4,createConnection:tS,getConnection:ed,getJetStreamManager:ru,getJetStream:cD,getNATSReferences:ir,getServerList:x4,createLocalStream:rS,listStreams:uD,deleteLocalStream:F4,getServerConfig:nu,listRemoteStreams:q4,viewStream:G4,viewStreamIterator:k4,publishToStream:V4,createWorkQueueStream:$4,addSourceToWorkStream:_D,request:K4,removeSourceFromWorkStream:fD,reloadNATS:nS,reloadNATSHub:W4,reloadNATSLeaf:Q4,extractServerName:dD,requestErrorHandler:z4,updateWorkStream:J4,createLocalTableStream:hD,createTableStreams:X4,purgeTableStream:mD,purgeSchemaTableStreams:j4,getStreamInfo:Z4,updateLocalStreams:t3,closeConnection:H4,getJsmServerName:su,addNatsMsgHeader:lD,updateIngestStreamConsumer:Y4,clearClientCache:aD};async function oD(e,t=void 0){let{stdout:r,stderr:n}=await S4(e,{cwd:t});if(n)throw new Error(n.replace(`
6
+ `)},ok="certificate.pem",ak="privateKey.pem",ck="ca.pem";mO.exports={CERTIFICATE_VALUES:ik,CERTIFICATE_PEM_NAME:ok,PRIVATEKEY_PEM_NAME:ak,CA_PEM_NAME:ck}});var Xe=T((Qie,SO)=>{"use strict";var Xt=require("validate.js");Xt.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Xt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Xt.validators.type.checks={Object:function(e){return Xt.isObject(e)&&!Xt.isArray(e)},Array:Xt.isArray,Integer:Xt.isInteger,Number:Xt.isNumber,String:Xt.isString,Date:Xt.isDate,Boolean:function(e){return typeof e=="boolean"}};Xt.validators.hasValidFileExt=function(e,t){return Xt.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};SO.exports={validateObject:uk,validateObjectAsync:lk,validateBySchema:_k};function uk(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Xt(e,t,{format:"flat"});return r?new Error(r):null}a(uk,"validateObject");async function lk(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Xt.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(lk,"validateObjectAsync");function _k(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(_k,"validateBySchema")});var uh=T((Xie,OO)=>{"use strict";var AO=require("fs-extra"),ue=require("joi"),dk=require("os"),{boolean:De,string:yr,number:Ct,array:ch}=ue.types(),{totalmem:TO}=require("os"),Ni=require("path"),fk=W(),Hl=J(),Jie=pO(),gO=U(),Ek=Xe(),RO="log",hk="components",mk="Invalid logging.rotation.maxSize unit. Available units are G, M or K",pk="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Sk="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",Tk="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",gk="rootPath config parameter is undefined",Rk="clustering.enabled config parameter is undefined",wi=Ct.min(0).required(),xl=ch.items({host:yr.required(),port:wi}).empty(null),Gn;OO.exports={configValidator:Ak,routesValidator:Ik,route_constraints:xl};function Ak(e){if(Gn=e.rootPath,Hl.isEmpty(Gn))throw gk;let t=De.required(),r=Ct.min(0).max(1e3).empty(null).default(wk),n=yr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(nc),s=yr.optional().empty(null),i=yr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ue.string().empty(null).default(nc),c=ue.custom(bk).empty(null).default(nc),u=e.clustering?.enabled;if(Hl.isEmpty(u))throw Rk;let _;return u===!0?_=ue.object({enabled:t,hubServer:ue.object({cluster:ue.object({name:ue.required().empty(null),network:ue.object({port:wi,routes:xl}).required()}).required(),leafNodes:ue.object({network:ue.object({port:wi}).required()}).required(),network:ue.object({port:wi}).required()}).required(),leafServer:ue.object({network:ue.object({port:wi,routes:xl}).required(),streams:ue.object({maxAge:Ct.min(120).allow(null).optional(),maxBytes:Ct.min(1).allow(null).optional(),maxMsgs:Ct.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ue.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:De.optional(),databaseLevel:De.optional(),tls:ue.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:De.required(),verify:De.optional()}),user:yr.optional().empty(null)}).required():_=ue.object({enabled:t,tls:ue.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:De.required()})}).required(),ue.object({authentication:ue.object({authorizeLocal:De,cacheTTL:Ct.required(),enableSessions:De}),analytics:ue.object({aggregatePeriod:Ct}),componentsRoot:n.optional(),clustering:_,localStudio:ue.object({enabled:t}).required(),logging:ue.object({auditAuthEvents:ue.object({logFailed:De,logSuccessful:De}),file:De.required(),level:ue.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ue.object({enabled:De.optional(),compress:De.optional(),interval:yr.custom(Nk).optional().empty(null),maxSize:yr.custom(yk).optional().empty(null),path:yr.optional().empty(null).default(nc)}).required(),root:n,stdStreams:De.required(),auditLog:De.required()}).required(),operationsApi:ue.object({network:ue.object({cors:De.optional(),corsAccessList:ch.optional(),headersTimeout:Ct.min(1).optional(),keepAliveTimeout:Ct.min(1).optional(),port:Ct.optional().empty(null),domainSocket:ue.optional().empty("hdb/operations-server").default(nc),securePort:Ct.optional().empty(null),timeout:Ct.min(1).optional()}).optional(),tls:ue.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:yr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ue.object({network:ue.object({port:wi,securePort:wi,mtls:ue.alternatives([De.optional(),ue.object({user:yr.optional(),certificateAuthority:s,required:De.optional()})])}).required(),webSocket:De.optional(),requireAuthentication:De.optional()}),http:ue.object({compressionThreshold:Ct.optional(),cors:De.optional(),corsAccessList:ch.optional(),headersTimeout:Ct.min(1).optional(),port:Ct.min(0).optional().empty(null),securePort:Ct.min(0).optional().empty(null),mtls:ue.alternatives([De.optional(),ue.object({user:yr.optional(),certificateAuthority:s,required:De.optional()})])}).required(),threads:r.optional(),maxHeapMemory:Ct.min(0).optional(),storage:ue.object({writeAsync:De.required(),overlappingSync:De.optional(),caching:De.optional(),compression:De.optional(),noReadAhead:De.optional(),path:c,prefetchWrites:De.optional()}).required(),ignoreScripts:De.optional(),tls:ue.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:yr.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(Ak,"configValidator");function Ok(e){return AO.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Ok,"doesPathExist");function bk(e,t){ue.assert(e,yr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Ok(e);if(r)return t.message(r)}a(bk,"validatePath");function yk(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(mk);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Sk):e}a(yk,"validateRotationMaxSize");function Nk(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(pk);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Tk):e}a(Nk,"validateRotationInterval");function wk(e,t){let r=t.state.path.join("."),n=dk.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||TO();return i=Math.round(Math.min(i,TO())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),fk.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(wk,"setDefaultThreads");function nc(e,t){let r=t.state.path.join(".");if(!Hl.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Hl.isEmpty(Gn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Ni.join(Gn,hk);case"logging.root":return Ni.join(Gn,RO);case"clustering.leafServer.streams.path":return Ni.join(Gn,"clustering","leaf");case"storage.path":let n=Ni.join(Gn,gO.LEGACY_DATABASES_DIR_NAME);return AO.existsSync(n)?n:Ni.join(Gn,gO.DATABASES_DIR_NAME);case"logging.rotation.path":return Ni.join(Gn,RO);case"operationsApi.network.domainSocket":return r==null?null:Ni.join(Gn,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(nc,"setDefaultRoot");function Ik(e){let t=ue.object({routes:xl});return Ek.validateBySchema({routes:e},t)}a(Ik,"routesValidator")});var Ii={};ke(Ii,{server:()=>je});var bO,je,jt=Oe(()=>{bO=require("../../index"),je={};(0,bO._assignPackageExport)("server",je)});var Ir=T((eoe,UO)=>{"use strict";var wr=U(),Dt=J(),gt=W(),{configValidator:Ck,routesValidator:yO}=uh(),Zt=require("fs-extra"),Dk=require("yaml"),Tn=require("path"),Lk=require("is-number"),wO=require("properties-reader"),Mk=require("lodash"),{handleHDBError:Uk}=ee(),{HTTP_STATUS_CODES:Pk,HDB_ERROR_MSGS:Fl}=br(),Zie=require("minimist"),{server:vk}=(jt(),te(Ii)),{DATABASES_PARAM_CONFIG:sc,CONFIG_PARAMS:Nr,CONFIG_PARAM_MAP:gn}=wr,Bk="Unable to get config value because config is uninitialized",Hk="Config successfully initialized",xk="Error backing up config file",Fk="Empty parameter sent to getConfigValue",IO=Tn.join(wr.PACKAGE_ROOT,"config","yaml",wr.HDB_DEFAULT_CONFIG_FILE),qk="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",NO={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"},ql,Rt,Gl;UO.exports={createConfigFile:Gk,getDefaultConfig:kk,getConfigValue:DO,initConfig:_h,flattenConfig:Po,updateConfigValue:LO,updateConfigObject:$k,getConfiguration:Wk,setConfiguration:Qk,readConfigFile:fh,getClusteringRoutes:zk,initOldConfig:MO,getConfigFromFile:Jk,getConfigFilePath:Ci,addConfig:Xk,deleteConfigFromFile:jk,getConfigObj:Zk};function Gk(e){let t=Ks(IO);ql=Po(t.toJSON());let r;for(let o in e){let c=gn[o.toLowerCase()];if(c===Nr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=lh(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){gt.error(l)}}}r&&CO(t,r),dh(t);let n=t.toJSON();Rt=Po(n);let s=t.getIn(["rootPath"]),i=Tn.join(s,wr.HDB_CONFIG_FILE);Zt.createFileSync(i),Zt.writeFileSync(i,String(t)),gt.trace(`Config file written to ${i}`)}a(Gk,"createConfigFile");function CO(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Dt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(sc.TABLES))for(let i in n[s][sc.TABLES])for(let o in n[s][sc.TABLES][i]){let c=n[s][sc.TABLES][i][o],u=[Nr.DATABASES,s,sc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in n[s]){let o=n[s][i],c=[Nr.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){gt.error("Error parsing schemas CLI/env config arguments",n)}}a(CO,"setSchemasConfig");function kk(e){if(ql===void 0){let r=Ks(IO);ql=Po(r.toJSON())}let t=gn[e.toLowerCase()];if(t!==void 0)return ql[t.toLowerCase()]}a(kk,"getDefaultConfig");function DO(e){if(e==null){gt.error(Fk);return}if(Rt===void 0){gt.trace(Bk);return}let t=gn[e.toLowerCase()];if(t!==void 0)return Rt[t.toLowerCase()]}a(DO,"getConfigValue");function Ci(e=Dt.getPropsFilePath()){let t=Dt.getEnvCliRootPath();return t?Tn.join(t,wr.HDB_CONFIG_FILE):wO(e).get(wr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Ci,"getConfigFilePath");function _h(e=!1){if(Rt===void 0||e){let t;if(!Dt.noBootFile()){t=Dt.getPropsFilePath();try{Zt.accessSync(t,Zt.constants.F_OK|Zt.constants.R_OK)}catch(i){throw gt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Ci(t),n;if(r.includes("config/settings.js"))try{MO(r);return}catch(i){if(i.code!==wr.NODE_ERROR_CODES.ENOENT)throw i}try{n=Ks(r)}catch(i){if(i.code===wr.NODE_ERROR_CODES.ENOENT){gt.trace(`HarperDB config file not found at ${r}.
7
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw gt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Vk(n,r),dh(n);let s=n.toJSON();if(vk.config=s,Rt=Po(s),Rt.logging_rotation_rotate)for(let i in NO)Rt[i]&&gt.error(`Config ${NO[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);gt.trace(Hk)}}a(_h,"initConfig");function Vk(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Tn.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Tn.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Tn.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(gt.trace("Updating config file with missing config params"),Zt.writeFileSync(t,String(e)))}a(Vk,"checkForUpdatedConfig");function dh(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=Ck(t);if(r.error)throw Fl.CONFIG_VALIDATION(r.error.message);e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],r.value?.operationsApi?.network?.domainSocket)}a(dh,"validateConfig");function $k(e,t){Rt===void 0&&(Rt={});let r=gn[e.toLowerCase()];if(r===void 0){gt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Rt[r.toLowerCase()]=t}a($k,"updateConfigObject");function LO(e,t,r=void 0,n=!1,s=!1,i=!1){Rt===void 0&&_h();let o=DO(gn.hdb_root),c=Tn.join(o,wr.HDB_CONFIG_FILE),u=Ks(c),_;if(r===void 0&&e.toLowerCase()===Nr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=gn[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=lh(f,t);u.setIn([...E],h)}else for(let f in r){let E=gn[f.toLowerCase()];if(E===Nr.HTTP_SECUREPORT&&r[f]===Rt[Nr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Nr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===Rt[Nr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Nr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=wr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=lh(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(O){gt.error(O)}}}_&&CO(u,_),dh(u);let l=u.getIn(["rootPath"]),d=Tn.join(l,wr.HDB_CONFIG_FILE);n===!0&&Yk(c,l),Zt.writeFileSync(d,String(u)),s&&(Rt=Po(u.toJSON())),gt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(LO,"updateConfigValue");function Yk(e,t){try{let r=Tn.join(t,"backup",`${wr.HDB_CONFIG_FILE}.bak`);Zt.copySync(e,r),gt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){gt.error(xk),gt.error(r)}}a(Yk,"backupConfigFile");var Kk=["databases"];function Po(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),Gl=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])&&!Kk.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Nr[u.toUpperCase()]&&gn[u]&&(s[gn[u].toLowerCase()]=o[c]),s[u]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Po,"flattenConfig");function lh(e,t){if(e===Nr.CLUSTERING_NODENAME||e===Nr.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(Lk(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Dt.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 Dt.autoCast(t)}a(lh,"castConfigValue");function Wk(){let e=Dt.getPropsFilePath(),t=Ci(e);return Ks(t).toJSON()}a(Wk,"getConfiguration");async function Qk(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return LO(void 0,void 0,s,!0),qk}catch(i){throw typeof i=="string"||i instanceof String?Uk(i,i,Pk.BAD_REQUEST,void 0,void 0,!0):i}}a(Qk,"setConfiguration");function fh(){let e=Dt.getPropsFilePath();try{Zt.accessSync(e,Zt.constants.F_OK|Zt.constants.R_OK)}catch(n){if(!Dt.noBootFile())throw gt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Ci(e);return Ks(t).toJSON()}a(fh,"readConfigFile");function Ks(e){return Dk.parseDocument(Zt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Ks,"parseYamlDoc");function zk(){let e=fh(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Dt.isEmptyOrZeroLength(t)?[]:t;let r=yO(t);if(r)throw Fl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Dt.isEmptyOrZeroLength(n)?[]:n;let s=yO(n);if(s)throw Fl.CONFIG_VALIDATION(s.message);if(!Dt.isEmptyOrZeroLength(n)&&!Dt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Dt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Fl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(zk,"getClusteringRoutes");function MO(e){let t=wO(e);Rt={};for(let r in gn){let n=t.get(r.toUpperCase());if(Dt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=gn[r].toLowerCase();s===Nr.LOGGING_ROOT?Rt[s]=Tn.dirname(n):Rt[s]=n}return Rt}a(MO,"initOldConfig");function Jk(e){let t=fh();return Mk.get(t,e.replaceAll("_","."))}a(Jk,"getConfigFromFile");async function Xk(e,t){let r=Ks(Ci());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Zt.writeFile(Ci(),String(r))}a(Xk,"addConfig");function jk(e){let t=Ci(Dt.getPropsFilePath()),r=Ks(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Tn.join(n,wr.HDB_CONFIG_FILE);Zt.writeFileSync(s,String(r))}a(jk,"deleteConfigFromFile");function Zk(){return Gl||(_h(),Gl)}a(Zk,"getConfigObj")});var Z=T((roe,HO)=>{"use strict";var Eh=require("fs-extra"),Di=require("path"),PO=require("os"),eV=require("properties-reader"),oc=W(),ic=J(),_e=U(),kl=Ir(),tV="Error initializing environment manager",Vl="BOOT_PROPS_FILE_PATH",vO=!1,rV={[_e.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Es={};HO.exports={BOOT_PROPS_FILE_PATH:Vl,getHdbBasePath:nV,setHdbBasePath:sV,get:BO,initSync:oV,setProperty:Le,initTestEnvironment:aV};function nV(){return Es[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(nV,"getHdbBasePath");function sV(e){Es[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(sV,"setHdbBasePath");function BO(e){let t=kl.getConfigValue(e);return t===void 0?Es[e]:t}a(BO,"get");function Le(e,t){rV[e]&&(Es[e]=t),kl.updateConfigObject(e,t)}a(Le,"setProperty");function iV(){let e;try{e=ic.getPropsFilePath(),Eh.accessSync(e,Eh.constants.F_OK|Eh.constants.R_OK),vO=!0;let t=eV(e);return Es[_e.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(_e.HDB_SETTINGS_NAMES.INSTALL_USER),Es[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Es[Vl]=e,!0}catch{return oc.trace(`Environment manager found no properties file at ${e}`),!1}}a(iV,"doesPropFileExist");function oV(e=!1){try{(vO||iV()||ic.noBootFile())&&(kl.initConfig(e),Es[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=kl.getConfigValue(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){oc.error(tV),oc.error(t),console.error(t),process.exit(1)}}a(oV,"initSync");function aV(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Di.join(__dirname,"../../","unitTests");Es[Vl]=Di.join(u,"hdb_boot_properties.file"),Le(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Di.join(u,"settings.test")),Le(_e.HDB_SETTINGS_NAMES.INSTALL_USER,PO.userInfo()?PO.userInfo().username:void 0),Le(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Le(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Di.join(u,"envDir","log")),Le(_e.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Le(_e.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Le(_e.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Le(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Di.join(u,"envDir")),Le(_e.CONFIG_PARAMS.STORAGE_PATH,Di.join(u,"envDir")),s&&(Le(_e.CONFIG_PARAMS.HTTP_SECUREPORT,BO(_e.CONFIG_PARAMS.HTTP_PORT)),Le(_e.CONFIG_PARAMS.HTTP_PORT,null)),Le(_e.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Le(_e.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Le(_e.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,ic.isEmpty(i)?!1:i),Le(_e.CONFIG_PARAMS.HTTP_CORS,ic.isEmpty(i)?!1:i),Le(_e.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Le(_e.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Le(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Le(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Le(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Di.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Le(_e.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,ic.isEmpty(c)?!1:c),o&&(Le("CORS_ACCESSLIST",o),Le(_e.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Le(_e.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Le(_e.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Le(_e.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Le(_e.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Le(_e.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Le(_e.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Vl}. Please check your boot props and settings files`;oc.fatal(r),oc.error(t)}}a(aV,"initTestEnvironment")});var Ye=T((soe,$O)=>{"use strict";var _c=U(),cV=J(),er=Z(),dc=require("path"),uV=require("minimist"),xO=require("fs-extra"),FO=require("lodash");er.initSync();var{CONFIG_PARAMS:Ws,DATABASES_PARAM_CONFIG:ac,SYSTEM_SCHEMA_NAME:$l}=_c,cc,uc,lc;function qO(){if(cc!==void 0)return cc;if(er.getHdbBasePath()!==void 0)return cc=er.get(Ws.STORAGE_PATH)||dc.join(er.getHdbBasePath(),_c.DATABASES_DIR_NAME),cc}a(qO,"getBaseSchemaPath");function GO(){if(uc!==void 0)return uc;if(er.getHdbBasePath()!==void 0)return uc=VO($l),uc}a(GO,"getSystemSchemaPath");function kO(){if(lc!==void 0)return lc;if(er.getHdbBasePath()!==void 0)return lc=er.get(_c.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||dc.join(er.getHdbBasePath(),_c.TRANSACTIONS_DIR_NAME),lc}a(kO,"getTransactionAuditStoreBasePath");function lV(e,t){let r=er.get(Ws.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||dc.join(kO(),e.toString())}a(lV,"getTransactionAuditStorePath");function VO(e,t){e=e.toString(),t=t&&t.toString();let r=er.get(_c.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||dc.join(qO(),e)}a(VO,"getSchemaPath");function _V(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,uV(process.argv));let n=r[Ws.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!cV.isObject(n))throw o;i=n}for(let o of i){let c=o[$l];if(!c)continue;let u=er.get(Ws.DATABASES);u=u??{};let _=c?.tables?.[t]?.[ac.PATH];if(_)return FO.set(u,[$l,ac.TABLES,t,ac.PATH],_),er.setProperty(Ws.DATABASES,u),_;let l=c?.[ac.PATH];if(l)return FO.set(u,[$l,ac.PATH],l),er.setProperty(Ws.DATABASES,u),l}}let s=r[Ws.STORAGE_PATH.toUpperCase()];if(s){if(!xO.pathExistsSync(s))throw new Error(s+" does not exist");let i=dc.join(s,e);return xO.mkdirsSync(i),er.setProperty(Ws.STORAGE_PATH,s),i}return GO()}a(_V,"initSystemSchemaPaths");function dV(){cc=void 0,uc=void 0,lc=void 0}a(dV,"resetPaths");$O.exports={getBaseSchemaPath:qO,getSystemSchemaPath:GO,getTransactionAuditStorePath:lV,getTransactionAuditStoreBasePath:kO,getSchemaPath:VO,initSystemSchemaPaths:_V,resetPaths:dV}});var Cr=T((coe,zO)=>{"use strict";var fV=br().LMDB_ERRORS_ENUM,ooe=require("lmdb"),EV=lt(),aoe=require("buffer").Buffer,{OVERFLOW_MARKER:YO,MAX_SEARCH_KEY_LENGTH:Yl}=EV,KO=["number","string","symbol","boolean","bigint"];function hV(e){if(e=e?.primaryStore||e,!e)throw new Error(fV.ENV_REQUIRED)}a(hV,"validateEnv");function mV(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(mV,"stringifyData");function pV(e){return e instanceof Date?e.valueOf():e}a(pV,"convertKeyValueToWrite");function SV(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(KO.includes(typeof e))return e.length>Yl?[e.slice(0,Yl)+YO]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(KO.includes(typeof i))i.length>Yl?r.push(i.slice(0,Yl)+YO):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(SV,"getIndexedValues");var Kl=0,WO=0;function QO(){WO=Date.now()-performance.now()}a(QO,"adjustStartTime");QO();var TV=6e4;setInterval(QO,TV).unref();function gV(){let e=performance.now()+WO;return e>Kl?(Kl=e,e):(Kl+=488e-6,Kl)}a(gV,"getNextMonotonicTime");zO.exports={validateEnv:hV,stringifyData:mV,convertKeyValueToWrite:pV,getNextMonotonicTime:gV,getIndexedValues:SV}});var JO,Rn,hh,fc=Oe(()=>{JO=require("events"),Rn=class extends JO.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new hh;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(){return this.queue?.shift()}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)}},hh=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});var Sh={};ke(Sh,{loadGQLSchema:()=>OV,start:()=>ph,startOnMainThread:()=>AV});function ph({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),s)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let H=function(v){if(v.kind==="NonNullType"){let K=H(v.type);return K.nullable=!1,K}if(v.kind==="ListType")return{type:"array",elements:H(v.type)};let $={type:v.name?.value};return Object.defineProperty($,"location",{value:v.loc.startToken}),$};a(H,"getProperty");let O=S.name.value,g=[],R={table:null,database:null,properties:g};f.set(O,R);for(let v of S.directives){if(v.name.value==="table"){for(let M of v.arguments)R[M.name.value]=M.value.value;R.schema&&(R.database=R.schema),R.table||(R.table=O),R.audit&&(R.audit=R.audit!=="false"),R.attributes=R.properties,E.push(R)}if(v.name.value==="sealed"&&(R.sealed=!0),v.name.value==="export"){R.export=!0;for(let M of v.arguments)M.name.value==="name"&&(R.export={name:M.value.value})}}let B=!1;for(let v of S.fields){let M=H(v.type);M.name=v.name.value,g.push(M);for(let $ of v.directives)if($.name.value==="primaryKey")B?console.warn("Can not define two attributes as a primary key"):(M.isPrimaryKey=!0,B=!0);else if($.name.value==="indexed")M.indexed=!0;else if($.name.value==="relationship"){let K={};for(let z of $.arguments)K[z.name.value]=z.value.value;M.relationship=K}else if($.name.value==="createdTime")M.assignCreatedTime=!0;else if($.name.value==="updatedTime")M.assignUpdatedTime=!0;else if($.name.value==="expiresAt")M.expiresAt=!0;else if($.name.value==="allow"){let K=M.authorizedRoles=[];for(let z of $.arguments)z.name.value==="role"&&K.push(z.value.value)}}R.type=O,O==="Query"&&(h=R)}function p(S){let O=f.get(S.type);O?(Object.defineProperty(S,"properties",{value:O.properties}),Object.defineProperty(S,"definition",{value:O})):S.type==="array"?p(S.elements):RV.includes(S.type)||(0,XO.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(p,"connectPropertyType");for(let S of f.values())for(let O of S.properties)p(O);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,mh.dirname)(n),S.tableClass):i.set((0,mh.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var mh,XO,RV,AV,OV,jO=Oe(()=>{mh=require("path");be();XO=x(Ze()),RV=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(ph,"start");AV=ph,OV=ph({ensureTable:ot}).handleFile});async function Wl(e){return bV?(Ec||(Ec=yV(wV)),(await(await Ec).import(e)).namespace):import(e)}async function yV(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ec=new Compartment({console,Math,Date,fetch:NV,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,eb.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:vt,tables:Dr,databases:et})}};let n=await(0,ZO.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Ec}function NV(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 wV(){return{Resource:vt,tables:Dr}}var ZO,eb,bV,Ec,Th=Oe(()=>{An();be();ZO=require("fs/promises"),eb=require("path"),bV=!1;a(Wl,"secureImport");a(yV,"getCompartment");a(NV,"secureOnlyFetch");a(wV,"getGlobalVars")});var Rh={};ke(Rh,{handleFile:()=>IV});async function IV(e,t,r,n){let s=new Map,i=(0,tb.pathToFileURL)(r).toString(),o=await Wl(i);u(o.default)&&n.set((0,gh.dirname)(t),o.default),c(o,(0,gh.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?n.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),s}var tb,gh,rb=Oe(()=>{tb=require("url");Th();gh=require("path");a(IV,"handleFile")});var Oh={};ke(Oh,{start:()=>CV});function CV({resources:e}){e.set("login",Ah),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Ah,nb=Oe(()=>{An();a(CV,"start");Ah=class extends vt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var lb={};ke(lb,{parse:()=>yh,streamAsJSON:()=>hc,stringify:()=>Li});function hc(e){return new bh({value:e})}function sb(e){return console.error(e),JSON.stringify(e.toString())}function ib(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Li(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===cb)return ub(e);if(t.resolution)return t.resolution.then(()=>Li(e));throw t}}function ub(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+=ub(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Li(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function yh(e){return MV.test(e)?DV.parse(e):JSON.parse(e)}var ob,ab,DV,LV,cb,bh,MV,Nh=Oe(()=>{ob=require("stream"),ab=x(require("json-bigint-fixes")),DV=(0,ab.default)({useNativeBigInt:!0}),LV=1e4,cb={};BigInt.prototype.toJSON=function(){throw cb};a(hc,"streamAsJSON");bh=class extends ob.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),sb)}catch(s){yield sb(s)}else yield Li(t)}else yield Li(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);ib(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),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>LV?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 ib(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(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(sb,"handleError");a(ib,"when");a(Li,"stringify");a(ub,"jsStringify");MV=/-?\d{16,}/;a(yh,"parse")});var Ob=T((boe,Ab)=>{"use strict";var wh=require("recursive-iterator"),UV=require("alasql"),Ih=require("clone"),_b=J(),{handleHDBError:db,hdb_errors:PV}=ee(),{HDB_ERROR_MSGS:fb,HTTP_STATUS_CODES:Eb}=PV,{getDatabases:vV}=(be(),te(Fe)),BV=["DISTINCT_ARRAY"],hb=Symbol("validateTables"),Ch=Symbol("validateTable"),Ooe=Symbol("getAllColumns"),mb=Symbol("validateAllColumns"),Ql=Symbol("findColumn"),pb=Symbol("validateOrderBy"),mc=Symbol("validateSegment"),Dh=Symbol("validateColumn"),Sb=Symbol("setColumnsForTable"),Tb=Symbol("checkColumnsForAsterisk"),gb=Symbol("validateGroupBy"),Rb=Symbol("hasColumns"),Lh=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[hb](),this[Tb](),this[mb]()}[hb](){if(this[Rb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Ch](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Ch](t.table)})}}[Rb](){let t=!1,r=new wh(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Ch](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=vV();if(!r[t.databaseid])throw db(new Error,fb.SCHEMA_NOT_FOUND(t.databaseid),Eb.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw db(new Error,fb.TABLE_NOT_FOUND(t.databaseid,t.tableid),Eb.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Ih(s);i.table=Ih(t),this.attributes.push(i)})}[Ql](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)}[Tb](){let t=new wh(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[Sb](r.tableid)}[Sb](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new UV.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[mb](){this[mc](this.statement.columns,!1),this[mc](this.statement.joins,!1),this[mc](this.statement.where,!1),this[gb](this.statement.group,!1),this[mc](this.statement.order,!0)}[mc](t,r){if(!t)return;let n=new wh(t),s=[];for(let{node:i,path:o}of n)!_b.isEmpty(i)&&!_b.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[pb](i):s.push(this[Dh](i)));return s}[gb](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&BV.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Ih(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Ql](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[Ql](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.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`}[pb](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[Dh](t)}[Dh](t){let r=this[Ql](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]}};Ab.exports=Lh});var yb=T((Noe,bb)=>{"use strict";var Mh=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};bb.exports=Mh});var wb=T((Ioe,Nb)=>{"use strict";var Uh=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};Nb.exports=Uh});var Lb={};ke(Lb,{HAS_EXPIRATION:()=>Gh,LAST_TIMESTAMP_PLACEHOLDER:()=>Tc,LOCAL_TIMESTAMP:()=>HV,METADATA:()=>pc,NO_TIMESTAMP:()=>vh,PENDING_LOCAL_TIME:()=>kh,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>qh,RecordEncoder:()=>xh,TIMESTAMP_ASSIGN_LAST:()=>FV,TIMESTAMP_ASSIGN_NEW:()=>Cb,TIMESTAMP_ASSIGN_PREVIOUS:()=>Db,TIMESTAMP_PLACEHOLDER:()=>zl,TIMESTAMP_RECORD_PREVIOUS:()=>Bh,fromResource:()=>Zl,getUpdateRecord:()=>Vh,handleLocalTimeForGets:()=>e_});function GV(){return Sc[0]=Sc[0]^64,xV.getFloat64(0)}function Zl(e){Fh=!0;try{return e()}finally{Fh=!1}}function e_(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),u=c?.value,_=u?.[pc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[pc]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[pc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){if(this.timerTracked||(this.timerTracked=!0,Mi.push(new WeakRef(this))),!Fh)try{throw new Error("Read transaction used outside of resource")}catch(u){this.readStack=u.stack}o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Mi.length;u++){let _=Mi[u].deref();(!_||_.isDone||_.isCommitted)&&Mi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function Vh(e,t,r){return function(n,s,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?vo=i?.localTime?Bh|Db:vh:vo=u?i?.localTime?Bh|16384:Cb|16384:vh,l>0&&(c|=Gh),Xl=c,Hh=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:vo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(n,s,h);if(u){let O=_?.user?.username;if(E&&(Jl=e.encoder.encode(E)),f&&i?.localTime){let g=i?.localTime,R=r.get(g);if(R){let B=Lt(R).previousLocalTime;return r.put(g,jl(o,t,n,B,O,d,Jl),{ifVersion:p}),S}}r.put(Tc,jl(o,t,n,i?.localTime?1:0,O,d,Jl),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var Ib,Ph,zl,Tc,qh,HV,pc,Sc,xV,vh,Cb,FV,Db,Bh,Gh,kh,qV,Jl,vo,Xl,Hh,xh,Loe,Fh,Mi,Bo=Oe(()=>{Ib=require("msgpackr");Ui();Ph=x(W()),zl=new Uint8Array([1,1,1,1,4,64,0,0]),Tc=new Uint8Array([1,1,1,1,1,0,0,0]),qh=new Uint8Array([1,1,1,1,3,64,0,0]),HV=Symbol("local-timestamp"),pc=Symbol("metadata"),Sc=new Uint8Array(8),xV=new DataView(Sc.buffer,0,8),vh=0,Cb=0,FV=1,Db=3,Bh=4,Gh=16,kh=1,vo=0,Xl=-1,Hh=0,xh=class extends Ib.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(vo||Xl>=0){let i=0,o=vo;o&&(i+=8,vo=0);let c=Xl,u=Hh;c>=0&&(i+=2,Xl=-1,u&&(i+=8,Hh=0));let _=qV=r.call(this,n,s|2048|i);Jl=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(zl[4]=o,zl[5]=o>>8,_.set(zl,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,u;if(i===2){if(t.copy)t.copy(Sc,0,c),c+=8;else for(let d=0;d<8;d++)Sc[d]=t[c++];u=GV(),i=t[c]}let _;i<32&&(o=i,c+=2,o&Gh&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,s),s-c);return{localTime:u,value:l,[pc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(GV,"getTimestamp");Loe=Map.prototype.get;a(Zl,"fromResource");a(e_,"handleLocalTimeForGets");Mi=[];setInterval(()=>{for(let e=0;e<Mi.length;e++){let t=Mi[e].deref();!t||t.isDone||t.isCommitted?Mi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Ph.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Ph.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();a(Vh,"getUpdateRecord")});var t_=T((Uoe,Mb)=>{"use strict";var Yh=Z(),Kh=U(),{RecordEncoder:kV}=(Bo(),te(Lb));Yh.initSync();var VV=Yh.get(Kh.CONFIG_PARAMS.STORAGE_COMPRESSION),$V=Yh.get(Kh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,YV=Kh.UPDATES_PROPERTY,$h=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=VV&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=$V&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:kV},this.alwaysLazyProperty=n=>n===YV)}};Mb.exports=$h});var n_=T((voe,Pb)=>{"use strict";var Ho=Z(),gc=U();Ho.initSync();var KV=Ho.get(gc.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Ho.get(gc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Ho.get(gc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Ub=Ho.get(gc.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),WV=Ho.get(gc.CONFIG_PARAMS.STORAGE_NOREADAHEAD),r_=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=KV,this.noFSAccess=!0,Ub!==void 0&&(this.overlappingSync=Ub),this.noReadAhead=WV}};Pb.exports=r_;r_.MAX_DBS=1e4});var Ve=T((Hoe,$b)=>{"use strict";var Qh=require("lmdb"),On=require("fs-extra"),Lr=require("path"),s_=Cr(),Hb=W(),tr=br().LMDB_ERRORS_ENUM,i_=wb(),zh=t_(),xb=n_(),Qs=lt(),vb=U(),{table:QV,resetDatabases:zV}=(be(),te(Fe)),Bb=Z(),bn=Qs.INTERNAL_DBIS_NAME,Fb=Qs.DBI_DEFINITION_NAME,JV="data.mdb",XV="lock.mdb",Rc=".mdb",jV="-lock",Wh=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Xr(t,r),this.key_type=this.dbi[Qs.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Qs.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new Qh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function o_(e,t){if(e===void 0)throw new Error(tr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(tr.ENV_NAME_REQUIRED)}a(o_,"pathEnvNameValidation");async function Jh(e,t,r=!0){try{await On.access(e)}catch(n){throw n.code==="ENOENT"?new Error(tr.INVALID_BASE_PATH):n}try{let n=Lr.join(e,t+Rc);return await On.access(n,On.constants.R_OK|On.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await On.access(Lr.join(e,t,JV),On.constants.R_OK|On.constants.F_OK),Lr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(tr.INVALID_ENVIRONMENT)}else throw new Error(tr.INVALID_ENVIRONMENT);throw n}}a(Jh,"validateEnvironmentPath");function a_(e,t){if(s_.validateEnv(e),t===void 0)throw new Error(tr.DBI_NAME_REQUIRED)}a(a_,"validateEnvDBIName");async function ZV(e,t,r=!1,n=!1){o_(e,t);let s=Lr.basename(e);t=t.toString();let i=Bb.get(vb.CONFIG_PARAMS.DATABASES);i||Bb.setProperty(vb.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Jh(e,t,n),qb(e,t,r)}catch(o){if(o.message===tr.INVALID_ENVIRONMENT){let c=Lr.join(e,t);await On.mkdirp(n?c:e);let u=new xb(n?c:c+Rc,!1),_=Qh.open(u);_.dbis=Object.create(null);let l=new zh(!1);_.openDB(bn,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Xh(e,t,r);return _[Qs.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(ZV,"createEnvironment");async function e$(e,t,r,n=!0){o_(e,t),t=t.toString();let s=Lr.join(e,t);return QV({table:t,database:Lr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(e$,"copyEnvironment");async function qb(e,t,r=!1){o_(e,t),t=t.toString();let n=Xh(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 Jh(e,t),i=Lr.join(e,t+Rc),o=s!=i,c=new xb(s,o),u=Qh.open(c);u.dbis=Object.create(null);let _=kb(u);for(let l=0;l<_.length;l++)Xr(u,_[l]);return u[Qs.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=u,u}a(qb,"openEnvironment");async function t$(e,t,r=!1){o_(e,t),t=t.toString();let n=Lr.join(e,t+Rc),s=await Jh(e,t);if(global.lmdb_map!==void 0){let i=Xh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Gb(o),delete global.lmdb_map[i]}}await On.remove(s),await On.remove(s===n?s+jV:Lr.join(Lr.dirname(s),XV))}a(t$,"deleteEnvironment");async function Gb(e){s_.validateEnv(e);let t=e[Qs.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Gb,"closeEnvironment");function Xh(e,t,r=!1){let s=`${Lr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(Xh,"getCachedEnvironmentName");function r$(e){s_.validateEnv(e);let t=Object.create(null),r=Xr(e,bn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==bn)try{t[n]=Object.assign(new i_,s)}catch{Hb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(r$,"listDBIDefinitions");function kb(e){s_.validateEnv(e);let t=[],r=Xr(e,bn);for(let{key:n}of r.getRange({start:!1}))n!==bn&&t.push(n);return t}a(kb,"listDBIs");function n$(e,t){let n=Xr(e,bn).getEntry(t),s=new i_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{Hb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(n$,"getDBIDefinition");function Vb(e,t,r,n=!r){if(a_(e,t),t=t.toString(),t===bn)throw new Error(tr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Xr(e,t)}catch(s){if(s.message===tr.DBI_DOES_NOT_EXIST){let i=new zh(r,n===!0),o=e.openDB(t,i),c=new i_(r===!0,n);return o[Fb]=c,Xr(e,bn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(Vb,"createDBI");function Xr(e,t){if(a_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==bn?r=n$(e,t):r=new i_,r===void 0)throw new Error(tr.DBI_DOES_NOT_EXIST);let n;try{let s=new zh(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(tr.DBI_DOES_NOT_EXIST):s}return n[Fb]=r,e.dbis[t]=n,n}a(Xr,"openDBI");function s$(e,t){a_(e,t),t=t.toString();let r=Xr(e,t),n=r.getStats();return r[Qs.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(s$,"statDBI");async function i$(e,t){try{let r=Lr.join(e,t+Rc);return(await On.stat(r)).size}catch{throw new Error(tr.INVALID_ENVIRONMENT)}}a(i$,"environmentDataSize");function o$(e,t){if(a_(e,t),t=t.toString(),t===bn)throw new Error(tr.CANNOT_DROP_INTERNAL_DBIS_NAME);Xr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Xr(e,bn).removeSync(t)}a(o$,"dropDBI");function a$(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Xr(e,i)}catch(o){if(o.message===tr.DBI_DOES_NOT_EXIST)Vb(e,i,i!==t,i===t),n=!0;else throw o}}n&&zV()}a(a$,"initializeDBIs");$b.exports={openDBI:Xr,openEnvironment:qb,createEnvironment:ZV,listDBIs:kb,listDBIDefinitions:r$,createDBI:Vb,dropDBI:o$,statDBI:s$,deleteEnvironment:t$,initializeDBIs:a$,TransactionCursor:Wh,environmentDataSize:i$,copyEnvironment:e$,closeEnvironment:Gb}});var Kb=T((Foe,Yb)=>{"use strict";var jh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};Yb.exports=jh});var Qb=T((Goe,Wb)=>{"use strict";var Zh=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};Wb.exports=Zh});var Jb=T((Voe,zb)=>{"use strict";var em=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};zb.exports=em});var xo=T((Qoe,Zb)=>{"use strict";var c$=Ve(),u$=Kb(),l$=Qb(),_$=Jb(),kn=Cr(),Ac=br().LMDB_ERRORS_ENUM,d$=lt(),hs=U(),f$=J(),E$=require("uuid"),Yoe=require("lmdb"),{handleHDBError:h$,hdb_errors:m$}=ee(),{OVERFLOW_MARKER:Koe,MAX_SEARCH_KEY_LENGTH:Woe}=d$,Xb=Z();Xb.initSync();var c_=Xb.get(hs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),tm=hs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Pi=hs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function p$(e,t,r,n,s=kn.getNextMonotonicTime()){im(e,t,r,n),rm(e,t,r);let i=new u$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u];jb(_,!0,s);let l=S$(e,t,r,_),d=_[t];o.push(l),c.push(d)}return nm(o,c,n,i,s)}a(p$,"insertRecords");function S$(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][hs.FUNC_VAL],n[o]=c)}let u=kn.getIndexedValues(c),_=e.dbis[o];if(u){c_&&_.prefetch(u.map(l=>({key:l,value:s})),u_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],s)}}c_&&e.dbis[t].prefetch([s],u_),e.dbis[t].put(s,n,n[Pi])})}a(S$,"insertRecord");function T$(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(T$,"removeSkippedRecords");function jb(e,t,r){let n=r>0;(n||!Number.isInteger(e[Pi]))&&(e[Pi]=r||(r=kn.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[tm]))&&(e[tm]=r||kn.getNextMonotonicTime()):delete e[tm]}a(jb,"setTimestamps");function rm(e,t,r){r.indexOf(hs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(hs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(hs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(hs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),c$.initializeDBIs(e,t,r)}a(rm,"initializeTransaction");async function g$(e,t,r,n,s=kn.getNextMonotonicTime()){im(e,t,r,n),rm(e,t,r);let i=new l$,o=[],c=[],u=[];for(let _=0;_<n.length;_++){let l=n[_],d=l[t],f;try{f=sm(e,t,l,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return nm(c,u,n,i,s,o)}a(g$,"updateRecords");async function R$(e,t,r,n,s=kn.getNextMonotonicTime()){try{im(e,t,r,n)}catch(u){throw h$(u,u.message,m$.HTTP_STATUS_CODES.BAD_REQUEST)}rm(e,t,r);let i=new _$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u],l;f$.isEmpty(_[t])?(l=E$.v4(),_[t]=l):l=_[t];let d=sm(e,t,_,l,i,!1,s);o.push(d),c.push(l)}return nm(o,c,n,i,s)}a(R$,"upsertRecords");async function nm(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||kn.getNextMonotonicTime(),T$(r,i),n}a(nm,"finalizeWrite");function sm(e,t,r,n,s,i=!1,o){let c=e.dbis[t],u=c.getEntry(n),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(jb(r,!l,o),Number.isInteger(r[Pi])&&_[Pi]>r[Pi])return!1;l&&s.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let O=_[h];if(typeof p=="function"){let R=p([[_]]);Array.isArray(R)&&(p=R[0][hs.FUNC_VAL],r[h]=p)}if(p===O)continue;let g=kn.getIndexedValues(O);if(g){c_&&S.prefetch(g.map(R=>({key:R,value:n})),u_);for(let R=0,B=g.length;R<B;R++)S.remove(g[R],n)}if(g=kn.getIndexedValues(p),g){c_&&S.prefetch(g.map(R=>({key:R,value:n})),u_);for(let R=0,B=g.length;R<B;R++)S.put(g[R],n)}}let E=Object.assign({},_,r);c.put(n,E,E[Pi])},"do_put");return u?d=c.ifVersion(n,u.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:sm(e,t,r,n,s,i,o))}a(sm,"updateUpsertRecord");function A$(e,t,r){if(kn.validateEnv(e),t===void 0)throw new Error(Ac.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ac.WRITE_ATTRIBUTES_REQUIRED):new Error(Ac.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(A$,"validateBasic");function im(e,t,r,n){if(A$(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Ac.RECORDS_REQUIRED):new Error(Ac.RECORDS_MUST_BE_ARRAY)}a(im,"validateWrite");function u_(){}a(u_,"noop");Zb.exports={insertRecords:p$,updateRecords:g$,upsertRecords:R$}});var vi=T((Joe,O$)=>{O$.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},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:"__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:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},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:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},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 $n=T((Xoe,ry)=>{"use strict";var ty=J(),ey=U(),Fo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Vn=require("joi"),zs={schema_format:{pattern:Fo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},b$=Vn.alternatives(Vn.string().min(1).max(zs.schema_length.maximum).pattern(Fo).messages({"string.pattern.base":"{:#label} "+zs.schema_format.message}),Vn.number(),Vn.array()).required(),y$=Vn.alternatives(Vn.string().min(1).max(zs.schema_length.maximum).pattern(Fo).messages({"string.pattern.base":"{:#label} "+zs.schema_format.message}),Vn.number()),N$=Vn.alternatives(Vn.string().min(1).max(zs.schema_length.maximum).pattern(Fo).messages({"string.pattern.base":"{:#label} "+zs.schema_format.message}),Vn.number()).required();function w$(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>zs.schema_length.maximum?`'${e}' maximum of 250 characters`:Fo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(w$,"checkValidTable");function I$(e,t){return ty.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(I$,"validateSchemaExists");function C$(e,t){let r=t.state.ancestors[0].schema;return ty.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(C$,"validateTableExists");function D$(e,t){return e.toLowerCase()===ey.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${ey.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(D$,"validateSchemaName");ry.exports={common_validators:zs,schema_regex:Fo,hdb_schema_table:b$,validateSchemaExists:I$,validateTableExists:C$,validateSchemaName:D$,checkValidTable:w$,hdb_database:y$,hdb_table:N$}});var l_=T((Zoe,ny)=>{var{common_validators:Yn}=$n(),bc=Xe(),Oc="is required",_t={database:{presence:!1,format:Yn.schema_format,length:Yn.schema_length},schema:{presence:!1,format:Yn.schema_format,length:Yn.schema_length},table:{presence:!0,format:Yn.schema_format,length:Yn.schema_length},attribute:{presence:!0,format:Yn.schema_format,length:Yn.schema_length},hash_attribute:{presence:!0,format:Yn.schema_format,length:Yn.schema_length}};function yc(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(yc,"makeAttributesStrings");function L$(e){return e=yc(e),_t.table.presence=!1,_t.attribute.presence=!1,_t.hash_attribute.presence=!1,bc.validateObject(e,_t)}a(L$,"schema_object");function M$(e){return e=yc(e),_t.table.presence={message:Oc},_t.attribute.presence=!1,_t.hash_attribute.presence=!1,bc.validateObject(e,_t)}a(M$,"table_object");function U$(e){return e=yc(e),_t.table.presence={message:Oc},_t.attribute.presence=!1,bc.validateObject(e,_t)}a(U$,"create_table_object");function P$(e){return e=yc(e),_t.table.presence={message:Oc},_t.attribute.presence={message:Oc},_t.hash_attribute.presence=!1,bc.validateObject(e,_t)}a(P$,"attribute_object");function v$(e){return e=yc(e),_t.table.presence={message:Oc},_t.attribute.presence=!1,_t.hash_attribute.presence=!1,bc.validateObject(e,_t)}a(v$,"describe_table");function B$(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(B$,"validateTableResidence");ny.exports={schema_object:L$,create_table_object:U$,table_object:M$,attribute_object:P$,describe_table:v$,validateTableResidence:B$}});var iy=T((tae,sy)=>{"use strict";var H$=require("uuid"),om=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||H$.v4(),this.schema_table=`${this.schema}.${this.table}`}};sy.exports=om});var __=T((nae,oy)=>{"use strict";var x$=iy(),am=class extends x${static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};oy.exports=am});var cy=T((iae,ay)=>{"use strict";ay.exports=q$;var F$="inserted";function q$(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===F$?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(q$,"returnObject")});var d_=T((aae,fy)=>{"use strict";var G$=U(),cm=Ve(),k$=xo(),{getSystemSchemaPath:V$,getSchemaPath:$$}=Ye(),Y$=vi(),K$=l_(),W$=__(),Q$=cy(),{handleHDBError:uy,hdb_errors:_y}=ee(),ly=J(),{HTTP_STATUS_CODES:z$}=_y,um=Y$.hdb_attribute,dy=[];for(let e=0;e<um.attributes.length;e++)dy.push(um.attributes[e].attribute);var J$="inserted";fy.exports=X$;async function X$(e){let t=K$.attribute_object(e);if(t)throw uy(new Error,t.message,_y.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&ly.checkGlobalSchemaTable(e.schema,e.table);if(r)throw uy(new Error,r,z$.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=ly.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 W$(e.schema,e.table,e.attribute,e.id);try{let i=await cm.openEnvironment($$(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);cm.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await cm.openEnvironment(V$(),G$.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await k$.insertRecords(o,um.hash_attribute,dy,[s]);return Q$(J$,c,{records:[s]},u)}catch(i){throw i}}a(X$,"lmdbCreateAttribute")});var _m=T((uae,hy)=>{var{hdb_table:j$,hdb_database:Ey}=$n(),Z$=Xe(),lm=require("joi"),e1={undefined:"undefined",null:"null"},t1=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||e1[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),r1=lm.object({database:Ey,schema:Ey,table:j$,records:lm.array().items(lm.object().custom(t1)).required()});hy.exports=function(e){return Z$.validateBySchema(e,r1)}});var Nc=T((dae,py)=>{"use strict";var ms=J(),my=W(),_ae=_m(),{getDatabases:n1}=(be(),te(Fe)),{ClientError:Bi}=ee();py.exports=s1;function s1(e){if(ms.isEmpty(e))throw new Bi("invalid update parameters defined.");if(ms.isEmptyOrZeroLength(e.schema))throw new Bi("invalid schema specified.");if(ms.isEmptyOrZeroLength(e.table))throw new Bi("invalid table specified.");if(!Array.isArray(e.records))throw new Bi("records must be an array");let t=n1()[e.schema]?.[e.table];if(ms.isEmpty(t))throw new Bi(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&ms.isEmptyOrZeroLength(o[r]))throw my.error("a valid hash attribute must be provided with update record:",o),new Bi("a valid hash attribute must be provided with update record, check log for more info");if(!ms.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw my.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Bi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!ms.isEmpty(o[r])&&o[r]!==""&&n.has(ms.autoCast(o[r]))&&(o.skip=!0),n.add(ms.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(s1,"insertUpdateValidate")});var wc=T((Eae,Sy)=>{"use strict";var i1=U().OPERATIONS_ENUM,dm=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=i1.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Sy.exports=dm});var Lc=T((pae,Ty)=>{"use strict";var mae=wc(),f_=U(),Em=J(),fm=W(),o1=require("uuid"),{handleHDBError:Ic,hdb_errors:a1}=ee(),{HDB_ERROR_MSGS:Cc,HTTP_STATUS_CODES:Dc}=a1;Ty.exports=c1;function c1(e,t,r){for(let s=0;s<t.length;s++)u1(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];l1(i,r,e.operation)}}a(c1,"processRows");function u1(e){if(Buffer.byteLength(String(e))>f_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ic(new Error,Cc.ATTR_NAME_LENGTH_ERR(e),Dc.BAD_REQUEST,void 0,void 0,!0);if(Em.isEmptyOrZeroLength(e)||Em.isEmpty(e.trim()))throw Ic(new Error,Cc.ATTR_NAME_NULLISH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0)}a(u1,"validateAttribute");function l1(e,t,r){if(!e.hasOwnProperty(t)||Em.isEmptyOrZeroLength(e[t])){if(r===f_.OPERATIONS_ENUM.INSERT||r===f_.OPERATIONS_ENUM.UPSERT){e[t]=o1.v4();return}throw fm.error("Update transaction aborted due to record with no hash value:",e),Ic(new Error,Cc.RECORD_MISSING_HASH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>f_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw fm.error(e),Ic(new Error,Cc.HASH_VAL_LENGTH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw fm.error(e),Ic(new Error,Cc.INVALID_FORWARD_SLASH_IN_HASH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0)}a(l1,"validateHash")});var Ry=T((Tae,gy)=>{"use strict";var hm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};gy.exports=hm});var by=T((Rae,Oy)=>{"use strict";var mm=Ve(),_1=W(),Ay=br().LMDB_ERRORS_ENUM;Oy.exports=d1;async function d1(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await mm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==Ay.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await mm.closeEnvironment(global.lmdb_map[n]),await mm.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==Ay.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){_1.error(t)}}a(d1,"cleanLMDBMap")});var ps=T((Oae,Iy)=>{"use strict";var Mc=require("crypto"),f1=Z(),{CONFIG_PARAMS:E1}=U(),Ny="aes-256-cbc",h1=32,m1=16,pm=64,wy=32,p1=pm+wy,yy=new Map;Iy.exports={encrypt:S1,decrypt:T1,createNatsTableStreamName:g1};function S1(e){let t=Mc.randomBytes(h1),r=Mc.randomBytes(m1),n=Mc.createCipheriv(Ny,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(S1,"encrypt");function T1(e){let t=e.substr(0,pm),r=e.substr(pm,wy),n=e.substr(p1,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Mc.createDecipheriv(Ny,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(T1,"decrypt");function g1(e,t){let r=f1.get(E1.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=yy.get(r);return n||(n=Mc.createHash("md5").update(r).digest("hex"),yy.set(r,n)),n}a(g1,"createNatsTableStreamName")});var Hi=T((Nae,Dy)=>{"use strict";var yae=jr(),E_=W(),Cy=l_(),R1=ps(),h_=J(),{handleHDBError:m_,hdb_errors:A1}=ee(),{HDB_ERROR_MSGS:p_,HTTP_STATUS_CODES:Sm}=A1,O1=Z();O1.initSync();var{getDatabases:Tm}=(be(),te(Fe));Dy.exports={describeAll:b1,describeTable:S_,describeSchema:y1};async function b1(e){try{let t=h_.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=Tm(),i={},o={},c=[],u=e?.exact_count;for(let l in s){i[l]=!0,!t&&!n&&(o[l]=e.hdb_user.role.permission[l].describe);let d=s[l];for(let f in d)try{let E;if(t||n)E=await S_({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await S_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){E_.error(E)}}let _={};for(let l in c)t||n?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||n?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return E_.error("Got an error in describeAll"),E_.error(t),m_(new Error,p_.DESCRIBE_ALL_ERR)}}a(b1,"describeAll");async function S_(e,t){h_.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=Cy.describe_table(e);if(i)throw i;let c=Tm()[r];if(!c)throw m_(new Error,p_.SCHEMA_NOT_FOUND(e.schema),Sm.NOT_FOUND);let u=c[n];if(!u)throw m_(new Error,p_.TABLE_NOT_FOUND(e.schema,e.table),Sm.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(s){let f={};s.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=R1.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){E_.warn(`unable to stat table dbi due to ${f}`)}return d}a(S_,"descTable");async function y1(e){h_.transformReq(e);let t=Cy.schema_object(e);if(t)throw t;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=Tm()[n];if(!i)throw m_(new Error,p_.SCHEMA_NOT_FOUND(e.schema),Sm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),h_.isEmpty(u)||u.describe){let _=await S_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(y1,"describeSchema")});var Js=T((Dae,vy)=>{var N1=vi(),{callbackify:My,promisify:w1}=require("util"),{getDatabases:Uy}=(be(),te(Fe));vy.exports={setSchemaDataToGlobal:Ly,getTableSchema:I1,getSystemSchema:C1,setSchemaDataToGlobalAsync:w1(Ly)};var Py=Hi(),Iae=My(Py.describeAll),Cae=My(Py.describeTable);function Ly(e){global.hdb_schema=Uy(),e&&e()}a(Ly,"setSchemaDataToGlobal");function I1(e,t,r){let n=Uy()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(I1,"getTableSchema");function C1(){return N1}a(C1,"getSystemSchema")});var Zr=T((Mae,Fy)=>{"use strict";var g_=_m(),Bt=J(),D1=require("util"),R_=yn(),L1=Js(),By=W(),{handleHDBError:xi,hdb_errors:M1}=ee(),{HTTP_STATUS_CODES:Fi}=M1,U1=D1.promisify(L1.getTableSchema),P1="updated",Hy="inserted",xy="upserted";Fy.exports={insert:B1,update:H1,upsert:x1,validation:v1,flush:F1};async function v1(e){if(Bt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Bt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Bt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await U1(e.schema,e.table),r=g_(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Bt.isEmptyOrZeroLength(c[n]))throw By.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(!Bt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw By.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Bt.isEmpty(c[n])&&c[n]!==""&&s.has(Bt.autoCast(c[n]))&&(c.skip=!0),s.add(Bt.autoCast(c[n]));for(let u in c)i[u]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(v1,"validation");async function B1(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=g_(e);if(t)throw xi(new Error,t.message,Fi.BAD_REQUEST);Bt.transformReq(e);let r=Bt.checkSchemaTableExist(e.schema,e.table);if(r)throw xi(new Error,r,Fi.BAD_REQUEST);let n=await R_.createRecords(e);return T_(Hy,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(B1,"insertData");async function H1(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=g_(e);if(t)throw xi(new Error,t.message,Fi.BAD_REQUEST);Bt.transformReq(e);let r=Bt.checkSchemaTableExist(e.schema,e.table);if(r)throw xi(new Error,r,Fi.BAD_REQUEST);let n=await R_.updateRecords(e);return Bt.isEmpty(n.existing_rows)?T_(P1,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):T_(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(H1,"updateData");async function x1(e){if(e.operation!=="upsert")throw xi(new Error,"invalid operation, must be upsert",Fi.INTERNAL_SERVER_ERROR);let t=g_(e);if(t)throw xi(new Error,t.message,Fi.BAD_REQUEST);Bt.transformReq(e);let r=Bt.checkSchemaTableExist(e.schema,e.table);if(r)throw xi(new Error,r,Fi.BAD_REQUEST);let n=await R_.upsertRecords(e);return T_(xy,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(x1,"upsertData");function T_(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===Hy?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===xy?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(T_,"returnObject");function F1(e){return Bt.transformReq(e),R_.flush(e.schema,e.table)}a(F1,"flush")});var Rm=T((Pae,ky)=>{var q1=Xe(),gm=require("joi"),{hdb_table:G1,hdb_database:qy}=$n(),Gy={schema:qy,database:qy,table:G1},k1={date:gm.date().iso().required()},V1={timestamp:gm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};ky.exports=function(e,t){let r=t==="timestamp"?{...Gy,...V1}:{...Gy,...k1},n=gm.object(r);return q1.validateBySchema(e,n)}});var Yy=T((vae,$y)=>{var $1=Xe(),Am=require("joi"),{hdb_table:Y1,hdb_database:Vy}=$n(),K1=Am.object({schema:Vy,database:Vy,table:Y1,hash_values:Am.array().required(),ids:Am.array()});$y.exports=function(e){return $1.validateBySchema(e,K1)}});var Wy=T((Bae,Ky)=>{"use strict";var Om=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},bm=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},ym=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Ky.exports={InsertObject:Om,NoSQLSeachObject:bm,DeleteResponseObject:ym}});var ki=T((xae,jy)=>{"use strict";var zy=Rm(),W1=Yy(),qi=J(),Qy=require("moment"),Jy=W(),{promisify:Q1,callbackify:z1}=require("util"),Gi=U(),J1=Js(),Nm=Q1(J1.getTableSchema),wm=yn(),{DeleteResponseObject:X1}=Wy(),{handleHDBError:Xs,hdb_errors:j1}=ee(),{HDB_ERROR_MSGS:A_,HTTP_STATUS_CODES:js}=j1,Z1="records successfully deleted",eY=z1(Xy);jy.exports={delete:eY,deleteRecord:Xy,deleteFilesBefore:tY,deleteAuditLogsBefore:rY};async function tY(e){let t=zy(e,"date");if(t)throw Xs(t,t.message,js.BAD_REQUEST,void 0,void 0,!0);if(qi.transformReq(e),!Qy(e.date,Qy.ISO_8601).isValid())throw Xs(new Error,A_.INVALID_DATE,js.BAD_REQUEST,Gi.LOG_LEVELS.ERROR,A_.INVALID_DATE,!0);let n=qi.checkSchemaTableExist(e.schema,e.table);if(n)throw Xs(new Error,n,js.NOT_FOUND,Gi.LOG_LEVELS.ERROR,n,!0);let s=await wm.deleteRecordsBefore(e);if(await Nm(e.schema,e.table),Jy.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(tY,"deleteFilesBefore");async function rY(e){let t=zy(e,"timestamp");if(t)throw Xs(t,t.message,js.BAD_REQUEST,void 0,void 0,!0);if(qi.transformReq(e),isNaN(e.timestamp))throw Xs(new Error,A_.INVALID_VALUE("Timestamp"),js.BAD_REQUEST,Gi.LOG_LEVELS.ERROR,A_.INVALID_VALUE("Timestamp"),!0);let r=qi.checkSchemaTableExist(e.schema,e.table);if(r)throw Xs(new Error,r,js.NOT_FOUND,Gi.LOG_LEVELS.ERROR,r,!0);let n=await wm.deleteAuditLogsBefore(e);return await Nm(e.schema,e.table),Jy.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(rY,"deleteAuditLogsBefore");async function Xy(e){e.ids&&(e.hash_values=e.ids);let t=W1(e);if(t)throw Xs(t,t.message,js.BAD_REQUEST,void 0,void 0,!0);qi.transformReq(e);let r=qi.checkSchemaTableExist(e.schema,e.table);if(r)throw Xs(new Error,r,js.NOT_FOUND,Gi.LOG_LEVELS.ERROR,r,!0);try{await Nm(e.schema,e.table);let n=await wm.deleteRecords(e);return qi.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Z1}`),n}catch(n){if(n.message===Gi.SEARCH_NOT_FOUND_MESSAGE){let s=new X1;return s.message=Gi.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(Xy,"deleteRecord")});var O_=T((qae,tN)=>{var nY=require("crypto"),Zy=9;function sY(e){let t=oY(Zy),r=eN(e+t);return t+r}a(sY,"createHash");function iY(e,t){let r=e?.substr(0,Zy),n=r+eN(t+r);return e===n}a(iY,"validateHash");function oY(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(oY,"generateSalt");function eN(e){return nY.createHash("md5").update(e).digest("hex")}a(eN,"md5");tN.exports={hash:sY,validate:iY}});var nN=T((kae,rN)=>{var Im=Xe(),Vt={username:{presence:!0,format:"[\\w\\-\\_]+",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 aY(e){return Vt.password.presence=!0,Vt.username.presence=!0,Vt.role.presence=!0,Vt.active.presence=!0,Im.validateObject(e,Vt)}a(aY,"addUserValidation");function cY(e){return Vt.password.presence=!1,Vt.username.presence=!0,Vt.role.presence=!1,Vt.active.presence=!1,Im.validateObject(e,Vt)}a(cY,"alterUserValidation");function uY(e){return Vt.password.presence=!1,Vt.username.presence=!0,Vt.role.presence=!1,Vt.active.presence=!1,Im.validateObject(e,Vt)}a(uY,"dropUserValidation");rN.exports={addUserValidation:aY,alterUserValidation:cY,dropUserValidation:uY}});var tt=T((Yae,iN)=>{"use strict";var{platform:$ae}=require("os"),lY="nats-server.zip",Cm="nats-server",_Y=process.platform==="win32"?`${Cm}.exe`:Cm,Dm="HDB",dY=/^[^\s.,*>]+$/,sN="__request__",fY=a(e=>`${e}.${sN}`,"REQUEST_SUBJECT"),EY={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},hY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},mY={HUB:"hub.pid",LEAF:"leaf.pid"},pY={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},SY={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Dm,deliver_subject:"__HDB__.WORKQUEUE"},TY={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Dm,deliver_subject:"HDB.SCHEMAQUEUE"},gY={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Dm,deliver_subject:"HDB.USERQUEUE"},RY={SUCCESS:"success",ERROR:"error"},AY={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},OY={TXN:"txn",MSGID:"msgid"},qo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},bY={[qo.ERR]:1,[qo.WRN]:2,[qo.INF]:3,[qo.DBG]:4,[qo.TRC]:5},yY={debug:"-D",trace:"-DVV"};iN.exports={NATS_SERVER_ZIP:lY,NATS_SERVER_NAME:Cm,NATS_BINARY_NAME:_Y,PID_FILES:mY,NATS_CONFIG_FILES:hY,SERVER_SUFFIX:pY,WORK_QUEUE_CONSUMER_NAMES:SY,SCHEMA_QUEUE_CONSUMER_NAMES:TY,USER_QUEUE_CONSUMER_NAMES:gY,NATS_TERM_CONSTRAINTS_RX:dY,REQUEST_SUFFIX:sN,UPDATE_REMOTE_RESPONSE_STATUSES:RY,CLUSTER_STATUS_STATUSES:AY,REQUEST_SUBJECT:fY,SUBJECT_PREFIXES:OY,MSG_HEADERS:EY,LOG_LEVELS:qo,LOG_LEVEL_FLAGS:yY,LOG_LEVEL_HIERARCHY:bY}});var aN=T((Wae,oN)=>{"use strict";var b_=U(),y_=class{static{a(this,"BaseLicense")}constructor(t=0,r=b_.RAM_ALLOCATION_ENUM.DEFAULT,n=b_.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},Lm=class extends y_{static{a(this,"ExtendedLicense")}constructor(t=0,r=b_.RAM_ALLOCATION_ENUM.DEFAULT,n=b_.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};oN.exports={BaseLicense:y_,ExtendedLicense:Lm}});var Vi=T((zae,fN)=>{"use strict";var ko=require("fs-extra"),uN=O_(),lN=require("crypto"),NY=require("moment"),wY=require("uuid").v4,$t=W(),Um=require("path"),IY=J(),Zs=U(),{totalmem:cN}=require("os"),CY=aN().ExtendedLicense,Go="invalid license key format",DY="061183",LY="mofi25",MY="aes-256-cbc",UY=16,PY=32,_N=Z();_N.initSync();var Mm;fN.exports={validateLicense:dN,generateFingerPrint:BY,licenseSearch:Bm,getLicense:FY,checkMemoryLimit:qY};function Pm(){return Um.join(_N.getHdbBasePath(),Zs.LICENSE_KEY_DIR_NAME,Zs.LICENSE_FILE_NAME)}a(Pm,"getLicenseDirPath");function vY(){let e=Pm();return Um.join(e,Zs.LICENSE_FILE_NAME)}a(vY,"getLicenseFilePath");function vm(){let e=Pm();return Um.join(e,Zs.REG_KEY_FILE_NAME)}a(vm,"getFingerPrintFilePath");async function BY(){let e=vm();try{return await ko.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await HY();throw $t.error(`Error writing fingerprint file to ${e}`),$t.error(t),new Error("There was an error generating the fingerprint")}}a(BY,"generateFingerPrint");async function HY(){let e=wY(),t=uN.hash(e),r=vm();try{await ko.mkdirp(Pm()),await ko.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw $t.error(`Error writing fingerprint file to ${r}`),$t.error(n),new Error("There was an error generating the fingerprint")}return t}a(HY,"writeFingerprint");function dN(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Zs.RAM_ALLOCATION_ENUM.DEFAULT,version:Zs.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return $t.error("empty license key passed to validate."),r;let n=vm(),s=!1;try{s=ko.statSync(n)}catch(i){$t.error(i)}if(s){let i;try{i=ko.readFileSync(n,"utf8")}catch{$t.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(LY),c=o[1];c=Buffer.concat([Buffer.from(c)],UY);let u=Buffer.concat([Buffer.from(i)],PY),_=lN.createDecipheriv(MY,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=xY(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Go),$t.error(Go),new Error(Go)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Go),$t.error(Go),new Error(Go)}else r.exp_date=l;r.exp_date<NY().valueOf()&&(r.valid_date=!1),uN.validate(o[1],`${DY}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||$t.error("Invalid licence"),r}a(dN,"validateLicense");function xY(e,t){try{let r=lN.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{$t.warn("Check old license failed")}}a(xY,"checkOldLicense");function Bm(){let e=new CY,t=[];try{t=ko.readFileSync(vY(),"utf-8").split(Zs.NEW_LINE)}catch(r){r.code==="ENOENT"?$t.info("no license file found"):$t.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(IY.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=dN(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){$t.error("There was an error parsing the license string."),$t.error(s),e.ram_allocation=Zs.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Mm=e,e}a(Bm,"licenseSearch");async function FY(){return Mm||await Bm(),Mm}a(FY,"getLicense");function qY(){let e=Bm().ram_allocation,t=process.constrainedMemory?.()||cN();if(t=Math.round(Math.min(t,cN())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(qY,"checkMemoryLimit")});var en=T((ece,CN)=>{"use strict";var pN="username is required",SN="nothing to update, must supply active, role or password to update",TN="password cannot be an empty string",gN="If role is specified, it cannot be empty.",RN="active must be true or false";CN.exports={addUser:zY,alterUser:JY,dropUser:jY,getSuperUser:rK,userInfo:ZY,listUsers:w_,listUsersExternal:eK,setUsersToGlobal:$o,findAndValidateUser:wN,getClusterUser:nK,USERNAME_REQUIRED:pN,ALTERUSER_NOTHING_TO_UPDATE:SN,EMPTY_PASSWORD:TN,EMPTY_ROLE:gN,ACTIVE_BOOLEAN:RN};var AN=Zr(),GY=ki(),Fm=O_(),ON=nN(),bN=jr(),qm=Ss(),Mr=J(),yN=require("validate.js"),Ae=W(),{promisify:kY}=require("util"),Gm=ps(),EN=U(),hN=tt(),VY=Ir(),Xae=Z(),jae=Vi(),$Y=vi(),{table:Zae}=(be(),te(Fe)),{handleHDBError:Kn,hdb_errors:YY}=ee(),{HTTP_STATUS_CODES:Wn,AUTHENTICATION_ERROR_MSGS:Hm,HDB_ERROR_MSGS:Vo}=YY,{UserEventMsg:km}=Nn(),xm=require("lodash"),{server:Vm}=(jt(),te(Ii)),KY=W();Vm.getUser=(e,t)=>wN(e,t,t!=null);var NN={username:!0,active:!0,role:!0,password:!0},mN=new Map,N_=bN.searchByValue,WY=bN.searchByHash,QY=kY(GY.delete);async function zY(e){let t=yN.cleanAttributes(e,NN),r=ON.addUserValidation(t);if(r)throw Kn(new Error,r.message,Wn.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await N_(n),s=s&&Array.from(s)}catch(u){throw Ae.error("There was an error searching for a role in add user"),Ae.error(u),u}if(!s||s.length<1)throw Kn(new Error,Vo.ROLE_NAME_NOT_FOUND(t.role),Wn.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Kn(new Error,Vo.DUP_ROLES_FOUND(t.role),Wn.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Gm.encrypt(t.password)),t.password=Fm.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await AN.insert(i)}catch(u){throw Ae.error("There was an error searching for a user."),Ae.error(u),u}Ae.debug(o);try{await $o()}catch(u){throw Ae.error("Got an error setting users to global"),Ae.error(u),u}if(o.skipped_hashes.length===1)throw Kn(new Error,Vo.USER_ALREADY_EXISTS(t.username),Wn.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],qm.signalUserChange(new km(process.pid)),`${c.username} successfully added`}a(zY,"addUser");async function JY(e){let t=yN.cleanAttributes(e,NN);if(Mr.isEmptyOrZeroLength(t.username))throw new Error(pN);if(Mr.isEmptyOrZeroLength(t.password)&&Mr.isEmptyOrZeroLength(t.role)&&Mr.isEmptyOrZeroLength(t.active))throw new Error(SN);if(!Mr.isEmpty(t.password)&&Mr.isEmptyOrZeroLength(t.password.trim()))throw new Error(TN);if(!Mr.isEmpty(t.active)&&!Mr.isBoolean(t.active))throw new Error(RN);let r=XY(t.username);if(!Mr.isEmpty(t.password)&&!Mr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Gm.encrypt(t.password)),t.password=Fm.hash(t.password)),t.role==="")throw new Error(gN);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await N_(i)||[])}catch(c){throw Ae.error("Got an error searching for a role."),Ae.error(c),c}if(!o||o.length===0){let c=Vo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ae.error(c),Kn(new Error,c,Wn.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Vo.ALTER_USER_DUP_ROLES(t.role);throw Ae.error(c),Kn(new Error,c,Wn.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await AN.update(n)}catch(i){throw Ae.error("Error during update."),Ae.error(i),i}try{await $o()}catch(i){throw Ae.error("Got an error setting users to global"),Ae.error(i),i}return qm.signalUserChange(new km(process.pid)),s}a(JY,"alterUser");function XY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(XY,"isClusterUser");async function jY(e){try{let t=ON.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Mr.isEmpty(global.hdb_users.get(e.username)))throw Kn(new Error,Vo.USER_NOT_EXIST(e.username),Wn.NOT_FOUND,void 0,void 0,!0);let n;try{n=await QY(r)}catch(s){throw Ae.error("Got an error deleting a user."),Ae.error(s),s}Ae.debug(n);try{await $o()}catch(s){throw Ae.error("Got an error setting users to global."),Ae.error(s),s}return qm.signalUserChange(new km(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(jY,"dropUser");async function ZY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=xm.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await WY(r)}catch(s){throw Ae.error("Got an error searching for a role."),Ae.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ae.error(r),r}return t}a(ZY,"userInfo");async function eK(){let e;try{e=await w_()}catch(t){throw Ae.error("Got an error listing users."),Ae.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(eK,"listUsersExternal");async function w_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await N_(e)}catch(o){throw Ae.error("Got an error searching for roles."),Ae.error(o),o}let r={};for(let o of t)r[o.id]=xm.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await N_(n)}catch(o){throw Ae.error("Got an error searching for users."),Ae.error(o),o}let i=new Map;for(let o of s)o=xm.cloneDeep(o),o.role=r[o.role],tK(o.role),i.set(o.username,o);return i}catch(e){throw Ae.error("got an error listing users"),Ae.error(e),Mr.errorizeMessage(e)}return null}a(w_,"listUsers");function tK(e){try{if(!e){Ae.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($Y)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ae.error("Got an error trying to set system permissions."),Ae.error(t)}}a(tK,"appendSystemTablesToRole");async function $o(){try{let e=await w_();global.hdb_users=e}catch(e){throw Ae.error(e),e}}a($o,"setUsersToGlobal");async function wN(e,t,r=!0){global.hdb_users||await $o();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Kn(new Error,Hm.GENERIC_AUTH_FAIL,Wn.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Kn(new Error,Hm.USER_INACTIVE,Wn.UNAUTHORIZED,void 0,void 0,!0);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(mN.get(t)===n.password)return s;if(Fm.validate(n.password,t))mN.set(t,n.password);else throw Kn(new Error,Hm.GENERIC_AUTH_FAIL,Wn.UNAUTHORIZED,void 0,void 0,!0)}return s}a(wN,"findAndValidateUser");async function rK(){global.hdb_users||await $o();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(rK,"getSuperUser");async function nK(){let e=await w_(),t=VY.getConfigFromFile(EN.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Mr.isEmpty(r)&&r?.role?.role===EN.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Gm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+hN.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+hN.SERVER_SUFFIX.ADMIN,r}a(nK,"getClusterUser");var IN=[];Vm.invalidateUser=function(e){for(let t of IN)try{t(e)}catch(r){KY.error("Error invalidating user",r)}};Vm.onInvalidatedUser=function(e){IN.push(e)}});var Pc=T((sce,UN)=>{"use strict";var $i=W(),Ur=U(),sK=by(),rce=Js(),nce=Hi(),iK=en(),{validateEvent:DN}=Nn(),Uc=yn(),oK=require("process"),{resetDatabases:aK}=(be(),te(Fe)),cK={[Ur.ITC_EVENT_TYPES.SCHEMA]:uK,[Ur.ITC_EVENT_TYPES.USER]:MN};async function uK(e){let t=DN(e);if(t){$i.error(t);return}$i.trace("ITC schemaHandler received schema event:",e),await sK(e.message),await lK(e.message)}a(uK,"schemaHandler");async function lK(e){try{Uc.resetReadTxn(Ur.SYSTEM_SCHEMA_NAME,Ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Uc.resetReadTxn(Ur.SYSTEM_SCHEMA_NAME,Ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Uc.resetReadTxn(Ur.SYSTEM_SCHEMA_NAME,Ur.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=aK();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){$i.error(t)}}a(lK,"syncSchemaMetadata");var LN=[];async function MN(e){try{try{Uc.resetReadTxn(Ur.SYSTEM_SCHEMA_NAME,Ur.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Uc.resetReadTxn(Ur.SYSTEM_SCHEMA_NAME,Ur.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){$i.warn(r)}let t=DN(e);if(t){$i.error(t);return}$i.trace(`ITC userHandler ${Ur.HDB_ITC_CLIENT_PREFIX}${oK.pid} received user event:`,e),await iK.setUsersToGlobal();for(let r of LN)r()}catch(t){$i.error(t)}}a(MN,"userHandler");MN.addListener=function(e){LN.push(e)};UN.exports=cK});var Nn=T((lce,vN)=>{"use strict";var oce=W(),$m=J(),_K=U(),{ITC_ERRORS:vc}=br(),{parentPort:ace,threadId:dK,isMainThread:fK,workerData:cce}=require("worker_threads"),{onMessageFromWorkers:EK,broadcast:uce,broadcastWithAcknowledgement:hK}=Ze();vN.exports={sendItcEvent:mK,validateEvent:PN,SchemaEventMsg:pK,UserEventMsg:SK};var I_;EK(async(e,t)=>{I_=I_||Pc(),PN(e),I_[e.type]&&await I_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function mK(e){return!fK&&e.message&&(e.message.originator=dK),hK(e)}a(mK,"sendItcEvent");function PN(e){if(typeof e!="object")return vc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||$m.isEmpty(e.type))return vc.MISSING_TYPE;if(!e.hasOwnProperty("message")||$m.isEmpty(e.message))return vc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||$m.isEmpty(e.message.originator))return vc.MISSING_ORIGIN;if(_K.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return vc.INVALID_EVENT(e.type)}a(PN,"validateEvent");function pK(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(pK,"SchemaEventMsg");function SK(e){this.originator=e}a(SK,"UserEventMsg")});var Ss=T((fce,FN)=>{"use strict";var BN=U(),dce=J(),C_=W(),HN=Ry(),Yo,{sendItcEvent:xN}=Nn();function TK(e){try{C_.trace("signalSchemaChange called with message:",e),Yo=Yo||Pc();let t=new HN(BN.ITC_EVENT_TYPES.SCHEMA,e);return Yo.schema(t),xN(t)}catch(t){C_.error(t)}}a(TK,"signalSchemaChange");function gK(e){try{C_.trace("signalUserChange called with message:",e),Yo=Yo||Pc();let t=new HN(BN.ITC_EVENT_TYPES.USER,e);return Yo.user(t),xN(t)}catch(t){C_.error(t)}}a(gK,"signalUserChange");FN.exports={signalSchemaChange:TK,signalUserChange:gK}});var D_=T((hce,GN)=>{"use strict";var qN=J(),RK=U(),AK=W(),OK=d_(),bK=__(),yK=Ss(),{SchemaEventMsg:NK}=Nn(),wK="already exists in";GN.exports=IK;async function IK(e,t,r){if(qN.isEmptyOrZeroLength(r))return r;let n=[];qN.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 CK(e,t.schema,t.name,i)})),s}a(IK,"lmdbCheckForNewAttributes");async function CK(e,t,r,n){let s=new bK(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await DK(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(wK))AK.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(CK,"createNewAttribute");async function DK(e){let t;return t=await OK(e),yK.signalSchemaChange(new NK(process.pid,RK.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(DK,"createAttribute")});var Ko=T((pce,kN)=>{"use strict";var Ym=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};kN.exports=Ym});var $N=T((Tce,VN)=>{"use strict";var LK=Ko(),MK=U().OPERATIONS_ENUM,Km=class extends LK{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(MK.INSERT,r,n,s,i),this.records=t}};VN.exports=Km});var KN=T((Rce,YN)=>{"use strict";var UK=Ko(),PK=U().OPERATIONS_ENUM,Wm=class extends UK{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(PK.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};YN.exports=Wm});var QN=T((Oce,WN)=>{"use strict";var vK=Ko(),BK=U().OPERATIONS_ENUM,Qm=class extends vK{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(BK.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};WN.exports=Qm});var JN=T((yce,zN)=>{"use strict";var HK=Ko(),xK=U().OPERATIONS_ENUM,zm=class extends HK{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(xK.DELETE,n,s,t,i),this.original_records=r}};zN.exports=zm});var Bc=T((Ice,ew)=>{"use strict";var wce=require("path"),XN=Ve(),FK=$N(),qK=KN(),GK=QN(),kK=JN(),Wo=lt(),jN=J(),{CONFIG_PARAMS:VK}=U(),ZN=Z();ZN.initSync();var L_=U().OPERATIONS_ENUM,{getTransactionAuditStorePath:$K}=Ye();ew.exports=YK;async function YK(e,t){if(ZN.get(VK.LOGGING_AUDITLOG)===!1)return;let r=$K(e.schema,e.table),n=await XN.openEnvironment(r,e.table,!0),s=KK(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){XN.initializeDBIs(n,Wo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Wo.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Wo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Wo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),jN.isEmpty(s.user_name)||n.dbis[Wo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Wo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(YK,"writeTransaction");function KK(e,t){let r=jN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===L_.INSERT)return new FK(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===L_.UPDATE)return new qK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===L_.UPSERT)return new GK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===L_.DELETE)return new kK(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(KK,"createTransactionObject")});var Jm=T((Lce,tw)=>{"use strict";var WK=Nc(),Dce=wc(),Hc=U(),QK=Lc(),zK=xo().insertRecords,JK=Ve(),XK=W(),jK=D_(),{getSchemaPath:ZK}=Ye(),eW=Bc();tw.exports=tW;async function tW(e){try{let{schema_table:t,attributes:r}=WK(e);QK(e,r,t.hash_attribute),e.schema!==Hc.SYSTEM_SCHEMA_NAME&&(r.includes(Hc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Hc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Hc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Hc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await jK(e.hdb_auth_header,t,r),s=ZK(e.schema,e.table),i=await JK.openEnvironment(s,e.table),o=await zK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await eW(e,o)}catch(c){XK.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(tW,"lmdbCreateRecords")});var sw=T((Uce,nw)=>{"use strict";var rw=U(),rW=Jm(),nW=wc(),sW=require("fs-extra"),{getSchemaPath:iW}=Ye();nw.exports=oW;async function oW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new nW(rw.SYSTEM_SCHEMA_NAME,rw.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await rW(r),await sW.mkdirp(iW(e.schema))}a(oW,"lmdbCreateSchema")});var ow=T((vce,iw)=>{"use strict";var Xm=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};iw.exports=Xm});var lw=T((qce,uw)=>{"use strict";var aw=Ve(),jm=Cr(),Zm=br().LMDB_ERRORS_ENUM,aW=lt(),cw=W(),Hce=J(),cW=require("lmdb"),uW=ow(),lW=U(),{OVERFLOW_MARKER:xce,MAX_SEARCH_KEY_LENGTH:Fce}=aW,_W=lW.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function dW(e,t,r,n){if(jm.validateEnv(e),t===void 0)throw new Error(Zm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Zm.IDS_REQUIRED):new Error(Zm.IDS_MUST_BE_ITERABLE);try{let s=aw.listDBIs(e);aw.initializeDBIs(e,t,s);let i=new uW,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||n&&h[_W]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,cW.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let O=s[S];if(!h.hasOwnProperty(O)||O===t)continue;let g=e.dbis[O],R=h[O];if(R!=null)try{let B=jm.getIndexedValues(R);if(B)for(let H=0,v=B.length;H<v;H++)g.remove(B[H],o)}catch{cw.warn(`cannot delete from attribute: ${O}, ${R}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){cw.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=jm.getNextMonotonicTime(),i}catch(s){throw s}}a(dW,"deleteRecords");uw.exports={deleteRecords:dW}});var xc=T((kce,dw)=>{"use strict";var Qo=J(),fW=lw(),EW=Ve(),{getSchemaPath:hW}=Ye(),mW=Bc(),pW=W();dw.exports=SW;async function SW(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Qo.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Qo.isEmptyOrZeroLength(e.hash_values)&&!Qo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];Qo.isEmpty(u)||e.hash_values.push(u)}}if(Qo.isEmptyOrZeroLength(e.hash_values))return _w([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Qo.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=hW(e.schema,e.table),i=await EW.openEnvironment(s,e.table),o=await fW.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await mW(e,o)}catch(c){pW.error(`unable to write transaction due to ${c.message}`)}return _w(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(SW,"lmdbDeleteRecords");function _w(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(_w,"createDeleteResponse")});var tp=T((Yce,fw)=>{"use strict";var TW=U(),$ce=Cr();function ep(e,t){let r=Object.create(null);if(t.length===1&&TW.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(ep,"parseRow");function gW(e,t,r,n){let s=ep(r,e);n.push(s)}a(gW,"searchAll");function RW(e,t,r,n){let s=ep(r,e);n[t]=s}a(RW,"searchAllToMap");function AW(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(AW,"iterateDBI");function Yi(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Yi,"pushResults");function OW(e,t,r,n,s,i){t.toString().endsWith(e)&&Yi(t,r,n,s,i)}a(OW,"endsWith");function bW(e,t,r,n,s,i){t.toString().includes(e)&&Yi(t,r,n,s,i)}a(bW,"contains");function yW(e,t,r,n,s,i){t>e&&Yi(t,r,n,s,i)}a(yW,"greaterThanCompare");function NW(e,t,r,n,s,i){t>=e&&Yi(t,r,n,s,i)}a(NW,"greaterThanEqualCompare");function wW(e,t,r,n,s,i){t<e&&Yi(t,r,n,s,i)}a(wW,"lessThanCompare");function IW(e,t,r,n,s,i){t<=e&&Yi(t,r,n,s,i)}a(IW,"lessThanEqualCompare");fw.exports={parseRow:ep,searchAll:gW,searchAllToMap:RW,iterateDBI:AW,endsWith:OW,contains:bW,greaterThanCompare:yW,greaterThanEqualCompare:NW,lessThanCompare:wW,lessThanEqualCompare:IW,pushResults:Yi}});var zo=T((Jce,gw)=>{"use strict";var ei=Ve(),Wce=W(),Pr=Cr(),M_=lt(),at=br().LMDB_ERRORS_ENUM,Qce=J(),CW=U(),U_=tp(),{parseRow:DW}=U_,zce=require("lmdb"),{OVERFLOW_MARKER:Ew,MAX_SEARCH_KEY_LENGTH:LW}=M_;function hw(e,t,r,n=!1,s=void 0,i=void 0){return Ki(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(hw,"iterateFullIndex");function Fc(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Ki(e,t,r,(l,d,f,E)=>{let g={transaction:l,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(g.values=!1,d.getRange(g).map(R=>({value:R}))):d.getRange(g)})}a(Fc,"iterateRangeBetween");function Ki(e,t,r,n){let s=e.database||e,i=ei.openDBI(s,r);i[M_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ei.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Ki,"setupTransaction");function mw(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(Ew)){if(!s)if(r)s=ei.openDBI(e,r);else{let u=ei.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=ei.openDBI(e,u[_]),!s[M_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(mw,"getOverflowCheck");function MW(e,t,r,n=!1,s=void 0,i=void 0){if(Pr.validateEnv(e),t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);return Ki(e,t,t,(o,c,u)=>(P_(r),r=qc(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>DW(_.value,r))))}a(MW,"searchAll");function UW(e,t,r,n=!1,s=void 0,i=void 0){if(Pr.validateEnv(e),t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);P_(r),r=qc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of hw(e,t,t,n,s,i))o.set(c,U_.parseRow(u,r));return o}a(UW,"searchAllToMap");function PW(e,t,r=!1,n=void 0,s=void 0){if(Pr.validateEnv(e),t===void 0)throw new Error(at.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=hw(e,void 0,t,r,n,s),c=o.transaction,u=mw(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(PW,"iterateDBI");function vW(e,t){if(Pr.validateEnv(e),t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);return ei.statDBI(e,t).entryCount}a(vW,"countAll");function BW(e,t,r,n,s=!1,i=void 0,o=void 0){return ti(e,r,n),Ki(e,t,r,(c,u,_,l)=>(n=Pr.convertKeyValueToWrite(n),l===r?u.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:u.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(BW,"equals");function HW(e,t,r){return ti(e,t,r),ei.openDBI(e,t).getValuesCount(r)}a(HW,"count");function xW(e,t,r,n,s=!1,i=void 0,o=void 0){return ti(e,r,n),Ki(e,null,r,(c,u)=>{n=Pr.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let l;if(s===!0){let d;for(let f of u.getKeys({transaction:c,start:n}))if(!f.startsWith(n)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(n))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(xW,"startsWith");function FW(e,t,r,n,s=!1,i=void 0,o=void 0){return pw(e,t,r,n,s,i,o,!0)}a(FW,"endsWith");function pw(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ti(e,r,n),Ki(e,null,r,(u,_,l,d)=>{let f=mw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:s?!1:void 0,reverse:s}).flatMap(E=>{let h=E.toString();return h.endsWith(Ew)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(n):S.includes(n))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(n):h.includes(n))?_[M_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(pw,"contains");function qW(e,t,r,n,s=!1,i=void 0,o=void 0){ti(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Fc(e,t,r,n,u,s,i,o,!0,!1)}a(qW,"greaterThan");function GW(e,t,r,n,s=!1,i=void 0,o=void 0){ti(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Fc(e,t,r,n,u,s,i,o,!1,!1)}a(GW,"greaterThanEqual");function kW(e,t,r,n,s=!1,i=void 0,o=void 0){ti(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Fc(e,t,r,u,n,s,i,o,!1,!0)}a(kW,"lessThan");function VW(e,t,r,n,s=!1,i=void 0,o=void 0){ti(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Fc(e,t,r,u,n,s,i,o,!1,!1)}a(VW,"lessThanEqual");function $W(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Pr.validateEnv(e),r===void 0)throw new Error(at.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(at.START_VALUE_REQUIRED);if(s===void 0)throw new Error(at.END_VALUE_REQUIRED);if(n=Pr.convertKeyValueToWrite(n),s=Pr.convertKeyValueToWrite(s),n>s)throw new Error(at.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Fc(e,t,r,n,s,i,o,c)}a($W,"between");function YW(e,t,r,n){Pr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);if(P_(r),r=qc(s,r),n===void 0)throw new Error(at.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=U_.parseRow(c,r)),o}a(YW,"searchByHash");function KW(e,t,r){Pr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(at.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(KW,"checkHashExists");function WW(e,t,r,n,s=[]){return Tw(e,t,r,n,s),Sw(e,t,r,n,s).map(i=>i[1])}a(WW,"batchSearchByHash");function QW(e,t,r,n,s=[]){Tw(e,t,r,n,s);let i=new Map;for(let[o,c]of Sw(e,t,r,n,s))i.set(o,c);return i}a(QW,"batchSearchByHashToMap");function Sw(e,t,r,n,s=[]){return Ki(e,t,t,(i,o,c)=>{r=qc(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,U_.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(Sw,"batchHashSearch");function Tw(e,t,r,n,s){if(Pr.validateEnv(e),t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);if(P_(r),n==null)throw new Error(at.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(at.IDS_MUST_BE_ITERABLE)}a(Tw,"initializeBatchSearchByHash");function P_(e){if(!Array.isArray(e))throw e===void 0?new Error(at.FETCH_ATTRIBUTES_REQUIRED):new Error(at.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(P_,"validateFetchAttributes");function ti(e,t,r){if(Pr.validateEnv(e),t===void 0)throw new Error(at.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(at.SEARCH_VALUE_REQUIRED);if(r?.length>LW)throw new Error(at.SEARCH_VALUE_TOO_LARGE)}a(ti,"validateComparisonFunctions");function qc(e,t){return t.length===1&&CW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ei.listDBIs(e)),t}a(qc,"setGetWholeRowAttributes");gw.exports={searchAll:MW,searchAllToMap:UW,count:HW,countAll:vW,equals:BW,startsWith:xW,endsWith:FW,contains:pw,searchByHash:YW,setGetWholeRowAttributes:qc,batchSearchByHash:WW,batchSearchByHashToMap:QW,checkHashExists:KW,iterateDBI:PW,greaterThan:qW,greaterThanEqual:GW,lessThan:kW,lessThanEqual:VW,between:$W}});var Jo=T((jce,yw)=>{var Rw=require("lodash"),Aw=Xe(),me=require("joi"),zW=J(),{hdb_schema_table:Gc,checkValidTable:Ow,hdb_table:bw,hdb_database:v_}=$n(),{handleHDBError:JW,hdb_errors:XW}=ee(),{getDatabases:jW}=(be(),te(Fe)),{HTTP_STATUS_CODES:ZW}=XW,eQ=me.object({database:v_,schema:v_,table:bw,search_attribute:Gc,search_value:me.any().required(),get_attributes:me.array().min(1).items(me.alternatives(Gc,me.object())).optional(),desc:me.bool(),limit:me.number().integer().min(1),offset:me.number().integer().min(0)}),tQ=me.object({database:v_,schema:v_,table:bw,operator:me.string().valid("and","or").default("and").lowercase(),offset:me.number().integer().min(0),limit:me.number().integer().min(1),get_attributes:me.array().min(1).items(me.alternatives(Gc,me.object())).optional(),sort:me.object({attribute:me.alternatives(Gc,me.array().min(1)),descending:me.bool().optional()}).optional(),conditions:me.array().min(1).items(me.alternatives(me.object({operator:me.string().valid("and","or").default("and").lowercase(),conditions:me.array()}),me.object({search_attribute:me.alternatives(Gc,me.array().min(1)),search_type:me.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:me.when("search_type",{switch:[{is:"equals",then:me.any()},{is:"between",then:me.array().items(me.alternatives([me.string(),me.number()])).length(2)}],otherwise:me.alternatives(me.string(),me.number())}).required()}))).required()});yw.exports=function(e,t){let r=null;switch(t){case"value":r=Aw.validateBySchema(e,eQ);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(Ow("database",e.schema)),i(Ow("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=Aw.validateBySchema(e,tQ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=zW.checkGlobalSchemaTable(e.schema,e.table);if(s)return JW(new Error,s,ZW.NOT_FOUND);let o=jW()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,f=l.conditions.length;d<f;d++){let E=l.conditions[d];E.conditions?u(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=Rw.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!Rw.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var rp=T((eue,Nw)=>{"use strict";var rQ=Ve(),nQ=Jo(),{getSchemaPath:sQ}=Ye();Nw.exports=iQ;function iQ(e){let t=nQ(e,"hashes");if(t)throw t;let r=sQ(e.schema,e.table);return rQ.openEnvironment(r,e.table)}a(iQ,"initialize")});var np=T((rue,ww)=>{"use strict";var oQ=zo(),aQ=rp();ww.exports=cQ;async function cQ(e){let t=await aQ(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return oQ.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(cQ,"lmdbGetDataByHash")});var Xo=T((sue,Iw)=>{"use strict";var sp=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};Iw.exports=sp});var Dw=T((aue,Cw)=>{"use strict";var oue=Xo(),uQ=zo(),lQ=rp();Cw.exports=_Q;async function _Q(e){let t=await lQ(e),r=global.hdb_schema[e.schema][e.table];return uQ.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(_Q,"lmdbSearchByHash")});var Qn=T((uue,Lw)=>{"use strict";var ip=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};Lw.exports=ip});var B_=T((_ue,Hw)=>{"use strict";var Yt=zo(),dQ=Ve(),fQ=J(),pe=lt(),Wi=U(),EQ=vi(),Mw=br().LMDB_ERRORS_ENUM,{getSchemaPath:hQ}=Ye(),Ts=Wi.SEARCH_WILDCARDS;async function mQ(e,t,r){let n;e.schema===Wi.SYSTEM_SCHEMA_NAME?n=EQ[e.table]:n=global.hdb_schema[e.schema][e.table];let s=Bw(e,n.hash_attribute,r,t);return Pw(e,s,n.hash_attribute,r)}a(mQ,"prepSearch");async function Pw(e,t,r,n){let s=hQ(e.schema,e.table),i=await dQ.openEnvironment(s,e.table),o=vw(i,e,t,r),c=o.transaction||i;if([pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,pe.SEARCH_TYPES.SEARCH_ALL,pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(pQ(e,r)===!1){let l=e.search_attribute;if(l===r)return n?Uw(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return n?Uw(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return n===!0?Yt.batchSearchByHashToMap(c,r,e.get_attributes,_):Yt.batchSearchByHash(c,r,e.get_attributes,_)}a(Pw,"executeSearch");function vw(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case pe.SEARCH_TYPES.EQUALS:s=Yt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case pe.SEARCH_TYPES.CONTAINS:s=Yt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case pe.SEARCH_TYPES.ENDS_WITH:case pe.SEARCH_TYPES._ENDS_WITH:s=Yt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case pe.SEARCH_TYPES.STARTS_WITH:case pe.SEARCH_TYPES._STARTS_WITH:s=Yt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Yt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Yt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.SEARCH_ALL:return Yt.searchAll(e,n,t.get_attributes,o,c,u);case pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Yt.searchAllToMap(e,n,t.get_attributes,o,c,u);case pe.SEARCH_TYPES.BETWEEN:s=Yt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case pe.SEARCH_TYPES.GREATER_THAN:case pe.SEARCH_TYPES._GREATER_THAN:s=Yt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case pe.SEARCH_TYPES.GREATER_THAN_EQUAL:case pe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Yt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case pe.SEARCH_TYPES.LESS_THAN:case pe.SEARCH_TYPES._LESS_THAN:s=Yt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case pe.SEARCH_TYPES.LESS_THAN_EQUAL:case pe.SEARCH_TYPES._LESS_THAN_EQUAL:s=Yt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return s}a(vw,"searchByType");function Uw(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(Uw,"createMapFromIterable");function pQ(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(pQ,"checkToFetchMore");function Bw(e,t,r,n){if(fQ.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Ts.indexOf(s)>-1)return r===!0?pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:pe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Ts[0])<0&&s.indexOf(Ts[1])<0)return c===!0?r===!0?pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:pe.SEARCH_TYPES.EQUALS;if(Ts.indexOf(i)>=0&&Ts.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),pe.SEARCH_TYPES.CONTAINS;if(Ts.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),pe.SEARCH_TYPES.ENDS_WITH;if(Ts.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),pe.SEARCH_TYPES.STARTS_WITH;if(s.includes(Ts[0])||s.includes(Ts[1]))return pe.SEARCH_TYPES.EQUALS;throw new Error(Mw.UNKNOWN_SEARCH_TYPE)}else switch(n){case Wi.VALUE_SEARCH_COMPARATORS.BETWEEN:return pe.SEARCH_TYPES.BETWEEN;case Wi.VALUE_SEARCH_COMPARATORS.GREATER:return pe.SEARCH_TYPES.GREATER_THAN;case Wi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return pe.SEARCH_TYPES.GREATER_THAN_EQUAL;case Wi.VALUE_SEARCH_COMPARATORS.LESS:return pe.SEARCH_TYPES.LESS_THAN;case Wi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return pe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Mw.UNKNOWN_SEARCH_TYPE)}}a(Bw,"createSearchTypeFromSearchObject");Hw.exports={executeSearch:Pw,createSearchTypeFromSearchObject:Bw,prepSearch:mQ,searchByType:vw}});var Fw=T((Eue,xw)=>{"use strict";var fue=Qn(),SQ=Jo(),TQ=J(),gQ=U(),RQ=B_();xw.exports=AQ;function AQ(e,t){if(!TQ.isEmpty(t)&&gQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=SQ(e,"value");if(n)throw n;return RQ.prepSearch(e,t,!0)}a(AQ,"lmdbGetDataByValue")});var kc=T((pue,qw)=>{"use strict";var mue=Qn(),OQ=Jo(),bQ=J(),yQ=U(),NQ=B_();qw.exports=wQ;async function wQ(e,t){if(!bQ.isEmpty(t)&&yQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=OQ(e,"value");if(n)throw n;return NQ.prepSearch(e,t,!1)}a(wQ,"lmdbSearchByValue")});var kw=T((gue,Gw)=>{"use strict";var Tue=lt(),op=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},ap=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},cp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Gw.exports={SearchByConditionsObject:op,SearchCondition:ap,SortAttribute:cp}});var Ww=T((bue,Kw)=>{"use strict";var Aue=kw().SearchByConditionsObject,IQ=Qn(),CQ=Jo(),up=zo(),H_=lt(),{Resource:Oue}=(An(),te(lp)),Yw=B_(),DQ=tp(),LQ=require("lodash"),{getSchemaPath:MQ}=Ye(),Vw=Ve(),{handleHDBError:UQ,hdb_errors:PQ}=ee(),{HTTP_STATUS_CODES:vQ}=PQ,BQ=1e8;Kw.exports=HQ;async function HQ(e){let t=CQ(e,"conditions");if(t)throw UQ(t,t.message,vQ.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=MQ(e.schema,e.table),n=await Vw.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Vw.openDBI(n,_.search_attribute);let i=LQ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===H_.SEARCH_TYPES.EQUALS?_.estimated_count=up.count(n,_.search_attribute,_.search_value):l===H_.SEARCH_TYPES.CONTAINS||l===H_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=BQ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await $w(o,e,i[0],s.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],l=i.slice(1).map(Yw.filterByType),d=l.length,f=up.setGetWholeRowAttributes(n,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>DQ.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await $w(o,e,f,s.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=up.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(HQ,"lmdbSearchByConditions");async function $w(e,t,r,n){let s=new IQ(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===H_.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,Yw.searchByType(e,s,i,n).map(o=>o.value)}a($w,"executeConditionSearch")});var Vc=T((Nue,Qw)=>{"use strict";var xQ=U().OPERATIONS_ENUM,_p=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=xQ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};Qw.exports=_p});var dp=T((Iue,rI)=>{"use strict";var jw=Qn(),Zw=Vc(),eI=kc(),tI=xc(),rr=U(),zw=J(),Jw=Ve(),{getTransactionAuditStorePath:FQ,getSchemaPath:qQ}=Ye(),Xw=W();rI.exports=GQ;async function GQ(e){try{if(zw.isEmpty(global.hdb_schema[e.schema])||zw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await kQ(e),await VQ(e);let t=qQ(e.schema,e.table);try{await Jw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Xw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=FQ(e.schema,e.table);await Jw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Xw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(GQ,"lmdbDropTable");async function kQ(e){let t=new jw(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await eI(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new Zw(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await tI(s)}a(kQ,"deleteAttributesFromSystem");async function VQ(e){let t=new jw(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await eI(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new Zw(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await tI(s)}catch(i){throw i}}a(VQ,"dropTableFromSystem")});var sI=T((Due,nI)=>{"use strict";var $Q=require("fs-extra"),YQ=Qn(),KQ=Xo(),WQ=Vc(),QQ=dp(),zQ=xc(),JQ=np(),XQ=kc(),gs=U(),{getSchemaPath:jQ}=Ye(),{handleHDBError:ZQ,hdb_errors:ez}=ee(),{HDB_ERROR_MSGS:tz,HTTP_STATUS_CODES:rz}=ez;nI.exports=nz;async function nz(e){let t;try{t=await sz(e.schema);let r=new YQ(gs.SYSTEM_SCHEMA_NAME,gs.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,gs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[gs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await XQ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await QQ(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new WQ(gs.SYSTEM_SCHEMA_NAME,gs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await zQ(s);let i=jQ(t);await $Q.remove(i)}catch(r){throw r}}a(nz,"lmdbDropSchema");async function sz(e){let t=new KQ(gs.SYSTEM_SCHEMA_NAME,gs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[gs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await JQ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw ZQ(new Error,tz.SCHEMA_NOT_FOUND(e),rz.NOT_FOUND,void 0,void 0,!0);return n}a(sz,"validateDropSchema")});var Ep=T((Mue,iI)=>{"use strict";var fp=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};iI.exports=fp});var aI=T((vue,oI)=>{"use strict";var iz=require("fs-extra"),x_=Ve(),{getTransactionAuditStorePath:oz}=Ye(),hp=lt(),Pue=Ep();oI.exports=az;async function az(e){let t;try{let r=oz(e.schema,e.table);await iz.mkdirp(r),t=await x_.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{x_.createDBI(t,hp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),x_.createDBI(t,hp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),x_.createDBI(t,hp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(az,"createTransactionsAuditEnvironment")});var _I=T((Hue,lI)=>{"use strict";var mp=U(),cI=Ve(),cz=xo(),{getSystemSchemaPath:uz,getSchemaPath:lz}=Ye(),_z=vi(),dz=d_(),pp=__(),fz=W(),Ez=aI(),Tp=_z.hdb_table,uI=[];for(let e=0;e<Tp.attributes.length;e++)uI.push(Tp.attributes[e].attribute);lI.exports=hz;async function hz(e,t){let r=lz(t.schema,t.table),n=new pp(t.schema,t.table,mp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new pp(t.schema,t.table,mp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new pp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await cI.createEnvironment(r,t.table),e!==void 0){let o=await cI.openEnvironment(uz(),mp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await cz.insertRecords(o,Tp.hash_attribute,uI,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Sp(n),await Sp(s),await Sp(i)}await Ez(t)}catch(o){throw o}}a(hz,"lmdbCreateTable");async function Sp(e){try{await dz(e)}catch(t){fz.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Sp,"createAttribute")});var fI=T((Fue,dI)=>{"use strict";var mz=Nc(),pz=Lc(),Sz=D_(),$c=U(),Tz=xo().updateRecords,gz=Ve(),{getSchemaPath:Rz}=Ye(),Az=Bc(),Oz=W();dI.exports=bz;async function bz(e){try{let{schema_table:t,attributes:r}=mz(e);pz(e,r,t.hash_attribute),e.schema!==$c.SYSTEM_SCHEMA_NAME&&(r.includes($c.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push($c.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes($c.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push($c.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Sz(e.hdb_auth_header,t,r),s=Rz(e.schema,e.table),i=await gz.openEnvironment(s,e.table),o=await Tz(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Az(e,o)}catch(c){Oz.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(bz,"lmdbUpdateRecords")});var hI=T((Gue,EI)=>{"use strict";var yz=U().OPERATIONS_ENUM,gp=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=yz.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};EI.exports=gp});var pI=T(($ue,mI)=>{"use strict";var Vue=hI(),Nz=Nc(),wz=Lc(),Iz=D_(),Yc=U(),Cz=xo().upsertRecords,Dz=Ve(),{getSchemaPath:Lz}=Ye(),Mz=Bc(),Uz=W(),{handleHDBError:Pz,hdb_errors:vz}=ee();mI.exports=Bz;async function Bz(e){let t;try{t=Nz(e)}catch(u){throw Pz(u,u.message,vz.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;wz(e,n,r.hash_attribute),e.schema!==Yc.SYSTEM_SCHEMA_NAME&&(n.includes(Yc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Yc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Yc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Yc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Iz(e.hdb_auth_header,r,n),i=Lz(e.schema,e.table),o=await Dz.openEnvironment(i,e.table),c=await Cz(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await Mz(e,c)}catch(u){Uz.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(Bz,"lmdbUpsertRecords")});var TI=T((Kue,SI)=>{"use strict";var Rp=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};SI.exports=Rp});var RI=T((Que,gI)=>{"use strict";var Ap=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};gI.exports=Ap});var bI=T((Xue,OI)=>{"use strict";var Op=Ve(),{getTransactionAuditStorePath:Hz}=Ye(),Jue=TI(),Kc=lt(),xz=J(),AI=RI(),Fz=require("util").promisify,qz=Fz(setTimeout),Gz=1e4,kz=100;OI.exports=Vz;async function Vz(e){let t=Hz(e.schema,e.table),r=await Op.openEnvironment(t,e.table,!0),n=Op.listDBIs(r);Op.initializeDBIs(r,Kc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new AI;do s=await $z(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 qz(kz);while(s.transactions_deleted>0);return i}a(Vz,"deleteAuditLogsBefore");async function $z(e,t){let r=new AI;try{let n=e.dbis[Kc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[Kc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];xz.isEmpty(c)||(s=e.dbis[Kc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[Kc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Gz)break}return await s,r}catch(n){throw n}}a($z,"deleteTransactions")});var NI=T((Zue,yI)=>{"use strict";var bp=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};yI.exports=bp});var II=T((rle,wI)=>{"use strict";var Yz=Qn(),Kz=Vc(),tle=NI(),zn=U(),Wz=J(),yp=Ve(),Qz=vi(),zz=kc(),Jz=xc(),{getSchemaPath:Xz}=Ye();wI.exports=jz;async function jz(e,t=!0){let r;e.schema===zn.SYSTEM_SCHEMA_NAME?r=Qz[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await eJ(e),s=Xz(e.schema,e.table),i=await yp.openEnvironment(s,e.table);return t===!0&&await Zz(e,i,r.hash_attribute),yp.dropDBI(i,e.attribute),n}a(jz,"lmdbDropAttribute");async function Zz(e,t,r){let n=yp.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:u}of n.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);s=t.dbis[r].put(o,_,u)}await s}a(Zz,"removeAttributeFromAllObjects");async function eJ(e){let t=new Yz(zn.SYSTEM_SCHEMA_NAME,zn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,zn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[zn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,zn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await zz(t)).filter(o=>o[zn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Wz.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[zn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Kz(zn.SYSTEM_SCHEMA_NAME,zn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Jz(i)}a(eJ,"dropAttributeFromSystem")});var PI=T((ile,UI)=>{"use strict";var Np=Ve(),jo=lt(),sle=Cr(),wp=U(),CI=J(),{getTransactionAuditStorePath:tJ}=Ye(),rJ=zo(),F_=Ko(),nJ=W();UI.exports=sJ;async function sJ(e){let t=tJ(e.schema,e.table),r=await Np.openEnvironment(t,e.table,!0),n=Np.listDBIs(r);Np.initializeDBIs(r,jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return DI(r,e.search_values);case wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,oJ(r,e.search_values,s);case wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return iJ(r,e.search_values);default:return DI(r)}}a(sJ,"readAuditLog");function DI(e,t=[0,Date.now()]){CI.isEmpty(t[0])&&(t[0]=0),CI.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[jo.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 F_,s))}a(DI,"searchTransactionsByTimestamp");function iJ(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[jo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,MI(e,i))}return Object.fromEntries(r)}a(iJ,"searchTransactionsByUsername");function oJ(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=rJ.equals(e,jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,jo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);n.has(f)?n.get(f).push(_.toString()):n.set(f,[_.toString()])}}let s=Array.from(n.keys()),i=MI(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);LI(u,"records",r,l,o),LI(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(oJ,"searchTransactionsByHashValues");function LI(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(n.indexOf(u)>=0)if(s.has(u)){let _=s.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new F_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new F_(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(LI,"loopRecords");function MI(e,t){let r=[];try{let n=e.dbis[jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new F_,i);r.push(o)}}catch(i){nJ.warn(i)}return r}catch(n){throw n}}a(MI,"batchSearchTransactions")});var BI=T((ule,vI)=>{"use strict";var{getSchemaPath:ale}=Ye(),cle=Ve(),{database:aJ}=(be(),te(Fe));vI.exports={writeTransaction:cJ};async function cJ(e,t,r){return aJ({database:e,table:t}).transaction(r)}a(cJ,"writeTransaction")});var qI=T((_le,FI)=>{"use strict";var{getSchemaPath:HI}=Ye(),xI=Ve();FI.exports={flush:uJ,resetReadTxn:lJ};async function uJ(e,t){return(await xI.openEnvironment(HI(e,t),t.toString())).flushed}a(uJ,"flush");async function lJ(e,t){try{(await xI.openEnvironment(HI(e,t),t.toString())).resetReadTxn()}catch{}}a(lJ,"resetReadTxn")});var $I=T((fle,VI)=>{"use strict";var{Readable:_J}=require("stream"),{getDatabases:dJ}=(be(),te(Fe)),{readSync:fJ,openSync:EJ,createReadStream:GI}=require("fs"),{open:hJ}=require("lmdb"),kI=t_(),mJ=n_(),{AUDIT_STORE_OPTIONS:pJ}=(Ui(),te(YI)),{INTERNAL_DBIS_NAME:SJ,AUDIT_STORE_NAME:TJ}=lt();VI.exports=RJ;var Ip=32768,gJ=100;async function RJ(e){let t=e.database||e.schema||"data",r=dJ()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let l=_.dbisDB,d=hJ({noSync:!0,maxDbs:mJ.MAX_DBS}),f,E=d.openDB(SJ,new kI(!1)),h=l.useReadTransaction(),p=0,S=a(async function(g,R){R.encoding="binary",R.encoder=void 0;let B=d.openDB(g,R),H=l.openDB(g,R);for(let{key:v,version:M,value:$}of H.getRange({transaction:h,versions:H.useVersions}))f=B.put(v,$,M),p++%gJ===0&&(await new Promise(K=>setTimeout(K,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:g,value:R}of l.getRange({transaction:h,start:!1}))if(s.some(B=>g.startsWith?.(B+"/"))){E.put(g,R);let[,B]=g.split("/"),H=!B,v=new kI(!H,H);await S(g,v)}e.include_audit&&await S(TJ,Object.assign({},pJ)),await f;let O=GI(d.path);return O.headers=u(),O.on("close",()=>{h.done(),d.close()}),O}let o=r[Object.keys(r)[0]].primaryStore,c=EJ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Ip);fJ(c,_,0,Ip),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=GI(null,{fd:c,start:Ip}),f=new _J.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(RJ,"getBackup")});var QI=T((hle,WI)=>{"use strict";var AJ=W(),{handleHDBError:OJ}=ee(),bJ=yb(),yJ=d_(),NJ=Jm(),wJ=sw(),IJ=xc(),CJ=np(),DJ=Dw(),LJ=Fw(),MJ=kc(),UJ=Ww(),PJ=sI(),vJ=_I(),BJ=fI(),HJ=pI(),xJ=bI(),FJ=dp(),qJ=II(),GJ=PI(),kJ=BI(),KI=qI(),VJ=$I(),Cp=class extends bJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return UJ(t)}async getDataByHash(t){return await CJ(t)}async searchByHash(t){return await DJ(t)}async getDataByValue(t,r){return await LJ(t,r)}async searchByValue(t){return await MJ(t)}async createSchema(t){return await wJ(t)}async dropSchema(t){return await PJ(t)}async createTable(t,r){return await vJ(t,r)}async dropTable(t){return await FJ(t)}async createAttribute(t){return await yJ(t)}async createRecords(t){return await NJ(t)}async updateRecords(t){return await BJ(t)}async upsertRecords(t){try{return await HJ(t)}catch(r){throw OJ(r,null,null,AJ.ERR,r)}}async deleteRecords(t){return await IJ(t)}async dropAttribute(t){return await qJ(t)}async deleteAuditLogsBefore(t){return await xJ(t)}async readAuditLog(t){return await GJ(t)}writeTransaction(t,r,n){return kJ.writeTransaction(t,r,n)}flush(t,r){return KI.flush(t,r)}resetReadTxn(t,r){return KI.resetReadTxn(t,r)}getBackup(t){return VJ(t)}};WI.exports=Cp});function WJ(){KJ=setInterval(function(){for(let e of Dp)if(e.stale){let t=e[ye]?.url;zI.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},YJ).unref()}var Lp,zI,$J,Dp,Qi,q_,YJ,KJ,Mp=Oe(()=>{Lp=x(Cr()),zI=x(W());An();Bo();$J=100,Dp=new Set,Qi=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=!0;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)throw new Error("Can not start a read on a transaction that is no longer open");return this.readTxnsUsed=1,Zl(()=>{this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0)}),Dp.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),Zl(()=>{this.readTxn.use()}),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Dp.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}addWrite(t){if(!this.open&&!this.autoCommitMode)throw new Error("Can not use a transaction that is no longer open");this.writes.push(t),this.autoCommitMode&&this.commit()}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=t.timestamp||(0,Lp.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let O=S();E?E.push?E.push(O):E=[E,O]:E=O}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(l){throw this.abort(),l}n||this.doneReadTxn(),t?.prepared?.(),this.open=!1;let s,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,n)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){n>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);s=s||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<$J>>n?u():s=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),s)return s.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=n+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=!1,this.writes=[]}},q_=class extends Qi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Lp.getNextMonotonicTime)())}getReadTxn(){}},YJ=3e4;a(WJ,"startMonitoringTxns");WJ()});function Ke(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.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 Qi;e.timestamp&&(n.timestamp=e.timestamp),n[ye]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let u=n.commit(r?.resetTransaction?{prepared(){n.autoCommitMode=!0}}:{});return u.then?u.then(()=>c):c}function o(c){throw n.abort({}),c}}var JI,zi=Oe(()=>{JI=require("../../index");An();Mp();a(Ke,"transaction");(0,JI._assignPackageExport)("transaction",Ke);Ke.commit=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ke.abort=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var iC={};ke(iC,{ResourceBridge:()=>vp});function Bp({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 jI(e,t){let r=Jn(e),n=Bp(e,r);if(!r)throw new wn.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},o;Ke(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:s,select:n},i);return l=l&&k_(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function Jn(e){let t=e.database||e.schema||zJ,r=In()[t];if(!r)throw(0,wn.handleHDBError)(new Error,QJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function ZI(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*eC(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(u)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[u]})}n&&(yield n)}var tC,G_,wn,rC,nC,Cn,Up,Pp,sC,QJ,zJ,JJ,XJ,XI,vp,oC=Oe(()=>{"use strict";tC=x(QI()),G_=x(Jo()),wn=x(ee());be();rC=x(Nc()),nC=x(Lc()),Cn=x(U()),Up=x(Ss()),Pp=x(Nn()),sC=x(J());zi();V_();({HDB_ERROR_MSGS:QJ}=wn.hdb_errors),zJ="data",JJ=1e4,XJ=10,vp=class extends tC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),XI=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,G_.default)(t,"conditions");if(r)throw(0,wn.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Jn(t);if(!n)throw new wn.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Bp(t,n),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new wn.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}]}ot({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await Jn(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Jn(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,u)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,u),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Jn(t).dropTable()}createSchema(t){return Wc({database:t.schema,table:null}),Up.signalSchemaChange(new Pp.SchemaEventMsg(process.pid,Cn.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Hp(t.schema),Up.signalSchemaChange(new Pp.SchemaEventMsg(process.pid,Cn.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,XI.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,rC.default)(t);(0,nC.default)(t,n,r.primaryKey);let s,i=In()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Ke(o,async c=>{if(!i.schemaDefined){s=[];for(let l of n)i.attributes.find(f=>f.name==l)||s.push(l);s.length>0&&await i.addAttributes(s.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=k_(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=In()[t.schema][t.table],n={user:t.hdb_user};return Ke(n,async s=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,n)?o.push(u):c.push(u);return ZI(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=In()[t.schema][t.table];if(!r.createdTimeProperty)throw new wn.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:Cn.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,sC.async_set_timeout)(XJ),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%JJ===0&&await _();return u.length>0&&await _(),s?ZI(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,G_.default)(t,"hashes");if(r)throw r;return jI(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of jI(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Cn.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,G_.default)(t,"value");if(n)throw n;let s=Jn(t);if(!s)throw new wn.ClientError(`Table ${t.table} not found`);let i=t.search_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===Cn.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Bp(t,s)})}async getDataByValue(t,r){let n=new Map,s=Jn(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){Jn({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Jn(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Jn(t),n={};switch(t.search_type){case Cn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case Cn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of eC(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return eC(r,t.search_values?.[0],t.search_values?.[1])}}};a(Bp,"getSelect");a(jI,"getRecords");a(Jn,"getTable");a(ZI,"createDeleteResponse");a(eC,"groupRecordsInHistory")});var yn=T((Dle,aC)=>{"use strict";var{ResourceBridge:jJ}=(oC(),te(iC)),ZJ=Z();ZJ.initSync();var $_;function e2(){return $_||($_=new jJ,$_)}a(e2,"getBridge");aC.exports=e2()});var _C=T((Mle,lC)=>{"use strict";var cC=require("lodash"),Qc=require("mathjs"),t2=require("jsonata"),uC=J();lC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?cC.uniqWith(e,cC.isEqual):e,searchJSON:r2,mad:zc.bind(null,Qc.mad),mean:zc.bind(null,Qc.mean),mode:zc.bind(null,Qc.mode),prod:zc.bind(null,Qc.prod),median:zc.bind(null,Qc.median)};function zc(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(zc,"aggregateFunction");function r2(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(uC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),uC.isEmpty(this.__ala__.res[r])){let n=t2(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(r2,"searchJSON")});var fC=T((Ple,dC)=>{"use strict";var dt=require("moment"),xp="YYYY-MM-DDTHH:mm:ss.SSSZZ";dt.suppressDeprecationWarnings=!0;dC.exports={current_date:()=>dt().utc().format("YYYY-MM-DD"),current_time:()=>dt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return dt(e).utc().format("YYYY");case"month":return dt(e).utc().format("MM");case"day":return dt(e).utc().format("DD");case"hour":return dt(e).utc().format("HH");case"minute":return dt(e).utc().format("mm");case"second":return dt(e).utc().format("ss");case"millisecond":return dt(e).utc().format("SSS");default:break}},date:e=>dt(e).utc().format(xp),date_format:(e,t)=>dt(e).utc().format(t),date_add:(e,t,r)=>dt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>dt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=dt(e).utc(),s=dt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>dt().utc().valueOf(),get_server_time:()=>dt().format(xp),offset_utc:(e,t)=>dt(e).utc().utcOffset(t).format(xp)}});var pC=T((vle,mC)=>{"use strict";var n2=require("@turf/area"),s2=require("@turf/length"),i2=require("@turf/circle"),o2=require("@turf/difference"),a2=require("@turf/distance"),c2=require("@turf/boolean-contains"),u2=require("@turf/boolean-equal"),l2=require("@turf/boolean-disjoint"),_2=require("@turf/helpers"),EC=U(),ge=J(),Rs=W();mC.exports={geoArea:d2,geoLength:f2,geoCircle:E2,geoDifference:h2,geoDistance:hC,geoNear:m2,geoContains:p2,geoEqual:S2,geoCrosses:T2,geoConvert:g2};function d2(e){if(ge.isEmpty(e))return NaN;typeof e=="string"&&(e=ge.autoCastJSON(e));try{return n2.default(e)}catch(t){return Rs.trace(t,e),NaN}}a(d2,"geoArea");function f2(e,t){if(ge.isEmpty(e))return NaN;typeof e=="string"&&(e=ge.autoCastJSON(e));try{return s2.default(e,{units:t||"kilometers"})}catch(r){return Rs.trace(r,e),NaN}}a(f2,"geoLength");function E2(e,t,r){if(ge.isEmpty(e))return NaN;if(ge.isEmpty(t))return NaN;typeof e=="string"&&(e=ge.autoCastJSON(e));try{return i2.default(e,t,{units:r||"kilometers"})}catch(n){return Rs.trace(n,e,t),NaN}}a(E2,"geoCircle");function h2(e,t){if(ge.isEmpty(e))return NaN;if(ge.isEmpty(t))return NaN;typeof e=="string"&&(e=ge.autoCastJSON(e)),typeof t=="string"&&(t=ge.autoCastJSON(t));try{return o2(e,t)}catch(r){return Rs.trace(r,e,t),NaN}}a(h2,"geoDifference");function hC(e,t,r){if(ge.isEmpty(e))return NaN;if(ge.isEmpty(t))return NaN;typeof e=="string"&&(e=ge.autoCastJSON(e)),typeof t=="string"&&(t=ge.autoCastJSON(t));try{return a2.default(e,t,{units:r||"kilometers"})}catch(n){return Rs.trace(n,e,t),NaN}}a(hC,"geoDistance");function m2(e,t,r,n){if(ge.isEmpty(e)||ge.isEmpty(t))return!1;if(ge.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=ge.autoCastJSON(e)),typeof t=="string"&&(t=ge.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return hC(e,t,n)<=r}catch(s){return Rs.trace(s,e,t),!1}}a(m2,"geoNear");function p2(e,t){if(ge.isEmpty(e)||ge.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ge.autoCastJSON(e)),typeof t=="string"&&(t=ge.autoCastJSON(t));try{return c2.default(e,t)}catch(r){return Rs.trace(r,e,t),!1}}a(p2,"geoContains");function S2(e,t){if(ge.isEmpty(e)||ge.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ge.autoCastJSON(e)),typeof t=="string"&&(t=ge.autoCastJSON(t));try{return u2.default(e,t)}catch(r){return Rs.trace(r,e,t),!1}}a(S2,"geoEqual");function T2(e,t){if(ge.isEmpty(e)||ge.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ge.autoCastJSON(e)),typeof t=="string"&&(t=ge.autoCastJSON(t));try{return!l2.default(e,t)}catch(r){return Rs.trace(r,e,t),!1}}a(T2,"geoCrosses");function g2(e,t,r){if(ge.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(ge.isEmpty(t))throw new Error("geo_type is required");if(ge.isEmpty(EC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(EC.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=ge.autoCastJSON(e)),_2[t](e,r)}a(g2,"geoConvert")});var Y_=T((Hle,SC)=>{var Ji=_C(),vr=fC(),Xn=pC();SC.exports=e=>{e.aggr.mad=e.aggr.MAD=Ji.mad,e.aggr.mean=e.aggr.MEAN=Ji.mean,e.aggr.mode=e.aggr.MODE=Ji.mode,e.aggr.prod=e.aggr.PROD=Ji.prod,e.aggr.median=e.aggr.MEDIAN=Ji.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ji.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ji.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=vr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=vr.current_time,e.fn.extract=e.fn.EXTRACT=vr.extract,e.fn.date=e.fn.DATE=vr.date,e.fn.date_format=e.fn.DATE_FORMAT=vr.date_format,e.fn.date_add=e.fn.DATE_ADD=vr.date_add,e.fn.date_sub=e.fn.DATE_SUB=vr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=vr.date_diff,e.fn.now=e.fn.NOW=vr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=vr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=vr.get_server_time,e.fn.getdate=e.fn.GETDATE=vr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=vr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Xn.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Xn.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Xn.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Xn.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Xn.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Xn.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Xn.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Xn.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Xn.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Xn.geoNear}});var AC=T((xle,RC)=>{"use strict";var Jc=require("lodash"),nr=require("alasql");nr.options.cache=!1;var R2=Y_(),TC=require("clone"),K_=require("recursive-iterator"),Ee=W(),Ce=J(),Zo=yn(),A2=U(),{hdb_errors:O2}=ee(),{getDatabases:gC}=(be(),te(Fe)),b2="IS NULL",Dn="There was a problem performing this search. Please check the logs and try again.";R2(nr);var Fp=class{static{a(this,"SQLSearch")}constructor(t,r){if(Ce.isEmpty(t))throw Ee.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(),Ce.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Ce.isEmptyOrZeroLength(n))return Ee.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ee.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ee.error(n),new Error(Dn)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ee.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ee.error(n),new Error(Dn)}if(Object.keys(this.data).length===0)return Ee.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ee.error("Error thrown from processJoins in SQLSearch class method search."),Ee.error(n),new Error(Dn)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ee.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ee.error(n),new Error(Dn)}try{return t=await this._finalSQL(),t}catch(n){throw Ee.error("Error thrown from finalSQL in SQLSearch class method search."),Ee.error(n),new Error(Dn)}}_getColumns(){let t=new K_(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(TC(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Jc.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].__hash_name=gC()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Ce.isEmpty(this.statement.where)){Ee.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new K_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Ce.isEmpty(r)&&r.right)if(Ce.isNotEmptyAndHasValue(r.right.value)){let n=Ce.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new nr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Ce.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new nr.yy.LogicValue({value:i}):n instanceof nr.yy.StringValue&&Ce.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new nr.yy.NumValue({value:i}))});if(t){Ee.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new K_(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Ce.isEmpty(A2.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Ce.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Ce.isEmptyOrZeroLength(r.left.columnid)||Ce.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Ce.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!Ce.isEmpty(r.right.value)||!Ce.isEmpty(r.left.value)?n.add(Ce.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)n.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&Ce.isEmptyOrZeroLength(this.statement.from)&&Ce.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&&Jc.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(Ce.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Ce.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(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&!Ce.isEmptyOrZeroLength(this.columns.columns))return t;if(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&Ce.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await nr.promise(r)}catch(r){throw Ee.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ee.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(TC(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Ce.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(b2)>-1&&this.tables.forEach(s=>{let i={columnid:gC()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Jc.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},u=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(u=!0),!Ce.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Ce.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await Zo.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(l){throw Ee.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ee.error(l),new Error(Dn)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await Zo.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]):(this.data[i].__merged_data[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,E))}))}catch(l){throw Ee.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ee.error(l),new Error(Dn)}else if(!Ce.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Ce.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await Zo.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...n[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]):(this.data[i].__merged_data[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw Ee.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ee.error(l),new Error(Dn)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await Zo.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw Ee.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ee.error(l),new Error(Dn)}}}_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 nr.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new nr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new nr.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 nr.yy.FuncValue:new nr.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}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"";u=u.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,s);f=await nr.promise(h,t),t=null}catch(E){throw Ee.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ee.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=Jc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,O=p.length;S<O;S++){let g=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[g]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new K_(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=Jc.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 Ee.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ee.error(i),new Error(Dn)}}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].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},u=await Zo.getDataByHash(c),_=s.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=s.columns[h],S=E[p]===void 0?null:E[p];this.data[n].__merged_data[f].push(S)}}}}catch(r){throw Ee.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ee.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}`].__merged_data)),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}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===u}).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();Ee.trace(`Final SQL: ${s}`),n=await nr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ee.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ee.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ee.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 Ee.error(O2.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ee.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].__merged_attributes.forEach((o,c)=>{let u=s[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;n=n.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(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.search_attribute=n.attribute,i.search_value="*";let o=await Zo.getDataByValue(i);for(let[c,u]of o)this.data[s].__merged_data[c]||(u[n.attribute]===void 0&&(u[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=u[n.attribute]??null}catch(o){throw Ee.error("There was an error when processing this SQL operation. Check your logs"),Ee.error(o),new Error(Dn)}}return Object.values(Object.values(this.data)[0].__merged_data)}};RC.exports=Fp});var jr=T((qle,OC)=>{"use strict";var y2=Ob();OC.exports={searchByConditions:w2,searchByHash:I2,searchByValue:C2,search:D2};var qp=yn(),{transformReq:Gp}=J(),N2=AC();async function w2(e){return Gp(e),qp.searchByConditions(e)}a(w2,"searchByConditions");async function I2(e){Gp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of qp.searchByHash(e))r&&t.push(r);return t}a(I2,"searchByHash");async function C2(e){Gp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of qp.searchByValue(e))t.push(r);return t}a(C2,"searchByValue");function D2(e,t){try{let r=new y2(e);r.validate(),new N2(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(D2,"search")});var W_=T((kle,bC)=>{"use strict";var L2=yn();bC.exports={writeTransaction:M2};function M2(e,t,r){return L2.writeTransaction(e,t,r)}a(M2,"writeTransaction")});var IC=T((Yle,wC)=>{"use strict";var U2=jr(),P2=Js(),yC=W(),v2=Zr(),$le=W_(),B2=require("clone"),Vp=require("alasql"),H2=Y_(),NC=require("util"),x2=NC.promisify(P2.getTableSchema),F2=NC.promisify(U2.search),q2=U(),kp=J();H2(Vp);wC.exports={update:k2};var G2="There was a problem performing this update. Please check the logs and try again.";async function k2({statement:e,hdb_user:t}){let r=await x2(e.table.databaseid,e.table.tableid),n=V2(e.columns);kp.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=B2(s),c=kp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=Vp.parse(u).statements[0],l=await F2(_),d=$2(n,l);return Y2(o,d,t)}a(k2,"update");function V2(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Vp.compile(`SELECT ${r.expression.toString()} AS [${q2.FUNC_VAL}] FROM ?`)}),t}catch(t){throw yC.error(t),new Error(G2)}}a(V2,"createUpdateRecord");function $2(e,t){return kp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a($2,"buildUpdateRecords");async function Y2(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await v2.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){yC.error(`Error delete new_attributes from update response: ${i}`)}return s}a(Y2,"updateRecords")});var DC=T((zle,CC)=>{var K2=require("alasql"),W2=jr(),Q2=W(),z2=yn(),Yp=require("util"),$p=J(),J2=U(),X2=Js(),Wle=W_(),Qle=Zr(),j2="record",Z2="successfully deleted",e4=Yp.callbackify(s4),t4=Yp.promisify(W2.search),r4=Yp.promisify(X2.getTableSchema);CC.exports={convertDelete:e4};function n4(e){return`${e.deleted_hashes.length} ${j2}${e.deleted_hashes.length===1?"":"s"} ${Z2}`}a(n4,"generateReturnMessage");async function s4({statement:e,hdb_user:t}){let r=await r4(e.table.databaseid,e.table.tableid);$p.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=$p.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=K2.parse(o).statements[0],u={operation:J2.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await t4(c);let _=await z2.deleteRecords(u);return $p.isEmptyOrZeroLength(_.message)&&(_.message=n4(_)),delete _.txn_time,_}catch(_){throw Q2.error(_),_.hdb_code?_.message:_}}a(s4,"convertDelete")});var vC=T((Xle,PC)=>{"use strict";var i4=Hi(),{hdb_errors:LC}=ee(),{getDatabases:MC}=(be(),te(Fe));PC.exports={checkSchemaExists:UC,checkSchemaTableExists:o4,schema_describe:i4};async function UC(e){if(!MC()[e])return LC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(UC,"checkSchemaExists");async function o4(e,t){let r=await UC(e);if(r)return r;if(!MC()[e][t])return LC.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(o4,"checkSchemaTableExists")});var Xc=T((Zle,a4)=>{a4.exports={name:"harperdb",version:"4.3.0-beta.4",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.1","nats-server":"2.10.1"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.11.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.25.1","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.10.0-beta.1",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.17.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",yaml:"2.3.4"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.3.3","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var tu={};ke(tu,{addAnalyticsListener:()=>eu,recordAction:()=>Br,recordActionBinary:()=>tn,setAnalyticsEnabled:()=>c4});function c4(e){YC=e}function Br(e,t,r,n,s){if(!YC)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=J_.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},J_.set(i,o)}Q_||u4()}function tn(e,t,r,n,s){Br(!!e,t,r,n,s)}function eu(e){QC.push(e)}function u4(){Q_=performance.now(),setTimeout(async()=>{let e=performance.now()-Q_;Q_=0;let t=[],r={time:Date.now(),period:e,threadId:Xi.threadId,metrics:t};for(let[s,i]of J_){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of zC){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,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 JC()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Xi.threadId,byThread:!0,...n});for(let s of QC)s(t);J_=new Map,Xi.parentPort?Xi.parentPort.postMessage({type:WC,report:r}):ZC({report:r})},KC).unref()}async function l4(e,t=6e4){let r=Qp(),n=XC(),s;for(let h of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){s=h.value.time;break}if(Date.now()-t<s)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:O}=p;for(let g of S||[]){let{path:R,method:B,type:H,metric:v,count:M,total:$,distribution:K,threads:z,...se}=g;M||(M=1);let Te=v+(R?"-"+R:"");B!==void 0&&(Te+="-"+B),H!==void 0&&(Te+="-"+H);let oe=o.get(Te);if(oe){if(oe.threads){let de=oe.threads[O];if(de)oe=de;else{oe.threads[O]=Object.assign({},se);continue}}oe.count||(oe.count=1);let xe=oe.count;for(let de in se){let It=se[de];typeof It=="number"&&(oe[de]=(oe[de]*xe+It*M)/(xe+M))}oe.count+=M,$>=0&&(oe.total+=$,oe.ratio=oe.total/oe.count)}else oe=Object.assign({period:t},g),delete oe.distribution,o.set(Te,oe),oe.byThread&&(oe.threads=[],oe.threads[O]=Object.assign({},se),u.push(oe));if(K){K=K.map(de=>typeof de=="number"?{value:de,count:1}:de);let xe=c.get(Te);xe?xe.push(...K):c.set(Te,K)}}await JC()}for(let h of u){let{path:p,method:S,type:O,metric:g,count:R,total:B,distribution:H,threads:v,...M}=h;v=v.filter($=>$);for(let $ in M){if(typeof h[$]!="number")continue;let K=0;for(let z of v){let se=z[$];typeof se=="number"&&(K+=se)}h[$]=K}h.count=v.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((de,It)=>de.value>It.value?1:-1);let O=S.count-1,g=[],R=0,B=0,H;for(let de of zC){let It=O*de;for(;R<It;)H=p[B++],R+=H.count,B===1&&R--;let bl=p[B>1?B-2:0];H||(H=p[0]),g.push(H.value-(H.value-bl.value)*(R-It)/H.count)}let[v,M,$,K,z,se,Te,oe,xe]=g;Object.assign(S,{p1:v,p10:M,p25:$,median:K,p75:z,p90:se,p95:Te,p99:oe,p999:xe})}let l;for(let[h,p]of o)p.id=(0,z_.getNextMonotonicTime)(),p.time=_,n.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||n.primaryStore.put(p.id,p)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,z_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-BC,active:E-HC,time:d,...process.memoryUsage()};n.primaryStore.put(h,p,{append:!0}).then(S=>{S||n.primaryStore.put(h,p)})}BC=f,HC=E}async function xC(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Qp(){return FC||(FC=ot({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function XC(){return qC||(qC=ot({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function f4(){jC=!0;let e=(0,Zc.get)(Wp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await l4(KC,e),await xC(Qp(),_4),await xC(XC(),d4)},Math.min(e/2,2147483647)).unref()}function ZC(e,t){let r=e.report;r.threadId=t?.threadId||Xi.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(GC+=n.mean*n.count);r.totalBytesProcessed=GC,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(kC.get(t))}),kC.set(t,t.performance.eventLoopUtilization())),r.id=(0,z_.getNextMonotonicTime)(),Qp().primaryStore.put(r.id,r),jC||f4(),E4&&(eD=m4(r))}async function m4(e){if(await eD,!ri){let r=(0,jc.dirname)((0,$C.getLogFilePath)());try{ri=await(0,Kp.open)((0,jc.join)(r,"analytics.log"),"r+")}catch{ri=await(0,Kp.open)((0,jc.join)(r,"analytics.log"),"w+")}}let t=(await ri.stat()).size;if(t>h4){let r=Buffer.alloc(t);await ri.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ri.write(r,{position:0}),await ri.truncate(r.length),t=r.length}await ri.write(JSON.stringify(e)+`
8
+ `,t)}var Xi,VC,$C,jc,Kp,z_,Zc,Wp,J_,YC,Q_,KC,WC,QC,zC,BC,HC,JC,_4,d4,FC,qC,jC,GC,kC,E4,eD,ri,h4,As=Oe(()=>{Xi=require("worker_threads"),VC=x(Ze());be();$C=x(W()),jc=require("path"),Kp=require("fs/promises"),z_=x(Cr()),Zc=x(Z()),Wp=x(U());jt();(0,Zc.initSync)();J_=new Map,YC=(0,Zc.get)(Wp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(c4,"setAnalyticsEnabled");a(Br,"recordAction");je.recordAnalytics=Br;a(tn,"recordActionBinary");Q_=0,KC=1e3,WC="analytics-report",QC=[];a(eu,"addAnalyticsListener");zC=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(u4,"sendAnalytics");a(l4,"aggregation");BC=0,HC=0,JC=a(()=>new Promise(setImmediate),"rest");a(xC,"cleanup");_4=36e5,d4=31536e6;a(Qp,"getRawAnalyticsTable");a(XC,"getAnalyticsTable");(0,VC.setChildListenerByType)(WC,ZC);a(f4,"startScheduledTasks");GC=0,kC=new Map,E4=!1;a(ZC,"recordAnalytics");h4=1e6;a(m4,"logAnalytics")});var At=T((f_e,gD)=>{"use strict";var Ht=Z();Ht.initSync();var p4=require("fs-extra"),S4=require("semver"),su=require("path"),{monotonicFactory:T4}=require("ulidx"),rD=T4(),g4=require("util"),nD=require("child_process"),R4=g4.promisify(nD.exec),A4=nD.spawn,Ne=tt(),Pe=U(),jp=J(),Hr=W(),X_=ps(),O4=W_(),ru=Ir(),{onMessageByType:b4}=Ze(),{isMainThread:y4}=require("worker_threads"),{Encoder:N4,decode:Zp}=require("msgpackr"),sD=new N4,{isEmpty:to}=jp,iD=en(),w4=48*36e11,I4=5e9;y4&&b4(Pe.ITC_EVENT_TYPES.RESTART,()=>{rn=void 0,eo=void 0});var{connect:C4,StorageType:oD,RetentionPolicy:aD,AckPolicy:j_,DeliverPolicy:Z_,DiscardPolicy:D4,NatsConnection:u_e,JetStreamManager:l_e,JetStreamClient:__e,StringCodec:d_e,JSONCodec:L4,createInbox:eS,headers:M4,ErrorCode:tD}=require("nats"),{PACKAGE_ROOT:U4}=U(),P4=Xc(),{recordAction:v4}=(As(),te(tu)),cD=L4(),B4="clustering",H4=P4.engines[Ne.NATS_SERVER_NAME],x4=su.join(U4,"dependencies"),Xp=su.join(x4,`${process.platform}-${process.arch}`,Ne.NATS_BINARY_NAME),zp,Jp,nu,ji,Zi;gD.exports={runCommand:uD,checkNATSServerInstalled:F4,createConnection:tS,getConnection:ed,getJetStreamManager:iu,getJetStream:_D,getNATSReferences:sr,getServerList:G4,createLocalStream:rS,listStreams:dD,deleteLocalStream:k4,getServerConfig:ou,listRemoteStreams:V4,viewStream:$4,viewStreamIterator:Y4,publishToStream:K4,createWorkQueueStream:W4,addSourceToWorkStream:ED,request:z4,removeSourceFromWorkStream:mD,reloadNATS:nS,reloadNATSHub:J4,reloadNATSLeaf:X4,extractServerName:hD,requestErrorHandler:j4,updateWorkStream:Z4,createLocalTableStream:SD,createTableStreams:e3,purgeTableStream:TD,purgeSchemaTableStreams:t3,getStreamInfo:r3,updateLocalStreams:s3,closeConnection:q4,getJsmServerName:au,addNatsMsgHeader:fD,updateIngestStreamConsumer:Q4,clearClientCache:lD};async function uD(e,t=void 0){let{stdout:r,stderr:n}=await R4(e,{cwd:t});if(n)throw new Error(n.replace(`
9
9
  `,""));return r.replace(`
10
- `,"")}a(oD,"runCommand");async function B4(){try{await E4.access(Xp)}catch{return!1}let e=await oD(`${Xp} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return h4.eq(t,P4)}a(B4,"checkNATSServerInstalled");async function tS(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await rD.getClusterUser();if(Zi(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Br.trace("create nats connection called");let i=await y4({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:xt.get(Pe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:xt.get(Pe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:xt.get(Pe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Br.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Br.error("Error with Nats client connection, connection closed",o),aD()}),i}a(tS,"createConnection");function aD(){tn=void 0,Ji=void 0,Xi=void 0,ji=void 0}a(aD,"clearClientCache");async function H4(){tn&&(await tn.drain(),tn=void 0,Ji=void 0,Xi=void 0,ji=void 0)}a(H4,"closeConnection");var tn,ji;async function ed(){return ji||(ji=tS(xt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),tn=await ji),tn||ji}a(ed,"getConnection");async function ru(){if(Ji)return Ji;Zi(tn)&&await ed();let{domain:e}=nu(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Zi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ji=await tn.jetstreamManager({domain:e,timeout:6e4}),Ji}a(ru,"getJetStreamManager");async function cD(){if(Xi)return Xi;Zi(tn)&&await ed();let{domain:e}=nu(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Zi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Xi=tn.jetstream({domain:e,timeout:6e4}),Xi}a(cD,"getJetStream");async function ir(){let e=tn||await ed(),t=Ji||await ru(),r=Xi||await cD();return{connection:e,jsm:t,js:r}}a(ir,"getNATSReferences");async function x4(e){let t=xt.get(Pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await rD.getClusterUser(),s=await tS(t,r,n),i=eS(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=iD.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=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 jp.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(x4,"getServerList");async function rS(e,t){let{jsm:r}=await ir(),n=xt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=xt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=xt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:nD.File,retention:sD.Limits,subjects:t,discard:w4.Old,max_msgs:s,max_bytes:i,max_age:n})}a(rS,"createLocalStream");async function uD(){let{jsm:e}=await ir(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(uD,"listStreams");async function F4(e){let{jsm:t}=await ir();await t.streams.delete(e)}a(F4,"deleteLocalStream");async function q4(e){let{connection:t}=await ir(),r=[],n=eS(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(iD.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(q4,"listRemoteStreams");async function G4(e,t=void 0,r=void 0){let{jsm:n,js:s}=await ir(),i=ZC(),o={durable_name:i,ack_policy:j_.Explicit};t&&(o.deliver_policy=Z_.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=Zp(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(ye.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(G4,"viewStream");async function*k4(e,t=void 0,r=void 0){let{jsm:n,js:s}=await ir(),i=ZC(),o={durable_name:i,ack_policy:j_.Explicit};t&&(o.deliver_policy=Z_.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=Zp(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(ye.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(k4,"viewStreamIterator");async function V4(e,t,r,n){Br.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=lD(n,r);let{js:s}=await ir(),i=await su(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:tD.encode(n);try{Br.trace(`publishToStream publishing to subject: ${o}`),M4(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return ED(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Br.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await rS(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(V4,"publishToStream");function lD(e,t){t===void 0&&(t=C4());let r=xt.get(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(ye.MSG_HEADERS.ORIGIN)&&r&&t.append(ye.MSG_HEADERS.ORIGIN,r),t}a(lD,"addNatsMsgHeader");function nu(e){e=e.toLowerCase();let t=tu.join(xt.get(Pe.CONFIG_PARAMS.ROOTPATH),U4);if(e===Pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Zi(Jp)&&(Jp={port:Zc.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Zc.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ye.SERVER_SUFFIX.HUB,config_file:ye.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:tu.join(t,ye.PID_FILES.HUB),hdb_nats_path:t}),Jp;if(e===Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Zi(zp)&&(zp={port:Zc.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Zc.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ye.SERVER_SUFFIX.LEAF,config_file:ye.NATS_CONFIG_FILES.LEAF_SERVER,domain:Zc.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ye.SERVER_SUFFIX.LEAF,pid_file_path:tu.join(t,ye.PID_FILES.LEAF),hdb_nats_path:t}),zp;Br.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(nu,"getServerConfig");async function $4(e){let{jsm:t}=await ir(),r=await su();try{await t.streams.add({name:e.stream_name,storage:nD.File,retention:sD.Limits,max_age:b4,max_bytes:N4,subjects:[`${ye.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(n){if(n.code!=="400")throw n}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(n){if(n.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:j_.Explicit,durable_name:e.durable_name,deliver_policy:Z_.All,max_ack_pending:1e4});else throw n}}a($4,"createWorkQueueStream");async function Y4(){let{jsm:e}=await ir();(await e.consumers.info(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,ye.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Br.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,ye.WORK_QUEUE_CONSUMER_NAMES.durable_name),Br.info("Adding pull consumer to ingest stream"),await e.consumers.add(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:j_.Explicit,durable_name:ye.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:Z_.All,max_ack_pending:1e4}))}a(Y4,"updateIngestStreamConsumer");async function _D(e,t,r){let{jsm:n}=await ir(),s=await n.streams.info(t),i=dD(n.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=X_.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(s.config.sources)||s.config.sources.length===0)s.config.sources=[];else for(let p=0,S=s.config.sources.length;p<S;p++)if(d=s.config.sources[p],f=p,l&&d.name===_||!l&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let p=`txn.${c}.${u}.${e}`;await n.streams.purge(t,{filter:p}),s.config.sources.splice(f,1),await n.streams.update(t,s.config)}let h={name:_,opt_start_time:o,filter_subject:`${ye.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),s.config.sources.push(h),await n.streams.update(t,s.config)}a(_D,"addSourceToWorkStream");function dD(e){return e.split(".")[1]}a(dD,"extractServerName");async function fD(e,t,r){let{jsm:n}=await ir(),{schema:s,table:i}=r,o=`txn.${s}.${i}.${e}`;await n.streams.purge(t,{filter:o});let c=X_.createNatsTableStreamName(s,i),u=await n.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let _=u.config.sources.length,l;for(;_--;)if(l=u.config.sources[_],l.name===c&&l.external.api===`$JS.${e}.API`){u.config.sources.splice(_,1);break}await n.streams.update(t,u.config)}a(fD,"removeSourceFromWorkStream");async function K4(e,t,r=6e4,n=eS()){if(!jp.isObject(t))throw new Error("data param must be an object");let s=tD.encode(t),{connection:i}=await ir(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return Zp(c.data)}a(K4,"request");function nS(e){return new Promise(async(t,r)=>{let n=T4(Xp,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(nS,"reloadNATS");async function W4(){let{pid_file_path:e}=nu(Pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await nS(e)}a(W4,"reloadNATSHub");async function Q4(){let{pid_file_path:e}=nu(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await nS(e)}a(Q4,"reloadNATSLeaf");function z4(e,t,r){let n;switch(e.code){case jC.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case jC.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(z4,"requestErrorHandler");async function J4(e,t){let r=t+ye.SERVER_SUFFIX.LEAF;await ED(async()=>{e.subscribe===!0?await _D(r,ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await fD(r,ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(J4,"updateWorkStream");function ED(e){return g4.writeTransaction(Pe.SYSTEM_SCHEMA_NAME,Pe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(ED,"exclusiveLock");async function hD(e,t){let r=X_.createNatsTableStreamName(e,t),n=await su(),s=e3(e,t,n);await rS(r,[s])}a(hD,"createLocalTableStream");async function X4(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await hD(n,s)}}a(X4,"createTableStreams");async function mD(e,t,r=!1){if(xt.get(Pe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=X_.createNatsTableStreamName(e,t),{jsm:s}=await ir();r?await s.streams.purge(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name):await s.streams.purge(n)}catch(n){if(n.message==="stream not found")Br.warn(n);else throw n}}a(mD,"purgeTableStream");async function j4(e,t){if(xt.get(Pe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await mD(e,t[r])}a(j4,"purgeSchemaTableStreams");async function Z4(e){return(await ru()).streams.info(e)}a(Z4,"getStreamInfo");function e3(e,t,r){return`${ye.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(e3,"createSubjectName");async function su(){if(eu)return eu;if(eu=(await ru())?.nc?.info?.server_name,eu===void 0)throw new Error("Unable to get jetstream manager server name");return eu}a(su,"getJsmServerName");async function t3(){let e=await ru(),t=await su(),r=await uD();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=r3(n),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(s.name===ye.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ye.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Br.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else if(s.name===ye.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ye.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Br.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Br.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l}await e.streams.update(s.name,s)}}}a(t3,"updateLocalStreams");function r3(e){let{config:t}=e,r=!1;if(t.name===ye.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===ye.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let n=xt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=xt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=xt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(r3,"updateStreamLimits")});var sd=g((m_e,RD)=>{"use strict";var jo=l_(),Zo=MC(),n3=Y(),s3=require("uuid").v4,h_e=require("clone"),rd=ms(),ea=M(),i3=require("util"),ti=On(),{handleHDBError:or,hdb_errors:o3}=ee(),{HDB_ERROR_MSGS:td,HTTP_STATUS_CODES:ar}=o3,{SchemaEventMsg:nd}=bn(),SD=Rt(),{getDatabases:a3}=(be(),te(Fe)),{transformReq:ta}=J();RD.exports={createSchema:c3,createSchemaStructure:TD,createTable:u3,createTableStructure:gD,createAttribute:E3,dropSchema:l3,dropTable:_3,dropAttribute:d3,getBackup:h3};async function c3(e){let t=await TD(e);return rd.signalSchemaChange(new nd(process.pid,e.operation,e.schema)),t}a(c3,"createSchema");async function TD(e){let t=jo.schema_object(e);if(t)throw or(t,t.message,ar.BAD_REQUEST,void 0,void 0,!0);if(ta(e),!await Zo.checkSchemaExists(e.schema))throw or(new Error,td.SCHEMA_EXISTS_ERR(e.schema),ar.BAD_REQUEST,ea.LOG_LEVELS.ERROR,td.SCHEMA_EXISTS_ERR(e.schema),!0);return await ti.createSchema(e),`database '${e.schema}' successfully created`}a(TD,"createSchemaStructure");async function u3(e){return ta(e),e.hash_attribute=e.primary_key??e.hash_attribute,await gD(e)}a(u3,"createTable");async function gD(e){let t=jo.create_table_object(e);if(t)throw or(t,t.message,ar.BAD_REQUEST,void 0,void 0,!0);if(jo.validateTableResidence(e.residence),!await Zo.checkSchemaTableExists(e.schema,e.table))throw or(new Error,td.TABLE_EXISTS_ERR(e.schema,e.table),ar.BAD_REQUEST,ea.LOG_LEVELS.ERROR,td.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:s3(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ti.createTable(n,e);else throw or(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",ar.BAD_REQUEST);else await ti.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(gD,"createTableStructure");async function l3(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=jo.schema_object(e),n=t??r;if(n)throw or(n,n.message,ar.BAD_REQUEST,void 0,void 0,!0);ta(e);let s=await Zo.checkSchemaExists(e.schema);if(s)throw or(new Error,s,ar.NOT_FOUND,ea.LOG_LEVELS.ERROR,s,!0);let i=await Zo.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ti.dropSchema(e),rd.signalSchemaChange(new nd(process.pid,e.operation,e.schema)),await SD.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(l3,"dropSchema");async function _3(e){let t=jo.table_object(e);if(t)throw or(t,t.message,ar.BAD_REQUEST,void 0,void 0,!0);ta(e);let r=await Zo.checkSchemaTableExists(e.schema,e.table);if(r)throw or(new Error,r,ar.NOT_FOUND,ea.LOG_LEVELS.ERROR,r,!0);return await ti.dropTable(e),await SD.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(_3,"dropTable");async function d3(e){let t=jo.attribute_object(e);if(t)throw or(t,t.message,ar.BAD_REQUEST,void 0,void 0,!0);ta(e);let r=await Zo.checkSchemaTableExists(e.schema,e.table);if(r)throw or(new Error,r,ar.NOT_FOUND,ea.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw or(new Error,"You cannot drop a hash attribute",ar.BAD_REQUEST,void 0,void 0,!0);if(ea.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw or(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,ar.BAD_REQUEST,void 0,void 0,!0);try{return await ti.dropAttribute(e),f3(e),rd.signalSchemaChange(new nd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw n3.error(`Got an error deleting attribute ${i3.inspect(e)}.`),n}}a(d3,"dropAttribute");function f3(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(f3,"dropAttributeFromGlobal");async function E3(e){ta(e);let t=a3()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw or(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,ar.BAD_REQUEST,void 0,void 0,!0);return await ti.createAttribute(e),rd.signalSchemaChange(new nd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(E3,"createAttribute");function h3(e){return ti.getBackup(e)}a(h3,"getBackup")});var OD=g((S_e,AD)=>{"use strict";var{OPERATIONS_ENUM:m3}=M(),sS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=m3.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};AD.exports=sS});var iS=g((R_e,ID)=>{"use strict";var p3=On(),g_e=OD(),id=J(),od=M(),S3=Z(),{handleHDBError:bD,hdb_errors:T3}=ee(),{HDB_ERROR_MSGS:ND,HTTP_STATUS_CODES:yD}=T3,g3=Object.values(od.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),wD="To use this operation audit log must be enabled in harperdb-config.yaml";ID.exports=R3;async function R3(e){if(id.isEmpty(e.schema))throw new Error(ND.SCHEMA_REQUIRED_ERR);if(id.isEmpty(e.table))throw new Error(ND.TABLE_REQUIRED_ERR);if(!S3.get(od.CONFIG_PARAMS.LOGGING_AUDITLOG))throw bD(new Error,wD,yD.BAD_REQUEST,od.LOG_LEVELS.ERROR,wD,!0);let t=id.checkSchemaTableExist(e.schema,e.table);if(t)throw bD(new Error,t,yD.NOT_FOUND,od.LOG_LEVELS.ERROR,t,!0);if(!id.isEmpty(e.search_type)&&g3.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await p3.readAuditLog(e)}a(R3,"readAuditLog")});var DD=g((O_e,CD)=>{"use strict";var{OPERATIONS_ENUM:A3}=M(),oS=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=A3.GET_BACKUP,this.schema=t,this.table=r}};CD.exports=oS});var UD=g((w_e,MD)=>{"use strict";var O3=On(),N_e=DD(),aS=J(),b3=M(),y_e=Z(),{handleHDBError:N3,hdb_errors:y3}=ee(),{HDB_ERROR_MSGS:LD,HTTP_STATUS_CODES:w3}=y3;MD.exports=I3;async function I3(e){if(aS.isEmpty(e.schema))throw new Error(LD.SCHEMA_REQUIRED_ERR);if(aS.isEmpty(e.table))throw new Error(LD.TABLE_REQUIRED_ERR);let t=aS.checkSchemaTableExist(e.schema,e.table);if(t)throw N3(new Error,t,w3.NOT_FOUND,b3.LOG_LEVELS.ERROR,t,!0);return await O3.getBackup(read_audit_log_object)}a(I3,"getBackup")});var FD=g((C_e,xD)=>{var ri=require("validate.js"),vD=Xe(),ra=M(),{handleHDBError:C3,hdb_errors:D3}=ee(),{HDB_ERROR_MSGS:ct,HTTP_STATUS_CODES:L3}=D3,cS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),M3={STRUCTURE_USER:"structure_user"},PD=Object.values(ra.ROLE_TYPES_ENUM),U3="attribute_permissions",P3="attribute_name",{PERMS_CRUD_ENUM:na}=ra,v3=[U3,...Object.values(na)],BD=[na.READ,na.INSERT,na.UPDATE],B3=[P3,...BD];function H3(e){let t=cS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,HD(e,t)}a(H3,"addRoleValidation");function x3(e){let t=cS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,HD(e,t)}a(x3,"alterRoleValidation");function F3(e){let t=cS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,vD.validateObject(e,t)}a(F3,"dropRoleValidation");var q3=["operation","role","id","permission","hdb_user","hdb_auth_header"];function HD(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)q3.includes(n[o])||s.push(n[o]);s.length>0&&ft(ct.INVALID_ROLE_JSON_KEYS(s),r);let i=vD.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{ft(o,r)}),e.permission){let o=G3(e);o&&ft(o,r),PD.forEach(c=>{e.permission[c]&&!ri.isBoolean(e.permission[c])&&ft(ct.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(PD.indexOf(o)<0){if(o===M3.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||ft(ct.SCHEMA_NOT_FOUND(d),r)}continue}ft(ct.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){ft(ct.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){ft(ct.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{v3.includes(l)||ft(ct.INVALID_PERM_KEY(l),r,o,u)}),Object.values(na).forEach(l=>{ri.isDefined(_[l])?ri.isBoolean(_[l])||ft(ct.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):ft(ct.TABLE_PERM_MISSING(l),r,o,u)}),ri.isDefined(_.attribute_permissions)){if(!ri.isArray(_.attribute_permissions)){ft(ct.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{ft(ct.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!B3.includes(p)&&p!==na.DELETE&&ft(ct.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!ri.isDefined(E.attribute_name)){ft(ct.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){ft(ct.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}BD.forEach(p=>{ri.isDefined(E[p])?ri.isBoolean(E[p])||ft(ct.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):ft(ct.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;ft(ct.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return k3(r)}a(HD,"customValidate");xD.exports={addRoleValidation:H3,alterRoleValidation:x3,dropRoleValidation:F3};function G3(e){let{operation:t,permission:r}=e;if(t===ra.OPERATIONS_ENUM.ADD_ROLE||t===ra.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 ct.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?ra.ROLE_TYPES_ENUM.SUPER_USER:ra.ROLE_TYPES_ENUM.CLUSTER_USER;return ct.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(G3,"validateNoSUPerms");function k3(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:ct.ROLE_PERMS_ERROR,...e};return C3(new Error,n,L3.BAD_REQUEST)}else return null}a(k3,"generateRolePermResponse");function ft(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(ft,"addPermError")});var ES=g((L_e,VD)=>{"use strict";var qD=jr(),GD=Xr(),V3=qi(),lS=FD(),_S=ms(),$3=require("uuid").v4,Y3=require("util"),ad=M(),K3=J(),dS=GD.searchByValue,W3=GD.searchByHash,Q3=Y3.promisify(V3.delete),z3=Kn(),J3=zo(),{hdb_errors:X3,handleHDBError:eo}=ee(),{HDB_ERROR_MSGS:kD,HTTP_STATUS_CODES:iu}=X3,{UserEventMsg:fS}=bn();VD.exports={addRole:j3,alterRole:Z3,dropRole:eX,listRoles:tX};function uS(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(uS,"scrubRoleDetails");async function j3(e){let t=lS.addRoleValidation(e);if(t)throw t;e=uS(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await dS(r)||[])}catch(i){throw eo(i)}if(n&&n.length>0)throw eo(new Error,kD.ROLE_ALREADY_EXISTS(e.role),iu.CONFLICT,void 0,void 0,!0);e.id||(e.id=$3());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await qD.insert(s),_S.signalUserChange(new fS(process.pid)),e=uS(e),e}a(j3,"addRole");async function Z3(e){let t=lS.alterRoleValidation(e);if(t)throw t;e=uS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await qD.update(r)}catch(s){throw eo(s)}if(n&&n?.message==="updated 0 of 1 records")throw eo(new Error,"Invalid role id",iu.BAD_REQUEST,void 0,void 0,!0);return await _S.signalUserChange(new fS(process.pid)),e}a(Z3,"alterRole");async function eX(e){let t=lS.dropRoleValidation(e);if(t)throw eo(new Error,t,iu.BAD_REQUEST,void 0,void 0,!0);let r=new J3(ad.SYSTEM_SCHEMA_NAME,ad.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await W3(r));if(n.length===0)throw eo(new Error,kD.ROLE_NOT_FOUND,iu.NOT_FOUND,void 0,void 0,!0);let s=new z3(ad.SYSTEM_SCHEMA_NAME,ad.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await dS(s)),o=!1;if(K3.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw eo(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,iu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Q3(c),_S.signalUserChange(new fS(process.pid)),`${n[0].role} successfully deleted`}a(eX,"dropRole");async function tX(){return dS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(tX,"listRoles")});var WD=g((U_e,KD)=>{"use strict";var rX=Z(),ni=require("joi"),nX=Xe(),$D=require("moment"),sX=require("fs-extra"),hS=require("path"),iX=require("lodash"),ou=M(),{LOG_LEVELS:to}=M(),oX="YYYY-MM-DD hh:mm:ss",aX=hS.resolve(__dirname,"../logs");KD.exports=function(e){return nX.validateBySchema(e,cX)};var cX=ni.object({from:ni.custom(YD),until:ni.custom(YD),level:ni.valid(to.NOTIFY,to.FATAL,to.ERROR,to.WARN,to.INFO,to.DEBUG,to.TRACE),order:ni.valid("asc","desc"),limit:ni.number().min(1),start:ni.number().min(0),log_name:ni.custom(uX)});function YD(e,t){if($D(e,$D.ISO_8601).format(oX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(YD,"validateDatetime");function uX(e,t){if(iX.invert(ou.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=rX.get(ou.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?ou.LOG_NAMES.HDB:e,i=s===ou.LOG_NAMES.INSTALL?hS.join(aX,ou.LOG_NAMES.INSTALL):hS.join(n,s);return sX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(uX,"validateReadLogPath")});var pS=g((v_e,zD)=>{"use strict";var cd=M(),lX=Y(),_X=Z(),dX=WD(),mS=require("path"),QD=require("fs-extra"),{once:fX}=require("events"),{handleHDBError:EX,hdb_errors:hX}=ee(),{PACKAGE_ROOT:mX}=M(),pX=mS.join(mX,"logs"),SX=1e3,TX=200;zD.exports=gX;async function gX(e){let t=dX(e);if(t)throw EX(t,t.message,hX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=_X.get(cd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?cd.LOG_NAMES.HDB:e.log_name,s=n===cd.LOG_NAMES.INSTALL?mS.join(pX,cd.LOG_NAMES.INSTALL):mS.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?SX:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max(QD.statSync(s).size-(h+5)*TX,0));let S=QD.createReadStream(s,{start:p});S.on("error",v=>{lX.error(v)});let T=0,A=[],b="",H;S.on("data",v=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;v=b+v;let z=0,W;for(;(W=P.exec(v))&&!S.destroyed;){H&&(H.message=v.slice(z,W.index),F(H));let[Q,se,pe]=W,oe=pe.split("] ["),xe=oe[0],le=oe[1];oe.splice(0,2),H={timestamp:se,thread:xe,level:le,tags:oe,message:""},z=W.index+Q.length}b=v.slice(z)}),S.on("end",v=>{S.destroyed||H&&(H.message=b.trim(),F(H))}),S.resume();function F(v){let P,z,W;switch(!0){case(i&&c&&_):P=new Date(v.timestamp),z=new Date(u),W=new Date(l),v.level===o&&P>=z&&P<=W&&T<E?T++:v.level===o&&P>=z&&P<=W&&(si(v,f,A),T++,T===h&&S.destroy());break;case(i&&c):P=new Date(v.timestamp),z=new Date(u),v.level===o&&P>=z&&T<E?T++:v.level===o&&P>=z&&(si(v,f,A),T++,T===h&&S.destroy());break;case(i&&_):P=new Date(v.timestamp),W=new Date(l),v.level===o&&P<=W&&T<E?T++:v.level===o&&P<=W&&(si(v,f,A),T++,T===h&&S.destroy());break;case(c&&_):P=new Date(v.timestamp),z=new Date(u),W=new Date(l),P>=z&&P<=W&&T<E?T++:P>=z&&P<=W&&(si(v,f,A),T++,T===h&&S.destroy());break;case i:v.level===o&&T<E?T++:v.level===o&&(si(v,f,A),T++,T===h&&S.destroy());break;case c:P=new Date(v.timestamp),z=new Date(u),P>=z&&T<E?T++:P>=z&&T>=E&&(si(v,f,A),T++,T===h&&S.destroy());break;case _:P=new Date(v.timestamp),W=new Date(l),P<=W&&T<E?T++:P<=W&&T>=E&&(si(v,f,A),T++,T===h&&S.destroy());break;default:T<E?T++:(si(v,f,A),T++,T===h&&S.destroy())}}return a(F,"onLogMessage"),await fX(S,"close"),A}a(gX,"readLog");function si(e,t,r){t==="desc"?RX(e,r):t==="asc"?AX(e,r):r.push(e)}a(si,"pushLineToResult");function RX(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(RX,"insertDescending");function AX(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(AX,"insertAscending")});var ud=g((q_e,ZD)=>{"use strict";var SS=require("joi"),{string:au,boolean:JD,date:OX}=SS.types(),bX=Xe(),{validateSchemaExists:H_e,validateTableExists:x_e,validateSchemaName:F_e}=kn(),NX=M(),yX=tt(),XD=Z();XD.initSync();var wX=au.invalid(XD.get(NX.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(yX.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).required(),jD={operation:au.valid("add_node","update_node","set_node_replication"),node_name:wX,subscriptions:SS.array().items({table:au.optional(),schema:au.optional(),database:au.optional(),subscribe:JD.required(),publish:JD.required().custom(CX),start_time:OX.iso()}).min(1).required()};function IX(e){return bX.validateBySchema(e,SS.object(jD))}a(IX,"addUpdateNodeValidator");function CX(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(CX,"checkForFalsy");ZD.exports={addUpdateNodeValidator:IX,validation_schema:jD}});var tL=g((k_e,eL)=>{var DX=Xe(),LX={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};eL.exports=function(e){return DX.validateObject(e,LX)}});var gS=g((V_e,rL)=>{"use strict";var MX=M().OPERATIONS_ENUM,TS=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=MX.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};rL.exports=TS});var sL=g((Y_e,nL)=>{"use strict";var UX={OPERATION:"operation",REFRESH:"refresh"},RS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},AS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};nL.exports={JWTTokens:RS,TOKEN_TYPE_ENUM:UX,JWTRSAKeys:AS}});var lu=g((W_e,cL)=>{"use strict";var uu=require("jsonwebtoken"),OS=require("fs-extra"),bS=J(),rn=M(),{handleHDBError:cr,hdb_errors:PX}=ee(),{HTTP_STATUS_CODES:ur,AUTHENTICATION_ERROR_MSGS:lr}=PX,cu=Y(),iL=O_(),wS=Zr(),vX=jr().update,BX=gS(),HX=ms(),{UserEventMsg:xX}=bn(),ii=Z();ii.initSync();var NS=require("path"),{JWTTokens:FX,JWTRSAKeys:qX,TOKEN_TYPE_ENUM:ld}=sL(),GX=ii.get(rn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ii.get(rn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",kX=ii.get(rn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ii.get(rn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",_d="RS256",yS;cL.exports={createTokens:VX,validateOperationToken:YX,refreshOperationToken:$X,validateRefreshToken:aL};async function VX(e){if(bS.isEmpty(e)||typeof e!="object")throw cr(new Error,lr.INVALID_AUTH_OBJECT,ur.BAD_REQUEST,void 0,void 0,!0);if(bS.isEmpty(e.username))throw cr(new Error,lr.USERNAME_REQUIRED,ur.BAD_REQUEST,void 0,void 0,!0);if(bS.isEmpty(e.password))throw cr(new Error,lr.PASSWORD_REQUIRED,ur.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await wS.findAndValidateUser(e.username,e.password),!t)throw cr(new Error,lr.INVALID_CREDENTIALS,ur.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw cu.error(f),cr(new Error,lr.INVALID_CREDENTIALS,ur.UNAUTHORIZED,void 0,void 0,!0)}let r=await dd(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await oL(i,r.private_key,r.passphrase),c=await uu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:kX,algorithm:_d,subject:ld.REFRESH}),u=iL.hash(c),_=new BX(rn.SYSTEM_SCHEMA_NAME,rn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await vX(_)}catch(f){cu.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw cr(new Error,lr.REFRESH_TOKEN_SAVE_FAILED,ur.INTERNAL_SERVER_ERROR);return HX.signalUserChange(new xX(process.pid)),new FX(o,c)}a(VX,"createTokens");async function oL(e,t,r){return await uu.sign(e,{key:t,passphrase:r},{expiresIn:GX,algorithm:_d,subject:ld.OPERATION})}a(oL,"signOperationToken");async function dd(){if(yS===void 0)try{let e=NS.join(ii.getHdbBasePath(),rn.LICENSE_KEY_DIR_NAME,rn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=NS.join(ii.getHdbBasePath(),rn.LICENSE_KEY_DIR_NAME,rn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=NS.join(ii.getHdbBasePath(),rn.LICENSE_KEY_DIR_NAME,rn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await OS.readFile(e)).toString(),s=(await OS.readFile(t)).toString(),i=(await OS.readFile(r)).toString();yS=new qX(i,s,n)}catch(e){throw cu.error(e),cr(new Error,lr.NO_ENCRYPTION_KEYS,ur.INTERNAL_SERVER_ERROR)}return yS}a(dd,"getJWTRSAKeys");async function $X(e){if(!e)throw cr(new Error,lr.INVALID_BODY,ur.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw cr(new Error,lr.REFRESH_TOKEN_REQUIRED,ur.BAD_REQUEST,void 0,void 0,!0);await aL(e.refresh_token);let t=await dd(),r=await uu.decode(e.refresh_token);return{operation_token:await oL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a($X,"refreshOperationToken");async function YX(e){try{let t=await dd(),r=await uu.verify(e,t.public_key,{algorithms:_d,subject:ld.OPERATION});return await wS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw cu.warn(t),t.name&&t.name==="TokenExpiredError"?cr(new Error,lr.TOKEN_EXPIRED,ur.FORBIDDEN):cr(new Error,lr.INVALID_TOKEN,ur.UNAUTHORIZED)}}a(YX,"validateOperationToken");async function aL(e){let t;try{let r=await dd(),n=await uu.verify(e,r.public_key,{algorithms:_d,subject:ld.REFRESH});t=await wS.findAndValidateUser(n.username,void 0,!1)}catch(r){throw cu.warn(r),r.name&&r.name==="TokenExpiredError"?cr(new Error,lr.TOKEN_EXPIRED,ur.FORBIDDEN):cr(new Error,lr.INVALID_TOKEN,ur.UNAUTHORIZED)}if(!iL.validate(t.refresh_token,e))throw cr(new Error,lr.INVALID_TOKEN,ur.UNAUTHORIZED);return t}a(aL,"validateRefreshToken")});var IS=g((J_e,_L)=>{"use strict";var KX=tL(),sa=require("passport"),WX=require("passport-local").Strategy,QX=require("passport-http").BasicStrategy,zX=require("util"),JX=Zr(),lL=zX.callbackify(JX.findAndValidateUser),z_e=Or(),XX=M(),uL=lu();sa.use(new WX(function(e,t,r){lL(e,t,r)}));sa.use(new QX(function(e,t,r){lL(e,t,r)}));sa.serializeUser(function(e,t){t(null,e)});sa.deserializeUser(function(e,t){t(null,e)});function jX(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":sa.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===XX.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?uL.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):uL.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:sa.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(jX,"authorize");function ZX(e,t){let r=KX(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(ZX,"checkPermissions");_L.exports={authorize:jX,checkPermissions:ZX}});var ia=g((j_e,dL)=>{"use strict";var CS=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},DS=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};dL.exports={Node:CS,NodeSubscription:DS}});var EL=g((ede,fL)=>{"use strict";var ej=M().OPERATIONS_ENUM,LS=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=ej.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};fL.exports=LS});var _u=g((rde,hL)=>{"use strict";var MS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},US=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};hL.exports={RemotePayloadObject:MS,RemotePayloadSubscription:US}});var pL=g((sde,mL)=>{"use strict";var PS=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};mL.exports=PS});var gL=g((ude,TL)=>{"use strict";var tj=pL(),ode=lt(),SL=$e(),rj=Y(),{getSchemaPath:ade,getTransactionAuditStorePath:cde}=Ke(),{getDatabases:nj}=(be(),te(Fe));TL.exports=sj;async function sj(e){let t=new tj;try{let r=nj()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await SL.environmentDataSize(schema_path,e.name),o=await SL.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){rj.warn(`unable to stat table dbi due to ${r}`)}return t}a(sj,"lmdbGetTableSize")});var AL=g((_de,RL)=>{"use strict";var vS=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};RL.exports=vS});var oa=g((hde,yL)=>{"use strict";var ij=require("fs-extra"),oj=require("path"),Wt=require("systeminformation"),oi=Y(),aj=Rt(),BS=tt(),Ed=M(),cj=gL(),NL=vi(),{getThreadInfo:OL}=Ze(),KS=Z();KS.initSync();var uj=AL(),{openEnvironment:fde}=$e(),{getSchemaPath:Ede}=Ke(),{database:lj}=(be(),te(Fe)),fd;yL.exports={getHDBProcessInfo:qS,getNetworkInfo:kS,getDiskInfo:GS,getMemoryInfo:FS,getCPUInfo:xS,getTimeInfo:HS,getSystemInformation:VS,systemInformation:_j,getTableSize:$S,getMetrics:YS};function HS(){return Wt.time()}a(HS,"getTimeInfo");async function xS(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Wt.cpu();l.cpu_speed=await Wt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:T,...A}=await Wt.currentLoad();return A.cpus=[],T.forEach(b=>{let{raw_load:H,raw_load_idle:F,raw_load_irq:v,raw_load_nice:P,raw_load_system:z,raw_load_user:W,...Q}=b;A.cpus.push(Q)}),l.current_load=A,l}catch(e){return oi.error(`error in getCPUInfo: ${e}`),{}}}a(xS,"getCPUInfo");async function FS(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Wt.mem();return Object.assign(s,process.memoryUsage())}catch(e){return oi.error(`error in getMemoryInfo: ${e}`),{}}}a(FS,"getMemoryInfo");async function qS(){let e={core:[],clustering:[]};try{let t=await Wt.processes(),r;try{r=Number.parseInt(await ij.readFile(oj.join(KS.get(Ed.CONFIG_PARAMS.ROOTPATH),Ed.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Ed.NODE_ERROR_CODES.ENOENT)oi.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");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 oi.error(`error in getHDBProcessInfo: ${t}`),e}}a(qS,"getHDBProcessInfo");async function GS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Wt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Wt.fsStats();return e.read_write=_,e.size=await Wt.fsSize(),e}catch(t){return oi.error(`error in getDiskInfo: ${t}`),e}}a(GS,"getDiskInfo");async function kS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Wt.networkInterfaceDefault(),e.latency=await Wt.inetChecksite("google.com"),(await Wt.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=n;e.interfaces.push(f)}),(await Wt.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return oi.error(`error in getNetworkInfo: ${t}`),e}}a(kS,"getNetworkInfo");async function VS(){if(fd!==void 0)return fd;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Wt.osInfo();e=c;let u=await Wt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,fd=e,fd}catch(t){return oi.error(`error in getSystemInformation: ${t}`),e}}a(VS,"getSystemInformation");async function $S(){let e=[],t=await NL.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await cj(n));return e}a($S,"getTableSize");async function YS(){let e=await NL.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=lj({database:r,table:s}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),n[s]=o}catch(i){oi.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(YS,"getMetrics");async function bL(){if(KS.get(Ed.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await aj.getNATSReferences(),r=await t.streams.info(BS.WORK_QUEUE_CONSUMER_NAMES.stream_name),n=await e.consumers.get(BS.WORK_QUEUE_CONSUMER_NAMES.stream_name,BS.WORK_QUEUE_CONSUMER_NAMES.durable_name),s={ingest:{stream:{...r.state},consumer:{num_ack_pending:n._info.num_ack_pending,num_redelivered:n._info.num_redelivered,num_waiting:n._info.num_waiting,num_pending:n._info.num_pending}}};return r.sources&&(s.ingest.stream.sources=r.sources),s}}a(bL,"getNatsStreamInfo");async function _j(e){let t=new uj;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await VS(),t.time=HS(),t.cpu=await xS(),t.memory=await FS(),t.disk=await GS(),t.network=await kS(),t.harperdb_processes=await qS(),t.table_size=await $S(),t.metrics=await YS(),t.threads=await OL(),t.replication=await bL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await VS();break;case"time":t.time=HS();break;case"cpu":t.cpu=await xS();break;case"memory":t.memory=await FS();break;case"disk":t.disk=await GS();break;case"network":t.network=await kS();break;case"harperdb_processes":t.harperdb_processes=await qS();break;case"table_size":t.table_size=await $S();break;case"database_metrics":case"metrics":t.metrics=await YS();break;case"threads":t.threads=await OL();break;case"replication":t.replication=await bL();break;default:break}return t}a(_j,"systemInformation")});var md=g((pde,wL)=>{"use strict";wL.exports={version:dj,printVersion:fj};var hd=Qc();function dj(){if(hd)return hd.version}a(dj,"version");function fj(){hd&&console.log(`HarperDB Version ${hd.version}`)}a(fj,"printVersion")});var Rs=g((Rde,LL)=>{"use strict";var Ej=jr(),WS=J(),hj=require("util"),ro=M(),IL=Z();IL.initSync();var mj=IS(),CL=Xr(),{Node:Tde,NodeSubscription:gde}=ia(),pj=zo(),Sj=EL(),{RemotePayloadObject:Tj,RemotePayloadSubscription:gj}=_u(),{handleHDBError:Rj,hdb_errors:Aj}=ee(),{HTTP_STATUS_CODES:Oj,HDB_ERROR_MSGS:bj}=Aj,Nj=Kn(),yj=oa(),wj=md(),{getDatabases:Ij}=(be(),te(Fe)),Cj=hj.promisify(mj.authorize),Dj=CL.searchByHash,Lj=CL.searchByValue;LL.exports={authHeaderToUser:Mj,isEmpty:Uj,getNodeRecord:Pj,upsertNodeRecord:vj,buildNodePayloads:Bj,checkClusteringEnabled:Hj,getAllNodeRecords:xj,getSystemInfo:Fj,reverseSubscription:DL};async function Mj(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Cj(t,null),e}a(Mj,"authHeaderToUser");function Uj(e){return e==null}a(Uj,"isEmpty");async function Pj(e){let t=new pj(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Dj(t)}a(Pj,"getNodeRecord");async function vj(e){let t=new Sj(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Ej.upsert(t)}a(vj,"upsertNodeRecord");function DL(e){if(WS.isEmpty(e.subscribe)||WS.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(DL,"reverseSubscription");function Bj(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=WS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=DL(c),E=Ij()[u]?.[_],h=new gj(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new Tj(r,t,s,n)}a(Bj,"buildNodePayloads");function Hj(){if(!IL.get(ro.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Rj(new Error,bj.CLUSTERING_NOT_ENABLED,Oj.BAD_REQUEST,void 0,void 0,!0)}a(Hj,"checkClusteringEnabled");async function xj(){let e=new Nj(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Lj(e))}a(xj,"getAllNodeRecords");async function Fj(){let e=await yj.getSystemInformation();return{hdb_version:wj.version(),node_version:e.node_version,platform:e.platform}}a(Fj,"getSystemInfo")});var QS=g((Ode,FL)=>{"use strict";var pd=Rt(),ML=J(),UL=tt(),PL=M(),Sd=Y(),vL=sd(),qj=Ep(),{RemotePayloadObject:Gj}=_u(),{handleHDBError:BL,hdb_errors:kj}=ee(),{HTTP_STATUS_CODES:HL}=kj,{NodeSubscription:xL}=ia();FL.exports=Vj;async function Vj(e,t){let r;try{r=await pd.request(`${t}.${UL.REQUEST_SUFFIX}`,new Gj(PL.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Sd.trace("Response from remote describe all request:",r)}catch(o){Sd.error(`addNode received error from describe all request to remote node: ${o}`);let c=pd.requestErrorHandler(o,"add_node",t);throw BL(new Error,c,HL.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===UL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw BL(new Error,o,HL.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===PL.SYSTEM_SCHEMA_NAME){await pd.createLocalTableStream(u,c);let h=new xL(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=ML.doesSchemaExist(u),l=n[u]!==void 0,d=c?ML.doesTableExist(u,c):!0,f=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){s.push(o);continue}if(!_&&l&&(Sd.trace(`addNode creating schema: ${u}`),await vL.createSchema({operation:"create_schema",schema:u})),!d&&f){Sd.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new qj(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await vL.createTable(h)}await pd.createLocalTableStream(u,c);let E=new xL(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(Vj,"reviewSubscriptions")});var Rd=g((Nde,kL)=>{"use strict";var{handleHDBError:Td,hdb_errors:$j}=ee(),{HTTP_STATUS_CODES:gd}=$j,{addUpdateNodeValidator:Yj}=ud(),du=Y(),GL=M(),qL=tt(),Kj=J(),zS=Rt(),fu=Rs(),Wj=Z(),Qj=QS(),{Node:zj,NodeSubscription:Jj}=ia(),{broadcast:Xj}=Ze(),jj="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Zj="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",eZ=Wj.get(GL.CONFIG_PARAMS.CLUSTERING_NODENAME);kL.exports=tZ;async function tZ(e,t=!1){du.trace("addNode called with:",e),fu.checkClusteringEnabled();let r=Yj(e);if(r)throw Td(r,r.message,gd.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await fu.getNodeRecord(n);if(!Kj.isEmptyOrZeroLength(d))throw Td(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,gd.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Qj(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=jj,o;let c=fu.buildNodePayloads(s,eZ,GL.OPERATIONS_ENUM.ADD_NODE,await fu.getSystemInfo());du.trace("addNode sending remote payload:",c);let u;try{u=await zS.request(`${n}.${qL.REQUEST_SUFFIX}`,c)}catch(d){du.error(`addNode received error from request: ${d}`);let f=zS.requestErrorHandler(d,"add_node",n);throw Td(new Error,f,gd.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===qL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw Td(new Error,d,gd.INTERNAL_SERVER_ERROR,"error",d)}du.trace(u);let _=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];du.trace("Add node updating work stream for node:",n,"subscriptions:",E),await zS.updateWorkStream(E,n),s[d].start_time===void 0&&delete s[d].start_time,_.push(new Jj(E.schema,E.table,E.publish,E.subscribe))}let l=new zj(n,_,u.system_info);return await fu.upsertNodeRecord(l),Xj({type:"nats_update"}),i.length>0?o.message=Zj:o.message=`Successfully added '${n}' to manifest`,o}a(tZ,"addNode")});var ZS=g((Ide,YL)=>{"use strict";var{handleHDBError:JS,hdb_errors:rZ}=ee(),{HTTP_STATUS_CODES:XS}=rZ,{addUpdateNodeValidator:nZ}=ud(),Eu=Y(),$L=M(),VL=tt(),wde=J(),jS=Rt(),hu=Rs(),sZ=Z(),{cloneDeep:iZ}=require("lodash"),oZ=QS(),{Node:aZ,NodeSubscription:cZ}=ia(),{broadcast:uZ}=Ze(),lZ="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",_Z="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",dZ=sZ.get($L.CONFIG_PARAMS.CLUSTERING_NODENAME);YL.exports=fZ;async function fZ(e){Eu.trace("updateNode called with:",e),hu.checkClusteringEnabled();let t=nZ(e);if(t)throw JS(t,t.message,XS.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await hu.getNodeRecord(r);s.length>0&&(n=iZ(s));let{added:i,skipped:o}=await oZ(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=lZ,c;let u=hu.buildNodePayloads(i,dZ,$L.OPERATIONS_ENUM.UPDATE_NODE,await hu.getSystemInfo());Eu.trace("updateNode sending remote payload:",u);let _;try{_=await jS.request(`${r}.${VL.REQUEST_SUFFIX}`,u)}catch(l){Eu.error(`updateNode received error from request: ${l}`);let d=jS.requestErrorHandler(l,"update_node",r);throw JS(new Error,d,XS.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===VL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw JS(new Error,l,XS.INTERNAL_SERVER_ERROR,"error",l)}Eu.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];Eu.trace(`updateNode updating work stream for node: ${r} subscription:`,f),await jS.updateWorkStream(f,r),i[l].start_time===void 0&&delete i[l].start_time}return n||(n=[new aZ(r,[],_.system_info)]),await EZ(n[0],i,_.system_info),o.length>0?c.message=_Z:c.message=`Successfully updated '${r}'`,c}a(fZ,"updateNode");async function EZ(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=n.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new cZ(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await hu.upsertNodeRecord(n),uZ({type:"nats_update"})}a(EZ,"updateNodeTable")});var JL=g((Dde,zL)=>{"use strict";var QL=require("joi"),{string:KL}=QL.types(),hZ=Xe(),WL=M(),mZ=Z(),pZ=tt();zL.exports=SZ;function SZ(e){let t=KL.invalid(mZ.get(WL.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(pZ.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=QL.object({operation:KL.valid(WL.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return hZ.validateBySchema(e,r)}a(SZ,"removeNodeValidator")});var Od=g((Mde,rM)=>{"use strict";var{handleHDBError:XL,hdb_errors:TZ}=ee(),{HTTP_STATUS_CODES:jL}=TZ,gZ=JL(),mu=Y(),ZL=Rs(),RZ=J(),Ad=M(),eM=tt(),tM=Rt(),AZ=Z(),{RemotePayloadObject:OZ}=_u(),{NodeSubscription:bZ}=ia(),NZ=qc(),yZ=qi(),{broadcast:wZ}=Ze(),IZ=AZ.get(Ad.CONFIG_PARAMS.CLUSTERING_NODENAME);rM.exports=CZ;async function CZ(e){mu.trace("removeNode called with:",e),ZL.checkClusteringEnabled();let t=gZ(e);if(t)throw XL(t,t.message,jL.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await ZL.getNodeRecord(r);if(RZ.isEmptyOrZeroLength(n))throw XL(new Error,`Node '${r}' was not found.`,jL.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new OZ(Ad.OPERATIONS_ENUM.REMOVE_NODE,IZ,[]),i,o=!1;try{i=await tM.request(`${r}.${eM.REQUEST_SUFFIX}`,s),mu.trace("Remove node reply from remote node:",r,i)}catch(u){mu.error("removeNode received error from request:",u),o=!0}for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];mu.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new bZ(l.schema,l.table,!1,!1);await tM.updateWorkStream(d,r)}let c=new NZ(Ad.SYSTEM_SCHEMA_NAME,Ad.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await yZ.deleteRecord(c),wZ({type:"nats_update"}),i?.status===eM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(mu.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(CZ,"removeNode")});var iM=g((Pde,sM)=>{"use strict";var nM=require("joi"),{string:DZ,array:LZ}=nM.types(),MZ=Xe(),UZ=ud();sM.exports=PZ;function PZ(e){let t=nM.object({operation:DZ.valid("configure_cluster").required(),connections:LZ.items(UZ.validation_schema).required()});return MZ.validateBySchema(e,t)}a(PZ,"configureClusterValidator")});var eT=g((Bde,lM)=>{"use strict";var vZ=M(),bd=Y(),BZ=J(),HZ=Od(),xZ=Rd(),oM=Rs(),FZ=iM(),{handleHDBError:aM,hdb_errors:qZ}=ee(),{HTTP_STATUS_CODES:cM}=qZ,GZ="Configure cluster complete.",kZ="Failed to configure the cluster. Check the logs for more details.",VZ="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";lM.exports=$Z;async function $Z(e){bd.trace("configure cluster called with:",e),oM.checkClusteringEnabled();let t=FZ(e);if(t)throw aM(t,t.message,cM.BAD_REQUEST,void 0,void 0,!0);let r=await oM.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(uM(HZ,{operation:vZ.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);bd.trace("All results from configure_cluster remove node:",s);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(uM(xZ,E,E.node_name))}let c=await Promise.allSettled(i);bd.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=s.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(bd.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(BZ.isEmptyOrZeroLength(u))return{message:GZ,connections:_};if(l)return{message:VZ,failed_nodes:u,connections:_};throw aM(new Error,kZ,cM.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a($Z,"configureCluster");async function uM(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(uM,"functionWrapper")});var dM=g((xde,_M)=>{"use strict";var Nd=require("joi"),YZ=Xe(),{validateSchemaExists:KZ,validateTableExists:WZ,validateSchemaName:QZ}=kn(),zZ=Nd.object({operation:Nd.string().valid("purge_stream"),schema:Nd.string().custom(KZ).custom(QZ).required(),table:Nd.string().custom(WZ).required()});function JZ(e){return YZ.validateBySchema(e,zZ)}a(JZ,"purgeStreamValidator");_M.exports=JZ});var tT=g((qde,fM)=>{"use strict";var{handleHDBError:XZ,hdb_errors:jZ}=ee(),{HTTP_STATUS_CODES:ZZ}=jZ,e5=dM(),t5=Rt(),r5=Rs();fM.exports=n5;async function n5(e){if(e.purge_ingest!==!0){let s=e5(e);if(s)throw XZ(s,s.message,ZZ.BAD_REQUEST,void 0,void 0,!0)}r5.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await t5.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(n5,"purgeStream")});var sT=g((kde,TM)=>{"use strict";var nT=Rs(),s5=Rt(),mM=Z(),yd=M(),no=tt(),i5=J(),rT=Y(),{RemotePayloadObject:o5}=_u(),{ErrorCode:EM}=require("nats"),hM=mM.get(yd.CONFIG_PARAMS.CLUSTERING_ENABLED),pM=mM.get(yd.CONFIG_PARAMS.CLUSTERING_NODENAME);TM.exports={clusterStatus:a5,buildNodeStatus:SM};async function a5(){let e={node_name:pM,is_enabled:hM,connections:[]};if(!hM)return e;let t=await nT.getAllNodeRecords();if(i5.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(SM(t[n],e.connections));return await Promise.allSettled(r),e}a(a5,"clusterStatus");async function SM(e,t){let r=e.name,n=new o5(yd.OPERATIONS_ENUM.CLUSTER_STATUS,pM,void 0,await nT.getSystemInfo()),s,i,o=no.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await s5.request(no.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===no.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=no.CLUSTER_STATUS_STATUSES.CLOSED,rT.error(`Error getting node status from ${r} `,s))}catch(u){rT.warn(`Error getting node status from ${r}`,u),u.code===EM.NoResponders?o=no.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===EM.Timeout?o=no.CLUSTER_STATUS_STATUSES.TIMEOUT:o=no.CLUSTER_STATUS_STATUSES.CLOSED}let c=new c5(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let u={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==yd.PRE_4_0_0_VERSION&&await nT.upsertNodeRecord(u)}catch(u){rT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(SM,"buildNodeStatus");function c5(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(c5,"NodeStatusObject")});var oT=g(($de,gM)=>{"use strict";var{handleHDBError:u5,hdb_errors:l5}=ee(),{HTTP_STATUS_CODES:_5}=l5,d5=Rt(),f5=Rs(),iT=J(),wd=require("joi"),E5=Xe(),h5=2e3,m5=wd.object({timeout:wd.number().min(1),connected_nodes:wd.boolean(),routes:wd.boolean()});gM.exports=p5;async function p5(e){f5.checkClusteringEnabled();let t=E5.validateBySchema(e,m5);if(t)throw u5(t,t.message,_5.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||iT.autoCastBoolean(n),o=s===void 0||iT.autoCastBoolean(s),c={nodes:[]},u=await d5.getServerList(r??h5),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:iT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(p5,"clusterNetwork")});var bM=g((Kde,OM)=>{"use strict";var aT=require("joi"),RM=Xe(),{route_constraints:AM}=lh();OM.exports={setRoutesValidator:S5,deleteRoutesValidator:T5};function S5(e){let t=aT.object({server:aT.valid("hub","leaf").required(),routes:AM.required()});return RM.validateBySchema(e,t)}a(S5,"setRoutesValidator");function T5(e){let t=aT.object({routes:AM.required()});return RM.validateBySchema(e,t)}a(T5,"deleteRoutesValidator")});var uT=g((Qde,IM)=>{"use strict";var so=wr(),cT=J(),Id=M(),NM=bM(),{handleHDBError:yM,hdb_errors:g5}=ee(),{HTTP_STATUS_CODES:wM}=g5,R5="cluster routes successfully set",A5="cluster routes successfully deleted";IM.exports={setRoutes:O5,getRoutes:b5,deleteRoutes:N5};function O5(e){let t=NM.setRoutesValidator(e);if(t)throw yM(t,t.message,wM.BAD_REQUEST,void 0,void 0,!0);let r=so.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=cT.autoCast(_.port);let l=n.some(f=>f.host===_.host&&f.port===_.port),d=s.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?so.updateConfigValue(Id.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):so.updateConfigValue(Id.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:R5,set:o,skipped:i}}a(O5,"setRoutes");function b5(){let e=so.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(b5,"getRoutes");function N5(e){let t=NM.deleteRoutesValidator(e);if(t)throw yM(t,t.message,wM.BAD_REQUEST,void 0,void 0,!0);let r=so.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=n.length;E<h;E++){let p=n[E];if(d.host===p.host&&d.port===p.port){n.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=s.length;h<p;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(n=cT.isEmptyOrZeroLength(n)?null:n,so.updateConfigValue(Id.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=cT.isEmptyOrZeroLength(s)?null:s,so.updateConfigValue(Id.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:A5,deleted:i,skipped:o}}a(N5,"deleteRoutes")});var DM=g((Jde,CM)=>{"use strict";var pu=require("alasql"),io=require("recursive-iterator"),Cn=Y(),y5=J(),Su=M(),lT=class{static{a(this,"sql_statement_bucket")}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,I5(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=>Su.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=>!Su.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Su.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=w5(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!Su.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new pu.yy.Column({columnid:_});s.tableid&&(l.tableid=s.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function w5(e){return e.filter(t=>t[Su.PERMS_CRUD_ENUM.READ])}a(w5,"filterReadRestrictedAttrs");function I5(e,t,r,n,s){C5(e,t,r,n,s)}a(I5,"interpretAST");function Tu(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(Tu,"addSchemaTableToMap");function C5(e,t,r,n,s){if(!e){Cn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof pu.yy.Insert?U5(e,t,r):e instanceof pu.yy.Select?D5(e,t,r,n,s):e instanceof pu.yy.Update?L5(e,t,r):e instanceof pu.yy.Delete?M5(e,t,r):Cn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(C5,"getRecordAttributesAST");function D5(e,t,r,n,s){if(!e){Cn.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(y5.isEmptyOrZeroLength(i)){Cn.error("No schema specified");return}e.from.forEach(c=>{Tu(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Tu(c.table,t,r,n,s)});let o=new io(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Cn.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new io(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Cn.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new io(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=s.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Cn.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new io(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Cn.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(D5,"getSelectAttributes");function L5(e,t,r){if(!e){Cn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new io(e.columns),s=e.table.databaseid;Tu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&_T(e.table.tableid,s,i.columnid,t,r)}a(L5,"getUpdateAttributes");function M5(e,t,r){if(!e){Cn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new io(e.where),s=e.table.databaseid;Tu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&_T(e.table.tableid,s,i.columnid,t,r)}a(M5,"getDeleteAttributes");function U5(e,t,r){if(!e){Cn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new io(e.columns),s=e.into.databaseid;Tu(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&_T(e.into.tableid,s,i.columnid,t,r)}a(U5,"getInsertAttributes");function _T(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(_T,"pushAttribute");CM.exports=lT});var ET=g((jde,PM)=>{var Cd=Gi(),LM=require("chalk"),Hr=Y(),MM=require("prompt"),{promisify:P5}=require("util"),dT=M(),v5=require("fs-extra"),B5=require("path"),H5=J(),x5=md(),UM=Z();UM.initSync();var F5=require("moment"),q5=P5(MM.get),G5=B5.join(UM.getHdbBasePath(),dT.LICENSE_KEY_DIR_NAME,dT.LICENSE_FILE_NAME,dT.LICENSE_FILE_NAME);PM.exports={getFingerprint:V5,setLicense:k5,parseLicense:fT,register:$5,getRegistrationInfo:K5};async function k5(e){if(e&&e.key&&e.company){try{Hr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await fT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Hr.error(r),Hr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(k5,"setLicense");async function V5(){let e={};try{e=await Cd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Hr.error(r),Hr.error(t),new Error(r)}return e}a(V5,"getFingerprint");async function fT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Hr.info("Validating license input...");let r=Cd.validateLicense(e,t);if(Hr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Hr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Hr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Hr.info("writing license to disk"),await v5.writeFile(G5,JSON.stringify({license_key:e,company:t}))}catch(n){throw Hr.error("Failed to write License"),n}return"Registration successful."}a(fT,"parseLicense");async function $5(){let e=await Y5();return fT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a($5,"register");async function Y5(){let e=await Cd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:LM.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:LM.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{MM.start()}catch(n){Hr.error(n)}let r;try{r=await q5(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(Y5,"promptForRegistration");async function K5(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Cd.getLicense()}catch(r){throw Hr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(H5.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=x5.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=F5.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(K5,"getRegistrationInfo")});var BM=g((efe,vM)=>{"use strict";var W5=tt(),hT=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+W5.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};vM.exports=hT});var FM=g((rfe,xM)=>{"use strict";var HM=tt(),mT=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+HM.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+HM.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};xM.exports=mT});var GM=g((sfe,qM)=>{"use strict";var pT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};qM.exports=pT});var VM=g((ofe,kM)=>{"use strict";var Q5=tt(),ST=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Q5.SERVER_SUFFIX.ADMIN,this.password=r}};kM.exports=ST});var RT=g((cfe,KM)=>{"use strict";var aa=require("path"),Md=require("fs-extra"),z5=BM(),J5=FM(),X5=GM(),j5=VM(),TT=Zr(),ua=J(),_r=wr(),Ld=M(),gu=tt(),{CONFIG_PARAMS:ut}=Ld,Ru=Y(),Au=Z(),$M=hs(),gT=Rt(),ca="clustering",Z5=1e4,YM=5;KM.exports={generateNatsConfig:t8,removeNatsConfig:r8,getHubConfigPath:e8};function e8(){let e=Au.get(ut.ROOTPATH);return aa.join(e,ca,gu.NATS_CONFIG_FILES.HUB_SERVER)}a(e8,"getHubConfigPath");async function t8(e=!1,t=void 0){Au.initSync();let r=Au.get(ut.ROOTPATH),n=aa.join(r,ca,gu.PID_FILES.HUB),s=aa.join(r,ca,gu.PID_FILES.LEAF),i=_r.getConfigFromFile(ut.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=aa.join(r,ca,gu.NATS_CONFIG_FILES.HUB_SERVER),c=aa.join(r,ca,gu.NATS_CONFIG_FILES.LEAF_SERVER),u=_r.getConfigFromFile(ut.CLUSTERING_TLS_CERTIFICATE),_=_r.getConfigFromFile(ut.CLUSTERING_TLS_PRIVATEKEY),l=_r.getConfigFromFile(ut.CLUSTERING_TLS_CERT_AUTH),d=_r.getConfigFromFile(ut.CLUSTERING_TLS_INSECURE),f=_r.getConfigFromFile(ut.CLUSTERING_TLS_VERIFY),E=_r.getConfigFromFile(ut.CLUSTERING_NODENAME),h=_r.getConfigFromFile(ut.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await gT.checkNATSServerInstalled()||Ud("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await TT.listUsers(),S=_r.getConfigFromFile(ut.CLUSTERING_USER),T=await TT.getClusterUser();(ua.isEmpty(T)||T.active!==!0)&&Ud(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Dd(ut.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Dd(ut.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Dd(ut.CLUSTERING_HUBSERVER_NETWORK_PORT),await Dd(ut.CLUSTERING_LEAFSERVER_NETWORK_PORT));let A=[],b=[];for(let[Q,se]of p.entries())se.role.role===Ld.ROLE_TYPES_ENUM.CLUSTER_USER&&se.active&&(A.push(new j5(se.username,$M.decrypt(se.hash))),b.push(new X5(se.username,$M.decrypt(se.hash))));let H=[],{hub_routes:F}=_r.getClusteringRoutes();if(!ua.isEmptyOrZeroLength(F))for(let Q of F)H.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${Q.host}:${Q.port}`);let v=new z5(_r.getConfigFromFile(ut.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,u,_,l,d,f,h,_r.getConfigFromFile(ut.CLUSTERING_HUBSERVER_CLUSTER_NAME),_r.getConfigFromFile(ut.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),H,A,b);l==null&&(delete v.tls.ca_file,delete v.leafnodes.tls.ca_file),t=ua.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Ld.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Md.writeJson(o,v),Ru.trace(`Hub server config written to ${o}`));let P=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,z=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,W=new J5(_r.getConfigFromFile(ut.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[P],[z],A,b,u,_,l,d);l==null&&delete W.tls.ca_file,(t===void 0||t===Ld.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Md.writeJson(c,W),Ru.trace(`Leaf server config written to ${c}`))}a(t8,"generateNatsConfig");async function Dd(e){let t=Au.get(e);return ua.isEmpty(t)&&Ud(`port undefined for '${e}'`),await ua.isPortTaken(t)&&Ud(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(Dd,"isPortAvailable");function Ud(e){let t=`Error generating clustering config: ${e}`;Ru.error(t),console.error(t),process.exit(1)}a(Ud,"generateNatsConfigError");async function r8(e){let{port:t,config_file:r}=gT.getServerConfig(e),{username:n,decrypt_hash:s}=await TT.getClusterUser(),i=0,o=2e3;for(;i<YM;){try{let _=await gT.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Ru.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=YM)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.`);await ua.async_set_timeout(o*(i*2))}let c="0".repeat(Z5),u=aa.join(Au.get(ut.ROOTPATH),ca,r);await Md.writeFile(u,c),await Md.remove(u),Ru.notify(e,"started.")}a(r8,"removeNatsConfig")});var Hd=g((lfe,ZM)=>{"use strict";var n8=require("minimist"),{isMainThread:bT,parentPort:zM}=require("worker_threads"),rt=M(),{PROCESS_DESCRIPTORS_VALIDATE:Ou}=rt,Jn=Y(),NT=J(),Pd=RT(),la=Rt(),AT=tt(),JM=wr(),Xn=wT(),WM=oa(),s8=ZE(),{restartWorkers:vd,onMessageByType:i8}=Ze(),{handleHDBError:o8,hdb_errors:a8}=ee(),{HTTP_STATUS_CODES:c8}=a8,Bd=Z();Bd.initSync();var bu=`Restarting HarperDB. This may take up to ${rt.RESTART_TIMEOUT_MS/1e3} seconds.`,u8="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",QM="Clustering is not enabled so cannot be restarted",l8="Invalid service",_a,nn;ZM.exports={restart:XM,restartService:yT};bT&&i8(rt.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?yT({service:e.workerType}):XM({operation:"restart"})});async function XM(e){nn=Object.keys(e).length===0,_a=await Xn.isServiceRegistered(rt.HDB_PROC_DESCRIPTOR);let t=n8(process.argv);if(t.service){await yT(t);return}if(nn&&!_a){console.error(u8);return}if(nn&&console.log(bu),_a){Xn.enterPM2Mode(),Jn.notify(bu);let r=s8(Object.keys(rt.CONFIG_PARAM_MAP),!0);return NT.isEmptyOrZeroLength(Object.keys(r))||JM.updateConfigValue(void 0,void 0,r,!0,!0),d8(),bu}return bT?(Jn.notify(bu),setTimeout(()=>{vd()},50)):zM.postMessage({type:rt.ITC_EVENT_TYPES.RESTART}),bu}a(XM,"restart");async function yT(e){let{service:t}=e;if(rt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw o8(new Error,l8,c8.BAD_REQUEST,void 0,void 0,!0);if(_a=await Xn.isServiceRegistered(rt.HDB_PROC_DESCRIPTOR),!bT)return zM.postMessage({type:rt.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Ou.clustering:if(!Bd.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=QM;break}nn&&console.log("Restarting clustering"),Jn.notify("Restarting clustering"),await jM();break;case Ou.clustering_config:case Ou["clustering config"]:if(!Bd.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=QM;break}nn&&console.log("Restarting clustering_config"),Jn.notify("Restarting clustering_config"),await Xn.reloadClustering();break;case"custom_functions":case"custom functions":case Ou.harperdb:case Ou.http_workers:if(nn&&!_a){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}nn&&console.log("Restarting http_workers"),Jn.notify("Restarting http_workers"),nn?await Xn.restart(rt.HDB_PROC_DESCRIPTOR):setTimeout(()=>{vd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Jn.error(r),nn&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(yT,"restartService");async function _8(){await la.publishToStream(`${AT.SUBJECT_PREFIXES.TXN}.${AT.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,AT.WORK_QUEUE_CONSUMER_NAMES.stream_name,la.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(_8,"postDummyNatsMsg");async function d8(){await jM(),await Xn.restart(rt.HDB_PROC_DESCRIPTOR),await NT.async_set_timeout(2e3),Bd.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await OT(),nn&&(await la.closeConnection(),process.exit(0))}a(d8,"restartPM2Mode");async function jM(){if(!JM.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await WM.getHDBProcessInfo()).clustering.length===0)Jn.trace("Clustering not running, restart will start clustering services"),await Pd.generateNatsConfig(!0),await Xn.startClusteringProcesses(),await Xn.startClusteringThreads(),await OT(),nn&&await la.closeConnection();else{await _8(),await Pd.generateNatsConfig(!0),_a?(Jn.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Xn.restart(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Xn.restart(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await WM.getHDBProcessInfo()).clustering.forEach(s=>{Jn.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await NT.async_set_timeout(3e3),await OT(),await la.updateLocalStreams(),nn&&await la.closeConnection(),Jn.trace("Restart clustering restarting ingest and reply service threads");let t=vd(rt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=vd(rt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(jM,"restartClustering");async function OT(){await Pd.removeNatsConfig(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Pd.removeNatsConfig(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(OT,"removeNatsConfig")});var lU=g((ffe,uU)=>{"use strict";var dfe=require("lodash"),dr=M(),{handleHDBError:eU,hdb_errors:f8}=ee(),{HDB_ERROR_MSGS:E8,HTTP_STATUS_CODES:h8}=f8,IT=Y();uU.exports={getRolePermissions:p8};var oo=Object.create(null),m8=a(e=>({key:e,perms:{}}),"perms_template_obj"),sU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),iU=a((e=!1,t=!1,r=!1,n=!1)=>({[dr.PERMS_CRUD_ENUM.READ]:e,[dr.PERMS_CRUD_ENUM.INSERT]:t,[dr.PERMS_CRUD_ENUM.UPDATE]:r,[dr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),CT=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...iU(t,r,n,s)}),"table_perms_template"),tU=a((e,t=iU())=>({attribute_name:e,describe:cU(t),[Nu]:t[Nu],[DT]:t[DT],[LT]:t[LT]}),"attr_perms_template"),rU=a((e,t=!1)=>({attribute_name:e,describe:t,[Nu]:t}),"timestamp_attr_perms_template"),{READ:Nu,INSERT:DT,UPDATE:LT}=dr.PERMS_CRUD_ENUM,oU=Object.values(dr.PERMS_CRUD_ENUM),aU=[Nu,DT,LT];function p8(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[dr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(oo[t]&&oo[t].key===n)return oo[t].perms;let s=S8(e,r);return oo[t]?oo[t].key=n:oo[t]=m8(n),oo[t].perms=s,s}catch(r){if(!e[dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<dr.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw IT.error(n),IT.debug(r),eU(new Error,E8.OUTDATED_PERMS_TRANSLATION_ERROR,h8.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
11
- ${r.stack}`;throw IT.error(n),eU(new Error)}}}a(p8,"getRolePermissions");function S8(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[dr.SYSTEM_SCHEMA_NAME]=n[dr.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]=T8(t[i]);return}r[i]=sU(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],u=t[i][o],_=g8(c,u);r[i].describe||oU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=CT()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=CT()})}),r}a(S8,"translateRolePermissions");function T8(e){let t=sU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=CT(!0,!0,!0,!0,!0)}),t}a(T8,"createStructureUserPermissions");function g8(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return dr.TIME_STAMP_NAMES.includes(d)&&(f=rU(d,l[Nu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=tU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=cU(l),s.attribute_permissions.push(l),c||R8(l,u)}else if(_!==o){let l;dr.TIME_STAMP_NAMES.includes(_)?l=rU(_):l=tU(_),s.attribute_permissions.push(l)}}),c||s.attribute_permissions.push(u),s.describe=nU(s),s}else return e.describe=nU(e),e}a(g8,"getTableAttrPerms");function nU(e){return oU.filter(t=>e[t]).length>0}a(nU,"getSchemaTableDescribePerm");function cU(e){return aU.filter(t=>e[t]).length>0}a(cU,"getAttributeDescribePerm");function R8(e,t){aU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(R8,"checkForHashPerms")});var _U={};Ve(_U,{Resources:()=>xd,keyArrayToString:()=>da,resetResources:()=>A8,resources:()=>ai});function A8(){return ai=new xd}function da(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var xd,ai,yu=Oe(()=>{Wi();xd=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;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,type:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),u=this.get(c);if(u){if(u.relativeURL=t.slice(n),!u.hasSubPaths)return u;s=u}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),s?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}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 We(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(A8,"resetResources");a(da,"keyArrayToString")});var dU={};Ve(dU,{Headers:()=>ci});var ci,Fd=Oe(()=>{ci=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];n?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var wu={};Ve(wu,{authentication:()=>gU,bypassAuth:()=>C8,login:()=>L8,logout:()=>M8,start:()=>D8});function C8(){TU=!0}async function gU(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?y8?N8:[]:b8?O8:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new ci([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return qd&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),qd&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(qd){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.indexOf(E);if(h>=0){let p=s.indexOf(";",h),S=s.indexOf("=",h);u=s.slice(S+1,p===-1?s.length:p),_=await EU.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new kd.AuthAuditLog(E,h,Ft.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===Ft.AUTH_AUDIT_STATUS.SUCCESS?fU.notify(S):fU.error(S)},"authAuditLog");if(e.mtlsConfig&&e.authorized){let E=e.mtlsConfig.user;E!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=e.peerCertificate.subject.CN),e.user=await je.getUser(E,null,null))}let d;if(!e.user)if(n){if(d=ao.get(n),!d){let[E,h]=n.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await je.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,Gd.validateOperationToken)(h)}catch(T){if(T.message==="invalid token")try{return await(0,Gd.validateRefreshToken)(h),c({status:-1})}catch{throw T}}break}}catch(T){return I8&&(ao.get(h)||(ao.set(h,h),l(p,Ft.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:ui({error:T.message},e)})}ao.set(n,d),w8&&l(d.username,Ft.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await je.getUser(_.user,null,e):(TU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,mU.getSuperUser)());qd&&(e.session.update=function(E){if(!u){u=(0,pU.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=u,EU.put(E)},e.login=async function(E,h){e.user=await je.getUser(E,h,e),e.session.update({user:e.user.username})},(d&&!_||_?.user?.username!==d?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let f=await t(e);return f&&(f.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&ai.loginPath?(f.status=302,f.headers.set("Location",ai.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new ci);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function D8({server:e,port:t}){e.request(gU,{port:t||"all"}),hU||(hU=!0,setInterval(()=>{ao=new Map},sn.get(Ft.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),SU.user.addListener(()=>{ao=new Map}))}async function L8(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 M8(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var mU,Gd,pU,sn,Ft,kd,SU,fU,O8,b8,N8,y8,EU,qd,TU,w8,I8,ao,hU,Vd=Oe(()=>{mU=B(Zr());Zt();yu();Gd=B(lu());be();pU=require("uuid"),sn=B(Z()),Ft=B(M()),kd=B(Y()),SU=B(Lc());Fd();fa();fU=(0,kd.loggerWithTag)("auth-event");sn.initSync();O8=sn.get(Ft.CONFIG_PARAMS.HTTP_CORSACCESSLIST),b8=sn.get(Ft.CONFIG_PARAMS.HTTP_CORS),N8=sn.get(Ft.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),y8=sn.get(Ft.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),EU=ot({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),qd=sn.get(Ft.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,TU=sn.get(Ft.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,w8=sn.get(Ft.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,I8=sn.get(Ft.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,ao=new Map;je.onInvalidatedUser(()=>{ao=new Map});a(C8,"bypassAuth");a(gU,"authentication");a(D8,"start");a(L8,"login");a(M8,"logout")});var wU=g((bfe,yU)=>{"use strict";var we=require("joi"),RU=require("fs-extra"),AU=require("path"),Os=Xe(),OU=Z(),bU=M(),NU=Y(),{hdb_errors:U8}=ee(),{HDB_ERROR_MSGS:Qt}=U8,As=/^[a-zA-Z0-9-_]+$/;yU.exports={getDropCustomFunctionValidator:v8,setCustomFunctionValidator:B8,addComponentValidator:q8,dropCustomFunctionProjectValidator:G8,packageComponentValidator:k8,deployComponentValidator:V8,setComponentFileValidator:H8,getComponentFileValidator:F8,dropComponentFileValidator:x8};function $d(e,t,r){try{let n=OU.get(bU.CONFIG_PARAMS.COMPONENTSROOT),s=AU.join(n,t);return RU.existsSync(s)?e?t:r.message(Qt.PROJECT_EXISTS):e?r.message(Qt.NO_PROJECT):t}catch(n){return NU.error(n),r.message(Qt.VALIDATION_ERR)}}a($d,"checkProjectExists");function Iu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Iu,"checkFilePath");function P8(e,t,r,n){try{let s=OU.get(bU.CONFIG_PARAMS.COMPONENTSROOT),i=AU.join(s,e,t,r+".js");return RU.existsSync(i)?r:n.message(Qt.NO_FILE)}catch(s){return NU.error(s),n.message(Qt.VALIDATION_ERR)}}a(P8,"checkFileExists");function v8(e){let t=we.object({project:we.string().pattern(As).custom($d.bind(null,!0)).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().pattern(As).custom(P8.bind(null,e.project,e.type)).custom(Iu).required().messages({"string.pattern.base":Qt.BAD_FILE_NAME})});return Os.validateBySchema(e,t)}a(v8,"getDropCustomFunctionValidator");function B8(e){let t=we.object({project:we.string().pattern(As).custom($d.bind(null,!0)).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().custom(Iu).required(),function_content:we.string().required()});return Os.validateBySchema(e,t)}a(B8,"setCustomFunctionValidator");function H8(e){let t=we.object({project:we.string().pattern(As).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME}),file:we.string().custom(Iu).required(),payload:we.string().allow("").optional(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Os.validateBySchema(e,t)}a(H8,"setComponentFileValidator");function x8(e){let t=we.object({project:we.string().pattern(As).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME}),file:we.string().custom(Iu).optional()});return Os.validateBySchema(e,t)}a(x8,"dropComponentFileValidator");function F8(e){let t=we.object({project:we.string().required(),file:we.string().custom(Iu).required(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Os.validateBySchema(e,t)}a(F8,"getComponentFileValidator");function q8(e){let t=we.object({project:we.string().pattern(As).custom($d.bind(null,!1)).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME})});return Os.validateBySchema(e,t)}a(q8,"addComponentValidator");function G8(e){let t=we.object({project:we.string().pattern(As).custom($d.bind(null,!0)).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME})});return Os.validateBySchema(e,t)}a(G8,"dropCustomFunctionProjectValidator");function k8(e){let t=we.object({project:we.string().pattern(As).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME}),skip_node_modules:we.boolean()});return Os.validateBySchema(e,t)}a(k8,"packageComponentValidator");function V8(e){let t=we.object({project:we.string().pattern(As).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME}),payload:we.string().optional().messages({"string.pattern.base":Qt.BAD_PACKAGE}),package:we.string().optional()});return Os.validateBySchema(e,t)}a(V8,"deployComponentValidator")});var Qd=g((yfe,PU)=>{"use strict";var Yd=require("joi"),Kd=require("path"),IU=require("fs-extra"),{exec:$8}=require("child_process"),Y8=require("util"),CU=Y8.promisify($8),Cu=M(),{handleHDBError:Ea,hdb_errors:K8}=ee(),{HTTP_STATUS_CODES:ha}=K8,Du=Z(),W8=Xe(),ma=Y();Du.initSync();var MT=Du.get(Cu.CONFIG_PARAMS.COMPONENTSROOT),DU="npm install --omit=dev --json",Q8=`${DU} --dry-run`;PU.exports={installModules:j8,auditModules:Z8,installAllRootModules:z8,uninstallRootModule:J8,linkHarperdb:X8};async function z8(e=!1){await Wd(),await Lu(e?"npm install --ignore-scripts":"npm install",Du.get(Cu.CONFIG_PARAMS.ROOTPATH))}a(z8,"installAllRootModules");async function J8(e){await Lu(`npm uninstall ${e}`,Du.get(Cu.CONFIG_PARAMS.ROOTPATH))}a(J8,"uninstallRootModule");async function X8(){await Wd(),await Lu(`npm link ${Cu.PACKAGE_ROOT}`,Du.get(Cu.CONFIG_PARAMS.ROOTPATH))}a(X8,"linkHarperdb");async function Lu(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await CU(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
12
- `,""))}return n&&!n.includes("Debugger listening")&&ma.error("Error running NPM command:",e,n),ma.trace(r,n),r?.replace(`
13
- `,"")}a(Lu,"runCommand");async function j8(e){ma.info(`starting installModules for request: ${e}`);let t=UU(e);if(t)throw Ea(t,t.message,ha.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?Q8:DU;await Wd(),await MU(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let _=Kd.join(MT,u),l,d=null;try{let{stdout:f,stderr:E}=await CU(s,{cwd:_});l=f?f.replace(`
10
+ `,"")}a(uD,"runCommand");async function F4(){try{await p4.access(Xp)}catch{return!1}let e=await uD(`${Xp} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return S4.eq(t,H4)}a(F4,"checkNATSServerInstalled");async function tS(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await iD.getClusterUser();if(to(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Hr.trace("create nats connection called");let i=await C4({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Hr.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Hr.error("Error with Nats client connection, connection closed",o),lD()}),i}a(tS,"createConnection");function lD(){rn=void 0,ji=void 0,Zi=void 0,eo=void 0}a(lD,"clearClientCache");async function q4(){rn&&(await rn.drain(),rn=void 0,ji=void 0,Zi=void 0,eo=void 0)}a(q4,"closeConnection");var rn,eo;async function ed(){return eo||(eo=tS(Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),rn=await eo),rn||eo}a(ed,"getConnection");async function iu(){if(ji)return ji;to(rn)&&await ed();let{domain:e}=ou(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(to(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ji=await rn.jetstreamManager({domain:e,timeout:6e4}),ji}a(iu,"getJetStreamManager");async function _D(){if(Zi)return Zi;to(rn)&&await ed();let{domain:e}=ou(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(to(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Zi=rn.jetstream({domain:e,timeout:6e4}),Zi}a(_D,"getJetStream");async function sr(){let e=rn||await ed(),t=ji||await iu(),r=Zi||await _D();return{connection:e,jsm:t,js:r}}a(sr,"getNATSReferences");async function G4(e){let t=Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await iD.getClusterUser(),s=await tS(t,r,n),i=eS(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=cD.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=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 jp.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(G4,"getServerList");async function rS(e,t){let{jsm:r}=await sr(),n=Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:oD.File,retention:aD.Limits,subjects:t,discard:D4.Old,max_msgs:s,max_bytes:i,max_age:n})}a(rS,"createLocalStream");async function dD(){let{jsm:e}=await sr(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(dD,"listStreams");async function k4(e){let{jsm:t}=await sr();await t.streams.delete(e)}a(k4,"deleteLocalStream");async function V4(e){let{connection:t}=await sr(),r=[],n=eS(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(cD.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(V4,"listRemoteStreams");async function $4(e,t=void 0,r=void 0){let{jsm:n,js:s}=await sr(),i=rD(),o={durable_name:i,ack_policy:j_.Explicit};t&&(o.deliver_policy=Z_.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=Zp(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Ne.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a($4,"viewStream");async function*Y4(e,t=void 0,r=void 0){let{jsm:n,js:s}=await sr(),i=rD(),o={durable_name:i,ack_policy:j_.Explicit};t&&(o.deliver_policy=Z_.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=Zp(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(Ne.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(Y4,"viewStreamIterator");async function K4(e,t,r,n){Hr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=fD(n,r);let{js:s}=await sr(),i=await au(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:sD.encode(n);try{Hr.trace(`publishToStream publishing to subject: ${o}`),v4(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return pD(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Hr.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await rS(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(K4,"publishToStream");function fD(e,t){t===void 0&&(t=M4());let r=Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Ne.MSG_HEADERS.ORIGIN)&&r&&t.append(Ne.MSG_HEADERS.ORIGIN,r),t}a(fD,"addNatsMsgHeader");function ou(e){e=e.toLowerCase();let t=su.join(Ht.get(Pe.CONFIG_PARAMS.ROOTPATH),B4);if(e===Pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return to(Jp)&&(Jp={port:ru.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:ru.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ne.SERVER_SUFFIX.HUB,config_file:Ne.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:su.join(t,Ne.PID_FILES.HUB),hdb_nats_path:t}),Jp;if(e===Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return to(zp)&&(zp={port:ru.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:ru.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ne.SERVER_SUFFIX.LEAF,config_file:Ne.NATS_CONFIG_FILES.LEAF_SERVER,domain:ru.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ne.SERVER_SUFFIX.LEAF,pid_file_path:su.join(t,Ne.PID_FILES.LEAF),hdb_nats_path:t}),zp;Hr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(ou,"getServerConfig");async function W4(e){let{jsm:t}=await sr(),r=await au();try{await t.streams.add({name:e.stream_name,storage:oD.File,retention:aD.Limits,max_age:w4,max_bytes:I4,subjects:[`${Ne.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(n){if(n.code!=="400")throw n}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(n){if(n.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:j_.Explicit,durable_name:e.durable_name,deliver_policy:Z_.All,max_ack_pending:1e4});else throw n}}a(W4,"createWorkQueueStream");async function Q4(){let{jsm:e}=await sr();(await e.consumers.info(Ne.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ne.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Hr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(Ne.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ne.WORK_QUEUE_CONSUMER_NAMES.durable_name),Hr.info("Adding pull consumer to ingest stream"),await e.consumers.add(Ne.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:j_.Explicit,durable_name:Ne.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:Z_.All,max_ack_pending:1e4}))}a(Q4,"updateIngestStreamConsumer");async function ED(e,t,r){let{jsm:n}=await sr(),s=await n.streams.info(t),i=hD(n.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=X_.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(s.config.sources)||s.config.sources.length===0)s.config.sources=[];else for(let p=0,S=s.config.sources.length;p<S;p++)if(d=s.config.sources[p],f=p,l&&d.name===_||!l&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let p=`txn.${c}.${u}.${e}`;await n.streams.purge(t,{filter:p}),s.config.sources.splice(f,1),await n.streams.update(t,s.config)}let h={name:_,opt_start_time:o,filter_subject:`${Ne.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),s.config.sources.push(h),await n.streams.update(t,s.config)}a(ED,"addSourceToWorkStream");function hD(e){return e.split(".")[1]}a(hD,"extractServerName");async function mD(e,t,r){let{jsm:n}=await sr(),{schema:s,table:i}=r,o=`txn.${s}.${i}.${e}`;await n.streams.purge(t,{filter:o});let c=X_.createNatsTableStreamName(s,i),u=await n.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let _=u.config.sources.length,l;for(;_--;)if(l=u.config.sources[_],l.name===c&&l.external.api===`$JS.${e}.API`){u.config.sources.splice(_,1);break}await n.streams.update(t,u.config)}a(mD,"removeSourceFromWorkStream");async function z4(e,t,r=6e4,n=eS()){if(!jp.isObject(t))throw new Error("data param must be an object");let s=sD.encode(t),{connection:i}=await sr(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return Zp(c.data)}a(z4,"request");function nS(e){return new Promise(async(t,r)=>{let n=A4(Xp,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(nS,"reloadNATS");async function J4(){let{pid_file_path:e}=ou(Pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await nS(e)}a(J4,"reloadNATSHub");async function X4(){let{pid_file_path:e}=ou(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await nS(e)}a(X4,"reloadNATSLeaf");function j4(e,t,r){let n;switch(e.code){case tD.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case tD.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(j4,"requestErrorHandler");async function Z4(e,t){let r=t+Ne.SERVER_SUFFIX.LEAF;await pD(async()=>{e.subscribe===!0?await ED(r,Ne.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await mD(r,Ne.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(Z4,"updateWorkStream");function pD(e){return O4.writeTransaction(Pe.SYSTEM_SCHEMA_NAME,Pe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(pD,"exclusiveLock");async function SD(e,t){let r=X_.createNatsTableStreamName(e,t),n=await au(),s=n3(e,t,n);await rS(r,[s])}a(SD,"createLocalTableStream");async function e3(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await SD(n,s)}}a(e3,"createTableStreams");async function TD(e,t,r=!1){if(Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=X_.createNatsTableStreamName(e,t),{jsm:s}=await sr();r?await s.streams.purge(Ne.WORK_QUEUE_CONSUMER_NAMES.stream_name):await s.streams.purge(n)}catch(n){if(n.message==="stream not found")Hr.warn(n);else throw n}}a(TD,"purgeTableStream");async function t3(e,t){if(Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await TD(e,t[r])}a(t3,"purgeSchemaTableStreams");async function r3(e){return(await iu()).streams.info(e)}a(r3,"getStreamInfo");function n3(e,t,r){return`${Ne.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(n3,"createSubjectName");async function au(){if(nu)return nu;if(nu=(await iu())?.nc?.info?.server_name,nu===void 0)throw new Error("Unable to get jetstream manager server name");return nu}a(au,"getJsmServerName");async function s3(){let e=await iu(),t=await au(),r=await dD();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=i3(n),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(s.name===Ne.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Ne.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Hr.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else if(s.name===Ne.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Ne.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Hr.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Hr.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l}await e.streams.update(s.name,s)}}}a(s3,"updateLocalStreams");function i3(e){let{config:t}=e,r=!1;if(t.name===Ne.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===Ne.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let n=Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(i3,"updateStreamLimits")});var sd=T((m_e,bD)=>{"use strict";var ea=l_(),ta=vC(),o3=W(),a3=require("uuid").v4,h_e=require("clone"),rd=Ss(),ra=U(),c3=require("util"),ni=yn(),{handleHDBError:ir,hdb_errors:u3}=ee(),{HDB_ERROR_MSGS:td,HTTP_STATUS_CODES:or}=u3,{SchemaEventMsg:nd}=Nn(),RD=At(),{getDatabases:l3}=(be(),te(Fe)),{transformReq:na}=J();bD.exports={createSchema:_3,createSchemaStructure:AD,createTable:d3,createTableStructure:OD,createAttribute:p3,dropSchema:f3,dropTable:E3,dropAttribute:h3,getBackup:S3};async function _3(e){let t=await AD(e);return rd.signalSchemaChange(new nd(process.pid,e.operation,e.schema)),t}a(_3,"createSchema");async function AD(e){let t=ea.schema_object(e);if(t)throw ir(t,t.message,or.BAD_REQUEST,void 0,void 0,!0);if(na(e),!await ta.checkSchemaExists(e.schema))throw ir(new Error,td.SCHEMA_EXISTS_ERR(e.schema),or.BAD_REQUEST,ra.LOG_LEVELS.ERROR,td.SCHEMA_EXISTS_ERR(e.schema),!0);return await ni.createSchema(e),`database '${e.schema}' successfully created`}a(AD,"createSchemaStructure");async function d3(e){return na(e),e.hash_attribute=e.primary_key??e.hash_attribute,await OD(e)}a(d3,"createTable");async function OD(e){let t=ea.create_table_object(e);if(t)throw ir(t,t.message,or.BAD_REQUEST,void 0,void 0,!0);if(ea.validateTableResidence(e.residence),!await ta.checkSchemaTableExists(e.schema,e.table))throw ir(new Error,td.TABLE_EXISTS_ERR(e.schema,e.table),or.BAD_REQUEST,ra.LOG_LEVELS.ERROR,td.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:a3(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ni.createTable(n,e);else throw ir(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",or.BAD_REQUEST);else await ni.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(OD,"createTableStructure");async function f3(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=ea.schema_object(e),n=t??r;if(n)throw ir(n,n.message,or.BAD_REQUEST,void 0,void 0,!0);na(e);let s=await ta.checkSchemaExists(e.schema);if(s)throw ir(new Error,s,or.NOT_FOUND,ra.LOG_LEVELS.ERROR,s,!0);let i=await ta.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ni.dropSchema(e),rd.signalSchemaChange(new nd(process.pid,e.operation,e.schema)),await RD.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(f3,"dropSchema");async function E3(e){let t=ea.table_object(e);if(t)throw ir(t,t.message,or.BAD_REQUEST,void 0,void 0,!0);na(e);let r=await ta.checkSchemaTableExists(e.schema,e.table);if(r)throw ir(new Error,r,or.NOT_FOUND,ra.LOG_LEVELS.ERROR,r,!0);return await ni.dropTable(e),await RD.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(E3,"dropTable");async function h3(e){let t=ea.attribute_object(e);if(t)throw ir(t,t.message,or.BAD_REQUEST,void 0,void 0,!0);na(e);let r=await ta.checkSchemaTableExists(e.schema,e.table);if(r)throw ir(new Error,r,or.NOT_FOUND,ra.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw ir(new Error,"You cannot drop a hash attribute",or.BAD_REQUEST,void 0,void 0,!0);if(ra.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw ir(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,or.BAD_REQUEST,void 0,void 0,!0);try{return await ni.dropAttribute(e),m3(e),rd.signalSchemaChange(new nd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw o3.error(`Got an error deleting attribute ${c3.inspect(e)}.`),n}}a(h3,"dropAttribute");function m3(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(m3,"dropAttributeFromGlobal");async function p3(e){na(e);let t=l3()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw ir(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,or.BAD_REQUEST,void 0,void 0,!0);return await ni.createAttribute(e),rd.signalSchemaChange(new nd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(p3,"createAttribute");function S3(e){return ni.getBackup(e)}a(S3,"getBackup")});var ND=T((S_e,yD)=>{"use strict";var{OPERATIONS_ENUM:T3}=U(),sS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=T3.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};yD.exports=sS});var iS=T((R_e,LD)=>{"use strict";var g3=yn(),g_e=ND(),id=J(),od=U(),R3=Z(),{handleHDBError:wD,hdb_errors:A3}=ee(),{HDB_ERROR_MSGS:ID,HTTP_STATUS_CODES:CD}=A3,O3=Object.values(od.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),DD="To use this operation audit log must be enabled in harperdb-config.yaml";LD.exports=b3;async function b3(e){if(id.isEmpty(e.schema))throw new Error(ID.SCHEMA_REQUIRED_ERR);if(id.isEmpty(e.table))throw new Error(ID.TABLE_REQUIRED_ERR);if(!R3.get(od.CONFIG_PARAMS.LOGGING_AUDITLOG))throw wD(new Error,DD,CD.BAD_REQUEST,od.LOG_LEVELS.ERROR,DD,!0);let t=id.checkSchemaTableExist(e.schema,e.table);if(t)throw wD(new Error,t,CD.NOT_FOUND,od.LOG_LEVELS.ERROR,t,!0);if(!id.isEmpty(e.search_type)&&O3.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await g3.readAuditLog(e)}a(b3,"readAuditLog")});var UD=T((O_e,MD)=>{"use strict";var{OPERATIONS_ENUM:y3}=U(),oS=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=y3.GET_BACKUP,this.schema=t,this.table=r}};MD.exports=oS});var BD=T((w_e,vD)=>{"use strict";var N3=yn(),y_e=UD(),aS=J(),w3=U(),N_e=Z(),{handleHDBError:I3,hdb_errors:C3}=ee(),{HDB_ERROR_MSGS:PD,HTTP_STATUS_CODES:D3}=C3;vD.exports=L3;async function L3(e){if(aS.isEmpty(e.schema))throw new Error(PD.SCHEMA_REQUIRED_ERR);if(aS.isEmpty(e.table))throw new Error(PD.TABLE_REQUIRED_ERR);let t=aS.checkSchemaTableExist(e.schema,e.table);if(t)throw I3(new Error,t,D3.NOT_FOUND,w3.LOG_LEVELS.ERROR,t,!0);return await N3.getBackup(read_audit_log_object)}a(L3,"getBackup")});var kD=T((C_e,GD)=>{var si=require("validate.js"),xD=Xe(),sa=U(),{handleHDBError:M3,hdb_errors:U3}=ee(),{HDB_ERROR_MSGS:ct,HTTP_STATUS_CODES:P3}=U3,cS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),v3={STRUCTURE_USER:"structure_user"},HD=Object.values(sa.ROLE_TYPES_ENUM),B3="attribute_permissions",H3="attribute_name",{PERMS_CRUD_ENUM:ia}=sa,x3=[B3,...Object.values(ia)],FD=[ia.READ,ia.INSERT,ia.UPDATE],F3=[H3,...FD];function q3(e){let t=cS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,qD(e,t)}a(q3,"addRoleValidation");function G3(e){let t=cS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,qD(e,t)}a(G3,"alterRoleValidation");function k3(e){let t=cS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,xD.validateObject(e,t)}a(k3,"dropRoleValidation");var V3=["operation","role","id","permission","hdb_user","hdb_auth_header"];function qD(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)V3.includes(n[o])||s.push(n[o]);s.length>0&&ft(ct.INVALID_ROLE_JSON_KEYS(s),r);let i=xD.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{ft(o,r)}),e.permission){let o=$3(e);o&&ft(o,r),HD.forEach(c=>{e.permission[c]&&!si.isBoolean(e.permission[c])&&ft(ct.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(HD.indexOf(o)<0){if(o===v3.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||ft(ct.SCHEMA_NOT_FOUND(d),r)}continue}ft(ct.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){ft(ct.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){ft(ct.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{x3.includes(l)||ft(ct.INVALID_PERM_KEY(l),r,o,u)}),Object.values(ia).forEach(l=>{si.isDefined(_[l])?si.isBoolean(_[l])||ft(ct.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):ft(ct.TABLE_PERM_MISSING(l),r,o,u)}),si.isDefined(_.attribute_permissions)){if(!si.isArray(_.attribute_permissions)){ft(ct.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{ft(ct.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!F3.includes(p)&&p!==ia.DELETE&&ft(ct.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!si.isDefined(E.attribute_name)){ft(ct.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){ft(ct.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}FD.forEach(p=>{si.isDefined(E[p])?si.isBoolean(E[p])||ft(ct.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):ft(ct.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;ft(ct.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return Y3(r)}a(qD,"customValidate");GD.exports={addRoleValidation:q3,alterRoleValidation:G3,dropRoleValidation:k3};function $3(e){let{operation:t,permission:r}=e;if(t===sa.OPERATIONS_ENUM.ADD_ROLE||t===sa.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 ct.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?sa.ROLE_TYPES_ENUM.SUPER_USER:sa.ROLE_TYPES_ENUM.CLUSTER_USER;return ct.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a($3,"validateNoSUPerms");function Y3(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:ct.ROLE_PERMS_ERROR,...e};return M3(new Error,n,P3.BAD_REQUEST)}else return null}a(Y3,"generateRolePermResponse");function ft(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(ft,"addPermError")});var ES=T((L_e,KD)=>{"use strict";var VD=Zr(),$D=jr(),K3=ki(),lS=kD(),_S=Ss(),W3=require("uuid").v4,Q3=require("util"),ad=U(),z3=J(),dS=$D.searchByValue,J3=$D.searchByHash,X3=Q3.promisify(K3.delete),j3=Qn(),Z3=Xo(),{hdb_errors:eX,handleHDBError:ro}=ee(),{HDB_ERROR_MSGS:YD,HTTP_STATUS_CODES:cu}=eX,{UserEventMsg:fS}=Nn();KD.exports={addRole:tX,alterRole:rX,dropRole:nX,listRoles:sX};function uS(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(uS,"scrubRoleDetails");async function tX(e){let t=lS.addRoleValidation(e);if(t)throw t;e=uS(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await dS(r)||[])}catch(i){throw ro(i)}if(n&&n.length>0)throw ro(new Error,YD.ROLE_ALREADY_EXISTS(e.role),cu.CONFLICT,void 0,void 0,!0);e.id||(e.id=W3());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await VD.insert(s),_S.signalUserChange(new fS(process.pid)),e=uS(e),e}a(tX,"addRole");async function rX(e){let t=lS.alterRoleValidation(e);if(t)throw t;e=uS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await VD.update(r)}catch(s){throw ro(s)}if(n&&n?.message==="updated 0 of 1 records")throw ro(new Error,"Invalid role id",cu.BAD_REQUEST,void 0,void 0,!0);return await _S.signalUserChange(new fS(process.pid)),e}a(rX,"alterRole");async function nX(e){let t=lS.dropRoleValidation(e);if(t)throw ro(new Error,t,cu.BAD_REQUEST,void 0,void 0,!0);let r=new Z3(ad.SYSTEM_SCHEMA_NAME,ad.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await J3(r));if(n.length===0)throw ro(new Error,YD.ROLE_NOT_FOUND,cu.NOT_FOUND,void 0,void 0,!0);let s=new j3(ad.SYSTEM_SCHEMA_NAME,ad.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await dS(s)),o=!1;if(z3.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw ro(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,cu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await X3(c),_S.signalUserChange(new fS(process.pid)),`${n[0].role} successfully deleted`}a(nX,"dropRole");async function sX(){return dS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(sX,"listRoles")});var JD=T((U_e,zD)=>{"use strict";var iX=Z(),ii=require("joi"),oX=Xe(),WD=require("moment"),aX=require("fs-extra"),hS=require("path"),cX=require("lodash"),uu=U(),{LOG_LEVELS:no}=U(),uX="YYYY-MM-DD hh:mm:ss",lX=hS.resolve(__dirname,"../logs");zD.exports=function(e){return oX.validateBySchema(e,_X)};var _X=ii.object({from:ii.custom(QD),until:ii.custom(QD),level:ii.valid(no.NOTIFY,no.FATAL,no.ERROR,no.WARN,no.INFO,no.DEBUG,no.TRACE),order:ii.valid("asc","desc"),limit:ii.number().min(1),start:ii.number().min(0),log_name:ii.custom(dX)});function QD(e,t){if(WD(e,WD.ISO_8601).format(uX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(QD,"validateDatetime");function dX(e,t){if(cX.invert(uu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=iX.get(uu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?uu.LOG_NAMES.HDB:e,i=s===uu.LOG_NAMES.INSTALL?hS.join(lX,uu.LOG_NAMES.INSTALL):hS.join(n,s);return aX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(dX,"validateReadLogPath")});var pS=T((v_e,jD)=>{"use strict";var cd=U(),fX=W(),EX=Z(),hX=JD(),mS=require("path"),XD=require("fs-extra"),{once:mX}=require("events"),{handleHDBError:pX,hdb_errors:SX}=ee(),{PACKAGE_ROOT:TX}=U(),gX=mS.join(TX,"logs"),RX=1e3,AX=200;jD.exports=OX;async function OX(e){let t=hX(e);if(t)throw pX(t,t.message,SX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=EX.get(cd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?cd.LOG_NAMES.HDB:e.log_name,s=n===cd.LOG_NAMES.INSTALL?mS.join(gX,cd.LOG_NAMES.INSTALL):mS.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?RX:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max(XD.statSync(s).size-(h+5)*AX,0));let S=XD.createReadStream(s,{start:p});S.on("error",v=>{fX.error(v)});let O=0,g=[],R="",B;S.on("data",v=>{let M=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;v=R+v;let $=0,K;for(;(K=M.exec(v))&&!S.destroyed;){B&&(B.message=v.slice($,K.index),H(B));let[z,se,Te]=K,oe=Te.split("] ["),xe=oe[0],de=oe[1];oe.splice(0,2),B={timestamp:se,thread:xe,level:de,tags:oe,message:""},$=K.index+z.length}R=v.slice($)}),S.on("end",v=>{S.destroyed||B&&(B.message=R.trim(),H(B))}),S.resume();function H(v){let M,$,K;switch(!0){case(i&&c&&_):M=new Date(v.timestamp),$=new Date(u),K=new Date(l),v.level===o&&M>=$&&M<=K&&O<E?O++:v.level===o&&M>=$&&M<=K&&(oi(v,f,g),O++,O===h&&S.destroy());break;case(i&&c):M=new Date(v.timestamp),$=new Date(u),v.level===o&&M>=$&&O<E?O++:v.level===o&&M>=$&&(oi(v,f,g),O++,O===h&&S.destroy());break;case(i&&_):M=new Date(v.timestamp),K=new Date(l),v.level===o&&M<=K&&O<E?O++:v.level===o&&M<=K&&(oi(v,f,g),O++,O===h&&S.destroy());break;case(c&&_):M=new Date(v.timestamp),$=new Date(u),K=new Date(l),M>=$&&M<=K&&O<E?O++:M>=$&&M<=K&&(oi(v,f,g),O++,O===h&&S.destroy());break;case i:v.level===o&&O<E?O++:v.level===o&&(oi(v,f,g),O++,O===h&&S.destroy());break;case c:M=new Date(v.timestamp),$=new Date(u),M>=$&&O<E?O++:M>=$&&O>=E&&(oi(v,f,g),O++,O===h&&S.destroy());break;case _:M=new Date(v.timestamp),K=new Date(l),M<=K&&O<E?O++:M<=K&&O>=E&&(oi(v,f,g),O++,O===h&&S.destroy());break;default:O<E?O++:(oi(v,f,g),O++,O===h&&S.destroy())}}return a(H,"onLogMessage"),await mX(S,"close"),g}a(OX,"readLog");function oi(e,t,r){t==="desc"?bX(e,r):t==="asc"?yX(e,r):r.push(e)}a(oi,"pushLineToResult");function bX(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(bX,"insertDescending");function yX(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(yX,"insertAscending")});var ud=T((q_e,rL)=>{"use strict";var SS=require("joi"),{string:lu,boolean:ZD,date:NX}=SS.types(),wX=Xe(),{validateSchemaExists:H_e,validateTableExists:x_e,validateSchemaName:F_e}=$n(),IX=U(),CX=tt(),eL=Z();eL.initSync();var DX=lu.invalid(eL.get(IX.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(CX.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).required(),tL={operation:lu.valid("add_node","update_node","set_node_replication"),node_name:DX,subscriptions:SS.array().items({table:lu.optional(),schema:lu.optional(),database:lu.optional(),subscribe:ZD.required(),publish:ZD.required().custom(MX),start_time:NX.iso()}).min(1).required()};function LX(e){return wX.validateBySchema(e,SS.object(tL))}a(LX,"addUpdateNodeValidator");function MX(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(MX,"checkForFalsy");rL.exports={addUpdateNodeValidator:LX,validation_schema:tL}});var sL=T((k_e,nL)=>{var UX=Xe(),PX={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};nL.exports=function(e){return UX.validateObject(e,PX)}});var gS=T((V_e,iL)=>{"use strict";var vX=U().OPERATIONS_ENUM,TS=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=vX.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};iL.exports=TS});var aL=T((Y_e,oL)=>{"use strict";var BX={OPERATION:"operation",REFRESH:"refresh"},RS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},AS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};oL.exports={JWTTokens:RS,TOKEN_TYPE_ENUM:BX,JWTRSAKeys:AS}});var fu=T((W_e,_L)=>{"use strict";var du=require("jsonwebtoken"),OS=require("fs-extra"),bS=J(),nn=U(),{handleHDBError:ar,hdb_errors:HX}=ee(),{HTTP_STATUS_CODES:cr,AUTHENTICATION_ERROR_MSGS:ur}=HX,_u=W(),cL=O_(),wS=en(),xX=Zr().update,FX=gS(),qX=Ss(),{UserEventMsg:GX}=Nn(),ai=Z();ai.initSync();var yS=require("path"),{JWTTokens:kX,JWTRSAKeys:VX,TOKEN_TYPE_ENUM:ld}=aL(),$X=ai.get(nn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ai.get(nn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",YX=ai.get(nn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ai.get(nn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",_d="RS256",NS;_L.exports={createTokens:KX,validateOperationToken:QX,refreshOperationToken:WX,validateRefreshToken:lL};async function KX(e){if(bS.isEmpty(e)||typeof e!="object")throw ar(new Error,ur.INVALID_AUTH_OBJECT,cr.BAD_REQUEST,void 0,void 0,!0);if(bS.isEmpty(e.username))throw ar(new Error,ur.USERNAME_REQUIRED,cr.BAD_REQUEST,void 0,void 0,!0);if(bS.isEmpty(e.password))throw ar(new Error,ur.PASSWORD_REQUIRED,cr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await wS.findAndValidateUser(e.username,e.password),!t)throw ar(new Error,ur.INVALID_CREDENTIALS,cr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw _u.error(f),ar(new Error,ur.INVALID_CREDENTIALS,cr.UNAUTHORIZED,void 0,void 0,!0)}let r=await dd(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await uL(i,r.private_key,r.passphrase),c=await du.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:YX,algorithm:_d,subject:ld.REFRESH}),u=cL.hash(c),_=new FX(nn.SYSTEM_SCHEMA_NAME,nn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await xX(_)}catch(f){_u.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw ar(new Error,ur.REFRESH_TOKEN_SAVE_FAILED,cr.INTERNAL_SERVER_ERROR);return qX.signalUserChange(new GX(process.pid)),new kX(o,c)}a(KX,"createTokens");async function uL(e,t,r){return await du.sign(e,{key:t,passphrase:r},{expiresIn:$X,algorithm:_d,subject:ld.OPERATION})}a(uL,"signOperationToken");async function dd(){if(NS===void 0)try{let e=yS.join(ai.getHdbBasePath(),nn.LICENSE_KEY_DIR_NAME,nn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=yS.join(ai.getHdbBasePath(),nn.LICENSE_KEY_DIR_NAME,nn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=yS.join(ai.getHdbBasePath(),nn.LICENSE_KEY_DIR_NAME,nn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await OS.readFile(e)).toString(),s=(await OS.readFile(t)).toString(),i=(await OS.readFile(r)).toString();NS=new VX(i,s,n)}catch(e){throw _u.error(e),ar(new Error,ur.NO_ENCRYPTION_KEYS,cr.INTERNAL_SERVER_ERROR)}return NS}a(dd,"getJWTRSAKeys");async function WX(e){if(!e)throw ar(new Error,ur.INVALID_BODY,cr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw ar(new Error,ur.REFRESH_TOKEN_REQUIRED,cr.BAD_REQUEST,void 0,void 0,!0);await lL(e.refresh_token);let t=await dd(),r=await du.decode(e.refresh_token);return{operation_token:await uL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(WX,"refreshOperationToken");async function QX(e){try{let t=await dd(),r=await du.verify(e,t.public_key,{algorithms:_d,subject:ld.OPERATION});return await wS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw _u.warn(t),t.name&&t.name==="TokenExpiredError"?ar(new Error,ur.TOKEN_EXPIRED,cr.FORBIDDEN):ar(new Error,ur.INVALID_TOKEN,cr.UNAUTHORIZED)}}a(QX,"validateOperationToken");async function lL(e){let t;try{let r=await dd(),n=await du.verify(e,r.public_key,{algorithms:_d,subject:ld.REFRESH});t=await wS.findAndValidateUser(n.username,void 0,!1)}catch(r){throw _u.warn(r),r.name&&r.name==="TokenExpiredError"?ar(new Error,ur.TOKEN_EXPIRED,cr.FORBIDDEN):ar(new Error,ur.INVALID_TOKEN,cr.UNAUTHORIZED)}if(!cL.validate(t.refresh_token,e))throw ar(new Error,ur.INVALID_TOKEN,cr.UNAUTHORIZED);return t}a(lL,"validateRefreshToken")});var IS=T((J_e,EL)=>{"use strict";var zX=sL(),oa=require("passport"),JX=require("passport-local").Strategy,XX=require("passport-http").BasicStrategy,jX=require("util"),ZX=en(),fL=jX.callbackify(ZX.findAndValidateUser),z_e=br(),ej=U(),dL=fu();oa.use(new JX(function(e,t,r){fL(e,t,r)}));oa.use(new XX(function(e,t,r){fL(e,t,r)}));oa.serializeUser(function(e,t){t(null,e)});oa.deserializeUser(function(e,t){t(null,e)});function tj(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":oa.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===ej.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?dL.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):dL.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:oa.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(tj,"authorize");function rj(e,t){let r=zX(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(rj,"checkPermissions");EL.exports={authorize:tj,checkPermissions:rj}});var aa=T((j_e,hL)=>{"use strict";var CS=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},DS=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};hL.exports={Node:CS,NodeSubscription:DS}});var pL=T((ede,mL)=>{"use strict";var nj=U().OPERATIONS_ENUM,LS=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=nj.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};mL.exports=LS});var Eu=T((rde,SL)=>{"use strict";var MS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},US=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};SL.exports={RemotePayloadObject:MS,RemotePayloadSubscription:US}});var gL=T((sde,TL)=>{"use strict";var PS=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};TL.exports=PS});var OL=T((ude,AL)=>{"use strict";var sj=gL(),ode=lt(),RL=Ve(),ij=W(),{getSchemaPath:ade,getTransactionAuditStorePath:cde}=Ye(),{getDatabases:oj}=(be(),te(Fe));AL.exports=aj;async function aj(e){let t=new sj;try{let r=oj()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await RL.environmentDataSize(schema_path,e.name),o=await RL.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){ij.warn(`unable to stat table dbi due to ${r}`)}return t}a(aj,"lmdbGetTableSize")});var yL=T((_de,bL)=>{"use strict";var vS=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};bL.exports=vS});var ca=T((hde,CL)=>{"use strict";var cj=require("fs-extra"),uj=require("path"),Kt=require("systeminformation"),ci=W(),lj=At(),BS=tt(),Ed=U(),_j=OL(),IL=Hi(),{getThreadInfo:NL}=Ze(),KS=Z();KS.initSync();var dj=yL(),{openEnvironment:fde}=Ve(),{getSchemaPath:Ede}=Ye(),{database:fj}=(be(),te(Fe)),fd;CL.exports={getHDBProcessInfo:qS,getNetworkInfo:kS,getDiskInfo:GS,getMemoryInfo:FS,getCPUInfo:xS,getTimeInfo:HS,getSystemInformation:VS,systemInformation:Ej,getTableSize:$S,getMetrics:YS};function HS(){return Kt.time()}a(HS,"getTimeInfo");async function xS(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Kt.cpu();l.cpu_speed=await Kt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:O,...g}=await Kt.currentLoad();return g.cpus=[],O.forEach(R=>{let{raw_load:B,raw_load_idle:H,raw_load_irq:v,raw_load_nice:M,raw_load_system:$,raw_load_user:K,...z}=R;g.cpus.push(z)}),l.current_load=g,l}catch(e){return ci.error(`error in getCPUInfo: ${e}`),{}}}a(xS,"getCPUInfo");async function FS(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Kt.mem();return Object.assign(s,process.memoryUsage())}catch(e){return ci.error(`error in getMemoryInfo: ${e}`),{}}}a(FS,"getMemoryInfo");async function qS(){let e={core:[],clustering:[]};try{let t=await Kt.processes(),r;try{r=Number.parseInt(await cj.readFile(uj.join(KS.get(Ed.CONFIG_PARAMS.ROOTPATH),Ed.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Ed.NODE_ERROR_CODES.ENOENT)ci.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");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 ci.error(`error in getHDBProcessInfo: ${t}`),e}}a(qS,"getHDBProcessInfo");async function GS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Kt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Kt.fsStats();return e.read_write=_,e.size=await Kt.fsSize(),e}catch(t){return ci.error(`error in getDiskInfo: ${t}`),e}}a(GS,"getDiskInfo");async function kS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Kt.networkInterfaceDefault(),e.latency=await Kt.inetChecksite("google.com"),(await Kt.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=n;e.interfaces.push(f)}),(await Kt.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return ci.error(`error in getNetworkInfo: ${t}`),e}}a(kS,"getNetworkInfo");async function VS(){if(fd!==void 0)return fd;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Kt.osInfo();e=c;let u=await Kt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,fd=e,fd}catch(t){return ci.error(`error in getSystemInformation: ${t}`),e}}a(VS,"getSystemInformation");async function $S(){let e=[],t=await IL.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await _j(n));return e}a($S,"getTableSize");async function YS(){let e=await IL.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=fj({database:r,table:s}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),n[s]=o}catch(i){ci.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(YS,"getMetrics");async function wL(){if(KS.get(Ed.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await lj.getNATSReferences(),r=await t.streams.info(BS.WORK_QUEUE_CONSUMER_NAMES.stream_name),n=await e.consumers.get(BS.WORK_QUEUE_CONSUMER_NAMES.stream_name,BS.WORK_QUEUE_CONSUMER_NAMES.durable_name),s={ingest:{stream:{...r.state},consumer:{num_ack_pending:n._info.num_ack_pending,num_redelivered:n._info.num_redelivered,num_waiting:n._info.num_waiting,num_pending:n._info.num_pending}}};return r.sources&&(s.ingest.stream.sources=r.sources),s}}a(wL,"getNatsStreamInfo");async function Ej(e){let t=new dj;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await VS(),t.time=HS(),t.cpu=await xS(),t.memory=await FS(),t.disk=await GS(),t.network=await kS(),t.harperdb_processes=await qS(),t.table_size=await $S(),t.metrics=await YS(),t.threads=await NL(),t.replication=await wL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await VS();break;case"time":t.time=HS();break;case"cpu":t.cpu=await xS();break;case"memory":t.memory=await FS();break;case"disk":t.disk=await GS();break;case"network":t.network=await kS();break;case"harperdb_processes":t.harperdb_processes=await qS();break;case"table_size":t.table_size=await $S();break;case"database_metrics":case"metrics":t.metrics=await YS();break;case"threads":t.threads=await NL();break;case"replication":t.replication=await wL();break;default:break}return t}a(Ej,"systemInformation")});var md=T((pde,DL)=>{"use strict";DL.exports={version:hj,printVersion:mj};var hd=Xc();function hj(){if(hd)return hd.version}a(hj,"version");function mj(){hd&&console.log(`HarperDB Version ${hd.version}`)}a(mj,"printVersion")});var Os=T((Rde,PL)=>{"use strict";var pj=Zr(),WS=J(),Sj=require("util"),so=U(),LL=Z();LL.initSync();var Tj=IS(),ML=jr(),{Node:Tde,NodeSubscription:gde}=aa(),gj=Xo(),Rj=pL(),{RemotePayloadObject:Aj,RemotePayloadSubscription:Oj}=Eu(),{handleHDBError:bj,hdb_errors:yj}=ee(),{HTTP_STATUS_CODES:Nj,HDB_ERROR_MSGS:wj}=yj,Ij=Qn(),Cj=ca(),Dj=md(),{getDatabases:Lj}=(be(),te(Fe)),Mj=Sj.promisify(Tj.authorize),Uj=ML.searchByHash,Pj=ML.searchByValue;PL.exports={authHeaderToUser:vj,isEmpty:Bj,getNodeRecord:Hj,upsertNodeRecord:xj,buildNodePayloads:Fj,checkClusteringEnabled:qj,getAllNodeRecords:Gj,getSystemInfo:kj,reverseSubscription:UL};async function vj(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Mj(t,null),e}a(vj,"authHeaderToUser");function Bj(e){return e==null}a(Bj,"isEmpty");async function Hj(e){let t=new gj(so.SYSTEM_SCHEMA_NAME,so.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Uj(t)}a(Hj,"getNodeRecord");async function xj(e){let t=new Rj(so.SYSTEM_SCHEMA_NAME,so.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return pj.upsert(t)}a(xj,"upsertNodeRecord");function UL(e){if(WS.isEmpty(e.subscribe)||WS.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(UL,"reverseSubscription");function Fj(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=WS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=UL(c),E=Lj()[u]?.[_],h=new Oj(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new Aj(r,t,s,n)}a(Fj,"buildNodePayloads");function qj(){if(!LL.get(so.CONFIG_PARAMS.CLUSTERING_ENABLED))throw bj(new Error,wj.CLUSTERING_NOT_ENABLED,Nj.BAD_REQUEST,void 0,void 0,!0)}a(qj,"checkClusteringEnabled");async function Gj(){let e=new Ij(so.SYSTEM_SCHEMA_NAME,so.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Pj(e))}a(Gj,"getAllNodeRecords");async function kj(){let e=await Cj.getSystemInformation();return{hdb_version:Dj.version(),node_version:e.node_version,platform:e.platform}}a(kj,"getSystemInfo")});var QS=T((Ode,kL)=>{"use strict";var pd=At(),vL=J(),BL=tt(),HL=U(),Sd=W(),xL=sd(),Vj=Ep(),{RemotePayloadObject:$j}=Eu(),{handleHDBError:FL,hdb_errors:Yj}=ee(),{HTTP_STATUS_CODES:qL}=Yj,{NodeSubscription:GL}=aa();kL.exports=Kj;async function Kj(e,t){let r;try{r=await pd.request(`${t}.${BL.REQUEST_SUFFIX}`,new $j(HL.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Sd.trace("Response from remote describe all request:",r)}catch(o){Sd.error(`addNode received error from describe all request to remote node: ${o}`);let c=pd.requestErrorHandler(o,"add_node",t);throw FL(new Error,c,qL.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===BL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw FL(new Error,o,qL.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===HL.SYSTEM_SCHEMA_NAME){await pd.createLocalTableStream(u,c);let h=new GL(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=vL.doesSchemaExist(u),l=n[u]!==void 0,d=c?vL.doesTableExist(u,c):!0,f=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){s.push(o);continue}if(!_&&l&&(Sd.trace(`addNode creating schema: ${u}`),await xL.createSchema({operation:"create_schema",schema:u})),!d&&f){Sd.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new Vj(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await xL.createTable(h)}await pd.createLocalTableStream(u,c);let E=new GL(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(Kj,"reviewSubscriptions")});var Rd=T((yde,YL)=>{"use strict";var{handleHDBError:Td,hdb_errors:Wj}=ee(),{HTTP_STATUS_CODES:gd}=Wj,{addUpdateNodeValidator:Qj}=ud(),hu=W(),$L=U(),VL=tt(),zj=J(),zS=At(),mu=Os(),Jj=Z(),Xj=QS(),{Node:jj,NodeSubscription:Zj}=aa(),{broadcast:eZ}=Ze(),tZ="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",rZ="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",nZ=Jj.get($L.CONFIG_PARAMS.CLUSTERING_NODENAME);YL.exports=sZ;async function sZ(e,t=!1){hu.trace("addNode called with:",e),mu.checkClusteringEnabled();let r=Qj(e);if(r)throw Td(r,r.message,gd.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await mu.getNodeRecord(n);if(!zj.isEmptyOrZeroLength(d))throw Td(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,gd.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Xj(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=tZ,o;let c=mu.buildNodePayloads(s,nZ,$L.OPERATIONS_ENUM.ADD_NODE,await mu.getSystemInfo());hu.trace("addNode sending remote payload:",c);let u;try{u=await zS.request(`${n}.${VL.REQUEST_SUFFIX}`,c)}catch(d){hu.error(`addNode received error from request: ${d}`);let f=zS.requestErrorHandler(d,"add_node",n);throw Td(new Error,f,gd.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===VL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw Td(new Error,d,gd.INTERNAL_SERVER_ERROR,"error",d)}hu.trace(u);let _=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];hu.trace("Add node updating work stream for node:",n,"subscriptions:",E),await zS.updateWorkStream(E,n),s[d].start_time===void 0&&delete s[d].start_time,_.push(new Zj(E.schema,E.table,E.publish,E.subscribe))}let l=new jj(n,_,u.system_info);return await mu.upsertNodeRecord(l),eZ({type:"nats_update"}),i.length>0?o.message=rZ:o.message=`Successfully added '${n}' to manifest`,o}a(sZ,"addNode")});var ZS=T((Ide,QL)=>{"use strict";var{handleHDBError:JS,hdb_errors:iZ}=ee(),{HTTP_STATUS_CODES:XS}=iZ,{addUpdateNodeValidator:oZ}=ud(),pu=W(),WL=U(),KL=tt(),wde=J(),jS=At(),Su=Os(),aZ=Z(),{cloneDeep:cZ}=require("lodash"),uZ=QS(),{Node:lZ,NodeSubscription:_Z}=aa(),{broadcast:dZ}=Ze(),fZ="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",EZ="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",hZ=aZ.get(WL.CONFIG_PARAMS.CLUSTERING_NODENAME);QL.exports=mZ;async function mZ(e){pu.trace("updateNode called with:",e),Su.checkClusteringEnabled();let t=oZ(e);if(t)throw JS(t,t.message,XS.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Su.getNodeRecord(r);s.length>0&&(n=cZ(s));let{added:i,skipped:o}=await uZ(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=fZ,c;let u=Su.buildNodePayloads(i,hZ,WL.OPERATIONS_ENUM.UPDATE_NODE,await Su.getSystemInfo());pu.trace("updateNode sending remote payload:",u);let _;try{_=await jS.request(`${r}.${KL.REQUEST_SUFFIX}`,u)}catch(l){pu.error(`updateNode received error from request: ${l}`);let d=jS.requestErrorHandler(l,"update_node",r);throw JS(new Error,d,XS.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===KL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw JS(new Error,l,XS.INTERNAL_SERVER_ERROR,"error",l)}pu.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];pu.trace(`updateNode updating work stream for node: ${r} subscription:`,f),await jS.updateWorkStream(f,r),i[l].start_time===void 0&&delete i[l].start_time}return n||(n=[new lZ(r,[],_.system_info)]),await pZ(n[0],i,_.system_info),o.length>0?c.message=EZ:c.message=`Successfully updated '${r}'`,c}a(mZ,"updateNode");async function pZ(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=n.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new _Z(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Su.upsertNodeRecord(n),dZ({type:"nats_update"})}a(pZ,"updateNodeTable")});var ZL=T((Dde,jL)=>{"use strict";var XL=require("joi"),{string:zL}=XL.types(),SZ=Xe(),JL=U(),TZ=Z(),gZ=tt();jL.exports=RZ;function RZ(e){let t=zL.invalid(TZ.get(JL.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(gZ.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=XL.object({operation:zL.valid(JL.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return SZ.validateBySchema(e,r)}a(RZ,"removeNodeValidator")});var Od=T((Mde,iM)=>{"use strict";var{handleHDBError:eM,hdb_errors:AZ}=ee(),{HTTP_STATUS_CODES:tM}=AZ,OZ=ZL(),Tu=W(),rM=Os(),bZ=J(),Ad=U(),nM=tt(),sM=At(),yZ=Z(),{RemotePayloadObject:NZ}=Eu(),{NodeSubscription:wZ}=aa(),IZ=Vc(),CZ=ki(),{broadcast:DZ}=Ze(),LZ=yZ.get(Ad.CONFIG_PARAMS.CLUSTERING_NODENAME);iM.exports=MZ;async function MZ(e){Tu.trace("removeNode called with:",e),rM.checkClusteringEnabled();let t=OZ(e);if(t)throw eM(t,t.message,tM.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await rM.getNodeRecord(r);if(bZ.isEmptyOrZeroLength(n))throw eM(new Error,`Node '${r}' was not found.`,tM.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new NZ(Ad.OPERATIONS_ENUM.REMOVE_NODE,LZ,[]),i,o=!1;try{i=await sM.request(`${r}.${nM.REQUEST_SUFFIX}`,s),Tu.trace("Remove node reply from remote node:",r,i)}catch(u){Tu.error("removeNode received error from request:",u),o=!0}for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];Tu.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new wZ(l.schema,l.table,!1,!1);await sM.updateWorkStream(d,r)}let c=new IZ(Ad.SYSTEM_SCHEMA_NAME,Ad.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await CZ.deleteRecord(c),DZ({type:"nats_update"}),i?.status===nM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Tu.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(MZ,"removeNode")});var cM=T((Pde,aM)=>{"use strict";var oM=require("joi"),{string:UZ,array:PZ}=oM.types(),vZ=Xe(),BZ=ud();aM.exports=HZ;function HZ(e){let t=oM.object({operation:UZ.valid("configure_cluster").required(),connections:PZ.items(BZ.validation_schema).required()});return vZ.validateBySchema(e,t)}a(HZ,"configureClusterValidator")});var eT=T((Bde,fM)=>{"use strict";var xZ=U(),bd=W(),FZ=J(),qZ=Od(),GZ=Rd(),uM=Os(),kZ=cM(),{handleHDBError:lM,hdb_errors:VZ}=ee(),{HTTP_STATUS_CODES:_M}=VZ,$Z="Configure cluster complete.",YZ="Failed to configure the cluster. Check the logs for more details.",KZ="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";fM.exports=WZ;async function WZ(e){bd.trace("configure cluster called with:",e),uM.checkClusteringEnabled();let t=kZ(e);if(t)throw lM(t,t.message,_M.BAD_REQUEST,void 0,void 0,!0);let r=await uM.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(dM(qZ,{operation:xZ.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);bd.trace("All results from configure_cluster remove node:",s);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(dM(GZ,E,E.node_name))}let c=await Promise.allSettled(i);bd.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=s.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(bd.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(FZ.isEmptyOrZeroLength(u))return{message:$Z,connections:_};if(l)return{message:KZ,failed_nodes:u,connections:_};throw lM(new Error,YZ,_M.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(WZ,"configureCluster");async function dM(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(dM,"functionWrapper")});var hM=T((xde,EM)=>{"use strict";var yd=require("joi"),QZ=Xe(),{validateSchemaExists:zZ,validateTableExists:JZ,validateSchemaName:XZ}=$n(),jZ=yd.object({operation:yd.string().valid("purge_stream"),schema:yd.string().custom(zZ).custom(XZ).required(),table:yd.string().custom(JZ).required()});function ZZ(e){return QZ.validateBySchema(e,jZ)}a(ZZ,"purgeStreamValidator");EM.exports=ZZ});var tT=T((qde,mM)=>{"use strict";var{handleHDBError:e5,hdb_errors:t5}=ee(),{HTTP_STATUS_CODES:r5}=t5,n5=hM(),s5=At(),i5=Os();mM.exports=o5;async function o5(e){if(e.purge_ingest!==!0){let s=n5(e);if(s)throw e5(s,s.message,r5.BAD_REQUEST,void 0,void 0,!0)}i5.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await s5.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(o5,"purgeStream")});var sT=T((kde,AM)=>{"use strict";var nT=Os(),a5=At(),TM=Z(),Nd=U(),io=tt(),c5=J(),rT=W(),{RemotePayloadObject:u5}=Eu(),{ErrorCode:pM}=require("nats"),SM=TM.get(Nd.CONFIG_PARAMS.CLUSTERING_ENABLED),gM=TM.get(Nd.CONFIG_PARAMS.CLUSTERING_NODENAME);AM.exports={clusterStatus:l5,buildNodeStatus:RM};async function l5(){let e={node_name:gM,is_enabled:SM,connections:[]};if(!SM)return e;let t=await nT.getAllNodeRecords();if(c5.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(RM(t[n],e.connections));return await Promise.allSettled(r),e}a(l5,"clusterStatus");async function RM(e,t){let r=e.name,n=new u5(Nd.OPERATIONS_ENUM.CLUSTER_STATUS,gM,void 0,await nT.getSystemInfo()),s,i,o=io.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await a5.request(io.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===io.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=io.CLUSTER_STATUS_STATUSES.CLOSED,rT.error(`Error getting node status from ${r} `,s))}catch(u){rT.warn(`Error getting node status from ${r}`,u),u.code===pM.NoResponders?o=io.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===pM.Timeout?o=io.CLUSTER_STATUS_STATUSES.TIMEOUT:o=io.CLUSTER_STATUS_STATUSES.CLOSED}let c=new _5(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let u={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Nd.PRE_4_0_0_VERSION&&await nT.upsertNodeRecord(u)}catch(u){rT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(RM,"buildNodeStatus");function _5(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(_5,"NodeStatusObject")});var oT=T(($de,OM)=>{"use strict";var{handleHDBError:d5,hdb_errors:f5}=ee(),{HTTP_STATUS_CODES:E5}=f5,h5=At(),m5=Os(),iT=J(),wd=require("joi"),p5=Xe(),S5=2e3,T5=wd.object({timeout:wd.number().min(1),connected_nodes:wd.boolean(),routes:wd.boolean()});OM.exports=g5;async function g5(e){m5.checkClusteringEnabled();let t=p5.validateBySchema(e,T5);if(t)throw d5(t,t.message,E5.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||iT.autoCastBoolean(n),o=s===void 0||iT.autoCastBoolean(s),c={nodes:[]},u=await h5.getServerList(r??S5),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:iT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(g5,"clusterNetwork")});var wM=T((Kde,NM)=>{"use strict";var aT=require("joi"),bM=Xe(),{route_constraints:yM}=uh();NM.exports={setRoutesValidator:R5,deleteRoutesValidator:A5};function R5(e){let t=aT.object({server:aT.valid("hub","leaf").required(),routes:yM.required()});return bM.validateBySchema(e,t)}a(R5,"setRoutesValidator");function A5(e){let t=aT.object({routes:yM.required()});return bM.validateBySchema(e,t)}a(A5,"deleteRoutesValidator")});var uT=T((Qde,LM)=>{"use strict";var oo=Ir(),cT=J(),Id=U(),IM=wM(),{handleHDBError:CM,hdb_errors:O5}=ee(),{HTTP_STATUS_CODES:DM}=O5,b5="cluster routes successfully set",y5="cluster routes successfully deleted";LM.exports={setRoutes:N5,getRoutes:w5,deleteRoutes:I5};function N5(e){let t=IM.setRoutesValidator(e);if(t)throw CM(t,t.message,DM.BAD_REQUEST,void 0,void 0,!0);let r=oo.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=cT.autoCast(_.port);let l=n.some(f=>f.host===_.host&&f.port===_.port),d=s.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?oo.updateConfigValue(Id.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):oo.updateConfigValue(Id.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:b5,set:o,skipped:i}}a(N5,"setRoutes");function w5(){let e=oo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(w5,"getRoutes");function I5(e){let t=IM.deleteRoutesValidator(e);if(t)throw CM(t,t.message,DM.BAD_REQUEST,void 0,void 0,!0);let r=oo.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=n.length;E<h;E++){let p=n[E];if(d.host===p.host&&d.port===p.port){n.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=s.length;h<p;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(n=cT.isEmptyOrZeroLength(n)?null:n,oo.updateConfigValue(Id.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=cT.isEmptyOrZeroLength(s)?null:s,oo.updateConfigValue(Id.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:y5,deleted:i,skipped:o}}a(I5,"deleteRoutes")});var UM=T((Jde,MM)=>{"use strict";var gu=require("alasql"),ao=require("recursive-iterator"),Ln=W(),C5=J(),Ru=U(),lT=class{static{a(this,"sql_statement_bucket")}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,L5(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=>Ru.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=>!Ru.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Ru.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=D5(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!Ru.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new gu.yy.Column({columnid:_});s.tableid&&(l.tableid=s.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function D5(e){return e.filter(t=>t[Ru.PERMS_CRUD_ENUM.READ])}a(D5,"filterReadRestrictedAttrs");function L5(e,t,r,n,s){M5(e,t,r,n,s)}a(L5,"interpretAST");function Au(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(Au,"addSchemaTableToMap");function M5(e,t,r,n,s){if(!e){Ln.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof gu.yy.Insert?B5(e,t,r):e instanceof gu.yy.Select?U5(e,t,r,n,s):e instanceof gu.yy.Update?P5(e,t,r):e instanceof gu.yy.Delete?v5(e,t,r):Ln.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(M5,"getRecordAttributesAST");function U5(e,t,r,n,s){if(!e){Ln.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(C5.isEmptyOrZeroLength(i)){Ln.error("No schema specified");return}e.from.forEach(c=>{Au(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Au(c.table,t,r,n,s)});let o=new ao(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Ln.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new ao(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Ln.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new ao(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=s.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Ln.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new ao(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Ln.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(U5,"getSelectAttributes");function P5(e,t,r){if(!e){Ln.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new ao(e.columns),s=e.table.databaseid;Au(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&_T(e.table.tableid,s,i.columnid,t,r)}a(P5,"getUpdateAttributes");function v5(e,t,r){if(!e){Ln.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new ao(e.where),s=e.table.databaseid;Au(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&_T(e.table.tableid,s,i.columnid,t,r)}a(v5,"getDeleteAttributes");function B5(e,t,r){if(!e){Ln.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new ao(e.columns),s=e.into.databaseid;Au(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&_T(e.into.tableid,s,i.columnid,t,r)}a(B5,"getInsertAttributes");function _T(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(_T,"pushAttribute");MM.exports=lT});var ET=T((jde,HM)=>{var Cd=Vi(),PM=require("chalk"),xr=W(),vM=require("prompt"),{promisify:H5}=require("util"),dT=U(),x5=require("fs-extra"),F5=require("path"),q5=J(),G5=md(),BM=Z();BM.initSync();var k5=require("moment"),V5=H5(vM.get),$5=F5.join(BM.getHdbBasePath(),dT.LICENSE_KEY_DIR_NAME,dT.LICENSE_FILE_NAME,dT.LICENSE_FILE_NAME);HM.exports={getFingerprint:K5,setLicense:Y5,parseLicense:fT,register:W5,getRegistrationInfo:z5};async function Y5(e){if(e&&e.key&&e.company){try{xr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await fT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw xr.error(r),xr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Y5,"setLicense");async function K5(){let e={};try{e=await Cd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw xr.error(r),xr.error(t),new Error(r)}return e}a(K5,"getFingerprint");async function fT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");xr.info("Validating license input...");let r=Cd.validateLicense(e,t);if(xr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(xr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(xr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{xr.info("writing license to disk"),await x5.writeFile($5,JSON.stringify({license_key:e,company:t}))}catch(n){throw xr.error("Failed to write License"),n}return"Registration successful."}a(fT,"parseLicense");async function W5(){let e=await Q5();return fT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(W5,"register");async function Q5(){let e=await Cd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:PM.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:PM.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{vM.start()}catch(n){xr.error(n)}let r;try{r=await V5(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(Q5,"promptForRegistration");async function z5(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Cd.getLicense()}catch(r){throw xr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(q5.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=G5.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=k5.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(z5,"getRegistrationInfo")});var FM=T((efe,xM)=>{"use strict";var J5=tt(),hT=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+J5.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};xM.exports=hT});var kM=T((rfe,GM)=>{"use strict";var qM=tt(),mT=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+qM.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+qM.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};GM.exports=mT});var $M=T((sfe,VM)=>{"use strict";var pT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};VM.exports=pT});var KM=T((ofe,YM)=>{"use strict";var X5=tt(),ST=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+X5.SERVER_SUFFIX.ADMIN,this.password=r}};YM.exports=ST});var RT=T((cfe,zM)=>{"use strict";var ua=require("path"),Md=require("fs-extra"),j5=FM(),Z5=kM(),e8=$M(),t8=KM(),TT=en(),_a=J(),lr=Ir(),Ld=U(),Ou=tt(),{CONFIG_PARAMS:ut}=Ld,bu=W(),yu=Z(),WM=ps(),gT=At(),la="clustering",r8=1e4,QM=5;zM.exports={generateNatsConfig:s8,removeNatsConfig:i8,getHubConfigPath:n8};function n8(){let e=yu.get(ut.ROOTPATH);return ua.join(e,la,Ou.NATS_CONFIG_FILES.HUB_SERVER)}a(n8,"getHubConfigPath");async function s8(e=!1,t=void 0){yu.initSync();let r=yu.get(ut.ROOTPATH),n=ua.join(r,la,Ou.PID_FILES.HUB),s=ua.join(r,la,Ou.PID_FILES.LEAF),i=lr.getConfigFromFile(ut.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=ua.join(r,la,Ou.NATS_CONFIG_FILES.HUB_SERVER),c=ua.join(r,la,Ou.NATS_CONFIG_FILES.LEAF_SERVER),u=lr.getConfigFromFile(ut.CLUSTERING_TLS_CERTIFICATE),_=lr.getConfigFromFile(ut.CLUSTERING_TLS_PRIVATEKEY),l=lr.getConfigFromFile(ut.CLUSTERING_TLS_CERT_AUTH),d=lr.getConfigFromFile(ut.CLUSTERING_TLS_INSECURE),f=lr.getConfigFromFile(ut.CLUSTERING_TLS_VERIFY),E=lr.getConfigFromFile(ut.CLUSTERING_NODENAME),h=lr.getConfigFromFile(ut.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await gT.checkNATSServerInstalled()||Ud("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await TT.listUsers(),S=lr.getConfigFromFile(ut.CLUSTERING_USER),O=await TT.getClusterUser();(_a.isEmpty(O)||O.active!==!0)&&Ud(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Dd(ut.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Dd(ut.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Dd(ut.CLUSTERING_HUBSERVER_NETWORK_PORT),await Dd(ut.CLUSTERING_LEAFSERVER_NETWORK_PORT));let g=[],R=[];for(let[z,se]of p.entries())se.role.role===Ld.ROLE_TYPES_ENUM.CLUSTER_USER&&se.active&&(g.push(new t8(se.username,WM.decrypt(se.hash))),R.push(new e8(se.username,WM.decrypt(se.hash))));let B=[],{hub_routes:H}=lr.getClusteringRoutes();if(!_a.isEmptyOrZeroLength(H))for(let z of H)B.push(`tls://${O.sys_name_encoded}:${O.uri_encoded_d_hash}@${z.host}:${z.port}`);let v=new j5(lr.getConfigFromFile(ut.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,u,_,l,d,f,h,lr.getConfigFromFile(ut.CLUSTERING_HUBSERVER_CLUSTER_NAME),lr.getConfigFromFile(ut.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),B,g,R);l==null&&(delete v.tls.ca_file,delete v.leafnodes.tls.ca_file),t=_a.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Ld.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Md.writeJson(o,v),bu.trace(`Hub server config written to ${o}`));let M=`tls://${O.sys_name_encoded}:${O.uri_encoded_d_hash}@0.0.0.0:${h}`,$=`tls://${O.uri_encoded_name}:${O.uri_encoded_d_hash}@0.0.0.0:${h}`,K=new Z5(lr.getConfigFromFile(ut.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[M],[$],g,R,u,_,l,d);l==null&&delete K.tls.ca_file,(t===void 0||t===Ld.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Md.writeJson(c,K),bu.trace(`Leaf server config written to ${c}`))}a(s8,"generateNatsConfig");async function Dd(e){let t=yu.get(e);return _a.isEmpty(t)&&Ud(`port undefined for '${e}'`),await _a.isPortTaken(t)&&Ud(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(Dd,"isPortAvailable");function Ud(e){let t=`Error generating clustering config: ${e}`;bu.error(t),console.error(t),process.exit(1)}a(Ud,"generateNatsConfigError");async function i8(e){let{port:t,config_file:r}=gT.getServerConfig(e),{username:n,decrypt_hash:s}=await TT.getClusterUser(),i=0,o=2e3;for(;i<QM;){try{let _=await gT.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){bu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=QM)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.`);await _a.async_set_timeout(o*(i*2))}let c="0".repeat(r8),u=ua.join(yu.get(ut.ROOTPATH),la,r);await Md.writeFile(u,c),await Md.remove(u),bu.notify(e,"started.")}a(i8,"removeNatsConfig")});var Hd=T((lfe,rU)=>{"use strict";var o8=require("minimist"),{isMainThread:bT,parentPort:jM}=require("worker_threads"),rt=U(),{PROCESS_DESCRIPTORS_VALIDATE:Nu}=rt,jn=W(),yT=J(),Pd=RT(),da=At(),AT=tt(),ZM=Ir(),Zn=wT(),JM=ca(),a8=jE(),{restartWorkers:vd,onMessageByType:c8}=Ze(),{handleHDBError:u8,hdb_errors:l8}=ee(),{HTTP_STATUS_CODES:_8}=l8,Bd=Z();Bd.initSync();var wu=`Restarting HarperDB. This may take up to ${rt.RESTART_TIMEOUT_MS/1e3} seconds.`,d8="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",XM="Clustering is not enabled so cannot be restarted",f8="Invalid service",fa,sn;rU.exports={restart:eU,restartService:NT};bT&&c8(rt.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?NT({service:e.workerType}):eU({operation:"restart"})});async function eU(e){sn=Object.keys(e).length===0,fa=await Zn.isServiceRegistered(rt.HDB_PROC_DESCRIPTOR);let t=o8(process.argv);if(t.service){await NT(t);return}if(sn&&!fa){console.error(d8);return}if(sn&&console.log(wu),fa){Zn.enterPM2Mode(),jn.notify(wu);let r=a8(Object.keys(rt.CONFIG_PARAM_MAP),!0);return yT.isEmptyOrZeroLength(Object.keys(r))||ZM.updateConfigValue(void 0,void 0,r,!0,!0),h8(),wu}return bT?(jn.notify(wu),setTimeout(()=>{vd()},50)):jM.postMessage({type:rt.ITC_EVENT_TYPES.RESTART}),wu}a(eU,"restart");async function NT(e){let{service:t}=e;if(rt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw u8(new Error,f8,_8.BAD_REQUEST,void 0,void 0,!0);if(fa=await Zn.isServiceRegistered(rt.HDB_PROC_DESCRIPTOR),!bT)return jM.postMessage({type:rt.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Nu.clustering:if(!Bd.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=XM;break}sn&&console.log("Restarting clustering"),jn.notify("Restarting clustering"),await tU();break;case Nu.clustering_config:case Nu["clustering config"]:if(!Bd.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=XM;break}sn&&console.log("Restarting clustering_config"),jn.notify("Restarting clustering_config"),await Zn.reloadClustering();break;case"custom_functions":case"custom functions":case Nu.harperdb:case Nu.http_workers:if(sn&&!fa){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}sn&&console.log("Restarting http_workers"),jn.notify("Restarting http_workers"),sn?await Zn.restart(rt.HDB_PROC_DESCRIPTOR):setTimeout(()=>{vd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(jn.error(r),sn&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(NT,"restartService");async function E8(){await da.publishToStream(`${AT.SUBJECT_PREFIXES.TXN}.${AT.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,AT.WORK_QUEUE_CONSUMER_NAMES.stream_name,da.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(E8,"postDummyNatsMsg");async function h8(){await tU(),await Zn.restart(rt.HDB_PROC_DESCRIPTOR),await yT.async_set_timeout(2e3),Bd.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await OT(),sn&&(await da.closeConnection(),process.exit(0))}a(h8,"restartPM2Mode");async function tU(){if(!ZM.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await JM.getHDBProcessInfo()).clustering.length===0)jn.trace("Clustering not running, restart will start clustering services"),await Pd.generateNatsConfig(!0),await Zn.startClusteringProcesses(),await Zn.startClusteringThreads(),await OT(),sn&&await da.closeConnection();else{await E8(),await Pd.generateNatsConfig(!0),fa?(jn.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Zn.restart(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Zn.restart(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await JM.getHDBProcessInfo()).clustering.forEach(s=>{jn.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await yT.async_set_timeout(3e3),await OT(),await da.updateLocalStreams(),sn&&await da.closeConnection(),jn.trace("Restart clustering restarting ingest and reply service threads");let t=vd(rt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=vd(rt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(tU,"restartClustering");async function OT(){await Pd.removeNatsConfig(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Pd.removeNatsConfig(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(OT,"removeNatsConfig")});var fU=T((ffe,dU)=>{"use strict";var dfe=require("lodash"),_r=U(),{handleHDBError:nU,hdb_errors:m8}=ee(),{HDB_ERROR_MSGS:p8,HTTP_STATUS_CODES:S8}=m8,IT=W();dU.exports={getRolePermissions:g8};var co=Object.create(null),T8=a(e=>({key:e,perms:{}}),"perms_template_obj"),aU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),cU=a((e=!1,t=!1,r=!1,n=!1)=>({[_r.PERMS_CRUD_ENUM.READ]:e,[_r.PERMS_CRUD_ENUM.INSERT]:t,[_r.PERMS_CRUD_ENUM.UPDATE]:r,[_r.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),CT=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...cU(t,r,n,s)}),"table_perms_template"),sU=a((e,t=cU())=>({attribute_name:e,describe:_U(t),[Iu]:t[Iu],[DT]:t[DT],[LT]:t[LT]}),"attr_perms_template"),iU=a((e,t=!1)=>({attribute_name:e,describe:t,[Iu]:t}),"timestamp_attr_perms_template"),{READ:Iu,INSERT:DT,UPDATE:LT}=_r.PERMS_CRUD_ENUM,uU=Object.values(_r.PERMS_CRUD_ENUM),lU=[Iu,DT,LT];function g8(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[_r.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(co[t]&&co[t].key===n)return co[t].perms;let s=R8(e,r);return co[t]?co[t].key=n:co[t]=T8(n),co[t].perms=s,s}catch(r){if(!e[_r.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[_r.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<_r.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw IT.error(n),IT.debug(r),nU(new Error,p8.OUTDATED_PERMS_TRANSLATION_ERROR,S8.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
11
+ ${r.stack}`;throw IT.error(n),nU(new Error)}}}a(g8,"getRolePermissions");function R8(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[_r.SYSTEM_SCHEMA_NAME]=n[_r.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]=A8(t[i]);return}r[i]=aU(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],u=t[i][o],_=O8(c,u);r[i].describe||uU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=CT()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=CT()})}),r}a(R8,"translateRolePermissions");function A8(e){let t=aU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=CT(!0,!0,!0,!0,!0)}),t}a(A8,"createStructureUserPermissions");function O8(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return _r.TIME_STAMP_NAMES.includes(d)&&(f=iU(d,l[Iu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=sU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=_U(l),s.attribute_permissions.push(l),c||b8(l,u)}else if(_!==o){let l;_r.TIME_STAMP_NAMES.includes(_)?l=iU(_):l=sU(_),s.attribute_permissions.push(l)}}),c||s.attribute_permissions.push(u),s.describe=oU(s),s}else return e.describe=oU(e),e}a(O8,"getTableAttrPerms");function oU(e){return uU.filter(t=>e[t]).length>0}a(oU,"getSchemaTableDescribePerm");function _U(e){return lU.filter(t=>e[t]).length>0}a(_U,"getAttributeDescribePerm");function b8(e,t){lU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(b8,"checkForHashPerms")});var EU={};ke(EU,{Resources:()=>xd,keyArrayToString:()=>Ea,resetResources:()=>y8,resources:()=>ui});function y8(){return ui=new xd}function Ea(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var xd,ui,Cu=Oe(()=>{zi();xd=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;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,type:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),u=this.get(c);if(u){if(u.relativeURL=t.slice(n),!u.hasSubPaths)return u;s=u}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),s?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}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 Ke(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(y8,"resetResources");a(Ea,"keyArrayToString")});var hU={};ke(hU,{Headers:()=>li});var li,Fd=Oe(()=>{li=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];n?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var Du={};ke(Du,{authentication:()=>OU,bypassAuth:()=>M8,login:()=>P8,logout:()=>v8,start:()=>U8});function M8(){AU=!0}async function OU(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?C8?I8:[]:w8?N8:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new li([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return qd&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),qd&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(qd){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.indexOf(E);if(h>=0){let p=s.indexOf(";",h),S=s.indexOf("=",h);u=s.slice(S+1,p===-1?s.length:p),_=await pU.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new kd.AuthAuditLog(E,h,xt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===xt.AUTH_AUDIT_STATUS.SUCCESS?mU.notify(S):mU.error(S)},"authAuditLog");if(e.mtlsConfig&&e.authorized){let E=e.mtlsConfig.user;E!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=e.peerCertificate.subject.CN),e.user=await je.getUser(E,null,null))}let d;if(!e.user)if(n){if(d=uo.get(n),!d){let[E,h]=n.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await je.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,Gd.validateOperationToken)(h)}catch(O){if(O.message==="invalid token")try{return await(0,Gd.validateRefreshToken)(h),c({status:-1})}catch{throw O}}break}}catch(O){return L8&&(uo.get(h)||(uo.set(h,h),l(p,xt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:_i({error:O.message},e)})}uo.set(n,d),D8&&l(d.username,xt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await je.getUser(_.user,null,e):(AU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,TU.getSuperUser)());qd&&(e.session.update=function(E){if(!u){u=(0,gU.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=u,pU.put(E)},e.login=async function(E,h){e.user=await je.getUser(E,h,e),e.session.update({user:e.user.username})},(d&&!_||_?.user?.username!==d?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let f=await t(e);return f&&(f.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&ui.loginPath?(f.status=302,f.headers.set("Location",ui.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new li);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function U8({server:e,port:t}){e.request(OU,{port:t||"all"}),SU||(SU=!0,setInterval(()=>{uo=new Map},on.get(xt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),RU.user.addListener(()=>{uo=new Map}))}async function P8(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 v8(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var TU,Gd,gU,on,xt,kd,RU,mU,N8,w8,I8,C8,pU,qd,AU,D8,L8,uo,SU,Vd=Oe(()=>{TU=x(en());jt();Cu();Gd=x(fu());be();gU=require("uuid"),on=x(Z()),xt=x(U()),kd=x(W()),RU=x(Pc());Fd();ha();mU=(0,kd.loggerWithTag)("auth-event");on.initSync();N8=on.get(xt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),w8=on.get(xt.CONFIG_PARAMS.HTTP_CORS),I8=on.get(xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),C8=on.get(xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),pU=ot({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),qd=on.get(xt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,AU=on.get(xt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,D8=on.get(xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,L8=on.get(xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,uo=new Map;je.onInvalidatedUser(()=>{uo=new Map});a(M8,"bypassAuth");a(OU,"authentication");a(U8,"start");a(P8,"login");a(v8,"logout")});var DU=T((bfe,CU)=>{"use strict";var we=require("joi"),bU=require("fs-extra"),yU=require("path"),ys=Xe(),NU=Z(),wU=U(),IU=W(),{hdb_errors:B8}=ee(),{HDB_ERROR_MSGS:Wt}=B8,bs=/^[a-zA-Z0-9-_]+$/;CU.exports={getDropCustomFunctionValidator:x8,setCustomFunctionValidator:F8,addComponentValidator:V8,dropCustomFunctionProjectValidator:$8,packageComponentValidator:Y8,deployComponentValidator:K8,setComponentFileValidator:q8,getComponentFileValidator:k8,dropComponentFileValidator:G8};function $d(e,t,r){try{let n=NU.get(wU.CONFIG_PARAMS.COMPONENTSROOT),s=yU.join(n,t);return bU.existsSync(s)?e?t:r.message(Wt.PROJECT_EXISTS):e?r.message(Wt.NO_PROJECT):t}catch(n){return IU.error(n),r.message(Wt.VALIDATION_ERR)}}a($d,"checkProjectExists");function Lu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Lu,"checkFilePath");function H8(e,t,r,n){try{let s=NU.get(wU.CONFIG_PARAMS.COMPONENTSROOT),i=yU.join(s,e,t,r+".js");return bU.existsSync(i)?r:n.message(Wt.NO_FILE)}catch(s){return IU.error(s),n.message(Wt.VALIDATION_ERR)}}a(H8,"checkFileExists");function x8(e){let t=we.object({project:we.string().pattern(bs).custom($d.bind(null,!0)).required().messages({"string.pattern.base":Wt.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().pattern(bs).custom(H8.bind(null,e.project,e.type)).custom(Lu).required().messages({"string.pattern.base":Wt.BAD_FILE_NAME})});return ys.validateBySchema(e,t)}a(x8,"getDropCustomFunctionValidator");function F8(e){let t=we.object({project:we.string().pattern(bs).custom($d.bind(null,!0)).required().messages({"string.pattern.base":Wt.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().custom(Lu).required(),function_content:we.string().required()});return ys.validateBySchema(e,t)}a(F8,"setCustomFunctionValidator");function q8(e){let t=we.object({project:we.string().pattern(bs).required().messages({"string.pattern.base":Wt.BAD_PROJECT_NAME}),file:we.string().custom(Lu).required(),payload:we.string().allow("").optional(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ys.validateBySchema(e,t)}a(q8,"setComponentFileValidator");function G8(e){let t=we.object({project:we.string().pattern(bs).required().messages({"string.pattern.base":Wt.BAD_PROJECT_NAME}),file:we.string().custom(Lu).optional()});return ys.validateBySchema(e,t)}a(G8,"dropComponentFileValidator");function k8(e){let t=we.object({project:we.string().required(),file:we.string().custom(Lu).required(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ys.validateBySchema(e,t)}a(k8,"getComponentFileValidator");function V8(e){let t=we.object({project:we.string().pattern(bs).custom($d.bind(null,!1)).required().messages({"string.pattern.base":Wt.BAD_PROJECT_NAME})});return ys.validateBySchema(e,t)}a(V8,"addComponentValidator");function $8(e){let t=we.object({project:we.string().pattern(bs).custom($d.bind(null,!0)).required().messages({"string.pattern.base":Wt.BAD_PROJECT_NAME})});return ys.validateBySchema(e,t)}a($8,"dropCustomFunctionProjectValidator");function Y8(e){let t=we.object({project:we.string().pattern(bs).required().messages({"string.pattern.base":Wt.BAD_PROJECT_NAME}),skip_node_modules:we.boolean()});return ys.validateBySchema(e,t)}a(Y8,"packageComponentValidator");function K8(e){let t=we.object({project:we.string().pattern(bs).required().messages({"string.pattern.base":Wt.BAD_PROJECT_NAME}),payload:we.string().optional().messages({"string.pattern.base":Wt.BAD_PACKAGE}),package:we.string().optional()});return ys.validateBySchema(e,t)}a(K8,"deployComponentValidator")});var Qd=T((Nfe,HU)=>{"use strict";var Yd=require("joi"),Kd=require("path"),LU=require("fs-extra"),{exec:W8}=require("child_process"),Q8=require("util"),MU=Q8.promisify(W8),Mu=U(),{handleHDBError:ma,hdb_errors:z8}=ee(),{HTTP_STATUS_CODES:pa}=z8,Uu=Z(),J8=Xe(),Sa=W();Uu.initSync();var MT=Uu.get(Mu.CONFIG_PARAMS.COMPONENTSROOT),UU="npm install --omit=dev --json",X8=`${UU} --dry-run`;HU.exports={installModules:t6,auditModules:r6,installAllRootModules:j8,uninstallRootModule:Z8,linkHarperdb:e6};async function j8(e=!1){await Wd(),await Pu(e?"npm install --ignore-scripts":"npm install",Uu.get(Mu.CONFIG_PARAMS.ROOTPATH))}a(j8,"installAllRootModules");async function Z8(e){await Pu(`npm uninstall ${e}`,Uu.get(Mu.CONFIG_PARAMS.ROOTPATH))}a(Z8,"uninstallRootModule");async function e6(){await Wd(),await Pu(`npm link ${Mu.PACKAGE_ROOT}`,Uu.get(Mu.CONFIG_PARAMS.ROOTPATH))}a(e6,"linkHarperdb");async function Pu(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await MU(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
12
+ `,""))}return n&&!n.includes("Debugger listening")&&Sa.error("Error running NPM command:",e,n),Sa.trace(r,n),r?.replace(`
13
+ `,"")}a(Pu,"runCommand");async function t6(e){Sa.info(`starting installModules for request: ${e}`);let t=BU(e);if(t)throw ma(t,t.message,pa.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?X8:UU;await Wd(),await vU(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let _=Kd.join(MT,u),l,d=null;try{let{stdout:f,stderr:E}=await MU(s,{cwd:_});l=f?f.replace(`
14
14
  `,""):null,d=E?E.replace(`
15
- `,""):null}catch(f){f.stderr?i[u].npm_error=LU(f.stderr):i[u].npm_error=f.message;continue}try{i[u].npm_output=JSON.parse(l)}catch{i[u].npm_output=l}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return ma.info(`finished installModules with response ${i}`),i}a(j8,"installModules");function LU(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
16
- `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(LU,"parseNPMStdErr");async function Z8(e){ma.info(`starting auditModules for request: ${e}`);let t=UU(e);if(t)throw Ea(t,t.message,ha.BAD_REQUEST);let{projects:r}=e;await Wd(),await MU(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Kd.join(MT,o);n[o]={npm_output:null,npm_error:null};try{let u=await Lu("npm audit --json",c);n[o].npm_output=JSON.parse(u)}catch(u){n[o].npm_error=LU(u.stderr)}}return ma.info(`finished auditModules with response ${n}`),n}a(Z8,"auditModules");async function Wd(){try{return await Lu("npm -v"),!0}catch{throw Ea(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",ha.BAD_REQUEST,void 0,void 0,!0)}}a(Wd,"checkNPMInstalled");async function MU(e){if(!Array.isArray(e)||e.length===0)throw Ea(new Error,"projects argument must be an array with at least 1 element",ha.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=Kd.join(MT,i.toString());if(!await IU.pathExists(o)){t.push(i);continue}let u=Kd.join(o,"package.json");await IU.pathExists(u)||r.push(i)}if(t.length>0)throw Ea(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,ha.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Ea(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,ha.BAD_REQUEST,void 0,void 0,!0)}a(MU,"checkProjectPaths");function UU(e){let t=Yd.object({projects:Yd.array().min(1).items(Yd.string()).required(),dry_run:Yd.boolean().default(!1)});return W8.validateBySchema(e,t)}a(UU,"modulesValidator")});var PT=g((Ife,FU)=>{"use strict";var pa=require("fs-extra"),UT=require("path"),zd=Y(),vU=J(),Jd=M(),xU=Z(),e6=wr();FU.exports=t6;async function t6(){let e=r6(),t=xU.get(Jd.CONFIG_PARAMS.ROOTPATH),r=UT.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Jd.PACKAGE_ROOT}},s=UT.join(t,"node_modules");await pa.ensureDir(s);let i,o=!0,c=!1;try{i=await pa.readJson(r)}catch(u){if(vU.isEmptyOrZeroLength(e))return;if(u.code!==Jd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!vU.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await BU(_);n.dependencies[u]=l+_}if(!o){zd.notify("Installing components"),await HU(r,n,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await BU(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)n.dependencies[u]===void 0&&(zd.notify("Removing component",u),c=!0);c&&(zd.notify("Updating components."),await HU(r,n,i))}a(t6,"installComponents");function r6(){let e=e6.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(r6,"getComponentsConfig");async function BU(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":UT.extname(e)||await pa.pathExists(e)?"file:":"github:"}a(BU,"getPkgPrefix");async function HU(e,t,r){zd.trace("npm installing components package.json",t),await pa.writeFile(e,JSON.stringify(t,null," "));try{await Qd().installAllRootModules(xU.get(Jd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await pa.writeFile(e,JSON.stringify(r,null," ")):await pa.unlink(e),n}}a(HU,"installPackages")});var HT=g((Lfe,VU)=>{"use strict";var qe=require("fs-extra"),vT=require("fast-glob"),ge=require("path"),GU=require("tar-fs"),Dfe=require("uuid").v4,BT=require("normalize-path"),jn=wU(),At=Y(),Ye=M(),Et=Z(),Mu=wr(),n6=J(),{PACKAGE_ROOT:s6}=M(),{handleHDBError:Lt,hdb_errors:i6}=ee(),{basename:o6}=require("path"),a6=PT(),kU=Z(),c6=M(),{Readable:u6}=require("stream"),{isMainThread:l6}=require("worker_threads"),{HDB_ERROR_MSGS:co,HTTP_STATUS_CODES:Mt}=i6,_6=ge.join(s6,"application-template"),qU=ge.join(Et.get(Ye.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function d6(){At.trace("getting custom api status");let e={};try{e={port:Et.get(Ye.CONFIG_PARAMS.HTTP_PORT),directory:Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Lt(new Error,co.FUNCTION_STATUS,Mt.INTERNAL_SERVER_ERROR,At.ERR,t)}return e}a(d6,"customFunctionsStatus");function f6(){At.trace("getting custom api endpoints");let e={},t=Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT);try{vT.sync(BT(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:vT.sync(BT(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:vT.sync(BT(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Lt(new Error,co.GET_FUNCTIONS,Mt.INTERNAL_SERVER_ERROR,At.ERR,r)}return e}a(f6,"getCustomFunctions");function E6(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=jn.getDropCustomFunctionValidator(e);if(t)throw Lt(t,t.message,Mt.BAD_REQUEST);At.trace("getting custom api endpoint file content");let r=Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=ge.join(r,n,s,i+".js");try{return qe.readFileSync(o,{encoding:"utf8"})}catch(c){throw Lt(new Error,co.GET_FUNCTION,Mt.INTERNAL_SERVER_ERROR,At.ERR,c)}}a(E6,"getCustomFunction");function h6(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=jn.setCustomFunctionValidator(e);if(t)throw Lt(t,t.message,Mt.BAD_REQUEST);At.trace("setting custom function file content");let r=Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return qe.outputFileSync(ge.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Lt(new Error,co.SET_FUNCTION,Mt.INTERNAL_SERVER_ERROR,At.ERR,c)}}a(h6,"setCustomFunction");function m6(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=jn.getDropCustomFunctionValidator(e);if(t)throw Lt(t,t.message,Mt.BAD_REQUEST);At.trace("dropping custom function file");let r=Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return qe.unlinkSync(ge.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Lt(new Error,co.DROP_FUNCTION,Mt.INTERNAL_SERVER_ERROR,At.ERR,o)}}a(m6,"dropCustomFunction");function p6(e){e.project&&(e.project=ge.parse(e.project).name);let t=jn.addComponentValidator(e);if(t)throw Lt(t,t.message,Mt.BAD_REQUEST);At.trace("adding component");let r=Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=ge.join(r,n);return qe.mkdirSync(s,{recursive:!0}),qe.copySync(_6,s),`Successfully added project: ${n}`}catch(s){throw Lt(new Error,co.ADD_FUNCTION,Mt.INTERNAL_SERVER_ERROR,At.ERR,s)}}a(p6,"addComponent");function S6(e){e.project&&(e.project=ge.parse(e.project).name);let t=jn.dropCustomFunctionProjectValidator(e);if(t)throw Lt(t,t.message,Mt.BAD_REQUEST);At.trace("dropping custom function project");let r=Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Et.get(Ye.CONFIG_PARAMS.APPS);if(!n6.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return Mu.updateConfigValue(Ye.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=ge.join(r,n);return qe.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Lt(new Error,co.DROP_FUNCTION_PROJECT,Mt.INTERNAL_SERVER_ERROR,At.ERR,i)}}a(S6,"dropCustomFunctionProject");async function T6(e){e.project&&(e.project=ge.parse(e.project).name);let t=jn.packageComponentValidator(e);if(t)throw Lt(t,t.message,Mt.BAD_REQUEST);let r=Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;At.trace("packaging component",n);let s;try{s=await qe.realpath(ge.join(r,n))}catch(u){if(u.code!==Ye.NODE_ERROR_CODES.ENOENT)throw u;try{s=await qe.realpath(ge.join(Et.get(Ye.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===Ye.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await qe.ensureDir(qU);let i=ge.join(qU,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(ge.join(s,"node_modules"))}),GU.pack(s,o).pipe(qe.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=qe.readFileSync(i,{encoding:"base64"});return await qe.remove(i),{project:n,payload:c}}a(T6,"packageComponent");async function g6(e){e.project&&(e.project=ge.parse(e.project).name);let t=jn.deployComponentValidator(e);if(t)throw Lt(t,t.message,Mt.BAD_REQUEST);let r=Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(At.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=ge.join(r,n),i="file:"+o,await qe.ensureDir(o);let f=u6.from(Buffer.from(s,"base64"));await new Promise((h,p)=>{f.pipe(GU.extract(o,{finish:h})).on("error",p)});let E=await qe.readdir(o);E.length===1&&E[0]==="package"&&(await qe.copy(ge.join(o,"package"),o),await qe.remove(ge.join(o,"package")))}if(await Mu.addConfig(n,{package:i}),!s){await a6();let f=kU.get(c6.CONFIG_PARAMS.ROOTPATH);o=ge.join(f,"node_modules",n)}if(l6)return;let c=new Map;c.isWorker=!0;let u=(jd(),te(Xd)),_;u.setErrorReporter(f=>_=f);let l=o6(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return At.info("Installed component"),`Successfully deployed: ${n}`}a(g6,"deployComponent");async function R6(){let e=Mu.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let u=await qe.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=ge.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await qe.stat(d),E={name:ge.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(u){return At.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),n=await r(Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{name:Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT).split(ge.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(ge.join(Et.get(Ye.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(jd(),te(Xd)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return n}a(R6,"getComponents");async function A6(e){let t=jn.getComponentFileValidator(e);if(t)throw Lt(t,t.message,Mt.BAD_REQUEST);let n=Mu.getConfigObj()[e.project]||e.project==="harperdb"?ge.join(kU.get(Ye.CONFIG_PARAMS.ROOTPATH),"node_modules"):Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await qe.stat(ge.join(n,e.project,e.file));return{message:await qe.readFile(ge.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Ye.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${ge.join(e.project,e.file)}'`):i}}a(A6,"getComponentFile");async function O6(e){let t=jn.setComponentFileValidator(e);if(t)throw Lt(t,t.message,Mt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=ge.join(Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await qe.ensureFile(n),await qe.outputFile(n,e.payload,r)):await qe.ensureDir(n),"Successfully set component: "+e.file}a(O6,"setComponentFile");async function b6(e){let t=jn.dropComponentFileValidator(e);if(t)throw Lt(t,t.message,Mt.BAD_REQUEST);let r=e.file?ge.join(e.project,e.file):e.project,n=ge.join(Et.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),r);return await qe.pathExists(n)&&await qe.remove(n),Mu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(b6,"dropComponent");VU.exports={customFunctionsStatus:d6,getCustomFunctions:f6,getCustomFunction:E6,setCustomFunction:h6,dropCustomFunction:m6,addComponent:p6,dropCustomFunctionProject:S6,packageComponent:T6,deployComponent:g6,getComponents:R6,getComponentFile:A6,setComponentFile:O6,dropComponent:b6}});var xT=g((Ufe,YU)=>{"use strict";var Zn=require("joi"),$U=Xe();YU.exports={readTransactionLogValidator:N6,deleteTransactionLogsBeforeValidator:y6};function N6(e){let t=Zn.object({schema:Zn.string().required(),table:Zn.string().required(),from:Zn.date().timestamp(),to:Zn.date().timestamp(),limit:Zn.number().min(1)});return $U.validateBySchema(e,t)}a(N6,"readTransactionLogValidator");function y6(e){let t=Zn.object({schema:Zn.string().required(),table:Zn.string().required(),timestamp:Zn.date().timestamp().required()});return $U.validateBySchema(e,t)}a(y6,"deleteTransactionLogsBeforeValidator")});var ef=g((vfe,JU)=>{"use strict";var FT=M(),Zd=Rt(),KU=J(),WU=Z(),QU=hs(),{handleHDBError:Sa,hdb_errors:w6}=ee(),{HTTP_STATUS_CODES:Ta}=w6,{readTransactionLogValidator:I6,deleteTransactionLogsBeforeValidator:C6}=xT(),zU="This operation relies on clustering and cannot run with it disable.",D6="Logs successfully deleted from transaction log.",L6="All logs successfully deleted from transaction log.";JU.exports={readTransactionLog:M6,deleteTransactionLogsBefore:U6};async function*M6(e){let t=I6(e);if(t)throw Sa(t,t.message,Ta.BAD_REQUEST,void 0,void 0,!0);if(!WU.get(FT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Sa(new Error,zU,Ta.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=KU.checkSchemaTableExist(r,n);if(s)throw Sa(new Error,s,Ta.NOT_FOUND,void 0,void 0,!0);let i=QU.createNatsTableStreamName(r,n),o=await Zd.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===FT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(M6,"readTransactionLog");async function U6(e){let t=C6(e);if(t)throw Sa(t,t.message,Ta.BAD_REQUEST,void 0,void 0,!0);if(!WU.get(FT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Sa(new Error,zU,Ta.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=KU.checkSchemaTableExist(r,n);if(i)throw Sa(new Error,i,Ta.NOT_FOUND,void 0,void 0,!0);let o=QU.createNatsTableStreamName(r,n),{jsm:c}=await Zd.getNATSReferences(),u=await Zd.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let l=D6,d,f=new Date(u.state.last_ts).getTime();return s>f?(d=u.state.last_seq+1,l=L6):d=(await Zd.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(U6,"deleteTransactionLogsBefore")});var jU=g((Hfe,XU)=>{"use strict";var qT=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};XU.exports=qT});var eP=g((Ffe,ZU)=>{"use strict";var GT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};ZU.exports=GT});var VT=g((Gfe,rP)=>{"use strict";var tP=jU(),P6=eP(),{HDB_ERROR_MSGS:v6}=Or(),kT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=v6.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 tP(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let u=new P6(c,s[c]);i.push(u)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new tP(r,n,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};rP.exports=kT});var sf=g((Vfe,SP)=>{"use strict";var $T=jr(),tf=Xr(),an=sd(),vu=vi(),YT=qi(),B6=iS(),H6=UD(),Bu=Zr(),rf=ES(),Ot=Y(),x6=pS(),F6=Rd(),q6=ZS(),G6=Od(),k6=eT(),V6=tT(),$6=sT(),Y6=oT(),KT=uT(),bs=J(),K6=DM(),WT=ET(),iP=Hd(),on=M(),oP=lU(),W6=oa(),aP=lu(),cP=(Vd(),te(wu)),uP=wr(),xr=HT(),Q6=require("alasql"),lP=ef(),_P=Qd(),dP=VT(),{handleHDBError:fr,hdb_errors:fP}=ee(),{HDB_ERROR_MSGS:qt,HTTP_STATUS_CODES:Uu}=fP,G=new Map,EP="delete",li="insert",Ns="read",uo="update",Pu="describe",nP=vu.describeSchema.name,sP=vu.describeTable.name,hP={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},z6="catchup",J6="handleGetJob",X6="handleGetJobsByStartDate",nf={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},j6=[an.createTable.name,an.createAttribute.name,an.dropTable.name,an.dropAttribute.name],mP={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},K=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};G.set($T.insert.name,new K(!1,[li]));G.set($T.update.name,new K(!1,[uo]));G.set($T.upsert.name,new K(!1,[li,uo]));G.set(tf.searchByConditions.name,new K(!1,[Ns]));G.set(tf.searchByHash.name,new K(!1,[Ns]));G.set(tf.searchByValue.name,new K(!1,[Ns]));G.set(tf.search.name,new K(!1,[Ns]));G.set(an.createSchema.name,new K(!0,[]));G.set(an.createTable.name,new K(!0,[]));G.set(an.createAttribute.name,new K(!1,[li]));G.set(an.dropSchema.name,new K(!0,[]));G.set(an.dropTable.name,new K(!0,[]));G.set(an.dropAttribute.name,new K(!0,[]));G.set(vu.describeSchema.name,new K(!1,[Ns]));G.set(vu.describeTable.name,new K(!1,[Ns]));G.set(YT.deleteRecord.name,new K(!1,[EP]));G.set(Bu.addUser.name,new K(!0,[]));G.set(Bu.alterUser.name,new K(!0,[]));G.set(Bu.dropUser.name,new K(!0,[]));G.set(Bu.listUsersExternal.name,new K(!0,[]));G.set(rf.listRoles.name,new K(!0,[]));G.set(rf.addRole.name,new K(!0,[]));G.set(rf.alterRole.name,new K(!0,[]));G.set(rf.dropRole.name,new K(!0,[]));G.set(x6.name,new K(!0,[]));G.set(F6.name,new K(!0,[]));G.set(q6.name,new K(!0,[]));G.set(G6.name,new K(!0,[]));G.set(k6.name,new K(!0,[]));G.set(V6.name,new K(!0,[]));G.set(KT.setRoutes.name,new K(!0,[]));G.set(KT.getRoutes.name,new K(!0,[]));G.set(KT.deleteRoutes.name,new K(!0,[]));G.set(uP.setConfiguration.name,new K(!0,[]));G.set($6.clusterStatus.name,new K(!0,[]));G.set(Y6.name,new K(!0,[]));G.set(WT.getFingerprint.name,new K(!0,[]));G.set(WT.setLicense.name,new K(!0,[]));G.set(YT.deleteFilesBefore.name,new K(!0,[]));G.set(YT.deleteAuditLogsBefore.name,new K(!0,[]));G.set(iP.restart.name,new K(!0,[]));G.set(iP.restartService.name,new K(!0,[]));G.set(B6.name,new K(!0,[]));G.set(H6.name,new K(!0,[Ns]));G.set(W6.systemInformation.name,new K(!0,[]));G.set(uP.getConfiguration.name,new K(!0,[]));G.set(lP.readTransactionLog.name,new K(!0,[]));G.set(lP.deleteTransactionLogsBefore.name,new K(!0,[]));G.set(_P.installModules.name,new K(!0,[]));G.set(_P.auditModules.name,new K(!0,[]));G.set(aP.createTokens.name,new K(!1,[]));G.set(aP.refreshOperationToken.name,new K(!1,[]));G.set(cP.login.name,new K(!1,[]));G.set(cP.logout.name,new K(!1,[]));G.set(xr.customFunctionsStatus.name,new K(!0,[]));G.set(xr.getCustomFunctions.name,new K(!0,[]));G.set(xr.getComponents.name,new K(!0,[]));G.set(xr.getComponentFile.name,new K(!0,[]));G.set(xr.setComponentFile.name,new K(!0,[]));G.set(xr.dropComponent.name,new K(!0,[]));G.set(xr.getCustomFunction.name,new K(!0,[]));G.set(xr.setCustomFunction.name,new K(!0,[]));G.set(xr.dropCustomFunction.name,new K(!0,[]));G.set(xr.addComponent.name,new K(!0,[]));G.set(xr.dropCustomFunctionProject.name,new K(!0,[]));G.set(xr.packageComponent.name,new K(!0,[]));G.set(xr.deployComponent.name,new K(!0,[]));G.set(WT.getRegistrationInfo.name,new K(!1,[]));G.set(Bu.userInfo.name,new K(!1,[]));G.set(vu.describeAll.name,new K(!1,[]));G.set(J6,new K(!1,[]));G.set(X6,new K(!0,[]));G.set(z6,new K(!0,[]));G.set(nf.CSV_DATA_LOAD,new K(!1,[li,uo]));G.set(nf.CSV_URL_LOAD,new K(!1,[li,uo]));G.set(nf.CSV_FILE_LOAD,new K(!1,[li,uo]));G.set(nf.IMPORT_FROM_S3,new K(!1,[li,uo]));G.set(mP.EXPORT_TO_S3,new K(!0,[]));G.set(mP.EXPORT_LOCAL,new K(!0,[]));G.set(on.VALID_SQL_OPS_ENUM.DELETE,new K(!1,[EP]));G.set(on.VALID_SQL_OPS_ENUM.SELECT,new K(!1,[Ns]));G.set(on.VALID_SQL_OPS_ENUM.INSERT,new K(!1,[li]));G.set(on.VALID_SQL_OPS_ENUM.UPDATE,new K(!1,[uo]));SP.exports={verifyPerms:e9,verifyPermsAst:Z6,verifyBulkLoadAttributePerms:r9};function Z6(e,t,r){if(bs.isEmptyOrZeroLength(e))throw Ot.info("verify_perms_ast has an empty user parameter"),fr(new Error);if(bs.isEmptyOrZeroLength(t))throw Ot.info("verify_perms_ast has an empty user parameter"),fr(new Error);if(bs.isEmptyOrZeroLength(r))throw Ot.info("verify_perms_ast has a null operation parameter"),fr(new Error);try{let n=new dP,s=new K6(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Ot.info("No schemas defined in verifyPermsAst(), will not continue."),fr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&hP[r])throw fr(new Error,qt.DROP_SYSTEM,Uu.FORBIDDEN);if(c&&!u)return null;let _=oP.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof Q6.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=s.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=pP(t,r,o,n);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=s.getAttributesBySchemaTableName(f,d[E]),p=zT(t.role.permission,f,d[E]);QT(h,p,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw fr(n)}}a(Z6,"verifyPermsAst");function e9(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Ot.info("null required parameter in verifyPerms"),fr(new Error,qt.DEFAULT_INVALID_REQUEST,Uu.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new dP;if(bs.isEmptyOrZeroLength(e.hdb_user.role)||bs.isEmptyOrZeroLength(e.hdb_user.role.permission))return Ot.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(qt.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(on.SYSTEM_SCHEMA_NAME)||s===on.SYSTEM_SCHEMA_NAME;if(l&&hP[r])throw fr(new Error,qt.DROP_SYSTEM,Uu.FORBIDDEN);if(u&&!l||_===!0&&(r===an.createSchema.name||r===an.dropSchema.name))return null;if(j6.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=oP.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===nP||r===sP){if(s===on.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(qt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===nP&&(!d[s]||!d[s][Pu]))return c.handleInvalidItem(qt.SCHEMA_NOT_FOUND(s));if(r===sP&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][Pu]))return c.handleInvalidItem(qt.TABLE_NOT_FOUND(s,i))}}let f=pP(e.hdb_user,r,o,c,n);if(f)return f;if(G.get(r)&&G.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&on.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[s].tables[i];S[on.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(A=>A[on.PERMS_CRUD_ENUM.READ]).forEach(A=>{p.push(A.attribute_name)}):p=global.hdb_schema[s][i].attributes.map(T=>T.attribute),e.get_attributes=p)}let E=t9(e),h=zT(e.hdb_user.role.permission,s,i);return QT(E,h,r,i,s,c,n),c.getPermsResponse()}a(e9,"verifyPerms");function pP(e,t,r,n,s){if(bs.arrayHasEmptyValues([e,t,r]))throw Ot.info("hasPermissions has an invalid parameter"),fr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||G.get(t).requires_su))return null;if(!G.get(t))throw Ot.info(`operation ${t} not found.`),fr(new Error,qt.OP_NOT_FOUND(t),Uu.BAD_REQUEST);if(G.get(t)&&G.get(t).requires_su)return Ot.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(qt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Pu]===!1){n.addInvalidItem(qt.SCHEMA_NOT_FOUND(u));continue}}catch{n.addInvalidItem(qt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[Pu]===!1)n.addInvalidItem(qt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=G.get(t).perms;!bs.isEmpty(s)&&E.includes(s)&&(E=[s]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(Ot.info(`Required ${p} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&n.addUnauthorizedTable(u,l,f)}catch(f){let E=qt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw Ot.error(E),Ot.error(f),fr(fP.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(pP,"hasPermissions");function QT(e,t,r,n,s,i,o){if(!e||!t)throw Ot.info("no attributes specified in checkAttributePerms."),fr(new Error);let c=G.get(r).perms;if(!c||c==="")throw Ot.info(`no permissions found for ${r} in checkAttributePerms().`),fr(new Error);if(bs.isEmptyOrZeroLength(t))return Ot.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[Pu]===!1){i.addInvalidItem(qt.ATTR_NOT_FOUND(s,n,l),s,n);continue}if(c)for(let f of c){if(on.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Ns)throw fr(new Error,qt.SYSTEM_TIMESTAMP_PERMS_ERR,Uu.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(qt.ATTR_NOT_FOUND(s,n,l),s,n)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,s,n,u)}a(QT,"checkAttributePerms");function t9(e){let t=new Set;try{if(e.action)return t;if(e.operation===on.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){Ot.info(r)}return t}a(t9,"getRecordAttributes");function zT(e,t,r){let n=new Map;if(bs.isEmpty(e))return Ot.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{Ot.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(zT,"getAttributePermissions");function r9(e,t,r,n,s,i,o){let c=new Set(i),u=zT(e,n,s);QT(c,u,t,s,n,o,r)}a(r9,"verifyBulkLoadAttributePerms")});var af=g((Yfe,OP)=>{"use strict";OP.exports={evaluateSQL:h9,processAST:AP,convertSQLToAST:RP,checkASTPermissions:gP};var n9=jr(),TP=require("util"),s9=TP.callbackify(n9.insert),i9=Xr().search,o9=NC().update,a9=TP.callbackify(o9),c9=wC().convertDelete,_i=require("alasql"),u9=sf(),of=Y(),l9=Y_(),_9=J(),Hu=M(),{hdb_errors:d9,handleHDBError:JT}=ee(),{HTTP_STATUS_CODES:XT}=d9;l9(_i);var f9=403,E9="There was a problem performing this insert. Please check the logs and try again.",jT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function h9(e,t){let r=e.parsed_sql_object;if(!r){r=RP(e.sql);let n,s=r.ast.statements[0];if(s instanceof _i.yy.Insert?n=s.into.databaseid:s instanceof _i.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof _i.yy.Update||s instanceof _i.yy.Delete?n=s.table.databaseid:of.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof _i.yy.Select)&&_9.isEmptyOrZeroLength(n))return t("No schema specified",null)}AP(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(h9,"evaluateSQL");function gP(e,t){let r;try{r=u9.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(gP,"checkASTPermissions");function RP(e){let t=new jT;if(!e)throw JT(new Error,"The 'sql' parameter is missing from the request body",XT.BAD_REQUEST);try{let r=e.trim(),n=_i.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
17
- `);throw n[1]?JT(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,XT.BAD_REQUEST):JT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",XT.BAD_REQUEST)}return t}a(RP,"convertSQLToAST");function AP(e,t,r){try{let n=m9;if(!e.bypass_auth&&!t.permissions_checked){let i=gP(e,t);if(i&&i.length>0)return r(f9,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Hu.VALID_SQL_OPS_ENUM.SELECT:n=i9,s=t.ast.statements[0];break;case Hu.VALID_SQL_OPS_ENUM.INSERT:n=p9;break;case Hu.VALID_SQL_OPS_ENUM.UPDATE:n=a9;break;case Hu.VALID_SQL_OPS_ENUM.DELETE:n=c9;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(AP,"processAST");function m9(e,t){of.info(e),t("unknown sql statement")}a(m9,"nullFunction");function p9({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=S9(i,e.values)}catch(o){return r(o)}s9(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){of.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(p9,"convertInsert");function S9(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]]=_i.compile(`SELECT ${s.toString()} AS [${Hu.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw of.error(r),new Error(E9)}}a(S9,"createDataObjects")});var ZT=g((Wfe,NP)=>{"use strict";var{S3:T9,GetObjectCommand:g9}=require("@aws-sdk/client-s3");NP.exports={getFileStreamFromS3:R9,getS3AuthObj:bP};async function R9(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await bP(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new g9(r))).Body}a(R9,"getFileStreamFromS3");function bP(e,t,r){return new T9({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(bP,"getS3AuthObj")});var cf=g((zfe,PP)=>{"use strict";var tg=Xr(),A9=af(),O9=ZT(),{AsyncParser:b9,Transform:N9}=require("json2csv"),Fu=require("stream"),Fr=J(),eg=require("fs-extra"),y9=require("path"),cn=Y(),{promisify:IP}=require("util"),xu=J(),{handleHDBError:ht,hdb_errors:w9}=ee(),{HDB_ERROR_MSGS:Er,HTTP_STATUS_CODES:mt}=w9,{streamAsJSON:I9}=(yh(),te(ab)),{Upload:C9}=require("@aws-sdk/lib-storage"),yP=["search_by_value","search_by_hash","sql","search_by_conditions"],wP=["json","csv"],CP="json",DP="csv",D9="Successfully exported JSON locally.",L9="Successfully exported CSV locally.",M9=1e3,U9=tg.searchByHash,P9=tg.searchByValue,v9=IP(A9.evaluateSQL),B9=IP(Fu.finished);PP.exports={export_to_s3:q9,export_local:H9,toCsvStream:LP};async function H9(e){cn.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=MP(e);if(!Fr.isEmpty(t))throw cn.error(t),ht(new Error,t,mt.BAD_REQUEST,void 0,void 0,!0);if(Fr.isEmpty(e.path))throw cn.error(Er.MISSING_VALUE("path")),ht(new Error,Er.MISSING_VALUE("path"),mt.BAD_REQUEST,void 0,void 0,!0);let r=(Fr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(y9.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Fr.buildFolderPath(e.path,r);await x9(e.path);let s=await UP(e);return await F9(n,e.format,s)}a(H9,"export_local");async function x9(e){if(cn.trace("in confirmPath"),Fr.isEmptyOrZeroLength(e))throw ht(new Error,`Invalid path: ${e}`,mt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await eg.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,cn.error(n),ht(new Error,n,mt.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw cn.error(r),ht(new Error,r,mt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(x9,"confirmPath");async function F9(e,t,r){if(cn.trace("in saveToLocal"),xu.isEmptyOrZeroLength(e))throw ht(new Error,Er.INVALID_VALUE("file_path"),mt.BAD_REQUEST,void 0,void 0,!0);if(xu.isEmptyOrZeroLength(t))throw ht(new Error,Er.INVALID_VALUE("Source format"),mt.BAD_REQUEST,void 0,void 0,!0);if(xu.isEmpty(r))throw ht(new Error,Er.NOT_FOUND("Data"),mt.BAD_REQUEST,void 0,void 0,!0);if(t===CP){let n=eg.createWriteStream(e);return I9(r).pipe(n),await B9(n),{message:D9,path:e}}else if(t===DP){let n=eg.createWriteStream(e),s=Fu.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(l=>({label:l,value:l})));let c={objectMode:!0};return await new b9(i,c).fromInput(s).toOutput(n).promise(!1),{message:L9,path:e}}throw ht(new Error,Er.INVALID_VALUE("format"),mt.BAD_REQUEST)}a(F9,"saveToLocal");async function q9(e){if(!e.s3||Object.keys(e.s3).length===0)throw ht(new Error,Er.MISSING_VALUE("S3 object"),mt.BAD_REQUEST);if(Fr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw ht(new Error,Er.MISSING_VALUE("aws_access_key_id"),mt.BAD_REQUEST);if(Fr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw ht(new Error,Er.MISSING_VALUE("aws_secret_access_key"),mt.BAD_REQUEST);if(Fr.isEmptyOrZeroLength(e.s3.bucket))throw ht(new Error,Er.MISSING_VALUE("bucket"),mt.BAD_REQUEST);if(Fr.isEmptyOrZeroLength(e.s3.key))throw ht(new Error,Er.MISSING_VALUE("key"),mt.BAD_REQUEST);if(Fr.isEmptyOrZeroLength(e.s3.region))throw ht(new Error,Er.MISSING_VALUE("region"),mt.BAD_REQUEST);let t=MP(e);if(!Fr.isEmpty(t))throw ht(new Error,t,mt.BAD_REQUEST);cn.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await UP(e)}catch(u){throw cn.error(u),u}let n,s=await O9.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Fu.PassThrough;if(e.format===DP){i=e.s3.key+".csv";let u=LP(r,r.getColumns?.());u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===CP){i=e.s3.key+".json";let u=new Fu.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%M9===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw ht(new Error,Er.INVALID_VALUE("format"),mt.BAD_REQUEST);return new C9({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(q9,"export_to_s3");function LP(e,t){let r=Fu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new N9(n,s);return r.pipe(i)}a(LP,"toCsvStream");function MP(e){if(cn.trace("in exportCoreValidation"),Fr.isEmpty(e.format))return"format missing";if(wP.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${wP.join(", ")}`;let t=e.search_operation.operation;if(Fr.isEmpty(t))return"search_operation.operation missing";if(yP.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${yP.join(", ")}`}a(MP,"exportCoreValidation");async function UP(e){cn.trace("in getRecords");let t,r;if(xu.isEmpty(e.search_operation)||xu.isEmptyOrZeroLength(e.search_operation.operation))throw ht(new Error,Er.INVALID_VALUE("Search operation"),mt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=P9;break;case"search_by_hash":t=U9;break;case"search_by_conditions":t=tg.searchByConditions;break;case"sql":t=v9;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,cn.error(r),ht(new Error,r,mt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(UP,"getRecords")});var kP={};Ve(kP,{contentTypes:()=>og,findBestSerializer:()=>lf,getDeserializer:()=>_o,registerContentHandlers:()=>ag,serialize:()=>_f,serializeMessage:()=>ui});function G9(e){try{return e?.[0]===123?ig(e):e}catch{return e}}function ag(e){e.register(V9,{serializers:[{regex:/^application\/json$/,serializer:dc},{regex:/^application\/cbor$/,serializer:function(t){return new lo.EncoderStream(Gu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?uf.Readable.from((0,es.encodeIter)(t,Gu)):(0,es.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,rg.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,es.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,lo.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function lf(e){let r=(e.headers.asObject||e.headers).accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=Ut.get(_);if(E){let h=(E.q||1)*d;h>s&&(n=E,i=E.type||_,s=h,o=f)}}if(!n){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Ut.keys()).join(", "))}};n=Ut.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function _f(e,t,r){let n=BP&&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)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=lf(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[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,ys.createBrotliCompress)({params:{[ys.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?ys.constants.BROTLI_MODE_TEXT:ys.constants.BROTLI_MODE_GENERIC,[ys.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>BP?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,ys.brotliCompress)(s,(c,u)=>{c?o(c):i(u)}))):s}function ui(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return qu(e);let r=t.serialize;if(r)return r(e);let n=lf(t);return r=t.serialize=n.serializer.serialize,r(e)}function $9(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 _o(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Ut.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Ut.get(e)?.deserialize||HP(e,n);return o=>$9(o).then(i)}return e&&Ut.get(e)?.deserialize||HP(e,n)}function HP(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return n=>({contentType:e,data:n.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return ig(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function Y9(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)}}}}}var rg,es,lo,ys,uf,xP,ng,sg,FP,qP,qu,ig,Gu,Ut,og,vP,GP,k9,V9,BP,fa=Oe(()=>{yh();rg=B(cf()),es=require("msgpackr"),lo=require("cbor-x"),ys=require("zlib"),uf=require("stream");Zt();xP=require("../../index"),ng=B(Z()),sg=B(M()),FP=B(require("yaml")),qP=ng.default.get(sg.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,qu=qP?Ci:JSON.stringify,ig=qP?Nh:JSON.parse,Gu={useRecords:!1,useToJSON:!0},Ut=new Map,og=Ut;je.contentTypes=og;(0,xP._assignPackageExport)("contentTypes",og);Ut.set("application/json",{serializeStream:dc,serialize:qu,deserialize:ig,q:.8});vP=new lo.Encoder(Gu);Ut.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new lo.EncoderStream(Gu).end(e)},serialize:vP.encode,deserialize:vP.decode,q:1});Ut.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?uf.Readable.from((0,es.encodeIter)(e,Gu)):(0,es.pack)(e)},serialize:es.pack,deserialize:es.unpack,q:.9});Ut.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,rg.toCsvStream)(e,e?.getColumns?.())},q:.1});Ut.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Ut.set("text/yaml",{serialize(e){return FP.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Ut.set("text/event-stream",{serializeStream:function(e){return uf.Readable.from(Y9(e,this.serialize))},serialize: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+`
18
- `),e.data){let r=e.data;typeof r=="object"&&(r=qu(r)),t+="data: "+r+`
15
+ `,""):null}catch(f){f.stderr?i[u].npm_error=PU(f.stderr):i[u].npm_error=f.message;continue}try{i[u].npm_output=JSON.parse(l)}catch{i[u].npm_output=l}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return Sa.info(`finished installModules with response ${i}`),i}a(t6,"installModules");function PU(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
16
+ `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(PU,"parseNPMStdErr");async function r6(e){Sa.info(`starting auditModules for request: ${e}`);let t=BU(e);if(t)throw ma(t,t.message,pa.BAD_REQUEST);let{projects:r}=e;await Wd(),await vU(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Kd.join(MT,o);n[o]={npm_output:null,npm_error:null};try{let u=await Pu("npm audit --json",c);n[o].npm_output=JSON.parse(u)}catch(u){n[o].npm_error=PU(u.stderr)}}return Sa.info(`finished auditModules with response ${n}`),n}a(r6,"auditModules");async function Wd(){try{return await Pu("npm -v"),!0}catch{throw ma(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",pa.BAD_REQUEST,void 0,void 0,!0)}}a(Wd,"checkNPMInstalled");async function vU(e){if(!Array.isArray(e)||e.length===0)throw ma(new Error,"projects argument must be an array with at least 1 element",pa.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=Kd.join(MT,i.toString());if(!await LU.pathExists(o)){t.push(i);continue}let u=Kd.join(o,"package.json");await LU.pathExists(u)||r.push(i)}if(t.length>0)throw ma(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,pa.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw ma(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,pa.BAD_REQUEST,void 0,void 0,!0)}a(vU,"checkProjectPaths");function BU(e){let t=Yd.object({projects:Yd.array().min(1).items(Yd.string()).required(),dry_run:Yd.boolean().default(!1)});return J8.validateBySchema(e,t)}a(BU,"modulesValidator")});var PT=T((Ife,kU)=>{"use strict";var Ta=require("fs-extra"),UT=require("path"),zd=W(),xU=J(),Jd=U(),GU=Z(),n6=Ir();kU.exports=s6;async function s6(){let e=i6(),t=GU.get(Jd.CONFIG_PARAMS.ROOTPATH),r=UT.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Jd.PACKAGE_ROOT}},s=UT.join(t,"node_modules");await Ta.ensureDir(s);let i,o=!0,c=!1;try{i=await Ta.readJson(r)}catch(u){if(xU.isEmptyOrZeroLength(e))return;if(u.code!==Jd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!xU.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await FU(_);n.dependencies[u]=l+_}if(!o){zd.notify("Installing components"),await qU(r,n,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await FU(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)n.dependencies[u]===void 0&&(zd.notify("Removing component",u),c=!0);c&&(zd.notify("Updating components."),await qU(r,n,i))}a(s6,"installComponents");function i6(){let e=n6.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(i6,"getComponentsConfig");async function FU(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":UT.extname(e)||await Ta.pathExists(e)?"file:":"github:"}a(FU,"getPkgPrefix");async function qU(e,t,r){zd.trace("npm installing components package.json",t),await Ta.writeFile(e,JSON.stringify(t,null," "));try{await Qd().installAllRootModules(GU.get(Jd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await Ta.writeFile(e,JSON.stringify(r,null," ")):await Ta.unlink(e),n}}a(qU,"installPackages")});var HT=T((Lfe,KU)=>{"use strict";var qe=require("fs-extra"),vT=require("fast-glob"),Re=require("path"),$U=require("tar-fs"),Dfe=require("uuid").v4,BT=require("normalize-path"),es=DU(),Ot=W(),$e=U(),Et=Z(),vu=Ir(),o6=J(),{PACKAGE_ROOT:a6}=U(),{handleHDBError:Mt,hdb_errors:c6}=ee(),{basename:u6}=require("path"),l6=PT(),YU=Z(),_6=U(),{Readable:d6}=require("stream"),{isMainThread:f6}=require("worker_threads"),{HDB_ERROR_MSGS:lo,HTTP_STATUS_CODES:Ut}=c6,E6=Re.join(a6,"application-template"),VU=Re.join(Et.get($e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function h6(){Ot.trace("getting custom api status");let e={};try{e={port:Et.get($e.CONFIG_PARAMS.HTTP_PORT),directory:Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Mt(new Error,lo.FUNCTION_STATUS,Ut.INTERNAL_SERVER_ERROR,Ot.ERR,t)}return e}a(h6,"customFunctionsStatus");function m6(){Ot.trace("getting custom api endpoints");let e={},t=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT);try{vT.sync(BT(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:vT.sync(BT(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:vT.sync(BT(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Mt(new Error,lo.GET_FUNCTIONS,Ut.INTERNAL_SERVER_ERROR,Ot.ERR,r)}return e}a(m6,"getCustomFunctions");function p6(e){e.project&&(e.project=Re.parse(e.project).name),e.file&&(e.file=Re.parse(e.file).name);let t=es.getDropCustomFunctionValidator(e);if(t)throw Mt(t,t.message,Ut.BAD_REQUEST);Ot.trace("getting custom api endpoint file content");let r=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=Re.join(r,n,s,i+".js");try{return qe.readFileSync(o,{encoding:"utf8"})}catch(c){throw Mt(new Error,lo.GET_FUNCTION,Ut.INTERNAL_SERVER_ERROR,Ot.ERR,c)}}a(p6,"getCustomFunction");function S6(e){e.project&&(e.project=Re.parse(e.project).name),e.file&&(e.file=Re.parse(e.file).name);let t=es.setCustomFunctionValidator(e);if(t)throw Mt(t,t.message,Ut.BAD_REQUEST);Ot.trace("setting custom function file content");let r=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return qe.outputFileSync(Re.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Mt(new Error,lo.SET_FUNCTION,Ut.INTERNAL_SERVER_ERROR,Ot.ERR,c)}}a(S6,"setCustomFunction");function T6(e){e.project&&(e.project=Re.parse(e.project).name),e.file&&(e.file=Re.parse(e.file).name);let t=es.getDropCustomFunctionValidator(e);if(t)throw Mt(t,t.message,Ut.BAD_REQUEST);Ot.trace("dropping custom function file");let r=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return qe.unlinkSync(Re.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Mt(new Error,lo.DROP_FUNCTION,Ut.INTERNAL_SERVER_ERROR,Ot.ERR,o)}}a(T6,"dropCustomFunction");function g6(e){e.project&&(e.project=Re.parse(e.project).name);let t=es.addComponentValidator(e);if(t)throw Mt(t,t.message,Ut.BAD_REQUEST);Ot.trace("adding component");let r=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Re.join(r,n);return qe.mkdirSync(s,{recursive:!0}),qe.copySync(E6,s),`Successfully added project: ${n}`}catch(s){throw Mt(new Error,lo.ADD_FUNCTION,Ut.INTERNAL_SERVER_ERROR,Ot.ERR,s)}}a(g6,"addComponent");function R6(e){e.project&&(e.project=Re.parse(e.project).name);let t=es.dropCustomFunctionProjectValidator(e);if(t)throw Mt(t,t.message,Ut.BAD_REQUEST);Ot.trace("dropping custom function project");let r=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Et.get($e.CONFIG_PARAMS.APPS);if(!o6.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return vu.updateConfigValue($e.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Re.join(r,n);return qe.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Mt(new Error,lo.DROP_FUNCTION_PROJECT,Ut.INTERNAL_SERVER_ERROR,Ot.ERR,i)}}a(R6,"dropCustomFunctionProject");async function A6(e){e.project&&(e.project=Re.parse(e.project).name);let t=es.packageComponentValidator(e);if(t)throw Mt(t,t.message,Ut.BAD_REQUEST);let r=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Ot.trace("packaging component",n);let s;try{s=await qe.realpath(Re.join(r,n))}catch(u){if(u.code!==$e.NODE_ERROR_CODES.ENOENT)throw u;try{s=await qe.realpath(Re.join(Et.get($e.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===$e.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await qe.ensureDir(VU);let i=Re.join(VU,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(Re.join(s,"node_modules"))}),$U.pack(s,o).pipe(qe.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=qe.readFileSync(i,{encoding:"base64"});return await qe.remove(i),{project:n,payload:c}}a(A6,"packageComponent");async function O6(e){e.project&&(e.project=Re.parse(e.project).name);let t=es.deployComponentValidator(e);if(t)throw Mt(t,t.message,Ut.BAD_REQUEST);let r=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(Ot.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=Re.join(r,n),i="file:"+o,await qe.ensureDir(o);let f=d6.from(Buffer.from(s,"base64"));await new Promise((h,p)=>{f.pipe($U.extract(o,{finish:h})).on("error",p)});let E=await qe.readdir(o);E.length===1&&E[0]==="package"&&(await qe.copy(Re.join(o,"package"),o),await qe.remove(Re.join(o,"package")))}if(await vu.addConfig(n,{package:i}),!s){await l6();let f=YU.get(_6.CONFIG_PARAMS.ROOTPATH);o=Re.join(f,"node_modules",n)}if(f6)return;let c=new Map;c.isWorker=!0;let u=(jd(),te(Xd)),_;u.setErrorReporter(f=>_=f);let l=u6(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return Ot.info("Installed component"),`Successfully deployed: ${n}`}a(O6,"deployComponent");async function b6(){let e=vu.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let u=await qe.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=Re.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await qe.stat(d),E={name:Re.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(u){return Ot.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),n=await r(Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{name:Et.get($e.CONFIG_PARAMS.COMPONENTSROOT).split(Re.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(Re.join(Et.get($e.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(jd(),te(Xd)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return n}a(b6,"getComponents");async function y6(e){let t=es.getComponentFileValidator(e);if(t)throw Mt(t,t.message,Ut.BAD_REQUEST);let n=vu.getConfigObj()[e.project]||e.project==="harperdb"?Re.join(YU.get($e.CONFIG_PARAMS.ROOTPATH),"node_modules"):Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await qe.stat(Re.join(n,e.project,e.file));return{message:await qe.readFile(Re.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===$e.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Re.join(e.project,e.file)}'`):i}}a(y6,"getComponentFile");async function N6(e){let t=es.setComponentFileValidator(e);if(t)throw Mt(t,t.message,Ut.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Re.join(Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await qe.ensureFile(n),await qe.outputFile(n,e.payload,r)):await qe.ensureDir(n),"Successfully set component: "+e.file}a(N6,"setComponentFile");async function w6(e){let t=es.dropComponentFileValidator(e);if(t)throw Mt(t,t.message,Ut.BAD_REQUEST);let r=e.file?Re.join(e.project,e.file):e.project,n=Re.join(Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),r);return await qe.pathExists(n)&&await qe.remove(n),vu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(w6,"dropComponent");KU.exports={customFunctionsStatus:h6,getCustomFunctions:m6,getCustomFunction:p6,setCustomFunction:S6,dropCustomFunction:T6,addComponent:g6,dropCustomFunctionProject:R6,packageComponent:A6,deployComponent:O6,getComponents:b6,getComponentFile:y6,setComponentFile:N6,dropComponent:w6}});var xT=T((Ufe,QU)=>{"use strict";var ts=require("joi"),WU=Xe();QU.exports={readTransactionLogValidator:I6,deleteTransactionLogsBeforeValidator:C6};function I6(e){let t=ts.object({schema:ts.string().required(),table:ts.string().required(),from:ts.date().timestamp(),to:ts.date().timestamp(),limit:ts.number().min(1)});return WU.validateBySchema(e,t)}a(I6,"readTransactionLogValidator");function C6(e){let t=ts.object({schema:ts.string().required(),table:ts.string().required(),timestamp:ts.date().timestamp().required()});return WU.validateBySchema(e,t)}a(C6,"deleteTransactionLogsBeforeValidator")});var ef=T((vfe,ZU)=>{"use strict";var FT=U(),Zd=At(),zU=J(),JU=Z(),XU=ps(),{handleHDBError:ga,hdb_errors:D6}=ee(),{HTTP_STATUS_CODES:Ra}=D6,{readTransactionLogValidator:L6,deleteTransactionLogsBeforeValidator:M6}=xT(),jU="This operation relies on clustering and cannot run with it disable.",U6="Logs successfully deleted from transaction log.",P6="All logs successfully deleted from transaction log.";ZU.exports={readTransactionLog:v6,deleteTransactionLogsBefore:B6};async function*v6(e){let t=L6(e);if(t)throw ga(t,t.message,Ra.BAD_REQUEST,void 0,void 0,!0);if(!JU.get(FT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ga(new Error,jU,Ra.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=zU.checkSchemaTableExist(r,n);if(s)throw ga(new Error,s,Ra.NOT_FOUND,void 0,void 0,!0);let i=XU.createNatsTableStreamName(r,n),o=await Zd.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===FT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(v6,"readTransactionLog");async function B6(e){let t=M6(e);if(t)throw ga(t,t.message,Ra.BAD_REQUEST,void 0,void 0,!0);if(!JU.get(FT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ga(new Error,jU,Ra.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=zU.checkSchemaTableExist(r,n);if(i)throw ga(new Error,i,Ra.NOT_FOUND,void 0,void 0,!0);let o=XU.createNatsTableStreamName(r,n),{jsm:c}=await Zd.getNATSReferences(),u=await Zd.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let l=U6,d,f=new Date(u.state.last_ts).getTime();return s>f?(d=u.state.last_seq+1,l=P6):d=(await Zd.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(B6,"deleteTransactionLogsBefore")});var tP=T((Hfe,eP)=>{"use strict";var qT=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};eP.exports=qT});var nP=T((Ffe,rP)=>{"use strict";var GT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};rP.exports=GT});var VT=T((Gfe,iP)=>{"use strict";var sP=tP(),H6=nP(),{HDB_ERROR_MSGS:x6}=br(),kT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=x6.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 sP(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let u=new H6(c,s[c]);i.push(u)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new sP(r,n,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};iP.exports=kT});var sf=T((Vfe,RP)=>{"use strict";var $T=Zr(),tf=jr(),cn=sd(),xu=Hi(),YT=ki(),F6=iS(),q6=BD(),Fu=en(),rf=ES(),bt=W(),G6=pS(),k6=Rd(),V6=ZS(),$6=Od(),Y6=eT(),K6=tT(),W6=sT(),Q6=oT(),KT=uT(),Ns=J(),z6=UM(),WT=ET(),cP=Hd(),an=U(),uP=fU(),J6=ca(),lP=fu(),_P=(Vd(),te(Du)),dP=Ir(),Fr=HT(),X6=require("alasql"),fP=ef(),EP=Qd(),hP=VT(),{handleHDBError:dr,hdb_errors:mP}=ee(),{HDB_ERROR_MSGS:Ft,HTTP_STATUS_CODES:Bu}=mP,k=new Map,pP="delete",di="insert",ws="read",_o="update",Hu="describe",oP=xu.describeSchema.name,aP=xu.describeTable.name,SP={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},j6="catchup",Z6="handleGetJob",e9="handleGetJobsByStartDate",nf={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},t9=[cn.createTable.name,cn.createAttribute.name,cn.dropTable.name,cn.dropAttribute.name],TP={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},Q=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};k.set($T.insert.name,new Q(!1,[di]));k.set($T.update.name,new Q(!1,[_o]));k.set($T.upsert.name,new Q(!1,[di,_o]));k.set(tf.searchByConditions.name,new Q(!1,[ws]));k.set(tf.searchByHash.name,new Q(!1,[ws]));k.set(tf.searchByValue.name,new Q(!1,[ws]));k.set(tf.search.name,new Q(!1,[ws]));k.set(cn.createSchema.name,new Q(!0,[]));k.set(cn.createTable.name,new Q(!0,[]));k.set(cn.createAttribute.name,new Q(!1,[di]));k.set(cn.dropSchema.name,new Q(!0,[]));k.set(cn.dropTable.name,new Q(!0,[]));k.set(cn.dropAttribute.name,new Q(!0,[]));k.set(xu.describeSchema.name,new Q(!1,[ws]));k.set(xu.describeTable.name,new Q(!1,[ws]));k.set(YT.deleteRecord.name,new Q(!1,[pP]));k.set(Fu.addUser.name,new Q(!0,[]));k.set(Fu.alterUser.name,new Q(!0,[]));k.set(Fu.dropUser.name,new Q(!0,[]));k.set(Fu.listUsersExternal.name,new Q(!0,[]));k.set(rf.listRoles.name,new Q(!0,[]));k.set(rf.addRole.name,new Q(!0,[]));k.set(rf.alterRole.name,new Q(!0,[]));k.set(rf.dropRole.name,new Q(!0,[]));k.set(G6.name,new Q(!0,[]));k.set(k6.name,new Q(!0,[]));k.set(V6.name,new Q(!0,[]));k.set($6.name,new Q(!0,[]));k.set(Y6.name,new Q(!0,[]));k.set(K6.name,new Q(!0,[]));k.set(KT.setRoutes.name,new Q(!0,[]));k.set(KT.getRoutes.name,new Q(!0,[]));k.set(KT.deleteRoutes.name,new Q(!0,[]));k.set(dP.setConfiguration.name,new Q(!0,[]));k.set(W6.clusterStatus.name,new Q(!0,[]));k.set(Q6.name,new Q(!0,[]));k.set(WT.getFingerprint.name,new Q(!0,[]));k.set(WT.setLicense.name,new Q(!0,[]));k.set(YT.deleteFilesBefore.name,new Q(!0,[]));k.set(YT.deleteAuditLogsBefore.name,new Q(!0,[]));k.set(cP.restart.name,new Q(!0,[]));k.set(cP.restartService.name,new Q(!0,[]));k.set(F6.name,new Q(!0,[]));k.set(q6.name,new Q(!0,[ws]));k.set(J6.systemInformation.name,new Q(!0,[]));k.set(dP.getConfiguration.name,new Q(!0,[]));k.set(fP.readTransactionLog.name,new Q(!0,[]));k.set(fP.deleteTransactionLogsBefore.name,new Q(!0,[]));k.set(EP.installModules.name,new Q(!0,[]));k.set(EP.auditModules.name,new Q(!0,[]));k.set(lP.createTokens.name,new Q(!1,[]));k.set(lP.refreshOperationToken.name,new Q(!1,[]));k.set(_P.login.name,new Q(!1,[]));k.set(_P.logout.name,new Q(!1,[]));k.set(Fr.customFunctionsStatus.name,new Q(!0,[]));k.set(Fr.getCustomFunctions.name,new Q(!0,[]));k.set(Fr.getComponents.name,new Q(!0,[]));k.set(Fr.getComponentFile.name,new Q(!0,[]));k.set(Fr.setComponentFile.name,new Q(!0,[]));k.set(Fr.dropComponent.name,new Q(!0,[]));k.set(Fr.getCustomFunction.name,new Q(!0,[]));k.set(Fr.setCustomFunction.name,new Q(!0,[]));k.set(Fr.dropCustomFunction.name,new Q(!0,[]));k.set(Fr.addComponent.name,new Q(!0,[]));k.set(Fr.dropCustomFunctionProject.name,new Q(!0,[]));k.set(Fr.packageComponent.name,new Q(!0,[]));k.set(Fr.deployComponent.name,new Q(!0,[]));k.set(WT.getRegistrationInfo.name,new Q(!1,[]));k.set(Fu.userInfo.name,new Q(!1,[]));k.set(xu.describeAll.name,new Q(!1,[]));k.set(Z6,new Q(!1,[]));k.set(e9,new Q(!0,[]));k.set(j6,new Q(!0,[]));k.set(nf.CSV_DATA_LOAD,new Q(!1,[di,_o]));k.set(nf.CSV_URL_LOAD,new Q(!1,[di,_o]));k.set(nf.CSV_FILE_LOAD,new Q(!1,[di,_o]));k.set(nf.IMPORT_FROM_S3,new Q(!1,[di,_o]));k.set(TP.EXPORT_TO_S3,new Q(!0,[]));k.set(TP.EXPORT_LOCAL,new Q(!0,[]));k.set(an.VALID_SQL_OPS_ENUM.DELETE,new Q(!1,[pP]));k.set(an.VALID_SQL_OPS_ENUM.SELECT,new Q(!1,[ws]));k.set(an.VALID_SQL_OPS_ENUM.INSERT,new Q(!1,[di]));k.set(an.VALID_SQL_OPS_ENUM.UPDATE,new Q(!1,[_o]));RP.exports={verifyPerms:n9,verifyPermsAst:r9,verifyBulkLoadAttributePerms:i9};function r9(e,t,r){if(Ns.isEmptyOrZeroLength(e))throw bt.info("verify_perms_ast has an empty user parameter"),dr(new Error);if(Ns.isEmptyOrZeroLength(t))throw bt.info("verify_perms_ast has an empty user parameter"),dr(new Error);if(Ns.isEmptyOrZeroLength(r))throw bt.info("verify_perms_ast has a null operation parameter"),dr(new Error);try{let n=new hP,s=new z6(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw bt.info("No schemas defined in verifyPermsAst(), will not continue."),dr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&SP[r])throw dr(new Error,Ft.DROP_SYSTEM,Bu.FORBIDDEN);if(c&&!u)return null;let _=uP.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof X6.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=s.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=gP(t,r,o,n);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=s.getAttributesBySchemaTableName(f,d[E]),p=zT(t.role.permission,f,d[E]);QT(h,p,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw dr(n)}}a(r9,"verifyPermsAst");function n9(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw bt.info("null required parameter in verifyPerms"),dr(new Error,Ft.DEFAULT_INVALID_REQUEST,Bu.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new hP;if(Ns.isEmptyOrZeroLength(e.hdb_user.role)||Ns.isEmptyOrZeroLength(e.hdb_user.role.permission))return bt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ft.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(an.SYSTEM_SCHEMA_NAME)||s===an.SYSTEM_SCHEMA_NAME;if(l&&SP[r])throw dr(new Error,Ft.DROP_SYSTEM,Bu.FORBIDDEN);if(u&&!l||_===!0&&(r===cn.createSchema.name||r===cn.dropSchema.name))return null;if(t9.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=uP.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===oP||r===aP){if(s===an.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ft.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===oP&&(!d[s]||!d[s][Hu]))return c.handleInvalidItem(Ft.SCHEMA_NOT_FOUND(s));if(r===aP&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][Hu]))return c.handleInvalidItem(Ft.TABLE_NOT_FOUND(s,i))}}let f=gP(e.hdb_user,r,o,c,n);if(f)return f;if(k.get(r)&&k.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&an.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[s].tables[i];S[an.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(g=>g[an.PERMS_CRUD_ENUM.READ]).forEach(g=>{p.push(g.attribute_name)}):p=global.hdb_schema[s][i].attributes.map(O=>O.attribute),e.get_attributes=p)}let E=s9(e),h=zT(e.hdb_user.role.permission,s,i);return QT(E,h,r,i,s,c,n),c.getPermsResponse()}a(n9,"verifyPerms");function gP(e,t,r,n,s){if(Ns.arrayHasEmptyValues([e,t,r]))throw bt.info("hasPermissions has an invalid parameter"),dr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||k.get(t).requires_su))return null;if(!k.get(t))throw bt.info(`operation ${t} not found.`),dr(new Error,Ft.OP_NOT_FOUND(t),Bu.BAD_REQUEST);if(k.get(t)&&k.get(t).requires_su)return bt.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Ft.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Hu]===!1){n.addInvalidItem(Ft.SCHEMA_NOT_FOUND(u));continue}}catch{n.addInvalidItem(Ft.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[Hu]===!1)n.addInvalidItem(Ft.TABLE_NOT_FOUND(u,l));else try{let f=[],E=k.get(t).perms;!Ns.isEmpty(s)&&E.includes(s)&&(E=[s]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(bt.info(`Required ${p} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&n.addUnauthorizedTable(u,l,f)}catch(f){let E=Ft.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw bt.error(E),bt.error(f),dr(mP.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(gP,"hasPermissions");function QT(e,t,r,n,s,i,o){if(!e||!t)throw bt.info("no attributes specified in checkAttributePerms."),dr(new Error);let c=k.get(r).perms;if(!c||c==="")throw bt.info(`no permissions found for ${r} in checkAttributePerms().`),dr(new Error);if(Ns.isEmptyOrZeroLength(t))return bt.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[Hu]===!1){i.addInvalidItem(Ft.ATTR_NOT_FOUND(s,n,l),s,n);continue}if(c)for(let f of c){if(an.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==ws)throw dr(new Error,Ft.SYSTEM_TIMESTAMP_PERMS_ERR,Bu.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Ft.ATTR_NOT_FOUND(s,n,l),s,n)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,s,n,u)}a(QT,"checkAttributePerms");function s9(e){let t=new Set;try{if(e.action)return t;if(e.operation===an.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){bt.info(r)}return t}a(s9,"getRecordAttributes");function zT(e,t,r){let n=new Map;if(Ns.isEmpty(e))return bt.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{bt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(zT,"getAttributePermissions");function i9(e,t,r,n,s,i,o){let c=new Set(i),u=zT(e,n,s);QT(c,u,t,s,n,o,r)}a(i9,"verifyBulkLoadAttributePerms")});var af=T((Yfe,NP)=>{"use strict";NP.exports={evaluateSQL:S9,processAST:yP,convertSQLToAST:bP,checkASTPermissions:OP};var o9=Zr(),AP=require("util"),a9=AP.callbackify(o9.insert),c9=jr().search,u9=IC().update,l9=AP.callbackify(u9),_9=DC().convertDelete,fi=require("alasql"),d9=sf(),of=W(),f9=Y_(),E9=J(),qu=U(),{hdb_errors:h9,handleHDBError:JT}=ee(),{HTTP_STATUS_CODES:XT}=h9;f9(fi);var m9=403,p9="There was a problem performing this insert. Please check the logs and try again.",jT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function S9(e,t){let r=e.parsed_sql_object;if(!r){r=bP(e.sql);let n,s=r.ast.statements[0];if(s instanceof fi.yy.Insert?n=s.into.databaseid:s instanceof fi.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof fi.yy.Update||s instanceof fi.yy.Delete?n=s.table.databaseid:of.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof fi.yy.Select)&&E9.isEmptyOrZeroLength(n))return t("No schema specified",null)}yP(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(S9,"evaluateSQL");function OP(e,t){let r;try{r=d9.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(OP,"checkASTPermissions");function bP(e){let t=new jT;if(!e)throw JT(new Error,"The 'sql' parameter is missing from the request body",XT.BAD_REQUEST);try{let r=e.trim(),n=fi.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
17
+ `);throw n[1]?JT(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,XT.BAD_REQUEST):JT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",XT.BAD_REQUEST)}return t}a(bP,"convertSQLToAST");function yP(e,t,r){try{let n=T9;if(!e.bypass_auth&&!t.permissions_checked){let i=OP(e,t);if(i&&i.length>0)return r(m9,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case qu.VALID_SQL_OPS_ENUM.SELECT:n=c9,s=t.ast.statements[0];break;case qu.VALID_SQL_OPS_ENUM.INSERT:n=g9;break;case qu.VALID_SQL_OPS_ENUM.UPDATE:n=l9;break;case qu.VALID_SQL_OPS_ENUM.DELETE:n=_9;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(yP,"processAST");function T9(e,t){of.info(e),t("unknown sql statement")}a(T9,"nullFunction");function g9({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=R9(i,e.values)}catch(o){return r(o)}a9(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){of.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(g9,"convertInsert");function R9(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]]=fi.compile(`SELECT ${s.toString()} AS [${qu.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw of.error(r),new Error(p9)}}a(R9,"createDataObjects")});var ZT=T((Wfe,IP)=>{"use strict";var{S3:A9,GetObjectCommand:O9}=require("@aws-sdk/client-s3");IP.exports={getFileStreamFromS3:b9,getS3AuthObj:wP};async function b9(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await wP(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new O9(r))).Body}a(b9,"getFileStreamFromS3");function wP(e,t,r){return new A9({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(wP,"getS3AuthObj")});var cf=T((zfe,HP)=>{"use strict";var tg=jr(),y9=af(),N9=ZT(),{AsyncParser:w9,Transform:I9}=require("json2csv"),ku=require("stream"),qr=J(),eg=require("fs-extra"),C9=require("path"),un=W(),{promisify:LP}=require("util"),Gu=J(),{handleHDBError:ht,hdb_errors:D9}=ee(),{HDB_ERROR_MSGS:fr,HTTP_STATUS_CODES:mt}=D9,{streamAsJSON:L9}=(Nh(),te(lb)),{Upload:M9}=require("@aws-sdk/lib-storage"),CP=["search_by_value","search_by_hash","sql","search_by_conditions"],DP=["json","csv"],MP="json",UP="csv",U9="Successfully exported JSON locally.",P9="Successfully exported CSV locally.",v9=1e3,B9=tg.searchByHash,H9=tg.searchByValue,x9=LP(y9.evaluateSQL),F9=LP(ku.finished);HP.exports={export_to_s3:V9,export_local:q9,toCsvStream:PP};async function q9(e){un.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=vP(e);if(!qr.isEmpty(t))throw un.error(t),ht(new Error,t,mt.BAD_REQUEST,void 0,void 0,!0);if(qr.isEmpty(e.path))throw un.error(fr.MISSING_VALUE("path")),ht(new Error,fr.MISSING_VALUE("path"),mt.BAD_REQUEST,void 0,void 0,!0);let r=(qr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(C9.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=qr.buildFolderPath(e.path,r);await G9(e.path);let s=await BP(e);return await k9(n,e.format,s)}a(q9,"export_local");async function G9(e){if(un.trace("in confirmPath"),qr.isEmptyOrZeroLength(e))throw ht(new Error,`Invalid path: ${e}`,mt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await eg.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,un.error(n),ht(new Error,n,mt.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw un.error(r),ht(new Error,r,mt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(G9,"confirmPath");async function k9(e,t,r){if(un.trace("in saveToLocal"),Gu.isEmptyOrZeroLength(e))throw ht(new Error,fr.INVALID_VALUE("file_path"),mt.BAD_REQUEST,void 0,void 0,!0);if(Gu.isEmptyOrZeroLength(t))throw ht(new Error,fr.INVALID_VALUE("Source format"),mt.BAD_REQUEST,void 0,void 0,!0);if(Gu.isEmpty(r))throw ht(new Error,fr.NOT_FOUND("Data"),mt.BAD_REQUEST,void 0,void 0,!0);if(t===MP){let n=eg.createWriteStream(e);return L9(r).pipe(n),await F9(n),{message:U9,path:e}}else if(t===UP){let n=eg.createWriteStream(e),s=ku.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(l=>({label:l,value:l})));let c={objectMode:!0};return await new w9(i,c).fromInput(s).toOutput(n).promise(!1),{message:P9,path:e}}throw ht(new Error,fr.INVALID_VALUE("format"),mt.BAD_REQUEST)}a(k9,"saveToLocal");async function V9(e){if(!e.s3||Object.keys(e.s3).length===0)throw ht(new Error,fr.MISSING_VALUE("S3 object"),mt.BAD_REQUEST);if(qr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw ht(new Error,fr.MISSING_VALUE("aws_access_key_id"),mt.BAD_REQUEST);if(qr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw ht(new Error,fr.MISSING_VALUE("aws_secret_access_key"),mt.BAD_REQUEST);if(qr.isEmptyOrZeroLength(e.s3.bucket))throw ht(new Error,fr.MISSING_VALUE("bucket"),mt.BAD_REQUEST);if(qr.isEmptyOrZeroLength(e.s3.key))throw ht(new Error,fr.MISSING_VALUE("key"),mt.BAD_REQUEST);if(qr.isEmptyOrZeroLength(e.s3.region))throw ht(new Error,fr.MISSING_VALUE("region"),mt.BAD_REQUEST);let t=vP(e);if(!qr.isEmpty(t))throw ht(new Error,t,mt.BAD_REQUEST);un.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await BP(e)}catch(u){throw un.error(u),u}let n,s=await N9.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new ku.PassThrough;if(e.format===UP){i=e.s3.key+".csv";let u=PP(r,r.getColumns?.());u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===MP){i=e.s3.key+".json";let u=new ku.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%v9===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw ht(new Error,fr.INVALID_VALUE("format"),mt.BAD_REQUEST);return new M9({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(V9,"export_to_s3");function PP(e,t){let r=ku.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new I9(n,s);return r.pipe(i)}a(PP,"toCsvStream");function vP(e){if(un.trace("in exportCoreValidation"),qr.isEmpty(e.format))return"format missing";if(DP.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${DP.join(", ")}`;let t=e.search_operation.operation;if(qr.isEmpty(t))return"search_operation.operation missing";if(CP.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${CP.join(", ")}`}a(vP,"exportCoreValidation");async function BP(e){un.trace("in getRecords");let t,r;if(Gu.isEmpty(e.search_operation)||Gu.isEmptyOrZeroLength(e.search_operation.operation))throw ht(new Error,fr.INVALID_VALUE("Search operation"),mt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=H9;break;case"search_by_hash":t=B9;break;case"search_by_conditions":t=tg.searchByConditions;break;case"sql":t=x9;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,un.error(r),ht(new Error,r,mt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(BP,"getRecords")});var YP={};ke(YP,{contentTypes:()=>og,findBestSerializer:()=>lf,getDeserializer:()=>Eo,registerContentHandlers:()=>ag,serialize:()=>_f,serializeMessage:()=>_i});function $9(e){try{return e?.[0]===123?ig(e):e}catch{return e}}function ag(e){e.register(K9,{serializers:[{regex:/^application\/json$/,serializer:hc},{regex:/^application\/cbor$/,serializer:function(t){return new fo.EncoderStream($u).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?uf.Readable.from((0,rs.encodeIter)(t,$u)):(0,rs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,rg.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,rs.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,fo.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function lf(e){let r=(e.headers.asObject||e.headers).accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=Pt.get(_);if(E){let h=(E.q||1)*d;h>s&&(n=E,i=E.type||_,s=h,o=f)}}if(!n){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Pt.keys()).join(", "))}};n=Pt.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function _f(e,t,r){let n=FP&&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)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=lf(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[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Is.createBrotliCompress)({params:{[Is.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Is.constants.BROTLI_MODE_TEXT:Is.constants.BROTLI_MODE_GENERIC,[Is.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>FP?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Is.brotliCompress)(s,(c,u)=>{c?o(c):i(u)}))):s}function _i(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return Vu(e);let r=t.serialize;if(r)return r(e);let n=lf(t);return r=t.serialize=n.serializer.serialize,r(e)}function W9(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 Eo(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Pt.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Pt.get(e)?.deserialize||qP(e,n);return o=>W9(o).then(i)}return e&&Pt.get(e)?.deserialize||qP(e,n)}function qP(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return n=>({contentType:e,data:n.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return ig(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function Q9(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)}}}}}var rg,rs,fo,Is,uf,GP,ng,sg,kP,VP,Vu,ig,$u,Pt,og,xP,$P,Y9,K9,FP,ha=Oe(()=>{Nh();rg=x(cf()),rs=require("msgpackr"),fo=require("cbor-x"),Is=require("zlib"),uf=require("stream");jt();GP=require("../../index"),ng=x(Z()),sg=x(U()),kP=x(require("yaml")),VP=ng.default.get(sg.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,Vu=VP?Li:JSON.stringify,ig=VP?yh:JSON.parse,$u={useRecords:!1,useToJSON:!0},Pt=new Map,og=Pt;je.contentTypes=og;(0,GP._assignPackageExport)("contentTypes",og);Pt.set("application/json",{serializeStream:hc,serialize:Vu,deserialize:ig,q:.8});xP=new fo.Encoder($u);Pt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new fo.EncoderStream($u).end(e)},serialize:xP.encode,deserialize:xP.decode,q:1});Pt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?uf.Readable.from((0,rs.encodeIter)(e,$u)):(0,rs.pack)(e)},serialize:rs.pack,deserialize:rs.unpack,q:.9});Pt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,rg.toCsvStream)(e,e?.getColumns?.())},q:.1});Pt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Pt.set("text/yaml",{serialize(e){return kP.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Pt.set("text/event-stream",{serializeStream:function(e){return uf.Readable.from(Q9(e,this.serialize))},serialize: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+`
18
+ `),e.data){let r=e.data;typeof r=="object"&&(r=Vu(r)),t+="data: "+r+`
19
19
  `}return e.id&&(t+="id: "+e.id+`
20
20
  `),e.retry&&(t+="retry: "+e.retry+`
21
21
  `),t+`
22
- `}else return typeof e=="object"?`data: ${qu(e)}
22
+ `}else return typeof e=="object"?`data: ${Vu(e)}
23
23
 
24
24
  `:`data: ${e}
25
25
 
26
- `},compressible:!1,q:.8});Ut.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,n]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let s=t[r];Array.isArray(s)?s.push(n):t.key=[s,n]}else t[r]=n},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});GP={type:"application/json",serializeStream:dc,serialize:qu,deserialize:G9,q:.8};Ut.set("*/*",GP);Ut.set("",GP);a(G9,"tryJSONParse");a(ag,"registerContentHandlers");k9=require("fastify-plugin"),V9=k9(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=lf(n.raw);s.type(c),s.serializer(function(u){return(o.serializeStream||o.serialize)(u,{headers:{set:(_,l)=>{s.header(_,l)}}})})}),r()},{name:"content-type-negotiation"});a(lf,"findBestSerializer");BP=ng.default.get(sg.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(_f,"serialize");a(ui,"serializeMessage");a($9,"streamToBuffer");a(_o,"getDeserializer");a(HP,"deserializerUnknownType");a(Y9,"transformIterable")});function _g(e,t,r,n,s,i,o,c){let u=e[0];if(t==="or"){let d=_(u);for(let E=1;E<e.length;E++){let h=e[E],p=_(h);d=d.concat(p)}let f=new Set;return d.filter(E=>{let h=E.key??E;return f.has(h)?!1:(f.add(h),!0)})}else{let d=_(u),f=l(e.slice(1),!0,u.estimated_count);return f.length>0?o(d,f):d}function _(d){return d.conditions?_g(d.conditions,d.operator,r,n,s,i,o,c):Aa(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(_,"executeCondition");function l(d,f,E){return d.map((h,p)=>{if(h.conditions){let A=h.operator==="or",b=l(h.conditions,!A,E);return A?H=>b.some(F=>F(H)):H=>b.every(F=>F(H))}let S=(h.attribute||h[0])===r.primaryKey,T=fg(h,r,i,c,S,E);return f&&p<d.length-1&&E&&(E=e7(r.primaryStore,h.estimated_count,E)),T}).filter(Boolean)}a(l,"mapConditionsToFilters")}function Aa(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,u=e.comparator;if(Array.isArray(o)){let T=o[0],A=Is(n.attributes,T);if(A.relationship){if(o.length<2)throw new ws.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let b=A.definition?.tableClass||A.elements?.definition?.tableClass,H=new Map,F=Aa({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,b,s,H);if(A.relationship.to){i[o[0]]=H;let v=!!Is(b.attributes,A.relationship.to)?.elements;F=J9(F,A,b.primaryStore,v,H)}if(A.relationship.from){let v=a(P=>Aa({attribute:A.relationship.from,value:P},t,r,n,s,H),"searchEntry");A.elements?(i[o[0]]=H,F=X9(F,A,b.primaryStore,H,v)):F=F.flatMap(v)}return F}else if(o.length===1)o=o[0];else throw new ws.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,f;c instanceof Date&&(c=c.getTime());let E;switch(dg[u]||u){case"lt":_=!0,l=c;break;case"le":_=!0,l=c,d=!0;break;case"gt":_=c,f=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,l=c.slice(0),l[l.length-1]=ts.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),l=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),l=c[1],l instanceof Date&&(l=l.getTime()),d=!0;break;case"equals":case void 0:_=c,l=c,d=!0;break;case"ne":if(c===null){_=c,f=!0;break}case"contains":case"ends_with":E=!0;break;default:throw new ws.ClientError(`Unknown query comparator "${u}"`)}if(r){let T=_;_=l,l=T,T=!f,f=!d,d=T}let h=o===n.primaryKey||o==null,p=h?n.primaryStore:n.indices[o];if(!p||p.isIndexing||E||c===null&&!p.indexNulls){if(!s)throw new ws.ClientError(`"${o}" is not indexed${c===null&&!p.indexNulls?" for nulls, index needs to be rebuilt to search for nulls":p?.isIndexing?" yet":""}, can not search for this attribute`,404);let T=fg(e);if(!T)throw new ws.ClientError(`Unknown search operator ${e.comparator}`);return n.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:A,value:b})=>new Promise((H,F)=>setImmediate(()=>{try{H(b&&T(b)?A:cg.SKIP)}catch(v){F(v)}})))}let S={start:_,end:l,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let T=p.getRange(S).map(A=>A.value==null?cg.SKIP:A);return T.hasEntries=!0,T}else return p.getRange(S).map(({value:T})=>T)}function Is(e,t){if(Array.isArray(t))if(t.length>1){let r=Is(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?Is(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 J9(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;s.hasMappings=!0;let o;return{next(){if(!i){let u=t.relationship.to;return(async()=>{let _=a((d,f)=>{let E=d;Array.isArray(d)&&(E=Dn(d),o=!0);let h=s.get(E);h?h.push(f):s.set(E,h=[f]),d!==E&&(h.key=d)},"add_entry"),l=0;for await(let d of e){let f=d.value??r.get(d.key??d),E=f?.[u];if(E!=null&&!s.filters?.some(h=>!h(f))){if(n)for(let h=0;h<E.length;h++)_(E[h],d);else _(E,d);l++>100&&(await new Promise(setImmediate),l=0)}}return i=(o?s:s.keys())[Symbol.iterator](),this.next()})()}let c=i.next();return c.done?c:{value:o?c.value[1].key||c.value[0]:c.value}}}}})}function X9(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let u;if(o)for(;u=o.next(),!u.done;){let _=Dn(u.value);if(!c.has(_))return c.add(_),u}if(!i)return(async()=>{let _=new Map;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>_.has(Dn(f)));let l=0;for await(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(E=>!E(f)))continue}_.set(Dn(d),d),l++>100&&(await new Promise(setImmediate),l=0)}return i=_.values()[Symbol.iterator](),this.next()})();do{let _=i.next();return _.done?_:(o=s(_.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function fg(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,u=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 l=c[0],d=Is(t.attributes,l),f=d.definition?.tableClass||d.elements.definition?.tableClass,E=n?.[l],h=fg({attribute:c.length>2?c.slice(1):c[1],value:u,comparator:o},f,r,E?.[l]?.joined,c[1]===f.primaryKey,i);if(!h)return;if(E){E.filters||(E.filters=[]),E.filters.push(h);return}let p=t.propertyResolvers?.[l],S,T=a((A,b)=>{let H,F;if(p){if(p.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let P of h.idFilter.idSet)e={attribute:p.from,value:P};S=_(p.from,h.idFilter,!0)}else S=_(p.from,h.idFilter,!1);let v=S(A);return S.idFilter&&(T.idFilter=S.idFilter),v}F=p(A,r,b),H=F?.value}else H=A[l];return H?Array.isArray(H)?H.some(h):h(H,F):!1},"recordFilter");return T}}switch(u instanceof Date&&(u=u.getTime()),dg[o]||o){case ug.SEARCH_TYPES.EQUALS:case void 0:return _(c,l=>l===u,!0);case"contains":return _(c,l=>l?.toString().includes(u));case"ends_with":return _(c,l=>l?.toString().endsWith(u));case"starts_with":return _(c,l=>typeof l=="string"&&l.startsWith(u),!0);case"prefix":return Array.isArray(u)?u[u.length-1]==null&&(u=u.slice(0,-1)):u=[u],_(c,l=>{if(!Array.isArray(l))return!1;for(let d=0,f=u.length;d<f;d++)if(l[d]!==u[d])return!1;return!0},!0);case"between":return u[0]instanceof Date&&(u[0]=u[0].getTime()),u[1]instanceof Date&&(u[1]=u[1].getTime()),_(c,l=>(0,ts.compareKeys)(l,u[0])>=0&&(0,ts.compareKeys)(l,u[1])<=0,!0);case"gt":return _(c,l=>(0,ts.compareKeys)(l,u)>0);case"ge":return _(c,l=>(0,ts.compareKeys)(l,u)>=0);case"lt":return _(c,l=>(0,ts.compareKeys)(l,u)<0);case"le":return _(c,l=>(0,ts.compareKeys)(l,u)<=0);case"ne":return _(c,l=>(0,ts.compareKeys)(l,u)!==0);default:throw new ws.ClientError(`Unknown query comparator "${o}"`)}function _(l,d,f){let E;f=f&&!s&&t?.indices[l]&&i>3,f&&(e.estimated_count==null&&ff(t)(e),E=e.estimated_count>>4,(isNaN(E)||E>=i)&&(f=!1));let h=0,p=3;function S(T){let A=T[l],b;if(typeof A!="object"||!A?b=d(A):Array.isArray(A)?b=A.some(d):A instanceof Date&&(b=d(A.getTime())),f&&(p++,!b&&!S.idFilter&&++h/p*(i-p)>E)){let H=Aa(e,r.transaction.getReadTxn(),!1,t).map(Dn),F=new Set(H);S.idFilter=v=>F.has(Dn(v)),S.idFilter.idSet=F}return b}return a(S,"recordFilter"),s&&(S.idFilter=d),S}a(_,"attributeComparator")}function ff(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/di(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=dg[n]||n,n===ug.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=Is(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=ff(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"});r.estimated_count=c*di(e.indices[i.relationship.from]||e.primaryStore)/(di(o.primaryStore)||1)}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=di(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=Q9*di(e.primaryStore)+1:n==="between"?r.estimated_count=W9*di(e.primaryStore)+1:r.estimated_count=K9*di(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=4)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function Ef(e){if(e)if(fi=e,ga.lastIndex=0,j9.test(e))try{let t=ku(new Ra,"");if(hr!==fi.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${hr} in '${fi}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function ku(e,t){let r=ga,n,s,i,o,c,u=decodeURIComponent,_;for(;n=r.exec(fi);){hr=r.lastIndex;let[,l,d]=n;if(o){if(l)throw new SyntaxError(`expected operator, but encountered '${l}'`);o=!1,c=!1}else c=!0;let f;switch(d){case"=":if(s){if(l.length<=2)i=l;else throw new SyntaxError(`invalid FIQL operator ${l}`);u=VP}else{if(u=decodeURIComponent,i="equals",!l)throw new SyntaxError("attribute must be specified before equality comparator");s=Vu(l)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=z9[d],u=lg[i]?VP:decodeURIComponent,!l)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=Vu(l);break;case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s,value:u(l)};i==="eq"&&$P(h,l),df(e,_),e.conditions.push(h)}d==="&"&&(_="and"),d==="|"&&(_="or"),s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Vu(l)),s=void 0;break;case"(":ga.lastIndex=hr;let E=ku(l?[]:new Ra,")");switch(l){case"":df(e,_),e.conditions.push(E);break;case"limit":switch(E.length){case 1:e.limit=+E[0];break;case 2:e.offset=+E[0],e.limit=E[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(E[0])&&E.length===1&&!E[0].name?(e.select=E[0],e.select.asArray=!0):E.length===1?e.select=E[0]:E.length===2&&E[1]===""?e.select=E.slice(0,1):e.select=E;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=YP(E);break;default:throw new SyntaxError(`unknown query function call ${l}`)}fi[hr]===","?r.lastIndex=++hr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!l)throw new SyntaxError("property sets must have a defined parent property name");ga.lastIndex=hr,f=ku([],"}"),f.name=l,e.push(f),fi[hr]===","?r.lastIndex=++hr:o=!0;break;case"[":ga.lastIndex=hr,l?(f=ku(new Ra,"]"),f.name=l):f=ku(e.conditions?new Ra:[],"]"),e.conditions?(df(e,_),e.conditions.push(f),s=null):e.push(f),fi[hr]===","?r.lastIndex=++hr:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let h={comparator:i||"equals",attribute:s,value:u(l)};i==="eq"&&$P(h,l),df(e,_),e.conditions.push(h)}else if(l)throw new SyntaxError("no attribute or comparison specified")}else(l||e.length>0&&c)&&e.push(Vu(l));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?Z9:ga,r.lastIndex=hr),hr===fi.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function df(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function Vu(e){return e.indexOf(".")>-1?e.split(".").map(Vu):decodeURIComponent(e)}function VP(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(decodeURIComponent(r));if(t==="string")return decodeURIComponent(r);throw new ws.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function $P(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new ws.ClientError("wildcard can only be used at the end of a string")}function YP(e){let t=KP(e[0]);return e.length>1&&(t.next=YP(e.slice(1))),t}function KP(e){if(Array.isArray(e)){let t=KP(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}}throw new SyntaxError(`Unknown sort type ${e}`)}function Dn(e){return Array.isArray(e)?e.join("\0"):e}function di(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function e7(e,t,r){return t*r/di(e)}var ws,ug,ts,cg,K9,W9,Q9,z9,lg,dg,j9,ga,Z9,hr,fi,Ra,hf=Oe(()=>{ws=B(ee()),ug=B(lt()),ts=require("ordered-binary"),cg=require("lmdb"),K9=.3,W9=.1,Q9=.05,z9={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},lg={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(_g,"executeConditions");a(Aa,"searchByIndex");a(Is,"findAttribute");a(J9,"joinTo");a(X9,"joinFrom");dg={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(fg,"filterByType");a(ff,"estimateCondition");j9=/[()[\]|!<>.]|(=\w*=)/,ga=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,Z9=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(Ef,"parseQuery");a(ku,"parseBlock");a(df,"assignOperator");a(Vu,"decodeProperty");a(VP,"typedDecoding");a($P,"wildcardDecoding");a(YP,"toSortObject");a(KP,"toSortEntry");Ra=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}};a(Dn,"flattenKey");a(di,"estimatedEntryCount");a(e7,"intersectionEstimate")});function jP(e){let t={openapi:t7,info:{title:"HarperDB HTTP REST interface",version:(0,XP.version)()},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path)continue;let{path:s}=n,{attributes:i,primaryKey:o,prototype:c}=n.Resource;if(o=o??"id",!o)continue;let u={},_=[];if(i)for(let{type:A,name:b}of i)u[b]=new JP(WP[A],A),_.push(new mg(b,"query",u[b]));let l=Object.keys(u),d=new mg(o,"path",new JP(WP.ID,"ID"));d.required=!0,d.description="primary key of record";let f=new mg("property","path",{enum:l});f.required=!0,t.components.schemas[s]=new s7(u);let E=c.post!==Resource.prototype.post||c.update,h=c.hasOwnProperty("put"),p=c.hasOwnProperty("get"),S=c.hasOwnProperty("delete"),T="/"+s+"/";E&&(t.paths[T]={},t.paths[T].post=new r7(s,r,"create a new record auto-assigning a primary key")),p&&(t.paths[T]||(t.paths[T]={}),t.paths[T].get=new Eg(_,r,{200:new hg({$ref:mf+s})},"search for records by the specified property name and value")),S&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new zP(_,r,"delete all the records that match the provided query",{204:new QP})),T="/"+s+"/{"+o+"}",p&&(t.paths[T]={},t.paths[T].get=new Eg([d],r,{200:new hg({$ref:mf+s})},"retrieve a record by its primary key")),h&&(t.paths[T]||(t.paths[T]={}),t.paths[T].put=new n7([d],r,s,"create or update the record with the URL path that maps to the record's primary key")),S&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new zP([d],r,"delete a record with the given primary key",{204:new QP})),p&&f.schema.enum.length>0&&(T="/"+s+"/{"+o+"}.{property}",t.paths[T]={},t.paths[T].get=new Eg([d,f],r,{200:new hg({enum:l})},"used to retrieve the specified property of the specified record"))}return t}function r7(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:mf+e}}}},this.security=t,this.responses={200:{description:pg,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function Eg(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function hg(e){this.description=pg,this.content={"application/json":{schema:e}}}function QP(){this.description="successfully processed request, no content returned to client"}function n7(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:mf+r}}}},this.responses={200:{description:pg}}}function zP(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function s7(e){this.type="object",this.properties=e}function JP(e,t){this.type=e,this.format=t}function mg(e,t,r){this.name=e,this.in=t,this.schema=r}var XP,t7,WP,mf,pg,ZP=Oe(()=>{XP=B(md()),t7="3.0.3",WP={ID:"string",Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",Any:"string",BigInt:"integer"},mf="#/components/schemas/",pg="successful operation";a(jP,"generateJsonApi");a(r7,"Post");a(Eg,"Get");a(hg,"Response200");a(QP,"Response204");a(n7,"Put");a(zP,"Delete");a(s7,"ResourceSchema");a(JP,"Type");a(mg,"Parameter")});var Sf={};Ve(Sf,{start:()=>a7});async function o7(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Ef(e);let s=new ci;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==ev){let h=pf.getMatch(i);if(!h)return t(e);e.handlerPath=h.path,o={url:h.relativeURL,async:!0},c=h.Resource}let u=r["cache-control"];if(u){u=u.toLowerCase();let h=u.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),u.includes("only-if-cached")&&(e.onlyIfCached=!0),u.includes("no-cache")&&(e.noCache=!0),u.includes("no-store")&&(e.noCacheStore=!0),u.includes("stale-if-error")&&(e.staleIfError=!0),u.includes("must-revalidate")&&(e.mustRevalidate=!0)}let _=await We(e,()=>{if(n==="POST"||n==="PUT"||n==="PATCH"||n==="QUERY")try{e.data=_o(r["content-type"],!0)(e.body)}catch(h){throw new Yu.ClientError(h,400)}if(e.authorize=!0,i===ev&&n==="GET")return jP(pf);switch(n){case"GET":case"HEAD":return c.get(o,e);case"POST":return c.post(o,e.data,e);case"PUT":return c.put(o,e.data,e);case"DELETE":return c.delete(o,e);case"PATCH":return c.patch(o,e.data,e);case"OPTIONS":s.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return c.connect(o,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return c.query(o,e.data,e);case"COPY":return c.copy(o,r.destination,e);case"MOVE":return c.move(o,r.destination,e);case"BREW":throw new Yu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Yu.ServerError(`Method ${n} is not recognized`,501)}}),l=200,d;if(_==null)l=n==="GET"||n==="HEAD"?404:204,Sg.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){i7[0]=d;let h=String.fromCharCode(34,(Gt[0]&63)+62,(Gt[0]>>6)+(Gt[1]<<2&63)+62,(Gt[1]>>4)+(Gt[2]<<4&63)+62,(Gt[2]>>2)+62,(Gt[3]&63)+62,(Gt[3]>>6)+(Gt[4]<<2&63)+62,(Gt[4]>>4)+(Gt[5]<<4&63)+62,(Gt[5]>>2)+62,(Gt[6]&63)+62,(Gt[6]>>6)+(Gt[7]<<2&63)+62,34),p=r["if-none-match"];p&&h==p?(_?.onDone&&_.onDone(),l=304,_=void 0):s.setIfNone("ETag",h),Sg.lastModified&&s.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(l=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let f={status:l,headers:s,body:void 0},E=_?.wasLoadedFromSource?.();return E!==void 0&&(f.wasCacheMiss=E,!E&&d&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||d))/1e3))),_!==void 0&&(f.body=_f(_,e,f),n==="HEAD"&&(f.body=void 0)),f}catch(i){i.statusCode?i.statusCode===500?fo.warn(i):fo.info(i):fo.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),s.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:s,body:void 0};return o.body=_f(i.contentType?i:i.toString(),e,o),o}}function a7(e){Sg=e,!tv&&(tv=!0,pf=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return o7(t,r)}),e.server.ws(async(t,r,n)=>{$u++;let s=new Tn;rv||(rv=!0,Xc(l=>{$u>0&&l.push({metric:"ws-connections",connections:$u,byThread:!0})}));let i;t.on("error",l=>{i=!0,fo.warn(l)});let o;t.on("message",a(function(d){o||(o=_o(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{$u--,en(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let u=r.url.slice(1),_=pf.getMatch(u);if(en(!!_,"connection","ws","connect"),!_)t.send(ui(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,vr(h=>({count:h.count,total:$u}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await We(r,()=>d.connect(l,s,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=ui(E.value,r);t.send(h),vr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var fo,Yu,Gt,i7,Sg,ev,tv,pf,rv,$u,nv=Oe(()=>{fa();gs();fo=B(Y()),Yu=B(ee());hf();lc();Wi();Fd();ZP();Gt=new Uint8Array(8),i7=new Float64Array(Gt.buffer,0,1),Sg={},ev="openapi";a(o7,"http");$u=0;a(a7,"start")});var Tg=g((fEe,sv)=>{var{recordAction:Tf,recordActionBinary:c7}=(gs(),te(jc)),u7=require("fastify-plugin"),l7=200;sv.exports=u7(function(e,t,r){e.addHook("onResponse",async(n,s)=>{s.getResponseTime()}),e.addHook("onSend",async(n,s,i)=>{let o=s.getResponseTime(),c=performance.now(),u=s.request.routeOptions,_,l,d;u.config?.isOperation?(_=n.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),Tf(o,"duration",_,d,l),c7(s.raw.statusCode<400,"success",_,d,l);let f=l7;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Tf(performance.now()-c,"transfer",_,d,l),Tf(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Tf(f,"bytes-sent",_,d,l));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var Og=g((EEe,uv)=>{var bf=require("clone"),Nf=Xe(),_7=J(),Af=M(),d7=Y(),gf=require("fs"),gg=require("joi"),{string:Of}=gg.types(),{hdb_errors:f7,handleHDBError:Ku}=ee(),{HDB_ERROR_MSGS:E7,HTTP_STATUS_CODES:Rf}=f7,{common_validators:Oa}=kn(),iv=1e9,ov=" is required",h7=["insert","update","upsert"],Rg={database:{presence:!1,format:Oa.schema_format,length:Oa.schema_length},schema:{presence:!1,format:Oa.schema_format,length:Oa.schema_length},table:{presence:!0,format:Oa.schema_format,length:Oa.schema_length},action:{inclusion:{within:h7,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},m7={schema:Of.required(),table:Of.required(),action:Of.valid("insert","update","upsert")},{AWS_ACCESS_KEY:p7,AWS_SECRET:S7,AWS_BUCKET:T7,AWS_FILE_KEY:g7,REGION:R7}=Af.S3_BUCKET_AUTH_KEYS,A7={s3:{presence:!0},[`s3.${p7}`]:{presence:!0,type:"String"},[`s3.${S7}`]:{presence:!0,type:"String"},[`s3.${T7}`]:{presence:!0,type:"String"},[`s3.${g7}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${R7}`]:{presence:!0,type:"String"}},av=bf(Rg);av.data.presence={message:ov};var cv=bf(Rg);cv.file_path.presence={message:ov};var O7=Object.assign(bf(Rg),A7),Ag=bf(m7);Ag.csv_url=Of.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Ag.passthrough_headers=gg.object();function b7(e){let t=Nf.validateObject(e,av);return yf(e,t)}a(b7,"dataObject");function N7(e){let t=Nf.validateBySchema(e,gg.object(Ag));return yf(e,t)}a(N7,"urlObject");function y7(e){let t=Nf.validateObject(e,cv);return yf(e,t)}a(y7,"fileObject");function w7(e){let t=Nf.validateObject(e,O7);return yf(e,t)}a(w7,"s3FileObject");function yf(e,t){if(!t){let r=_7.checkGlobalSchemaTable(e.schema,e.table);if(r)return Ku(new Error,r,Rf.BAD_REQUEST);if(e.operation===Af.OPERATIONS_ENUM.CSV_FILE_LOAD){try{gf.accessSync(e.file_path,gf.constants.R_OK|gf.constants.F_OK)}catch(n){return n.code===Af.NODE_ERROR_CODES.ENOENT?Ku(n,`No such file or directory ${n.path}`,Rf.BAD_REQUEST):n.code===Af.NODE_ERROR_CODES.EACCES?Ku(n,`Permission denied ${n.path}`,Rf.BAD_REQUEST):Ku(n)}try{let n=gf.statSync(e.file_path).size;if(n>iv)return Ku(new Error,E7.MAX_FILE_SIZE_ERR(n,iv),Rf.BAD_REQUEST)}catch(n){d7.error(n),console.error(n)}}}return t}a(yf,"postValidateChecks");uv.exports={dataObject:b7,urlObject:N7,fileObject:y7,s3FileObject:w7}});var bg=g((mEe,lv)=>{"use strict";var Wu=Y(),wf=M();async function I7(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===wf.OPERATIONS_ENUM.INSERT||t.operation===wf.OPERATIONS_ENUM.UPDATE||t.operation===wf.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===wf.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Wu.info(i.message),i):i.http_resp_msg?(Wu.error(`Error calling operation: ${e.name}`),Wu.error(i.http_resp_msg),i):(Wu.error(`Error calling operation: ${e.name}`),Wu.error(i),i)}}a(I7,"callOperationFunctionAsAwait");lv.exports={callOperationFunctionAsAwait:I7}});var dv=g((SEe,_v)=>{"use strict";var Ng=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},yg=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};_v.exports={BulkLoadFileObject:Ng,BulkLoadDataObject:yg}});var Ev=g((gEe,fv)=>{"use strict";var wg=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};fv.exports=wg});var Ug=g((yEe,Lv)=>{"use strict";var If=jr(),Df=Og(),C7=require("needle"),Ln=M(),AEe=tt(),ba=J(),{handleHDBError:nt,hdb_errors:Ov}=ee(),{HTTP_STATUS_CODES:kt,HDB_ERROR_MSGS:bt,CHECK_LOGS_WRAPPER:ho}=Ov,Na=Y(),Ig=require("papaparse");ba.promisifyPapaParse();var Mn=require("fs-extra"),D7=require("path"),{chain:hv}=require("stream-chain"),mv=require("stream-json/streamers/StreamArray"),pv=require("stream-json/utils/Batch"),Sv=require("stream-chain/utils/comp"),{finished:Tv}=require("stream"),L7=Z(),bv=bg(),M7=ZT(),{BulkLoadFileObject:Dg,BulkLoadDataObject:U7}=dv(),Lg=VT(),{verifyBulkLoadAttributePerms:Nv}=sf(),OEe=Ev(),bEe=Rt(),NEe=hs(),{databases:P7}=(be(),te(Fe)),{coerceType:v7}=(Lf(),te(Pg)),gv="No records parsed from csv file.",Eo=`${L7.get("HDB_ROOT")}/tmp`,{schema_regex:B7}=kn(),Rv=1024*1024*2,Av=5e3,H7={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};Lv.exports={csvDataLoad:x7,csvURLLoad:F7,csvFileLoad:q7,importFromS3:G7};async function x7(e,t){let r=Df.dataObject(e);if(r)throw nt(r,r.message,kt.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=Iv(e.schema,e.table),i=Ig.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Cg.bind(null,s),dynamicTyping:!1}),o=new Lg;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&Nv(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw nt(new Error,c,kt.BAD_REQUEST,void 0,void 0,!0);let u=new U7(e.action,e.schema,e.table,i.data);return n=await bv.callOperationFunctionAsAwait(Cv,u,null),n.message===gv?gv:Dv(n.records,n.number_written)}catch(s){throw mo(s)}}a(x7,"csvDataLoad");async function F7(e){let t=Df.urlObject(e);if(t)throw nt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Eo}/${r}`;try{await k7(e,r)}catch(s){throw Na.error(bt.DOWNLOAD_FILE_ERR(r)+" - "+s),nt(s,ho(bt.DOWNLOAD_FILE_ERR(r)))}try{let s=new Dg(this.job_operation_function.name,e.action,e.schema,e.table,n,Ln.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Mg(s);return await Cf(n),i}catch(s){throw await Cf(n),mo(s)}}a(F7,"csvURLLoad");async function q7(e){let t=Df.fileObject(e);if(t)throw nt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);let r=new Dg(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Ln.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Mg(r)}catch(n){throw mo(n)}}a(q7,"csvFileLoad");async function G7(e){let t=Df.s3FileObject(e);if(t)throw nt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=D7.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Eo}/${s}`;let i=new Dg(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await V7(s,e);let o=await Mg(i);return await Cf(r),o}catch(n){throw await Cf(r),mo(n)}}a(G7,"importFromS3");async function k7(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await C7("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 nt(n,s,n.statusCode,Ln.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Y7(r,e.csv_url),await $7(t,r.raw)}a(k7,"downloadCSVFile");async function V7(e,t){try{let r=`${Eo}/${e}`;await Mn.mkdirp(Eo),await Mn.writeFile(`${Eo}/${e}`,"",{flag:"a+"});let n=await Mn.createWriteStream(r),s=await M7.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){Na.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Na.error(bt.S3_DOWNLOAD_ERR+" - "+r),nt(r,ho(bt.S3_DOWNLOAD_ERR))}}a(V7,"downloadFileFromS3");async function $7(e,t){try{await Mn.mkdirp(Eo),await Mn.writeFile(`${Eo}/${e}`,t)}catch(r){throw Na.error(bt.WRITE_TEMP_FILE_ERR),nt(r,ho(bt.DEFAULT_BULK_LOAD_ERR))}}a($7,"writeFileToTempFolder");async function Cf(e){if(e)try{await Mn.access(e),await Mn.unlink(e)}catch{Na.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Cf,"deleteTempFile");function Y7(e,t){if(e.statusCode!==Ov.HTTP_STATUS_CODES.OK)throw nt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,kt.BAD_REQUEST);if(!H7[e.headers["content-type"]])throw nt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,kt.BAD_REQUEST);if(!e.raw)throw nt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,kt.BAD_REQUEST)}a(Y7,"validateURLResponse");async function Mg(e){try{let t;switch(e.file_type){case Ln.VALID_S3_FILE_TYPES.CSV:t=await K7(e);break;case Ln.VALID_S3_FILE_TYPES.JSON:t=await W7(e);break;default:throw nt(new Error,bt.DEFAULT_BULK_LOAD_ERR,kt.BAD_REQUEST,Ln.LOG_LEVELS.ERROR,bt.INVALID_FILE_EXT_ERR(e))}return Dv(t.records,t.number_written)}catch(t){throw mo(t)}}a(Mg,"fileLoad");async function yv(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await If.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&Nv(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let u=nt(c);r(u)}}a(yv,"validateChunk");async function wv(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;ba.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!ba.isEmpty(c)&&!ba.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await bv.callOperationFunctionAsAwait(Cv,c,null);t.records+=u.records,t.number_written+=u.number_written,s&&s.resume()}catch(c){let u=nt(c,ho(bt.INSERT_CSV_ERR),kt.INTERNAL_SERVER_ERROR,Ln.LOG_LEVELS.ERROR,bt.INSERT_CSV_ERR+" - "+c);r(u)}}a(wv,"insertChunk");async function K7(e){let t={records:0,number_written:0},r=Iv(e.schema,e.table);try{let n=new Lg,s=Mn.createReadStream(e.file_path,{highWaterMark:Rv});s.setEncoding("utf8"),await Ig.parsePromise(s,yv.bind(null,e,n),Cg.bind(null,r));let i=n.getPermsResponse();if(i)throw nt(new Error,i,kt.BAD_REQUEST);return s=Mn.createReadStream(e.file_path,{highWaterMark:Rv}),s.setEncoding("utf8"),await Ig.parsePromise(s,wv.bind(null,e,t),Cg.bind(null,r)),s.destroy(),t}catch(n){throw nt(n,ho(bt.PAPA_PARSE_ERR),kt.INTERNAL_SERVER_ERROR,Ln.LOG_LEVELS.ERROR,bt.PAPA_PARSE_ERR+n)}}a(K7,"callPapaParse");function Iv(e,t){let r=P7[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>v7(i,s));return n}a(Iv,"createTransformMap");function Cg(e,t,r){let n=e.get(r);return n?n(t):ba.autoCast(t)}a(Cg,"typeFunction");async function W7(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new Lg,s=hv([Mn.createReadStream(e.file_path,{encoding:"utf-8"}),mv.withParser(),c=>c.value,new pv({batchSize:Av}),Sv(async c=>{await yv(e,n,r,c)})]);await new Promise((c,u)=>{Tv(s,_=>{_?u(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw nt(new Error,i,kt.BAD_REQUEST);let o=hv([Mn.createReadStream(e.file_path,{encoding:"utf-8"}),mv.withParser(),c=>c.value,new pv({batchSize:Av}),Sv(async c=>{await wv(e,t,r,c)})]);return await new Promise((c,u)=>{Tv(o,_=>{_?u(_):c()}),o.resume()}),t}catch(n){throw nt(n,ho(bt.INSERT_JSON_ERR),kt.INTERNAL_SERVER_ERROR,Ln.LOG_LEVELS.ERROR,bt.INSERT_JSON_ERR+n)}}a(W7,"insertJson");async function Cv(e){let t={};try{e.data&&e.data.length>0&&Q7(e.data[0])?t=await z7(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Na.info(t.message))}catch(r){throw mo(r)}return t}a(Cv,"callBulkFileLoad");function Q7(e){let t=Object.keys(e);for(let r of t)if(!B7.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Q7,"validateColumnNames");async function z7(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=If.insert;break;case"update":i=If.update;break;case"upsert":i=If.upsert;break;default:throw nt(new Error,bt.INVALID_ACTION_PARAM_ERR(n),kt.BAD_REQUEST,Ln.LOG_LEVELS.ERROR,bt.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=ba.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw mo(o)}}a(z7,"bulkFileLoad");function Dv(e,t){return`successfully loaded ${t} of ${e} records`}a(Dv,"buildResponseMsg");function mo(e){return nt(e,ho(bt.DEFAULT_BULK_LOAD_ERR),kt.INTERNAL_SERVER_ERROR,Ln.LOG_LEVELS.ERROR,bt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(mo,"buildTopLevelErrMsg")});var Uv=g((IEe,Mv)=>{"use strict";var vg=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};Mv.exports=vg});var Bv=g((DEe,vv)=>{"use strict";var J7=M(),Pv=require("moment"),X7=require("uuid").v4,Bg=class{static{a(this,"JobObject")}constructor(){this.id=X7(),this.type=void 0,this.start_datetime=Pv().valueOf(),this.created_datetime=Pv().valueOf(),this.end_datetime=void 0,this.status=J7.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};vv.exports=Bg});var Hg=g((MEe,kv)=>{"use strict";var j7=require("uuid").v4,Fv=jr(),qv=Xr(),Z7=Kn(),eee=zo(),tee=Uv(),st=M(),ree=Bv(),nee=gS(),un=Y(),see=bc(),ya=J(),{promisify:iee}=require("util"),po=require("moment"),oee=af(),Mf=Og(),Hv=Rm(),{deleteTransactionLogsBeforeValidator:aee}=xT(),{handleHDBError:cee,hdb_errors:uee}=ee(),{HTTP_STATUS_CODES:lee}=uee,xv=qv.searchByValue,_ee=qv.searchByHash,dee=Fv.insert,fee=iee(oee.evaluateSQL),Eee=Fv.update;kv.exports={addJob:pee,updateJob:Tee,handleGetJob:hee,handleGetJobsByStartDate:mee,getJobById:Gv};async function hee(e){try{let t=await Gv(e.id);return ya.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw un.error("There was an error getting job",t),new Error(r)}}a(hee,"handleGetJob");async function mee(e){try{let t=await See(e);if(un.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=po(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=po(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 un.error(r),new Error(r)}}a(mee,"handleGetJobsByStartDate");async function pee(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||ya.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return un.info(l),t.error=l,t}if(!st.JOB_TYPE_ENUM[e.operation])return un.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case st.OPERATIONS_ENUM.CSV_FILE_LOAD:n=Mf.fileObject(e);break;case st.OPERATIONS_ENUM.CSV_URL_LOAD:n=Mf.urlObject(e);break;case st.OPERATIONS_ENUM.CSV_DATA_LOAD:n=Mf.dataObject(e);break;case st.OPERATIONS_ENUM.IMPORT_FROM_S3:n=Mf.s3FileObject(e);break;case st.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case st.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=Hv(e,"date");break;case st.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=Hv(e,"timestamp");break;case st.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=aee(e);break;default:break}if(n)throw cee(n,n.message,lee.BAD_REQUEST,void 0,void 0,!0);let s=new ree;s.type=e.operation===st.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?st.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new Z7(st.SYSTEM_SCHEMA_NAME,st.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await xv(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return un.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=j7();try{o=await xv(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return un.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return un.error("Error creating a job, could not find a unique job id."),t}s.request=e;let u=new see(st.SYSTEM_SCHEMA_NAME,st.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await dee(u)}catch(l){return un.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let l=`Created a job with type ${s.type} and id ${s.id}`;t.message=l,t.createdJob=s,t.success=!0,un.trace(l)}return t}a(pee,"addJob");async function See(e){let t=po(e.from_date,po.ISO_8601),r=po(e.to_date,po.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 tee(n,e.hdb_user);try{return await fee(s)}catch(i){throw un.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(See,"getJobsInDateRange");async function Gv(e){if(ya.isEmptyOrZeroLength(e))return ya.errorizeMessage("Invalid job ID specified.");let t=new eee(st.SYSTEM_SCHEMA_NAME,st.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await _ee(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return un.error(n),ya.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Gv,"getJobById");async function Tee(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(ya.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===st.JOB_STATUS_ENUM.COMPLETE||e.status===st.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=po().valueOf());let t=new nee(st.SYSTEM_SCHEMA_NAME,st.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Eee(t),r}a(Tee,"updateJob")});var Qv=g((PEe,Wv)=>{"use strict";var Vv=J(),mr=M(),gee=require("moment"),Uf=Ug(),Pf=Y(),$v=Hg(),Yv=cf(),Kv=qi(),Ree=Ze(),Aee=ef(),xg=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Oee(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(Vv.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Vv.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case mr.JOB_TYPE_ENUM.csv_file_load:await Cs(e,Uf.csvFileLoad);break;case mr.JOB_TYPE_ENUM.csv_url_load:await Cs(e,Uf.csvURLLoad);break;case mr.JOB_TYPE_ENUM.csv_data_load:await Cs(e,Uf.csvDataLoad);break;case mr.JOB_TYPE_ENUM.import_from_s3:await Cs(e,Uf.importFromS3);break;case mr.JOB_TYPE_ENUM.empty_trash:break;case mr.JOB_TYPE_ENUM.export_local:await Cs(e,Yv.export_local);break;case mr.JOB_TYPE_ENUM.export_to_s3:await Cs(e,Yv.export_to_s3);break;case mr.JOB_TYPE_ENUM.delete_files_before:case mr.JOB_TYPE_ENUM.delete_records_before:await Cs(e,Kv.deleteFilesBefore);break;case mr.JOB_TYPE_ENUM.delete_audit_logs_before:await Cs(e,Kv.deleteAuditLogsBefore);break;case mr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Cs(e,Aee.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(Oee,"parseMessage");async function Cs(e,t){try{e.job.status=mr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=gee().valueOf(),await $v.updateJob(e.job),await bee(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):Pf.error(`There was an error running ${t.name} job with id ${e.job.id}`),Pf.error(n),e.job.message=n,e.job.status=mr.JOB_STATUS_ENUM.ERROR;try{await $v.updateJob(e.job)}catch(s){throw Pf.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Cs,"runJob");async function bee(e){Pf.trace("launching job thread:",e),Ree.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[mr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(bee,"launchJobThread");Wv.exports={parseMessage:Oee,RunnerMessage:xg}});var Jv=g((BEe,zv)=>{"use strict";var Fg=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};zv.exports=Fg});var f0=g((xEe,Yg)=>{"use strict";var xf=Xr(),kg=af(),vf=Ug(),Ds=sd(),Bf=vi(),zu=qi(),Nee=iS(),Qu=Zr(),Hf=ES(),Vt=HT(),Nt=Y(),yee=pS(),wee=Rd(),Xv=ZS(),Iee=Od(),Cee=eT(),Dee=tT(),Lee=sT(),Mee=oT(),qg=uT(),jv=cf(),Uee=sf(),Vg=Hg(),q=M(),{hdb_errors:Xu,handleHDBError:Ju}=ee(),{HTTP_STATUS_CODES:Zv}=Xu,Gg=ET(),e0=Hd(),u0=require("util"),wa=jr(),Pee=Qs(),vee=oa(),t0=Qv(),r0=lu(),n0=(Vd(),te(wu)),s0=wr(),i0=ef(),o0=Qd(),{setServerUtilities:Bee}=(Lf(),te(Pg)),{CONTEXT:Hee}=(gn(),te(lp)),{_assignPackageExport:xee}=require("../../index"),{transformReq:Fee}=J(),{server:qee}=(Zt(),te(yi)),Gee=bg(),a0=xf.searchByHash,kee=xf.searchByValue,Vee=u0.promisify(xf.search),$ee=u0.promisify(kg.evaluateSQL),Yee={[q.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[q.OPERATIONS_ENUM.CREATE_TABLE]:!0,[q.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[q.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[q.OPERATIONS_ENUM.DROP_TABLE]:!0,[q.OPERATIONS_ENUM.DROP_SCHEMA]:!0},V=Jv();async function l0(e,t){try{if(e.body.operation!=="read_log"&&(Nt.log_level===q.LOG_LEVELS.INFO||Nt.log_level===q.LOG_LEVELS.DEBUG||Nt.log_level===q.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;Nt.info(o)}}catch(n){Nt.error(n)}let r=await Gee.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Yee[e.body.operation]&&Pee.setSchemaDataToGlobal(n=>{n&&Nt.error(n)}),r}a(l0,"processLocalTransaction");var c0=Wee();Yg.exports={chooseOperation:_0,getOperationFunction:d0,operation:$g,processLocalTransaction:l0};Bee(Yg.exports);qee.operation=$g;function _0(e){let t;try{t=d0(e)}catch(s){throw Nt.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=kg.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=kg.checkASTPermissions(e,i);if(o)throw Nt.error(`${Zv.FORBIDDEN} from operation ${e.operation}`),Nt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Ju(new Error,o,Xu.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==q.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==q.OPERATIONS_ENUM.LOGIN&&e.operation!==q.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=Uee.verifyPerms(i,s);if(o)throw Nt.error(`${Zv.FORBIDDEN} from operation ${e.operation}`),Nt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Ju(new Error,o,Xu.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw Ju(s,"There was an error when trying to choose an operation path")}return r}a(_0,"chooseOperation");function d0(e){if(Nt.trace(`getOperationFunction with operation: ${e.operation}`),c0.has(e.operation))return c0.get(e.operation);throw Ju(new Error,Xu.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Xu.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(d0,"getOperationFunction");xee("operation",$g);function $g(e,t){e.hdb_user=this[Hee]?.user,e.bypass_auth=!t;let r=_0(e);return l0({body:e},r)}a($g,"operation");async function Kee(e){Nt.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[q.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case q.OPERATIONS_ENUM.INSERT:o=await wa.insert(i);break;case q.OPERATIONS_ENUM.UPDATE:o=await wa.update(i);break;case q.OPERATIONS_ENUM.UPSERT:o=await wa.upsert(i);break;case q.OPERATIONS_ENUM.DELETE:o=await zu.deleteRecord(i);break;default:Nt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Nt.info("Invalid operation in transaction"),Nt.error(o)}}a(Kee,"catchup");async function rs(e){Fee(e);let t,r;try{r=await Vg.addJob(e),t=r.createdJob,Nt.info("addJob result",r);let n=new t0.RunnerMessage(t,e);return await t0.parseMessage(n),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw Nt.error(s),Ju(n,s)}}a(rs,"executeJob");function Wee(){let e=new Map;return e.set(q.OPERATIONS_ENUM.INSERT,new V(wa.insert)),e.set(q.OPERATIONS_ENUM.UPDATE,new V(wa.update)),e.set(q.OPERATIONS_ENUM.UPSERT,new V(wa.upsert)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new V(xf.searchByConditions)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_HASH,new V(a0)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_ID,new V(a0)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_VALUE,new V(kee)),e.set(q.OPERATIONS_ENUM.SEARCH,new V(Vee)),e.set(q.OPERATIONS_ENUM.SQL,new V($ee)),e.set(q.OPERATIONS_ENUM.CSV_DATA_LOAD,new V(rs,vf.csvDataLoad)),e.set(q.OPERATIONS_ENUM.CSV_FILE_LOAD,new V(rs,vf.csvFileLoad)),e.set(q.OPERATIONS_ENUM.CSV_URL_LOAD,new V(rs,vf.csvURLLoad)),e.set(q.OPERATIONS_ENUM.IMPORT_FROM_S3,new V(rs,vf.importFromS3)),e.set(q.OPERATIONS_ENUM.CREATE_SCHEMA,new V(Ds.createSchema)),e.set(q.OPERATIONS_ENUM.CREATE_DATABASE,new V(Ds.createSchema)),e.set(q.OPERATIONS_ENUM.CREATE_TABLE,new V(Ds.createTable)),e.set(q.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new V(Ds.createAttribute)),e.set(q.OPERATIONS_ENUM.DROP_SCHEMA,new V(Ds.dropSchema)),e.set(q.OPERATIONS_ENUM.DROP_DATABASE,new V(Ds.dropSchema)),e.set(q.OPERATIONS_ENUM.DROP_TABLE,new V(Ds.dropTable)),e.set(q.OPERATIONS_ENUM.DROP_ATTRIBUTE,new V(Ds.dropAttribute)),e.set(q.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new V(Bf.describeSchema)),e.set(q.OPERATIONS_ENUM.DESCRIBE_DATABASE,new V(Bf.describeSchema)),e.set(q.OPERATIONS_ENUM.DESCRIBE_TABLE,new V(Bf.describeTable)),e.set(q.OPERATIONS_ENUM.DESCRIBE_ALL,new V(Bf.describeAll)),e.set(q.OPERATIONS_ENUM.DELETE,new V(zu.deleteRecord)),e.set(q.OPERATIONS_ENUM.ADD_USER,new V(Qu.addUser)),e.set(q.OPERATIONS_ENUM.ALTER_USER,new V(Qu.alterUser)),e.set(q.OPERATIONS_ENUM.DROP_USER,new V(Qu.dropUser)),e.set(q.OPERATIONS_ENUM.LIST_USERS,new V(Qu.listUsersExternal)),e.set(q.OPERATIONS_ENUM.LIST_ROLES,new V(Hf.listRoles)),e.set(q.OPERATIONS_ENUM.ADD_ROLE,new V(Hf.addRole)),e.set(q.OPERATIONS_ENUM.ALTER_ROLE,new V(Hf.alterRole)),e.set(q.OPERATIONS_ENUM.DROP_ROLE,new V(Hf.dropRole)),e.set(q.OPERATIONS_ENUM.USER_INFO,new V(Qu.userInfo)),e.set(q.OPERATIONS_ENUM.READ_LOG,new V(yee)),e.set(q.OPERATIONS_ENUM.ADD_NODE,new V(wee)),e.set(q.OPERATIONS_ENUM.UPDATE_NODE,new V(Xv)),e.set(q.OPERATIONS_ENUM.SET_NODE_REPLICATION,new V(Xv)),e.set(q.OPERATIONS_ENUM.REMOVE_NODE,new V(Iee)),e.set(q.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new V(Cee)),e.set(q.OPERATIONS_ENUM.PURGE_STREAM,new V(Dee)),e.set(q.OPERATIONS_ENUM.SET_CONFIGURATION,new V(s0.setConfiguration)),e.set(q.OPERATIONS_ENUM.CLUSTER_STATUS,new V(Lee.clusterStatus)),e.set(q.OPERATIONS_ENUM.CLUSTER_NETWORK,new V(Mee)),e.set(q.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new V(qg.setRoutes)),e.set(q.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new V(qg.getRoutes)),e.set(q.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new V(qg.deleteRoutes)),e.set(q.OPERATIONS_ENUM.EXPORT_TO_S3,new V(rs,jv.export_to_s3)),e.set(q.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new V(rs,zu.deleteFilesBefore)),e.set(q.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new V(rs,zu.deleteFilesBefore)),e.set(q.OPERATIONS_ENUM.EXPORT_LOCAL,new V(rs,jv.export_local)),e.set(q.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new V(Vg.handleGetJobsByStartDate)),e.set(q.OPERATIONS_ENUM.GET_JOB,new V(Vg.handleGetJob)),e.set(q.OPERATIONS_ENUM.GET_FINGERPRINT,new V(Gg.getFingerprint)),e.set(q.OPERATIONS_ENUM.SET_LICENSE,new V(Gg.setLicense)),e.set(q.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new V(Gg.getRegistrationInfo)),e.set(q.OPERATIONS_ENUM.RESTART,new V(e0.restart)),e.set(q.OPERATIONS_ENUM.RESTART_SERVICE,new V(e0.restartService)),e.set(q.OPERATIONS_ENUM.CATCHUP,new V(Kee)),e.set(q.OPERATIONS_ENUM.SYSTEM_INFORMATION,new V(vee.systemInformation)),e.set(q.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new V(rs,zu.deleteAuditLogsBefore)),e.set(q.OPERATIONS_ENUM.READ_AUDIT_LOG,new V(Nee)),e.set(q.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new V(r0.createTokens)),e.set(q.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new V(r0.refreshOperationToken)),e.set(q.OPERATIONS_ENUM.LOGIN,new V(n0.login)),e.set(q.OPERATIONS_ENUM.LOGOUT,new V(n0.logout)),e.set(q.OPERATIONS_ENUM.GET_CONFIGURATION,new V(s0.getConfiguration)),e.set(q.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new V(Vt.customFunctionsStatus)),e.set(q.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new V(Vt.getCustomFunctions)),e.set(q.OPERATIONS_ENUM.GET_COMPONENT_FILE,new V(Vt.getComponentFile)),e.set(q.OPERATIONS_ENUM.GET_COMPONENTS,new V(Vt.getComponents)),e.set(q.OPERATIONS_ENUM.SET_COMPONENT_FILE,new V(Vt.setComponentFile)),e.set(q.OPERATIONS_ENUM.DROP_COMPONENT,new V(Vt.dropComponent)),e.set(q.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new V(Vt.getCustomFunction)),e.set(q.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new V(Vt.setCustomFunction)),e.set(q.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new V(Vt.dropCustomFunction)),e.set(q.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new V(Vt.addComponent)),e.set(q.OPERATIONS_ENUM.ADD_COMPONENT,new V(Vt.addComponent)),e.set(q.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new V(Vt.dropCustomFunctionProject)),e.set(q.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new V(Vt.packageComponent)),e.set(q.OPERATIONS_ENUM.PACKAGE_COMPONENT,new V(Vt.packageComponent)),e.set(q.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new V(Vt.deployComponent)),e.set(q.OPERATIONS_ENUM.DEPLOY_COMPONENT,new V(Vt.deployComponent)),e.set(q.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new V(i0.readTransactionLog)),e.set(q.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new V(rs,i0.deleteTransactionLogsBefore)),e.set(q.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new V(o0.installModules)),e.set(q.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new V(o0.auditModules)),e.set(q.OPERATIONS_ENUM.GET_BACKUP,new V(Ds.getBackup)),e}a(Wee,"initializeOperationFunctionMap")});var qf=g((qEe,m0)=>{"use strict";var Kg=M(),Qee=J(),ju=Y(),{handleHDBError:Wg,hdb_errors:Ff}=ee(),{isMainThread:zee}=require("worker_threads"),{Readable:Jee}=require("stream"),E0=require("os"),Xee=require("util"),jee=IS(),Zee=Xee.promisify(jee.authorize),h0=f0(),{createGzip:ete,constants:tte}=require("zlib");function rte(e){let t=`Found an uncaught exception with message: ${e.message}. ${E0.EOL}Stack: ${e.stack} ${E0.EOL}Terminating ${zee?"HDB":"thread"}.`;console.error(t),ju.fatal(t),process.exit(1)}a(rte,"handleServerUncaughtException");function nte(e,t,r){if(ju[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:Ff.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(nte,"serverErrorHandler");function ste(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=Wg(new Error,"Invalid JSON.",Ff.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(Qee.isEmpty(e.body.operation)){let n=Wg(new Error,"Request body must include an 'operation' property.",Ff.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(ste,"reqBodyValidationHandler");function ite(e,t,r){let n;e.body.operation!==Kg.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Kg.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Kg.OPERATIONS_ENUM.LOGOUT?Zee(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{ju.warn(s),ju.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(Wg(s,i,Ff.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(ite,"authHandler");async function ote(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=h0.chooseOperation(e.body);let s=await h0.processLocalTransaction(e,n);if(s instanceof Jee&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(ete({level:tte.Z_BEST_SPEED})))}return s}catch(s){throw ju.error(s),s}}a(ote,"handlePostRequest");m0.exports={authHandler:ite,handlePostRequest:ote,handleServerUncaughtException:rte,serverErrorHandler:nte,reqBodyValidationHandler:ste}});var g0=g((kEe,T0)=>{"use strict";var ate=require("fastify-plugin"),{handlePostRequest:p0,authHandler:cte,reqBodyValidationHandler:ute}=qf();async function lte(e){e.decorate("hdbCore",{preValidation:[ute,cte],request:t=>S0(p0(t,response)),requestWithoutAuthentication:(t,r)=>S0(p0(t,r,!0))})}a(lte,"hdbCore");async function S0(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(S0,"convertAsyncIterators");T0.exports=ate(lte)});var O0=g((YEe,A0)=>{"use strict";var $Ee=require("fs"),Qg=Z();Qg.initSync();var{CONFIG_PARAMS:R0}=M(),_te=1024*1024*1024;function dte(e){let t=Qg.get(R0.HTTP_TIMEOUT),r=Qg.get(R0.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:_te,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(dte,"getServerOptions");A0.exports=dte});var y0=g((WEe,N0)=>{"use strict";var zg=Z();zg.initSync();var{CONFIG_PARAMS:b0}=M();function fte(){let e=zg.get(b0.HTTP_CORSACCESSLIST),t=zg.get(b0.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(fte,"getCORSOptions");N0.exports=fte});var C0=g((zEe,I0)=>{"use strict";var w0=Z();w0.initSync();var Ete=M();function hte(){return w0.get(Ete.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(hte,"getHeaderTimeoutConfig");I0.exports=hte});var Xg={};Ve(Xg,{customFunctionsServer:()=>Ste,ready:()=>$0,start:()=>pte});function pte(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Ls||(Ls=V0(t),je.http((await Ls).server));let o=await Ls,c=(0,Jg.dirname)(s),u=(0,Jg.dirname)(n);if(u.startsWith("/")&&(u=u.slice(1)),!D0.has(c)){D0.add(c);try{o.register(gte(c,u))}catch(_){if(_.message==="Root plugin has already booted")Ge.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:$0}}async function Ste(){try{Ge.info("In Custom Functions Fastify server"+process.cwd()),Ge.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ge.debug(`Custom Functions server process ${process.pid} starting up.`),await Tte();let e=B0.get(H0.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Ls=await V0(e)}catch(r){throw Ge.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ge.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ge.error(`Custom Functions ${process.pid} Error: ${e}`),Ge.error(e),process.exit(1)}}async function Tte(){try{Ge.info("Custom Functions starting configuration."),await x0.setUsersToGlobal(),Ge.info("Custom Functions completed configuration.")}catch(e){Ge.error(e)}}function gte(e,t){return async function(r){try{Ge.info("Custom Functions starting buildRoutes"),Ge.trace("Loading fastify routes folder "+e),(0,L0.existsSync)(e)&&r.register(v0.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Ge.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Ge.error(s.message):s&&Ge.error(s),o()})}catch(n){Ge.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function V0(e){Ge.info("Custom Functions starting buildServer.");let t=(0,F0.default)(e),r=(0,M0.default)(t);r.server.headersTimeout=(0,G0.default)(),r.setErrorHandler(k0.serverErrorHandler);let n=(0,q0.default)();return n&&r.register(U0.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(P0.default),await r.register(mte),await r.after(),ag(r),Ge.info("Custom Functions completed buildServer."),r}function $0(){if(Ls)return Ls.then?Ls.then(e=>e.ready()):Ls.ready()}var Jg,L0,M0,U0,P0,v0,B0,H0,Ge,mte,x0,F0,q0,G0,k0,Ls,D0,Y0=Oe(()=>{Jg=require("path"),L0=require("fs"),M0=B(require("fastify")),U0=B(require("@fastify/cors")),P0=B(Tg()),v0=B(require("@fastify/autoload")),B0=B(Z()),H0=B(M()),Ge=B(Y()),mte=B(g0()),x0=B(Zr()),F0=B(O0()),q0=B(y0()),G0=B(C0()),k0=B(qf());fa();Zt();D0=new Set;a(pte,"start");a(Ste,"customFunctionsServer");a(Tte,"setUp");a(gte,"buildRouteFolder");a(V0,"buildServer");a($0,"ready")});var jg={};Ve(jg,{start:()=>Rte});function Rte(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,J0.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){W0||(W0=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=K0.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,Q0.default)(s,(0,z0.realpathSync)(o))}}return i(s)},{runFirst:!0})),K0.set(r,n)}}}var Q0,z0,J0,K0,W0,X0=Oe(()=>{Q0=B(require("send")),z0=require("fs"),J0=B(require("serve-static")),K0=new Map;a(Rte,"start")});function bte(e,t=1,r){if(Zg++,(0,So.startWorker)("server/threads/threadServer.js",{name:Vf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function u(_){_.type===Vf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",u),o(n))}a(u,"onMessage"),n.on("message",u),n.on("error",c)});Ote.push(s),await s,Ia.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=kf.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=Ia.indexOf(n);o>-1&&Ia.splice(o,1)}if(a(i,"removeWorker"),Ca){let o=Ca;Ca=[];for(let c of o)tB[c.localPort](null,c)}}}),r){let n=setInterval(()=>{eR?eR=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,So.shutdownWorkers)(),Zg=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function rB(e=0,t){if(typeof e=="string")try{(0,$f.existsSync)(e)&&(0,$f.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Nte:r=yte(t):r=rR;let n=(0,Da.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=tB[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),eR=!0,r(o,(c,u)=>{if(!c){if(j0){let l=o._socket||new Da.Socket({handle:o,writable:!0,readable:!0});j0.deliverSocket(l,e,u),l.resume()}else Zg>0?(Ca.length===0&&setTimeout(()=>{Ca.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(),o.localPort=e,Ca.push(o)):(console.log("start up a dynamic thread to handle request"),bte(0));vr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new Da.Socket({handle:o,writable:!0,readable:!0});Dte(l,c,e)}vr(!0,"socket-routed")})};let s=Qc();tR.info(`HarperDB ${s.version} Server running on port ${e}`)}return n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function rR(e,t){let r,n=0;for(let s of Ia){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Gf)return Gf=i,t(r);n=i}Gf=0,t(r)}function Nte(e,t){let r={};e.getpeername(r);let n=r.address,s=La.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);rR(e,o=>{La.set(n,{worker:o,lastUsed:i}),t(o)})}function yte(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Da.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let u=o.toString("latin1").match(t)?.[1],_=La.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,s(_.worker);rR(n,d=>{La.set(u,{worker:d,lastUsed:l}),s(d,o)})})}a(r,"findByHeaderAffinity")}function Ite(){Gf=0;for(let e of Ia)e.expectedIdle=e.recentELU.idle+wte,e.requests=1;Ia.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Dte(e,t,r){let n=Cte++;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(),kf.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")),kf.delete(n)),s.event=="destroy"&&(e.destroy(),kf.delete(n))})}var So,Da,Vf,tR,$f,eB,Ate,Ia,Ca,tB,j0,Zg,Ote,eR,Gf,Z0,La,wte,kf,Cte,nB=Oe(()=>{So=B(Ze()),Da=require("net"),Vf=B(M()),tR=B(Y()),$f=require("fs");gs();eB=require("worker_threads"),Ate=B(Gi()),Ia=[],Ca=[],tB=[],Zg=0,Ote=[];eB.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(bte,"startHTTPWorker");a(rB,"startSocketServer");Gf=0;a(rR,"findMostIdleWorker");Z0=36e5,La=new Map;a(Nte,"findByRemoteAddressAffinity");a(yte,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of La)r.lastUsed+Z0<e&&La.delete(t)},Z0).unref();wte=1e3;a(Ite,"updateWorkerIdleness");(0,So.setMonitorListener)(Ite);kf=new Map,Cte=1;a(Dte,"proxySocket")});var oR={};Ve(oR,{Request:()=>nR,createReuseportFd:()=>Yf});var sB,nR,sR,iR,Yf,Kf=Oe(()=>{sB=require("os"),nR=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new iR(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._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new sR(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},sR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},iR=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,sB.platform)()!="win32"&&(Yf=require("node-unix-socket").createReuseportFd)});var cB=g((lhe,aB)=>{"use strict";var Lte=require("cluster"),To=Z();To.initSync();var oB=M(),ihe=require("util"),Ms=Y(),ohe=require("fs"),Mte=require("fastify"),ahe=Qc(),Ute=require("@fastify/cors"),Pte=require("@fastify/compress"),vte=require("@fastify/static"),Bte=Tg(),Hte=require("path"),{PACKAGE_ROOT:xte}=M(),Fte=Qs(),qte=J(),Gte=Zr(),kte=Gi(),{server:Vte}=(Zt(),te(yi)),{node_request_key:che}=(Kf(),te(oR)),{authHandler:$te,handlePostRequest:Yte,serverErrorHandler:Kte,reqBodyValidationHandler:Wte}=qf(),uhe=require("net"),{registerContentHandlers:Qte}=(fa(),te(kP)),zte=6e4,Jte=1024*1024*1024,Xte="TRUE",{CONFIG_PARAMS:Zu}=oB,Ma;aB.exports={hdbServer:iB,start:iB};async function iB(e){try{Ms.info("In Fastify server"+process.cwd()),Ms.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ms.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Lte.isMaster,await jte();let t=e.securePort>0;Ma=Zte(t),await Ma.ready(),e||(e={}),e.isOperationsServer=!0;try{Vte.http(Ma.server,e),Ma.server.closeIdleConnections||await Ma.listen({port:0,host:"::"})}catch(r){throw Ma.close(),Ms.error(r),Ms.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Ms.fatal(t),process.exit(1)}}a(iB,"operationsServer");async function jte(){Ms.trace("Configuring HarperDB process."),Fte.setSchemaDataToGlobal(),await Gte.setUsersToGlobal(),await kte.getLicense()}a(jte,"setUp");function Zte(e){Ms.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=ere(e),r=Mte(t);r.server.headersTimeout=rre(),r.setErrorHandler(Kte);let n=tre();n&&r.register(Ute,n),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Bte),r.register(Pte),r.register(vte,{root:Hte.join(xte,"studio/build-local")}),Qte(r);let s=To.get(oB.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!qte.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Wte,$te],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Yte(i,o)}),r.get("/health",()=>"HarperDB is running."),Ms.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Zte,"buildServer");function ere(e){let t=To.get(Zu.OPERATIONSAPI_NETWORK_TIMEOUT),r=To.get(Zu.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Jte,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(ere,"getServerOptions");function tre(){let e=To.get(Zu.OPERATIONSAPI_NETWORK_CORS),t=To.get(Zu.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Xte)&&(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}a(tre,"getCORSOpts");function rre(){return To.get(Zu.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??zte}a(rre,"getHeaderTimeoutConfig")});var SB=g((hhe,pB)=>{"use strict";var{decode:nre}=require("msgpackr"),{isMainThread:dhe,parentPort:sre,threadId:fhe}=require("worker_threads"),cR=Rt(),Us=tt(),ire=M(),Ei=Y(),uB=Z(),_B=M();Ze();var ore=hs(),{recordAction:are,recordActionBinary:cre}=(gs(),te(jc)),{publishToStream:ure}=cR,{ConsumerEvents:lre}=require("nats"),Ehe={durable:Us.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Us.WORK_QUEUE_CONSUMER_NAMES.deliver_group},_re,dre,fre,dB,fB;pB.exports={initialize:uR,workQueueListener:mB,setSubscription:Ere,setIgnoreOrigin:mre,getDatabaseSubscriptions:hre};async function uR(){fB=!0,Ei.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await cR.getNATSReferences();_re=e,dre=e.info.server_name,fre=t,dB=r}a(uR,"initialize");var Qf=new Map;function Ere(e,t,r){let n=Qf.get(e);n||Qf.set(e,n=new Map),n.set(t,r),fB||uR().then(mB)}a(Ere,"setSubscription");function hre(){return Qf}a(hre,"getDatabaseSubscriptions");var EB;function mre(e){EB=e}a(mre,"setIgnoreOrigin");var hB=100,lB=new Array(hB),Wf=0;async function mB(){let e=await dB.consumers.get(Us.WORK_QUEUE_CONSUMER_NAMES.stream_name,Us.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(sre?.on("message",async n=>{let{type:s}=n;s===_B.ITC_EVENT_TYPES.SHUTDOWN&&(t=!0,r&&r.close?.()&&r.close())});!t;){r=await e.consume(),(async()=>{for await(let n of await r.status())if(n.type===lre.HeartbeatsMissed){let s=n.data;Ei.trace(`${s} clustering ingest consumer heartbeats missed`),s===2&&(Ei.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let n of r)await lB[Wf],lB[Wf]=pre(n).catch(s=>{Ei.error(s)}),++Wf>=hB&&(Wf=0)}catch(n){Ei.error("Error consuming clustering ingest, restarting consumer",n)}cR.clearClientCache(),await uR()}}a(mB,"workQueueListener");async function pre(e){let t=nre(e.data);are(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,n=!1,s=uB.get(ire.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Us.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Us.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Us.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!EB),cre(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Us.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;Ei.trace("processing message:",o,c,_,(l?"records: "+l.map(b=>b?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Ei.trace(`messageProcessor nats msg id: ${e.headers.get(Us.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:T}=f||{},A=Qf.get(c)?.get(_);if(!A)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,A.send(t);else if(l.length===1&&!u)A.send({type:aR(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:T});else{let b=l.map((H,F)=>({type:aR(o),value:H,expiresAt:E,id:d?.[F],table:_}));for(;u;)b.push({type:aR(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;A.send({type:"transaction",writes:b,table:_,timestamp:p,onCommit:h,user:S,nodeName:T})}uB.get(_B.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&ure(e.subject.split(".").slice(0,-1).join("."),ore.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){Ei.error(o)}e.ack()}a(pre,"messageProcessor");function aR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(aR,"convertOperation")});var hR={};Ve(hR,{disableNATS:()=>Tre,publishToStream:()=>Zf,setNATSReplicator:()=>lR,setPublishToStream:()=>gre,setSubscription:()=>ER,start:()=>Sre});function Sre(){Jf.default.get(Xf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Are()}function Tre(e=!0){OB=e}function gre(e,t){Zf=e,ER=t}function Are(){if(OB||process.env._DISABLE_NATS)return;let e=yn(),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];lR(s,r,i)}}mR((r,n)=>{lR(r.tableName,r.databaseName,r),n&&NB(r)}),!TB&&(TB=!0)}function lR(e,t,r){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 Bt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Me],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Me]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Me],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Me],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Me]})}static defineSchema(i){NB(i)}static subscribe(){let i=new Tn;return ER(t,e,i),i}static subscribeOnThisThread(i){return i<Rre}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 zf(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=bB;return i}a(n,"getNATSTransaction")}function NB(e){let t=Jf.default.get(Xf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Zf(`${dR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,fR.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 gB,dR,fR,RB,AB,Jf,Xf,jf,OB,Zf,ER,Rre,bB,TB,zf,_R,yB=Oe(()=>{be();gn();gB=B(Rt()),dR=B(tt()),fR=B(hs());lc();RB=B(SB()),AB=B(Ir()),Jf=B(Z()),Xf=B(M()),jf=B(Y());a(Sre,"start");a(Tre,"disableNATS");Zf=gB.publishToStream,ER=RB.setSubscription;a(gre,"setPublishToStream");Rre=2;a(Are,"assignReplicationSource");a(lR,"setNATSReplicator");a(NB,"publishSchema");zf=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=Jf.default.get(Xf.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,f=l.operation=="put"?"upsert":l.operation;u||(jf.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&n.push(Zf(`${dR.SUBJECT_PREFIXES.TXN}.${s}.${u.table}`,(0,fR.createNatsTableStreamName)(s,u.table),void 0,u)?.catch(l=>{throw jf.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(n)}},_R=class extends zf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,AB.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};bB=new _R});var qB=g(go=>{"use strict";var{isMainThread:Ore,parentPort:rl,threadId:el}=require("worker_threads"),{Socket:bre,createServer:Nre}=require("net"),{createServer:yre,IncomingMessage:wre}=require("http"),{createServer:Ire}=require("https"),{readFileSync:Ua,unlinkSync:wB,existsSync:Cre}=require("fs"),Un=Y(),He=Z(),pr=M(),{server:rE}=(Zt(),te(yi)),{WebSocketServer:Dre}=require("ws"),{createServer:Lre}=require("tls"),{getTicketKeys:Mre,restartNumber:Ure,getWorkerIndex:IB}=Ze(),{Headers:UB}=(Fd(),te(dU)),{recordAction:tl,recordActionBinary:Pre}=(gs(),te(jc)),{Request:PB,createReuseportFd:CB}=(Kf(),te(oR)),{checkMemoryLimit:vre}=Gi(),vB=require("tls"),DB=vB.createSecureContext;vB.createSecureContext=function(e){if(!e.cert||!e.key)return DB(e);let t={...e};delete t.key,delete t.cert;let r=DB(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){Ure<=1&&Un.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:Ahe,CONFIG_PARAMS:Bre}=pr;He.initSync();var Hre=He.get(Bre.HTTP_SESSIONAFFINITY),ns={};go.registerServer=RR;go.httpServer=AR;go.deliverSocket=gR;go.startServers=BB;go.when_components_loaded=null;rE.http=AR;rE.request=Gre;rE.socket=kre;rE.ws=Vre;var pR={},eE={},xre,hi={},tE={},Fre=[],SR=[];function BB(){return go.when_components_loaded=OR().loadRootComponents(!0).then(()=>{rl?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)gR(n,r,s);else if(t.requestId)qre(t);else if(t.type===pr.ITC_EVENT_TYPES.SHUTDOWN){Un.trace("received shutdown request",el);for(let i in ns){let o=ns[i],c;o.closeIdleConnections&&(setInterval(()=>{o.closeIdleConnections()},25).unref(),setTimeout(()=>{o.closeAllConnections(),Un.info("Closed all http connections",i,el)},4e3).unref()),o.close?.(()=>{if(He.get(pr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&IB()==0)try{wB(He.get(pr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,el),o.cantCleanupProperly||Un.warn("Had to forcefully exit the thread",el),process.exit(0)},5e3).unref()})}if(process.env.DEV_MODE)try{require("inspector").close()}catch(i){console.error("Could not close debugger",i)}}}).ref();let e=[];if(CB&&!Hre)for(let t in ns){let r=ns[t];if(isNaN(t)&&IB()==0){Cre(t)&&wB(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),Un.info("Domain socket listening on "+t)}).on("error",i)}));continue}let n;try{n=CB(+t,"::")}catch(s){console.error(`Unable to bind to port ${t}`,s);continue}e.push(new Promise((s,i)=>{r.listen({fd:n},()=>{s(),Un.trace("Listening on port "+t,el)}).on("error",i)}))}Promise.all(e).then(()=>{rl?.postMessage({type:pr.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(BB,"startServers");Ore||BB();function gR(e,t,r){let n=e?.read?e:new bre({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=ns[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=ns[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Un.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(gR,"deliverSocket");var LB=new Map;function qre(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=LB.get(s),r){case"connection":i=gR(void 0,t),LB.set(s,i),i.write=(c,u,_)=>(rl.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(rl.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),rl.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}}a(qre,"proxyRequest");function RR(e,t,r=!0){!+t&&t!==He.get(pr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(He.get(pr.CONFIG_PARAMS.HTTP_PORT),10));let n=ns[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",MB),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else ns[t]=e;e.on("unhandled",MB)}a(RR,"registerServer");function HB(e){let t=[],r=parseInt(e?.securePort);return r&&t.push({port:r,secure:!0}),r=parseInt(e?.port),r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],He.get(pr.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:He.get(pr.CONFIG_PARAMS.HTTP_PORT),secure:He.get(pr.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),He.get(pr.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:He.get(pr.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&He.get(pr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:He.get(pr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(HB,"getPorts");function AR(e,t){for(let{port:r,secure:n}of HB(t))xB(r,n,t?.isOperationsServer),typeof e=="function"?SR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,RR(e,r,!1)),tE[r]=TR(SR,r),xre=TR(Fre,r)}a(AR,"httpServer");function xB(e,t,r){if(!hi[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:He.get(n+"_keepAliveTimeout"),headersTimeout:He.get(n+"_headersTimeout"),requestTimeout:He.get(n+"_timeout")},i=He.get(n+"_mtls"),o=He.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let u=He.get(n+"tls_privateKey"),_=He.get(n+"tls_certificate"),l=He.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:Ua(u),ciphers:He.get("tls_ciphers"),cert:Ua(_),ca:l&&Ua(l),rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:Mre()})}let c=vre();hi[e]=(t?Ire:yre)(s,async(u,_)=>{try{let d=performance.now(),f=new PB(u,_);r&&(f.isOperationsServer=!0);let E=await tE[e](f);if(!E){if(f._nodeResponse.statusCode)return;E=FB(f)}if(c?E.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):E.headers?.set?.("Server","HarperDB"),E.status===-1){for(let F of E.headers||[])_.setHeader(F[0],F[1]);return u.baseRequest=f,_.baseResponse=E,hi[e].emit("unhandled",u,_)}let h=E.status||200,p=performance.now(),S=p-d,T=E.body,A;if(!E.handlesHeaders){let F=E.headers||new UB;if(T?T.length>=0&&(typeof T=="string"?F.set("Content-Length",Buffer.byteLength(T)):F.set("Content-Length",T.length),A=!0):(F.set("Content-Length","0"),A=!0),F.append){let v=`hdb;dur=${S.toFixed(2)}`;E.wasCacheMiss&&(v+=", miss"),F.append("Server-Timing",v,!0)}_.writeHead(h,F&&(F[Symbol.iterator]?Array.from(F):F)),A&&_.end(T)}let b=f.handlerPath,H=f.method;if(tl(S,"duration",b,H,E.wasCacheMiss==null?void 0:E.wasCacheMiss?"cache-miss":"cache-hit"),Pre(h<400,"success",b,H),!A)if(T?.pipe){T.pipe(_),T.destroy&&_.on("close",()=>{T.destroy()});let F=0;T.on("data",v=>{F+=v.length}),T.on("end",()=>{tl(performance.now()-p,"transfer",b,H),tl(F,"bytes-sent",b,H)})}else T?.then?T.then(F=>{_.end(F)},l):_.end(T)}catch(d){l(d)}function l(d){let f=d.headers;_.writeHead(d.statusCode||500,f&&(f[Symbol.iterator]?Array.from(f):f)),_.end(d.toString()),d.statusCode?d.statusCode===500?Un.warn(d):Un.info(d):Un.error(d)}a(l,"onError")}),i&&(hi[e].mtlsConfig=i),t&&(hi[e].on("secureConnection",u=>{u._parent.startTime&&tl(performance.now()-u._parent.startTime,"tls-handshake",e),tl(u.isSessionReused(),"tls-reused",e)}),hi[e].isSecure=!0),RR(hi[e],e)}return hi[e]}a(xB,"getHTTPServer");function TR(e,t){let r=FB;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a(c=>s(c,o),"next_callback")}}return r}a(TR,"makeCallbackChain");function FB(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new UB}}a(FB,"unhandled");function Gre(e,t){AR(e,{requestOnly:!0,...t})}a(Gre,"onRequest");function kre(e,t){let r;if(t.securePort){let n=He.get("tls_privateKey"),s=He.get("tls_certificate"),i=t.mtls?.certificateAuthority||He.get("tls_certificateAuthority");r=Lre({ciphers:He.get("tls_ciphers"),key:Ua(n),cert:Ua(s),ca:i&&Ua(i),rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls},e),ns[t.securePort]=r}return t.port&&(r=Nre(e),ns[t.port]=r),r}a(kre,"onSocket");Object.defineProperty(wre.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.startsWith("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function Vre(e,t){let r;for(let{port:n,secure:s}of HB(t)){eE[n]||(eE[n]=new Dre({server:r=xB(n,s)}),eE[n].on("connection",async(c,u)=>{try{let _=new PB(u);_.isWebSocket=!0;let l=tE[n](_),d=u.headers["sec-websocket-protocol"]||"",f=pR[n];if(d){let E;for(let h=0;h<f.length;h++){let p=f[h];p.protocol===d&&(E=!0,p.listener(c,_,l))}if(E)return}for(let E=0;E<f.length;E++){let h=f[E];h.protocol||h.listener(c,_,l)}}catch(_){Un.warn("Error handling WebSocket connection",_)}}),eE[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=pR[n];o||(o=pR[n]=[]),o.push({listener:e,protocol:i}),tE[n]=TR(SR,n)}return r}a(Vre,"onWebSocket");function MB(e,t){t.writeHead(404),t.end(`Not found
27
- `)}a(MB,"defaultNotFound")});async function $B({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await bR.getResource(e,{});s=new wR(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await bR.get(e);i&&i.delete()}s=new sE(e,t)}return n&&(n.id=e,n.user={username:t?.username},nl.put(n)),s}function NR(){return nE++,nE>65500&&(nE=1),nE}function yR(e,t,r=e){let{topic:n,retain:s}=e;e.data=t,e.async=!0,e.authorize=!0;let i=ai.getMatch(n);if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return We(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var GB,Ro,kB,VB,bR,nl,nE,sE,wR,YB=Oe(()=>{be();yu();GB=B(Ir()),Ro=B(Y());Wi();kB=B(Ze()),VB=B(qB());Zt();bR=ot({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"}]}}]}),nl=ot({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,kB.getWorkerIndex)()===0&&(async()=>{await VB.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of nl.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await je.getUser(r.user.username)),We(r,()=>{try{yR(r,t)}finally{nl.delete(e.id,r)}})}})();a($B,"getSession");nE=1;a(NR,"getNextMessageId");sE=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),u,_;if(c>-1?(u=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let l=this.subscriptions.find(T=>T.topic===s),d;l?(d=i>0,l.end(),this.subscriptions.splice(this.subscriptions.indexOf(l),1)):d=i===2;let f={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Ro.trace)("Resuming subscription from",s,"from",o);let E=ai.getMatch(_);if(!E){let T=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw T.statusCode=404,T}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let T=f.url.slice(1);if(T.indexOf("#")>-1&&T.indexOf("#")!==T.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,T.indexOf("+")===T.length-1)f.onlyChildren=!0,f.url="/"+T.slice(0,T.length-1);else{let A=T.split("/"),b;for(let v=0;v<A.length;v++)if(A[v].indexOf("+")>-1)if(A[v]==="+")b=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&b)throw new Error("Filters can not be combined");let H=!0;A[A.length-1]==="#"&&(A.length--,H=!1),b&&(n=a(v=>{let P=v.id;if(!Array.isArray(P)||H&&P.length!==A.length)return!1;for(let z=0;z<A.length;z++)if(A[z]!=="+"&&A[z]!==P[z])return!1;return!0},"filter"));let F=A.indexOf("+");f.url="/"+(F>-1?A.slice(0,F):A).concat("").join("/")}}let h=E.path,p=E.Resource,S=await We(f,async()=>{let T=await p.subscribe(f);if(!T)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!T[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let A of T)try{let b;if(A.type&&A.type!=="put"&&A.type!=="delete"&&A.type!=="message"&&A.type!=="patch"||n&&!n(A))continue;r?(A.topic=s,b=this.needsAcknowledge(A)):(A.acknowledge?.(),b=NR());let H=A.id;Array.isArray(H)&&(H=da(H)),H==null&&(H=""),this.listener(h+"/"+H,A.value,b,t)}catch(b){(0,Ro.warn)(b)}})(),T});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=NR();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),!0}async publish(t,r){return t.user=this.user,yR(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};We(r,async()=>{if(!t){let n=await nl.get(this.sessionId,r);n?.doesExist()&&await yR(n,n.data,r)}await nl.delete(this.sessionId,r)}).catch(n=>{(0,Ro.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(yR,"publish");wR=class extends sE{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=NR(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks.get(t);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,Ro.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.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,GB.getNextMonotonicTime)()),(0,Ro.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),bR.put(this.sessionRecord)),t.qos}}});var IR={};Ve(IR,{bypassAuth:()=>$re,start:()=>Yre});function $re(){JB=!0}function Yre({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i,sessions:new Set},c,u=r?.mtls;return n&&(c=e.ws((_,l,d)=>{if(_.protocol==="mqtt"){let{onMessage:f,onClose:E}=QB(_,(h,p)=>{if(_.send(h),p&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},l,Promise.resolve(d).then(()=>l?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{(0,Sr.info)("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let l;if(u){if(_.authorized)try{let E=u.user;E!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),l=await e.getUser(E,null,null))}catch(E){(0,Sr.error)(E)}else if(u.required)return(0,Sr.info)(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!l&&JB&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,zB.getSuperUser)());let{onMessage:d,onClose:f}=QB(_,E=>_.write(E),null,l,o);_.on("data",d),_.on("close",f),_.on("error",E=>{(0,Sr.info)("Socket error",E)})},{port:t,securePort:s,mtls:u})),c}function QB(e,t,r,n,s){WB||(WB=!0,Xc(d=>{iE>0&&d.push({metric:"mqtt-connections",connections:iE,byThread:!0})}));let i;iE++;let o,c={protocolVersion:4},u=(0,aE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){iE--,i||(i=!0,o?.disconnect(),s.sessions.delete(o),en(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await je.getUser(d.username,d.password.toString(),r),(0,oE.get)(ss.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&KB.notify({username:n.username,status:ss.AUTH_AUDIT_STATUS.SUCCESS,type:ss.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,oE.get)(ss.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&KB.error({username:n.username,status:ss.AUTH_AUDIT_STATUS.FAILURE,type:ss.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return en(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let b=e.deserialize||(e.deserialize=_o(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?b(d.will.payload):void 0,delete d.will.payload}o=$B({user:n,...d}),o=await o,s.sessions.add(o)}catch(b){return(0,Sr.error)(b),en(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:b.code||5,returnCode:b.code||128})}en(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((b,H,F,v)=>{try{let P=b.indexOf("/",1),z=P>0?b.slice(0,P):b;f({cmd:"publish",topic:b,payload:E(H),messageId:F||Math.floor(Math.random()*1e8),qos:v.qos},z)}catch(P){(0,Sr.error)(P),o?.disconnect(),s.sessions.delete(o)}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let b of d.subscriptions){let H;try{H=(await o.addSubscription(b,b.qos>=1)).qos||0}catch(F){(0,Sr.error)(F),H=c.protocolVersion<5?128:F.statusCode===403?135:F.statusCode===404?143:128}h.push(H)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let b=[];for(let H of d.unsubscriptions)b.push(o.removeSubscription(H)?0:17);f({cmd:"unsuback",granted:b,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let p=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=_o(r?.headers.get?.("content-type"))),T=d.payload?.length>0?S(d.payload):void 0,A;try{A=await o.publish(d,T)}catch(b){(0,Sr.warn)(b),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:A===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.sessions.delete(o),en(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Sr.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,aE.generate)(h,c);t(S),vr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return ui(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var aE,zB,oE,ss,Sr,KB,JB,WB,iE,XB=Oe(()=>{aE=require("mqtt-packet");YB();zB=B(Zr());fa();gs();Zt();oE=B(Z()),ss=B(M()),Sr=B(Y()),KB=(0,Sr.loggerWithTag)("auth-event"),JB=(0,oE.get)(ss.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a($re,"bypassAuth");a(Yre,"start");iE=0;a(QB,"onSocket")});var Xd={};Ve(Xd,{component_errors:()=>va,loadComponent:()=>cE,loadComponentDirectories:()=>oH,setErrorReporter:()=>zre});function oH(e,t){t&&(DR=t),e&&(LR=e);let r=[];if((0,Pn.existsSync)(CR)){let s=(0,Pn.readdirSync)(CR,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,pt.join)(CR,o);r.push(cE(c,DR,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(cE(n,DR,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{iH=!0})}function zre(e){il=e}async function cE(e,t,r,n,s,i){if(!ZB.has(e)){ZB.set(e,!0),s&&(LR=s);try{let o;n&&(va=new Map);let c=(0,pt.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,Pn.existsSync)(c)?o=n?(0,sH.getConfigObj)():(0,eH.parseDocument)((0,Pn.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=MR;let u=[],_=n;for(let l in o){let d=o[l];if(va.set(n?l:(0,pt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let A=e,b;for(;!(0,Pn.existsSync)(b=(0,pt.join)(A,"node_modules",l));)if(A=(0,pt.dirname)(A),A.length<(0,nH.getHdbBasePath)().length){b=null;break}if(b)f=await cE(b,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Qre[l];if(!f)continue;u.push(f);let h=a(A=>(A.origin=r,ot(A)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,T=!p?.https&&p?.port;if(Pa.isMainThread&&(f=await f.startOnMainThread?.({server:je,ensureTable:h,port:T,securePort:S,resources:t,...d})||f,n&&p))for(let A of[T,S])try{if(+A&&!jB.includes(A)){let b=UR.get(PR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);b&&sl.default.warn("Session affinity is not recommended and may cause memory leaks"),(b||!Yf)&&(jB.push(A),rB(A,b))}}catch(b){console.error("Error listening on socket",A,b,l)}if(t.isWorker&&(f=await f.start?.({server:je,ensureTable:h,port:T,securePort:S,resources:t,...d})||f),LR.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,rH.handleHDBError)("Can not reference parent directories");let A=(0,pt.join)(e,d.files).replace(/\\/g,"/"),b=A.indexOf("/*");if(b>-1&&d.files!==MR[l]?.files&&!(0,Pn.existsSync)(A.slice(0,b)))throw new Error(`The path '${A.slice(0,b)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let H=(0,pt.basename)(e),F=d.path||"/";F=F.startsWith("/")?F:F.startsWith("./")?"/"+H+F.slice(2):F==="."?"/"+H:"/"+H+"/"+F;let v,P,z;if(d.root){let Q=d.root;Q.startsWith("/")&&(Q=Q.slice(1)),Q.endsWith("/")&&(Q=Q.slice(0,-1)),Q+="/",P=(0,pt.join)(e,Q)}else(z=A.indexOf("/*"))>-1&&(P=A.slice(0,z+1),v=(0,pt.relative)(e,P));let W=!1;if(Pa.isMainThread&&f.setupDirectory&&(W=await f.setupDirectory?.(F,P,t)),t.isWorker&&f.handleDirectory&&(W=await f.handleDirectory?.(F,P,t)),W)continue;for(let Q of await(0,tH.default)(A,{onlyFiles:!1,objectMode:!0})){let{path:se,dirent:pe}=Q;_=!0;let oe=(0,pt.relative)(e,se).replace(/\\/g,"/");if(v)if(oe.startsWith(v))oe=oe.slice(v.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${oe}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let xe=F+(F.endsWith("/")?"":"/")+oe;try{if(pe.isFile()){let le=await Wre(se);Pa.isMainThread&&await f.setupFile?.(le,xe,se,t),t.isWorker&&await f.handleFile?.(le,xe,se,t)}else Pa.isMainThread&&await f.setupDirectory?.(xe,se,t),t.isWorker&&await f.handleDirectory?.(xe,se,t)}catch(le){le.message=`Could not load ${pe.isFile()?"file":"directory"} '${se}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${le.message}`,il?.(le),((0,Ba.getWorkerIndex)()===0?console:sl.default).error(le),t.set(d.path||"/",new ol(le)),va.set(n?l:(0,pt.basename)(e),le.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,pt.basename)(e)}' due to: ${h.message}`,il?.(h),((0,Ba.getWorkerIndex)()===0?console:sl.default).error(h),t.set(d.path||"/",new ol(h),null,!0),va.set(n?l:(0,pt.basename)(e),h.message)}}if(Pa.isMainThread&&!iH&&i&&(0,Ba.watchDir)(e,async()=>oH()),o.extensionModule)return await Wl((0,pt.join)(e,o.extensionModule));if(!_&&t.isWorker){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;il?.(new Error(l)),((0,Ba.getWorkerIndex)()===0?console:sl.default).error(l),va.set((0,pt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,il?.(o),t.set("",new ol(o))}}}var Pn,pt,Pa,eH,UR,PR,tH,Ba,sl,rH,nH,Kre,sH,Wre,CR,LR,iH,DR,va,Qre,MR,jB,ZB,il,ol,jd=Oe(()=>{Pn=require("fs"),pt=require("path"),Pa=require("worker_threads"),eH=require("yaml"),UR=B(Z()),PR=B(M());zO();ZO();eb();nv();Y0();X0();tH=B(require("fast-glob")),Ba=B(Ze()),sl=B(Y());Th();Zt();rH=B(ee());gn();be();nB();nH=B(Z()),Kre=B(cB());Vd();yB();XB();sH=B(wr());Kf();({readFile:Wre}=Pn.promises),CR=UR.get(PR.CONFIG_PARAMS.COMPONENTSROOT),LR=new Map,va=new Map;a(oH,"loadComponentDirectories");Qre={REST:Sf,rest:Sf,graphqlSchema:Sh,jsResource:Rh,fastifyRoutes:Xg,login:Oh,static:jg,operationsApi:Kre,customFunctions:{},http:{},clustering:hR,authentication:wu,mqtt:IR},MR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(MR,"static",{value:{files:"web/**"}});jB=[],ZB=new Map;a(zre,"setErrorReporter");a(cE,"loadComponent");ol=class extends Bt{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}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 OR=g((Qhe,cH)=>{var{isMainThread:aH}=require("worker_threads"),{getTables:Jre}=(be(),te(Fe)),{loadComponentDirectories:Xre,loadComponent:jre}=(jd(),te(Xd)),{resetResources:Zre}=(yu(),te(_U)),ene=PT(),tne=wr(),{dirname:rne}=require("path"),{getConnection:nne}=Rt(),sne=Z(),ine=M(),vR=new Map;async function one(e=!1){!aH&&sne.get(ine.CONFIG_PARAMS.CLUSTERING_ENABLED)&&nne();try{aH&&await ene()}catch(n){console.error(n)}let t=Zre();Jre(),t.isWorker=e,await jre(rne(tne.getConfigFilePath()),t,"hdb",!0,vR),await Xre(vR,t);let r=[];for(let[n]of vR)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(one,"loadRootComponents");cH.exports.loadRootComponents=one});var Ze=g((Jhe,pi)=>{"use strict";var{Worker:ane,MessageChannel:cne,parentPort:is,isMainThread:qR,threadId:une,workerData:Ps}=require("worker_threads"),{PACKAGE_ROOT:lne}=M(),{join:dH,isAbsolute:_ne,extname:dne}=require("path"),{server:fH}=(Zt(),te(yi)),{watch:fne,readdir:Ene}=require("fs/promises"),{totalmem:uH}=require("os"),al=M(),EH=Z(),vs=Y(),{randomBytes:hne}=require("crypto"),{_assignPackageExport:mne}=require("../../index"),pne=M(),lH=1024*1024,mi=[],ln=[],Sne=50,GR=1e4,Tne="restart",hH="request_thread_info",mH="resource_report",pH="thread_info",SH="added-port",gne="ack",BR;mne("threads",ln);pi.exports={startWorker:HR,restartWorkers:VR,shutdownWorkers:Nne,workers:mi,setMonitorListener:Une,onMessageFromWorkers:yne,onMessageByType:bH,broadcast:Ine,broadcastWithAcknowledgement:Dne,setChildListenerByType:bne,getWorkerIndex:TH,getWorkerCount:gH,getTicketKeys:RH,setMainIsWorker:Ane,setTerminateTimeout:Rne,restartNumber:Ps?.restartNumber||1};ln.onMessageByType=bH;ln.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=ln.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var kR;function Rne(e){GR=e}a(Rne,"setTerminateTimeout");function TH(){return Ps?Ps.workerIndex:kR?0:void 0}a(TH,"getWorkerIndex");function gH(){return Ps?Ps.workerCount:kR?1:void 0}a(gH,"getWorkerCount");function Ane(e){kR=e}a(Ane,"setMainIsWorker");var uE;function RH(){return uE||(uE=qR?hne(48):Ps.ticketKeys,uE)}a(RH,"getTicketKeys");Object.defineProperty(fH,"workerIndex",{get(){return TH()}});Object.defineProperty(fH,"workerCount",{get(){return gH()}});var AH={[hH](e,t){Lne(t)},[mH](e,t){Mne(t,e)}};function HR(e,t={}){let r=process.constrainedMemory?.()||uH();r=Math.min(r,uH(),2e4*lH);let n=EH.get(al.CONFIG_PARAMS.MAXHEAPMEMORY)??Math.max(Math.floor(r/lH/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let u of ln){let _=new cne;_.existingPort=u,i.push(_),o.push(_.port2)}dne(e)||(e+=".js");let c=new ane(_ne(e)?e:dH(lne,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:t.threadCount,name:t.name,restartNumber:pi.exports.restartNumber,ticketKeys:RH()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:SH,port:u,threadId:c.threadId},[u]);return _E(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>HR(e,t),c.on("error",u=>{console.error("Worker error:",u),vs.error("Worker error:",u)}),c.on("exit",u=>{mi.splice(mi.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Sne?(t.unexpectedRestarts=c.unexpectedRestarts+1,HR(e,t)):vs.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{AH[u.type]?.(u,c)}),mi.push(c),vne(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(HR,"startWorker");var One=[al.THREAD_TYPES.HTTP];async function VR(e=null,t=2,r=!0){if(qR){if(r){let{loadRootComponents:o}=OR();await o()}pi.exports.restartNumber++,t<1&&(t=t*mi.length);let n=[],s=[];for(let o of mi.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;vs.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:pi.exports.restartNumber,type:al.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=One.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),GR*2).unref();o.on("exit",()=>{clearTimeout(l),n.splice(n.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(n.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===pne.ITC_EVENT_TYPES.CHILD_STARTED&&(vs.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(l)),_.off("message",f))},"startListener");vs.trace("Waiting for worker to start",_.threadId),_.on("message",f)});s.push(l),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}=Hd();r&&(e==="http"||!e)&&EH.get(al.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else is.postMessage({type:Tne,workerType:e})}a(VR,"restartWorkers");function bne(e,t){AH[e]=t}a(bne,"setChildListenerByType");function Nne(e){return VR(e,1/0,!1)}a(Nne,"shutdownWorkers");var OH=[];function yne(e){OH.push(e)}a(yne,"onMessageFromWorkers");var xR=new Map;function bH(e,t){let r=xR.get(e);r||xR.set(e,r=[]),r.push(t)}a(bH,"onMessageByType");var wne=10;async function Ine(e){let t=0;for(let r of ln)try{r.postMessage(e),t++>wne&&(t=0,await new Promise(setImmediate))}catch(n){vs.error("Unable to send message to worker",n)}}a(Ine,"broadcast");var lE=new Map,Cne=1;function Dne(e){return new Promise(t=>{let r=0;for(let n of ln)try{let s=Cne++,i=a(()=>{lE.delete(s),--r===0&&t(),n!==is&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,lE.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of lE)o.port===n&&o()})),n.postMessage(e),r++}catch(s){vs.error("Unable to send message to worker",s)}r===0&&t()})}a(Dne,"broadcastWithAcknowledgement");function Lne(e){e.postMessage({type:pH,workers:NH()})}a(Lne,"sendThreadInfo");function NH(){let e=Date.now();return mi.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(NH,"getChildWorkerInfo");function Mne(e,t){e.resources=t,e.resources.updated=Date.now()}a(Mne,"recordResourceReport");var FR;function Une(e){FR=e}a(Une,"setMonitorListener");var Pne=1e3,_H=!1;function vne(){_H||(_H=!0,setInterval(()=>{for(let e of mi){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}FR&&FR()},Pne).unref())}a(vne,"startMonitoring");var Bne=1e3;if(is){_E(is);for(let e=0,t=Ps.addPorts.length;e<t;e++){let r=Ps.addPorts[e];r.threadId=Ps.addThreadIds[e],_E(r)}setInterval(()=>{let e=process.memoryUsage();is.postMessage({type:mH,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Bne).unref(),BR=a(()=>new Promise((e,t)=>{is.on("message",r),is.postMessage({type:hH});function r(n){n.type===pH&&(is.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else BR=NH;pi.exports.getThreadInfo=BR;function _E(e,t){ln.push(e),e.on("message",r=>{if(r.type===SH)r.port.threadId=r.threadId,_E(r.port);else if(r.type===gne){let n=lE.get(r.id);n&&n()}else{for(let s of OH)s(r,e);let n=xR.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){vs.error(i)}}}).on("close",()=>{ln.splice(ln.indexOf(e),1)}).on("exit",()=>{ln.splice(ln.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(_E,"addPort");if(qR){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await Ene(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(dH(n,i.name));try{for await(let{filename:i}of fne(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await VR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");pi.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else is.on("message",async e=>{let{type:t}=e;t===al.ITC_EVENT_TYPES.SHUTDOWN&&(pi.exports.restartNumber=e.restartNumber,is.unref(),setTimeout(()=>{vs.warn("Thread did not voluntarily terminate",une),process.exit(0)},GR).unref())})});var kI={};Ve(kI,{AUDIT_STORE_OPTIONS:()=>vH,createAuditEntry:()=>jl,openAuditStore:()=>hE,readAuditEntry:()=>Dt,setAuditRetention:()=>xne,transactionKeyEncoder:()=>PH});function hE(e){let t=e.auditStore=e.openDB(LH.AUDIT_STORE_NAME,vH);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=dE){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed")return;let o=0,c;try{for(let{key:u,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-$R})){if((_[0]&15)===WR){let l=Dt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=Hne){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,$R/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,EE.getWorkerIndex)()===(0,EE.getWorkerCount)()-1&&s(dE),t}function xne(e,t=dE){$R=e,dE=t}function jl(e,t,r,n,s,i,o){let c=BH[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let u=1;n&&(n>1?Ha.setFloat64(0,n):_n.set(qh),u=9),f(0),f(t),d(r),Ha.setFloat64(u,e),u+=8,s?d(s):_n[u++]=0,_n[n?8:0]=c;let l=_n.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,xa.writeKey)(E,_n,u);let p=u-h-1;p>127?p>16383?(zR.error("Key or username was too large for audit entry",E),u=h+1,_n[h]=0):(_n.copyWithin(h+2,h+1,u),Ha.setUint16(h,p|32768),u++):_n[h]=p}function f(E){E<128?_n[u++]=E:E<16384?(Ha.setUint16(u,E|32768),u+=2):E<1056964608?(Ha.setUint32(u,E|3221225472),u+=4):(_n[u]=255,Ha.setUint32(u+1,E),u+=5)}}function Dt(e){try{let t=e.dataView||(e.dataView=new QR(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:BH[n&7],tableId:i,get recordId(){return DH(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?DH(e,l,d):void 0},getValue(f,E,h){if(n&YR||n&KR&&!E)return f.decoder.decode(e.subarray(t.position));if(n&KR&&h)return JR(f.getEntry(this.recordId),h,f)}}}catch{return zR.error("Reading audit entry error",e),{}}}function DH(e,t,r){let n=e.subarray(t,r);return(0,xa.readKey)(n,0,r-t)}var xa,fE,LH,MH,EE,UH,zR,_n,Ha,PH,vH,$R,Hne,dE,YR,KR,yH,WR,wH,IH,CH,BH,QR,Li=Oe(()=>{xa=require("ordered-binary"),fE=B(Z()),LH=B(lt()),MH=B(M()),EE=B(Ze()),UH=B(J());Po();zR=B(Y());mE();(0,fE.initSync)();_n=Buffer.alloc(1024),Ha=new DataView(_n.buffer,_n.byteOffset,1024),PH={writeKey(e,t,r){return e===mc?(t.set(mc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,xa.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,xa.readKey)(e,t,r)}},vH={encoding:"binary",keyEncoder:PH},$R=(0,UH.convertToMS)((0,fE.get)(MH.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Hne=1e3,dE=1e4;a(hE,"openAuditStore");a(xne,"setAuditRetention");YR=16,KR=32,yH=1,WR=2,wH=3,IH=4,CH=5,BH={put:yH|YR,[yH]:"put",delete:WR,[WR]:"delete",message:wH|YR,[wH]:"message",invalidate:IH,[IH]:"invalidate",patch:CH|KR,[CH]:"patch"};a(jl,"createAuditEntry");a(Dt,"readAuditEntry");QR=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return 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{debugger}}};a(DH,"readKeySafely")});var XR={};Ve(XR,{add:()=>pE,applyReverse:()=>HH,getRecordAtTime:()=>JR,rebuildUpdateBefore:()=>SE});function pE(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function SE(e,t){let r=null;for(let n in e)if(n in t){let s=t[n];if(s?.__op__){let i=e[n];if(i?.__op__)if(i.__op__===s.__op__)r||(r={}),r[n]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[n]=i,pE(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function HH(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=Fne[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=xH}}function JR(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let u=n.get(i),_=Dt(u);switch(_.type){case"put":s=_.getValue(r);break;case"patch":HH(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let u in s)s[u]===xH&&(o[u]=!0,c++);for(;c>0&&i>0;){let u=n.get(i),_=Dt(u),l;switch(_.type){case"put":l=_.getValue(r);break;case"patch":l=_.getValue(r);break}for(let d in l)o[d]&&(s[d]=l[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let u in o)s[u]=null;return s}var Fne,xH,mE=Oe(()=>{Li();a(pE,"add");pE.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};Fne={add:pE};a(SE,"rebuildUpdateBefore");a(HH,"applyReverse");xH={};a(JR,"getRecordAtTime")});function qr(e){return e[yt]||(e[yt]=Object.create(null))}function OE(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,u,_;if(o.resolve)_={get(){return o.resolve(this,this[Ne])},set(l){return o.set(this,l)},configurable:!0};else{switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new dn.ClientError(`${c} must be a string, attempt to assign ${l}`);qr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new dn.ClientError(`${c} must be a string, attempt to assign ${l}`);qr(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new dn.ClientError(`${c} must be a number, attempt to assign ${l}`);qr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new dn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);qr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new dn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);qr(this)[c]=l},"set");break;case"BigInt":u=a(function(l){if(!(typeof l=="bigint"||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=BigInt(l);else throw new dn.ClientError(`${c} must be a number, attempt to assign ${l}`);qr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new dn.ClientError(`${c} must be a boolean, attempt to assign ${l}`);qr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new dn.ClientError(`${c} must be a Date, attempt to assign ${l}`);qr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new dn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);qr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){qr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new dn.ClientError(`${c} must be an object, attempt to assign ${l}`);qr(this)[c]=l},"set")}_={get(){let l=this[yt];if(l&&c in l){let f=l[c];if(f?.__op__){let E=this[Re]?.[c];return f.update(E)}return f}let d=this[Re]?.[c];if(d&&typeof d=="object"){let f=FH(d,o);if(f)return l||(l=this[yt]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let u=this[yt];return u?.[o]!==void 0?u[o]:this[Re]?.[o]}),i("set",function(o,c){let u=n[o];if(u)return u.set.call(this,c);if(t.sealed)throw new dn.ClientError("Can not add a property to a sealed table schema");qr(this)[o]=c}),i("deleteProperty",function(o){qr(this)[o]=void 0}),i("toJSON",function(){let o=this[yt],c;for(let _ in o){c||(c=Object.assign({},this[Re]));let l=o[_];if(l?.__op__){let d=c[_];l=l.update(d)}c[_]=l}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Re])),Object.assign(c,this)),c||this[Re]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function FH(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){if(s?.[Re])throw new Error("Can not track an already tracked object, check for circular references");this[Re]=s}},OE(r,t)),new r(e)):new TE(e);case Array:let n=new RE(e.length);n[Re]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=FH(o,t?.elements)),n[s]=o}return n;default:return e}}function k_(e){let t=e[yt],r;for(let s in t){r||(r=Object.assign({},e[Re]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=k_(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Re])),Object.assign(r,e)),r||e[Re]}function Oo(e,t=e[yt]){let r;if(e[Re]&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Oo(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[Re]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=XR[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Oo(s);r[n]=s}return r?Object.freeze(r):e[Re]||e}function gE(e){let t=e[Re];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Ao]||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?.[Re]===s){if(gE(i))return!0}else return!0}}else{let r=e[yt];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[Re]===i){if(gE(s))return!0}else return!0}else return!0}}return!1}var dn,yt,TE,Ao,RE,AE,V_=Oe(()=>{gn();dn=B(ee());mE();yt=Symbol("own-data");a(qr,"getChanges");a(OE,"assignTrackedAccessors");a(FH,"trackObject");TE=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[Re])throw new Error("Can not track an already tracked object, check for circular references");this[Re]=t}};OE(TE,{});a(k_,"collapseData");a(Oo,"deepFreeze");a(gE,"hasChanges");Ao=Symbol.for("has-array-changes"),RE=class extends Array{static{a(this,"TrackedArray")}[Ao];constructor(t){super(t)}splice(...t){return this[Ao]=!0,super.splice(...t)}push(...t){return this[Ao]=!0,super.push(...t)}pop(){return this[Ao]=!0,super.pop()}unshift(...t){return this[Ao]=!0,super.unshift(...t)}shift(){return this[Ao]=!0,super.shift()}};RE.prototype.constructor=Array;AE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var lp={};Ve(lp,{CONTEXT:()=>Ne,ID_PROPERTY:()=>Me,IS_COLLECTION:()=>fn,RECORD_PROPERTY:()=>Re,Resource:()=>Bt,snake_case:()=>Gne,transformForSelect:()=>NE});function Gne(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function qH(e,t){if(cl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(cl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new ZR;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){cl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function Gr(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,u,_,l;if(r?(o?(l=i,o=o[Ne]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(l=s,c=l[this.primaryKey]??null,o=i[Ne]||i):l=i:(l=s,c=l[Me]??l[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[Ne]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(u=s,s[Symbol.iterator]){c=[],_=!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]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let E=c.indexOf("?");if(E>-1){let p=this.parseQuery(c.slice(E+1));u?u=Object.assign(p,u):u=p,c=c.slice(0,E)}let h=this.parsePath(c,o,u);h?.id!==void 0?(h.query&&(u?u=Object.assign(h.query,u):u=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(u?.ensureLoaded!=null||u?.async||_?(d=Object.assign({},t),u?.ensureLoaded!=null&&(d.ensureLoaded=u.ensureLoaded),u?.async&&(d.async=u.async),_&&(d.isCollection=!0)):d=t,o.transaction){let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)}else return d.resetTransaction=!0,We(o,()=>{let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)},d);function f(E){if(o.authorize){o.authorize=!1;let h=t.type==="read"?E.allowRead(o.user,u,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,l,o):E.allowUpdate(o.user,l,o):t.type==="create"?E.allowCreate(o.user,l,o):E.allowDelete(o.user,u,o);if(h?.then)return h.then(p=>{if(!p)throw new bE(o.user);return typeof l?.then=="function"?l.then(S=>e(E,u,o,S)):e(E,u,o,l)});if(!h)throw new bE(o.user)}return typeof l?.then=="function"?l.then(h=>e(E,u,o,h)):e(E,u,o,l)}a(f,"authorizeActionOnResource")}}function kr(e,t){let r=new VH.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 jR(e,t,r){let n=e[Re];if(n){let s=e[yt];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function NE(e,t){let r=t?.propertyResolvers,n=t[Ne],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):jR(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(c);let _=[],l=i(jR(u,r,n));for(let d of e)_.push(l(d));return _},"transform");let o=e.forceNulls;return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(f=>f&&typeof f=="object"?c(f):f);let _={},l=i(jR(u,r,n)),d;for(let f of e){let E=l(f);E===void 0&&o&&(E=null),E?.then?(d||(d=[]),d.push(E.then(h=>_[f.name||f]=h))):_[f.name||f]=E}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let u=s[c.name];if(!u){let l=r[c.name]?.definition?.tableClass;u=s[c.name]=NE(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var GH,kH,VH,Ne,Me,fn,Re,qne,Bt,bE,cl,ZR,gn=Oe(()=>{GH=require("crypto");lc();kH=require("../../index"),VH=B(ee());V_();Wi();hf();Ne=Symbol.for("context"),Me=Symbol.for("primary-key"),fn=Symbol("is-collection"),Re=Symbol("stored-record"),qne={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Bt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Me]=t;let n=r?.[Ne];this[Ne]=n!==void 0?n:r||null}static get=Gr(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null&&!c.selectApplied){let _=NE(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=Gr(function(t,r,n,s){if(Array.isArray(s)&&t[fn]){let i=[],o=n.authorize;for(let c of s){let u=t.constructor,_=u.getResource(c[u.primaryKey],n,{async:!0});_.then?i.push(_.then(l=>l.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):kr(t,"put")},{hasContent:!0,type:"update"});static patch=Gr(function(t,r,n,s){return t.patch?t.patch(s,r):kr(t,"patch")},{hasContent:!0,type:"update"});static delete=Gr(function(t,r,n,s){return t.delete?t.delete(r):kr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,GH.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),We(n,()=>{let i=new this(s,n),o=i.update?i.update(r):kr(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=Gr(function(t,r,n,s){return t.invalidate?t.invalidate(r):kr(t,"delete")},{hasContent:!1,type:"update"});static post=Gr(function(t,r,n,s){return t[Me]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=Gr(function(t,r,n,s){return t.connect?t.connect(s,r):kr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Gr(function(t,r,n,s){return t.subscribe?t.subscribe(r):kr(t,"subscribe")},{type:"read"});static publish=Gr(function(t,r,n,s){return t[Me]!=null&&t.update?.(),t.publish?t.publish(s,r):kr(t,"publish")},{hasContent:!0,type:"create"});static search=Gr(function(t,r,n,s){let i=t.search?t.search(r):kr(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=NE(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Gr(function(t,r,n,s){return t.search?t.search(s,r):kr(t,"search")},{hasContent:!0,type:"read"});static copy=Gr(function(t,r,n,s){return t.copy?t.copy(s,r):kr(t,"copy")},{type:"create"});static move=Gr(function(t,r,n,s){return t.move?t.move(s,r):kr(t,"move")},{type:"delete"});post(t){if(this[fn])return this.constructor.create(this[Me],t,this[Ne]);kr(this,"post")}static isCollection(t){return t?.[fn]}static coerceId(t){return t}static parseQuery(t){return Ef(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&qne[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:qH(t,this),isCollection:cl}}let i=qH(t,this);return cl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Ne],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(s=_?.find(l=>l.constructor===c),s)return s;_||u.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=u.find(_=>_[Me]===t&&_.constructor===c),s)return s;if(u.push(s=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Me],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[fn]=!0),s}subscribe(t){return new Tn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Tn}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[Me]}getContext(){return this[Ne]}};Bt.prototype[Ne]=null;(0,kH._assignPackageExport)("Resource",Bt);a(Gne,"snake_case");bE=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(qH,"pathToId");ZR=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Gr,"transactional");a(kr,"missingMethod");a(jR,"selectFromObject");a(NE,"transformForSelect")});function YH(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;Fa||((0,yE.onMessageByType)($H,l=>{KH(l.path)}),Fa=Object.create(null));let o=Fa[s]||(Fa[s]=[]);o.auditStore=e.auditStore,o.lastTxnTime==null&&(o.lastTxnTime=Date.now());let c=o[i];c||(c=o[i]=new Map,c.envs=o,c.tableId=i,c.store=e.primaryStore),t=da(t);let u=new tA(r);u.startTime=n;let _=c.get(t);return _?_.push(u):(c.set(t,_=[u]),_.tables=c,_.key=t),u.subscriptions=_,u}function KH(e,t){if(!Fa)return;let r=Fa[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(s){throw s.message+=" in "+e,s}let n;for(let{key:s,value:i}of r.auditStore.getRange({start:r.lastTxnTime,exclusiveStart:!0})){r.lastTxnTime=s;let o=Dt(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=da(o.recordId),d=0;do{let f=c.get(l);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=s){(0,eA.info)("omitting",u,h.startTime,s);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(n?n.push(h):n=[h]),h.txnInProgress=o.version),h.listener(u,o,s,p)}catch(p){console.error(p),(0,eA.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E):l=null,d++}while(!0)}if(n)for(let s of n)s.txnInProgress=null,s.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function WH(e,t){let r=t||e,n=r.env;if(t&&!t.cache&&(t.cache=new Map),!n.hasBroadcastListener){n.hasBroadcastListener=!0;let s=n.path;r.on("aftercommit",()=>{(0,yE.broadcast)({type:$H,path:s}),KH(s,!0)})}}var eA,yE,$H,Fa,Sme,tA,QH=Oe(()=>{eA=B(Y()),yE=B(Ze());lc();yu();Li();$H="transaction",Sme=Buffer.alloc(4096);a(YH,"addSubscription");tA=class extends Tn{static{a(this,"Subscription")}listener;subscriptions;startTime;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,r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(KH,"notifyFromTransactionData");a(WH,"listenToCommits")});var Pg={};Ve(Pg,{coerceType:()=>wE,makeTable:()=>DE,setServerUtilities:()=>Jne,updateResource:()=>IE});function DE(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:p}=e;p||(p=[]),WH(i,u);let S=Vh(i,n,u),T=0,A,b,H={},F=Promise.resolve(),v,P,z;for(let $ of p)($.assignCreatedTime||$.name==="__createdtime__")&&(v=$),($.assignUpdatedTime||$.name==="__updatedtime__")&&(P=$),$.expiresAt&&(z=$),$.isPrimaryKey&&(H=$);let W,Q=[],se=[],pe=1,oe=2,xe={},le={},wt=864e5,Ol,bl,Fs,mA=!1,VE,kx=i.getRange({start:!1,end:!1}).constructor,Vx=10,$x=6;E&&TA();class Qe extends Bt{static name=s;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=s;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=v;static updatedTimeProperty=P;static propertyResolvers;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,R){R&&(this.sourceOptions=R,(R.expiration||R.eviction||R.scanInterval)&&this.setTTLExpiration(R)),R?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),b=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let I=a(w=>{let y=this.sources.slice(0,-1);if(y=y.filter(U=>U[w]&&(!U[w].reliesOnPrototype||U.prototype[w])),y.length>0)if(y.length===1){let U=y[0];return(L,D,x)=>{if(L?.source!==U)return U[w](D,x,L)}}else return(U,L,D)=>{let x=[];for(let k of y){if(U?.source===k)break;x.push(k[w](L,D,U))}return Promise.all(x)}},"getApplyToIntermediateSource"),O=this.sources[this.sources.length-1],N=a(w=>{if(O[w]&&(!O[w].reliesOnPrototype||O.prototype[w]))return(y,U,L)=>{if(!y?.source)return O[w](U,L,y)}},"getApplyToCanonicalSource");return xe={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish")},le={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish"),invalidate:I("invalidate")},(async()=>{let w=!1,y=a(async(U,L)=>{let D=U.value,x=U.table?et[c][U.table]:Qe;if(c===vn.SYSTEM_SCHEMA_NAME&&(U.table===vn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||U.table===vn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(w=!0),U.id===void 0&&(U.id=D[x.primaryKey],U.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(U));U.source=m;let k=await x.getResource(U.id,L,qa);switch(U.type){case"put":return k._writeUpdate(D,!0,qa);case"patch":return k._writeUpdate(D,!1,qa);case"delete":return k._writeDelete(qa);case"publish":return k._writePublish(D,qa);case"invalidate":return k.invalidate(qa);default:ze.error("Unknown operation",U.type,U.id)}},"writeUpdate");try{let U=m.subscribe;U&&h==null&&(h=!0);let L=m.subscribeOnThisThread?m.subscribeOnThisThread((0,No.getWorkerIndex)()):(0,No.getWorkerIndex)()===0,D=U&&L&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(D){let x;for await(let k of D)try{if(!(k.type==="transaction"?k.writes[0]:k)){ze.error("Bad subscription event",k);continue}if(k.source=m,x)if(k.beginTxn)x.resolve();else{y(k,x);continue}if(k.type==="end_txn")continue;let _e=We(k,()=>{if(k.type==="transaction"){let re=[];for(let ae of k.writes)try{re.push(y(ae,k))}catch(ve){throw ve.message+=" writing "+JSON.stringify(ae)+" of event "+JSON.stringify(k),ve}return Promise.all(re)}else if(k.type==="define_schema"){let re=this.attributes.slice(0),ae;for(let ve of k.attributes)re.find(ne=>ne.name===ve.name)||(re.push(ve),ae=!0);ae&&(ot({table:s,database:c,attributes:re,origin:"cluster"}),hl.signalSchemaChange(new ml.SchemaEventMsg(process.pid,vn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return k.beginTxn?(x=k,y(k,k),new Promise(re=>{x.resolve=re})):y(k,k)});w&&(await _e,hl.signalUserChange(new ml.UserEventMsg(process.pid))),k.onCommit&&(_e?.then?_e.then(k.onCommit):k.onCommit())}catch(ie){ze.error("error in subscription handler",ie)}}}catch(U){ze.error(U)}})(),this}static getResource(m,R,I){let O=super.getResource(m,R,I);if(m!=null){Ya(m);try{if(O.hasOwnProperty(Re))return O;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let N=!I?.async||i.cache?.get(m),w=Rr(R),y=w.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return $E(m,R,{transaction:y},N,U=>{if(U?IE(O,U):O[Re]=null,R.onlyIfCached&&R.noCacheStore){if(!O.doesExist())throw new En.ServerError("Entry is not cached",504)}else if(I?.ensureLoaded){let L=YE(m,U,R,O);if(L)return w?.disregardReadTxn(),O[rA]=!0,sA(L,D=>(IE(O,D),O))}return O})}catch(N){throw N.message.includes("Unable to serialize object")&&(N.message+=": "+JSON.stringify(m)),N}}return O}ensureLoaded(){let m=YE(this[Me],this[Vr],this[Ne]);if(m)return this[rA]=!0,sA(m,R=>{this[Vr]=R,this[Re]=R.value,this[fl]=R.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,wt=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");wt=wt||(d+f)/4,WE()}static enableAuditing(m=!0){E=m,m&&TA(),Qe.audit=m}static coerceId(m){return m===""?null:wE(m,H)}static async dropTable(){if(delete et[c][s],c===o){for(let m of p)l.remove(Qe.tableName+"/"+m.name),r[m.name]?.drop();l.remove(Qe.tableName+"/"),i.drop(),await l.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));hl.signalSchemaChange(new ml.SchemaEventMsg(process.pid,vn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[fn])return this.search(m);if(this[Me]===null){if(m?.conditions)return this.search(m);let R=Qe.getRecordCount();return{recordCount:R.recordCount,estimatedRecordRange:R.estimatedRange,records:"./",name:s,database:c,attributes:p}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[Ne]?.returnNonexistent)return this}allowRead(m,R){let I=yl(m);if(I?.read){if(I.isSuperUser)return!0;let O=I.attribute_permissions,N=R?.select;if(O?.length>0||mA&&N){if(R||(R={}),N){let w=O?.length>0&&nA(O,"read");R.select=N.map(y=>{let U=y.name||y;if(!w||w[U]){let L=Fs[U]?.definition?.tableClass;if(L){if(y.name||(y={name:y}),!L.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else R.select=O.filter(w=>w.read&&!Fs[w.attribute_name]).map(w=>w.attribute_name);return R}else return!0}}allowUpdate(m,R){let I=yl(m);if(I?.update){let O=I.attribute_permissions;if(O?.length>0){let N=nA(O,"update");for(let w in R)if(!N[w])return!1;for(let w of O){let y=w.attribute_name;!w.update&&!(y in R)&&(R[y]=this.getProperty(y))}}return!0}}allowCreate(m,R){if(this[fn]){let I=yl(m);if(I?.insert){let O=I.attribute_permissions;if(O?.length>0){let N=nA(O,"insert");for(let w in R)if(!N[w])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return yl(m)?.delete}update(m,R){if(!Rr(this[Ne]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let O;return typeof m=="object"&&m&&(R?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[Re]={},this[yt]=m):(O=this[yt],O&&(m=Object.assign(O,m)),this[yt]=O=m)),this._writeUpdate(this[yt],R),this}addTo(m,R){if(typeof R=="number")this[ul]===JH?this.set(m,(+this.getProperty(m)||0)+R):(this[ul]||this.update(),this.set(m,new AE(R)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,R){if(typeof R=="number")return this.addTo(m,-R);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let R=this[Ne],I=this[Me];Ya(I),Rr(this[Ne]).addWrite({key:I,store:i,invalidated:!0,entry:this[Vr],nodeName:this[Ne]?.nodeName,before:xe.invalidate?.bind(this,R,I),beforeIntermediate:le.invalidate?.bind(this,R,I),commit:(N,w)=>{if(w?.version>N)return;let y=null;for(let U in r)y||(y={}),y[U]=this.getProperty(U);S(I,y,this[Vr],N,ll,E,this[Ne],0,"invalidate")}})}static evict(m,R,I){let O=this.Source,N;if(!((b||E)&&(!R||(N=i.getEntry(m),!N||!R)||N.version!==I))){if(b){if(i.hasLock(m,N.version))return;let w;for(let y in r)w||(w={}),w[y]=R[y];if(w)return S(m,w,N,I,_l,null,null,0,null,!0)}return i.ifVersion(I,()=>{Nl(m,R,null)}),E?S(m,null,N,I,_l,null,null,0,null,!0):i.remove(m,I)}}lock(){throw new Error("Not yet implemented")}static operation(m,R){return m.table||=s,m.schema||=c,rx.operation(m,R)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,R,I){let O=this[Ne],N=Rr(O),w=this[Me];Ya(w);let y=this[Vr];this[ul]=R?JH:Wne;let U={key:w,store:i,entry:y,nodeName:O?.nodeName,validate:L=>{m||(m=this[yt]),R||m&&gE(m)?(this.validate(m,!R),O?.source||(P&&(m[P.name]=P.type==="Date"?new Date(L):P.type==="String"?new Date(L).toISOString():L),R&&(t&&m[t]!==w&&(m[t]=w),v&&(y?.value?m[v.name]=y?.value[v.name]:m[v.name]=v.type==="Date"?new Date(L):v.type==="String"?new Date(L).toISOString():L),m=Oo(m)))):N.removeWrite(U)},before:R?xe.put?()=>xe.put(O,w,m):null:xe.patch?()=>xe.patch(O,w,m):xe.put?()=>xe.put(O,w,Oo(this)):null,beforeIntermediate:R?le.put?()=>le.put(O,w,m):null:le.patch?()=>le.patch(O,w,m):le.put?()=>le.put(O,w,Oo(this)):null,commit:(L,D,x)=>{if(x){if(O&&D?.version>(O.lastModified||0)&&(O.lastModified=D.version),this[Vr]=D,D?.value?.[Re])throw new Error("Can not assign a record to a record, check for circular references");R||(this[Re]=D?.value??null)}this[yt]=m,this[fl]=L;let k=D?.value,ie=m;if(this[ul]=0,D?.version>L)if(E){let ve=D.localTime,ne=D.version;for(;ie&&(ve>L||ne>L&&ve>0);){let X=u.get(ve),de=Dt(X);if(ne=de.version,ne>L)if(de.type==="patch"){let Se=de.getValue(i);ie=SE(ie,Se)}else(de.type==="put"||de.type==="delete")&&(ie=null);ve=de.previousLocalTime}}else R?ie=null:ie=SE(ie,k);let _e=Oo(this,ie);if(_e?.[Re])throw new Error("Can not assign a record to a record, check for circular references");this[Re]=_e;let re;R||(re=m),Nl(w,k,_e);let ae=R?"put":"patch";S(w,_e,D,L,0,E,O,O.expiresAt||(d?d+Date.now():0),ae,!1,re)}};N.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[fn]){for await(let R of this.search(m))(await Qe.getResource(R[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[Re]?this._writeDelete(m):!1}_writeDelete(m){let R=Rr(this[Ne]),I=this[Me];Ya(I);let O=this[Ne];return R.addWrite({key:I,store:i,resource:this,nodeName:O?.nodeName,before:xe.delete?.bind(this,O,I),beforeIntermediate:le.delete?.bind(this,O,I),commit:(N,w,y)=>{let U=w?.value;y&&(O&&w?.version>(O.lastModified||0)&&(O.lastModified=w.version),IE(this,w)),!(w?.version>N)&&(Nl(this[Me],U),ze.trace("Write delete entry",I,N),E||h?(S(I,null,this[Vr],N,0,E,this[Ne],0,"delete"),E||WE()):i.remove(this[Me]))}}),!0}search(m){let R=this[Ne],I=Rr(R);if(!m)throw new Error("No query provided");let O=m.conditions;O?O.length===void 0&&(O=O[Symbol.iterator]?Array.from(O):[O]):O=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Me]&&(O=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(O));let N,w={};function y(X,de){let Se;switch(de){case"and":case void 0:if(X.length<1)throw new Error('An "and" operator requires at least one condition');Se=!0;break;case"or":if(X.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+de)}let Bn=Se&&{},qs;for(let ke of X){if(ke.conditions){ke.conditions=y(ke.conditions,ke.operator);continue}let Pt=ke[0]??ke.attribute,Qr=Pt==null?H:Is(p,Pt);if(Qr){if(Se){let Hn=Dn(Pt),vt=Bn[Hn];vt?(vt.push(ke),qs=!0):Bn[Hn]=[ke]}(Qr.type||lg[ke.comparator])&&(ke[1]===void 0?ke.value=L(ke.value,Qr):ke[1]=L(ke[1],Qr))}else if(Pt!=null)throw(0,En.handleHDBError)(new Error,`${Pt} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return X;if(qs)for(let ke in Bn){let Pt=Bn[ke],Qr=Pt.length;if(Qr>1)for(let Hn=0;Hn<Qr;Hn++){let vt=Pt[Hn];if(vt.comparator==="ge"||vt.comparator==="greater_than_equal")for(let Gs=0;Gs<Qr;Gs++){let Io=Pt[Gs];(Io.comparator==="le"||Io.comparator==="less_than_equal")&&(vt.comparator="between",vt.value=[vt.value,Io.value],X.splice(X.indexOf(Io),1))}if(vt.comparator==="equals"||!vt.comparator){for(let Gs=0;Gs<Qr;Gs++)if(Gs!==Hn){let Io=Pt[Gs];X.splice(X.indexOf(Io),1)}break}}}return X}a(y,"prepareConditions");function U(X,de){if(m.enforceExecutionOrder)return X;for(let Se of X)Se.conditions&&(Se.conditions=U(Se.conditions,Se.operator));return X.length>1&&de!=="or"?(0,tx.sortBy)(X,ff(Qe)):X}a(U,"orderConditions");function L(X,de){return Array.isArray(X)?X.map(Se=>wE(Se,de)):wE(X,de)}a(L,"coerceTypedValues");let D=m.operator;(O.length>0||D)&&(O=y(O,D));let x=typeof m.sort=="object"&&m.sort,k;if(x&&D!=="or"){let X=x.attribute;if(N=O.find(de=>Dn(de.attribute)===Dn(X)),!N){if(!Is(p,X))throw(0,En.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not a defined attribute`,404);N={attribute:X},O.push(N)}N.descending=!!x.descending}O=U(O,D),x&&(O[0]===N?x.next&&(k={dbOrderedAttribute:x.attribute,attribute:x.next.attribute,descending:x.next.descending,next:x.next.next}):(N&&O.splice(O.indexOf(N),1),k=x));let ie=m.select;if(O.length===0&&(O=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:O,operator:D,postOrdering:k,selectApplied:!!ie};let _e=I.useReadTxn(),re=_g(O,D,Qe,_e,m,R,(X,de)=>pA(X,ie,R,de),w);(m.offset||m.limit!==void 0)&&(re=re.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0));let ae=m.ensureLoaded!==!1,ve=Qe.transformEntryForSelect(ie,R,w,ae,!0),ne=Qe.transformToOrderedSelect(re,ie,k,R,ve);return ne.onDone=()=>{ne.onDone=null,I.doneReadTxn()},ne.selectApplied=!0,ne.getColumns=()=>{if(ie){let X=[];for(let de of ie)de==="*"?X.push(...p.map(Se=>Se.name)):X.push(de.name||de);return X}return p.map(X=>X.name)},ne}static transformToOrderedSelect(m,R,I,O,N){let w=new kx;if(I){m=pA(m,R,O,null);let y;w.iterate=function(){let L,D=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),x,k=I.dbOrderedAttribute,ie,_e,re=!0;function ae(ne){let X=ne.next&&ae(ne.next),de=ne.descending;return(Se,Bn)=>{let qs=KE(Se,ne.attribute,O),ke=KE(Bn,ne.attribute,O),Pt=de?(0,yo.compareKeys)(ke,qs):(0,yo.compareKeys)(qs,ke);return Pt===0?X?.(Se,Bn)||0:Pt}}a(ae,"createComparator");let ve=ae(I);return{async next(){let ne;if(L)if(ne=L.next(),ne.done){if(x)return w.onDone&&w.onDone(),ne}else return{value:await N(ne.value)};y=[],ie&&y.push(ie);do if(ne=await D.next(),ne.done){if(x=!0,y.length)break;return w.onDone&&w.onDone(),ne}else{let X=ne.value;if(X?.then&&(X=await X),k){let de=KE(X,k,O);if(re)re=!1,_e=de;else if(de!==_e){_e=de,ie=X;break}}y.push(X)}while(!0);return I.isGrouped,y.sort(ve),L=y[Symbol.iterator](),ne=L.next(),ne.done?(w.onDone&&w.onDone(),ne):{value:await N(ne.value)}},return(){w.onDone&&w.onDone(),D.return()},throw(){w.onDone&&w.onDone(),D.throw()}}};let U=a(L=>{if(typeof R=="object"&&Array.isArray(L.attribute))for(let D=0;D<R.length;D++){let x=R[D],k;if(x.name===L.attribute[0]){for(k=x.sort||(x.sort={});k.next;)k=k.next;k.attribute=L.attribute.slice(1),k.descending=L.descending}else x===L.attribute[0]&&(R[D]=k={name:x,sort:{attribute:L.attribute.slice(1),descending:L.descending}})}L.next&&U(L.next)},"applySortingOnSelect");U(I)}else w.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),w=w.map(N);return w}static transformEntryForSelect(m,R,I,O,N){if(m&&(m===t||m?.length===1&&m[0]===t)){let L=a(D=>D?.key??D,"transform");return m===t?L:m.asArray?D=>[L(D)]:D=>({[t]:L(D)})}let w;O&&b&&!m?.every(L=>{let D;return typeof L=="object"?D=L.name:D=L,r[D]||D===t})&&(w=!0);let y,U=a(L=>{let D;if(L){if(VE=L,D=L.value||L.deref?.(),!D&&(L.key===void 0||L.deref)){if(L=$E(L.key??L,R,{transaction:Rr(R).getReadTxn(),lazy:m?.length<4},!1,x=>x),L?.then)return L.then(U);D=L?.value}if(w&&(L.metadataFlags&(ll|_l)||L.expiresAt&&L.expiresAt<Date.now())){let x=YE(L.key??L,L,R);if(x?.then)return x.then(U)}}if(D==null)return N?bo.SKIP:D;if(m&&!(m[0]==="*"&&m.length===1)){let x,k=a((_e,re)=>{let ae;typeof _e=="object"?ae=_e.name:ae=_e;let ve=Fs?.[ae],ne;if(ve){let X=I?.[ae];if(X)if(X.hasMappings){let Se=ve.from?D[ve.from]:Dn(L.key);ne=X.get(Se),ne||(ne=[])}else ne=X.fromRecord?.(D);else ne=ve(D,R,L);let de=a(Se=>{if(Se&&typeof Se=="object"){let Bn=ve.definition?.tableClass||Qe;y||(y={});let qs=y[ae]||(y[ae]=Bn.transformEntryForSelect(ae===_e?null:_e.select||(Array.isArray(_e)?_e:null),R,X,O));if(Array.isArray(Se)){let ke=[],Pt=Bn.transformToOrderedSelect(Se,_e.select,typeof _e.sort=="object"&&_e.sort,R,qs)[Symbol.asyncIterator](),Qr=a(vt=>{for(;!vt.done;){if(vt?.then)return vt.then(Qr);ke.push(vt.value),vt=Pt.next()}re(ke,ae)},"nextValue"),Hn=Qr(Pt.next());Hn&&(x||(x=[]),x.push(Hn));return}else if(Se=qs(Se),Se?.then){x||(x=[]),x.push(Se.then(ke=>re(ke,ae)));return}}re(Se,ae)},"handleResolvedValue");ne?.then?(x||(x=[]),x.push(ne.then(de))):de(ne);return}else ne=D[ae],ne&&typeof ne=="object"&&ae!==_e&&(ne=this.transformEntryForSelect(_e.select||_e,R,null)({value:ne}));re(ne,ae)},"selectAttribute"),ie;if(typeof m=="string")k(m,_e=>{ie=_e});else if(Array.isArray(m))if(m.asArray)ie=[],m.forEach((_e,re)=>{_e==="*"?m[re]=D:k(_e,ae=>ie[re]=ae)});else{ie={};let _e=m.forceNulls;for(let re of m)if(re==="*")for(let ae in D)ie[ae]=D[ae];else k(re,(ae,ve)=>{ae===void 0&&_e&&(ae=null),ie[ve]=ae})}else throw new En.ClientError("Invalid select"+m);return x?Promise.all(x).then(()=>ie):ie}return D},"transform");return U}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||ot({table:s,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let R=!m.rawEvents,I=YH(Qe,this[Me]??null,function(y,U,L,D){try{let x=U.getValue?.(i,R);if(!x&&U.type==="patch"&&R){let k=i.getEntry(y);k?.version===U.version?x=k.value:x=U.getValue?.(i,!0,L),U.type="put"}this.send({id:y,timestamp:L,value:x,version:U.version,type:U.type,beginTxn:D})}catch(x){ze.error(x)}},m.startTime||0,this[fn]);this[fn]&&(I.includeDescendants=!0,m.onlyChildren&&(I.onlyChildren=!0)),m.crossThreads===!1&&(I.crossThreads=!1),m.supportsTransactions&&(I.supportsTransactions=!0);let O=this[Me],N=m.previousCount;N>1e3&&(N=1e3);let w=m.startTime;if(this[fn]){if(w){if(N)throw new En.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:U}of u.getRange({start:w,exclusiveStart:!0})){let L=Dt(U);if(L.tableId!==n)continue;let D=L.recordId;(O==null||ZH(O,D))&&I.send({id:D,timestamp:y,...L}),I.startTime=y}}else if(N){let y=[];for(let{key:U,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let D=Dt(L);if(D.tableId!==n)continue;let x=D.recordId;if(O==null||ZH(O,x)){let k=D.getValue(i,R,U);if(y.push({id:x,timestamp:U,value:k,version:D.version,type:D.type}),--N<=0)break}}catch(D){ze.error("Error getting history entry",U,D)}for(let U=y.length;U>0;)I.send(y[--U]);y[0]&&(I.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:U,version:L,localTime:D}of i.getRange({start:O??!1,end:O==null?void 0:[O,yo.MAXIMUM_KEY],versions:!0}))U&&I.send({id:y,version:L,timestamp:D,value:U})}else{N&&!w&&(w=0);let y=this[Vr]?.localTime;if(y===kh&&(i.cache?.delete(O),this[Vr]=i.getEntry(O),ze.trace("re-retrieved record",y,this[Vr]?.localTime),y=this[Vr]?.localTime),ze.trace("Subscription from",w,"from",O,y),w<y){let U=[],L=y;do{let D=u.get(L);if(D){m.omitCurrent=!0;let x=Dt(D),k=x.getValue(i,R,L);R&&(x.type="put"),U.push({id:O,value:k,timestamp:L,...x}),L=x.previousLocalTime}else break;N&&N--}while(L>w&&N!==0);for(let D=U.length;D>0;)I.send(U[--D]);I.startTime=y}!m.omitCurrent&&this.doesExist()&&I.send({id:O,version:this[fl],timestamp:y,value:this})}return m.listener&&I.on("data",m.listener),I}doesExist(){return!!(this[Re]||this[ul])}publish(m,R){this._writePublish(m,R)}_writePublish(m,R){let I=Rr(this[Ne]),O=this[Me]||null;Ya(O);let N=this[Ne];I.addWrite({key:O,store:i,entry:this[Vr],nodeName:N?.nodeName,validate:()=>{this.validate(m)},before:xe.publish?.bind(this,N,O,m),beforeIntermediate:le.publish?.bind(this,N,O,m),commit:(w,y,U)=>{y===void 0&&h&&!E&&WE(),S(O,y?.value??null,y,y?.version||w,0,!0,N,y?.expiresAt,"message",!1,m)}})}validate(m,R){let I,O=a((N,w,y)=>{if(w.type&&N!=null)if(R&&N.__op__&&(N=N.value),w.properties){typeof N!="object"&&(I||(I=[])).push(`Property ${y} must be an object${w.type?" ("+w.type+")":""}`);let U=w.properties;for(let L=0,D=U.length;L<D;L++){let x=U[L],k=O(N[x.name],x,y+"."+x.name);k&&(N[x.name]=k)}}else switch(w.type){case"Int":(typeof N!="number"||N>>0!==N)&&(I||(I=[])).push(`Property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof N!="number"||!(Math.floor(N)===N&&Math.abs(N)<=9007199254740992))&&(I||(I=[])).push(`Property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof N!="number"&&(I||(I=[])).push(`Property ${y} must be a number`);break;case"ID":typeof N=="string"||N?.length>0&&N.every?.(U=>typeof U=="string")||(I||(I=[])).push(`Property ${y} must be a string, or an array of strings`);break;case"String":typeof N!="string"&&(I||(I=[])).push(`Property ${y} must be a string`);break;case"Boolean":typeof N!="boolean"&&(I||(I=[])).push(`Property ${y} must be a boolean`);break;case"Date":if(!(N instanceof Date)){if(typeof N=="string"||typeof N=="number")return new Date(N);(I||(I=[])).push(`Property ${y} must be a Date`)}break;case"BigInt":if(typeof N!="bigint"){if(typeof N=="string"||typeof N=="number")return BigInt(N);(I||(I=[])).push(`Property ${y} must be a bigint`)}break;case"Bytes":N instanceof Uint8Array||(I||(I=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(N)){if(w.elements)for(let U=0,L=N.length;U<L;U++){let D=N[U],x=O(D,w.elements,y+"[*]");x&&(N[U]=x)}}else(I||(I=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break}w.nullable===!1&&N==null&&(I||(I=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let N=0,w=p.length;N<w;N++){let y=p[N];if(!y.relationship&&(!R||y.name in m)){let U=O(m[y.name],y,y.name);U&&(m[y.name]=U)}}if(I)throw new En.ClientError(I.join(". "))}getUpdatedTime(){return this[fl]}wasLoadedFromSource(){return b?!!this[rA]:void 0}static async addAttributes(m){let R=p.slice(0);for(let I of m){if(!I.name)throw new En.ClientError("Attribute name is required");if(I.name.match(/[`/]/))throw new En.ClientError("Attribute names cannot include backticks or forward slashes");R.push(I)}return ot({table:s,database:c,schemaDefined:_,attributes:R}),Qe.indexingOperation}static async removeAttributes(m){let R=p.filter(I=>!m.includes(I.name));return ot({table:s,database:c,schemaDefined:_,attributes:R}),Qe.indexingOperation}static getRecordCount(m){let R=i.getStats().entryCount,I=5e3,O=1e3,N;R>I&&!m?.exactCount&&(N=O);let w=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:N}))y!=null&&w++;if(N){let y=w;w=0;for(let{value:ae}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:N}))ae!=null&&w++;let U=N*2,L=(w+y)/U,D=Math.pow((w-y+1)/N/2,2)+L*(1-L)/U,x=Math.max(Math.sqrt(D)*R,1),k=Math.round(L*R),ie=Math.max(k-1.96*x,0),_e=Math.min(k+1.96*x,R),re=Math.pow(10,Math.round(Math.log10(x)));return re>k&&(re=re/10),w=Math.round(k/re)*re,{recordCount:w,estimatedRange:[Math.round(ie),Math.round(_e)]}}return{recordCount:w}}static updatedAttributes(){Fs=this.propertyResolvers={$id:(m,R,I)=>({value:I.key}),$updatedtime:(m,R,I)=>I.version,$record:(m,R,I)=>I?{value:m}:m};for(let m of this.attributes){m.resolve=null;let R=m.relationship;if(R)if(mA=!0,R.to)m.elements?.definition?(Fs[m.name]=m.resolve=(I,O,N)=>{let w=I[R.from?R.from:t],y=m.elements.definition.tableClass;return N?Aa({attribute:R.to,value:w},Rr(O).getReadTxn(),!1,y).asArray:y.search([{attribute:R.to,value:w}],O).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,R.from&&(m.resolve.from=R.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(R.from){let I=m.definition||m.elements?.definition;I?(Fs[m.name]=m.resolve=(O,N,w)=>{let y=O[R.from];if(y!==void 0){if(m.elements){let U,L=y.map(D=>{let x=w?I.tableClass.primaryStore.getEntry(D,{transaction:Rr(N).getReadTxn()}):I.tableClass.get(D,N);return x?.then&&(U=!0),x});return R.filterMissing?U?Promise.all(L).then(D=>D.filter(ex)):L.filter(ex):U?Promise.all(L):L}return w?I.tableClass.primaryStore.getEntry(y,{transaction:Rr(N).getReadTxn()}):I.tableClass.get(y,N)}},m.set=(O,N)=>{if(Array.isArray(N)){let w=N.map(y=>y[Me]||y[I.tableClass.primaryKey]);O[R.from]=w}else{let w=N[Me]||N[I.tableClass.primaryKey];O[R.from]=w}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=R.from):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`)}OE(this,this)}static async deleteHistory(m=0){let R;for(let{key:I,value:O}of u.getRange({start:0,end:m}))await dl(),Dt(O).tableId===n&&(R=u.remove(I));await R}static async*getHistory(m=0,R=1/0){for(let{key:I,value:O}of u.getRange({start:m,end:R})){await dl();let N=Dt(O);N.tableId===n&&(yield{id:N.recordId,localTime:I,version:N.version,type:N.type,value:N.getValue(i,!0,I),user:N.user})}}static async getHistoryOfRecord(m){let R=[];if(m==null)throw new Error("An id is required");let I=i.getEntry(m);if(!I)return R;let O=I.localTime;if(!O)throw new Error("The entry does not have a local audit time");let N=0;do{await dl();let w=u.get(O);if(w){let y=Dt(w);R.push({id:y.recordId,localTime:O,version:y.version,type:y.type,value:y.getValue(i,!0,O),user:y.user}),O=y.previousLocalTime}else break}while(N<1e3&&O);return R.reverse()}static cleanup(){W?.remove()}}Qe.updatedAttributes();let Yx=Qe.prototype;return Yx[Kne]=!0,d&&Qe.setTTLExpiration(d/1e3),z&&Kx(),Qe;function Nl($,m,R){let I;for(let O in r){let N=r[O],w=N.isIndexing,y=R?.[O],U=m?.[O];if(y===U&&!w)continue;I=!0;let L=N.indexNulls,D=(0,El.getIndexedValues)(U,L);if(D){zH&&N.prefetch(D.map(x=>({key:x,value:$})),jH);for(let x=0,k=D.length;x<k;x++)N.remove(D[x],$)}if(D=(0,El.getIndexedValues)(y,L),D){zH&&N.prefetch(D.map(x=>({key:x,value:$})),jH);for(let x=0,k=D.length;x<k;x++)N.put(D[x],$)}}return I}a(Nl,"updateIndices");function Ya($){switch(typeof $){case"number":return!0;case"string":if($.length<659)return!0;if($.length>XH)throw new Error("Primary key size is too large: "+$.length);break;case"object":if($===null)return!0;break;case"bigint":if($<2n**64n&&$>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof $)}if((0,yo.writeKey)($,Qne,0)>XH)throw new Error("Primary key size is too large: "+$.length);return!0}a(Ya,"checkValidId");function $E($,m,R,I,O){let N=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),R.transaction?.isDone)return O(null,$);let w=i.getEntry($,R);return w&&m&&(w?.version>(m.lastModified||0)&&(m.lastModified=w.version),w?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=w.localTime)),O(w,$)},"whenPrefetched");return I?N():pe>0?(pe--,N()):new Promise((w,y)=>{pe===0?(pe--,i.prefetch([$],()=>{U(),L()})):(Q.push($),se.push(L),Q.length>$x&&(pe--,U()));function U(){if(Q.length>0){let D=se;i.prefetch(Q,()=>{pe===-1?U():pe++;for(let x of D)x()}),Q=[],se=[],oe>2&&oe--}else pe=oe,oe<Vx&&oe++}a(U,"prefetch");function L(){try{w(N())}catch(D){y(D)}}a(L,"load")})}a($E,"loadLocalRecord");function yl($){if(!$?.role)return;let m=$.role.permission;if(m.super_user)return zne;let R=m[c],I,O=R?.tables;if(O)return O[s];if(c==="data"&&(I=m[s])&&!I.tables)return I}a(yl,"getTablePermissions");function YE($,m,R,I){if(b){let O;if(R.noCache?O=!0:(m?(!m.value||m.metadataFlags&(ll|_l)||m.expiresAt&&m.expiresAt<Date.now())&&(O=!0):O=!0,en(!O,"cache-hit",s)),O){let N=SA($,m,R).then(w=>(w?.value?.[Re]&&ze.error("Can not assign a record with a record property"),R&&(w?.version>(R.lastModified||0)&&(R.lastModified=w.version),R.lastRefreshed=Date.now()),w));if(R?.onlyIfCached||m?.value&&I?.allowStaleWhileRevalidate?.(m,$)){if(N.catch(w=>ze.warn(w)),R?.onlyIfCached&&!I.doesExist())throw new En.ServerError("Entry is not cached",504);return}else return N}}}a(YE,"ensureLoadedFromSource");function Rr($){let m=$?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let R=m.next;if(!R)return m=m.next=new Ki,m.lmdbDb=i,m;m=R}while(!0)}else return new q_}a(Rr,"txnForContext");function KE($,m,R){if(!$)return;VE=$;let I=$.value||$.deref?.()||(VE=i.getEntry($.key))?.value;if(typeof m=="object"){let N=Fs,w=I;for(let y=0,U=m.length;y<U;y++){let L=m[y],D=N?.[L];w=D&&w?D(w,R,!0)?.value:w?.[L],N=D?.definition?.tableClass?.propertyResolvers}return w}let O=Fs[m];return O?O(I,R):I[m]}a(KE,"getAttributeValue");function pA($,m,R,I){let O=Rr(R).getReadTxn(),N=I?.length,w={transaction:O,lazy:N>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},y;function U(L,D){let x=L?.value;if(!x)return bo.SKIP;for(let k=0;k<N;k++)if(!y?.includes(k)&&!I[k](x,L))return bo.SKIP;return D!==void 0&&(L.key=D),L}if(a(U,"processEntry"),N>0||!$.hasEntries){let L=$.map(D=>{if(y=null,typeof D=="object"&&D.key!==void 0)return N>0?U(D):D;if(D==null)return bo.SKIP;for(let x=0;x<N;x++){let ie=I[x].idFilter;if(ie){if(!ie(D))return bo.SKIP;y||(y=[]),y.push(x)}}return $E(D,R,w,!1,U)});return Array.isArray($)&&(L=L.filter(D=>D!==bo.SKIP)),L.hasEntries=!0,L}return $}a(pA,"transformToEntries");async function SA($,m,R){let I=m?.metadataFlags,O=m?.version,N,w;if(!i.attemptLock($,O,()=>{clearTimeout(w);let D=i.getEntry($);!D||!D.value||D.metadataFlags&(ll|_l)?N(SA($,i.getEntry($),R)):N(D)}))return new Promise(D=>{N=D,w=setTimeout(()=>{i.unlock($,O)},Yne)});let y=m?.value,U={requestContext:R,replacingRecord:y,replacingVersion:O,source:null,resourceCache:R?.resourceCache},L=R?.responseHeaders;return new Promise((D,x)=>{let k;sA(We(U,async ie=>{let _e=performance.now(),re,ae,ve;try{for(let Se of Qe.sources)if(Se.get&&(!Se.get.reliesOnPrototype||Se.prototype.get)&&(U.source=Se,re=await Se.get($,U),re))break;ve=I&ll;let X=U.lastModified||ve&&O;ae=ve||X>O||!y,X||(X=(0,El.getNextMonotonicTime)());let de=performance.now()-_e;if(vr(de,"cache-resolution",s),L&&L.append("Server-Timing",`cache-resolve;dur=${de.toFixed(2)}`),ie.timestamp=X,d&&!U.expiresAt&&(U.expiresAt=Date.now()+d),re){if(typeof re!="object")throw new Error("Only objects can be cached and stored in tables");typeof re.toJSON=="function"&&(re=re.toJSON()),t&&re[t]!==$&&(re[t]=$)}k=!0,D({version:X,value:re})}catch(X){X.message+=` while resolving record ${$} for ${s}`,y&&((X.code==="ECONNRESET"||X.code==="ECONNREFUSED"||X.code==="EAI_AGAIN")&&!R?.mustRevalidate||R?.staleIfError&&(X.statusCode===500||X.statusCode===502||X.statusCode===503||X.statusCode===504))?(D({version:O,value:y}),ze.trace(X.message,"(returned stale record)")):x(X),U.transaction.abort();return}if(R?.noCacheStore){U.transaction.abort();return}Rr(U).addWrite({key:$,store:i,entry:m,nodeName:"source",commit:(X,de)=>{if(de?.version!==O)return;let Se=Nl($,y,re);re?(le.put?.(U,$,re),S($,re,de,X,0,E&&ae||null,U,U.expiresAt,"put",!!ve)):(le.delete?.(U,$),E||h?S($,null,de,X,0,E&&ae||null,U,0,"delete",!!ve):i.remove($,O))}})}),()=>{i.unlock($,O)},ie=>{i.unlock($,O),k&&ze.error("Error committing cache update",ie)})})}a(SA,"getFromSource");function WE(){if(wt!==Ol&&(Ol=wt,(0,No.getWorkerIndex)()===(0,No.getWorkerCount)()-1)){if(bl&&clearTimeout(bl),!wt)return;let $=new Date;$.setMonth(0),$.setDate(1),$.setHours(0),$.setMinutes(0),$.setSeconds(0);let m=Math.ceil((Date.now()-$.getTime())/wt)*wt+$.getTime(),R=a(I=>{ze.trace(`Scheduled next cleanup scan at ${new Date(I)}ms`),bl=setTimeout(()=>F=F.then(async()=>{if(R(Math.max(I+wt,Date.now())),i.rootStore.status!=="open"){clearTimeout(bl);return}let O=50,N=new Array(O),w=0;ze.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:U,value:L,version:D,expiresAt:x}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let k;L===null&&!E&&D+$ne<Date.now()?k=i.remove(U,D):x&&x+f<Date.now()&&(k=Qe.evict(U,L,D),y++),k&&(await N[w],N[w]=k.catch(ie=>{ze.error("Cleanup error",ie)}),++w>=O&&(w=0)),await dl()}ze.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){ze.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");R(m)}}a(WE,"scheduleCleanup");function TA(){W=u?.addDeleteRemovalCallback(n,$=>{let m=i.getEntry($);m?.value===null&&i.remove($,m.version)})}a(TA,"addDeleteRemoval");function Kx(){(0,No.getWorkerIndex)()===0&&setInterval(async()=>{try{let $=z.name,m=r[$];if(!m)throw new Error(`expiresAt attribute ${z} must be indexed`);for(let{value:R}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let I=i.getEntry(R);I?.value?.[$]<Date.now()&&Qe.evict(R,I.value,I.version),await dl()}}catch($){ze.error("Error in evicting old records",$)}},Vne).unref()}a(Kx,"runRecordExpirationEviction")}function nA(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 jH(){}function Jne(e){rx=e}function wE(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Date"?(typeof e!="number"&&!Xne.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,CE.autoCast)(e):e}function ZH(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;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 sA(e,t,r){return e?.then?e.then(t,r):t(e)}function IE(e,t){e[Vr]=t,e[Re]=t?.value??null,e[fl]=t?.version}function ex(e){return e!=null}var vn,bo,El,tx,pl,En,hl,ml,ze,yo,No,CE,kne,rx,Vne,$ne,zH,Yne,fl,Kne,Vr,ul,JH,Wne,rA,qa,ll,_l,Qne,XH,zne,vme,Xne,dl,Lf=Oe(()=>{vn=B(M()),bo=require("lmdb"),El=B(Ir()),tx=require("lodash");gn();Mp();pl=B(Z());QH();En=B(ee()),hl=B(ms()),ml=B(bn());be();hf();ze=B(Y());V_();Wi();yo=require("ordered-binary"),No=B(Ze());Li();CE=B(J());Po();gs();mE();kne=new Uint8Array(9);kne[8]=192;Vne=6e4,$ne=864e5;pl.initSync();zH=pl.get(vn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Yne=1e4,fl=Symbol.for("version"),Kne=Symbol.for("incremental-update"),Vr=Symbol("entry"),ul=Symbol("is-saving"),JH=1,Wne=2,rA=Symbol("loaded-from-source"),qa={isNotification:!0,ensureLoaded:!1},ll=1,_l=8,Qne=Buffer.allocUnsafeSlow(8192),XH=1978,zne={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},vme=(0,CE.convertToMS)(pl.get(vn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(DE,"makeTable");a(nA,"attributesAsObject");a(jH,"noop");a(Jne,"setServerUtilities");Xne=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(wE,"coerceType");a(ZH,"isDescendantId");dl=a(()=>new Promise(setImmediate),"rest");a(sA,"when");a(IE,"updateResource");a(ex,"exists")});var Fe={};Ve(Fe,{database:()=>$c,databases:()=>et,dropDatabase:()=>Hp,dropTableMeta:()=>nse,getDatabases:()=>yn,getTables:()=>jne,onUpdatedTable:()=>mR,readMetaDb:()=>Sl,resetDatabases:()=>Zne,table:()=>ot,tables:()=>Cr});function jne(){return vE||yn(),Cr||{}}function yn(){if(vE)return et;vE=!0,Va=new Map;let e=(0,zt.getHdbBasePath)()&&(0,Je.join)((0,zt.getHdbBasePath)(),Yr.DATABASES_DIR_NAME),t=(0,zt.get)(Yr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,zt.get)(Yr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,$r.existsSync)(e)?e:(0,Je.join)((0,zt.getHdbBasePath)(),Yr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,$r.existsSync)(e))for(let r of(0,$r.readdirSync)(e,{withFileTypes:!0})){let n=(0,Je.basename)(r.name,".mdb");r.isFile()&&(0,Je.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Sl((0,Je.join)(e,r.name),null,n)}if((0,$r.existsSync)((0,ka.getBaseSchemaPath)())){for(let r of(0,$r.readdirSync)((0,ka.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Je.join)((0,ka.getBaseSchemaPath)(),r.name),s=(0,Je.join)((0,ka.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,$r.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Je.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Je.join)(s,i.name);Sl((0,Je.join)(n,i.name),(0,Je.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,$r.existsSync)(s))for(let o of(0,$r.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,Je.extname)(o.name).toLowerCase()===".mdb"&&Sl((0,Je.join)(s,o.name),(0,Je.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],u=(0,Je.join)(c.path,(0,Je.basename)(o+".mdb"));(0,$r.existsSync)(u)&&Sl(u,o,r,null,!0)}}for(let r in et){let n=Va.get(r);if(n){let s=et[r];r.includes("delete")&&hn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(hn.trace(`delete table class ${i}`),delete s[i])}else if(delete et[r],r==="data"){for(let s in Cr)delete Cr[s];delete Cr[BE]}}return Va=null,et}}function Zne(){vE=!1;for(let[,e]of Si)e.needsDeletion=!0;yn();for(let[e,t]of Si)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Si.delete(e));return et}function Sl(e,t,r=aA,n,s){let i=new iA.default(e,!1);try{let o=Si.get(e);o?o.needsDeletion=!1:(o=(0,ME.open)(i),Si.set(e,o));let c=new wo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(LE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,$r.existsSync)(n)&&(i.path=n,_=(0,ME.open)(i),_.isLegacy=!0):_=hE(o));let l=ox(r),d=l[BE],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let T=f.get(p);T||f.set(p,T={attributes:[]}),(S==null||h.is_hash_attribute)&&(T.primary=h),S!=null&&T.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let Q of p)if(Q.is_hash_attribute||Q.isPrimaryKey){S=Q;break}if(!S){hn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let T=l[E],A={},b=[],H,F,v=typeof S.audit=="boolean"?S.audit:(0,zt.get)(Yr.CONFIG_PARAMS.LOGGING_AUDITLOG),P=S.trackDeletes,z=S.expiration,W=S.eviction;if(T)A=T.indices,b=T.attributes,T.schemaVersion++;else{H=S.tableId,H?H>=(u.get(Ga)||0)&&u.putSync(Ga,H+1):(S.tableId=H=u.get(Ga),H||(H=1),u.putSync(Ga,H+1),u.putSync(S.key,S));let Q=new wo.default(!S.is_hash_attribute,S.is_hash_attribute);F=e_(o.openDB(S.key,Q)),F.rootStore=o,F.tableId=H}for(let Q of p){Q.attribute=Q.name;try{if(!Q.is_hash_attribute&&(Q.indexed||Q.attribute&&!Q.name)){if(!A[Q.name]){let pe=new wo.default(!Q.is_hash_attribute,Q.is_hash_attribute);A[Q.name]=o.openDB(Q.key,pe),A[Q.name].indexNulls=Q.indexNulls}let se=b.find(pe=>pe.name===Q.name);se?b.splice(b.indexOf(se),1,Q):b.push(Q)}}catch(se){hn.error("Error trying to update attribute",Q,b,A,se)}}if(!T){T=ax(l,E,DE({primaryStore:F,auditStore:_,audit:v,expirationMS:z&&z*1e3,evictionMS:W&&W*1e3,trackDeletes:P,tableName:E,tableId:H,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:A,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),T.schemaVersion=1;for(let Q of cA)Q(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function ox(e){let t=et[e];if(t||(e==="data"?t=et[e]=Cr:e==="system"?Object.defineProperty(et,"system",{value:t=Object.create(null),configurable:!0}):t=et[e]=Object.create(null)),Va&&!Va.has(e)){let r=new Set;t[BE]=r,Va.set(e,r)}return t}function ax(e,t,r){return e[t]=r,r}function $c({database:e,table:t}){e||(e=aA),yn();let r=ox(e),n=(0,Je.join)((0,zt.getHdbBasePath)(),Yr.DATABASES_DIR_NAME),s=(0,zt.get)(Yr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,zt.get)(Yr.CONFIG_PARAMS.STORAGE_PATH)||((0,$r.existsSync)(n)?n:(0,Je.join)((0,zt.getHdbBasePath)(),Yr.LEGACY_DATABASES_DIR_NAME));let o=(0,Je.join)(n,(i?t:e)+".mdb"),c=Si.get(o);if(!c){let u=new iA.default(o,!1);c=(0,ME.open)(u),Si.set(o,c)}return c}async function Hp(e){if(!et[e])throw new Error("Schema does not exist");let t=et[e];for(let r in t){let s=t[r].primaryStore.rootStore;Si.delete(s.path),s.status==="open"&&(await s.close(),await nx.remove(s.path))}if(e==="data"){for(let r in Cr)delete Cr[r];delete Cr[BE]}delete et[e]}function ot({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=aA);let l=$c({database:t,table:e}),d=et[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;u==null&&(u=!0);let T=new wo.default(!1);for(let P of i)P.attribute?(P.name=P.attribute,P.indexed=!0):P.attribute=P.name,P.expiresAt&&(P.indexed=!0);let A,b;if(f){if(E=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let P=l.auditStore;P||(P=hE(l)),h=i.find(se=>se.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,zt.get)(Yr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),n&&(h.eviction=n),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),hn.trace(`${e} table loading, opening primary store`);let z=new wo.default(!1,!0),W=e+"/",Q=e_(l.openDB(W,z));Q.rootStore=l,S=l.dbisDb=l.openDB(LE.INTERNAL_DBIS_NAME,T),Q.tableId=S.get(Ga),Q.tableId||(Q.tableId=1),S.putSync(Ga,Q.tableId+1),h.tableId=Q.tableId,f=ax(d,e,DE({primaryStore:Q,auditStore:P,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:E,tableName:e,tableId:Q.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,A=!0,v(),S.put(W,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(LE.INTERNAL_DBIS_NAME,T)),f.dbisDB=S;let H=[];for(let{key:P,value:z}of S.getRange({start:!0})){let[W,Q]=P.toString().split("/");if(Q===""&&(Q=z.name),Q){if(W!==e)continue}else Q=W;if(!i.find(pe=>pe.name===Q)?.indexed&&z.indexed&&!z.isPrimaryKey){v(),A=!0,S.remove(P);let pe=f.indices[W];pe&&H.push(pe)}}let F=[];try{for(let P of i||[]){if(P.relationship)continue;let z=e+"/"+(P.name||"");Object.defineProperty(P,"key",{value:z,configurable:!0});let W=S.get(z);if(P.isPrimaryKey){if(W=W||S.get(z=e+"/")||{},o!==f.audit||(+r||void 0)!==(+W.expiration||void 0)||(+n||void 0)!==(+W.eviction||void 0)){let se=Object.assign({},W);typeof o=="boolean"&&(o&&f.enableAuditing(o),se.audit=o),r&&(se.expiration=+r),n&&(se.eviction=+n),A=!0,v(),S.put(z,se)}continue}W?.attribute&&!W.name&&(W.indexed=!0);let Q=!W||W.type!==P.type||W.indexed!==P.indexed||JSON.stringify(W.attributes)!==JSON.stringify(P.attributes)||JSON.stringify(W.elements)!==JSON.stringify(P.elements);if(P.indexed){let se=new wo.default(!0,!1),pe=l.openDB(z,se);(Q||W.indexingPID&&W.indexingPID!==process.pid||W.restartNumber<Tl.workerData?.restartNumber)&&(A=!0,v(),W=S.get(z),(Q||W.indexingPID&&W.indexingPID!==process.pid||W.restartNumber<Tl.workerData?.restartNumber)&&(A=!0,P.lastIndexedKey=W?.lastIndexedKey||!1,P.indexingPID=process.pid,pe.isIndexing=!0,Object.defineProperty(P,"dbi",{value:pe}),P.indexNulls===void 0&&(P.indexNulls=!0),F.push(P)),S.put(z,P)),W?.indexNulls&&P.indexNulls===void 0&&(P.indexNulls=!0),pe.indexNulls=P.indexNulls,p[P.name]=pe}else Q&&(A=!0,v(),S.put(z,P))}}finally{b&&b()}if(A&&(f.schemaVersion++,f.updatedAttributes()),hn.trace(`${e} table loading, running index`),F.length>0||H.length>0?f.indexingOperation=rse(f,F,H):A&&UE.signalSchemaChange(new PE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,A)for(let P of cA)P(f,_!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),hn.trace(`${e} table loaded`),f;function v(){b||l.transactionSync(()=>({then(P){b=P}}))}a(v,"startTxn")}async function rse(e,t,r){try{let n=e.schemaVersion;await UE.signalSchemaChange(new PE.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,s=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,sx.getIndexedValues)(l[h]);if(p)for(let S=0,T=p.length;S<T;S++)E.dbi.put(p[S],_)}}),s.then(()=>u--,f=>{u--,hn.error(f)}),Tl.workerData&&Tl.workerData.restartNumber!==ix.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>ese?await s:u>tse&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await UE.signalSchemaChange(new PE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){hn.error("Error in indexing",n)}}function nse({table:e,database:t}){let r=$c({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 mR(e){cA.push(e)}var zt,LE,ME,Je,$r,ka,wo,iA,Yr,nx,oA,sx,UE,PE,Tl,hn,ix,aA,BE,Cr,et,Ga,cA,vE,Si,Va,ese,tse,be=Oe(()=>{zt=B(Z()),LE=B(lt()),ME=require("lmdb"),Je=require("path"),$r=require("fs"),ka=B(Ke());Lf();wo=B(t_()),iA=B(n_()),Yr=B(M()),nx=B(require("fs-extra")),oA=require("../../index"),sx=B(Ir()),UE=B(ms()),PE=B(bn()),Tl=require("worker_threads"),hn=B(Y()),ix=B(Ze());Li();Po();aA="data",BE=Symbol("defined-tables");(0,zt.initSync)();Cr=Object.create(null),et=Object.create(null);(0,oA._assignPackageExport)("databases",et);(0,oA._assignPackageExport)("tables",Cr);Ga=Symbol.for("next-table-id"),cA=[],Si=new Map;a(jne,"getTables");a(yn,"getDatabases");a(Zne,"resetDatabases");a(Sl,"readMetaDb");a(ox,"ensureDB");a(ax,"setTable");a($c,"database");a(Hp,"dropDatabase");a(ot,"table");ese=1e3,tse=10;a(rse,"runIndexing");a(nse,"dropTableMeta");a(mR,"onUpdatedTable")});var J=g(($me,Rx)=>{"use strict";var Ti=require("path"),dx=require("fs-extra"),Tr=Y(),cx=require("fs-extra"),HE=require("os"),sse=require("net"),ise=require("recursive-iterator"),it=M(),ose=jA(),ux=require("papaparse"),xE=require("moment"),{inspect:ase}=require("util"),lx=require("is-number"),Vme=require("lodash"),cse=require("minimist"),use=require("https"),lse=require("http"),{hdb_errors:FE}=ee(),_se=/^((\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)))$/,fx=require("util").promisify(setTimeout),dse=100,fse=5,Ese="",hse=4,_x={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Rx.exports={isEmpty:Kr,isEmptyOrZeroLength:os,arrayHasEmptyValues:Sse,arrayHasEmptyOrZeroLengthValues:Tse,buildFolderPath:gse,isBoolean:Ex,errorizeMessage:mse,stripFileExtension:Ase,autoCast:Ose,autoCastJSON:hx,autoCastJSONDeep:lA,removeDir:bse,compareVersions:Nse,isCompatibleDataVersion:yse,escapeRawValue:wse,unescapeValue:Ise,stringifyProps:Cse,timeoutPromise:Lse,isClusterOperation:Use,getClusterUser:vse,checkGlobalSchemaTable:Pse,getHomeDir:px,getPropsFilePath:Dse,promisifyPapaParse:Bse,removeBOM:Sx,createEventPromise:Hse,checkProcessRunning:xse,checkSchemaTableExist:Fse,checkSchemaExists:Tx,checkTableExists:gx,getStartOfTomorrowInSeconds:qse,getLimitKey:Gse,isObject:Rse,isNotEmptyAndHasValue:pse,autoCasterIsNumberCheck:mx,backtickASTSchemaItems:kse,isPortTaken:Mse,createForkArgs:Vse,autoCastBoolean:$se,async_set_timeout:fx,getTableHashAttribute:Yse,doesSchemaExist:Kse,doesTableExist:Wse,stringifyObj:Qse,ms_to_time:zse,changeExtension:Jse,getEnvCliRootPath:_A,noBootFile:Xse,httpRequest:jse,transformReq:Zse,convertToMS:eie,PACKAGE_ROOT:it.PACKAGE_ROOT};function mse(e){return e instanceof Error?e:new Error(e)}a(mse,"errorizeMessage");function Kr(e){return e==null}a(Kr,"isEmpty");function pse(e){return!Kr(e)&&(e||e===0||e===""||Ex(e))}a(pse,"isNotEmptyAndHasValue");function os(e){return Kr(e)||e.length===0||e.size===0}a(os,"isEmptyOrZeroLength");function Sse(e){if(Kr(e))return!0;for(let t=0;t<e.length;t++)if(Kr(e[t]))return!0;return!1}a(Sse,"arrayHasEmptyValues");function Tse(e){if(os(e))return!0;for(let t=0;t<e.length;t++)if(os(e[t]))return!0;return!1}a(Tse,"arrayHasEmptyOrZeroLengthValues");function gse(...e){try{return e.join(Ti.sep)}catch{console.error(e)}}a(gse,"buildFolderPath");function Ex(e){return Kr(e)?!1:e===!0||e===!1}a(Ex,"isBoolean");function Rse(e){return Kr(e)?!1:typeof e=="object"}a(Rse,"isObject");function Ase(e){return os(e)?Ese:e.slice(0,-hse)}a(Ase,"stripFileExtension");function Ose(e){return Kr(e)||e===""||typeof e!="string"?e:_x[e]!==void 0?_x[e]:mx(e)===!0?Number(e):_se.test(e)?new Date(e):e}a(Ose,"autoCast");function hx(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(hx,"autoCastJSON");function lA(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=lA(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=lA(r);n!==r&&(e[t]=n)}return e}else return hx(e)}a(lA,"autoCastJSONDeep");function mx(e){if(e.startsWith("0.")&&lx(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&lx(e))}a(mx,"autoCasterIsNumberCheck");async function bse(e){if(os(e))throw new Error(`Directory path: ${e} does not exist`);try{await cx.emptyDir(e),await cx.remove(e)}catch(t){throw Tr.error(`Error removing files in ${e} -- ${t}`),t}}a(bse,"removeDir");function Nse(e,t){if(os(e)){Tr.info("Invalid current version sent as parameter.");return}if(os(t)){Tr.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(Nse,"compareVersions");function yse(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(yse,"isCompatibleDataVersion");function wse(e){if(Kr(e))return e;let t=String(e);return t==="."?it.UNICODE_PERIOD:t===".."?it.UNICODE_PERIOD+it.UNICODE_PERIOD:t.replace(it.FORWARD_SLASH_REGEX,it.UNICODE_FORWARD_SLASH)}a(wse,"escapeRawValue");function Ise(e){if(Kr(e))return e;let t=String(e);return t===it.UNICODE_PERIOD?".":t===it.UNICODE_PERIOD+it.UNICODE_PERIOD?"..":String(e).replace(it.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Ise,"unescapeValue");function Cse(e,t){if(Kr(e))return Tr.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+HE.EOL}!os(n)&&n[0]===";"?r+=" "+n+s+HE.EOL:os(n)||(r+=n+"="+s+HE.EOL)}catch{Tr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(Cse,"stringifyProps");function px(){let e;try{e=HE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(px,"getHomeDir");function Dse(){let e=Ti.join(px(),it.HDB_HOME_DIR_NAME,it.BOOT_PROPS_FILE_NAME);return dx.existsSync(e)||(e=Ti.join(__dirname,"../","hdb_boot_properties.file")),e}a(Dse,"getPropsFilePath");function Lse(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(Lse,"timeoutPromise");async function Mse(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=sse.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(Mse,"isPortTaken");function Use(e){try{return it.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Tr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Use,"isClusterOperation");function Pse(e,t){let r=(be(),te(Fe)).getDatabases();if(!r[e])return FE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return FE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Pse,"checkGlobalSchemaTable");function vse(e,t){if(Kr(t)){Tr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Kr(e)||os(e)){Tr.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){Tr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Tr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(vse,"getClusterUser");function Bse(){ux.parsePromise=function(e,t,r){return new Promise(function(n,s){ux.parse(e,{header:!0,transformHeader:Sx,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Bse,"promisifyPapaParse");function Sx(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Sx,"removeBOM");function Hse(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Tr.info(`Got cluster status event response: ${ase(s)}`);try{i.cancel()}catch{Tr.error("Error trying to cancel timeout.")}n(s)})})}a(Hse,"createEventPromise");async function xse(e){let t=!0,r=0;do await fx(dse*r++),(await ose.findPs(e)).length>0&&(t=!1);while(t&&r<fse);if(t)throw new Error(`process ${e} was not started`)}a(xse,"checkProcessRunning");function Fse(e,t){let r=Tx(e);if(r)return r;let n=gx(e,t);if(n)return n}a(Fse,"checkSchemaTableExist");function Tx(e){let{getDatabases:t}=(be(),te(Fe));if(!t()[e])return FE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Tx,"checkSchemaExists");function gx(e,t){let{getDatabases:r}=(be(),te(Fe));if(!r()[e][t])return FE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(gx,"checkTableExists");function qse(){let e=xE().utc().add(1,it.MOMENT_DAYS_TAG).startOf(it.MOMENT_DAYS_TAG).unix(),t=xE().utc().unix();return e-t}a(qse,"getStartOfTomorrowInSeconds");function Gse(){return xE().utc().format("DD-MM-YYYY")}a(Gse,"getLimitKey");function kse(e){try{let t=new ise(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){Tr.error("Got an error back ticking items."),Tr.error(t)}}a(kse,"backtickASTSchemaItems");function Vse(e){return[e]}a(Vse,"createForkArgs");function $se(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a($se,"autoCastBoolean");function Yse(e,t){let{getDatabases:r}=(be(),te(Fe)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(Yse,"getTableHashAttribute");function Kse(e){let{getDatabases:t}=(be(),te(Fe));return t()[e]!==void 0}a(Kse,"doesSchemaExist");function Wse(e,t){let{getDatabases:r}=(be(),te(Fe));return r()[e]?.[t]!==void 0}a(Wse,"doesTableExist");function Qse(e){try{return JSON.stringify(e)}catch{return e}}a(Qse,"stringifyObj");function zse(e){let t=xE.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(zse,"ms_to_time");function Jse(e,t){let r=Ti.basename(e,Ti.extname(e));return Ti.join(Ti.dirname(e),r+t)}a(Jse,"changeExtension");function _A(){if(process.env[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=cse(process.argv);if(e[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(_A,"getEnvCliRootPath");var uA;function Xse(){if(uA)return uA;let e=_A();_A()&&dx.pathExistsSync(Ti.join(e,it.HDB_CONFIG_FILE))&&(uA=!0)}a(Xse,"noBootFile");function jse(e,t){let r;return e.protocol==="http:"?r=lse:r=use,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(jse,"httpRequest");function Zse(e){if(!e.schema&&!e.database){e.schema=it.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Zse,"transformReq");function eie(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(eie,"convertToMS")});var wx=g((Kme,yx)=>{"use strict";var Wr=Z(),tie=Gi(),me=M(),gl=tt(),Bs=require("path"),{PACKAGE_ROOT:GE}=M(),Ax=Z(),qE=J(),$a="/dev/null",rie=Bs.join(GE,"launchServiceScripts"),Ox=Bs.join(GE,"utility/scripts"),nie=Bs.join(Ox,me.HDB_RESTART_SCRIPT),bx=Bs.resolve(GE,"dependencies",`${process.platform}-${process.arch}`,gl.NATS_BINARY_NAME);function Nx(){let t=tie.licenseSearch().ram_allocation||me.RAM_ALLOCATION_ENUM.DEFAULT,r=me.MEM_SETTING_KEY+t,n={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return qE.noBootFile()&&(n[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=qE.getEnvCliRootPath()),{name:me.PROCESS_DESCRIPTORS.HDB,script:me.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:GE}}a(Nx,"generateMainServerConfig");var sie=9930;function iie(){Wr.initSync(!0);let e=Wr.get(me.CONFIG_PARAMS.ROOTPATH),t=Bs.join(e,"clustering",gl.NATS_CONFIG_FILES.HUB_SERVER),r=Bs.join(Wr.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=Ax.get(me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=gl.LOG_LEVEL_FLAGS[Wr.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==sie?"-"+n:""),script:bx,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Wr.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=$a,i.error_file=$a),i}a(iie,"generateNatsHubServerConfig");var oie=9940;function aie(){Wr.initSync(!0);let e=Wr.get(me.CONFIG_PARAMS.ROOTPATH),t=Bs.join(e,"clustering",gl.NATS_CONFIG_FILES.LEAF_SERVER),r=Bs.join(Wr.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=Ax.get(me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=gl.LOG_LEVEL_FLAGS[Wr.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==oie?"-"+n:""),script:bx,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Wr.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=$a,i.error_file=$a),i}a(aie,"generateNatsLeafServerConfig");function cie(){Wr.initSync();let e=Bs.join(Wr.get(me.CONFIG_PARAMS.LOGGING_ROOT),me.LOG_NAMES.HDB),t={name:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:me.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:rie,autorestart:!1};return Wr.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=$a,t.error_file=$a),t}a(cie,"generateClusteringUpgradeV4ServiceConfig");function uie(){let e={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.RESTART_HDB};return qE.noBootFile()&&(e[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=qE.getEnvCliRootPath()),{...{name:me.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:Ox},script:nie}}a(uie,"generateRestart");function lie(){return{apps:[Nx()]}}a(lie,"generateAllServiceConfigs");yx.exports={generateAllServiceConfigs:lie,generateMainServerConfig:Nx,generateRestart:uie,generateNatsHubServerConfig:iie,generateNatsLeafServerConfig:aie,generateClusteringUpgradeV4ServiceConfig:cie}});var wT=g((zme,qx)=>{"use strict";var Ue=M(),_ie=J(),Hs=RT(),Rl=Rt(),as=tt(),gi=wx(),kE=Z(),Ri=Y(),die=Rs(),{startWorker:Ix,onMessageFromWorkers:fie}=Ze(),Eie=oa(),Qme=require("util"),hie=require("child_process"),mie=require("fs"),{execFile:pie}=hie,Ie;qx.exports={enterPM2Mode:Sie,start:Ai,stop:dA,reload:Dx,restart:Lx,list:fA,describe:Ux,connect:xs,kill:Oie,startAllServices:bie,startService:EA,getUniqueServicesList:Px,restartAllServices:Nie,isServiceRegistered:vx,reloadStopStart:Bx,restartHdb:Mx,deleteProcess:Rie,startClusteringProcesses:xx,startClusteringThreads:Fx,isHdbRestartRunning:Aie,isClusteringRunning:wie,stopClustering:yie,reloadClustering:Iie};var Al=!1;fie(e=>{e.type==="restart"&&kE.initSync(!0)});function Sie(){Al=!0}a(Sie,"enterPM2Mode");function xs(){return Ie||(Ie=require("pm2")),new Promise((e,t)=>{Ie.connect((r,n)=>{Ri.setupConsoleLogging(),r&&t(r),e(n)})})}a(xs,"connect");var gr,Tie=10,Cx;function Ai(e,t=!1){if(Al)return gie(e);let r=pie(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=gr.indexOf(r);o>-1&&gr.splice(o,1),!Cx&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Tie&&(mie.existsSync(Hs.getHubConfigPath())?Ai(e):(await Hs.generateNatsConfig(!0),Ai(e),await new Promise(c=>setTimeout(c,3e3)),await Hs.removeNatsConfig(Ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Hs.removeNatsConfig(Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=kE.get(Ue.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&as.LOG_LEVEL_HIERARCHY[o]>=as.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===as.LOG_LEVELS.ERR||l===as.LOG_LEVELS.WRN?Ri.OUTPUTS.STDERR:Ri.OUTPUTS.STDOUT;Ri.logCustomLevel(l||"info",E,n,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=as.LOG_LEVELS[f]}if(as.LOG_LEVEL_HIERARCHY[o]>=as.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===as.LOG_LEVELS.ERR||l===as.LOG_LEVELS.WRN?Ri.OUTPUTS.STDERR:Ri.OUTPUTS.STDOUT;Ri.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),gr=[],!gr&&!t){let i=a(()=>{Cx=!0,gr&&(gr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}gr.push(r)}a(Ai,"start");function gie(e){return new Promise(async(t,r)=>{try{await xs()}catch(n){r(n)}Ie.start(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(gie,"startWithPM2");function dA(e){if(!Al){for(let t of gr||[])t.name===e&&(gr.splice(gr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await xs()}catch(n){r(n)}Ie.stop(e,async(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.delete(e,(i,o)=>{i&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(o)})})})}a(dA,"stop");function Dx(e){return new Promise(async(t,r)=>{try{await xs()}catch(n){r(n)}Ie.reload(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(Dx,"reload");function Lx(e){if(!Al)for(let t of gr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await xs()}catch(n){r(n)}Ie.restart(e,(n,s)=>{Ie.disconnect(),t(s)})})}a(Lx,"restart");function Rie(e){return new Promise(async(t,r)=>{try{await xs()}catch(n){r(n)}Ie.delete(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(Rie,"deleteProcess");async function Mx(){await Ai(gi.generateRestart())}a(Mx,"restartHdb");async function Aie(){let e=await fA();for(let t in e)if(e[t].name===Ue.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Aie,"isHdbRestartRunning");function fA(){return new Promise(async(e,t)=>{try{await xs()}catch(r){t(r)}Ie.list((r,n)=>{r&&(Ie.disconnect(),t(r)),Ie.disconnect(),e(n)})})}a(fA,"list");function Ux(e){return new Promise(async(t,r)=>{try{await xs()}catch(n){r(n)}Ie.describe(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(Ux,"describe");function Oie(){if(!Al){for(let e of gr||[])e.kill();gr=[];return}return new Promise(async(e,t)=>{try{await xs()}catch(r){t(r)}Ie.killDaemon((r,n)=>{r&&(Ie.disconnect(),t(r)),Ie.disconnect(),e(n)})})}a(Oie,"kill");async function bie(){try{await xx(),await Fx(),await Ai(gi.generateAllServiceConfigs())}catch(e){throw Ie?.disconnect(),e}}a(bie,"startAllServices");async function EA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ue.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=gi.generateMainServerConfig();break;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=gi.generateNatsIngestServiceConfig();break;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=gi.generateNatsReplyServiceConfig();break;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=gi.generateNatsHubServerConfig(),await Ai(r,t),await Hs.removeNatsConfig(e);return;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=gi.generateNatsLeafServerConfig(),await Ai(r,t),await Hs.removeNatsConfig(e);return;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=gi.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ai(r)}catch(r){throw Ie?.disconnect(),r}}a(EA,"startService");async function Px(){try{let e=await fA(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Ie?.disconnect(),e}}a(Px,"getUniqueServicesList");async function Nie(e=[]){try{let t=!1,r=await Px();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===Ue.PROCESS_DESCRIPTORS.HDB?t=!0:await Lx(o))}t&&await Bx(Ue.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ie?.disconnect(),t}}a(Nie,"restartAllServices");async function vx(e){if(gr?.find(r=>r.name===e))return!0;let t=await Eie.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(vx,"isServiceRegistered");async function Bx(e){let t=e===Ue.PROCESS_DESCRIPTORS.HDB?kE.get(Ue.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):kE.get(Ue.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Ux(e),n=_ie.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await dA(e),await EA(e)):e===Ue.PROCESS_DESCRIPTORS.HDB?await Mx():await Dx(e)}a(Bx,"reloadStopStart");var Hx;async function xx(e=!1){for(let t in Ue.CLUSTERING_PROCESSES){let r=Ue.CLUSTERING_PROCESSES[t];await EA(r,e)}}a(xx,"startClusteringProcesses");async function Fx(){Hx=Ix(Ue.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ue.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Rl.createWorkQueueStream(as.WORK_QUEUE_CONSUMER_NAMES),await Rl.updateIngestStreamConsumer(),await Rl.updateLocalStreams();let e=await die.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ue.PRE_4_0_0_VERSION){Ri.info("Starting clustering upgrade 4.0.0 process"),Ix(Ue.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(Fx,"startClusteringThreads");async function yie(){for(let e in Ue.CLUSTERING_PROCESSES)if(e!==Ue.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ue.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await Hx.terminate();else{let t=Ue.CLUSTERING_PROCESSES[e];await dA(t)}}a(yie,"stopClustering");async function wie(){for(let e in Ue.CLUSTERING_PROCESSES){let t=Ue.CLUSTERING_PROCESSES[e];if(await vx(t)===!1)return!1}return!0}a(wie,"isClusteringRunning");async function Iie(){await Hs.generateNatsConfig(!0),await Rl.reloadNATSHub(),await Rl.reloadNATSLeaf(),await Hs.removeNatsConfig(Ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Hs.removeNatsConfig(Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Iie,"reloadClustering")});var hA=wT(),Gx=M();a(async function(){try{let t=await hA.describe(Gx.PROCESS_DESCRIPTORS.HDB);for(let r of t)await hA.reload(r.pm_id);await hA.deleteProcess(Gx.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();
26
+ `},compressible:!1,q:.8});Pt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,n]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let s=t[r];Array.isArray(s)?s.push(n):t.key=[s,n]}else t[r]=n},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});$P={type:"application/json",serializeStream:hc,serialize:Vu,deserialize:$9,q:.8};Pt.set("*/*",$P);Pt.set("",$P);a($9,"tryJSONParse");a(ag,"registerContentHandlers");Y9=require("fastify-plugin"),K9=Y9(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=lf(n.raw);s.type(c),s.serializer(function(u){return(o.serializeStream||o.serialize)(u,{headers:{set:(_,l)=>{s.header(_,l)}}})})}),r()},{name:"content-type-negotiation"});a(lf,"findBestSerializer");FP=ng.default.get(sg.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(_f,"serialize");a(_i,"serializeMessage");a(W9,"streamToBuffer");a(Eo,"getDeserializer");a(qP,"deserializerUnknownType");a(Q9,"transformIterable")});function lg(e,t,r,n,s,i,o,c){let u=e[0];if(t==="or"){let d=_(u);for(let E=1;E<e.length;E++){let h=e[E],p=_(h);d=d.concat(p)}let f=new Set;return d.filter(E=>{let h=E.key??E;return f.has(h)?!1:(f.add(h),!0)})}else{let d=_(u),f=l(e.slice(1),!0,u.estimated_count);return f.length>0?o(d,f):d}function _(d){return d.conditions?lg(d.conditions,d.operator,r,n,s,i,o,c):ba(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(_,"executeCondition");function l(d,f,E){return d.map((h,p)=>{if(h.conditions){let g=h.operator==="or",R=l(h.conditions,!g,E);return g?(B,H)=>R.some(v=>v(B,H)):(B,H)=>R.every(v=>v(B,H))}let S=(h.attribute||h[0])===r.primaryKey,O=dg(h,r,i,c,S,E);return f&&p<d.length-1&&E&&(E=n7(r.primaryStore,h.estimated_count,E)),O}).filter(Boolean)}a(l,"mapConditionsToFilters")}function ba(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,u=e.comparator;if(Array.isArray(o)){let g=o[0],R=Ls(n.attributes,g);if(R.relationship){if(o.length<2)throw new Ds.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let B=R.definition?.tableClass||R.elements?.definition?.tableClass,H=new Map,v=ba({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,B,s,H);if(R.relationship.to){i[o[0]]=H;let M=!!Ls(B.attributes,R.relationship.to)?.elements;v=Z9(v,R,B.primaryStore,M,H)}if(R.relationship.from){let M=a($=>ba({attribute:R.relationship.from,value:$},t,r,n,s,H),"searchEntry");R.elements?(i[o[0]]=H,v=e7(v,R,B.primaryStore,H,M)):v=v.flatMap(M)}return v}else if(o.length===1)o=o[0];else throw new Ds.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,f;c instanceof Date&&(c=c.getTime());let E;switch(_g[u]||u){case"lt":_=!0,l=c;break;case"le":_=!0,l=c,d=!0;break;case"gt":_=c,f=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,l=c.slice(0),l[l.length-1]=ns.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),l=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),l=c[1],l instanceof Date&&(l=l.getTime()),d=!0;break;case"equals":case void 0:_=c,l=c,d=!0;break;case"ne":if(c===null){_=c,f=!0;break}case"sort":case"contains":case"ends_with":_=!0,E=!0;break;default:throw new Ds.ClientError(`Unknown query comparator "${u}"`)}if(r){let g=_;_=l,l=g,g=!f,f=!d,d=g}let h=o===n.primaryKey||o==null,p=h?n.primaryStore:n.indices[o],S;if(!p||p.isIndexing||E||c===null&&!p.indexNulls){if(!s)throw new Ds.ClientError(E?`Can not use ${u} operator without combining with a condition that uses an index`:`"${o}" is not indexed${c===null&&!p.indexNulls?" for nulls, index needs to be rebuilt to search for nulls":p?.isIndexing?" yet":""}, can not search for this attribute`,404);if(S=dg(e),!S)throw new Ds.ClientError(`Unknown search operator ${e.comparator}`)}let O={start:_,end:l,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let g=p.getRange(O).map(S?({key:R,value:B})=>new Promise((H,v)=>setImmediate(()=>{try{H(B&&S(B)?R:Yu.SKIP)}catch(M){v(M)}})):R=>R.value==null?Yu.SKIP:R);return g.hasEntries=!0,g}else return p?p.getRange(O).map(S?({key:g,value:R})=>new Promise((B,H)=>setImmediate(()=>{try{B(S({[o]:g})?R:Yu.SKIP)}catch(v){H(v)}})):({value:g})=>g):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(({key:g,value:R})=>new Promise((B,H)=>setImmediate(()=>{try{B(R&&S(R)?g:Yu.SKIP)}catch(v){H(v)}})))}function Ls(e,t){if(Array.isArray(t))if(t.length>1){let r=Ls(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?Ls(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 Z9(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;s.hasMappings=!0;let o;return{next(){if(!i){let u=t.relationship.to;return(async()=>{let _=a((d,f)=>{let E=d;Array.isArray(d)&&(E=Mn(d),o=!0);let h=s.get(E);h?h.push(f):s.set(E,h=[f]),d!==E&&(h.key=d)},"add_entry"),l=0;for await(let d of e){let f=d.value??r.get(d.key??d),E=f?.[u];if(E!=null&&!s.filters?.some(h=>!h(f))){if(n)for(let h=0;h<E.length;h++)_(E[h],d);else _(E,d);l++>100&&(await new Promise(setImmediate),l=0)}}return i=(o?s:s.keys())[Symbol.iterator](),this.next()})()}let c=i.next();return c.done?c:{value:o?c.value[1].key||c.value[0]:c.value}}}}})}function e7(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let u;if(o)for(;u=o.next(),!u.done;){let _=Mn(u.value);if(!c.has(_))return c.add(_),u}if(!i)return(async()=>{let _=new Map;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>_.has(Mn(f)));let l=0;for await(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(E=>!E(f)))continue}_.set(Mn(d),d),l++>100&&(await new Promise(setImmediate),l=0)}return i=_.values()[Symbol.iterator](),this.next()})();do{let _=i.next();return _.done?_:(o=s(_.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function dg(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,u=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 l=c[0],d=Ls(t.attributes,l),f=d.definition?.tableClass||d.elements.definition?.tableClass,E=n?.[l],h=dg({attribute:c.length>2?c.slice(1):c[1],value:u,comparator:o},f,r,E?.[l]?.joined,c[1]===f.primaryKey,i);if(!h)return;if(E){E.filters||(E.filters=[]),E.filters.push(h);return}let p=t.propertyResolvers?.[l],S,O=a((g,R)=>{let B,H;if(p){if(p.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let M of h.idFilter.idSet)e={attribute:p.from,value:M};S=_(p.from,h.idFilter,!0)}else S=_(p.from,h.idFilter,!1);let v=S(g);return S.idFilter&&(O.idFilter=S.idFilter),v}H=p(g,r,R),B=H?.value}else B=g[l];return B?Array.isArray(B)?B.some(h):h(B,H):!1},"recordFilter");return O}}switch(u instanceof Date&&(u=u.getTime()),_g[o]||o){case cg.SEARCH_TYPES.EQUALS:case void 0:return _(c,l=>l===u,!0);case"contains":return _(c,l=>l?.toString().includes(u));case"ends_with":return _(c,l=>l?.toString().endsWith(u));case"starts_with":return _(c,l=>typeof l=="string"&&l.startsWith(u),!0);case"prefix":return Array.isArray(u)?u[u.length-1]==null&&(u=u.slice(0,-1)):u=[u],_(c,l=>{if(!Array.isArray(l))return!1;for(let d=0,f=u.length;d<f;d++)if(l[d]!==u[d])return!1;return!0},!0);case"between":return u[0]instanceof Date&&(u[0]=u[0].getTime()),u[1]instanceof Date&&(u[1]=u[1].getTime()),_(c,l=>(0,ns.compareKeys)(l,u[0])>=0&&(0,ns.compareKeys)(l,u[1])<=0,!0);case"gt":return _(c,l=>(0,ns.compareKeys)(l,u)>0);case"ge":return _(c,l=>(0,ns.compareKeys)(l,u)>=0);case"lt":return _(c,l=>(0,ns.compareKeys)(l,u)<0);case"le":return _(c,l=>(0,ns.compareKeys)(l,u)<=0);case"ne":return _(c,l=>(0,ns.compareKeys)(l,u)!==0);case"sort":return()=>!0;default:throw new Ds.ClientError(`Unknown query comparator "${o}"`)}function _(l,d,f){let E;f=f&&!s&&t?.indices[l]&&i>3,f&&(e.estimated_count==null&&ff(t)(e),E=e.estimated_count>>4,(isNaN(E)||E>=i)&&(f=!1));let h=0,p=3;function S(O){let g=O[l],R;if(typeof g!="object"||!g?R=d(g):Array.isArray(g)?R=g.some(d):g instanceof Date&&(R=d(g.getTime())),f&&(p++,!R&&!S.idFilter&&++h/p*(i-p)>E)){let B=ba(e,r.transaction.getReadTxn(),!1,t).map(Mn),H=new Set(B);S.idFilter=v=>H.has(Mn(v)),S.idFilter.idSet=H}return R}return a(S,"recordFilter"),s&&(S.idFilter=d),S}a(_,"attributeComparator")}function ff(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/Cs(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=_g[n]||n,n===cg.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=Ls(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=ff(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"});r.estimated_count=c*Cs(e.indices[i.relationship.from]||e.primaryStore)/(Cs(o.primaryStore)||1)}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=Cs(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=X9*Cs(e.primaryStore)+1:n==="between"?r.estimated_count=J9*Cs(e.primaryStore)+1:n==="sort"?r.estimated_count=Cs(e.primaryStore)+1:r.estimated_count=z9*Cs(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function Ef(e){if(e)if(Ei=e,Aa.lastIndex=0,t7.test(e))try{let t=Ku(new Oa,"");if(Er!==Ei.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${Er} in '${Ei}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Ku(e,t){let r=Aa,n,s,i,o,c,u=decodeURIComponent,_;for(;n=r.exec(Ei);){Er=r.lastIndex;let[,l,d]=n;if(o){if(l)throw new SyntaxError(`expected operator, but encountered '${l}'`);o=!1,c=!1}else c=!0;let f;switch(d){case"=":if(s){if(l.length<=2)i=l;else throw new SyntaxError(`invalid FIQL operator ${l}`);u=KP}else{if(u=decodeURIComponent,i="equals",!l)throw new SyntaxError("attribute must be specified before equality comparator");s=Wu(l)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=j9[d],u=ug[i]?KP:decodeURIComponent,!l)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=Wu(l);break;case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s,value:u(l)};i==="eq"&&WP(h,l),df(e,_),e.conditions.push(h)}d==="&"&&(_="and"),d==="|"&&(_="or"),s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Wu(l)),s=void 0;break;case"(":Aa.lastIndex=Er;let E=Ku(l?[]:new Oa,")");switch(l){case"":df(e,_),e.conditions.push(E);break;case"limit":switch(E.length){case 1:e.limit=+E[0];break;case 2:e.offset=+E[0],e.limit=E[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(E[0])&&E.length===1&&!E[0].name?(e.select=E[0],e.select.asArray=!0):E.length===1?e.select=E[0]:E.length===2&&E[1]===""?e.select=E.slice(0,1):e.select=E;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=QP(E);break;default:throw new SyntaxError(`unknown query function call ${l}`)}Ei[Er]===","?r.lastIndex=++Er:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!l)throw new SyntaxError("property sets must have a defined parent property name");Aa.lastIndex=Er,f=Ku([],"}"),f.name=l,e.push(f),Ei[Er]===","?r.lastIndex=++Er:o=!0;break;case"[":Aa.lastIndex=Er,l?(f=Ku(new Oa,"]"),f.name=l):f=Ku(e.conditions?new Oa:[],"]"),e.conditions?(df(e,_),e.conditions.push(f),s=null):e.push(f),Ei[Er]===","?r.lastIndex=++Er:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let h={comparator:i||"equals",attribute:s,value:u(l)};i==="eq"&&WP(h,l),df(e,_),e.conditions.push(h)}else if(l)throw new SyntaxError("no attribute or comparison specified")}else(l||e.length>0&&c)&&e.push(Wu(l));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?r7:Aa,r.lastIndex=Er),Er===Ei.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function df(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function Wu(e){return e.indexOf(".")>-1?e.split(".").map(Wu):decodeURIComponent(e)}function KP(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(decodeURIComponent(r));if(t==="string")return decodeURIComponent(r);throw new Ds.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function WP(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Ds.ClientError("wildcard can only be used at the end of a string")}function QP(e){let t=zP(e[0]);return e.length>1&&(t.next=QP(e.slice(1))),t}function zP(e){if(Array.isArray(e)){let t=zP(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}}throw new SyntaxError(`Unknown sort type ${e}`)}function Mn(e){return Array.isArray(e)?e.join("\0"):e}function Cs(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function n7(e,t,r){return t*r/Cs(e)}var Ds,cg,ns,Yu,z9,J9,X9,j9,ug,_g,t7,Aa,r7,Er,Ei,Oa,hf=Oe(()=>{Ds=x(ee()),cg=x(lt()),ns=require("ordered-binary"),Yu=require("lmdb"),z9=.3,J9=.1,X9=.05,j9={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},ug={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(lg,"executeConditions");a(ba,"searchByIndex");a(Ls,"findAttribute");a(Z9,"joinTo");a(e7,"joinFrom");_g={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(dg,"filterByType");a(ff,"estimateCondition");t7=/[()[\]|!<>.]|(=\w*=)/,Aa=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,r7=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(Ef,"parseQuery");a(Ku,"parseBlock");a(df,"assignOperator");a(Wu,"decodeProperty");a(KP,"typedDecoding");a(WP,"wildcardDecoding");a(QP,"toSortObject");a(zP,"toSortEntry");Oa=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}};a(Mn,"flattenKey");a(Cs,"estimatedEntryCount");a(n7,"intersectionEstimate")});function ev(e){let t={openapi:s7,info:{title:"HarperDB HTTP REST interface",version:(0,ZP.version)()},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:u}=n.Resource;if(c=c??"id",!c)continue;let _={},l=[];if(o)for(let{type:R,name:B,elements:H,relationship:v,definition:M}of o){if(v)R==="array"?_[B]={type:"array",items:{$ref:hi+H.type}}:_[B]={$ref:hi+R};else{let $=M??H?.definition;if($){if(!t.components.schemas[$.type]){let K={};$.properties.forEach(z=>{K[z.name]=new mg(fg[z.type],z.type)}),t.components.schemas[$.type]=new jP(K)}R==="array"?_[B]={type:"array",items:{$ref:hi+$.type}}:_[B]={$ref:hi+$.type}}else R==="array"?H.type==="Any"||H.type=="ID"?_[B]={type:"array",items:{format:H.type}}:_[B]={type:"array",items:new mg(fg[H.type],H.type)}:R==="Any"||R=="ID"?_[B]={format:R}:_[B]=new mg(fg[R],R)}l.push(new pg(B,"query",_[B]))}let d=Object.keys(_),f=new pg(c,"path",{format:"ID"});f.required=!0,f.description="primary key of record";let E=new pg("property","path",{enum:d});E.required=!0,t.components.schemas[i]=new jP(_);let h=u.post!==Resource.prototype.post||u.update,p=typeof u.put=="function",S=typeof u.get=="function",O=typeof u.delete=="function",g="/"+s+"/";h&&(t.paths[g]={},t.paths[g].post=new i7(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[g]||(t.paths[g]={}),t.paths[g].get=new Eg(l,r,{200:new hg({$ref:hi+i})},"search for records by the specified property name and value pairs")),O&&(t.paths[g]||(t.paths[g]={}),t.paths[g].delete=new XP(l,r,"delete all the records that match the provided query",{204:new JP})),g="/"+s+"/{"+c+"}",S&&(t.paths[g]={},t.paths[g].get=new Eg([f],r,{200:new hg({$ref:hi+i})},"retrieve a record by its primary key")),p&&(t.paths[g]||(t.paths[g]={}),t.paths[g].put=new o7([f],r,i,"create or update the record with the URL path that maps to the record's primary key")),O&&(t.paths[g]||(t.paths[g]={}),t.paths[g].delete=new XP([f],r,"delete a record with the given primary key",{204:new JP})),S&&E.schema.enum.length>0&&(g="/"+s+"/{"+c+"}.{property}",t.paths[g]={},t.paths[g].get=new Eg([f,E],r,{200:new hg({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function i7(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:hi+e}}}},this.security=t,this.responses={200:{description:Sg,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function Eg(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function hg(e){this.description=Sg,this.content={"application/json":{schema:e}}}function JP(){this.description="successfully processed request, no content returned to client"}function o7(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:hi+r}}}},this.responses={200:{description:Sg}}}function XP(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function jP(e){this.type="object",this.properties=e}function mg(e,t){this.type=e,this.format=t}function pg(e,t,r){this.name=e,this.in=t,this.schema=r}var ZP,s7,fg,hi,Sg,tv=Oe(()=>{ZP=x(md()),s7="3.0.3",fg={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},hi="#/components/schemas/",Sg="successful operation";a(ev,"generateJsonApi");a(i7,"Post");a(Eg,"Get");a(hg,"Response200");a(JP,"Response204");a(o7,"Put");a(XP,"Delete");a(jP,"ResourceSchema");a(mg,"Type");a(pg,"Parameter")});var pf={};ke(pf,{start:()=>u7});async function c7(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Ef(e);let s=new li;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==rv){let h=mf.getMatch(i);if(!h)return t(e);e.handlerPath=h.path,o={url:h.relativeURL,async:!0},c=h.Resource}let u=r["cache-control"];if(u){u=u.toLowerCase();let h=u.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),u.includes("only-if-cached")&&(e.onlyIfCached=!0),u.includes("no-cache")&&(e.noCache=!0),u.includes("no-store")&&(e.noCacheStore=!0),u.includes("stale-if-error")&&(e.staleIfError=!0),u.includes("must-revalidate")&&(e.mustRevalidate=!0)}let _=await Ke(e,()=>{if(n==="POST"||n==="PUT"||n==="PATCH"||n==="QUERY")try{e.data=Eo(r["content-type"],!0)(e.body)}catch(h){throw new ya.ClientError(h,400)}if(e.authorize=!0,i===rv&&n==="GET"){if(e?.user?.role?.permission?.super_user)return ev(mf);throw new ya.ServerError("Forbidden",403)}switch(n){case"GET":case"HEAD":return c.get(o,e);case"POST":return c.post(o,e.data,e);case"PUT":return c.put(o,e.data,e);case"DELETE":return c.delete(o,e);case"PATCH":return c.patch(o,e.data,e);case"OPTIONS":s.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return c.connect(o,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return c.query(o,e.data,e);case"COPY":return c.copy(o,r.destination,e);case"MOVE":return c.move(o,r.destination,e);case"BREW":throw new ya.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new ya.ServerError(`Method ${n} is not recognized`,501)}}),l=200,d;if(_==null)l=n==="GET"||n==="HEAD"?404:204,Tg.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){a7[0]=d;let h=String.fromCharCode(34,(qt[0]&63)+62,(qt[0]>>6)+(qt[1]<<2&63)+62,(qt[1]>>4)+(qt[2]<<4&63)+62,(qt[2]>>2)+62,(qt[3]&63)+62,(qt[3]>>6)+(qt[4]<<2&63)+62,(qt[4]>>4)+(qt[5]<<4&63)+62,(qt[5]>>2)+62,(qt[6]&63)+62,(qt[6]>>6)+(qt[7]<<2&63)+62,34),p=r["if-none-match"];p&&h==p?(_?.onDone&&_.onDone(),l=304,_=void 0):s.setIfNone("ETag",h),Tg.lastModified&&s.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(l=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let f={status:l,headers:s,body:void 0},E=_?.wasLoadedFromSource?.();return E!==void 0&&(f.wasCacheMiss=E,!E&&d&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||d))/1e3))),_!==void 0&&(f.body=_f(_,e,f),n==="HEAD"&&(f.body=void 0)),f}catch(i){i.statusCode?i.statusCode===500?ho.warn(i):ho.info(i):ho.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),s.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:s,body:void 0};return o.body=_f(i.contentType?i:i.toString(),e,o),o}}function u7(e){Tg=e,!nv&&(nv=!0,mf=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return c7(t,r)}),e.server.ws(async(t,r,n)=>{Qu++;let s=new Rn;sv||(sv=!0,eu(l=>{Qu>0&&l.push({metric:"ws-connections",connections:Qu,byThread:!0})}));let i;t.on("error",l=>{i=!0,ho.warn(l)});let o;t.on("message",a(function(d){o||(o=Eo(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{Qu--,tn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let u=r.url.slice(1),_=mf.getMatch(u);if(tn(!!_,"connection","ws","connect"),!_)t.send(_i(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,Br(h=>({count:h.count,total:Qu}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await Ke(r,()=>d.connect(l,s,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=_i(E.value,r);t.send(h),Br(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var ho,ya,qt,a7,Tg,rv,nv,mf,sv,Qu,iv=Oe(()=>{ha();As();ho=x(W()),ya=x(ee());hf();fc();zi();Fd();tv();qt=new Uint8Array(8),a7=new Float64Array(qt.buffer,0,1),Tg={},rv="openapi";a(c7,"http");Qu=0;a(u7,"start")});var gg=T((fEe,ov)=>{var{recordAction:Sf,recordActionBinary:l7}=(As(),te(tu)),_7=require("fastify-plugin"),d7=200;ov.exports=_7(function(e,t,r){e.addHook("onResponse",async(n,s)=>{s.getResponseTime()}),e.addHook("onSend",async(n,s,i)=>{let o=s.getResponseTime(),c=performance.now(),u=s.request.routeOptions,_,l,d;u.config?.isOperation?(_=n.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),Sf(o,"duration",_,d,l),l7(s.raw.statusCode<400,"success",_,d,l);let f=d7;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Sf(performance.now()-c,"transfer",_,d,l),Sf(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Sf(f,"bytes-sent",_,d,l));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var Ng=T((mEe,lv)=>{var Af=require("clone"),Of=Xe(),f7=J(),gf=U(),EEe=W(),Rg=require("fs"),Og=require("joi"),{string:Rf}=Og.types(),{hdb_errors:E7,handleHDBError:Tf}=ee(),{HDB_ERROR_MSGS:hEe,HTTP_STATUS_CODES:Ag}=E7,{common_validators:Na}=$n(),av=" is required",h7=["insert","update","upsert"],bg={database:{presence:!1,format:Na.schema_format,length:Na.schema_length},schema:{presence:!1,format:Na.schema_format,length:Na.schema_length},table:{presence:!0,format:Na.schema_format,length:Na.schema_length},action:{inclusion:{within:h7,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},m7={schema:Rf.required(),table:Rf.required(),action:Rf.valid("insert","update","upsert")},{AWS_ACCESS_KEY:p7,AWS_SECRET:S7,AWS_BUCKET:T7,AWS_FILE_KEY:g7,REGION:R7}=gf.S3_BUCKET_AUTH_KEYS,A7={s3:{presence:!0},[`s3.${p7}`]:{presence:!0,type:"String"},[`s3.${S7}`]:{presence:!0,type:"String"},[`s3.${T7}`]:{presence:!0,type:"String"},[`s3.${g7}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${R7}`]:{presence:!0,type:"String"}},cv=Af(bg);cv.data.presence={message:av};var uv=Af(bg);uv.file_path.presence={message:av};var O7=Object.assign(Af(bg),A7),yg=Af(m7);yg.csv_url=Rf.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();yg.passthrough_headers=Og.object();function b7(e){let t=Of.validateObject(e,cv);return bf(e,t)}a(b7,"dataObject");function y7(e){let t=Of.validateBySchema(e,Og.object(yg));return bf(e,t)}a(y7,"urlObject");function N7(e){let t=Of.validateObject(e,uv);return bf(e,t)}a(N7,"fileObject");function w7(e){let t=Of.validateObject(e,O7);return bf(e,t)}a(w7,"s3FileObject");function bf(e,t){if(!t){let r=f7.checkGlobalSchemaTable(e.schema,e.table);if(r)return Tf(new Error,r,Ag.BAD_REQUEST);if(e.operation===gf.OPERATIONS_ENUM.CSV_FILE_LOAD)try{Rg.accessSync(e.file_path,Rg.constants.R_OK|Rg.constants.F_OK)}catch(n){return n.code===gf.NODE_ERROR_CODES.ENOENT?Tf(n,`No such file or directory ${n.path}`,Ag.BAD_REQUEST):n.code===gf.NODE_ERROR_CODES.EACCES?Tf(n,`Permission denied ${n.path}`,Ag.BAD_REQUEST):Tf(n)}}return t}a(bf,"postValidateChecks");lv.exports={dataObject:b7,urlObject:y7,fileObject:N7,s3FileObject:w7}});var wg=T((SEe,_v)=>{"use strict";var zu=W(),yf=U();async function I7(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===yf.OPERATIONS_ENUM.INSERT||t.operation===yf.OPERATIONS_ENUM.UPDATE||t.operation===yf.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===yf.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(zu.info(i.message),i):i.http_resp_msg?(zu.error(`Error calling operation: ${e.name}`),zu.error(i.http_resp_msg),i):(zu.error(`Error calling operation: ${e.name}`),zu.error(i),i)}}a(I7,"callOperationFunctionAsAwait");_v.exports={callOperationFunctionAsAwait:I7}});var fv=T((gEe,dv)=>{"use strict";var Ig=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},Cg=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};dv.exports={BulkLoadFileObject:Ig,BulkLoadDataObject:Cg}});var hv=T((AEe,Ev)=>{"use strict";var Dg=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};Ev.exports=Dg});var Bg=T((IEe,Mv)=>{"use strict";var Nf=Zr(),If=Ng(),C7=require("needle"),Un=U(),bEe=tt(),wa=J(),{handleHDBError:nt,hdb_errors:bv}=ee(),{HTTP_STATUS_CODES:Gt,HDB_ERROR_MSGS:yt,CHECK_LOGS_WRAPPER:po}=bv,Ia=W(),Lg=require("papaparse");wa.promisifyPapaParse();var Pn=require("fs-extra"),D7=require("path"),{chain:mv}=require("stream-chain"),pv=require("stream-json/streamers/StreamArray"),Sv=require("stream-json/utils/Batch"),Tv=require("stream-chain/utils/comp"),{finished:gv}=require("stream"),L7=Z(),yv=wg(),M7=ZT(),{BulkLoadFileObject:Ug,BulkLoadDataObject:U7}=fv(),Pg=VT(),{verifyBulkLoadAttributePerms:Nv}=sf(),yEe=hv(),NEe=At(),wEe=ps(),{databases:P7}=(be(),te(Fe)),{coerceType:v7}=(Cf(),te(Hg)),Rv="No records parsed from csv file.",mo=`${L7.get("HDB_ROOT")}/tmp`,{schema_regex:B7}=$n(),Av=1024*1024*2,Ov=5e3,H7={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};Mv.exports={csvDataLoad:x7,csvURLLoad:F7,csvFileLoad:q7,importFromS3:G7};async function x7(e,t){let r=If.dataObject(e);if(r)throw nt(r,r.message,Gt.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=Cv(e.schema,e.table),i=Lg.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Mg.bind(null,s),dynamicTyping:!1}),o=new Pg;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&Nv(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw nt(new Error,c,Gt.BAD_REQUEST,void 0,void 0,!0);let u=new U7(e.action,e.schema,e.table,i.data);return n=await yv.callOperationFunctionAsAwait(Dv,u,null),n.message===Rv?Rv:Lv(n.records,n.number_written)}catch(s){throw So(s)}}a(x7,"csvDataLoad");async function F7(e){let t=If.urlObject(e);if(t)throw nt(t,t.message,Gt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${mo}/${r}`;try{await k7(e,r)}catch(s){throw Ia.error(yt.DOWNLOAD_FILE_ERR(r)+" - "+s),nt(s,po(yt.DOWNLOAD_FILE_ERR(r)))}try{let s=new Ug(this.job_operation_function.name,e.action,e.schema,e.table,n,Un.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await vg(s);return await wf(n),i}catch(s){throw await wf(n),So(s)}}a(F7,"csvURLLoad");async function q7(e){let t=If.fileObject(e);if(t)throw nt(t,t.message,Gt.BAD_REQUEST,void 0,void 0,!0);let r=new Ug(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Un.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await vg(r)}catch(n){throw So(n)}}a(q7,"csvFileLoad");async function G7(e){let t=If.s3FileObject(e);if(t)throw nt(t,t.message,Gt.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=D7.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${mo}/${s}`;let i=new Ug(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await V7(s,e);let o=await vg(i);return await wf(r),o}catch(n){throw await wf(r),So(n)}}a(G7,"importFromS3");async function k7(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await C7("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 nt(n,s,n.statusCode,Un.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Y7(r,e.csv_url),await $7(t,r.raw)}a(k7,"downloadCSVFile");async function V7(e,t){try{let r=`${mo}/${e}`;await Pn.mkdirp(mo),await Pn.writeFile(`${mo}/${e}`,"",{flag:"a+"});let n=await Pn.createWriteStream(r),s=await M7.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){Ia.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Ia.error(yt.S3_DOWNLOAD_ERR+" - "+r),nt(r,po(yt.S3_DOWNLOAD_ERR))}}a(V7,"downloadFileFromS3");async function $7(e,t){try{await Pn.mkdirp(mo),await Pn.writeFile(`${mo}/${e}`,t)}catch(r){throw Ia.error(yt.WRITE_TEMP_FILE_ERR),nt(r,po(yt.DEFAULT_BULK_LOAD_ERR))}}a($7,"writeFileToTempFolder");async function wf(e){if(e)try{await Pn.access(e),await Pn.unlink(e)}catch{Ia.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(wf,"deleteTempFile");function Y7(e,t){if(e.statusCode!==bv.HTTP_STATUS_CODES.OK)throw nt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Gt.BAD_REQUEST);if(!H7[e.headers["content-type"]])throw nt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Gt.BAD_REQUEST);if(!e.raw)throw nt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Gt.BAD_REQUEST)}a(Y7,"validateURLResponse");async function vg(e){try{let t;switch(e.file_type){case Un.VALID_S3_FILE_TYPES.CSV:t=await K7(e);break;case Un.VALID_S3_FILE_TYPES.JSON:t=await W7(e);break;default:throw nt(new Error,yt.DEFAULT_BULK_LOAD_ERR,Gt.BAD_REQUEST,Un.LOG_LEVELS.ERROR,yt.INVALID_FILE_EXT_ERR(e))}return Lv(t.records,t.number_written)}catch(t){throw So(t)}}a(vg,"fileLoad");async function wv(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await Nf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&Nv(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let u=nt(c);r(u)}}a(wv,"validateChunk");async function Iv(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;wa.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!wa.isEmpty(c)&&!wa.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await yv.callOperationFunctionAsAwait(Dv,c,null);t.records+=u.records,t.number_written+=u.number_written,s&&s.resume()}catch(c){let u=nt(c,po(yt.INSERT_CSV_ERR),Gt.INTERNAL_SERVER_ERROR,Un.LOG_LEVELS.ERROR,yt.INSERT_CSV_ERR+" - "+c);r(u)}}a(Iv,"insertChunk");async function K7(e){let t={records:0,number_written:0},r=Cv(e.schema,e.table);try{let n=new Pg,s=Pn.createReadStream(e.file_path,{highWaterMark:Av});s.setEncoding("utf8"),await Lg.parsePromise(s,wv.bind(null,e,n),Mg.bind(null,r));let i=n.getPermsResponse();if(i)throw nt(new Error,i,Gt.BAD_REQUEST);return s=Pn.createReadStream(e.file_path,{highWaterMark:Av}),s.setEncoding("utf8"),await Lg.parsePromise(s,Iv.bind(null,e,t),Mg.bind(null,r)),s.destroy(),t}catch(n){throw nt(n,po(yt.PAPA_PARSE_ERR),Gt.INTERNAL_SERVER_ERROR,Un.LOG_LEVELS.ERROR,yt.PAPA_PARSE_ERR+n)}}a(K7,"callPapaParse");function Cv(e,t){let r=P7[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>v7(i,s));return n}a(Cv,"createTransformMap");function Mg(e,t,r){let n=e.get(r);return n?n(t):wa.autoCast(t)}a(Mg,"typeFunction");async function W7(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new Pg,s=mv([Pn.createReadStream(e.file_path,{encoding:"utf-8"}),pv.withParser(),c=>c.value,new Sv({batchSize:Ov}),Tv(async c=>{await wv(e,n,r,c)})]);await new Promise((c,u)=>{gv(s,_=>{_?u(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw nt(new Error,i,Gt.BAD_REQUEST);let o=mv([Pn.createReadStream(e.file_path,{encoding:"utf-8"}),pv.withParser(),c=>c.value,new Sv({batchSize:Ov}),Tv(async c=>{await Iv(e,t,r,c)})]);return await new Promise((c,u)=>{gv(o,_=>{_?u(_):c()}),o.resume()}),t}catch(n){throw nt(n,po(yt.INSERT_JSON_ERR),Gt.INTERNAL_SERVER_ERROR,Un.LOG_LEVELS.ERROR,yt.INSERT_JSON_ERR+n)}}a(W7,"insertJson");async function Dv(e){let t={};try{e.data&&e.data.length>0&&Q7(e.data[0])?t=await z7(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Ia.info(t.message))}catch(r){throw So(r)}return t}a(Dv,"callBulkFileLoad");function Q7(e){let t=Object.keys(e);for(let r of t)if(!B7.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Q7,"validateColumnNames");async function z7(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=Nf.insert;break;case"update":i=Nf.update;break;case"upsert":i=Nf.upsert;break;default:throw nt(new Error,yt.INVALID_ACTION_PARAM_ERR(n),Gt.BAD_REQUEST,Un.LOG_LEVELS.ERROR,yt.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=wa.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw So(o)}}a(z7,"bulkFileLoad");function Lv(e,t){return`successfully loaded ${t} of ${e} records`}a(Lv,"buildResponseMsg");function So(e){return nt(e,po(yt.DEFAULT_BULK_LOAD_ERR),Gt.INTERNAL_SERVER_ERROR,Un.LOG_LEVELS.ERROR,yt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(So,"buildTopLevelErrMsg")});var Pv=T((DEe,Uv)=>{"use strict";var xg=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};Uv.exports=xg});var Hv=T((MEe,Bv)=>{"use strict";var J7=U(),vv=require("moment"),X7=require("uuid").v4,Fg=class{static{a(this,"JobObject")}constructor(){this.id=X7(),this.type=void 0,this.start_datetime=vv().valueOf(),this.created_datetime=vv().valueOf(),this.end_datetime=void 0,this.status=J7.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};Bv.exports=Fg});var qg=T((PEe,Vv)=>{"use strict";var j7=require("uuid").v4,qv=Zr(),Gv=jr(),Z7=Qn(),eee=Xo(),tee=Pv(),st=U(),ree=Hv(),nee=gS(),ln=W(),see=wc(),Ca=J(),{promisify:iee}=require("util"),To=require("moment"),oee=af(),Df=Ng(),xv=Rm(),{deleteTransactionLogsBeforeValidator:aee}=xT(),{handleHDBError:cee,hdb_errors:uee}=ee(),{HTTP_STATUS_CODES:lee}=uee,Fv=Gv.searchByValue,_ee=Gv.searchByHash,dee=qv.insert,fee=iee(oee.evaluateSQL),Eee=qv.update;Vv.exports={addJob:pee,updateJob:Tee,handleGetJob:hee,handleGetJobsByStartDate:mee,getJobById:kv};async function hee(e){try{let t=await kv(e.id);return Ca.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw ln.error("There was an error getting job",t),new Error(r)}}a(hee,"handleGetJob");async function mee(e){try{let t=await See(e);if(ln.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=To(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=To(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 ln.error(r),new Error(r)}}a(mee,"handleGetJobsByStartDate");async function pee(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Ca.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return ln.info(l),t.error=l,t}if(!st.JOB_TYPE_ENUM[e.operation])return ln.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case st.OPERATIONS_ENUM.CSV_FILE_LOAD:n=Df.fileObject(e);break;case st.OPERATIONS_ENUM.CSV_URL_LOAD:n=Df.urlObject(e);break;case st.OPERATIONS_ENUM.CSV_DATA_LOAD:n=Df.dataObject(e);break;case st.OPERATIONS_ENUM.IMPORT_FROM_S3:n=Df.s3FileObject(e);break;case st.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case st.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=xv(e,"date");break;case st.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=xv(e,"timestamp");break;case st.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=aee(e);break;default:break}if(n)throw cee(n,n.message,lee.BAD_REQUEST,void 0,void 0,!0);let s=new ree;s.type=e.operation===st.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?st.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new Z7(st.SYSTEM_SCHEMA_NAME,st.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await Fv(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return ln.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=j7();try{o=await Fv(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return ln.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return ln.error("Error creating a job, could not find a unique job id."),t}s.request=e;let u=new see(st.SYSTEM_SCHEMA_NAME,st.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await dee(u)}catch(l){return ln.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let l=`Created a job with type ${s.type} and id ${s.id}`;t.message=l,t.createdJob=s,t.success=!0,ln.trace(l)}return t}a(pee,"addJob");async function See(e){let t=To(e.from_date,To.ISO_8601),r=To(e.to_date,To.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 tee(n,e.hdb_user);try{return await fee(s)}catch(i){throw ln.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(See,"getJobsInDateRange");async function kv(e){if(Ca.isEmptyOrZeroLength(e))return Ca.errorizeMessage("Invalid job ID specified.");let t=new eee(st.SYSTEM_SCHEMA_NAME,st.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await _ee(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return ln.error(n),Ca.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(kv,"getJobById");async function Tee(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Ca.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===st.JOB_STATUS_ENUM.COMPLETE||e.status===st.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=To().valueOf());let t=new nee(st.SYSTEM_SCHEMA_NAME,st.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Eee(t),r}a(Tee,"updateJob")});var zv=T((BEe,Qv)=>{"use strict";var $v=J(),hr=U(),gee=require("moment"),Lf=Bg(),Mf=W(),Yv=qg(),Kv=cf(),Wv=ki(),Ree=Ze(),Aee=ef(),Gg=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Oee(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($v.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if($v.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case hr.JOB_TYPE_ENUM.csv_file_load:await Ms(e,Lf.csvFileLoad);break;case hr.JOB_TYPE_ENUM.csv_url_load:await Ms(e,Lf.csvURLLoad);break;case hr.JOB_TYPE_ENUM.csv_data_load:await Ms(e,Lf.csvDataLoad);break;case hr.JOB_TYPE_ENUM.import_from_s3:await Ms(e,Lf.importFromS3);break;case hr.JOB_TYPE_ENUM.empty_trash:break;case hr.JOB_TYPE_ENUM.export_local:await Ms(e,Kv.export_local);break;case hr.JOB_TYPE_ENUM.export_to_s3:await Ms(e,Kv.export_to_s3);break;case hr.JOB_TYPE_ENUM.delete_files_before:case hr.JOB_TYPE_ENUM.delete_records_before:await Ms(e,Wv.deleteFilesBefore);break;case hr.JOB_TYPE_ENUM.delete_audit_logs_before:await Ms(e,Wv.deleteAuditLogsBefore);break;case hr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Ms(e,Aee.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(Oee,"parseMessage");async function Ms(e,t){try{e.job.status=hr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=gee().valueOf(),await Yv.updateJob(e.job),await bee(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):Mf.error(`There was an error running ${t.name} job with id ${e.job.id}`),Mf.error(n),e.job.message=n,e.job.status=hr.JOB_STATUS_ENUM.ERROR;try{await Yv.updateJob(e.job)}catch(s){throw Mf.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Ms,"runJob");async function bee(e){Mf.trace("launching job thread:",e),Ree.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[hr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(bee,"launchJobThread");Qv.exports={parseMessage:Oee,RunnerMessage:Gg}});var Xv=T((xEe,Jv)=>{"use strict";var kg=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};Jv.exports=kg});var E0=T((qEe,Qg)=>{"use strict";var Bf=jr(),Yg=af(),Uf=Bg(),Us=sd(),Pf=Hi(),Xu=ki(),yee=iS(),Ju=en(),vf=ES(),kt=HT(),Nt=W(),Nee=pS(),wee=Rd(),jv=ZS(),Iee=Od(),Cee=eT(),Dee=tT(),Lee=sT(),Mee=oT(),Vg=uT(),Zv=cf(),Uee=sf(),Kg=qg(),q=U(),{hdb_errors:Zu,handleHDBError:ju}=ee(),{HTTP_STATUS_CODES:e0}=Zu,$g=ET(),t0=Hd(),l0=require("util"),Da=Zr(),Pee=Js(),vee=ca(),r0=zv(),n0=fu(),s0=(Vd(),te(Du)),i0=Ir(),o0=ef(),a0=Qd(),{setServerUtilities:Bee}=(Cf(),te(Hg)),{CONTEXT:Hee}=(An(),te(lp)),{_assignPackageExport:xee}=require("../../index"),{transformReq:Fee}=J(),{server:qee}=(jt(),te(Ii)),Gee=wg(),c0=Bf.searchByHash,kee=Bf.searchByValue,Vee=l0.promisify(Bf.search),$ee=l0.promisify(Yg.evaluateSQL),Yee={[q.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[q.OPERATIONS_ENUM.CREATE_TABLE]:!0,[q.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[q.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[q.OPERATIONS_ENUM.DROP_TABLE]:!0,[q.OPERATIONS_ENUM.DROP_SCHEMA]:!0},V=Xv();async function _0(e,t){try{if(e.body.operation!=="read_log"&&(Nt.log_level===q.LOG_LEVELS.INFO||Nt.log_level===q.LOG_LEVELS.DEBUG||Nt.log_level===q.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;Nt.info(o)}}catch(n){Nt.error(n)}let r=await Gee.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Yee[e.body.operation]&&Pee.setSchemaDataToGlobal(n=>{n&&Nt.error(n)}),r}a(_0,"processLocalTransaction");var u0=Wee();Qg.exports={chooseOperation:d0,getOperationFunction:f0,operation:Wg,processLocalTransaction:_0};Bee(Qg.exports);qee.operation=Wg;function d0(e){let t;try{t=f0(e)}catch(s){throw Nt.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=Yg.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Yg.checkASTPermissions(e,i);if(o)throw Nt.error(`${e0.FORBIDDEN} from operation ${e.operation}`),Nt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),ju(new Error,o,Zu.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==q.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==q.OPERATIONS_ENUM.LOGIN&&e.operation!==q.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=Uee.verifyPerms(i,s);if(o)throw Nt.error(`${e0.FORBIDDEN} from operation ${e.operation}`),Nt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),ju(new Error,o,Zu.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw ju(s,"There was an error when trying to choose an operation path")}return r}a(d0,"chooseOperation");function f0(e){if(Nt.trace(`getOperationFunction with operation: ${e.operation}`),u0.has(e.operation))return u0.get(e.operation);throw ju(new Error,Zu.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Zu.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(f0,"getOperationFunction");xee("operation",Wg);function Wg(e,t){e.hdb_user=this[Hee]?.user,e.bypass_auth=!t;let r=d0(e);return _0({body:e},r)}a(Wg,"operation");async function Kee(e){Nt.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[q.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case q.OPERATIONS_ENUM.INSERT:o=await Da.insert(i);break;case q.OPERATIONS_ENUM.UPDATE:o=await Da.update(i);break;case q.OPERATIONS_ENUM.UPSERT:o=await Da.upsert(i);break;case q.OPERATIONS_ENUM.DELETE:o=await Xu.deleteRecord(i);break;default:Nt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Nt.info("Invalid operation in transaction"),Nt.error(o)}}a(Kee,"catchup");async function ss(e){Fee(e);let t,r;try{r=await Kg.addJob(e),t=r.createdJob,Nt.info("addJob result",r);let n=new r0.RunnerMessage(t,e);return await r0.parseMessage(n),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw Nt.error(s),ju(n,s)}}a(ss,"executeJob");function Wee(){let e=new Map;return e.set(q.OPERATIONS_ENUM.INSERT,new V(Da.insert)),e.set(q.OPERATIONS_ENUM.UPDATE,new V(Da.update)),e.set(q.OPERATIONS_ENUM.UPSERT,new V(Da.upsert)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new V(Bf.searchByConditions)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_HASH,new V(c0)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_ID,new V(c0)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_VALUE,new V(kee)),e.set(q.OPERATIONS_ENUM.SEARCH,new V(Vee)),e.set(q.OPERATIONS_ENUM.SQL,new V($ee)),e.set(q.OPERATIONS_ENUM.CSV_DATA_LOAD,new V(ss,Uf.csvDataLoad)),e.set(q.OPERATIONS_ENUM.CSV_FILE_LOAD,new V(ss,Uf.csvFileLoad)),e.set(q.OPERATIONS_ENUM.CSV_URL_LOAD,new V(ss,Uf.csvURLLoad)),e.set(q.OPERATIONS_ENUM.IMPORT_FROM_S3,new V(ss,Uf.importFromS3)),e.set(q.OPERATIONS_ENUM.CREATE_SCHEMA,new V(Us.createSchema)),e.set(q.OPERATIONS_ENUM.CREATE_DATABASE,new V(Us.createSchema)),e.set(q.OPERATIONS_ENUM.CREATE_TABLE,new V(Us.createTable)),e.set(q.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new V(Us.createAttribute)),e.set(q.OPERATIONS_ENUM.DROP_SCHEMA,new V(Us.dropSchema)),e.set(q.OPERATIONS_ENUM.DROP_DATABASE,new V(Us.dropSchema)),e.set(q.OPERATIONS_ENUM.DROP_TABLE,new V(Us.dropTable)),e.set(q.OPERATIONS_ENUM.DROP_ATTRIBUTE,new V(Us.dropAttribute)),e.set(q.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new V(Pf.describeSchema)),e.set(q.OPERATIONS_ENUM.DESCRIBE_DATABASE,new V(Pf.describeSchema)),e.set(q.OPERATIONS_ENUM.DESCRIBE_TABLE,new V(Pf.describeTable)),e.set(q.OPERATIONS_ENUM.DESCRIBE_ALL,new V(Pf.describeAll)),e.set(q.OPERATIONS_ENUM.DELETE,new V(Xu.deleteRecord)),e.set(q.OPERATIONS_ENUM.ADD_USER,new V(Ju.addUser)),e.set(q.OPERATIONS_ENUM.ALTER_USER,new V(Ju.alterUser)),e.set(q.OPERATIONS_ENUM.DROP_USER,new V(Ju.dropUser)),e.set(q.OPERATIONS_ENUM.LIST_USERS,new V(Ju.listUsersExternal)),e.set(q.OPERATIONS_ENUM.LIST_ROLES,new V(vf.listRoles)),e.set(q.OPERATIONS_ENUM.ADD_ROLE,new V(vf.addRole)),e.set(q.OPERATIONS_ENUM.ALTER_ROLE,new V(vf.alterRole)),e.set(q.OPERATIONS_ENUM.DROP_ROLE,new V(vf.dropRole)),e.set(q.OPERATIONS_ENUM.USER_INFO,new V(Ju.userInfo)),e.set(q.OPERATIONS_ENUM.READ_LOG,new V(Nee)),e.set(q.OPERATIONS_ENUM.ADD_NODE,new V(wee)),e.set(q.OPERATIONS_ENUM.UPDATE_NODE,new V(jv)),e.set(q.OPERATIONS_ENUM.SET_NODE_REPLICATION,new V(jv)),e.set(q.OPERATIONS_ENUM.REMOVE_NODE,new V(Iee)),e.set(q.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new V(Cee)),e.set(q.OPERATIONS_ENUM.PURGE_STREAM,new V(Dee)),e.set(q.OPERATIONS_ENUM.SET_CONFIGURATION,new V(i0.setConfiguration)),e.set(q.OPERATIONS_ENUM.CLUSTER_STATUS,new V(Lee.clusterStatus)),e.set(q.OPERATIONS_ENUM.CLUSTER_NETWORK,new V(Mee)),e.set(q.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new V(Vg.setRoutes)),e.set(q.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new V(Vg.getRoutes)),e.set(q.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new V(Vg.deleteRoutes)),e.set(q.OPERATIONS_ENUM.EXPORT_TO_S3,new V(ss,Zv.export_to_s3)),e.set(q.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new V(ss,Xu.deleteFilesBefore)),e.set(q.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new V(ss,Xu.deleteFilesBefore)),e.set(q.OPERATIONS_ENUM.EXPORT_LOCAL,new V(ss,Zv.export_local)),e.set(q.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new V(Kg.handleGetJobsByStartDate)),e.set(q.OPERATIONS_ENUM.GET_JOB,new V(Kg.handleGetJob)),e.set(q.OPERATIONS_ENUM.GET_FINGERPRINT,new V($g.getFingerprint)),e.set(q.OPERATIONS_ENUM.SET_LICENSE,new V($g.setLicense)),e.set(q.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new V($g.getRegistrationInfo)),e.set(q.OPERATIONS_ENUM.RESTART,new V(t0.restart)),e.set(q.OPERATIONS_ENUM.RESTART_SERVICE,new V(t0.restartService)),e.set(q.OPERATIONS_ENUM.CATCHUP,new V(Kee)),e.set(q.OPERATIONS_ENUM.SYSTEM_INFORMATION,new V(vee.systemInformation)),e.set(q.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new V(ss,Xu.deleteAuditLogsBefore)),e.set(q.OPERATIONS_ENUM.READ_AUDIT_LOG,new V(yee)),e.set(q.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new V(n0.createTokens)),e.set(q.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new V(n0.refreshOperationToken)),e.set(q.OPERATIONS_ENUM.LOGIN,new V(s0.login)),e.set(q.OPERATIONS_ENUM.LOGOUT,new V(s0.logout)),e.set(q.OPERATIONS_ENUM.GET_CONFIGURATION,new V(i0.getConfiguration)),e.set(q.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new V(kt.customFunctionsStatus)),e.set(q.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new V(kt.getCustomFunctions)),e.set(q.OPERATIONS_ENUM.GET_COMPONENT_FILE,new V(kt.getComponentFile)),e.set(q.OPERATIONS_ENUM.GET_COMPONENTS,new V(kt.getComponents)),e.set(q.OPERATIONS_ENUM.SET_COMPONENT_FILE,new V(kt.setComponentFile)),e.set(q.OPERATIONS_ENUM.DROP_COMPONENT,new V(kt.dropComponent)),e.set(q.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new V(kt.getCustomFunction)),e.set(q.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new V(kt.setCustomFunction)),e.set(q.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new V(kt.dropCustomFunction)),e.set(q.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new V(kt.addComponent)),e.set(q.OPERATIONS_ENUM.ADD_COMPONENT,new V(kt.addComponent)),e.set(q.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new V(kt.dropCustomFunctionProject)),e.set(q.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new V(kt.packageComponent)),e.set(q.OPERATIONS_ENUM.PACKAGE_COMPONENT,new V(kt.packageComponent)),e.set(q.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new V(kt.deployComponent)),e.set(q.OPERATIONS_ENUM.DEPLOY_COMPONENT,new V(kt.deployComponent)),e.set(q.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new V(o0.readTransactionLog)),e.set(q.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new V(ss,o0.deleteTransactionLogsBefore)),e.set(q.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new V(a0.installModules)),e.set(q.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new V(a0.auditModules)),e.set(q.OPERATIONS_ENUM.GET_BACKUP,new V(Us.getBackup)),e}a(Wee,"initializeOperationFunctionMap")});var xf=T((kEe,p0)=>{"use strict";var zg=U(),Qee=J(),el=W(),{handleHDBError:Jg,hdb_errors:Hf}=ee(),{isMainThread:zee}=require("worker_threads"),{Readable:Jee}=require("stream"),h0=require("os"),Xee=require("util"),jee=IS(),Zee=Xee.promisify(jee.authorize),m0=E0(),{createGzip:ete,constants:tte}=require("zlib");function rte(e){let t=`Found an uncaught exception with message: ${e.message}. ${h0.EOL}Stack: ${e.stack} ${h0.EOL}Terminating ${zee?"HDB":"thread"}.`;console.error(t),el.fatal(t),process.exit(1)}a(rte,"handleServerUncaughtException");function nte(e,t,r){if(el[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:Hf.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(nte,"serverErrorHandler");function ste(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=Jg(new Error,"Invalid JSON.",Hf.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(Qee.isEmpty(e.body.operation)){let n=Jg(new Error,"Request body must include an 'operation' property.",Hf.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(ste,"reqBodyValidationHandler");function ite(e,t,r){let n;e.body.operation!==zg.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==zg.OPERATIONS_ENUM.LOGIN&&e.body.operation!==zg.OPERATIONS_ENUM.LOGOUT?Zee(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{el.warn(s),el.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(Jg(s,i,Hf.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(ite,"authHandler");async function ote(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=m0.chooseOperation(e.body);let s=await m0.processLocalTransaction(e,n);if(s instanceof Jee&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(ete({level:tte.Z_BEST_SPEED})))}return s}catch(s){throw el.error(s),s}}a(ote,"handlePostRequest");p0.exports={authHandler:ite,handlePostRequest:ote,handleServerUncaughtException:rte,serverErrorHandler:nte,reqBodyValidationHandler:ste}});var R0=T(($Ee,g0)=>{"use strict";var ate=require("fastify-plugin"),{handlePostRequest:S0,authHandler:cte,reqBodyValidationHandler:ute}=xf();async function lte(e){e.decorate("hdbCore",{preValidation:[ute,cte],request:t=>T0(S0(t,response)),requestWithoutAuthentication:(t,r)=>T0(S0(t,r,!0))})}a(lte,"hdbCore");async function T0(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(T0,"convertAsyncIterators");g0.exports=ate(lte)});var b0=T((WEe,O0)=>{"use strict";var KEe=require("fs"),Xg=Z();Xg.initSync();var{CONFIG_PARAMS:A0}=U(),_te=1024*1024*1024;function dte(e){let t=Xg.get(A0.HTTP_TIMEOUT),r=Xg.get(A0.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:_te,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(dte,"getServerOptions");O0.exports=dte});var w0=T((zEe,N0)=>{"use strict";var jg=Z();jg.initSync();var{CONFIG_PARAMS:y0}=U();function fte(){let e=jg.get(y0.HTTP_CORSACCESSLIST),t=jg.get(y0.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(fte,"getCORSOptions");N0.exports=fte});var D0=T((XEe,C0)=>{"use strict";var I0=Z();I0.initSync();var Ete=U();function hte(){return I0.get(Ete.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(hte,"getHeaderTimeoutConfig");C0.exports=hte});var eR={};ke(eR,{customFunctionsServer:()=>Ste,ready:()=>Y0,start:()=>pte});function pte(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Ps||(Ps=$0(t),je.http((await Ps).server));let o=await Ps,c=(0,Zg.dirname)(s),u=(0,Zg.dirname)(n);if(u.startsWith("/")&&(u=u.slice(1)),!L0.has(c)){L0.add(c);try{o.register(gte(c,u))}catch(_){if(_.message==="Root plugin has already booted")Ge.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:Y0}}async function Ste(){try{Ge.info("In Custom Functions Fastify server"+process.cwd()),Ge.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ge.debug(`Custom Functions server process ${process.pid} starting up.`),await Tte();let e=H0.get(x0.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Ps=await $0(e)}catch(r){throw Ge.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ge.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ge.error(`Custom Functions ${process.pid} Error: ${e}`),Ge.error(e),process.exit(1)}}async function Tte(){try{Ge.info("Custom Functions starting configuration."),await F0.setUsersToGlobal(),Ge.info("Custom Functions completed configuration.")}catch(e){Ge.error(e)}}function gte(e,t){return async function(r){try{Ge.info("Custom Functions starting buildRoutes"),Ge.trace("Loading fastify routes folder "+e),(0,M0.existsSync)(e)&&r.register(B0.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Ge.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Ge.error(s.message):s&&Ge.error(s),o()})}catch(n){Ge.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function $0(e){Ge.info("Custom Functions starting buildServer.");let t=(0,q0.default)(e),r=(0,U0.default)(t);r.server.headersTimeout=(0,k0.default)(),r.setErrorHandler(V0.serverErrorHandler);let n=(0,G0.default)();return n&&r.register(P0.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(v0.default),await r.register(mte),await r.after(),ag(r),Ge.info("Custom Functions completed buildServer."),r}function Y0(){if(Ps)return Ps.then?Ps.then(e=>e.ready()):Ps.ready()}var Zg,M0,U0,P0,v0,B0,H0,x0,Ge,mte,F0,q0,G0,k0,V0,Ps,L0,K0=Oe(()=>{Zg=require("path"),M0=require("fs"),U0=x(require("fastify")),P0=x(require("@fastify/cors")),v0=x(gg()),B0=x(require("@fastify/autoload")),H0=x(Z()),x0=x(U()),Ge=x(W()),mte=x(R0()),F0=x(en()),q0=x(b0()),G0=x(w0()),k0=x(D0()),V0=x(xf());ha();jt();L0=new Set;a(pte,"start");a(Ste,"customFunctionsServer");a(Tte,"setUp");a(gte,"buildRouteFolder");a($0,"buildServer");a(Y0,"ready")});var tR={};ke(tR,{start:()=>Rte});function Rte(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,X0.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){Q0||(Q0=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=W0.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,z0.default)(s,(0,J0.realpathSync)(o))}}return i(s)},{runFirst:!0})),W0.set(r,n)}}}var z0,J0,X0,W0,Q0,j0=Oe(()=>{z0=x(require("send")),J0=require("fs"),X0=x(require("serve-static")),W0=new Map;a(Rte,"start")});function bte(e,t=1,r){if(rR++,(0,go.startWorker)("server/threads/threadServer.js",{name:Gf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function u(_){_.type===Gf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",u),o(n))}a(u,"onMessage"),n.on("message",u),n.on("error",c)});Ote.push(s),await s,La.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=qf.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=La.indexOf(n);o>-1&&La.splice(o,1)}if(a(i,"removeWorker"),Ma){let o=Ma;Ma=[];for(let c of o)rB[c.localPort](null,c)}}}),r){let n=setInterval(()=>{nR?nR=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,go.shutdownWorkers)(),rR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function nB(e=0,t){if(typeof e=="string")try{(0,kf.existsSync)(e)&&(0,kf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=yte:r=Nte(t):r=iR;let n=(0,Ua.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=rB[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),nR=!0,r(o,(c,u)=>{if(!c){if(Z0){let l=o._socket||new Ua.Socket({handle:o,writable:!0,readable:!0});Z0.deliverSocket(l,e,u),l.resume()}else rR>0?(Ma.length===0&&setTimeout(()=>{Ma.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(),o.localPort=e,Ma.push(o)):(console.log("start up a dynamic thread to handle request"),bte(0));Br(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new Ua.Socket({handle:o,writable:!0,readable:!0});Dte(l,c,e)}Br(!0,"socket-routed")})};let s=Xc();sR.info(`HarperDB ${s.version} Server running on port ${e}`)}return n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function iR(e,t){let r,n=0;for(let s of La){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Ff)return Ff=i,t(r);n=i}Ff=0,t(r)}function yte(e,t){let r={};e.getpeername(r);let n=r.address,s=Pa.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);iR(e,o=>{Pa.set(n,{worker:o,lastUsed:i}),t(o)})}function Nte(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Ua.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let u=o.toString("latin1").match(t)?.[1],_=Pa.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,s(_.worker);iR(n,d=>{Pa.set(u,{worker:d,lastUsed:l}),s(d,o)})})}a(r,"findByHeaderAffinity")}function Ite(){Ff=0;for(let e of La)e.expectedIdle=e.recentELU.idle+wte,e.requests=1;La.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Dte(e,t,r){let n=Cte++;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(),qf.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")),qf.delete(n)),s.event=="destroy"&&(e.destroy(),qf.delete(n))})}var go,Ua,Gf,sR,kf,tB,Ate,La,Ma,rB,Z0,rR,Ote,nR,Ff,eB,Pa,wte,qf,Cte,sB=Oe(()=>{go=x(Ze()),Ua=require("net"),Gf=x(U()),sR=x(W()),kf=require("fs");As();tB=require("worker_threads"),Ate=x(Vi()),La=[],Ma=[],rB=[],rR=0,Ote=[];tB.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(bte,"startHTTPWorker");a(nB,"startSocketServer");Ff=0;a(iR,"findMostIdleWorker");eB=36e5,Pa=new Map;a(yte,"findByRemoteAddressAffinity");a(Nte,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Pa)r.lastUsed+eB<e&&Pa.delete(t)},eB).unref();wte=1e3;a(Ite,"updateWorkerIdleness");(0,go.setMonitorListener)(Ite);qf=new Map,Cte=1;a(Dte,"proxySocket")});var uR={};ke(uR,{Request:()=>oR,createReuseportFd:()=>Vf});var iB,oR,aR,cR,Vf,$f=Oe(()=>{iB=require("os"),oR=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new cR(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._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new aR(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},aR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},cR=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,iB.platform)()!="win32"&&(Vf=require("node-unix-socket").createReuseportFd)});var uB=T((dhe,cB)=>{"use strict";var Lte=require("cluster"),Ro=Z();Ro.initSync();var aB=U(),ahe=require("util"),vs=W(),che=require("fs"),Mte=require("fastify"),uhe=Xc(),Ute=require("@fastify/cors"),Pte=require("@fastify/compress"),vte=require("@fastify/static"),Bte=gg(),Hte=require("path"),{PACKAGE_ROOT:xte}=U(),Fte=Js(),qte=J(),Gte=en(),kte=Vi(),{server:Vte}=(jt(),te(Ii)),{node_request_key:lhe}=($f(),te(uR)),{authHandler:$te,handlePostRequest:Yte,serverErrorHandler:Kte,reqBodyValidationHandler:Wte}=xf(),_he=require("net"),{registerContentHandlers:Qte}=(ha(),te(YP)),zte=6e4,Jte=1024*1024*1024,Xte="TRUE",{CONFIG_PARAMS:tl}=aB,va;cB.exports={hdbServer:oB,start:oB};async function oB(e){try{vs.info("In Fastify server"+process.cwd()),vs.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),vs.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Lte.isMaster,await jte();let t=e.securePort>0;va=Zte(t),await va.ready(),e||(e={}),e.isOperationsServer=!0;try{Vte.http(va.server,e),va.server.closeIdleConnections||await va.listen({port:0,host:"::"})}catch(r){throw va.close(),vs.error(r),vs.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),vs.fatal(t),process.exit(1)}}a(oB,"operationsServer");async function jte(){vs.trace("Configuring HarperDB process."),Fte.setSchemaDataToGlobal(),await Gte.setUsersToGlobal(),await kte.getLicense()}a(jte,"setUp");function Zte(e){vs.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=ere(e),r=Mte(t);r.server.headersTimeout=rre(),r.setErrorHandler(Kte);let n=tre();n&&r.register(Ute,n),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Bte),r.register(Pte),r.register(vte,{root:Hte.join(xte,"studio/build-local")}),Qte(r);let s=Ro.get(aB.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!qte.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Wte,$te],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Yte(i,o)}),r.get("/health",()=>"HarperDB is running."),vs.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Zte,"buildServer");function ere(e){let t=Ro.get(tl.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ro.get(tl.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Jte,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(ere,"getServerOptions");function tre(){let e=Ro.get(tl.OPERATIONSAPI_NETWORK_CORS),t=Ro.get(tl.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Xte)&&(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}a(tre,"getCORSOpts");function rre(){return Ro.get(tl.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??zte}a(rre,"getHeaderTimeoutConfig")});var TB=T((phe,SB)=>{"use strict";var{decode:nre}=require("msgpackr"),{isMainThread:Ehe,parentPort:sre,threadId:hhe}=require("worker_threads"),_R=At(),Bs=tt(),ire=U(),mi=W(),lB=Z(),dB=U();Ze();var ore=ps(),{recordAction:are,recordActionBinary:cre}=(As(),te(tu)),{publishToStream:ure}=_R,{ConsumerEvents:lre}=require("nats"),mhe={durable:Bs.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Bs.WORK_QUEUE_CONSUMER_NAMES.deliver_group},_re,dre,fre,fB,EB;SB.exports={initialize:dR,workQueueListener:pB,setSubscription:Ere,setIgnoreOrigin:mre,getDatabaseSubscriptions:hre};async function dR(){EB=!0,mi.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await _R.getNATSReferences();_re=e,dre=e.info.server_name,fre=t,fB=r}a(dR,"initialize");var Kf=new Map;function Ere(e,t,r){let n=Kf.get(e);n||Kf.set(e,n=new Map),n.set(t,r),EB||dR().then(pB)}a(Ere,"setSubscription");function hre(){return Kf}a(hre,"getDatabaseSubscriptions");var hB;function mre(e){hB=e}a(mre,"setIgnoreOrigin");var mB=100,_B=new Array(mB),Yf=0;async function pB(){let e=await fB.consumers.get(Bs.WORK_QUEUE_CONSUMER_NAMES.stream_name,Bs.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(sre?.on("message",async n=>{let{type:s}=n;s===dB.ITC_EVENT_TYPES.SHUTDOWN&&(t=!0,r&&r.close?.()&&r.close())});!t;){r=await e.consume(),(async()=>{for await(let n of await r.status())if(n.type===lre.HeartbeatsMissed){let s=n.data;mi.trace(`${s} clustering ingest consumer heartbeats missed`),s===2&&(mi.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let n of r)await _B[Yf],_B[Yf]=pre(n).catch(s=>{mi.error(s)}),++Yf>=mB&&(Yf=0)}catch(n){mi.error("Error consuming clustering ingest, restarting consumer",n)}_R.clearClientCache(),await dR()}}a(pB,"workQueueListener");async function pre(e){let t=nre(e.data);are(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,n=!1,s=lB.get(ire.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Bs.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Bs.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Bs.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!hB),cre(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Bs.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;mi.trace("processing message:",o,c,_,(l?"records: "+l.map(R=>R?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),mi.trace(`messageProcessor nats msg id: ${e.headers.get(Bs.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:O}=f||{},g=Kf.get(c)?.get(_);if(!g)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,g.send(t);else if(l.length===1&&!u)g.send({type:lR(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:O});else{let R=l.map((B,H)=>({type:lR(o),value:B,expiresAt:E,id:d?.[H],table:_}));for(;u;)R.push({type:lR(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;g.send({type:"transaction",writes:R,table:_,timestamp:p,onCommit:h,user:S,nodeName:O})}lB.get(dB.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&ure(e.subject.split(".").slice(0,-1).join("."),ore.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){mi.error(o)}e.ack()}a(pre,"messageProcessor");function lR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(lR,"convertOperation")});var SR={};ke(SR,{disableNATS:()=>Tre,publishToStream:()=>Xf,setNATSReplicator:()=>fR,setPublishToStream:()=>gre,setSubscription:()=>pR,start:()=>Sre});function Sre(){Qf.default.get(zf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Are()}function Tre(e=!0){bB=e}function gre(e,t){Xf=e,pR=t}function Are(){if(bB||process.env._DISABLE_NATS)return;let e=In(),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];fR(s,r,i)}}TR((r,n)=>{fR(r.tableName,r.databaseName,r),n&&NB(r)}),!gB&&(gB=!0)}function fR(e,t,r){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 vt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Me],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Me]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Me],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Me],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Me]})}static defineSchema(i){NB(i)}static subscribe(){let i=new Rn;return pR(t,e,i),i}static subscribeOnThisThread(i){return i<Rre}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 Wf(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=yB;return i}a(n,"getNATSTransaction")}function NB(e){let t=Qf.default.get(zf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Xf(`${hR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,mR.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 RB,hR,mR,AB,OB,Qf,zf,Jf,bB,Xf,pR,Rre,yB,gB,Wf,ER,wB=Oe(()=>{be();An();RB=x(At()),hR=x(tt()),mR=x(ps());fc();AB=x(TB()),OB=x(Cr()),Qf=x(Z()),zf=x(U()),Jf=x(W());a(Sre,"start");a(Tre,"disableNATS");Xf=RB.publishToStream,pR=AB.setSubscription;a(gre,"setPublishToStream");Rre=2;a(Are,"assignReplicationSource");a(fR,"setNATSReplicator");a(NB,"publishSchema");Wf=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=Qf.default.get(zf.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,f=l.operation=="put"?"upsert":l.operation;u||(Jf.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&n.push(Xf(`${hR.SUBJECT_PREFIXES.TXN}.${s}.${u.table}`,(0,mR.createNatsTableStreamName)(s,u.table),void 0,u)?.catch(l=>{throw Jf.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(n)}},ER=class extends Wf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,OB.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};yB=new ER});var GB=T(Ao=>{"use strict";var{isMainThread:Ore,parentPort:nl,threadId:jf}=require("worker_threads"),{Socket:bre,createServer:yre}=require("net"),{createServer:Nre,IncomingMessage:wre}=require("http"),{createServer:Ire}=require("https"),{readFileSync:Ba,unlinkSync:IB,existsSync:Cre}=require("fs"),_n=W(),He=Z(),mr=U(),{server:tE}=(jt(),te(Ii)),{WebSocketServer:Dre}=require("ws"),{createServer:Lre}=require("tls"),{getTicketKeys:Mre,restartNumber:Ure,getWorkerIndex:CB}=Ze(),{Headers:PB}=(Fd(),te(hU)),{recordAction:rl,recordActionBinary:Pre}=(As(),te(tu)),{Request:vB,createReuseportFd:DB}=($f(),te(uR)),{checkMemoryLimit:vre}=Vi(),BB=require("tls"),LB=BB.createSecureContext;BB.createSecureContext=function(e){if(!e.cert||!e.key)return LB(e);let t={...e};delete t.key,delete t.cert;let r=LB(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){Ure<=1&&_n.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:bhe,CONFIG_PARAMS:Bre}=mr;He.initSync();var Hre=He.get(Bre.HTTP_SESSIONAFFINITY),is={};Ao.registerServer=bR;Ao.httpServer=yR;Ao.deliverSocket=OR;Ao.startServers=HB;Ao.when_components_loaded=null;tE.http=yR;tE.request=Gre;tE.socket=kre;tE.ws=Vre;var gR={},Zf={},xre,pi={},eE={},Fre=[],RR=[];function HB(){return Ao.when_components_loaded=NR().loadRootComponents(!0).then(()=>{nl?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)OR(n,r,s);else if(t.requestId)qre(t);else if(t.type===mr.ITC_EVENT_TYPES.SHUTDOWN){_n.trace("received shutdown request",jf);for(let i in is){let o=is[i],c;if(o.closeIdleConnections){let _=Object.getOwnPropertySymbols(o).find(f=>f.description.includes("connections")),l=0,d=setInterval(()=>{l++;let f=l>=100,E=o[_][f?"all":"idle"]();if(E.length===0){f&&clearInterval(d);return}l===1?_n.info(`Closing ${E.length} idle connections`):f&&_n.warn(`Forcefully closing ${E.length} active connections`);for(let h=0,p=E.length;h<p;h++){let S=E[h].socket;S._httpMessage&&!S._httpMessage.finished&&!f||(f?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
27
+ Connection: close\r
28
+ \r
29
+ `))}},25).unref()}o.close?.(()=>{if(He.get(mr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&CB()==0)try{IB(He.get(mr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,jf),o.cantCleanupProperly||_n.warn("Had to forcefully exit the thread",jf),process.exit(0)},5e3).unref()})}if(process.env.DEV_MODE)try{require("inspector").close()}catch(i){console.error("Could not close debugger",i)}}}).ref();let e=[];if(DB&&!Hre)for(let t in is){let r=is[t];if(isNaN(t)&&CB()==0){Cre(t)&&IB(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),_n.info("Domain socket listening on "+t)}).on("error",i)}));continue}let n;try{n=DB(+t,"::")}catch(s){console.error(`Unable to bind to port ${t}`,s);continue}e.push(new Promise((s,i)=>{r.listen({fd:n},()=>{s(),_n.trace("Listening on port "+t,jf)}).on("error",i)}))}Promise.all(e).then(()=>{nl?.postMessage({type:mr.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(HB,"startServers");Ore||HB();function OR(e,t,r){let n=e?.read?e:new bre({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=is[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=is[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(_n.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(OR,"deliverSocket");var MB=new Map;function qre(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=MB.get(s),r){case"connection":i=OR(void 0,t),MB.set(s,i),i.write=(c,u,_)=>(nl.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(nl.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),nl.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}}a(qre,"proxyRequest");function bR(e,t,r=!0){!+t&&t!==He.get(mr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(He.get(mr.CONFIG_PARAMS.HTTP_PORT),10));let n=is[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",UB),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else is[t]=e;e.on("unhandled",UB)}a(bR,"registerServer");function xB(e){let t=[],r=parseInt(e?.securePort);return r&&t.push({port:r,secure:!0}),r=parseInt(e?.port),r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],He.get(mr.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:He.get(mr.CONFIG_PARAMS.HTTP_PORT),secure:He.get(mr.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),He.get(mr.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:He.get(mr.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&He.get(mr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:He.get(mr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(xB,"getPorts");function yR(e,t){for(let{port:r,secure:n}of xB(t))FB(r,n,t?.isOperationsServer),typeof e=="function"?RR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,bR(e,r,!1)),eE[r]=AR(RR,r),xre=AR(Fre,r)}a(yR,"httpServer");function FB(e,t,r){if(!pi[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:He.get(n+"_keepAliveTimeout"),headersTimeout:He.get(n+"_headersTimeout"),requestTimeout:He.get(n+"_timeout")},i=He.get(n+"_mtls"),o=He.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let u=He.get(n+"tls_privateKey"),_=He.get(n+"tls_certificate"),l=He.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:Ba(u),ciphers:He.get("tls_ciphers"),cert:Ba(_),ca:l&&Ba(l),rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:Mre()})}let c=vre();pi[e]=(t?Ire:Nre)(s,async(u,_)=>{try{let d=performance.now(),f=new vB(u,_);r&&(f.isOperationsServer=!0);let E=await eE[e](f);if(!E){if(f._nodeResponse.statusCode)return;E=qB(f)}if(c?E.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):E.headers?.set?.("Server","HarperDB"),E.status===-1){for(let H of E.headers||[])_.setHeader(H[0],H[1]);return u.baseRequest=f,_.baseResponse=E,pi[e].emit("unhandled",u,_)}let h=E.status||200,p=performance.now(),S=p-d,O=E.body,g;if(!E.handlesHeaders){let H=E.headers||new PB;if(O?O.length>=0&&(typeof O=="string"?H.set("Content-Length",Buffer.byteLength(O)):H.set("Content-Length",O.length),g=!0):(H.set("Content-Length","0"),g=!0),H.append){let v=`hdb;dur=${S.toFixed(2)}`;E.wasCacheMiss&&(v+=", miss"),H.append("Server-Timing",v,!0)}_.writeHead(h,H&&(H[Symbol.iterator]?Array.from(H):H)),g&&_.end(O)}let R=f.handlerPath,B=f.method;if(rl(S,"duration",R,B,E.wasCacheMiss==null?void 0:E.wasCacheMiss?"cache-miss":"cache-hit"),Pre(h<400,"success",R,B),!g)if(O?.pipe){O.pipe(_),O.destroy&&_.on("close",()=>{O.destroy()});let H=0;O.on("data",v=>{H+=v.length}),O.on("end",()=>{rl(performance.now()-p,"transfer",R,B),rl(H,"bytes-sent",R,B)})}else O?.then?O.then(H=>{_.end(H)},l):_.end(O)}catch(d){l(d)}function l(d){let f=d.headers;_.writeHead(d.statusCode||500,f&&(f[Symbol.iterator]?Array.from(f):f)),_.end(d.toString()),d.statusCode?d.statusCode===500?_n.warn(d):_n.info(d):_n.error(d)}a(l,"onError")}),i&&(pi[e].mtlsConfig=i),t&&(pi[e].on("secureConnection",u=>{u._parent.startTime&&rl(performance.now()-u._parent.startTime,"tls-handshake",e),rl(u.isSessionReused(),"tls-reused",e)}),pi[e].isSecure=!0),bR(pi[e],e)}return pi[e]}a(FB,"getHTTPServer");function AR(e,t){let r=qB;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a(c=>s(c,o),"next_callback")}}return r}a(AR,"makeCallbackChain");function qB(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new PB}}a(qB,"unhandled");function Gre(e,t){yR(e,{requestOnly:!0,...t})}a(Gre,"onRequest");function kre(e,t){let r;if(t.securePort){let n=He.get("tls_privateKey"),s=He.get("tls_certificate"),i=t.mtls?.certificateAuthority||He.get("tls_certificateAuthority");r=Lre({ciphers:He.get("tls_ciphers"),key:Ba(n),cert:Ba(s),ca:i&&Ba(i),rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls},e),is[t.securePort]=r}return t.port&&(r=yre(e),is[t.port]=r),r}a(kre,"onSocket");Object.defineProperty(wre.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.startsWith("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function Vre(e,t){let r;for(let{port:n,secure:s}of xB(t)){Zf[n]||(Zf[n]=new Dre({server:r=FB(n,s)}),Zf[n].on("connection",async(c,u)=>{try{let _=new vB(u);_.isWebSocket=!0;let l=eE[n](_),d=u.headers["sec-websocket-protocol"]||"",f=gR[n];if(d){let E;for(let h=0;h<f.length;h++){let p=f[h];p.protocol===d&&(E=!0,p.listener(c,_,l))}if(E)return}for(let E=0;E<f.length;E++){let h=f[E];h.protocol||h.listener(c,_,l)}}catch(_){_n.warn("Error handling WebSocket connection",_)}}),Zf[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=gR[n];o||(o=gR[n]=[]),o.push({listener:e,protocol:i}),eE[n]=AR(RR,n)}return r}a(Vre,"onWebSocket");function UB(e,t){t.writeHead(404),t.end(`Not found
30
+ `)}a(UB,"defaultNotFound")});async function YB({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await wR.getResource(e,{});s=new DR(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await wR.get(e);i&&i.delete()}s=new nE(e,t)}return n&&(n.id=e,n.user={username:t?.username},sl.put(n)),s}function IR(){return rE++,rE>65500&&(rE=1),rE}function CR(e,t,r=e){let{topic:n,retain:s}=e;e.data=t,e.async=!0,e.authorize=!0;let i=ui.getMatch(n);if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return Ke(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var kB,Oo,VB,$B,wR,sl,rE,nE,DR,KB=Oe(()=>{be();Cu();kB=x(Cr()),Oo=x(W());zi();VB=x(Ze()),$B=x(GB());jt();wR=ot({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"}]}}]}),sl=ot({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,VB.getWorkerIndex)()===0&&(async()=>{await $B.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of sl.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await je.getUser(r.user.username)),Ke(r,()=>{try{CR(r,t)}finally{sl.delete(e.id,r)}})}})();a(YB,"getSession");rE=1;a(IR,"getNextMessageId");nE=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),u,_;if(c>-1?(u=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let l=this.subscriptions.find(O=>O.topic===s),d;l?(d=i>0,l.end(),this.subscriptions.splice(this.subscriptions.indexOf(l),1)):d=i===2;let f={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Oo.trace)("Resuming subscription from",s,"from",o);let E=ui.getMatch(_);if(!E){let O=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw O.statusCode=404,O}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let O=f.url.slice(1);if(O.indexOf("#")>-1&&O.indexOf("#")!==O.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,O.indexOf("+")===O.length-1)f.onlyChildren=!0,f.url="/"+O.slice(0,O.length-1);else{let g=O.split("/"),R;for(let v=0;v<g.length;v++)if(g[v].indexOf("+")>-1)if(g[v]==="+")R=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&R)throw new Error("Filters can not be combined");let B=!0;g[g.length-1]==="#"&&(g.length--,B=!1),R&&(n=a(v=>{let M=v.id;if(!Array.isArray(M)||B&&M.length!==g.length)return!1;for(let $=0;$<g.length;$++)if(g[$]!=="+"&&g[$]!==M[$])return!1;return!0},"filter"));let H=g.indexOf("+");f.url="/"+(H>-1?g.slice(0,H):g).concat("").join("/")}}let h=E.path,p=E.Resource,S=await Ke(f,async()=>{let O=await p.subscribe(f);if(!O)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!O[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let g of O)try{let R;if(g.type&&g.type!=="put"&&g.type!=="delete"&&g.type!=="message"&&g.type!=="patch"||n&&!n(g))continue;r?(g.topic=s,R=this.needsAcknowledge(g)):(g.acknowledge?.(),R=IR());let B=g.id;Array.isArray(B)&&(B=Ea(B)),B==null&&(B=""),this.listener(h+"/"+B,g.value,R,t)}catch(R){(0,Oo.warn)(R)}})(),O});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=IR();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),!0}async publish(t,r){return t.user=this.user,CR(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};Ke(r,async()=>{if(!t){let n=await sl.get(this.sessionId,r);n?.doesExist()&&await CR(n,n.data,r)}await sl.delete(this.sessionId,r)}).catch(n=>{(0,Oo.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(CR,"publish");DR=class extends nE{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=IR(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks.get(t);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,Oo.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.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,kB.getNextMonotonicTime)()),(0,Oo.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),wR.put(this.sessionRecord)),t.qos}}});var LR={};ke(LR,{bypassAuth:()=>$re,start:()=>Yre});function $re(){XB=!0}function Yre({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i,sessions:new Set},c,u=r?.mtls;return n&&(c=e.ws((_,l,d)=>{if(_.protocol==="mqtt"){let{onMessage:f,onClose:E}=zB(_,(h,p)=>{if(_.send(h),p&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},l,Promise.resolve(d).then(()=>l?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{(0,pr.info)("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let l;if(u){if(_.authorized)try{let E=u.user;E!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),l=await e.getUser(E,null,null))}catch(E){(0,pr.error)(E)}else if(u.required)return(0,pr.info)(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!l&&XB&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,JB.getSuperUser)());let{onMessage:d,onClose:f}=zB(_,E=>_.write(E),null,l,o);_.on("data",d),_.on("close",f),_.on("error",E=>{(0,pr.info)("Socket error",E)})},{port:t,securePort:s,mtls:u})),c}function zB(e,t,r,n,s){QB||(QB=!0,eu(d=>{sE>0&&d.push({metric:"mqtt-connections",connections:sE,byThread:!0})}));let i;sE++;let o,c={protocolVersion:4},u=(0,oE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){sE--,i||(i=!0,o?.disconnect(),s.sessions.delete(o),tn(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await je.getUser(d.username,d.password.toString(),r),(0,iE.get)(os.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&WB.notify({username:n.username,status:os.AUTH_AUDIT_STATUS.SUCCESS,type:os.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,iE.get)(os.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&WB.error({username:n.username,status:os.AUTH_AUDIT_STATUS.FAILURE,type:os.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return tn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let R=e.deserialize||(e.deserialize=Eo(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?R(d.will.payload):void 0,delete d.will.payload}o=YB({user:n,...d}),o=await o,s.sessions.add(o)}catch(R){return(0,pr.error)(R),tn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:R.code||5,returnCode:R.code||128})}tn(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((R,B,H,v)=>{try{let M=R.indexOf("/",1),$=M>0?R.slice(0,M):R;f({cmd:"publish",topic:R,payload:E(B),messageId:H||Math.floor(Math.random()*1e8),qos:v.qos},$)}catch(M){(0,pr.error)(M),o?.disconnect(),s.sessions.delete(o)}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let R of d.subscriptions){let B;try{B=(await o.addSubscription(R,R.qos>=1)).qos||0}catch(H){(0,pr.error)(H),B=c.protocolVersion<5?128:H.statusCode===403?135:H.statusCode===404?143:128}h.push(B)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let R=[];for(let B of d.unsubscriptions)R.push(o.removeSubscription(B)?0:17);f({cmd:"unsuback",granted:R,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let p=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=Eo(r?.headers.get?.("content-type"))),O=d.payload?.length>0?S(d.payload):void 0,g;try{g=await o.publish(d,O)}catch(R){(0,pr.warn)(R),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:g===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.sessions.delete(o),tn(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,pr.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,oE.generate)(h,c);t(S),Br(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return _i(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var oE,JB,iE,os,pr,WB,XB,QB,sE,jB=Oe(()=>{oE=require("mqtt-packet");KB();JB=x(en());ha();As();jt();iE=x(Z()),os=x(U()),pr=x(W()),WB=(0,pr.loggerWithTag)("auth-event"),XB=(0,iE.get)(os.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a($re,"bypassAuth");a(Yre,"start");sE=0;a(zB,"onSocket")});var Xd={};ke(Xd,{component_errors:()=>xa,loadComponent:()=>aE,loadComponentDirectories:()=>aH,setErrorReporter:()=>zre});function aH(e,t){t&&(UR=t),e&&(PR=e);let r=[];if((0,vn.existsSync)(MR)){let s=(0,vn.readdirSync)(MR,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,pt.join)(MR,o);r.push(aE(c,UR,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(aE(n,UR,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{oH=!0})}function zre(e){ol=e}async function aE(e,t,r,n,s,i){if(!eH.has(e)){eH.set(e,!0),s&&(PR=s);try{let o;n&&(xa=new Map);let c=(0,pt.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,vn.existsSync)(c)?o=n?(0,iH.getConfigObj)():(0,tH.parseDocument)((0,vn.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=vR;let u=[],_=n;for(let l in o){let d=o[l];if(xa.set(n?l:(0,pt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let g=e,R;for(;!(0,vn.existsSync)(R=(0,pt.join)(g,"node_modules",l));)if(g=(0,pt.dirname)(g),g.length<(0,sH.getHdbBasePath)().length){R=null;break}if(R)f=await aE(R,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Qre[l];if(!f)continue;u.push(f);let h=a(g=>(g.origin=r,ot(g)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,O=!p?.https&&p?.port;if(Ha.isMainThread&&(f=await f.startOnMainThread?.({server:je,ensureTable:h,port:O,securePort:S,resources:t,...d})||f,n&&p))for(let g of[O,S])try{if(+g&&!ZB.includes(g)){let R=BR.get(HR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);R&&il.default.warn("Session affinity is not recommended and may cause memory leaks"),(R||!Vf)&&(ZB.push(g),nB(g,R))}}catch(R){console.error("Error listening on socket",g,R,l)}if(t.isWorker&&(f=await f.start?.({server:je,ensureTable:h,port:O,securePort:S,resources:t,...d})||f),PR.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,nH.handleHDBError)("Can not reference parent directories");let g=(0,pt.join)(e,d.files).replace(/\\/g,"/"),R=g.indexOf("/*");if(R>-1&&d.files!==vR[l]?.files&&!(0,vn.existsSync)(g.slice(0,R)))throw new Error(`The path '${g.slice(0,R)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let B=(0,pt.basename)(e),H=d.path||"/";H=H.startsWith("/")?H:H.startsWith("./")?"/"+B+H.slice(2):H==="."?"/"+B:"/"+B+"/"+H;let v,M,$;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",M=(0,pt.join)(e,z)}else($=g.indexOf("/*"))>-1&&(M=g.slice(0,$+1),v=(0,pt.relative)(e,M));let K=!1;if(Ha.isMainThread&&f.setupDirectory&&(K=await f.setupDirectory?.(H,M,t)),t.isWorker&&f.handleDirectory&&(K=await f.handleDirectory?.(H,M,t)),K)continue;for(let z of await(0,rH.default)(g,{onlyFiles:!1,objectMode:!0})){let{path:se,dirent:Te}=z;_=!0;let oe=(0,pt.relative)(e,se).replace(/\\/g,"/");if(v)if(oe.startsWith(v))oe=oe.slice(v.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${oe}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let xe=H+(H.endsWith("/")?"":"/")+oe;try{if(Te.isFile()){let de=await Wre(se);Ha.isMainThread&&await f.setupFile?.(de,xe,se,t),t.isWorker&&await f.handleFile?.(de,xe,se,t)}else Ha.isMainThread&&await f.setupDirectory?.(xe,se,t),t.isWorker&&await f.handleDirectory?.(xe,se,t)}catch(de){de.message=`Could not load ${Te.isFile()?"file":"directory"} '${se}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${de.message}`,ol?.(de),((0,Fa.getWorkerIndex)()===0?console:il.default).error(de),t.set(d.path||"/",new al(de)),xa.set(n?l:(0,pt.basename)(e),de.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,pt.basename)(e)}' due to: ${h.message}`,ol?.(h),((0,Fa.getWorkerIndex)()===0?console:il.default).error(h),t.set(d.path||"/",new al(h),null,!0),xa.set(n?l:(0,pt.basename)(e),h.message)}}if(Ha.isMainThread&&!oH&&i&&(0,Fa.watchDir)(e,async()=>aH()),o.extensionModule)return await Wl((0,pt.join)(e,o.extensionModule));if(!_&&t.isWorker){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;ol?.(new Error(l)),((0,Fa.getWorkerIndex)()===0?console:il.default).error(l),xa.set((0,pt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,ol?.(o),t.set("",new al(o))}}}var vn,pt,Ha,tH,BR,HR,rH,Fa,il,nH,sH,Kre,iH,Wre,MR,PR,oH,UR,xa,Qre,vR,ZB,eH,ol,al,jd=Oe(()=>{vn=require("fs"),pt=require("path"),Ha=require("worker_threads"),tH=require("yaml"),BR=x(Z()),HR=x(U());jO();rb();nb();iv();K0();j0();rH=x(require("fast-glob")),Fa=x(Ze()),il=x(W());Th();jt();nH=x(ee());An();be();sB();sH=x(Z()),Kre=x(uB());Vd();wB();jB();iH=x(Ir());$f();({readFile:Wre}=vn.promises),MR=BR.get(HR.CONFIG_PARAMS.COMPONENTSROOT),PR=new Map,xa=new Map;a(aH,"loadComponentDirectories");Qre={REST:pf,rest:pf,graphqlSchema:Sh,jsResource:Rh,fastifyRoutes:eR,login:Oh,static:tR,operationsApi:Kre,customFunctions:{},http:{},clustering:SR,authentication:Du,mqtt:LR},vR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(vR,"static",{value:{files:"web/**"}});ZB=[],eH=new Map;a(zre,"setErrorReporter");a(aE,"loadComponent");al=class extends vt{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}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 NR=T((Jhe,uH)=>{var{isMainThread:cH}=require("worker_threads"),{getTables:Jre}=(be(),te(Fe)),{loadComponentDirectories:Xre,loadComponent:jre}=(jd(),te(Xd)),{resetResources:Zre}=(Cu(),te(EU)),ene=PT(),tne=Ir(),{dirname:rne}=require("path"),{getConnection:nne}=At(),sne=Z(),ine=U(),xR=new Map;async function one(e=!1){!cH&&sne.get(ine.CONFIG_PARAMS.CLUSTERING_ENABLED)&&nne();try{cH&&await ene()}catch(n){console.error(n)}let t=Zre();Jre(),t.isWorker=e,await jre(rne(tne.getConfigFilePath()),t,"hdb",!0,xR),await Xre(xR,t);let r=[];for(let[n]of xR)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(one,"loadRootComponents");uH.exports.loadRootComponents=one});var Ze=T((jhe,Ti)=>{"use strict";var{Worker:ane,MessageChannel:cne,parentPort:as,isMainThread:VR,threadId:une,workerData:Hs}=require("worker_threads"),{PACKAGE_ROOT:lne}=U(),{join:fH,isAbsolute:_ne,extname:dne}=require("path"),{server:EH}=(jt(),te(Ii)),{watch:fne,readdir:Ene}=require("fs/promises"),{totalmem:lH}=require("os"),cl=U(),hH=Z(),xs=W(),{randomBytes:hne}=require("crypto"),{_assignPackageExport:mne}=require("../../index"),pne=U(),_H=1024*1024,Si=[],dn=[],Sne=50,$R=1e4,Tne="restart",mH="request_thread_info",pH="resource_report",SH="thread_info",TH="added-port",gne="ack",FR;mne("threads",dn);Ti.exports={startWorker:qR,restartWorkers:KR,shutdownWorkers:yne,workers:Si,setMonitorListener:Une,onMessageFromWorkers:Nne,onMessageByType:NH,broadcast:Ine,broadcastWithAcknowledgement:Dne,setChildListenerByType:bne,getWorkerIndex:gH,getWorkerCount:RH,getTicketKeys:OH,setMainIsWorker:Ane,setTerminateTimeout:Rne,restartNumber:Hs?.restartNumber||1};dn.onMessageByType=NH;dn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=dn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var YR;function Rne(e){$R=e}a(Rne,"setTerminateTimeout");function gH(){return Hs?Hs.workerIndex:YR?0:void 0}a(gH,"getWorkerIndex");function RH(){return Hs?Hs.workerCount:YR?1:void 0}a(RH,"getWorkerCount");function Ane(e){YR=e}a(Ane,"setMainIsWorker");var AH=1,cE;function OH(){return cE||(cE=VR?hne(48):Hs.ticketKeys,cE)}a(OH,"getTicketKeys");Object.defineProperty(EH,"workerIndex",{get(){return gH()}});Object.defineProperty(EH,"workerCount",{get(){return RH()}});var bH={[mH](e,t){Lne(t)},[pH](e,t){Mne(t,e)}};function qR(e,t={}){let r=process.constrainedMemory?.()||lH();r=Math.min(r,lH(),2e4*_H);let n=hH.get(cl.CONFIG_PARAMS.MAXHEAPMEMORY)??Math.max(Math.floor(r/_H/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let u of dn){let _=new cne;_.existingPort=u,i.push(_),o.push(_.port2)}dne(e)||(e+=".js");let c=new ane(_ne(e)?e:fH(lne,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:AH=t.threadCount,name:t.name,restartNumber:Ti.exports.restartNumber,ticketKeys:OH()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:TH,port:u,threadId:c.threadId},[u]);return lE(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>qR(e,t),c.on("error",u=>{console.error("Worker error:",u),xs.error("Worker error:",u)}),c.on("exit",u=>{Si.splice(Si.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Sne?(t.unexpectedRestarts=c.unexpectedRestarts+1,qR(e,t)):xs.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{bH[u.type]?.(u,c)}),Si.push(c),vne(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(qR,"startWorker");var One=[cl.THREAD_TYPES.HTTP];async function KR(e=null,t=Math.max(AH>3,1),r=!0){if(VR){if(r){let{loadRootComponents:o}=NR();await o()}Ti.exports.restartNumber++,t<1&&(t=t*Si.length);let n=[],s=[];for(let o of Si.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;xs.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Ti.exports.restartNumber,type:cl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=One.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),$R*2).unref();o.on("exit",()=>{clearTimeout(l),n.splice(n.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(n.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===pne.ITC_EVENT_TYPES.CHILD_STARTED&&(xs.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(l)),_.off("message",f))},"startListener");xs.trace("Waiting for worker to start",_.threadId),_.on("message",f)});s.push(l),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}=Hd();r&&(e==="http"||!e)&&hH.get(cl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else as.postMessage({type:Tne,workerType:e})}a(KR,"restartWorkers");function bne(e,t){bH[e]=t}a(bne,"setChildListenerByType");function yne(e){return KR(e,1/0,!1)}a(yne,"shutdownWorkers");var yH=[];function Nne(e){yH.push(e)}a(Nne,"onMessageFromWorkers");var GR=new Map;function NH(e,t){let r=GR.get(e);r||GR.set(e,r=[]),r.push(t)}a(NH,"onMessageByType");var wne=10;async function Ine(e){let t=0;for(let r of dn)try{r.postMessage(e),t++>wne&&(t=0,await new Promise(setImmediate))}catch(n){xs.error("Unable to send message to worker",n)}}a(Ine,"broadcast");var uE=new Map,Cne=1;function Dne(e){return new Promise(t=>{let r=0;for(let n of dn)try{let s=Cne++,i=a(()=>{uE.delete(s),--r===0&&t(),n!==as&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,uE.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of uE)o.port===n&&o()})),n.postMessage(e),r++}catch(s){xs.error("Unable to send message to worker",s)}r===0&&t()})}a(Dne,"broadcastWithAcknowledgement");function Lne(e){e.postMessage({type:SH,workers:wH()})}a(Lne,"sendThreadInfo");function wH(){let e=Date.now();return Si.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(wH,"getChildWorkerInfo");function Mne(e,t){e.resources=t,e.resources.updated=Date.now()}a(Mne,"recordResourceReport");var kR;function Une(e){kR=e}a(Une,"setMonitorListener");var Pne=1e3,dH=!1;function vne(){dH||(dH=!0,setInterval(()=>{for(let e of Si){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}kR&&kR()},Pne).unref())}a(vne,"startMonitoring");var Bne=1e3;if(as){lE(as);for(let e=0,t=Hs.addPorts.length;e<t;e++){let r=Hs.addPorts[e];r.threadId=Hs.addThreadIds[e],lE(r)}setInterval(()=>{let e=process.memoryUsage();as.postMessage({type:pH,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Bne).unref(),FR=a(()=>new Promise((e,t)=>{as.on("message",r),as.postMessage({type:mH});function r(n){n.type===SH&&(as.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else FR=wH;Ti.exports.getThreadInfo=FR;function lE(e,t){dn.push(e),e.on("message",r=>{if(r.type===TH)r.port.threadId=r.threadId,lE(r.port);else if(r.type===gne){let n=uE.get(r.id);n&&n()}else{for(let s of yH)s(r,e);let n=GR.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){xs.error(i)}}}).on("close",()=>{dn.splice(dn.indexOf(e),1)}).on("exit",()=>{dn.splice(dn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(lE,"addPort");if(VR){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await Ene(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(fH(n,i.name));try{for await(let{filename:i}of fne(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await KR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");Ti.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else as.on("message",async e=>{let{type:t}=e;t===cl.ITC_EVENT_TYPES.SHUTDOWN&&(Ti.exports.restartNumber=e.restartNumber,as.unref(),setTimeout(()=>{xs.warn("Thread did not voluntarily terminate",une),process.exit(0)},$R).unref())})});var YI={};ke(YI,{AUDIT_STORE_OPTIONS:()=>HH,createAuditEntry:()=>jl,openAuditStore:()=>EE,readAuditEntry:()=>Lt,setAuditRetention:()=>xne,transactionKeyEncoder:()=>BH});function EE(e){let t=e.auditStore=e.openDB(UH.AUDIT_STORE_NAME,HH);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=_E){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed")return;let o=0,c;try{for(let{key:u,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-WR})){if((_[0]&15)===JR){let l=Lt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=Hne){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,WR/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,fE.getWorkerIndex)()===(0,fE.getWorkerCount)()-1&&s(_E),t}function xne(e,t=_E){WR=e,_E=t}function jl(e,t,r,n,s,i,o){let c=xH[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let u=1;n&&(n>1?qa.setFloat64(0,n):fn.set(qh),u=9),f(0),f(t),d(r),qa.setFloat64(u,e),u+=8,s?d(s):fn[u++]=0,fn[n?8:0]=c;let l=fn.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,Ga.writeKey)(E,fn,u);let p=u-h-1;p>127?p>16383?(jR.error("Key or username was too large for audit entry",E),u=h+1,fn[h]=0):(fn.copyWithin(h+2,h+1,u),qa.setUint16(h,p|32768),u++):fn[h]=p}function f(E){E<128?fn[u++]=E:E<16384?(qa.setUint16(u,E|32768),u+=2):E<1056964608?(qa.setUint32(u,E|3221225472),u+=4):(fn[u]=255,qa.setUint32(u+1,E),u+=5)}}function Lt(e){try{let t=e.dataView||(e.dataView=new XR(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:xH[n&7],tableId:i,get recordId(){return MH(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?MH(e,l,d):void 0},getValue(f,E,h){if(n&QR||n&zR&&!E)return f.decoder.decode(e.subarray(t.position));if(n&zR&&h)return ZR(f.getEntry(this.recordId),h,f)}}}catch{return jR.error("Reading audit entry error",e),{}}}function MH(e,t,r){let n=e.subarray(t,r);return(0,Ga.readKey)(n,0,r-t)}var Ga,dE,UH,PH,fE,vH,jR,fn,qa,BH,HH,WR,Hne,_E,QR,zR,IH,JR,CH,DH,LH,xH,XR,Ui=Oe(()=>{Ga=require("ordered-binary"),dE=x(Z()),UH=x(lt()),PH=x(U()),fE=x(Ze()),vH=x(J());Bo();jR=x(W());hE();(0,dE.initSync)();fn=Buffer.alloc(1024),qa=new DataView(fn.buffer,fn.byteOffset,1024),BH={writeKey(e,t,r){return e===Tc?(t.set(Tc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Ga.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,Ga.readKey)(e,t,r)}},HH={encoding:"binary",keyEncoder:BH},WR=(0,vH.convertToMS)((0,dE.get)(PH.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Hne=1e3,_E=1e4;a(EE,"openAuditStore");a(xne,"setAuditRetention");QR=16,zR=32,IH=1,JR=2,CH=3,DH=4,LH=5,xH={put:IH|QR,[IH]:"put",delete:JR,[JR]:"delete",message:CH|QR,[CH]:"message",invalidate:DH,[DH]:"invalidate",patch:LH|zR,[LH]:"patch"};a(jl,"createAuditEntry");a(Lt,"readAuditEntry");XR=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return 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{debugger}}};a(MH,"readKeySafely")});var eA={};ke(eA,{add:()=>mE,applyReverse:()=>FH,getRecordAtTime:()=>ZR,rebuildUpdateBefore:()=>pE});function mE(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function pE(e,t){let r=null;for(let n in e)if(n in t){let s=t[n];if(s?.__op__){let i=e[n];if(i?.__op__)if(i.__op__===s.__op__)r||(r={}),r[n]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[n]=i,mE(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function FH(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=Fne[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=qH}}function ZR(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let u=n.get(i),_=Lt(u);switch(_.type){case"put":s=_.getValue(r);break;case"patch":FH(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let u in s)s[u]===qH&&(o[u]=!0,c++);for(;c>0&&i>0;){let u=n.get(i),_=Lt(u),l;switch(_.type){case"put":l=_.getValue(r);break;case"patch":l=_.getValue(r);break}for(let d in l)o[d]&&(s[d]=l[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let u in o)s[u]=null;return s}var Fne,qH,hE=Oe(()=>{Ui();a(mE,"add");mE.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};Fne={add:mE};a(pE,"rebuildUpdateBefore");a(FH,"applyReverse");qH={};a(ZR,"getRecordAtTime")});function Gr(e){return e[wt]||(e[wt]=Object.create(null))}function AE(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,u,_;if(o.resolve)_={get(){return o.resolve(this,this[ye])},set(l){return o.set(this,l)},configurable:!0};else{switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be a string, attempt to assign ${l}`);Gr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be a string, attempt to assign ${l}`);Gr(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be a number, attempt to assign ${l}`);Gr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new En.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Gr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new En.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Gr(this)[c]=l},"set");break;case"BigInt":u=a(function(l){if(!(typeof l=="bigint"||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=BigInt(l);else throw new En.ClientError(`${c} must be a number, attempt to assign ${l}`);Gr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Gr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new En.ClientError(`${c} must be a Date, attempt to assign ${l}`);Gr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Gr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Gr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be an object, attempt to assign ${l}`);Gr(this)[c]=l},"set")}_={get(){let l=this[wt];if(l&&c in l){let f=l[c];if(f?.__op__){let E=this[he]?.[c];return f.update(E)}return f}let d=this[he]?.[c];if(d&&typeof d=="object"){let f=kH(d,o);if(f)return l||(l=this[wt]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let u=this[wt];return u?.[o]!==void 0?u[o]:this[he]?.[o]}),i("set",function(o,c){let u=n[o];if(u)return u.set.call(this,c);if(t.sealed)throw new En.ClientError("Can not add a property to a sealed table schema");Gr(this)[o]=c}),i("deleteProperty",function(o){Gr(this)[o]=void 0}),i("toJSON",function(){let o=this[wt],c;for(let _ in o){c||(c=Object.assign({},this[he]));let l=o[_];if(l?.__op__){let d=c[_];l=l.update(d)}c[_]=l}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[he])),Object.assign(c,this)),c||this[he]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function kH(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){if(s?.[he])throw new Error("Can not track an already tracked object, check for circular references");this[he]=s}},AE(r,t)),new r(e)):new SE(e);case Array:let n=new gE(e.length);n[he]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=kH(o,t?.elements)),n[s]=o}return n;default:return e}}function k_(e){let t=e[wt],r;for(let s in t){r||(r=Object.assign({},e[he]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=k_(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[he])),Object.assign(r,e)),r||e[he]}function yo(e,t=e[wt]){let r;if(GH.call(e,he)&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=yo(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[he]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=eA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=yo(s);r[n]=s}return r?Object.freeze(r):GH.call(e,he)?e[he]:e}function TE(e){let t=e[he];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[bo]||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?.[he]===s){if(TE(i))return!0}else return!0}}else{let r=e[wt];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[he]===i){if(TE(s))return!0}else return!0}else return!0}}return!1}var En,wt,SE,GH,bo,gE,RE,V_=Oe(()=>{An();En=x(ee());hE();wt=Symbol("own-data");a(Gr,"getChanges");a(AE,"assignTrackedAccessors");a(kH,"trackObject");SE=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[he])throw new Error("Can not track an already tracked object, check for circular references");this[he]=t}};AE(SE,{});a(k_,"collapseData");GH=Object.prototype.hasOwnProperty;a(yo,"deepFreeze");a(TE,"hasChanges");bo=Symbol.for("has-array-changes"),gE=class extends Array{static{a(this,"TrackedArray")}[bo];constructor(t){super(t)}splice(...t){return this[bo]=!0,super.splice(...t)}push(...t){return this[bo]=!0,super.push(...t)}pop(){return this[bo]=!0,super.pop()}unshift(...t){return this[bo]=!0,super.unshift(...t)}shift(){return this[bo]=!0,super.shift()}};gE.prototype.constructor=Array;RE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var lp={};ke(lp,{CONTEXT:()=>ye,ID_PROPERTY:()=>Me,IS_COLLECTION:()=>hn,RECORD_PROPERTY:()=>he,Resource:()=>vt,snake_case:()=>Gne,transformForSelect:()=>bE});function Gne(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function VH(e,t){if(ul=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(ul=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new rA;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){ul=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function kr(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,u,_,l;if(r?(o?(l=i,o=o[ye]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(l=s,c=l[this.primaryKey]??null,o=i[ye]||i):l=i:(l=s,c=l[Me]??l[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[ye]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(u=s,s[Symbol.iterator]){c=[],_=!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]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let E=c.indexOf("?");if(E>-1){let p=this.parseQuery(c.slice(E+1));u?u=Object.assign(p,u):u=p,c=c.slice(0,E)}let h=this.parsePath(c,o,u);h?.id!==void 0?(h.query&&(u?u=Object.assign(h.query,u):u=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(u?.ensureLoaded!=null||u?.async||_?(d=Object.assign({},t),u?.ensureLoaded!=null&&(d.ensureLoaded=u.ensureLoaded),u?.async&&(d.async=u.async),_&&(d.isCollection=!0)):d=t,o.transaction){let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)}else return d.resetTransaction=!0,Ke(o,()=>{let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)},d);function f(E){if(o.authorize){o.authorize=!1;let h=t.type==="read"?E.allowRead(o.user,u,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,l,o):E.allowUpdate(o.user,l,o):t.type==="create"?E.allowCreate(o.user,l,o):E.allowDelete(o.user,u,o);if(h?.then)return h.then(p=>{if(!p)throw new OE(o.user);return typeof l?.then=="function"?l.then(S=>e(E,u,o,S)):e(E,u,o,l)});if(!h)throw new OE(o.user)}return typeof l?.then=="function"?l.then(h=>e(E,u,o,h)):e(E,u,o,l)}a(f,"authorizeActionOnResource")}}function Vr(e,t){let r=new KH.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 tA(e,t,r){let n=e[he];if(n){let s=e[wt];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function bE(e,t){let r=t?.propertyResolvers,n=t[ye],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):tA(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(c);let _=[],l=i(tA(u,r,n));for(let d of e)_.push(l(d));return _},"transform");let o=e.forceNulls;return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(f=>f&&typeof f=="object"?c(f):f);let _={},l=i(tA(u,r,n)),d;for(let f of e){let E=l(f);E===void 0&&o&&(E=null),E?.then?(d||(d=[]),d.push(E.then(h=>_[f.name||f]=h))):_[f.name||f]=E}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let u=s[c.name];if(!u){let l=r[c.name]?.definition?.tableClass;u=s[c.name]=bE(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var $H,YH,KH,ye,Me,hn,he,qne,vt,OE,ul,rA,An=Oe(()=>{$H=require("crypto");fc();YH=require("../../index"),KH=x(ee());V_();zi();hf();ye=Symbol.for("context"),Me=Symbol.for("primary-key"),hn=Symbol("is-collection"),he=Symbol("stored-record"),qne={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},vt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Me]=t;let n=r?.[ye];this[ye]=n!==void 0?n:r||null}static get=kr(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null&&!c.selectApplied){let _=bE(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=kr(function(t,r,n,s){if(Array.isArray(s)&&t[hn]){let i=[],o=n.authorize;for(let c of s){let u=t.constructor,_=u.getResource(c[u.primaryKey],n,{async:!0});_.then?i.push(_.then(l=>l.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):Vr(t,"put")},{hasContent:!0,type:"update"});static patch=kr(function(t,r,n,s){return t.patch?t.patch(s,r):Vr(t,"patch")},{hasContent:!0,type:"update"});static delete=kr(function(t,r,n,s){return t.delete?t.delete(r):Vr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,$H.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),Ke(n,()=>{let i=new this(s,n),o=i.update?i.update(r):Vr(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=kr(function(t,r,n,s){return t.invalidate?t.invalidate(r):Vr(t,"delete")},{hasContent:!1,type:"update"});static post=kr(function(t,r,n,s){return t[Me]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=kr(function(t,r,n,s){return t.connect?t.connect(s,r):Vr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=kr(function(t,r,n,s){return t.subscribe?t.subscribe(r):Vr(t,"subscribe")},{type:"read"});static publish=kr(function(t,r,n,s){return t[Me]!=null&&t.update?.(),t.publish?t.publish(s,r):Vr(t,"publish")},{hasContent:!0,type:"create"});static search=kr(function(t,r,n,s){let i=t.search?t.search(r):Vr(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=bE(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=kr(function(t,r,n,s){return t.search?t.search(s,r):Vr(t,"search")},{hasContent:!0,type:"read"});static copy=kr(function(t,r,n,s){return t.copy?t.copy(s,r):Vr(t,"copy")},{type:"create"});static move=kr(function(t,r,n,s){return t.move?t.move(s,r):Vr(t,"move")},{type:"delete"});post(t){if(this[hn])return this.constructor.create(this[Me],t,this[ye]);Vr(this,"post")}static isCollection(t){return t?.[hn]}static coerceId(t){return t}static parseQuery(t){return Ef(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&qne[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:VH(t,this),isCollection:ul}}let i=VH(t,this);return ul?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[ye],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(s=_?.find(l=>l.constructor===c),s)return s;_||u.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=u.find(_=>_[Me]===t&&_.constructor===c),s)return s;if(u.push(s=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Me],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[hn]=!0),s}subscribe(t){return new Rn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Rn}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[Me]}getContext(){return this[ye]}};vt.prototype[ye]=null;(0,YH._assignPackageExport)("Resource",vt);a(Gne,"snake_case");OE=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(VH,"pathToId");rA=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(kr,"transactional");a(Vr,"missingMethod");a(tA,"selectFromObject");a(bE,"transformForSelect")});function QH(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;ka||((0,yE.onMessageByType)(WH,l=>{zH(l.path)}),ka=Object.create(null));let o=ka[s]||(ka[s]=[]);o.auditStore=e.auditStore,o.lastTxnTime==null&&(o.lastTxnTime=Date.now());let c=o[i];c||(c=o[i]=new Map,c.envs=o,c.tableId=i,c.store=e.primaryStore),t=Ea(t);let u=new sA(r);u.startTime=n;let _=c.get(t);return _?_.push(u):(c.set(t,_=[u]),_.tables=c,_.key=t),u.subscriptions=_,u}function zH(e,t){if(!ka)return;let r=ka[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(s){throw s.message+=" in "+e,s}let n;for(let{key:s,value:i}of r.auditStore.getRange({start:r.lastTxnTime,exclusiveStart:!0})){r.lastTxnTime=s;let o=Lt(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=Ea(o.recordId),d=0;do{let f=c.get(l);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=s){(0,nA.info)("omitting",u,h.startTime,s);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(n?n.push(h):n=[h]),h.txnInProgress=o.version),h.listener(u,o,s,p)}catch(p){console.error(p),(0,nA.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E):l=null,d++}while(!0)}if(n)for(let s of n)s.txnInProgress=null,s.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function JH(e,t){let r=t||e,n=r.env;if(t&&!t.cache&&(t.cache=new Map),!n.hasBroadcastListener){n.hasBroadcastListener=!0;let s=n.path;r.on("aftercommit",()=>{(0,yE.broadcast)({type:WH,path:s}),zH(s,!0)})}}var nA,yE,WH,ka,gme,sA,XH=Oe(()=>{nA=x(W()),yE=x(Ze());fc();Cu();Ui();WH="transaction",gme=Buffer.alloc(4096);a(QH,"addSubscription");sA=class extends Rn{static{a(this,"Subscription")}listener;subscriptions;startTime;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,r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(zH,"notifyFromTransactionData");a(JH,"listenToCommits")});var Hg={};ke(Hg,{coerceType:()=>NE,makeTable:()=>CE,setServerUtilities:()=>Jne,updateResource:()=>wE});function CE(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:p}=e;p||(p=[]),JH(i,u);let S=Vh(i,n,u),O=0,g,R,B={},H=Promise.resolve(),v,M,$;for(let Y of p)(Y.assignCreatedTime||Y.name==="__createdtime__")&&(v=Y),(Y.assignUpdatedTime||Y.name==="__updatedtime__")&&(M=Y),Y.expiresAt&&($=Y),Y.isPrimaryKey&&(B=Y);let K,z=[],se=[],Te=1,oe=2,xe={},de={},It=864e5,bl,yl,ks,TA=!1,kE,Yx=i.getRange({start:!1,end:!1}).constructor,Kx=10,Wx=6;E&&AA();class We extends vt{static name=s;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=s;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=v;static updatedTimeProperty=M;static propertyResolvers;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,A){A&&(this.sourceOptions=A,(A.expiration||A.eviction||A.scanInterval)&&this.setTTLExpiration(A)),A?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),R=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let I=a(w=>{let N=this.sources.slice(0,-1);if(N=N.filter(P=>P[w]&&(!P[w].reliesOnPrototype||P.prototype[w])),N.length>0)if(N.length===1){let P=N[0];return(L,D,F)=>{if(L?.source!==P)return P[w](D,F,L)}}else return(P,L,D)=>{let F=[];for(let G of N){if(P?.source===G)break;F.push(G[w](L,D,P))}return Promise.all(F)}},"getApplyToIntermediateSource"),b=this.sources[this.sources.length-1],y=a(w=>{if(b[w]&&(!b[w].reliesOnPrototype||b.prototype[w]))return(N,P,L)=>{if(!N?.source)return b[w](P,L,N)}},"getApplyToCanonicalSource");return xe={put:y("put"),patch:y("patch"),delete:y("delete"),publish:y("publish")},de={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish"),invalidate:I("invalidate")},(async()=>{let w=!1,N=a(async(P,L)=>{let D=P.value,F=P.table?et[c][P.table]:We;if(c===Bn.SYSTEM_SCHEMA_NAME&&(P.table===Bn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||P.table===Bn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(w=!0),P.id===void 0&&(P.id=D[F.primaryKey],P.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(P));P.source=m;let G=await F.getResource(P.id,L,Va);switch(P.type){case"put":return G._writeUpdate(D,!0,Va);case"patch":return G._writeUpdate(D,!1,Va);case"delete":return G._writeDelete(Va);case"publish":return G._writePublish(D,Va);case"invalidate":return G.invalidate(Va);default:ze.error("Unknown operation",P.type,P.id)}},"writeUpdate");try{let P=m.subscribe;P&&h==null&&(h=!0);let L=m.subscribeOnThisThread?m.subscribeOnThisThread((0,wo.getWorkerIndex)()):(0,wo.getWorkerIndex)()===0,D=P&&L&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(D){let F;for await(let G of D)try{if(!(G.type==="transaction"?G.writes[0]:G)){ze.error("Bad subscription event",G);continue}if(G.source=m,F)if(G.beginTxn)F.resolve();else{N(G,F);continue}if(G.type==="end_txn")continue;let ae=Ke(G,()=>{if(G.type==="transaction"){let re=[];for(let ce of G.writes)try{re.push(N(ce,G))}catch(ve){throw ve.message+=" writing "+JSON.stringify(ce)+" of event "+JSON.stringify(G),ve}return Promise.all(re)}else if(G.type==="define_schema"){let re=this.attributes.slice(0),ce;for(let ve of G.attributes)re.find(ne=>ne.name===ve.name)||(re.push(ve),ce=!0);ce&&(ot({table:s,database:c,attributes:re,origin:"cluster"}),ml.signalSchemaChange(new pl.SchemaEventMsg(process.pid,Bn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return G.beginTxn?(F=G,N(G,G),new Promise(re=>{F.resolve=re})):N(G,G)});w&&(await ae,ml.signalUserChange(new pl.UserEventMsg(process.pid))),G.onCommit&&(ae?.then?ae.then(G.onCommit):G.onCommit())}catch(ie){ze.error("error in subscription handler",ie)}}}catch(P){ze.error(P)}})(),this}static getResource(m,A,I){let b=super.getResource(m,A,I);if(m!=null){Qa(m);try{if(b.hasOwnProperty(he))return b;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let y=!I?.async||i.cache?.get(m),w=gr(A),N=w.getReadTxn();if(N?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return VE(m,A,{transaction:N},y,P=>{if(P?wE(b,P):b[he]=null,A.onlyIfCached&&A.noCacheStore){if(!b.doesExist())throw new mn.ServerError("Entry is not cached",504)}else if(I?.ensureLoaded){let L=$E(m,P,A,b);if(L)return w?.disregardReadTxn(),b[iA]=!0,aA(L,D=>(wE(b,D),b))}return b})}catch(y){throw y.message.includes("Unable to serialize object")&&(y.message+=": "+JSON.stringify(m)),y}}return b}ensureLoaded(){let m=$E(this[Me],this[$r],this[ye]);if(m)return this[iA]=!0,aA(m,A=>{this[$r]=A,this[he]=A.value,this[El]=A.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,It=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");It=It||(d+f)/4,KE()}static enableAuditing(m=!0){E=m,m&&AA(),We.audit=m}static coerceId(m){return m===""?null:NE(m,B)}static async dropTable(){if(delete et[c][s],c===o){for(let m of p)l.remove(We.tableName+"/"+m.name),r[m.name]?.drop();l.remove(We.tableName+"/"),i.drop(),await l.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));ml.signalSchemaChange(new pl.SchemaEventMsg(process.pid,Bn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[hn])return this.search(m);if(this[Me]===null){if(m?.conditions)return this.search(m);let A=We.getRecordCount();return{recordCount:A.recordCount,estimatedRecordRange:A.estimatedRange,records:"./",name:s,database:c,attributes:p}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[ye]?.returnNonexistent)return this}allowRead(m,A){let I=wl(m);if(I?.read){if(I.isSuperUser)return!0;let b=I.attribute_permissions,y=A?.select;if(b?.length>0||TA&&y){if(A||(A={}),y){let w=b?.length>0&&oA(b,"read");A.select=y.map(N=>{let P=N.name||N;if(!w||w[P]){let L=ks[P]?.definition?.tableClass;if(L){if(N.name||(N={name:N}),!L.prototype.allowRead.call(null,m,N))return!1;if(!N.select)return N.name}return N}}).filter(Boolean)}else A.select=b.filter(w=>w.read&&!ks[w.attribute_name]).map(w=>w.attribute_name);return A}else return!0}}allowUpdate(m,A){let I=wl(m);if(I?.update){let b=I.attribute_permissions;if(b?.length>0){let y=oA(b,"update");for(let w in A)if(!y[w])return!1;for(let w of b){let N=w.attribute_name;!w.update&&!(N in A)&&(A[N]=this.getProperty(N))}}return!0}}allowCreate(m,A){if(this[hn]){let I=wl(m);if(I?.insert){let b=I.attribute_permissions;if(b?.length>0){let y=oA(b,"insert");for(let w in A)if(!y[w])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return wl(m)?.delete}update(m,A){if(!gr(this[ye]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let b;return typeof m=="object"&&m&&(A?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[he]={},this[wt]=m):(b=this[wt],b&&(m=Object.assign(b,m)),this[wt]=b=m)),this._writeUpdate(this[wt],A),this}addTo(m,A){if(typeof A=="number")this[ll]===ZH?this.set(m,(+this.getProperty(m)||0)+A):(this[ll]||this.update(),this.set(m,new RE(A)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,A){if(typeof A=="number")return this.addTo(m,-A);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let A=this[ye],I=this[Me];Qa(I),gr(this[ye]).addWrite({key:I,store:i,invalidated:!0,entry:this[$r],nodeName:this[ye]?.nodeName,before:xe.invalidate?.bind(this,A,I),beforeIntermediate:de.invalidate?.bind(this,A,I),commit:(y,w)=>{if(w?.version>y)return;let N=null;for(let P in r)N||(N={}),N[P]=this.getProperty(P);S(I,N,this[$r],y,_l,E,this[ye],0,"invalidate")}})}static evict(m,A,I){let b=this.Source,y;if(!((R||E)&&(!A||(y=i.getEntry(m),!y||!A)||y.version!==I))){if(R){if(i.hasLock(m,y.version))return;let w;for(let N in r)w||(w={}),w[N]=A[N];if(w)return S(m,w,y,I,dl,null,null,0,null,!0)}return i.ifVersion(I,()=>{Nl(m,A,null)}),E?S(m,null,y,I,dl,null,null,0,null,!0):i.remove(m,I)}}lock(){throw new Error("Not yet implemented")}static operation(m,A){return m.table||=s,m.schema||=c,ix.operation(m,A)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,A,I){let b=this[ye],y=gr(b),w=this[Me];Qa(w);let N=this[$r];this[ll]=A?ZH:Wne;let P={key:w,store:i,entry:N,nodeName:b?.nodeName,validate:L=>{m||(m=this[wt]),A||m&&TE(m)?(this.validate(m,!A),b?.source||(M&&(m[M.name]=M.type==="Date"?new Date(L):M.type==="String"?new Date(L).toISOString():L),A&&(t&&m[t]!==w&&(m[t]=w),v&&(N?.value?m[v.name]=N?.value[v.name]:m[v.name]=v.type==="Date"?new Date(L):v.type==="String"?new Date(L).toISOString():L),m=yo(m)))):y.removeWrite(P)},before:A?xe.put?()=>xe.put(b,w,m):null:xe.patch?()=>xe.patch(b,w,m):xe.put?()=>xe.put(b,w,yo(this)):null,beforeIntermediate:A?de.put?()=>de.put(b,w,m):null:de.patch?()=>de.patch(b,w,m):de.put?()=>de.put(b,w,yo(this)):null,commit:(L,D,F)=>{if(F){if(b&&D?.version>(b.lastModified||0)&&(b.lastModified=D.version),this[$r]=D,D?.value?.[he])throw new Error("Can not assign a record to a record, check for circular references");A||(this[he]=D?.value??null)}this[wt]=m,this[El]=L;let G=D?.value,ie=m;if(this[ll]=0,D?.version>=L)if(E){let ve=D.localTime,ne=D.version;for(;ie&&(ve>L||ne>=L&&ve>0);){let fe=u.get(ve),j=Lt(fe);if(ne=j.version,ne>L){if(j.type==="patch"){let le=j.getValue(i);ie=pE(ie,le)}else if(j.type==="put"||j.type==="delete")return}else if(ne===L)return;ve=j.previousLocalTime}}else{if(A)return;ie=pE(ie,G)}let ae;if(A?ae=ie:(this[he]=G,ae=A?ie:yo(this,ie)),this[he]=ae,ae?.[he])throw new Error("Can not assign a record to a record, check for circular references");let re;A||(re=m),Nl(w,G,ae);let ce=A?"put":"patch";S(w,ae,D,L,0,E,b,b.expiresAt||(d?d+Date.now():0),ce,!1,re)}};y.addWrite(P)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[hn]){for await(let A of this.search(m))(await We.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[he]?this._writeDelete(m):!1}_writeDelete(m){let A=gr(this[ye]),I=this[Me];Qa(I);let b=this[ye];return A.addWrite({key:I,store:i,resource:this,nodeName:b?.nodeName,before:xe.delete?.bind(this,b,I),beforeIntermediate:de.delete?.bind(this,b,I),commit:(y,w,N)=>{let P=w?.value;N&&(b&&w?.version>(b.lastModified||0)&&(b.lastModified=w.version),wE(this,w)),!(w?.version>y)&&(Nl(this[Me],P),ze.trace("Write delete entry",I,y),E||h?(S(I,null,this[$r],y,0,E,this[ye],0,"delete"),E||KE()):i.remove(this[Me]))}}),!0}search(m){let A=this[ye],I=gr(A);if(!m)throw new Error("No query provided");let b=m.conditions;b?b.length===void 0&&(b=b[Symbol.iterator]?Array.from(b):[b]):b=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Me]&&(b=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(b));let y,w={};function N(j,le){let St;switch(le){case"and":case void 0:if(j.length<1)throw new Error('An "and" operator requires at least one condition');St=!0;break;case"or":if(j.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+le)}let Hn=St&&{},xn;for(let Qe of j){if(Qe.conditions){Qe.conditions=N(Qe.conditions,Qe.operator);continue}let Rr=Qe[0]??Qe.attribute,zr=Rr==null?B:Ls(p,Rr);if(zr){if(St){let Ar=Mn(Rr),Fn=Hn[Ar];Fn?(Fn.push(Qe),xn=!0):Hn[Ar]=[Qe]}(zr.type||ug[Qe.comparator])&&(Qe[1]===void 0?Qe.value=L(Qe.value,zr):Qe[1]=L(Qe[1],zr))}else if(Rr!=null)throw(0,mn.handleHDBError)(new Error,`${Rr} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return j;if(xn)for(let Qe in Hn){let Rr=Hn[Qe],zr=Rr.length;if(zr>1)for(let Ar=0;Ar<zr;Ar++){let Fn=Rr[Ar];if(Fn.comparator==="ge"||Fn.comparator==="greater_than_equal")for(let Vs=0;Vs<zr;Vs++){let Do=Rr[Vs];(Do.comparator==="le"||Do.comparator==="less_than_equal")&&(Fn.comparator="between",Fn.value=[Fn.value,Do.value],j.splice(j.indexOf(Do),1))}if(Fn.comparator==="equals"||!Fn.comparator){for(let Vs=0;Vs<zr;Vs++)if(Vs!==Ar){let Do=Rr[Vs];j.splice(j.indexOf(Do),1)}break}}}return j}a(N,"prepareConditions");function P(j,le){if(m.enforceExecutionOrder)return j;for(let St of j)St.conditions&&(St.conditions=P(St.conditions,St.operator));return j.length>1&&le!=="or"?(0,sx.sortBy)(j,ff(We)):j}a(P,"orderConditions");function L(j,le){return Array.isArray(j)?j.map(St=>NE(St,le)):NE(j,le)}a(L,"coerceTypedValues");let D=m.operator;(b.length>0||D)&&(b=N(b,D));let F=typeof m.sort=="object"&&m.sort,G;if(F&&D!=="or"){let j=F.attribute;if(y=b.find(le=>Mn(le.attribute)===Mn(j)),!y){if(!Ls(p,j))throw(0,mn.handleHDBError)(new Error,`${Array.isArray(j)?j.join("."):j} is not a defined attribute`,404);y={attribute:j,comparator:"sort"},b.push(y)}y.descending=!!F.descending}b=P(b,D),F&&(b[0]===y?F.next&&(G={dbOrderedAttribute:F.attribute,attribute:F.next.attribute,descending:F.next.descending,next:F.next.next}):(y&&b.splice(b.indexOf(y),1),G=F));let ie=m.select;if(b.length===0&&(b=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:b,operator:D,postOrdering:G,selectApplied:!!ie};let ae=I.useReadTxn(),re=lg(b,D,We,ae,m,A,(j,le)=>gA(j,ie,A,le),w),ce=m.ensureLoaded!==!1;G||(re=fe(re));let ve=We.transformEntryForSelect(ie,A,w,ce,!0),ne=We.transformToOrderedSelect(re,ie,G,A,ve);function fe(j){return m.offset||m.limit!==void 0?j.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):j}return a(fe,"applyOffset"),G&&(ne=fe(ne)),ne.onDone=()=>{ne.onDone=null,I.doneReadTxn()},ne.selectApplied=!0,ne.getColumns=()=>{if(ie){let j=[];for(let le of ie)le==="*"?j.push(...p.map(St=>St.name)):j.push(le.name||le);return j}return p.map(j=>j.name)},ne}static transformToOrderedSelect(m,A,I,b,y){let w=new Yx;if(I){m=gA(m,A,b,null);let N;w.iterate=function(){let L,D=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),F,G=I.dbOrderedAttribute,ie,ae,re=!0;function ce(ne){let fe=ne.next&&ce(ne.next),j=ne.descending;return(le,St)=>{let Hn=YE(le,ne.attribute,b),xn=YE(St,ne.attribute,b),Qe=j?(0,Io.compareKeys)(xn,Hn):(0,Io.compareKeys)(Hn,xn);return Qe===0?fe?.(le,St)||0:Qe}}a(ce,"createComparator");let ve=ce(I);return{async next(){let ne;if(L)if(ne=L.next(),ne.done){if(F)return w.onDone&&w.onDone(),ne}else return{value:await y(ne.value)};N=[],ie&&N.push(ie);do if(ne=await D.next(),ne.done){if(F=!0,N.length)break;return w.onDone&&w.onDone(),ne}else{let fe=ne.value;if(fe?.then&&(fe=await fe),G){let j=YE(fe,G,b);if(re)re=!1,ae=j;else if(j!==ae){ae=j,ie=fe;break}}N.push(fe)}while(!0);return I.isGrouped,N.sort(ve),L=N[Symbol.iterator](),ne=L.next(),ne.done?(w.onDone&&w.onDone(),ne):{value:await y(ne.value)}},return(){w.onDone&&w.onDone(),D.return()},throw(){w.onDone&&w.onDone(),D.throw()}}};let P=a(L=>{if(typeof A=="object"&&Array.isArray(L.attribute))for(let D=0;D<A.length;D++){let F=A[D],G;if(F.name===L.attribute[0]){for(G=F.sort||(F.sort={});G.next;)G=G.next;G.attribute=L.attribute.slice(1),G.descending=L.descending}else F===L.attribute[0]&&(A[D]=G={name:F,sort:{attribute:L.attribute.slice(1),descending:L.descending}})}L.next&&P(L.next)},"applySortingOnSelect");P(I)}else w.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),w=w.map(y);return w}static transformEntryForSelect(m,A,I,b,y){if(m&&(m===t||m?.length===1&&m[0]===t)){let L=a(D=>D?.key??D,"transform");return m===t?L:m.asArray?D=>[L(D)]:D=>({[t]:L(D)})}let w;b&&R&&!m?.every(L=>{let D;return typeof L=="object"?D=L.name:D=L,r[D]||D===t})&&(w=!0);let N,P=a(L=>{let D;if(L!=null){if(kE=L,D=L.value||L.deref?.(),!D&&(L.key===void 0||L.deref)){if(L=VE(L.key??L,A,{transaction:gr(A).getReadTxn(),lazy:m?.length<4},!1,F=>F),L?.then)return L.then(P);D=L?.value}if(w&&(L.metadataFlags&(_l|dl)||L.expiresAt&&L.expiresAt<Date.now())){let F=$E(L.key??L,L,A);if(F?.then)return F.then(P)}}if(D==null)return y?No.SKIP:D;if(m&&!(m[0]==="*"&&m.length===1)){let F,G=a((ae,re)=>{let ce;typeof ae=="object"?ce=ae.name:ce=ae;let ve=ks?.[ce],ne;if(ve){let fe=I?.[ce];if(fe)if(fe.hasMappings){let le=ve.from?D[ve.from]:Mn(L.key);ne=fe.get(le),ne||(ne=[])}else ne=fe.fromRecord?.(D);else ne=ve(D,A,L);let j=a(le=>{if(le&&typeof le=="object"){let St=ve.definition?.tableClass||We;N||(N={});let Hn=N[ce]||(N[ce]=St.transformEntryForSelect(ce===ae?null:ae.select||(Array.isArray(ae)?ae:null),A,fe,b));if(Array.isArray(le)){let xn=[],Qe=St.transformToOrderedSelect(le,ae.select,typeof ae.sort=="object"&&ae.sort,A,Hn)[Symbol.asyncIterator](),Rr=a(Ar=>{for(;!Ar.done;){if(Ar?.then)return Ar.then(Rr);xn.push(Ar.value),Ar=Qe.next()}re(xn,ce)},"nextValue"),zr=Rr(Qe.next());zr&&(F||(F=[]),F.push(zr));return}else if(le=Hn(le),le?.then){F||(F=[]),F.push(le.then(xn=>re(xn,ce)));return}}re(le,ce)},"handleResolvedValue");ne?.then?(F||(F=[]),F.push(ne.then(j))):j(ne);return}else ne=D[ce],ne&&typeof ne=="object"&&ce!==ae&&(ne=this.transformEntryForSelect(ae.select||ae,A,null)({value:ne}));re(ne,ce)},"selectAttribute"),ie;if(typeof m=="string")G(m,ae=>{ie=ae});else if(Array.isArray(m))if(m.asArray)ie=[],m.forEach((ae,re)=>{ae==="*"?m[re]=D:G(ae,ce=>ie[re]=ce)});else{ie={};let ae=m.forceNulls;for(let re of m)if(re==="*")for(let ce in D)ie[ce]=D[ce];else G(re,(ce,ve)=>{ce===void 0&&ae&&(ce=null),ie[ve]=ce})}else throw new mn.ClientError("Invalid select"+m);return F?Promise.all(F).then(()=>ie):ie}return D},"transform");return P}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||ot({table:s,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let A=!m.rawEvents,I=QH(We,this[Me]??null,function(N,P,L,D){try{let F=P.getValue?.(i,A);if(!F&&P.type==="patch"&&A){let G=i.getEntry(N);G?.version===P.version?F=G.value:F=P.getValue?.(i,!0,L),P.type="put"}this.send({id:N,timestamp:L,value:F,version:P.version,type:P.type,beginTxn:D})}catch(F){ze.error(F)}},m.startTime||0,this[hn]);this[hn]&&(I.includeDescendants=!0,m.onlyChildren&&(I.onlyChildren=!0)),m.crossThreads===!1&&(I.crossThreads=!1),m.supportsTransactions&&(I.supportsTransactions=!0);let b=this[Me],y=m.previousCount;y>1e3&&(y=1e3);let w=m.startTime;if(this[hn]){if(w){if(y)throw new mn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:N,value:P}of u.getRange({start:w,exclusiveStart:!0})){let L=Lt(P);if(L.tableId!==n)continue;let D=L.recordId;(b==null||rx(b,D))&&I.send({id:D,timestamp:N,...L}),I.startTime=N}}else if(y){let N=[];for(let{key:P,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let D=Lt(L);if(D.tableId!==n)continue;let F=D.recordId;if(b==null||rx(b,F)){let G=D.getValue(i,A,P);if(N.push({id:F,timestamp:P,value:G,version:D.version,type:D.type}),--y<=0)break}}catch(D){ze.error("Error getting history entry",P,D)}for(let P=N.length;P>0;)I.send(N[--P]);N[0]&&(I.startTime=N[0].timestamp)}else if(!m.omitCurrent)for(let{key:N,value:P,version:L,localTime:D}of i.getRange({start:b??!1,end:b==null?void 0:[b,Io.MAXIMUM_KEY],versions:!0}))P&&I.send({id:N,version:L,timestamp:D,value:P})}else{y&&!w&&(w=0);let N=this[$r]?.localTime;if(N===kh&&(i.cache?.delete(b),this[$r]=i.getEntry(b),ze.trace("re-retrieved record",N,this[$r]?.localTime),N=this[$r]?.localTime),ze.trace("Subscription from",w,"from",b,N),w<N){let P=[],L=N;do{let D=u.get(L);if(D){m.omitCurrent=!0;let F=Lt(D),G=F.getValue(i,A,L);A&&(F.type="put"),P.push({id:b,value:G,timestamp:L,...F}),L=F.previousLocalTime}else break;y&&y--}while(L>w&&y!==0);for(let D=P.length;D>0;)I.send(P[--D]);I.startTime=N}!m.omitCurrent&&this.doesExist()&&I.send({id:b,version:this[El],timestamp:N,value:this})}return m.listener&&I.on("data",m.listener),I}doesExist(){return!!(this[he]||this[ll])}publish(m,A){this._writePublish(m,A)}_writePublish(m,A){let I=gr(this[ye]),b=this[Me]||null;Qa(b);let y=this[ye];I.addWrite({key:b,store:i,entry:this[$r],nodeName:y?.nodeName,validate:()=>{this.validate(m)},before:xe.publish?.bind(this,y,b,m),beforeIntermediate:de.publish?.bind(this,y,b,m),commit:(w,N,P)=>{N===void 0&&h&&!E&&KE(),S(b,N?.value??null,N,N?.version||w,0,!0,y,N?.expiresAt,"message",!1,m)}})}validate(m,A){let I,b=a((y,w,N)=>{if(w.type&&y!=null)if(A&&y.__op__&&(y=y.value),w.properties){typeof y!="object"&&(I||(I=[])).push(`Property ${N} must be an object${w.type?" ("+w.type+")":""}`);let P=w.properties;for(let L=0,D=P.length;L<D;L++){let F=P[L],G=b(y[F.name],F,N+"."+F.name);G&&(y[F.name]=G)}}else switch(w.type){case"Int":(typeof y!="number"||y>>0!==y)&&(I||(I=[])).push(`Property ${N} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof y!="number"||!(Math.floor(y)===y&&Math.abs(y)<=9007199254740992))&&(I||(I=[])).push(`Property ${N} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof y!="number"&&(I||(I=[])).push(`Property ${N} must be a number`);break;case"ID":typeof y=="string"||y?.length>0&&y.every?.(P=>typeof P=="string")||(I||(I=[])).push(`Property ${N} must be a string, or an array of strings`);break;case"String":typeof y!="string"&&(I||(I=[])).push(`Property ${N} must be a string`);break;case"Boolean":typeof y!="boolean"&&(I||(I=[])).push(`Property ${N} must be a boolean`);break;case"Date":if(!(y instanceof Date)){if(typeof y=="string"||typeof y=="number")return new Date(y);(I||(I=[])).push(`Property ${N} must be a Date`)}break;case"BigInt":if(typeof y!="bigint"){if(typeof y=="string"||typeof y=="number")return BigInt(y);(I||(I=[])).push(`Property ${N} must be a bigint`)}break;case"Bytes":y instanceof Uint8Array||(I||(I=[])).push(`Property ${N} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(y)){if(w.elements)for(let P=0,L=y.length;P<L;P++){let D=y[P],F=b(D,w.elements,N+"[*]");F&&(y[P]=F)}}else(I||(I=[])).push(`Property ${N} must be a Buffer or Uint8Array`);break}w.nullable===!1&&y==null&&(I||(I=[])).push(`Property ${N} is required (and not does not allow null values)`)},"validateValue");for(let y=0,w=p.length;y<w;y++){let N=p[y];if(!N.relationship&&(!A||N.name in m)){let P=b(m[N.name],N,N.name);P&&(m[N.name]=P)}}if(I)throw new mn.ClientError(I.join(". "))}getUpdatedTime(){return this[El]}wasLoadedFromSource(){return R?!!this[iA]:void 0}static async addAttributes(m){let A=p.slice(0);for(let I of m){if(!I.name)throw new mn.ClientError("Attribute name is required");if(I.name.match(/[`/]/))throw new mn.ClientError("Attribute names cannot include backticks or forward slashes");A.push(I)}return ot({table:s,database:c,schemaDefined:_,attributes:A}),We.indexingOperation}static async removeAttributes(m){let A=p.filter(I=>!m.includes(I.name));return ot({table:s,database:c,schemaDefined:_,attributes:A}),We.indexingOperation}static getRecordCount(m){let A=i.getStats().entryCount,I=5e3,b=1e3,y;A>I&&!m?.exactCount&&(y=b);let w=0;for(let{value:N}of i.getRange({start:!0,lazy:!0,limit:y}))N!=null&&w++;if(y){let N=w;w=0;for(let{value:ce}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:y}))ce!=null&&w++;let P=y*2,L=(w+N)/P,D=Math.pow((w-N+1)/y/2,2)+L*(1-L)/P,F=Math.max(Math.sqrt(D)*A,1),G=Math.round(L*A),ie=Math.max(G-1.96*F,0),ae=Math.min(G+1.96*F,A),re=Math.pow(10,Math.round(Math.log10(F)));return re>G&&(re=re/10),w=Math.round(G/re)*re,{recordCount:w,estimatedRange:[Math.round(ie),Math.round(ae)]}}return{recordCount:w}}static updatedAttributes(){ks=this.propertyResolvers={$id:(m,A,I)=>({value:I.key}),$updatedtime:(m,A,I)=>I.version,$record:(m,A,I)=>I?{value:m}:m};for(let m of this.attributes){m.resolve=null;let A=m.relationship;if(A)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),TA=!0,A.to)m.elements?.definition?(ks[m.name]=m.resolve=(I,b,y)=>{let w=I[A.from?A.from:t],N=m.elements.definition.tableClass;return y?ba({attribute:A.to,value:w},gr(b).getReadTxn(),!1,N).asArray:N.search([{attribute:A.to,value:w}],b).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,A.from&&(m.resolve.from=A.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(A.from){let I=m.definition||m.elements?.definition;I?(ks[m.name]=m.resolve=(b,y,w)=>{let N=b[A.from];if(N!==void 0){if(m.elements){let P,L=N.map(D=>{let F=w?I.tableClass.primaryStore.getEntry(D,{transaction:gr(y).getReadTxn()}):I.tableClass.get(D,y);return F?.then&&(P=!0),F});return A.filterMissing?P?Promise.all(L).then(D=>D.filter(nx)):L.filter(nx):P?Promise.all(L):L}return w?I.tableClass.primaryStore.getEntry(N,{transaction:gr(y).getReadTxn()}):I.tableClass.get(N,y)}},m.set=(b,y)=>{if(Array.isArray(y)){let w=y.map(N=>N[Me]||N[I.tableClass.primaryKey]);b[A.from]=w}else{let w=y[Me]||y[I.tableClass.primaryKey];b[A.from]=w}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=A.from):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`)}AE(this,this)}static async deleteHistory(m=0){let A;for(let{key:I,value:b}of u.getRange({start:0,end:m}))await fl(),Lt(b).tableId===n&&(A=u.remove(I));await A}static async*getHistory(m=0,A=1/0){for(let{key:I,value:b}of u.getRange({start:m,end:A})){await fl();let y=Lt(b);y.tableId===n&&(yield{id:y.recordId,localTime:I,version:y.version,type:y.type,value:y.getValue(i,!0,I),user:y.user})}}static async getHistoryOfRecord(m){let A=[];if(m==null)throw new Error("An id is required");let I=i.getEntry(m);if(!I)return A;let b=I.localTime;if(!b)throw new Error("The entry does not have a local audit time");let y=0;do{await fl();let w=u.get(b);if(w){let N=Lt(w);A.push({id:N.recordId,localTime:b,version:N.version,type:N.type,value:N.getValue(i,!0,b),user:N.user}),b=N.previousLocalTime}else break}while(y<1e3&&b);return A.reverse()}static cleanup(){K?.remove()}}We.updatedAttributes();let Qx=We.prototype;return Qx[Kne]=!0,d&&We.setTTLExpiration(d/1e3),$&&zx(),We;function Nl(Y,m,A){let I;for(let b in r){let y=r[b],w=y.isIndexing,N=A?.[b],P=m?.[b];if(N===P&&!w)continue;I=!0;let L=y.indexNulls,D=(0,hl.getIndexedValues)(P,L);if(D){jH&&y.prefetch(D.map(F=>({key:F,value:Y})),tx);for(let F=0,G=D.length;F<G;F++)y.remove(D[F],Y)}if(D=(0,hl.getIndexedValues)(N,L),D){jH&&y.prefetch(D.map(F=>({key:F,value:Y})),tx);for(let F=0,G=D.length;F<G;F++)y.put(D[F],Y)}}return I}a(Nl,"updateIndices");function Qa(Y){switch(typeof Y){case"number":return!0;case"string":if(Y.length<659)return!0;if(Y.length>ex)throw new Error("Primary key size is too large: "+Y.length);break;case"object":if(Y===null)return!0;break;case"bigint":if(Y<2n**64n&&Y>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof Y)}if((0,Io.writeKey)(Y,Qne,0)>ex)throw new Error("Primary key size is too large: "+Y.length);return!0}a(Qa,"checkValidId");function VE(Y,m,A,I,b){let y=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),A.transaction?.isDone)return b(null,Y);let w=i.getEntry(Y,A);return w&&m&&(w?.version>(m.lastModified||0)&&(m.lastModified=w.version),w?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=w.localTime)),b(w,Y)},"whenPrefetched");return I?y():Te>0?(Te--,y()):new Promise((w,N)=>{Te===0?(Te--,i.prefetch([Y],()=>{P(),L()})):(z.push(Y),se.push(L),z.length>Wx&&(Te--,P()));function P(){if(z.length>0){let D=se;i.prefetch(z,()=>{Te===-1?P():Te++;for(let F of D)F()}),z=[],se=[],oe>2&&oe--}else Te=oe,oe<Kx&&oe++}a(P,"prefetch");function L(){try{w(y())}catch(D){N(D)}}a(L,"load")})}a(VE,"loadLocalRecord");function wl(Y){if(!Y?.role)return;let m=Y.role.permission;if(m.super_user)return zne;let A=m[c],I,b=A?.tables;if(b)return b[s];if(c==="data"&&(I=m[s])&&!I.tables)return I}a(wl,"getTablePermissions");function $E(Y,m,A,I){if(R){let b;if(A.noCache?b=!0:(m?(!m.value||m.metadataFlags&(_l|dl)||m.expiresAt&&m.expiresAt<Date.now())&&(b=!0):b=!0,tn(!b,"cache-hit",s)),b){let y=RA(Y,m,A).then(w=>(w?.value?.[he]&&ze.error("Can not assign a record with a record property"),A&&(w?.version>(A.lastModified||0)&&(A.lastModified=w.version),A.lastRefreshed=Date.now()),w));if(A?.onlyIfCached||m?.value&&I?.allowStaleWhileRevalidate?.(m,Y)){if(y.catch(w=>ze.warn(w)),A?.onlyIfCached&&!I.doesExist())throw new mn.ServerError("Entry is not cached",504);return}else return y}}}a($E,"ensureLoadedFromSource");function gr(Y){let m=Y?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let A=m.next;if(!A)return m=m.next=new Qi,m.lmdbDb=i,m;m=A}while(!0)}else return new q_}a(gr,"txnForContext");function YE(Y,m,A){if(!Y)return;kE=Y;let I=Y.value||Y.deref?.()||(kE=i.getEntry(Y.key))?.value;if(typeof m=="object"){let y=ks,w=I;for(let N=0,P=m.length;N<P;N++){let L=m[N],D=y?.[L];w=D&&w?D(w,A,!0)?.value:w?.[L],y=D?.definition?.tableClass?.propertyResolvers}return w}let b=ks[m];return b?b(I,A):I[m]}a(YE,"getAttributeValue");function gA(Y,m,A,I){let b=gr(A).getReadTxn(),y=I?.length,w={transaction:b,lazy:y>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},N;function P(L,D){let F=L?.value;if(!F)return No.SKIP;for(let G=0;G<y;G++)if(!N?.includes(G)&&!I[G](F,L))return No.SKIP;return D!==void 0&&(L.key=D),L}if(a(P,"processEntry"),y>0||!Y.hasEntries){let L=Y.map(D=>{if(N=null,typeof D=="object"&&D.key!==void 0)return y>0?P(D):D;if(D==null)return No.SKIP;for(let F=0;F<y;F++){let ie=I[F].idFilter;if(ie){if(!ie(D))return No.SKIP;N||(N=[]),N.push(F)}}return VE(D,A,w,!1,P)});return Array.isArray(Y)&&(L=L.filter(D=>D!==No.SKIP)),L.hasEntries=!0,L}return Y}a(gA,"transformToEntries");async function RA(Y,m,A){let I=m?.metadataFlags,b=m?.version,y,w;if(!i.attemptLock(Y,b,()=>{clearTimeout(w);let D=i.getEntry(Y);!D||!D.value||D.metadataFlags&(_l|dl)?y(RA(Y,i.getEntry(Y),A)):y(D)}))return new Promise(D=>{y=D,w=setTimeout(()=>{i.unlock(Y,b)},Yne)});let N=m?.value,P={requestContext:A,replacingRecord:N,replacingVersion:b,source:null,resourceCache:A?.resourceCache},L=A?.responseHeaders;return new Promise((D,F)=>{let G;aA(Ke(P,async ie=>{let ae=performance.now(),re,ce,ve;try{for(let le of We.sources)if(le.get&&(!le.get.reliesOnPrototype||le.prototype.get)&&(P.source=le,re=await le.get(Y,P),re))break;ve=I&_l;let fe=P.lastModified||ve&&b;ce=ve||fe>b||!N,fe||(fe=(0,hl.getNextMonotonicTime)());let j=performance.now()-ae;if(Br(j,"cache-resolution",s),L&&L.append("Server-Timing",`cache-resolve;dur=${j.toFixed(2)}`),ie.timestamp=fe,d&&!P.expiresAt&&(P.expiresAt=Date.now()+d),re){if(typeof re!="object")throw new Error("Only objects can be cached and stored in tables");typeof re.toJSON=="function"&&(re=re.toJSON()),t&&re[t]!==Y&&(re[t]=Y)}G=!0,D({version:fe,value:re})}catch(fe){fe.message+=` while resolving record ${Y} for ${s}`,N&&((fe.code==="ECONNRESET"||fe.code==="ECONNREFUSED"||fe.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(fe.statusCode===500||fe.statusCode===502||fe.statusCode===503||fe.statusCode===504))?(D({version:b,value:N}),ze.trace(fe.message,"(returned stale record)")):F(fe),P.transaction.abort();return}if(A?.noCacheStore){P.transaction.abort();return}gr(P).addWrite({key:Y,store:i,entry:m,nodeName:"source",commit:(fe,j)=>{if(j?.version!==b)return;let le=Nl(Y,N,re);re?(de.put?.(P,Y,re),S(Y,re,j,fe,0,E&&ce||null,P,P.expiresAt,"put",!!ve)):(de.delete?.(P,Y),E||h?S(Y,null,j,fe,0,E&&ce||null,P,0,"delete",!!ve):i.remove(Y,b))}})}),()=>{i.unlock(Y,b)},ie=>{i.unlock(Y,b),G&&ze.error("Error committing cache update",ie)})})}a(RA,"getFromSource");function KE(){if(It!==bl&&(bl=It,(0,wo.getWorkerIndex)()===(0,wo.getWorkerCount)()-1)){if(yl&&clearTimeout(yl),!It)return;let Y=new Date;Y.setMonth(0),Y.setDate(1),Y.setHours(0),Y.setMinutes(0),Y.setSeconds(0);let m=Math.ceil((Date.now()-Y.getTime())/It)*It+Y.getTime(),A=a(I=>{ze.trace(`Scheduled next cleanup scan at ${new Date(I)}ms`),yl=setTimeout(()=>H=H.then(async()=>{if(A(Math.max(I+It,Date.now())),i.rootStore.status!=="open"){clearTimeout(yl);return}let b=50,y=new Array(b),w=0;ze.trace(`Starting cleanup scan for ${s}`);try{let N=0;for(let{key:P,value:L,version:D,expiresAt:F}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let G;L===null&&!E&&D+$ne<Date.now()?G=i.remove(P,D):F&&F+f<Date.now()&&(G=We.evict(P,L,D),N++),G&&(await y[w],y[w]=G.catch(ie=>{ze.error("Cleanup error",ie)}),++w>=b&&(w=0)),await fl()}ze.trace(`Finished cleanup scan for ${s}, evicted ${N} entries`)}catch(N){ze.trace(`Error in cleanup scan for ${s}:`,N)}}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");A(m)}}a(KE,"scheduleCleanup");function AA(){K=u?.addDeleteRemovalCallback(n,Y=>{let m=i.getEntry(Y);m?.value===null&&i.remove(Y,m.version)})}a(AA,"addDeleteRemoval");function zx(){(0,wo.getWorkerIndex)()===0&&setInterval(async()=>{try{let Y=$.name,m=r[Y];if(!m)throw new Error(`expiresAt attribute ${$} must be indexed`);for(let{value:A}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let I=i.getEntry(A);I?.value?.[Y]<Date.now()&&We.evict(A,I.value,I.version),await fl()}}catch(Y){ze.error("Error in evicting old records",Y)}},Vne).unref()}a(zx,"runRecordExpirationEviction")}function oA(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 tx(){}function Jne(e){ix=e}function NE(e,t){let r=t?.type;return e===null?e:e===""&&r&&r!=="String"&&r!=="Any"?null:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Boolean"?e==="true"?!0:e==="false"?!1:e:r==="Date"?(typeof e!="number"&&!Xne.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,IE.autoCast)(e):e}function rx(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;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 aA(e,t,r){return e?.then?e.then(t,r):t(e)}function wE(e,t){e[$r]=t,e[he]=t?.value??null,e[El]=t?.version}function nx(e){return e!=null}var Bn,No,hl,sx,Sl,mn,ml,pl,ze,Io,wo,IE,kne,ix,Vne,$ne,jH,Yne,El,Kne,$r,ll,ZH,Wne,iA,Va,_l,dl,Qne,ex,zne,Hme,Xne,fl,Cf=Oe(()=>{Bn=x(U()),No=require("lmdb"),hl=x(Cr()),sx=require("lodash");An();Mp();Sl=x(Z());XH();mn=x(ee()),ml=x(Ss()),pl=x(Nn());be();hf();ze=x(W());V_();zi();Io=require("ordered-binary"),wo=x(Ze());Ui();IE=x(J());Bo();As();hE();kne=new Uint8Array(9);kne[8]=192;Vne=6e4,$ne=864e5;Sl.initSync();jH=Sl.get(Bn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Yne=1e4,El=Symbol.for("version"),Kne=Symbol.for("incremental-update"),$r=Symbol("entry"),ll=Symbol("is-saving"),ZH=1,Wne=2,iA=Symbol("loaded-from-source"),Va={isNotification:!0,ensureLoaded:!1},_l=1,dl=8,Qne=Buffer.allocUnsafeSlow(8192),ex=1978,zne={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},Hme=(0,IE.convertToMS)(Sl.get(Bn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(CE,"makeTable");a(oA,"attributesAsObject");a(tx,"noop");a(Jne,"setServerUtilities");Xne=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(NE,"coerceType");a(rx,"isDescendantId");fl=a(()=>new Promise(setImmediate),"rest");a(aA,"when");a(wE,"updateResource");a(nx,"exists")});var Fe={};ke(Fe,{database:()=>Wc,databases:()=>et,dropDatabase:()=>Hp,dropTableMeta:()=>nse,getDatabases:()=>In,getTables:()=>jne,onUpdatedTable:()=>TR,readMetaDb:()=>Tl,resetDatabases:()=>Zne,table:()=>ot,tables:()=>Dr});function jne(){return PE||In(),Dr||{}}function In(){if(PE)return et;PE=!0,Ka=new Map;let e=(0,Qt.getHdbBasePath)()&&(0,Je.join)((0,Qt.getHdbBasePath)(),Kr.DATABASES_DIR_NAME),t=(0,Qt.get)(Kr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Qt.get)(Kr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Yr.existsSync)(e)?e:(0,Je.join)((0,Qt.getHdbBasePath)(),Kr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Yr.existsSync)(e))for(let r of(0,Yr.readdirSync)(e,{withFileTypes:!0})){let n=(0,Je.basename)(r.name,".mdb");r.isFile()&&(0,Je.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Tl((0,Je.join)(e,r.name),null,n)}if((0,Yr.existsSync)((0,Ya.getBaseSchemaPath)())){for(let r of(0,Yr.readdirSync)((0,Ya.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Je.join)((0,Ya.getBaseSchemaPath)(),r.name),s=(0,Je.join)((0,Ya.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Yr.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Je.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Je.join)(s,i.name);Tl((0,Je.join)(n,i.name),(0,Je.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,Yr.existsSync)(s))for(let o of(0,Yr.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,Je.extname)(o.name).toLowerCase()===".mdb"&&Tl((0,Je.join)(s,o.name),(0,Je.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],u=(0,Je.join)(c.path,(0,Je.basename)(o+".mdb"));(0,Yr.existsSync)(u)&&Tl(u,o,r,null,!0)}}for(let r in et){let n=Ka.get(r);if(n){let s=et[r];r.includes("delete")&&pn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(pn.trace(`delete table class ${i}`),delete s[i])}else if(delete et[r],r==="data"){for(let s in Dr)delete Dr[s];delete Dr[vE]}}return Ka=null,et}}function Zne(){PE=!1;for(let[,e]of gi)e.needsDeletion=!0;In();for(let[e,t]of gi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),gi.delete(e));return et}function Tl(e,t,r=lA,n,s){let i=new cA.default(e,!1);try{let o=gi.get(e);o?o.needsDeletion=!1:(o=(0,LE.open)(i),gi.set(e,o));let c=new Co.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(DE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,Yr.existsSync)(n)&&(i.path=n,_=(0,LE.open)(i),_.isLegacy=!0):_=EE(o));let l=ux(r),d=l[vE],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let O=f.get(p);O||f.set(p,O={attributes:[]}),(S==null||h.is_hash_attribute)&&(O.primary=h),S!=null&&O.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let z of p)if(z.is_hash_attribute||z.isPrimaryKey){S=z;break}if(!S){pn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let O=l[E],g={},R=[],B,H,v=typeof S.audit=="boolean"?S.audit:(0,Qt.get)(Kr.CONFIG_PARAMS.LOGGING_AUDITLOG),M=S.trackDeletes,$=S.expiration,K=S.eviction;if(O)g=O.indices,R=O.attributes,O.schemaVersion++;else{B=S.tableId,B?B>=(u.get($a)||0)&&u.putSync($a,B+1):(S.tableId=B=u.get($a),B||(B=1),u.putSync($a,B+1),u.putSync(S.key,S));let z=new Co.default(!S.is_hash_attribute,S.is_hash_attribute);H=e_(o.openDB(S.key,z)),H.rootStore=o,H.tableId=B}for(let z of p){z.attribute=z.name;try{if(!z.is_hash_attribute&&(z.indexed||z.attribute&&!z.name)){if(!g[z.name]){let Te=new Co.default(!z.is_hash_attribute,z.is_hash_attribute);g[z.name]=o.openDB(z.key,Te),g[z.name].indexNulls=z.indexNulls}let se=R.find(Te=>Te.name===z.name);se?R.splice(R.indexOf(se),1,z):R.push(z)}}catch(se){pn.error("Error trying to update attribute",z,R,g,se)}}if(!O){O=lx(l,E,CE({primaryStore:H,auditStore:_,audit:v,expirationMS:$&&$*1e3,evictionMS:K&&K*1e3,trackDeletes:M,tableName:E,tableId:B,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:g,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),O.schemaVersion=1;for(let z of _A)z(O)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function ux(e){let t=et[e];if(t||(e==="data"?t=et[e]=Dr:e==="system"?Object.defineProperty(et,"system",{value:t=Object.create(null),configurable:!0}):t=et[e]=Object.create(null)),Ka&&!Ka.has(e)){let r=new Set;t[vE]=r,Ka.set(e,r)}return t}function lx(e,t,r){return e[t]=r,r}function Wc({database:e,table:t}){e||(e=lA),In();let r=ux(e),n=(0,Je.join)((0,Qt.getHdbBasePath)(),Kr.DATABASES_DIR_NAME),s=(0,Qt.get)(Kr.CONFIG_PARAMS.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,Qt.get)(Kr.CONFIG_PARAMS.STORAGE_PATH)||((0,Yr.existsSync)(n)?n:(0,Je.join)((0,Qt.getHdbBasePath)(),Kr.LEGACY_DATABASES_DIR_NAME));let o=(0,Je.join)(n,(i?t:e)+".mdb"),c=gi.get(o);if(!c){let u=new cA.default(o,!1);c=(0,LE.open)(u),gi.set(o,c)}return c}async function Hp(e){if(!et[e])throw new Error("Schema does not exist");let t=et[e];for(let r in t){let s=t[r].primaryStore.rootStore;gi.delete(s.path),s.status==="open"&&(await s.close(),await ox.remove(s.path))}if(e==="data"){for(let r in Dr)delete Dr[r];delete Dr[vE]}delete et[e]}function ot({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=lA);let l=Wc({database:t,table:e}),d=et[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;u==null&&(u=!0);let O=new Co.default(!1);for(let M of i)M.attribute?(M.name=M.attribute,M.indexed=!0):M.attribute=M.name,M.expiresAt&&(M.indexed=!0);let g,R;if(f){if(E=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let M=l.auditStore;M||(M=EE(l)),h=i.find(se=>se.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,Qt.get)(Kr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),n&&(h.eviction=n),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),pn.trace(`${e} table loading, opening primary store`);let $=new Co.default(!1,!0),K=e+"/",z=e_(l.openDB(K,$));z.rootStore=l,S=l.dbisDb=l.openDB(DE.INTERNAL_DBIS_NAME,O),z.tableId=S.get($a),z.tableId||(z.tableId=1),S.putSync($a,z.tableId+1),h.tableId=z.tableId,f=lx(d,e,CE({primaryStore:z,auditStore:M,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:E,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,g=!0,v(),S.put(K,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(DE.INTERNAL_DBIS_NAME,O)),f.dbisDB=S;let B=[];for(let{key:M,value:$}of S.getRange({start:!0})){let[K,z]=M.toString().split("/");if(z===""&&(z=$.name),z){if(K!==e)continue}else z=K;if(!i.find(Te=>Te.name===z)?.indexed&&$.indexed&&!$.isPrimaryKey){v(),g=!0,S.remove(M);let Te=f.indices[K];Te&&B.push(Te)}}let H=[];try{for(let M of i||[]){if(M.relationship)continue;let $=e+"/"+(M.name||"");Object.defineProperty(M,"key",{value:$,configurable:!0});let K=S.get($);if(M.isPrimaryKey){if(K=K||S.get($=e+"/")||{},o!==f.audit||(+r||void 0)!==(+K.expiration||void 0)||(+n||void 0)!==(+K.eviction||void 0)){let se=Object.assign({},K);typeof o=="boolean"&&(o&&f.enableAuditing(o),se.audit=o),r&&(se.expiration=+r),n&&(se.eviction=+n),g=!0,v(),S.put($,se)}continue}K?.attribute&&!K.name&&(K.indexed=!0);let z=!K||K.type!==M.type||K.indexed!==M.indexed||JSON.stringify(K.attributes)!==JSON.stringify(M.attributes)||JSON.stringify(K.elements)!==JSON.stringify(M.elements);if(M.indexed){let se=new Co.default(!0,!1),Te=l.openDB($,se);(z||K.indexingPID&&K.indexingPID!==process.pid||K.restartNumber<gl.workerData?.restartNumber)&&(g=!0,v(),K=S.get($),(z||K.indexingPID&&K.indexingPID!==process.pid||K.restartNumber<gl.workerData?.restartNumber)&&(g=!0,M.lastIndexedKey=K?.lastIndexedKey||!1,M.indexingPID=process.pid,Te.isIndexing=!0,Object.defineProperty(M,"dbi",{value:Te}),M.indexNulls===void 0&&(M.indexNulls=!0),H.push(M)),S.put($,M)),K?.indexNulls&&M.indexNulls===void 0&&(M.indexNulls=!0),Te.indexNulls=M.indexNulls,p[M.name]=Te}else z&&(g=!0,v(),S.put($,M))}}finally{R&&R()}if(g&&(f.schemaVersion++,f.updatedAttributes()),pn.trace(`${e} table loading, running index`),H.length>0||B.length>0?f.indexingOperation=rse(f,H,B):g&&ME.signalSchemaChange(new UE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,g)for(let M of _A)M(f,_!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),pn.trace(`${e} table loaded`),f;function v(){R||l.transactionSync(()=>({then(M){R=M}}))}a(v,"startTxn")}async function rse(e,t,r){try{let n=e.schemaVersion;await ME.signalSchemaChange(new UE.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,s=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,ax.getIndexedValues)(l[h]);if(p)for(let S=0,O=p.length;S<O;S++)E.dbi.put(p[S],_)}}),s.then(()=>u--,f=>{u--,pn.error(f)}),gl.workerData&&gl.workerData.restartNumber!==cx.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>ese?await s:u>tse&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await ME.signalSchemaChange(new UE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){pn.error("Error in indexing",n)}}function nse({table:e,database:t}){let r=Wc({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 TR(e){_A.push(e)}var Qt,DE,LE,Je,Yr,Ya,Co,cA,Kr,ox,uA,ax,ME,UE,gl,pn,cx,lA,vE,Dr,et,$a,_A,PE,gi,Ka,ese,tse,be=Oe(()=>{Qt=x(Z()),DE=x(lt()),LE=require("lmdb"),Je=require("path"),Yr=require("fs"),Ya=x(Ye());Cf();Co=x(t_()),cA=x(n_()),Kr=x(U()),ox=x(require("fs-extra")),uA=require("../../index"),ax=x(Cr()),ME=x(Ss()),UE=x(Nn()),gl=require("worker_threads"),pn=x(W()),cx=x(Ze());Ui();Bo();lA="data",vE=Symbol("defined-tables");(0,Qt.initSync)();Dr=Object.create(null),et=Object.create(null);(0,uA._assignPackageExport)("databases",et);(0,uA._assignPackageExport)("tables",Dr);$a=Symbol.for("next-table-id"),_A=[],gi=new Map;a(jne,"getTables");a(In,"getDatabases");a(Zne,"resetDatabases");a(Tl,"readMetaDb");a(ux,"ensureDB");a(lx,"setTable");a(Wc,"database");a(Hp,"dropDatabase");a(ot,"table");ese=1e3,tse=10;a(rse,"runIndexing");a(nse,"dropTableMeta");a(TR,"onUpdatedTable")});var J=T((Kme,bx)=>{"use strict";var Ri=require("path"),hx=require("fs-extra"),Sr=W(),_x=require("fs-extra"),BE=require("os"),sse=require("net"),ise=require("recursive-iterator"),it=U(),ose=tO(),dx=require("papaparse"),HE=require("moment"),{inspect:ase}=require("util"),fx=require("is-number"),Yme=require("lodash"),cse=require("minimist"),use=require("https"),lse=require("http"),{hdb_errors:xE}=ee(),_se=/^((\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)))$/,mx=require("util").promisify(setTimeout),dse=100,fse=5,Ese="",hse=4,Ex={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};bx.exports={isEmpty:Wr,isEmptyOrZeroLength:cs,arrayHasEmptyValues:Sse,arrayHasEmptyOrZeroLengthValues:Tse,buildFolderPath:gse,isBoolean:px,errorizeMessage:mse,stripFileExtension:Ase,autoCast:Ose,autoCastJSON:Sx,autoCastJSONDeep:fA,removeDir:bse,compareVersions:yse,isCompatibleDataVersion:Nse,escapeRawValue:wse,unescapeValue:Ise,stringifyProps:Cse,timeoutPromise:Lse,isClusterOperation:Use,getClusterUser:vse,checkGlobalSchemaTable:Pse,getHomeDir:gx,getPropsFilePath:Dse,promisifyPapaParse:Bse,removeBOM:Rx,createEventPromise:Hse,checkProcessRunning:xse,checkSchemaTableExist:Fse,checkSchemaExists:Ax,checkTableExists:Ox,getStartOfTomorrowInSeconds:qse,getLimitKey:Gse,isObject:Rse,isNotEmptyAndHasValue:pse,autoCasterIsNumberCheck:Tx,backtickASTSchemaItems:kse,isPortTaken:Mse,createForkArgs:Vse,autoCastBoolean:$se,async_set_timeout:mx,getTableHashAttribute:Yse,doesSchemaExist:Kse,doesTableExist:Wse,stringifyObj:Qse,ms_to_time:zse,changeExtension:Jse,getEnvCliRootPath:EA,noBootFile:Xse,httpRequest:jse,transformReq:Zse,convertToMS:eie,PACKAGE_ROOT:it.PACKAGE_ROOT};function mse(e){return e instanceof Error?e:new Error(e)}a(mse,"errorizeMessage");function Wr(e){return e==null}a(Wr,"isEmpty");function pse(e){return!Wr(e)&&(e||e===0||e===""||px(e))}a(pse,"isNotEmptyAndHasValue");function cs(e){return Wr(e)||e.length===0||e.size===0}a(cs,"isEmptyOrZeroLength");function Sse(e){if(Wr(e))return!0;for(let t=0;t<e.length;t++)if(Wr(e[t]))return!0;return!1}a(Sse,"arrayHasEmptyValues");function Tse(e){if(cs(e))return!0;for(let t=0;t<e.length;t++)if(cs(e[t]))return!0;return!1}a(Tse,"arrayHasEmptyOrZeroLengthValues");function gse(...e){try{return e.join(Ri.sep)}catch{console.error(e)}}a(gse,"buildFolderPath");function px(e){return Wr(e)?!1:e===!0||e===!1}a(px,"isBoolean");function Rse(e){return Wr(e)?!1:typeof e=="object"}a(Rse,"isObject");function Ase(e){return cs(e)?Ese:e.slice(0,-hse)}a(Ase,"stripFileExtension");function Ose(e){return Wr(e)||e===""||typeof e!="string"?e:Ex[e]!==void 0?Ex[e]:Tx(e)===!0?Number(e):_se.test(e)?new Date(e):e}a(Ose,"autoCast");function Sx(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Sx,"autoCastJSON");function fA(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=fA(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=fA(r);n!==r&&(e[t]=n)}return e}else return Sx(e)}a(fA,"autoCastJSONDeep");function Tx(e){if(e.startsWith("0.")&&fx(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&fx(e))}a(Tx,"autoCasterIsNumberCheck");async function bse(e){if(cs(e))throw new Error(`Directory path: ${e} does not exist`);try{await _x.emptyDir(e),await _x.remove(e)}catch(t){throw Sr.error(`Error removing files in ${e} -- ${t}`),t}}a(bse,"removeDir");function yse(e,t){if(cs(e)){Sr.info("Invalid current version sent as parameter.");return}if(cs(t)){Sr.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(yse,"compareVersions");function Nse(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(Nse,"isCompatibleDataVersion");function wse(e){if(Wr(e))return e;let t=String(e);return t==="."?it.UNICODE_PERIOD:t===".."?it.UNICODE_PERIOD+it.UNICODE_PERIOD:t.replace(it.FORWARD_SLASH_REGEX,it.UNICODE_FORWARD_SLASH)}a(wse,"escapeRawValue");function Ise(e){if(Wr(e))return e;let t=String(e);return t===it.UNICODE_PERIOD?".":t===it.UNICODE_PERIOD+it.UNICODE_PERIOD?"..":String(e).replace(it.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Ise,"unescapeValue");function Cse(e,t){if(Wr(e))return Sr.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+BE.EOL}!cs(n)&&n[0]===";"?r+=" "+n+s+BE.EOL:cs(n)||(r+=n+"="+s+BE.EOL)}catch{Sr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(Cse,"stringifyProps");function gx(){let e;try{e=BE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(gx,"getHomeDir");function Dse(){let e=Ri.join(gx(),it.HDB_HOME_DIR_NAME,it.BOOT_PROPS_FILE_NAME);return hx.existsSync(e)||(e=Ri.join(__dirname,"../","hdb_boot_properties.file")),e}a(Dse,"getPropsFilePath");function Lse(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(Lse,"timeoutPromise");async function Mse(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=sse.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(Mse,"isPortTaken");function Use(e){try{return it.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Sr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Use,"isClusterOperation");function Pse(e,t){let r=(be(),te(Fe)).getDatabases();if(!r[e])return xE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return xE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Pse,"checkGlobalSchemaTable");function vse(e,t){if(Wr(t)){Sr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Wr(e)||cs(e)){Sr.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){Sr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Sr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(vse,"getClusterUser");function Bse(){dx.parsePromise=function(e,t,r){return new Promise(function(n,s){dx.parse(e,{header:!0,transformHeader:Rx,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Bse,"promisifyPapaParse");function Rx(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Rx,"removeBOM");function Hse(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Sr.info(`Got cluster status event response: ${ase(s)}`);try{i.cancel()}catch{Sr.error("Error trying to cancel timeout.")}n(s)})})}a(Hse,"createEventPromise");async function xse(e){let t=!0,r=0;do await mx(dse*r++),(await ose.findPs(e)).length>0&&(t=!1);while(t&&r<fse);if(t)throw new Error(`process ${e} was not started`)}a(xse,"checkProcessRunning");function Fse(e,t){let r=Ax(e);if(r)return r;let n=Ox(e,t);if(n)return n}a(Fse,"checkSchemaTableExist");function Ax(e){let{getDatabases:t}=(be(),te(Fe));if(!t()[e])return xE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Ax,"checkSchemaExists");function Ox(e,t){let{getDatabases:r}=(be(),te(Fe));if(!r()[e][t])return xE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Ox,"checkTableExists");function qse(){let e=HE().utc().add(1,it.MOMENT_DAYS_TAG).startOf(it.MOMENT_DAYS_TAG).unix(),t=HE().utc().unix();return e-t}a(qse,"getStartOfTomorrowInSeconds");function Gse(){return HE().utc().format("DD-MM-YYYY")}a(Gse,"getLimitKey");function kse(e){try{let t=new ise(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){Sr.error("Got an error back ticking items."),Sr.error(t)}}a(kse,"backtickASTSchemaItems");function Vse(e){return[e]}a(Vse,"createForkArgs");function $se(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a($se,"autoCastBoolean");function Yse(e,t){let{getDatabases:r}=(be(),te(Fe)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(Yse,"getTableHashAttribute");function Kse(e){let{getDatabases:t}=(be(),te(Fe));return t()[e]!==void 0}a(Kse,"doesSchemaExist");function Wse(e,t){let{getDatabases:r}=(be(),te(Fe));return r()[e]?.[t]!==void 0}a(Wse,"doesTableExist");function Qse(e){try{return JSON.stringify(e)}catch{return e}}a(Qse,"stringifyObj");function zse(e){let t=HE.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(zse,"ms_to_time");function Jse(e,t){let r=Ri.basename(e,Ri.extname(e));return Ri.join(Ri.dirname(e),r+t)}a(Jse,"changeExtension");function EA(){if(process.env[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=cse(process.argv);if(e[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(EA,"getEnvCliRootPath");var dA;function Xse(){if(dA)return dA;let e=EA();EA()&&hx.pathExistsSync(Ri.join(e,it.HDB_CONFIG_FILE))&&(dA=!0)}a(Xse,"noBootFile");function jse(e,t){let r;return e.protocol==="http:"?r=lse:r=use,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(jse,"httpRequest");function Zse(e){if(!e.schema&&!e.database){e.schema=it.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Zse,"transformReq");function eie(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(eie,"convertToMS")});var Dx=T((Qme,Cx)=>{"use strict";var Qr=Z(),tie=Vi(),Se=U(),Rl=tt(),Fs=require("path"),{PACKAGE_ROOT:qE}=U(),yx=Z(),FE=J(),Wa="/dev/null",rie=Fs.join(qE,"launchServiceScripts"),Nx=Fs.join(qE,"utility/scripts"),nie=Fs.join(Nx,Se.HDB_RESTART_SCRIPT),wx=Fs.resolve(qE,"dependencies",`${process.platform}-${process.arch}`,Rl.NATS_BINARY_NAME);function Ix(){let t=tie.licenseSearch().ram_allocation||Se.RAM_ALLOCATION_ENUM.DEFAULT,r=Se.MEM_SETTING_KEY+t,n={[Se.PROCESS_NAME_ENV_PROP]:Se.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return FE.noBootFile()&&(n[Se.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=FE.getEnvCliRootPath()),{name:Se.PROCESS_DESCRIPTORS.HDB,script:Se.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:qE}}a(Ix,"generateMainServerConfig");var sie=9930;function iie(){Qr.initSync(!0);let e=Qr.get(Se.CONFIG_PARAMS.ROOTPATH),t=Fs.join(e,"clustering",Rl.NATS_CONFIG_FILES.HUB_SERVER),r=Fs.join(Qr.get(Se.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Se.LOG_NAMES.HDB),n=yx.get(Se.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Rl.LOG_LEVEL_FLAGS[Qr.get(Se.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Se.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==sie?"-"+n:""),script:wx,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Se.PROCESS_NAME_ENV_PROP]:Se.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Qr.get(Se.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Wa,i.error_file=Wa),i}a(iie,"generateNatsHubServerConfig");var oie=9940;function aie(){Qr.initSync(!0);let e=Qr.get(Se.CONFIG_PARAMS.ROOTPATH),t=Fs.join(e,"clustering",Rl.NATS_CONFIG_FILES.LEAF_SERVER),r=Fs.join(Qr.get(Se.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Se.LOG_NAMES.HDB),n=yx.get(Se.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Rl.LOG_LEVEL_FLAGS[Qr.get(Se.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==oie?"-"+n:""),script:wx,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Se.PROCESS_NAME_ENV_PROP]:Se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Qr.get(Se.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Wa,i.error_file=Wa),i}a(aie,"generateNatsLeafServerConfig");function cie(){Qr.initSync();let e=Fs.join(Qr.get(Se.CONFIG_PARAMS.LOGGING_ROOT),Se.LOG_NAMES.HDB),t={name:Se.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Se.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Se.PROCESS_NAME_ENV_PROP]:Se.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:rie,autorestart:!1};return Qr.get(Se.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Wa,t.error_file=Wa),t}a(cie,"generateClusteringUpgradeV4ServiceConfig");function uie(){let e={[Se.PROCESS_NAME_ENV_PROP]:Se.PROCESS_DESCRIPTORS.RESTART_HDB};return FE.noBootFile()&&(e[Se.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=FE.getEnvCliRootPath()),{...{name:Se.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:Nx},script:nie}}a(uie,"generateRestart");function lie(){return{apps:[Ix()]}}a(lie,"generateAllServiceConfigs");Cx.exports={generateAllServiceConfigs:lie,generateMainServerConfig:Ix,generateRestart:uie,generateNatsHubServerConfig:iie,generateNatsLeafServerConfig:aie,generateClusteringUpgradeV4ServiceConfig:cie}});var wT=T((Xme,Vx)=>{"use strict";var Ue=U(),_ie=J(),qs=RT(),Al=At(),us=tt(),Ai=Dx(),GE=Z(),Oi=W(),die=Os(),{startWorker:Lx,onMessageFromWorkers:fie}=Ze(),Eie=ca(),Jme=require("util"),hie=require("child_process"),mie=require("fs"),{execFile:pie}=hie,Ie;Vx.exports={enterPM2Mode:Sie,start:bi,stop:hA,reload:Ux,restart:Px,list:mA,describe:Bx,connect:Gs,kill:Oie,startAllServices:bie,startService:pA,getUniqueServicesList:Hx,restartAllServices:yie,isServiceRegistered:xx,reloadStopStart:Fx,restartHdb:vx,deleteProcess:Rie,startClusteringProcesses:Gx,startClusteringThreads:kx,isHdbRestartRunning:Aie,isClusteringRunning:wie,stopClustering:Nie,reloadClustering:Iie};var Ol=!1;fie(e=>{e.type==="restart"&&GE.initSync(!0)});function Sie(){Ol=!0}a(Sie,"enterPM2Mode");function Gs(){return Ie||(Ie=require("pm2")),new Promise((e,t)=>{Ie.connect((r,n)=>{Oi.setupConsoleLogging(),r&&t(r),e(n)})})}a(Gs,"connect");var Tr,Tie=10,Mx;function bi(e,t=!1){if(Ol)return gie(e);let r=pie(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Tr.indexOf(r);o>-1&&Tr.splice(o,1),!Mx&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Tie&&(mie.existsSync(qs.getHubConfigPath())?bi(e):(await qs.generateNatsConfig(!0),bi(e),await new Promise(c=>setTimeout(c,3e3)),await qs.removeNatsConfig(Ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await qs.removeNatsConfig(Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=GE.get(Ue.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&us.LOG_LEVEL_HIERARCHY[o]>=us.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===us.LOG_LEVELS.ERR||l===us.LOG_LEVELS.WRN?Oi.OUTPUTS.STDERR:Oi.OUTPUTS.STDOUT;Oi.logCustomLevel(l||"info",E,n,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=us.LOG_LEVELS[f]}if(us.LOG_LEVEL_HIERARCHY[o]>=us.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===us.LOG_LEVELS.ERR||l===us.LOG_LEVELS.WRN?Oi.OUTPUTS.STDERR:Oi.OUTPUTS.STDOUT;Oi.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),Tr=[],!Tr&&!t){let i=a(()=>{Mx=!0,Tr&&(Tr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}Tr.push(r)}a(bi,"start");function gie(e){return new Promise(async(t,r)=>{try{await Gs()}catch(n){r(n)}Ie.start(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(gie,"startWithPM2");function hA(e){if(!Ol){for(let t of Tr||[])t.name===e&&(Tr.splice(Tr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Gs()}catch(n){r(n)}Ie.stop(e,async(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.delete(e,(i,o)=>{i&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(o)})})})}a(hA,"stop");function Ux(e){return new Promise(async(t,r)=>{try{await Gs()}catch(n){r(n)}Ie.reload(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(Ux,"reload");function Px(e){if(!Ol)for(let t of Tr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Gs()}catch(n){r(n)}Ie.restart(e,(n,s)=>{Ie.disconnect(),t(s)})})}a(Px,"restart");function Rie(e){return new Promise(async(t,r)=>{try{await Gs()}catch(n){r(n)}Ie.delete(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(Rie,"deleteProcess");async function vx(){await bi(Ai.generateRestart())}a(vx,"restartHdb");async function Aie(){let e=await mA();for(let t in e)if(e[t].name===Ue.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Aie,"isHdbRestartRunning");function mA(){return new Promise(async(e,t)=>{try{await Gs()}catch(r){t(r)}Ie.list((r,n)=>{r&&(Ie.disconnect(),t(r)),Ie.disconnect(),e(n)})})}a(mA,"list");function Bx(e){return new Promise(async(t,r)=>{try{await Gs()}catch(n){r(n)}Ie.describe(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(Bx,"describe");function Oie(){if(!Ol){for(let e of Tr||[])e.kill();Tr=[];return}return new Promise(async(e,t)=>{try{await Gs()}catch(r){t(r)}Ie.killDaemon((r,n)=>{r&&(Ie.disconnect(),t(r)),Ie.disconnect(),e(n)})})}a(Oie,"kill");async function bie(){try{await Gx(),await kx(),await bi(Ai.generateAllServiceConfigs())}catch(e){throw Ie?.disconnect(),e}}a(bie,"startAllServices");async function pA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ue.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Ai.generateMainServerConfig();break;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Ai.generateNatsIngestServiceConfig();break;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Ai.generateNatsReplyServiceConfig();break;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Ai.generateNatsHubServerConfig(),await bi(r,t),await qs.removeNatsConfig(e);return;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Ai.generateNatsLeafServerConfig(),await bi(r,t),await qs.removeNatsConfig(e);return;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Ai.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await bi(r)}catch(r){throw Ie?.disconnect(),r}}a(pA,"startService");async function Hx(){try{let e=await mA(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Ie?.disconnect(),e}}a(Hx,"getUniqueServicesList");async function yie(e=[]){try{let t=!1,r=await Hx();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===Ue.PROCESS_DESCRIPTORS.HDB?t=!0:await Px(o))}t&&await Fx(Ue.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ie?.disconnect(),t}}a(yie,"restartAllServices");async function xx(e){if(Tr?.find(r=>r.name===e))return!0;let t=await Eie.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(xx,"isServiceRegistered");async function Fx(e){let t=e===Ue.PROCESS_DESCRIPTORS.HDB?GE.get(Ue.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):GE.get(Ue.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Bx(e),n=_ie.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await hA(e),await pA(e)):e===Ue.PROCESS_DESCRIPTORS.HDB?await vx():await Ux(e)}a(Fx,"reloadStopStart");var qx;async function Gx(e=!1){for(let t in Ue.CLUSTERING_PROCESSES){let r=Ue.CLUSTERING_PROCESSES[t];await pA(r,e)}}a(Gx,"startClusteringProcesses");async function kx(){qx=Lx(Ue.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ue.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Al.createWorkQueueStream(us.WORK_QUEUE_CONSUMER_NAMES),await Al.updateIngestStreamConsumer(),await Al.updateLocalStreams();let e=await die.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ue.PRE_4_0_0_VERSION){Oi.info("Starting clustering upgrade 4.0.0 process"),Lx(Ue.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(kx,"startClusteringThreads");async function Nie(){for(let e in Ue.CLUSTERING_PROCESSES)if(e!==Ue.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ue.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await qx.terminate();else{let t=Ue.CLUSTERING_PROCESSES[e];await hA(t)}}a(Nie,"stopClustering");async function wie(){for(let e in Ue.CLUSTERING_PROCESSES){let t=Ue.CLUSTERING_PROCESSES[e];if(await xx(t)===!1)return!1}return!0}a(wie,"isClusteringRunning");async function Iie(){await qs.generateNatsConfig(!0),await Al.reloadNATSHub(),await Al.reloadNATSLeaf(),await qs.removeNatsConfig(Ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await qs.removeNatsConfig(Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Iie,"reloadClustering")});var SA=wT(),$x=U();a(async function(){try{let t=await SA.describe($x.PROCESS_DESCRIPTORS.HDB);for(let r of t)await SA.reload(r.pm_id);await SA.deleteProcess($x.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();