harperdb 4.3.0-alpha.2 → 4.3.0-beta.10

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 vx=Object.create;var Ja=Object.defineProperty;var Bx=Object.getOwnPropertyDescriptor;var Hx=Object.getOwnPropertyNames;var xx=Object.getPrototypeOf,qx=Object.prototype.hasOwnProperty;var a=(e,t)=>Ja(e,"name",{value:t,configurable:!0});var Ae=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ve=(e,t)=>{for(var r in t)Ja(e,r,{get:t[r],enumerable:!0})},hA=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Hx(t))!qx.call(e,s)&&s!==r&&Ja(e,s,{get:()=>t[s],enumerable:!(n=Bx(t,s))||n.enumerable});return e};var v=(e,t,r)=>(r=e!=null?vx(xx(e)):{},hA(t||!e||!e.__esModule?Ja(r,"default",{value:e,enumerable:!0}):r,e)),ee=e=>hA(Ja({},"__esModule",{value:!0}),e);var SA=T((gie,pA)=>{var Fx=require("fast-glob"),{statSync:XE,existsSync:jE,readFileSync:Gx,writeFileSync:kx}=require("fs"),{spawnSync:Vx,spawn:$x,execFileSync:Tie}=require("child_process"),{isMainThread:Yx}=require("worker_threads"),{join:Ks,relative:mA}=require("path"),{PACKAGE_ROOT:An}=M(),{tmpdir:Kx,platform:Wx}=require("os");require("source-map-support").install();var Qx=["resources","server","dataLayer","components"],Xa="ts-build",ZE,zx=__filename.endsWith("tsBuild.js");if(zx){if(Yx){let r;try{XE(Ks(An,Xa)),r=!0}catch{}if(r)for(let n of Fx.sync(Qx.map(s=>s+"/**/*.ts"),{cwd:An})){let s=0,i=0;try{s=XE(Ks(An,n)).mtimeMs-5e3,i=XE(Ks(An,Xa,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=Ks(An,"node_modules/.bin/tsc");Wx()==="win32"&&(n+=".cmd");let s=Vx(n,{cwd:An});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=Ks(Kx(),"harperdb-tsc.pid"),o;if(jE(i))try{process.kill(+Gx(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=$x(n,["--watch"],{cwd:An,detached:!0,stdio:"ignore"});kx(i,c.pid.toString()),c.unref()}}}}let e=pA.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(An)&&!n[0].includes("node_modules")){let i=mA(An,n[0]),o;i.startsWith(Xa)?o=Ks(An,mA(Xa,i)):o=Ks(An,Xa,i);let c=Ks(o,r),u=c+".js";if(jE(u))return u;if(c.includes(".")&&jE(c))return c}return t(r,n,s)}}});var M=T((Oie,MA)=>{"use strict";var jr=require("path"),Jx=require("fs"),{relative:Rie,join:Aie}=jr,{existsSync:Xx}=Jx;function jx(){let e=__dirname;for(;!Xx(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(jx,"getHDBPackageRoot");var Ws=jx(),TA="js",vl=TA,Zx="harperdb-config.yaml",eq="defaultConfig.yaml",tq="hdb",gA=`harperdb.${vl}`,RA=`customFunctionsServer.${vl}`,rq=`restartHdb.${vl}`,th="HarperDB",Pl="Custom Functions",Bl="Clustering Hub",Hl="Clustering Leaf",nq="Clustering Ingest Service",sq="Clustering Reply Service",iq="foreground.pid",oq="hdb.pid",aq="data",cq={HDB:th,CLUSTERING_HUB:Bl,CLUSTERING_LEAF:Hl,CLUSTERING_INGEST_SERVICE:nq,CLUSTERING_REPLY_SERVICE:sq,CUSTOM_FUNCTIONS:Pl,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"},uq={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},lq={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},_q={harperdb:th,"clustering hub":Bl,"clustering leaf":Hl,"custom functions":Pl,custom_functions:Pl,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},dq={CLUSTERING_HUB_PROC_DESCRIPTOR:Bl,CLUSTERING_LEAF_PROC_DESCRIPTOR:Hl},eh={HDB:jr.join(Ws,"server/harperdb"),CUSTOM_FUNCTIONS:jr.join(Ws,"server/customFunctions"),CLUSTERING_HUB:jr.join(Ws,"server/nats"),CLUSTERING_LEAF:jr.join(Ws,"server/nats")},fq={HDB:jr.join(eh.HDB,gA),CUSTOM_FUNCTIONS:jr.join(eh.CUSTOM_FUNCTIONS,RA)},Eq={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:jr.join(Ws,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:jr.join(Ws,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:jr.join(Ws,"launchServiceScripts/launchUpdateNodes4-0-0.js")},hq={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},AA="support@harperdb.io",mq="customer-success@harperdb.io",OA=1,pq=4141,bA="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Sq="https://www.harperdb.io/product",Tq=`For support, please submit a request at ${bA} or contact ${AA}`,NA=`For license support, please contact ${mq}`,gq="None of the specified records were found.",Rq="hash attribute not found",Aq=`Your current license only supports ${OA} role. ${NA}`,Oq="Your current license only supports 3 connections to a node.",bq="127.0.0.1",Nq=1,yq=/^\.$/,Iq=/^\.\.$/,wq="U+002E",Cq=/\//g,Lq="U+002F",Dq=/U\+002F/g,Mq=/^U\+002E$/,Uq=/^U\+002EU\+002E$/,Pq="d",vq=999999,Bq="*",Hq="--max-old-space-size=",xq="system",qq="__hdb_hash",Fq=".harperdb",Gq=".hdb",kq="keys",Vq="hdb_boot_properties.file",$q=".updateConfig.json",Yq="SIGTSTP",Kq=24,Wq=6e4,Qq=448,zq="blob",Jq="trash",Xq="database",jq="schema",Zq="transactions",eF=".count",tF="id",rF="PROCESS_NAME",yA={SETTINGS_PATH_KEY:"settings_path"},IA=require("lodash"),nF={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"},sF={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},iF={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},oF={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"},aF={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"},yr="hdb_internal:",cF={CREATE_SCHEMA:yr+"create_schema",CREATE_TABLE:yr+"create_table",CREATE_ATTRIBUTE:yr+"create_attribute",ADD_USER:yr+"add_user",ALTER_USER:yr+"alter_user",DROP_USER:yr+"drop_user",HDB_NODES:yr+"hdb_nodes",HDB_USERS:yr+"hdb_users",HDB_WORKERS:yr+"hdb_workers",CATCHUP:yr+"catchup",SCHEMA_CATCHUP:yr+"schema_catchup",WORKER_ROOM:yr+"cluster_workers"},uF={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"},lF="060493.ks",_F=".license",dF={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"},fF={CSV:".csv",JSON:".json"},EF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},hF={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},ja={};ja[X.INSERT]=X.INSERT;ja[X.UPDATE]=X.UPDATE;ja[X.UPSERT]=X.UPSERT;ja[X.DELETE]=X.DELETE;var ve=Object.create(null);ve[X.DESCRIBE_ALL]=X.DESCRIBE_ALL;ve[X.DESCRIBE_TABLE]=X.DESCRIBE_TABLE;ve[X.DESCRIBE_SCHEMA]=X.DESCRIBE_SCHEMA;ve[X.READ_LOG]=X.READ_LOG;ve[X.ADD_NODE]=X.ADD_NODE;ve[X.LIST_USERS]=X.LIST_USERS;ve[X.LIST_ROLES]=X.LIST_ROLES;ve[X.USER_INFO]=X.USER_INFO;ve[X.SQL]=X.SQL;ve[X.GET_JOB]=X.GET_JOB;ve[X.SEARCH_JOBS_BY_START_DATE]=X.SEARCH_JOBS_BY_START_DATE;ve[X.DELETE_FILES_BEFORE]=X.DELETE_FILES_BEFORE;ve[X.EXPORT_LOCAL]=X.EXPORT_LOCAL;ve[X.EXPORT_TO_S3]=X.EXPORT_TO_S3;ve[X.CLUSTER_STATUS]=X.CLUSTER_STATUS;ve[X.REMOVE_NODE]=X.REMOVE_NODE;ve[X.RESTART]=X.RESTART;ve[X.CUSTOM_FUNCTIONS_STATUS]=X.CUSTOM_FUNCTIONS_STATUS;ve[X.GET_CUSTOM_FUNCTIONS]=X.GET_CUSTOM_FUNCTIONS;ve[X.GET_CUSTOM_FUNCTION]=X.GET_CUSTOM_FUNCTION;ve[X.SET_CUSTOM_FUNCTION]=X.SET_CUSTOM_FUNCTION;ve[X.DROP_CUSTOM_FUNCTION]=X.DROP_CUSTOM_FUNCTION;ve[X.ADD_CUSTOM_FUNCTION_PROJECT]=X.ADD_CUSTOM_FUNCTION_PROJECT;ve[X.DROP_CUSTOM_FUNCTION_PROJECT]=X.DROP_CUSTOM_FUNCTION_PROJECT;ve[X.PACKAGE_CUSTOM_FUNCTION_PROJECT]=X.PACKAGE_CUSTOM_FUNCTION_PROJECT;ve[X.DEPLOY_CUSTOM_FUNCTION_PROJECT]=X.DEPLOY_CUSTOM_FUNCTION_PROJECT;var mF={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"},pF={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},wA={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"},SF=IA.invert(wA),TF={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",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_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"},CA={settings_path:yA.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,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_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];CA[t.toLowerCase()]=t}var gF={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},RF={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"},AF={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"},OF={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},bF={VERSION_DEFAULT:"2.2.0"},NF={DEVELOPMENT:8192,DEFAULT:512},yF={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"},IF={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"},wF={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},LA={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},CF=Symbol("metadata"),LF="__clustering__",DF=Object.values(LA),MF=15984864e5,DA={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},UF=IA.invert(DA),PF={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"},vF=111,BF=`\r
2
- `,HF={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},xF=["*","%"],qF="unauthorized_access",FF="func_val",GF={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},kF={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},VF={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"},$F={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},YF={HTTP:"http"},KF={STOPPED:"stopped",ONLINE:"online"},WF="3.x.x",QF={SUCCESS:"success",FAILURE:"failure"},zF={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};MA.exports={LOCAL_HARPERDB_OPERATIONS:ve,HDB_SUPPORT_ADDRESS:AA,HDB_SUPPORT_URL:bA,HDB_PRICING_URL:Sq,SUPPORT_HELP_MSG:Tq,LICENSE_HELP_MSG:NA,HDB_PROC_NAME:gA,HDB_PROC_DESCRIPTOR:th,CLUSTERING_LEAF_PROC_DESCRIPTOR:Hl,CLUSTERING_HUB_PROC_DESCRIPTOR:Bl,SYSTEM_SCHEMA_NAME:xq,HASH_FOLDER_NAME:qq,HDB_HOME_DIR_NAME:Fq,UPDATE_FILE_NAME:$q,LICENSE_KEY_DIR_NAME:kq,BOOT_PROPS_FILE_NAME:Vq,JOB_TYPE_ENUM:RF,JOB_STATUS_ENUM:dF,SYSTEM_TABLE_NAMES:oF,SYSTEM_TABLE_HASH_ATTRIBUTES:aF,OPERATIONS_ENUM:X,VALID_S3_FILE_TYPES:fF,S3_BUCKET_AUTH_KEYS:EF,VALID_SQL_OPS_ENUM:hF,GEO_CONVERSION_ENUM:pF,HDB_SETTINGS_NAMES:wA,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:SF,SERVICE_ACTIONS_ENUM:mF,CLUSTER_MESSAGE_TYPE_ENUM:AF,CLUSTER_CONNECTION_DIRECTION_ENUM:OF,CLUSTER_EVENTS_DEFS_ENUM:yF,PERIOD_REGEX:yq,DOUBLE_PERIOD_REGEX:Iq,UNICODE_PERIOD:wq,FORWARD_SLASH_REGEX:Cq,UNICODE_FORWARD_SLASH:Lq,ESCAPED_FORWARD_SLASH_REGEX:Dq,ESCAPED_PERIOD_REGEX:Mq,ESCAPED_DOUBLE_PERIOD_REGEX:Uq,REG_KEY_FILE_NAME:lF,RESTART_TIMEOUT_MS:Wq,HDB_FILE_PERMISSIONS:Qq,DATABASES_DIR_NAME:Xq,LEGACY_DATABASES_DIR_NAME:jq,TRANSACTIONS_DIR_NAME:Zq,LIMIT_COUNT_NAME:eF,ID_ATTRIBUTE_STRING:tF,INSERT_MODULE_ENUM:sF,UPGRADE_JSON_FIELD_NAMES_ENUM:iF,RESTART_CODE:Yq,RESTART_CODE_NUM:Kq,CLUSTER_OPERATIONS:ja,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:uF,HDB_INTERNAL_SC_CHANNEL_PREFIX:yr,INTERNAL_SC_CHANNELS:cF,CLUSTERING_MESSAGE_TYPES:PF,HDB_FILE_SUFFIX:Gq,BLOB_FOLDER_NAME:zq,HDB_TRASH_DIR:Jq,ORIGINATOR_SET_VALUE:vF,LICENSE_VALUES:bF,RAM_ALLOCATION_ENUM:NF,TIME_STAMP_NAMES_ENUM:LA,TIME_STAMP_NAMES:DF,PERMS_UPDATE_RELEASE_TIMESTAMP:MF,SEARCH_NOT_FOUND_MESSAGE:gq,SEARCH_ATTRIBUTE_NOT_FOUND:Rq,LICENSE_ROLE_DENIED_RESPONSE:Aq,LICENSE_MAX_CONNS_REACHED:Oq,BASIC_LICENSE_MAX_NON_CU_ROLES:OA,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:pq,VALUE_SEARCH_COMPARATORS:DA,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:UF,LICENSE_FILE_NAME:_F,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:IF,NEW_LINE:BF,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:Nq,MOMENT_DAYS_TAG:Pq,API_TURNOVER_SEC:vq,LOOPBACK:bq,CODE_EXTENSION:vl,WILDCARD_SEARCH_VALUE:Bq,NODE_ERROR_CODES:wF,JAVASCRIPT_EXTENSION:TA,PERMS_CRUD_ENUM:HF,UNAUTHORIZED_PERMISSION_NAME:qF,SEARCH_WILDCARDS:xF,FUNC_VAL:FF,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:GF,JWT_ENUM:kF,CLUSTERING_FLAG:LF,ITC_EVENT_TYPES:VF,CUSTOM_FUNCTION_PROC_NAME:RA,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Pl,SERVICES:$F,THREAD_TYPES:YF,MEM_SETTING_KEY:Hq,HDB_RESTART_SCRIPT:rq,PROCESS_DESCRIPTORS:cq,SERVICE_SERVERS:fq,SERVICE_SERVERS_CWD:eh,PROCESS_DESCRIPTORS_VALIDATE:_q,LAUNCH_SERVICE_SCRIPTS:Eq,LOG_LEVELS:lq,PROCESS_NAME_ENV_PROP:rF,LOG_NAMES:uq,PM2_PROCESS_STATUSES:KF,CONFIG_PARAM_MAP:CA,CONFIG_PARAMS:C,HDB_CONFIG_FILE:Zx,HDB_DEFAULT_CONFIG_FILE:eq,ROLE_TYPES_ENUM:hq,BOOT_PROP_PARAMS:yA,INSTALL_PROMPTS:nF,HDB_ROOT_DIR_NAME:tq,CLUSTERING_PROCESSES:dq,FOREGROUND_PID_FILE:iq,PACKAGE_ROOT:Ws,PRE_4_0_0_VERSION:WF,DATABASES_PARAM_CONFIG:gF,METADATA_PROPERTY:CF,AUTH_AUDIT_STATUS:QF,AUTH_AUDIT_TYPES:zF,HDB_PID_FILE:oq,DEFAULT_DATABASE_NAME:aq,LEGACY_CONFIG_PARAMS:TF};SA()});var rh=T((Nie,vA)=>{"use strict";var UA=require("minimist");vA.exports=JF;function JF(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=PA(process.env),n=PA(UA(process.argv))):(r=process.env,n=UA(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(JF,"assignCMDENVVariables");function PA(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(PA,"objKeysToLowerCase")});var V=T((Iie,uh)=>{"use strict";var yi=require("fs-extra"),{workerData:XF,threadId:jF}=require("worker_threads"),hs=require("path"),xA=require("yaml"),qA=require("properties-reader"),Nt=M(),BA=rh(),ZF=require("os"),{PACKAGE_ROOT:sh}=M(),{_assignPackageExport:eG}=require("../../index"),ec={};for(let e in console)ec[e]||(ec[e]=console[e]);var tr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},FA={STDOUT:"stdOut",STDERR:"stdErr"},tG=hs.join(sh,"logs"),rG=hs.join(sh,"config/yaml/",Nt.HDB_DEFAULT_CONFIG_FILE),nG=1e4,Es,kn,er,xl,ql,tc,vo,Za;Za===void 0&&GA();uh.exports={notify:$A,fatal:YA,error:rc,warn:ch,info:Fl,debug:ah,trace:oh,setLogLevel:lG,log_level:er,loggerWithTag:sG,suppressLogging:iG,initLogSettings:GA,setupConsoleLogging:kA,logCustomLevel:cG,closeLogFile:ih,getLogFilePath:()=>tc,OUTPUTS:FA,AuthAuditLog:fG};eG("logger",uh.exports);function GA(e=!1){try{if(Za===void 0||e){ih();let t=uG(),r=BA(["ROOTPATH"]);try{Za=qA(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!yi.pathExistsSync(hs.join(r.ROOTPATH,Nt.HDB_CONFIG_FILE)))throw n}({level:er,config_log_path:ql,to_file:Es,to_stream:kn}=_G(r.ROOTPATH?hs.join(r.ROOTPATH,Nt.HDB_CONFIG_FILE):Za.get("settings_path"))),xl=Nt.LOG_NAMES.HDB,tc=hs.join(ql,xl)}}catch(t){if(Za=void 0,t.code===Nt.NODE_ERROR_CODES.ENOENT){let r=BA(Object.keys(Nt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Nt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===Nt.CONFIG_PARAMS.LOGGING_LEVEL){er=u;continue}if(c===Nt.CONFIG_PARAMS.LOGGING_STDSTREAMS){kn=u;continue}c===Nt.CONFIG_PARAMS.LOGGING_FILE&&(Es=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=dG();Es=Es===void 0?s:Es,Es=HA(Es),kn=kn===void 0?i:kn,kn=HA(kn),er=er===void 0?n:er,ql=tG,xl=Nt.LOG_NAMES.INSTALL,tc=hs.join(ql,xl);return}throw rc("Error initializing log settings"),rc(t),t}process.env.DEV_MODE&&(kn=!0),kA()}a(GA,"initLogSettings");var nh=!0;function kA(){Po("error",rc),Po("warn",ch),Po("log",Fl),Po("info",Fl),Po("debug",ah),Po("trace",oh)}a(kA,"setupConsoleLogging");function Po(e,t){console[e]=function(...r){if(nh&&t(...r),!/PM2 log:|App \[/.test(r[0]))return ec[e](...r)}}a(Po,"logConsole");function sG(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r($A),fatal:r(YA),error:r(rc),warn:r(ch),info:r(Fl),debug:r(ah),trace:r(oh)};function r(n){return function(...s){return n(t,...s)}}}a(sG,"loggerWithTag");function iG(e){try{nh=!1,e()}finally{nh=!0}}a(iG,"suppressLogging");var oG=XF?.name?.replace(/ /g,"-")||"main";function ms(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||oG+"/"+jF);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(ms,"createLogRecord");function nc(e){Es&&VA(e),kn&&process.stdout.write(e)}a(nc,"logStdOut");function Gl(e){Es&&VA(e),kn&&process.stderr.write(e)}a(Gl,"logStdErr");function VA(e){aG(),vo?yi.appendFileSync(vo,e):ec.log(e)}a(VA,"logToFile");function ih(){try{yi.closeSync(vo)}catch{}vo=null}a(ih,"closeLogFile");function aG(){if(!vo){try{if(!tc)debugger;vo=yi.openSync(tc,"a")}catch(e){ec.error(e)}setTimeout(()=>{ih()},nG).unref()}}a(aG,"openLogFile");function Fl(...e){tr[er]<=tr.info&&nc(ms("info",e))}a(Fl,"info");function oh(...e){tr[er]<=tr.trace&&nc(ms("trace",e))}a(oh,"trace");function rc(...e){tr[er]<=tr.error&&Gl(ms("error",e))}a(rc,"error");function ah(...e){tr[er]<=tr.debug&&nc(ms("debug",e))}a(ah,"debug");function $A(...e){tr[er]<=tr.notify&&nc(ms("notify",e))}a($A,"notify");function YA(...e){tr[er]<=tr.fatal&&Gl(ms("fatal",e))}a(YA,"fatal");function ch(...e){tr[er]<=tr.warn&&Gl(ms("warn",e))}a(ch,"warn");function cG(e,t,...r){t===FA.STDERR?Gl(ms(e,r)):nc(ms(e,r))}a(cG,"logCustomLevel");function uG(){let e;try{e=ZF.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=hs.join(e,Nt.HDB_HOME_DIR_NAME,Nt.BOOT_PROPS_FILE_NAME);return yi.existsSync(t)||(t=hs.join(sh,"utility/hdb_boot_properties.file")),t}a(uG,"getPropsFilePath");function lG(e){er=e}a(lG,"setLogLevel");function HA(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(HA,"autoCastBoolean");function _G(e){try{if(e.includes("config/settings.js")){let o=qA(e);return{level:o.get(Nt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:hs.dirname(o.get(Nt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Nt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Nt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=xA.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===Nt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(_G,"getLogConfig");function dG(){try{let e=xA.parseDocument(yi.readFileSync(rG,"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(dG,"getDefaultConfig");function fG(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(fG,"AuthAuditLog")});var WA=T((Cie,KA)=>{"use strict";var EG=require("util"),hG=require("path"),mG=require("child_process"),pG=EG.promisify(mG.execFile),SG=1e3*1e3*10;KA.exports={findPs:TG};async function TG(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await pG("ps",["wwxo",`pid,${r}`],{maxBuffer:SG});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:hG.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(TG,"findPs")});var ht=T((Die,zA)=>{"use strict";var gG="__dbis__",RG="__txns__",AG="__environment_name__",OG="__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"},NG=["__createdtime__","__updatedtime__"],yG="\uFFFF",QA={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},IG=Object.values(QA);zA.exports={AUDIT_STORE_NAME:RG,INTERNAL_DBIS_NAME:gG,DBI_DEFINITION_NAME:OG,SEARCH_TYPES:bG,TIMESTAMP_NAMES:NG,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:AG,TRANSACTIONS_DBI_NAMES_ENUM:QA,TRANSACTIONS_DBIS:IG,OVERFLOW_MARKER:yG}});var Ir=T((Mie,sO)=>{"use strict";var JA=M(),XA=ht(),jA={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},ZA=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),eO={500:ZA("There was an error processing your request."),400:"Invalid request"},wG=eO[jA.INTERNAL_SERVER_ERROR],CG={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.`},LG={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},DG={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"},MG={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 ${XA.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${XA.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"},UG={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${JA.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 ${JA.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"},tO={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"},PG={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."},vG={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`},BG={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"},HG={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},xG={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`},rO={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.`},nO={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}`},qG={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."},FG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},GG={...tO,...DG,...CG,...PG,...vG,...BG,...HG,...xG,...UG,...rO,...nO,...qG,...FG,...LG};sO.exports={CHECK_LOGS_WRAPPER:ZA,HDB_ERROR_MSGS:GG,DEFAULT_ERROR_MSGS:eO,DEFAULT_ERROR_RESP:wG,HTTP_STATUS_CODES:jA,LMDB_ERRORS_ENUM:MG,AUTHENTICATION_ERROR_MSGS:tO,VALIDATION_ERROR_MSGS:rO,ITC_ERRORS:nO}});var Z=T((Pie,aO)=>{"use strict";var Bo=Ir(),kG=V(),VG=M(),kl=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,iO),this.statusCode=n||Bo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Bo.DEFAULT_ERROR_MSGS[n]?Bo.DEFAULT_ERROR_MSGS[n]:Bo.DEFAULT_ERROR_MSGS[Bo.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&&kG[s](i)}},lh=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}},_h=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function iO(e,t,r,n=VG.LOG_LEVELS.ERROR,s=null,i=!1){if(oO(e))return e;let o=new kl(e,t,r,n,s);return i&&delete o.stack,o}a(iO,"handleHDBError");function oO(e){return e.__proto__.constructor.name===kl.name}a(oO,"isHDBError");aO.exports={isHDBError:oO,handleHDBError:iO,ClientError:lh,ServerError:_h,hdb_errors:Bo}});var uO=T((Bie,cO)=>{"use strict";var $G={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 dG=Object.create;var Za=Object.defineProperty;var fG=Object.getOwnPropertyDescriptor;var EG=Object.getOwnPropertyNames;var hG=Object.getPrototypeOf,mG=Object.prototype.hasOwnProperty;var a=(e,t)=>Za(e,"name",{value:t,configurable:!0});var Re=(e,t)=>()=>(e&&(t=e(e=0)),t);var g=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),$e=(e,t)=>{for(var r in t)Za(e,r,{get:t[r],enumerable:!0})},GA=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of EG(t))!mG.call(e,s)&&s!==r&&Za(e,s,{get:()=>t[s],enumerable:!(n=fG(t,s))||n.enumerable});return e};var x=(e,t,r)=>(r=e!=null?dG(hG(e)):{},GA(t||!e||!e.__esModule?Za(r,"default",{value:e,enumerable:!0}):r,e)),se=e=>GA(Za({},"__esModule",{value:!0}),e);var kA=g((eoe,qA)=>{var pG=require("fast-glob"),{statSync:uh,existsSync:lh,readFileSync:SG,writeFileSync:TG}=require("fs"),{spawnSync:gG,spawn:RG,execFileSync:Zie}=require("child_process"),{isMainThread:AG}=require("worker_threads"),{join:Ws,relative:FA}=require("path"),{PACKAGE_ROOT:gn}=U(),{tmpdir:OG,platform:bG}=require("os");require("source-map-support").install();var yG=["resources","server","dataLayer","components"],ec="ts-build",_h,NG=__filename.endsWith("tsBuild.js");if(NG){if(AG){let r;try{uh(Ws(gn,ec)),r=!0}catch{}if(r)for(let n of pG.sync(yG.map(s=>s+"/**/*.ts"),{cwd:gn})){let s=0,i=0;try{s=uh(Ws(gn,n)).mtimeMs-5e3,i=uh(Ws(gn,ec,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."),_h=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),_h=!0;if(_h){let n=Ws(gn,"node_modules/.bin/tsc");bG()==="win32"&&(n+=".cmd");let s=gG(n,{cwd:gn});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=Ws(OG(),"harperdb-tsc.pid"),o;if(lh(i))try{process.kill(+SG(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=RG(n,["--watch"],{cwd:gn,detached:!0,stdio:"ignore"});TG(i,c.pid.toString()),c.unref()}}}}let e=qA.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(gn)&&!n[0].includes("node_modules")){let i=FA(gn,n[0]),o;i.startsWith(ec)?o=Ws(gn,FA(ec,i)):o=Ws(gn,ec,i);let c=Ws(o,r),u=c+".js";if(lh(u))return u;if(c.includes(".")&&lh(c))return c}return t(r,n,s)}}});var U=g((noe,rO)=>{"use strict";var tn=require("path"),IG=require("fs"),{relative:toe,join:roe}=tn,{existsSync:wG}=IG;function CG(){let e=__dirname;for(;!wG(tn.join(e,"package.json"));){let t=tn.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(CG,"getHDBPackageRoot");var Qs=CG(),VA="js",xl=VA,DG="harperdb-config.yaml",LG="defaultConfig.yaml",MG="hdb",$A=`harperdb.${xl}`,YA=`customFunctionsServer.${xl}`,UG=`restartHdb.${xl}`,fh="HarperDB",Hl="Custom Functions",Gl="Clustering Hub",Fl="Clustering Leaf",PG="Clustering Ingest Service",vG="Clustering Reply Service",BG="foreground.pid",HG="hdb.pid",xG="data",GG={HDB:fh,CLUSTERING_HUB:Gl,CLUSTERING_LEAF:Fl,CLUSTERING_INGEST_SERVICE:PG,CLUSTERING_REPLY_SERVICE:vG,CUSTOM_FUNCTIONS:Hl,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"},FG={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},qG={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},kG={harperdb:fh,"clustering hub":Gl,"clustering leaf":Fl,"custom functions":Hl,custom_functions:Hl,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},VG={CLUSTERING_HUB_PROC_DESCRIPTOR:Gl,CLUSTERING_LEAF_PROC_DESCRIPTOR:Fl},dh={HDB:tn.join(Qs,"server/harperdb"),CUSTOM_FUNCTIONS:tn.join(Qs,"server/customFunctions"),CLUSTERING_HUB:tn.join(Qs,"server/nats"),CLUSTERING_LEAF:tn.join(Qs,"server/nats")},$G={HDB:tn.join(dh.HDB,$A),CUSTOM_FUNCTIONS:tn.join(dh.CUSTOM_FUNCTIONS,YA)},YG={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:tn.join(Qs,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:tn.join(Qs,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:tn.join(Qs,"launchServiceScripts/launchUpdateNodes4-0-0.js")},KG={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},KA="support@harperdb.io",WG="customer-success@harperdb.io",WA=1,QG=4141,QA="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",zG="https://www.harperdb.io/product",JG=`For support, please submit a request at ${QA} or contact ${KA}`,zA=`For license support, please contact ${WG}`,jG="None of the specified records were found.",XG="hash attribute not found",ZG=`Your current license only supports ${WA} role. ${zA}`,eF="Your current license only supports 3 connections to a node.",tF="127.0.0.1",rF=1,nF=/^\.$/,sF=/^\.\.$/,iF="U+002E",oF=/\//g,aF="U+002F",cF=/U\+002F/g,uF=/^U\+002E$/,lF=/^U\+002EU\+002E$/,_F="d",dF=999999,fF="*",EF="--max-old-space-size=",hF="system",mF="__hdb_hash",pF=".harperdb",SF=".hdb",TF="keys",gF="hdb_boot_properties.file",RF=".updateConfig.json",AF="SIGTSTP",OF=24,bF=6e4,yF=448,NF="blob",IF="trash",wF="database",CF="schema",DF="transactions",LF=".count",MF="id",UF="PROCESS_NAME",JA={SETTINGS_PATH_KEY:"settings_path"},jA=require("lodash"),PF={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"},vF={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},BF={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},HF={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"},xF={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"},yr="hdb_internal:",GF={CREATE_SCHEMA:yr+"create_schema",CREATE_TABLE:yr+"create_table",CREATE_ATTRIBUTE:yr+"create_attribute",ADD_USER:yr+"add_user",ALTER_USER:yr+"alter_user",DROP_USER:yr+"drop_user",HDB_NODES:yr+"hdb_nodes",HDB_USERS:yr+"hdb_users",HDB_WORKERS:yr+"hdb_workers",CATCHUP:yr+"catchup",SCHEMA_CATCHUP:yr+"schema_catchup",WORKER_ROOM:yr+"cluster_workers"},FF={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"},qF="060493.ks",kF=".license",VF={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},Z={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"},$F={CSV:".csv",JSON:".json"},YF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},KF={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},tc={};tc[Z.INSERT]=Z.INSERT;tc[Z.UPDATE]=Z.UPDATE;tc[Z.UPSERT]=Z.UPSERT;tc[Z.DELETE]=Z.DELETE;var xe=Object.create(null);xe[Z.DESCRIBE_ALL]=Z.DESCRIBE_ALL;xe[Z.DESCRIBE_TABLE]=Z.DESCRIBE_TABLE;xe[Z.DESCRIBE_SCHEMA]=Z.DESCRIBE_SCHEMA;xe[Z.READ_LOG]=Z.READ_LOG;xe[Z.ADD_NODE]=Z.ADD_NODE;xe[Z.LIST_USERS]=Z.LIST_USERS;xe[Z.LIST_ROLES]=Z.LIST_ROLES;xe[Z.USER_INFO]=Z.USER_INFO;xe[Z.SQL]=Z.SQL;xe[Z.GET_JOB]=Z.GET_JOB;xe[Z.SEARCH_JOBS_BY_START_DATE]=Z.SEARCH_JOBS_BY_START_DATE;xe[Z.DELETE_FILES_BEFORE]=Z.DELETE_FILES_BEFORE;xe[Z.EXPORT_LOCAL]=Z.EXPORT_LOCAL;xe[Z.EXPORT_TO_S3]=Z.EXPORT_TO_S3;xe[Z.CLUSTER_STATUS]=Z.CLUSTER_STATUS;xe[Z.REMOVE_NODE]=Z.REMOVE_NODE;xe[Z.RESTART]=Z.RESTART;xe[Z.CUSTOM_FUNCTIONS_STATUS]=Z.CUSTOM_FUNCTIONS_STATUS;xe[Z.GET_CUSTOM_FUNCTIONS]=Z.GET_CUSTOM_FUNCTIONS;xe[Z.GET_CUSTOM_FUNCTION]=Z.GET_CUSTOM_FUNCTION;xe[Z.SET_CUSTOM_FUNCTION]=Z.SET_CUSTOM_FUNCTION;xe[Z.DROP_CUSTOM_FUNCTION]=Z.DROP_CUSTOM_FUNCTION;xe[Z.ADD_CUSTOM_FUNCTION_PROJECT]=Z.ADD_CUSTOM_FUNCTION_PROJECT;xe[Z.DROP_CUSTOM_FUNCTION_PROJECT]=Z.DROP_CUSTOM_FUNCTION_PROJECT;xe[Z.PACKAGE_CUSTOM_FUNCTION_PROJECT]=Z.PACKAGE_CUSTOM_FUNCTION_PROJECT;xe[Z.DEPLOY_CUSTOM_FUNCTION_PROJECT]=Z.DEPLOY_CUSTOM_FUNCTION_PROJECT;var WF={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"},QF={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},XA={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"},zF=jA.invert(XA),JF={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"},w={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_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_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"},ZA={settings_path:JA.SETTINGS_PATH_KEY,hdb_root_key:w.ROOTPATH,hdb_root:w.ROOTPATH,rootpath:w.ROOTPATH,server_port_key:w.OPERATIONSAPI_NETWORK_PORT,server_port:w.OPERATIONSAPI_NETWORK_PORT,cert_key:w.TLS_CERTIFICATE,certificate:w.TLS_CERTIFICATE,private_key_key:w.TLS_PRIVATEKEY,private_key:w.TLS_PRIVATEKEY,http_secure_enabled_key:w.OPERATIONSAPI_NETWORK_HTTPS,https_on:w.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:w.OPERATIONSAPI_NETWORK_CORS,cors_on:w.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:w.LOGGING_LEVEL,log_level:w.LOGGING_LEVEL,log_path_key:w.LOGGING_ROOT,log_path:w.LOGGING_ROOT,clustering_node_name_key:w.CLUSTERING_NODENAME,node_name:w.CLUSTERING_NODENAME,clustering_enabled_key:w.CLUSTERING_ENABLED,clustering:w.CLUSTERING_ENABLED,max_http_threads:w.THREADS_COUNT,max_hdb_processes:w.THREADS_COUNT,server_timeout_key:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:w.LOGGING_AUDITLOG,disable_transaction_log:w.LOGGING_AUDITLOG,operation_token_timeout_key:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:w.HTTP_PORT,custom_functions_port:w.HTTP_PORT,custom_functions_directory_key:w.COMPONENTSROOT,custom_functions_directory:w.COMPONENTSROOT,max_custom_function_processes:w.THREADS_COUNT,log_to_file:w.LOGGING_FILE,log_to_stdstreams:w.LOGGING_STDSTREAMS,local_studio_on:w.LOCALSTUDIO_ENABLED,clustering_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:w.CLUSTERING_USER,clustering_enabled:w.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:w.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:w.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:w.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:w.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:w.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:w.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:w.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxconsumemsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS,clustering_leafserver_streams_maxingestthreads:w.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS,clustering_leafserver_streams_maxmsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:w.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:w.CLUSTERING_NODENAME,clustering_tls_certificate:w.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:w.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:w.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:w.CLUSTERING_TLS_INSECURE,clustering_tls_verify:w.CLUSTERING_TLS_VERIFY,clustering_loglevel:w.CLUSTERING_LOGLEVEL,clustering_republishmessages:w.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:w.CLUSTERING_DATABASELEVEL,customfunctions_network_port:w.HTTP_PORT,customfunctions_tls_certificate:w.TLS_CERTIFICATE,customfunctions_network_cors:w.HTTP_CORS,customfunctions_network_corsaccesslist:w.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:w.HTTP_HEADERSTIMEOUT,customfunctions_network_https:w.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:w.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:w.HTTP_TIMEOUT,http_threads:w.THREADS_COUNT,threads:w.THREADS_COUNT,threads_count:w.THREADS_COUNT,threads_debug:w.THREADS_DEBUG,threads_debug_startingport:w.THREADS_DEBUG_STARTINGPORT,threads_debug_port:w.THREADS_DEBUG_PORT,threads_debug_host:w.THREADS_DEBUG_HOST,threads_debug_waitfordebugger:w.THREADS_DEBUG_WAITFORDEBUGGER,threads_maxheapmemory:w.THREADS_MAXHEAPMEMORY,http_session_affinity:w.HTTP_SESSIONAFFINITY,http_compressionthreshold:w.HTTP_COMPRESSIONTHRESHOLD,http_cors:w.HTTP_CORS,http_corsaccesslist:w.HTTP_CORSACCESSLIST,http_headerstimeout:w.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,http_timeout:w.HTTP_TIMEOUT,http_port:w.HTTP_PORT,http_secureport:w.HTTP_SECUREPORT,http_mtls:w.HTTP_MTLS,http_mtls_user:w.HTTP_MTLS_USER,http_mtls_required:w.HTTP_MTLS_REQUIRED,customfunctions_processes:w.THREADS_COUNT,customfunctions_root:w.COMPONENTSROOT,localstudio_enabled:w.LOCALSTUDIO_ENABLED,logging_file:w.LOGGING_FILE,logging_level:w.LOGGING_LEVEL,logging_root:w.LOGGING_ROOT,logging_rotation_enabled:w.LOGGING_ROTATION_ENABLED,logging_rotation_compress:w.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:w.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:w.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:w.LOGGING_ROTATION_PATH,logging_stdstreams:w.LOGGING_STDSTREAMS,logging_auditlog:w.LOGGING_AUDITLOG,logging_auditretention:w.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:w.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:w.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:w.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:w.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:w.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:w.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:w.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:w.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:w.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:w.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:w.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:w.ROOTPATH,databases:w.DATABASES,storage_path:w.STORAGE_PATH,ignorescripts:w.IGNORE_SCRIPTS,mqtt_network_port:w.MQTT_NETWORK_PORT,mqtt_websocket:w.MQTT_WEBSOCKET,mqtt_network_secureport:w.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:w.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:w.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:w.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:w.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:w.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:w.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:w.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:w.AUTHENTICATION_CACHETTL,authentication_enablesessions:w.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:w.COMPONENTSROOT,tls_certificate:w.TLS_CERTIFICATE,tls_privatekey:w.TLS_PRIVATEKEY,tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,tls_ciphers:w.TLS_CIPHERS};for(let e in w){let t=w[e];ZA[t.toLowerCase()]=t}var jF={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},XF={csv_file_load:"csv_file_load",csv_data_load:Z.CSV_DATA_LOAD,csv_url_load:Z.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"},ZF={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"},eq={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},tq={VERSION_DEFAULT:"2.2.0"},rq={DEVELOPMENT:8192,DEFAULT:512},nq={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"},sq={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"},iq={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},eO={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},oq=Symbol("metadata"),aq="__clustering__",cq=Object.values(eO),uq=15984864e5,tO={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},lq=jA.invert(tO),_q={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"},dq=111,fq=`\r
2
+ `,Eq={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},hq=["*","%"],mq="unauthorized_access",pq="func_val",Sq={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Tq={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},gq={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",NATS_CONSUMER_UPDATE:"nats_consumer_update"},Rq={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},Aq={HTTP:"http"},Oq={STOPPED:"stopped",ONLINE:"online"},bq="3.x.x",yq={SUCCESS:"success",FAILURE:"failure"},Nq={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};rO.exports={LOCAL_HARPERDB_OPERATIONS:xe,HDB_SUPPORT_ADDRESS:KA,HDB_SUPPORT_URL:QA,HDB_PRICING_URL:zG,SUPPORT_HELP_MSG:JG,LICENSE_HELP_MSG:zA,HDB_PROC_NAME:$A,HDB_PROC_DESCRIPTOR:fh,CLUSTERING_LEAF_PROC_DESCRIPTOR:Fl,CLUSTERING_HUB_PROC_DESCRIPTOR:Gl,SYSTEM_SCHEMA_NAME:hF,HASH_FOLDER_NAME:mF,HDB_HOME_DIR_NAME:pF,UPDATE_FILE_NAME:RF,LICENSE_KEY_DIR_NAME:TF,BOOT_PROPS_FILE_NAME:gF,JOB_TYPE_ENUM:XF,JOB_STATUS_ENUM:VF,SYSTEM_TABLE_NAMES:HF,SYSTEM_TABLE_HASH_ATTRIBUTES:xF,OPERATIONS_ENUM:Z,VALID_S3_FILE_TYPES:$F,S3_BUCKET_AUTH_KEYS:YF,VALID_SQL_OPS_ENUM:KF,GEO_CONVERSION_ENUM:QF,HDB_SETTINGS_NAMES:XA,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:zF,SERVICE_ACTIONS_ENUM:WF,CLUSTER_MESSAGE_TYPE_ENUM:ZF,CLUSTER_CONNECTION_DIRECTION_ENUM:eq,CLUSTER_EVENTS_DEFS_ENUM:nq,PERIOD_REGEX:nF,DOUBLE_PERIOD_REGEX:sF,UNICODE_PERIOD:iF,FORWARD_SLASH_REGEX:oF,UNICODE_FORWARD_SLASH:aF,ESCAPED_FORWARD_SLASH_REGEX:cF,ESCAPED_PERIOD_REGEX:uF,ESCAPED_DOUBLE_PERIOD_REGEX:lF,REG_KEY_FILE_NAME:qF,RESTART_TIMEOUT_MS:bF,HDB_FILE_PERMISSIONS:yF,DATABASES_DIR_NAME:wF,LEGACY_DATABASES_DIR_NAME:CF,TRANSACTIONS_DIR_NAME:DF,LIMIT_COUNT_NAME:LF,ID_ATTRIBUTE_STRING:MF,INSERT_MODULE_ENUM:vF,UPGRADE_JSON_FIELD_NAMES_ENUM:BF,RESTART_CODE:AF,RESTART_CODE_NUM:OF,CLUSTER_OPERATIONS:tc,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:FF,HDB_INTERNAL_SC_CHANNEL_PREFIX:yr,INTERNAL_SC_CHANNELS:GF,CLUSTERING_MESSAGE_TYPES:_q,HDB_FILE_SUFFIX:SF,BLOB_FOLDER_NAME:NF,HDB_TRASH_DIR:IF,ORIGINATOR_SET_VALUE:dq,LICENSE_VALUES:tq,RAM_ALLOCATION_ENUM:rq,TIME_STAMP_NAMES_ENUM:eO,TIME_STAMP_NAMES:cq,PERMS_UPDATE_RELEASE_TIMESTAMP:uq,SEARCH_NOT_FOUND_MESSAGE:jG,SEARCH_ATTRIBUTE_NOT_FOUND:XG,LICENSE_ROLE_DENIED_RESPONSE:ZG,LICENSE_MAX_CONNS_REACHED:eF,BASIC_LICENSE_MAX_NON_CU_ROLES:WA,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:QG,VALUE_SEARCH_COMPARATORS:tO,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:lq,LICENSE_FILE_NAME:kF,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:sq,NEW_LINE:fq,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:rF,MOMENT_DAYS_TAG:_F,API_TURNOVER_SEC:dF,LOOPBACK:tF,CODE_EXTENSION:xl,WILDCARD_SEARCH_VALUE:fF,NODE_ERROR_CODES:iq,JAVASCRIPT_EXTENSION:VA,PERMS_CRUD_ENUM:Eq,UNAUTHORIZED_PERMISSION_NAME:mq,SEARCH_WILDCARDS:hq,FUNC_VAL:pq,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:Sq,JWT_ENUM:Tq,CLUSTERING_FLAG:aq,ITC_EVENT_TYPES:gq,CUSTOM_FUNCTION_PROC_NAME:YA,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Hl,SERVICES:Rq,THREAD_TYPES:Aq,MEM_SETTING_KEY:EF,HDB_RESTART_SCRIPT:UG,PROCESS_DESCRIPTORS:GG,SERVICE_SERVERS:$G,SERVICE_SERVERS_CWD:dh,PROCESS_DESCRIPTORS_VALIDATE:kG,LAUNCH_SERVICE_SCRIPTS:YG,LOG_LEVELS:qG,PROCESS_NAME_ENV_PROP:UF,LOG_NAMES:FG,PM2_PROCESS_STATUSES:Oq,CONFIG_PARAM_MAP:ZA,CONFIG_PARAMS:w,HDB_CONFIG_FILE:DG,HDB_DEFAULT_CONFIG_FILE:LG,ROLE_TYPES_ENUM:KG,BOOT_PROP_PARAMS:JA,INSTALL_PROMPTS:PF,HDB_ROOT_DIR_NAME:MG,CLUSTERING_PROCESSES:VG,FOREGROUND_PID_FILE:BG,PACKAGE_ROOT:Qs,PRE_4_0_0_VERSION:bq,DATABASES_PARAM_CONFIG:jF,METADATA_PROPERTY:oq,AUTH_AUDIT_STATUS:yq,AUTH_AUDIT_TYPES:Nq,HDB_PID_FILE:HG,DEFAULT_DATABASE_NAME:xG,LEGACY_CONFIG_PARAMS:JF};kA()});var Eh=g((ioe,iO)=>{"use strict";var nO=require("minimist");iO.exports=Iq;function Iq(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=sO(process.env),n=sO(nO(process.argv))):(r=process.env,n=nO(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(Iq,"assignCMDENVVariables");function sO(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(sO,"objKeysToLowerCase")});var K=g((aoe,Rh)=>{"use strict";var wi=require("fs-extra"),{workerData:wq,threadId:Cq}=require("worker_threads"),Es=require("path"),cO=require("yaml"),uO=require("properties-reader"),Rt=U(),oO=Eh(),Dq=require("os"),{PACKAGE_ROOT:mh}=U(),{_assignPackageExport:Lq}=require("../../index"),nc={};for(let e in console)nc[e]||(nc[e]=console[e]);var rr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},lO={STDOUT:"stdOut",STDERR:"stdErr"},Mq=Es.join(mh,"logs"),Uq=Es.join(mh,"config/yaml/",Rt.HDB_DEFAULT_CONFIG_FILE),Pq=1e4,ds,$n,tr,ql,kl,sc,vo,rc;rc===void 0&&_O();Rh.exports={notify:EO,fatal:hO,error:ic,warn:gh,info:Vl,debug:Th,trace:Sh,setLogLevel:qq,log_level:tr,loggerWithTag:vq,suppressLogging:Bq,initLogSettings:_O,setupConsoleLogging:dO,logCustomLevel:Gq,closeLogFile:ph,getLogFilePath:()=>sc,OUTPUTS:lO,AuthAuditLog:$q};Lq("logger",Rh.exports);function _O(e=!1){try{if(rc===void 0||e){ph();let t=Fq(),r=oO(["ROOTPATH"]);try{rc=uO(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!wi.pathExistsSync(Es.join(r.ROOTPATH,Rt.HDB_CONFIG_FILE)))throw n}({level:tr,config_log_path:kl,to_file:ds,to_stream:$n}=kq(r.ROOTPATH?Es.join(r.ROOTPATH,Rt.HDB_CONFIG_FILE):rc.get("settings_path"))),ql=Rt.LOG_NAMES.HDB,sc=Es.join(kl,ql)}}catch(t){if(rc=void 0,t.code===Rt.NODE_ERROR_CODES.ENOENT){let r=oO(Object.keys(Rt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Rt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===Rt.CONFIG_PARAMS.LOGGING_LEVEL){tr=u;continue}if(c===Rt.CONFIG_PARAMS.LOGGING_STDSTREAMS){$n=u;continue}c===Rt.CONFIG_PARAMS.LOGGING_FILE&&(ds=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=Vq();ds=ds===void 0?s:ds,ds=aO(ds),$n=$n===void 0?i:$n,$n=aO($n),tr=tr===void 0?n:tr,kl=Mq,ql=Rt.LOG_NAMES.INSTALL,sc=Es.join(kl,ql);return}throw ic("Error initializing log settings"),ic(t),t}process.env.DEV_MODE&&($n=!0),dO()}a(_O,"initLogSettings");var hh=!0;function dO(){Po("error",ic),Po("warn",gh),Po("log",Vl),Po("info",Vl),Po("debug",Th),Po("trace",Sh)}a(dO,"setupConsoleLogging");function Po(e,t){console[e]=function(...r){if(hh&&t(...r),!/PM2 log:|App \[/.test(r[0]))return nc[e](...r)}}a(Po,"logConsole");function vq(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(EO),fatal:r(hO),error:r(ic),warn:r(gh),info:r(Vl),debug:r(Th),trace:r(Sh)};function r(n){return function(...s){return n(t,...s)}}}a(vq,"loggerWithTag");function Bq(e){try{hh=!1,e()}finally{hh=!0}}a(Bq,"suppressLogging");var Hq=wq?.name?.replace(/ /g,"-")||"main";function hs(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||Hq+"/"+Cq);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(hs,"createLogRecord");function oc(e){ds&&fO(e),$n&&process.stdout.write(e)}a(oc,"logStdOut");function $l(e){ds&&fO(e),$n&&process.stderr.write(e)}a($l,"logStdErr");function fO(e){xq(),vo?wi.appendFileSync(vo,e):nc.log(e)}a(fO,"logToFile");function ph(){try{wi.closeSync(vo)}catch{}vo=null}a(ph,"closeLogFile");function xq(){if(!vo){try{if(!sc)debugger;vo=wi.openSync(sc,"a")}catch(e){nc.error(e)}setTimeout(()=>{ph()},Pq).unref()}}a(xq,"openLogFile");function Vl(...e){rr[tr]<=rr.info&&oc(hs("info",e))}a(Vl,"info");function Sh(...e){rr[tr]<=rr.trace&&oc(hs("trace",e))}a(Sh,"trace");function ic(...e){rr[tr]<=rr.error&&$l(hs("error",e))}a(ic,"error");function Th(...e){rr[tr]<=rr.debug&&oc(hs("debug",e))}a(Th,"debug");function EO(...e){rr[tr]<=rr.notify&&oc(hs("notify",e))}a(EO,"notify");function hO(...e){rr[tr]<=rr.fatal&&$l(hs("fatal",e))}a(hO,"fatal");function gh(...e){rr[tr]<=rr.warn&&$l(hs("warn",e))}a(gh,"warn");function Gq(e,t,...r){t===lO.STDERR?$l(hs(e,r)):oc(hs(e,r))}a(Gq,"logCustomLevel");function Fq(){let e;try{e=Dq.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Es.join(e,Rt.HDB_HOME_DIR_NAME,Rt.BOOT_PROPS_FILE_NAME);return wi.existsSync(t)||(t=Es.join(mh,"utility/hdb_boot_properties.file")),t}a(Fq,"getPropsFilePath");function qq(e){tr=e}a(qq,"setLogLevel");function aO(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(aO,"autoCastBoolean");function kq(e){try{if(e.includes("config/settings.js")){let o=uO(e);return{level:o.get(Rt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Es.dirname(o.get(Rt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Rt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Rt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=cO.parseDocument(wi.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===Rt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(kq,"getLogConfig");function Vq(){try{let e=cO.parseDocument(wi.readFileSync(Uq,"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(Vq,"getDefaultConfig");function $q(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($q,"AuthAuditLog")});var pO=g((uoe,mO)=>{"use strict";var Yq=require("util"),Kq=require("path"),Wq=require("child_process"),Qq=Yq.promisify(Wq.execFile),zq=1e3*1e3*10;mO.exports={findPs:Jq};async function Jq(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await Qq("ps",["wwxo",`pid,${r}`],{maxBuffer:zq});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:Kq.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(Jq,"findPs")});var _t=g((_oe,TO)=>{"use strict";var jq="__dbis__",Xq="__txns__",Zq="__environment_name__",ek="__dbi_defintion__",tk={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"},rk=["__createdtime__","__updatedtime__"],nk="\uFFFF",SO={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},sk=Object.values(SO);TO.exports={AUDIT_STORE_NAME:Xq,INTERNAL_DBIS_NAME:jq,DBI_DEFINITION_NAME:ek,SEARCH_TYPES:tk,TIMESTAMP_NAMES:rk,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Zq,TRANSACTIONS_DBI_NAMES_ENUM:SO,TRANSACTIONS_DBIS:sk,OVERFLOW_MARKER:nk}});var Nr=g((doe,wO)=>{"use strict";var gO=U(),RO=_t(),AO={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},OO=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),bO={500:OO("There was an error processing your request."),400:"Invalid request"},ik=bO[AO.INTERNAL_SERVER_ERROR],ok={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.`},ak={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},ck={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"},uk={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"},lk={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${gO.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 ${gO.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"},yO={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"},_k={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."},dk={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`},fk={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"},Ek={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},hk={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`},NO={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.`},IO={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}`},mk={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."},pk={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},Sk={...yO,...ck,...ok,..._k,...dk,...fk,...Ek,...hk,...lk,...NO,...IO,...mk,...pk,...ak};wO.exports={CHECK_LOGS_WRAPPER:OO,HDB_ERROR_MSGS:Sk,DEFAULT_ERROR_MSGS:bO,DEFAULT_ERROR_RESP:ik,HTTP_STATUS_CODES:AO,LMDB_ERRORS_ENUM:uk,AUTHENTICATION_ERROR_MSGS:yO,VALIDATION_ERROR_MSGS:NO,ITC_ERRORS:IO}});var ne=g((Eoe,LO)=>{"use strict";var Bo=Nr(),Tk=K(),gk=U(),Yl=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,CO),this.statusCode=n||Bo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Bo.DEFAULT_ERROR_MSGS[n]?Bo.DEFAULT_ERROR_MSGS[n]:Bo.DEFAULT_ERROR_MSGS[Bo.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&&Tk[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}},Oh=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function CO(e,t,r,n=gk.LOG_LEVELS.ERROR,s=null,i=!1){if(DO(e))return e;let o=new Yl(e,t,r,n,s);return i&&delete o.stack,o}a(CO,"handleHDBError");function DO(e){return e.__proto__.constructor.name===Yl.name}a(DO,"isHDBError");LO.exports={isHDBError:DO,handleHDBError:CO,ClientError:Ah,ServerError:Oh,hdb_errors:Bo}});var UO=g((moe,MO)=>{"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
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
- `)},YG="certificate.pem",KG="privateKey.pem",WG="ca.pem";cO.exports={CERTIFICATE_VALUES:$G,CERTIFICATE_PEM_NAME:YG,PRIVATEKEY_PEM_NAME:KG,CA_PEM_NAME:WG}});var et=T((Hie,lO)=>{"use strict";var rr=require("validate.js");rr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||rr.validators.type.checks[t](e)?null:` must be a '${t}' value`};rr.validators.type.checks={Object:function(e){return rr.isObject(e)&&!rr.isArray(e)},Array:rr.isArray,Integer:rr.isInteger,Number:rr.isNumber,String:rr.isString,Date:rr.isDate,Boolean:function(e){return typeof e=="boolean"}};rr.validators.hasValidFileExt=function(e,t){return rr.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};lO.exports={validateObject:QG,validateObjectAsync:zG,validateBySchema:JG};function QG(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=rr(e,t,{format:"flat"});return r?new Error(r):null}a(QG,"validateObject");async function zG(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await rr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(zG,"validateObjectAsync");function JG(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(JG,"validateBySchema")});var fh=T((Fie,hO)=>{"use strict";var EO=require("fs-extra"),ce=require("joi"),XG=require("os"),{boolean:Be,string:Zr,number:Pt,array:dh}=ce.types(),{totalmem:_O}=require("os"),Ii=require("path"),jG=V(),Vl=J(),qie=uO(),dO=M(),ZG=et(),fO="log",ek="components",tk="Invalid logging.rotation.maxSize unit. Available units are G, M or K",rk="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",nk="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",sk="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",ik="rootPath config parameter is undefined",ok="clustering.enabled config parameter is undefined",wi=Pt.min(0).required(),$l=dh.items({host:Zr.required(),port:wi}).empty(null),Vn;hO.exports={configValidator:ak,routesValidator:fk,route_constraints:$l};function ak(e){if(Vn=e.rootPath,Vl.isEmpty(Vn))throw ik;let t=Be.required(),r=Pt.min(0).max(1e3).empty(null).default(dk),n=Zr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(sc),s=Zr.optional().empty(null),i=Zr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ce.string().empty(null).default(sc),c=ce.custom(uk).empty(null).default(sc),u=e.clustering?.enabled;if(Vl.isEmpty(u))throw ok;let _;return u===!0?_=ce.object({enabled:t,hubServer:ce.object({cluster:ce.object({name:ce.required().empty(null),network:ce.object({port:wi,routes:$l}).required()}).required(),leafNodes:ce.object({network:ce.object({port:wi}).required()}).required(),network:ce.object({port:wi}).required()}).required(),leafServer:ce.object({network:ce.object({port:wi,routes:$l}).required(),streams:ce.object({maxAge:Pt.min(120).allow(null).optional(),maxBytes:Pt.min(1).allow(null).optional(),maxMsgs:Pt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ce.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Be.optional(),databaseLevel:Be.optional(),tls:ce.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Be.required(),verify:Be.optional()}),user:Zr.optional().empty(null)}).required():_=ce.object({enabled:t,tls:ce.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Be.required()})}).required(),ce.object({authentication:ce.object({authorizeLocal:Be,cacheTTL:Pt.required(),enableSessions:Be}),analytics:ce.object({aggregatePeriod:Pt}),componentsRoot:n.optional(),clustering:_,localStudio:ce.object({enabled:t}).required(),logging:ce.object({auditAuthEvents:ce.object({logFailed:Be,logSuccessful:Be}),file:Be.required(),level:ce.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ce.object({enabled:Be.optional(),compress:Be.optional(),interval:Zr.custom(_k).optional().empty(null),maxSize:Zr.custom(lk).optional().empty(null),path:Zr.optional().empty(null).default(sc)}).required(),root:n,stdStreams:Be.required(),auditLog:Be.required()}).required(),operationsApi:ce.object({network:ce.object({cors:Be.optional(),corsAccessList:dh.optional(),headersTimeout:Pt.min(1).optional(),keepAliveTimeout:Pt.min(1).optional(),port:Pt.optional().empty(null),domainSocket:ce.optional().empty("hdb/operations-server").default(sc),securePort:Pt.optional().empty(null),timeout:Pt.min(1).optional()}).optional(),tls:ce.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:Zr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ce.object({network:ce.object({port:wi,securePort:wi,mtls:ce.alternatives([Be.optional(),ce.object({user:Zr.optional(),certificateAuthority:s})])}).required(),webSocket:Be.optional(),requireAuthentication:Be.optional()}),http:ce.object({compressionThreshold:Pt.optional(),cors:Be.optional(),corsAccessList:dh.optional(),headersTimeout:Pt.min(1).optional(),port:Pt.min(0).optional().empty(null),securePort:Pt.min(0).optional().empty(null)}).required(),threads:r.optional(),maxHeapMemory:Pt.min(0).optional(),storage:ce.object({writeAsync:Be.required(),overlappingSync:Be.optional(),caching:Be.optional(),compression:Be.optional(),noReadAhead:Be.optional(),path:c,prefetchWrites:Be.optional()}).required(),ignoreScripts:Be.optional(),tls:ce.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:Zr.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(ak,"configValidator");function ck(e){return EO.existsSync(e)?null:`Specified path ${e} does not exist.`}a(ck,"doesPathExist");function uk(e,t){ce.assert(e,Zr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=ck(e);if(r)return t.message(r)}a(uk,"validatePath");function lk(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(tk);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(nk):e}a(lk,"validateRotationMaxSize");function _k(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(rk);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(sk):e}a(_k,"validateRotationInterval");function dk(e,t){let r=t.state.path.join("."),n=XG.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||_O();return i=Math.round(Math.min(i,_O())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),jG.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(dk,"setDefaultThreads");function sc(e,t){let r=t.state.path.join(".");if(!Vl.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Vl.isEmpty(Vn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Ii.join(Vn,ek);case"logging.root":return Ii.join(Vn,fO);case"clustering.leafServer.streams.path":return Ii.join(Vn,"clustering","leaf");case"storage.path":let n=Ii.join(Vn,dO.LEGACY_DATABASES_DIR_NAME);return EO.existsSync(n)?n:Ii.join(Vn,dO.DATABASES_DIR_NAME);case"logging.rotation.path":return Ii.join(Vn,fO);case"operationsApi.network.domainSocket":return r==null?null:Ii.join(Vn,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(sc,"setDefaultRoot");function fk(e){let t=ce.object({routes:$l});return ZG.validateBySchema({routes:e},t)}a(fk,"routesValidator")});var Ci={};Ve(Ci,{server:()=>lt});var mO,lt,nr=Ae(()=>{mO=require("../../index"),lt={};(0,mO._assignPackageExport)("server",lt)});var Lr=T((Vie,NO)=>{"use strict";var Cr=M(),vt=J(),yt=V(),{configValidator:Ek,routesValidator:pO}=fh(),sr=require("fs-extra"),hk=require("yaml"),On=require("path"),mk=require("is-number"),TO=require("properties-reader"),pk=require("lodash"),{handleHDBError:Sk}=Z(),{HTTP_STATUS_CODES:Tk,HDB_ERROR_MSGS:Yl}=Ir(),kie=require("minimist"),{server:gk}=(nr(),ee(Ci)),{DATABASES_PARAM_CONFIG:ic,CONFIG_PARAMS:wr,CONFIG_PARAM_MAP:bn}=Cr,Rk="Unable to get config value because config is uninitialized",Ak="Config successfully initialized",Ok="Error backing up config file",bk="Empty parameter sent to getConfigValue",gO=On.join(Cr.PACKAGE_ROOT,"config","yaml",Cr.HDB_DEFAULT_CONFIG_FILE),Nk="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",SO={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"},Kl,It,Wl;NO.exports={createConfigFile:yk,getDefaultConfig:Ik,getConfigValue:AO,initConfig:hh,flattenConfig:Ho,updateConfigValue:OO,updateConfigObject:Ck,getConfiguration:Mk,setConfiguration:Uk,readConfigFile:ph,getClusteringRoutes:Pk,initOldConfig:bO,getConfigFromFile:vk,getConfigFilePath:Li,addConfig:Bk,deleteConfigFromFile:Hk,getConfigObj:xk};function yk(e){let t=Qs(gO);Kl=Ho(t.toJSON());let r;for(let o in e){let c=bn[o.toLowerCase()];if(c===wr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=Eh(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){yt.error(l)}}}r&&RO(t,r),mh(t);let n=t.toJSON();It=Ho(n);let s=t.getIn(["rootPath"]),i=On.join(s,Cr.HDB_CONFIG_FILE);sr.createFileSync(i),sr.writeFileSync(i,String(t)),yt.trace(`Config file written to ${i}`)}a(yk,"createConfigFile");function RO(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!vt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(ic.TABLES))for(let i in n[s][ic.TABLES])for(let o in n[s][ic.TABLES][i]){let c=n[s][ic.TABLES][i][o],u=[wr.DATABASES,s,ic.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=[wr.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){yt.error("Error parsing schemas CLI/env config arguments",n)}}a(RO,"setSchemasConfig");function Ik(e){if(Kl===void 0){let r=Qs(gO);Kl=Ho(r.toJSON())}let t=bn[e.toLowerCase()];if(t!==void 0)return Kl[t.toLowerCase()]}a(Ik,"getDefaultConfig");function AO(e){if(e==null){yt.error(bk);return}if(It===void 0){yt.trace(Rk);return}let t=bn[e.toLowerCase()];if(t!==void 0)return It[t.toLowerCase()]}a(AO,"getConfigValue");function Li(e=vt.getPropsFilePath()){let t=vt.getEnvCliRootPath();return t?On.join(t,Cr.HDB_CONFIG_FILE):TO(e).get(Cr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Li,"getConfigFilePath");function hh(e=!1){if(It===void 0||e){let t;if(!vt.noBootFile()){t=vt.getPropsFilePath();try{sr.accessSync(t,sr.constants.F_OK|sr.constants.R_OK)}catch(i){throw yt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Li(t),n;if(r.includes("config/settings.js"))try{bO(r);return}catch(i){if(i.code!==Cr.NODE_ERROR_CODES.ENOENT)throw i}try{n=Qs(r)}catch(i){if(i.code===Cr.NODE_ERROR_CODES.ENOENT){yt.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 yt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}wk(n,r),mh(n);let s=n.toJSON();if(gk.config=s,It=Ho(s),It.logging_rotation_rotate)for(let i in SO)It[i]&&yt.error(`Config ${SO[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);yt.trace(Ak)}}a(hh,"initConfig");function wk(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],On.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],On.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],On.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(yt.trace("Updating config file with missing config params"),sr.writeFileSync(t,String(e)))}a(wk,"checkForUpdatedConfig");function mh(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=Ek(t);if(r.error)throw Yl.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(mh,"validateConfig");function Ck(e,t){It===void 0&&(It={});let r=bn[e.toLowerCase()];if(r===void 0){yt.trace(`Unable to update config object because config param '${e}' does not exist`);return}It[r.toLowerCase()]=t}a(Ck,"updateConfigObject");function OO(e,t,r=void 0,n=!1,s=!1,i=!1){It===void 0&&hh();let o=AO(bn.hdb_root),c=On.join(o,Cr.HDB_CONFIG_FILE),u=Qs(c),_;if(r===void 0&&e.toLowerCase()===wr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=bn[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Eh(f,t);u.setIn([...E],h)}else for(let f in r){let E=bn[f.toLowerCase()];if(E===wr.HTTP_SECUREPORT&&r[f]===It[wr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===wr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===It[wr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===wr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Cr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=Eh(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(A){yt.error(A)}}}_&&RO(u,_),mh(u);let l=u.getIn(["rootPath"]),d=On.join(l,Cr.HDB_CONFIG_FILE);n===!0&&Lk(c,l),sr.writeFileSync(d,String(u)),s&&(It=Ho(u.toJSON())),yt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(OO,"updateConfigValue");function Lk(e,t){try{let r=On.join(t,"backup",`${Cr.HDB_CONFIG_FILE}.bak`);sr.copySync(e,r),yt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){yt.error(Ok),yt.error(r)}}a(Lk,"backupConfigFile");var Dk=["databases"];function Ho(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)),Wl=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])&&!Dk.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;!wr[u.toUpperCase()]&&bn[u]&&(s[bn[u].toLowerCase()]=o[c]),s[u]=o[c]}}else s[i.toLowerCase()]=n[i];return s}a(r,"squashObj")}a(Ho,"flattenConfig");function Eh(e,t){if(e===wr.CLUSTERING_NODENAME||e===wr.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(mk(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||vt.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 vt.autoCast(t)}a(Eh,"castConfigValue");function Mk(){let e=vt.getPropsFilePath(),t=Li(e);return Qs(t).toJSON()}a(Mk,"getConfiguration");async function Uk(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return OO(void 0,void 0,s,!0),Nk}catch(i){throw typeof i=="string"||i instanceof String?Sk(i,i,Tk.BAD_REQUEST,void 0,void 0,!0):i}}a(Uk,"setConfiguration");function ph(){let e=vt.getPropsFilePath();try{sr.accessSync(e,sr.constants.F_OK|sr.constants.R_OK)}catch(n){if(!vt.noBootFile())throw yt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Li(e);return Qs(t).toJSON()}a(ph,"readConfigFile");function Qs(e){return hk.parseDocument(sr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Qs,"parseYamlDoc");function Pk(){let e=ph(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=vt.isEmptyOrZeroLength(t)?[]:t;let r=pO(t);if(r)throw Yl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=vt.isEmptyOrZeroLength(n)?[]:n;let s=pO(n);if(s)throw Yl.CONFIG_VALIDATION(s.message);if(!vt.isEmptyOrZeroLength(n)&&!vt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!vt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Yl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(Pk,"getClusteringRoutes");function bO(e){let t=TO(e);It={};for(let r in bn){let n=t.get(r.toUpperCase());if(vt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=bn[r].toLowerCase();s===wr.LOGGING_ROOT?It[s]=On.dirname(n):It[s]=n}return It}a(bO,"initOldConfig");function vk(e){let t=ph();return pk.get(t,e.replaceAll("_","."))}a(vk,"getConfigFromFile");async function Bk(e,t){let r=Qs(Li());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await sr.writeFile(Li(),String(r))}a(Bk,"addConfig");function Hk(e){let t=Li(vt.getPropsFilePath()),r=Qs(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=On.join(n,Cr.HDB_CONFIG_FILE);sr.writeFileSync(s,String(r))}a(Hk,"deleteConfigFromFile");function xk(){return Wl||(hh(),Wl)}a(xk,"getConfigObj")});var j=T((Yie,CO)=>{"use strict";var Sh=require("fs-extra"),Di=require("path"),yO=require("os"),qk=require("properties-reader"),ac=V(),oc=J(),ae=M(),Ql=Lr(),Fk="Error initializing environment manager",zl="BOOT_PROPS_FILE_PATH",IO=!1,Gk={[ae.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ps={};CO.exports={BOOT_PROPS_FILE_PATH:zl,getHdbBasePath:kk,setHdbBasePath:Vk,get:wO,initSync:Yk,setProperty:Ce,initTestEnvironment:Kk};function kk(){return ps[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(kk,"getHdbBasePath");function Vk(e){ps[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Vk,"setHdbBasePath");function wO(e){let t=Ql.getConfigValue(e);return t===void 0?ps[e]:t}a(wO,"get");function Ce(e,t){Gk[e]&&(ps[e]=t),Ql.updateConfigObject(e,t)}a(Ce,"setProperty");function $k(){let e;try{e=oc.getPropsFilePath(),Sh.accessSync(e,Sh.constants.F_OK|Sh.constants.R_OK),IO=!0;let t=qk(e);return ps[ae.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ae.HDB_SETTINGS_NAMES.INSTALL_USER),ps[ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ps[zl]=e,!0}catch{return ac.trace(`Environment manager found no properties file at ${e}`),!1}}a($k,"doesPropFileExist");function Yk(e=!1){try{(IO||$k()||oc.noBootFile())&&(Ql.initConfig(e),ps[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Ql.getConfigValue(ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){ac.error(Fk),ac.error(t),console.error(t),process.exit(1)}}a(Yk,"initSync");function Kk(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");ps[zl]=Di.join(u,"hdb_boot_properties.file"),Ce(ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Di.join(u,"settings.test")),Ce(ae.HDB_SETTINGS_NAMES.INSTALL_USER,yO.userInfo()?yO.userInfo().username:void 0),Ce(ae.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ce(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Di.join(u,"envDir","log")),Ce(ae.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ce(ae.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ce(ae.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ce(ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Di.join(u,"envDir")),Ce(ae.CONFIG_PARAMS.STORAGE_PATH,Di.join(u,"envDir")),s&&(Ce(ae.CONFIG_PARAMS.HTTP_SECUREPORT,wO(ae.CONFIG_PARAMS.HTTP_PORT)),Ce(ae.CONFIG_PARAMS.HTTP_PORT,null)),Ce(ae.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ce(ae.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ce(ae.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,oc.isEmpty(i)?!1:i),Ce(ae.CONFIG_PARAMS.HTTP_CORS,oc.isEmpty(i)?!1:i),Ce(ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ce(ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ce(ae.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ce(ae.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ce(ae.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Di.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ce(ae.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,oc.isEmpty(c)?!1:c),o&&(Ce("CORS_ACCESSLIST",o),Ce(ae.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Ce(ae.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ce(ae.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ce(ae.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ce(ae.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ce(ae.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ce(ae.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${zl}. Please check your boot props and settings files`;ac.fatal(r),ac.error(t)}}a(Kk,"initTestEnvironment")});var We=T((Wie,BO)=>{"use strict";var dc=M(),Wk=J(),ir=j(),fc=require("path"),Qk=require("minimist"),LO=require("fs-extra"),DO=require("lodash");ir.initSync();var{CONFIG_PARAMS:zs,DATABASES_PARAM_CONFIG:cc,SYSTEM_SCHEMA_NAME:Jl}=dc,uc,lc,_c;function MO(){if(uc!==void 0)return uc;if(ir.getHdbBasePath()!==void 0)return uc=ir.get(zs.STORAGE_PATH)||fc.join(ir.getHdbBasePath(),dc.DATABASES_DIR_NAME),uc}a(MO,"getBaseSchemaPath");function UO(){if(lc!==void 0)return lc;if(ir.getHdbBasePath()!==void 0)return lc=vO(Jl),lc}a(UO,"getSystemSchemaPath");function PO(){if(_c!==void 0)return _c;if(ir.getHdbBasePath()!==void 0)return _c=ir.get(dc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||fc.join(ir.getHdbBasePath(),dc.TRANSACTIONS_DIR_NAME),_c}a(PO,"getTransactionAuditStoreBasePath");function zk(e,t){let r=ir.get(zs.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||fc.join(PO(),e.toString())}a(zk,"getTransactionAuditStorePath");function vO(e,t){e=e.toString(),t=t&&t.toString();let r=ir.get(dc.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||fc.join(MO(),e)}a(vO,"getSchemaPath");function Jk(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,Qk(process.argv));let n=r[zs.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!Wk.isObject(n))throw o;i=n}for(let o of i){let c=o[Jl];if(!c)continue;let u=ir.get(zs.DATABASES);u=u??{};let _=c?.tables?.[t]?.[cc.PATH];if(_)return DO.set(u,[Jl,cc.TABLES,t,cc.PATH],_),ir.setProperty(zs.DATABASES,u),_;let l=c?.[cc.PATH];if(l)return DO.set(u,[Jl,cc.PATH],l),ir.setProperty(zs.DATABASES,u),l}}let s=r[zs.STORAGE_PATH.toUpperCase()];if(s){if(!LO.pathExistsSync(s))throw new Error(s+" does not exist");let i=fc.join(s,e);return LO.mkdirsSync(i),ir.setProperty(zs.STORAGE_PATH,s),i}return UO()}a(Jk,"initSystemSchemaPaths");function Xk(){uc=void 0,lc=void 0,_c=void 0}a(Xk,"resetPaths");BO.exports={getBaseSchemaPath:MO,getSystemSchemaPath:UO,getTransactionAuditStorePath:zk,getTransactionAuditStoreBasePath:PO,getSchemaPath:vO,initSystemSchemaPaths:Jk,resetPaths:Xk}});var Dr=T((Xie,GO)=>{"use strict";var jk=Ir().LMDB_ERRORS_ENUM,zie=require("lmdb"),Zk=ht(),Jie=require("buffer").Buffer,{OVERFLOW_MARKER:HO,MAX_SEARCH_KEY_LENGTH:Xl}=Zk,xO=["number","string","symbol","boolean","bigint"];function eV(e){if(e=e?.primaryStore||e,!e)throw new Error(jk.ENV_REQUIRED)}a(eV,"validateEnv");function tV(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(tV,"stringifyData");function rV(e){return e instanceof Date?e.valueOf():e}a(rV,"convertKeyValueToWrite");function nV(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(xO.includes(typeof e))return e.length>Xl?[e.slice(0,Xl)+HO]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(xO.includes(typeof i))i.length>Xl?r.push(i.slice(0,Xl)+HO):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(nV,"getIndexedValues");var jl=0,qO=0;function FO(){qO=Date.now()-performance.now()}a(FO,"adjustStartTime");FO();var sV=6e4;setInterval(FO,sV).unref();function iV(){let e=performance.now()+qO;return e>jl?(jl=e,e):(jl+=488e-6,jl)}a(iV,"getNextMonotonicTime");GO.exports={validateEnv:eV,stringifyData:tV,convertKeyValueToWrite:rV,getNextMonotonicTime:iV,getIndexedValues:nV}});var kO,Nn,Th,Ec=Ae(()=>{kO=require("events"),Nn=class extends kO.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new Th;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)}},Th=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 Rh={};Ve(Rh,{loadGQLSchema:()=>cV,start:()=>gh,startOnMainThread:()=>aV});function gh({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 K=function(q){if(q.kind==="NonNullType"){let Y=K(q.type);return Y.nullable=!1,Y}if(q.kind==="ListType")return{type:"array",elements:K(q.type)};let Q={type:q.name?.value};return Object.defineProperty(Q,"location",{value:q.loc.startToken}),Q};a(K,"getProperty");let A=S.name.value,I=[],w={table:null,database:null,properties:I};f.set(A,w);for(let q of S.directives){if(q.name.value==="table"){for(let P of q.arguments)w[P.name.value]=P.value.value;w.schema&&(w.database=w.schema),w.table||(w.table=A),w.audit&&(w.audit=w.audit!=="false"),w.attributes=w.properties,E.push(w)}if(q.name.value==="sealed"&&(w.sealed=!0),q.name.value==="export"){w.export=!0;for(let P of q.arguments)P.name.value==="name"&&(w.export={name:P.value.value})}}let B=!1;for(let q of S.fields){let P=K(q.type);P.name=q.name.value,I.push(P);for(let Q of q.directives)if(Q.name.value==="primaryKey")B?console.warn("Can not define two attributes as a primary key"):(P.isPrimaryKey=!0,B=!0);else if(Q.name.value==="indexed")P.indexed=!0;else if(Q.name.value==="relationship"){let Y={};for(let z of Q.arguments)Y[z.name.value]=z.value.value;P.relationship=Y}else if(Q.name.value==="createdTime")P.assignCreatedTime=!0;else if(Q.name.value==="updatedTime")P.assignUpdatedTime=!0;else if(Q.name.value==="expiresAt")P.expiresAt=!0;else if(Q.name.value==="allow"){let Y=P.authorizedRoles=[];for(let z of Q.arguments)z.name.value==="role"&&Y.push(z.value.value)}}w.type=A,A==="Query"&&(h=w)}function p(S){let A=f.get(S.type);A?(Object.defineProperty(S,"properties",{value:A.properties}),Object.defineProperty(S,"definition",{value:A})):S.type==="array"?p(S.elements):oV.includes(S.type)||(0,VO.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 A of S.properties)p(A);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Zl.dirname)(n),S.tableClass):i.set((0,Zl.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass));if(h)for(let S of h.properties){let A=f.get(S.type);if(!A)throw new Error(`${S.type} was not found as a Query export`);i.set((0,Zl.dirname)(n)+"/"+S.name,A.tableClass)}}}var Zl,VO,oV,aV,cV,$O=Ae(()=>{Zl=require("path");ge();VO=v(tt()),oV=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(gh,"start");aV=gh,cV=gh({ensureTable:_t}).handleFile});async function e_(e){return uV?(hc||(hc=lV(dV)),(await(await hc).import(e)).namespace):import(e)}async function lV(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),hc=new Compartment({console,Math,Date,fetch:_V,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,KO.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:qt,tables:Mr,databases:rt})}};let n=await(0,YO.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),hc}function _V(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 dV(){return{Resource:qt,tables:Mr}}var YO,KO,uV,hc,Ah=Ae(()=>{yn();ge();YO=require("fs/promises"),KO=require("path"),uV=!1;a(e_,"secureImport");a(lV,"getCompartment");a(_V,"secureOnlyFetch");a(dV,"getGlobalVars")});var bh={};Ve(bh,{handleFile:()=>fV});async function fV(e,t,r,n){let s=new Map,i=(0,WO.pathToFileURL)(r).toString(),o=await e_(i);u(o.default)&&n.set((0,Oh.dirname)(t),o.default),c(o,(0,Oh.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 WO,Oh,QO=Ae(()=>{WO=require("url");Ah();Oh=require("path");a(fV,"handleFile")});var yh={};Ve(yh,{start:()=>EV});function EV({resources:e}){e.set("login",Nh),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Nh,zO=Ae(()=>{yn();a(EV,"start");Nh=class extends qt{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 rb={};Ve(rb,{parse:()=>wh,streamAsJSON:()=>mc,stringify:()=>Mi});function mc(e){return new Ih({value:e})}function JO(e){return console.error(e),JSON.stringify(e.toString())}function XO(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Mi(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===eb)return tb(e);if(t.resolution)return t.resolution.then(()=>Mi(e));throw t}}function tb(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+=tb(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Mi(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function wh(e){return pV.test(e)?hV.parse(e):JSON.parse(e)}var jO,ZO,hV,mV,eb,Ih,pV,Ch=Ae(()=>{jO=require("stream"),ZO=v(require("json-bigint-fixes")),hV=(0,ZO.default)({useNativeBigInt:!0}),mV=1e4,eb={};BigInt.prototype.toJSON=function(){throw eb};a(mc,"streamAsJSON");Ih=class extends jO.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),JO)}catch(s){yield JO(s)}else yield Mi(t)}else yield Mi(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);XO(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>mV?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 XO(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(JO,"handleError");a(XO,"when");a(Mi,"stringify");a(tb,"jsStringify");pV=/-?\d{16,}/;a(wh,"parse")});var hb=T((foe,Eb)=>{"use strict";var Lh=require("recursive-iterator"),SV=require("alasql"),Dh=require("clone"),nb=J(),{handleHDBError:sb,hdb_errors:TV}=Z(),{HDB_ERROR_MSGS:ib,HTTP_STATUS_CODES:ob}=TV,{getDatabases:gV}=(ge(),ee(xe)),RV=["DISTINCT_ARRAY"],ab=Symbol("validateTables"),Mh=Symbol("validateTable"),doe=Symbol("getAllColumns"),cb=Symbol("validateAllColumns"),t_=Symbol("findColumn"),ub=Symbol("validateOrderBy"),pc=Symbol("validateSegment"),Uh=Symbol("validateColumn"),lb=Symbol("setColumnsForTable"),_b=Symbol("checkColumnsForAsterisk"),db=Symbol("validateGroupBy"),fb=Symbol("hasColumns"),Ph=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[ab](),this[_b](),this[cb]()}[ab](){if(this[fb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Mh](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Mh](t.table)})}}[fb](){let t=!1,r=new Lh(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Mh](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=gV();if(!r[t.databaseid])throw sb(new Error,ib.SCHEMA_NOT_FOUND(t.databaseid),ob.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw sb(new Error,ib.TABLE_NOT_FOUND(t.databaseid,t.tableid),ob.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Dh(s);i.table=Dh(t),this.attributes.push(i)})}[t_](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)}[_b](){let t=new Lh(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[lb](r.tableid)}[lb](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new SV.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[cb](){this[pc](this.statement.columns,!1),this[pc](this.statement.joins,!1),this[pc](this.statement.where,!1),this[db](this.statement.group,!1),this[pc](this.statement.order,!0)}[pc](t,r){if(!t)return;let n=new Lh(t),s=[];for(let{node:i,path:o}of n)!nb.isEmpty(i)&&!nb.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[ub](i):s.push(this[Uh](i)));return s}[db](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&RV.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Dh(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[t_](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[t_](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`}[ub](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[Uh](t)}[Uh](t){let r=this[t_](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]}};Eb.exports=Ph});var pb=T((hoe,mb)=>{"use strict";var vh=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")}};mb.exports=vh});var Tb=T((poe,Sb)=>{"use strict";var Bh=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};Sb.exports=Bh});var bb={};Ve(bb,{HAS_EXPIRATION:()=>kh,LAST_TIMESTAMP_PLACEHOLDER:()=>gc,LOCAL_TIMESTAMP:()=>AV,METADATA:()=>Sc,NO_TIMESTAMP:()=>Hh,PENDING_LOCAL_TIME:()=>Vh,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Gh,RecordEncoder:()=>Fh,TIMESTAMP_ASSIGN_LAST:()=>bV,TIMESTAMP_ASSIGN_NEW:()=>Ab,TIMESTAMP_ASSIGN_PREVIOUS:()=>Ob,TIMESTAMP_PLACEHOLDER:()=>r_,TIMESTAMP_RECORD_PREVIOUS:()=>xh,getUpdateRecord:()=>$h,handleLocalTimeForGets:()=>o_});function yV(){return Tc[0]=Tc[0]^64,OV.getFloat64(0)}function o_(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?.[Sc];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?.[Sc]>=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[Sc];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(){this.timerTracked||(this.timerTracked=!0,Ui.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Ui.length;u++){let _=Ui[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&Ui.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function $h(e,t,r){return function(n,s,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?xo=i?.localTime?xh|Ob:Hh:xo=u?i?.localTime?xh|16384:Ab|16384:Hh,l>0&&(c|=kh),s_=c,qh=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:xo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(n,s,h);if(u){let A=_?.user?.username;if(E&&(n_=e.encoder.encode(E)),f&&i?.localTime){let I=i?.localTime,w=r.get(I);if(w){let B=Bt(w).previousLocalTime;return r.put(I,i_(o,t,n,B,A,d,n_),{ifVersion:p}),S}}r.put(gc,i_(o,t,n,i?.localTime?1:0,A,d,n_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var gb,Rb,r_,gc,Gh,AV,Sc,Tc,OV,Hh,Ab,bV,Ob,xh,kh,Vh,NV,n_,xo,s_,qh,Fh,goe,Ui,Rc=Ae(()=>{gb=require("msgpackr");Pi();Rb=v(V()),r_=new Uint8Array([1,1,1,1,4,64,0,0]),gc=new Uint8Array([1,1,1,1,1,0,0,0]),Gh=new Uint8Array([1,1,1,1,3,64,0,0]),AV=Symbol("local-timestamp"),Sc=Symbol("metadata"),Tc=new Uint8Array(8),OV=new DataView(Tc.buffer,0,8),Hh=0,Ab=0,bV=1,Ob=3,xh=4,kh=16,Vh=1,xo=0,s_=-1,qh=0,Fh=class extends gb.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(xo||s_>=0){let i=0,o=xo;o&&(i+=8,xo=0);let c=s_,u=qh;c>=0&&(i+=2,s_=-1,u&&(i+=8,qh=0));let _=NV=r.call(this,n,s|2048|i);n_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(r_[4]=o,r_[5]=o>>8,_.set(r_,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(Tc,0,c),c+=8;else for(let d=0;d<8;d++)Tc[d]=t[c++];u=yV(),i=t[c]}let _;i<32&&(o=i,c+=2,o&kh&&(_=(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,[Sc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(yV,"getTimestamp");goe=Map.prototype.get;a(o_,"handleLocalTimeForGets");Ui=[];setInterval(()=>{for(let e=0;e<Ui.length;e++){let t=Ui[e].deref();!t||t.isDone||t.isCommitted?Ui.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&Rb.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($h,"getUpdateRecord")});var a_=T((Aoe,Nb)=>{"use strict";var Kh=j(),Wh=M(),{RecordEncoder:IV}=(Rc(),ee(bb));Kh.initSync();var wV=Kh.get(Wh.CONFIG_PARAMS.STORAGE_COMPRESSION),CV=Kh.get(Wh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,LV=Wh.UPDATES_PROPERTY,Yh=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=wV&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=CV&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:IV},this.alwaysLazyProperty=n=>n===LV)}};Nb.exports=Yh});var u_=T((boe,Ib)=>{"use strict";var qo=j(),Ac=M();qo.initSync();var DV=qo.get(Ac.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||qo.get(Ac.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||qo.get(Ac.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",yb=qo.get(Ac.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),MV=qo.get(Ac.CONFIG_PARAMS.STORAGE_NOREADAHEAD),c_=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=DV,this.noFSAccess=!0,yb!==void 0&&(this.overlappingSync=yb),this.noReadAhead=MV}};Ib.exports=c_;c_.MAX_DBS=1e4});var $e=T((yoe,Hb)=>{"use strict";var zh=require("lmdb"),In=require("fs-extra"),Ur=require("path"),l_=Dr(),Lb=V(),or=Ir().LMDB_ERRORS_ENUM,__=Tb(),Jh=a_(),Db=u_(),Js=ht(),wb=M(),{table:UV,resetDatabases:PV}=(ge(),ee(xe)),Cb=j(),wn=Js.INTERNAL_DBIS_NAME,Mb=Js.DBI_DEFINITION_NAME,vV="data.mdb",BV="lock.mdb",Oc=".mdb",HV="-lock",Qh=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=en(t,r),this.key_type=this.dbi[Js.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Js.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new zh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function d_(e,t){if(e===void 0)throw new Error(or.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(or.ENV_NAME_REQUIRED)}a(d_,"pathEnvNameValidation");async function Xh(e,t,r=!0){try{await In.access(e)}catch(n){throw n.code==="ENOENT"?new Error(or.INVALID_BASE_PATH):n}try{let n=Ur.join(e,t+Oc);return await In.access(n,In.constants.R_OK|In.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await In.access(Ur.join(e,t,vV),In.constants.R_OK|In.constants.F_OK),Ur.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(or.INVALID_ENVIRONMENT)}else throw new Error(or.INVALID_ENVIRONMENT);throw n}}a(Xh,"validateEnvironmentPath");function f_(e,t){if(l_.validateEnv(e),t===void 0)throw new Error(or.DBI_NAME_REQUIRED)}a(f_,"validateEnvDBIName");async function xV(e,t,r=!1,n=!1){d_(e,t);let s=Ur.basename(e);t=t.toString();let i=Cb.get(wb.CONFIG_PARAMS.DATABASES);i||Cb.setProperty(wb.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Xh(e,t,n),Ub(e,t,r)}catch(o){if(o.message===or.INVALID_ENVIRONMENT){let c=Ur.join(e,t);await In.mkdirp(n?c:e);let u=new Db(n?c:c+Oc,!1),_=zh.open(u);_.dbis=Object.create(null);let l=new Jh(!1);_.openDB(wn,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=jh(e,t,r);return _[Js.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(xV,"createEnvironment");async function qV(e,t,r,n=!0){d_(e,t),t=t.toString();let s=Ur.join(e,t);return UV({table:t,database:Ur.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(qV,"copyEnvironment");async function Ub(e,t,r=!1){d_(e,t),t=t.toString();let n=jh(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 Xh(e,t),i=Ur.join(e,t+Oc),o=s!=i,c=new Db(s,o),u=zh.open(c);u.dbis=Object.create(null);let _=vb(u);for(let l=0;l<_.length;l++)en(u,_[l]);return u[Js.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=u,u}a(Ub,"openEnvironment");async function FV(e,t,r=!1){d_(e,t),t=t.toString();let n=Ur.join(e,t+Oc),s=await Xh(e,t);if(global.lmdb_map!==void 0){let i=jh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Pb(o),delete global.lmdb_map[i]}}await In.remove(s),await In.remove(s===n?s+HV:Ur.join(Ur.dirname(s),BV))}a(FV,"deleteEnvironment");async function Pb(e){l_.validateEnv(e);let t=e[Js.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Pb,"closeEnvironment");function jh(e,t,r=!1){let s=`${Ur.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(jh,"getCachedEnvironmentName");function GV(e){l_.validateEnv(e);let t=Object.create(null),r=en(e,wn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==wn)try{t[n]=Object.assign(new __,s)}catch{Lb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(GV,"listDBIDefinitions");function vb(e){l_.validateEnv(e);let t=[],r=en(e,wn);for(let{key:n}of r.getRange({start:!1}))n!==wn&&t.push(n);return t}a(vb,"listDBIs");function kV(e,t){let n=en(e,wn).getEntry(t),s=new __;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{Lb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(kV,"getDBIDefinition");function Bb(e,t,r,n=!r){if(f_(e,t),t=t.toString(),t===wn)throw new Error(or.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return en(e,t)}catch(s){if(s.message===or.DBI_DOES_NOT_EXIST){let i=new Jh(r,n===!0),o=e.openDB(t,i),c=new __(r===!0,n);return o[Mb]=c,en(e,wn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(Bb,"createDBI");function en(e,t){if(f_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==wn?r=kV(e,t):r=new __,r===void 0)throw new Error(or.DBI_DOES_NOT_EXIST);let n;try{let s=new Jh(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(or.DBI_DOES_NOT_EXIST):s}return n[Mb]=r,e.dbis[t]=n,n}a(en,"openDBI");function VV(e,t){f_(e,t),t=t.toString();let r=en(e,t),n=r.getStats();return r[Js.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(VV,"statDBI");async function $V(e,t){try{let r=Ur.join(e,t+Oc);return(await In.stat(r)).size}catch{throw new Error(or.INVALID_ENVIRONMENT)}}a($V,"environmentDataSize");function YV(e,t){if(f_(e,t),t=t.toString(),t===wn)throw new Error(or.CANNOT_DROP_INTERNAL_DBIS_NAME);en(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],en(e,wn).removeSync(t)}a(YV,"dropDBI");function KV(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{en(e,i)}catch(o){if(o.message===or.DBI_DOES_NOT_EXIST)Bb(e,i,i!==t,i===t),n=!0;else throw o}}n&&PV()}a(KV,"initializeDBIs");Hb.exports={openDBI:en,openEnvironment:Ub,createEnvironment:xV,listDBIs:vb,listDBIDefinitions:GV,createDBI:Bb,dropDBI:YV,statDBI:VV,deleteEnvironment:FV,initializeDBIs:KV,TransactionCursor:Qh,environmentDataSize:$V,copyEnvironment:qV,closeEnvironment:Pb}});var qb=T((woe,xb)=>{"use strict";var Zh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};xb.exports=Zh});var Gb=T((Loe,Fb)=>{"use strict";var em=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}};Fb.exports=em});var Vb=T((Moe,kb)=>{"use strict";var tm=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=tm});var Fo=T((Hoe,Kb)=>{"use strict";var WV=$e(),QV=qb(),zV=Gb(),JV=Vb(),$n=Dr(),bc=Ir().LMDB_ERRORS_ENUM,XV=ht(),Ss=M(),jV=J(),ZV=require("uuid"),Poe=require("lmdb"),{handleHDBError:e$,hdb_errors:t$}=Z(),{OVERFLOW_MARKER:voe,MAX_SEARCH_KEY_LENGTH:Boe}=XV,$b=j();$b.initSync();var E_=$b.get(Ss.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),rm=Ss.TIME_STAMP_NAMES_ENUM.CREATED_TIME,vi=Ss.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function r$(e,t,r,n,s=$n.getNextMonotonicTime()){om(e,t,r,n),nm(e,t,r);let i=new QV,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u];Yb(_,!0,s);let l=n$(e,t,r,_),d=_[t];o.push(l),c.push(d)}return sm(o,c,n,i,s)}a(r$,"insertRecords");function n$(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][Ss.FUNC_VAL],n[o]=c)}let u=$n.getIndexedValues(c),_=e.dbis[o];if(u){E_&&_.prefetch(u.map(l=>({key:l,value:s})),h_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],s)}}E_&&e.dbis[t].prefetch([s],h_),e.dbis[t].put(s,n,n[vi])})}a(n$,"insertRecord");function s$(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(s$,"removeSkippedRecords");function Yb(e,t,r){let n=r>0;(n||!Number.isInteger(e[vi]))&&(e[vi]=r||(r=$n.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[rm]))&&(e[rm]=r||$n.getNextMonotonicTime()):delete e[rm]}a(Yb,"setTimestamps");function nm(e,t,r){r.indexOf(Ss.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Ss.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Ss.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Ss.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),WV.initializeDBIs(e,t,r)}a(nm,"initializeTransaction");async function i$(e,t,r,n,s=$n.getNextMonotonicTime()){om(e,t,r,n),nm(e,t,r);let i=new zV,o=[],c=[],u=[];for(let _=0;_<n.length;_++){let l=n[_],d=l[t],f;try{f=im(e,t,l,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return sm(c,u,n,i,s,o)}a(i$,"updateRecords");async function o$(e,t,r,n,s=$n.getNextMonotonicTime()){try{om(e,t,r,n)}catch(u){throw e$(u,u.message,t$.HTTP_STATUS_CODES.BAD_REQUEST)}nm(e,t,r);let i=new JV,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u],l;jV.isEmpty(_[t])?(l=ZV.v4(),_[t]=l):l=_[t];let d=im(e,t,_,l,i,!1,s);o.push(d),c.push(l)}return sm(o,c,n,i,s)}a(o$,"upsertRecords");async function sm(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||$n.getNextMonotonicTime(),s$(r,i),n}a(sm,"finalizeWrite");function im(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(Yb(r,!l,o),Number.isInteger(r[vi])&&_[vi]>r[vi])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 A=_[h];if(typeof p=="function"){let w=p([[_]]);Array.isArray(w)&&(p=w[0][Ss.FUNC_VAL],r[h]=p)}if(p===A)continue;let I=$n.getIndexedValues(A);if(I){E_&&S.prefetch(I.map(w=>({key:w,value:n})),h_);for(let w=0,B=I.length;w<B;w++)S.remove(I[w],n)}if(I=$n.getIndexedValues(p),I){E_&&S.prefetch(I.map(w=>({key:w,value:n})),h_);for(let w=0,B=I.length;w<B;w++)S.put(I[w],n)}}let E=Object.assign({},_,r);c.put(n,E,E[vi])},"do_put");return u?d=c.ifVersion(n,u.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:im(e,t,r,n,s,i,o))}a(im,"updateUpsertRecord");function a$(e,t,r){if($n.validateEnv(e),t===void 0)throw new Error(bc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(bc.WRITE_ATTRIBUTES_REQUIRED):new Error(bc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(a$,"validateBasic");function om(e,t,r,n){if(a$(e,t,r),!Array.isArray(n))throw n===void 0?new Error(bc.RECORDS_REQUIRED):new Error(bc.RECORDS_MUST_BE_ARRAY)}a(om,"validateWrite");function h_(){}a(h_,"noop");Kb.exports={insertRecords:r$,updateRecords:i$,upsertRecords:o$}});var Bi=T((qoe,c$)=>{c$.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=T((Foe,zb)=>{"use strict";var Qb=J(),Wb=M(),Go=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Yn=require("joi"),Xs={schema_format:{pattern:Go,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},u$=Yn.alternatives(Yn.string().min(1).max(Xs.schema_length.maximum).pattern(Go).messages({"string.pattern.base":"{:#label} "+Xs.schema_format.message}),Yn.number(),Yn.array()).required(),l$=Yn.alternatives(Yn.string().min(1).max(Xs.schema_length.maximum).pattern(Go).messages({"string.pattern.base":"{:#label} "+Xs.schema_format.message}),Yn.number()),_$=Yn.alternatives(Yn.string().min(1).max(Xs.schema_length.maximum).pattern(Go).messages({"string.pattern.base":"{:#label} "+Xs.schema_format.message}),Yn.number()).required();function d$(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Xs.schema_length.maximum?`'${e}' maximum of 250 characters`:Go.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(d$,"checkValidTable");function f$(e,t){return Qb.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(f$,"validateSchemaExists");function E$(e,t){let r=t.state.ancestors[0].schema;return Qb.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(E$,"validateTableExists");function h$(e,t){return e.toLowerCase()===Wb.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Wb.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(h$,"validateSchemaName");zb.exports={common_validators:Xs,schema_regex:Go,hdb_schema_table:u$,validateSchemaExists:f$,validateTableExists:E$,validateSchemaName:h$,checkValidTable:d$,hdb_database:l$,hdb_table:_$}});var m_=T((koe,Jb)=>{var{common_validators:Wn}=Kn(),yc=et(),Nc="is required",mt={database:{presence:!1,format:Wn.schema_format,length:Wn.schema_length},schema:{presence:!1,format:Wn.schema_format,length:Wn.schema_length},table:{presence:!0,format:Wn.schema_format,length:Wn.schema_length},attribute:{presence:!0,format:Wn.schema_format,length:Wn.schema_length},hash_attribute:{presence:!0,format:Wn.schema_format,length:Wn.schema_length}};function Ic(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(Ic,"makeAttributesStrings");function m$(e){return e=Ic(e),mt.table.presence=!1,mt.attribute.presence=!1,mt.hash_attribute.presence=!1,yc.validateObject(e,mt)}a(m$,"schema_object");function p$(e){return e=Ic(e),mt.table.presence={message:Nc},mt.attribute.presence=!1,mt.hash_attribute.presence=!1,yc.validateObject(e,mt)}a(p$,"table_object");function S$(e){return e=Ic(e),mt.table.presence={message:Nc},mt.attribute.presence=!1,yc.validateObject(e,mt)}a(S$,"create_table_object");function T$(e){return e=Ic(e),mt.table.presence={message:Nc},mt.attribute.presence={message:Nc},mt.hash_attribute.presence=!1,yc.validateObject(e,mt)}a(T$,"attribute_object");function g$(e){return e=Ic(e),mt.table.presence={message:Nc},mt.attribute.presence=!1,mt.hash_attribute.presence=!1,yc.validateObject(e,mt)}a(g$,"describe_table");function R$(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(R$,"validateTableResidence");Jb.exports={schema_object:m$,create_table_object:S$,table_object:p$,attribute_object:T$,describe_table:g$,validateTableResidence:R$}});var jb=T(($oe,Xb)=>{"use strict";var A$=require("uuid"),am=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||A$.v4(),this.schema_table=`${this.schema}.${this.table}`}};Xb.exports=am});var p_=T((Koe,Zb)=>{"use strict";var O$=jb(),cm=class extends O${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}};Zb.exports=cm});var tN=T((Qoe,eN)=>{"use strict";eN.exports=N$;var b$="inserted";function N$(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(N$,"returnObject")});var S_=T((Joe,oN)=>{"use strict";var y$=M(),um=$e(),I$=Fo(),{getSystemSchemaPath:w$,getSchemaPath:C$}=We(),L$=Bi(),D$=m_(),M$=p_(),U$=tN(),{handleHDBError:rN,hdb_errors:sN}=Z(),nN=J(),{HTTP_STATUS_CODES:P$}=sN,lm=L$.hdb_attribute,iN=[];for(let e=0;e<lm.attributes.length;e++)iN.push(lm.attributes[e].attribute);var v$="inserted";oN.exports=B$;async function B$(e){let t=D$.attribute_object(e);if(t)throw rN(new Error,t.message,sN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&nN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw rN(new Error,r,P$.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=nN.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 M$(e.schema,e.table,e.attribute,e.id);try{let i=await um.openEnvironment(C$(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}`);um.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await um.openEnvironment(w$(),y$.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await I$.insertRecords(o,lm.hash_attribute,iN,[s]);return U$(v$,c,{records:[s]},u)}catch(i){throw i}}a(B$,"lmdbCreateAttribute")});var dm=T((joe,cN)=>{var{hdb_table:H$,hdb_database:aN}=Kn(),x$=et(),_m=require("joi"),q$={undefined:"undefined",null:"null"},F$=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||q$[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"),G$=_m.object({database:aN,schema:aN,table:H$,records:_m.array().items(_m.object().custom(F$)).required()});cN.exports=function(e){return x$.validateBySchema(e,G$)}});var wc=T((tae,lN)=>{"use strict";var Ts=J(),uN=V(),eae=dm(),{getDatabases:k$}=(ge(),ee(xe)),{ClientError:Hi}=Z();lN.exports=V$;function V$(e){if(Ts.isEmpty(e))throw new Hi("invalid update parameters defined.");if(Ts.isEmptyOrZeroLength(e.schema))throw new Hi("invalid schema specified.");if(Ts.isEmptyOrZeroLength(e.table))throw new Hi("invalid table specified.");if(!Array.isArray(e.records))throw new Hi("records must be an array");let t=k$()[e.schema]?.[e.table];if(Ts.isEmpty(t))throw new Hi(`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&&Ts.isEmptyOrZeroLength(o[r]))throw uN.error("a valid hash attribute must be provided with update record:",o),new Hi("a valid hash attribute must be provided with update record, check log for more info");if(!Ts.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw uN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Hi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Ts.isEmpty(o[r])&&o[r]!==""&&n.has(Ts.autoCast(o[r]))&&(o.skip=!0),n.add(Ts.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(V$,"insertUpdateValidate")});var Cc=T((nae,_N)=>{"use strict";var $$=M().OPERATIONS_ENUM,fm=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=$$.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};_N.exports=fm});var Uc=T((oae,dN)=>{"use strict";var iae=Cc(),T_=M(),hm=J(),Em=V(),Y$=require("uuid"),{handleHDBError:Lc,hdb_errors:K$}=Z(),{HDB_ERROR_MSGS:Dc,HTTP_STATUS_CODES:Mc}=K$;dN.exports=W$;function W$(e,t,r){for(let s=0;s<t.length;s++)Q$(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];z$(i,r,e.operation)}}a(W$,"processRows");function Q$(e){if(Buffer.byteLength(String(e))>T_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Lc(new Error,Dc.ATTR_NAME_LENGTH_ERR(e),Mc.BAD_REQUEST,void 0,void 0,!0);if(hm.isEmptyOrZeroLength(e)||hm.isEmpty(e.trim()))throw Lc(new Error,Dc.ATTR_NAME_NULLISH_ERR,Mc.BAD_REQUEST,void 0,void 0,!0)}a(Q$,"validateAttribute");function z$(e,t,r){if(!e.hasOwnProperty(t)||hm.isEmptyOrZeroLength(e[t])){if(r===T_.OPERATIONS_ENUM.INSERT||r===T_.OPERATIONS_ENUM.UPSERT){e[t]=Y$.v4();return}throw Em.error("Update transaction aborted due to record with no hash value:",e),Lc(new Error,Dc.RECORD_MISSING_HASH_ERR,Mc.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>T_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Em.error(e),Lc(new Error,Dc.HASH_VAL_LENGTH_ERR,Mc.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Em.error(e),Lc(new Error,Dc.INVALID_FORWARD_SLASH_IN_HASH_ERR,Mc.BAD_REQUEST,void 0,void 0,!0)}a(z$,"validateHash")});var EN=T((cae,fN)=>{"use strict";var mm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};fN.exports=mm});var pN=T((lae,mN)=>{"use strict";var pm=$e(),J$=V(),hN=Ir().LMDB_ERRORS_ENUM;mN.exports=X$;async function X$(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 pm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==hN.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await pm.closeEnvironment(global.lmdb_map[n]),await pm.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==hN.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){J$.error(t)}}a(X$,"cleanLMDBMap")});var gs=T((dae,RN)=>{"use strict";var Pc=require("crypto"),j$=j(),{CONFIG_PARAMS:Z$}=M(),TN="aes-256-cbc",e1=32,t1=16,Sm=64,gN=32,r1=Sm+gN,SN=new Map;RN.exports={encrypt:n1,decrypt:s1,createNatsTableStreamName:i1};function n1(e){let t=Pc.randomBytes(e1),r=Pc.randomBytes(t1),n=Pc.createCipheriv(TN,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(n1,"encrypt");function s1(e){let t=e.substr(0,Sm),r=e.substr(Sm,gN),n=e.substr(r1,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Pc.createDecipheriv(TN,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(s1,"decrypt");function i1(e,t){let r=j$.get(Z$.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=SN.get(r);return n||(n=Pc.createHash("md5").update(r).digest("hex"),SN.set(r,n)),n}a(i1,"createNatsTableStreamName")});var xi=T((hae,ON)=>{"use strict";var Eae=tn(),g_=V(),AN=m_(),o1=gs(),R_=J(),{handleHDBError:A_,hdb_errors:a1}=Z(),{HDB_ERROR_MSGS:O_,HTTP_STATUS_CODES:Tm}=a1,c1=j();c1.initSync();var{getDatabases:gm}=(ge(),ee(xe));ON.exports={describeAll:u1,describeTable:b_,describeSchema:l1};async function u1(e){try{let t=R_.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=gm(),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 b_({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 b_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){g_.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 g_.error("Got an error in describeAll"),g_.error(t),A_(new Error,O_.DESCRIBE_ALL_ERR)}}a(u1,"describeAll");async function b_(e,t){R_.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=AN.describe_table(e);if(i)throw i;let c=gm()[r];if(!c)throw A_(new Error,O_.SCHEMA_NOT_FOUND(e.schema),Tm.NOT_FOUND);let u=c[n];if(!u)throw A_(new Error,O_.TABLE_NOT_FOUND(e.schema,e.table),Tm.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=o1.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){g_.warn(`unable to stat table dbi due to ${f}`)}return d}a(b_,"descTable");async function l1(e){R_.transformReq(e);let t=AN.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=gm()[n];if(!i)throw A_(new Error,O_.SCHEMA_NOT_FOUND(e.schema),Tm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),R_.isEmpty(u)||u.describe){let _=await b_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(l1,"describeSchema")});var Rs=T((Tae,wN)=>{var _1=Bi(),{callbackify:NN,promisify:d1}=require("util"),{getDatabases:yN}=(ge(),ee(xe));wN.exports={setSchemaDataToGlobal:bN,getTableSchema:f1,getSystemSchema:E1,setSchemaDataToGlobalAsync:d1(bN)};var IN=xi(),pae=NN(IN.describeAll),Sae=NN(IN.describeTable);function bN(e){global.hdb_schema=yN(),e&&e()}a(bN,"setSchemaDataToGlobal");function f1(e,t,r){let n=yN()[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(f1,"getTableSchema");function E1(){return _1}a(E1,"getSystemSchema")});var rn=T((Rae,MN)=>{"use strict";var y_=dm(),Ft=J(),h1=require("util"),I_=Cn(),m1=Rs(),CN=V(),{handleHDBError:qi,hdb_errors:p1}=Z(),{HTTP_STATUS_CODES:Fi}=p1,S1=h1.promisify(m1.getTableSchema),T1="updated",LN="inserted",DN="upserted";MN.exports={insert:R1,update:A1,upsert:O1,validation:g1,flush:b1};async function g1(e){if(Ft.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ft.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Ft.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await S1(e.schema,e.table),r=y_(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&&Ft.isEmptyOrZeroLength(c[n]))throw CN.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(!Ft.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw CN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Ft.isEmpty(c[n])&&c[n]!==""&&s.has(Ft.autoCast(c[n]))&&(c.skip=!0),s.add(Ft.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(g1,"validation");async function R1(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=y_(e);if(t)throw qi(new Error,t.message,Fi.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw qi(new Error,r,Fi.BAD_REQUEST);let n=await I_.createRecords(e);return N_(LN,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(R1,"insertData");async function A1(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=y_(e);if(t)throw qi(new Error,t.message,Fi.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw qi(new Error,r,Fi.BAD_REQUEST);let n=await I_.updateRecords(e);return Ft.isEmpty(n.existing_rows)?N_(T1,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):N_(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(A1,"updateData");async function O1(e){if(e.operation!=="upsert")throw qi(new Error,"invalid operation, must be upsert",Fi.INTERNAL_SERVER_ERROR);let t=y_(e);if(t)throw qi(new Error,t.message,Fi.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw qi(new Error,r,Fi.BAD_REQUEST);let n=await I_.upsertRecords(e);return N_(DN,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(O1,"upsertData");function N_(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===LN?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===DN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(N_,"returnObject");function b1(e){return Ft.transformReq(e),I_.flush(e.schema,e.table)}a(b1,"flush")});var Am=T((Oae,vN)=>{var N1=et(),Rm=require("joi"),{hdb_table:y1,hdb_database:UN}=Kn(),PN={schema:UN,database:UN,table:y1},I1={date:Rm.date().iso().required()},w1={timestamp:Rm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};vN.exports=function(e,t){let r=t==="timestamp"?{...PN,...w1}:{...PN,...I1},n=Rm.object(r);return N1.validateBySchema(e,n)}});var xN=T((bae,HN)=>{var C1=et(),Om=require("joi"),{hdb_table:L1,hdb_database:BN}=Kn(),D1=Om.object({schema:BN,database:BN,table:L1,hash_values:Om.array().required(),ids:Om.array()});HN.exports=function(e){return C1.validateBySchema(e,D1)}});var FN=T((Nae,qN)=>{"use strict";var bm=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}},Nm=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=[]}};qN.exports={InsertObject:bm,NoSQLSeachObject:Nm,DeleteResponseObject:ym}});var Vi=T((Iae,YN)=>{"use strict";var kN=Am(),M1=xN(),Gi=J(),GN=require("moment"),VN=V(),{promisify:U1,callbackify:P1}=require("util"),ki=M(),v1=Rs(),Im=U1(v1.getTableSchema),wm=Cn(),{DeleteResponseObject:B1}=FN(),{handleHDBError:js,hdb_errors:H1}=Z(),{HDB_ERROR_MSGS:w_,HTTP_STATUS_CODES:Zs}=H1,x1="records successfully deleted",q1=P1($N);YN.exports={delete:q1,deleteRecord:$N,deleteFilesBefore:F1,deleteAuditLogsBefore:G1};async function F1(e){let t=kN(e,"date");if(t)throw js(t,t.message,Zs.BAD_REQUEST,void 0,void 0,!0);if(Gi.transformReq(e),!GN(e.date,GN.ISO_8601).isValid())throw js(new Error,w_.INVALID_DATE,Zs.BAD_REQUEST,ki.LOG_LEVELS.ERROR,w_.INVALID_DATE,!0);let n=Gi.checkSchemaTableExist(e.schema,e.table);if(n)throw js(new Error,n,Zs.NOT_FOUND,ki.LOG_LEVELS.ERROR,n,!0);let s=await wm.deleteRecordsBefore(e);if(await Im(e.schema,e.table),VN.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(F1,"deleteFilesBefore");async function G1(e){let t=kN(e,"timestamp");if(t)throw js(t,t.message,Zs.BAD_REQUEST,void 0,void 0,!0);if(Gi.transformReq(e),isNaN(e.timestamp))throw js(new Error,w_.INVALID_VALUE("Timestamp"),Zs.BAD_REQUEST,ki.LOG_LEVELS.ERROR,w_.INVALID_VALUE("Timestamp"),!0);let r=Gi.checkSchemaTableExist(e.schema,e.table);if(r)throw js(new Error,r,Zs.NOT_FOUND,ki.LOG_LEVELS.ERROR,r,!0);let n=await wm.deleteAuditLogsBefore(e);return await Im(e.schema,e.table),VN.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(G1,"deleteAuditLogsBefore");async function $N(e){e.ids&&(e.hash_values=e.ids);let t=M1(e);if(t)throw js(t,t.message,Zs.BAD_REQUEST,void 0,void 0,!0);Gi.transformReq(e);let r=Gi.checkSchemaTableExist(e.schema,e.table);if(r)throw js(new Error,r,Zs.NOT_FOUND,ki.LOG_LEVELS.ERROR,r,!0);try{await Im(e.schema,e.table);let n=await wm.deleteRecords(e);return Gi.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${x1}`),n}catch(n){if(n.message===ki.SEARCH_NOT_FOUND_MESSAGE){let s=new B1;return s.message=ki.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a($N,"deleteRecord")});var C_=T((Cae,QN)=>{var k1=require("crypto"),KN=9;function V1(e){let t=Y1(KN),r=WN(e+t);return t+r}a(V1,"createHash");function $1(e,t){let r=e?.substr(0,KN),n=r+WN(t+r);return e===n}a($1,"validateHash");function Y1(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(Y1,"generateSalt");function WN(e){return k1.createHash("md5").update(e).digest("hex")}a(WN,"md5");QN.exports={hash:V1,validate:$1}});var JN=T((Dae,zN)=>{var Cm=et(),Qt={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 K1(e){return Qt.password.presence=!0,Qt.username.presence=!0,Qt.role.presence=!0,Qt.active.presence=!0,Cm.validateObject(e,Qt)}a(K1,"addUserValidation");function W1(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,Cm.validateObject(e,Qt)}a(W1,"alterUserValidation");function Q1(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,Cm.validateObject(e,Qt)}a(Q1,"dropUserValidation");zN.exports={addUserValidation:K1,alterUserValidation:W1,dropUserValidation:Q1}});var nt=T((Pae,jN)=>{"use strict";var{platform:Uae}=require("os"),z1="nats-server.zip",Lm="nats-server",J1=process.platform==="win32"?`${Lm}.exe`:Lm,Dm="HDB",X1=/^[^\s.,*>]+$/,XN="__request__",j1=a(e=>`${e}.${XN}`,"REQUEST_SUBJECT"),Z1={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},eY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},tY={HUB:"hub.pid",LEAF:"leaf.pid"},rY={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},nY={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Dm,deliver_subject:"__HDB__.WORKQUEUE"},sY={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Dm,deliver_subject:"HDB.SCHEMAQUEUE"},iY={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Dm,deliver_subject:"HDB.USERQUEUE"},oY={SUCCESS:"success",ERROR:"error"},aY={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},cY={TXN:"txn",MSGID:"msgid"},ko={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},uY={[ko.ERR]:1,[ko.WRN]:2,[ko.INF]:3,[ko.DBG]:4,[ko.TRC]:5},lY={debug:"-D",trace:"-DVV"};jN.exports={NATS_SERVER_ZIP:z1,NATS_SERVER_NAME:Lm,NATS_BINARY_NAME:J1,PID_FILES:tY,NATS_CONFIG_FILES:eY,SERVER_SUFFIX:rY,WORK_QUEUE_CONSUMER_NAMES:nY,SCHEMA_QUEUE_CONSUMER_NAMES:sY,USER_QUEUE_CONSUMER_NAMES:iY,NATS_TERM_CONSTRAINTS_RX:X1,REQUEST_SUFFIX:XN,UPDATE_REMOTE_RESPONSE_STATUSES:oY,CLUSTER_STATUS_STATUSES:aY,REQUEST_SUBJECT:j1,SUBJECT_PREFIXES:cY,MSG_HEADERS:Z1,LOG_LEVELS:ko,LOG_LEVEL_FLAGS:lY,LOG_LEVEL_HIERARCHY:uY}});var ey=T((Bae,ZN)=>{"use strict";var L_=M(),D_=class{static{a(this,"BaseLicense")}constructor(t=0,r=L_.RAM_ALLOCATION_ENUM.DEFAULT,n=L_.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},Mm=class extends D_{static{a(this,"ExtendedLicense")}constructor(t=0,r=L_.RAM_ALLOCATION_ENUM.DEFAULT,n=L_.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};ZN.exports={BaseLicense:D_,ExtendedLicense:Mm}});var $i=T((xae,oy)=>{"use strict";var $o=require("fs-extra"),ry=C_(),ny=require("crypto"),_Y=require("moment"),dY=require("uuid").v4,zt=V(),Pm=require("path"),fY=J(),ei=M(),{totalmem:ty}=require("os"),EY=ey().ExtendedLicense,Vo="invalid license key format",hY="061183",mY="mofi25",pY="aes-256-cbc",SY=16,TY=32,sy=j();sy.initSync();var Um;oy.exports={validateLicense:iy,generateFingerPrint:RY,licenseSearch:Hm,getLicense:bY,checkMemoryLimit:NY};function vm(){return Pm.join(sy.getHdbBasePath(),ei.LICENSE_KEY_DIR_NAME,ei.LICENSE_FILE_NAME)}a(vm,"getLicenseDirPath");function gY(){let e=vm();return Pm.join(e,ei.LICENSE_FILE_NAME)}a(gY,"getLicenseFilePath");function Bm(){let e=vm();return Pm.join(e,ei.REG_KEY_FILE_NAME)}a(Bm,"getFingerPrintFilePath");async function RY(){let e=Bm();try{return await $o.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await AY();throw zt.error(`Error writing fingerprint file to ${e}`),zt.error(t),new Error("There was an error generating the fingerprint")}}a(RY,"generateFingerPrint");async function AY(){let e=dY(),t=ry.hash(e),r=Bm();try{await $o.mkdirp(vm()),await $o.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw zt.error(`Error writing fingerprint file to ${r}`),zt.error(n),new Error("There was an error generating the fingerprint")}return t}a(AY,"writeFingerprint");function iy(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ei.RAM_ALLOCATION_ENUM.DEFAULT,version:ei.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return zt.error("empty license key passed to validate."),r;let n=Bm(),s=!1;try{s=$o.statSync(n)}catch(i){zt.error(i)}if(s){let i;try{i=$o.readFileSync(n,"utf8")}catch{zt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(mY),c=o[1];c=Buffer.concat([Buffer.from(c)],SY);let u=Buffer.concat([Buffer.from(i)],TY),_=ny.createDecipheriv(pY,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=OY(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Vo),zt.error(Vo),new Error(Vo)}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(Vo),zt.error(Vo),new Error(Vo)}else r.exp_date=l;r.exp_date<_Y().valueOf()&&(r.valid_date=!1),ry.validate(o[1],`${hY}${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||zt.error("Invalid licence"),r}a(iy,"validateLicense");function OY(e,t){try{let r=ny.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{zt.warn("Check old license failed")}}a(OY,"checkOldLicense");function Hm(){let e=new EY,t=[];try{t=$o.readFileSync(gY(),"utf-8").split(ei.NEW_LINE)}catch(r){r.code==="ENOENT"?zt.info("no license file found"):zt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(fY.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=iy(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){zt.error("There was an error parsing the license string."),zt.error(s),e.ram_allocation=ei.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Um=e,e}a(Hm,"licenseSearch");async function bY(){return Um||await Hm(),Um}a(bY,"getLicense");function NY(){let e=Hm().ram_allocation,t=process.constrainedMemory?.()||ty();if(t=Math.round(Math.min(t,ty())/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(NY,"checkMemoryLimit")});var vr=T((Vae,Ay)=>{"use strict";var ly="username is required",_y="nothing to update, must supply active, role or password to update",dy="password cannot be an empty string",fy="If role is specified, it cannot be empty.",Ey="active must be true or false";Ay.exports={addUser:PY,alterUser:vY,dropUser:HY,getSuperUser:GY,userInfo:xY,listUsers:U_,listUsersExternal:qY,setUsersToGlobal:Ko,findAndValidateUser:gy,getClusterUser:kY,USERNAME_REQUIRED:ly,ALTERUSER_NOTHING_TO_UPDATE:_y,EMPTY_PASSWORD:dy,EMPTY_ROLE:fy,ACTIVE_BOOLEAN:Ey};var hy=rn(),yY=Vi(),Fm=C_(),my=JN(),py=tn(),Gm=As(),Pr=J(),Sy=require("validate.js"),Te=V(),{promisify:IY}=require("util"),km=gs(),ay=M(),cy=nt(),wY=Lr(),Fae=j(),Gae=$i(),CY=Bi(),{table:kae}=(ge(),ee(xe)),{handleHDBError:Qn,hdb_errors:LY}=Z(),{HTTP_STATUS_CODES:zn,AUTHENTICATION_ERROR_MSGS:xm,HDB_ERROR_MSGS:Yo}=LY,{UserEventMsg:Vm}=Ln(),qm=require("lodash"),{server:$m}=(nr(),ee(Ci)),DY=V();$m.getUser=(e,t)=>gy(e,t,t!=null);var Ty={username:!0,active:!0,role:!0,password:!0},uy=new Map,M_=py.searchByValue,MY=py.searchByHash,UY=IY(yY.delete);async function PY(e){let t=Sy.cleanAttributes(e,Ty),r=my.addUserValidation(t);if(r)throw Qn(new Error,r.message,zn.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 M_(n),s=s&&Array.from(s)}catch(u){throw Te.error("There was an error searching for a role in add user"),Te.error(u),u}if(!s||s.length<1)throw Qn(new Error,Yo.ROLE_NAME_NOT_FOUND(t.role),zn.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Qn(new Error,Yo.DUP_ROLES_FOUND(t.role),zn.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=km.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 hy.insert(i)}catch(u){throw Te.error("There was an error searching for a user."),Te.error(u),u}Te.debug(o);try{await Ko()}catch(u){throw Te.error("Got an error setting users to global"),Te.error(u),u}if(o.skipped_hashes.length===1)throw Qn(new Error,Yo.USER_ALREADY_EXISTS(t.username),zn.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],Gm.signalUserChange(new Vm(process.pid)),`${c.username} successfully added`}a(PY,"addUser");async function vY(e){let t=Sy.cleanAttributes(e,Ty);if(Pr.isEmptyOrZeroLength(t.username))throw new Error(ly);if(Pr.isEmptyOrZeroLength(t.password)&&Pr.isEmptyOrZeroLength(t.role)&&Pr.isEmptyOrZeroLength(t.active))throw new Error(_y);if(!Pr.isEmpty(t.password)&&Pr.isEmptyOrZeroLength(t.password.trim()))throw new Error(dy);if(!Pr.isEmpty(t.active)&&!Pr.isBoolean(t.active))throw new Error(Ey);let r=BY(t.username);if(!Pr.isEmpty(t.password)&&!Pr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=km.encrypt(t.password)),t.password=Fm.hash(t.password)),t.role==="")throw new Error(fy);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 M_(i)||[])}catch(c){throw Te.error("Got an error searching for a role."),Te.error(c),c}if(!o||o.length===0){let c=Yo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Te.error(c),Qn(new Error,c,zn.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Yo.ALTER_USER_DUP_ROLES(t.role);throw Te.error(c),Qn(new Error,c,zn.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 hy.update(n)}catch(i){throw Te.error("Error during update."),Te.error(i),i}try{await Ko()}catch(i){throw Te.error("Got an error setting users to global"),Te.error(i),i}return Gm.signalUserChange(new Vm(process.pid)),s}a(vY,"alterUser");function BY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(BY,"isClusterUser");async function HY(e){try{let t=my.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Pr.isEmpty(global.hdb_users.get(e.username)))throw Qn(new Error,Yo.USER_NOT_EXIST(e.username),zn.NOT_FOUND,void 0,void 0,!0);let n;try{n=await UY(r)}catch(s){throw Te.error("Got an error deleting a user."),Te.error(s),s}Te.debug(n);try{await Ko()}catch(s){throw Te.error("Got an error setting users to global."),Te.error(s),s}return Gm.signalUserChange(new Vm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(HY,"dropUser");async function xY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=qm.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await MY(r)}catch(s){throw Te.error("Got an error searching for a role."),Te.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Te.error(r),r}return t}a(xY,"userInfo");async function qY(){let e;try{e=await U_()}catch(t){throw Te.error("Got an error listing users."),Te.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(qY,"listUsersExternal");async function U_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await M_(e)}catch(o){throw Te.error("Got an error searching for roles."),Te.error(o),o}let r={};for(let o of t)r[o.id]=qm.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 M_(n)}catch(o){throw Te.error("Got an error searching for users."),Te.error(o),o}let i=new Map;for(let o of s)o=qm.cloneDeep(o),o.role=r[o.role],FY(o.role),i.set(o.username,o);return i}catch(e){throw Te.error("got an error listing users"),Te.error(e),Pr.errorizeMessage(e)}return null}a(U_,"listUsers");function FY(e){try{if(!e){Te.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(CY)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Te.error("Got an error trying to set system permissions."),Te.error(t)}}a(FY,"appendSystemTablesToRole");async function Ko(){try{let e=await U_();global.hdb_users=e}catch(e){throw Te.error(e),e}}a(Ko,"setUsersToGlobal");async function gy(e,t,r=!0){global.hdb_users||await Ko();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Qn(new Error,xm.GENERIC_AUTH_FAIL,zn.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Qn(new Error,xm.USER_INACTIVE,zn.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(uy.get(t)===n.password)return s;if(Fm.validate(n.password,t))uy.set(t,n.password);else throw Qn(new Error,xm.GENERIC_AUTH_FAIL,zn.UNAUTHORIZED,void 0,void 0,!0)}return s}a(gy,"findAndValidateUser");async function GY(){global.hdb_users||await Ko();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(GY,"getSuperUser");async function kY(){let e=await U_(),t=wY.getConfigFromFile(ay.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Pr.isEmpty(r)&&r?.role?.role===ay.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=km.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+cy.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+cy.SERVER_SUFFIX.ADMIN,r}a(kY,"getClusterUser");var Ry=[];$m.invalidateUser=function(e){for(let t of Ry)try{t(e)}catch(r){DY.error("Error invalidating user",r)}};$m.onInvalidatedUser=function(e){Ry.push(e)}});var Bc=T((Wae,yy)=>{"use strict";var Yi=V(),Br=M(),VY=pN(),Yae=Rs(),Kae=xi(),$Y=vr(),{validateEvent:Oy}=Ln(),vc=Cn(),YY=require("process"),{resetDatabases:KY}=(ge(),ee(xe)),WY={[Br.ITC_EVENT_TYPES.SCHEMA]:QY,[Br.ITC_EVENT_TYPES.USER]:Ny};async function QY(e){let t=Oy(e);if(t){Yi.error(t);return}Yi.trace("ITC schemaHandler received schema event:",e),await VY(e.message),await zY(e.message)}a(QY,"schemaHandler");async function zY(e){try{vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=KY();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Yi.error(t)}}a(zY,"syncSchemaMetadata");var by=[];async function Ny(e){try{try{vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Yi.warn(r)}let t=Oy(e);if(t){Yi.error(t);return}Yi.trace(`ITC userHandler ${Br.HDB_ITC_CLIENT_PREFIX}${YY.pid} received user event:`,e),await $Y.setUsersToGlobal();for(let r of by)r()}catch(t){Yi.error(t)}}a(Ny,"userHandler");Ny.addListener=function(e){by.push(e)};yy.exports=WY});var Ln=T((Zae,wy)=>{"use strict";var zae=V(),Ym=J(),JY=M(),{ITC_ERRORS:Hc}=Ir(),{parentPort:Jae,threadId:XY,isMainThread:jY,workerData:Xae}=require("worker_threads"),{onMessageFromWorkers:ZY,broadcast:jae,broadcastWithAcknowledgement:eK}=tt();wy.exports={sendItcEvent:tK,validateEvent:Iy,SchemaEventMsg:rK,UserEventMsg:nK};var P_;ZY(async(e,t)=>{P_=P_||Bc(),Iy(e),P_[e.type]&&await P_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function tK(e){return!jY&&e.message&&(e.message.originator=XY),eK(e)}a(tK,"sendItcEvent");function Iy(e){if(typeof e!="object")return Hc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Ym.isEmpty(e.type))return Hc.MISSING_TYPE;if(!e.hasOwnProperty("message")||Ym.isEmpty(e.message))return Hc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Ym.isEmpty(e.message.originator))return Hc.MISSING_ORIGIN;if(JY.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Hc.INVALID_EVENT(e.type)}a(Iy,"validateEvent");function rK(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(rK,"SchemaEventMsg");function nK(e){this.originator=e}a(nK,"UserEventMsg")});var As=T((rce,My)=>{"use strict";var Cy=M(),tce=J(),v_=V(),Ly=EN(),Wo,{sendItcEvent:Dy}=Ln();function sK(e){try{v_.trace("signalSchemaChange called with message:",e),Wo=Wo||Bc();let t=new Ly(Cy.ITC_EVENT_TYPES.SCHEMA,e);return Wo.schema(t),Dy(t)}catch(t){v_.error(t)}}a(sK,"signalSchemaChange");function iK(e){try{v_.trace("signalUserChange called with message:",e),Wo=Wo||Bc();let t=new Ly(Cy.ITC_EVENT_TYPES.USER,e);return Wo.user(t),Dy(t)}catch(t){v_.error(t)}}a(iK,"signalUserChange");My.exports={signalSchemaChange:sK,signalUserChange:iK}});var B_=T((sce,Py)=>{"use strict";var Uy=J(),oK=M(),aK=V(),cK=S_(),uK=p_(),lK=As(),{SchemaEventMsg:_K}=Ln(),dK="already exists in";Py.exports=fK;async function fK(e,t,r){if(Uy.isEmptyOrZeroLength(r))return r;let n=[];Uy.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 EK(e,t.schema,t.name,i)})),s}a(fK,"lmdbCheckForNewAttributes");async function EK(e,t,r,n){let s=new uK(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await hK(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(dK))aK.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(EK,"createNewAttribute");async function hK(e){let t;return t=await cK(e),lK.signalSchemaChange(new _K(process.pid,oK.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(hK,"createAttribute")});var Qo=T((oce,vy)=>{"use strict";var Km=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}};vy.exports=Km});var Hy=T((cce,By)=>{"use strict";var mK=Qo(),pK=M().OPERATIONS_ENUM,Wm=class extends mK{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(pK.INSERT,r,n,s,i),this.records=t}};By.exports=Wm});var qy=T((lce,xy)=>{"use strict";var SK=Qo(),TK=M().OPERATIONS_ENUM,Qm=class extends SK{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(TK.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};xy.exports=Qm});var Gy=T((dce,Fy)=>{"use strict";var gK=Qo(),RK=M().OPERATIONS_ENUM,zm=class extends gK{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(RK.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};Fy.exports=zm});var Vy=T((Ece,ky)=>{"use strict";var AK=Qo(),OK=M().OPERATIONS_ENUM,Jm=class extends AK{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(OK.DELETE,n,s,t,i),this.original_records=r}};ky.exports=Jm});var xc=T((pce,Wy)=>{"use strict";var mce=require("path"),$y=$e(),bK=Hy(),NK=qy(),yK=Gy(),IK=Vy(),zo=ht(),Yy=J(),{CONFIG_PARAMS:wK}=M(),Ky=j();Ky.initSync();var H_=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:CK}=We();Wy.exports=LK;async function LK(e,t){if(Ky.get(wK.LOGGING_AUDITLOG)===!1)return;let r=CK(e.schema,e.table),n=await $y.openEnvironment(r,e.table,!0),s=DK(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){$y.initializeDBIs(n,zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,zo.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),Yy.isEmpty(s.user_name)||n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(LK,"writeTransaction");function DK(e,t){let r=Yy.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===H_.INSERT)return new bK(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===H_.UPDATE)return new NK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===H_.UPSERT)return new yK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===H_.DELETE)return new IK(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(DK,"createTransactionObject")});var Xm=T((gce,Qy)=>{"use strict";var MK=wc(),Tce=Cc(),qc=M(),UK=Uc(),PK=Fo().insertRecords,vK=$e(),BK=V(),HK=B_(),{getSchemaPath:xK}=We(),qK=xc();Qy.exports=FK;async function FK(e){try{let{schema_table:t,attributes:r}=MK(e);UK(e,r,t.hash_attribute),e.schema!==qc.SYSTEM_SCHEMA_NAME&&(r.includes(qc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(qc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(qc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(qc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await HK(e.hdb_auth_header,t,r),s=xK(e.schema,e.table),i=await vK.openEnvironment(s,e.table),o=await PK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await qK(e,o)}catch(c){BK.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(FK,"lmdbCreateRecords")});var Xy=T((Ace,Jy)=>{"use strict";var zy=M(),GK=Xm(),kK=Cc(),VK=require("fs-extra"),{getSchemaPath:$K}=We();Jy.exports=YK;async function YK(e){let t=[{name:e.schema,createddate:Date.now()}],r=new kK(zy.SYSTEM_SCHEMA_NAME,zy.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await GK(r),await VK.mkdirp($K(e.schema))}a(YK,"lmdbCreateSchema")});var Zy=T((bce,jy)=>{"use strict";var jm=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}};jy.exports=jm});var nI=T((Cce,rI)=>{"use strict";var eI=$e(),Zm=Dr(),ep=Ir().LMDB_ERRORS_ENUM,KK=ht(),tI=V(),yce=J(),WK=require("lmdb"),QK=Zy(),zK=M(),{OVERFLOW_MARKER:Ice,MAX_SEARCH_KEY_LENGTH:wce}=KK,JK=zK.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function XK(e,t,r,n){if(Zm.validateEnv(e),t===void 0)throw new Error(ep.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ep.IDS_REQUIRED):new Error(ep.IDS_MUST_BE_ITERABLE);try{let s=eI.listDBIs(e);eI.initializeDBIs(e,t,s);let i=new QK,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[JK]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,WK.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let A=s[S];if(!h.hasOwnProperty(A)||A===t)continue;let I=e.dbis[A],w=h[A];if(w!=null)try{let B=Zm.getIndexedValues(w);if(B)for(let K=0,q=B.length;K<q;K++)I.remove(B[K],o)}catch{tI.warn(`cannot delete from attribute: ${A}, ${w}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){tI.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=Zm.getNextMonotonicTime(),i}catch(s){throw s}}a(XK,"deleteRecords");rI.exports={deleteRecords:XK}});var Fc=T((Dce,iI)=>{"use strict";var Jo=J(),jK=nI(),ZK=$e(),{getSchemaPath:eW}=We(),tW=xc(),rW=V();iI.exports=nW;async function nW(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Jo.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Jo.isEmptyOrZeroLength(e.hash_values)&&!Jo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];Jo.isEmpty(u)||e.hash_values.push(u)}}if(Jo.isEmptyOrZeroLength(e.hash_values))return sI([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Jo.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=eW(e.schema,e.table),i=await ZK.openEnvironment(s,e.table),o=await jK.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await tW(e,o)}catch(c){rW.error(`unable to write transaction due to ${c.message}`)}return sI(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(nW,"lmdbDeleteRecords");function sI(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(sI,"createDeleteResponse")});var rp=T((Pce,oI)=>{"use strict";var sW=M(),Uce=Dr();function tp(e,t){let r=Object.create(null);if(t.length===1&&sW.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(tp,"parseRow");function iW(e,t,r,n){let s=tp(r,e);n.push(s)}a(iW,"searchAll");function oW(e,t,r,n){let s=tp(r,e);n[t]=s}a(oW,"searchAllToMap");function aW(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(aW,"iterateDBI");function Ki(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(Ki,"pushResults");function cW(e,t,r,n,s,i){t.toString().endsWith(e)&&Ki(t,r,n,s,i)}a(cW,"endsWith");function uW(e,t,r,n,s,i){t.toString().includes(e)&&Ki(t,r,n,s,i)}a(uW,"contains");function lW(e,t,r,n,s,i){t>e&&Ki(t,r,n,s,i)}a(lW,"greaterThanCompare");function _W(e,t,r,n,s,i){t>=e&&Ki(t,r,n,s,i)}a(_W,"greaterThanEqualCompare");function dW(e,t,r,n,s,i){t<e&&Ki(t,r,n,s,i)}a(dW,"lessThanCompare");function fW(e,t,r,n,s,i){t<=e&&Ki(t,r,n,s,i)}a(fW,"lessThanEqualCompare");oI.exports={parseRow:tp,searchAll:iW,searchAllToMap:oW,iterateDBI:aW,endsWith:cW,contains:uW,greaterThanCompare:lW,greaterThanEqualCompare:_W,lessThanCompare:dW,lessThanEqualCompare:fW,pushResults:Ki}});var Xo=T((qce,fI)=>{"use strict";var ti=$e(),Bce=V(),Hr=Dr(),x_=ht(),dt=Ir().LMDB_ERRORS_ENUM,Hce=J(),EW=M(),q_=rp(),{parseRow:hW}=q_,xce=require("lmdb"),{OVERFLOW_MARKER:aI,MAX_SEARCH_KEY_LENGTH:mW}=x_;function cI(e,t,r,n=!1,s=void 0,i=void 0){return Wi(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(cI,"iterateFullIndex");function Gc(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Wi(e,t,r,(l,d,f,E)=>{let I={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?(I.values=!1,d.getRange(I).map(w=>({value:w}))):d.getRange(I)})}a(Gc,"iterateRangeBetween");function Wi(e,t,r,n){let s=e.database||e,i=ti.openDBI(s,r);i[x_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ti.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(Wi,"setupTransaction");function uI(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(aI)){if(!s)if(r)s=ti.openDBI(e,r);else{let u=ti.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=ti.openDBI(e,u[_]),!s[x_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(uI,"getOverflowCheck");function pW(e,t,r,n=!1,s=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);return Wi(e,t,t,(o,c,u)=>(F_(r),r=kc(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>hW(_.value,r))))}a(pW,"searchAll");function SW(e,t,r,n=!1,s=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);F_(r),r=kc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of cI(e,t,t,n,s,i))o.set(c,q_.parseRow(u,r));return o}a(SW,"searchAllToMap");function TW(e,t,r=!1,n=void 0,s=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(dt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=cI(e,void 0,t,r,n,s),c=o.transaction,u=uI(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(TW,"iterateDBI");function gW(e,t){if(Hr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);return ti.statDBI(e,t).entryCount}a(gW,"countAll");function RW(e,t,r,n,s=!1,i=void 0,o=void 0){return ri(e,r,n),Wi(e,t,r,(c,u,_,l)=>(n=Hr.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(RW,"equals");function AW(e,t,r){return ri(e,t,r),ti.openDBI(e,t).getValuesCount(r)}a(AW,"count");function OW(e,t,r,n,s=!1,i=void 0,o=void 0){return ri(e,r,n),Wi(e,null,r,(c,u)=>{n=Hr.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(OW,"startsWith");function bW(e,t,r,n,s=!1,i=void 0,o=void 0){return lI(e,t,r,n,s,i,o,!0)}a(bW,"endsWith");function lI(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ri(e,r,n),Wi(e,null,r,(u,_,l,d)=>{let f=uI(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(aI)?_.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))?_[x_.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(lI,"contains");function NW(e,t,r,n,s=!1,i=void 0,o=void 0){ri(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Gc(e,t,r,n,u,s,i,o,!0,!1)}a(NW,"greaterThan");function yW(e,t,r,n,s=!1,i=void 0,o=void 0){ri(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Gc(e,t,r,n,u,s,i,o,!1,!1)}a(yW,"greaterThanEqual");function IW(e,t,r,n,s=!1,i=void 0,o=void 0){ri(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Gc(e,t,r,u,n,s,i,o,!1,!0)}a(IW,"lessThan");function wW(e,t,r,n,s=!1,i=void 0,o=void 0){ri(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Gc(e,t,r,u,n,s,i,o,!1,!1)}a(wW,"lessThanEqual");function CW(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Hr.validateEnv(e),r===void 0)throw new Error(dt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(dt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(dt.END_VALUE_REQUIRED);if(n=Hr.convertKeyValueToWrite(n),s=Hr.convertKeyValueToWrite(s),n>s)throw new Error(dt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Gc(e,t,r,n,s,i,o,c)}a(CW,"between");function LW(e,t,r,n){Hr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(F_(r),r=kc(s,r),n===void 0)throw new Error(dt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=q_.parseRow(c,r)),o}a(LW,"searchByHash");function DW(e,t,r){Hr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(dt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(DW,"checkHashExists");function MW(e,t,r,n,s=[]){return dI(e,t,r,n,s),_I(e,t,r,n,s).map(i=>i[1])}a(MW,"batchSearchByHash");function UW(e,t,r,n,s=[]){dI(e,t,r,n,s);let i=new Map;for(let[o,c]of _I(e,t,r,n,s))i.set(o,c);return i}a(UW,"batchSearchByHashToMap");function _I(e,t,r,n,s=[]){return Wi(e,t,t,(i,o,c)=>{r=kc(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,q_.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(_I,"batchHashSearch");function dI(e,t,r,n,s){if(Hr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(F_(r),n==null)throw new Error(dt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(dt.IDS_MUST_BE_ITERABLE)}a(dI,"initializeBatchSearchByHash");function F_(e){if(!Array.isArray(e))throw e===void 0?new Error(dt.FETCH_ATTRIBUTES_REQUIRED):new Error(dt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(F_,"validateFetchAttributes");function ri(e,t,r){if(Hr.validateEnv(e),t===void 0)throw new Error(dt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(dt.SEARCH_VALUE_REQUIRED);if(r?.length>mW)throw new Error(dt.SEARCH_VALUE_TOO_LARGE)}a(ri,"validateComparisonFunctions");function kc(e,t){return t.length===1&&EW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ti.listDBIs(e)),t}a(kc,"setGetWholeRowAttributes");fI.exports={searchAll:pW,searchAllToMap:SW,count:AW,countAll:gW,equals:RW,startsWith:OW,endsWith:bW,contains:lI,searchByHash:LW,setGetWholeRowAttributes:kc,batchSearchByHash:MW,batchSearchByHashToMap:UW,checkHashExists:DW,iterateDBI:TW,greaterThan:NW,greaterThanEqual:yW,lessThan:IW,lessThanEqual:wW,between:CW}});var jo=T((Gce,SI)=>{var EI=require("lodash"),hI=et(),fe=require("joi"),PW=J(),{hdb_schema_table:Vc,checkValidTable:mI,hdb_table:pI,hdb_database:G_}=Kn(),{handleHDBError:vW,hdb_errors:BW}=Z(),{getDatabases:HW}=(ge(),ee(xe)),{HTTP_STATUS_CODES:xW}=BW,qW=fe.object({database:G_,schema:G_,table:pI,search_attribute:Vc,search_value:fe.any().required(),get_attributes:fe.array().min(1).items(fe.alternatives(Vc,fe.object())).optional(),desc:fe.bool(),limit:fe.number().integer().min(1),offset:fe.number().integer().min(0)}),FW=fe.object({database:G_,schema:G_,table:pI,operator:fe.string().valid("and","or").default("and").lowercase(),offset:fe.number().integer().min(0),limit:fe.number().integer().min(1),get_attributes:fe.array().min(1).items(fe.alternatives(Vc,fe.object())).optional(),sort:fe.object({attribute:fe.alternatives(Vc,fe.array().min(1)),descending:fe.bool().optional()}).optional(),conditions:fe.array().min(1).items(fe.alternatives(fe.object({operator:fe.string().valid("and","or").default("and").lowercase(),conditions:fe.array()}),fe.object({search_attribute:fe.alternatives(Vc,fe.array().min(1)),search_type:fe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:fe.when("search_type",{switch:[{is:"equals",then:fe.any()},{is:"between",then:fe.array().items(fe.alternatives([fe.string(),fe.number()])).length(2)}],otherwise:fe.alternatives(fe.string(),fe.number())}).required()}))).required()});SI.exports=function(e,t){let r=null;switch(t){case"value":r=hI.validateBySchema(e,qW);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(mI("database",e.schema)),i(mI("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=hI.validateBySchema(e,FW);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=PW.checkGlobalSchemaTable(e.schema,e.table);if(s)return vW(new Error,s,xW.NOT_FOUND);let o=HW()[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 _=EI.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!EI.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 np=T((Vce,TI)=>{"use strict";var GW=$e(),kW=jo(),{getSchemaPath:VW}=We();TI.exports=$W;function $W(e){let t=kW(e,"hashes");if(t)throw t;let r=VW(e.schema,e.table);return GW.openEnvironment(r,e.table)}a($W,"initialize")});var sp=T((Yce,gI)=>{"use strict";var YW=Xo(),KW=np();gI.exports=WW;async function WW(e){let t=await KW(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return YW.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(WW,"lmdbGetDataByHash")});var Zo=T((Wce,RI)=>{"use strict";var ip=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};RI.exports=ip});var OI=T((Jce,AI)=>{"use strict";var zce=Zo(),QW=Xo(),zW=np();AI.exports=JW;async function JW(e){let t=await zW(e),r=global.hdb_schema[e.schema][e.table];return QW.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(JW,"lmdbSearchByHash")});var Jn=T((jce,bI)=>{"use strict";var op=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}};bI.exports=op});var k_=T((eue,LI)=>{"use strict";var Jt=Xo(),XW=$e(),jW=J(),Ee=ht(),Qi=M(),ZW=Bi(),NI=Ir().LMDB_ERRORS_ENUM,{getSchemaPath:eQ}=We(),Os=Qi.SEARCH_WILDCARDS;async function tQ(e,t,r){let n;e.schema===Qi.SYSTEM_SCHEMA_NAME?n=ZW[e.table]:n=global.hdb_schema[e.schema][e.table];let s=CI(e,n.hash_attribute,r,t);return II(e,s,n.hash_attribute,r)}a(tQ,"prepSearch");async function II(e,t,r,n){let s=eQ(e.schema,e.table),i=await XW.openEnvironment(s,e.table),o=wI(i,e,t,r),c=o.transaction||i;if([Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ee.SEARCH_TYPES.SEARCH_ALL,Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(rQ(e,r)===!1){let l=e.search_attribute;if(l===r)return n?yI(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return n?yI(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return n===!0?Jt.batchSearchByHashToMap(c,r,e.get_attributes,_):Jt.batchSearchByHash(c,r,e.get_attributes,_)}a(II,"executeSearch");function wI(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 Ee.SEARCH_TYPES.EQUALS:s=Jt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.CONTAINS:s=Jt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.ENDS_WITH:case Ee.SEARCH_TYPES._ENDS_WITH:s=Jt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.STARTS_WITH:case Ee.SEARCH_TYPES._STARTS_WITH:s=Jt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Jt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Jt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.SEARCH_ALL:return Jt.searchAll(e,n,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Jt.searchAllToMap(e,n,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.BETWEEN:s=Jt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN:case Ee.SEARCH_TYPES._GREATER_THAN:s=Jt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ee.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Jt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN:case Ee.SEARCH_TYPES._LESS_THAN:s=Jt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN_EQUAL:case Ee.SEARCH_TYPES._LESS_THAN_EQUAL:s=Jt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return s}a(wI,"searchByType");function yI(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(yI,"createMapFromIterable");function rQ(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(rQ,"checkToFetchMore");function CI(e,t,r,n){if(jW.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),Os.indexOf(s)>-1)return r===!0?Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ee.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Os[0])<0&&s.indexOf(Os[1])<0)return c===!0?r===!0?Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ee.SEARCH_TYPES.EQUALS;if(Os.indexOf(i)>=0&&Os.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Ee.SEARCH_TYPES.CONTAINS;if(Os.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ee.SEARCH_TYPES.ENDS_WITH;if(Os.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Ee.SEARCH_TYPES.STARTS_WITH;if(s.includes(Os[0])||s.includes(Os[1]))return Ee.SEARCH_TYPES.EQUALS;throw new Error(NI.UNKNOWN_SEARCH_TYPE)}else switch(n){case Qi.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ee.SEARCH_TYPES.BETWEEN;case Qi.VALUE_SEARCH_COMPARATORS.GREATER:return Ee.SEARCH_TYPES.GREATER_THAN;case Qi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ee.SEARCH_TYPES.GREATER_THAN_EQUAL;case Qi.VALUE_SEARCH_COMPARATORS.LESS:return Ee.SEARCH_TYPES.LESS_THAN;case Qi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ee.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(NI.UNKNOWN_SEARCH_TYPE)}}a(CI,"createSearchTypeFromSearchObject");LI.exports={executeSearch:II,createSearchTypeFromSearchObject:CI,prepSearch:tQ,searchByType:wI}});var MI=T((nue,DI)=>{"use strict";var rue=Jn(),nQ=jo(),sQ=J(),iQ=M(),oQ=k_();DI.exports=aQ;function aQ(e,t){if(!sQ.isEmpty(t)&&iQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=nQ(e,"value");if(n)throw n;return oQ.prepSearch(e,t,!0)}a(aQ,"lmdbGetDataByValue")});var $c=T((oue,UI)=>{"use strict";var iue=Jn(),cQ=jo(),uQ=J(),lQ=M(),_Q=k_();UI.exports=dQ;async function dQ(e,t){if(!uQ.isEmpty(t)&&lQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=cQ(e,"value");if(n)throw n;return _Q.prepSearch(e,t,!1)}a(dQ,"lmdbSearchByValue")});var vI=T((uue,PI)=>{"use strict";var cue=ht(),ap=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}},cp=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},up=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};PI.exports={SearchByConditionsObject:ap,SearchCondition:cp,SortAttribute:up}});var FI=T((fue,qI)=>{"use strict";var _ue=vI().SearchByConditionsObject,fQ=Jn(),EQ=jo(),lp=Xo(),V_=ht(),{Resource:due}=(yn(),ee(_p)),xI=k_(),hQ=rp(),mQ=require("lodash"),{getSchemaPath:pQ}=We(),BI=$e(),{handleHDBError:SQ,hdb_errors:TQ}=Z(),{HTTP_STATUS_CODES:gQ}=TQ,RQ=1e8;qI.exports=AQ;async function AQ(e){let t=EQ(e,"conditions");if(t)throw SQ(t,t.message,gQ.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=pQ(e.schema,e.table),n=await BI.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)BI.openDBI(n,_.search_attribute);let i=mQ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===V_.SEARCH_TYPES.EQUALS?_.estimated_count=lp.count(n,_.search_attribute,_.search_value):l===V_.SEARCH_TYPES.CONTAINS||l===V_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=RQ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await HI(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(xI.filterByType),d=l.length,f=lp.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=>hQ.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await HI(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=lp.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(AQ,"lmdbSearchByConditions");async function HI(e,t,r,n){let s=new fQ(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===V_.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,xI.searchByType(e,s,i,n).map(o=>o.value)}a(HI,"executeConditionSearch")});var Yc=T((hue,GI)=>{"use strict";var OQ=M().OPERATIONS_ENUM,dp=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=OQ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};GI.exports=dp});var fp=T((pue,zI)=>{"use strict";var YI=Jn(),KI=Yc(),WI=$c(),QI=Fc(),ar=M(),kI=J(),VI=$e(),{getTransactionAuditStorePath:bQ,getSchemaPath:NQ}=We(),$I=V();zI.exports=yQ;async function yQ(e){try{if(kI.isEmpty(global.hdb_schema[e.schema])||kI.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await IQ(e),await wQ(e);let t=NQ(e.schema,e.table);try{await VI.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")$I.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=bQ(e.schema,e.table);await VI.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")$I.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(yQ,"lmdbDropTable");async function IQ(e){let t=new YI(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await WI(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 KI(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await QI(s)}a(IQ,"deleteAttributesFromSystem");async function wQ(e){let t=new YI(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await WI(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 KI(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await QI(s)}catch(i){throw i}}a(wQ,"dropTableFromSystem")});var XI=T((Tue,JI)=>{"use strict";var CQ=require("fs-extra"),LQ=Jn(),DQ=Zo(),MQ=Yc(),UQ=fp(),PQ=Fc(),vQ=sp(),BQ=$c(),bs=M(),{getSchemaPath:HQ}=We(),{handleHDBError:xQ,hdb_errors:qQ}=Z(),{HDB_ERROR_MSGS:FQ,HTTP_STATUS_CODES:GQ}=qQ;JI.exports=kQ;async function kQ(e){let t;try{t=await VQ(e.schema);let r=new LQ(bs.SYSTEM_SCHEMA_NAME,bs.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await BQ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await UQ(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new MQ(bs.SYSTEM_SCHEMA_NAME,bs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await PQ(s);let i=HQ(t);await CQ.remove(i)}catch(r){throw r}}a(kQ,"lmdbDropSchema");async function VQ(e){let t=new DQ(bs.SYSTEM_SCHEMA_NAME,bs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await vQ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw xQ(new Error,FQ.SCHEMA_NOT_FOUND(e),GQ.NOT_FOUND,void 0,void 0,!0);return n}a(VQ,"validateDropSchema")});var hp=T((Rue,jI)=>{"use strict";var Ep=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};jI.exports=Ep});var ew=T((bue,ZI)=>{"use strict";var $Q=require("fs-extra"),$_=$e(),{getTransactionAuditStorePath:YQ}=We(),mp=ht(),Oue=hp();ZI.exports=KQ;async function KQ(e){let t;try{let r=YQ(e.schema,e.table);await $Q.mkdirp(r),t=await $_.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{$_.createDBI(t,mp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),$_.createDBI(t,mp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),$_.createDBI(t,mp.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(KQ,"createTransactionsAuditEnvironment")});var sw=T((yue,nw)=>{"use strict";var pp=M(),tw=$e(),WQ=Fo(),{getSystemSchemaPath:QQ,getSchemaPath:zQ}=We(),JQ=Bi(),XQ=S_(),Sp=p_(),jQ=V(),ZQ=ew(),gp=JQ.hdb_table,rw=[];for(let e=0;e<gp.attributes.length;e++)rw.push(gp.attributes[e].attribute);nw.exports=ez;async function ez(e,t){let r=zQ(t.schema,t.table),n=new Sp(t.schema,t.table,pp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Sp(t.schema,t.table,pp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Sp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await tw.createEnvironment(r,t.table),e!==void 0){let o=await tw.openEnvironment(QQ(),pp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await WQ.insertRecords(o,gp.hash_attribute,rw,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Tp(n),await Tp(s),await Tp(i)}await ZQ(t)}catch(o){throw o}}a(ez,"lmdbCreateTable");async function Tp(e){try{await XQ(e)}catch(t){jQ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Tp,"createAttribute")});var ow=T((wue,iw)=>{"use strict";var tz=wc(),rz=Uc(),nz=B_(),Kc=M(),sz=Fo().updateRecords,iz=$e(),{getSchemaPath:oz}=We(),az=xc(),cz=V();iw.exports=uz;async function uz(e){try{let{schema_table:t,attributes:r}=tz(e);rz(e,r,t.hash_attribute),e.schema!==Kc.SYSTEM_SCHEMA_NAME&&(r.includes(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await nz(e.hdb_auth_header,t,r),s=oz(e.schema,e.table),i=await iz.openEnvironment(s,e.table),o=await sz(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await az(e,o)}catch(c){cz.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(uz,"lmdbUpdateRecords")});var cw=T((Lue,aw)=>{"use strict";var lz=M().OPERATIONS_ENUM,Rp=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=lz.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};aw.exports=Rp});var lw=T((Uue,uw)=>{"use strict";var Mue=cw(),_z=wc(),dz=Uc(),fz=B_(),Wc=M(),Ez=Fo().upsertRecords,hz=$e(),{getSchemaPath:mz}=We(),pz=xc(),Sz=V(),{handleHDBError:Tz,hdb_errors:gz}=Z();uw.exports=Rz;async function Rz(e){let t;try{t=_z(e)}catch(u){throw Tz(u,u.message,gz.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;dz(e,n,r.hash_attribute),e.schema!==Wc.SYSTEM_SCHEMA_NAME&&(n.includes(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await fz(e.hdb_auth_header,r,n),i=mz(e.schema,e.table),o=await hz.openEnvironment(i,e.table),c=await Ez(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await pz(e,c)}catch(u){Sz.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(Rz,"lmdbUpsertRecords")});var dw=T((vue,_w)=>{"use strict";var Ap=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};_w.exports=Ap});var Ew=T((Hue,fw)=>{"use strict";var Op=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}};fw.exports=Op});var pw=T((Fue,mw)=>{"use strict";var bp=$e(),{getTransactionAuditStorePath:Az}=We(),que=dw(),Qc=ht(),Oz=J(),hw=Ew(),bz=require("util").promisify,Nz=bz(setTimeout),yz=1e4,Iz=100;mw.exports=wz;async function wz(e){let t=Az(e.schema,e.table),r=await bp.openEnvironment(t,e.table,!0),n=bp.listDBIs(r);bp.initializeDBIs(r,Qc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new hw;do s=await Cz(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 Nz(Iz);while(s.transactions_deleted>0);return i}a(wz,"deleteAuditLogsBefore");async function Cz(e,t){let r=new hw;try{let n=e.dbis[Qc.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[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Oz.isEmpty(c)||(s=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>yz)break}return await s,r}catch(n){throw n}}a(Cz,"deleteTransactions")});var Tw=T((kue,Sw)=>{"use strict";var Np=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};Sw.exports=Np});var Rw=T((Yue,gw)=>{"use strict";var Lz=Jn(),Dz=Yc(),$ue=Tw(),Xn=M(),Mz=J(),yp=$e(),Uz=Bi(),Pz=$c(),vz=Fc(),{getSchemaPath:Bz}=We();gw.exports=Hz;async function Hz(e,t=!0){let r;e.schema===Xn.SYSTEM_SCHEMA_NAME?r=Uz[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await qz(e),s=Bz(e.schema,e.table),i=await yp.openEnvironment(s,e.table);return t===!0&&await xz(e,i,r.hash_attribute),yp.dropDBI(i,e.attribute),n}a(Hz,"lmdbDropAttribute");async function xz(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(xz,"removeAttributeFromAllObjects");async function qz(e){let t=new Lz(Xn.SYSTEM_SCHEMA_NAME,Xn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await Pz(t)).filter(o=>o[Xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Mz.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Dz(Xn.SYSTEM_SCHEMA_NAME,Xn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return vz(i)}a(qz,"dropAttributeFromSystem")});var Iw=T((Que,yw)=>{"use strict";var Ip=$e(),ea=ht(),Wue=Dr(),wp=M(),Aw=J(),{getTransactionAuditStorePath:Fz}=We(),Gz=Xo(),Y_=Qo(),kz=V();yw.exports=Vz;async function Vz(e){let t=Fz(e.schema,e.table),r=await Ip.openEnvironment(t,e.table,!0),n=Ip.listDBIs(r);Ip.initializeDBIs(r,ea.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Ow(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,Yz(r,e.search_values,s);case wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return $z(r,e.search_values);default:return Ow(r)}}a(Vz,"readAuditLog");function Ow(e,t=[0,Date.now()]){Aw.isEmpty(t[0])&&(t[0]=0),Aw.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ea.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 Y_,s))}a(Ow,"searchTransactionsByTimestamp");function $z(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[ea.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,Nw(e,i))}return Object.fromEntries(r)}a($z,"searchTransactionsByUsername");function Yz(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=Gz.equals(e,ea.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ea.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=Nw(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);bw(u,"records",r,l,o),bw(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(Yz,"searchTransactionsByHashValues");function bw(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 Y_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Y_(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(bw,"loopRecords");function Nw(e,t){let r=[];try{let n=e.dbis[ea.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 Y_,i);r.push(o)}}catch(i){kz.warn(i)}return r}catch(n){throw n}}a(Nw,"batchSearchTransactions")});var Cw=T((jue,ww)=>{"use strict";var{getSchemaPath:Jue}=We(),Xue=$e(),{database:Kz}=(ge(),ee(xe));ww.exports={writeTransaction:Wz};async function Wz(e,t,r){return Kz({database:e,table:t}).transaction(r)}a(Wz,"writeTransaction")});var Uw=T((ele,Mw)=>{"use strict";var{getSchemaPath:Lw}=We(),Dw=$e();Mw.exports={flush:Qz,resetReadTxn:zz};async function Qz(e,t){return(await Dw.openEnvironment(Lw(e,t),t.toString())).flushed}a(Qz,"flush");async function zz(e,t){try{(await Dw.openEnvironment(Lw(e,t),t.toString())).resetReadTxn()}catch{}}a(zz,"resetReadTxn")});var Hw=T((rle,Bw)=>{"use strict";var{Readable:Jz}=require("stream"),{getDatabases:Xz}=(ge(),ee(xe)),{readSync:jz,openSync:Zz,createReadStream:Pw}=require("fs"),{open:eJ}=require("lmdb"),vw=a_(),tJ=u_(),{AUDIT_STORE_OPTIONS:rJ}=(Pi(),ee(xw)),{INTERNAL_DBIS_NAME:nJ,AUDIT_STORE_NAME:sJ}=ht();Bw.exports=oJ;var Cp=32768,iJ=100;async function oJ(e){let t=e.database||e.schema||"data",r=Xz()[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=eJ({noSync:!0,maxDbs:tJ.MAX_DBS}),f,E=d.openDB(nJ,new vw(!1)),h=l.useReadTransaction(),p=0,S=a(async function(I,w){w.encoding="binary",w.encoder=void 0;let B=d.openDB(I,w),K=l.openDB(I,w);for(let{key:q,version:P,value:Q}of K.getRange({transaction:h,versions:K.useVersions}))f=B.put(q,Q,P),p++%iJ===0&&(await new Promise(Y=>setTimeout(Y,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:I,value:w}of l.getRange({transaction:h,start:!1}))if(s.some(B=>I.startsWith?.(B+"/"))){E.put(I,w);let[,B]=I.split("/"),K=!B,q=new vw(!K,K);await S(I,q)}e.include_audit&&await S(sJ,Object.assign({},rJ)),await f;let A=Pw(d.path);return A.headers=u(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=Zz(o.path);return o.transaction(()=>{let _=Buffer.alloc(Cp);jz(c,_,0,Cp),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=Pw(null,{fd:c,start:Cp}),f=new Jz.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(oJ,"getBackup")});var Gw=T((sle,Fw)=>{"use strict";var aJ=V(),{handleHDBError:cJ}=Z(),uJ=pb(),lJ=S_(),_J=Xm(),dJ=Xy(),fJ=Fc(),EJ=sp(),hJ=OI(),mJ=MI(),pJ=$c(),SJ=FI(),TJ=XI(),gJ=sw(),RJ=ow(),AJ=lw(),OJ=pw(),bJ=fp(),NJ=Rw(),yJ=Iw(),IJ=Cw(),qw=Uw(),wJ=Hw(),Lp=class extends uJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return SJ(t)}async getDataByHash(t){return await EJ(t)}async searchByHash(t){return await hJ(t)}async getDataByValue(t,r){return await mJ(t,r)}async searchByValue(t){return await pJ(t)}async createSchema(t){return await dJ(t)}async dropSchema(t){return await TJ(t)}async createTable(t,r){return await gJ(t,r)}async dropTable(t){return await bJ(t)}async createAttribute(t){return await lJ(t)}async createRecords(t){return await _J(t)}async updateRecords(t){return await RJ(t)}async upsertRecords(t){try{return await AJ(t)}catch(r){throw cJ(r,null,null,aJ.ERR,r)}}async deleteRecords(t){return await fJ(t)}async dropAttribute(t){return await NJ(t)}async deleteAuditLogsBefore(t){return await OJ(t)}async readAuditLog(t){return await yJ(t)}writeTransaction(t,r,n){return IJ.writeTransaction(t,r,n)}flush(t,r){return qw.flush(t,r)}resetReadTxn(t,r){return qw.resetReadTxn(t,r)}getBackup(t){return wJ(t)}};Fw.exports=Lp});function MJ(){DJ=setInterval(function(){for(let e of Dp)if(e.stale){let t=e[Re]?.url;kw.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},LJ).unref()}var Mp,kw,CJ,Dp,zi,K_,LJ,DJ,Up=Ae(()=>{Mp=v(Dr()),kw=v(V());yn();CJ=100,Dp=new Set,zi=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;if(!this.open)throw new Error("Can not start a read on a transaction that is no longer open");return this.readTxnsUsed=1,this.readTxn=this.lmdbDb.useReadTransaction(),Dp.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),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,Mp.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 A=S();E?E.push?E.push(A):E=[E,A]:E=A}}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<CJ>>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=[]}},K_=class extends zi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Mp.getNextMonotonicTime)())}getReadTxn(){}},LJ=3e4;a(MJ,"startMonitoringTxns");MJ()});function Qe(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 zi;e.timestamp&&(n.timestamp=e.timestamp),n[Re]=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 Vw,Ji=Ae(()=>{Vw=require("../../index");yn();Up();a(Qe,"transaction");(0,Vw._assignPackageExport)("transaction",Qe);Qe.commit=function(e){let t=(e[Re]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Qe.abort=function(e){let t=(e[Re]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var jw={};Ve(jw,{ResourceBridge:()=>Bp});function Hp({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 Yw(e,t){let r=jn(e),n=Hp(e,r);if(!r)throw new Dn.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;Qe(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&&Q_(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||PJ,r=Mn()[t];if(!r)throw(0,Dn.handleHDBError)(new Error,UJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Kw(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*Ww(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 Qw,W_,Dn,zw,Jw,Un,Pp,vp,Xw,UJ,PJ,vJ,BJ,$w,Bp,Zw=Ae(()=>{"use strict";Qw=v(Gw()),W_=v(jo()),Dn=v(Z());ge();zw=v(wc()),Jw=v(Uc()),Un=v(M()),Pp=v(As()),vp=v(Ln()),Xw=v(J());Ji();z_();({HDB_ERROR_MSGS:UJ}=Dn.hdb_errors),PJ="data",vJ=1e4,BJ=10,Bp=class extends Qw.default{static{a(this,"ResourceBridge")}constructor(t){super(t),$w=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,W_.default)(t,"conditions");if(r)throw(0,Dn.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=jn(t);if(!n)throw new Dn.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:Hp(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 Dn.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}]}_t({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 zc({database:t.schema,table:null}),Pp.signalSchemaChange(new vp.SchemaEventMsg(process.pid,Un.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await xp(t.schema),Pp.signalSchemaChange(new vp.SchemaEventMsg(process.pid,Un.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,$w.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,zw.default)(t);(0,Jw.default)(t,n,r.primaryKey);let s,i=Mn()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Qe(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=Q_(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=Mn()[t.schema][t.table],n={user:t.hdb_user};return Qe(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 Kw(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Mn()[t.schema][t.table];if(!r.createdTimeProperty)throw new Dn.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:Un.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,Xw.async_set_timeout)(BJ),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%vJ===0&&await _();return u.length>0&&await _(),s?Kw(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,W_.default)(t,"hashes");if(r)throw r;return Yw(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Yw(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Un.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,W_.default)(t,"value");if(n)throw n;let s=jn(t);if(!s)throw new Dn.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===Un.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:Hp(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 Un.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 Un.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of Ww(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return Ww(r,t.search_values?.[0],t.search_values?.[1])}}};a(Hp,"getSelect");a(Yw,"getRecords");a(jn,"getTable");a(Kw,"createDeleteResponse");a(Ww,"groupRecordsInHistory")});var Cn=T((Sle,eC)=>{"use strict";var{ResourceBridge:HJ}=(Zw(),ee(jw)),xJ=j();xJ.initSync();var J_;function qJ(){return J_||(J_=new HJ,J_)}a(qJ,"getBridge");eC.exports=qJ()});var sC=T((gle,nC)=>{"use strict";var tC=require("lodash"),Jc=require("mathjs"),FJ=require("jsonata"),rC=J();nC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?tC.uniqWith(e,tC.isEqual):e,searchJSON:GJ,mad:Xc.bind(null,Jc.mad),mean:Xc.bind(null,Jc.mean),mode:Xc.bind(null,Jc.mode),prod:Xc.bind(null,Jc.prod),median:Xc.bind(null,Jc.median)};function Xc(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(Xc,"aggregateFunction");function GJ(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(rC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),rC.isEmpty(this.__ala__.res[r])){let n=FJ(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(GJ,"searchJSON")});var oC=T((Ale,iC)=>{"use strict";var pt=require("moment"),qp="YYYY-MM-DDTHH:mm:ss.SSSZZ";pt.suppressDeprecationWarnings=!0;iC.exports={current_date:()=>pt().utc().format("YYYY-MM-DD"),current_time:()=>pt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return pt(e).utc().format("YYYY");case"month":return pt(e).utc().format("MM");case"day":return pt(e).utc().format("DD");case"hour":return pt(e).utc().format("HH");case"minute":return pt(e).utc().format("mm");case"second":return pt(e).utc().format("ss");case"millisecond":return pt(e).utc().format("SSS");default:break}},date:e=>pt(e).utc().format(qp),date_format:(e,t)=>pt(e).utc().format(t),date_add:(e,t,r)=>pt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>pt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=pt(e).utc(),s=pt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>pt().utc().valueOf(),get_server_time:()=>pt().format(qp),offset_utc:(e,t)=>pt(e).utc().utcOffset(t).format(qp)}});var lC=T((Ole,uC)=>{"use strict";var kJ=require("@turf/area"),VJ=require("@turf/length"),$J=require("@turf/circle"),YJ=require("@turf/difference"),KJ=require("@turf/distance"),WJ=require("@turf/boolean-contains"),QJ=require("@turf/boolean-equal"),zJ=require("@turf/boolean-disjoint"),JJ=require("@turf/helpers"),aC=M(),me=J(),Ns=V();uC.exports={geoArea:XJ,geoLength:jJ,geoCircle:ZJ,geoDifference:e2,geoDistance:cC,geoNear:t2,geoContains:r2,geoEqual:n2,geoCrosses:s2,geoConvert:i2};function XJ(e){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return kJ.default(e)}catch(t){return Ns.trace(t,e),NaN}}a(XJ,"geoArea");function jJ(e,t){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return VJ.default(e,{units:t||"kilometers"})}catch(r){return Ns.trace(r,e),NaN}}a(jJ,"geoLength");function ZJ(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return $J.default(e,t,{units:r||"kilometers"})}catch(n){return Ns.trace(n,e,t),NaN}}a(ZJ,"geoCircle");function e2(e,t){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return YJ(e,t)}catch(r){return Ns.trace(r,e,t),NaN}}a(e2,"geoDifference");function cC(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return KJ.default(e,t,{units:r||"kilometers"})}catch(n){return Ns.trace(n,e,t),NaN}}a(cC,"geoDistance");function t2(e,t,r,n){if(me.isEmpty(e)||me.isEmpty(t))return!1;if(me.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return cC(e,t,n)<=r}catch(s){return Ns.trace(s,e,t),!1}}a(t2,"geoNear");function r2(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return WJ.default(e,t)}catch(r){return Ns.trace(r,e,t),!1}}a(r2,"geoContains");function n2(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return QJ.default(e,t)}catch(r){return Ns.trace(r,e,t),!1}}a(n2,"geoEqual");function s2(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return!zJ.default(e,t)}catch(r){return Ns.trace(r,e,t),!1}}a(s2,"geoCrosses");function i2(e,t,r){if(me.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(me.isEmpty(t))throw new Error("geo_type is required");if(me.isEmpty(aC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(aC.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=me.autoCastJSON(e)),JJ[t](e,r)}a(i2,"geoConvert")});var X_=T((Nle,_C)=>{var Xi=sC(),xr=oC(),Zn=lC();_C.exports=e=>{e.aggr.mad=e.aggr.MAD=Xi.mad,e.aggr.mean=e.aggr.MEAN=Xi.mean,e.aggr.mode=e.aggr.MODE=Xi.mode,e.aggr.prod=e.aggr.PROD=Xi.prod,e.aggr.median=e.aggr.MEDIAN=Xi.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Xi.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Xi.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=xr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=xr.current_time,e.fn.extract=e.fn.EXTRACT=xr.extract,e.fn.date=e.fn.DATE=xr.date,e.fn.date_format=e.fn.DATE_FORMAT=xr.date_format,e.fn.date_add=e.fn.DATE_ADD=xr.date_add,e.fn.date_sub=e.fn.DATE_SUB=xr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=xr.date_diff,e.fn.now=e.fn.NOW=xr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=xr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=xr.get_server_time,e.fn.getdate=e.fn.GETDATE=xr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=xr.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 hC=T((yle,EC)=>{"use strict";var jc=require("lodash"),cr=require("alasql");cr.options.cache=!1;var o2=X_(),dC=require("clone"),j_=require("recursive-iterator"),ue=V(),we=J(),ta=Cn(),a2=M(),{hdb_errors:c2}=Z(),{getDatabases:fC}=(ge(),ee(xe)),u2="IS NULL",Pn="There was a problem performing this search. Please check the logs and try again.";o2(cr);var Fp=class{static{a(this,"SQLSearch")}constructor(t,r){if(we.isEmpty(t))throw ue.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(),we.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!we.isEmptyOrZeroLength(n))return ue.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw ue.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ue.error(n),new Error(Pn)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw ue.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ue.error(n),new Error(Pn)}if(Object.keys(this.data).length===0)return ue.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw ue.error("Error thrown from processJoins in SQLSearch class method search."),ue.error(n),new Error(Pn)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw ue.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ue.error(n),new Error(Pn)}try{return t=await this._finalSQL(),t}catch(n){throw ue.error("Error thrown from finalSQL in SQLSearch class method search."),ue.error(n),new Error(Pn)}}_getColumns(){let t=new j_(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(dC(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=fC()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(we.isEmpty(this.statement.where)){ue.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new j_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!we.isEmpty(r)&&r.right)if(we.isNotEmptyAndHasValue(r.right.value)){let n=we.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new cr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=we.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new cr.yy.LogicValue({value:i}):n instanceof cr.yy.StringValue&&we.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new cr.yy.NumValue({value:i}))});if(t){ue.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new j_(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(!we.isEmpty(a2.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(we.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(we.isEmptyOrZeroLength(r.left.columnid)||we.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(we.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"=":!we.isEmpty(r.right.value)||!we.isEmpty(r.left.value)?n.add(we.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(we.isEmptyOrZeroLength(this.all_table_attributes)&&we.isEmptyOrZeroLength(this.statement.from)&&we.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(we.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);we.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(we.isEmptyOrZeroLength(this.all_table_attributes)&&!we.isEmptyOrZeroLength(this.columns.columns))return t;if(we.isEmptyOrZeroLength(this.all_table_attributes)&&we.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await cr.promise(r)}catch(r){throw ue.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ue.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(dC(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(we.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(u2)>-1&&this.tables.forEach(s=>{let i={columnid:fC()[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),!we.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!we.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await ta.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 ue.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ue.error(l),new Error(Pn)}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 ta.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 ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ue.error(l),new Error(Pn)}else if(!we.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!we.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 ta.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 ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ue.error(l),new Error(Pn)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await ta.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 ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ue.error(l),new Error(Pn)}}}_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 cr.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 cr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new cr.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 cr.yy.FuncValue:new cr.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 cr.promise(h,t),t=null}catch(E){throw ue.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ue.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,A=p.length;S<A;S++){let I=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[I]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new j_(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 ue.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ue.error(i),new Error(Pn)}}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 ta.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 ue.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ue.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();ue.trace(`Final SQL: ${s}`),n=await cr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),ue.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw ue.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ue.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 ue.error(c2.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),ue.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 ta.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 ue.error("There was an error when processing this SQL operation. Check your logs"),ue.error(o),new Error(Pn)}}return Object.values(Object.values(this.data)[0].__merged_data)}};EC.exports=Fp});var tn=T((wle,mC)=>{"use strict";var l2=hb();mC.exports={searchByConditions:d2,searchByHash:f2,searchByValue:E2,search:h2};var Gp=Cn(),{transformReq:kp}=J(),_2=hC();async function d2(e){return kp(e),Gp.searchByConditions(e)}a(d2,"searchByConditions");async function f2(e){kp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Gp.searchByHash(e))r&&t.push(r);return t}a(f2,"searchByHash");async function E2(e){kp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Gp.searchByValue(e))t.push(r);return t}a(E2,"searchByValue");function h2(e,t){try{let r=new l2(e);r.validate(),new _2(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(h2,"search")});var Z_=T((Lle,pC)=>{"use strict";var m2=Cn();pC.exports={writeTransaction:p2};function p2(e,t,r){return m2.writeTransaction(e,t,r)}a(p2,"writeTransaction")});var RC=T((Ule,gC)=>{"use strict";var S2=tn(),T2=Rs(),SC=V(),g2=rn(),Mle=Z_(),R2=require("clone"),$p=require("alasql"),A2=X_(),TC=require("util"),O2=TC.promisify(T2.getTableSchema),b2=TC.promisify(S2.search),N2=M(),Vp=J();A2($p);gC.exports={update:I2};var y2="There was a problem performing this update. Please check the logs and try again.";async function I2({statement:e,hdb_user:t}){let r=await O2(e.table.databaseid,e.table.tableid),n=w2(e.columns);Vp.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=R2(s),c=Vp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=$p.parse(u).statements[0],l=await b2(_),d=C2(n,l);return L2(o,d,t)}a(I2,"update");function w2(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=$p.compile(`SELECT ${r.expression.toString()} AS [${N2.FUNC_VAL}] FROM ?`)}),t}catch(t){throw SC.error(t),new Error(y2)}}a(w2,"createUpdateRecord");function C2(e,t){return Vp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(C2,"buildUpdateRecords");async function L2(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await g2.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){SC.error(`Error delete new_attributes from update response: ${i}`)}return s}a(L2,"updateRecords")});var OC=T((Hle,AC)=>{var D2=require("alasql"),M2=tn(),U2=V(),P2=Cn(),Kp=require("util"),Yp=J(),v2=M(),B2=Rs(),vle=Z_(),Ble=rn(),H2="record",x2="successfully deleted",q2=Kp.callbackify(V2),F2=Kp.promisify(M2.search),G2=Kp.promisify(B2.getTableSchema);AC.exports={convertDelete:q2};function k2(e){return`${e.deleted_hashes.length} ${H2}${e.deleted_hashes.length===1?"":"s"} ${x2}`}a(k2,"generateReturnMessage");async function V2({statement:e,hdb_user:t}){let r=await G2(e.table.databaseid,e.table.tableid);Yp.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Yp.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=D2.parse(o).statements[0],u={operation:v2.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await F2(c);let _=await P2.deleteRecords(u);return Yp.isEmptyOrZeroLength(_.message)&&(_.message=k2(_)),delete _.txn_time,_}catch(_){throw U2.error(_),_.hdb_code?_.message:_}}a(V2,"convertDelete")});var wC=T((qle,IC)=>{"use strict";var $2=xi(),{hdb_errors:bC}=Z(),{getDatabases:NC}=(ge(),ee(xe));IC.exports={checkSchemaExists:yC,checkSchemaTableExists:Y2,schema_describe:$2};async function yC(e){if(!NC()[e])return bC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(yC,"checkSchemaExists");async function Y2(e,t){let r=await yC(e);if(r)return r;if(!NC()[e][t])return bC.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Y2,"checkSchemaTableExists")});var Zc=T((Gle,K2)=>{K2.exports={name:"harperdb",version:"4.3.0-alpha.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.2",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 nu={};Ve(nu,{addAnalyticsListener:()=>ru,recordAction:()=>qr,recordActionBinary:()=>nn,setAnalyticsEnabled:()=>W2});function W2(e){xC=e}function qr(e,t,r,n,s){if(!xC)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=rd.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},rd.set(i,o)}ed||Q2()}function nn(e,t,r,n,s){qr(!!e,t,r,n,s)}function ru(e){GC.push(e)}function Q2(){ed=performance.now(),setTimeout(async()=>{let e=performance.now()-ed;ed=0;let t=[],r={time:Date.now(),period:e,threadId:ji.threadId,metrics:t};for(let[s,i]of rd){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 VC()}let n=process.memoryUsage();t.push({metric:"memory",threadId:ji.threadId,byThread:!0,...n});for(let s of GC)s(t);rd=new Map,ji.parentPort?ji.parentPort.postMessage({type:FC,report:r}):KC({report:r})},qC).unref()}async function z2(e,t=6e4){let r=zp(),n=$C(),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:A}=p;for(let I of S||[]){let{path:w,method:B,type:K,metric:q,count:P,total:Q,distribution:Y,threads:z,...re}=I;P||(P=1);let Ie=q+(w?"-"+w:"");B!==void 0&&(Ie+="-"+B),K!==void 0&&(Ie+="-"+K);let ne=o.get(Ie);if(ne){if(ne.threads){let de=ne.threads[A];if(de)ne=de;else{ne.threads[A]=Object.assign({},re);continue}}ne.count||(ne.count=1);let ct=ne.count;for(let de in re){let ut=re[de];typeof ut=="number"&&(ne[de]=(ne[de]*ct+ut*P)/(ct+P))}ne.count+=P,Q>=0&&(ne.total+=Q,ne.ratio=ne.total/ne.count)}else ne=Object.assign({period:t},I),delete ne.distribution,o.set(Ie,ne),ne.byThread&&(ne.threads=[],ne.threads[A]=Object.assign({},re),u.push(ne));if(Y){Y=Y.map(de=>typeof de=="number"?{value:de,count:1}:de);let ct=c.get(Ie);ct?ct.push(...Y):c.set(Ie,Y)}}await VC()}for(let h of u){let{path:p,method:S,type:A,metric:I,count:w,total:B,distribution:K,threads:q,...P}=h;q=q.filter(Q=>Q);for(let Q in P){if(typeof h[Q]!="number")continue;let Y=0;for(let z of q){let re=z[Q];typeof re=="number"&&(Y+=re)}h[Q]=Y}h.count=q.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((de,ut)=>de.value>ut.value?1:-1);let A=S.count-1,I=[],w=0,B=0,K;for(let de of kC){let ut=A*de;for(;w<ut;)K=p[B++],w+=K.count,B===1&&w--;let Tn=p[B>1?B-2:0];K||(K=p[0]),I.push(K.value-(K.value-Tn.value)*(w-ut)/K.count)}let[q,P,Q,Y,z,re,Ie,ne,ct]=I;Object.assign(S,{p1:q,p10:P,p25:Q,median:Y,p75:z,p90:re,p95:Ie,p99:ne,p999:ct})}let l;for(let[h,p]of o)p.id=(0,td.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,td.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-CC,active:E-LC,time:d,...process.memoryUsage()};n.primaryStore.put(h,p,{append:!0}).then(S=>{S||n.primaryStore.put(h,p)})}CC=f,LC=E}async function DC(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function zp(){return MC||(MC=_t({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function $C(){return UC||(UC=_t({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function j2(){YC=!0;let e=(0,tu.get)(Qp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await z2(qC,e),await DC(zp(),J2),await DC($C(),X2)},Math.min(e/2,2147483647)).unref()}function KC(e,t){let r=e.report;r.threadId=t?.threadId||ji.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(PC+=n.mean*n.count);r.totalBytesProcessed=PC,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(vC.get(t))}),vC.set(t,t.performance.eventLoopUtilization())),r.id=(0,td.getNextMonotonicTime)(),zp().primaryStore.put(r.id,r),YC||j2(),Z2&&(WC=t4(r))}async function t4(e){if(await WC,!ni){let r=(0,eu.dirname)((0,HC.getLogFilePath)());try{ni=await(0,Wp.open)((0,eu.join)(r,"analytics.log"),"r+")}catch{ni=await(0,Wp.open)((0,eu.join)(r,"analytics.log"),"w+")}}let t=(await ni.stat()).size;if(t>e4){let r=Buffer.alloc(t);await ni.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ni.write(r,{position:0}),await ni.truncate(r.length),t=r.length}await ni.write(JSON.stringify(e)+`
8
- `,t)}var ji,BC,HC,eu,Wp,td,tu,Qp,rd,xC,ed,qC,FC,GC,kC,CC,LC,VC,J2,X2,MC,UC,YC,PC,vC,Z2,WC,ni,e4,ys=Ae(()=>{ji=require("worker_threads"),BC=v(tt());ge();HC=v(V()),eu=require("path"),Wp=require("fs/promises"),td=v(Dr()),tu=v(j()),Qp=v(M());nr();(0,tu.initSync)();rd=new Map,xC=(0,tu.get)(Qp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(W2,"setAnalyticsEnabled");a(qr,"recordAction");lt.recordAnalytics=qr;a(nn,"recordActionBinary");ed=0,qC=1e3,FC="analytics-report",GC=[];a(ru,"addAnalyticsListener");kC=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Q2,"sendAnalytics");a(z2,"aggregation");CC=0,LC=0,VC=a(()=>new Promise(setImmediate),"rest");a(DC,"cleanup");J2=36e5,X2=31536e6;a(zp,"getRawAnalyticsTable");a($C,"getAnalyticsTable");(0,BC.setChildListenerByType)(FC,KC);a(j2,"startScheduledTasks");PC=0,vC=new Map,Z2=!1;a(KC,"recordAnalytics");e4=1e6;a(t4,"logAnalytics")});var St=T((t_e,fL)=>{"use strict";var Gt=j();Gt.initSync();var r4=require("fs-extra"),n4=require("semver"),ou=require("path"),{monotonicFactory:s4}=require("ulidx"),zC=s4(),i4=require("util"),JC=require("child_process"),o4=i4.promisify(JC.exec),a4=JC.spawn,Oe=nt(),Me=M(),Zp=J(),Fr=V(),nd=gs(),c4=Z_(),su=Lr(),{onMessageByType:u4}=tt(),{isMainThread:l4}=require("worker_threads"),{Encoder:_4,decode:eS}=require("msgpackr"),XC=new _4,{isEmpty:ro}=Zp,jC=vr(),d4=48*36e11,f4=5e9;l4&&u4(Me.ITC_EVENT_TYPES.RESTART,()=>{sn=void 0,to=void 0});var{connect:E4,StorageType:ZC,RetentionPolicy:eL,AckPolicy:sd,DeliverPolicy:id,DiscardPolicy:h4,NatsConnection:Xle,JetStreamManager:jle,JetStreamClient:Zle,StringCodec:e_e,JSONCodec:m4,createInbox:tS,headers:p4,ErrorCode:QC}=require("nats"),{PACKAGE_ROOT:S4}=M(),T4=Zc(),{recordAction:g4}=(ys(),ee(nu)),tL=m4(),R4="clustering",A4=T4.engines[Oe.NATS_SERVER_NAME],O4=ou.join(S4,"dependencies"),jp=ou.join(O4,`${process.platform}-${process.arch}`,Oe.NATS_BINARY_NAME),Jp,Xp,iu,Zi,eo;fL.exports={runCommand:rL,checkNATSServerInstalled:b4,createConnection:rS,getConnection:od,getJetStreamManager:au,getJetStream:sL,getNATSReferences:ur,getServerList:y4,createLocalStream:nS,listStreams:iL,deleteLocalStream:I4,getServerConfig:cu,listRemoteStreams:w4,viewStream:C4,viewStreamIterator:L4,publishToStream:D4,createWorkQueueStream:M4,addSourceToWorkStream:aL,request:P4,removeSourceFromWorkStream:uL,reloadNATS:sS,reloadNATSHub:v4,reloadNATSLeaf:B4,extractServerName:cL,requestErrorHandler:H4,updateWorkStream:x4,createLocalTableStream:_L,createTableStreams:q4,purgeTableStream:dL,purgeSchemaTableStreams:F4,getStreamInfo:G4,updateLocalStreams:V4,closeConnection:N4,getJsmServerName:uu,addNatsMsgHeader:oL,updateIngestStreamConsumer:U4,clearClientCache:nL};async function rL(e,t=void 0){let{stdout:r,stderr:n}=await o4(e,{cwd:t});if(n)throw new Error(n.replace(`
6
+ `)},Ak="certificate.pem",Ok="privateKey.pem",bk="ca.pem";MO.exports={CERTIFICATE_VALUES:Rk,CERTIFICATE_PEM_NAME:Ak,PRIVATEKEY_PEM_NAME:Ok,CA_PEM_NAME:bk}});var Xe=g((poe,PO)=>{"use strict";var nr=require("validate.js");nr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||nr.validators.type.checks[t](e)?null:` must be a '${t}' value`};nr.validators.type.checks={Object:function(e){return nr.isObject(e)&&!nr.isArray(e)},Array:nr.isArray,Integer:nr.isInteger,Number:nr.isNumber,String:nr.isString,Date:nr.isDate,Boolean:function(e){return typeof e=="boolean"}};nr.validators.hasValidFileExt=function(e,t){return nr.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};PO.exports={validateObject:yk,validateObjectAsync:Nk,validateBySchema:Ik};function yk(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=nr(e,t,{format:"flat"});return r?new Error(r):null}a(yk,"validateObject");async function Nk(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await nr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(Nk,"validateObjectAsync");function Ik(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(Ik,"validateBySchema")});var yh=g((goe,GO)=>{"use strict";var xO=require("fs-extra"),ie=require("joi"),wk=require("os"),{boolean:ye,string:sr,number:At,array:bh}=ie.types(),{totalmem:vO}=require("os"),Ci=require("path"),Ck=K(),Kl=Q(),Toe=UO(),BO=U(),Dk=Xe(),HO="log",Lk="components",Mk="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Uk="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Pk="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",vk="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",Bk="rootPath config parameter is undefined",Hk="clustering.enabled config parameter is undefined",Di=At.min(0).required(),Wl=bh.items({host:sr.required(),port:Di}).empty(null),Yn;GO.exports={configValidator:xk,routesValidator:$k,route_constraints:Wl};function xk(e){if(Yn=e.rootPath,Kl.isEmpty(Yn))throw Bk;let t=ye.required(),r=At.min(0).max(1e3).empty(null).default(Vk),n=sr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(ac),s=sr.optional().empty(null),i=sr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ie.string().empty(null).default(ac),c=ie.custom(Fk).empty(null).default(ac),u=e.clustering?.enabled;if(Kl.isEmpty(u))throw Hk;let _;return u===!0?_=ie.object({enabled:t,hubServer:ie.object({cluster:ie.object({name:ie.required().empty(null),network:ie.object({port:Di,routes:Wl}).required()}).required(),leafNodes:ie.object({network:ie.object({port:Di}).required()}).required(),network:ie.object({port:Di}).required()}).required(),leafServer:ie.object({network:ie.object({port:Di,routes:Wl}).required(),streams:ie.object({maxAge:At.min(120).allow(null).optional(),maxBytes:At.min(1).allow(null).optional(),maxMsgs:At.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ie.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:ye.optional(),databaseLevel:ye.optional(),tls:ie.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:ye.required(),verify:ye.optional()}),user:sr.optional().empty(null)}).required():_=ie.object({enabled:t,tls:ie.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:ye.required()})}).required(),ie.object({authentication:ie.object({authorizeLocal:ye,cacheTTL:At.required(),enableSessions:ye}),analytics:ie.object({aggregatePeriod:At}),componentsRoot:n.optional(),clustering:_,localStudio:ie.object({enabled:t}).required(),logging:ie.object({auditAuthEvents:ie.object({logFailed:ye,logSuccessful:ye}),file:ye.required(),level:ie.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ie.object({enabled:ye.optional(),compress:ye.optional(),interval:sr.custom(kk).optional().empty(null),maxSize:sr.custom(qk).optional().empty(null),path:sr.optional().empty(null).default(ac)}).required(),root:n,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:ie.object({network:ie.object({cors:ye.optional(),corsAccessList:bh.optional(),headersTimeout:At.min(1).optional(),keepAliveTimeout:At.min(1).optional(),port:At.optional().empty(null),domainSocket:ie.optional().empty("hdb/operations-server").default(ac),securePort:At.optional().empty(null),timeout:At.min(1).optional()}).optional(),tls:ie.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:sr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ie.object({network:ie.object({port:Di,securePort:Di,mtls:ie.alternatives([ye.optional(),ie.object({user:sr.optional(),certificateAuthority:s,required:ye.optional()})])}).required(),webSocket:ye.optional(),requireAuthentication:ye.optional()}),http:ie.object({compressionThreshold:At.optional(),cors:ye.optional(),corsAccessList:bh.optional(),headersTimeout:At.min(1).optional(),port:At.min(0).optional().empty(null),securePort:At.min(0).optional().empty(null),mtls:ie.alternatives([ye.optional(),ie.object({user:sr.optional(),certificateAuthority:s,required:ye.optional()})])}).required(),threads:ie.alternatives(r.optional(),ie.object({count:r.optional(),debug:ie.alternatives(ye.optional(),ie.object({startingPort:At.min(1).optional(),host:sr.optional(),waitForDebugger:ye.optional()})),maxHeapMemory:At.min(0).optional()})),storage:ie.object({writeAsync:ye.required(),overlappingSync:ye.optional(),caching:ye.optional(),compression:ye.optional(),noReadAhead:ye.optional(),path:c,prefetchWrites:ye.optional()}).required(),ignoreScripts:ye.optional(),tls:ie.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:sr.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(xk,"configValidator");function Gk(e){return xO.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Gk,"doesPathExist");function Fk(e,t){ie.assert(e,sr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Gk(e);if(r)return t.message(r)}a(Fk,"validatePath");function qk(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(Pk):e}a(qk,"validateRotationMaxSize");function kk(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Uk);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(vk):e}a(kk,"validateRotationInterval");function Vk(e,t){let r=t.state.path.join("."),n=wk.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||vO();return i=Math.round(Math.min(i,vO())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),Ck.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(Vk,"setDefaultThreads");function ac(e,t){let r=t.state.path.join(".");if(!Kl.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Kl.isEmpty(Yn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Ci.join(Yn,Lk);case"logging.root":return Ci.join(Yn,HO);case"clustering.leafServer.streams.path":return Ci.join(Yn,"clustering","leaf");case"storage.path":let n=Ci.join(Yn,BO.LEGACY_DATABASES_DIR_NAME);return xO.existsSync(n)?n:Ci.join(Yn,BO.DATABASES_DIR_NAME);case"logging.rotation.path":return Ci.join(Yn,HO);case"operationsApi.network.domainSocket":return r==null?null:Ci.join(Yn,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(ac,"setDefaultRoot");function $k(e){let t=ie.object({routes:Wl});return Dk.validateBySchema({routes:e},t)}a($k,"routesValidator")});var Li={};$e(Li,{server:()=>Ze});var FO,Ze,ir=Re(()=>{FO=require("../../index"),Ze={};(0,FO._assignPackageExport)("server",Ze)});var Cr=g((Ooe,zO)=>{"use strict";var wr=U(),Dt=Q(),Ot=K(),{configValidator:Yk,routesValidator:qO}=yh(),or=require("fs-extra"),Kk=require("yaml"),Rn=require("path"),Wk=require("is-number"),VO=require("properties-reader"),Qk=require("lodash"),{handleHDBError:zk}=ne(),{HTTP_STATUS_CODES:Jk,HDB_ERROR_MSGS:Ql}=Nr(),Aoe=require("minimist"),{server:jk}=(ir(),se(Li)),{DATABASES_PARAM_CONFIG:cc,CONFIG_PARAMS:Ir,CONFIG_PARAM_MAP:An}=wr,Xk="Unable to get config value because config is uninitialized",Zk="Config successfully initialized",eV="Error backing up config file",tV="Empty parameter sent to getConfigValue",$O=Rn.join(wr.PACKAGE_ROOT,"config","yaml",wr.HDB_DEFAULT_CONFIG_FILE),rV="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",kO={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"},zl,bt,Jl;zO.exports={createConfigFile:nV,getDefaultConfig:sV,getConfigValue:KO,initConfig:Ih,flattenConfig:Ho,updateConfigValue:WO,updateConfigObject:oV,getConfiguration:uV,setConfiguration:lV,readConfigFile:Ch,getClusteringRoutes:_V,initOldConfig:QO,getConfigFromFile:dV,getConfigFilePath:Mi,addConfig:fV,deleteConfigFromFile:EV,getConfigObj:hV};function nV(e){let t=zs($O);zl=Ho(t.toJSON());let r;for(let o in e){let c=An[o.toLowerCase()];if(c===Ir.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=Nh(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){Ot.error(l)}}}r&&YO(t,r),wh(t);let n=t.toJSON();bt=Ho(n);let s=t.getIn(["rootPath"]),i=Rn.join(s,wr.HDB_CONFIG_FILE);or.createFileSync(i),or.writeFileSync(i,String(t)),Ot.trace(`Config file written to ${i}`)}a(nV,"createConfigFile");function YO(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(cc.TABLES))for(let i in n[s][cc.TABLES])for(let o in n[s][cc.TABLES][i]){let c=n[s][cc.TABLES][i][o],u=[Ir.DATABASES,s,cc.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=[Ir.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Ot.error("Error parsing schemas CLI/env config arguments",n)}}a(YO,"setSchemasConfig");function sV(e){if(zl===void 0){let r=zs($O);zl=Ho(r.toJSON())}let t=An[e.toLowerCase()];if(t!==void 0)return zl[t.toLowerCase()]}a(sV,"getDefaultConfig");function KO(e){if(e==null){Ot.error(tV);return}if(bt===void 0){Ot.trace(Xk);return}let t=An[e.toLowerCase()];if(t!==void 0)return bt[t.toLowerCase()]}a(KO,"getConfigValue");function Mi(e=Dt.getPropsFilePath()){let t=Dt.getEnvCliRootPath();return t?Rn.join(t,wr.HDB_CONFIG_FILE):VO(e).get(wr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Mi,"getConfigFilePath");function Ih(e=!1){if(bt===void 0||e){let t;if(!Dt.noBootFile()){t=Dt.getPropsFilePath();try{or.accessSync(t,or.constants.F_OK|or.constants.R_OK)}catch(i){throw Ot.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Mi(t),n;if(r.includes("config/settings.js"))try{QO(r);return}catch(i){if(i.code!==wr.NODE_ERROR_CODES.ENOENT)throw i}try{n=zs(r)}catch(i){if(i.code===wr.NODE_ERROR_CODES.ENOENT){Ot.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 Ot.error(i),new Error(`Error reading HarperDB config file at ${r}`)}iV(n,r),wh(n);let s=n.toJSON();if(jk.config=s,bt=Ho(s),bt.logging_rotation_rotate)for(let i in kO)bt[i]&&Ot.error(`Config ${kO[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Ot.trace(Zk)}}a(Ih,"initConfig");function iV(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Rn.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Rn.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Rn.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(Ot.trace("Updating config file with missing config params"),or.writeFileSync(t,String(e)))}a(iV,"checkForUpdatedConfig");function wh(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t?.http?.threads&&(t.threads=t?.http?.threads);let r=Yk(t);if(r.error)throw Ql.CONFIG_VALIDATION(r.error.message);typeof r.value.threads=="object"?e.setIn(["threads","count"],r.value.threads.count):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(wh,"validateConfig");function oV(e,t){bt===void 0&&(bt={});let r=An[e.toLowerCase()];if(r===void 0){Ot.trace(`Unable to update config object because config param '${e}' does not exist`);return}bt[r.toLowerCase()]=t}a(oV,"updateConfigObject");function WO(e,t,r=void 0,n=!1,s=!1,i=!1){bt===void 0&&Ih();let o=KO(An.hdb_root),c=Rn.join(o,wr.HDB_CONFIG_FILE),u=zs(c),_;if(r===void 0&&e.toLowerCase()===Ir.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=An[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Nh(f,t);u.setIn([...E],h)}else for(let f in r){let E=An[f.toLowerCase()];if(E===Ir.HTTP_SECUREPORT&&r[f]===bt[Ir.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Ir.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===bt[Ir.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Ir.DATABASES){_=r[f];continue}if(E?.startsWith("threads_")){let h=u.getIn(["threads"]);h>=0&&(u.deleteIn(["threads"]),u.setIn(["threads","count"],h))}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=Nh(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){Ot.error(T)}}}_&&YO(u,_),wh(u);let l=u.getIn(["rootPath"]),d=Rn.join(l,wr.HDB_CONFIG_FILE);n===!0&&aV(c,l),or.writeFileSync(d,String(u)),s&&(bt=Ho(u.toJSON())),Ot.trace(`Config parameter: ${e} updated with value: ${t}`)}a(WO,"updateConfigValue");function aV(e,t){try{let r=Rn.join(t,"backup",`${wr.HDB_CONFIG_FILE}.bak`);or.copySync(e,r),Ot.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Ot.error(eV),Ot.error(r)}}a(aV,"backupConfigFile");var cV=["databases"];function Ho(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)),Jl=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])&&!cV.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;!Ir[u.toUpperCase()]&&An[u]&&(s[An[u].toLowerCase()]=o[c]),s[u]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Ho,"flattenConfig");function Nh(e,t){if(e===Ir.CLUSTERING_NODENAME||e===Ir.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(Wk(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(Nh,"castConfigValue");function uV(){let e=Dt.getPropsFilePath(),t=Mi(e);return zs(t).toJSON()}a(uV,"getConfiguration");async function lV(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return WO(void 0,void 0,s,!0),rV}catch(i){throw typeof i=="string"||i instanceof String?zk(i,i,Jk.BAD_REQUEST,void 0,void 0,!0):i}}a(lV,"setConfiguration");function Ch(){let e=Dt.getPropsFilePath();try{or.accessSync(e,or.constants.F_OK|or.constants.R_OK)}catch(n){if(!Dt.noBootFile())throw Ot.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Mi(e);return zs(t).toJSON()}a(Ch,"readConfigFile");function zs(e){return Kk.parseDocument(or.readFileSync(e,"utf8"),{simpleKeys:!0})}a(zs,"parseYamlDoc");function _V(){let e=Ch(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Dt.isEmptyOrZeroLength(t)?[]:t;let r=qO(t);if(r)throw Ql.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Dt.isEmptyOrZeroLength(n)?[]:n;let s=qO(n);if(s)throw Ql.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 Ql.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(_V,"getClusteringRoutes");function QO(e){let t=VO(e);bt={};for(let r in An){let n=t.get(r.toUpperCase());if(Dt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=An[r].toLowerCase();s===Ir.LOGGING_ROOT?bt[s]=Rn.dirname(n):bt[s]=n}return bt}a(QO,"initOldConfig");function dV(e){let t=Ch();return Qk.get(t,e.replaceAll("_","."))}a(dV,"getConfigFromFile");async function fV(e,t){let r=zs(Mi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await or.writeFile(Mi(),String(r))}a(fV,"addConfig");function EV(e){let t=Mi(Dt.getPropsFilePath()),r=zs(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Rn.join(n,wr.HDB_CONFIG_FILE);or.writeFileSync(s,String(r))}a(EV,"deleteConfigFromFile");function hV(){return Jl||(Ih(),Jl)}a(hV,"getConfigObj")});var re=g((yoe,ZO)=>{"use strict";var Dh=require("fs-extra"),Ui=require("path"),JO=require("os"),mV=require("properties-reader"),lc=K(),uc=Q(),ue=U(),jl=Cr(),pV="Error initializing environment manager",Xl="BOOT_PROPS_FILE_PATH",jO=!1,SV={[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},ms={};ZO.exports={BOOT_PROPS_FILE_PATH:Xl,getHdbBasePath:TV,setHdbBasePath:gV,get:XO,initSync:AV,setProperty:Me,initTestEnvironment:OV};function TV(){return ms[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(TV,"getHdbBasePath");function gV(e){ms[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(gV,"setHdbBasePath");function XO(e){let t=jl.getConfigValue(e);return t===void 0?ms[e]:t}a(XO,"get");function Me(e,t){SV[e]&&(ms[e]=t),jl.updateConfigObject(e,t)}a(Me,"setProperty");function RV(){let e;try{e=uc.getPropsFilePath(),Dh.accessSync(e,Dh.constants.F_OK|Dh.constants.R_OK),jO=!0;let t=mV(e);return ms[ue.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ue.HDB_SETTINGS_NAMES.INSTALL_USER),ms[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ms[Xl]=e,!0}catch{return lc.trace(`Environment manager found no properties file at ${e}`),!1}}a(RV,"doesPropFileExist");function AV(e=!1){try{(jO||RV()||uc.noBootFile())&&(jl.initConfig(e),ms[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=jl.getConfigValue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){lc.error(pV),lc.error(t),console.error(t),process.exit(1)}}a(AV,"initSync");function OV(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=Ui.join(__dirname,"../../","unitTests");ms[Xl]=Ui.join(u,"hdb_boot_properties.file"),Me(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ui.join(u,"settings.test")),Me(ue.HDB_SETTINGS_NAMES.INSTALL_USER,JO.userInfo()?JO.userInfo().username:void 0),Me(ue.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Me(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ui.join(u,"envDir","log")),Me(ue.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Me(ue.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Me(ue.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Me(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ui.join(u,"envDir")),Me(ue.CONFIG_PARAMS.STORAGE_PATH,Ui.join(u,"envDir")),s&&(Me(ue.CONFIG_PARAMS.HTTP_SECUREPORT,XO(ue.CONFIG_PARAMS.HTTP_PORT)),Me(ue.CONFIG_PARAMS.HTTP_PORT,null)),Me(ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Me(ue.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Me(ue.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,uc.isEmpty(i)?!1:i),Me(ue.CONFIG_PARAMS.HTTP_CORS,uc.isEmpty(i)?!1:i),Me(ue.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Me(ue.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Me(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Me(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Me(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ui.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Me(ue.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,uc.isEmpty(c)?!1:c),o&&(Me("CORS_ACCESSLIST",o),Me(ue.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Me(ue.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Me(ue.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Me(ue.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Me(ue.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Me(ue.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Me(ue.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Xl}. Please check your boot props and settings files`;lc.fatal(r),lc.error(t)}}a(OV,"initTestEnvironment")});var Qe=g((Ioe,ob)=>{"use strict";var hc=U(),bV=Q(),ar=re(),mc=require("path"),yV=require("minimist"),eb=require("fs-extra"),tb=require("lodash");ar.initSync();var{CONFIG_PARAMS:Js,DATABASES_PARAM_CONFIG:_c,SYSTEM_SCHEMA_NAME:Zl}=hc,dc,fc,Ec;function rb(){if(dc!==void 0)return dc;if(ar.getHdbBasePath()!==void 0)return dc=ar.get(Js.STORAGE_PATH)||mc.join(ar.getHdbBasePath(),hc.DATABASES_DIR_NAME),dc}a(rb,"getBaseSchemaPath");function nb(){if(fc!==void 0)return fc;if(ar.getHdbBasePath()!==void 0)return fc=ib(Zl),fc}a(nb,"getSystemSchemaPath");function sb(){if(Ec!==void 0)return Ec;if(ar.getHdbBasePath()!==void 0)return Ec=ar.get(hc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||mc.join(ar.getHdbBasePath(),hc.TRANSACTIONS_DIR_NAME),Ec}a(sb,"getTransactionAuditStoreBasePath");function NV(e,t){let r=ar.get(Js.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||mc.join(sb(),e.toString())}a(NV,"getTransactionAuditStorePath");function ib(e,t){e=e.toString(),t=t&&t.toString();let r=ar.get(hc.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||mc.join(rb(),e)}a(ib,"getSchemaPath");function IV(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,yV(process.argv));let n=r[Js.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!bV.isObject(n))throw o;i=n}for(let o of i){let c=o[Zl];if(!c)continue;let u=ar.get(Js.DATABASES);u=u??{};let _=c?.tables?.[t]?.[_c.PATH];if(_)return tb.set(u,[Zl,_c.TABLES,t,_c.PATH],_),ar.setProperty(Js.DATABASES,u),_;let l=c?.[_c.PATH];if(l)return tb.set(u,[Zl,_c.PATH],l),ar.setProperty(Js.DATABASES,u),l}}let s=r[Js.STORAGE_PATH.toUpperCase()];if(s){if(!eb.pathExistsSync(s))throw new Error(s+" does not exist");let i=mc.join(s,e);return eb.mkdirsSync(i),ar.setProperty(Js.STORAGE_PATH,s),i}return nb()}a(IV,"initSystemSchemaPaths");function wV(){dc=void 0,fc=void 0,Ec=void 0}a(wV,"resetPaths");ob.exports={getBaseSchemaPath:rb,getSystemSchemaPath:nb,getTransactionAuditStorePath:NV,getTransactionAuditStoreBasePath:sb,getSchemaPath:ib,initSystemSchemaPaths:IV,resetPaths:wV}});var Dr=g((Loe,_b)=>{"use strict";var CV=Nr().LMDB_ERRORS_ENUM,Coe=require("lmdb"),DV=_t(),Doe=require("buffer").Buffer,{OVERFLOW_MARKER:ab,MAX_SEARCH_KEY_LENGTH:e_}=DV,cb=["number","string","symbol","boolean","bigint"];function LV(e){if(e=e?.primaryStore||e,!e)throw new Error(CV.ENV_REQUIRED)}a(LV,"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 UV(e){return e instanceof Date?e.valueOf():e}a(UV,"convertKeyValueToWrite");function PV(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(cb.includes(typeof e))return e.length>e_?[e.slice(0,e_)+ab]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(cb.includes(typeof i))i.length>e_?r.push(i.slice(0,e_)+ab):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(PV,"getIndexedValues");var t_=0,ub=0;function lb(){ub=Date.now()-performance.now()}a(lb,"adjustStartTime");lb();var vV=6e4;setInterval(lb,vV).unref();function BV(){let e=performance.now()+ub;return e>t_?(t_=e,e):(t_+=488e-6,t_)}a(BV,"getNextMonotonicTime");_b.exports={validateEnv:LV,stringifyData:MV,convertKeyValueToWrite:UV,getNextMonotonicTime:BV,getIndexedValues:PV}});var db,On,Lh,pc=Re(()=>{db=require("events"),On=class extends db.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new Lh;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)}},Lh=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 Ph={};$e(Ph,{loadGQLSchema:()=>GV,start:()=>Uh,startOnMainThread:()=>xV});function Uh({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(P){if(P.kind==="NonNullType"){let J=H(P.type);return J.nullable=!1,J}if(P.kind==="ListType")return{type:"array",elements:H(P.type)};let B={type:P.name?.value};return Object.defineProperty(B,"location",{value:P.loc.startToken}),B};a(H,"getProperty");let T=S.name.value,b=[],R={table:null,database:null,properties:b};f.set(T,R);for(let P of S.directives){if(P.name.value==="table"){for(let k of P.arguments)R[k.name.value]=k.value.value;R.schema&&(R.database=R.schema),R.table||(R.table=T),R.audit&&(R.audit=R.audit!=="false"),R.attributes=R.properties,E.push(R)}if(P.name.value==="sealed"&&(R.sealed=!0),P.name.value==="export"){R.export=!0;for(let k of P.arguments)k.name.value==="name"&&(R.export={name:k.value.value})}}let L=!1;for(let P of S.fields){let k=H(P.type);k.name=P.name.value,b.push(k);for(let B of P.directives)if(B.name.value==="primaryKey")L?console.warn("Can not define two attributes as a primary key"):(k.isPrimaryKey=!0,L=!0);else if(B.name.value==="indexed")k.indexed=!0;else if(B.name.value==="relationship"){let J={};for(let z of B.arguments)J[z.name.value]=z.value.value;k.relationship=J}else if(B.name.value==="createdTime")k.assignCreatedTime=!0;else if(B.name.value==="updatedTime")k.assignUpdatedTime=!0;else if(B.name.value==="expiresAt")k.expiresAt=!0;else if(B.name.value==="allow"){let J=k.authorizedRoles=[];for(let z of B.arguments)z.name.value==="role"&&J.push(z.value.value)}}R.type=T,T==="Query"&&(h=R)}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):HV.includes(S.type)||(0,fb.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,Mh.dirname)(n),S.tableClass):i.set((0,Mh.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var Mh,fb,HV,xV,GV,Eb=Re(()=>{Mh=require("path");Ae();fb=x(et()),HV=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(Uh,"start");xV=Uh,GV=Uh({ensureTable:at}).handleFile});async function r_(e){return FV?(Sc||(Sc=qV(VV)),(await(await Sc).import(e)).namespace):import(e)}async function qV(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Sc=new Compartment({console,Math,Date,fetch:kV,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,mb.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Gt,tables:Lr,databases:tt})}};let n=await(0,hb.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Sc}function kV(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 VV(){return{Resource:Gt,tables:Lr}}var hb,mb,FV,Sc,vh=Re(()=>{bn();Ae();hb=require("fs/promises"),mb=require("path"),FV=!1;a(r_,"secureImport");a(qV,"getCompartment");a(kV,"secureOnlyFetch");a(VV,"getGlobalVars")});var Hh={};$e(Hh,{handleFile:()=>$V});async function $V(e,t,r,n){let s=new Map,i=(0,pb.pathToFileURL)(r).toString(),o=await r_(i);u(o.default)&&n.set((0,Bh.dirname)(t),o.default),c(o,(0,Bh.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 pb,Bh,Sb=Re(()=>{pb=require("url");vh();Bh=require("path");a($V,"handleFile")});var Gh={};$e(Gh,{start:()=>YV});function YV({resources:e}){e.set("login",xh),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var xh,Tb=Re(()=>{bn();a(YV,"start");xh=class extends Gt{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 Nb={};$e(Nb,{parse:()=>qh,streamAsJSON:()=>Tc,stringify:()=>Pi});function Tc(e){return new Fh({value:e})}function gb(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 Pi(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===bb)return yb(e);if(t.resolution)return t.resolution.then(()=>Pi(e));throw t}}function yb(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+=yb(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Pi(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function qh(e){return QV.test(e)?KV.parse(e):JSON.parse(e)}var Ab,Ob,KV,WV,bb,Fh,QV,kh=Re(()=>{Ab=require("stream"),Ob=x(require("json-bigint-fixes")),KV=(0,Ob.default)({useNativeBigInt:!0}),WV=1e4,bb={};BigInt.prototype.toJSON=function(){throw bb};a(Tc,"streamAsJSON");Fh=class extends Ab.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),gb)}catch(s){yield gb(s)}else yield Pi(t)}else yield Pi(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>WV?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(gb,"handleError");a(Rb,"when");a(Pi,"stringify");a(yb,"jsStringify");QV=/-?\d{16,}/;a(qh,"parse")});var Gb=g((Woe,xb)=>{"use strict";var Vh=require("recursive-iterator"),zV=require("alasql"),$h=require("clone"),Ib=Q(),{handleHDBError:wb,hdb_errors:JV}=ne(),{HDB_ERROR_MSGS:Cb,HTTP_STATUS_CODES:Db}=JV,{getDatabases:jV}=(Ae(),se(Fe)),XV=["DISTINCT_ARRAY"],Lb=Symbol("validateTables"),Yh=Symbol("validateTable"),Koe=Symbol("getAllColumns"),Mb=Symbol("validateAllColumns"),n_=Symbol("findColumn"),Ub=Symbol("validateOrderBy"),gc=Symbol("validateSegment"),Kh=Symbol("validateColumn"),Pb=Symbol("setColumnsForTable"),vb=Symbol("checkColumnsForAsterisk"),Bb=Symbol("validateGroupBy"),Hb=Symbol("hasColumns"),Wh=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Lb](),this[vb](),this[Mb]()}[Lb](){if(this[Hb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Yh](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Yh](t.table)})}}[Hb](){let t=!1,r=new Vh(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Yh](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=jV();if(!r[t.databaseid])throw wb(new Error,Cb.SCHEMA_NOT_FOUND(t.databaseid),Db.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw wb(new Error,Cb.TABLE_NOT_FOUND(t.databaseid,t.tableid),Db.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=$h(s);i.table=$h(t),this.attributes.push(i)})}[n_](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)}[vb](){let t=new Vh(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[Pb](r.tableid)}[Pb](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new zV.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Mb](){this[gc](this.statement.columns,!1),this[gc](this.statement.joins,!1),this[gc](this.statement.where,!1),this[Bb](this.statement.group,!1),this[gc](this.statement.order,!0)}[gc](t,r){if(!t)return;let n=new Vh(t),s=[];for(let{node:i,path:o}of n)!Ib.isEmpty(i)&&!Ib.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Ub](i):s.push(this[Kh](i)));return s}[Bb](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&XV.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=$h(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[n_](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[n_](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`}[Ub](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[Kh](t)}[Kh](t){let r=this[n_](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]}};xb.exports=Wh});var qb=g((zoe,Fb)=>{"use strict";var Qh=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")}};Fb.exports=Qh});var Vb=g((joe,kb)=>{"use strict";var zh=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};kb.exports=zh});var Wb={};$e(Wb,{HAS_EXPIRATION:()=>rm,LAST_TIMESTAMP_PLACEHOLDER:()=>Oc,LOCAL_TIMESTAMP:()=>ZV,METADATA:()=>Rc,NO_TIMESTAMP:()=>jh,PENDING_LOCAL_TIME:()=>nm,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>tm,RecordEncoder:()=>em,TIMESTAMP_ASSIGN_LAST:()=>t$,TIMESTAMP_ASSIGN_NEW:()=>Yb,TIMESTAMP_ASSIGN_PREVIOUS:()=>Kb,TIMESTAMP_PLACEHOLDER:()=>s_,TIMESTAMP_RECORD_PREVIOUS:()=>Xh,getUpdateRecord:()=>sm,handleLocalTimeForGets:()=>c_});function n$(){return Ac[0]=Ac[0]^64,e$.getFloat64(0)}function c_(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?.[Rc];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?.[Rc]>=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[Rc];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(){this.timerTracked||(this.timerTracked=!0,vi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<vi.length;u++){let _=vi[u].deref();(!_||_.isDone||_.isCommitted)&&vi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function sm(e,t,r){return function(n,s,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?xo=i?.localTime?Xh|Kb:jh:xo=u?i?.localTime?Xh|16384:Yb|16384:jh,l>0&&(c|=rm),o_=c,Zh=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:xo>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&&(i_=e.encoder.encode(E)),f&&i?.localTime){let b=i?.localTime,R=r.get(b);if(R){let L=Lt(R).previousLocalTime;return r.put(b,a_(o,t,n,L,T,d,i_),{ifVersion:p}),S}}r.put(Oc,a_(o,t,n,i?.localTime?1:0,T,d,i_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var $b,Jh,s_,Oc,tm,ZV,Rc,Ac,e$,jh,Yb,t$,Kb,Xh,rm,nm,r$,i_,xo,o_,Zh,em,vi,bc=Re(()=>{$b=require("msgpackr");Bi();Jh=x(K()),s_=new Uint8Array([1,1,1,1,4,64,0,0]),Oc=new Uint8Array([1,1,1,1,1,0,0,0]),tm=new Uint8Array([1,1,1,1,3,64,0,0]),ZV=Symbol("local-timestamp"),Rc=Symbol("metadata"),Ac=new Uint8Array(8),e$=new DataView(Ac.buffer,0,8),jh=0,Yb=0,t$=1,Kb=3,Xh=4,rm=16,nm=1,xo=0,o_=-1,Zh=0,em=class extends $b.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(xo||o_>=0){let i=0,o=xo;o&&(i+=8,xo=0);let c=o_,u=Zh;c>=0&&(i+=2,o_=-1,u&&(i+=8,Zh=0));let _=r$=r.call(this,n,s|2048|i);i_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(s_[4]=o,s_[5]=o>>8,_.set(s_,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(Ac,0,c),c+=8;else for(let d=0;d<8;d++)Ac[d]=t[c++];u=n$(),i=t[c]}let _;i<32&&(o=i,c+=2,o&rm&&(_=(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,[Rc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(n$,"getTimestamp");a(c_,"handleLocalTimeForGets");vi=[];setInterval(()=>{for(let e=0;e<vi.length;e++){let t=vi[e].deref();!t||t.isDone||t.isCommitted?vi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Jh.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Jh.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(sm,"getUpdateRecord")});var u_=g((tae,Qb)=>{"use strict";var om=re(),am=U(),{RecordEncoder:s$}=(bc(),se(Wb));om.initSync();var i$=om.get(am.CONFIG_PARAMS.STORAGE_COMPRESSION),o$=om.get(am.CONFIG_PARAMS.STORAGE_CACHING)!==!1,a$=am.UPDATES_PROPERTY,im=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=i$&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=o$&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:s$},this.alwaysLazyProperty=n=>n===a$)}};Qb.exports=im});var __=g((nae,Jb)=>{"use strict";var Go=re(),yc=U();Go.initSync();var c$=Go.get(yc.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Go.get(yc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Go.get(yc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",zb=Go.get(yc.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),u$=Go.get(yc.CONFIG_PARAMS.STORAGE_NOREADAHEAD),l_=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=c$,this.noFSAccess=!0,zb!==void 0&&(this.overlappingSync=zb),this.noReadAhead=u$}};Jb.exports=l_;l_.MAX_DBS=1e4});var Ye=g((iae,oy)=>{"use strict";var um=require("lmdb"),yn=require("fs-extra"),Mr=require("path"),d_=Dr(),Zb=K(),cr=Nr().LMDB_ERRORS_ENUM,f_=Vb(),lm=u_(),ey=__(),js=_t(),jb=U(),{table:l$,resetDatabases:_$}=(Ae(),se(Fe)),Xb=re(),Nn=js.INTERNAL_DBIS_NAME,ty=js.DBI_DEFINITION_NAME,d$="data.mdb",f$="lock.mdb",Nc=".mdb",E$="-lock",cm=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=rn(t,r),this.key_type=this.dbi[js.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[js.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new um.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function E_(e,t){if(e===void 0)throw new Error(cr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(cr.ENV_NAME_REQUIRED)}a(E_,"pathEnvNameValidation");async function _m(e,t,r=!0){try{await yn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(cr.INVALID_BASE_PATH):n}try{let n=Mr.join(e,t+Nc);return await yn.access(n,yn.constants.R_OK|yn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await yn.access(Mr.join(e,t,d$),yn.constants.R_OK|yn.constants.F_OK),Mr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(cr.INVALID_ENVIRONMENT)}else throw new Error(cr.INVALID_ENVIRONMENT);throw n}}a(_m,"validateEnvironmentPath");function h_(e,t){if(d_.validateEnv(e),t===void 0)throw new Error(cr.DBI_NAME_REQUIRED)}a(h_,"validateEnvDBIName");async function h$(e,t,r=!1,n=!1){E_(e,t);let s=Mr.basename(e);t=t.toString();let i=Xb.get(jb.CONFIG_PARAMS.DATABASES);i||Xb.setProperty(jb.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await _m(e,t,n),ry(e,t,r)}catch(o){if(o.message===cr.INVALID_ENVIRONMENT){let c=Mr.join(e,t);await yn.mkdirp(n?c:e);let u=new ey(n?c:c+Nc,!1),_=um.open(u);_.dbis=Object.create(null);let l=new lm(!1);_.openDB(Nn,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=dm(e,t,r);return _[js.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(h$,"createEnvironment");async function m$(e,t,r,n=!0){E_(e,t),t=t.toString();let s=Mr.join(e,t);return l$({table:t,database:Mr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(m$,"copyEnvironment");async function ry(e,t,r=!1){E_(e,t),t=t.toString();let n=dm(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 _m(e,t),i=Mr.join(e,t+Nc),o=s!=i,c=new ey(s,o),u=um.open(c);u.dbis=Object.create(null);let _=sy(u);for(let l=0;l<_.length;l++)rn(u,_[l]);return u[js.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=u,u}a(ry,"openEnvironment");async function p$(e,t,r=!1){E_(e,t),t=t.toString();let n=Mr.join(e,t+Nc),s=await _m(e,t);if(global.lmdb_map!==void 0){let i=dm(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await ny(o),delete global.lmdb_map[i]}}await yn.remove(s),await yn.remove(s===n?s+E$:Mr.join(Mr.dirname(s),f$))}a(p$,"deleteEnvironment");async function ny(e){d_.validateEnv(e);let t=e[js.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(ny,"closeEnvironment");function dm(e,t,r=!1){let s=`${Mr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(dm,"getCachedEnvironmentName");function S$(e){d_.validateEnv(e);let t=Object.create(null),r=rn(e,Nn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Nn)try{t[n]=Object.assign(new f_,s)}catch{Zb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(S$,"listDBIDefinitions");function sy(e){d_.validateEnv(e);let t=[],r=rn(e,Nn);for(let{key:n}of r.getRange({start:!1}))n!==Nn&&t.push(n);return t}a(sy,"listDBIs");function T$(e,t){let n=rn(e,Nn).getEntry(t),s=new f_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{Zb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(T$,"getDBIDefinition");function iy(e,t,r,n=!r){if(h_(e,t),t=t.toString(),t===Nn)throw new Error(cr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return rn(e,t)}catch(s){if(s.message===cr.DBI_DOES_NOT_EXIST){let i=new lm(r,n===!0),o=e.openDB(t,i),c=new f_(r===!0,n);return o[ty]=c,rn(e,Nn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(iy,"createDBI");function rn(e,t){if(h_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Nn?r=T$(e,t):r=new f_,r===void 0)throw new Error(cr.DBI_DOES_NOT_EXIST);let n;try{let s=new lm(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(cr.DBI_DOES_NOT_EXIST):s}return n[ty]=r,e.dbis[t]=n,n}a(rn,"openDBI");function g$(e,t){h_(e,t),t=t.toString();let r=rn(e,t),n=r.getStats();return r[js.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(g$,"statDBI");async function R$(e,t){try{let r=Mr.join(e,t+Nc);return(await yn.stat(r)).size}catch{throw new Error(cr.INVALID_ENVIRONMENT)}}a(R$,"environmentDataSize");function A$(e,t){if(h_(e,t),t=t.toString(),t===Nn)throw new Error(cr.CANNOT_DROP_INTERNAL_DBIS_NAME);rn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],rn(e,Nn).removeSync(t)}a(A$,"dropDBI");function O$(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{rn(e,i)}catch(o){if(o.message===cr.DBI_DOES_NOT_EXIST)iy(e,i,i!==t,i===t),n=!0;else throw o}}n&&_$()}a(O$,"initializeDBIs");oy.exports={openDBI:rn,openEnvironment:ry,createEnvironment:h$,listDBIs:sy,listDBIDefinitions:S$,createDBI:iy,dropDBI:A$,statDBI:g$,deleteEnvironment:p$,initializeDBIs:O$,TransactionCursor:cm,environmentDataSize:R$,copyEnvironment:m$,closeEnvironment:ny}});var cy=g((aae,ay)=>{"use strict";var fm=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};ay.exports=fm});var ly=g((uae,uy)=>{"use strict";var Em=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}};uy.exports=Em});var dy=g((_ae,_y)=>{"use strict";var hm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};_y.exports=hm});var Fo=g((mae,hy)=>{"use strict";var b$=Ye(),y$=cy(),N$=ly(),I$=dy(),Kn=Dr(),Ic=Nr().LMDB_ERRORS_ENUM,w$=_t(),ps=U(),C$=Q(),D$=require("uuid"),fae=require("lmdb"),{handleHDBError:L$,hdb_errors:M$}=ne(),{OVERFLOW_MARKER:Eae,MAX_SEARCH_KEY_LENGTH:hae}=w$,fy=re();fy.initSync();var m_=fy.get(ps.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),mm=ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Hi=ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function U$(e,t,r,n,s=Kn.getNextMonotonicTime()){gm(e,t,r,n),pm(e,t,r);let i=new y$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u];Ey(_,!0,s);let l=P$(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Sm(o,c,n,i,s)}a(U$,"insertRecords");function P$(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][ps.FUNC_VAL],n[o]=c)}let u=Kn.getIndexedValues(c),_=e.dbis[o];if(u){m_&&_.prefetch(u.map(l=>({key:l,value:s})),p_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],s)}}m_&&e.dbis[t].prefetch([s],p_),e.dbis[t].put(s,n,n[Hi])})}a(P$,"insertRecord");function v$(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(v$,"removeSkippedRecords");function Ey(e,t,r){let n=r>0;(n||!Number.isInteger(e[Hi]))&&(e[Hi]=r||(r=Kn.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[mm]))&&(e[mm]=r||Kn.getNextMonotonicTime()):delete e[mm]}a(Ey,"setTimestamps");function pm(e,t,r){r.indexOf(ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),b$.initializeDBIs(e,t,r)}a(pm,"initializeTransaction");async function B$(e,t,r,n,s=Kn.getNextMonotonicTime()){gm(e,t,r,n),pm(e,t,r);let i=new N$,o=[],c=[],u=[];for(let _=0;_<n.length;_++){let l=n[_],d=l[t],f;try{f=Tm(e,t,l,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return Sm(c,u,n,i,s,o)}a(B$,"updateRecords");async function H$(e,t,r,n,s=Kn.getNextMonotonicTime()){try{gm(e,t,r,n)}catch(u){throw L$(u,u.message,M$.HTTP_STATUS_CODES.BAD_REQUEST)}pm(e,t,r);let i=new I$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u],l;C$.isEmpty(_[t])?(l=D$.v4(),_[t]=l):l=_[t];let d=Tm(e,t,_,l,i,!1,s);o.push(d),c.push(l)}return Sm(o,c,n,i,s)}a(H$,"upsertRecords");async function Sm(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(),v$(r,i),n}a(Sm,"finalizeWrite");function Tm(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(Ey(r,!l,o),Number.isInteger(r[Hi])&&_[Hi]>r[Hi])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 R=p([[_]]);Array.isArray(R)&&(p=R[0][ps.FUNC_VAL],r[h]=p)}if(p===T)continue;let b=Kn.getIndexedValues(T);if(b){m_&&S.prefetch(b.map(R=>({key:R,value:n})),p_);for(let R=0,L=b.length;R<L;R++)S.remove(b[R],n)}if(b=Kn.getIndexedValues(p),b){m_&&S.prefetch(b.map(R=>({key:R,value:n})),p_);for(let R=0,L=b.length;R<L;R++)S.put(b[R],n)}}let E=Object.assign({},_,r);c.put(n,E,E[Hi])},"do_put");return u?d=c.ifVersion(n,u.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:Tm(e,t,r,n,s,i,o))}a(Tm,"updateUpsertRecord");function x$(e,t,r){if(Kn.validateEnv(e),t===void 0)throw new Error(Ic.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ic.WRITE_ATTRIBUTES_REQUIRED):new Error(Ic.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(x$,"validateBasic");function gm(e,t,r,n){if(x$(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Ic.RECORDS_REQUIRED):new Error(Ic.RECORDS_MUST_BE_ARRAY)}a(gm,"validateWrite");function p_(){}a(p_,"noop");hy.exports={insertRecords:U$,updateRecords:B$,upsertRecords:H$}});var xi=g((Sae,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"}]},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 Qn=g((Tae,Sy)=>{"use strict";var py=Q(),my=U(),qo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Wn=require("joi"),Xs={schema_format:{pattern:qo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},F$=Wn.alternatives(Wn.string().min(1).max(Xs.schema_length.maximum).pattern(qo).messages({"string.pattern.base":"{:#label} "+Xs.schema_format.message}),Wn.number(),Wn.array()).required(),q$=Wn.alternatives(Wn.string().min(1).max(Xs.schema_length.maximum).pattern(qo).messages({"string.pattern.base":"{:#label} "+Xs.schema_format.message}),Wn.number()),k$=Wn.alternatives(Wn.string().min(1).max(Xs.schema_length.maximum).pattern(qo).messages({"string.pattern.base":"{:#label} "+Xs.schema_format.message}),Wn.number()).required();function V$(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Xs.schema_length.maximum?`'${e}' maximum of 250 characters`:qo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(V$,"checkValidTable");function $$(e,t){return py.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a($$,"validateSchemaExists");function Y$(e,t){let r=t.state.ancestors[0].schema;return py.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Y$,"validateTableExists");function K$(e,t){return e.toLowerCase()===my.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${my.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(K$,"validateSchemaName");Sy.exports={common_validators:Xs,schema_regex:qo,hdb_schema_table:F$,validateSchemaExists:$$,validateTableExists:Y$,validateSchemaName:K$,checkValidTable:V$,hdb_database:q$,hdb_table:k$}});var S_=g((Rae,Ty)=>{var{common_validators:zn}=Qn(),Cc=Xe(),wc="is required",dt={database:{presence:!1,format:zn.schema_format,length:zn.schema_length},schema:{presence:!1,format:zn.schema_format,length:zn.schema_length},table:{presence:!0,format:zn.schema_format,length:zn.schema_length},attribute:{presence:!0,format:zn.schema_format,length:zn.schema_length},hash_attribute:{presence:!0,format:zn.schema_format,length:zn.schema_length}};function Dc(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(Dc,"makeAttributesStrings");function W$(e){return e=Dc(e),dt.table.presence=!1,dt.attribute.presence=!1,dt.hash_attribute.presence=!1,Cc.validateObject(e,dt)}a(W$,"schema_object");function Q$(e){return e=Dc(e),dt.table.presence={message:wc},dt.attribute.presence=!1,dt.hash_attribute.presence=!1,Cc.validateObject(e,dt)}a(Q$,"table_object");function z$(e){return e=Dc(e),dt.table.presence={message:wc},dt.attribute.presence=!1,Cc.validateObject(e,dt)}a(z$,"create_table_object");function J$(e){return e=Dc(e),dt.table.presence={message:wc},dt.attribute.presence={message:wc},dt.hash_attribute.presence=!1,Cc.validateObject(e,dt)}a(J$,"attribute_object");function j$(e){return e=Dc(e),dt.table.presence={message:wc},dt.attribute.presence=!1,dt.hash_attribute.presence=!1,Cc.validateObject(e,dt)}a(j$,"describe_table");function X$(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(X$,"validateTableResidence");Ty.exports={schema_object:W$,create_table_object:z$,table_object:Q$,attribute_object:J$,describe_table:j$,validateTableResidence:X$}});var Ry=g((Oae,gy)=>{"use strict";var Z$=require("uuid"),Rm=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||Z$.v4(),this.schema_table=`${this.schema}.${this.table}`}};gy.exports=Rm});var T_=g((yae,Ay)=>{"use strict";var e1=Ry(),Am=class extends e1{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}};Ay.exports=Am});var by=g((Iae,Oy)=>{"use strict";Oy.exports=r1;var t1="inserted";function r1(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===t1?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(r1,"returnObject")});var g_=g((Cae,Cy)=>{"use strict";var n1=U(),Om=Ye(),s1=Fo(),{getSystemSchemaPath:i1,getSchemaPath:o1}=Qe(),a1=xi(),c1=S_(),u1=T_(),l1=by(),{handleHDBError:yy,hdb_errors:Iy}=ne(),Ny=Q(),{HTTP_STATUS_CODES:_1}=Iy,bm=a1.hdb_attribute,wy=[];for(let e=0;e<bm.attributes.length;e++)wy.push(bm.attributes[e].attribute);var d1="inserted";Cy.exports=f1;async function f1(e){let t=c1.attribute_object(e);if(t)throw yy(new Error,t.message,Iy.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&Ny.checkGlobalSchemaTable(e.schema,e.table);if(r)throw yy(new Error,r,_1.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Ny.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 u1(e.schema,e.table,e.attribute,e.id);try{let i=await Om.openEnvironment(o1(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}`);Om.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Om.openEnvironment(i1(),n1.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await s1.insertRecords(o,bm.hash_attribute,wy,[s]);return l1(d1,c,{records:[s]},u)}catch(i){throw i}}a(f1,"lmdbCreateAttribute")});var Nm=g((Lae,Ly)=>{var{hdb_table:E1,hdb_database:Dy}=Qn(),h1=Xe(),ym=require("joi"),m1={undefined:"undefined",null:"null"},p1=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||m1[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"),S1=ym.object({database:Dy,schema:Dy,table:E1,records:ym.array().items(ym.object().custom(p1)).required()});Ly.exports=function(e){return h1.validateBySchema(e,S1)}});var Lc=g((Pae,Uy)=>{"use strict";var Ss=Q(),My=K(),Uae=Nm(),{getDatabases:T1}=(Ae(),se(Fe)),{ClientError:Gi}=ne();Uy.exports=g1;function g1(e){if(Ss.isEmpty(e))throw new Gi("invalid update parameters defined.");if(Ss.isEmptyOrZeroLength(e.schema))throw new Gi("invalid schema specified.");if(Ss.isEmptyOrZeroLength(e.table))throw new Gi("invalid table specified.");if(!Array.isArray(e.records))throw new Gi("records must be an array");let t=T1()[e.schema]?.[e.table];if(Ss.isEmpty(t))throw new Gi(`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&&Ss.isEmptyOrZeroLength(o[r]))throw My.error("a valid hash attribute must be provided with update record:",o),new Gi("a valid hash attribute must be provided with update record, check log for more info");if(!Ss.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 Gi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Ss.isEmpty(o[r])&&o[r]!==""&&n.has(Ss.autoCast(o[r]))&&(o.skip=!0),n.add(Ss.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(g1,"insertUpdateValidate")});var Mc=g((Bae,Py)=>{"use strict";var R1=U().OPERATIONS_ENUM,Im=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}};Py.exports=Im});var Uc=g((Gae,By)=>{"use strict";var xae=Mc(),R_=U(),wm=Q(),vy=K(),A1=require("uuid"),{handleHDBError:A_,hdb_errors:O1}=ne(),{HDB_ERROR_MSGS:O_,HTTP_STATUS_CODES:b_}=O1;By.exports=b1;function b1(e,t,r){for(let s=0;s<t.length;s++)y1(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];N1(i,r,e.operation)}}a(b1,"processRows");function y1(e){if(Buffer.byteLength(String(e))>R_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw A_(new Error,O_.ATTR_NAME_LENGTH_ERR(e),b_.BAD_REQUEST,void 0,void 0,!0);if(wm.isEmptyOrZeroLength(e)||wm.isEmpty(e.trim()))throw A_(new Error,O_.ATTR_NAME_NULLISH_ERR,b_.BAD_REQUEST,void 0,void 0,!0)}a(y1,"validateAttribute");function N1(e,t,r){if(!e.hasOwnProperty(t)||wm.isEmptyOrZeroLength(e[t])){if(r===R_.OPERATIONS_ENUM.INSERT||r===R_.OPERATIONS_ENUM.UPSERT){e[t]=A1.v4();return}throw vy.error("Update transaction aborted due to record with no hash value:",e),A_(new Error,O_.RECORD_MISSING_HASH_ERR,b_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>R_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw vy.error(e),A_(new Error,O_.HASH_VAL_LENGTH_ERR,b_.BAD_REQUEST,void 0,void 0,!0)}a(N1,"validateHash")});var xy=g((qae,Hy)=>{"use strict";var Cm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};Hy.exports=Cm});var qy=g((Vae,Fy)=>{"use strict";var Dm=Ye(),I1=K(),Gy=Nr().LMDB_ERRORS_ENUM;Fy.exports=w1;async function w1(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 Dm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==Gy.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await Dm.closeEnvironment(global.lmdb_map[n]),await Dm.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==Gy.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){I1.error(t)}}a(w1,"cleanLMDBMap")});var Ts=g((Yae,Yy)=>{"use strict";var Pc=require("crypto"),C1=re(),{CONFIG_PARAMS:D1}=U(),Vy="aes-256-cbc",L1=32,M1=16,Lm=64,$y=32,U1=Lm+$y,ky=new Map;Yy.exports={encrypt:P1,decrypt:v1,createNatsTableStreamName:B1};function P1(e){let t=Pc.randomBytes(L1),r=Pc.randomBytes(M1),n=Pc.createCipheriv(Vy,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(P1,"encrypt");function v1(e){let t=e.substr(0,Lm),r=e.substr(Lm,$y),n=e.substr(U1,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Pc.createDecipheriv(Vy,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(v1,"decrypt");function B1(e,t){let r=C1.get(D1.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=ky.get(r);return n||(n=Pc.createHash("md5").update(r).digest("hex"),ky.set(r,n)),n}a(B1,"createNatsTableStreamName")});var Fi=g((Qae,Wy)=>{"use strict";var Wae=Ur(),y_=K(),Ky=S_(),H1=Ts(),N_=Q(),{handleHDBError:I_,hdb_errors:x1}=ne(),{HDB_ERROR_MSGS:w_,HTTP_STATUS_CODES:Mm}=x1,G1=re();G1.initSync();var{getDatabases:Um}=(Ae(),se(Fe));Wy.exports={describeAll:F1,describeTable:C_,describeSchema:q1};async function F1(e){try{let t=N_.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=Um(),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 C_({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 C_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){y_.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 y_.error("Got an error in describeAll"),y_.error(t),I_(new Error,w_.DESCRIBE_ALL_ERR)}}a(F1,"describeAll");async function C_(e,t){N_.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=Ky.describe_table(e);if(i)throw i;let c=Um()[r];if(!c)throw I_(new Error,w_.SCHEMA_NOT_FOUND(e.schema),Mm.NOT_FOUND);let u=c[n];if(!u)throw I_(new Error,w_.TABLE_NOT_FOUND(e.schema,e.table),Mm.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=H1.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){y_.warn(`unable to stat table dbi due to ${f}`)}return d}a(C_,"descTable");async function q1(e){N_.transformReq(e);let t=Ky.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=Um()[n];if(!i)throw I_(new Error,w_.SCHEMA_NOT_FOUND(e.schema),Mm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),N_.isEmpty(u)||u.describe){let _=await C_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(q1,"describeSchema")});var gs=g((Xae,Xy)=>{var k1=xi(),{callbackify:zy,promisify:V1}=require("util"),{getDatabases:Jy}=(Ae(),se(Fe));Xy.exports={setSchemaDataToGlobal:Qy,getTableSchema:$1,getSystemSchema:Y1,setSchemaDataToGlobalAsync:V1(Qy)};var jy=Fi(),Jae=zy(jy.describeAll),jae=zy(jy.describeTable);function Qy(e){global.hdb_schema=Jy(),e&&e()}a(Qy,"setSchemaDataToGlobal");function $1(e,t,r){let n=Jy()[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($1,"getTableSchema");function Y1(){return k1}a(Y1,"getSystemSchema")});var nn=g((ece,rN)=>{"use strict";var L_=Nm(),Ft=Q(),K1=require("util"),M_=In(),W1=gs(),Zy=K(),{handleHDBError:qi,hdb_errors:Q1}=ne(),{HTTP_STATUS_CODES:ki}=Q1,z1=K1.promisify(W1.getTableSchema),J1="updated",eN="inserted",tN="upserted";rN.exports={insert:X1,update:Z1,upsert:eY,validation:j1,flush:tY};async function j1(e){if(Ft.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ft.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Ft.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await z1(e.schema,e.table),r=L_(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&&Ft.isEmptyOrZeroLength(c[n]))throw Zy.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(!Ft.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw Zy.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Ft.isEmpty(c[n])&&c[n]!==""&&s.has(Ft.autoCast(c[n]))&&(c.skip=!0),s.add(Ft.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(j1,"validation");async function X1(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=L_(e);if(t)throw qi(new Error,t.message,ki.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw qi(new Error,r,ki.BAD_REQUEST);let n=await M_.createRecords(e);return D_(eN,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(X1,"insertData");async function Z1(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=L_(e);if(t)throw qi(new Error,t.message,ki.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw qi(new Error,r,ki.BAD_REQUEST);let n=await M_.updateRecords(e);return Ft.isEmpty(n.existing_rows)?D_(J1,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):D_(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Z1,"updateData");async function eY(e){if(e.operation!=="upsert")throw qi(new Error,"invalid operation, must be upsert",ki.INTERNAL_SERVER_ERROR);let t=L_(e);if(t)throw qi(new Error,t.message,ki.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw qi(new Error,r,ki.BAD_REQUEST);let n=await M_.upsertRecords(e);return D_(tN,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(eY,"upsertData");function D_(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===eN?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===tN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(D_,"returnObject");function tY(e){return Ft.transformReq(e),M_.flush(e.schema,e.table)}a(tY,"flush")});var vm=g((rce,iN)=>{var rY=Xe(),Pm=require("joi"),{hdb_table:nY,hdb_database:nN}=Qn(),sN={schema:nN,database:nN,table:nY},sY={date:Pm.date().iso().required()},iY={timestamp:Pm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};iN.exports=function(e,t){let r=t==="timestamp"?{...sN,...iY}:{...sN,...sY},n=Pm.object(r);return rY.validateBySchema(e,n)}});var cN=g((nce,aN)=>{var oY=Xe(),Bm=require("joi"),{hdb_table:aY,hdb_database:oN}=Qn(),cY=Bm.object({schema:oN,database:oN,table:aY,hash_values:Bm.array().required(),ids:Bm.array()});aN.exports=function(e){return oY.validateBySchema(e,cY)}});var lN=g((sce,uN)=>{"use strict";var Hm=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}},xm=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}},Gm=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};uN.exports={InsertObject:Hm,NoSQLSeachObject:xm,DeleteResponseObject:Gm}});var Yi=g((oce,hN)=>{"use strict";var dN=vm(),uY=cN(),Vi=Q(),_N=require("moment"),fN=K(),{promisify:lY,callbackify:_Y}=require("util"),$i=U(),dY=gs(),Fm=lY(dY.getTableSchema),qm=In(),{DeleteResponseObject:fY}=lN(),{handleHDBError:Zs,hdb_errors:EY}=ne(),{HDB_ERROR_MSGS:U_,HTTP_STATUS_CODES:ei}=EY,hY="records successfully deleted",mY=_Y(EN);hN.exports={delete:mY,deleteRecord:EN,deleteFilesBefore:pY,deleteAuditLogsBefore:SY};async function pY(e){let t=dN(e,"date");if(t)throw Zs(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);if(Vi.transformReq(e),!_N(e.date,_N.ISO_8601).isValid())throw Zs(new Error,U_.INVALID_DATE,ei.BAD_REQUEST,$i.LOG_LEVELS.ERROR,U_.INVALID_DATE,!0);let n=Vi.checkSchemaTableExist(e.schema,e.table);if(n)throw Zs(new Error,n,ei.NOT_FOUND,$i.LOG_LEVELS.ERROR,n,!0);let s=await qm.deleteRecordsBefore(e);if(await Fm(e.schema,e.table),fN.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(pY,"deleteFilesBefore");async function SY(e){let t=dN(e,"timestamp");if(t)throw Zs(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);if(Vi.transformReq(e),isNaN(e.timestamp))throw Zs(new Error,U_.INVALID_VALUE("Timestamp"),ei.BAD_REQUEST,$i.LOG_LEVELS.ERROR,U_.INVALID_VALUE("Timestamp"),!0);let r=Vi.checkSchemaTableExist(e.schema,e.table);if(r)throw Zs(new Error,r,ei.NOT_FOUND,$i.LOG_LEVELS.ERROR,r,!0);let n=await qm.deleteAuditLogsBefore(e);return await Fm(e.schema,e.table),fN.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(SY,"deleteAuditLogsBefore");async function EN(e){e.ids&&(e.hash_values=e.ids);let t=uY(e);if(t)throw Zs(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);Vi.transformReq(e);let r=Vi.checkSchemaTableExist(e.schema,e.table);if(r)throw Zs(new Error,r,ei.NOT_FOUND,$i.LOG_LEVELS.ERROR,r,!0);try{await Fm(e.schema,e.table);let n=await qm.deleteRecords(e);return Vi.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${hY}`),n}catch(n){if(n.message===$i.SEARCH_NOT_FOUND_MESSAGE){let s=new fY;return s.message=$i.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(EN,"deleteRecord")});var P_=g((cce,SN)=>{var TY=require("crypto"),mN=9;function gY(e){let t=AY(mN),r=pN(e+t);return t+r}a(gY,"createHash");function RY(e,t){let r=e?.substr(0,mN),n=r+pN(t+r);return e===n}a(RY,"validateHash");function AY(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(AY,"generateSalt");function pN(e){return TY.createHash("md5").update(e).digest("hex")}a(pN,"md5");SN.exports={hash:gY,validate:RY}});var gN=g((lce,TN)=>{var km=Xe(),Kt={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 OY(e){return Kt.password.presence=!0,Kt.username.presence=!0,Kt.role.presence=!0,Kt.active.presence=!0,km.validateObject(e,Kt)}a(OY,"addUserValidation");function bY(e){return Kt.password.presence=!1,Kt.username.presence=!0,Kt.role.presence=!1,Kt.active.presence=!1,km.validateObject(e,Kt)}a(bY,"alterUserValidation");function yY(e){return Kt.password.presence=!1,Kt.username.presence=!0,Kt.role.presence=!1,Kt.active.presence=!1,km.validateObject(e,Kt)}a(yY,"dropUserValidation");TN.exports={addUserValidation:OY,alterUserValidation:bY,dropUserValidation:yY}});var rt=g((fce,AN)=>{"use strict";var{platform:dce}=require("os"),NY="nats-server.zip",Vm="nats-server",IY=process.platform==="win32"?`${Vm}.exe`:Vm,wY=/^[^\s.,*>]+$/,RN="__request__",CY=a(e=>`${e}.${RN}`,"REQUEST_SUBJECT"),DY={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},LY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},MY={HUB:"hub.pid",LEAF:"leaf.pid"},UY={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},PY={SUCCESS:"success",ERROR:"error"},vY={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},BY={TXN:"txn",MSGID:"msgid"},ko={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},HY={[ko.ERR]:1,[ko.WRN]:2,[ko.INF]:3,[ko.DBG]:4,[ko.TRC]:5},xY={debug:"-D",trace:"-DVV"};AN.exports={NATS_SERVER_ZIP:NY,NATS_SERVER_NAME:Vm,NATS_BINARY_NAME:IY,PID_FILES:MY,NATS_CONFIG_FILES:LY,SERVER_SUFFIX:UY,NATS_TERM_CONSTRAINTS_RX:wY,REQUEST_SUFFIX:RN,UPDATE_REMOTE_RESPONSE_STATUSES:PY,CLUSTER_STATUS_STATUSES:vY,REQUEST_SUBJECT:CY,SUBJECT_PREFIXES:BY,MSG_HEADERS:DY,LOG_LEVELS:ko,LOG_LEVEL_FLAGS:xY,LOG_LEVEL_HIERARCHY:HY}});var bN=g((hce,ON)=>{"use strict";var v_=U(),B_=class{static{a(this,"BaseLicense")}constructor(t=0,r=v_.RAM_ALLOCATION_ENUM.DEFAULT,n=v_.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},$m=class extends B_{static{a(this,"ExtendedLicense")}constructor(t=0,r=v_.RAM_ALLOCATION_ENUM.DEFAULT,n=v_.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};ON.exports={BaseLicense:B_,ExtendedLicense:$m}});var Ki=g((pce,DN)=>{"use strict";var $o=require("fs-extra"),NN=P_(),IN=require("crypto"),GY=require("moment"),FY=require("uuid").v4,Wt=K(),Km=require("path"),qY=Q(),ti=U(),{totalmem:yN}=require("os"),kY=bN().ExtendedLicense,Vo="invalid license key format",VY="061183",$Y="mofi25",YY="aes-256-cbc",KY=16,WY=32,wN=re();wN.initSync();var Ym;DN.exports={validateLicense:CN,generateFingerPrint:zY,licenseSearch:zm,getLicense:XY,checkMemoryLimit:ZY};function Wm(){return Km.join(wN.getHdbBasePath(),ti.LICENSE_KEY_DIR_NAME,ti.LICENSE_FILE_NAME)}a(Wm,"getLicenseDirPath");function QY(){let e=Wm();return Km.join(e,ti.LICENSE_FILE_NAME)}a(QY,"getLicenseFilePath");function Qm(){let e=Wm();return Km.join(e,ti.REG_KEY_FILE_NAME)}a(Qm,"getFingerPrintFilePath");async function zY(){let e=Qm();try{return await $o.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await JY();throw Wt.error(`Error writing fingerprint file to ${e}`),Wt.error(t),new Error("There was an error generating the fingerprint")}}a(zY,"generateFingerPrint");async function JY(){let e=FY(),t=NN.hash(e),r=Qm();try{await $o.mkdirp(Wm()),await $o.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Wt.error(`Error writing fingerprint file to ${r}`),Wt.error(n),new Error("There was an error generating the fingerprint")}return t}a(JY,"writeFingerprint");function CN(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ti.RAM_ALLOCATION_ENUM.DEFAULT,version:ti.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Wt.error("empty license key passed to validate."),r;let n=Qm(),s=!1;try{s=$o.statSync(n)}catch(i){Wt.error(i)}if(s){let i;try{i=$o.readFileSync(n,"utf8")}catch{Wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split($Y),c=o[1];c=Buffer.concat([Buffer.from(c)],KY);let u=Buffer.concat([Buffer.from(i)],WY),_=IN.createDecipheriv(YY,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=jY(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Vo),Wt.error(Vo),new Error(Vo)}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(Vo),Wt.error(Vo),new Error(Vo)}else r.exp_date=l;r.exp_date<GY().valueOf()&&(r.valid_date=!1),NN.validate(o[1],`${VY}${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||Wt.error("Invalid licence"),r}a(CN,"validateLicense");function jY(e,t){try{let r=IN.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Wt.warn("Check old license failed")}}a(jY,"checkOldLicense");function zm(){let e=new kY,t=[];try{t=$o.readFileSync(QY(),"utf-8").split(ti.NEW_LINE)}catch(r){r.code==="ENOENT"?Wt.info("no license file found"):Wt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(qY.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=CN(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){Wt.error("There was an error parsing the license string."),Wt.error(s),e.ram_allocation=ti.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Ym=e,e}a(zm,"licenseSearch");async function XY(){return Ym||await zm(),Ym}a(XY,"getLicense");function ZY(){let e=zm().ram_allocation,t=process.constrainedMemory?.()||yN();if(t=Math.round(Math.min(t,yN())/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(ZY,"checkMemoryLimit")});var vr=g((Ace,KN)=>{"use strict";var PN="username is required",vN="nothing to update, must supply active, role or password to update",BN="password cannot be an empty string",HN="If role is specified, it cannot be empty.",xN="active must be true or false";KN.exports={addUser:cK,alterUser:uK,dropUser:_K,getSuperUser:hK,userInfo:dK,listUsers:x_,listUsersExternal:fK,setUsersToGlobal:Ko,findAndValidateUser:$N,getClusterUser:mK,USERNAME_REQUIRED:PN,ALTERUSER_NOTHING_TO_UPDATE:vN,EMPTY_PASSWORD:BN,EMPTY_ROLE:HN,ACTIVE_BOOLEAN:xN};var GN=nn(),eK=Yi(),Xm=P_(),FN=gN(),qN=Ur(),Zm=Rs(),Pr=Q(),kN=require("validate.js"),Se=K(),{promisify:tK}=require("util"),ep=Ts(),LN=U(),MN=rt(),rK=Cr(),Tce=re(),gce=Ki(),nK=xi(),{table:Rce}=(Ae(),se(Fe)),{handleHDBError:Jn,hdb_errors:sK}=ne(),{HTTP_STATUS_CODES:jn,AUTHENTICATION_ERROR_MSGS:Jm,HDB_ERROR_MSGS:Yo}=sK,{UserEventMsg:tp}=wn(),jm=require("lodash"),{server:rp}=(ir(),se(Li)),iK=K();rp.getUser=(e,t)=>$N(e,t,t!=null);var VN={username:!0,active:!0,role:!0,password:!0},UN=new Map,H_=qN.searchByValue,oK=qN.searchByHash,aK=tK(eK.delete);async function cK(e){let t=kN.cleanAttributes(e,VN),r=FN.addUserValidation(t);if(r)throw Jn(new Error,r.message,jn.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 H_(n),s=s&&Array.from(s)}catch(u){throw Se.error("There was an error searching for a role in add user"),Se.error(u),u}if(!s||s.length<1)throw Jn(new Error,Yo.ROLE_NAME_NOT_FOUND(t.role),jn.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Jn(new Error,Yo.DUP_ROLES_FOUND(t.role),jn.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=ep.encrypt(t.password)),t.password=Xm.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await GN.insert(i)}catch(u){throw Se.error("There was an error searching for a user."),Se.error(u),u}Se.debug(o);try{await Ko()}catch(u){throw Se.error("Got an error setting users to global"),Se.error(u),u}if(o.skipped_hashes.length===1)throw Jn(new Error,Yo.USER_ALREADY_EXISTS(t.username),jn.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],Zm.signalUserChange(new tp(process.pid)),`${c.username} successfully added`}a(cK,"addUser");async function uK(e){let t=kN.cleanAttributes(e,VN);if(Pr.isEmptyOrZeroLength(t.username))throw new Error(PN);if(Pr.isEmptyOrZeroLength(t.password)&&Pr.isEmptyOrZeroLength(t.role)&&Pr.isEmptyOrZeroLength(t.active))throw new Error(vN);if(!Pr.isEmpty(t.password)&&Pr.isEmptyOrZeroLength(t.password.trim()))throw new Error(BN);if(!Pr.isEmpty(t.active)&&!Pr.isBoolean(t.active))throw new Error(xN);let r=lK(t.username);if(!Pr.isEmpty(t.password)&&!Pr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=ep.encrypt(t.password)),t.password=Xm.hash(t.password)),t.role==="")throw new Error(HN);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 H_(i)||[])}catch(c){throw Se.error("Got an error searching for a role."),Se.error(c),c}if(!o||o.length===0){let c=Yo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Se.error(c),Jn(new Error,c,jn.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Yo.ALTER_USER_DUP_ROLES(t.role);throw Se.error(c),Jn(new Error,c,jn.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 GN.update(n)}catch(i){throw Se.error("Error during update."),Se.error(i),i}try{await Ko()}catch(i){throw Se.error("Got an error setting users to global"),Se.error(i),i}return Zm.signalUserChange(new tp(process.pid)),s}a(uK,"alterUser");function lK(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(lK,"isClusterUser");async function _K(e){try{let t=FN.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Pr.isEmpty(global.hdb_users.get(e.username)))throw Jn(new Error,Yo.USER_NOT_EXIST(e.username),jn.NOT_FOUND,void 0,void 0,!0);let n;try{n=await aK(r)}catch(s){throw Se.error("Got an error deleting a user."),Se.error(s),s}Se.debug(n);try{await Ko()}catch(s){throw Se.error("Got an error setting users to global."),Se.error(s),s}return Zm.signalUserChange(new tp(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(_K,"dropUser");async function dK(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=jm.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await oK(r)}catch(s){throw Se.error("Got an error searching for a role."),Se.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Se.error(r),r}return t}a(dK,"userInfo");async function fK(){let e;try{e=await x_()}catch(t){throw Se.error("Got an error listing users."),Se.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(fK,"listUsersExternal");async function x_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await H_(e)}catch(o){throw Se.error("Got an error searching for roles."),Se.error(o),o}let r={};for(let o of t)r[o.id]=jm.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 H_(n)}catch(o){throw Se.error("Got an error searching for users."),Se.error(o),o}let i=new Map;for(let o of s)o=jm.cloneDeep(o),o.role=r[o.role],EK(o.role),i.set(o.username,o);return i}catch(e){throw Se.error("got an error listing users"),Se.error(e),Pr.errorizeMessage(e)}return null}a(x_,"listUsers");function EK(e){try{if(!e){Se.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(nK)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Se.error("Got an error trying to set system permissions."),Se.error(t)}}a(EK,"appendSystemTablesToRole");async function Ko(){try{let e=await x_();global.hdb_users=e}catch(e){throw Se.error(e),e}}a(Ko,"setUsersToGlobal");async function $N(e,t,r=!0){global.hdb_users||await Ko();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Jn(new Error,Jm.GENERIC_AUTH_FAIL,jn.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Jn(new Error,Jm.USER_INACTIVE,jn.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(UN.get(t)===n.password)return s;if(Xm.validate(n.password,t))UN.set(t,n.password);else throw Jn(new Error,Jm.GENERIC_AUTH_FAIL,jn.UNAUTHORIZED,void 0,void 0,!0)}return s}a($N,"findAndValidateUser");async function hK(){global.hdb_users||await Ko();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(hK,"getSuperUser");async function mK(){let e=await x_(),t=rK.getConfigFromFile(LN.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Pr.isEmpty(r)&&r?.role?.role===LN.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=ep.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+MN.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+MN.SERVER_SUFFIX.ADMIN,r}a(mK,"getClusterUser");var YN=[];rp.invalidateUser=function(e){for(let t of YN)try{t(e)}catch(r){iK.error("Error invalidating user",r)}};rp.onInvalidatedUser=function(e){YN.push(e)}});var Bc=g((Nce,JN)=>{"use strict";var Wi=K(),Br=U(),pK=qy(),bce=gs(),yce=Fi(),SK=vr(),{validateEvent:WN}=wn(),vc=In(),TK=require("process"),{resetDatabases:gK}=(Ae(),se(Fe)),RK={[Br.ITC_EVENT_TYPES.SCHEMA]:AK,[Br.ITC_EVENT_TYPES.USER]:zN};async function AK(e){let t=WN(e);if(t){Wi.error(t);return}Wi.trace("ITC schemaHandler received schema event:",e),await pK(e.message),await OK(e.message)}a(AK,"schemaHandler");async function OK(e){try{vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=gK();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Wi.error(t)}}a(OK,"syncSchemaMetadata");var QN=[];async function zN(e){try{try{vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Wi.warn(r)}let t=WN(e);if(t){Wi.error(t);return}Wi.trace(`ITC userHandler ${Br.HDB_ITC_CLIENT_PREFIX}${TK.pid} received user event:`,e),await SK.setUsersToGlobal();for(let r of QN)r()}catch(t){Wi.error(t)}}a(zN,"userHandler");zN.addListener=function(e){QN.push(e)};JN.exports=RK});var wn=g((Mce,XN)=>{"use strict";var wce=K(),np=Q(),bK=U(),{ITC_ERRORS:Hc}=Nr(),{parentPort:Cce,threadId:yK,isMainThread:NK,workerData:Dce}=require("worker_threads"),{onMessageFromWorkers:IK,broadcast:Lce,broadcastWithAcknowledgement:wK}=et();XN.exports={sendItcEvent:CK,validateEvent:jN,SchemaEventMsg:DK,UserEventMsg:LK};var G_;IK(async(e,t)=>{G_=G_||Bc(),jN(e),G_[e.type]&&await G_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function CK(e){return!NK&&e.message&&(e.message.originator=yK),wK(e)}a(CK,"sendItcEvent");function jN(e){if(typeof e!="object")return Hc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||np.isEmpty(e.type))return Hc.MISSING_TYPE;if(!e.hasOwnProperty("message")||np.isEmpty(e.message))return Hc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||np.isEmpty(e.message.originator))return Hc.MISSING_ORIGIN;if(bK.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Hc.INVALID_EVENT(e.type)}a(jN,"validateEvent");function DK(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(DK,"SchemaEventMsg");function LK(e){this.originator=e}a(LK,"UserEventMsg")});var Rs=g((vce,rI)=>{"use strict";var ZN=U(),Pce=Q(),F_=K(),eI=xy(),Wo,{sendItcEvent:tI}=wn();function MK(e){try{F_.trace("signalSchemaChange called with message:",e),Wo=Wo||Bc();let t=new eI(ZN.ITC_EVENT_TYPES.SCHEMA,e);return Wo.schema(t),tI(t)}catch(t){F_.error(t)}}a(MK,"signalSchemaChange");function UK(e){try{F_.trace("signalUserChange called with message:",e),Wo=Wo||Bc();let t=new eI(ZN.ITC_EVENT_TYPES.USER,e);return Wo.user(t),tI(t)}catch(t){F_.error(t)}}a(UK,"signalUserChange");rI.exports={signalSchemaChange:MK,signalUserChange:UK}});var q_=g((Hce,sI)=>{"use strict";var nI=Q(),PK=U(),vK=K(),BK=g_(),HK=T_(),xK=Rs(),{SchemaEventMsg:GK}=wn(),FK="already exists in";sI.exports=qK;async function qK(e,t,r){if(nI.isEmptyOrZeroLength(r))return r;let n=[];nI.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 kK(e,t.schema,t.name,i)})),s}a(qK,"lmdbCheckForNewAttributes");async function kK(e,t,r,n){let s=new HK(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await VK(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(FK))vK.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(kK,"createNewAttribute");async function VK(e){let t;return t=await BK(e),xK.signalSchemaChange(new GK(process.pid,PK.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(VK,"createAttribute")});var Qo=g((Gce,iI)=>{"use strict";var sp=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}};iI.exports=sp});var aI=g((qce,oI)=>{"use strict";var $K=Qo(),YK=U().OPERATIONS_ENUM,ip=class extends $K{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(YK.INSERT,r,n,s,i),this.records=t}};oI.exports=ip});var uI=g((Vce,cI)=>{"use strict";var KK=Qo(),WK=U().OPERATIONS_ENUM,op=class extends KK{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(WK.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};cI.exports=op});var _I=g((Yce,lI)=>{"use strict";var QK=Qo(),zK=U().OPERATIONS_ENUM,ap=class extends QK{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(zK.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};lI.exports=ap});var fI=g((Wce,dI)=>{"use strict";var JK=Qo(),jK=U().OPERATIONS_ENUM,cp=class extends JK{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(jK.DELETE,n,s,t,i),this.original_records=r}};dI.exports=cp});var xc=g((Jce,pI)=>{"use strict";var zce=require("path"),EI=Ye(),XK=aI(),ZK=uI(),eW=_I(),tW=fI(),zo=_t(),hI=Q(),{CONFIG_PARAMS:rW}=U(),mI=re();mI.initSync();var k_=U().OPERATIONS_ENUM,{getTransactionAuditStorePath:nW}=Qe();pI.exports=sW;async function sW(e,t){if(mI.get(rW.LOGGING_AUDITLOG)===!1)return;let r=nW(e.schema,e.table),n=await EI.openEnvironment(r,e.table,!0),s=iW(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){EI.initializeDBIs(n,zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,zo.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),hI.isEmpty(s.user_name)||n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(sW,"writeTransaction");function iW(e,t){let r=hI.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===k_.INSERT)return new XK(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===k_.UPDATE)return new ZK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===k_.UPSERT)return new eW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===k_.DELETE)return new tW(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(iW,"createTransactionObject")});var up=g((Zce,SI)=>{"use strict";var oW=Lc(),Xce=Mc(),Gc=U(),aW=Uc(),cW=Fo().insertRecords,uW=Ye(),lW=K(),_W=q_(),{getSchemaPath:dW}=Qe(),fW=xc();SI.exports=EW;async function EW(e){try{let{schema_table:t,attributes:r}=oW(e);aW(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 _W(e.hdb_auth_header,t,r),s=dW(e.schema,e.table),i=await uW.openEnvironment(s,e.table),o=await cW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await fW(e,o)}catch(c){lW.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(EW,"lmdbCreateRecords")});var RI=g((tue,gI)=>{"use strict";var TI=U(),hW=up(),mW=Mc(),pW=require("fs-extra"),{getSchemaPath:SW}=Qe();gI.exports=TW;async function TW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new mW(TI.SYSTEM_SCHEMA_NAME,TI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await hW(r),await pW.mkdirp(SW(e.schema))}a(TW,"lmdbCreateSchema")});var OI=g((nue,AI)=>{"use strict";var lp=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}};AI.exports=lp});var II=g((cue,NI)=>{"use strict";var bI=Ye(),_p=Dr(),dp=Nr().LMDB_ERRORS_ENUM,gW=_t(),yI=K(),iue=Q(),RW=require("lmdb"),AW=OI(),OW=U(),{OVERFLOW_MARKER:oue,MAX_SEARCH_KEY_LENGTH:aue}=gW,bW=OW.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function yW(e,t,r,n){if(_p.validateEnv(e),t===void 0)throw new Error(dp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(dp.IDS_REQUIRED):new Error(dp.IDS_MUST_BE_ITERABLE);try{let s=bI.listDBIs(e);bI.initializeDBIs(e,t,s);let i=new AW,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[bW]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,RW.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 b=e.dbis[T],R=h[T];if(R!=null)try{let L=_p.getIndexedValues(R);if(L)for(let H=0,P=L.length;H<P;H++)b.remove(L[H],o)}catch{yI.warn(`cannot delete from attribute: ${T}, ${R}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){yI.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=_p.getNextMonotonicTime(),i}catch(s){throw s}}a(yW,"deleteRecords");NI.exports={deleteRecords:yW}});var Fc=g((lue,CI)=>{"use strict";var Jo=Q(),NW=II(),IW=Ye(),{getSchemaPath:wW}=Qe(),CW=xc(),DW=K();CI.exports=LW;async function LW(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Jo.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Jo.isEmptyOrZeroLength(e.hash_values)&&!Jo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];Jo.isEmpty(u)||e.hash_values.push(u)}}if(Jo.isEmptyOrZeroLength(e.hash_values))return wI([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Jo.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=wW(e.schema,e.table),i=await IW.openEnvironment(s,e.table),o=await NW.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await CW(e,o)}catch(c){DW.error(`unable to write transaction due to ${c.message}`)}return wI(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(LW,"lmdbDeleteRecords");function wI(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(wI,"createDeleteResponse")});var Ep=g((fue,DI)=>{"use strict";var MW=U(),due=Dr();function fp(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(fp,"parseRow");function UW(e,t,r,n){let s=fp(r,e);n.push(s)}a(UW,"searchAll");function PW(e,t,r,n){let s=fp(r,e);n[t]=s}a(PW,"searchAllToMap");function vW(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(vW,"iterateDBI");function Qi(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(Qi,"pushResults");function BW(e,t,r,n,s,i){t.toString().endsWith(e)&&Qi(t,r,n,s,i)}a(BW,"endsWith");function HW(e,t,r,n,s,i){t.toString().includes(e)&&Qi(t,r,n,s,i)}a(HW,"contains");function xW(e,t,r,n,s,i){t>e&&Qi(t,r,n,s,i)}a(xW,"greaterThanCompare");function GW(e,t,r,n,s,i){t>=e&&Qi(t,r,n,s,i)}a(GW,"greaterThanEqualCompare");function FW(e,t,r,n,s,i){t<e&&Qi(t,r,n,s,i)}a(FW,"lessThanCompare");function qW(e,t,r,n,s,i){t<=e&&Qi(t,r,n,s,i)}a(qW,"lessThanEqualCompare");DI.exports={parseRow:fp,searchAll:UW,searchAllToMap:PW,iterateDBI:vW,endsWith:BW,contains:HW,greaterThanCompare:xW,greaterThanEqualCompare:GW,lessThanCompare:FW,lessThanEqualCompare:qW,pushResults:Qi}});var jo=g((Sue,HI)=>{"use strict";var ri=Ye(),hue=K(),Hr=Dr(),V_=_t(),ct=Nr().LMDB_ERRORS_ENUM,mue=Q(),kW=U(),$_=Ep(),{parseRow:VW}=$_,pue=require("lmdb"),{OVERFLOW_MARKER:LI,MAX_SEARCH_KEY_LENGTH:$W}=V_;function MI(e,t,r,n=!1,s=void 0,i=void 0){return zi(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(MI,"iterateFullIndex");function qc(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return zi(e,t,r,(l,d,f,E)=>{let b={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?(b.values=!1,d.getRange(b).map(R=>({value:R}))):d.getRange(b)})}a(qc,"iterateRangeBetween");function zi(e,t,r,n){let s=e.database||e,i=ri.openDBI(s,r);i[V_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ri.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(zi,"setupTransaction");function UI(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(LI)){if(!s)if(r)s=ri.openDBI(e,r);else{let u=ri.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=ri.openDBI(e,u[_]),!s[V_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(UI,"getOverflowCheck");function YW(e,t,r,n=!1,s=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);return zi(e,t,t,(o,c,u)=>(Y_(r),r=kc(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>VW(_.value,r))))}a(YW,"searchAll");function KW(e,t,r,n=!1,s=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);Y_(r),r=kc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of MI(e,t,t,n,s,i))o.set(c,$_.parseRow(u,r));return o}a(KW,"searchAllToMap");function WW(e,t,r=!1,n=void 0,s=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ct.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=MI(e,void 0,t,r,n,s),c=o.transaction,u=UI(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(WW,"iterateDBI");function QW(e,t){if(Hr.validateEnv(e),t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);return ri.statDBI(e,t).entryCount}a(QW,"countAll");function zW(e,t,r,n,s=!1,i=void 0,o=void 0){return ni(e,r,n),zi(e,t,r,(c,u,_,l)=>(n=Hr.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(zW,"equals");function JW(e,t,r){return ni(e,t,r),ri.openDBI(e,t).getValuesCount(r)}a(JW,"count");function jW(e,t,r,n,s=!1,i=void 0,o=void 0){return ni(e,r,n),zi(e,null,r,(c,u)=>{n=Hr.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(jW,"startsWith");function XW(e,t,r,n,s=!1,i=void 0,o=void 0){return PI(e,t,r,n,s,i,o,!0)}a(XW,"endsWith");function PI(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ni(e,r,n),zi(e,null,r,(u,_,l,d)=>{let f=UI(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(LI)?_.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))?_[V_.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(PI,"contains");function ZW(e,t,r,n,s=!1,i=void 0,o=void 0){ni(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),qc(e,t,r,n,u,s,i,o,!0,!1)}a(ZW,"greaterThan");function eQ(e,t,r,n,s=!1,i=void 0,o=void 0){ni(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),qc(e,t,r,n,u,s,i,o,!1,!1)}a(eQ,"greaterThanEqual");function tQ(e,t,r,n,s=!1,i=void 0,o=void 0){ni(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),qc(e,t,r,u,n,s,i,o,!1,!0)}a(tQ,"lessThan");function rQ(e,t,r,n,s=!1,i=void 0,o=void 0){ni(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),qc(e,t,r,u,n,s,i,o,!1,!1)}a(rQ,"lessThanEqual");function nQ(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Hr.validateEnv(e),r===void 0)throw new Error(ct.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ct.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ct.END_VALUE_REQUIRED);if(n=Hr.convertKeyValueToWrite(n),s=Hr.convertKeyValueToWrite(s),n>s)throw new Error(ct.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return qc(e,t,r,n,s,i,o,c)}a(nQ,"between");function sQ(e,t,r,n){Hr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);if(Y_(r),r=kc(s,r),n===void 0)throw new Error(ct.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=$_.parseRow(c,r)),o}a(sQ,"searchByHash");function iQ(e,t,r){Hr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ct.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(iQ,"checkHashExists");function oQ(e,t,r,n,s=[]){return BI(e,t,r,n,s),vI(e,t,r,n,s).map(i=>i[1])}a(oQ,"batchSearchByHash");function aQ(e,t,r,n,s=[]){BI(e,t,r,n,s);let i=new Map;for(let[o,c]of vI(e,t,r,n,s))i.set(o,c);return i}a(aQ,"batchSearchByHashToMap");function vI(e,t,r,n,s=[]){return zi(e,t,t,(i,o,c)=>{r=kc(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,$_.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(vI,"batchHashSearch");function BI(e,t,r,n,s){if(Hr.validateEnv(e),t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);if(Y_(r),n==null)throw new Error(ct.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ct.IDS_MUST_BE_ITERABLE)}a(BI,"initializeBatchSearchByHash");function Y_(e){if(!Array.isArray(e))throw e===void 0?new Error(ct.FETCH_ATTRIBUTES_REQUIRED):new Error(ct.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Y_,"validateFetchAttributes");function ni(e,t,r){if(Hr.validateEnv(e),t===void 0)throw new Error(ct.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ct.SEARCH_VALUE_REQUIRED);if(r?.length>$W)throw new Error(ct.SEARCH_VALUE_TOO_LARGE)}a(ni,"validateComparisonFunctions");function kc(e,t){return t.length===1&&kW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ri.listDBIs(e)),t}a(kc,"setGetWholeRowAttributes");HI.exports={searchAll:YW,searchAllToMap:KW,count:JW,countAll:QW,equals:zW,startsWith:jW,endsWith:XW,contains:PI,searchByHash:sQ,setGetWholeRowAttributes:kc,batchSearchByHash:oQ,batchSearchByHashToMap:aQ,checkHashExists:iQ,iterateDBI:WW,greaterThan:ZW,greaterThanEqual:eQ,lessThan:tQ,lessThanEqual:rQ,between:nQ}});var Xo=g((gue,kI)=>{var xI=require("lodash"),GI=Xe(),fe=require("joi"),cQ=Q(),{hdb_schema_table:Vc,checkValidTable:FI,hdb_table:qI,hdb_database:K_}=Qn(),{handleHDBError:uQ,hdb_errors:lQ}=ne(),{getDatabases:_Q}=(Ae(),se(Fe)),{HTTP_STATUS_CODES:dQ}=lQ,fQ=fe.object({database:K_,schema:K_,table:qI,search_attribute:Vc,search_value:fe.any().required(),get_attributes:fe.array().min(1).items(fe.alternatives(Vc,fe.object())).optional(),desc:fe.bool(),limit:fe.number().integer().min(1),offset:fe.number().integer().min(0)}),EQ=fe.object({database:K_,schema:K_,table:qI,operator:fe.string().valid("and","or").default("and").lowercase(),offset:fe.number().integer().min(0),limit:fe.number().integer().min(1),get_attributes:fe.array().min(1).items(fe.alternatives(Vc,fe.object())).optional(),sort:fe.object({attribute:fe.alternatives(Vc,fe.array().min(1)),descending:fe.bool().optional()}).optional(),conditions:fe.array().min(1).items(fe.alternatives(fe.object({operator:fe.string().valid("and","or").default("and").lowercase(),conditions:fe.array()}),fe.object({search_attribute:fe.alternatives(Vc,fe.array().min(1)),search_type:fe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:fe.when("search_type",{switch:[{is:"equals",then:fe.any()},{is:"between",then:fe.array().items(fe.alternatives([fe.string(),fe.number()])).length(2)}],otherwise:fe.alternatives(fe.string(),fe.number())}).required()}))).required()});kI.exports=function(e,t){let r=null;switch(t){case"value":r=GI.validateBySchema(e,fQ);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(FI("database",e.schema)),i(FI("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=GI.validateBySchema(e,EQ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=cQ.checkGlobalSchemaTable(e.schema,e.table);if(s)return uQ(new Error,s,dQ.NOT_FOUND);let o=_Q()[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 _=xI.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!l.name&&!xI.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 hp=g((Aue,VI)=>{"use strict";var hQ=Ye(),mQ=Xo(),{getSchemaPath:pQ}=Qe();VI.exports=SQ;function SQ(e){let t=mQ(e,"hashes");if(t)throw t;let r=pQ(e.schema,e.table);return hQ.openEnvironment(r,e.table)}a(SQ,"initialize")});var mp=g((bue,$I)=>{"use strict";var TQ=jo(),gQ=hp();$I.exports=RQ;async function RQ(e){let t=await gQ(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return TQ.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(RQ,"lmdbGetDataByHash")});var Zo=g((Nue,YI)=>{"use strict";var pp=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};YI.exports=pp});var WI=g((Cue,KI)=>{"use strict";var wue=Zo(),AQ=jo(),OQ=hp();KI.exports=bQ;async function bQ(e){let t=await OQ(e),r=global.hdb_schema[e.schema][e.table];return AQ.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(bQ,"lmdbSearchByHash")});var Xn=g((Lue,QI)=>{"use strict";var Sp=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}};QI.exports=Sp});var W_=g((Uue,ew)=>{"use strict";var Qt=jo(),yQ=Ye(),NQ=Q(),Ee=_t(),Ji=U(),IQ=xi(),zI=Nr().LMDB_ERRORS_ENUM,{getSchemaPath:wQ}=Qe(),As=Ji.SEARCH_WILDCARDS;async function CQ(e,t,r){let n;e.schema===Ji.SYSTEM_SCHEMA_NAME?n=IQ[e.table]:n=global.hdb_schema[e.schema][e.table];let s=ZI(e,n.hash_attribute,r,t);return jI(e,s,n.hash_attribute,r)}a(CQ,"prepSearch");async function jI(e,t,r,n){let s=wQ(e.schema,e.table),i=await yQ.openEnvironment(s,e.table),o=XI(i,e,t,r),c=o.transaction||i;if([Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ee.SEARCH_TYPES.SEARCH_ALL,Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(DQ(e,r)===!1){let l=e.search_attribute;if(l===r)return n?JI(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return n?JI(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return n===!0?Qt.batchSearchByHashToMap(c,r,e.get_attributes,_):Qt.batchSearchByHash(c,r,e.get_attributes,_)}a(jI,"executeSearch");function XI(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 Ee.SEARCH_TYPES.EQUALS:s=Qt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.CONTAINS:s=Qt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.ENDS_WITH:case Ee.SEARCH_TYPES._ENDS_WITH:s=Qt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.STARTS_WITH:case Ee.SEARCH_TYPES._STARTS_WITH:s=Qt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Qt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Qt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.SEARCH_ALL:return Qt.searchAll(e,n,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Qt.searchAllToMap(e,n,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.BETWEEN:s=Qt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN:case Ee.SEARCH_TYPES._GREATER_THAN:s=Qt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ee.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Qt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN:case Ee.SEARCH_TYPES._LESS_THAN:s=Qt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN_EQUAL:case Ee.SEARCH_TYPES._LESS_THAN_EQUAL:s=Qt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return s}a(XI,"searchByType");function JI(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(JI,"createMapFromIterable");function DQ(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(DQ,"checkToFetchMore");function ZI(e,t,r,n){if(NQ.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),As.indexOf(s)>-1)return r===!0?Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ee.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(As[0])<0&&s.indexOf(As[1])<0)return c===!0?r===!0?Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ee.SEARCH_TYPES.EQUALS;if(As.indexOf(i)>=0&&As.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Ee.SEARCH_TYPES.CONTAINS;if(As.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ee.SEARCH_TYPES.ENDS_WITH;if(As.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Ee.SEARCH_TYPES.STARTS_WITH;if(s.includes(As[0])||s.includes(As[1]))return Ee.SEARCH_TYPES.EQUALS;throw new Error(zI.UNKNOWN_SEARCH_TYPE)}else switch(n){case Ji.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ee.SEARCH_TYPES.BETWEEN;case Ji.VALUE_SEARCH_COMPARATORS.GREATER:return Ee.SEARCH_TYPES.GREATER_THAN;case Ji.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ee.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ji.VALUE_SEARCH_COMPARATORS.LESS:return Ee.SEARCH_TYPES.LESS_THAN;case Ji.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ee.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(zI.UNKNOWN_SEARCH_TYPE)}}a(ZI,"createSearchTypeFromSearchObject");ew.exports={executeSearch:jI,createSearchTypeFromSearchObject:ZI,prepSearch:CQ,searchByType:XI}});var rw=g((Bue,tw)=>{"use strict";var vue=Xn(),LQ=Xo(),MQ=Q(),UQ=U(),PQ=W_();tw.exports=vQ;function vQ(e,t){if(!MQ.isEmpty(t)&&UQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=LQ(e,"value");if(n)throw n;return PQ.prepSearch(e,t,!0)}a(vQ,"lmdbGetDataByValue")});var $c=g((Gue,nw)=>{"use strict";var xue=Xn(),BQ=Xo(),HQ=Q(),xQ=U(),GQ=W_();nw.exports=FQ;async function FQ(e,t){if(!HQ.isEmpty(t)&&xQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=BQ(e,"value");if(n)throw n;return GQ.prepSearch(e,t,!1)}a(FQ,"lmdbSearchByValue")});var iw=g((kue,sw)=>{"use strict";var que=_t(),Tp=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}},gp=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},Rp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};sw.exports={SearchByConditionsObject:Tp,SearchCondition:gp,SortAttribute:Rp}});var lw=g((Kue,uw)=>{"use strict";var $ue=iw().SearchByConditionsObject,qQ=Xn(),kQ=Xo(),Ap=jo(),Q_=_t(),{Resource:Yue}=(bn(),se(Op)),cw=W_(),VQ=Ep(),$Q=require("lodash"),{getSchemaPath:YQ}=Qe(),ow=Ye(),{handleHDBError:KQ,hdb_errors:WQ}=ne(),{HTTP_STATUS_CODES:QQ}=WQ,zQ=1e8;uw.exports=JQ;async function JQ(e){let t=kQ(e,"conditions");if(t)throw KQ(t,t.message,QQ.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=YQ(e.schema,e.table),n=await ow.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)ow.openDBI(n,_.search_attribute);let i=$Q.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===Q_.SEARCH_TYPES.EQUALS?_.estimated_count=Ap.count(n,_.search_attribute,_.search_value):l===Q_.SEARCH_TYPES.CONTAINS||l===Q_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=zQ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await aw(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(cw.filterByType),d=l.length,f=Ap.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=>VQ.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await aw(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=Ap.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(JQ,"lmdbSearchByConditions");async function aw(e,t,r,n){let s=new qQ(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===Q_.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,cw.searchByType(e,s,i,n).map(o=>o.value)}a(aw,"executeConditionSearch")});var Yc=g((Que,_w)=>{"use strict";var jQ=U().OPERATIONS_ENUM,bp=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=jQ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};_w.exports=bp});var yp=g((Jue,Tw)=>{"use strict";var hw=Xn(),mw=Yc(),pw=$c(),Sw=Fc(),ur=U(),dw=Q(),fw=Ye(),{getTransactionAuditStorePath:XQ,getSchemaPath:ZQ}=Qe(),Ew=K();Tw.exports=ez;async function ez(e){try{if(dw.isEmpty(global.hdb_schema[e.schema])||dw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await tz(e),await rz(e);let t=ZQ(e.schema,e.table);try{await fw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Ew.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=XQ(e.schema,e.table);await fw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Ew.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(ez,"lmdbDropTable");async function tz(e){let t=new hw(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await pw(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 mw(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await Sw(s)}a(tz,"deleteAttributesFromSystem");async function rz(e){let t=new hw(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await pw(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 mw(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await Sw(s)}catch(i){throw i}}a(rz,"dropTableFromSystem")});var Rw=g((Xue,gw)=>{"use strict";var nz=require("fs-extra"),sz=Xn(),iz=Zo(),oz=Yc(),az=yp(),cz=Fc(),uz=mp(),lz=$c(),Os=U(),{getSchemaPath:_z}=Qe(),{handleHDBError:dz,hdb_errors:fz}=ne(),{HDB_ERROR_MSGS:Ez,HTTP_STATUS_CODES:hz}=fz;gw.exports=mz;async function mz(e){let t;try{t=await pz(e.schema);let r=new sz(Os.SYSTEM_SCHEMA_NAME,Os.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Os.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Os.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await lz(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await az(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new oz(Os.SYSTEM_SCHEMA_NAME,Os.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await cz(s);let i=_z(t);await nz.remove(i)}catch(r){throw r}}a(mz,"lmdbDropSchema");async function pz(e){let t=new iz(Os.SYSTEM_SCHEMA_NAME,Os.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Os.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await uz(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw dz(new Error,Ez.SCHEMA_NOT_FOUND(e),hz.NOT_FOUND,void 0,void 0,!0);return n}a(pz,"validateDropSchema")});var Ip=g((ele,Aw)=>{"use strict";var Np=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};Aw.exports=Np});var bw=g((nle,Ow)=>{"use strict";var Sz=require("fs-extra"),z_=Ye(),{getTransactionAuditStorePath:Tz}=Qe(),wp=_t(),rle=Ip();Ow.exports=gz;async function gz(e){let t;try{let r=Tz(e.schema,e.table);await Sz.mkdirp(r),t=await z_.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{z_.createDBI(t,wp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),z_.createDBI(t,wp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),z_.createDBI(t,wp.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(gz,"createTransactionsAuditEnvironment")});var ww=g((ile,Iw)=>{"use strict";var Cp=U(),yw=Ye(),Rz=Fo(),{getSystemSchemaPath:Az,getSchemaPath:Oz}=Qe(),bz=xi(),yz=g_(),Dp=T_(),Nz=K(),Iz=bw(),Mp=bz.hdb_table,Nw=[];for(let e=0;e<Mp.attributes.length;e++)Nw.push(Mp.attributes[e].attribute);Iw.exports=wz;async function wz(e,t){let r=Oz(t.schema,t.table),n=new Dp(t.schema,t.table,Cp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Dp(t.schema,t.table,Cp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Dp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await yw.createEnvironment(r,t.table),e!==void 0){let o=await yw.openEnvironment(Az(),Cp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Rz.insertRecords(o,Mp.hash_attribute,Nw,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Lp(n),await Lp(s),await Lp(i)}await Iz(t)}catch(o){throw o}}a(wz,"lmdbCreateTable");async function Lp(e){try{await yz(e)}catch(t){Nz.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Lp,"createAttribute")});var Dw=g((ale,Cw)=>{"use strict";var Cz=Lc(),Dz=Uc(),Lz=q_(),Kc=U(),Mz=Fo().updateRecords,Uz=Ye(),{getSchemaPath:Pz}=Qe(),vz=xc(),Bz=K();Cw.exports=Hz;async function Hz(e){try{let{schema_table:t,attributes:r}=Cz(e);Dz(e,r,t.hash_attribute),e.schema!==Kc.SYSTEM_SCHEMA_NAME&&(r.includes(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Lz(e.hdb_auth_header,t,r),s=Pz(e.schema,e.table),i=await Uz.openEnvironment(s,e.table),o=await Mz(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await vz(e,o)}catch(c){Bz.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(Hz,"lmdbUpdateRecords")});var Mw=g((ule,Lw)=>{"use strict";var xz=U().OPERATIONS_ENUM,Up=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=xz.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Lw.exports=Up});var Pw=g((dle,Uw)=>{"use strict";var _le=Mw(),Gz=Lc(),Fz=Uc(),qz=q_(),Wc=U(),kz=Fo().upsertRecords,Vz=Ye(),{getSchemaPath:$z}=Qe(),Yz=xc(),Kz=K(),{handleHDBError:Wz,hdb_errors:Qz}=ne();Uw.exports=zz;async function zz(e){let t;try{t=Gz(e)}catch(u){throw Wz(u,u.message,Qz.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;Fz(e,n,r.hash_attribute),e.schema!==Wc.SYSTEM_SCHEMA_NAME&&(n.includes(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await qz(e.hdb_auth_header,r,n),i=$z(e.schema,e.table),o=await Vz.openEnvironment(i,e.table),c=await kz(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await Yz(e,c)}catch(u){Kz.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(zz,"lmdbUpsertRecords")});var Bw=g((Ele,vw)=>{"use strict";var Pp=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};vw.exports=Pp});var xw=g((mle,Hw)=>{"use strict";var vp=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}};Hw.exports=vp});var qw=g((Tle,Fw)=>{"use strict";var Bp=Ye(),{getTransactionAuditStorePath:Jz}=Qe(),Sle=Bw(),Qc=_t(),jz=Q(),Gw=xw(),Xz=require("util").promisify,Zz=Xz(setTimeout),eJ=1e4,tJ=100;Fw.exports=rJ;async function rJ(e){let t=Jz(e.schema,e.table),r=await Bp.openEnvironment(t,e.table,!0),n=Bp.listDBIs(r);Bp.initializeDBIs(r,Qc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new Gw;do s=await nJ(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 Zz(tJ);while(s.transactions_deleted>0);return i}a(rJ,"deleteAuditLogsBefore");async function nJ(e,t){let r=new Gw;try{let n=e.dbis[Qc.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[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];jz.isEmpty(c)||(s=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>eJ)break}return await s,r}catch(n){throw n}}a(nJ,"deleteTransactions")});var Vw=g((Rle,kw)=>{"use strict";var Hp=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};kw.exports=Hp});var Yw=g((ble,$w)=>{"use strict";var sJ=Xn(),iJ=Yc(),Ole=Vw(),Zn=U(),oJ=Q(),xp=Ye(),aJ=xi(),cJ=$c(),uJ=Fc(),{getSchemaPath:lJ}=Qe();$w.exports=_J;async function _J(e,t=!0){let r;e.schema===Zn.SYSTEM_SCHEMA_NAME?r=aJ[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await fJ(e),s=lJ(e.schema,e.table),i=await xp.openEnvironment(s,e.table);return t===!0&&await dJ(e,i,r.hash_attribute),xp.dropDBI(i,e.attribute),n}a(_J,"lmdbDropAttribute");async function dJ(e,t,r){let n=xp.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(dJ,"removeAttributeFromAllObjects");async function fJ(e){let t=new sJ(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 cJ(t)).filter(o=>o[Zn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(oJ.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 iJ(Zn.SYSTEM_SCHEMA_NAME,Zn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return uJ(i)}a(fJ,"dropAttributeFromSystem")});var jw=g((Ile,Jw)=>{"use strict";var Gp=Ye(),ea=_t(),Nle=Dr(),Fp=U(),Kw=Q(),{getTransactionAuditStorePath:EJ}=Qe(),hJ=jo(),J_=Qo(),mJ=K();Jw.exports=pJ;async function pJ(e){let t=EJ(e.schema,e.table),r=await Gp.openEnvironment(t,e.table,!0),n=Gp.listDBIs(r);Gp.initializeDBIs(r,ea.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Fp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Ww(r,e.search_values);case Fp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,TJ(r,e.search_values,s);case Fp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return SJ(r,e.search_values);default:return Ww(r)}}a(pJ,"readAuditLog");function Ww(e,t=[0,Date.now()]){Kw.isEmpty(t[0])&&(t[0]=0),Kw.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ea.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 J_,s))}a(Ww,"searchTransactionsByTimestamp");function SJ(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[ea.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,zw(e,i))}return Object.fromEntries(r)}a(SJ,"searchTransactionsByUsername");function TJ(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=hJ.equals(e,ea.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ea.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=zw(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);Qw(u,"records",r,l,o),Qw(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(TJ,"searchTransactionsByHashValues");function Qw(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 J_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new J_(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(Qw,"loopRecords");function zw(e,t){let r=[];try{let n=e.dbis[ea.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 J_,i);r.push(o)}}catch(i){mJ.warn(i)}return r}catch(n){throw n}}a(zw,"batchSearchTransactions")});var Zw=g((Lle,Xw)=>{"use strict";var{getSchemaPath:Cle}=Qe(),Dle=Ye(),{database:gJ}=(Ae(),se(Fe));Xw.exports={writeTransaction:RJ};async function RJ(e,t,r){return gJ({database:e,table:t}).transaction(r)}a(RJ,"writeTransaction")});var nC=g((Ule,rC)=>{"use strict";var{getSchemaPath:eC}=Qe(),tC=Ye();rC.exports={flush:AJ,resetReadTxn:OJ};async function AJ(e,t){return(await tC.openEnvironment(eC(e,t),t.toString())).flushed}a(AJ,"flush");async function OJ(e,t){try{(await tC.openEnvironment(eC(e,t),t.toString())).resetReadTxn()}catch{}}a(OJ,"resetReadTxn")});var aC=g((vle,oC)=>{"use strict";var{Readable:bJ}=require("stream"),{getDatabases:yJ}=(Ae(),se(Fe)),{readSync:NJ,openSync:IJ,createReadStream:sC}=require("fs"),{open:wJ}=require("lmdb"),iC=u_(),CJ=__(),{AUDIT_STORE_OPTIONS:DJ}=(Bi(),se(cC)),{INTERNAL_DBIS_NAME:LJ,AUDIT_STORE_NAME:MJ}=_t();oC.exports=PJ;var qp=32768,UJ=100;async function PJ(e){let t=e.database||e.schema||"data",r=yJ()[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=wJ({noSync:!0,maxDbs:CJ.MAX_DBS}),f,E=d.openDB(LJ,new iC(!1)),h=l.useReadTransaction(),p=0,S=a(async function(b,R){R.encoding="binary",R.encoder=void 0;let L=d.openDB(b,R),H=l.openDB(b,R);for(let{key:P,version:k,value:B}of H.getRange({transaction:h,versions:H.useVersions}))f=L.put(P,B,k),p++%UJ===0&&(await new Promise(J=>setTimeout(J,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:b,value:R}of l.getRange({transaction:h,start:!1}))if(s.some(L=>b.startsWith?.(L+"/"))){E.put(b,R);let[,L]=b.split("/"),H=!L,P=new iC(!H,H);await S(b,P)}e.include_audit&&await S(MJ,Object.assign({},DJ)),await f;let T=sC(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=IJ(o.path);return o.transaction(()=>{let _=Buffer.alloc(qp);NJ(c,_,0,qp),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=sC(null,{fd:c,start:qp}),f=new bJ.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(PJ,"getBackup")});var _C=g((Hle,lC)=>{"use strict";var vJ=K(),{handleHDBError:BJ}=ne(),HJ=qb(),xJ=g_(),GJ=up(),FJ=RI(),qJ=Fc(),kJ=mp(),VJ=WI(),$J=rw(),YJ=$c(),KJ=lw(),WJ=Rw(),QJ=ww(),zJ=Dw(),JJ=Pw(),jJ=qw(),XJ=yp(),ZJ=Yw(),e2=jw(),t2=Zw(),uC=nC(),r2=aC(),kp=class extends HJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return KJ(t)}async getDataByHash(t){return await kJ(t)}async searchByHash(t){return await VJ(t)}async getDataByValue(t,r){return await $J(t,r)}async searchByValue(t){return await YJ(t)}async createSchema(t){return await FJ(t)}async dropSchema(t){return await WJ(t)}async createTable(t,r){return await QJ(t,r)}async dropTable(t){return await XJ(t)}async createAttribute(t){return await xJ(t)}async createRecords(t){return await GJ(t)}async updateRecords(t){return await zJ(t)}async upsertRecords(t){try{return await JJ(t)}catch(r){throw BJ(r,null,null,vJ.ERR,r)}}async deleteRecords(t){return await qJ(t)}async dropAttribute(t){return await ZJ(t)}async deleteAuditLogsBefore(t){return await jJ(t)}async readAuditLog(t){return await e2(t)}writeTransaction(t,r,n){return t2.writeTransaction(t,r,n)}flush(t,r){return uC.flush(t,r)}resetReadTxn(t,r){return uC.resetReadTxn(t,r)}getBackup(t){return r2(t)}};lC.exports=kp});function a2(){o2=setInterval(function(){for(let e of Vp)if(e.stale){let t=e[Oe]?.url;EC.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},i2).unref()}var $p,fC,EC,n2,Vp,s2,zc,dC,ji,j_,i2,o2,Yp=Re(()=>{$p=x(Dr()),fC=x(ne()),EC=x(K());bn();n2=100,Vp=new Set,s2=25e3,ji=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=1;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===1)return this.readTxnsUsed=1,this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0),Vp.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Vp.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(zc&&performance.now()-dC>s2)throw new fC.ServerError("Outstanding write transactions have too long of queue, please try again later",503)}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,$p.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(),this.open=t?.letItLinger?2:0;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<n2>>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 zc||(zc=s,dC=performance.now(),zc.then(()=>{zc=null})),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=0,this.writes=[]}},j_=class extends ji{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,$p.getNextMonotonicTime)())}getReadTxn(){}},i2=3e4;a(a2,"startMonitoringTxns");a2()});function ze(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&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 ji;e.timestamp&&(n.timestamp=e.timestamp),n[Oe]=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({letItLinger:r?.letItLinger});return u.then?u.then(()=>c):c}function o(c){throw n.abort({}),c}}var hC,Xi=Re(()=>{hC=require("../../index");bn();Yp();a(ze,"transaction");(0,hC._assignPackageExport)("transaction",ze);ze.commit=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};ze.abort=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var bC={};$e(bC,{ResourceBridge:()=>Qp});function zp({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 pC(e,t){let r=es(e),n=zp(e,r);if(!r)throw new Cn.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;ze(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&&Z_(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 es(e){let t=e.database||e.schema||u2,r=Dn()[t];if(!r)throw(0,Cn.handleHDBError)(new Error,c2.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function SC(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*TC(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 gC,X_,Cn,RC,AC,Ln,Kp,Wp,OC,c2,u2,l2,_2,mC,Qp,yC=Re(()=>{"use strict";gC=x(_C()),X_=x(Xo()),Cn=x(ne());Ae();RC=x(Lc()),AC=x(Uc()),Ln=x(U()),Kp=x(Rs()),Wp=x(wn()),OC=x(Q());Xi();ed();({HDB_ERROR_MSGS:c2}=Cn.hdb_errors),u2="data",l2=1e4,_2=10,Qp=class extends gC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),mC=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,X_.default)(t,"conditions");if(r)throw(0,Cn.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=es(t);if(!n)throw new Cn.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:zp(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 Cn.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}]}at({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await es(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=es(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){es(t).dropTable()}createSchema(t){return Jc({database:t.schema,table:null}),Kp.signalSchemaChange(new Wp.SchemaEventMsg(process.pid,Ln.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Jp(t.schema),Kp.signalSchemaChange(new Wp.SchemaEventMsg(process.pid,Ln.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,mC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,RC.default)(t);(0,AC.default)(t,n,r.primaryKey);let s,i=Dn()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return ze(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=Z_(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=Dn()[t.schema][t.table],n={user:t.hdb_user};return ze(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 SC(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Dn()[t.schema][t.table];if(!r.createdTimeProperty)throw new Cn.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:Ln.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,OC.async_set_timeout)(_2),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%l2===0&&await _();return u.length>0&&await _(),s?SC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,X_.default)(t,"hashes");if(r)throw r;return pC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of pC(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Ln.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,X_.default)(t,"value");if(n)throw n;let s=es(t);if(!s)throw new Cn.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===Ln.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:zp(t,s)})}async getDataByValue(t,r){let n=new Map,s=es(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){es({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return es(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=es(t),n={};switch(t.search_type){case Ln.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 Ln.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of TC(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return TC(r,t.search_values?.[0],t.search_values?.[1])}}};a(zp,"getSelect");a(pC,"getRecords");a(es,"getTable");a(SC,"createDeleteResponse");a(TC,"groupRecordsInHistory")});var In=g((Xle,NC)=>{"use strict";var{ResourceBridge:d2}=(yC(),se(bC)),f2=re();f2.initSync();var td;function E2(){return td||(td=new d2,td)}a(E2,"getBridge");NC.exports=E2()});var DC=g((e_e,CC)=>{"use strict";var IC=require("lodash"),jc=require("mathjs"),h2=require("jsonata"),wC=Q();CC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?IC.uniqWith(e,IC.isEqual):e,searchJSON:m2,mad:Xc.bind(null,jc.mad),mean:Xc.bind(null,jc.mean),mode:Xc.bind(null,jc.mode),prod:Xc.bind(null,jc.prod),median:Xc.bind(null,jc.median)};function Xc(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(Xc,"aggregateFunction");function m2(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(wC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),wC.isEmpty(this.__ala__.res[r])){let n=h2(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(m2,"searchJSON")});var MC=g((r_e,LC)=>{"use strict";var ft=require("moment"),jp="YYYY-MM-DDTHH:mm:ss.SSSZZ";ft.suppressDeprecationWarnings=!0;LC.exports={current_date:()=>ft().utc().format("YYYY-MM-DD"),current_time:()=>ft().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return ft(e).utc().format("YYYY");case"month":return ft(e).utc().format("MM");case"day":return ft(e).utc().format("DD");case"hour":return ft(e).utc().format("HH");case"minute":return ft(e).utc().format("mm");case"second":return ft(e).utc().format("ss");case"millisecond":return ft(e).utc().format("SSS");default:break}},date:e=>ft(e).utc().format(jp),date_format:(e,t)=>ft(e).utc().format(t),date_add:(e,t,r)=>ft(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>ft(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=ft(e).utc(),s=ft(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>ft().utc().valueOf(),get_server_time:()=>ft().format(jp),offset_utc:(e,t)=>ft(e).utc().utcOffset(t).format(jp)}});var BC=g((n_e,vC)=>{"use strict";var p2=require("@turf/area"),S2=require("@turf/length"),T2=require("@turf/circle"),g2=require("@turf/difference"),R2=require("@turf/distance"),A2=require("@turf/boolean-contains"),O2=require("@turf/boolean-equal"),b2=require("@turf/boolean-disjoint"),y2=require("@turf/helpers"),UC=U(),me=Q(),bs=K();vC.exports={geoArea:N2,geoLength:I2,geoCircle:w2,geoDifference:C2,geoDistance:PC,geoNear:D2,geoContains:L2,geoEqual:M2,geoCrosses:U2,geoConvert:P2};function N2(e){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return p2.default(e)}catch(t){return bs.trace(t,e),NaN}}a(N2,"geoArea");function I2(e,t){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return S2.default(e,{units:t||"kilometers"})}catch(r){return bs.trace(r,e),NaN}}a(I2,"geoLength");function w2(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return T2.default(e,t,{units:r||"kilometers"})}catch(n){return bs.trace(n,e,t),NaN}}a(w2,"geoCircle");function C2(e,t){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return g2(e,t)}catch(r){return bs.trace(r,e,t),NaN}}a(C2,"geoDifference");function PC(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return R2.default(e,t,{units:r||"kilometers"})}catch(n){return bs.trace(n,e,t),NaN}}a(PC,"geoDistance");function D2(e,t,r,n){if(me.isEmpty(e)||me.isEmpty(t))return!1;if(me.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return PC(e,t,n)<=r}catch(s){return bs.trace(s,e,t),!1}}a(D2,"geoNear");function L2(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return A2.default(e,t)}catch(r){return bs.trace(r,e,t),!1}}a(L2,"geoContains");function M2(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return O2.default(e,t)}catch(r){return bs.trace(r,e,t),!1}}a(M2,"geoEqual");function U2(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return!b2.default(e,t)}catch(r){return bs.trace(r,e,t),!1}}a(U2,"geoCrosses");function P2(e,t,r){if(me.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(me.isEmpty(t))throw new Error("geo_type is required");if(me.isEmpty(UC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(UC.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=me.autoCastJSON(e)),y2[t](e,r)}a(P2,"geoConvert")});var rd=g((i_e,HC)=>{var Zi=DC(),xr=MC(),ts=BC();HC.exports=e=>{e.aggr.mad=e.aggr.MAD=Zi.mad,e.aggr.mean=e.aggr.MEAN=Zi.mean,e.aggr.mode=e.aggr.MODE=Zi.mode,e.aggr.prod=e.aggr.PROD=Zi.prod,e.aggr.median=e.aggr.MEDIAN=Zi.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Zi.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Zi.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=xr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=xr.current_time,e.fn.extract=e.fn.EXTRACT=xr.extract,e.fn.date=e.fn.DATE=xr.date,e.fn.date_format=e.fn.DATE_FORMAT=xr.date_format,e.fn.date_add=e.fn.DATE_ADD=xr.date_add,e.fn.date_sub=e.fn.DATE_SUB=xr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=xr.date_diff,e.fn.now=e.fn.NOW=xr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=xr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=xr.get_server_time,e.fn.getdate=e.fn.GETDATE=xr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=xr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=ts.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=ts.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=ts.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=ts.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=ts.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=ts.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=ts.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=ts.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=ts.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=ts.geoNear}});var qC=g((o_e,FC)=>{"use strict";var Zc=require("lodash"),lr=require("alasql");lr.options.cache=!1;var v2=rd(),xC=require("clone"),nd=require("recursive-iterator"),le=K(),we=Q(),ta=In(),B2=U(),{hdb_errors:H2}=ne(),{getDatabases:GC}=(Ae(),se(Fe)),x2="IS NULL",Mn="There was a problem performing this search. Please check the logs and try again.";v2(lr);var Xp=class{static{a(this,"SQLSearch")}constructor(t,r){if(we.isEmpty(t))throw le.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(),we.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!we.isEmptyOrZeroLength(n))return le.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw le.error("Error thrown from checkEmptySQL in SQLSearch class method search."),le.error(n),new Error(Mn)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw le.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),le.error(n),new Error(Mn)}if(Object.keys(this.data).length===0)return le.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw le.error("Error thrown from processJoins in SQLSearch class method search."),le.error(n),new Error(Mn)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw le.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),le.error(n),new Error(Mn)}try{return t=await this._finalSQL(),t}catch(n){throw le.error("Error thrown from finalSQL in SQLSearch class method search."),le.error(n),new Error(Mn)}}_getColumns(){let t=new nd(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(xC(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Zc.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(we.isEmpty(this.statement.where)){le.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new nd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!we.isEmpty(r)&&r.right)if(we.isNotEmptyAndHasValue(r.right.value)){let n=we.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new lr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=we.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new lr.yy.LogicValue({value:i}):n instanceof lr.yy.StringValue&&we.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new lr.yy.NumValue({value:i}))});if(t){le.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new nd(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(!we.isEmpty(B2.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(we.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(we.isEmptyOrZeroLength(r.left.columnid)||we.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(we.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"=":!we.isEmpty(r.right.value)||!we.isEmpty(r.left.value)?n.add(we.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(we.isEmptyOrZeroLength(this.all_table_attributes)&&we.isEmptyOrZeroLength(this.statement.from)&&we.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&&Zc.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(we.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);we.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(we.isEmptyOrZeroLength(this.all_table_attributes)&&!we.isEmptyOrZeroLength(this.columns.columns))return t;if(we.isEmptyOrZeroLength(this.all_table_attributes)&&we.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await lr.promise(r)}catch(r){throw le.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),le.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(xC(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(we.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(x2)>-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=Zc.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),!we.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!we.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await ta.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 le.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),le.error(l),new Error(Mn)}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 ta.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 le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),le.error(l),new Error(Mn)}else if(!we.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!we.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 ta.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 le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),le.error(l),new Error(Mn)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await ta.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 le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),le.error(l),new Error(Mn)}}}_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 lr.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 lr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new lr.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 lr.yy.FuncValue:new lr.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 lr.promise(h,t),t=null}catch(E){throw le.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),le.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=Zc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,T=p.length;S<T;S++){let b=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[b]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new nd(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=Zc.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 le.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),le.error(i),new Error(Mn)}}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 ta.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 le.error("Error thrown from getDataByHash function in SQLSearch class method getData."),le.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();le.trace(`Final SQL: ${s}`),n=await lr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),le.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw le.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),le.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 le.error(H2.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),le.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 ta.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 le.error("There was an error when processing this SQL operation. Check your logs"),le.error(o),new Error(Mn)}}return Object.values(Object.values(this.data)[0].__merged_data)}};FC.exports=Xp});var Ur=g((c_e,kC)=>{"use strict";var G2=Gb();kC.exports={searchByConditions:q2,searchByHash:k2,searchByValue:V2,search:$2};var Zp=In(),{transformReq:eS}=Q(),F2=qC();async function q2(e){return eS(e),Zp.searchByConditions(e)}a(q2,"searchByConditions");async function k2(e){eS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Zp.searchByHash(e))r&&t.push(r);return t}a(k2,"searchByHash");async function V2(e){eS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Zp.searchByValue(e))t.push(r);return t}a(V2,"searchByValue");function $2(e,t){try{let r=new G2(e);r.validate(),new F2(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a($2,"search")});var sd=g((l_e,VC)=>{"use strict";var Y2=In();VC.exports={writeTransaction:K2};function K2(e,t,r){return Y2.writeTransaction(e,t,r)}a(K2,"writeTransaction")});var WC=g((f_e,KC)=>{"use strict";var W2=Ur(),Q2=gs(),$C=K(),z2=nn(),d_e=sd(),J2=require("clone"),rS=require("alasql"),j2=rd(),YC=require("util"),X2=YC.promisify(Q2.getTableSchema),Z2=YC.promisify(W2.search),e4=U(),tS=Q();j2(rS);KC.exports={update:r4};var t4="There was a problem performing this update. Please check the logs and try again.";async function r4({statement:e,hdb_user:t}){let r=await X2(e.table.databaseid,e.table.tableid),n=n4(e.columns);tS.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=J2(s),c=tS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=rS.parse(u).statements[0],l=await Z2(_),d=s4(n,l);return i4(o,d,t)}a(r4,"update");function n4(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=rS.compile(`SELECT ${r.expression.toString()} AS [${e4.FUNC_VAL}] FROM ?`)}),t}catch(t){throw $C.error(t),new Error(t4)}}a(n4,"createUpdateRecord");function s4(e,t){return tS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(s4,"buildUpdateRecords");async function i4(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await z2.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){$C.error(`Error delete new_attributes from update response: ${i}`)}return s}a(i4,"updateRecords")});var zC=g((p_e,QC)=>{var o4=require("alasql"),a4=Ur(),c4=K(),u4=In(),sS=require("util"),nS=Q(),l4=U(),_4=gs(),h_e=sd(),m_e=nn(),d4="record",f4="successfully deleted",E4=sS.callbackify(S4),h4=sS.promisify(a4.search),m4=sS.promisify(_4.getTableSchema);QC.exports={convertDelete:E4};function p4(e){return`${e.deleted_hashes.length} ${d4}${e.deleted_hashes.length===1?"":"s"} ${f4}`}a(p4,"generateReturnMessage");async function S4({statement:e,hdb_user:t}){let r=await m4(e.table.databaseid,e.table.tableid);nS.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=nS.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=o4.parse(o).statements[0],u={operation:l4.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await h4(c);let _=await u4.deleteRecords(u);return nS.isEmptyOrZeroLength(_.message)&&(_.message=p4(_)),delete _.txn_time,_}catch(_){throw c4.error(_),_.hdb_code?_.message:_}}a(S4,"convertDelete")});var eD=g((T_e,ZC)=>{"use strict";var T4=Fi(),{hdb_errors:JC}=ne(),{getDatabases:jC}=(Ae(),se(Fe));ZC.exports={checkSchemaExists:XC,checkSchemaTableExists:g4,schema_describe:T4};async function XC(e){if(!jC()[e])return JC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(XC,"checkSchemaExists");async function g4(e,t){let r=await XC(e);if(r)return r;if(!jC()[e][t])return JC.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(g4,"checkSchemaTableExists")});var eu=g((R_e,R4)=>{R4.exports={name:"harperdb",version:"4.3.0-beta.10",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.7","nats-server":"2.10.11"},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:"3.0.0-beta.6",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.19.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"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var iu={};$e(iu,{addAnalyticsListener:()=>su,recordAction:()=>Gr,recordActionBinary:()=>sn,setAnalyticsEnabled:()=>A4});function A4(e){uD=e}function Gr(e,t,r,n,s){if(!uD)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=ad.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},ad.set(i,o)}id||O4()}function sn(e,t,r,n,s){Gr(!!e,t,r,n,s)}function su(e){dD.push(e)}function O4(){id=performance.now(),setTimeout(async()=>{let e=performance.now()-id;id=0;let t=[],r={time:Date.now(),period:e,threadId:eo.threadId,metrics:t};for(let[s,i]of ad){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 fD){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 ED()}let n=process.memoryUsage();t.push({metric:"memory",threadId:eo.threadId,byThread:!0,...n});for(let s of dD)s(t);ad=new Map,eo.parentPort?eo.parentPort.postMessage({type:_D,report:r}):pD({report:r})},lD).unref()}async function b4(e,t=6e4){let r=aS(),n=hD(),s=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,tu.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,tu.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),p(T-S)})}),i;for(let p of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(p.value?.time){i=p.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,u=new Map,_=[],l;for(let{key:p,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(p>o+t)break}else o=p;l=p;let{metrics:T,threadId:b}=S;for(let R of T||[]){let{path:L,method:H,type:P,metric:k,count:B,total:J,distribution:z,threads:j,...Te}=R;B||(B=1);let ce=k+(L?"-"+L:"");H!==void 0&&(ce+="-"+H),P!==void 0&&(ce+="-"+P);let de=c.get(ce);if(de){if(de.threads){let Be=de.threads[b];if(Be)de=Be;else{de.threads[b]=Object.assign({},Te);continue}}de.count||(de.count=1);let Le=de.count;for(let Be in Te){let Ct=Te[Be];typeof Ct=="number"&&(de[Be]=(de[Be]*Le+Ct*B)/(Le+B))}de.count+=B,J>=0&&(de.total+=J,de.ratio=de.total/de.count)}else de=Object.assign({period:t},R),delete de.distribution,c.set(ce,de),de.byThread&&(de.threads=[],de.threads[b]=Object.assign({},Te),_.push(de));if(z){z=z.map(Be=>typeof Be=="number"?{value:Be,count:1}:Be);let Le=u.get(ce);Le?Le.push(...z):u.set(ce,z)}}await ED()}for(let p of _){let{path:S,method:T,type:b,metric:R,count:L,total:H,distribution:P,threads:k,...B}=p;k=k.filter(J=>J);for(let J in B){if(typeof p[J]!="number")continue;let z=0;for(let j of k){let Te=j[J];typeof Te=="number"&&(z+=Te)}p[J]=z}p.count=k.length,delete p.threads,delete p.byThread}for(let[p,S]of u){let T=c.get(p);S.sort((Be,Ct)=>Be.value>Ct.value?1:-1);let b=T.count-1,R=[],L=0,H=0,P;for(let Be of fD){let Ct=b*Be;for(;L<Ct;)P=S[H++],L+=P.count,H===1&&L--;let Ul=S[H>1?H-2:0];P||(P=S[0]),R.push(P.value-(P.value-Ul.value)*(L-Ct)/P.count)}let[k,B,J,z,j,Te,ce,de,Le]=R;Object.assign(T,{p1:k,p10:B,p25:J,median:z,p75:j,p90:Te,p95:ce,p99:de,p999:Le})}let d;for(let[p,S]of c)S.id=(0,od.getNextMonotonicTime)(),S.time=l,n.primaryStore.put(S.id,S,{append:!0}).then(T=>{T||n.primaryStore.put(S.id,S)}),d=!0;let f=Date.now(),{idle:E,active:h}=performance.eventLoopUtilization();if(d||h*10>E){let p=(0,od.getNextMonotonicTime)(),S={id:p,metric:"main-thread-utilization",idle:E-tD,active:h-rD,taskQueueLatency:await s,time:f,...process.memoryUsage()};n.primaryStore.put(p,S,{append:!0}).then(T=>{T||n.primaryStore.put(p,S)})}tD=E,rD=h}async function nD(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function aS(){return sD||(sD=at({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function hD(){return iD||(iD=at({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function I4(){mD=!0;let e=(0,nu.get)(oS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await b4(lD,e),await nD(aS(),y4),await nD(hD(),N4)},Math.min(e/2,2147483647)).unref()}function pD(e,t){let r=e.report;r.threadId=t?.threadId||eo.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(oD+=n.mean*n.count);r.totalBytesProcessed=oD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(aD.get(t))}),aD.set(t,t.performance.eventLoopUtilization())),r.id=(0,od.getNextMonotonicTime)(),aS().primaryStore.put(r.id,r),mD||I4(),w4&&(SD=D4(r))}async function D4(e){if(await SD,!si){let r=(0,ru.dirname)((0,tu.getLogFilePath)());try{si=await(0,iS.open)((0,ru.join)(r,"analytics.log"),"r+")}catch{si=await(0,iS.open)((0,ru.join)(r,"analytics.log"),"w+")}}let t=(await si.stat()).size;if(t>C4){let r=Buffer.alloc(t);await si.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await si.write(r,{position:0}),await si.truncate(r.length),t=r.length}await si.write(JSON.stringify(e)+`
8
+ `,t)}var eo,cD,tu,ru,iS,od,nu,oS,ad,uD,id,lD,_D,dD,fD,tD,rD,ED,y4,N4,sD,iD,mD,oD,aD,w4,SD,si,C4,ys=Re(()=>{eo=require("worker_threads"),cD=x(et());Ae();tu=x(K()),ru=require("path"),iS=require("fs/promises"),od=x(Dr()),nu=x(re()),oS=x(U());ir();(0,nu.initSync)();ad=new Map,uD=(0,nu.get)(oS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(A4,"setAnalyticsEnabled");a(Gr,"recordAction");Ze.recordAnalytics=Gr;a(sn,"recordActionBinary");id=0,lD=1e3,_D="analytics-report",dD=[];a(su,"addAnalyticsListener");fD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(O4,"sendAnalytics");a(b4,"aggregation");tD=0,rD=0,ED=a(()=>new Promise(setImmediate),"rest");a(nD,"cleanup");y4=36e5,N4=31536e6;a(aS,"getRawAnalyticsTable");a(hD,"getAnalyticsTable");(0,cD.setChildListenerByType)(_D,pD);a(I4,"startScheduledTasks");oD=0,aD=new Map,w4=!1;a(pD,"recordAnalytics");C4=1e6;a(D4,"logAnalytics")});var fS=g((U_e,wD)=>{"use strict";var{decode:L4}=require("msgpackr"),{isMainThread:L_e,parentPort:M4,threadId:M_e}=require("worker_threads"),ou=Et(),ra=rt(),lS=U(),zt=K(),uS=re(),gD=U(),{onMessageByType:U4}=et(),RD=Ts(),{recordAction:P4,recordActionBinary:v4}=(ys(),se(iu)),{publishToStream:B4}=ou,{ConsumerEvents:H4}=require("nats"),x4=Ur(),{promisify:G4}=require("util"),AD=G4(setTimeout),ld=1e4,_d,ud,F4,q4,OD,au=new Map,na=new Map;wD.exports={initialize:_S,ingestConsumer:dS,setSubscription:k4,setIgnoreOrigin:Y4,getDatabaseSubscriptions:$4,updateConsumer:bD};async function _S(){U4(lS.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await bD(n)}),OD=!0,zt.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await ou.getNATSReferences();_d=e,ud=e.info.server_name,F4=t,q4=r}a(_S,"initialize");async function bD(e){if(e.status==="start"){let{js:t,jsm:r}=await yD(e.node_domain_name);dS(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=au.get(e.stream_name+e.node_domain_name);t&&(zt.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),au.set(e.stream_name+e.node_domain_name,"close")),na.get(e.node_domain_name)==="failed"&&na.set(e.node_domain_name,"close")}}a(bD,"updateConsumer");var dd=new Map;function k4(e,t,r){let n=dd.get(e);n||dd.set(e,n=new Map),n.set(t,r),OD||_S().then(V4)}a(k4,"setSubscription");async function V4(){let e=await x4.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+ra.SERVER_SUFFIX.LEAF,{js:n,jsm:s}=await yD(r);if(s){for(let i of t.subscriptions)if(i.subscribe===!0){let{schema:o,table:c}=i,u=RD.createNatsTableStreamName(o,c);dS(u,n,s,r)}}}}a(V4,"accessConsumers");async function yD(e){let t,r,n=1;for(;!r;)try{t=await _d.jetstream({domain:e,timeout:6e4}),r=await _d.jetstreamManager({domain:e,timeout:6e4})}catch(s){if(na.get(e)==="close")break;na.set(e,"failed"),n%10===1&&zt.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<ld?n++*100:ld;await AD(i)}return{js:t,jsm:r}}a(yD,"connectToRemoteJS");function $4(){return dd}a($4,"getDatabaseSubscriptions");var ND;function Y4(e){ND=e}a(Y4,"setIgnoreOrigin");var ID=100,TD=new Array(ID),cd=0;async function dS(e,t,r,n){let{connection:s}=await ou.getNATSReferences();_d=s,ud=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,ud),zt.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(na.get(n)==="close")break;o%10===1&&zt.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(zt.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await ou.createConsumer(r,e,ud,new Date(Date.now()).toISOString()));let l=o++*100<ld?o++*100:ld;await AD(l)}let c=!1,u;for(M4?.on("message",async _=>{let{type:l}=_;l===gD.ITC_EVENT_TYPES.SHUTDOWN&&(c=!0,u&&u.close?.()&&u.close())});!c;){if(au.get(e+n)==="close"||na.get(n)==="close"){au.delete(e+n),c=!0;continue}u=await i.consume({max_messages:uS.get(lS.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100}),au.set(e+n,u);let _=!1;(async()=>{for await(let l of await u.status())if(l.type===H4.HeartbeatsMissed){let d=l.data;zt.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${u.consumer.stream}`),d===2&&(zt.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${u.consumer.stream}`),u.stop(),_=!0)}})();try{for await(let l of u)await TD[cd],TD[cd]=K4(l).catch(d=>{zt.error(d)}),++cd>=ID&&(cd=0)}catch(l){l.message==="consumer deleted"?(zt.notify("Nats consumer deleted, closing messages for node:",n,"stream:",u.consumer.stream),await u.close(),c=!0):zt.error("Error consuming clustering ingest, restarting consumer",l)}ou.clearClientCache(),!c&&_&&await _S()}}a(dS,"ingestConsumer");async function K4(e){let t=L4(e.data);P4(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),zt.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=uS.get(lS.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(ra.MSG_HEADERS.TRANSACTED_NODES)&&r.values(ra.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(ra.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!ND),v4(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(ra.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;zt.trace("processing message:",o,c,_,(l?"records: "+l.map(L=>L?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),zt.trace(`messageProcessor nats msg id: ${e.headers.get(ra.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let p=new Promise(L=>h=L),{timestamp:S,user:T,node_name:b}=f||{},R=dd.get(c)?.get(_);if(!R)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,t.onCommit=h,R.send(t);else if(l.length===1&&!u)R.send({type:cS(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:S,table:_,onCommit:h,user:T,nodeName:b});else{let L=l.map((H,P)=>({type:cS(o),value:H,expiresAt:E,id:d?.[P],table:_}));for(;u;)L.push({type:cS(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;R.send({type:"transaction",writes:L,table:_,timestamp:S,onCommit:h,user:T,nodeName:b})}uS.get(gD.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&B4(e.subject.split(".").slice(0,-1).join("."),RD.createNatsTableStreamName(c,_),e.headers,e.data),await p}catch(o){zt.error(o)}e.ack()}a(K4,"messageProcessor");function cS(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(cS,"convertOperation")});var Et=g((F_e,YD)=>{"use strict";var Mt=re();Mt.initSync();var W4=require("fs-extra"),Q4=require("semver"),lu=require("path"),{monotonicFactory:z4}=require("ulidx"),DD=z4(),J4=require("util"),LD=require("child_process"),j4=J4.promisify(LD.exec),X4=LD.spawn,qt=rt(),Ce=U(),fd=Q(),Un=K(),Ed=Ts(),Z4=sd(),cu=Cr(),{broadcast:e3,onMessageByType:t3,getWorkerIndex:r3}=et(),{isMainThread:MD}=require("worker_threads"),{Encoder:n3,decode:pS}=require("msgpackr"),UD=new n3,{isEmpty:so}=fd,PD=vr(),v_e=48*36e11;MD&&t3(Ce.ITC_EVENT_TYPES.RESTART,()=>{_r=void 0,no=void 0});var{connect:s3,StorageType:i3,RetentionPolicy:o3,AckPolicy:SS,DeliverPolicy:TS,DiscardPolicy:a3,NatsConnection:B_e,JetStreamManager:H_e,JetStreamClient:x_e,StringCodec:G_e,JSONCodec:c3,createInbox:gS,headers:u3,ErrorCode:CD}=require("nats"),{PACKAGE_ROOT:l3}=U(),_3=eu(),{recordAction:d3}=(ys(),se(iu)),vD=c3(),f3="clustering",E3=_3.engines[qt.NATS_SERVER_NAME],h3=lu.join(l3,"dependencies"),mS=lu.join(h3,`${process.platform}-${process.arch}`,qt.NATS_BINARY_NAME),ES,hS,uu,to,ro;YD.exports={runCommand:BD,checkNATSServerInstalled:m3,createConnection:RS,getConnection:hd,getJetStreamManager:_u,getJetStream:xD,getNATSReferences:Pn,getServerList:S3,createLocalStream:AS,listStreams:GD,deleteLocalStream:T3,getServerConfig:du,listRemoteStreams:g3,viewStream:R3,viewStreamIterator:A3,publishToStream:O3,request:N3,reloadNATS:OS,reloadNATSHub:I3,reloadNATSLeaf:w3,extractServerName:y3,requestErrorHandler:C3,createLocalTableStream:VD,createTableStreams:M3,purgeTableStream:$D,purgeSchemaTableStreams:U3,getStreamInfo:P3,updateLocalStreams:B3,closeConnection:p3,getJsmServerName:md,addNatsMsgHeader:FD,clearClientCache:HD,updateRemoteConsumer:D3,createConsumer:qD,updateConsumerIterator:L3};async function BD(e,t=void 0){let{stdout:r,stderr:n}=await j4(e,{cwd:t});if(n)throw new Error(n.replace(`
9
9
  `,""));return r.replace(`
10
- `,"")}a(rL,"runCommand");async function b4(){try{await r4.access(jp)}catch{return!1}let e=await rL(`${jp} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return n4.eq(t,A4)}a(b4,"checkNATSServerInstalled");async function rS(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await jC.getClusterUser();if(ro(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Fr.trace("create nats connection called");let i=await E4({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Gt.get(Me.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Gt.get(Me.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Gt.get(Me.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Fr.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Fr.error("Error with Nats client connection, connection closed",o),nL()}),i}a(rS,"createConnection");function nL(){sn=void 0,Zi=void 0,eo=void 0,to=void 0}a(nL,"clearClientCache");async function N4(){sn&&(await sn.drain(),sn=void 0,Zi=void 0,eo=void 0,to=void 0)}a(N4,"closeConnection");var sn,to;async function od(){return to||(to=rS(Gt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),sn=await to),sn||to}a(od,"getConnection");async function au(){if(Zi)return Zi;ro(sn)&&await od();let{domain:e}=cu(Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ro(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Zi=await sn.jetstreamManager({domain:e,timeout:6e4}),Zi}a(au,"getJetStreamManager");async function sL(){if(eo)return eo;ro(sn)&&await od();let{domain:e}=cu(Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ro(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return eo=sn.jetstream({domain:e,timeout:6e4}),eo}a(sL,"getJetStream");async function ur(){let e=sn||await od(),t=Zi||await au(),r=eo||await sL();return{connection:e,jsm:t,js:r}}a(ur,"getNATSReferences");async function y4(e){let t=Gt.get(Me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await jC.getClusterUser(),s=await rS(t,r,n),i=tS(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=tL.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 Zp.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(y4,"getServerList");async function nS(e,t){let{jsm:r}=await ur(),n=Gt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Gt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:ZC.File,retention:eL.Limits,subjects:t,discard:h4.Old,max_msgs:s,max_bytes:i,max_age:n})}a(nS,"createLocalStream");async function iL(){let{jsm:e}=await ur(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(iL,"listStreams");async function I4(e){let{jsm:t}=await ur();await t.streams.delete(e)}a(I4,"deleteLocalStream");async function w4(e){let{connection:t}=await ur(),r=[],n=tS(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(tL.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(w4,"listRemoteStreams");async function C4(e,t=void 0,r=void 0){let{jsm:n,js:s}=await ur(),i=zC(),o={durable_name:i,ack_policy:sd.Explicit};t&&(o.deliver_policy=id.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=eS(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Oe.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(C4,"viewStream");async function*L4(e,t=void 0,r=void 0){let{jsm:n,js:s}=await ur(),i=zC(),o={durable_name:i,ack_policy:sd.Explicit};t&&(o.deliver_policy=id.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=eS(_.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(Oe.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(L4,"viewStreamIterator");async function D4(e,t,r,n){Fr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=oL(n,r);let{js:s}=await ur(),i=await uu(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:XC.encode(n);try{Fr.trace(`publishToStream publishing to subject: ${o}`),g4(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 lL(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Fr.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await nS(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(D4,"publishToStream");function oL(e,t){t===void 0&&(t=p4());let r=Gt.get(Me.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Oe.MSG_HEADERS.ORIGIN)&&r&&t.append(Oe.MSG_HEADERS.ORIGIN,r),t}a(oL,"addNatsMsgHeader");function cu(e){e=e.toLowerCase();let t=ou.join(Gt.get(Me.CONFIG_PARAMS.ROOTPATH),R4);if(e===Me.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ro(Xp)&&(Xp={port:su.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:su.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.HUB,config_file:Oe.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:ou.join(t,Oe.PID_FILES.HUB),hdb_nats_path:t}),Xp;if(e===Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ro(Jp)&&(Jp={port:su.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:su.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,config_file:Oe.NATS_CONFIG_FILES.LEAF_SERVER,domain:su.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,pid_file_path:ou.join(t,Oe.PID_FILES.LEAF),hdb_nats_path:t}),Jp;Fr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(cu,"getServerConfig");async function M4(e){let{jsm:t}=await ur(),r=await uu();try{await t.streams.add({name:e.stream_name,storage:ZC.File,retention:eL.Limits,max_age:d4,max_bytes:f4,subjects:[`${Oe.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:sd.Explicit,durable_name:e.durable_name,deliver_policy:id.All,max_ack_pending:1e4});else throw n}}a(M4,"createWorkQueueStream");async function U4(){let{jsm:e}=await ur();(await e.consumers.info(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Fr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name),Fr.info("Adding pull consumer to ingest stream"),await e.consumers.add(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:sd.Explicit,durable_name:Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:id.All,max_ack_pending:1e4}))}a(U4,"updateIngestStreamConsumer");async function aL(e,t,r){let{jsm:n}=await ur(),s=await n.streams.info(t),i=cL(n.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=nd.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:`${Oe.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),s.config.sources.push(h),await n.streams.update(t,s.config)}a(aL,"addSourceToWorkStream");function cL(e){return e.split(".")[1]}a(cL,"extractServerName");async function uL(e,t,r){let{jsm:n}=await ur(),{schema:s,table:i}=r,o=`txn.${s}.${i}.${e}`;await n.streams.purge(t,{filter:o});let c=nd.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(uL,"removeSourceFromWorkStream");async function P4(e,t,r=6e4,n=tS()){if(!Zp.isObject(t))throw new Error("data param must be an object");let s=XC.encode(t),{connection:i}=await ur(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return eS(c.data)}a(P4,"request");function sS(e){return new Promise(async(t,r)=>{let n=a4(jp,["--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(sS,"reloadNATS");async function v4(){let{pid_file_path:e}=cu(Me.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await sS(e)}a(v4,"reloadNATSHub");async function B4(){let{pid_file_path:e}=cu(Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await sS(e)}a(B4,"reloadNATSLeaf");function H4(e,t,r){let n;switch(e.code){case QC.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case QC.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(H4,"requestErrorHandler");async function x4(e,t){let r=t+Oe.SERVER_SUFFIX.LEAF;await lL(async()=>{e.subscribe===!0?await aL(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await uL(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(x4,"updateWorkStream");function lL(e){return c4.writeTransaction(Me.SYSTEM_SCHEMA_NAME,Me.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(lL,"exclusiveLock");async function _L(e,t){let r=nd.createNatsTableStreamName(e,t),n=await uu(),s=k4(e,t,n);await nS(r,[s])}a(_L,"createLocalTableStream");async function q4(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await _L(n,s)}}a(q4,"createTableStreams");async function dL(e,t,r=!1){if(Gt.get(Me.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=nd.createNatsTableStreamName(e,t),{jsm:s}=await ur();r?await s.streams.purge(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name):await s.streams.purge(n)}catch(n){if(n.message==="stream not found")Fr.warn(n);else throw n}}a(dL,"purgeTableStream");async function F4(e,t){if(Gt.get(Me.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await dL(e,t[r])}a(F4,"purgeSchemaTableStreams");async function G4(e){return(await au()).streams.info(e)}a(G4,"getStreamInfo");function k4(e,t,r){return`${Oe.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(k4,"createSubjectName");async function uu(){if(iu)return iu;if(iu=(await au())?.nc?.info?.server_name,iu===void 0)throw new Error("Unable to get jetstream manager server name");return iu}a(uu,"getJsmServerName");async function V4(){let e=await au(),t=await uu(),r=await iL();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=$4(n),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(s.name===Oe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Oe.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Fr.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else if(s.name===Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Fr.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Fr.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l}await e.streams.update(s.name,s)}}}a(V4,"updateLocalStreams");function $4(e){let{config:t}=e,r=!1;if(t.name===Oe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let n=Gt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Gt.get(Me.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($4,"updateStreamLimits")});var ld=T((s_e,pL)=>{"use strict";var ra=m_(),na=wC(),Y4=V(),K4=require("uuid").v4,n_e=require("clone"),cd=As(),sa=M(),W4=require("util"),si=Cn(),{handleHDBError:lr,hdb_errors:Q4}=Z(),{HDB_ERROR_MSGS:ad,HTTP_STATUS_CODES:_r}=Q4,{SchemaEventMsg:ud}=Ln(),EL=St(),{getDatabases:z4}=(ge(),ee(xe)),{transformReq:ia}=J();pL.exports={createSchema:J4,createSchemaStructure:hL,createTable:X4,createTableStructure:mL,createAttribute:r3,dropSchema:j4,dropTable:Z4,dropAttribute:e3,getBackup:n3};async function J4(e){let t=await hL(e);return cd.signalSchemaChange(new ud(process.pid,e.operation,e.schema)),t}a(J4,"createSchema");async function hL(e){let t=ra.schema_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);if(ia(e),!await na.checkSchemaExists(e.schema))throw lr(new Error,ad.SCHEMA_EXISTS_ERR(e.schema),_r.BAD_REQUEST,sa.LOG_LEVELS.ERROR,ad.SCHEMA_EXISTS_ERR(e.schema),!0);return await si.createSchema(e),`database '${e.schema}' successfully created`}a(hL,"createSchemaStructure");async function X4(e){return ia(e),e.hash_attribute=e.primary_key??e.hash_attribute,await mL(e)}a(X4,"createTable");async function mL(e){let t=ra.create_table_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);if(ra.validateTableResidence(e.residence),!await na.checkSchemaTableExists(e.schema,e.table))throw lr(new Error,ad.TABLE_EXISTS_ERR(e.schema,e.table),_r.BAD_REQUEST,sa.LOG_LEVELS.ERROR,ad.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:K4(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await si.createTable(n,e);else throw lr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",_r.BAD_REQUEST);else await si.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(mL,"createTableStructure");async function j4(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=ra.schema_object(e),n=t??r;if(n)throw lr(n,n.message,_r.BAD_REQUEST,void 0,void 0,!0);ia(e);let s=await na.checkSchemaExists(e.schema);if(s)throw lr(new Error,s,_r.NOT_FOUND,sa.LOG_LEVELS.ERROR,s,!0);let i=await na.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await si.dropSchema(e),cd.signalSchemaChange(new ud(process.pid,e.operation,e.schema)),await EL.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(j4,"dropSchema");async function Z4(e){let t=ra.table_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);ia(e);let r=await na.checkSchemaTableExists(e.schema,e.table);if(r)throw lr(new Error,r,_r.NOT_FOUND,sa.LOG_LEVELS.ERROR,r,!0);return await si.dropTable(e),await EL.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(Z4,"dropTable");async function e3(e){let t=ra.attribute_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);ia(e);let r=await na.checkSchemaTableExists(e.schema,e.table);if(r)throw lr(new Error,r,_r.NOT_FOUND,sa.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw lr(new Error,"You cannot drop a hash attribute",_r.BAD_REQUEST,void 0,void 0,!0);if(sa.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw lr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,_r.BAD_REQUEST,void 0,void 0,!0);try{return await si.dropAttribute(e),t3(e),cd.signalSchemaChange(new ud(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Y4.error(`Got an error deleting attribute ${W4.inspect(e)}.`),n}}a(e3,"dropAttribute");function t3(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(t3,"dropAttributeFromGlobal");async function r3(e){ia(e);let t=z4()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw lr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,_r.BAD_REQUEST,void 0,void 0,!0);return await si.createAttribute(e),cd.signalSchemaChange(new ud(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(r3,"createAttribute");function n3(e){return si.getBackup(e)}a(n3,"getBackup")});var TL=T((o_e,SL)=>{"use strict";var{OPERATIONS_ENUM:s3}=M(),iS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=s3.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};SL.exports=iS});var oS=T((u_e,bL)=>{"use strict";var i3=Cn(),c_e=TL(),_d=J(),dd=M(),o3=j(),{handleHDBError:gL,hdb_errors:a3}=Z(),{HDB_ERROR_MSGS:RL,HTTP_STATUS_CODES:AL}=a3,c3=Object.values(dd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),OL="To use this operation audit log must be enabled in harperdb-config.yaml";bL.exports=u3;async function u3(e){if(_d.isEmpty(e.schema))throw new Error(RL.SCHEMA_REQUIRED_ERR);if(_d.isEmpty(e.table))throw new Error(RL.TABLE_REQUIRED_ERR);if(!o3.get(dd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw gL(new Error,OL,AL.BAD_REQUEST,dd.LOG_LEVELS.ERROR,OL,!0);let t=_d.checkSchemaTableExist(e.schema,e.table);if(t)throw gL(new Error,t,AL.NOT_FOUND,dd.LOG_LEVELS.ERROR,t,!0);if(!_d.isEmpty(e.search_type)&&c3.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await i3.readAuditLog(e)}a(u3,"readAuditLog")});var yL=T((__e,NL)=>{"use strict";var{OPERATIONS_ENUM:l3}=M(),aS=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=l3.GET_BACKUP,this.schema=t,this.table=r}};NL.exports=aS});var CL=T((h_e,wL)=>{"use strict";var _3=Cn(),f_e=yL(),cS=J(),d3=M(),E_e=j(),{handleHDBError:f3,hdb_errors:E3}=Z(),{HDB_ERROR_MSGS:IL,HTTP_STATUS_CODES:h3}=E3;wL.exports=m3;async function m3(e){if(cS.isEmpty(e.schema))throw new Error(IL.SCHEMA_REQUIRED_ERR);if(cS.isEmpty(e.table))throw new Error(IL.TABLE_REQUIRED_ERR);let t=cS.checkSchemaTableExist(e.schema,e.table);if(t)throw f3(new Error,t,h3.NOT_FOUND,d3.LOG_LEVELS.ERROR,t,!0);return await _3.getBackup(read_audit_log_object)}a(m3,"getBackup")});var vL=T((p_e,PL)=>{var ii=require("validate.js"),DL=et(),oa=M(),{handleHDBError:p3,hdb_errors:S3}=Z(),{HDB_ERROR_MSGS:ft,HTTP_STATUS_CODES:T3}=S3,uS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),g3={STRUCTURE_USER:"structure_user"},LL=Object.values(oa.ROLE_TYPES_ENUM),R3="attribute_permissions",A3="attribute_name",{PERMS_CRUD_ENUM:aa}=oa,O3=[R3,...Object.values(aa)],ML=[aa.READ,aa.INSERT,aa.UPDATE],b3=[A3,...ML];function N3(e){let t=uS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,UL(e,t)}a(N3,"addRoleValidation");function y3(e){let t=uS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,UL(e,t)}a(y3,"alterRoleValidation");function I3(e){let t=uS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,DL.validateObject(e,t)}a(I3,"dropRoleValidation");var w3=["operation","role","id","permission","hdb_user","hdb_auth_header"];function UL(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)w3.includes(n[o])||s.push(n[o]);s.length>0&&Tt(ft.INVALID_ROLE_JSON_KEYS(s),r);let i=DL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Tt(o,r)}),e.permission){let o=C3(e);o&&Tt(o,r),LL.forEach(c=>{e.permission[c]&&!ii.isBoolean(e.permission[c])&&Tt(ft.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(LL.indexOf(o)<0){if(o===g3.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]||Tt(ft.SCHEMA_NOT_FOUND(d),r)}continue}Tt(ft.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Tt(ft.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]){Tt(ft.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{O3.includes(l)||Tt(ft.INVALID_PERM_KEY(l),r,o,u)}),Object.values(aa).forEach(l=>{ii.isDefined(_[l])?ii.isBoolean(_[l])||Tt(ft.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):Tt(ft.TABLE_PERM_MISSING(l),r,o,u)}),ii.isDefined(_.attribute_permissions)){if(!ii.isArray(_.attribute_permissions)){Tt(ft.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{Tt(ft.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!==aa.DELETE&&Tt(ft.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!ii.isDefined(E.attribute_name)){Tt(ft.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){Tt(ft.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}ML.forEach(p=>{ii.isDefined(E[p])?ii.isBoolean(E[p])||Tt(ft.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):Tt(ft.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}`;Tt(ft.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return L3(r)}a(UL,"customValidate");PL.exports={addRoleValidation:N3,alterRoleValidation:y3,dropRoleValidation:I3};function C3(e){let{operation:t,permission:r}=e;if(t===oa.OPERATIONS_ENUM.ADD_ROLE||t===oa.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 ft.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?oa.ROLE_TYPES_ENUM.SUPER_USER:oa.ROLE_TYPES_ENUM.CLUSTER_USER;return ft.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(C3,"validateNoSUPerms");function L3(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:ft.ROLE_PERMS_ERROR,...e};return p3(new Error,n,T3.BAD_REQUEST)}else return null}a(L3,"generateRolePermResponse");function Tt(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(Tt,"addPermError")});var hS=T((T_e,qL)=>{"use strict";var BL=rn(),HL=tn(),D3=Vi(),_S=vL(),dS=As(),M3=require("uuid").v4,U3=require("util"),fd=M(),P3=J(),fS=HL.searchByValue,v3=HL.searchByHash,B3=U3.promisify(D3.delete),H3=Jn(),x3=Zo(),{hdb_errors:q3,handleHDBError:no}=Z(),{HDB_ERROR_MSGS:xL,HTTP_STATUS_CODES:lu}=q3,{UserEventMsg:ES}=Ln();qL.exports={addRole:F3,alterRole:G3,dropRole:k3,listRoles:V3};function lS(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(lS,"scrubRoleDetails");async function F3(e){let t=_S.addRoleValidation(e);if(t)throw t;e=lS(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 fS(r)||[])}catch(i){throw no(i)}if(n&&n.length>0)throw no(new Error,xL.ROLE_ALREADY_EXISTS(e.role),lu.CONFLICT,void 0,void 0,!0);e.id||(e.id=M3());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await BL.insert(s),dS.signalUserChange(new ES(process.pid)),e=lS(e),e}a(F3,"addRole");async function G3(e){let t=_S.alterRoleValidation(e);if(t)throw t;e=lS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await BL.update(r)}catch(s){throw no(s)}if(n&&n?.message==="updated 0 of 1 records")throw no(new Error,"Invalid role id",lu.BAD_REQUEST,void 0,void 0,!0);return await dS.signalUserChange(new ES(process.pid)),e}a(G3,"alterRole");async function k3(e){let t=_S.dropRoleValidation(e);if(t)throw no(new Error,t,lu.BAD_REQUEST,void 0,void 0,!0);let r=new x3(fd.SYSTEM_SCHEMA_NAME,fd.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await v3(r));if(n.length===0)throw no(new Error,xL.ROLE_NOT_FOUND,lu.NOT_FOUND,void 0,void 0,!0);let s=new H3(fd.SYSTEM_SCHEMA_NAME,fd.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await fS(s)),o=!1;if(P3.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw no(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,lu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await B3(c),dS.signalUserChange(new ES(process.pid)),`${n[0].role} successfully deleted`}a(k3,"dropRole");async function V3(){return fS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(V3,"listRoles")});var VL=T((R_e,kL)=>{"use strict";var $3=j(),oi=require("joi"),Y3=et(),FL=require("moment"),K3=require("fs-extra"),mS=require("path"),W3=require("lodash"),_u=M(),{LOG_LEVELS:so}=M(),Q3="YYYY-MM-DD hh:mm:ss",z3=mS.resolve(__dirname,"../logs");kL.exports=function(e){return Y3.validateBySchema(e,J3)};var J3=oi.object({from:oi.custom(GL),until:oi.custom(GL),level:oi.valid(so.NOTIFY,so.FATAL,so.ERROR,so.WARN,so.INFO,so.DEBUG,so.TRACE),order:oi.valid("asc","desc"),limit:oi.number().min(1),start:oi.number().min(0),log_name:oi.custom(X3)});function GL(e,t){if(FL(e,FL.ISO_8601).format(Q3)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(GL,"validateDatetime");function X3(e,t){if(W3.invert(_u.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=$3.get(_u.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?_u.LOG_NAMES.HDB:e,i=s===_u.LOG_NAMES.INSTALL?mS.join(z3,_u.LOG_NAMES.INSTALL):mS.join(n,s);return K3.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(X3,"validateReadLogPath")});var SS=T((O_e,YL)=>{"use strict";var Ed=M(),j3=V(),Z3=j(),eX=VL(),pS=require("path"),$L=require("fs-extra"),{once:tX}=require("events"),{handleHDBError:rX,hdb_errors:nX}=Z(),{PACKAGE_ROOT:sX}=M(),iX=pS.join(sX,"logs"),oX=1e3,aX=200;YL.exports=cX;async function cX(e){let t=eX(e);if(t)throw rX(t,t.message,nX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Z3.get(Ed.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?Ed.LOG_NAMES.HDB:e.log_name,s=n===Ed.LOG_NAMES.INSTALL?pS.join(iX,Ed.LOG_NAMES.INSTALL):pS.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?oX: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($L.statSync(s).size-(h+5)*aX,0));let S=$L.createReadStream(s,{start:p});S.on("error",q=>{j3.error(q)});let A=0,I=[],w="",B;S.on("data",q=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;q=w+q;let Q=0,Y;for(;(Y=P.exec(q))&&!S.destroyed;){B&&(B.message=q.slice(Q,Y.index),K(B));let[z,re,Ie]=Y,ne=Ie.split("] ["),ct=ne[0],de=ne[1];ne.splice(0,2),B={timestamp:re,thread:ct,level:de,tags:ne,message:""},Q=Y.index+z.length}w=q.slice(Q)}),S.on("end",q=>{S.destroyed||B&&(B.message=w.trim(),K(B))}),S.resume();function K(q){let P,Q,Y;switch(!0){case(i&&c&&_):P=new Date(q.timestamp),Q=new Date(u),Y=new Date(l),q.level===o&&P>=Q&&P<=Y&&A<E?A++:q.level===o&&P>=Q&&P<=Y&&(ai(q,f,I),A++,A===h&&S.destroy());break;case(i&&c):P=new Date(q.timestamp),Q=new Date(u),q.level===o&&P>=Q&&A<E?A++:q.level===o&&P>=Q&&(ai(q,f,I),A++,A===h&&S.destroy());break;case(i&&_):P=new Date(q.timestamp),Y=new Date(l),q.level===o&&P<=Y&&A<E?A++:q.level===o&&P<=Y&&(ai(q,f,I),A++,A===h&&S.destroy());break;case(c&&_):P=new Date(q.timestamp),Q=new Date(u),Y=new Date(l),P>=Q&&P<=Y&&A<E?A++:P>=Q&&P<=Y&&(ai(q,f,I),A++,A===h&&S.destroy());break;case i:q.level===o&&A<E?A++:q.level===o&&(ai(q,f,I),A++,A===h&&S.destroy());break;case c:P=new Date(q.timestamp),Q=new Date(u),P>=Q&&A<E?A++:P>=Q&&A>=E&&(ai(q,f,I),A++,A===h&&S.destroy());break;case _:P=new Date(q.timestamp),Y=new Date(l),P<=Y&&A<E?A++:P<=Y&&A>=E&&(ai(q,f,I),A++,A===h&&S.destroy());break;default:A<E?A++:(ai(q,f,I),A++,A===h&&S.destroy())}}return a(K,"onLogMessage"),await tX(S,"close"),I}a(cX,"readLog");function ai(e,t,r){t==="desc"?uX(e,r):t==="asc"?lX(e,r):r.push(e)}a(ai,"pushLineToResult");function uX(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(uX,"insertDescending");function lX(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(lX,"insertAscending")});var hd=T((w_e,zL)=>{"use strict";var TS=require("joi"),{string:du,boolean:KL,date:_X}=TS.types(),dX=et(),{validateSchemaExists:N_e,validateTableExists:y_e,validateSchemaName:I_e}=Kn(),fX=M(),EX=nt(),WL=j();WL.initSync();var hX=du.invalid(WL.get(fX.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(EX.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(),QL={operation:du.valid("add_node","update_node","set_node_replication"),node_name:hX,subscriptions:TS.array().items({table:du.optional(),schema:du.optional(),database:du.optional(),subscribe:KL.required(),publish:KL.required().custom(pX),start_time:_X.iso()}).min(1).required()};function mX(e){return dX.validateBySchema(e,TS.object(QL))}a(mX,"addUpdateNodeValidator");function pX(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(pX,"checkForFalsy");zL.exports={addUpdateNodeValidator:mX,validation_schema:QL}});var XL=T((L_e,JL)=>{var SX=et(),TX={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};JL.exports=function(e){return SX.validateObject(e,TX)}});var RS=T((D_e,jL)=>{"use strict";var gX=M().OPERATIONS_ENUM,gS=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=gX.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};jL.exports=gS});var eD=T((U_e,ZL)=>{"use strict";var RX={OPERATION:"operation",REFRESH:"refresh"},AS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},OS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};ZL.exports={JWTTokens:AS,TOKEN_TYPE_ENUM:RX,JWTRSAKeys:OS}});var hu=T((v_e,sD)=>{"use strict";var Eu=require("jsonwebtoken"),bS=require("fs-extra"),NS=J(),on=M(),{handleHDBError:dr,hdb_errors:AX}=Z(),{HTTP_STATUS_CODES:fr,AUTHENTICATION_ERROR_MSGS:Er}=AX,fu=V(),tD=C_(),wS=vr(),OX=rn().update,bX=RS(),NX=As(),{UserEventMsg:yX}=Ln(),ci=j();ci.initSync();var yS=require("path"),{JWTTokens:IX,JWTRSAKeys:wX,TOKEN_TYPE_ENUM:md}=eD(),CX=ci.get(on.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ci.get(on.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",LX=ci.get(on.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ci.get(on.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",pd="RS256",IS;sD.exports={createTokens:DX,validateOperationToken:UX,refreshOperationToken:MX,validateRefreshToken:nD};async function DX(e){if(NS.isEmpty(e)||typeof e!="object")throw dr(new Error,Er.INVALID_AUTH_OBJECT,fr.BAD_REQUEST,void 0,void 0,!0);if(NS.isEmpty(e.username))throw dr(new Error,Er.USERNAME_REQUIRED,fr.BAD_REQUEST,void 0,void 0,!0);if(NS.isEmpty(e.password))throw dr(new Error,Er.PASSWORD_REQUIRED,fr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await wS.findAndValidateUser(e.username,e.password),!t)throw dr(new Error,Er.INVALID_CREDENTIALS,fr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw fu.error(f),dr(new Error,Er.INVALID_CREDENTIALS,fr.UNAUTHORIZED,void 0,void 0,!0)}let r=await Sd(),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 rD(i,r.private_key,r.passphrase),c=await Eu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:LX,algorithm:pd,subject:md.REFRESH}),u=tD.hash(c),_=new bX(on.SYSTEM_SCHEMA_NAME,on.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await OX(_)}catch(f){fu.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw dr(new Error,Er.REFRESH_TOKEN_SAVE_FAILED,fr.INTERNAL_SERVER_ERROR);return NX.signalUserChange(new yX(process.pid)),new IX(o,c)}a(DX,"createTokens");async function rD(e,t,r){return await Eu.sign(e,{key:t,passphrase:r},{expiresIn:CX,algorithm:pd,subject:md.OPERATION})}a(rD,"signOperationToken");async function Sd(){if(IS===void 0)try{let e=yS.join(ci.getHdbBasePath(),on.LICENSE_KEY_DIR_NAME,on.JWT_ENUM.JWT_PASSPHRASE_NAME),t=yS.join(ci.getHdbBasePath(),on.LICENSE_KEY_DIR_NAME,on.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=yS.join(ci.getHdbBasePath(),on.LICENSE_KEY_DIR_NAME,on.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await bS.readFile(e)).toString(),s=(await bS.readFile(t)).toString(),i=(await bS.readFile(r)).toString();IS=new wX(i,s,n)}catch(e){throw fu.error(e),dr(new Error,Er.NO_ENCRYPTION_KEYS,fr.INTERNAL_SERVER_ERROR)}return IS}a(Sd,"getJWTRSAKeys");async function MX(e){if(!e)throw dr(new Error,Er.INVALID_BODY,fr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw dr(new Error,Er.REFRESH_TOKEN_REQUIRED,fr.BAD_REQUEST,void 0,void 0,!0);await nD(e.refresh_token);let t=await Sd(),r=await Eu.decode(e.refresh_token);return{operation_token:await rD({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(MX,"refreshOperationToken");async function UX(e){try{let t=await Sd(),r=await Eu.verify(e,t.public_key,{algorithms:pd,subject:md.OPERATION});return await wS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw fu.warn(t),t.name&&t.name==="TokenExpiredError"?dr(new Error,Er.TOKEN_EXPIRED,fr.FORBIDDEN):dr(new Error,Er.INVALID_TOKEN,fr.UNAUTHORIZED)}}a(UX,"validateOperationToken");async function nD(e){let t;try{let r=await Sd(),n=await Eu.verify(e,r.public_key,{algorithms:pd,subject:md.REFRESH});t=await wS.findAndValidateUser(n.username,void 0,!1)}catch(r){throw fu.warn(r),r.name&&r.name==="TokenExpiredError"?dr(new Error,Er.TOKEN_EXPIRED,fr.FORBIDDEN):dr(new Error,Er.INVALID_TOKEN,fr.UNAUTHORIZED)}if(!tD.validate(t.refresh_token,e))throw dr(new Error,Er.INVALID_TOKEN,fr.UNAUTHORIZED);return t}a(nD,"validateRefreshToken")});var CS=T((x_e,aD)=>{"use strict";var PX=XL(),ca=require("passport"),vX=require("passport-local").Strategy,BX=require("passport-http").BasicStrategy,HX=require("util"),xX=vr(),oD=HX.callbackify(xX.findAndValidateUser),H_e=Ir(),qX=M(),iD=hu();ca.use(new vX(function(e,t,r){oD(e,t,r)}));ca.use(new BX(function(e,t,r){oD(e,t,r)}));ca.serializeUser(function(e,t){t(null,e)});ca.deserializeUser(function(e,t){t(null,e)});function FX(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":ca.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===qX.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?iD.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):iD.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:ca.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(FX,"authorize");function GX(e,t){let r=PX(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(GX,"checkPermissions");aD.exports={authorize:FX,checkPermissions:GX}});var ua=T((F_e,cD)=>{"use strict";var LS=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}};cD.exports={Node:LS,NodeSubscription:DS}});var lD=T((k_e,uD)=>{"use strict";var kX=M().OPERATIONS_ENUM,MS=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=kX.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};uD.exports=MS});var mu=T(($_e,_D)=>{"use strict";var US=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},PS=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)}};_D.exports={RemotePayloadObject:US,RemotePayloadSubscription:PS}});var fD=T((K_e,dD)=>{"use strict";var vS=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}};dD.exports=vS});var mD=T((X_e,hD)=>{"use strict";var VX=fD(),Q_e=ht(),ED=$e(),$X=V(),{getSchemaPath:z_e,getTransactionAuditStorePath:J_e}=We(),{getDatabases:YX}=(ge(),ee(xe));hD.exports=KX;async function KX(e){let t=new VX;try{let r=YX()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await ED.environmentDataSize(schema_path,e.name),o=await ED.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){$X.warn(`unable to stat table dbi due to ${r}`)}return t}a(KX,"lmdbGetTableSize")});var SD=T((Z_e,pD)=>{"use strict";var BS=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}};pD.exports=BS});var la=T((nde,AD)=>{"use strict";var WX=require("fs-extra"),QX=require("path"),Xt=require("systeminformation"),ui=V(),zX=St(),HS=nt(),gd=M(),JX=mD(),RD=xi(),{getThreadInfo:TD}=tt(),WS=j();WS.initSync();var XX=SD(),{openEnvironment:tde}=$e(),{getSchemaPath:rde}=We(),{database:jX}=(ge(),ee(xe)),Td;AD.exports={getHDBProcessInfo:GS,getNetworkInfo:VS,getDiskInfo:kS,getMemoryInfo:FS,getCPUInfo:qS,getTimeInfo:xS,getSystemInformation:$S,systemInformation:ZX,getTableSize:YS,getMetrics:KS};function xS(){return Xt.time()}a(xS,"getTimeInfo");async function qS(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Xt.cpu();l.cpu_speed=await Xt.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:A,...I}=await Xt.currentLoad();return I.cpus=[],A.forEach(w=>{let{raw_load:B,raw_load_idle:K,raw_load_irq:q,raw_load_nice:P,raw_load_system:Q,raw_load_user:Y,...z}=w;I.cpus.push(z)}),l.current_load=I,l}catch(e){return ui.error(`error in getCPUInfo: ${e}`),{}}}a(qS,"getCPUInfo");async function FS(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Xt.mem();return Object.assign(s,process.memoryUsage())}catch(e){return ui.error(`error in getMemoryInfo: ${e}`),{}}}a(FS,"getMemoryInfo");async function GS(){let e={core:[],clustering:[]};try{let t=await Xt.processes(),r;try{r=Number.parseInt(await WX.readFile(QX.join(WS.get(gd.CONFIG_PARAMS.ROOTPATH),gd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===gd.NODE_ERROR_CODES.ENOENT)ui.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 ui.error(`error in getHDBProcessInfo: ${t}`),e}}a(GS,"getHDBProcessInfo");async function kS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Xt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Xt.fsStats();return e.read_write=_,e.size=await Xt.fsSize(),e}catch(t){return ui.error(`error in getDiskInfo: ${t}`),e}}a(kS,"getDiskInfo");async function VS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Xt.networkInterfaceDefault(),e.latency=await Xt.inetChecksite("google.com"),(await Xt.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 Xt.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return ui.error(`error in getNetworkInfo: ${t}`),e}}a(VS,"getNetworkInfo");async function $S(){if(Td!==void 0)return Td;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Xt.osInfo();e=c;let u=await Xt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,Td=e,Td}catch(t){return ui.error(`error in getSystemInformation: ${t}`),e}}a($S,"getSystemInformation");async function YS(){let e=[],t=await RD.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await JX(n));return e}a(YS,"getTableSize");async function KS(){let e=await RD.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=jX({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){ui.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(KS,"getMetrics");async function gD(){if(WS.get(gd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await zX.getNATSReferences(),r=await t.streams.info(HS.WORK_QUEUE_CONSUMER_NAMES.stream_name),n=await e.consumers.get(HS.WORK_QUEUE_CONSUMER_NAMES.stream_name,HS.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(gD,"getNatsStreamInfo");async function ZX(e){let t=new XX;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await $S(),t.time=xS(),t.cpu=await qS(),t.memory=await FS(),t.disk=await kS(),t.network=await VS(),t.harperdb_processes=await GS(),t.table_size=await YS(),t.metrics=await KS(),t.threads=await TD(),t.replication=await gD(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await $S();break;case"time":t.time=xS();break;case"cpu":t.cpu=await qS();break;case"memory":t.memory=await FS();break;case"disk":t.disk=await kS();break;case"network":t.network=await VS();break;case"harperdb_processes":t.harperdb_processes=await GS();break;case"table_size":t.table_size=await YS();break;case"database_metrics":case"metrics":t.metrics=await KS();break;case"threads":t.threads=await TD();break;case"replication":t.replication=await gD();break;default:break}return t}a(ZX,"systemInformation")});var QS=T((ide,OD)=>{"use strict";OD.exports={version:ej,printVersion:tj};var Rd=Zc();function ej(){if(Rd)return Rd.version}a(ej,"version");function tj(){Rd&&console.log(`HarperDB Version ${Rd.version}`)}a(tj,"printVersion")});var Is=T((ude,ID)=>{"use strict";var rj=rn(),zS=J(),nj=require("util"),io=M(),bD=j();bD.initSync();var sj=CS(),ND=tn(),{Node:ade,NodeSubscription:cde}=ua(),ij=Zo(),oj=lD(),{RemotePayloadObject:aj,RemotePayloadSubscription:cj}=mu(),{handleHDBError:uj,hdb_errors:lj}=Z(),{HTTP_STATUS_CODES:_j,HDB_ERROR_MSGS:dj}=lj,fj=Jn(),Ej=la(),hj=QS(),{getDatabases:mj}=(ge(),ee(xe)),pj=nj.promisify(sj.authorize),Sj=ND.searchByHash,Tj=ND.searchByValue;ID.exports={authHeaderToUser:gj,isEmpty:Rj,getNodeRecord:Aj,upsertNodeRecord:Oj,buildNodePayloads:bj,checkClusteringEnabled:Nj,getAllNodeRecords:yj,getSystemInfo:Ij,reverseSubscription:yD};async function gj(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await pj(t,null),e}a(gj,"authHeaderToUser");function Rj(e){return e==null}a(Rj,"isEmpty");async function Aj(e){let t=new ij(io.SYSTEM_SCHEMA_NAME,io.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Sj(t)}a(Aj,"getNodeRecord");async function Oj(e){let t=new oj(io.SYSTEM_SCHEMA_NAME,io.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return rj.upsert(t)}a(Oj,"upsertNodeRecord");function yD(e){if(zS.isEmpty(e.subscribe)||zS.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(yD,"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=zS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=yD(c),E=mj()[u]?.[_],h=new cj(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new aj(r,t,s,n)}a(bj,"buildNodePayloads");function Nj(){if(!bD.get(io.CONFIG_PARAMS.CLUSTERING_ENABLED))throw uj(new Error,dj.CLUSTERING_NOT_ENABLED,_j.BAD_REQUEST,void 0,void 0,!0)}a(Nj,"checkClusteringEnabled");async function yj(){let e=new fj(io.SYSTEM_SCHEMA_NAME,io.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Tj(e))}a(yj,"getAllNodeRecords");async function Ij(){let e=await Ej.getSystemInformation();return{hdb_version:hj.version(),node_version:e.node_version,platform:e.platform}}a(Ij,"getSystemInfo")});var JS=T((_de,vD)=>{"use strict";var Ad=St(),wD=J(),CD=nt(),LD=M(),Od=V(),DD=ld(),wj=hp(),{RemotePayloadObject:Cj}=mu(),{handleHDBError:MD,hdb_errors:Lj}=Z(),{HTTP_STATUS_CODES:UD}=Lj,{NodeSubscription:PD}=ua();vD.exports=Dj;async function Dj(e,t){let r;try{r=await Ad.request(`${t}.${CD.REQUEST_SUFFIX}`,new Cj(LD.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Od.trace("Response from remote describe all request:",r)}catch(o){Od.error(`addNode received error from describe all request to remote node: ${o}`);let c=Ad.requestErrorHandler(o,"add_node",t);throw MD(new Error,c,UD.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===CD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw MD(new Error,o,UD.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===LD.SYSTEM_SCHEMA_NAME){await Ad.createLocalTableStream(u,c);let h=new PD(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=wD.doesSchemaExist(u),l=n[u]!==void 0,d=c?wD.doesTableExist(u,c):!0,f=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){s.push(o);continue}if(!_&&l&&(Od.trace(`addNode creating schema: ${u}`),await DD.createSchema({operation:"create_schema",schema:u})),!d&&f){Od.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new wj(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await DD.createTable(h)}await Ad.createLocalTableStream(u,c);let E=new PD(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(Dj,"reviewSubscriptions")});var yd=T((fde,xD)=>{"use strict";var{handleHDBError:bd,hdb_errors:Mj}=Z(),{HTTP_STATUS_CODES:Nd}=Mj,{addUpdateNodeValidator:Uj}=hd(),pu=V(),HD=M(),BD=nt(),Pj=J(),XS=St(),Su=Is(),vj=j(),Bj=JS(),{Node:Hj,NodeSubscription:xj}=ua(),{broadcast:qj}=tt(),Fj="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Gj="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",kj=vj.get(HD.CONFIG_PARAMS.CLUSTERING_NODENAME);xD.exports=Vj;async function Vj(e,t=!1){pu.trace("addNode called with:",e),Su.checkClusteringEnabled();let r=Uj(e);if(r)throw bd(r,r.message,Nd.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await Su.getNodeRecord(n);if(!Pj.isEmptyOrZeroLength(d))throw bd(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,Nd.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Bj(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Fj,o;let c=Su.buildNodePayloads(s,kj,HD.OPERATIONS_ENUM.ADD_NODE,await Su.getSystemInfo());pu.trace("addNode sending remote payload:",c);let u;try{u=await XS.request(`${n}.${BD.REQUEST_SUFFIX}`,c)}catch(d){pu.error(`addNode received error from request: ${d}`);let f=XS.requestErrorHandler(d,"add_node",n);throw bd(new Error,f,Nd.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===BD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw bd(new Error,d,Nd.INTERNAL_SERVER_ERROR,"error",d)}pu.trace(u);let _=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];pu.trace("Add node updating work stream for node:",n,"subscriptions:",E),await XS.updateWorkStream(E,n),s[d].start_time===void 0&&delete s[d].start_time,_.push(new xj(E.schema,E.table,E.publish,E.subscribe))}let l=new Hj(n,_,u.system_info);return await Su.upsertNodeRecord(l),qj({type:"nats_update"}),i.length>0?o.message=Gj:o.message=`Successfully added '${n}' to manifest`,o}a(Vj,"addNode")});var tT=T((mde,GD)=>{"use strict";var{handleHDBError:jS,hdb_errors:$j}=Z(),{HTTP_STATUS_CODES:ZS}=$j,{addUpdateNodeValidator:Yj}=hd(),Tu=V(),FD=M(),qD=nt(),hde=J(),eT=St(),gu=Is(),Kj=j(),{cloneDeep:Wj}=require("lodash"),Qj=JS(),{Node:zj,NodeSubscription:Jj}=ua(),{broadcast:Xj}=tt(),jj="Unable to update 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=Kj.get(FD.CONFIG_PARAMS.CLUSTERING_NODENAME);GD.exports=tZ;async function tZ(e){Tu.trace("updateNode called with:",e),gu.checkClusteringEnabled();let t=Yj(e);if(t)throw jS(t,t.message,ZS.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await gu.getNodeRecord(r);s.length>0&&(n=Wj(s));let{added:i,skipped:o}=await Qj(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=jj,c;let u=gu.buildNodePayloads(i,eZ,FD.OPERATIONS_ENUM.UPDATE_NODE,await gu.getSystemInfo());Tu.trace("updateNode sending remote payload:",u);let _;try{_=await eT.request(`${r}.${qD.REQUEST_SUFFIX}`,u)}catch(l){Tu.error(`updateNode received error from request: ${l}`);let d=eT.requestErrorHandler(l,"update_node",r);throw jS(new Error,d,ZS.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===qD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw jS(new Error,l,ZS.INTERNAL_SERVER_ERROR,"error",l)}Tu.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];Tu.trace(`updateNode updating work stream for node: ${r} subscription:`,f),await eT.updateWorkStream(f,r),i[l].start_time===void 0&&delete i[l].start_time}return n||(n=[new zj(r,[],_.system_info)]),await rZ(n[0],i,_.system_info),o.length>0?c.message=Zj:c.message=`Successfully updated '${r}'`,c}a(tZ,"updateNode");async function rZ(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 Jj(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await gu.upsertNodeRecord(n),Xj({type:"nats_update"})}a(rZ,"updateNodeTable")});var KD=T((Sde,YD)=>{"use strict";var $D=require("joi"),{string:kD}=$D.types(),nZ=et(),VD=M(),sZ=j(),iZ=nt();YD.exports=oZ;function oZ(e){let t=kD.invalid(sZ.get(VD.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(iZ.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=$D.object({operation:kD.valid(VD.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return nZ.validateBySchema(e,r)}a(oZ,"removeNodeValidator")});var wd=T((gde,jD)=>{"use strict";var{handleHDBError:WD,hdb_errors:aZ}=Z(),{HTTP_STATUS_CODES:QD}=aZ,cZ=KD(),Ru=V(),zD=Is(),uZ=J(),Id=M(),JD=nt(),XD=St(),lZ=j(),{RemotePayloadObject:_Z}=mu(),{NodeSubscription:dZ}=ua(),fZ=Yc(),EZ=Vi(),{broadcast:hZ}=tt(),mZ=lZ.get(Id.CONFIG_PARAMS.CLUSTERING_NODENAME);jD.exports=pZ;async function pZ(e){Ru.trace("removeNode called with:",e),zD.checkClusteringEnabled();let t=cZ(e);if(t)throw WD(t,t.message,QD.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await zD.getNodeRecord(r);if(uZ.isEmptyOrZeroLength(n))throw WD(new Error,`Node '${r}' was not found.`,QD.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new _Z(Id.OPERATIONS_ENUM.REMOVE_NODE,mZ,[]),i,o=!1;try{i=await XD.request(`${r}.${JD.REQUEST_SUFFIX}`,s),Ru.trace("Remove node reply from remote node:",r,i)}catch(u){Ru.error("removeNode received error from request:",u),o=!0}for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];Ru.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new dZ(l.schema,l.table,!1,!1);await XD.updateWorkStream(d,r)}let c=new fZ(Id.SYSTEM_SCHEMA_NAME,Id.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await EZ.deleteRecord(c),hZ({type:"nats_update"}),i?.status===JD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Ru.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(pZ,"removeNode")});var tM=T((Ade,eM)=>{"use strict";var ZD=require("joi"),{string:SZ,array:TZ}=ZD.types(),gZ=et(),RZ=hd();eM.exports=AZ;function AZ(e){let t=ZD.object({operation:SZ.valid("configure_cluster").required(),connections:TZ.items(RZ.validation_schema).required()});return gZ.validateBySchema(e,t)}a(AZ,"configureClusterValidator")});var rT=T((bde,oM)=>{"use strict";var OZ=M(),Cd=V(),bZ=J(),NZ=wd(),yZ=yd(),rM=Is(),IZ=tM(),{handleHDBError:nM,hdb_errors:wZ}=Z(),{HTTP_STATUS_CODES:sM}=wZ,CZ="Configure cluster complete.",LZ="Failed to configure the cluster. Check the logs for more details.",DZ="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";oM.exports=MZ;async function MZ(e){Cd.trace("configure cluster called with:",e),rM.checkClusteringEnabled();let t=IZ(e);if(t)throw nM(t,t.message,sM.BAD_REQUEST,void 0,void 0,!0);let r=await rM.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(iM(NZ,{operation:OZ.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);Cd.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(iM(yZ,E,E.node_name))}let c=await Promise.allSettled(i);Cd.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"&&(Cd.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:CZ,connections:_};if(l)return{message:DZ,failed_nodes:u,connections:_};throw nM(new Error,LZ,sM.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(MZ,"configureCluster");async function iM(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(iM,"functionWrapper")});var cM=T((yde,aM)=>{"use strict";var Ld=require("joi"),UZ=et(),{validateSchemaExists:PZ,validateTableExists:vZ,validateSchemaName:BZ}=Kn(),HZ=Ld.object({operation:Ld.string().valid("purge_stream"),schema:Ld.string().custom(PZ).custom(BZ).required(),table:Ld.string().custom(vZ).required()});function xZ(e){return UZ.validateBySchema(e,HZ)}a(xZ,"purgeStreamValidator");aM.exports=xZ});var nT=T((wde,uM)=>{"use strict";var{handleHDBError:qZ,hdb_errors:FZ}=Z(),{HTTP_STATUS_CODES:GZ}=FZ,kZ=cM(),VZ=St(),$Z=Is();uM.exports=YZ;async function YZ(e){if(e.purge_ingest!==!0){let s=kZ(e);if(s)throw qZ(s,s.message,GZ.BAD_REQUEST,void 0,void 0,!0)}$Z.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await VZ.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(YZ,"purgeStream")});var oT=T((Lde,hM)=>{"use strict";var iT=Is(),KZ=St(),dM=j(),Dd=M(),oo=nt(),WZ=J(),sT=V(),{RemotePayloadObject:QZ}=mu(),{ErrorCode:lM}=require("nats"),_M=dM.get(Dd.CONFIG_PARAMS.CLUSTERING_ENABLED),fM=dM.get(Dd.CONFIG_PARAMS.CLUSTERING_NODENAME);hM.exports={clusterStatus:zZ,buildNodeStatus:EM};async function zZ(){let e={node_name:fM,is_enabled:_M,connections:[]};if(!_M)return e;let t=await iT.getAllNodeRecords();if(WZ.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(EM(t[n],e.connections));return await Promise.allSettled(r),e}a(zZ,"clusterStatus");async function EM(e,t){let r=e.name,n=new QZ(Dd.OPERATIONS_ENUM.CLUSTER_STATUS,fM,void 0,await iT.getSystemInfo()),s,i,o=oo.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await KZ.request(oo.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===oo.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=oo.CLUSTER_STATUS_STATUSES.CLOSED,sT.error(`Error getting node status from ${r} `,s))}catch(u){sT.warn(`Error getting node status from ${r}`,u),u.code===lM.NoResponders?o=oo.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===lM.Timeout?o=oo.CLUSTER_STATUS_STATUSES.TIMEOUT:o=oo.CLUSTER_STATUS_STATUSES.CLOSED}let c=new JZ(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!==Dd.PRE_4_0_0_VERSION&&await iT.upsertNodeRecord(u)}catch(u){sT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(EM,"buildNodeStatus");function JZ(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(JZ,"NodeStatusObject")});var cT=T((Mde,mM)=>{"use strict";var{handleHDBError:XZ,hdb_errors:jZ}=Z(),{HTTP_STATUS_CODES:ZZ}=jZ,e5=St(),t5=Is(),aT=J(),Md=require("joi"),r5=et(),n5=2e3,s5=Md.object({timeout:Md.number().min(1),connected_nodes:Md.boolean(),routes:Md.boolean()});mM.exports=i5;async function i5(e){t5.checkClusteringEnabled();let t=r5.validateBySchema(e,s5);if(t)throw XZ(t,t.message,ZZ.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||aT.autoCastBoolean(n),o=s===void 0||aT.autoCastBoolean(s),c={nodes:[]},u=await e5.getServerList(r??n5),_={};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:aT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(i5,"clusterNetwork")});var gM=T((Pde,TM)=>{"use strict";var uT=require("joi"),pM=et(),{route_constraints:SM}=fh();TM.exports={setRoutesValidator:o5,deleteRoutesValidator:a5};function o5(e){let t=uT.object({server:uT.valid("hub","leaf").required(),routes:SM.required()});return pM.validateBySchema(e,t)}a(o5,"setRoutesValidator");function a5(e){let t=uT.object({routes:SM.required()});return pM.validateBySchema(e,t)}a(a5,"deleteRoutesValidator")});var _T=T((Bde,bM)=>{"use strict";var ao=Lr(),lT=J(),Ud=M(),RM=gM(),{handleHDBError:AM,hdb_errors:c5}=Z(),{HTTP_STATUS_CODES:OM}=c5,u5="cluster routes successfully set",l5="cluster routes successfully deleted";bM.exports={setRoutes:_5,getRoutes:d5,deleteRoutes:f5};function _5(e){let t=RM.setRoutesValidator(e);if(t)throw AM(t,t.message,OM.BAD_REQUEST,void 0,void 0,!0);let r=ao.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=lT.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"?ao.updateConfigValue(Ud.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):ao.updateConfigValue(Ud.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:u5,set:o,skipped:i}}a(_5,"setRoutes");function d5(){let e=ao.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(d5,"getRoutes");function f5(e){let t=RM.deleteRoutesValidator(e);if(t)throw AM(t,t.message,OM.BAD_REQUEST,void 0,void 0,!0);let r=ao.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=lT.isEmptyOrZeroLength(n)?null:n,ao.updateConfigValue(Ud.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=lT.isEmptyOrZeroLength(s)?null:s,ao.updateConfigValue(Ud.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:l5,deleted:i,skipped:o}}a(f5,"deleteRoutes")});var yM=T((xde,NM)=>{"use strict";var Au=require("alasql"),co=require("recursive-iterator"),vn=V(),E5=J(),Ou=M(),dT=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,m5(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=>Ou.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=>!Ou.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][Ou.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=h5(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(_=>!Ou.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Au.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 h5(e){return e.filter(t=>t[Ou.PERMS_CRUD_ENUM.READ])}a(h5,"filterReadRestrictedAttrs");function m5(e,t,r,n,s){p5(e,t,r,n,s)}a(m5,"interpretAST");function bu(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(bu,"addSchemaTableToMap");function p5(e,t,r,n,s){if(!e){vn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Au.yy.Insert?R5(e,t,r):e instanceof Au.yy.Select?S5(e,t,r,n,s):e instanceof Au.yy.Update?T5(e,t,r):e instanceof Au.yy.Delete?g5(e,t,r):vn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(p5,"getRecordAttributesAST");function S5(e,t,r,n,s){if(!e){vn.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(E5.isEmptyOrZeroLength(i)){vn.error("No schema specified");return}e.from.forEach(c=>{bu(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),bu(c.table,t,r,n,s)});let o=new co(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{vn.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 co(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{vn.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 co(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{vn.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 co(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{vn.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(S5,"getSelectAttributes");function T5(e,t,r){if(!e){vn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new co(e.columns),s=e.table.databaseid;bu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&fT(e.table.tableid,s,i.columnid,t,r)}a(T5,"getUpdateAttributes");function g5(e,t,r){if(!e){vn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new co(e.where),s=e.table.databaseid;bu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&fT(e.table.tableid,s,i.columnid,t,r)}a(g5,"getDeleteAttributes");function R5(e,t,r){if(!e){vn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new co(e.columns),s=e.into.databaseid;bu(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&fT(e.into.tableid,s,i.columnid,t,r)}a(R5,"getInsertAttributes");function fT(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(fT,"pushAttribute");NM.exports=dT});var mT=T((Fde,LM)=>{var Pd=$i(),IM=require("chalk"),Gr=V(),wM=require("prompt"),{promisify:A5}=require("util"),ET=M(),O5=require("fs-extra"),b5=require("path"),N5=J(),y5=QS(),CM=j();CM.initSync();var I5=require("moment"),w5=A5(wM.get),C5=b5.join(CM.getHdbBasePath(),ET.LICENSE_KEY_DIR_NAME,ET.LICENSE_FILE_NAME,ET.LICENSE_FILE_NAME);LM.exports={getFingerprint:D5,setLicense:L5,parseLicense:hT,register:M5,getRegistrationInfo:P5};async function L5(e){if(e&&e.key&&e.company){try{Gr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await hT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Gr.error(r),Gr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(L5,"setLicense");async function D5(){let e={};try{e=await Pd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Gr.error(r),Gr.error(t),new Error(r)}return e}a(D5,"getFingerprint");async function hT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Gr.info("Validating license input...");let r=Pd.validateLicense(e,t);if(Gr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Gr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Gr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Gr.info("writing license to disk"),await O5.writeFile(C5,JSON.stringify({license_key:e,company:t}))}catch(n){throw Gr.error("Failed to write License"),n}return"Registration successful."}a(hT,"parseLicense");async function M5(){let e=await U5();return hT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(M5,"register");async function U5(){let e=await Pd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:IM.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:IM.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{wM.start()}catch(n){Gr.error(n)}let r;try{r=await w5(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(U5,"promptForRegistration");async function P5(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Pd.getLicense()}catch(r){throw Gr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(N5.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=y5.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=I5.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(P5,"getRegistrationInfo")});var MM=T((kde,DM)=>{"use strict";var v5=nt(),pT=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+v5.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"}};DM.exports=pT});var vM=T(($de,PM)=>{"use strict";var UM=nt(),ST=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+UM.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+UM.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"}};PM.exports=ST});var HM=T((Kde,BM)=>{"use strict";var TT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};BM.exports=TT});var qM=T((Qde,xM)=>{"use strict";var B5=nt(),gT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+B5.SERVER_SUFFIX.ADMIN,this.password=r}};xM.exports=gT});var OT=T((Jde,kM)=>{"use strict";var _a=require("path"),Hd=require("fs-extra"),H5=MM(),x5=vM(),q5=HM(),F5=qM(),RT=vr(),fa=J(),hr=Lr(),Bd=M(),Nu=nt(),{CONFIG_PARAMS:Et}=Bd,yu=V(),Iu=j(),FM=gs(),AT=St(),da="clustering",G5=1e4,GM=5;kM.exports={generateNatsConfig:V5,removeNatsConfig:$5,getHubConfigPath:k5};function k5(){let e=Iu.get(Et.ROOTPATH);return _a.join(e,da,Nu.NATS_CONFIG_FILES.HUB_SERVER)}a(k5,"getHubConfigPath");async function V5(e=!1,t=void 0){Iu.initSync();let r=Iu.get(Et.ROOTPATH),n=_a.join(r,da,Nu.PID_FILES.HUB),s=_a.join(r,da,Nu.PID_FILES.LEAF),i=hr.getConfigFromFile(Et.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=_a.join(r,da,Nu.NATS_CONFIG_FILES.HUB_SERVER),c=_a.join(r,da,Nu.NATS_CONFIG_FILES.LEAF_SERVER),u=hr.getConfigFromFile(Et.CLUSTERING_TLS_CERTIFICATE),_=hr.getConfigFromFile(Et.CLUSTERING_TLS_PRIVATEKEY),l=hr.getConfigFromFile(Et.CLUSTERING_TLS_CERT_AUTH),d=hr.getConfigFromFile(Et.CLUSTERING_TLS_INSECURE),f=hr.getConfigFromFile(Et.CLUSTERING_TLS_VERIFY),E=hr.getConfigFromFile(Et.CLUSTERING_NODENAME),h=hr.getConfigFromFile(Et.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await AT.checkNATSServerInstalled()||xd("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await RT.listUsers(),S=hr.getConfigFromFile(Et.CLUSTERING_USER),A=await RT.getClusterUser();(fa.isEmpty(A)||A.active!==!0)&&xd(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await vd(Et.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await vd(Et.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await vd(Et.CLUSTERING_HUBSERVER_NETWORK_PORT),await vd(Et.CLUSTERING_LEAFSERVER_NETWORK_PORT));let I=[],w=[];for(let[z,re]of p.entries())re.role.role===Bd.ROLE_TYPES_ENUM.CLUSTER_USER&&re.active&&(I.push(new F5(re.username,FM.decrypt(re.hash))),w.push(new q5(re.username,FM.decrypt(re.hash))));let B=[],{hub_routes:K}=hr.getClusteringRoutes();if(!fa.isEmptyOrZeroLength(K))for(let z of K)B.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${z.host}:${z.port}`);let q=new H5(hr.getConfigFromFile(Et.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,u,_,l,d,f,h,hr.getConfigFromFile(Et.CLUSTERING_HUBSERVER_CLUSTER_NAME),hr.getConfigFromFile(Et.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),B,I,w);l==null&&(delete q.tls.ca_file,delete q.leafnodes.tls.ca_file),t=fa.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Bd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Hd.writeJson(o,q),yu.trace(`Hub server config written to ${o}`));let P=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,Q=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,Y=new x5(hr.getConfigFromFile(Et.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[P],[Q],I,w,u,_,l,d);l==null&&delete Y.tls.ca_file,(t===void 0||t===Bd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Hd.writeJson(c,Y),yu.trace(`Leaf server config written to ${c}`))}a(V5,"generateNatsConfig");async function vd(e){let t=Iu.get(e);return fa.isEmpty(t)&&xd(`port undefined for '${e}'`),await fa.isPortTaken(t)&&xd(`'${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(vd,"isPortAvailable");function xd(e){let t=`Error generating clustering config: ${e}`;yu.error(t),console.error(t),process.exit(1)}a(xd,"generateNatsConfigError");async function $5(e){let{port:t,config_file:r}=AT.getServerConfig(e),{username:n,decrypt_hash:s}=await RT.getClusterUser(),i=0,o=2e3;for(;i<GM;){try{let _=await AT.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){yu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=GM)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 fa.async_set_timeout(o*(i*2))}let c="0".repeat(G5),u=_a.join(Iu.get(Et.ROOTPATH),da,r);await Hd.writeFile(u,c),await Hd.remove(u),yu.notify(e,"started.")}a($5,"removeNatsConfig")});var QM=T((jde,WM)=>{"use strict";var kr=j(),Y5=$i(),he=M(),wu=nt(),ws=require("path"),{PACKAGE_ROOT:Fd}=M(),VM=j(),qd=J(),Ea="/dev/null",K5=ws.join(Fd,"launchServiceScripts"),$M=ws.join(Fd,"utility/scripts"),W5=ws.join($M,he.HDB_RESTART_SCRIPT),YM=ws.resolve(Fd,"dependencies",`${process.platform}-${process.arch}`,wu.NATS_BINARY_NAME);function KM(){let t=Y5.licenseSearch().ram_allocation||he.RAM_ALLOCATION_ENUM.DEFAULT,r=he.MEM_SETTING_KEY+t,n={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return qd.noBootFile()&&(n[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=qd.getEnvCliRootPath()),{name:he.PROCESS_DESCRIPTORS.HDB,script:he.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Fd}}a(KM,"generateMainServerConfig");var Q5=9930;function z5(){kr.initSync(!0);let e=kr.get(he.CONFIG_PARAMS.ROOTPATH),t=ws.join(e,"clustering",wu.NATS_CONFIG_FILES.HUB_SERVER),r=ws.join(kr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),n=VM.get(he.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=wu.LOG_LEVEL_FLAGS[kr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Q5?"-"+n:""),script:YM,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return kr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ea,i.error_file=Ea),i}a(z5,"generateNatsHubServerConfig");var J5=9940;function X5(){kr.initSync(!0);let e=kr.get(he.CONFIG_PARAMS.ROOTPATH),t=ws.join(e,"clustering",wu.NATS_CONFIG_FILES.LEAF_SERVER),r=ws.join(kr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),n=VM.get(he.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=wu.LOG_LEVEL_FLAGS[kr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==J5?"-"+n:""),script:YM,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return kr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ea,i.error_file=Ea),i}a(X5,"generateNatsLeafServerConfig");function j5(){kr.initSync();let e=ws.join(kr.get(he.CONFIG_PARAMS.LOGGING_ROOT),he.LOG_NAMES.HDB),t={name:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:he.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:K5,autorestart:!1};return kr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Ea,t.error_file=Ea),t}a(j5,"generateClusteringUpgradeV4ServiceConfig");function Z5(){let e={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.RESTART_HDB};return qd.noBootFile()&&(e[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=qd.getEnvCliRootPath()),{...{name:he.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:$M},script:W5}}a(Z5,"generateRestart");function e8(){return{apps:[KM()]}}a(e8,"generateAllServiceConfigs");WM.exports={generateAllServiceConfigs:e8,generateMainServerConfig:KM,generateRestart:Z5,generateNatsHubServerConfig:z5,generateNatsLeafServerConfig:X5,generateClusteringUpgradeV4ServiceConfig:j5}});var cU=T((tfe,aU)=>{"use strict";var Le=M(),t8=J(),Cs=OT(),Cu=St(),es=nt(),li=QM(),Gd=j(),_i=V(),r8=Is(),{startWorker:zM,onMessageFromWorkers:n8}=tt(),s8=la(),efe=require("util"),i8=require("child_process"),o8=require("fs"),{execFile:a8}=i8,be;aU.exports={enterPM2Mode:c8,start:di,stop:bT,reload:XM,restart:jM,list:NT,describe:eU,connect:Ls,kill:f8,startAllServices:E8,startService:yT,getUniqueServicesList:tU,restartAllServices:h8,isServiceRegistered:rU,reloadStopStart:nU,restartHdb:ZM,deleteProcess:_8,startClusteringProcesses:iU,startClusteringThreads:oU,isHdbRestartRunning:d8,isClusteringRunning:p8,stopClustering:m8,reloadClustering:S8};var Lu=!1;n8(e=>{e.type==="restart"&&Gd.initSync(!0)});function c8(){Lu=!0}a(c8,"enterPM2Mode");function Ls(){return be||(be=require("pm2")),new Promise((e,t)=>{be.connect((r,n)=>{_i.setupConsoleLogging(),r&&t(r),e(n)})})}a(Ls,"connect");var mr,u8=10,JM;function di(e,t=!1){if(Lu)return l8(e);let r=a8(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=mr.indexOf(r);o>-1&&mr.splice(o,1),!JM&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<u8&&(o8.existsSync(Cs.getHubConfigPath())?di(e):(await Cs.generateNatsConfig(!0),di(e),await new Promise(c=>setTimeout(c,3e3)),await Cs.removeNatsConfig(Le.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Cs.removeNatsConfig(Le.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Gd.get(Le.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&es.LOG_LEVEL_HIERARCHY[o]>=es.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===es.LOG_LEVELS.ERR||l===es.LOG_LEVELS.WRN?_i.OUTPUTS.STDERR:_i.OUTPUTS.STDOUT;_i.logCustomLevel(l||"info",E,n,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=es.LOG_LEVELS[f]}if(es.LOG_LEVEL_HIERARCHY[o]>=es.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===es.LOG_LEVELS.ERR||l===es.LOG_LEVELS.WRN?_i.OUTPUTS.STDERR:_i.OUTPUTS.STDOUT;_i.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),mr=[],!mr&&!t){let i=a(()=>{JM=!0,mr&&(mr.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)}mr.push(r)}a(di,"start");function l8(e){return new Promise(async(t,r)=>{try{await Ls()}catch(n){r(n)}be.start(e,(n,s)=>{n&&(be.disconnect(),r(n)),be.disconnect(),t(s)})})}a(l8,"startWithPM2");function bT(e){if(!Lu){for(let t of mr||[])t.name===e&&(mr.splice(mr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Ls()}catch(n){r(n)}be.stop(e,async(n,s)=>{n&&(be.disconnect(),r(n)),be.delete(e,(i,o)=>{i&&(be.disconnect(),r(n)),be.disconnect(),t(o)})})})}a(bT,"stop");function XM(e){return new Promise(async(t,r)=>{try{await Ls()}catch(n){r(n)}be.reload(e,(n,s)=>{n&&(be.disconnect(),r(n)),be.disconnect(),t(s)})})}a(XM,"reload");function jM(e){if(!Lu)for(let t of mr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Ls()}catch(n){r(n)}be.restart(e,(n,s)=>{be.disconnect(),t(s)})})}a(jM,"restart");function _8(e){return new Promise(async(t,r)=>{try{await Ls()}catch(n){r(n)}be.delete(e,(n,s)=>{n&&(be.disconnect(),r(n)),be.disconnect(),t(s)})})}a(_8,"deleteProcess");async function ZM(){await di(li.generateRestart())}a(ZM,"restartHdb");async function d8(){let e=await NT();for(let t in e)if(e[t].name===Le.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(d8,"isHdbRestartRunning");function NT(){return new Promise(async(e,t)=>{try{await Ls()}catch(r){t(r)}be.list((r,n)=>{r&&(be.disconnect(),t(r)),be.disconnect(),e(n)})})}a(NT,"list");function eU(e){return new Promise(async(t,r)=>{try{await Ls()}catch(n){r(n)}be.describe(e,(n,s)=>{n&&(be.disconnect(),r(n)),be.disconnect(),t(s)})})}a(eU,"describe");function f8(){if(!Lu){for(let e of mr||[])e.kill();mr=[];return}return new Promise(async(e,t)=>{try{await Ls()}catch(r){t(r)}be.killDaemon((r,n)=>{r&&(be.disconnect(),t(r)),be.disconnect(),e(n)})})}a(f8,"kill");async function E8(){try{await iU(),await oU(),await di(li.generateAllServiceConfigs())}catch(e){throw be?.disconnect(),e}}a(E8,"startAllServices");async function yT(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Le.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=li.generateMainServerConfig();break;case Le.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=li.generateNatsIngestServiceConfig();break;case Le.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=li.generateNatsReplyServiceConfig();break;case Le.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=li.generateNatsHubServerConfig(),await di(r,t),await Cs.removeNatsConfig(e);return;case Le.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=li.generateNatsLeafServerConfig(),await di(r,t),await Cs.removeNatsConfig(e);return;case Le.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=li.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await di(r)}catch(r){throw be?.disconnect(),r}}a(yT,"startService");async function tU(){try{let e=await NT(),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 be?.disconnect(),e}}a(tU,"getUniqueServicesList");async function h8(e=[]){try{let t=!1,r=await tU();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===Le.PROCESS_DESCRIPTORS.HDB?t=!0:await jM(o))}t&&await nU(Le.PROCESS_DESCRIPTORS.HDB)}catch(t){throw be?.disconnect(),t}}a(h8,"restartAllServices");async function rU(e){if(mr?.find(r=>r.name===e))return!0;let t=await s8.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(rU,"isServiceRegistered");async function nU(e){let t=e===Le.PROCESS_DESCRIPTORS.HDB?Gd.get(Le.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):Gd.get(Le.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await eU(e),n=t8.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await bT(e),await yT(e)):e===Le.PROCESS_DESCRIPTORS.HDB?await ZM():await XM(e)}a(nU,"reloadStopStart");var sU;async function iU(e=!1){for(let t in Le.CLUSTERING_PROCESSES){let r=Le.CLUSTERING_PROCESSES[t];await yT(r,e)}}a(iU,"startClusteringProcesses");async function oU(){sU=zM(Le.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Le.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Cu.createWorkQueueStream(es.WORK_QUEUE_CONSUMER_NAMES),await Cu.updateIngestStreamConsumer(),await Cu.updateLocalStreams();let e=await r8.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Le.PRE_4_0_0_VERSION){_i.info("Starting clustering upgrade 4.0.0 process"),zM(Le.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(oU,"startClusteringThreads");async function m8(){for(let e in Le.CLUSTERING_PROCESSES)if(e!==Le.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Le.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await sU.terminate();else{let t=Le.CLUSTERING_PROCESSES[e];await bT(t)}}a(m8,"stopClustering");async function p8(){for(let e in Le.CLUSTERING_PROCESSES){let t=Le.CLUSTERING_PROCESSES[e];if(await rU(t)===!1)return!1}return!0}a(p8,"isClusteringRunning");async function S8(){await Cs.generateNatsConfig(!0),await Cu.reloadNATSHub(),await Cu.reloadNATSLeaf(),await Cs.removeNatsConfig(Le.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Cs.removeNatsConfig(Le.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(S8,"reloadClustering")});var Yd=T((nfe,hU)=>{"use strict";var T8=require("minimist"),{isMainThread:CT,parentPort:_U}=require("worker_threads"),st=M(),{PROCESS_DESCRIPTORS_VALIDATE:Du}=st,ts=V(),LT=J(),kd=OT(),ha=St(),IT=nt(),dU=Lr(),rs=cU(),uU=la(),g8=rh(),{restartWorkers:Vd,onMessageByType:R8}=tt(),{handleHDBError:A8,hdb_errors:O8}=Z(),{HTTP_STATUS_CODES:b8}=O8,$d=j();$d.initSync();var Mu=`Restarting HarperDB. This may take up to ${st.RESTART_TIMEOUT_MS/1e3} seconds.`,N8="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",lU="Clustering is not enabled so cannot be restarted",y8="Invalid service",ma,an;hU.exports={restart:fU,restartService:DT};CT&&R8(st.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?DT({service:e.workerType}):fU({operation:"restart"})});async function fU(e){an=Object.keys(e).length===0,ma=await rs.isServiceRegistered(st.HDB_PROC_DESCRIPTOR);let t=T8(process.argv);if(t.service){await DT(t);return}if(an&&!ma){console.error(N8);return}if(an&&console.log(Mu),ma){rs.enterPM2Mode(),ts.notify(Mu);let r=g8(Object.keys(st.CONFIG_PARAM_MAP),!0);return LT.isEmptyOrZeroLength(Object.keys(r))||dU.updateConfigValue(void 0,void 0,r,!0,!0),w8(),Mu}return CT?(ts.notify(Mu),setTimeout(()=>{Vd()},50)):_U.postMessage({type:st.ITC_EVENT_TYPES.RESTART}),Mu}a(fU,"restart");async function DT(e){let{service:t}=e;if(st.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw A8(new Error,y8,b8.BAD_REQUEST,void 0,void 0,!0);if(ma=await rs.isServiceRegistered(st.HDB_PROC_DESCRIPTOR),!CT)return _U.postMessage({type:st.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Du.clustering:if(!$d.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=lU;break}an&&console.log("Restarting clustering"),ts.notify("Restarting clustering"),await EU();break;case Du.clustering_config:case Du["clustering config"]:if(!$d.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=lU;break}an&&console.log("Restarting clustering_config"),ts.notify("Restarting clustering_config"),await rs.reloadClustering();break;case"custom_functions":case"custom functions":case Du.harperdb:case Du.http_workers:if(an&&!ma){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}an&&console.log("Restarting http_workers"),ts.notify("Restarting http_workers"),an?await rs.restart(st.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Vd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(ts.error(r),an&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(DT,"restartService");async function I8(){await ha.publishToStream(`${IT.SUBJECT_PREFIXES.TXN}.${IT.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,IT.WORK_QUEUE_CONSUMER_NAMES.stream_name,ha.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(I8,"postDummyNatsMsg");async function w8(){await EU(),await rs.restart(st.HDB_PROC_DESCRIPTOR),await LT.async_set_timeout(2e3),$d.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await wT(),an&&(await ha.closeConnection(),process.exit(0))}a(w8,"restartPM2Mode");async function EU(){if(!dU.getConfigFromFile(st.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await uU.getHDBProcessInfo()).clustering.length===0)ts.trace("Clustering not running, restart will start clustering services"),await kd.generateNatsConfig(!0),await rs.startClusteringProcesses(),await rs.startClusteringThreads(),await wT(),an&&await ha.closeConnection();else{await I8(),await kd.generateNatsConfig(!0),ma?(ts.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await rs.restart(st.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await rs.restart(st.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await uU.getHDBProcessInfo()).clustering.forEach(s=>{ts.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await LT.async_set_timeout(3e3),await wT(),await ha.updateLocalStreams(),an&&await ha.closeConnection(),ts.trace("Restart clustering restarting ingest and reply service threads");let t=Vd(st.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Vd(st.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(EU,"restartClustering");async function wT(){await kd.removeNatsConfig(st.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await kd.removeNatsConfig(st.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(wT,"removeNatsConfig")});var yU=T((ofe,NU)=>{"use strict";var ife=require("lodash"),pr=M(),{handleHDBError:mU,hdb_errors:C8}=Z(),{HDB_ERROR_MSGS:L8,HTTP_STATUS_CODES:D8}=C8,MT=V();NU.exports={getRolePermissions:U8};var uo=Object.create(null),M8=a(e=>({key:e,perms:{}}),"perms_template_obj"),gU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),RU=a((e=!1,t=!1,r=!1,n=!1)=>({[pr.PERMS_CRUD_ENUM.READ]:e,[pr.PERMS_CRUD_ENUM.INSERT]:t,[pr.PERMS_CRUD_ENUM.UPDATE]:r,[pr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),UT=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...RU(t,r,n,s)}),"table_perms_template"),pU=a((e,t=RU())=>({attribute_name:e,describe:bU(t),[Uu]:t[Uu],[PT]:t[PT],[vT]:t[vT]}),"attr_perms_template"),SU=a((e,t=!1)=>({attribute_name:e,describe:t,[Uu]:t}),"timestamp_attr_perms_template"),{READ:Uu,INSERT:PT,UPDATE:vT}=pr.PERMS_CRUD_ENUM,AU=Object.values(pr.PERMS_CRUD_ENUM),OU=[Uu,PT,vT];function U8(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[pr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(uo[t]&&uo[t].key===n)return uo[t].perms;let s=P8(e,r);return uo[t]?uo[t].key=n:uo[t]=M8(n),uo[t].perms=s,s}catch(r){if(!e[pr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[pr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<pr.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 MT.error(n),MT.debug(r),mU(new Error,L8.OUTDATED_PERMS_TRANSLATION_ERROR,D8.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
11
- ${r.stack}`;throw MT.error(n),mU(new Error)}}}a(U8,"getRolePermissions");function P8(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[pr.SYSTEM_SCHEMA_NAME]=n[pr.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]=v8(t[i]);return}r[i]=gU(),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],_=B8(c,u);r[i].describe||AU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=UT()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=UT()})}),r}a(P8,"translateRolePermissions");function v8(e){let t=gU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=UT(!0,!0,!0,!0,!0)}),t}a(v8,"createStructureUserPermissions");function B8(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 pr.TIME_STAMP_NAMES.includes(d)&&(f=SU(d,l[Uu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=pU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=bU(l),s.attribute_permissions.push(l),c||H8(l,u)}else if(_!==o){let l;pr.TIME_STAMP_NAMES.includes(_)?l=SU(_):l=pU(_),s.attribute_permissions.push(l)}}),c||s.attribute_permissions.push(u),s.describe=TU(s),s}else return e.describe=TU(e),e}a(B8,"getTableAttrPerms");function TU(e){return AU.filter(t=>e[t]).length>0}a(TU,"getSchemaTableDescribePerm");function bU(e){return OU.filter(t=>e[t]).length>0}a(bU,"getAttributeDescribePerm");function H8(e,t){OU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(H8,"checkForHashPerms")});var IU={};Ve(IU,{Resources:()=>Kd,keyArrayToString:()=>pa,resetResources:()=>x8,resources:()=>fi});function x8(){return fi=new Kd}function pa(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Kd,fi,Pu=Ae(()=>{Ji();Kd=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 Qe(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(x8,"resetResources");a(pa,"keyArrayToString")});var wU={};Ve(wU,{Headers:()=>Ei});var Ei,Wd=Ae(()=>{Ei=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 vu={};Ve(vu,{authentication:()=>BU,bypassAuth:()=>Y8,login:()=>W8,logout:()=>Q8,start:()=>K8});function Y8(){vU=!0}async function BU(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?k8?G8:[]:F8?q8:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Ei([["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 LU.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new Jd.AuthAuditLog(E,h,kt.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===kt.AUTH_AUDIT_STATUS.SUCCESS?CU.notify(S):CU.error(S)},"authAuditLog"),d;if(n){if(d=lo.get(n),!d){let[E,h]=n.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await lt.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,zd.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,zd.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return $8&&(lo.get(h)||(lo.set(h,h),l(p,kt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:hi({error:A.message},e)})}lo.set(n,d),V8&&l(d.username,kt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await lt.getUser(_.user,null,e):(vU&&(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,UU.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,LU.put(E)},e.login=async function(E,h){e.user=await lt.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")&&fi.loginPath?(f.status=302,f.headers.set("Location",fi.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 Ei);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function K8({server:e,port:t}){e.request(BU,{port:t||"all"}),DU||(DU=!0,setInterval(()=>{lo=new Map},cn.get(kt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),PU.user.addListener(()=>{lo=new Map}))}async function W8(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 Q8(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var MU,zd,UU,cn,kt,Jd,PU,CU,q8,F8,G8,k8,LU,Qd,vU,V8,$8,lo,DU,Xd=Ae(()=>{MU=v(vr());nr();Pu();zd=v(hu());ge();UU=require("uuid"),cn=v(j()),kt=v(M()),Jd=v(V()),PU=v(Bc());Wd();Sa();CU=(0,Jd.loggerWithTag)("auth-event");cn.initSync();q8=cn.get(kt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),F8=cn.get(kt.CONFIG_PARAMS.HTTP_CORS),G8=cn.get(kt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),k8=cn.get(kt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),LU=_t({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Qd=cn.get(kt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,vU=cn.get(kt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,V8=cn.get(kt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,$8=cn.get(kt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,lo=new Map;lt.onInvalidatedUser(()=>{lo=new Map});a(Y8,"bypassAuth");a(BU,"authentication");a(K8,"start");a(W8,"login");a(Q8,"logout")});var VU=T((pfe,kU)=>{"use strict";var Ne=require("joi"),HU=require("fs-extra"),xU=require("path"),Ms=et(),qU=j(),FU=M(),GU=V(),{hdb_errors:z8}=Z(),{HDB_ERROR_MSGS:jt}=z8,Ds=/^[a-zA-Z0-9-_]+$/;kU.exports={getDropCustomFunctionValidator:X8,setCustomFunctionValidator:j8,addComponentValidator:r6,dropCustomFunctionProjectValidator:n6,packageComponentValidator:s6,deployComponentValidator:i6,setComponentFileValidator:Z8,getComponentFileValidator:t6,dropComponentFileValidator:e6};function jd(e,t,r){try{let n=qU.get(FU.CONFIG_PARAMS.COMPONENTSROOT),s=xU.join(n,t);return HU.existsSync(s)?e?t:r.message(jt.PROJECT_EXISTS):e?r.message(jt.NO_PROJECT):t}catch(n){return GU.error(n),r.message(jt.VALIDATION_ERR)}}a(jd,"checkProjectExists");function Bu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Bu,"checkFilePath");function J8(e,t,r,n){try{let s=qU.get(FU.CONFIG_PARAMS.COMPONENTSROOT),i=xU.join(s,e,t,r+".js");return HU.existsSync(i)?r:n.message(jt.NO_FILE)}catch(s){return GU.error(s),n.message(jt.VALIDATION_ERR)}}a(J8,"checkFileExists");function X8(e){let t=Ne.object({project:Ne.string().pattern(Ds).custom(jd.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().pattern(Ds).custom(J8.bind(null,e.project,e.type)).custom(Bu).required().messages({"string.pattern.base":jt.BAD_FILE_NAME})});return Ms.validateBySchema(e,t)}a(X8,"getDropCustomFunctionValidator");function j8(e){let t=Ne.object({project:Ne.string().pattern(Ds).custom(jd.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().custom(Bu).required(),function_content:Ne.string().required()});return Ms.validateBySchema(e,t)}a(j8,"setCustomFunctionValidator");function Z8(e){let t=Ne.object({project:Ne.string().pattern(Ds).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:Ne.string().custom(Bu).required(),payload:Ne.string().allow("").optional(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ms.validateBySchema(e,t)}a(Z8,"setComponentFileValidator");function e6(e){let t=Ne.object({project:Ne.string().pattern(Ds).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:Ne.string().custom(Bu).optional()});return Ms.validateBySchema(e,t)}a(e6,"dropComponentFileValidator");function t6(e){let t=Ne.object({project:Ne.string().required(),file:Ne.string().custom(Bu).required(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ms.validateBySchema(e,t)}a(t6,"getComponentFileValidator");function r6(e){let t=Ne.object({project:Ne.string().pattern(Ds).custom(jd.bind(null,!1)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Ms.validateBySchema(e,t)}a(r6,"addComponentValidator");function n6(e){let t=Ne.object({project:Ne.string().pattern(Ds).custom(jd.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Ms.validateBySchema(e,t)}a(n6,"dropCustomFunctionProjectValidator");function s6(e){let t=Ne.object({project:Ne.string().pattern(Ds).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),skip_node_modules:Ne.boolean()});return Ms.validateBySchema(e,t)}a(s6,"packageComponentValidator");function i6(e){let t=Ne.object({project:Ne.string().pattern(Ds).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),payload:Ne.string().optional().messages({"string.pattern.base":jt.BAD_PACKAGE}),package:Ne.string().optional()});return Ms.validateBySchema(e,t)}a(i6,"deployComponentValidator")});var rf=T((Tfe,JU)=>{"use strict";var Zd=require("joi"),ef=require("path"),$U=require("fs-extra"),{exec:o6}=require("child_process"),a6=require("util"),YU=a6.promisify(o6),Hu=M(),{handleHDBError:Ta,hdb_errors:c6}=Z(),{HTTP_STATUS_CODES:ga}=c6,xu=j(),u6=et(),Ra=V();xu.initSync();var BT=xu.get(Hu.CONFIG_PARAMS.COMPONENTSROOT),KU="npm install --omit=dev --json",l6=`${KU} --dry-run`;JU.exports={installModules:E6,auditModules:h6,installAllRootModules:_6,uninstallRootModule:d6,linkHarperdb:f6};async function _6(e=!1){await tf(),await qu(e?"npm install --ignore-scripts":"npm install",xu.get(Hu.CONFIG_PARAMS.ROOTPATH))}a(_6,"installAllRootModules");async function d6(e){await qu(`npm uninstall ${e}`,xu.get(Hu.CONFIG_PARAMS.ROOTPATH))}a(d6,"uninstallRootModule");async function f6(){await tf(),await qu(`npm link ${Hu.PACKAGE_ROOT}`,xu.get(Hu.CONFIG_PARAMS.ROOTPATH))}a(f6,"linkHarperdb");async function qu(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await YU(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
12
- `,""))}return n&&!n.includes("Debugger listening")&&Ra.error("Error running NPM command:",e,n),Ra.trace(r,n),r?.replace(`
13
- `,"")}a(qu,"runCommand");async function E6(e){Ra.info(`starting installModules for request: ${e}`);let t=zU(e);if(t)throw Ta(t,t.message,ga.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?l6:KU;await tf(),await QU(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 _=ef.join(BT,u),l,d=null;try{let{stdout:f,stderr:E}=await YU(s,{cwd:_});l=f?f.replace(`
10
+ `,"")}a(BD,"runCommand");async function m3(){try{await W4.access(mS)}catch{return!1}let e=await BD(`${mS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Q4.eq(t,E3)}a(m3,"checkNATSServerInstalled");async function RS(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await PD.getClusterUser();if(so(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Un.trace("create nats connection called");let i=await s3({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Un.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Un.error("Error with Nats client connection, connection closed",o),HD()}),i}a(RS,"createConnection");function HD(){_r=void 0,to=void 0,ro=void 0,no=void 0}a(HD,"clearClientCache");async function p3(){_r&&(await _r.drain(),_r=void 0,to=void 0,ro=void 0,no=void 0)}a(p3,"closeConnection");var _r,no;async function hd(){return no||(no=RS(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),_r=await no),_r||no}a(hd,"getConnection");async function _u(){if(to)return to;so(_r)&&await hd();let{domain:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(so(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return to=await _r.jetstreamManager({domain:e,timeout:6e4}),to}a(_u,"getJetStreamManager");async function xD(){if(ro)return ro;so(_r)&&await hd();let{domain:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(so(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ro=_r.jetstream({domain:e,timeout:6e4}),ro}a(xD,"getJetStream");async function Pn(){let e=_r||await hd(),t=to||await _u(),r=ro||await xD();return{connection:e,jsm:t,js:r}}a(Pn,"getNATSReferences");async function S3(e){let t=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await PD.getClusterUser(),s=await RS(t,r,n),i=gS(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=vD.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 fd.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(S3,"getServerList");async function AS(e,t){let{jsm:r}=await Pn(),n=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:i3.File,retention:o3.Limits,subjects:t,discard:a3.Old,max_msgs:s,max_bytes:i,max_age:n})}a(AS,"createLocalStream");async function GD(){let{jsm:e}=await Pn(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(GD,"listStreams");async function T3(e){let{jsm:t}=await Pn();await t.streams.delete(e)}a(T3,"deleteLocalStream");async function g3(e){let{connection:t}=await Pn(),r=[],n=gS(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(vD.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(g3,"listRemoteStreams");async function R3(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Pn(),i=DD(),o={durable_name:i,ack_policy:SS.Explicit};t&&(o.deliver_policy=TS.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=pS(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(qt.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(R3,"viewStream");async function*A3(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Pn(),i=DD(),o={durable_name:i,ack_policy:SS.Explicit};t&&(o.deliver_policy=TS.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=pS(_.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(qt.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(A3,"viewStreamIterator");async function O3(e,t,r,n){Un.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=FD(n,r);let{js:s}=await Pn(),i=await md(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:UD.encode(n);try{Un.trace(`publishToStream publishing to subject: ${o}`),d3(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 kD(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Un.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await AS(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(O3,"publishToStream");function FD(e,t){t===void 0&&(t=u3());let r=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(qt.MSG_HEADERS.ORIGIN)&&r&&t.append(qt.MSG_HEADERS.ORIGIN,r),t}a(FD,"addNatsMsgHeader");function du(e){e=e.toLowerCase();let t=lu.join(Mt.get(Ce.CONFIG_PARAMS.ROOTPATH),f3);if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return so(hS)&&(hS={port:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+qt.SERVER_SUFFIX.HUB,config_file:qt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:lu.join(t,qt.PID_FILES.HUB),hdb_nats_path:t}),hS;if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return so(ES)&&(ES={port:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+qt.SERVER_SUFFIX.LEAF,config_file:qt.NATS_CONFIG_FILES.LEAF_SERVER,domain:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+qt.SERVER_SUFFIX.LEAF,pid_file_path:lu.join(t,qt.PID_FILES.LEAF),hdb_nats_path:t}),ES;Un.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(du,"getServerConfig");async function qD(e,t,r,n){try{await e.consumers.add(t,{ack_policy:SS.Explicit,durable_name:r,deliver_policy:TS.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(qD,"createConsumer");async function b3(e,t,r){await e.consumers.delete(t,r)}a(b3,"removeConsumer");function y3(e){return e.split(".")[1]}a(y3,"extractServerName");async function N3(e,t,r=6e4,n=gS()){if(!fd.isObject(t))throw new Error("data param must be an object");let s=UD.encode(t),{connection:i}=await Pn(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return pS(c.data)}a(N3,"request");function OS(e){return new Promise(async(t,r)=>{let n=X4(mS,["--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(OS,"reloadNATS");async function I3(){let{pid_file_path:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await OS(e)}a(I3,"reloadNATSHub");async function w3(){let{pid_file_path:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await OS(e)}a(w3,"reloadNATSLeaf");function C3(e,t,r){let n;switch(e.code){case CD.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case CD.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(C3,"requestErrorHandler");async function D3(e,t){let r=t+qt.SERVER_SUFFIX.LEAF,{connection:n}=await Pn(),{jsm:s}=await x3(r),{schema:i,table:o}=e,c=Ed.createNatsTableStreamName(i,o),u=e.start_time?e.start_time:new Date(Date.now()).toISOString();await kD(async()=>{if(e.subscribe===!0)await qD(s,c,n.info.server_name,u);else try{await b3(s,c,n.info.server_name)}catch(_){Un.trace(_)}})}a(D3,"updateRemoteConsumer");async function L3(e,t,r,n){let s=Ed.createNatsTableStreamName(e,t),i=r+qt.SERVER_SUFFIX.LEAF,o={type:Ce.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!MD&&r3()<Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=fS();await c(o)}await e3(o),n==="stop"&&await fd.async_set_timeout(1e3)}a(L3,"updateConsumerIterator");function kD(e){return Z4.writeTransaction(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(kD,"exclusiveLock");async function VD(e,t){let r=Ed.createNatsTableStreamName(e,t),n=await md(),s=v3(e,t,n);await AS(r,[s])}a(VD,"createLocalTableStream");async function M3(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await VD(n,s)}}a(M3,"createTableStreams");async function $D(e,t){if(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Ed.createNatsTableStreamName(e,t),{jsm:n}=await Pn();await n.streams.purge(r)}catch(r){if(r.message==="stream not found")Un.warn(r);else throw r}}a($D,"purgeTableStream");async function U3(e,t){if(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await $D(e,t[r])}a(U3,"purgeSchemaTableStreams");async function P3(e){return(await _u()).streams.info(e)}a(P3,"getStreamInfo");function v3(e,t,r){return`${qt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(v3,"createSubjectName");async function md(){if(uu)return uu;if(uu=(await _u())?.nc?.info?.server_name,uu===void 0)throw new Error("Unable to get jetstream manager server name");return uu}a(md,"getJsmServerName");async function B3(){let e=await _u(),t=await md(),r=await GD();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=H3(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Un.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l,await e.streams.update(s.name,s)}}a(B3,"updateLocalStreams");function H3(e){let{config:t}=e,r=!1,n=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Mt.get(Ce.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(H3,"updateStreamLimits");async function x3(e){let t,r;try{t=await _r.jetstream({domain:e,timeout:6e4}),r=await _r.jetstreamManager({domain:e,timeout:6e4})}catch(n){throw Un.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(x3,"connectToRemoteJS")});var gd=g((V_e,zD)=>{"use strict";var sa=S_(),ia=eD(),G3=K(),F3=require("uuid").v4,k_e=require("clone"),Sd=Rs(),oa=U(),q3=require("util"),ii=In(),{handleHDBError:dr,hdb_errors:k3}=ne(),{HDB_ERROR_MSGS:pd,HTTP_STATUS_CODES:fr}=k3,{SchemaEventMsg:Td}=wn(),KD=Et(),{getDatabases:V3}=(Ae(),se(Fe)),{transformReq:aa}=Q();zD.exports={createSchema:$3,createSchemaStructure:WD,createTable:Y3,createTableStructure:QD,createAttribute:J3,dropSchema:K3,dropTable:W3,dropAttribute:Q3,getBackup:j3};async function $3(e){let t=await WD(e);return Sd.signalSchemaChange(new Td(process.pid,e.operation,e.schema)),t}a($3,"createSchema");async function WD(e){let t=sa.schema_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);if(aa(e),!await ia.checkSchemaExists(e.schema))throw dr(new Error,pd.SCHEMA_EXISTS_ERR(e.schema),fr.BAD_REQUEST,oa.LOG_LEVELS.ERROR,pd.SCHEMA_EXISTS_ERR(e.schema),!0);return await ii.createSchema(e),`database '${e.schema}' successfully created`}a(WD,"createSchemaStructure");async function Y3(e){return aa(e),e.hash_attribute=e.primary_key??e.hash_attribute,await QD(e)}a(Y3,"createTable");async function QD(e){let t=sa.create_table_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);if(sa.validateTableResidence(e.residence),!await ia.checkSchemaTableExists(e.schema,e.table))throw dr(new Error,pd.TABLE_EXISTS_ERR(e.schema,e.table),fr.BAD_REQUEST,oa.LOG_LEVELS.ERROR,pd.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:F3(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ii.createTable(n,e);else throw dr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",fr.BAD_REQUEST);else await ii.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(QD,"createTableStructure");async function K3(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=sa.schema_object(e),n=t??r;if(n)throw dr(n,n.message,fr.BAD_REQUEST,void 0,void 0,!0);aa(e);let s=await ia.checkSchemaExists(e.schema);if(s)throw dr(new Error,s,fr.NOT_FOUND,oa.LOG_LEVELS.ERROR,s,!0);let i=await ia.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ii.dropSchema(e),Sd.signalSchemaChange(new Td(process.pid,e.operation,e.schema)),await KD.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(K3,"dropSchema");async function W3(e){let t=sa.table_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);aa(e);let r=await ia.checkSchemaTableExists(e.schema,e.table);if(r)throw dr(new Error,r,fr.NOT_FOUND,oa.LOG_LEVELS.ERROR,r,!0);return await ii.dropTable(e),await KD.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(W3,"dropTable");async function Q3(e){let t=sa.attribute_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);aa(e);let r=await ia.checkSchemaTableExists(e.schema,e.table);if(r)throw dr(new Error,r,fr.NOT_FOUND,oa.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw dr(new Error,"You cannot drop a hash attribute",fr.BAD_REQUEST,void 0,void 0,!0);if(oa.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw dr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,fr.BAD_REQUEST,void 0,void 0,!0);try{return await ii.dropAttribute(e),z3(e),Sd.signalSchemaChange(new Td(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw G3.error(`Got an error deleting attribute ${q3.inspect(e)}.`),n}}a(Q3,"dropAttribute");function z3(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(z3,"dropAttributeFromGlobal");async function J3(e){aa(e);let t=V3()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw dr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,fr.BAD_REQUEST,void 0,void 0,!0);return await ii.createAttribute(e),Sd.signalSchemaChange(new Td(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(J3,"createAttribute");function j3(e){return ii.getBackup(e)}a(j3,"getBackup")});var jD=g((Y_e,JD)=>{"use strict";var{OPERATIONS_ENUM:X3}=U(),bS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=X3.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};JD.exports=bS});var yS=g((Q_e,rL)=>{"use strict";var Z3=In(),W_e=jD(),Rd=Q(),Ad=U(),ej=re(),{handleHDBError:XD,hdb_errors:tj}=ne(),{HDB_ERROR_MSGS:ZD,HTTP_STATUS_CODES:eL}=tj,rj=Object.values(Ad.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),tL="To use this operation audit log must be enabled in harperdb-config.yaml";rL.exports=nj;async function nj(e){if(Rd.isEmpty(e.schema))throw new Error(ZD.SCHEMA_REQUIRED_ERR);if(Rd.isEmpty(e.table))throw new Error(ZD.TABLE_REQUIRED_ERR);if(!ej.get(Ad.CONFIG_PARAMS.LOGGING_AUDITLOG))throw XD(new Error,tL,eL.BAD_REQUEST,Ad.LOG_LEVELS.ERROR,tL,!0);let t=Rd.checkSchemaTableExist(e.schema,e.table);if(t)throw XD(new Error,t,eL.NOT_FOUND,Ad.LOG_LEVELS.ERROR,t,!0);if(!Rd.isEmpty(e.search_type)&&rj.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await Z3.readAuditLog(e)}a(nj,"readAuditLog")});var sL=g((J_e,nL)=>{"use strict";var{OPERATIONS_ENUM:sj}=U(),NS=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=sj.GET_BACKUP,this.schema=t,this.table=r}};nL.exports=NS});var aL=g((ede,oL)=>{"use strict";var ij=In(),X_e=sL(),IS=Q(),oj=U(),Z_e=re(),{handleHDBError:aj,hdb_errors:cj}=ne(),{HDB_ERROR_MSGS:iL,HTTP_STATUS_CODES:uj}=cj;oL.exports=lj;async function lj(e){if(IS.isEmpty(e.schema))throw new Error(iL.SCHEMA_REQUIRED_ERR);if(IS.isEmpty(e.table))throw new Error(iL.TABLE_REQUIRED_ERR);let t=IS.checkSchemaTableExist(e.schema,e.table);if(t)throw aj(new Error,t,uj.NOT_FOUND,oj.LOG_LEVELS.ERROR,t,!0);return await ij.getBackup(read_audit_log_object)}a(lj,"getBackup")});var fL=g((rde,dL)=>{var oi=require("validate.js"),uL=Xe(),ca=U(),{handleHDBError:_j,hdb_errors:dj}=ne(),{HDB_ERROR_MSGS:ut,HTTP_STATUS_CODES:fj}=dj,wS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Ej={STRUCTURE_USER:"structure_user"},cL=Object.values(ca.ROLE_TYPES_ENUM),hj="attribute_permissions",mj="attribute_name",{PERMS_CRUD_ENUM:ua}=ca,pj=[hj,...Object.values(ua)],lL=[ua.READ,ua.INSERT,ua.UPDATE],Sj=[mj,...lL];function Tj(e){let t=wS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,_L(e,t)}a(Tj,"addRoleValidation");function gj(e){let t=wS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,_L(e,t)}a(gj,"alterRoleValidation");function Rj(e){let t=wS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,uL.validateObject(e,t)}a(Rj,"dropRoleValidation");var Aj=["operation","role","id","permission","hdb_user","hdb_auth_header"];function _L(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Aj.includes(n[o])||s.push(n[o]);s.length>0&&ht(ut.INVALID_ROLE_JSON_KEYS(s),r);let i=uL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{ht(o,r)}),e.permission){let o=Oj(e);o&&ht(o,r),cL.forEach(c=>{e.permission[c]&&!oi.isBoolean(e.permission[c])&&ht(ut.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(cL.indexOf(o)<0){if(o===Ej.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]||ht(ut.SCHEMA_NOT_FOUND(d),r)}continue}ht(ut.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){ht(ut.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]){ht(ut.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{pj.includes(l)||ht(ut.INVALID_PERM_KEY(l),r,o,u)}),Object.values(ua).forEach(l=>{oi.isDefined(_[l])?oi.isBoolean(_[l])||ht(ut.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):ht(ut.TABLE_PERM_MISSING(l),r,o,u)}),oi.isDefined(_.attribute_permissions)){if(!oi.isArray(_.attribute_permissions)){ht(ut.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{ht(ut.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=>{!Sj.includes(p)&&p!==ua.DELETE&&ht(ut.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!oi.isDefined(E.attribute_name)){ht(ut.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){ht(ut.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}lL.forEach(p=>{oi.isDefined(E[p])?oi.isBoolean(E[p])||ht(ut.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):ht(ut.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}`;ht(ut.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return bj(r)}a(_L,"customValidate");dL.exports={addRoleValidation:Tj,alterRoleValidation:gj,dropRoleValidation:Rj};function Oj(e){let{operation:t,permission:r}=e;if(t===ca.OPERATIONS_ENUM.ADD_ROLE||t===ca.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 ut.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?ca.ROLE_TYPES_ENUM.SUPER_USER:ca.ROLE_TYPES_ENUM.CLUSTER_USER;return ut.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(Oj,"validateNoSUPerms");function bj(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:ut.ROLE_PERMS_ERROR,...e};return _j(new Error,n,fj.BAD_REQUEST)}else return null}a(bj,"generateRolePermResponse");function ht(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(ht,"addPermError")});var PS=g((sde,pL)=>{"use strict";var EL=nn(),hL=Ur(),yj=Yi(),DS=fL(),LS=Rs(),Nj=require("uuid").v4,Ij=require("util"),Od=U(),wj=Q(),MS=hL.searchByValue,Cj=hL.searchByHash,Dj=Ij.promisify(yj.delete),Lj=Xn(),Mj=Zo(),{hdb_errors:Uj,handleHDBError:io}=ne(),{HDB_ERROR_MSGS:mL,HTTP_STATUS_CODES:fu}=Uj,{UserEventMsg:US}=wn();pL.exports={addRole:Pj,alterRole:vj,dropRole:Bj,listRoles:Hj};function CS(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(CS,"scrubRoleDetails");async function Pj(e){let t=DS.addRoleValidation(e);if(t)throw t;e=CS(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 MS(r)||[])}catch(i){throw io(i)}if(n&&n.length>0)throw io(new Error,mL.ROLE_ALREADY_EXISTS(e.role),fu.CONFLICT,void 0,void 0,!0);e.id||(e.id=Nj());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await EL.insert(s),LS.signalUserChange(new US(process.pid)),e=CS(e),e}a(Pj,"addRole");async function vj(e){let t=DS.alterRoleValidation(e);if(t)throw t;e=CS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await EL.update(r)}catch(s){throw io(s)}if(n&&n?.message==="updated 0 of 1 records")throw io(new Error,"Invalid role id",fu.BAD_REQUEST,void 0,void 0,!0);return await LS.signalUserChange(new US(process.pid)),e}a(vj,"alterRole");async function Bj(e){let t=DS.dropRoleValidation(e);if(t)throw io(new Error,t,fu.BAD_REQUEST,void 0,void 0,!0);let r=new Mj(Od.SYSTEM_SCHEMA_NAME,Od.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Cj(r));if(n.length===0)throw io(new Error,mL.ROLE_NOT_FOUND,fu.NOT_FOUND,void 0,void 0,!0);let s=new Lj(Od.SYSTEM_SCHEMA_NAME,Od.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await MS(s)),o=!1;if(wj.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw io(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,fu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Dj(c),LS.signalUserChange(new US(process.pid)),`${n[0].role} successfully deleted`}a(Bj,"dropRole");async function Hj(){return MS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Hj,"listRoles")});var RL=g((ode,gL)=>{"use strict";var xj=re(),ai=require("joi"),Gj=Xe(),SL=require("moment"),Fj=require("fs-extra"),vS=require("path"),qj=require("lodash"),Eu=U(),{LOG_LEVELS:oo}=U(),kj="YYYY-MM-DD hh:mm:ss",Vj=vS.resolve(__dirname,"../logs");gL.exports=function(e){return Gj.validateBySchema(e,$j)};var $j=ai.object({from:ai.custom(TL),until:ai.custom(TL),level:ai.valid(oo.NOTIFY,oo.FATAL,oo.ERROR,oo.WARN,oo.INFO,oo.DEBUG,oo.TRACE),order:ai.valid("asc","desc"),limit:ai.number().min(1),start:ai.number().min(0),log_name:ai.custom(Yj)});function TL(e,t){if(SL(e,SL.ISO_8601).format(kj)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(TL,"validateDatetime");function Yj(e,t){if(qj.invert(Eu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=xj.get(Eu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?Eu.LOG_NAMES.HDB:e,i=s===Eu.LOG_NAMES.INSTALL?vS.join(Vj,Eu.LOG_NAMES.INSTALL):vS.join(n,s);return Fj.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(Yj,"validateReadLogPath")});var HS=g((cde,OL)=>{"use strict";var bd=U(),Kj=K(),Wj=re(),Qj=RL(),BS=require("path"),AL=require("fs-extra"),{once:zj}=require("events"),{handleHDBError:Jj,hdb_errors:jj}=ne(),{PACKAGE_ROOT:Xj}=U(),Zj=BS.join(Xj,"logs"),eX=1e3,tX=200;OL.exports=rX;async function rX(e){let t=Qj(e);if(t)throw Jj(t,t.message,jj.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Wj.get(bd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?bd.LOG_NAMES.HDB:e.log_name,s=n===bd.LOG_NAMES.INSTALL?BS.join(Zj,bd.LOG_NAMES.INSTALL):BS.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?eX: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(AL.statSync(s).size-(h+5)*tX,0));let S=AL.createReadStream(s,{start:p});S.on("error",P=>{Kj.error(P)});let T=0,b=[],R="",L;S.on("data",P=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;P=R+P;let B=0,J;for(;(J=k.exec(P))&&!S.destroyed;){L&&(L.message=P.slice(B,J.index),H(L));let[z,j,Te]=J,ce=Te.split("] ["),de=ce[0],Le=ce[1];ce.splice(0,2),L={timestamp:j,thread:de,level:Le,tags:ce,message:""},B=J.index+z.length}R=P.slice(B)}),S.on("end",P=>{S.destroyed||L&&(L.message=R.trim(),H(L))}),S.resume();function H(P){let k,B,J;switch(!0){case(i&&c&&_):k=new Date(P.timestamp),B=new Date(u),J=new Date(l),P.level===o&&k>=B&&k<=J&&T<E?T++:P.level===o&&k>=B&&k<=J&&(ci(P,f,b),T++,T===h&&S.destroy());break;case(i&&c):k=new Date(P.timestamp),B=new Date(u),P.level===o&&k>=B&&T<E?T++:P.level===o&&k>=B&&(ci(P,f,b),T++,T===h&&S.destroy());break;case(i&&_):k=new Date(P.timestamp),J=new Date(l),P.level===o&&k<=J&&T<E?T++:P.level===o&&k<=J&&(ci(P,f,b),T++,T===h&&S.destroy());break;case(c&&_):k=new Date(P.timestamp),B=new Date(u),J=new Date(l),k>=B&&k<=J&&T<E?T++:k>=B&&k<=J&&(ci(P,f,b),T++,T===h&&S.destroy());break;case i:P.level===o&&T<E?T++:P.level===o&&(ci(P,f,b),T++,T===h&&S.destroy());break;case c:k=new Date(P.timestamp),B=new Date(u),k>=B&&T<E?T++:k>=B&&T>=E&&(ci(P,f,b),T++,T===h&&S.destroy());break;case _:k=new Date(P.timestamp),J=new Date(l),k<=J&&T<E?T++:k<=J&&T>=E&&(ci(P,f,b),T++,T===h&&S.destroy());break;default:T<E?T++:(ci(P,f,b),T++,T===h&&S.destroy())}}return a(H,"onLogMessage"),await zj(S,"close"),b}a(rX,"readLog");function ci(e,t,r){t==="desc"?nX(e,r):t==="asc"?sX(e,r):r.push(e)}a(ci,"pushLineToResult");function nX(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(nX,"insertDescending");function sX(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(sX,"insertAscending")});var yd=g((fde,IL)=>{"use strict";var xS=require("joi"),{string:hu,boolean:bL,date:iX}=xS.types(),oX=Xe(),{validateSchemaExists:lde,validateTableExists:_de,validateSchemaName:dde}=Qn(),aX=U(),cX=rt(),yL=re();yL.initSync();var uX=hu.invalid(yL.get(aX.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(),NL={operation:hu.valid("add_node","update_node","set_node_replication"),node_name:uX,subscriptions:xS.array().items({table:hu.optional(),schema:hu.optional(),database:hu.optional(),subscribe:bL.required(),publish:bL.required().custom(_X),start_time:iX.iso()}).min(1).required()};function lX(e){return oX.validateBySchema(e,xS.object(NL))}a(lX,"addUpdateNodeValidator");function _X(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(_X,"checkForFalsy");IL.exports={addUpdateNodeValidator:lX,validation_schema:NL}});var CL=g((hde,wL)=>{var dX=Xe(),fX={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};wL.exports=function(e){return dX.validateObject(e,fX)}});var FS=g((mde,DL)=>{"use strict";var EX=U().OPERATIONS_ENUM,GS=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=EX.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};DL.exports=GS});var ML=g((Sde,LL)=>{"use strict";var hX={OPERATION:"operation",REFRESH:"refresh"},qS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},kS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};LL.exports={JWTTokens:qS,TOKEN_TYPE_ENUM:hX,JWTRSAKeys:kS}});var Su=g((gde,BL)=>{"use strict";var pu=require("jsonwebtoken"),VS=require("fs-extra"),$S=Q(),on=U(),{handleHDBError:Er,hdb_errors:mX}=ne(),{HTTP_STATUS_CODES:hr,AUTHENTICATION_ERROR_MSGS:mr}=mX,mu=K(),UL=P_(),WS=vr(),pX=nn().update,SX=FS(),TX=Rs(),{UserEventMsg:gX}=wn(),ui=re();ui.initSync();var YS=require("path"),{JWTTokens:RX,JWTRSAKeys:AX,TOKEN_TYPE_ENUM:Nd}=ML(),OX=ui.get(on.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ui.get(on.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",bX=ui.get(on.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ui.get(on.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Id="RS256",KS;BL.exports={createTokens:yX,validateOperationToken:IX,refreshOperationToken:NX,validateRefreshToken:vL};async function yX(e){if($S.isEmpty(e)||typeof e!="object")throw Er(new Error,mr.INVALID_AUTH_OBJECT,hr.BAD_REQUEST,void 0,void 0,!0);if($S.isEmpty(e.username))throw Er(new Error,mr.USERNAME_REQUIRED,hr.BAD_REQUEST,void 0,void 0,!0);if($S.isEmpty(e.password))throw Er(new Error,mr.PASSWORD_REQUIRED,hr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await WS.findAndValidateUser(e.username,e.password),!t)throw Er(new Error,mr.INVALID_CREDENTIALS,hr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw mu.error(f),Er(new Error,mr.INVALID_CREDENTIALS,hr.UNAUTHORIZED,void 0,void 0,!0)}let r=await wd(),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 PL(i,r.private_key,r.passphrase),c=await pu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:bX,algorithm:Id,subject:Nd.REFRESH}),u=UL.hash(c),_=new SX(on.SYSTEM_SCHEMA_NAME,on.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await pX(_)}catch(f){mu.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw Er(new Error,mr.REFRESH_TOKEN_SAVE_FAILED,hr.INTERNAL_SERVER_ERROR);return TX.signalUserChange(new gX(process.pid)),new RX(o,c)}a(yX,"createTokens");async function PL(e,t,r){return await pu.sign(e,{key:t,passphrase:r},{expiresIn:OX,algorithm:Id,subject:Nd.OPERATION})}a(PL,"signOperationToken");async function wd(){if(KS===void 0)try{let e=YS.join(ui.getHdbBasePath(),on.LICENSE_KEY_DIR_NAME,on.JWT_ENUM.JWT_PASSPHRASE_NAME),t=YS.join(ui.getHdbBasePath(),on.LICENSE_KEY_DIR_NAME,on.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=YS.join(ui.getHdbBasePath(),on.LICENSE_KEY_DIR_NAME,on.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await VS.readFile(e)).toString(),s=(await VS.readFile(t)).toString(),i=(await VS.readFile(r)).toString();KS=new AX(i,s,n)}catch(e){throw mu.error(e),Er(new Error,mr.NO_ENCRYPTION_KEYS,hr.INTERNAL_SERVER_ERROR)}return KS}a(wd,"getJWTRSAKeys");async function NX(e){if(!e)throw Er(new Error,mr.INVALID_BODY,hr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Er(new Error,mr.REFRESH_TOKEN_REQUIRED,hr.BAD_REQUEST,void 0,void 0,!0);await vL(e.refresh_token);let t=await wd(),r=await pu.decode(e.refresh_token);return{operation_token:await PL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(NX,"refreshOperationToken");async function IX(e){try{let t=await wd(),r=await pu.verify(e,t.public_key,{algorithms:Id,subject:Nd.OPERATION});return await WS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw mu.warn(t),t.name&&t.name==="TokenExpiredError"?Er(new Error,mr.TOKEN_EXPIRED,hr.FORBIDDEN):Er(new Error,mr.INVALID_TOKEN,hr.UNAUTHORIZED)}}a(IX,"validateOperationToken");async function vL(e){let t;try{let r=await wd(),n=await pu.verify(e,r.public_key,{algorithms:Id,subject:Nd.REFRESH});t=await WS.findAndValidateUser(n.username,void 0,!1)}catch(r){throw mu.warn(r),r.name&&r.name==="TokenExpiredError"?Er(new Error,mr.TOKEN_EXPIRED,hr.FORBIDDEN):Er(new Error,mr.INVALID_TOKEN,hr.UNAUTHORIZED)}if(!UL.validate(t.refresh_token,e))throw Er(new Error,mr.INVALID_TOKEN,hr.UNAUTHORIZED);return t}a(vL,"validateRefreshToken")});var QS=g((Ode,GL)=>{"use strict";var wX=CL(),la=require("passport"),CX=require("passport-local").Strategy,DX=require("passport-http").BasicStrategy,LX=require("util"),MX=vr(),xL=LX.callbackify(MX.findAndValidateUser),Ade=Nr(),UX=U(),HL=Su();la.use(new CX(function(e,t,r){xL(e,t,r)}));la.use(new DX(function(e,t,r){xL(e,t,r)}));la.serializeUser(function(e,t){t(null,e)});la.deserializeUser(function(e,t){t(null,e)});function PX(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":la.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===UX.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?HL.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):HL.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:la.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(PX,"authorize");function vX(e,t){let r=wX(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(vX,"checkPermissions");GL.exports={authorize:PX,checkPermissions:vX}});var _a=g((yde,FL)=>{"use strict";var zS=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},JS=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};FL.exports={Node:zS,NodeSubscription:JS}});var kL=g((Ide,qL)=>{"use strict";var BX=U().OPERATIONS_ENUM,jS=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=BX.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};qL.exports=jS});var Tu=g((Cde,VL)=>{"use strict";var XS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},ZS=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)}};VL.exports={RemotePayloadObject:XS,RemotePayloadSubscription:ZS}});var YL=g((Lde,$L)=>{"use strict";var eT=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}};$L.exports=eT});var QL=g((Bde,WL)=>{"use strict";var HX=YL(),Ude=_t(),KL=Ye(),xX=K(),{getSchemaPath:Pde,getTransactionAuditStorePath:vde}=Qe(),{getDatabases:GX}=(Ae(),se(Fe));WL.exports=FX;async function FX(e){let t=new HX;try{let r=GX()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await KL.environmentDataSize(schema_path,e.name),o=await KL.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){xX.warn(`unable to stat table dbi due to ${r}`)}return t}a(FX,"lmdbGetTableSize")});var JL=g((xde,zL)=>{"use strict";var tT=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}};zL.exports=tT});var da=g((Vde,tM)=>{"use strict";var qX=require("fs-extra"),kX=require("path"),Jt=require("systeminformation"),li=K(),jL=Et(),Fde=rt(),Dd=U(),VX=QL(),eM=Fi(),{getThreadInfo:XL}=et(),_T=re();_T.initSync();var $X=JL(),{openEnvironment:qde}=Ye(),{getSchemaPath:kde}=Qe(),{database:YX}=(Ae(),se(Fe)),Cd;tM.exports={getHDBProcessInfo:iT,getNetworkInfo:aT,getDiskInfo:oT,getMemoryInfo:sT,getCPUInfo:nT,getTimeInfo:rT,getSystemInformation:cT,systemInformation:KX,getTableSize:uT,getMetrics:lT};function rT(){return Jt.time()}a(rT,"getTimeInfo");async function nT(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Jt.cpu();l.cpu_speed=await Jt.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,...b}=await Jt.currentLoad();return b.cpus=[],T.forEach(R=>{let{raw_load:L,raw_load_idle:H,raw_load_irq:P,raw_load_nice:k,raw_load_system:B,raw_load_user:J,...z}=R;b.cpus.push(z)}),l.current_load=b,l}catch(e){return li.error(`error in getCPUInfo: ${e}`),{}}}a(nT,"getCPUInfo");async function sT(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Jt.mem();return Object.assign(s,process.memoryUsage())}catch(e){return li.error(`error in getMemoryInfo: ${e}`),{}}}a(sT,"getMemoryInfo");async function iT(){let e={core:[],clustering:[]};try{let t=await Jt.processes(),r;try{r=Number.parseInt(await qX.readFile(kX.join(_T.get(Dd.CONFIG_PARAMS.ROOTPATH),Dd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Dd.NODE_ERROR_CODES.ENOENT)li.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 li.error(`error in getHDBProcessInfo: ${t}`),e}}a(iT,"getHDBProcessInfo");async function oT(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Jt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Jt.fsStats();return e.read_write=_,e.size=await Jt.fsSize(),e}catch(t){return li.error(`error in getDiskInfo: ${t}`),e}}a(oT,"getDiskInfo");async function aT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Jt.networkInterfaceDefault(),e.latency=await Jt.inetChecksite("google.com"),(await Jt.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 Jt.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return li.error(`error in getNetworkInfo: ${t}`),e}}a(aT,"getNetworkInfo");async function cT(){if(Cd!==void 0)return Cd;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Jt.osInfo();e=c;let u=await Jt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,Cd=e,Cd}catch(t){return li.error(`error in getSystemInformation: ${t}`),e}}a(cT,"getSystemInformation");async function uT(){let e=[],t=await eM.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await VX(n));return e}a(uT,"getTableSize");async function lT(){let e=await eM.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=YX({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){li.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(lT,"getMetrics");async function ZL(){if(_T.get(Dd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await jL.getNATSReferences(),t=await jL.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(ZL,"getNatsStreamInfo");async function KX(e){let t=new $X;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await cT(),t.time=rT(),t.cpu=await nT(),t.memory=await sT(),t.disk=await oT(),t.network=await aT(),t.harperdb_processes=await iT(),t.table_size=await uT(),t.metrics=await lT(),t.threads=await XL(),t.replication=await ZL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await cT();break;case"time":t.time=rT();break;case"cpu":t.cpu=await nT();break;case"memory":t.memory=await sT();break;case"disk":t.disk=await oT();break;case"network":t.network=await aT();break;case"harperdb_processes":t.harperdb_processes=await iT();break;case"table_size":t.table_size=await uT();break;case"database_metrics":case"metrics":t.metrics=await lT();break;case"threads":t.threads=await XL();break;case"replication":t.replication=await ZL();break;default:break}return t}a(KX,"systemInformation")});var Md=g((Yde,rM)=>{"use strict";rM.exports={version:WX,printVersion:QX};var Ld=eu();function WX(){if(Ld)return Ld.version}a(WX,"version");function QX(){Ld&&console.log(`HarperDB Version ${Ld.version}`)}a(QX,"printVersion")});var Ns=g((zde,oM)=>{"use strict";var zX=nn(),dT=Q(),JX=require("util"),ao=U(),nM=re();nM.initSync();var jX=QS(),sM=Ur(),{Node:Wde,NodeSubscription:Qde}=_a(),XX=Zo(),ZX=kL(),{RemotePayloadObject:eZ,RemotePayloadSubscription:tZ}=Tu(),{handleHDBError:rZ,hdb_errors:nZ}=ne(),{HTTP_STATUS_CODES:sZ,HDB_ERROR_MSGS:iZ}=nZ,oZ=Xn(),aZ=da(),cZ=Md(),{getDatabases:uZ}=(Ae(),se(Fe)),lZ=JX.promisify(jX.authorize),_Z=sM.searchByHash,dZ=sM.searchByValue;oM.exports={authHeaderToUser:fZ,isEmpty:EZ,getNodeRecord:hZ,upsertNodeRecord:mZ,buildNodePayloads:pZ,checkClusteringEnabled:SZ,getAllNodeRecords:TZ,getSystemInfo:gZ,reverseSubscription:iM};async function fZ(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await lZ(t,null),e}a(fZ,"authHeaderToUser");function EZ(e){return e==null}a(EZ,"isEmpty");async function hZ(e){let t=new XX(ao.SYSTEM_SCHEMA_NAME,ao.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return _Z(t)}a(hZ,"getNodeRecord");async function mZ(e){let t=new ZX(ao.SYSTEM_SCHEMA_NAME,ao.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return zX.upsert(t)}a(mZ,"upsertNodeRecord");function iM(e){if(dT.isEmpty(e.subscribe)||dT.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(iM,"reverseSubscription");function pZ(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=dT.getTableHashAttribute(u,_),{subscribe:d,publish:f}=iM(c),E=uZ()[u]?.[_],h=new tZ(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new eZ(r,t,s,n)}a(pZ,"buildNodePayloads");function SZ(){if(!nM.get(ao.CONFIG_PARAMS.CLUSTERING_ENABLED))throw rZ(new Error,iZ.CLUSTERING_NOT_ENABLED,sZ.BAD_REQUEST,void 0,void 0,!0)}a(SZ,"checkClusteringEnabled");async function TZ(){let e=new oZ(ao.SYSTEM_SCHEMA_NAME,ao.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await dZ(e))}a(TZ,"getAllNodeRecords");async function gZ(){let e=await aZ.getSystemInformation();return{hdb_version:cZ.version(),node_version:e.node_version,platform:e.platform}}a(gZ,"getSystemInfo")});var fT=g((jde,EM)=>{"use strict";var Ud=Et(),aM=Q(),cM=rt(),uM=U(),Pd=K(),lM=gd(),RZ=Ip(),{RemotePayloadObject:AZ}=Tu(),{handleHDBError:_M,hdb_errors:OZ}=ne(),{HTTP_STATUS_CODES:dM}=OZ,{NodeSubscription:fM}=_a();EM.exports=bZ;async function bZ(e,t){let r;try{r=await Ud.request(`${t}.${cM.REQUEST_SUFFIX}`,new AZ(uM.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Pd.trace("Response from remote describe all request:",r)}catch(o){Pd.error(`addNode received error from describe all request to remote node: ${o}`);let c=Ud.requestErrorHandler(o,"add_node",t);throw _M(new Error,c,dM.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===cM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw _M(new Error,o,dM.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===uM.SYSTEM_SCHEMA_NAME){await Ud.createLocalTableStream(u,c);let h=new fM(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=aM.doesSchemaExist(u),l=n[u]!==void 0,d=c?aM.doesTableExist(u,c):!0,f=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){s.push(o);continue}if(!_&&l&&(Pd.trace(`addNode creating schema: ${u}`),await lM.createSchema({operation:"create_schema",schema:u})),!d&&f){Pd.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new RZ(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await lM.createTable(h)}await Ud.createLocalTableStream(u,c);let E=new fM(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(bZ,"reviewSubscriptions")});var xd=g((Zde,pM)=>{"use strict";var{handleHDBError:vd,hdb_errors:yZ}=ne(),{HTTP_STATUS_CODES:Bd}=yZ,{addUpdateNodeValidator:NZ}=yd(),Hd=K(),mM=U(),hM=rt(),IZ=Q(),gu=Et(),Ru=Ns(),wZ=re(),CZ=fT(),{Node:DZ,NodeSubscription:LZ}=_a(),{broadcast:MZ}=et(),UZ="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",PZ="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",vZ=wZ.get(mM.CONFIG_PARAMS.CLUSTERING_NODENAME);pM.exports=BZ;async function BZ(e,t=!1){Hd.trace("addNode called with:",e),Ru.checkClusteringEnabled();let r=NZ(e);if(r)throw vd(r,r.message,Bd.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await Ru.getNodeRecord(n);if(!IZ.isEmptyOrZeroLength(d))throw vd(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,Bd.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await CZ(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=UZ,o;let c=Ru.buildNodePayloads(s,vZ,mM.OPERATIONS_ENUM.ADD_NODE,await Ru.getSystemInfo()),u=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];s[d].start_time===void 0&&delete s[d].start_time,u.push(new LZ(E.schema,E.table,E.publish,E.subscribe))}Hd.trace("addNode sending remote payload:",c);let _;try{_=await gu.request(`${n}.${hM.REQUEST_SUFFIX}`,c)}catch(d){Hd.error(`addNode received error from request: ${d}`);for(let E=0,h=s.length;E<h;E++){let p=s[E];p.publish=!1,p.subscribe=!1,await gu.updateRemoteConsumer(p,n)}let f=gu.requestErrorHandler(d,"add_node",n);throw vd(new Error,f,Bd.INTERNAL_SERVER_ERROR,"error",f)}if(_.status===hM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw vd(new Error,d,Bd.INTERNAL_SERVER_ERROR,"error",d)}Hd.trace(_);for(let d=0,f=s.length;d<f;d++){let E=s[d];await gu.updateRemoteConsumer(E,n),E.subscribe===!0&&await gu.updateConsumerIterator(E.schema,E.table,n,"start")}let l=new DZ(n,u,_.system_info);return await Ru.upsertNodeRecord(l),MZ({type:"nats_update"}),i.length>0?o.message=PZ:o.message=`Successfully added '${n}' to manifest`,o}a(BZ,"addNode")});var mT=g((rfe,gM)=>{"use strict";var{handleHDBError:ET,hdb_errors:HZ}=ne(),{HTTP_STATUS_CODES:hT}=HZ,{addUpdateNodeValidator:xZ}=yd(),Au=K(),TM=U(),SM=rt(),tfe=Q(),Ou=Et(),bu=Ns(),GZ=re(),{cloneDeep:FZ}=require("lodash"),qZ=fT(),{Node:kZ,NodeSubscription:VZ}=_a(),{broadcast:$Z}=et(),YZ="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",KZ="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",WZ=GZ.get(TM.CONFIG_PARAMS.CLUSTERING_NODENAME);gM.exports=QZ;async function QZ(e){Au.trace("updateNode called with:",e),bu.checkClusteringEnabled();let t=xZ(e);if(t)throw ET(t,t.message,hT.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await bu.getNodeRecord(r);s.length>0&&(n=FZ(s));let{added:i,skipped:o}=await qZ(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=YZ,c;let u=bu.buildNodePayloads(i,WZ,TM.OPERATIONS_ENUM.UPDATE_NODE,await bu.getSystemInfo());for(let l=0,d=i.length;l<d;l++){let f=i[l];Au.trace(`updateNode updating work stream for node: ${r} subscription:`,f),i[l].start_time===void 0&&delete i[l].start_time}Au.trace("updateNode sending remote payload:",u);let _;try{_=await Ou.request(`${r}.${SM.REQUEST_SUFFIX}`,u)}catch(l){Au.error(`updateNode received error from request: ${l}`);let d=Ou.requestErrorHandler(l,"update_node",r);throw ET(new Error,d,hT.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===SM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw ET(new Error,l,hT.INTERNAL_SERVER_ERROR,"error",l)}Au.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];await Ou.updateRemoteConsumer(f,r),f.subscribe===!0?await Ou.updateConsumerIterator(f.schema,f.table,r,"start"):await Ou.updateConsumerIterator(f.schema,f.table,r,"stop")}return n||(n=[new kZ(r,[],_.system_info)]),await zZ(n[0],i,_.system_info),o.length>0?c.message=KZ:c.message=`Successfully updated '${r}'`,c}a(QZ,"updateNode");async function zZ(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 VZ(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await bu.upsertNodeRecord(n),$Z({type:"nats_update"})}a(zZ,"updateNodeTable")});var yM=g((sfe,bM)=>{"use strict";var OM=require("joi"),{string:RM}=OM.types(),JZ=Xe(),AM=U(),jZ=re(),XZ=rt();bM.exports=ZZ;function ZZ(e){let t=RM.invalid(jZ.get(AM.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(XZ.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=OM.object({operation:RM.valid(AM.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return JZ.validateBySchema(e,r)}a(ZZ,"removeNodeValidator")});var Fd=g((ofe,DM)=>{"use strict";var{handleHDBError:NM,hdb_errors:e5}=ne(),{HTTP_STATUS_CODES:IM}=e5,t5=yM(),yu=K(),wM=Ns(),r5=Q(),Gd=U(),CM=rt(),pT=Et(),n5=re(),{RemotePayloadObject:s5}=Tu(),{NodeSubscription:i5}=_a(),o5=Yc(),a5=Yi(),{broadcast:c5}=et(),u5=n5.get(Gd.CONFIG_PARAMS.CLUSTERING_NODENAME);DM.exports=l5;async function l5(e){yu.trace("removeNode called with:",e),wM.checkClusteringEnabled();let t=t5(e);if(t)throw NM(t,t.message,IM.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await wM.getNodeRecord(r);if(r5.isEmptyOrZeroLength(n))throw NM(new Error,`Node '${r}' was not found.`,IM.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new s5(Gd.OPERATIONS_ENUM.REMOVE_NODE,u5,[]),i,o=!1;for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];l.subscribe===!0&&await pT.updateConsumerIterator(l.schema,l.table,r,"stop");try{await pT.updateRemoteConsumer(new i5(l.schema,l.table,!1,!1),r)}catch(d){yu.error(d)}}try{i=await pT.request(`${r}.${CM.REQUEST_SUFFIX}`,s),yu.trace("Remove node reply from remote node:",r,i)}catch(u){yu.error("removeNode received error from request:",u),o=!0}let c=new o5(Gd.SYSTEM_SCHEMA_NAME,Gd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await a5.deleteRecord(c),c5({type:"nats_update"}),i?.status===CM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(yu.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(l5,"removeNode")});var UM=g((cfe,MM)=>{"use strict";var LM=require("joi"),{string:_5,array:d5}=LM.types(),f5=Xe(),E5=yd();MM.exports=h5;function h5(e){let t=LM.object({operation:_5.valid("configure_cluster").required(),connections:d5.items(E5.validation_schema).required()});return f5.validateBySchema(e,t)}a(h5,"configureClusterValidator")});var ST=g((lfe,xM)=>{"use strict";var m5=U(),qd=K(),p5=Q(),S5=Fd(),T5=xd(),PM=Ns(),g5=UM(),{handleHDBError:vM,hdb_errors:R5}=ne(),{HTTP_STATUS_CODES:BM}=R5,A5="Configure cluster complete.",O5="Failed to configure the cluster. Check the logs for more details.",b5="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";xM.exports=y5;async function y5(e){qd.trace("configure cluster called with:",e),PM.checkClusteringEnabled();let t=g5(e);if(t)throw vM(t,t.message,BM.BAD_REQUEST,void 0,void 0,!0);let r=await PM.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(HM(S5,{operation:m5.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);qd.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(HM(T5,E,E.node_name))}let c=await Promise.allSettled(i);qd.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"&&(qd.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(p5.isEmptyOrZeroLength(u))return{message:A5,connections:_};if(l)return{message:b5,failed_nodes:u,connections:_};throw vM(new Error,O5,BM.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(y5,"configureCluster");async function HM(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(HM,"functionWrapper")});var FM=g((dfe,GM)=>{"use strict";var kd=require("joi"),N5=Xe(),{validateSchemaExists:I5,validateTableExists:w5,validateSchemaName:C5}=Qn(),D5=kd.object({operation:kd.string().valid("purge_stream"),schema:kd.string().custom(I5).custom(C5).required(),table:kd.string().custom(w5).required()});function L5(e){return N5.validateBySchema(e,D5)}a(L5,"purgeStreamValidator");GM.exports=L5});var TT=g((Efe,qM)=>{"use strict";var{handleHDBError:M5,hdb_errors:U5}=ne(),{HTTP_STATUS_CODES:P5}=U5,v5=FM(),B5=Et(),H5=Ns();qM.exports=x5;async function x5(e){if(e.purge_ingest!==!0){let s=v5(e);if(s)throw M5(s,s.message,P5.BAD_REQUEST,void 0,void 0,!0)}H5.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await B5.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(x5,"purgeStream")});var AT=g((mfe,WM)=>{"use strict";var RT=Ns(),G5=Et(),$M=re(),Vd=U(),co=rt(),F5=Q(),gT=K(),{RemotePayloadObject:q5}=Tu(),{ErrorCode:kM}=require("nats"),VM=$M.get(Vd.CONFIG_PARAMS.CLUSTERING_ENABLED),YM=$M.get(Vd.CONFIG_PARAMS.CLUSTERING_NODENAME);WM.exports={clusterStatus:k5,buildNodeStatus:KM};async function k5(){let e={node_name:YM,is_enabled:VM,connections:[]};if(!VM)return e;let t=await RT.getAllNodeRecords();if(F5.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(KM(t[n],e.connections));return await Promise.allSettled(r),e}a(k5,"clusterStatus");async function KM(e,t){let r=e.name,n=new q5(Vd.OPERATIONS_ENUM.CLUSTER_STATUS,YM,void 0,await RT.getSystemInfo()),s,i,o=co.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await G5.request(co.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===co.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=co.CLUSTER_STATUS_STATUSES.CLOSED,gT.error(`Error getting node status from ${r} `,s))}catch(u){gT.warn(`Error getting node status from ${r}`,u),u.code===kM.NoResponders?o=co.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===kM.Timeout?o=co.CLUSTER_STATUS_STATUSES.TIMEOUT:o=co.CLUSTER_STATUS_STATUSES.CLOSED}let c=new V5(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!==Vd.PRE_4_0_0_VERSION&&await RT.upsertNodeRecord(u)}catch(u){gT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(KM,"buildNodeStatus");function V5(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(V5,"NodeStatusObject")});var bT=g((Sfe,QM)=>{"use strict";var{handleHDBError:$5,hdb_errors:Y5}=ne(),{HTTP_STATUS_CODES:K5}=Y5,W5=Et(),Q5=Ns(),OT=Q(),$d=require("joi"),z5=Xe(),J5=2e3,j5=$d.object({timeout:$d.number().min(1),connected_nodes:$d.boolean(),routes:$d.boolean()});QM.exports=X5;async function X5(e){Q5.checkClusteringEnabled();let t=z5.validateBySchema(e,j5);if(t)throw $5(t,t.message,K5.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||OT.autoCastBoolean(n),o=s===void 0||OT.autoCastBoolean(s),c={nodes:[]},u=await W5.getServerList(r??J5),_={};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:OT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(X5,"clusterNetwork")});var XM=g((gfe,jM)=>{"use strict";var yT=require("joi"),zM=Xe(),{route_constraints:JM}=yh();jM.exports={setRoutesValidator:Z5,deleteRoutesValidator:e8};function Z5(e){let t=yT.object({server:yT.valid("hub","leaf").required(),routes:JM.required()});return zM.validateBySchema(e,t)}a(Z5,"setRoutesValidator");function e8(e){let t=yT.object({routes:JM.required()});return zM.validateBySchema(e,t)}a(e8,"deleteRoutesValidator")});var IT=g((Afe,rU)=>{"use strict";var uo=Cr(),NT=Q(),Yd=U(),ZM=XM(),{handleHDBError:eU,hdb_errors:t8}=ne(),{HTTP_STATUS_CODES:tU}=t8,r8="cluster routes successfully set",n8="cluster routes successfully deleted";rU.exports={setRoutes:s8,getRoutes:i8,deleteRoutes:o8};function s8(e){let t=ZM.setRoutesValidator(e);if(t)throw eU(t,t.message,tU.BAD_REQUEST,void 0,void 0,!0);let r=uo.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=NT.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"?uo.updateConfigValue(Yd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):uo.updateConfigValue(Yd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:r8,set:o,skipped:i}}a(s8,"setRoutes");function i8(){let e=uo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(i8,"getRoutes");function o8(e){let t=ZM.deleteRoutesValidator(e);if(t)throw eU(t,t.message,tU.BAD_REQUEST,void 0,void 0,!0);let r=uo.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=NT.isEmptyOrZeroLength(n)?null:n,uo.updateConfigValue(Yd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=NT.isEmptyOrZeroLength(s)?null:s,uo.updateConfigValue(Yd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:n8,deleted:i,skipped:o}}a(o8,"deleteRoutes")});var sU=g((bfe,nU)=>{"use strict";var Nu=require("alasql"),lo=require("recursive-iterator"),vn=K(),a8=Q(),Iu=U(),wT=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,u8(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=>Iu.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=>!Iu.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][Iu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=c8(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(_=>!Iu.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Nu.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 c8(e){return e.filter(t=>t[Iu.PERMS_CRUD_ENUM.READ])}a(c8,"filterReadRestrictedAttrs");function u8(e,t,r,n,s){l8(e,t,r,n,s)}a(u8,"interpretAST");function wu(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(wu,"addSchemaTableToMap");function l8(e,t,r,n,s){if(!e){vn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Nu.yy.Insert?E8(e,t,r):e instanceof Nu.yy.Select?_8(e,t,r,n,s):e instanceof Nu.yy.Update?d8(e,t,r):e instanceof Nu.yy.Delete?f8(e,t,r):vn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(l8,"getRecordAttributesAST");function _8(e,t,r,n,s){if(!e){vn.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(a8.isEmptyOrZeroLength(i)){vn.error("No schema specified");return}e.from.forEach(c=>{wu(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),wu(c.table,t,r,n,s)});let o=new lo(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{vn.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 lo(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{vn.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 lo(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{vn.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 lo(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{vn.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(_8,"getSelectAttributes");function d8(e,t,r){if(!e){vn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new lo(e.columns),s=e.table.databaseid;wu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&CT(e.table.tableid,s,i.columnid,t,r)}a(d8,"getUpdateAttributes");function f8(e,t,r){if(!e){vn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new lo(e.where),s=e.table.databaseid;wu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&CT(e.table.tableid,s,i.columnid,t,r)}a(f8,"getDeleteAttributes");function E8(e,t,r){if(!e){vn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new lo(e.columns),s=e.into.databaseid;wu(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&CT(e.into.tableid,s,i.columnid,t,r)}a(E8,"getInsertAttributes");function CT(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(CT,"pushAttribute");nU.exports=wT});var MT=g((Nfe,cU)=>{var Kd=Ki(),iU=require("chalk"),Fr=K(),oU=require("prompt"),{promisify:h8}=require("util"),DT=U(),m8=require("fs-extra"),p8=require("path"),S8=Q(),T8=Md(),aU=re();aU.initSync();var g8=require("moment"),R8=h8(oU.get),A8=p8.join(aU.getHdbBasePath(),DT.LICENSE_KEY_DIR_NAME,DT.LICENSE_FILE_NAME,DT.LICENSE_FILE_NAME);cU.exports={getFingerprint:b8,setLicense:O8,parseLicense:LT,register:y8,getRegistrationInfo:I8};async function O8(e){if(e&&e.key&&e.company){try{Fr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await LT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Fr.error(r),Fr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(O8,"setLicense");async function b8(){let e={};try{e=await Kd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Fr.error(r),Fr.error(t),new Error(r)}return e}a(b8,"getFingerprint");async function LT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Fr.info("Validating license input...");let r=Kd.validateLicense(e,t);if(Fr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Fr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Fr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Fr.info("writing license to disk"),await m8.writeFile(A8,JSON.stringify({license_key:e,company:t}))}catch(n){throw Fr.error("Failed to write License"),n}return"Registration successful."}a(LT,"parseLicense");async function y8(){let e=await N8();return LT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(y8,"register");async function N8(){let e=await Kd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:iU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:iU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{oU.start()}catch(n){Fr.error(n)}let r;try{r=await R8(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(N8,"promptForRegistration");async function I8(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Kd.getLicense()}catch(r){throw Fr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(S8.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=T8.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=g8.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(I8,"getRegistrationInfo")});var lU=g((wfe,uU)=>{"use strict";var w8=rt(),UT=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+w8.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"}};uU.exports=UT});var fU=g((Dfe,dU)=>{"use strict";var _U=rt(),PT=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+_U.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+_U.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"}};dU.exports=PT});var hU=g((Mfe,EU)=>{"use strict";var vT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};EU.exports=vT});var pU=g((Pfe,mU)=>{"use strict";var C8=rt(),BT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+C8.SERVER_SUFFIX.ADMIN,this.password=r}};mU.exports=BT});var GT=g((Bfe,gU)=>{"use strict";var fa=require("path"),zd=require("fs-extra"),D8=lU(),L8=fU(),M8=hU(),U8=pU(),HT=vr(),ha=Q(),pr=Cr(),Qd=U(),Cu=rt(),{CONFIG_PARAMS:lt}=Qd,Du=K(),Lu=re(),SU=Ts(),xT=Et(),Ea="clustering",P8=1e4,TU=5;gU.exports={generateNatsConfig:B8,removeNatsConfig:H8,getHubConfigPath:v8};function v8(){let e=Lu.get(lt.ROOTPATH);return fa.join(e,Ea,Cu.NATS_CONFIG_FILES.HUB_SERVER)}a(v8,"getHubConfigPath");async function B8(e=!1,t=void 0){Lu.initSync();let r=Lu.get(lt.ROOTPATH),n=fa.join(r,Ea,Cu.PID_FILES.HUB),s=fa.join(r,Ea,Cu.PID_FILES.LEAF),i=pr.getConfigFromFile(lt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=fa.join(r,Ea,Cu.NATS_CONFIG_FILES.HUB_SERVER),c=fa.join(r,Ea,Cu.NATS_CONFIG_FILES.LEAF_SERVER),u=pr.getConfigFromFile(lt.CLUSTERING_TLS_CERTIFICATE),_=pr.getConfigFromFile(lt.CLUSTERING_TLS_PRIVATEKEY),l=pr.getConfigFromFile(lt.CLUSTERING_TLS_CERT_AUTH),d=pr.getConfigFromFile(lt.CLUSTERING_TLS_INSECURE),f=pr.getConfigFromFile(lt.CLUSTERING_TLS_VERIFY),E=pr.getConfigFromFile(lt.CLUSTERING_NODENAME),h=pr.getConfigFromFile(lt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await xT.checkNATSServerInstalled()||Jd("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await HT.listUsers(),S=pr.getConfigFromFile(lt.CLUSTERING_USER),T=await HT.getClusterUser();(ha.isEmpty(T)||T.active!==!0)&&Jd(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Wd(lt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Wd(lt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Wd(lt.CLUSTERING_HUBSERVER_NETWORK_PORT),await Wd(lt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let b=[],R=[];for(let[z,j]of p.entries())j.role.role===Qd.ROLE_TYPES_ENUM.CLUSTER_USER&&j.active&&(b.push(new U8(j.username,SU.decrypt(j.hash))),R.push(new M8(j.username,SU.decrypt(j.hash))));let L=[],{hub_routes:H}=pr.getClusteringRoutes();if(!ha.isEmptyOrZeroLength(H))for(let z of H)L.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${z.host}:${z.port}`);let P=new D8(pr.getConfigFromFile(lt.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,u,_,l,d,f,h,pr.getConfigFromFile(lt.CLUSTERING_HUBSERVER_CLUSTER_NAME),pr.getConfigFromFile(lt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),L,b,R);l==null&&(delete P.tls.ca_file,delete P.leafnodes.tls.ca_file),t=ha.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Qd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await zd.writeJson(o,P),Du.trace(`Hub server config written to ${o}`));let k=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,B=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,J=new L8(pr.getConfigFromFile(lt.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[k],[B],b,R,u,_,l,d);l==null&&delete J.tls.ca_file,(t===void 0||t===Qd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await zd.writeJson(c,J),Du.trace(`Leaf server config written to ${c}`))}a(B8,"generateNatsConfig");async function Wd(e){let t=Lu.get(e);return ha.isEmpty(t)&&Jd(`port undefined for '${e}'`),await ha.isPortTaken(t)&&Jd(`'${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(Wd,"isPortAvailable");function Jd(e){let t=`Error generating clustering config: ${e}`;Du.error(t),console.error(t),process.exit(1)}a(Jd,"generateNatsConfigError");async function H8(e){let{port:t,config_file:r}=xT.getServerConfig(e),{username:n,decrypt_hash:s}=await HT.getClusterUser(),i=0,o=2e3;for(;i<TU;){try{let _=await xT.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Du.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=TU)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 ha.async_set_timeout(o*(i*2))}let c="0".repeat(P8),u=fa.join(Lu.get(lt.ROOTPATH),Ea,r);await zd.writeFile(u,c),await zd.remove(u),Du.notify(e,"started.")}a(H8,"removeNatsConfig")});var NU=g((xfe,yU)=>{"use strict";var qr=re(),x8=Ki(),he=U(),Mu=rt(),Is=require("path"),{PACKAGE_ROOT:Xd}=U(),RU=re(),jd=Q(),ma="/dev/null",G8=Is.join(Xd,"launchServiceScripts"),AU=Is.join(Xd,"utility/scripts"),F8=Is.join(AU,he.HDB_RESTART_SCRIPT),OU=Is.resolve(Xd,"dependencies",`${process.platform}-${process.arch}`,Mu.NATS_BINARY_NAME);function bU(){let t=x8.licenseSearch().ram_allocation||he.RAM_ALLOCATION_ENUM.DEFAULT,r=he.MEM_SETTING_KEY+t,n={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return jd.noBootFile()&&(n[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=jd.getEnvCliRootPath()),{name:he.PROCESS_DESCRIPTORS.HDB,script:he.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Xd}}a(bU,"generateMainServerConfig");var q8=9930;function k8(){qr.initSync(!0);let e=qr.get(he.CONFIG_PARAMS.ROOTPATH),t=Is.join(e,"clustering",Mu.NATS_CONFIG_FILES.HUB_SERVER),r=Is.join(qr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),n=RU.get(he.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Mu.LOG_LEVEL_FLAGS[qr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==q8?"-"+n:""),script:OU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return qr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ma,i.error_file=ma),i}a(k8,"generateNatsHubServerConfig");var V8=9940;function $8(){qr.initSync(!0);let e=qr.get(he.CONFIG_PARAMS.ROOTPATH),t=Is.join(e,"clustering",Mu.NATS_CONFIG_FILES.LEAF_SERVER),r=Is.join(qr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),n=RU.get(he.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Mu.LOG_LEVEL_FLAGS[qr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==V8?"-"+n:""),script:OU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return qr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ma,i.error_file=ma),i}a($8,"generateNatsLeafServerConfig");function Y8(){qr.initSync();let e=Is.join(qr.get(he.CONFIG_PARAMS.LOGGING_ROOT),he.LOG_NAMES.HDB),t={name:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:he.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:G8,autorestart:!1};return qr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=ma,t.error_file=ma),t}a(Y8,"generateClusteringUpgradeV4ServiceConfig");function K8(){let e={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.RESTART_HDB};return jd.noBootFile()&&(e[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=jd.getEnvCliRootPath()),{...{name:he.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:AU},script:F8}}a(K8,"generateRestart");function W8(){return{apps:[bU()]}}a(W8,"generateAllServiceConfigs");yU.exports={generateAllServiceConfigs:W8,generateMainServerConfig:bU,generateRestart:K8,generateNatsHubServerConfig:k8,generateNatsLeafServerConfig:$8,generateClusteringUpgradeV4ServiceConfig:Y8}});var FU=g((qfe,GU)=>{"use strict";var ve=U(),Q8=Q(),Cs=GT(),Zd=Et(),ws=rt(),_i=NU(),ef=re(),di=K(),z8=Ns(),{startWorker:IU,onMessageFromWorkers:J8}=et(),j8=da(),Ffe=require("util"),X8=require("child_process"),Z8=require("fs"),{execFile:e6}=X8,Ne;GU.exports={enterPM2Mode:t6,start:fi,stop:FT,reload:CU,restart:DU,list:qT,describe:MU,connect:Ds,kill:o6,startAllServices:a6,startService:kT,getUniqueServicesList:UU,restartAllServices:c6,isServiceRegistered:PU,reloadStopStart:vU,restartHdb:LU,deleteProcess:s6,startClusteringProcesses:HU,startClusteringThreads:xU,isHdbRestartRunning:i6,isClusteringRunning:l6,stopClustering:u6,reloadClustering:_6};var Uu=!1;J8(e=>{e.type==="restart"&&ef.initSync(!0)});function t6(){Uu=!0}a(t6,"enterPM2Mode");function Ds(){return Ne||(Ne=require("pm2")),new Promise((e,t)=>{Ne.connect((r,n)=>{di.setupConsoleLogging(),r&&t(r),e(n)})})}a(Ds,"connect");var Sr,r6=10,wU;function fi(e,t=!1){if(Uu)return n6(e);let r=e6(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Sr.indexOf(r);o>-1&&Sr.splice(o,1),!wU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<r6&&(Z8.existsSync(Cs.getHubConfigPath())?fi(e):(await Cs.generateNatsConfig(!0),fi(e),await new Promise(c=>setTimeout(c,3e3)),await Cs.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Cs.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=ef.get(ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&ws.LOG_LEVEL_HIERARCHY[o]>=ws.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===ws.LOG_LEVELS.ERR||l===ws.LOG_LEVELS.WRN?di.OUTPUTS.STDERR:di.OUTPUTS.STDOUT;di.logCustomLevel(l||"info",E,n,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=ws.LOG_LEVELS[f]}if(ws.LOG_LEVEL_HIERARCHY[o]>=ws.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===ws.LOG_LEVELS.ERR||l===ws.LOG_LEVELS.WRN?di.OUTPUTS.STDERR:di.OUTPUTS.STDOUT;di.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),Sr=[],!Sr&&!t){let i=a(()=>{wU=!0,Sr&&(Sr.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)}Sr.push(r)}a(fi,"start");function n6(e){return new Promise(async(t,r)=>{try{await Ds()}catch(n){r(n)}Ne.start(e,(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(s)})})}a(n6,"startWithPM2");function FT(e){if(!Uu){for(let t of Sr||[])t.name===e&&(Sr.splice(Sr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Ds()}catch(n){r(n)}Ne.stop(e,async(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.delete(e,(i,o)=>{i&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(o)})})})}a(FT,"stop");function CU(e){return new Promise(async(t,r)=>{try{await Ds()}catch(n){r(n)}Ne.reload(e,(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(s)})})}a(CU,"reload");function DU(e){if(!Uu)for(let t of Sr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Ds()}catch(n){r(n)}Ne.restart(e,(n,s)=>{Ne.disconnect(),t(s)})})}a(DU,"restart");function s6(e){return new Promise(async(t,r)=>{try{await Ds()}catch(n){r(n)}Ne.delete(e,(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(s)})})}a(s6,"deleteProcess");async function LU(){await fi(_i.generateRestart())}a(LU,"restartHdb");async function i6(){let e=await qT();for(let t in e)if(e[t].name===ve.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(i6,"isHdbRestartRunning");function qT(){return new Promise(async(e,t)=>{try{await Ds()}catch(r){t(r)}Ne.list((r,n)=>{r&&(Ne.disconnect(),t(r)),Ne.disconnect(),e(n)})})}a(qT,"list");function MU(e){return new Promise(async(t,r)=>{try{await Ds()}catch(n){r(n)}Ne.describe(e,(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(s)})})}a(MU,"describe");function o6(){if(!Uu){for(let e of Sr||[])e.kill();Sr=[];return}return new Promise(async(e,t)=>{try{await Ds()}catch(r){t(r)}Ne.killDaemon((r,n)=>{r&&(Ne.disconnect(),t(r)),Ne.disconnect(),e(n)})})}a(o6,"kill");async function a6(){try{await HU(),await xU(),await fi(_i.generateAllServiceConfigs())}catch(e){throw Ne?.disconnect(),e}}a(a6,"startAllServices");async function kT(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ve.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=_i.generateMainServerConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=_i.generateNatsIngestServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=_i.generateNatsReplyServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=_i.generateNatsHubServerConfig(),await fi(r,t),await Cs.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=_i.generateNatsLeafServerConfig(),await fi(r,t),await Cs.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=_i.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await fi(r)}catch(r){throw Ne?.disconnect(),r}}a(kT,"startService");async function UU(){try{let e=await qT(),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 Ne?.disconnect(),e}}a(UU,"getUniqueServicesList");async function c6(e=[]){try{let t=!1,r=await UU();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===ve.PROCESS_DESCRIPTORS.HDB?t=!0:await DU(o))}t&&await vU(ve.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ne?.disconnect(),t}}a(c6,"restartAllServices");async function PU(e){if(Sr?.find(r=>r.name===e))return!0;let t=await j8.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(PU,"isServiceRegistered");async function vU(e){let t=ef.get(ve.CONFIG_PARAMS.THREADS_COUNT)??ef.get(ve.CONFIG_PARAMS.THREADS),r=await MU(e),n=Q8.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await FT(e),await kT(e)):e===ve.PROCESS_DESCRIPTORS.HDB?await LU():await CU(e)}a(vU,"reloadStopStart");var BU;async function HU(e=!1){for(let t in ve.CLUSTERING_PROCESSES){let r=ve.CLUSTERING_PROCESSES[t];await kT(r,e)}}a(HU,"startClusteringProcesses");async function xU(){BU=IU(ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Zd.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Zd.updateLocalStreams();let e=await z8.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ve.PRE_4_0_0_VERSION){di.info("Starting clustering upgrade 4.0.0 process"),IU(ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(xU,"startClusteringThreads");async function u6(){for(let e in ve.CLUSTERING_PROCESSES)if(e!==ve.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ve.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await BU.terminate();else{let t=ve.CLUSTERING_PROCESSES[e];await FT(t)}}a(u6,"stopClustering");async function l6(){for(let e in ve.CLUSTERING_PROCESSES){let t=ve.CLUSTERING_PROCESSES[e];if(await PU(t)===!1)return!1}return!0}a(l6,"isClusteringRunning");async function _6(){await Cs.generateNatsConfig(!0),await Zd.reloadNATSHub(),await Zd.reloadNATSLeaf(),await Cs.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Cs.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(_6,"reloadClustering")});var of=g(($fe,WU)=>{"use strict";var d6=require("minimist"),{isMainThread:$T,parentPort:VU}=require("worker_threads"),nt=U(),{PROCESS_DESCRIPTORS_VALIDATE:Pu}=nt,rs=K(),YT=Q(),rf=GT(),tf=Et(),Vfe=rt(),$U=Cr(),ns=FU(),qU=da(),f6=Eh(),{restartWorkers:nf,onMessageByType:E6}=et(),{handleHDBError:h6,hdb_errors:m6}=ne(),{HTTP_STATUS_CODES:p6}=m6,sf=re();sf.initSync();var vu=`Restarting HarperDB. This may take up to ${nt.RESTART_TIMEOUT_MS/1e3} seconds.`,S6="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",kU="Clustering is not enabled so cannot be restarted",T6="Invalid service",pa,an;WU.exports={restart:YU,restartService:KT};$T&&E6(nt.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?KT({service:e.workerType}):YU({operation:"restart"})});async function YU(e){an=Object.keys(e).length===0,pa=await ns.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR);let t=d6(process.argv);if(t.service){await KT(t);return}if(an&&!pa){console.error(S6);return}if(an&&console.log(vu),pa){ns.enterPM2Mode(),rs.notify(vu);let r=f6(Object.keys(nt.CONFIG_PARAM_MAP),!0);return YT.isEmptyOrZeroLength(Object.keys(r))||$U.updateConfigValue(void 0,void 0,r,!0,!0),g6(),vu}return $T?(rs.notify(vu),setTimeout(()=>{nf()},50)):VU.postMessage({type:nt.ITC_EVENT_TYPES.RESTART}),vu}a(YU,"restart");async function KT(e){let{service:t}=e;if(nt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw h6(new Error,T6,p6.BAD_REQUEST,void 0,void 0,!0);if(pa=await ns.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR),!$T)return VU.postMessage({type:nt.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Pu.clustering:if(!sf.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=kU;break}an&&console.log("Restarting clustering"),rs.notify("Restarting clustering"),await KU();break;case Pu.clustering_config:case Pu["clustering config"]:if(!sf.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=kU;break}an&&console.log("Restarting clustering_config"),rs.notify("Restarting clustering_config"),await ns.reloadClustering();break;case"custom_functions":case"custom functions":case Pu.harperdb:case Pu.http_workers:if(an&&!pa){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}an&&console.log("Restarting http_workers"),rs.notify("Restarting http_workers"),an?await ns.restart(nt.HDB_PROC_DESCRIPTOR):setTimeout(()=>{nf("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(rs.error(r),an&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(KT,"restartService");async function g6(){await KU(),await ns.restart(nt.HDB_PROC_DESCRIPTOR),await YT.async_set_timeout(2e3),sf.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await VT(),an&&(await tf.closeConnection(),process.exit(0))}a(g6,"restartPM2Mode");async function KU(){if(!$U.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await qU.getHDBProcessInfo()).clustering.length===0)rs.trace("Clustering not running, restart will start clustering services"),await rf.generateNatsConfig(!0),await ns.startClusteringProcesses(),await ns.startClusteringThreads(),await VT(),an&&await tf.closeConnection();else{await rf.generateNatsConfig(!0),pa?(rs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ns.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ns.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await qU.getHDBProcessInfo()).clustering.forEach(s=>{rs.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await YT.async_set_timeout(3e3),await VT(),await tf.updateLocalStreams(),an&&await tf.closeConnection(),rs.trace("Restart clustering restarting ingest and reply service threads");let t=nf(nt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=nf(nt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(KU,"restartClustering");async function VT(){await rf.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await rf.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(VT,"removeNatsConfig")});var sP=g((Wfe,nP)=>{"use strict";var Kfe=require("lodash"),Tr=U(),{handleHDBError:QU,hdb_errors:R6}=ne(),{HDB_ERROR_MSGS:A6,HTTP_STATUS_CODES:O6}=R6,WT=K();nP.exports={getRolePermissions:y6};var _o=Object.create(null),b6=a(e=>({key:e,perms:{}}),"perms_template_obj"),XU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),ZU=a((e=!1,t=!1,r=!1,n=!1)=>({[Tr.PERMS_CRUD_ENUM.READ]:e,[Tr.PERMS_CRUD_ENUM.INSERT]:t,[Tr.PERMS_CRUD_ENUM.UPDATE]:r,[Tr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),QT=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...ZU(t,r,n,s)}),"table_perms_template"),zU=a((e,t=ZU())=>({attribute_name:e,describe:rP(t),[Bu]:t[Bu],[zT]:t[zT],[JT]:t[JT]}),"attr_perms_template"),JU=a((e,t=!1)=>({attribute_name:e,describe:t,[Bu]:t}),"timestamp_attr_perms_template"),{READ:Bu,INSERT:zT,UPDATE:JT}=Tr.PERMS_CRUD_ENUM,eP=Object.values(Tr.PERMS_CRUD_ENUM),tP=[Bu,zT,JT];function y6(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[Tr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(_o[t]&&_o[t].key===n)return _o[t].perms;let s=N6(e,r);return _o[t]?_o[t].key=n:_o[t]=b6(n),_o[t].perms=s,s}catch(r){if(!e[Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Tr.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 WT.error(n),WT.debug(r),QU(new Error,A6.OUTDATED_PERMS_TRANSLATION_ERROR,O6.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
11
+ ${r.stack}`;throw WT.error(n),QU(new Error)}}}a(y6,"getRolePermissions");function N6(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Tr.SYSTEM_SCHEMA_NAME]=n[Tr.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]=I6(t[i]);return}r[i]=XU(),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],_=w6(c,u);r[i].describe||eP.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=QT()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=QT()})}),r}a(N6,"translateRolePermissions");function I6(e){let t=XU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=QT(!0,!0,!0,!0,!0)}),t}a(I6,"createStructureUserPermissions");function w6(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 Tr.TIME_STAMP_NAMES.includes(d)&&(f=JU(d,l[Bu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=zU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=rP(l),s.attribute_permissions.push(l),c||C6(l,u)}else if(_!==o){let l;Tr.TIME_STAMP_NAMES.includes(_)?l=JU(_):l=zU(_),s.attribute_permissions.push(l)}}),c||s.attribute_permissions.push(u),s.describe=jU(s),s}else return e.describe=jU(e),e}a(w6,"getTableAttrPerms");function jU(e){return eP.filter(t=>e[t]).length>0}a(jU,"getSchemaTableDescribePerm");function rP(e){return tP.filter(t=>e[t]).length>0}a(rP,"getAttributeDescribePerm");function C6(e,t){tP.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(C6,"checkForHashPerms")});var iP={};$e(iP,{Resources:()=>af,keyArrayToString:()=>Sa,resetResources:()=>D6,resources:()=>Ei});function D6(){return Ei=new af}function Sa(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var af,Ei,Hu=Re(()=>{Xi();af=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 ze(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(D6,"resetResources");a(Sa,"keyArrayToString")});var oP={};$e(oP,{Headers:()=>hi,appendHeader:()=>jT});function jT(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var hi,xu=Re(()=>{hi=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];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(jT,"appendHeader")});var Gu={};$e(Gu,{authentication:()=>EP,bypassAuth:()=>H6,login:()=>G6,logout:()=>F6,start:()=>x6});function H6(){fP=!0}async function EP(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?P6?U6:[]:M6?L6:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new hi([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return cf&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),cf&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(cf){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 cP.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new Ta.AuthAuditLog(E,h,Ut.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===Ut.AUTH_AUDIT_STATUS.SUCCESS?aP.notify(S):aP.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 Ze.getUser(E,null,null),l(E,Ut.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Ta.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=fo.get(n),!d){let[E,h]=n.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await Ze.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,uf.validateOperationToken)(h)}catch(T){if(T.message==="invalid token")try{return await(0,uf.validateRefreshToken)(h),c({status:-1})}catch{throw T}}break}}catch(T){return B6&&(fo.get(h)||(fo.set(h,h),l(p,Ut.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:mi({error:T.message},e)})}fo.set(n,d),v6&&l(d.username,Ut.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await Ze.getUser(_.user,null,e):(fP&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,lP.getSuperUser)());cf&&(e.session.update=function(E){if(!u){u=(0,_P.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,cP.put(E)},e.login=async function(E,h){e.user=await Ze.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")&&Ei.loginPath?(f.status=302,f.headers.set("Location",Ei.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 hi);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function x6({server:e,port:t}){e.request(EP,{port:t||"all"}),uP||(uP=!0,setInterval(()=>{fo=new Map},cn.get(Ut.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),dP.user.addListener(()=>{fo=new Map}))}async function G6(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 F6(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var lP,uf,_P,cn,Ut,Ta,dP,aP,L6,M6,U6,P6,cP,cf,fP,v6,B6,fo,uP,lf=Re(()=>{lP=x(vr());ir();Hu();uf=x(Su());Ae();_P=require("uuid"),cn=x(re()),Ut=x(U()),Ta=x(K()),dP=x(Bc());xu();ga();aP=(0,Ta.loggerWithTag)("auth-event");cn.initSync();L6=cn.get(Ut.CONFIG_PARAMS.HTTP_CORSACCESSLIST),M6=cn.get(Ut.CONFIG_PARAMS.HTTP_CORS),U6=cn.get(Ut.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),P6=cn.get(Ut.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),cP=at({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),cf=cn.get(Ut.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,fP=cn.get(Ut.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,v6=cn.get(Ut.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,B6=cn.get(Ut.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,fo=new Map;Ze.onInvalidatedUser(()=>{fo=new Map});a(H6,"bypassAuth");a(EP,"authentication");a(x6,"start");a(G6,"login");a(F6,"logout")});var RP=g((sEe,gP)=>{"use strict";var Ie=require("joi"),hP=require("fs-extra"),mP=require("path"),Ms=Xe(),pP=re(),SP=U(),TP=K(),{hdb_errors:q6}=ne(),{HDB_ERROR_MSGS:jt}=q6,Ls=/^[a-zA-Z0-9-_]+$/;gP.exports={getDropCustomFunctionValidator:V6,setCustomFunctionValidator:$6,addComponentValidator:Q6,dropCustomFunctionProjectValidator:z6,packageComponentValidator:J6,deployComponentValidator:j6,setComponentFileValidator:Y6,getComponentFileValidator:W6,dropComponentFileValidator:K6};function _f(e,t,r){try{let n=pP.get(SP.CONFIG_PARAMS.COMPONENTSROOT),s=mP.join(n,t);return hP.existsSync(s)?e?t:r.message(jt.PROJECT_EXISTS):e?r.message(jt.NO_PROJECT):t}catch(n){return TP.error(n),r.message(jt.VALIDATION_ERR)}}a(_f,"checkProjectExists");function Fu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Fu,"checkFilePath");function k6(e,t,r,n){try{let s=pP.get(SP.CONFIG_PARAMS.COMPONENTSROOT),i=mP.join(s,e,t,r+".js");return hP.existsSync(i)?r:n.message(jt.NO_FILE)}catch(s){return TP.error(s),n.message(jt.VALIDATION_ERR)}}a(k6,"checkFileExists");function V6(e){let t=Ie.object({project:Ie.string().pattern(Ls).custom(_f.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().pattern(Ls).custom(k6.bind(null,e.project,e.type)).custom(Fu).required().messages({"string.pattern.base":jt.BAD_FILE_NAME})});return Ms.validateBySchema(e,t)}a(V6,"getDropCustomFunctionValidator");function $6(e){let t=Ie.object({project:Ie.string().pattern(Ls).custom(_f.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().custom(Fu).required(),function_content:Ie.string().required()});return Ms.validateBySchema(e,t)}a($6,"setCustomFunctionValidator");function Y6(e){let t=Ie.object({project:Ie.string().pattern(Ls).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:Ie.string().custom(Fu).required(),payload:Ie.string().allow("").optional(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ms.validateBySchema(e,t)}a(Y6,"setComponentFileValidator");function K6(e){let t=Ie.object({project:Ie.string().pattern(Ls).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:Ie.string().custom(Fu).optional()});return Ms.validateBySchema(e,t)}a(K6,"dropComponentFileValidator");function W6(e){let t=Ie.object({project:Ie.string().required(),file:Ie.string().custom(Fu).required(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ms.validateBySchema(e,t)}a(W6,"getComponentFileValidator");function Q6(e){let t=Ie.object({project:Ie.string().pattern(Ls).custom(_f.bind(null,!1)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Ms.validateBySchema(e,t)}a(Q6,"addComponentValidator");function z6(e){let t=Ie.object({project:Ie.string().pattern(Ls).custom(_f.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Ms.validateBySchema(e,t)}a(z6,"dropCustomFunctionProjectValidator");function J6(e){let t=Ie.object({project:Ie.string().pattern(Ls).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),skip_node_modules:Ie.boolean()});return Ms.validateBySchema(e,t)}a(J6,"packageComponentValidator");function j6(e){let t=Ie.object({project:Ie.string().pattern(Ls).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),payload:Ie.string().optional().messages({"string.pattern.base":jt.BAD_PACKAGE}),package:Ie.string().optional()});return Ms.validateBySchema(e,t)}a(j6,"deployComponentValidator")});var hf=g((oEe,wP)=>{"use strict";var df=require("joi"),ff=require("path"),AP=require("fs-extra"),{exec:X6}=require("child_process"),Z6=require("util"),OP=Z6.promisify(X6),qu=U(),{handleHDBError:Ra,hdb_errors:e9}=ne(),{HTTP_STATUS_CODES:Aa}=e9,ku=re(),t9=Xe(),Oa=K();ku.initSync();var XT=ku.get(qu.CONFIG_PARAMS.COMPONENTSROOT),bP="npm install --omit=dev --json",r9=`${bP} --dry-run`;wP.exports={installModules:o9,auditModules:a9,installAllRootModules:n9,uninstallRootModule:s9,linkHarperdb:i9};async function n9(e=!1){await Ef(),await Vu(e?"npm install --ignore-scripts":"npm install",ku.get(qu.CONFIG_PARAMS.ROOTPATH))}a(n9,"installAllRootModules");async function s9(e){await Vu(`npm uninstall ${e}`,ku.get(qu.CONFIG_PARAMS.ROOTPATH))}a(s9,"uninstallRootModule");async function i9(){await Ef(),await Vu(`npm link ${qu.PACKAGE_ROOT}`,ku.get(qu.CONFIG_PARAMS.ROOTPATH))}a(i9,"linkHarperdb");async function Vu(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await OP(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
12
+ `,""))}return n&&!n.includes("Debugger listening")&&Oa.error("Error running NPM command:",e,n),Oa.trace(r,n),r?.replace(`
13
+ `,"")}a(Vu,"runCommand");async function o9(e){Oa.info(`starting installModules for request: ${e}`);let t=IP(e);if(t)throw Ra(t,t.message,Aa.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?r9:bP;await Ef(),await NP(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 _=ff.join(XT,u),l,d=null;try{let{stdout:f,stderr:E}=await OP(s,{cwd:_});l=f?f.replace(`
14
14
  `,""):null,d=E?E.replace(`
15
- `,""):null}catch(f){f.stderr?i[u].npm_error=WU(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 Ra.info(`finished installModules with response ${i}`),i}a(E6,"installModules");function WU(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(WU,"parseNPMStdErr");async function h6(e){Ra.info(`starting auditModules for request: ${e}`);let t=zU(e);if(t)throw Ta(t,t.message,ga.BAD_REQUEST);let{projects:r}=e;await tf(),await QU(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=ef.join(BT,o);n[o]={npm_output:null,npm_error:null};try{let u=await qu("npm audit --json",c);n[o].npm_output=JSON.parse(u)}catch(u){n[o].npm_error=WU(u.stderr)}}return Ra.info(`finished auditModules with response ${n}`),n}a(h6,"auditModules");async function tf(){try{return await qu("npm -v"),!0}catch{throw Ta(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",ga.BAD_REQUEST,void 0,void 0,!0)}}a(tf,"checkNPMInstalled");async function QU(e){if(!Array.isArray(e)||e.length===0)throw Ta(new Error,"projects argument must be an array with at least 1 element",ga.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=ef.join(BT,i.toString());if(!await $U.pathExists(o)){t.push(i);continue}let u=ef.join(o,"package.json");await $U.pathExists(u)||r.push(i)}if(t.length>0)throw Ta(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,ga.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Ta(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,ga.BAD_REQUEST,void 0,void 0,!0)}a(QU,"checkProjectPaths");function zU(e){let t=Zd.object({projects:Zd.array().min(1).items(Zd.string()).required(),dry_run:Zd.boolean().default(!1)});return u6.validateBySchema(e,t)}a(zU,"modulesValidator")});var xT=T((Rfe,tP)=>{"use strict";var Aa=require("fs-extra"),HT=require("path"),nf=V(),XU=J(),sf=M(),eP=j(),m6=Lr();tP.exports=p6;async function p6(){let e=S6(),t=eP.get(sf.CONFIG_PARAMS.ROOTPATH),r=HT.join(t,"package.json"),n={dependencies:{harperdb:"file:"+sf.PACKAGE_ROOT}},s=HT.join(t,"node_modules");await Aa.ensureDir(s);let i,o=!0,c=!1;try{i=await Aa.readJson(r)}catch(u){if(XU.isEmptyOrZeroLength(e))return;if(u.code!==sf.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!XU.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await jU(_);n.dependencies[u]=l+_}if(!o){nf.notify("Installing components"),await ZU(r,n,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await jU(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)n.dependencies[u]===void 0&&(nf.notify("Removing component",u),c=!0);c&&(nf.notify("Updating components."),await ZU(r,n,i))}a(p6,"installComponents");function S6(){let e=m6.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(S6,"getComponentsConfig");async function jU(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":HT.extname(e)||await Aa.pathExists(e)?"file:":"github:"}a(jU,"getPkgPrefix");async function ZU(e,t,r){nf.trace("npm installing components package.json",t),await Aa.writeFile(e,JSON.stringify(t,null," "));try{await rf().installAllRootModules(eP.get(sf.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await Aa.writeFile(e,JSON.stringify(r,null," ")):await Aa.unlink(e),n}}a(ZU,"installPackages")});var GT=T((bfe,iP)=>{"use strict";var qe=require("fs-extra"),qT=require("fast-glob"),pe=require("path"),nP=require("tar-fs"),Ofe=require("uuid").v4,FT=require("normalize-path"),ns=VU(),wt=V(),Ye=M(),gt=j(),Fu=Lr(),T6=J(),{PACKAGE_ROOT:g6}=M(),{handleHDBError:Ht,hdb_errors:R6}=Z(),{basename:A6}=require("path"),O6=xT(),sP=j(),b6=M(),{Readable:N6}=require("stream"),{isMainThread:y6}=require("worker_threads"),{HDB_ERROR_MSGS:_o,HTTP_STATUS_CODES:xt}=R6,I6=pe.join(g6,"application-template"),rP=pe.join(gt.get(Ye.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function w6(){wt.trace("getting custom api status");let e={};try{e={port:gt.get(Ye.CONFIG_PARAMS.HTTP_PORT),directory:gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Ht(new Error,_o.FUNCTION_STATUS,xt.INTERNAL_SERVER_ERROR,wt.ERR,t)}return e}a(w6,"customFunctionsStatus");function C6(){wt.trace("getting custom api endpoints");let e={},t=gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT);try{qT.sync(FT(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:qT.sync(FT(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:qT.sync(FT(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Ht(new Error,_o.GET_FUNCTIONS,xt.INTERNAL_SERVER_ERROR,wt.ERR,r)}return e}a(C6,"getCustomFunctions");function L6(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=ns.getDropCustomFunctionValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("getting custom api endpoint file content");let r=gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=pe.join(r,n,s,i+".js");try{return qe.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ht(new Error,_o.GET_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,c)}}a(L6,"getCustomFunction");function D6(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=ns.setCustomFunctionValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("setting custom function file content");let r=gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return qe.outputFileSync(pe.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Ht(new Error,_o.SET_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,c)}}a(D6,"setCustomFunction");function M6(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=ns.getDropCustomFunctionValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("dropping custom function file");let r=gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return qe.unlinkSync(pe.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Ht(new Error,_o.DROP_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,o)}}a(M6,"dropCustomFunction");function U6(e){e.project&&(e.project=pe.parse(e.project).name);let t=ns.addComponentValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("adding component");let r=gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=pe.join(r,n);return qe.mkdirSync(s,{recursive:!0}),qe.copySync(I6,s),`Successfully added project: ${n}`}catch(s){throw Ht(new Error,_o.ADD_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,s)}}a(U6,"addComponent");function P6(e){e.project&&(e.project=pe.parse(e.project).name);let t=ns.dropCustomFunctionProjectValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("dropping custom function project");let r=gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=gt.get(Ye.CONFIG_PARAMS.APPS);if(!T6.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 Fu.updateConfigValue(Ye.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=pe.join(r,n);return qe.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Ht(new Error,_o.DROP_FUNCTION_PROJECT,xt.INTERNAL_SERVER_ERROR,wt.ERR,i)}}a(P6,"dropCustomFunctionProject");async function v6(e){e.project&&(e.project=pe.parse(e.project).name);let t=ns.packageComponentValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;wt.trace("packaging component",n);let s;try{s=await qe.realpath(pe.join(r,n))}catch(u){if(u.code!==Ye.NODE_ERROR_CODES.ENOENT)throw u;try{s=await qe.realpath(pe.join(gt.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(rP);let i=pe.join(rP,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(pe.join(s,"node_modules"))}),nP.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(v6,"packageComponent");async function B6(e){e.project&&(e.project=pe.parse(e.project).name);let t=ns.deployComponentValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(wt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=pe.join(r,n),i="file:"+o,await qe.ensureDir(o);let f=N6.from(Buffer.from(s,"base64"));await new Promise((h,p)=>{f.pipe(nP.extract(o,{finish:h})).on("error",p)});let E=await qe.readdir(o);E.length===1&&E[0]==="package"&&(await qe.copy(pe.join(o,"package"),o),await qe.remove(pe.join(o,"package")))}if(await Fu.addConfig(n,{package:i}),!s){await O6();let f=sP.get(b6.CONFIG_PARAMS.ROOTPATH);o=pe.join(f,"node_modules",n)}if(y6)return;let c=new Map;c.isWorker=!0;let u=(af(),ee(of)),_;u.setErrorReporter(f=>_=f);let l=A6(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return wt.info("Installed component"),`Successfully deployed: ${n}`}a(B6,"deployComponent");async function H6(){let e=Fu.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=pe.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:pe.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(u){return wt.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),n=await r(gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{name:gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT).split(pe.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(pe.join(gt.get(Ye.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(af(),ee(of)).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(H6,"getComponents");async function x6(e){let t=ns.getComponentFileValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let n=Fu.getConfigObj()[e.project]||e.project==="harperdb"?pe.join(sP.get(Ye.CONFIG_PARAMS.ROOTPATH),"node_modules"):gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await qe.stat(pe.join(n,e.project,e.file));return{message:await qe.readFile(pe.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 '${pe.join(e.project,e.file)}'`):i}}a(x6,"getComponentFile");async function q6(e){let t=ns.setComponentFileValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=pe.join(gt.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(q6,"setComponentFile");async function F6(e){let t=ns.dropComponentFileValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=e.file?pe.join(e.project,e.file):e.project,n=pe.join(gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),r);return await qe.pathExists(n)&&await qe.remove(n),Fu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(F6,"dropComponent");iP.exports={customFunctionsStatus:w6,getCustomFunctions:C6,getCustomFunction:L6,setCustomFunction:D6,dropCustomFunction:M6,addComponent:U6,dropCustomFunctionProject:P6,packageComponent:v6,deployComponent:B6,getComponents:H6,getComponentFile:x6,setComponentFile:q6,dropComponent:F6}});var kT=T((yfe,aP)=>{"use strict";var ss=require("joi"),oP=et();aP.exports={readTransactionLogValidator:G6,deleteTransactionLogsBeforeValidator:k6};function G6(e){let t=ss.object({schema:ss.string().required(),table:ss.string().required(),from:ss.date().timestamp(),to:ss.date().timestamp(),limit:ss.number().min(1)});return oP.validateBySchema(e,t)}a(G6,"readTransactionLogValidator");function k6(e){let t=ss.object({schema:ss.string().required(),table:ss.string().required(),timestamp:ss.date().timestamp().required()});return oP.validateBySchema(e,t)}a(k6,"deleteTransactionLogsBeforeValidator")});var uf=T((wfe,dP)=>{"use strict";var VT=M(),cf=St(),cP=J(),uP=j(),lP=gs(),{handleHDBError:Oa,hdb_errors:V6}=Z(),{HTTP_STATUS_CODES:ba}=V6,{readTransactionLogValidator:$6,deleteTransactionLogsBeforeValidator:Y6}=kT(),_P="This operation relies on clustering and cannot run with it disable.",K6="Logs successfully deleted from transaction log.",W6="All logs successfully deleted from transaction log.";dP.exports={readTransactionLog:Q6,deleteTransactionLogsBefore:z6};async function*Q6(e){let t=$6(e);if(t)throw Oa(t,t.message,ba.BAD_REQUEST,void 0,void 0,!0);if(!uP.get(VT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Oa(new Error,_P,ba.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=cP.checkSchemaTableExist(r,n);if(s)throw Oa(new Error,s,ba.NOT_FOUND,void 0,void 0,!0);let i=lP.createNatsTableStreamName(r,n),o=await cf.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===VT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(Q6,"readTransactionLog");async function z6(e){let t=Y6(e);if(t)throw Oa(t,t.message,ba.BAD_REQUEST,void 0,void 0,!0);if(!uP.get(VT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Oa(new Error,_P,ba.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=cP.checkSchemaTableExist(r,n);if(i)throw Oa(new Error,i,ba.NOT_FOUND,void 0,void 0,!0);let o=lP.createNatsTableStreamName(r,n),{jsm:c}=await cf.getNATSReferences(),u=await cf.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let l=K6,d,f=new Date(u.state.last_ts).getTime();return s>f?(d=u.state.last_seq+1,l=W6):d=(await cf.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(z6,"deleteTransactionLogsBefore")});var EP=T((Lfe,fP)=>{"use strict";var $T=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}};fP.exports=$T});var mP=T((Mfe,hP)=>{"use strict";var YT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};hP.exports=YT});var WT=T((Pfe,SP)=>{"use strict";var pP=EP(),J6=mP(),{HDB_ERROR_MSGS:X6}=Ir(),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 pP(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let u=new J6(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 pP(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}};SP.exports=KT});var ff=T((Bfe,PP)=>{"use strict";var QT=rn(),lf=tn(),ln=ld(),Vu=xi(),zT=Vi(),j6=oS(),Z6=CL(),$u=vr(),_f=hS(),Ct=V(),e9=SS(),t9=yd(),r9=tT(),n9=wd(),s9=rT(),i9=nT(),o9=oT(),a9=cT(),JT=_T(),Us=J(),c9=yM(),XT=mT(),RP=Yd(),un=M(),AP=yU(),u9=la(),OP=hu(),bP=(Xd(),ee(vu)),NP=Lr(),Vr=GT(),l9=require("alasql"),yP=uf(),IP=rf(),wP=WT(),{handleHDBError:Sr,hdb_errors:CP}=Z(),{HDB_ERROR_MSGS:Vt,HTTP_STATUS_CODES:Gu}=CP,F=new Map,LP="delete",mi="insert",Ps="read",fo="update",ku="describe",TP=Vu.describeSchema.name,gP=Vu.describeTable.name,DP={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},_9="catchup",d9="handleGetJob",f9="handleGetJobsByStartDate",df={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},E9=[ln.createTable.name,ln.createAttribute.name,ln.dropTable.name,ln.dropAttribute.name],MP={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},$=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};F.set(QT.insert.name,new $(!1,[mi]));F.set(QT.update.name,new $(!1,[fo]));F.set(QT.upsert.name,new $(!1,[mi,fo]));F.set(lf.searchByConditions.name,new $(!1,[Ps]));F.set(lf.searchByHash.name,new $(!1,[Ps]));F.set(lf.searchByValue.name,new $(!1,[Ps]));F.set(lf.search.name,new $(!1,[Ps]));F.set(ln.createSchema.name,new $(!0,[]));F.set(ln.createTable.name,new $(!0,[]));F.set(ln.createAttribute.name,new $(!1,[mi]));F.set(ln.dropSchema.name,new $(!0,[]));F.set(ln.dropTable.name,new $(!0,[]));F.set(ln.dropAttribute.name,new $(!0,[]));F.set(Vu.describeSchema.name,new $(!1,[Ps]));F.set(Vu.describeTable.name,new $(!1,[Ps]));F.set(zT.deleteRecord.name,new $(!1,[LP]));F.set($u.addUser.name,new $(!0,[]));F.set($u.alterUser.name,new $(!0,[]));F.set($u.dropUser.name,new $(!0,[]));F.set($u.listUsersExternal.name,new $(!0,[]));F.set(_f.listRoles.name,new $(!0,[]));F.set(_f.addRole.name,new $(!0,[]));F.set(_f.alterRole.name,new $(!0,[]));F.set(_f.dropRole.name,new $(!0,[]));F.set(e9.name,new $(!0,[]));F.set(t9.name,new $(!0,[]));F.set(r9.name,new $(!0,[]));F.set(n9.name,new $(!0,[]));F.set(s9.name,new $(!0,[]));F.set(i9.name,new $(!0,[]));F.set(JT.setRoutes.name,new $(!0,[]));F.set(JT.getRoutes.name,new $(!0,[]));F.set(JT.deleteRoutes.name,new $(!0,[]));F.set(NP.setConfiguration.name,new $(!0,[]));F.set(o9.clusterStatus.name,new $(!0,[]));F.set(a9.name,new $(!0,[]));F.set(XT.getFingerprint.name,new $(!0,[]));F.set(XT.setLicense.name,new $(!0,[]));F.set(zT.deleteFilesBefore.name,new $(!0,[]));F.set(zT.deleteAuditLogsBefore.name,new $(!0,[]));F.set(RP.restart.name,new $(!0,[]));F.set(RP.restartService.name,new $(!0,[]));F.set(j6.name,new $(!0,[]));F.set(Z6.name,new $(!0,[Ps]));F.set(u9.systemInformation.name,new $(!0,[]));F.set(NP.getConfiguration.name,new $(!0,[]));F.set(yP.readTransactionLog.name,new $(!0,[]));F.set(yP.deleteTransactionLogsBefore.name,new $(!0,[]));F.set(IP.installModules.name,new $(!0,[]));F.set(IP.auditModules.name,new $(!0,[]));F.set(OP.createTokens.name,new $(!1,[]));F.set(OP.refreshOperationToken.name,new $(!1,[]));F.set(bP.login.name,new $(!1,[]));F.set(bP.logout.name,new $(!1,[]));F.set(Vr.customFunctionsStatus.name,new $(!0,[]));F.set(Vr.getCustomFunctions.name,new $(!0,[]));F.set(Vr.getComponents.name,new $(!0,[]));F.set(Vr.getComponentFile.name,new $(!0,[]));F.set(Vr.setComponentFile.name,new $(!0,[]));F.set(Vr.dropComponent.name,new $(!0,[]));F.set(Vr.getCustomFunction.name,new $(!0,[]));F.set(Vr.setCustomFunction.name,new $(!0,[]));F.set(Vr.dropCustomFunction.name,new $(!0,[]));F.set(Vr.addComponent.name,new $(!0,[]));F.set(Vr.dropCustomFunctionProject.name,new $(!0,[]));F.set(Vr.packageComponent.name,new $(!0,[]));F.set(Vr.deployComponent.name,new $(!0,[]));F.set(XT.getRegistrationInfo.name,new $(!1,[]));F.set($u.userInfo.name,new $(!1,[]));F.set(Vu.describeAll.name,new $(!1,[]));F.set(d9,new $(!1,[]));F.set(f9,new $(!0,[]));F.set(_9,new $(!0,[]));F.set(df.CSV_DATA_LOAD,new $(!1,[mi,fo]));F.set(df.CSV_URL_LOAD,new $(!1,[mi,fo]));F.set(df.CSV_FILE_LOAD,new $(!1,[mi,fo]));F.set(df.IMPORT_FROM_S3,new $(!1,[mi,fo]));F.set(MP.EXPORT_TO_S3,new $(!0,[]));F.set(MP.EXPORT_LOCAL,new $(!0,[]));F.set(un.VALID_SQL_OPS_ENUM.DELETE,new $(!1,[LP]));F.set(un.VALID_SQL_OPS_ENUM.SELECT,new $(!1,[Ps]));F.set(un.VALID_SQL_OPS_ENUM.INSERT,new $(!1,[mi]));F.set(un.VALID_SQL_OPS_ENUM.UPDATE,new $(!1,[fo]));PP.exports={verifyPerms:m9,verifyPermsAst:h9,verifyBulkLoadAttributePerms:S9};function h9(e,t,r){if(Us.isEmptyOrZeroLength(e))throw Ct.info("verify_perms_ast has an empty user parameter"),Sr(new Error);if(Us.isEmptyOrZeroLength(t))throw Ct.info("verify_perms_ast has an empty user parameter"),Sr(new Error);if(Us.isEmptyOrZeroLength(r))throw Ct.info("verify_perms_ast has a null operation parameter"),Sr(new Error);try{let n=new wP,s=new c9(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Ct.info("No schemas defined in verifyPermsAst(), will not continue."),Sr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&DP[r])throw Sr(new Error,Vt.DROP_SYSTEM,Gu.FORBIDDEN);if(c&&!u)return null;let _=AP.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof l9.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=UP(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]);jT(h,p,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw Sr(n)}}a(h9,"verifyPermsAst");function m9(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Ct.info("null required parameter in verifyPerms"),Sr(new Error,Vt.DEFAULT_INVALID_REQUEST,Gu.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 wP;if(Us.isEmptyOrZeroLength(e.hdb_user.role)||Us.isEmptyOrZeroLength(e.hdb_user.role.permission))return Ct.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Vt.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(un.SYSTEM_SCHEMA_NAME)||s===un.SYSTEM_SCHEMA_NAME;if(l&&DP[r])throw Sr(new Error,Vt.DROP_SYSTEM,Gu.FORBIDDEN);if(u&&!l||_===!0&&(r===ln.createSchema.name||r===ln.dropSchema.name))return null;if(E9.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=AP.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===TP||r===gP){if(s===un.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Vt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===TP&&(!d[s]||!d[s][ku]))return c.handleInvalidItem(Vt.SCHEMA_NOT_FOUND(s));if(r===gP&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][ku]))return c.handleInvalidItem(Vt.TABLE_NOT_FOUND(s,i))}}let f=UP(e.hdb_user,r,o,c,n);if(f)return f;if(F.get(r)&&F.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&un.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[s].tables[i];S[un.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(I=>I[un.PERMS_CRUD_ENUM.READ]).forEach(I=>{p.push(I.attribute_name)}):p=global.hdb_schema[s][i].attributes.map(A=>A.attribute),e.get_attributes=p)}let E=p9(e),h=ZT(e.hdb_user.role.permission,s,i);return jT(E,h,r,i,s,c,n),c.getPermsResponse()}a(m9,"verifyPerms");function UP(e,t,r,n,s){if(Us.arrayHasEmptyValues([e,t,r]))throw Ct.info("hasPermissions has an invalid parameter"),Sr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||F.get(t).requires_su))return null;if(!F.get(t))throw Ct.info(`operation ${t} not found.`),Sr(new Error,Vt.OP_NOT_FOUND(t),Gu.BAD_REQUEST);if(F.get(t)&&F.get(t).requires_su)return Ct.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Vt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][ku]===!1){n.addInvalidItem(Vt.SCHEMA_NOT_FOUND(u));continue}}catch{n.addInvalidItem(Vt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[ku]===!1)n.addInvalidItem(Vt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=F.get(t).perms;!Us.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)&&(Ct.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=Vt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw Ct.error(E),Ct.error(f),Sr(CP.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(UP,"hasPermissions");function jT(e,t,r,n,s,i,o){if(!e||!t)throw Ct.info("no attributes specified in checkAttributePerms."),Sr(new Error);let c=F.get(r).perms;if(!c||c==="")throw Ct.info(`no permissions found for ${r} in checkAttributePerms().`),Sr(new Error);if(Us.isEmptyOrZeroLength(t))return Ct.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[ku]===!1){i.addInvalidItem(Vt.ATTR_NOT_FOUND(s,n,l),s,n);continue}if(c)for(let f of c){if(un.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Ps)throw Sr(new Error,Vt.SYSTEM_TIMESTAMP_PERMS_ERR,Gu.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Vt.ATTR_NOT_FOUND(s,n,l),s,n)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,s,n,u)}a(jT,"checkAttributePerms");function p9(e){let t=new Set;try{if(e.action)return t;if(e.operation===un.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){Ct.info(r)}return t}a(p9,"getRecordAttributes");function ZT(e,t,r){let n=new Map;if(Us.isEmpty(e))return Ct.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{Ct.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(ZT,"getAttributePermissions");function S9(e,t,r,n,s,i,o){let c=new Set(i),u=ZT(e,n,s);jT(c,u,t,s,n,o,r)}a(S9,"verifyBulkLoadAttributePerms")});var hf=T((xfe,qP)=>{"use strict";qP.exports={evaluateSQL:D9,processAST:xP,convertSQLToAST:HP,checkASTPermissions:BP};var T9=rn(),vP=require("util"),g9=vP.callbackify(T9.insert),R9=tn().search,A9=RC().update,O9=vP.callbackify(A9),b9=OC().convertDelete,pi=require("alasql"),N9=ff(),Ef=V(),y9=X_(),I9=J(),Yu=M(),{hdb_errors:w9,handleHDBError:eg}=Z(),{HTTP_STATUS_CODES:tg}=w9;y9(pi);var C9=403,L9="There was a problem performing this insert. Please check the logs and try again.",rg=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function D9(e,t){let r=e.parsed_sql_object;if(!r){r=HP(e.sql);let n,s=r.ast.statements[0];if(s instanceof pi.yy.Insert?n=s.into.databaseid:s instanceof pi.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof pi.yy.Update||s instanceof pi.yy.Delete?n=s.table.databaseid:Ef.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof pi.yy.Select)&&I9.isEmptyOrZeroLength(n))return t("No schema specified",null)}xP(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(D9,"evaluateSQL");function BP(e,t){let r;try{r=N9.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(BP,"checkASTPermissions");function HP(e){let t=new rg;if(!e)throw eg(new Error,"The 'sql' parameter is missing from the request body",tg.BAD_REQUEST);try{let r=e.trim(),n=pi.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
17
- `);throw n[1]?eg(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,tg.BAD_REQUEST):eg(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",tg.BAD_REQUEST)}return t}a(HP,"convertSQLToAST");function xP(e,t,r){try{let n=M9;if(!e.bypass_auth&&!t.permissions_checked){let i=BP(e,t);if(i&&i.length>0)return r(C9,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Yu.VALID_SQL_OPS_ENUM.SELECT:n=R9,s=t.ast.statements[0];break;case Yu.VALID_SQL_OPS_ENUM.INSERT:n=U9;break;case Yu.VALID_SQL_OPS_ENUM.UPDATE:n=O9;break;case Yu.VALID_SQL_OPS_ENUM.DELETE:n=b9;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(xP,"processAST");function M9(e,t){Ef.info(e),t("unknown sql statement")}a(M9,"nullFunction");function U9({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=P9(i,e.values)}catch(o){return r(o)}g9(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Ef.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(U9,"convertInsert");function P9(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]]=pi.compile(`SELECT ${s.toString()} AS [${Yu.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Ef.error(r),new Error(L9)}}a(P9,"createDataObjects")});var ng=T((Ffe,GP)=>{"use strict";var{S3:v9,GetObjectCommand:B9}=require("@aws-sdk/client-s3");GP.exports={getFileStreamFromS3:H9,getS3AuthObj:FP};async function H9(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await FP(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new B9(r))).Body}a(H9,"getFileStreamFromS3");function FP(e,t,r){return new v9({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(FP,"getS3AuthObj")});var mf=T((kfe,JP)=>{"use strict";var ig=tn(),x9=hf(),q9=ng(),{AsyncParser:F9,Transform:G9}=require("json2csv"),Wu=require("stream"),$r=J(),sg=require("fs-extra"),k9=require("path"),_n=V(),{promisify:$P}=require("util"),Ku=J(),{handleHDBError:Rt,hdb_errors:V9}=Z(),{HDB_ERROR_MSGS:Tr,HTTP_STATUS_CODES:At}=V9,{streamAsJSON:$9}=(Ch(),ee(rb)),{Upload:Y9}=require("@aws-sdk/lib-storage"),kP=["search_by_value","search_by_hash","sql","search_by_conditions"],VP=["json","csv"],YP="json",KP="csv",K9="Successfully exported JSON locally.",W9="Successfully exported CSV locally.",Q9=1e3,z9=ig.searchByHash,J9=ig.searchByValue,X9=$P(x9.evaluateSQL),j9=$P(Wu.finished);JP.exports={export_to_s3:r7,export_local:Z9,toCsvStream:WP};async function Z9(e){_n.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=QP(e);if(!$r.isEmpty(t))throw _n.error(t),Rt(new Error,t,At.BAD_REQUEST,void 0,void 0,!0);if($r.isEmpty(e.path))throw _n.error(Tr.MISSING_VALUE("path")),Rt(new Error,Tr.MISSING_VALUE("path"),At.BAD_REQUEST,void 0,void 0,!0);let r=($r.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(k9.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=$r.buildFolderPath(e.path,r);await e7(e.path);let s=await zP(e);return await t7(n,e.format,s)}a(Z9,"export_local");async function e7(e){if(_n.trace("in confirmPath"),$r.isEmptyOrZeroLength(e))throw Rt(new Error,`Invalid path: ${e}`,At.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await sg.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,_n.error(n),Rt(new Error,n,At.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 _n.error(r),Rt(new Error,r,At.BAD_REQUEST,void 0,void 0,!0)}return!0}a(e7,"confirmPath");async function t7(e,t,r){if(_n.trace("in saveToLocal"),Ku.isEmptyOrZeroLength(e))throw Rt(new Error,Tr.INVALID_VALUE("file_path"),At.BAD_REQUEST,void 0,void 0,!0);if(Ku.isEmptyOrZeroLength(t))throw Rt(new Error,Tr.INVALID_VALUE("Source format"),At.BAD_REQUEST,void 0,void 0,!0);if(Ku.isEmpty(r))throw Rt(new Error,Tr.NOT_FOUND("Data"),At.BAD_REQUEST,void 0,void 0,!0);if(t===YP){let n=sg.createWriteStream(e);return $9(r).pipe(n),await j9(n),{message:K9,path:e}}else if(t===KP){let n=sg.createWriteStream(e),s=Wu.Readable.from(r),i={},o={objectMode:!0};return await new F9(i,o).fromInput(s).toOutput(n).promise(!1),{message:W9,path:e}}throw Rt(new Error,Tr.INVALID_VALUE("format"),At.BAD_REQUEST)}a(t7,"saveToLocal");async function r7(e){if(!e.s3||Object.keys(e.s3).length===0)throw Rt(new Error,Tr.MISSING_VALUE("S3 object"),At.BAD_REQUEST);if($r.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Rt(new Error,Tr.MISSING_VALUE("aws_access_key_id"),At.BAD_REQUEST);if($r.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Rt(new Error,Tr.MISSING_VALUE("aws_secret_access_key"),At.BAD_REQUEST);if($r.isEmptyOrZeroLength(e.s3.bucket))throw Rt(new Error,Tr.MISSING_VALUE("bucket"),At.BAD_REQUEST);if($r.isEmptyOrZeroLength(e.s3.key))throw Rt(new Error,Tr.MISSING_VALUE("key"),At.BAD_REQUEST);if($r.isEmptyOrZeroLength(e.s3.region))throw Rt(new Error,Tr.MISSING_VALUE("region"),At.BAD_REQUEST);let t=QP(e);if(!$r.isEmpty(t))throw Rt(new Error,t,At.BAD_REQUEST);_n.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await zP(e)}catch(u){throw _n.error(u),u}let n,s=await q9.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Wu.PassThrough;if(e.format===KP){i=e.s3.key+".csv";let u=WP(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===YP){i=e.s3.key+".json";let u=new Wu.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%Q9===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw Rt(new Error,Tr.INVALID_VALUE("format"),At.BAD_REQUEST);return new Y9({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(r7,"export_to_s3");function WP(e){let t=Wu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},n={objectMode:!0},s=new G9(r,n);return t.pipe(s)}a(WP,"toCsvStream");function QP(e){if(_n.trace("in exportCoreValidation"),$r.isEmpty(e.format))return"format missing";if(VP.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${VP.join(", ")}`;let t=e.search_operation.operation;if($r.isEmpty(t))return"search_operation.operation missing";if(kP.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${kP.join(", ")}`}a(QP,"exportCoreValidation");async function zP(e){_n.trace("in getRecords");let t,r;if(Ku.isEmpty(e.search_operation)||Ku.isEmptyOrZeroLength(e.search_operation.operation))throw Rt(new Error,Tr.INVALID_VALUE("Search operation"),At.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=J9;break;case"search_by_hash":t=z9;break;case"search_by_conditions":t=ig.searchByConditions;break;case"sql":t=X9;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,_n.error(r),Rt(new Error,r,At.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(zP,"getRecords")});var nv={};Ve(nv,{contentTypes:()=>lg,findBestSerializer:()=>Sf,getDeserializer:()=>ho,registerContentHandlers:()=>_g,serialize:()=>Tf,serializeMessage:()=>hi});function n7(e){try{return e?.[0]===123?ug(e):e}catch{return e}}function _g(e){e.register(i7,{serializers:[{regex:/^application\/json$/,serializer:mc},{regex:/^application\/cbor$/,serializer:function(t){return new Eo.EncoderStream(zu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?pf.Readable.from((0,is.encodeIter)(t,zu)):(0,is.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,og.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,is.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Eo.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function Sf(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=$t.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($t.keys()).join(", "))}};n=$t.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function Tf(e,t,r){let n=jP&&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=Sf(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);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,vs.createBrotliCompress)({params:{[vs.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?vs.constants.BROTLI_MODE_TEXT:vs.constants.BROTLI_MODE_GENERIC,[vs.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e)}return n&&s?.length>jP?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,vs.brotliCompress)(s,(c,u)=>{c?o(c):i(u)}))):s}function hi(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=Sf(t);return r=t.serialize=n.serializer.serialize,r(e)}function o7(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 ho(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=$t.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=$t.get(e)?.deserialize||ZP(e,n);return o=>o7(o).then(i)}return e&&$t.get(e)?.deserialize||ZP(e,n)}function ZP(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 ug(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function a7(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 og,is,Eo,vs,pf,ev,ag,cg,tv,Qu,ug,zu,$t,lg,XP,rv,s7,i7,jP,Sa=Ae(()=>{Ch();og=v(mf()),is=require("msgpackr"),Eo=require("cbor-x"),vs=require("zlib"),pf=require("stream");nr();ev=require("../../index"),ag=v(j()),cg=v(M()),tv=ag.default.get(cg.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,Qu=tv?Mi:JSON.stringify,ug=tv?wh:JSON.parse,zu={useRecords:!1,useToJSON:!0},$t=new Map,lg=$t;lt.contentTypes=lg;(0,ev._assignPackageExport)("contentTypes",lg);$t.set("application/json",{serializeStream:mc,serialize:Qu,deserialize:ug,q:.8});XP=new Eo.Encoder(zu);$t.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Eo.EncoderStream(zu).end(e)},serialize:XP.encode,deserialize:XP.decode,q:1});$t.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?pf.Readable.from((0,is.encodeIter)(e,zu)):(0,is.pack)(e)},serialize:is.pack,deserialize:is.unpack,q:.9});$t.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,og.toCsvStream)(e)},q:.1});$t.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});$t.set("text/event-stream",{serializeStream:function(e){return pf.Readable.from(a7(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=yP(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 Oa.info(`finished installModules with response ${i}`),i}a(o9,"installModules");function yP(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(yP,"parseNPMStdErr");async function a9(e){Oa.info(`starting auditModules for request: ${e}`);let t=IP(e);if(t)throw Ra(t,t.message,Aa.BAD_REQUEST);let{projects:r}=e;await Ef(),await NP(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=ff.join(XT,o);n[o]={npm_output:null,npm_error:null};try{let u=await Vu("npm audit --json",c);n[o].npm_output=JSON.parse(u)}catch(u){n[o].npm_error=yP(u.stderr)}}return Oa.info(`finished auditModules with response ${n}`),n}a(a9,"auditModules");async function Ef(){try{return await Vu("npm -v"),!0}catch{throw Ra(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Aa.BAD_REQUEST,void 0,void 0,!0)}}a(Ef,"checkNPMInstalled");async function NP(e){if(!Array.isArray(e)||e.length===0)throw Ra(new Error,"projects argument must be an array with at least 1 element",Aa.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=ff.join(XT,i.toString());if(!await AP.pathExists(o)){t.push(i);continue}let u=ff.join(o,"package.json");await AP.pathExists(u)||r.push(i)}if(t.length>0)throw Ra(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Aa.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Ra(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Aa.BAD_REQUEST,void 0,void 0,!0)}a(NP,"checkProjectPaths");function IP(e){let t=df.object({projects:df.array().min(1).items(df.string()).required(),dry_run:df.boolean().default(!1)});return t9.validateBySchema(e,t)}a(IP,"modulesValidator")});var eg=g((cEe,UP)=>{"use strict";var ba=require("fs-extra"),ZT=require("path"),mf=K(),CP=Q(),pf=U(),MP=re(),c9=Cr();UP.exports=u9;async function u9(){let e=l9(),t=MP.get(pf.CONFIG_PARAMS.ROOTPATH),r=ZT.join(t,"package.json"),n={dependencies:{harperdb:"file:"+pf.PACKAGE_ROOT}},s=ZT.join(t,"node_modules");await ba.ensureDir(s);let i,o=!0,c=!1;try{i=await ba.readJson(r)}catch(u){if(CP.isEmptyOrZeroLength(e))return;if(u.code!==pf.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!CP.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await DP(_);n.dependencies[u]=l+_}if(!o){mf.notify("Installing components"),await LP(r,n,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await DP(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)n.dependencies[u]===void 0&&(mf.notify("Removing component",u),c=!0);c&&(mf.notify("Updating components."),await LP(r,n,i))}a(u9,"installComponents");function l9(){let e=c9.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(l9,"getComponentsConfig");async function DP(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":ZT.extname(e)||await ba.pathExists(e)?"file:":"github:"}a(DP,"getPkgPrefix");async function LP(e,t,r){mf.trace("npm installing components package.json",t),await ba.writeFile(e,JSON.stringify(t,null," "));try{await hf().installAllRootModules(MP.get(pf.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await ba.writeFile(e,JSON.stringify(r,null," ")):await ba.unlink(e),n}}a(LP,"installPackages")});var ng=g((_Ee,HP)=>{"use strict";var qe=require("fs-extra"),tg=require("fast-glob"),pe=require("path"),vP=require("tar-fs"),lEe=require("uuid").v4,rg=require("normalize-path"),ss=RP(),yt=K(),Ke=U(),mt=re(),$u=Cr(),_9=Q(),{PACKAGE_ROOT:d9}=U(),{handleHDBError:Pt,hdb_errors:f9}=ne(),{basename:E9}=require("path"),h9=eg(),BP=re(),m9=U(),{Readable:p9}=require("stream"),{isMainThread:S9}=require("worker_threads"),{HDB_ERROR_MSGS:Eo,HTTP_STATUS_CODES:vt}=f9,T9=pe.join(d9,"application-template"),PP=pe.join(mt.get(Ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function g9(){yt.trace("getting custom api status");let e={};try{e={port:mt.get(Ke.CONFIG_PARAMS.HTTP_PORT),directory:mt.get(Ke.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Pt(new Error,Eo.FUNCTION_STATUS,vt.INTERNAL_SERVER_ERROR,yt.ERR,t)}return e}a(g9,"customFunctionsStatus");function R9(){yt.trace("getting custom api endpoints");let e={},t=mt.get(Ke.CONFIG_PARAMS.COMPONENTSROOT);try{tg.sync(rg(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:tg.sync(rg(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:tg.sync(rg(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Pt(new Error,Eo.GET_FUNCTIONS,vt.INTERNAL_SERVER_ERROR,yt.ERR,r)}return e}a(R9,"getCustomFunctions");function A9(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=ss.getDropCustomFunctionValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);yt.trace("getting custom api endpoint file content");let r=mt.get(Ke.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=pe.join(r,n,s,i+".js");try{return qe.readFileSync(o,{encoding:"utf8"})}catch(c){throw Pt(new Error,Eo.GET_FUNCTION,vt.INTERNAL_SERVER_ERROR,yt.ERR,c)}}a(A9,"getCustomFunction");function O9(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=ss.setCustomFunctionValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);yt.trace("setting custom function file content");let r=mt.get(Ke.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return qe.outputFileSync(pe.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Pt(new Error,Eo.SET_FUNCTION,vt.INTERNAL_SERVER_ERROR,yt.ERR,c)}}a(O9,"setCustomFunction");function b9(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=ss.getDropCustomFunctionValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);yt.trace("dropping custom function file");let r=mt.get(Ke.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return qe.unlinkSync(pe.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Pt(new Error,Eo.DROP_FUNCTION,vt.INTERNAL_SERVER_ERROR,yt.ERR,o)}}a(b9,"dropCustomFunction");function y9(e){e.project&&(e.project=pe.parse(e.project).name);let t=ss.addComponentValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);yt.trace("adding component");let r=mt.get(Ke.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=pe.join(r,n);return qe.mkdirSync(s,{recursive:!0}),qe.copySync(T9,s),`Successfully added project: ${n}`}catch(s){throw Pt(new Error,Eo.ADD_FUNCTION,vt.INTERNAL_SERVER_ERROR,yt.ERR,s)}}a(y9,"addComponent");function N9(e){e.project&&(e.project=pe.parse(e.project).name);let t=ss.dropCustomFunctionProjectValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);yt.trace("dropping custom function project");let r=mt.get(Ke.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=mt.get(Ke.CONFIG_PARAMS.APPS);if(!_9.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 $u.updateConfigValue(Ke.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=pe.join(r,n);return qe.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Pt(new Error,Eo.DROP_FUNCTION_PROJECT,vt.INTERNAL_SERVER_ERROR,yt.ERR,i)}}a(N9,"dropCustomFunctionProject");async function I9(e){e.project&&(e.project=pe.parse(e.project).name);let t=ss.packageComponentValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=mt.get(Ke.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;yt.trace("packaging component",n);let s;try{s=await qe.realpath(pe.join(r,n))}catch(u){if(u.code!==Ke.NODE_ERROR_CODES.ENOENT)throw u;try{s=await qe.realpath(pe.join(mt.get(Ke.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===Ke.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await qe.ensureDir(PP);let i=pe.join(PP,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(pe.join(s,"node_modules"))}),vP.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(I9,"packageComponent");async function w9(e){e.project&&(e.project=pe.parse(e.project).name);let t=ss.deployComponentValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=mt.get(Ke.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(yt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=pe.join(r,n),i="file:"+o,await qe.ensureDir(o);let f=p9.from(Buffer.from(s,"base64"));await new Promise((h,p)=>{f.pipe(vP.extract(o,{finish:h})).on("error",p)});let E=await qe.readdir(o);E.length===1&&E[0]==="package"&&(await qe.copy(pe.join(o,"package"),o),await qe.remove(pe.join(o,"package")))}if(await $u.addConfig(n,{package:i}),!s){await h9();let f=BP.get(m9.CONFIG_PARAMS.ROOTPATH);o=pe.join(f,"node_modules",n)}if(S9)return;let c=new Map;c.isWorker=!0;let u=(Tf(),se(Sf)),_;u.setErrorReporter(f=>_=f);let l=E9(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return yt.info("Installed component"),`Successfully deployed: ${n}`}a(w9,"deployComponent");async function C9(){let e=$u.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=pe.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:pe.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(u){return yt.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),n=await r(mt.get(Ke.CONFIG_PARAMS.COMPONENTSROOT),{name:mt.get(Ke.CONFIG_PARAMS.COMPONENTSROOT).split(pe.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(pe.join(mt.get(Ke.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(Tf(),se(Sf)).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(C9,"getComponents");async function D9(e){let t=ss.getComponentFileValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let n=$u.getConfigObj()[e.project]||e.project==="harperdb"?pe.join(BP.get(Ke.CONFIG_PARAMS.ROOTPATH),"node_modules"):mt.get(Ke.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await qe.stat(pe.join(n,e.project,e.file));return{message:await qe.readFile(pe.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Ke.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${pe.join(e.project,e.file)}'`):i}}a(D9,"getComponentFile");async function L9(e){let t=ss.setComponentFileValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=pe.join(mt.get(Ke.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(L9,"setComponentFile");async function M9(e){let t=ss.dropComponentFileValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=e.file?pe.join(e.project,e.file):e.project,n=pe.join(mt.get(Ke.CONFIG_PARAMS.COMPONENTSROOT),r);return await qe.pathExists(n)&&await qe.remove(n),$u.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(M9,"dropComponent");HP.exports={customFunctionsStatus:g9,getCustomFunctions:R9,getCustomFunction:A9,setCustomFunction:O9,dropCustomFunction:b9,addComponent:y9,dropCustomFunctionProject:N9,packageComponent:I9,deployComponent:w9,getComponents:C9,getComponentFile:D9,setComponentFile:L9,dropComponent:M9}});var sg=g((fEe,GP)=>{"use strict";var is=require("joi"),xP=Xe();GP.exports={readTransactionLogValidator:U9,deleteTransactionLogsBeforeValidator:P9};function U9(e){let t=is.object({schema:is.string().required(),table:is.string().required(),from:is.date().timestamp(),to:is.date().timestamp(),limit:is.number().min(1)});return xP.validateBySchema(e,t)}a(U9,"readTransactionLogValidator");function P9(e){let t=is.object({schema:is.string().required(),table:is.string().required(),timestamp:is.date().timestamp().required()});return xP.validateBySchema(e,t)}a(P9,"deleteTransactionLogsBeforeValidator")});var Rf=g((hEe,$P)=>{"use strict";var ig=U(),gf=Et(),FP=Q(),qP=re(),kP=Ts(),{handleHDBError:ya,hdb_errors:v9}=ne(),{HTTP_STATUS_CODES:Na}=v9,{readTransactionLogValidator:B9,deleteTransactionLogsBeforeValidator:H9}=sg(),VP="This operation relies on clustering and cannot run with it disable.",x9="Logs successfully deleted from transaction log.",G9="All logs successfully deleted from transaction log.";$P.exports={readTransactionLog:F9,deleteTransactionLogsBefore:q9};async function*F9(e){let t=B9(e);if(t)throw ya(t,t.message,Na.BAD_REQUEST,void 0,void 0,!0);if(!qP.get(ig.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ya(new Error,VP,Na.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=FP.checkSchemaTableExist(r,n);if(s)throw ya(new Error,s,Na.NOT_FOUND,void 0,void 0,!0);let i=kP.createNatsTableStreamName(r,n),o=await gf.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===ig.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(F9,"readTransactionLog");async function q9(e){let t=H9(e);if(t)throw ya(t,t.message,Na.BAD_REQUEST,void 0,void 0,!0);if(!qP.get(ig.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ya(new Error,VP,Na.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=FP.checkSchemaTableExist(r,n);if(i)throw ya(new Error,i,Na.NOT_FOUND,void 0,void 0,!0);let o=kP.createNatsTableStreamName(r,n),{jsm:c}=await gf.getNATSReferences(),u=await gf.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let l=x9,d,f=new Date(u.state.last_ts).getTime();return s>f?(d=u.state.last_seq+1,l=G9):d=(await gf.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(q9,"deleteTransactionLogsBefore")});var KP=g((pEe,YP)=>{"use strict";var og=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}};YP.exports=og});var QP=g((TEe,WP)=>{"use strict";var ag=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};WP.exports=ag});var ug=g((REe,JP)=>{"use strict";var zP=KP(),k9=QP(),{HDB_ERROR_MSGS:V9}=Nr(),cg=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=V9.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 zP(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let u=new k9(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 zP(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}};JP.exports=cg});var yf=g((OEe,dv)=>{"use strict";var lg=nn(),Af=Ur(),ln=gd(),Wu=Fi(),_g=Yi(),$9=yS(),Y9=aL(),Qu=vr(),Of=PS(),Nt=K(),K9=HS(),W9=xd(),Q9=mT(),z9=Fd(),J9=ST(),j9=TT(),X9=AT(),Z9=bT(),dg=IT(),Us=Q(),e7=sU(),fg=MT(),ZP=of(),un=U(),ev=sP(),t7=da(),tv=Su(),rv=(lf(),se(Gu)),nv=Cr(),kr=ng(),r7=require("alasql"),sv=Rf(),iv=hf(),ov=ug(),{handleHDBError:gr,hdb_errors:av}=ne(),{HDB_ERROR_MSGS:kt,HTTP_STATUS_CODES:Yu}=av,V=new Map,cv="delete",pi="insert",Ps="read",ho="update",Ku="describe",jP=Wu.describeSchema.name,XP=Wu.describeTable.name,uv={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},n7="catchup",s7="handleGetJob",i7="handleGetJobsByStartDate",bf={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},o7=[ln.createTable.name,ln.createAttribute.name,ln.dropTable.name,ln.dropAttribute.name],lv={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},W=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};V.set(lg.insert.name,new W(!1,[pi]));V.set(lg.update.name,new W(!1,[ho]));V.set(lg.upsert.name,new W(!1,[pi,ho]));V.set(Af.searchByConditions.name,new W(!1,[Ps]));V.set(Af.searchByHash.name,new W(!1,[Ps]));V.set(Af.searchByValue.name,new W(!1,[Ps]));V.set(Af.search.name,new W(!1,[Ps]));V.set(ln.createSchema.name,new W(!0,[]));V.set(ln.createTable.name,new W(!0,[]));V.set(ln.createAttribute.name,new W(!1,[pi]));V.set(ln.dropSchema.name,new W(!0,[]));V.set(ln.dropTable.name,new W(!0,[]));V.set(ln.dropAttribute.name,new W(!0,[]));V.set(Wu.describeSchema.name,new W(!1,[Ps]));V.set(Wu.describeTable.name,new W(!1,[Ps]));V.set(_g.deleteRecord.name,new W(!1,[cv]));V.set(Qu.addUser.name,new W(!0,[]));V.set(Qu.alterUser.name,new W(!0,[]));V.set(Qu.dropUser.name,new W(!0,[]));V.set(Qu.listUsersExternal.name,new W(!0,[]));V.set(Of.listRoles.name,new W(!0,[]));V.set(Of.addRole.name,new W(!0,[]));V.set(Of.alterRole.name,new W(!0,[]));V.set(Of.dropRole.name,new W(!0,[]));V.set(K9.name,new W(!0,[]));V.set(W9.name,new W(!0,[]));V.set(Q9.name,new W(!0,[]));V.set(z9.name,new W(!0,[]));V.set(J9.name,new W(!0,[]));V.set(j9.name,new W(!0,[]));V.set(dg.setRoutes.name,new W(!0,[]));V.set(dg.getRoutes.name,new W(!0,[]));V.set(dg.deleteRoutes.name,new W(!0,[]));V.set(nv.setConfiguration.name,new W(!0,[]));V.set(X9.clusterStatus.name,new W(!0,[]));V.set(Z9.name,new W(!0,[]));V.set(fg.getFingerprint.name,new W(!0,[]));V.set(fg.setLicense.name,new W(!0,[]));V.set(_g.deleteFilesBefore.name,new W(!0,[]));V.set(_g.deleteAuditLogsBefore.name,new W(!0,[]));V.set(ZP.restart.name,new W(!0,[]));V.set(ZP.restartService.name,new W(!0,[]));V.set($9.name,new W(!0,[]));V.set(Y9.name,new W(!0,[Ps]));V.set(t7.systemInformation.name,new W(!0,[]));V.set(nv.getConfiguration.name,new W(!0,[]));V.set(sv.readTransactionLog.name,new W(!0,[]));V.set(sv.deleteTransactionLogsBefore.name,new W(!0,[]));V.set(iv.installModules.name,new W(!0,[]));V.set(iv.auditModules.name,new W(!0,[]));V.set(tv.createTokens.name,new W(!1,[]));V.set(tv.refreshOperationToken.name,new W(!1,[]));V.set(rv.login.name,new W(!1,[]));V.set(rv.logout.name,new W(!1,[]));V.set(kr.customFunctionsStatus.name,new W(!0,[]));V.set(kr.getCustomFunctions.name,new W(!0,[]));V.set(kr.getComponents.name,new W(!0,[]));V.set(kr.getComponentFile.name,new W(!0,[]));V.set(kr.setComponentFile.name,new W(!0,[]));V.set(kr.dropComponent.name,new W(!0,[]));V.set(kr.getCustomFunction.name,new W(!0,[]));V.set(kr.setCustomFunction.name,new W(!0,[]));V.set(kr.dropCustomFunction.name,new W(!0,[]));V.set(kr.addComponent.name,new W(!0,[]));V.set(kr.dropCustomFunctionProject.name,new W(!0,[]));V.set(kr.packageComponent.name,new W(!0,[]));V.set(kr.deployComponent.name,new W(!0,[]));V.set(fg.getRegistrationInfo.name,new W(!1,[]));V.set(Qu.userInfo.name,new W(!1,[]));V.set(Wu.describeAll.name,new W(!1,[]));V.set(s7,new W(!1,[]));V.set(i7,new W(!0,[]));V.set(n7,new W(!0,[]));V.set(bf.CSV_DATA_LOAD,new W(!1,[pi,ho]));V.set(bf.CSV_URL_LOAD,new W(!1,[pi,ho]));V.set(bf.CSV_FILE_LOAD,new W(!1,[pi,ho]));V.set(bf.IMPORT_FROM_S3,new W(!1,[pi,ho]));V.set(lv.EXPORT_TO_S3,new W(!0,[]));V.set(lv.EXPORT_LOCAL,new W(!0,[]));V.set(un.VALID_SQL_OPS_ENUM.DELETE,new W(!1,[cv]));V.set(un.VALID_SQL_OPS_ENUM.SELECT,new W(!1,[Ps]));V.set(un.VALID_SQL_OPS_ENUM.INSERT,new W(!1,[pi]));V.set(un.VALID_SQL_OPS_ENUM.UPDATE,new W(!1,[ho]));dv.exports={verifyPerms:c7,verifyPermsAst:a7,verifyBulkLoadAttributePerms:l7};function a7(e,t,r){if(Us.isEmptyOrZeroLength(e))throw Nt.info("verify_perms_ast has an empty user parameter"),gr(new Error);if(Us.isEmptyOrZeroLength(t))throw Nt.info("verify_perms_ast has an empty user parameter"),gr(new Error);if(Us.isEmptyOrZeroLength(r))throw Nt.info("verify_perms_ast has a null operation parameter"),gr(new Error);try{let n=new ov,s=new e7(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Nt.info("No schemas defined in verifyPermsAst(), will not continue."),gr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&uv[r])throw gr(new Error,kt.DROP_SYSTEM,Yu.FORBIDDEN);if(c&&!u)return null;let _=ev.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof r7.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=_v(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=hg(t.role.permission,f,d[E]);Eg(h,p,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw gr(n)}}a(a7,"verifyPermsAst");function c7(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Nt.info("null required parameter in verifyPerms"),gr(new Error,kt.DEFAULT_INVALID_REQUEST,Yu.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 ov;if(Us.isEmptyOrZeroLength(e.hdb_user.role)||Us.isEmptyOrZeroLength(e.hdb_user.role.permission))return Nt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(kt.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(un.SYSTEM_SCHEMA_NAME)||s===un.SYSTEM_SCHEMA_NAME;if(l&&uv[r])throw gr(new Error,kt.DROP_SYSTEM,Yu.FORBIDDEN);if(u&&!l||_===!0&&(r===ln.createSchema.name||r===ln.dropSchema.name))return null;if(o7.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=ev.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===jP||r===XP){if(s===un.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(kt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===jP&&(!d[s]||!d[s][Ku]))return c.handleInvalidItem(kt.SCHEMA_NOT_FOUND(s));if(r===XP&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][Ku]))return c.handleInvalidItem(kt.TABLE_NOT_FOUND(s,i))}}let f=_v(e.hdb_user,r,o,c,n);if(f)return f;if(V.get(r)&&V.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&un.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[s].tables[i];S[un.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(b=>b[un.PERMS_CRUD_ENUM.READ]).forEach(b=>{p.push(b.attribute_name)}):p=global.hdb_schema[s][i].attributes.map(T=>T.attribute),e.get_attributes=p)}let E=u7(e),h=hg(e.hdb_user.role.permission,s,i);return Eg(E,h,r,i,s,c,n),c.getPermsResponse()}a(c7,"verifyPerms");function _v(e,t,r,n,s){if(Us.arrayHasEmptyValues([e,t,r]))throw Nt.info("hasPermissions has an invalid parameter"),gr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||V.get(t).requires_su))return null;if(!V.get(t))throw Nt.info(`operation ${t} not found.`),gr(new Error,kt.OP_NOT_FOUND(t),Yu.BAD_REQUEST);if(V.get(t)&&V.get(t).requires_su)return Nt.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(kt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Ku]===!1){n.addInvalidItem(kt.SCHEMA_NOT_FOUND(u));continue}}catch{n.addInvalidItem(kt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[Ku]===!1)n.addInvalidItem(kt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=V.get(t).perms;!Us.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)&&(Nt.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=kt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw Nt.error(E),Nt.error(f),gr(av.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(_v,"hasPermissions");function Eg(e,t,r,n,s,i,o){if(!e||!t)throw Nt.info("no attributes specified in checkAttributePerms."),gr(new Error);let c=V.get(r).perms;if(!c||c==="")throw Nt.info(`no permissions found for ${r} in checkAttributePerms().`),gr(new Error);if(Us.isEmptyOrZeroLength(t))return Nt.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[Ku]===!1){i.addInvalidItem(kt.ATTR_NOT_FOUND(s,n,l),s,n);continue}if(c)for(let f of c){if(un.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Ps)throw gr(new Error,kt.SYSTEM_TIMESTAMP_PERMS_ERR,Yu.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(kt.ATTR_NOT_FOUND(s,n,l),s,n)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,s,n,u)}a(Eg,"checkAttributePerms");function u7(e){let t=new Set;try{if(e.action)return t;if(e.operation===un.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){Nt.info(r)}return t}a(u7,"getRecordAttributes");function hg(e,t,r){let n=new Map;if(Us.isEmpty(e))return Nt.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{Nt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(hg,"getAttributePermissions");function l7(e,t,r,n,s,i,o){let c=new Set(i),u=hg(e,n,s);Eg(c,u,t,s,n,o,r)}a(l7,"verifyBulkLoadAttributePerms")});var If=g((yEe,pv)=>{"use strict";pv.exports={evaluateSQL:O7,processAST:mv,convertSQLToAST:hv,checkASTPermissions:Ev};var _7=nn(),fv=require("util"),d7=fv.callbackify(_7.insert),f7=Ur().search,E7=WC().update,h7=fv.callbackify(E7),m7=zC().convertDelete,Si=require("alasql"),p7=yf(),Nf=K(),S7=rd(),T7=Q(),zu=U(),{hdb_errors:g7,handleHDBError:mg}=ne(),{HTTP_STATUS_CODES:pg}=g7;S7(Si);var R7=403,A7="There was a problem performing this insert. Please check the logs and try again.",Sg=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function O7(e,t){let r=e.parsed_sql_object;if(!r){r=hv(e.sql);let n,s=r.ast.statements[0];if(s instanceof Si.yy.Insert?n=s.into.databaseid:s instanceof Si.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Si.yy.Update||s instanceof Si.yy.Delete?n=s.table.databaseid:Nf.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Si.yy.Select)&&T7.isEmptyOrZeroLength(n))return t("No schema specified",null)}mv(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(O7,"evaluateSQL");function Ev(e,t){let r;try{r=p7.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(Ev,"checkASTPermissions");function hv(e){let t=new Sg;if(!e)throw mg(new Error,"The 'sql' parameter is missing from the request body",pg.BAD_REQUEST);try{let r=e.trim(),n=Si.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
17
+ `);throw n[1]?mg(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,pg.BAD_REQUEST):mg(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",pg.BAD_REQUEST)}return t}a(hv,"convertSQLToAST");function mv(e,t,r){try{let n=b7;if(!e.bypass_auth&&!t.permissions_checked){let i=Ev(e,t);if(i&&i.length>0)return r(R7,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case zu.VALID_SQL_OPS_ENUM.SELECT:n=f7,s=t.ast.statements[0];break;case zu.VALID_SQL_OPS_ENUM.INSERT:n=y7;break;case zu.VALID_SQL_OPS_ENUM.UPDATE:n=h7;break;case zu.VALID_SQL_OPS_ENUM.DELETE:n=m7;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(mv,"processAST");function b7(e,t){Nf.info(e),t("unknown sql statement")}a(b7,"nullFunction");function y7({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=N7(i,e.values)}catch(o){return r(o)}d7(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Nf.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(y7,"convertInsert");function N7(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]]=Si.compile(`SELECT ${s.toString()} AS [${zu.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Nf.error(r),new Error(A7)}}a(N7,"createDataObjects")});var Tg=g((IEe,Tv)=>{"use strict";var{S3:I7,GetObjectCommand:w7}=require("@aws-sdk/client-s3");Tv.exports={getFileStreamFromS3:C7,getS3AuthObj:Sv};async function C7(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await Sv(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new w7(r))).Body}a(C7,"getFileStreamFromS3");function Sv(e,t,r){return new I7({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(Sv,"getS3AuthObj")});var wf=g((CEe,wv)=>{"use strict";var Rg=Ur(),D7=If(),L7=Tg(),{AsyncParser:M7,Transform:U7}=require("json2csv"),ju=require("stream"),Vr=Q(),gg=require("fs-extra"),P7=require("path"),_n=K(),{promisify:Av}=require("util"),Ju=Q(),{handleHDBError:pt,hdb_errors:v7}=ne(),{HDB_ERROR_MSGS:Rr,HTTP_STATUS_CODES:St}=v7,{streamAsJSON:B7}=(kh(),se(Nb)),{Upload:H7}=require("@aws-sdk/lib-storage"),gv=["search_by_value","search_by_hash","sql","search_by_conditions"],Rv=["json","csv"],Ov="json",bv="csv",x7="Successfully exported JSON locally.",G7="Successfully exported CSV locally.",F7=1e3,q7=Rg.searchByHash,k7=Rg.searchByValue,V7=Av(D7.evaluateSQL),$7=Av(ju.finished);wv.exports={export_to_s3:Q7,export_local:Y7,toCsvStream:yv};async function Y7(e){_n.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Nv(e);if(!Vr.isEmpty(t))throw _n.error(t),pt(new Error,t,St.BAD_REQUEST,void 0,void 0,!0);if(Vr.isEmpty(e.path))throw _n.error(Rr.MISSING_VALUE("path")),pt(new Error,Rr.MISSING_VALUE("path"),St.BAD_REQUEST,void 0,void 0,!0);let r=(Vr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(P7.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Vr.buildFolderPath(e.path,r);await K7(e.path);let s=await Iv(e);return await W7(n,e.format,s)}a(Y7,"export_local");async function K7(e){if(_n.trace("in confirmPath"),Vr.isEmptyOrZeroLength(e))throw pt(new Error,`Invalid path: ${e}`,St.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await gg.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,_n.error(n),pt(new Error,n,St.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 _n.error(r),pt(new Error,r,St.BAD_REQUEST,void 0,void 0,!0)}return!0}a(K7,"confirmPath");async function W7(e,t,r){if(_n.trace("in saveToLocal"),Ju.isEmptyOrZeroLength(e))throw pt(new Error,Rr.INVALID_VALUE("file_path"),St.BAD_REQUEST,void 0,void 0,!0);if(Ju.isEmptyOrZeroLength(t))throw pt(new Error,Rr.INVALID_VALUE("Source format"),St.BAD_REQUEST,void 0,void 0,!0);if(Ju.isEmpty(r))throw pt(new Error,Rr.NOT_FOUND("Data"),St.BAD_REQUEST,void 0,void 0,!0);if(t===Ov){let n=gg.createWriteStream(e);return B7(r).pipe(n),await $7(n),{message:x7,path:e}}else if(t===bv){let n=gg.createWriteStream(e),s=ju.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(l=>({label:l,value:l})));let c={objectMode:!0};return await new M7(i,c).fromInput(s).toOutput(n).promise(!1),{message:G7,path:e}}throw pt(new Error,Rr.INVALID_VALUE("format"),St.BAD_REQUEST)}a(W7,"saveToLocal");async function Q7(e){if(!e.s3||Object.keys(e.s3).length===0)throw pt(new Error,Rr.MISSING_VALUE("S3 object"),St.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw pt(new Error,Rr.MISSING_VALUE("aws_access_key_id"),St.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw pt(new Error,Rr.MISSING_VALUE("aws_secret_access_key"),St.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.bucket))throw pt(new Error,Rr.MISSING_VALUE("bucket"),St.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.key))throw pt(new Error,Rr.MISSING_VALUE("key"),St.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.region))throw pt(new Error,Rr.MISSING_VALUE("region"),St.BAD_REQUEST);let t=Nv(e);if(!Vr.isEmpty(t))throw pt(new Error,t,St.BAD_REQUEST);_n.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await Iv(e)}catch(u){throw _n.error(u),u}let n,s=await L7.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new ju.PassThrough;if(e.format===bv){i=e.s3.key+".csv";let u=yv(r,r.getColumns?.());u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===Ov){i=e.s3.key+".json";let u=new ju.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%F7===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw pt(new Error,Rr.INVALID_VALUE("format"),St.BAD_REQUEST);return new H7({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Q7,"export_to_s3");function yv(e,t){let r=ju.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 U7(n,s);return r.pipe(i)}a(yv,"toCsvStream");function Nv(e){if(_n.trace("in exportCoreValidation"),Vr.isEmpty(e.format))return"format missing";if(Rv.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Rv.join(", ")}`;let t=e.search_operation.operation;if(Vr.isEmpty(t))return"search_operation.operation missing";if(gv.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${gv.join(", ")}`}a(Nv,"exportCoreValidation");async function Iv(e){_n.trace("in getRecords");let t,r;if(Ju.isEmpty(e.search_operation)||Ju.isEmptyOrZeroLength(e.search_operation.operation))throw pt(new Error,Rr.INVALID_VALUE("Search operation"),St.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=k7;break;case"search_by_hash":t=q7;break;case"search_by_conditions":t=Rg.searchByConditions;break;case"sql":t=V7;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,_n.error(r),pt(new Error,r,St.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(Iv,"getRecords")});var Bv={};$e(Bv,{contentTypes:()=>Ng,findBestSerializer:()=>Df,getDeserializer:()=>po,registerContentHandlers:()=>Ig,serialize:()=>Lf,serializeMessage:()=>mi});function z7(e){try{return e?.[0]===123?yg(e):e}catch{return e}}function Ig(e){e.register(j7,{serializers:[{regex:/^application\/json$/,serializer:Tc},{regex:/^application\/cbor$/,serializer:function(t){return new mo.EncoderStream(Zu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Cf.Readable.from((0,os.encodeIter)(t,Zu)):(0,os.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Ag.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,os.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,mo.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function Df(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=Bt.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(Bt.keys()).join(", "))}};n=Bt.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function Lf(e,t,r){let n=Dv&&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=Df(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,vs.createBrotliCompress)({params:{[vs.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?vs.constants.BROTLI_MODE_TEXT:vs.constants.BROTLI_MODE_GENERIC,[vs.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>Dv?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,vs.brotliCompress)(s,(c,u)=>{c?o(c):i(u)}))):s}function mi(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return Xu(e);let r=t.serialize;if(r)return r(e);let n=Df(t);return r=t.serialize=n.serializer.serialize,r(e)}function X7(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 po(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Bt.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Bt.get(e)?.deserialize||Lv(e,n);return o=>X7(o).then(i)}return e&&Bt.get(e)?.deserialize||Lv(e,n)}function Lv(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 yg(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function Z7(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 Ag,os,mo,vs,Cf,Mv,Og,bg,Uv,Pv,Xu,yg,Zu,Bt,Ng,Cv,vv,J7,j7,Dv,ga=Re(()=>{kh();Ag=x(wf()),os=require("msgpackr"),mo=require("cbor-x"),vs=require("zlib"),Cf=require("stream");ir();Mv=require("../../index"),Og=x(re()),bg=x(U()),Uv=x(require("yaml")),Pv=Og.default.get(bg.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,Xu=Pv?Pi:JSON.stringify,yg=Pv?qh:JSON.parse,Zu={useRecords:!1,useToJSON:!0},Bt=new Map,Ng=Bt;Ze.contentTypes=Ng;(0,Mv._assignPackageExport)("contentTypes",Ng);Bt.set("application/json",{serializeStream:Tc,serialize:Xu,deserialize:yg,q:.8});Cv=new mo.Encoder(Zu);Bt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new mo.EncoderStream(Zu).end(e)},serialize:Cv.encode,deserialize:Cv.decode,q:1});Bt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Cf.Readable.from((0,os.encodeIter)(e,Zu)):(0,os.pack)(e)},serialize:os.pack,deserialize:os.unpack,q:.9});Bt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,Ag.toCsvStream)(e,e?.getColumns?.())},q:.1});Bt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Bt.set("text/yaml",{serialize(e){return Uv.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Bt.set("text/event-stream",{serializeStream:function(e){return Cf.Readable.from(Z7(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=Xu(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: ${Xu(e)}
23
23
 
24
24
  `:`data: ${e}
25
25
 
26
- `},compressible:!1,q:.8});$t.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()}});rv={type:"application/json",serializeStream:mc,serialize:Qu,deserialize:n7,q:.8};$t.set("*/*",rv);$t.set("",rv);a(n7,"tryJSONParse");a(_g,"registerContentHandlers");s7=require("fastify-plugin"),i7=s7(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Sf(n.raw);s.type(c),s.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Sf,"findBestSerializer");jP=ag.default.get(cg.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Tf,"serialize");a(hi,"serializeMessage");a(o7,"streamToBuffer");a(ho,"getDeserializer");a(ZP,"deserializerUnknownType");a(a7,"transformIterable")});function ju(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 A=o[0],I=Bs(n.attributes,A);if(I.relationship){if(o.length<2)throw new mo.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let w=I.definition?.tableClass||I.elements?.definition?.tableClass,B=new Map,K=ju({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,w,s,B);if(I.relationship.to){i[o[0]]=B;let q=!!Bs(w.attributes,I.relationship.to)?.elements;K=_7(K,I,w.primaryStore,q,B)}if(I.relationship.from){let q=a(P=>ju({attribute:I.relationship.from,value:P},t,r,n,s,B),"searchEntry");I.elements?(i[o[0]]=B,K=d7(K,I,w.primaryStore,B,q)):K=K.flatMap(q)}return K}else if(o.length===1)o=o[0];else throw new mo.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,f;c instanceof Date&&(c=c.getTime());let E;switch(iv[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]=as.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 ze.SEARCH_TYPES.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 mo.ClientError(`Unknown query comparator "${u}"`)}if(r){let A=_;_=l,l=A,A=!f,f=!d,d=A}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 mo.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 A=Zu(e);if(!A)throw new mo.ClientError(`Unknown search operator ${e.comparator}`);return n.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:I,value:w})=>new Promise((B,K)=>setImmediate(()=>{try{B(w&&A(w)?I:dg.SKIP)}catch(q){K(q)}})))}let S={start:_,end:l,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let A=p.getRange(S).map(I=>I.value==null?dg.SKIP:I);return A.hasEntries=!0,A}else return p.getRange(S).map(({value:A})=>A)}function Bs(e,t){if(Array.isArray(t))if(t.length>1){let r=Bs(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?Bs(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 _7(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o;return{next(){if(!i){let u=t.relationship.to;return(async()=>{let _=a((d,f)=>{let E=d;Array.isArray(d)&&(E=Ti(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 d7(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o;return{next(){let c;if(o&&(c=o.next(),!c.done))return c;if(!i)return(async()=>{let u=new Map;n.fromRecord=l=>l[t.relationship.from]?.filter?.(d=>u.has(Ti(d)));let _=0;for await(let l of e){if(n.filters){let d=r.get(l);if(n.filters.some(f=>!f(d)))continue}u.set(Ti(l),l),_++>100&&(await new Promise(setImmediate),_=0)}return i=u.values()[Symbol.iterator](),this.next()})();do{let u=i.next();return u.done?u:(o=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function Zu(e,t,r,n){if(e.conditions){let c=e.conditions.map(Zu);return e.operator==="or"?u=>c.some(_=>_(u)):u=>c.every(_=>_(u))}let s=e.comparator,i=e[0]??e.attribute,o=e[1]??e.value;if(Array.isArray(i)){if(i.length===0)return()=>!0;if(i.length===1)i=i[0];else if(i.length>1){let c=i[0],u=Bs(t.attributes,c),_=u.definition?.tableClass||u.elements.definition?.tableClass,l=n?.[c],d=Zu({attribute:i.length>2?i.slice(1):i[1],value:o,comparator:s},t,r,l?.[c]?.joined);if(!d)return;if(l){l.filters||(l.filters=[]),l.filters.push(d);return}let f=t.propertyResolvers?.[c];return(E,h)=>{let p,S;return f?(S=f(E,r,h),p=S?.value):p=E[c],p?Array.isArray(p)?p.some(d):d(p,S):!1}}}switch(o instanceof Date&&(o=o.getTime()),iv[s]||s){case ze.SEARCH_TYPES.EQUALS:case void 0:return os(i,c=>c===o);case ze.SEARCH_TYPES.CONTAINS:return os(i,c=>c?.toString().includes(o));case ze.SEARCH_TYPES.ENDS_WITH:case ze.SEARCH_TYPES._ENDS_WITH:return os(i,c=>c?.toString().endsWith(o));case ze.SEARCH_TYPES.STARTS_WITH:case ze.SEARCH_TYPES._STARTS_WITH:return os(i,c=>typeof c=="string"&&c.startsWith(o));case ze.SEARCH_TYPES.BETWEEN:return o[0]instanceof Date&&(o[0]=o[0].getTime()),o[1]instanceof Date&&(o[1]=o[1].getTime()),os(i,c=>(0,as.compareKeys)(c,o[0])>=0&&(0,as.compareKeys)(c,o[1])<=0);case"gt":case ze.SEARCH_TYPES.GREATER_THAN:case ze.SEARCH_TYPES._GREATER_THAN:return os(i,c=>(0,as.compareKeys)(c,o)>0);case"ge":case ze.SEARCH_TYPES.GREATER_THAN_EQUAL:case ze.SEARCH_TYPES._GREATER_THAN_EQUAL:return os(i,c=>(0,as.compareKeys)(c,o)>=0);case ze.SEARCH_TYPES.LESS_THAN:case"lt":case ze.SEARCH_TYPES._LESS_THAN:return os(i,c=>(0,as.compareKeys)(c,o)<0);case"le":case ze.SEARCH_TYPES.LESS_THAN_EQUAL:case ze.SEARCH_TYPES._LESS_THAN_EQUAL:return os(i,c=>(0,as.compareKeys)(c,o)<=0);case"ne":return os(i,c=>(0,as.compareKeys)(c,o)!==0);default:throw new mo.ClientError(`Unknown query comparator "${s}"`)}}function os(e,t){return r=>{let n=r[e];return typeof n!="object"||!n?t(n):Array.isArray(n)?n.some(t):n instanceof Date?t(n.getTime()):!1}}function fg(e){return t=>{if(t.estimated_count===void 0){if(t.conditions){let n;if(t.operator==="or"){n=0;for(let s of t.conditions)n+=s.estimated_count}else{n=1/0;for(let s of t.conditions)n=1/(1/n+1/s.estimated_count)}return t.estimated_count=n,t.estimated_count}let r=t.comparator||t.search_type;if(r===ze.SEARCH_TYPES.EQUALS){let n=t[0]??t.attribute;if(n==null||n===e.primaryKey)t.estimated_count=1;else if(Array.isArray(n)){let s=Bs(e.attributes,n[0]),i=s.definition?.tableClass||s.elements.definition?.tableClass,o=fg(i)({value:t.value,attribute:n.length>2?n.slice(1):n[1],comparator:"equals"});t.estimated_count=o*4*(e.indices[s.relationship.from]||e.primaryStore).getStats().entryCount/(i.primaryStore.getStats().entryCount||1)}else{let s=e.indices[n];t.estimated_count=s?s.getValuesCount(t[1]??t.value):1/0}}else r===ze.SEARCH_TYPES.CONTAINS||r===ze.SEARCH_TYPES.ENDS_WITH||r==="ne"?t.value===null&&r==="ne"?t.estimated_count=sv:t.estimated_count=1/0:r===ze.SEARCH_TYPES.STARTS_WITH||r==="prefix"?t.estimated_count=sv:r===ze.SEARCH_TYPES.BETWEEN?t.estimated_count=u7:t.estimated_count=c7;typeof t.descending=="boolean"&&(t.estimated_count/=4)}return t.estimated_count}}function gf(e){if(e)if(Si=e,Na.lastIndex=0,f7.test(e))try{let t=Ju(new ya,"");if(gr!==Si.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 ${gr} in '${Si}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Ju(e,t){let r=Na,n,s,i,o,c;for(;n=r.exec(Si);){gr=r.lastIndex;let[,u,_]=n;if(o){if(u)throw new SyntaxError(`expected operator, but encountered '${u}'`);o=!1,c=!1}else c=!0;let l;switch(_){case"=":if(s)if(u.length<=2)i=u;else throw new SyntaxError(`invalid FIQL operator ${u}`);else{if(i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");s=Xu(u)}break;case"!=":case"<":case"<=":case">":case">=":if(i=l7[_],!u)throw new SyntaxError(`attribute must be specified before comparator ${_}`);s=Xu(u);break;case"|":e.operator="or";case"":case void 0:case"&":if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${_[0]?"'"+_[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${_?"'"+_+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.conditions.push({comparator:i,attribute:s,value:decodeURIComponent(u)})}s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Xu(u)),s=void 0;break;case"(":Na.lastIndex=gr;let d=Ju(u?[]:new ya,")");switch(u){case"":e.conditions.push(d);break;case"limit":switch(d.length){case 1:e.limit=+d[0];break;case 2:e.offset=+d[0],e.limit=d[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(d[0])&&d.length===1&&!d[0].name?(e.select=d[0],e.select.asArray=!0):d.length===1?e.select=d[0]:d.length===2&&d[1]===""?e.select=d.slice(0,1):e.select=d;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=ov(d);break;default:throw new SyntaxError(`unknown query function call ${u}`)}Si[gr]===","?r.lastIndex=++gr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!u)throw new SyntaxError("property sets must have a defined parent property name");Na.lastIndex=gr,l=Ju([],"}"),l.name=u,e.push(l),Si[gr]===","?r.lastIndex=++gr:o=!0;break;case"[":Na.lastIndex=gr,u?(l=Ju(new ya,"]"),l.name=u):l=Ju(e.conditions?new ya:[],"]"),e.conditions?(e.conditions.push(l),s=null):e.push(l),Si[gr]===","?r.lastIndex=++gr:o=!0;break;case")":case"]":case"}":if(t===_[0]){if(e.conditions){if(s)e.conditions.push({comparator:i||"equals",attribute:s,value:decodeURIComponent(u)});else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(Xu(u));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${_[0]}'`):new SyntaxError(`unexpected token '${_[0]}'`);default:throw new SyntaxError(`unexpected operator '${_}'`)}if(t!==")"&&(r=s?E7:Na,r.lastIndex=gr),gr===Si.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Xu(e){return e.indexOf(".")>-1?e.split(".").map(Xu):decodeURIComponent(e)}function ov(e){let t=av(e[0]);return e.length>1&&(t.next=ov(e.slice(1))),t}function av(e){if(Array.isArray(e)){let t=av(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 Ti(e){return Array.isArray(e)?e.join("\0"):e}var mo,ze,as,dg,c7,u7,sv,l7,iv,f7,Na,E7,gr,Si,ya,Rf=Ae(()=>{mo=v(Z()),ze=v(ht()),as=require("ordered-binary"),dg=require("lmdb"),c7=1e8,u7=15e6,sv=1e7,l7={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(ju,"searchByIndex");a(Bs,"findAttribute");a(_7,"joinTo");a(d7,"joinFrom");iv={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",equal:"equals",sw:"starts_with",ew:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(Zu,"filterByType");a(os,"attributeComparator");a(fg,"estimateCondition");f7=/[()[\]|!<>.]|(=\w+=)/,Na=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,E7=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(gf,"parseQuery");a(Ju,"parseBlock");a(Xu,"decodeProperty");a(ov,"toSortObject");a(av,"toSortEntry");ya=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(Ti,"flattenKey")});var Af={};Ve(Af,{start:()=>p7});async function m7(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&gf(e);let s=new Ei;try{e.responseHeaders=s;let i=e.url.slice(1),o=hg.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},u=o.Resource,_=r["cache-control"];if(_){_=_.toLowerCase();let p=_.match(/max-age=(\d+)/)?.[1];p&&(e.expiresAt=p*1e3+Date.now()),_.includes("only-if-cached")&&(e.onlyIfCached=!0),_.includes("no-cache")&&(e.noCache=!0),_.includes("no-store")&&(e.noCacheStore=!0),_.includes("stale-if-error")&&(e.staleIfError=!0),_.includes("must-revalidate")&&(e.mustRevalidate=!0)}let l=await Qe(e,()=>{if(n==="POST"||n==="PUT"||n==="PATCH"||n==="QUERY")try{e.data=ho(r["content-type"],!0)(e.body)}catch(p){throw new tl.ClientError(p,400)}switch(e.authorize=!0,n){case"GET":case"HEAD":return u.get(c,e);case"POST":return u.post(c,e.data,e);case"PUT":return u.put(c,e.data,e);case"DELETE":return u.delete(c,e);case"PATCH":return u.patch(c,e.data,e);case"OPTIONS":s.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return u.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return u.query(c,e.data,e);case"COPY":return u.copy(c,r.destination,e);case"MOVE":return u.move(c,r.destination,e);case"BREW":throw new tl.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new tl.ServerError(`Method ${n} is not recognized`,501)}}),d=200,f;if(l==null)d=n==="GET"||n==="HEAD"?404:204,Eg.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){h7[0]=f;let p=String.fromCharCode(34,(Yt[0]&63)+62,(Yt[0]>>6)+(Yt[1]<<2&63)+62,(Yt[1]>>4)+(Yt[2]<<4&63)+62,(Yt[2]>>2)+62,(Yt[3]&63)+62,(Yt[3]>>6)+(Yt[4]<<2&63)+62,(Yt[4]>>4)+(Yt[5]<<4&63)+62,(Yt[5]>>2)+62,(Yt[6]&63)+62,(Yt[6]>>6)+(Yt[7]<<2&63)+62,34),S=r["if-none-match"];S&&p==S?(l?.onDone&&l.onDone(),d=304,l=void 0):s.setIfNone("ETag",p),Eg.lastModified&&s.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let E={status:d,headers:s,body:void 0},h=l?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=Tf(l,e,E),n==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?po.warn(i):po.info(i):po.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=Tf(i.contentType?i:i.toString(),e,o),o}}function p7(e){Eg=e,!cv&&(cv=!0,hg=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return m7(t,r)}),e.server.ws(async(t,r,n)=>{el++;let s=new Nn;uv||(uv=!0,ru(l=>{el>0&&l.push({metric:"ws-connections",connections:el,byThread:!0})}));let i;t.on("error",l=>{i=!0,po.warn(l)});let o;t.on("message",a(function(d){o||(o=ho(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{el--,nn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let u=r.url.slice(1),_=hg.getMatch(u);if(nn(!!_,"connection","ws","connect"),!_)t.send(hi(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,qr(h=>({count:h.count,total:el}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await Qe(r,()=>d.connect(l,s,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=hi(E.value,r);t.send(h),qr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var po,tl,Yt,h7,Eg,cv,hg,uv,el,lv=Ae(()=>{Sa();ys();po=v(V()),tl=v(Z());Rf();Ec();Ji();Wd();Yt=new Uint8Array(8),h7=new Float64Array(Yt.buffer,0,1),Eg={};a(m7,"http");el=0;a(p7,"start")});var mg=T((nEe,_v)=>{var{recordAction:Of,recordActionBinary:S7}=(ys(),ee(nu)),T7=require("fastify-plugin"),g7=200;_v.exports=T7(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),Of(o,"duration",_,d,l),S7(s.raw.statusCode<400,"success",_,d,l);let f=g7;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Of(performance.now()-c,"transfer",_,d,l),Of(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Of(f,"bytes-sent",_,d,l));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var gg=T((sEe,mv)=>{var wf=require("clone"),Cf=et(),R7=J(),yf=M(),A7=V(),bf=require("fs"),pg=require("joi"),{string:If}=pg.types(),{hdb_errors:O7,handleHDBError:rl}=Z(),{HDB_ERROR_MSGS:b7,HTTP_STATUS_CODES:Nf}=O7,{common_validators:Ia}=Kn(),dv=1e9,fv=" is required",N7=["insert","update","upsert"],Sg={database:{presence:!1,format:Ia.schema_format,length:Ia.schema_length},schema:{presence:!1,format:Ia.schema_format,length:Ia.schema_length},table:{presence:!0,format:Ia.schema_format,length:Ia.schema_length},action:{inclusion:{within:N7,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},y7={schema:If.required(),table:If.required(),action:If.valid("insert","update","upsert")},{AWS_ACCESS_KEY:I7,AWS_SECRET:w7,AWS_BUCKET:C7,AWS_FILE_KEY:L7,REGION:D7}=yf.S3_BUCKET_AUTH_KEYS,M7={s3:{presence:!0},[`s3.${I7}`]:{presence:!0,type:"String"},[`s3.${w7}`]:{presence:!0,type:"String"},[`s3.${C7}`]:{presence:!0,type:"String"},[`s3.${L7}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${D7}`]:{presence:!0,type:"String"}},Ev=wf(Sg);Ev.data.presence={message:fv};var hv=wf(Sg);hv.file_path.presence={message:fv};var U7=Object.assign(wf(Sg),M7),Tg=wf(y7);Tg.csv_url=If.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Tg.passthrough_headers=pg.object();function P7(e){let t=Cf.validateObject(e,Ev);return Lf(e,t)}a(P7,"dataObject");function v7(e){let t=Cf.validateBySchema(e,pg.object(Tg));return Lf(e,t)}a(v7,"urlObject");function B7(e){let t=Cf.validateObject(e,hv);return Lf(e,t)}a(B7,"fileObject");function H7(e){let t=Cf.validateObject(e,U7);return Lf(e,t)}a(H7,"s3FileObject");function Lf(e,t){if(!t){let r=R7.checkGlobalSchemaTable(e.schema,e.table);if(r)return rl(new Error,r,Nf.BAD_REQUEST);if(e.operation===yf.OPERATIONS_ENUM.CSV_FILE_LOAD){try{bf.accessSync(e.file_path,bf.constants.R_OK|bf.constants.F_OK)}catch(n){return n.code===yf.NODE_ERROR_CODES.ENOENT?rl(n,`No such file or directory ${n.path}`,Nf.BAD_REQUEST):n.code===yf.NODE_ERROR_CODES.EACCES?rl(n,`Permission denied ${n.path}`,Nf.BAD_REQUEST):rl(n)}try{let n=bf.statSync(e.file_path).size;if(n>dv)return rl(new Error,b7.MAX_FILE_SIZE_ERR(n,dv),Nf.BAD_REQUEST)}catch(n){A7.error(n),console.error(n)}}}return t}a(Lf,"postValidateChecks");mv.exports={dataObject:P7,urlObject:v7,fileObject:B7,s3FileObject:H7}});var Rg=T((oEe,pv)=>{"use strict";var nl=V(),Df=M();async function x7(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===Df.OPERATIONS_ENUM.INSERT||t.operation===Df.OPERATIONS_ENUM.UPDATE||t.operation===Df.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===Df.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(nl.info(i.message),i):i.http_resp_msg?(nl.error(`Error calling operation: ${e.name}`),nl.error(i.http_resp_msg),i):(nl.error(`Error calling operation: ${e.name}`),nl.error(i),i)}}a(x7,"callOperationFunctionAsAwait");pv.exports={callOperationFunctionAsAwait:x7}});var Tv=T((cEe,Sv)=>{"use strict";var Ag=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}},Og=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};Sv.exports={BulkLoadFileObject:Ag,BulkLoadDataObject:Og}});var Rv=T((lEe,gv)=>{"use strict";var bg=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};gv.exports=bg});var Lg=T((mEe,xv)=>{"use strict";var Mf=rn(),Pf=gg(),q7=require("needle"),Bn=M(),dEe=nt(),wa=J(),{handleHDBError:it,hdb_errors:Lv}=Z(),{HTTP_STATUS_CODES:Kt,HDB_ERROR_MSGS:Lt,CHECK_LOGS_WRAPPER:To}=Lv,Ca=V(),Ng=require("papaparse");wa.promisifyPapaParse();var Hn=require("fs-extra"),F7=require("path"),{chain:Av}=require("stream-chain"),Ov=require("stream-json/streamers/StreamArray"),bv=require("stream-json/utils/Batch"),Nv=require("stream-chain/utils/comp"),{finished:yv}=require("stream"),G7=j(),Dv=Rg(),k7=ng(),{BulkLoadFileObject:Ig,BulkLoadDataObject:V7}=Tv(),wg=WT(),{verifyBulkLoadAttributePerms:Mv}=ff(),fEe=Rv(),EEe=St(),hEe=gs(),{databases:$7}=(ge(),ee(xe)),{coerceType:Y7}=(vf(),ee(Dg)),Iv="No records parsed from csv file.",So=`${G7.get("HDB_ROOT")}/tmp`,{schema_regex:K7}=Kn(),wv=1024*1024*2,Cv=5e3,W7={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};xv.exports={csvDataLoad:Q7,csvURLLoad:z7,csvFileLoad:J7,importFromS3:X7};async function Q7(e,t){let r=Pf.dataObject(e);if(r)throw it(r,r.message,Kt.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=vv(e.schema,e.table),i=Ng.parse(e.data,{header:!0,skipEmptyLines:!0,transform:yg.bind(null,s),dynamicTyping:!1}),o=new wg;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&Mv(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 it(new Error,c,Kt.BAD_REQUEST,void 0,void 0,!0);let u=new V7(e.action,e.schema,e.table,i.data);return n=await Dv.callOperationFunctionAsAwait(Bv,u,null),n.message===Iv?Iv:Hv(n.records,n.number_written)}catch(s){throw go(s)}}a(Q7,"csvDataLoad");async function z7(e){let t=Pf.urlObject(e);if(t)throw it(t,t.message,Kt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${So}/${r}`;try{await j7(e,r)}catch(s){throw Ca.error(Lt.DOWNLOAD_FILE_ERR(r)+" - "+s),it(s,To(Lt.DOWNLOAD_FILE_ERR(r)))}try{let s=new Ig(this.job_operation_function.name,e.action,e.schema,e.table,n,Bn.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Cg(s);return await Uf(n),i}catch(s){throw await Uf(n),go(s)}}a(z7,"csvURLLoad");async function J7(e){let t=Pf.fileObject(e);if(t)throw it(t,t.message,Kt.BAD_REQUEST,void 0,void 0,!0);let r=new Ig(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Bn.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Cg(r)}catch(n){throw go(n)}}a(J7,"csvFileLoad");async function X7(e){let t=Pf.s3FileObject(e);if(t)throw it(t,t.message,Kt.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=F7.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${So}/${s}`;let i=new Ig(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await Z7(s,e);let o=await Cg(i);return await Uf(r),o}catch(n){throw await Uf(r),go(n)}}a(X7,"importFromS3");async function j7(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await q7("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 it(n,s,n.statusCode,Bn.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}tee(r,e.csv_url),await eee(t,r.raw)}a(j7,"downloadCSVFile");async function Z7(e,t){try{let r=`${So}/${e}`;await Hn.mkdirp(So),await Hn.writeFile(`${So}/${e}`,"",{flag:"a+"});let n=await Hn.createWriteStream(r),s=await k7.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(){Ca.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Ca.error(Lt.S3_DOWNLOAD_ERR+" - "+r),it(r,To(Lt.S3_DOWNLOAD_ERR))}}a(Z7,"downloadFileFromS3");async function eee(e,t){try{await Hn.mkdirp(So),await Hn.writeFile(`${So}/${e}`,t)}catch(r){throw Ca.error(Lt.WRITE_TEMP_FILE_ERR),it(r,To(Lt.DEFAULT_BULK_LOAD_ERR))}}a(eee,"writeFileToTempFolder");async function Uf(e){if(e)try{await Hn.access(e),await Hn.unlink(e)}catch{Ca.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Uf,"deleteTempFile");function tee(e,t){if(e.statusCode!==Lv.HTTP_STATUS_CODES.OK)throw it(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Kt.BAD_REQUEST);if(!W7[e.headers["content-type"]])throw it(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Kt.BAD_REQUEST);if(!e.raw)throw it(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Kt.BAD_REQUEST)}a(tee,"validateURLResponse");async function Cg(e){try{let t;switch(e.file_type){case Bn.VALID_S3_FILE_TYPES.CSV:t=await ree(e);break;case Bn.VALID_S3_FILE_TYPES.JSON:t=await nee(e);break;default:throw it(new Error,Lt.DEFAULT_BULK_LOAD_ERR,Kt.BAD_REQUEST,Bn.LOG_LEVELS.ERROR,Lt.INVALID_FILE_EXT_ERR(e))}return Hv(t.records,t.number_written)}catch(t){throw go(t)}}a(Cg,"fileLoad");async function Uv(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 Mf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&Mv(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let u=it(c);r(u)}}a(Uv,"validateChunk");async function Pv(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 Dv.callOperationFunctionAsAwait(Bv,c,null);t.records+=u.records,t.number_written+=u.number_written,s&&s.resume()}catch(c){let u=it(c,To(Lt.INSERT_CSV_ERR),Kt.INTERNAL_SERVER_ERROR,Bn.LOG_LEVELS.ERROR,Lt.INSERT_CSV_ERR+" - "+c);r(u)}}a(Pv,"insertChunk");async function ree(e){let t={records:0,number_written:0},r=vv(e.schema,e.table);try{let n=new wg,s=Hn.createReadStream(e.file_path,{highWaterMark:wv});s.setEncoding("utf8"),await Ng.parsePromise(s,Uv.bind(null,e,n),yg.bind(null,r));let i=n.getPermsResponse();if(i)throw it(new Error,i,Kt.BAD_REQUEST);return s=Hn.createReadStream(e.file_path,{highWaterMark:wv}),s.setEncoding("utf8"),await Ng.parsePromise(s,Pv.bind(null,e,t),yg.bind(null,r)),s.destroy(),t}catch(n){throw it(n,To(Lt.PAPA_PARSE_ERR),Kt.INTERNAL_SERVER_ERROR,Bn.LOG_LEVELS.ERROR,Lt.PAPA_PARSE_ERR+n)}}a(ree,"callPapaParse");function vv(e,t){let r=$7[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>Y7(i,s));return n}a(vv,"createTransformMap");function yg(e,t,r){let n=e.get(r);return n?n(t):wa.autoCast(t)}a(yg,"typeFunction");async function nee(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new wg,s=Av([Hn.createReadStream(e.file_path,{encoding:"utf-8"}),Ov.withParser(),c=>c.value,new bv({batchSize:Cv}),Nv(async c=>{await Uv(e,n,r,c)})]);await new Promise((c,u)=>{yv(s,_=>{_?u(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw it(new Error,i,Kt.BAD_REQUEST);let o=Av([Hn.createReadStream(e.file_path,{encoding:"utf-8"}),Ov.withParser(),c=>c.value,new bv({batchSize:Cv}),Nv(async c=>{await Pv(e,t,r,c)})]);return await new Promise((c,u)=>{yv(o,_=>{_?u(_):c()}),o.resume()}),t}catch(n){throw it(n,To(Lt.INSERT_JSON_ERR),Kt.INTERNAL_SERVER_ERROR,Bn.LOG_LEVELS.ERROR,Lt.INSERT_JSON_ERR+n)}}a(nee,"insertJson");async function Bv(e){let t={};try{e.data&&e.data.length>0&&see(e.data[0])?t=await iee(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Ca.info(t.message))}catch(r){throw go(r)}return t}a(Bv,"callBulkFileLoad");function see(e){let t=Object.keys(e);for(let r of t)if(!K7.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(see,"validateColumnNames");async function iee(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=Mf.insert;break;case"update":i=Mf.update;break;case"upsert":i=Mf.upsert;break;default:throw it(new Error,Lt.INVALID_ACTION_PARAM_ERR(n),Kt.BAD_REQUEST,Bn.LOG_LEVELS.ERROR,Lt.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 go(o)}}a(iee,"bulkFileLoad");function Hv(e,t){return`successfully loaded ${t} of ${e} records`}a(Hv,"buildResponseMsg");function go(e){return it(e,To(Lt.DEFAULT_BULK_LOAD_ERR),Kt.INTERNAL_SERVER_ERROR,Bn.LOG_LEVELS.ERROR,Lt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(go,"buildTopLevelErrMsg")});var Fv=T((SEe,qv)=>{"use strict";var Mg=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};qv.exports=Mg});var Vv=T((gEe,kv)=>{"use strict";var oee=M(),Gv=require("moment"),aee=require("uuid").v4,Ug=class{static{a(this,"JobObject")}constructor(){this.id=aee(),this.type=void 0,this.start_datetime=Gv().valueOf(),this.created_datetime=Gv().valueOf(),this.end_datetime=void 0,this.status=oee.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};kv.exports=Ug});var Hf=T((AEe,zv)=>{"use strict";var cee=require("uuid").v4,Kv=rn(),Wv=tn(),uee=Jn(),lee=Zo(),_ee=Fv(),ot=M(),dee=Vv(),fee=RS(),dn=V(),Eee=Cc(),La=J(),{promisify:hee}=require("util"),Ro=require("moment"),mee=hf(),Bf=gg(),$v=Am(),{deleteTransactionLogsBeforeValidator:pee}=kT(),{handleHDBError:See,hdb_errors:Tee}=Z(),{HTTP_STATUS_CODES:gee}=Tee,Yv=Wv.searchByValue,Ree=Wv.searchByHash,Aee=Kv.insert,Oee=hee(mee.evaluateSQL),bee=Kv.update;zv.exports={addJob:Iee,updateJob:Cee,handleGetJob:Nee,handleGetJobsByStartDate:yee,getJobById:Qv};async function Nee(e){try{let t=await Qv(e.id);return La.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 dn.error("There was an error getting job",t),new Error(r)}}a(Nee,"handleGetJob");async function yee(e){try{let t=await wee(e);if(dn.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=Ro(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Ro(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 dn.error(r),new Error(r)}}a(yee,"handleGetJobsByStartDate");async function Iee(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||La.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return dn.info(l),t.error=l,t}if(!ot.JOB_TYPE_ENUM[e.operation])return dn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case ot.OPERATIONS_ENUM.CSV_FILE_LOAD:n=Bf.fileObject(e);break;case ot.OPERATIONS_ENUM.CSV_URL_LOAD:n=Bf.urlObject(e);break;case ot.OPERATIONS_ENUM.CSV_DATA_LOAD:n=Bf.dataObject(e);break;case ot.OPERATIONS_ENUM.IMPORT_FROM_S3:n=Bf.s3FileObject(e);break;case ot.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case ot.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=$v(e,"date");break;case ot.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=$v(e,"timestamp");break;case ot.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=pee(e);break;default:break}if(n)throw See(n,n.message,gee.BAD_REQUEST,void 0,void 0,!0);let s=new dee;s.type=e.operation===ot.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?ot.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new uee(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await Yv(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return dn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=cee();try{o=await Yv(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return dn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return dn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let u=new Eee(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await Aee(u)}catch(l){return dn.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,dn.trace(l)}return t}a(Iee,"addJob");async function wee(e){let t=Ro(e.from_date,Ro.ISO_8601),r=Ro(e.to_date,Ro.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 _ee(n,e.hdb_user);try{return await Oee(s)}catch(i){throw dn.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(wee,"getJobsInDateRange");async function Qv(e){if(La.isEmptyOrZeroLength(e))return La.errorizeMessage("Invalid job ID specified.");let t=new lee(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Ree(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return dn.error(n),La.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Qv,"getJobById");async function Cee(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(La.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===ot.JOB_STATUS_ENUM.COMPLETE||e.status===ot.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Ro().valueOf());let t=new fee(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await bee(t),r}a(Cee,"updateJob")});var t0=T((bEe,e0)=>{"use strict";var Jv=J(),Rr=M(),Lee=require("moment"),xf=Lg(),qf=V(),Xv=Hf(),jv=mf(),Zv=Vi(),Dee=tt(),Mee=uf(),Pg=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Uee(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(Jv.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Jv.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Rr.JOB_TYPE_ENUM.csv_file_load:await Hs(e,xf.csvFileLoad);break;case Rr.JOB_TYPE_ENUM.csv_url_load:await Hs(e,xf.csvURLLoad);break;case Rr.JOB_TYPE_ENUM.csv_data_load:await Hs(e,xf.csvDataLoad);break;case Rr.JOB_TYPE_ENUM.import_from_s3:await Hs(e,xf.importFromS3);break;case Rr.JOB_TYPE_ENUM.empty_trash:break;case Rr.JOB_TYPE_ENUM.export_local:await Hs(e,jv.export_local);break;case Rr.JOB_TYPE_ENUM.export_to_s3:await Hs(e,jv.export_to_s3);break;case Rr.JOB_TYPE_ENUM.delete_files_before:case Rr.JOB_TYPE_ENUM.delete_records_before:await Hs(e,Zv.deleteFilesBefore);break;case Rr.JOB_TYPE_ENUM.delete_audit_logs_before:await Hs(e,Zv.deleteAuditLogsBefore);break;case Rr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Hs(e,Mee.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(Uee,"parseMessage");async function Hs(e,t){try{e.job.status=Rr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Lee().valueOf(),await Xv.updateJob(e.job),await Pee(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):qf.error(`There was an error running ${t.name} job with id ${e.job.id}`),qf.error(n),e.job.message=n,e.job.status=Rr.JOB_STATUS_ENUM.ERROR;try{await Xv.updateJob(e.job)}catch(s){throw qf.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Hs,"runJob");async function Pee(e){qf.trace("launching job thread:",e),Dee.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Rr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Pee,"launchJobThread");e0.exports={parseMessage:Uee,RunnerMessage:Pg}});var n0=T((yEe,r0)=>{"use strict";var vg=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};r0.exports=vg});var kg=T((wEe,Gg)=>{"use strict";var Vf=tn(),xg=hf(),Ff=Lg(),xs=ld(),Gf=xi(),il=Vi(),vee=oS(),sl=vr(),kf=hS(),Wt=GT(),Dt=V(),Bee=SS(),Hee=yd(),s0=tT(),xee=wd(),qee=rT(),Fee=nT(),Gee=oT(),kee=cT(),Bg=_T(),i0=mf(),Vee=ff(),qg=Hf(),H=M(),{hdb_errors:al,handleHDBError:ol}=Z(),{HTTP_STATUS_CODES:o0}=al,Hg=mT(),a0=Yd(),m0=require("util"),Da=rn(),$ee=Rs(),Yee=la(),c0=t0(),u0=hu(),l0=(Xd(),ee(vu)),_0=Lr(),d0=uf(),f0=rf(),{setServerUtilities:Kee}=(vf(),ee(Dg)),{CONTEXT:Wee}=(yn(),ee(_p)),{_assignPackageExport:Qee}=require("../../index"),{transformReq:zee}=J(),{server:Jee}=(nr(),ee(Ci)),Xee=Rg(),E0=Vf.searchByHash,jee=Vf.searchByValue,Zee=m0.promisify(Vf.search),ete=m0.promisify(xg.evaluateSQL),tte={[H.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[H.OPERATIONS_ENUM.CREATE_TABLE]:!0,[H.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[H.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[H.OPERATIONS_ENUM.DROP_TABLE]:!0,[H.OPERATIONS_ENUM.DROP_SCHEMA]:!0},G=n0();async function p0(e,t){try{if(e.body.operation!=="read_log"&&(Dt.log_level===H.LOG_LEVELS.INFO||Dt.log_level===H.LOG_LEVELS.DEBUG||Dt.log_level===H.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;Dt.info(o)}}catch(n){Dt.error(n)}let r=await Xee.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return tte[e.body.operation]&&$ee.setSchemaDataToGlobal(n=>{n&&Dt.error(n)}),r}a(p0,"processLocalTransaction");var h0=nte();Gg.exports={chooseOperation:S0,getOperationFunction:T0,operation:Fg,processLocalTransaction:p0};Kee(Gg.exports);Jee.operation=Fg;function S0(e){let t;try{t=T0(e)}catch(s){throw Dt.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=xg.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=xg.checkASTPermissions(e,i);if(o)throw Dt.error(`${o0.FORBIDDEN} from operation ${e.operation}`),Dt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),ol(new Error,o,al.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==H.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==H.OPERATIONS_ENUM.LOGIN&&e.operation!==H.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=Vee.verifyPerms(i,s);if(o)throw Dt.error(`${o0.FORBIDDEN} from operation ${e.operation}`),Dt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),ol(new Error,o,al.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw ol(s,"There was an error when trying to choose an operation path")}return r}a(S0,"chooseOperation");function T0(e){if(Dt.trace(`getOperationFunction with operation: ${e.operation}`),h0.has(e.operation))return h0.get(e.operation);throw ol(new Error,al.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),al.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(T0,"getOperationFunction");Qee("operation",Fg);function Fg(e,t){e.hdb_user=this[Wee]?.user,e.bypass_auth=!t;let r=S0(e);return p0({body:e},r)}a(Fg,"operation");async function rte(e){Dt.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[H.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case H.OPERATIONS_ENUM.INSERT:o=await Da.insert(i);break;case H.OPERATIONS_ENUM.UPDATE:o=await Da.update(i);break;case H.OPERATIONS_ENUM.UPSERT:o=await Da.upsert(i);break;case H.OPERATIONS_ENUM.DELETE:o=await il.deleteRecord(i);break;default:Dt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Dt.info("Invalid operation in transaction"),Dt.error(o)}}a(rte,"catchup");async function cs(e){zee(e);let t,r;try{r=await qg.addJob(e),t=r.createdJob,Dt.info("addJob result",r);let n=new c0.RunnerMessage(t,e);return await c0.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 Dt.error(s),ol(n,s)}}a(cs,"executeJob");function nte(){let e=new Map;return e.set(H.OPERATIONS_ENUM.INSERT,new G(Da.insert)),e.set(H.OPERATIONS_ENUM.UPDATE,new G(Da.update)),e.set(H.OPERATIONS_ENUM.UPSERT,new G(Da.upsert)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new G(Vf.searchByConditions)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_HASH,new G(E0)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_ID,new G(E0)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_VALUE,new G(jee)),e.set(H.OPERATIONS_ENUM.SEARCH,new G(Zee)),e.set(H.OPERATIONS_ENUM.SQL,new G(ete)),e.set(H.OPERATIONS_ENUM.CSV_DATA_LOAD,new G(cs,Ff.csvDataLoad)),e.set(H.OPERATIONS_ENUM.CSV_FILE_LOAD,new G(cs,Ff.csvFileLoad)),e.set(H.OPERATIONS_ENUM.CSV_URL_LOAD,new G(cs,Ff.csvURLLoad)),e.set(H.OPERATIONS_ENUM.IMPORT_FROM_S3,new G(cs,Ff.importFromS3)),e.set(H.OPERATIONS_ENUM.CREATE_SCHEMA,new G(xs.createSchema)),e.set(H.OPERATIONS_ENUM.CREATE_DATABASE,new G(xs.createSchema)),e.set(H.OPERATIONS_ENUM.CREATE_TABLE,new G(xs.createTable)),e.set(H.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new G(xs.createAttribute)),e.set(H.OPERATIONS_ENUM.DROP_SCHEMA,new G(xs.dropSchema)),e.set(H.OPERATIONS_ENUM.DROP_DATABASE,new G(xs.dropSchema)),e.set(H.OPERATIONS_ENUM.DROP_TABLE,new G(xs.dropTable)),e.set(H.OPERATIONS_ENUM.DROP_ATTRIBUTE,new G(xs.dropAttribute)),e.set(H.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new G(Gf.describeSchema)),e.set(H.OPERATIONS_ENUM.DESCRIBE_DATABASE,new G(Gf.describeSchema)),e.set(H.OPERATIONS_ENUM.DESCRIBE_TABLE,new G(Gf.describeTable)),e.set(H.OPERATIONS_ENUM.DESCRIBE_ALL,new G(Gf.describeAll)),e.set(H.OPERATIONS_ENUM.DELETE,new G(il.deleteRecord)),e.set(H.OPERATIONS_ENUM.ADD_USER,new G(sl.addUser)),e.set(H.OPERATIONS_ENUM.ALTER_USER,new G(sl.alterUser)),e.set(H.OPERATIONS_ENUM.DROP_USER,new G(sl.dropUser)),e.set(H.OPERATIONS_ENUM.LIST_USERS,new G(sl.listUsersExternal)),e.set(H.OPERATIONS_ENUM.LIST_ROLES,new G(kf.listRoles)),e.set(H.OPERATIONS_ENUM.ADD_ROLE,new G(kf.addRole)),e.set(H.OPERATIONS_ENUM.ALTER_ROLE,new G(kf.alterRole)),e.set(H.OPERATIONS_ENUM.DROP_ROLE,new G(kf.dropRole)),e.set(H.OPERATIONS_ENUM.USER_INFO,new G(sl.userInfo)),e.set(H.OPERATIONS_ENUM.READ_LOG,new G(Bee)),e.set(H.OPERATIONS_ENUM.ADD_NODE,new G(Hee)),e.set(H.OPERATIONS_ENUM.UPDATE_NODE,new G(s0)),e.set(H.OPERATIONS_ENUM.SET_NODE_REPLICATION,new G(s0)),e.set(H.OPERATIONS_ENUM.REMOVE_NODE,new G(xee)),e.set(H.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new G(qee)),e.set(H.OPERATIONS_ENUM.PURGE_STREAM,new G(Fee)),e.set(H.OPERATIONS_ENUM.SET_CONFIGURATION,new G(_0.setConfiguration)),e.set(H.OPERATIONS_ENUM.CLUSTER_STATUS,new G(Gee.clusterStatus)),e.set(H.OPERATIONS_ENUM.CLUSTER_NETWORK,new G(kee)),e.set(H.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new G(Bg.setRoutes)),e.set(H.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new G(Bg.getRoutes)),e.set(H.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new G(Bg.deleteRoutes)),e.set(H.OPERATIONS_ENUM.EXPORT_TO_S3,new G(cs,i0.export_to_s3)),e.set(H.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new G(cs,il.deleteFilesBefore)),e.set(H.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new G(cs,il.deleteFilesBefore)),e.set(H.OPERATIONS_ENUM.EXPORT_LOCAL,new G(cs,i0.export_local)),e.set(H.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new G(qg.handleGetJobsByStartDate)),e.set(H.OPERATIONS_ENUM.GET_JOB,new G(qg.handleGetJob)),e.set(H.OPERATIONS_ENUM.GET_FINGERPRINT,new G(Hg.getFingerprint)),e.set(H.OPERATIONS_ENUM.SET_LICENSE,new G(Hg.setLicense)),e.set(H.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new G(Hg.getRegistrationInfo)),e.set(H.OPERATIONS_ENUM.RESTART,new G(a0.restart)),e.set(H.OPERATIONS_ENUM.RESTART_SERVICE,new G(a0.restartService)),e.set(H.OPERATIONS_ENUM.CATCHUP,new G(rte)),e.set(H.OPERATIONS_ENUM.SYSTEM_INFORMATION,new G(Yee.systemInformation)),e.set(H.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new G(cs,il.deleteAuditLogsBefore)),e.set(H.OPERATIONS_ENUM.READ_AUDIT_LOG,new G(vee)),e.set(H.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new G(u0.createTokens)),e.set(H.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new G(u0.refreshOperationToken)),e.set(H.OPERATIONS_ENUM.LOGIN,new G(l0.login)),e.set(H.OPERATIONS_ENUM.LOGOUT,new G(l0.logout)),e.set(H.OPERATIONS_ENUM.GET_CONFIGURATION,new G(_0.getConfiguration)),e.set(H.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new G(Wt.customFunctionsStatus)),e.set(H.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new G(Wt.getCustomFunctions)),e.set(H.OPERATIONS_ENUM.GET_COMPONENT_FILE,new G(Wt.getComponentFile)),e.set(H.OPERATIONS_ENUM.GET_COMPONENTS,new G(Wt.getComponents)),e.set(H.OPERATIONS_ENUM.SET_COMPONENT_FILE,new G(Wt.setComponentFile)),e.set(H.OPERATIONS_ENUM.DROP_COMPONENT,new G(Wt.dropComponent)),e.set(H.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new G(Wt.getCustomFunction)),e.set(H.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new G(Wt.setCustomFunction)),e.set(H.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new G(Wt.dropCustomFunction)),e.set(H.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new G(Wt.addComponent)),e.set(H.OPERATIONS_ENUM.ADD_COMPONENT,new G(Wt.addComponent)),e.set(H.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new G(Wt.dropCustomFunctionProject)),e.set(H.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new G(Wt.packageComponent)),e.set(H.OPERATIONS_ENUM.PACKAGE_COMPONENT,new G(Wt.packageComponent)),e.set(H.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new G(Wt.deployComponent)),e.set(H.OPERATIONS_ENUM.DEPLOY_COMPONENT,new G(Wt.deployComponent)),e.set(H.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new G(d0.readTransactionLog)),e.set(H.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new G(cs,d0.deleteTransactionLogsBefore)),e.set(H.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new G(f0.installModules)),e.set(H.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new G(f0.auditModules)),e.set(H.OPERATIONS_ENUM.GET_BACKUP,new G(xs.getBackup)),e}a(nte,"initializeOperationFunctionMap")});var Yf=T((LEe,A0)=>{"use strict";var Vg=M(),ste=J(),cl=V(),{handleHDBError:$g,hdb_errors:$f}=Z(),{isMainThread:ite}=require("worker_threads"),{Readable:ote}=require("stream"),g0=require("os"),ate=require("util"),cte=CS(),ute=ate.promisify(cte.authorize),R0=kg(),{createGzip:lte,constants:_te}=require("zlib");function dte(e){let t=`Found an uncaught exception with message: ${e.message}. ${g0.EOL}Stack: ${e.stack} ${g0.EOL}Terminating ${ite?"HDB":"thread"}.`;console.error(t),cl.fatal(t),process.exit(1)}a(dte,"handleServerUncaughtException");function fte(e,t,r){if(cl[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:$f.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(fte,"serverErrorHandler");function Ete(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=$g(new Error,"Invalid JSON.",$f.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(ste.isEmpty(e.body.operation)){let n=$g(new Error,"Request body must include an 'operation' property.",$f.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(Ete,"reqBodyValidationHandler");function hte(e,t,r){let n;e.body.operation!==Vg.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Vg.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Vg.OPERATIONS_ENUM.LOGOUT?ute(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{cl.warn(s),cl.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r($g(s,i,$f.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(hte,"authHandler");async function mte(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=R0.chooseOperation(e.body);let s=await R0.processLocalTransaction(e,n);if(s instanceof ote&&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(lte({level:_te.Z_BEST_SPEED})))}return s}catch(s){throw cl.error(s),s}}a(mte,"handlePostRequest");A0.exports={authHandler:hte,handlePostRequest:mte,handleServerUncaughtException:dte,serverErrorHandler:fte,reqBodyValidationHandler:Ete}});var y0=T((MEe,N0)=>{"use strict";var pte=require("fastify-plugin"),{handlePostRequest:O0,authHandler:Ste,reqBodyValidationHandler:Tte}=Yf();async function gte(e){e.decorate("hdbCore",{preValidation:[Tte,Ste],request:t=>b0(O0(t,response)),requestWithoutAuthentication:(t,r)=>b0(O0(t,r,!0))})}a(gte,"hdbCore");async function b0(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(b0,"convertAsyncIterators");N0.exports=pte(gte)});var C0=T((vEe,w0)=>{"use strict";var PEe=require("fs"),Yg=j();Yg.initSync();var{CONFIG_PARAMS:I0}=M(),Rte=1024*1024*1024;function Ate(e){let t=Yg.get(I0.HTTP_TIMEOUT),r=Yg.get(I0.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Rte,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(Ate,"getServerOptions");w0.exports=Ate});var M0=T((HEe,D0)=>{"use strict";var Kg=j();Kg.initSync();var{CONFIG_PARAMS:L0}=M();function Ote(){let e=Kg.get(L0.HTTP_CORSACCESSLIST),t=Kg.get(L0.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(Ote,"getCORSOptions");D0.exports=Ote});var v0=T((qEe,P0)=>{"use strict";var U0=j();U0.initSync();var bte=M();function Nte(){return U0.get(bte.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Nte,"getHeaderTimeoutConfig");P0.exports=Nte});var Qg={};Ve(Qg,{customFunctionsServer:()=>wte,ready:()=>J0,start:()=>Ite});function Ite(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){qs||(qs=z0(t),lt.http((await qs).server));let o=await qs,c=(0,Wg.dirname)(s),u=(0,Wg.dirname)(n);if(u.startsWith("/")&&(u=u.slice(1)),!B0.has(c)){B0.add(c);try{o.register(Lte(c,u))}catch(_){if(_.message==="Root plugin has already booted")Fe.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:J0}}async function wte(){try{Fe.info("In Custom Functions Fastify server"+process.cwd()),Fe.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Fe.debug(`Custom Functions server process ${process.pid} starting up.`),await Cte();let e=k0.get(V0.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=qs=await z0(e)}catch(r){throw Fe.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Fe.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Fe.error(`Custom Functions ${process.pid} Error: ${e}`),Fe.error(e),process.exit(1)}}async function Cte(){try{Fe.info("Custom Functions starting configuration."),await $0.setUsersToGlobal(),Fe.info("Custom Functions completed configuration.")}catch(e){Fe.error(e)}}function Lte(e,t){return async function(r){try{Fe.info("Custom Functions starting buildRoutes"),Fe.trace("Loading fastify routes folder "+e),(0,H0.existsSync)(e)&&r.register(G0.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Fe.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Fe.error(s.message):s&&Fe.error(s),o()})}catch(n){Fe.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function z0(e){Fe.info("Custom Functions starting buildServer.");let t=(0,Y0.default)(e),r=(0,x0.default)(t);r.server.headersTimeout=(0,W0.default)(),r.setErrorHandler(Q0.serverErrorHandler);let n=(0,K0.default)();return n&&r.register(q0.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(F0.default),await r.register(yte),await r.after(),_g(r),Fe.info("Custom Functions completed buildServer."),r}function J0(){if(qs)return qs.then?qs.then(e=>e.ready()):qs.ready()}var Wg,H0,x0,q0,F0,G0,k0,V0,Fe,yte,$0,Y0,K0,W0,Q0,qs,B0,X0=Ae(()=>{Wg=require("path"),H0=require("fs"),x0=v(require("fastify")),q0=v(require("@fastify/cors")),F0=v(mg()),G0=v(require("@fastify/autoload")),k0=v(j()),V0=v(M()),Fe=v(V()),yte=v(y0()),$0=v(vr()),Y0=v(C0()),K0=v(M0()),W0=v(v0()),Q0=v(Yf());Sa();nr();B0=new Set;a(Ite,"start");a(wte,"customFunctionsServer");a(Cte,"setUp");a(Lte,"buildRouteFolder");a(z0,"buildServer");a(J0,"ready")});var zg={};Ve(zg,{start:()=>Dte});function Dte(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,rB.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){Z0||(Z0=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=j0.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,eB.default)(s,(0,tB.realpathSync)(o))}}return i(s)},{runFirst:!0})),j0.set(r,n)}}}var eB,tB,rB,j0,Z0,nB=Ae(()=>{eB=v(require("send")),tB=require("fs"),rB=v(require("serve-static")),j0=new Map;a(Dte,"start")});function Pte(e,t=1,r){if(Jg++,(0,Ao.startWorker)("server/threads/threadServer.js",{name:Qf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function u(_){_.type===Qf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",u),o(n))}a(u,"onMessage"),n.on("message",u),n.on("error",c)});Ute.push(s),await s,Ma.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=Wf.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=Ma.indexOf(n);o>-1&&Ma.splice(o,1)}if(a(i,"removeWorker"),Ua){let o=Ua;Ua=[];for(let c of o)aB[c.localPort](null,c)}}}),r){let n=setInterval(()=>{Xg?Xg=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Ao.shutdownWorkers)(),Jg=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function cB(e=0,t){if(typeof e=="string")try{(0,zf.existsSync)(e)&&(0,zf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=vte:r=Bte(t):r=Zg;let n=(0,Pa.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=aB[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),Xg=!0,r(o,(c,u)=>{if(!c){if(sB){let l=o._socket||new Pa.Socket({handle:o,writable:!0,readable:!0});sB.deliverSocket(l,e,u),l.resume()}else Jg>0?(Ua.length===0&&setTimeout(()=>{Ua.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,Ua.push(o)):(console.log("start up a dynamic thread to handle request"),Pte(0));qr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new Pa.Socket({handle:o,writable:!0,readable:!0});Fte(l,c,e)}qr(!0,"socket-routed")})};let s=Zc();jg.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 Zg(e,t){let r,n=0;for(let s of Ma){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Kf)return Kf=i,t(r);n=i}Kf=0,t(r)}function vte(e,t){let r={};e.getpeername(r);let n=r.address,s=va.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);Zg(e,o=>{va.set(n,{worker:o,lastUsed:i}),t(o)})}function Bte(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Pa.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let u=o.toString("latin1").match(t)?.[1],_=va.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,s(_.worker);Zg(n,d=>{va.set(u,{worker:d,lastUsed:l}),s(d,o)})})}a(r,"findByHeaderAffinity")}function xte(){Kf=0;for(let e of Ma)e.expectedIdle=e.recentELU.idle+Hte,e.requests=1;Ma.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Fte(e,t,r){let n=qte++;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(),Wf.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")),Wf.delete(n)),s.event=="destroy"&&(e.destroy(),Wf.delete(n))})}var Ao,Pa,Qf,jg,zf,oB,Mte,Ma,Ua,aB,sB,Jg,Ute,Xg,Kf,iB,va,Hte,Wf,qte,uB=Ae(()=>{Ao=v(tt()),Pa=require("net"),Qf=v(M()),jg=v(V()),zf=require("fs");ys();oB=require("worker_threads"),Mte=v($i()),Ma=[],Ua=[],aB=[],Jg=0,Ute=[];oB.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(Pte,"startHTTPWorker");a(cB,"startSocketServer");Kf=0;a(Zg,"findMostIdleWorker");iB=36e5,va=new Map;a(vte,"findByRemoteAddressAffinity");a(Bte,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of va)r.lastUsed+iB<e&&va.delete(t)},iB).unref();Hte=1e3;a(xte,"updateWorkerIdleness");(0,Ao.setMonitorListener)(xte);Wf=new Map,qte=1;a(Fte,"proxySocket")});var nR={};Ve(nR,{Request:()=>eR,createReuseportFd:()=>Jf});var lB,eR,tR,rR,Jf,Xf=Ae(()=>{lB=require("os"),eR=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 rR(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 body(){return this.#e||(this.#e=new tR(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},tR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},rR=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,lB.platform)()!="win32"&&(Jf=require("node-unix-socket").createReuseportFd)});var EB=T((ehe,fB)=>{"use strict";var Gte=require("cluster"),Oo=j();Oo.initSync();var dB=M(),zEe=require("util"),Fs=V(),JEe=require("fs"),kte=require("fastify"),XEe=Zc(),Vte=require("@fastify/cors"),$te=require("@fastify/compress"),Yte=require("@fastify/static"),Kte=mg(),Wte=require("path"),{PACKAGE_ROOT:Qte}=M(),zte=Rs(),Jte=J(),Xte=vr(),jte=$i(),{server:Zte}=(nr(),ee(Ci)),{node_request_key:jEe}=(Xf(),ee(nR)),{authHandler:ere,handlePostRequest:tre,serverErrorHandler:rre,reqBodyValidationHandler:nre}=Yf(),ZEe=require("net"),{registerContentHandlers:sre}=(Sa(),ee(nv)),ire=6e4,ore=1024*1024*1024,are="TRUE",{CONFIG_PARAMS:ul}=dB,Ba;fB.exports={hdbServer:_B,start:_B};async function _B(e){try{Fs.info("In Fastify server"+process.cwd()),Fs.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Fs.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Gte.isMaster,await cre();let t=e.securePort>0;Ba=ure(t),await Ba.ready(),e||(e={}),e.isOperationsServer=!0;try{Zte.http(Ba.server,e),Ba.server.closeIdleConnections||await Ba.listen({port:0,host:"::"})}catch(r){throw Ba.close(),Fs.error(r),Fs.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Fs.fatal(t),process.exit(1)}}a(_B,"operationsServer");async function cre(){Fs.trace("Configuring HarperDB process."),zte.setSchemaDataToGlobal(),await Xte.setUsersToGlobal(),await jte.getLicense()}a(cre,"setUp");function ure(e){Fs.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=lre(e),r=kte(t);r.server.headersTimeout=dre(),r.setErrorHandler(rre);let n=_re();n&&r.register(Vte,n),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Kte),r.register($te),r.register(Yte,{root:Wte.join(Qte,"studio/build-local")}),sre(r);let s=Oo.get(dB.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Jte.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[nre,ere],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),tre(i,o)}),r.get("/health",()=>"HarperDB is running."),Fs.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(ure,"buildServer");function lre(e){let t=Oo.get(ul.OPERATIONSAPI_NETWORK_TIMEOUT),r=Oo.get(ul.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:ore,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(lre,"getServerOptions");function _re(){let e=Oo.get(ul.OPERATIONSAPI_NETWORK_CORS),t=Oo.get(ul.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===are)&&(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(_re,"getCORSOpts");function dre(){return Oo.get(ul.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??ire}a(dre,"getHeaderTimeoutConfig")});var bB=T((ihe,OB)=>{"use strict";var{decode:fre}=require("msgpackr"),{isMainThread:rhe,parentPort:Ere,threadId:nhe}=require("worker_threads"),iR=St(),Gs=nt(),hre=M(),gi=V(),hB=j(),pB=M();tt();var mre=gs(),{recordAction:pre,recordActionBinary:Sre}=(ys(),ee(nu)),{publishToStream:Tre}=iR,{ConsumerEvents:gre}=require("nats"),she={durable:Gs.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Gs.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Rre,Are,Ore,SB,TB;OB.exports={initialize:oR,workQueueListener:AB,setSubscription:bre,setIgnoreOrigin:yre,getDatabaseSubscriptions:Nre};async function oR(){TB=!0,gi.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await iR.getNATSReferences();Rre=e,Are=e.info.server_name,Ore=t,SB=r}a(oR,"initialize");var Zf=new Map;function bre(e,t,r){let n=Zf.get(e);n||Zf.set(e,n=new Map),n.set(t,r),TB||oR().then(AB)}a(bre,"setSubscription");function Nre(){return Zf}a(Nre,"getDatabaseSubscriptions");var gB;function yre(e){gB=e}a(yre,"setIgnoreOrigin");var RB=100,mB=new Array(RB),jf=0;async function AB(){let e=await SB.consumers.get(Gs.WORK_QUEUE_CONSUMER_NAMES.stream_name,Gs.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(Ere?.on("message",async n=>{let{type:s}=n;s===pB.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===gre.HeartbeatsMissed){let s=n.data;gi.trace(`${s} clustering ingest consumer heartbeats missed`),s===2&&(gi.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let n of r)await mB[jf],mB[jf]=Ire(n).catch(s=>{gi.error(s)}),++jf>=RB&&(jf=0)}catch(n){gi.error("Error consuming clustering ingest, restarting consumer",n)}iR.clearClientCache(),await oR()}}a(AB,"workQueueListener");async function Ire(e){let t=fre(e.data);pre(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,n=!1,s=hB.get(hre.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Gs.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Gs.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Gs.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!gB),Sre(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Gs.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;gi.trace("processing message:",o,c,_,(l?"records: "+l.map(w=>w?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),gi.trace(`messageProcessor nats msg id: ${e.headers.get(Gs.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:A}=f||{},I=Zf.get(c)?.get(_);if(!I)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,I.send(t);else if(l.length===1&&!u)I.send({type:sR(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:A});else{let w=l.map((B,K)=>({type:sR(o),value:B,expiresAt:E,id:d?.[K],table:_}));for(;u;)w.push({type:sR(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;I.send({type:"transaction",writes:w,table:_,timestamp:p,onCommit:h,user:S,nodeName:A})}hB.get(pB.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Tre(e.subject.split(".").slice(0,-1).join("."),mre.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){gi.error(o)}e.ack()}a(Ire,"messageProcessor");function sR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(sR,"convertOperation")});var iE={};Ve(iE,{disableNATS:()=>Cre,publishToStream:()=>sE,setNATSReplicator:()=>aR,setPublishToStream:()=>Lre,setSubscription:()=>_R,start:()=>wre});function wre(){tE.default.get(rE.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Mre()}function Cre(e=!0){CB=e}function Lre(e,t){sE=e,_R=t}function Mre(){if(CB||process.env._DISABLE_NATS)return;let e=Mn(),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];aR(s,r,i)}}fR((r,n)=>{aR(r.tableName,r.databaseName,r),n&&DB(r)}),!NB&&(NB=!0)}function aR(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 qt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[De],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[De]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[De],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[De],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[De]})}static defineSchema(i){DB(i)}static subscribe(){let i=new Nn;return _R(t,e,i),i}static subscribeOnThisThread(i){return i<Dre}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 eE(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=LB;return i}a(n,"getNATSTransaction")}function DB(e){let t=tE.default.get(rE.default.CONFIG_PARAMS.CLUSTERING_NODENAME);sE(`${uR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,lR.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 yB,uR,lR,IB,wB,tE,rE,nE,CB,sE,_R,Dre,LB,NB,eE,cR,dR=Ae(()=>{ge();yn();yB=v(St()),uR=v(nt()),lR=v(gs());Ec();IB=v(bB()),wB=v(Dr()),tE=v(j()),rE=v(M()),nE=v(V());a(wre,"start");a(Cre,"disableNATS");sE=yB.publishToStream,_R=IB.setSubscription;a(Lre,"setPublishToStream");Dre=2;a(Mre,"assignReplicationSource");a(aR,"setNATSReplicator");a(DB,"publishSchema");eE=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=tE.default.get(rE.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||(nE.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(sE(`${uR.SUBJECT_PREFIXES.TXN}.${s}.${u.table}`,(0,lR.createNatsTableStreamName)(s,u.table),void 0,u)?.catch(l=>{throw nE.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(n)}},cR=class extends eE{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,wB.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};LB=new cR});var YB=T(No=>{"use strict";var{isMainThread:Ure,parentPort:dl,threadId:ll}=require("worker_threads"),{Socket:Pre,createServer:vre}=require("net"),{createServer:Bre,IncomingMessage:Hre}=require("http"),{createServer:xre}=require("https"),{readFileSync:Ha,unlinkSync:MB,existsSync:qre}=require("fs"),xn=V(),Ge=j(),Ar=M(),{server:cE}=(nr(),ee(Ci)),{WebSocketServer:Fre}=require("ws"),{createServer:Gre}=require("tls"),{getTicketKeys:kre,restartNumber:Vre,getWorkerIndex:UB}=tt(),{Headers:xB}=(Wd(),ee(wU)),{recordAction:_l,recordActionBinary:$re}=(ys(),ee(nu)),{Request:qB,createReuseportFd:PB}=(Xf(),ee(nR)),{checkMemoryLimit:Yre}=$i(),FB=require("tls"),vB=FB.createSecureContext;FB.createSecureContext=function(e){if(!e.cert||!e.key)return vB(e);let t={...e};delete t.key,delete t.cert;let r=vB(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){Vre<=1&&xn.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:dhe,CONFIG_PARAMS:Kre}=Ar;Ge.initSync();var Wre=Ge.get(Kre.HTTP_SESSIONAFFINITY),us={};No.registerServer=SR;No.httpServer=TR;No.deliverSocket=pR;No.startServers=GB;No.when_components_loaded=null;cE.http=TR;cE.request=Xre;cE.socket=jre;cE.ws=Zre;var ER=[],oE=[],Qre,bo={},aE={},zre=[],hR=[];function GB(){return No.when_components_loaded=gR().loadRootComponents(!0).then(()=>{dl?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)pR(n,r,s);else if(t.requestId)Jre(t);else if(t.type===Ar.ITC_EVENT_TYPES.SHUTDOWN){xn.trace("received shutdown request",ll);for(let i in us){let o=us[i],c;o.closeIdleConnections&&(setInterval(()=>{o.closeIdleConnections()},25).unref(),setTimeout(()=>{o.closeAllConnections(),xn.info("Closed all http connections",i,ll)},4e3).unref()),o.close?.(()=>{if(Ge.get(Ar.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&UB()==0)try{MB(Ge.get(Ar.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,ll),o.cantCleanupProperly||xn.warn("Had to forcefully exit the thread",ll),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(PB&&!Wre)for(let t in us){let r=us[t];if(isNaN(t)&&UB()==0){qre(t)&&MB(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),xn.info("Domain socket listening on "+t)}).on("error",i)}));continue}let n;try{n=PB(+t,"::")}catch(s){console.error(`Unable to bind to port ${t}`,s);continue}e.push(new Promise((s,i)=>{r.listen({fd:n},()=>{s(),xn.trace("Listening on port "+t,ll)}).on("error",i)}))}Promise.all(e).then(()=>{dl?.postMessage({type:Ar.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(GB,"startServers");Ure||GB();function pR(e,t,r){let n=e?.read?e:new Pre({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=us[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=us[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(xn.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(pR,"deliverSocket");var BB=new Map;function Jre(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=BB.get(s),r){case"connection":i=pR(void 0,t),BB.set(s,i),i.write=(c,u,_)=>(dl.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(dl.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),dl.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(Jre,"proxyRequest");function SR(e,t,r=!0){!+t&&t!==Ge.get(Ar.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(Ge.get(Ar.CONFIG_PARAMS.HTTP_PORT),10));let n=us[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",HB),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else us[t]=e;e.on("unhandled",HB)}a(SR,"registerServer");function kB(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=[],Ge.get(Ar.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Ge.get(Ar.CONFIG_PARAMS.HTTP_PORT),secure:Ge.get(Ar.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Ge.get(Ar.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Ge.get(Ar.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Ge.get(Ar.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:Ge.get(Ar.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(kB,"getPorts");function TR(e,t){for(let{port:r,secure:n}of kB(t))VB(r,n,t?.isOperationsServer),typeof e=="function"?hR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,SR(e,r,!1)),aE[r]=mR(hR,r),Qre=mR(zre,r)}a(TR,"httpServer");function VB(e,t,r){if(!bo[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:Ge.get(n+"_keepAliveTimeout"),headersTimeout:Ge.get(n+"_headersTimeout"),requestTimeout:Ge.get(n+"_timeout")},i=Ge.get(n+"_mtls");if(t){n=r?"operationsApi_":"";let c=Ge.get(n+"tls_privateKey"),u=Ge.get(n+"tls_certificate"),_=Ge.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:Ha(c),ciphers:Ge.get("tls_ciphers"),cert:Ha(u),ca:_&&Ha(_),requestCert:!!i,ticketKeys:kre()})}let o=Yre();bo[e]=(t?xre:Bre)(s,async(c,u)=>{try{let l=performance.now(),d=new qB(c,u);r&&(d.isOperationsServer=!0);let f=await aE[e](d);if(!f){if(d._nodeResponse.statusCode)return;f=$B(d)}if(o?f.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):f.headers?.set?.("Server","HarperDB"),f.status===-1){for(let B of f.headers||[])u.setHeader(B[0],B[1]);return c.baseRequest=d,u.baseResponse=f,bo[e].emit("unhandled",c,u)}let E=f.status||200,h=performance.now(),p=h-l,S=f.body,A;if(!f.handlesHeaders){let B=f.headers||new xB;if(S?S.length>=0&&(typeof S=="string"?B.set("Content-Length",Buffer.byteLength(S)):B.set("Content-Length",S.length),A=!0):(B.set("Content-Length","0"),A=!0),B.append){let K=`hdb;dur=${p.toFixed(2)}`;f.wasCacheMiss&&(K+=", miss"),B.append("Server-Timing",K,!0)}u.writeHead(E,B&&(B[Symbol.iterator]?Array.from(B):B)),A&&u.end(S)}let I=d.handlerPath,w=d.method;if(_l(p,"duration",I,w,f.wasCacheMiss==null?void 0:f.wasCacheMiss?"cache-miss":"cache-hit"),$re(E<400,"success",I,w),!A)if(S?.pipe){S.pipe(u),S.destroy&&u.on("close",()=>{S.destroy()});let B=0;S.on("data",K=>{B+=K.length}),S.on("end",()=>{_l(performance.now()-h,"transfer",I,w),_l(B,"bytes-sent",I,w)})}else S?.then?S.then(B=>{u.end(B)},_):u.end(S)}catch(l){_(l)}function _(l){let d=l.headers;u.writeHead(l.statusCode||500,d&&(d[Symbol.iterator]?Array.from(d):d)),u.end(l.toString()),l.statusCode?l.statusCode===500?xn.warn(l):xn.info(l):xn.error(l)}a(_,"onError")}),t&&(bo[e].on("secureConnection",c=>{c._parent.startTime&&_l(performance.now()-c._parent.startTime,"tls-handshake",e),_l(c.isSessionReused(),"tls-reused",e)}),bo[e].isSecure=!0),SR(bo[e],e)}return bo[e]}a(VB,"getHTTPServer");function mR(e,t){let r=$B;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(mR,"makeCallbackChain");function $B(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new xB}}a($B,"unhandled");function Xre(e,t){TR(e,{requestOnly:!0,...t})}a(Xre,"onRequest");function jre(e,t){let r;if(t.securePort){let n=Ge.get("tls_privateKey"),s=Ge.get("tls_certificate"),i=t.mtls?.certificateAuthority||Ge.get("tls_certificateAuthority");r=Gre({ciphers:Ge.get("tls_ciphers"),key:Ha(n),cert:Ha(s),ca:i&&Ha(i),requestCert:!!t.mtls},e),us[t.securePort]=r}return t.port&&(r=vre(e),us[t.port]=r),r}a(jre,"onSocket");Object.defineProperty(Hre.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 Zre(e,t){for(let{port:r,secure:n}of kB(t)){oE[r]||(oE[r]=new Fre({server:VB(r,n)}),oE[r].on("connection",async(i,o)=>{try{let c=new qB(o);c.isWebSocket=!0;let u=aE[r](c),_=o.headers["sec-websocket-protocol"]||"";for(let l=0;l<ER.length;l++){let d=ER[l];if(d.protocol){if(d.protocol===_){d.listener(i,c,u);break}}else d.listener(i,c,u)}}catch(c){xn.warn("Error handling WebSocket connection",c)}}),oE[r].on("error",i=>{console.log("Error in setting up WebSocket server",i)}));let s=t?.subProtocol||"";ER.push({listener:e,protocol:s}),aE[r]=mR(hR,r)}}a(Zre,"onWebSocket");function HB(e,t){t.writeHead(404),t.end(`Not found
27
- `)}a(HB,"defaultNotFound")});async function zB({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await RR.getResource(e,{});s=new bR(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await RR.get(e);i&&i.delete()}s=new lE(e,t)}return n&&(n.id=e,n.user={username:t?.username},fl.put(n)),s}function AR(){return uE++,uE>65500&&(uE=1),uE}function OR(e,t,r=e){let{topic:n,retain:s}=e;e.data=t,e.async=!0,e.authorize=!0;let i=fi.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 Qe(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var KB,yo,WB,QB,RR,fl,uE,lE,bR,JB=Ae(()=>{ge();Pu();KB=v(Dr()),yo=v(V());Ji();WB=v(tt()),QB=v(YB());nr();RR=_t({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"}]}}]}),fl=_t({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,WB.getWorkerIndex)()===0&&(async()=>{await QB.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of fl.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await lt.getUser(r.user.username)),Qe(r,()=>{try{OR(r,t)}finally{fl.delete(e.id,r)}})}})();a(zB,"getSession");uE=1;a(AR,"getNextMessageId");lE=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(A=>A.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,yo.trace)("Resuming subscription from",s,"from",o);let E=fi.getMatch(_);if(!E){let A=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw A.statusCode=404,A}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let A=f.url.slice(1);if(A.indexOf("#")>-1&&A.indexOf("#")!==A.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,A.indexOf("+")===A.length-1)f.onlyChildren=!0,f.url="/"+A.slice(0,A.length-1);else{let I=A.split("/"),w;for(let q=0;q<I.length;q++)if(I[q].indexOf("+")>-1)if(I[q]==="+")w=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&w)throw new Error("Filters can not be combined");let B=!0;I[I.length-1]==="#"&&(I.length--,B=!1),w&&(n=a(q=>{let P=q.id;if(!Array.isArray(P)||B&&P.length!==I.length)return!1;for(let Q=0;Q<I.length;Q++)if(I[Q]!=="+"&&I[Q]!==P[Q])return!1;return!0},"filter"));let K=I.indexOf("+");f.url="/"+(K>-1?I.slice(0,K):I).concat("").join("/")}}let h=E.path,p=E.Resource,S=await Qe(f,async()=>{let A=await p.subscribe(f);if(!A)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!A[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let I of A)try{let w;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,w=this.needsAcknowledge(I)):(I.acknowledge?.(),w=AR());let B=I.id;Array.isArray(B)&&(B=pa(B)),B==null&&(B=""),this.listener(h+"/"+B,I.value,w,t)}catch(w){(0,yo.warn)(w)}})(),A});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=AR();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,OR(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};Qe(r,async()=>{if(!t){let n=await fl.get(this.sessionId,r);n?.doesExist()&&await OR(n,n.data,r)}await fl.delete(this.sessionId,r)}).catch(n=>{(0,yo.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(OR,"publish");bR=class extends lE{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=AR(),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,yo.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,yo.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),RR.put(this.sessionRecord)),t.qos}}});var NR={};Ve(NR,{bypassAuth:()=>ene,start:()=>tne});function ene(){tH=!0}function tne({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i},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,Or.info)("WebSocket error",h)})}},{subProtocol:"mqtt"})),(t||s)&&(c=e.socket(async _=>{let l;if(u)if(_.authorized)try{let E=u.user;l!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),l=await e.getUser(E,null,null))}catch(E){(0,Or.error)(E)}else return(0,Or.info)(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end();!l&&tH&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,eH.getSuperUser)());let{onMessage:d,onClose:f}=ZB(_,E=>_.write(E),null,l,o);_.on("data",d),_.on("close",f),_.on("error",E=>{(0,Or.info)("Socket error",E)})},{port:t,securePort:s,mtls:u})),c}function ZB(e,t,r,n,s){jB||(jB=!0,ru(d=>{_E>0&&d.push({metric:"mqtt-connections",connections:_E,byThread:!0})}));let i;_E++;let o,c={protocolVersion:4},u=(0,fE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){_E--,i||(i=!0,o?.disconnect(),nn(!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 lt.getUser(d.username,d.password.toString(),r),(0,dE.get)(ls.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&XB.notify({username:n.username,status:ls.AUTH_AUDIT_STATUS.SUCCESS,type:ls.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,dE.get)(ls.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&XB.error({username:n.username,status:ls.AUTH_AUDIT_STATUS.FAILURE,type:ls.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return nn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let w=e.deserialize||(e.deserialize=ho(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?w(d.will.payload):void 0,delete d.will.payload}o=zB({user:n,...d}),o=await o}catch(w){return(0,Or.error)(w),nn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:w.code||5,returnCode:w.code||128})}nn(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((w,B,K,q)=>{try{let P=w.indexOf("/",1),Q=P>0?w.slice(0,P):w;f({cmd:"publish",topic:w,payload:E(B),messageId:K||Math.floor(Math.random()*1e8),qos:q.qos},Q)}catch(P){(0,Or.error)(P),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let w of d.subscriptions){let B;try{B=(await o.addSubscription(w,w.qos>=1)).qos||0}catch(K){(0,Or.error)(K),B=c.protocolVersion<5?128:K.statusCode===403?135:K.statusCode===404?143:128}h.push(B)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let w=[];for(let B of d.unsubscriptions)w.push(o.removeSubscription(B)?0:17);f({cmd:"unsuback",granted:w,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=ho(r?.headers.get?.("content-type"))),A=d.payload?.length>0?S(d.payload):void 0,I;try{I=await o.publish(d,A)}catch(w){(0,Or.warn)(w),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:I===!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),nn(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Or.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,fE.generate)(h,c);t(S),qr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return hi(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var fE,eH,dE,ls,Or,XB,tH,jB,_E,rH=Ae(()=>{fE=require("mqtt-packet");JB();eH=v(vr());Sa();ys();nr();dE=v(j()),ls=v(M()),Or=v(V()),XB=(0,Or.loggerWithTag)("auth-event"),tH=(0,dE.get)(ls.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(ene,"bypassAuth");a(tne,"start");_E=0;a(ZB,"onSocket")});var of={};Ve(of,{component_errors:()=>qa,loadComponent:()=>EE,loadComponentDirectories:()=>_H,setErrorReporter:()=>ine});function _H(e,t){t&&(IR=t),e&&(wR=e);let r=[];if((0,qn.existsSync)(yR)){let s=(0,qn.readdirSync)(yR,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Ot.join)(yR,o);r.push(EE(c,IR,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(EE(n,IR,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{lH=!0})}function ine(e){hl=e}async function EE(e,t,r,n,s,i){if(!sH.has(e)){sH.set(e,!0),s&&(wR=s);try{let o;n&&(qa=new Map);let c=(0,Ot.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,qn.existsSync)(c)?o=n?(0,uH.getConfigObj)():(0,iH.parseDocument)((0,qn.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=CR;let u=[],_=n;for(let l in o){let d=o[l];if(qa.set(n?l:(0,Ot.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let I=e,w;for(;!(0,qn.existsSync)(w=(0,Ot.join)(I,"node_modules",l));)if(I=(0,Ot.dirname)(I),I.length<(0,cH.getHdbBasePath)().length){w=null;break}if(w)f=await EE(w,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=sne[l];if(!f)continue;u.push(f);let h=a(I=>(I.origin=r,_t(I)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,A=!p?.https&&p?.port;if(xa.isMainThread&&(f=await f.startOnMainThread?.({server:lt,ensureTable:h,port:A,securePort:S,resources:t,...d})||f,n&&p))for(let I of[A,S])try{if(+I&&!nH.includes(I)){let w=LR.get(DR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);w&&El.default.warn("Session affinity is not recommended and may cause memory leaks"),(w||!Jf)&&(nH.push(I),cB(I,w))}}catch(w){console.error("Error listening on socket",I,w,l)}if(t.isWorker&&(f=await f.start?.({server:lt,ensureTable:h,port:A,securePort:S,resources:t,...d})||f),wR.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,aH.handleHDBError)("Can not reference parent directories");let I=(0,Ot.join)(e,d.files).replace(/\\/g,"/"),w=I.indexOf("/*");if(w>-1&&d.files!==CR[l]?.files&&!(0,qn.existsSync)(I.slice(0,w)))throw new Error(`The path '${I.slice(0,w)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let B=(0,Ot.basename)(e),K=d.path||"/";K=K.startsWith("/")?K:K.startsWith("./")?"/"+B+K.slice(2):K==="."?"/"+B:"/"+B+"/"+K;let q,P,Q;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",P=(0,Ot.join)(e,z)}else(Q=I.indexOf("/*"))>-1&&(P=I.slice(0,Q+1),q=(0,Ot.relative)(e,P));let Y=!1;if(xa.isMainThread&&f.setupDirectory&&(Y=await f.setupDirectory?.(K,P,t)),t.isWorker&&f.handleDirectory&&(Y=await f.handleDirectory?.(K,P,t)),Y)continue;for(let z of await(0,oH.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:re,dirent:Ie}=z;_=!0;let ne=(0,Ot.relative)(e,re).replace(/\\/g,"/");if(q)if(ne.startsWith(q))ne=ne.slice(q.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${ne}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let ct=K+(K.endsWith("/")?"":"/")+ne;try{if(Ie.isFile()){let de=await nne(re);xa.isMainThread&&await f.setupFile?.(de,ct,re,t),t.isWorker&&await f.handleFile?.(de,ct,re,t)}else xa.isMainThread&&await f.setupDirectory?.(ct,re,t),t.isWorker&&await f.handleDirectory?.(ct,re,t)}catch(de){de.message=`Could not load ${Ie.isFile()?"file":"directory"} '${re}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${de.message}`,hl?.(de),((0,Fa.getWorkerIndex)()===0?console:El.default).error(de),t.set(d.path||"/",new ml(de)),qa.set(n?l:(0,Ot.basename)(e),de.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,Ot.basename)(e)}' due to: ${h.message}`,hl?.(h),((0,Fa.getWorkerIndex)()===0?console:El.default).error(h),t.set(d.path||"/",new ml(h),null,!0),qa.set(n?l:(0,Ot.basename)(e),h.message)}}if(xa.isMainThread&&!lH&&i&&(0,Fa.watchDir)(e,async()=>_H()),o.extensionModule)return await e_((0,Ot.join)(e,o.extensionModule));if(!_&&t.isWorker){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;hl?.(new Error(l)),((0,Fa.getWorkerIndex)()===0?console:El.default).error(l),qa.set((0,Ot.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,hl?.(o),t.set("",new ml(o))}}}var qn,Ot,xa,iH,LR,DR,oH,Fa,El,aH,cH,rne,uH,nne,yR,wR,lH,IR,qa,sne,CR,nH,sH,hl,ml,af=Ae(()=>{qn=require("fs"),Ot=require("path"),xa=require("worker_threads"),iH=require("yaml"),LR=v(j()),DR=v(M());$O();QO();zO();lv();X0();nB();oH=v(require("fast-glob")),Fa=v(tt()),El=v(V());Ah();nr();aH=v(Z());yn();ge();uB();cH=v(j()),rne=v(EB());Xd();dR();rH();uH=v(Lr());Xf();({readFile:nne}=qn.promises),yR=LR.get(DR.CONFIG_PARAMS.COMPONENTSROOT),wR=new Map,qa=new Map;a(_H,"loadComponentDirectories");sne={REST:Af,rest:Af,graphqlSchema:Rh,jsResource:bh,fastifyRoutes:Qg,login:yh,static:zg,operationsApi:rne,customFunctions:{},http:{},clustering:iE,authentication:vu,mqtt:NR},CR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(CR,"static",{value:{files:"web/**"}});nH=[],sH=new Map;a(ine,"setErrorReporter");a(EE,"loadComponent");ml=class extends qt{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 gR=T((xhe,fH)=>{var{isMainThread:dH}=require("worker_threads"),{getTables:one}=(ge(),ee(xe)),{loadComponentDirectories:ane,loadComponent:cne}=(af(),ee(of)),{resetResources:une}=(Pu(),ee(IU)),lne=xT(),_ne=Lr(),{dirname:dne}=require("path"),{getConnection:fne}=St(),Ene=j(),hne=M(),MR=new Map;async function mne(e=!1){!dH&&Ene.get(hne.CONFIG_PARAMS.CLUSTERING_ENABLED)&&fne();try{dH&&await lne()}catch(n){console.error(n)}let t=une();one(),t.isWorker=e,await cne(dne(_ne.getConfigFilePath()),t,"hdb",!0,MR),await ane(MR,t);let r=[];for(let[n]of MR)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(mne,"loadRootComponents");fH.exports.loadRootComponents=mne});var tt=T((Fhe,Ai)=>{"use strict";var{Worker:pne,MessageChannel:Sne,parentPort:_s,isMainThread:HR,threadId:Tne,workerData:ks}=require("worker_threads"),{PACKAGE_ROOT:gne}=M(),{join:pH,isAbsolute:Rne,extname:Ane}=require("path"),{server:SH}=(nr(),ee(Ci)),{watch:One,readdir:bne}=require("fs/promises"),{totalmem:EH}=require("os"),pl=M(),TH=j(),Vs=V(),{randomBytes:Nne}=require("crypto"),{_assignPackageExport:yne}=require("../../index"),Ine=M(),hH=1024*1024,Ri=[],fn=[],wne=50,xR=1e4,Cne="restart",gH="request_thread_info",RH="resource_report",AH="thread_info",OH="added-port",Lne="ack",UR;yne("threads",fn);Ai.exports={startWorker:PR,restartWorkers:FR,shutdownWorkers:vne,workers:Ri,setMonitorListener:Vne,onMessageFromWorkers:Bne,onMessageByType:CH,broadcast:xne,broadcastWithAcknowledgement:Fne,setChildListenerByType:Pne,getWorkerIndex:bH,getWorkerCount:NH,getTicketKeys:yH,setMainIsWorker:Mne,setTerminateTimeout:Dne,restartNumber:ks?.restartNumber||1};fn.onMessageByType=CH;fn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=fn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var qR;function Dne(e){xR=e}a(Dne,"setTerminateTimeout");function bH(){return ks?ks.workerIndex:qR?0:void 0}a(bH,"getWorkerIndex");function NH(){return ks?ks.workerCount:qR?1:void 0}a(NH,"getWorkerCount");function Mne(e){qR=e}a(Mne,"setMainIsWorker");var hE;function yH(){return hE||(hE=HR?Nne(48):ks.ticketKeys,hE)}a(yH,"getTicketKeys");Object.defineProperty(SH,"workerIndex",{get(){return bH()}});Object.defineProperty(SH,"workerCount",{get(){return NH()}});var IH={[gH](e,t){Gne(t)},[RH](e,t){kne(t,e)}};function PR(e,t={}){let r=process.constrainedMemory?.()||EH();r=Math.min(r,EH(),2e4*hH);let n=TH.get(pl.CONFIG_PARAMS.MAXHEAPMEMORY)??Math.max(Math.floor(r/hH/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let u of fn){let _=new Sne;_.existingPort=u,i.push(_),o.push(_.port2)}Ane(e)||(e+=".js");let c=new pne(Rne(e)?e:pH(gne,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:Ai.exports.restartNumber,ticketKeys:yH()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:OH,port:u,threadId:c.threadId},[u]);return pE(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>PR(e,t),c.on("error",u=>{console.error("Worker error:",u),Vs.error("Worker error:",u)}),c.on("exit",u=>{Ri.splice(Ri.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<wne?(t.unexpectedRestarts=c.unexpectedRestarts+1,PR(e,t)):Vs.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{IH[u.type]?.(u,c)}),Ri.push(c),Yne(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(PR,"startWorker");var Une=[pl.THREAD_TYPES.HTTP];async function FR(e=null,t=2,r=!0){if(HR){if(r){let{loadRootComponents:o}=gR();await o()}Ai.exports.restartNumber++,t<1&&(t=t*Ri.length);let n=[],s=[];for(let o of Ri.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Vs.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Ai.exports.restartNumber,type:pl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Une.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),xR*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===Ine.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}=Yd();r&&(e==="http"||!e)&&TH.get(pl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else _s.postMessage({type:Cne,workerType:e})}a(FR,"restartWorkers");function Pne(e,t){IH[e]=t}a(Pne,"setChildListenerByType");function vne(e){return FR(e,1/0,!1)}a(vne,"shutdownWorkers");var wH=[];function Bne(e){wH.push(e)}a(Bne,"onMessageFromWorkers");var vR=new Map;function CH(e,t){let r=vR.get(e);r||vR.set(e,r=[]),r.push(t)}a(CH,"onMessageByType");var Hne=10;async function xne(e){let t=0;for(let r of fn)try{r.postMessage(e),t++>Hne&&(t=0,await new Promise(setImmediate))}catch(n){Vs.error("Unable to send message to worker",n)}}a(xne,"broadcast");var mE=new Map,qne=1;function Fne(e){return new Promise(t=>{let r=0;for(let n of fn)try{let s=qne++,i=a(()=>{mE.delete(s),--r===0&&t(),n!==_s&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,mE.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of mE)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Vs.error("Unable to send message to worker",s)}r===0&&t()})}a(Fne,"broadcastWithAcknowledgement");function Gne(e){e.postMessage({type:AH,workers:LH()})}a(Gne,"sendThreadInfo");function LH(){let e=Date.now();return Ri.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(LH,"getChildWorkerInfo");function kne(e,t){e.resources=t,e.resources.updated=Date.now()}a(kne,"recordResourceReport");var BR;function Vne(e){BR=e}a(Vne,"setMonitorListener");var $ne=1e3,mH=!1;function Yne(){mH||(mH=!0,setInterval(()=>{for(let e of Ri){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}BR&&BR()},$ne).unref())}a(Yne,"startMonitoring");var Kne=1e3;if(_s){pE(_s);for(let e=0,t=ks.addPorts.length;e<t;e++){let r=ks.addPorts[e];r.threadId=ks.addThreadIds[e],pE(r)}setInterval(()=>{let e=process.memoryUsage();_s.postMessage({type:RH,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Kne).unref(),UR=a(()=>new Promise((e,t)=>{_s.on("message",r),_s.postMessage({type:gH});function r(n){n.type===AH&&(_s.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else UR=LH;Ai.exports.getThreadInfo=UR;function pE(e,t){fn.push(e),e.on("message",r=>{if(r.type===OH)r.port.threadId=r.threadId,pE(r.port);else if(r.type===Lne){let n=mE.get(r.id);n&&n()}else{for(let s of wH)s(r,e);let n=vR.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){Vs.error(i)}}}).on("close",()=>{fn.splice(fn.indexOf(e),1)}).on("exit",()=>{fn.splice(fn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(pE,"addPort");if(HR){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await bne(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(pH(n,i.name));try{for await(let{filename:i}of One(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await FR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");Ai.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else _s.on("message",async e=>{let{type:t}=e;t===pl.ITC_EVENT_TYPES.SHUTDOWN&&(Ai.exports.restartNumber=e.restartNumber,_s.unref(),setTimeout(()=>{Vs.warn("Thread did not voluntarily terminate",Tne),process.exit(0)},xR).unref())})});var xw={};Ve(xw,{AUDIT_STORE_OPTIONS:()=>FH,createAuditEntry:()=>i_,openAuditStore:()=>RE,readAuditEntry:()=>Bt,setAuditRetention:()=>Qne,transactionKeyEncoder:()=>qH});function RE(e){let t=e.auditStore=e.openDB(BH.AUDIT_STORE_NAME,FH);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=SE){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()-GR})){if((_[0]&15)===$R){let l=Bt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=Wne){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,GR/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,gE.getWorkerIndex)()===(0,gE.getWorkerCount)()-1&&s(SE),t}function Qne(e,t=SE){GR=e,SE=t}function i_(e,t,r,n,s,i,o){let c=GH[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let u=1;n&&(n>1?Ga.setFloat64(0,n):En.set(Gh),u=9),f(0),f(t),d(r),Ga.setFloat64(u,e),u+=8,s?d(s):En[u++]=0,En[n?8:0]=c;let l=En.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,ka.writeKey)(E,En,u);let p=u-h-1;p>127?p>16383?(KR.error("Key or username was too large for audit entry",E),u=h+1,En[h]=0):(En.copyWithin(h+2,h+1,u),Ga.setUint16(h,p|32768),u++):En[h]=p}function f(E){E<128?En[u++]=E:E<16384?(Ga.setUint16(u,E|32768),u+=2):E<1056964608?(Ga.setUint32(u,E|3221225472),u+=4):(En[u]=255,Ga.setUint32(u+1,E),u+=5)}}function Bt(e){try{let t=e.dataView||(e.dataView=new YR(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:GH[n&7],tableId:i,get recordId(){return vH(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?vH(e,l,d):void 0},getValue(f,E,h){if(n&kR||n&VR&&!E)return f.decoder.decode(e.subarray(t.position));if(n&VR&&h)return WR(f.getEntry(this.recordId),h,f)}}}catch{return KR.error("Reading audit entry error",e),{}}}function vH(e,t,r){let n=e.subarray(t,r);return(0,ka.readKey)(n,0,r-t)}var ka,TE,BH,HH,gE,xH,KR,En,Ga,qH,FH,GR,Wne,SE,kR,VR,DH,$R,MH,UH,PH,GH,YR,Pi=Ae(()=>{ka=require("ordered-binary"),TE=v(j()),BH=v(ht()),HH=v(M()),gE=v(tt()),xH=v(J());Rc();KR=v(V());AE();(0,TE.initSync)();En=Buffer.alloc(1024),Ga=new DataView(En.buffer,En.byteOffset,1024),qH={writeKey(e,t,r){return e===gc?(t.set(gc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,ka.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,ka.readKey)(e,t,r)}},FH={encoding:"binary",keyEncoder:qH},GR=(0,xH.convertToMS)((0,TE.get)(HH.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Wne=1e3,SE=1e4;a(RE,"openAuditStore");a(Qne,"setAuditRetention");kR=16,VR=32,DH=1,$R=2,MH=3,UH=4,PH=5,GH={put:DH|kR,[DH]:"put",delete:$R,[$R]:"delete",message:MH|kR,[MH]:"message",invalidate:UH,[UH]:"invalidate",patch:PH|VR,[PH]:"patch"};a(i_,"createAuditEntry");a(Bt,"readAuditEntry");YR=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(vH,"readKeySafely")});var QR={};Ve(QR,{add:()=>OE,applyReverse:()=>kH,getRecordAtTime:()=>WR,rebuildUpdateBefore:()=>bE});function OE(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function bE(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,OE(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function kH(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=zne[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=VH}}function WR(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let u=n.get(i),_=Bt(u);switch(_.type){case"put":s=_.getValue(r);break;case"patch":kH(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let u in s)s[u]===VH&&(o[u]=!0,c++);for(;c>0&&i>0;){let u=n.get(i),_=Bt(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 zne,VH,AE=Ae(()=>{Pi();a(OE,"add");OE.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};zne={add:OE};a(bE,"rebuildUpdateBefore");a(kH,"applyReverse");VH={};a(WR,"getRecordAtTime")});function Yr(e){return e[Mt]||(e[Mt]=Object.create(null))}function CE(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[Re])},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 hn.ClientError(`${c} must be a string, attempt to assign ${l}`);Yr(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 hn.ClientError(`${c} must be a string, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new hn.ClientError(`${c} must be a number, attempt to assign ${l}`);Yr(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 hn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Yr(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 hn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Yr(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 hn.ClientError(`${c} must be a number, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new hn.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Yr(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 hn.ClientError(`${c} must be a Date, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new hn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Yr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new hn.ClientError(`${c} must be an object, attempt to assign ${l}`);Yr(this)[c]=l},"set")}_={get(){let l=this[Mt];if(l&&c in l){let f=l[c];if(f?.__op__){let E=this[ye]?.[c];return f.update(E)}return f}let d=this[ye]?.[c];if(d&&typeof d=="object"){let f=$H(d,o);if(f)return l||(l=this[Mt]=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[Mt];return u?.[o]!==void 0?u[o]:this[ye]?.[o]}),i("set",function(o,c){let u=n[o];if(u)return u.set.call(this,c);if(t.sealed)throw new hn.ClientError("Can not add a property to a sealed table schema");Yr(this)[o]=c}),i("deleteProperty",function(o){Yr(this)[o]=void 0}),i("toJSON",function(){let o=this[Mt],c;for(let _ in o){c||(c=Object.assign({},this[ye]));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[ye])),Object.assign(c,this)),c||this[ye]}),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 $H(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){this[ye]=s}},CE(r,t)),new r(e)):new NE(e);case Array:let n=new IE(e.length);n[ye]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=$H(o,t?.elements)),n[s]=o}return n;default:return e}}function Q_(e){let t=e[Mt],r;for(let s in t){r||(r=Object.assign({},e[ye]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=Q_(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ye])),Object.assign(r,e)),r||e[ye]}function wo(e,t=e[Mt]){let r;if(e[ye]&&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=wo(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[ye]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=QR[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=wo(s);r[n]=s}return r?Object.freeze(r):e[ye]||e}function yE(e){let t=e[ye];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Io]||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?.[ye]===s){if(yE(i))return!0}else return!0}}else{let r=e[Mt];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[ye]===i){if(yE(s))return!0}else return!0}else return!0}}return!1}var hn,Mt,NE,Io,IE,wE,z_=Ae(()=>{yn();hn=v(Z());AE();Mt=Symbol("own-data");a(Yr,"getChanges");a(CE,"assignTrackedAccessors");a($H,"trackObject");NE=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ye]=t}};CE(NE,{});a(Q_,"collapseData");a(wo,"deepFreeze");a(yE,"hasChanges");Io=Symbol.for("has-array-changes"),IE=class extends Array{static{a(this,"TrackedArray")}[Io];constructor(t){super(t)}splice(...t){return this[Io]=!0,super.splice(...t)}push(...t){return this[Io]=!0,super.push(...t)}pop(){return this[Io]=!0,super.pop()}unshift(...t){return this[Io]=!0,super.unshift(...t)}shift(){return this[Io]=!0,super.shift()}};IE.prototype.constructor=Array;wE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var _p={};Ve(_p,{CONTEXT:()=>Re,ID_PROPERTY:()=>De,IS_COLLECTION:()=>mn,RECORD_PROPERTY:()=>ye,Resource:()=>qt,snake_case:()=>Xne,transformForSelect:()=>DE});function Xne(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function YH(e,t){if(Sl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(Sl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new JR;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){Sl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}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[Re]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(l=s,c=l[this.primaryKey]??null,o=i[Re]||i):l=i:(l=s,c=l[De]??l[this.primaryKey]??null):i?o=i[Re]||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,Qe(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 LE(o.user);return typeof l?.then=="function"?l.then(S=>e(E,u,o,S)):e(E,u,o,l)});if(!h)throw new LE(o.user)}return typeof l?.then=="function"?l.then(h=>e(E,u,o,h)):e(E,u,o,l)}a(f,"authorizeActionOnResource")}}function Wr(e,t){let r=new QH.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 zR(e,t,r){let n=e[ye];if(n){let s=e[Mt];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 DE(e,t){let r=t?.propertyResolvers,n=t[Re],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):zR(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(zR(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(zR(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]=DE(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var KH,WH,QH,Re,De,mn,ye,Jne,qt,LE,Sl,JR,yn=Ae(()=>{KH=require("crypto");Ec();WH=require("../../index"),QH=v(Z());z_();Ji();Rf();Re=Symbol.for("context"),De=Symbol.for("primary-key"),mn=Symbol("is-collection"),ye=Symbol("stored-record"),Jne={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},qt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[De]=t;let n=r?.[Re];this[Re]=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 _=DE(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[mn]){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):Wr(t,"put")},{hasContent:!0,type:"update"});static patch=Kr(function(t,r,n,s){return t.patch?t.patch(s,r):Wr(t,"patch")},{hasContent:!0,type:"update"});static delete=Kr(function(t,r,n,s){return t.delete?t.delete(r):Wr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,KH.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),Qe(n,()=>{let i=new this(s,n),o=i.update?i.update(r):Wr(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):Wr(t,"delete")},{hasContent:!1,type:"update"});static post=Kr(function(t,r,n,s){return t[De]!=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):Wr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Kr(function(t,r,n,s){return t.subscribe?t.subscribe(r):Wr(t,"subscribe")},{type:"read"});static publish=Kr(function(t,r,n,s){return t[De]!=null&&t.update?.(),t.publish?t.publish(s,r):Wr(t,"publish")},{hasContent:!0,type:"create"});static search=Kr(function(t,r,n,s){let i=t.search?t.search(r):Wr(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=DE(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):Wr(t,"search")},{hasContent:!0,type:"read"});static copy=Kr(function(t,r,n,s){return t.copy?t.copy(s,r):Wr(t,"copy")},{type:"create"});static move=Kr(function(t,r,n,s){return t.move?t.move(s,r):Wr(t,"move")},{type:"delete"});post(t){if(this[mn])return this.constructor.create(this[De],t,this[Re]);Wr(this,"post")}static isCollection(t){return t?.[mn]}static coerceId(t){return t}static parseQuery(t){return gf(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&&Jne[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:YH(t,this),isCollection:Sl}}let i=YH(t,this);return Sl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Re],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(_=>_[De]===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[De],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[mn]=!0),s}subscribe(t){return new Nn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Nn}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[De]}getContext(){return this[Re]}};qt.prototype[Re]=null;(0,WH._assignPackageExport)("Resource",qt);a(Xne,"snake_case");LE=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(YH,"pathToId");JR=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Kr,"transactional");a(Wr,"missingMethod");a(zR,"selectFromObject");a(DE,"transformForSelect")});function JH(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;Va||((0,ME.onMessageByType)(zH,l=>{XH(l.path)}),Va=Object.create(null));let o=Va[s]||(Va[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=pa(t);let u=new jR(r);u.startTime=n;let _=c.get(t);return _?_.push(u):(c.set(t,_=[u]),_.tables=c,_.key=t),u.subscriptions=_,u}function XH(e,t){if(!Va)return;let r=Va[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=Bt(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=pa(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,XR.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,XR.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,ME.broadcast)({type:zH,path:s}),XH(s,!0)})}}var XR,ME,zH,Va,cme,jR,ZH=Ae(()=>{XR=v(V()),ME=v(tt());Ec();Pu();Pi();zH="transaction",cme=Buffer.alloc(4096);a(JH,"addSubscription");jR=class extends Nn{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(XH,"notifyFromTransactionData");a(jH,"listenToCommits")});var Dg={};Ve(Dg,{coerceType:()=>UE,makeTable:()=>BE,setServerUtilities:()=>ose,updateResource:()=>PE});function BE(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=$h(i,n,u),A=0,I,w,B,K={},q=Promise.resolve(),P,Q,Y;for(let k of p)(k.assignCreatedTime||k.name==="__createdtime__")&&(P=k),(k.assignUpdatedTime||k.name==="__updatedtime__")&&(Q=k),k.expiresAt&&(Y=k),k.isPrimaryKey&&(K=k);let z,re=[],Ie=[],ne=1,ct=2,de={},ut={},Tn=864e5,lA,Dl,$s,_A=!1,KE,Lx=i.getRange({start:!1,end:!1}).constructor,Dx=10,Mx=6;E&&EA();class Ke extends qt{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=P;static updatedTimeProperty=Q;static propertyResolvers;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,g){g&&(this.sourceOptions=g,(g.expiration||g.eviction||g.scanInterval)&&this.setTTLExpiration(g)),g?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),w=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let N=a(b=>{let y=this.sources.slice(0,-1);if(y=y.filter(L=>L[b]&&(!L[b].reliesOnPrototype||L.prototype[b])),y.length>0)if(y.length===1){let L=y[0];return(D,U,x)=>{if(D?.source!==L)return L[b](U,x,D)}}else return(L,D,U)=>{let x=[];for(let W of y){if(L?.source===W)break;x.push(W[b](D,U,L))}return Promise.all(x)}},"getApplyToIntermediateSource"),R=this.sources[this.sources.length-1],O=a(b=>{if(R[b]&&(!R[b].reliesOnPrototype||R.prototype[b]))return(y,L,D)=>{if(!y?.source)return R[b](L,D,y)}},"getApplyToCanonicalSource");return de={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},ut={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish"),invalidate:N("invalidate")},(async()=>{let b=!1,y=a(async(L,D)=>{let U=L.value,x=L.table?rt[c][L.table]:Ke;if(c===Fn.SYSTEM_SCHEMA_NAME&&(L.table===Fn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||L.table===Fn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(b=!0),L.id===void 0&&(L.id=U[x.primaryKey],L.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(L));L.source=m;let W=await x.getResource(L.id,D,$a);switch(L.type){case"put":return W._writeUpdate(U,!0,$a);case"patch":return W._writeUpdate(U,!1,$a);case"delete":return W._writeDelete($a);case"publish":return W._writePublish(U,$a);case"invalidate":return W.invalidate($a);default:Je.error("Unknown operation",L.type,L.id)}},"writeUpdate");try{let L=m.subscribe;L&&h==null&&(h=!0);let D=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Co.getWorkerIndex)()):(0,Co.getWorkerIndex)()===0,U=L&&D&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(U){let x;for await(let W of U)try{if(!(W.type==="transaction"?W.writes[0]:W)){Je.error("Bad subscription event",W);continue}if(W.source=m,x)if(W.beginTxn)x.resolve();else{y(W,x);continue}if(W.type==="end_txn")continue;let le=Qe(W,()=>{if(W.type==="transaction"){let te=[];for(let se of W.writes)try{te.push(y(se,W))}catch(He){throw He.message+=" writing "+JSON.stringify(se)+" of event "+JSON.stringify(W),He}return Promise.all(te)}else if(W.type==="define_schema"){let te=this.attributes.slice(0),se;for(let He of W.attributes)te.find(ie=>ie.name===He.name)||(te.push(He),se=!0);se&&(_t({table:s,database:c,attributes:te,origin:"cluster"}),Nl.signalSchemaChange(new yl.SchemaEventMsg(process.pid,Fn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return W.beginTxn?(x=W,y(W,W),new Promise(te=>{x.resolve=te})):y(W,W)});b&&(await le,Nl.signalUserChange(new yl.UserEventMsg(process.pid))),W.onCommit&&(le?.then?le.then(W.onCommit):W.onCommit())}catch(Se){Je.error("error in subscription handler",Se)}}}catch(L){Je.error(L)}})(),this}static getResource(m,g,N){let R=super.getResource(m,g,N);if(m!=null){za(m);try{if(R.hasOwnProperty(ye))return R;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let O=!N?.async||i.cache?.get(m),b=Nr(g),y=b.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return WE(m,g,{transaction:y},O,L=>{if(L?PE(R,L):R[ye]=null,g.onlyIfCached&&g.noCacheStore){if(!R.doesExist())throw new pn.ServerError("Entry is not cached",504)}else if(N?.ensureLoaded){let D=QE(m,L,g,R);if(D)return b?.disregardReadTxn(),R[ZR]=!0,tA(D,U=>(PE(R,U),R))}return R})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(m)),O}}return R}ensureLoaded(){let m=QE(this[De],this[Qr],this[Re]);if(m)return this[ZR]=!0,tA(m,g=>{this[Qr]=g,this[ye]=g.value,this[Ol]=g.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,Tn=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");Tn=Tn||(d+f)/4,JE()}static enableAuditing(m=!0){E=m,m&&EA(),Ke.audit=m}static coerceId(m){return m===""?null:UE(m,K)}static async dropTable(){if(delete rt[c][s],c===o){for(let m of p)l.remove(Ke.tableName+"/"+m.name),r[m.name]?.drop();l.remove(Ke.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));Nl.signalSchemaChange(new yl.SchemaEventMsg(process.pid,Fn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[mn])return this.search(m);if(this[De]===null){if(m?.conditions)return this.search(m);let g=Ke.getRecordCount();return{recordCount:g.recordCount,estimatedRecordRange:g.estimatedRange,records:"./",name:s,database:c,attributes:p}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[Re]?.returnNonexistent)return this}allowRead(m,g){let N=Ul(m);if(N?.read){if(N.isSuperUser)return!0;let R=N.attribute_permissions,O=g?.select;if(R?.length>0||_A&&O){if(g||(g={}),O){let b=R?.length>0&&eA(R,"read");g.select=O.map(y=>{let L=y.name||y;if(!b||b[L]){let D=$s[L]?.definition?.tableClass;if(D){if(y.name||(y={name:y}),!D.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else g.select=R.filter(b=>b.read&&!$s[b.attribute_name]).map(b=>b.attribute_name);return g}else return!0}}allowUpdate(m,g){let N=Ul(m);if(N?.update){let R=N.attribute_permissions;if(R?.length>0){let O=eA(R,"update");for(let b in g)if(!O[b])return!1;for(let b of R){let y=b.attribute_name;!b.update&&!(y in g)&&(g[y]=this.getProperty(y))}}return!0}}allowCreate(m,g){if(this[mn]){let N=Ul(m);if(N?.insert){let R=N.attribute_permissions;if(R?.length>0){let O=eA(R,"insert");for(let b in g)if(!O[b])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return Ul(m)?.delete}update(m,g){if(!Nr(this[Re]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let R;return typeof m=="object"&&m&&(g?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[ye]={},this[Mt]=m):(R=this[Mt],R&&(m=Object.assign(R,m)),this[Mt]=R=m)),this._writeUpdate(this[Mt],g),this}addTo(m,g){if(typeof g=="number")this[Tl]===tx?this.set(m,(+this.getProperty(m)||0)+g):(this[Tl]||this.update(),this.set(m,new wE(g)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,g){if(typeof g=="number")return this.addTo(m,-g);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let g=this[Re],N=this[De];za(N),Nr(this[Re]).addWrite({key:N,store:i,invalidated:!0,entry:this[Qr],nodeName:this[Re]?.nodeName,before:de.invalidate?.bind(this,g,N),beforeIntermediate:ut.invalidate?.bind(this,g,N),commit:(O,b)=>{if(b?.version>O)return;let y=null;for(let L in r)y||(y={}),y[L]=this.getProperty(L);S(N,y,this[Qr],O,gl,E,this[Re],0,"invalidate")}})}static evict(m,g,N){let R=this.Source,O;if(!((w||E)&&(!g||(O=i.getEntry(m),!O||!g)||O.version!==N))){if(w){if(i.hasLock(m,O.version))return;let b;for(let y in r)b||(b={}),b[y]=g[y];if(b)return S(m,b,O,N,Rl,null,null,0,null,!0)}return i.ifVersion(N,()=>{Ml(m,g,null)}),E?S(m,null,O,N,Rl,null,null,0,null,!0):i.remove(m,N)}}lock(){throw new Error("Not yet implemented")}static operation(m,g){return m.table||=s,m.schema||=c,ax.operation(m,g)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,g,N){let R=this[Re],O=Nr(R),b=this[De];za(b);let y=this[Qr];this[Tl]=g?tx:nse;let L={key:b,store:i,entry:y,nodeName:R?.nodeName,validate:D=>{m||(m=this[Mt]),g||m&&yE(m)?(this.validate(m,!g),R?.source||(Q&&(m[Q.name]=Q.type==="Date"?new Date(D):Q.type==="String"?new Date(D).toISOString():D),g&&(t&&m[t]!==b&&(m[t]=b),P&&(y?.value?m[P.name]=y?.value[P.name]:m[P.name]=P.type==="Date"?new Date(D):P.type==="String"?new Date(D).toISOString():D),m=wo(m)))):O.removeWrite(L)},before:g?de.put?()=>de.put(R,b,m):null:de.patch?()=>de.patch(R,b,m):de.put?()=>de.put(R,b,wo(this)):null,beforeIntermediate:g?ut.put?()=>ut.put(R,b,m):null:ut.patch?()=>ut.patch(R,b,m):ut.put?()=>ut.put(R,b,wo(this)):null,commit:(D,U,x)=>{x&&(R&&U?.version>(R.lastModified||0)&&(R.lastModified=U.version),this[Qr]=U,g||(this[ye]=U?.value??null)),this[Mt]=m,this[Ol]=D;let W=U?.value,Se=m;if(this[Tl]=0,U?.version>D)if(E){let He=U.localTime,ie=U.version;for(;Se&&(He>D||ie>D&&He>0);){let _e=u.get(He),ke=Bt(_e);if(ie=ke.version,ie>D)if(ke.type==="patch"){let Ue=ke.getValue(i);Se=bE(Se,Ue)}else(ke.type==="put"||ke.type==="delete")&&(Se=null);He=ke.previousLocalTime}}else g?Se=null:Se=bE(Se,W);let le=wo(this,Se);this[ye]=le;let te;g||(te=m),Ml(b,W,le);let se=g?"put":"patch";S(b,le,U,D,0,E,R,R.expiresAt||(d?d+Date.now():0),se,!1,te)}};O.addWrite(L)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[mn]){for await(let g of this.search(m))(await Ke.getResource(g[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[ye]?this._writeDelete(m):!1}_writeDelete(m){let g=Nr(this[Re]),N=this[De];za(N);let R=this[Re];return g.addWrite({key:N,store:i,resource:this,nodeName:R?.nodeName,before:de.delete?.bind(this,R,N),beforeIntermediate:ut.delete?.bind(this,R,N),commit:(O,b,y)=>{let L=b?.value;y&&(R&&b?.version>(R.lastModified||0)&&(R.lastModified=b.version),PE(this,b)),!(b?.version>O)&&(Ml(this[De],L),Je.trace("Write delete entry",N,O),E||h?(S(N,null,this[Qr],O,0,E,this[Re],0,"delete"),E||JE()):i.remove(this[De]))}}),!0}search(m){let g=this[Re],N=Nr(g);if(!m)throw new Error("No query provided");let R=m.conditions;R?R.length===void 0&&(R=R[Symbol.iterator]?Array.from(R):[R]):R=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[De]&&(R=[{attribute:null,comparator:"prefix",value:this[De]}].concat(R));let O,b={};function y(oe,bt){let je;switch(bt){case"and":case void 0:if(oe.length<1)throw new Error('An "and" operator requires at least one condition');je=!0;break;case"or":if(oe.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+bt)}let Ut=je&&{},gn;for(let Pe of oe){if(Pe.conditions){Pe.conditions=y(Pe.conditions,Pe.operator);continue}let Ze=Pe[0]??Pe.attribute,Rn=Ze==null?K:Bs(p,Ze);if(Rn){if(je){let Ni=Ti(Ze),Gn=Ut[Ni];Gn?(Gn.push(Pe),gn=!0):Ut[Ni]=[Pe]}Rn.type&&(Pe[1]===void 0?Pe.value=D(Pe.value,Rn):Pe[1]=D(Pe[1],Rn))}else if(Ze!=null)throw(0,pn.handleHDBError)(new Error,`${Ze} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return oe;if(gn)for(let Pe in Ut){let Ze=Ut[Pe],Rn=Ze.length;if(Rn>1)for(let Ni=0;Ni<Rn;Ni++){let Gn=Ze[Ni];if(Gn.comparator==="ge"||Gn.comparator==="greater_than_equal")for(let Ys=0;Ys<Rn;Ys++){let Uo=Ze[Ys];(Uo.comparator==="le"||Uo.comparator==="less_than_equal")&&(Gn.comparator="between",Gn.value=[Gn.value,Uo.value],oe.splice(oe.indexOf(Uo),1))}if(Gn.comparator==="equals"||!Gn.comparator){for(let Ys=0;Ys<Rn;Ys++)if(Ys!==Ni){let Uo=Ze[Ys];oe.splice(oe.indexOf(Uo),1)}break}}}return oe}a(y,"prepareConditions");function L(oe,bt){if(m.enforceExecutionOrder)return oe;for(let je of oe)je.conditions&&(je.conditions=L(je.conditions,je.operator));return oe.length>1&&bt!=="or"?(0,ox.sortBy)(oe,fg(Ke)):oe}a(L,"orderConditions");function D(oe,bt){return Array.isArray(oe)?oe.map(je=>UE(je,bt)):UE(oe,bt)}a(D,"coerceTypedValues");let U=m.operator;(R.length>0||U)&&(R=y(R,U));let x=typeof m.sort=="object"&&m.sort,W;if(x&&U!=="or"){let oe=x.attribute;if(O=R.find(bt=>Ti(bt.attribute)===Ti(oe)),!O){if(!Bs(p,oe))throw(0,pn.handleHDBError)(new Error,`${Array.isArray(oe)?oe.join("."):oe} is not a defined attribute`,404);O={attribute:oe},R.push(O)}O.descending=!!x.descending}R=L(R,U),x&&(R[0]===O?x.next&&(W={dbOrderedAttribute:x.attribute,attribute:x.next.attribute,descending:x.next.descending,next:x.next.next}):(O&&R.splice(R.indexOf(O),1),W=x));function Se(oe,bt){let je=oe[0];if(bt==="or"){let Ut=te(je);for(let Pe=1;Pe<oe.length;Pe++){let Ze=oe[Pe],Rn=te(Ze);Ut=Ut.concat(Rn)}let gn=new Set;return Ut.filter(Pe=>{let Ze=Pe.key??Pe;return gn.has(Ze)?!1:(gn.add(Ze),!0)})}else{let Ut=te(je),gn=oe.slice(1).map(Pe=>Zu(Pe,Ke,g,b)).filter(Boolean);return gn.length>0?dA(Ut,se,g,gn):Ut}}a(Se,"executeConditions");let le=m.reverse===!0;function te(oe){return oe.conditions?Se(oe.conditions,oe.operator):ju(oe,N,oe.descending||le,Ke,m.allowFullScan,b)}a(te,"executeCondition");let se=m.select;if(R.length===0&&(R=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:R,operator:U,postOrdering:W,selectApplied:!!se};let He=N.useReadTxn(),ie=Se(R,U);(m.offset||m.limit!==void 0)&&(ie=ie.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0));let _e=m.ensureLoaded!==!1,ke=Ke.transformEntryForSelect(se,g,b,_e,!0),Ue=Ke.transformToOrderedSelect(ie,se,W,g,ke);return Ue.onDone=()=>{Ue.results=null,N.doneReadTxn()},Ue.selectApplied=!0,Ue}static transformToOrderedSelect(m,g,N,R,O){let b=new Lx;if(N){m=dA(m,g,R,null);let y;b.iterate=function(){let D,U=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),x,W=N.dbOrderedAttribute,Se,le,te=!0;function se(ie){let _e=ie.next&&se(ie.next),ke=ie.descending;return(Ue,oe)=>{let bt=zE(Ue,ie.attribute,R),je=zE(oe,ie.attribute,R),Ut=ke?(0,Lo.compareKeys)(je,bt):(0,Lo.compareKeys)(bt,je);return Ut===0?_e?.(Ue,oe)||0:Ut}}a(se,"createComparator");let He=se(N);return{async next(){let ie;if(D)if(ie=D.next(),ie.done){if(x)return b.onDone&&b.onDone(),ie}else return{value:await O(ie.value)};y=[],Se&&y.push(Se);do if(ie=await U.next(),ie.done){if(x=!0,y.length)break;return b.onDone&&b.onDone(),ie}else{let _e=ie.value;if(_e?.then&&(_e=await _e),W){let ke=zE(_e,W,R);if(te)te=!1,le=ke;else if(ke!==le){le=ke,Se=_e;break}}y.push(_e)}while(!0);return N.isGrouped,y.sort(He),D=y[Symbol.iterator](),ie=D.next(),ie.done?(b.onDone&&b.onDone(),ie):{value:await O(ie.value)}},return(){b.onDone&&b.onDone(),U.return()},throw(){b.onDone&&b.onDone(),U.throw()}}};let L=a(D=>{if(typeof g=="object"&&Array.isArray(D.attribute))for(let U=0;U<g.length;U++){let x=g[U],W;if(x.name===D.attribute[0]){for(W=x.sort||(x.sort={});W.next;)W=W.next;W.attribute=D.attribute.slice(1),W.descending=D.descending}else x===D.attribute[0]&&(g[U]=W={name:x,sort:{attribute:D.attribute.slice(1),descending:D.descending}})}D.next&&L(D.next)},"applySortingOnSelect");L(N)}else b.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),b=b.map(O);return b}static transformEntryForSelect(m,g,N,R,O){if(m&&(m===t||m?.length===1&&m[0]===t)){let D=a(U=>U?.key??U,"transform");return m===t?D:m.asArray?U=>[D(U)]:U=>({[t]:D(U)})}let b;R&&w&&!m?.every(D=>{let U;return typeof D=="object"?U=D.name:U=D,r[U]||U===t})&&(b=!0);let y,L=a(D=>{let U;if(D){if(KE=D,U=D.value||D.deref?.(),!U&&(D.key===void 0||D.deref)){if(D=WE(D.key??D,g,{transaction:Nr(g).getReadTxn(),lazy:m?.length<4},!1,x=>x),D?.then)return D.then(L);U=D?.value}if(b&&(D.metadataFlags&(gl|Rl)||D.expiresAt&&D.expiresAt<Date.now())){let x=QE(D.key??D,D,g);if(x?.then)return x.then(L)}}if(U==null)return O?Ya.SKIP:U;if(m&&!(m[0]==="*"&&m.length===1)){let x,W=a((le,te)=>{let se;typeof le=="object"?se=le.name:se=le;let He=$s?.[se],ie;if(He){let _e=N?.[se];if(_e)if(_e.fromRecord)ie=_e.fromRecord(U);else{let Ue=Ti(D.key);ie=_e.get(Ue),ie||(ie=[])}else ie=He(U,g,D);let ke=a(Ue=>{if(Ue&&typeof Ue=="object"){let oe=He.definition?.tableClass||Ke;y||(y={});let bt=y[se]||(y[se]=oe.transformEntryForSelect(se===le?null:le.select||(Array.isArray(le)?le:null),g,_e,R));if(Array.isArray(Ue)){let je=[],Ut=oe.transformToOrderedSelect(Ue,le.select,typeof le.sort=="object"&&le.sort,g,bt)[Symbol.asyncIterator](),gn=a(Ze=>{for(;!Ze.done;){if(Ze?.then)return Ze.then(gn);je.push(Ze.value),Ze=Ut.next()}te(je,se)},"nextValue"),Pe=gn(Ut.next());Pe&&(x||(x=[]),x.push(Pe));return}else if(Ue=bt(Ue),Ue?.then){x||(x=[]),x.push(Ue.then(je=>te(je,se)));return}}te(Ue,se)},"handleResolvedValue");ie?.then?(x||(x=[]),x.push(ie.then(ke))):ke(ie);return}else ie=U[se],ie&&typeof ie=="object"&&se!==le&&(ie=this.transformEntryForSelect(le.select||le,g,null)({value:ie}));te(ie,se)},"selectAttribute"),Se;if(typeof m=="string")W(m,le=>{Se=le});else if(Array.isArray(m))if(m.asArray)Se=[],m.forEach((le,te)=>{le==="*"?m[te]=U:W(le,se=>Se[te]=se)});else{Se={};let le=m.forceNulls;for(let te of m)if(te==="*")for(let se in U)Se[se]=U[se];else W(te,(se,He)=>{se===void 0&&le&&(se=null),Se[He]=se})}else throw new pn.ClientError("Invalid select"+m);return x?Promise.all(x).then(()=>Se):Se}return U},"transform");return L}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||_t({table:s,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let g=!m.rawEvents,N=JH(Ke,this[De]??null,function(y,L,D,U){try{let x=L.getValue?.(i,g);if(!x&&L.type==="patch"&&g){let W=i.getEntry(y);W?.version===L.version?x=W.value:x=L.getValue?.(i,!0,D)}this.send({id:y,timestamp:D,value:x,version:L.version,type:L.type,beginTxn:U})}catch(x){Je.error(x)}},m.startTime||0,this[mn]);this[mn]&&(N.includeDescendants=!0,m.onlyChildren&&(N.onlyChildren=!0)),m.crossThreads===!1&&(N.crossThreads=!1),m.supportsTransactions&&(N.supportsTransactions=!0);let R=this[De],O=m.previousCount;O>1e3&&(O=1e3);let b=m.startTime;if(this[mn]){if(b){if(O)throw new pn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:L}of u.getRange({start:b,exclusiveStart:!0})){let D=Bt(L);if(D.tableId!==n)continue;let U=D.recordId;(R==null||sx(R,U))&&N.send({id:U,timestamp:y,...D}),N.startTime=y}}else if(O){let y=[];for(let{key:L,value:D}of u.getRange({start:"z",end:!1,reverse:!0}))try{let U=Bt(D);if(U.tableId!==n)continue;let x=U.recordId;if(R==null||sx(R,x)){let W=U.getValue(i,g,L);if(y.push({id:x,timestamp:L,value:W,version:U.version,type:U.type}),--O<=0)break}}catch(U){Je.error("Error getting history entry",L,U)}for(let L=y.length;L>0;)N.send(y[--L]);y[0]&&(N.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:L,version:D,localTime:U}of i.getRange({start:R??!1,end:R==null?void 0:[R,Lo.MAXIMUM_KEY],versions:!0}))L&&N.send({id:y,version:D,timestamp:U,value:L})}else{O&&!b&&(b=0);let y=this[Qr]?.localTime;if(y===Vh&&(i.cache?.delete(R),this[Qr]=i.getEntry(R),Je.warn("re-retrieved record",y,this[Qr]?.localTime),y=this[Qr]?.localTime),Je.trace("Subscription from",b,"from",R,y),b<y){let L=[],D=y;do{let U=u.get(D);if(U){m.omitCurrent=!0;let x=Bt(U),W=x.getValue(i,g,D);L.push({id:R,value:W,timestamp:D,...x}),D=x.previousLocalTime}else break;O&&O--}while(D>b&&O!==0);for(let U=L.length;U>0;)N.send(L[--U]);N.startTime=y}!m.omitCurrent&&this.doesExist()&&N.send({id:R,version:this[Ol],timestamp:y,value:this})}return m.listener&&N.on("data",m.listener),N}doesExist(){return!!(this[ye]||this[Tl])}publish(m,g){this._writePublish(m,g)}_writePublish(m,g){let N=Nr(this[Re]),R=this[De]||null;za(R);let O=this[Re];N.addWrite({key:R,store:i,entry:this[Qr],nodeName:O?.nodeName,validate:()=>{this.validate(m)},before:de.publish?.bind(this,O,R,m),beforeIntermediate:ut.publish?.bind(this,O,R,m),commit:(b,y,L)=>{y===void 0&&h&&!E&&JE(),S(R,y?.value??null,y,y?.version||b,0,!0,O,y?.expiresAt,"message",!1,m)}})}validate(m,g){let N,R=a((O,b,y)=>{if(b.type&&O!=null)if(g&&O.__op__&&(O=O.value),b.properties){typeof O!="object"&&(N||(N=[])).push(`Property ${y} must be an object${b.type?" ("+b.type+")":""}`);let L=b.properties;for(let D=0,U=L.length;D<U;D++){let x=L[D],W=R(O[x.name],x,y+"."+x.name);W&&(O[x.name]=W)}}else switch(b.type){case"Int":(typeof O!="number"||O>>0!==O)&&(N||(N=[])).push(`Property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(N||(N=[])).push(`Property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(N||(N=[])).push(`Property ${y} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(L=>typeof L=="string")||(N||(N=[])).push(`Property ${y} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(N||(N=[])).push(`Property ${y} must be a string`);break;case"Boolean":typeof O!="boolean"&&(N||(N=[])).push(`Property ${y} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(N||(N=[])).push(`Property ${y} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(N||(N=[])).push(`Property ${y} must be a bigint`)}break;case"Bytes":O instanceof Uint8Array||(N||(N=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(O)){if(b.elements)for(let L=0,D=O.length;L<D;L++){let U=O[L],x=R(U,b.elements,y+"[*]");x&&(O[L]=x)}}else(N||(N=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break}b.nullable===!1&&O==null&&(N||(N=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let O=0,b=p.length;O<b;O++){let y=p[O];if(!y.relationship&&(!g||y.name in m)){let L=R(m[y.name],y,y.name);L&&(m[y.name]=L)}}if(N)throw new pn.ClientError(N.join(". "))}getUpdatedTime(){return this[Ol]}wasLoadedFromSource(){return w?!!this[ZR]:void 0}static async addAttributes(m){let g=p.slice(0);for(let N of m){if(!N.name)throw new pn.ClientError("Attribute name is required");if(N.name.match(/[`/]/))throw new pn.ClientError("Attribute names cannot include backticks or forward slashes");g.push(N)}return _t({table:s,database:c,schemaDefined:_,attributes:g}),Ke.indexingOperation}static async removeAttributes(m){let g=p.filter(N=>!m.includes(N.name));return _t({table:s,database:c,schemaDefined:_,attributes:g}),Ke.indexingOperation}static getRecordCount(m){let g=i.getStats().entryCount,N=5e3,R=1e3,O;g>N&&!m?.exactCount&&(O=R);let b=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:O}))y!=null&&b++;if(O){let y=b;b=0;for(let{value:se}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:O}))se!=null&&b++;let L=O*2,D=(b+y)/L,U=Math.pow((b-y+1)/O/2,2)+D*(1-D)/L,x=Math.max(Math.sqrt(U)*g,1),W=Math.round(D*g),Se=Math.max(W-1.96*x,0),le=Math.min(W+1.96*x,g),te=Math.pow(10,Math.round(Math.log10(x)));return te>W&&(te=te/10),b=Math.round(W/te)*te,{recordCount:b,estimatedRange:[Math.round(Se),Math.round(le)]}}return{recordCount:b}}static updatedAttributes(){$s=this.propertyResolvers={$id:(m,g,N)=>({value:N.key}),$updatedtime:(m,g,N)=>N.version,$record:(m,g,N)=>N?{value:m}:m};for(let m of this.attributes){m.resolve=null;let g=m.relationship;if(g)if(_A=!0,g.to)m.elements?.definition?($s[m.name]=m.resolve=(N,R,O)=>{let b=N[g.from?g.from:t],y=m.elements.definition.tableClass;return O?ju({attribute:g.to,value:b},Nr(R).getReadTxn(),!1,y).asArray:y.search([{attribute:g.to,value:b}],R).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition):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(g.from){let N=m.definition||m.elements?.definition;N?($s[m.name]=m.resolve=(R,O,b)=>{let y=R[g.from];if(y!==void 0){if(m.elements){let L,D=y.map(U=>{let x=b?N.tableClass.primaryStore.getEntry(U,{transaction:Nr(O).getReadTxn()}):N.tableClass.get(U,O);return x?.then&&(L=!0),x});return g.filterMissing?L?Promise.all(D).then(U=>U.filter(ix)):D.filter(ix):L?Promise.all(D):D}return b?N.tableClass.primaryStore.getEntry(y,{transaction:Nr(O).getReadTxn()}):N.tableClass.get(y,O)}},m.set=(R,O)=>{if(Array.isArray(O)){let b=O.map(y=>y[De]||y[N.tableClass.primaryKey]);R[g.from]=b}else{let b=O[De]||O[N.tableClass.primaryKey];R[g.from]=b}},m.resolve.definition=m.definition||m.elements?.definition):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`)}CE(this,this)}static async deleteHistory(m=0){let g;for(let{key:N,value:R}of u.getRange({start:0,end:m}))await Al(),Bt(R).tableId===n&&(g=u.remove(N));await g}static async*getHistory(m=0,g=1/0){for(let{key:N,value:R}of u.getRange({start:m,end:g})){await Al();let O=Bt(R);O.tableId===n&&(yield{id:O.recordId,localTime:N,version:O.version,type:O.type,value:O.getValue(i,!0,N),user:O.user})}}static async getHistoryOfRecord(m){let g=[];if(m==null)throw new Error("An id is required");let N=i.getEntry(m);if(!N)return g;let R=N.localTime;if(!R)throw new Error("The entry does not have a local audit time");let O=0;do{await Al();let b=u.get(R);if(b){let y=Bt(b);g.push({id:y.recordId,localTime:R,version:y.version,type:y.type,value:y.getValue(i,!0,R),user:y.user}),R=y.previousLocalTime}else break}while(O<1e3&&R);return g.reverse()}static cleanup(){z?.remove()}}Ke.updatedAttributes();let Ux=Ke.prototype;return Ux[rse]=!0,d&&Ke.setTTLExpiration(d/1e3),Y&&Px(),Ke;function Ml(k,m,g){let N;for(let R in r){let O=r[R],b=O.isIndexing,y=g?.[R],L=m?.[R];if(y===L&&!b)continue;N=!0;let D=O.indexNulls,U=(0,bl.getIndexedValues)(L,D);if(U){ex&&O.prefetch(U.map(x=>({key:x,value:k})),nx);for(let x=0,W=U.length;x<W;x++)O.remove(U[x],k)}if(U=(0,bl.getIndexedValues)(y,D),U){ex&&O.prefetch(U.map(x=>({key:x,value:k})),nx);for(let x=0,W=U.length;x<W;x++)O.put(U[x],k)}}return N}a(Ml,"updateIndices");function za(k){switch(typeof k){case"number":return!0;case"string":if(k.length<659)return!0;if(k.length>rx)throw new Error("Primary key size is too large: "+k.length);break;case"object":if(k===null)return!0;break;case"bigint":if(k<2n**64n&&k>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof k)}if((0,Lo.writeKey)(k,sse,0)>rx)throw new Error("Primary key size is too large: "+k.length);return!0}a(za,"checkValidId");function WE(k,m,g,N,R){let O=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),g.transaction?.isDone)return R(null,k);let b=i.getEntry(k,g);return b&&m&&(b?.version>(m.lastModified||0)&&(m.lastModified=b.version),b?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=b.localTime)),R(b,k)},"whenPrefetched");return N?O():ne>0?(ne--,O()):new Promise((b,y)=>{ne===0?(ne--,i.prefetch([k],()=>{L(),D()})):(re.push(k),Ie.push(D),re.length>Mx&&(ne--,L()));function L(){if(re.length>0){let U=Ie;i.prefetch(re,()=>{ne===-1?L():ne++;for(let x of U)x()}),re=[],Ie=[],ct>2&&ct--}else ne=ct,ct<Dx&&ct++}a(L,"prefetch");function D(){try{b(O())}catch(U){y(U)}}a(D,"load")})}a(WE,"loadLocalRecord");function Ul(k){if(!k?.role)return;let m=k.role.permission;if(m.super_user)return ise;let g=m[c],N,R=g?.tables;if(R)return R[s];if(c==="data"&&(N=m[s])&&!N.tables)return N}a(Ul,"getTablePermissions");function QE(k,m,g,N){if(w){let R;if(g.noCache?R=!0:(m?(!m.value||m.metadataFlags&(gl|Rl)||m.expiresAt&&m.expiresAt<Date.now())&&(R=!0):R=!0,nn(!R,"cache-hit",s)),R){let O=fA(k,m,g).then(b=>(b?.value?.[ye]&&Je.error("Can not assign a record with a record property"),g&&(b?.version>(g.lastModified||0)&&(g.lastModified=b.version),g.lastRefreshed=Date.now()),b));if(g?.onlyIfCached||m?.value&&N?.allowStaleWhileRevalidate?.(m,k)){if(O.catch(b=>Je.warn(b)),g?.onlyIfCached&&!N.doesExist())throw new pn.ServerError("Entry is not cached",504);return}else return O}}}a(QE,"ensureLoadedFromSource");function Nr(k){let m=k?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let g=m.next;if(!g)return m=m.next=new zi,m.lmdbDb=i,m;m=g}while(!0)}else return new K_}a(Nr,"txnForContext");function zE(k,m,g){if(!k)return;KE=k;let N=k.value||k.deref?.()||(KE=i.getEntry(k.key))?.value;if(typeof m=="object"){let O=$s,b=N;for(let y=0,L=m.length;y<L;y++){let D=m[y],U=O?.[D];b=U&&b?U(b,g,!0)?.value:b?.[D],O=U?.definition?.tableClass?.propertyResolvers}return b}let R=$s[m];return R?R(N,g):N[m]}a(zE,"getAttributeValue");function dA(k,m,g,N){let R=Nr(g).getReadTxn(),O=N?.length,b={transaction:R,lazy:O>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0};function y(L,D){let U=L?.value;if(!U)return Ya.SKIP;for(let x=0;x<O;x++)if(!N[x](U,L))return Ya.SKIP;return D!==void 0&&(L.key=D),L}if(a(y,"processEntry"),O>0||!k.hasEntries){let L=k.map(D=>typeof D=="object"&&D.key!==void 0?O>0?y(D):D:D==null?Ya.SKIP:WE(D,g,b,!1,y));return Array.isArray(k)&&(L=L.filter(D=>D!==Ya.SKIP)),L.hasEntries=!0,L}return k}a(dA,"transformToEntries");async function fA(k,m,g){let N=m?.metadataFlags,R=m?.version,O,b;if(!i.attemptLock(k,R,()=>{clearTimeout(b);let U=i.getEntry(k);!U||!U.value||U.metadataFlags&(gl|Rl)?O(fA(k,i.getEntry(k),g)):O(U)}))return new Promise(U=>{O=U,b=setTimeout(()=>{i.unlock(k,R)},tse)});let y=m?.value,L={requestContext:g,replacingRecord:y,replacingVersion:R,source:null,resourceCache:g?.resourceCache},D=g?.responseHeaders;return new Promise((U,x)=>{let W;tA(Qe(L,async Se=>{let le=performance.now(),te,se,He;try{for(let Ue of Ke.sources)if(Ue.get&&(!Ue.get.reliesOnPrototype||Ue.prototype.get)&&(L.source=Ue,te=await Ue.get(k,L),te))break;He=N&gl;let _e=L.lastModified||He&&R;se=He||_e>R||!y,_e||(_e=(0,bl.getNextMonotonicTime)());let ke=performance.now()-le;if(qr(ke,"cache-resolution",s),D&&D.append("Server-Timing",`cache-resolve;dur=${ke.toFixed(2)}`),Se.timestamp=_e,d&&!L.expiresAt&&(L.expiresAt=Date.now()+d),te){if(typeof te!="object")throw new Error("Only objects can be cached and stored in tables");typeof te.toJSON=="function"&&(te=te.toJSON()),t&&te[t]!==k&&(te[t]=k)}W=!0,U({version:_e,value:te})}catch(_e){_e.message+=` while resolving record ${k} for ${s}`,y&&((_e.code==="ECONNRESET"||_e.code==="ECONNREFUSED"||_e.code==="EAI_AGAIN")&&!g?.mustRevalidate||g?.staleIfError&&(_e.statusCode===500||_e.statusCode===502||_e.statusCode===503||_e.statusCode===504))?(U({version:R,value:y}),Je.trace(_e.message,"(returned stale record)")):x(_e),L.transaction.abort();return}if(g?.noCacheStore){L.transaction.abort();return}Nr(L).addWrite({key:k,store:i,entry:m,nodeName:"source",commit:(_e,ke)=>{if(ke?.version!==R)return;let Ue=Ml(k,y,te);te?(ut.put?.(L,k,te),S(k,te,ke,_e,0,E&&se||null,L,L.expiresAt,"put",!!He)):(ut.delete?.(L,k),E||h?S(k,null,ke,_e,0,E&&se||null,L,0,"delete",!!He):i.remove(k,R))}})}),()=>{i.unlock(k,R)},Se=>{i.unlock(k,R),W&&Je.error("Error committing cache update",Se)})})}a(fA,"getFromSource");function JE(){if(Tn!==lA&&(lA=Tn,(0,Co.getWorkerIndex)()===(0,Co.getWorkerCount)()-1)){if(Dl&&clearTimeout(Dl),!Tn)return;let k=new Date;k.setMonth(0),k.setDate(1),k.setHours(0),k.setMinutes(0),k.setSeconds(0);let m=Math.ceil((Date.now()-k.getTime())/Tn)*Tn+k.getTime(),g=a(N=>{Je.trace(`Scheduled next cleanup scan at ${new Date(N)}ms`),Dl=setTimeout(()=>q=q.then(async()=>{if(g(Math.max(N+Tn,Date.now())),i.rootStore.status!=="open"){clearTimeout(Dl);return}let R=50,O=new Array(R),b=0;Je.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:L,value:D,version:U,expiresAt:x}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let W;D===null&&!E&&U+ese<Date.now()?W=i.remove(L,U):x&&x+f<Date.now()&&(W=Ke.evict(L,D,U),y++),W&&(await O[b],O[b]=W.catch(Se=>{Je.error("Cleanup error",Se)}),++b>=R&&(b=0)),await Al()}Je.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){Je.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(N-Date.now(),2147483647)).unref()},"startNextTimer");g(m)}}a(JE,"scheduleCleanup");function EA(){z=u?.addDeleteRemovalCallback(n,k=>{let m=i.getEntry(k);m?.value===null&&i.remove(k,m.version)})}a(EA,"addDeleteRemoval");function Px(){(0,Co.getWorkerIndex)()===0&&setInterval(async()=>{try{let k=Y.name,m=r[k];if(!m)throw new Error(`expiresAt attribute ${Y} must be indexed`);for(let{value:g}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let N=i.getEntry(g);N?.value?.[k]<Date.now()&&Ke.evict(g,N.value,N.version),await Al()}}catch(k){Je.error("Error in evicting old records",k)}},Zne).unref()}a(Px,"runRecordExpirationEviction")}function eA(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 nx(){}function ose(e){ax=e}function UE(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"&&!ase.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,vE.autoCast)(e):e}function sx(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 tA(e,t,r){return e?.then?e.then(t,r):t(e)}function PE(e,t){e[Qr]=t,e[ye]=t?.value??null,e[Ol]=t?.version}function ix(e){return e!=null}var Fn,Ya,bl,ox,Il,pn,Nl,yl,Je,Lo,Co,vE,jne,ax,Zne,ese,ex,tse,Ol,rse,Qr,Tl,tx,nse,ZR,$a,gl,Rl,sse,rx,ise,Ome,ase,Al,vf=Ae(()=>{Fn=v(M()),Ya=require("lmdb"),bl=v(Dr()),ox=require("lodash");yn();Up();Il=v(j());ZH();pn=v(Z()),Nl=v(As()),yl=v(Ln());ge();Rf();Je=v(V());z_();Ji();Lo=require("ordered-binary"),Co=v(tt());Pi();vE=v(J());Rc();ys();AE();jne=new Uint8Array(9);jne[8]=192;Zne=6e4,ese=864e5;Il.initSync();ex=Il.get(Fn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),tse=1e4,Ol=Symbol.for("version"),rse=Symbol.for("incremental-update"),Qr=Symbol("entry"),Tl=Symbol("is-saving"),tx=1,nse=2,ZR=Symbol("loaded-from-source"),$a={isNotification:!0,ensureLoaded:!1},gl=1,Rl=8,sse=Buffer.allocUnsafeSlow(8192),rx=1978,ise={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},Ome=(0,vE.convertToMS)(Il.get(Fn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(BE,"makeTable");a(eA,"attributesAsObject");a(nx,"noop");a(ose,"setServerUtilities");ase=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(UE,"coerceType");a(sx,"isDescendantId");Al=a(()=>new Promise(setImmediate),"rest");a(tA,"when");a(PE,"updateResource");a(ix,"exists")});var xe={};Ve(xe,{database:()=>zc,databases:()=>rt,dropDatabase:()=>xp,dropTableMeta:()=>fse,getDatabases:()=>Mn,getTables:()=>cse,onUpdatedTable:()=>fR,readMetaDb:()=>wl,resetDatabases:()=>use,table:()=>_t,tables:()=>Mr});function cse(){return GE||Mn(),Mr||{}}function Mn(){if(GE)return rt;GE=!0,Qa=new Map;let e=(0,Zt.getHdbBasePath)()&&(0,Xe.join)((0,Zt.getHdbBasePath)(),Jr.DATABASES_DIR_NAME),t=(0,Zt.get)(Jr.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)(Jr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,zr.existsSync)(e)?e:(0,Xe.join)((0,Zt.getHdbBasePath)(),Jr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,zr.existsSync)(e))for(let r of(0,zr.readdirSync)(e,{withFileTypes:!0})){let n=(0,Xe.basename)(r.name,".mdb");r.isFile()&&(0,Xe.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&wl((0,Xe.join)(e,r.name),null,n)}if((0,zr.existsSync)((0,Wa.getBaseSchemaPath)())){for(let r of(0,zr.readdirSync)((0,Wa.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Xe.join)((0,Wa.getBaseSchemaPath)(),r.name),s=(0,Xe.join)((0,Wa.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,zr.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Xe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Xe.join)(s,i.name);wl((0,Xe.join)(n,i.name),(0,Xe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,zr.existsSync)(s))for(let o of(0,zr.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,Xe.extname)(o.name).toLowerCase()===".mdb"&&wl((0,Xe.join)(s,o.name),(0,Xe.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],u=(0,Xe.join)(c.path,(0,Xe.basename)(o+".mdb"));(0,zr.existsSync)(u)&&wl(u,o,r,null,!0)}}for(let r in rt){let n=Qa.get(r);if(n){let s=rt[r];r.includes("delete")&&Sn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Sn.trace(`delete table class ${i}`),delete s[i])}else if(delete rt[r],r==="data"){for(let s in Mr)delete Mr[s];delete Mr[kE]}}return Qa=null,rt}}function use(){GE=!1;for(let[,e]of Oi)e.needsDeletion=!0;Mn();for(let[e,t]of Oi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Oi.delete(e));return rt}function wl(e,t,r=sA,n,s){let i=new rA.default(e,!1);try{let o=Oi.get(e);o?o.needsDeletion=!1:(o=(0,xE.open)(i),Oi.set(e,o));let c=new Do.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(HE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,zr.existsSync)(n)&&(i.path=n,_=(0,xE.open)(i),_.isLegacy=!0):_=RE(o));let l=_x(r),d=l[kE],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 A=f.get(p);A||f.set(p,A={attributes:[]}),(S==null||h.is_hash_attribute)&&(A.primary=h),S!=null&&A.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){Sn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let A=l[E],I={},w=[],B,K,q=typeof S.audit=="boolean"?S.audit:(0,Zt.get)(Jr.CONFIG_PARAMS.LOGGING_AUDITLOG),P=S.trackDeletes,Q=S.expiration,Y=S.eviction;if(A)I=A.indices,w=A.attributes,A.schemaVersion++;else{B=S.tableId,B?B>=(u.get(Ka)||0)&&u.putSync(Ka,B+1):(S.tableId=B=u.get(Ka),B||(B=1),u.putSync(Ka,B+1),u.putSync(S.key,S));let z=new Do.default(!S.is_hash_attribute,S.is_hash_attribute);K=o_(o.openDB(S.key,z)),K.rootStore=o,K.tableId=B}for(let z of p){z.attribute=z.name;try{if(!z.is_hash_attribute&&(z.indexed||z.attribute&&!z.name)){if(!I[z.name]){let Ie=new Do.default(!z.is_hash_attribute,z.is_hash_attribute);I[z.name]=o.openDB(z.key,Ie),I[z.name].indexNulls=z.indexNulls}let re=w.find(Ie=>Ie.name===z.name);re?w.splice(w.indexOf(re),1,z):w.push(z)}}catch(re){Sn.error("Error trying to update attribute",z,w,I,re)}}if(!A){A=dx(l,E,BE({primaryStore:K,auditStore:_,audit:q,expirationMS:Q&&Q*1e3,evictionMS:Y&&Y*1e3,trackDeletes:P,tableName:E,tableId:B,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:I,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),A.schemaVersion=1;for(let z of iA)z(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function _x(e){let t=rt[e];if(t||(e==="data"?t=rt[e]=Mr:e==="system"?Object.defineProperty(rt,"system",{value:t=Object.create(null),configurable:!0}):t=rt[e]=Object.create(null)),Qa&&!Qa.has(e)){let r=new Set;t[kE]=r,Qa.set(e,r)}return t}function dx(e,t,r){return e[t]=r,r}function zc({database:e,table:t}){e||(e=sA),Mn();let r=_x(e),n=(0,Xe.join)((0,Zt.getHdbBasePath)(),Jr.DATABASES_DIR_NAME),s=(0,Zt.get)(Jr.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)(Jr.CONFIG_PARAMS.STORAGE_PATH)||((0,zr.existsSync)(n)?n:(0,Xe.join)((0,Zt.getHdbBasePath)(),Jr.LEGACY_DATABASES_DIR_NAME));let o=(0,Xe.join)(n,(i?t:e)+".mdb"),c=Oi.get(o);if(!c){let u=new rA.default(o,!1);c=(0,xE.open)(u),Oi.set(o,c)}return c}async function xp(e){if(!rt[e])throw new Error("Schema does not exist");let t=rt[e];for(let r in t){let s=t[r].primaryStore.rootStore;Oi.delete(s.path),s.status==="open"&&(await s.close(),await cx.remove(s.path))}if(e==="data"){for(let r in Mr)delete Mr[r];delete Mr[kE]}delete rt[e]}function _t({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=sA);let l=zc({database:t,table:e}),d=rt[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 A=new Do.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 I,w;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=RE(l)),h=i.find(re=>re.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)(Jr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),n&&(h.eviction=n),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Sn.trace(`${e} table loading, opening primary store`);let Q=new Do.default(!1,!0),Y=e+"/",z=o_(l.openDB(Y,Q));z.rootStore=l,S=l.dbisDb=l.openDB(HE.INTERNAL_DBIS_NAME,A),z.tableId=S.get(Ka),z.tableId||(z.tableId=1),S.putSync(Ka,z.tableId+1),h.tableId=z.tableId,f=dx(d,e,BE({primaryStore:z,auditStore:P,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,I=!0,q(),S.put(Y,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(HE.INTERNAL_DBIS_NAME,A)),f.dbisDB=S;let B=[];for(let{key:P,value:Q}of S.getRange({start:!0})){let[Y,z]=P.toString().split("/");if(z===""&&(z=Q.name),z){if(Y!==e)continue}else z=Y;if(!i.find(Ie=>Ie.name===z)?.indexed&&Q.indexed&&!Q.isPrimaryKey){q(),I=!0,S.remove(P);let Ie=f.indices[Y];Ie&&B.push(Ie)}}let K=[];try{for(let P of i||[]){if(P.relationship)continue;let Q=e+"/"+(P.name||"");Object.defineProperty(P,"key",{value:Q,configurable:!0});let Y=S.get(Q);if(P.isPrimaryKey){if(Y=Y||S.get(Q=e+"/")||{},o!==f.audit||(+r||void 0)!==(+Y.expiration||void 0)||(+n||void 0)!==(+Y.eviction||void 0)){let re=Object.assign({},Y);typeof o=="boolean"&&(o&&f.enableAuditing(o),re.audit=o),r&&(re.expiration=+r),n&&(re.eviction=+n),I=!0,q(),S.put(Q,re)}continue}Y?.attribute&&!Y.name&&(Y.indexed=!0);let z=!Y||Y.type!==P.type||Y.indexed!==P.indexed||JSON.stringify(Y.attributes)!==JSON.stringify(P.attributes)||JSON.stringify(Y.elements)!==JSON.stringify(P.elements);if(P.indexed){let re=new Do.default(!0,!1),Ie=l.openDB(Q,re);(z||Y.indexingPID&&Y.indexingPID!==process.pid||Y.restartNumber<Cl.workerData?.restartNumber)&&(I=!0,q(),Y=S.get(Q),(z||Y.indexingPID&&Y.indexingPID!==process.pid||Y.restartNumber<Cl.workerData?.restartNumber)&&(I=!0,P.lastIndexedKey=Y?.lastIndexedKey||!1,P.indexingPID=process.pid,Ie.isIndexing=!0,Object.defineProperty(P,"dbi",{value:Ie}),P.indexNulls===void 0&&(P.indexNulls=!0),K.push(P)),S.put(Q,P)),Y?.indexNulls&&P.indexNulls===void 0&&(P.indexNulls=!0),Ie.indexNulls=P.indexNulls,p[P.name]=Ie}else z&&(I=!0,q(),S.put(Q,P))}}finally{w&&w()}if(I&&(f.schemaVersion++,f.updatedAttributes()),Sn.trace(`${e} table loading, running index`),K.length>0||B.length>0?f.indexingOperation=dse(f,K,B):I&&qE.signalSchemaChange(new FE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,I)for(let P of iA)P(f,_!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),Sn.trace(`${e} table loaded`),f;function q(){w||l.transactionSync(()=>({then(P){w=P}}))}a(q,"startTxn")}async function dse(e,t,r){try{let n=e.schemaVersion;await qE.signalSchemaChange(new FE.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,ux.getIndexedValues)(l[h]);if(p)for(let S=0,A=p.length;S<A;S++)E.dbi.put(p[S],_)}}),s.then(()=>u--,f=>{u--,Sn.error(f)}),Cl.workerData&&Cl.workerData.restartNumber!==lx.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>lse?await s:u>_se&&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 qE.signalSchemaChange(new FE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){Sn.error("Error in indexing",n)}}function fse({table:e,database:t}){let r=zc({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 fR(e){iA.push(e)}var Zt,HE,xE,Xe,zr,Wa,Do,rA,Jr,cx,nA,ux,qE,FE,Cl,Sn,lx,sA,kE,Mr,rt,Ka,iA,GE,Oi,Qa,lse,_se,ge=Ae(()=>{Zt=v(j()),HE=v(ht()),xE=require("lmdb"),Xe=require("path"),zr=require("fs"),Wa=v(We());vf();Do=v(a_()),rA=v(u_()),Jr=v(M()),cx=v(require("fs-extra")),nA=require("../../index"),ux=v(Dr()),qE=v(As()),FE=v(Ln()),Cl=require("worker_threads"),Sn=v(V()),lx=v(tt());Pi();Rc();sA="data",kE=Symbol("defined-tables");(0,Zt.initSync)();Mr=Object.create(null),rt=Object.create(null);(0,nA._assignPackageExport)("databases",rt);(0,nA._assignPackageExport)("tables",Mr);Ka=Symbol.for("next-table-id"),iA=[],Oi=new Map;a(cse,"getTables");a(Mn,"getDatabases");a(use,"resetDatabases");a(wl,"readMetaDb");a(_x,"ensureDB");a(dx,"setTable");a(zc,"database");a(xp,"dropDatabase");a(_t,"table");lse=1e3,_se=10;a(dse,"runIndexing");a(fse,"dropTableMeta");a(fR,"onUpdatedTable")});var J=T((Mme,yx)=>{"use strict";var bi=require("path"),px=require("fs-extra"),br=V(),fx=require("fs-extra"),VE=require("os"),Ese=require("net"),hse=require("recursive-iterator"),at=M(),mse=WA(),Ex=require("papaparse"),$E=require("moment"),{inspect:pse}=require("util"),hx=require("is-number"),Dme=require("lodash"),Sse=require("minimist"),Tse=require("https"),gse=require("http"),{hdb_errors:YE}=Z(),Rse=/^((\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)))$/,Sx=require("util").promisify(setTimeout),Ase=100,Ose=5,bse="",Nse=4,mx={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};yx.exports={isEmpty:Xr,isEmptyOrZeroLength:ds,arrayHasEmptyValues:wse,arrayHasEmptyOrZeroLengthValues:Cse,buildFolderPath:Lse,isBoolean:Tx,errorizeMessage:yse,stripFileExtension:Mse,autoCast:Use,autoCastJSON:gx,autoCastJSONDeep:aA,removeDir:Pse,compareVersions:vse,isCompatibleDataVersion:Bse,escapeRawValue:Hse,unescapeValue:xse,stringifyProps:qse,timeoutPromise:Gse,isClusterOperation:Vse,getClusterUser:Yse,checkGlobalSchemaTable:$se,getHomeDir:Ax,getPropsFilePath:Fse,promisifyPapaParse:Kse,removeBOM:Ox,createEventPromise:Wse,checkProcessRunning:Qse,checkSchemaTableExist:zse,checkSchemaExists:bx,checkTableExists:Nx,getStartOfTomorrowInSeconds:Jse,getLimitKey:Xse,isObject:Dse,isNotEmptyAndHasValue:Ise,autoCasterIsNumberCheck:Rx,backtickASTSchemaItems:jse,isPortTaken:kse,createForkArgs:Zse,autoCastBoolean:eie,async_set_timeout:Sx,getTableHashAttribute:tie,doesSchemaExist:rie,doesTableExist:nie,stringifyObj:sie,ms_to_time:iie,changeExtension:oie,getEnvCliRootPath:cA,noBootFile:aie,httpRequest:cie,transformReq:uie,convertToMS:lie,PACKAGE_ROOT:at.PACKAGE_ROOT};function yse(e){return e instanceof Error?e:new Error(e)}a(yse,"errorizeMessage");function Xr(e){return e==null}a(Xr,"isEmpty");function Ise(e){return!Xr(e)&&(e||e===0||e===""||Tx(e))}a(Ise,"isNotEmptyAndHasValue");function ds(e){return Xr(e)||e.length===0||e.size===0}a(ds,"isEmptyOrZeroLength");function wse(e){if(Xr(e))return!0;for(let t=0;t<e.length;t++)if(Xr(e[t]))return!0;return!1}a(wse,"arrayHasEmptyValues");function Cse(e){if(ds(e))return!0;for(let t=0;t<e.length;t++)if(ds(e[t]))return!0;return!1}a(Cse,"arrayHasEmptyOrZeroLengthValues");function Lse(...e){try{return e.join(bi.sep)}catch{console.error(e)}}a(Lse,"buildFolderPath");function Tx(e){return Xr(e)?!1:e===!0||e===!1}a(Tx,"isBoolean");function Dse(e){return Xr(e)?!1:typeof e=="object"}a(Dse,"isObject");function Mse(e){return ds(e)?bse:e.slice(0,-Nse)}a(Mse,"stripFileExtension");function Use(e){return Xr(e)||e===""||typeof e!="string"?e:mx[e]!==void 0?mx[e]:Rx(e)===!0?Number(e):Rse.test(e)?new Date(e):e}a(Use,"autoCast");function gx(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(gx,"autoCastJSON");function aA(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=aA(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=aA(r);n!==r&&(e[t]=n)}return e}else return gx(e)}a(aA,"autoCastJSONDeep");function Rx(e){if(e.startsWith("0.")&&hx(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&hx(e))}a(Rx,"autoCasterIsNumberCheck");async function Pse(e){if(ds(e))throw new Error(`Directory path: ${e} does not exist`);try{await fx.emptyDir(e),await fx.remove(e)}catch(t){throw br.error(`Error removing files in ${e} -- ${t}`),t}}a(Pse,"removeDir");function vse(e,t){if(ds(e)){br.info("Invalid current version sent as parameter.");return}if(ds(t)){br.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(vse,"compareVersions");function Bse(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(Bse,"isCompatibleDataVersion");function Hse(e){if(Xr(e))return e;let t=String(e);return t==="."?at.UNICODE_PERIOD:t===".."?at.UNICODE_PERIOD+at.UNICODE_PERIOD:t.replace(at.FORWARD_SLASH_REGEX,at.UNICODE_FORWARD_SLASH)}a(Hse,"escapeRawValue");function xse(e){if(Xr(e))return e;let t=String(e);return t===at.UNICODE_PERIOD?".":t===at.UNICODE_PERIOD+at.UNICODE_PERIOD?"..":String(e).replace(at.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(xse,"unescapeValue");function qse(e,t){if(Xr(e))return br.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+VE.EOL}!ds(n)&&n[0]===";"?r+=" "+n+s+VE.EOL:ds(n)||(r+=n+"="+s+VE.EOL)}catch{br.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(qse,"stringifyProps");function Ax(){let e;try{e=VE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Ax,"getHomeDir");function Fse(){let e=bi.join(Ax(),at.HDB_HOME_DIR_NAME,at.BOOT_PROPS_FILE_NAME);return px.existsSync(e)||(e=bi.join(__dirname,"../","hdb_boot_properties.file")),e}a(Fse,"getPropsFilePath");function Gse(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(Gse,"timeoutPromise");async function kse(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=Ese.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(kse,"isPortTaken");function Vse(e){try{return at.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){br.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Vse,"isClusterOperation");function $se(e,t){let r=(ge(),ee(xe)).getDatabases();if(!r[e])return YE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return YE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a($se,"checkGlobalSchemaTable");function Yse(e,t){if(Xr(t)){br.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Xr(e)||ds(e)){br.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){br.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){br.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Yse,"getClusterUser");function Kse(){Ex.parsePromise=function(e,t,r){return new Promise(function(n,s){Ex.parse(e,{header:!0,transformHeader:Ox,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Kse,"promisifyPapaParse");function Ox(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Ox,"removeBOM");function Wse(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;br.info(`Got cluster status event response: ${pse(s)}`);try{i.cancel()}catch{br.error("Error trying to cancel timeout.")}n(s)})})}a(Wse,"createEventPromise");async function Qse(e){let t=!0,r=0;do await Sx(Ase*r++),(await mse.findPs(e)).length>0&&(t=!1);while(t&&r<Ose);if(t)throw new Error(`process ${e} was not started`)}a(Qse,"checkProcessRunning");function zse(e,t){let r=bx(e);if(r)return r;let n=Nx(e,t);if(n)return n}a(zse,"checkSchemaTableExist");function bx(e){let{getDatabases:t}=(ge(),ee(xe));if(!t()[e])return YE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(bx,"checkSchemaExists");function Nx(e,t){let{getDatabases:r}=(ge(),ee(xe));if(!r()[e][t])return YE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Nx,"checkTableExists");function Jse(){let e=$E().utc().add(1,at.MOMENT_DAYS_TAG).startOf(at.MOMENT_DAYS_TAG).unix(),t=$E().utc().unix();return e-t}a(Jse,"getStartOfTomorrowInSeconds");function Xse(){return $E().utc().format("DD-MM-YYYY")}a(Xse,"getLimitKey");function jse(e){try{let t=new hse(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){br.error("Got an error back ticking items."),br.error(t)}}a(jse,"backtickASTSchemaItems");function Zse(e){return[e]}a(Zse,"createForkArgs");function eie(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(eie,"autoCastBoolean");function tie(e,t){let{getDatabases:r}=(ge(),ee(xe)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(tie,"getTableHashAttribute");function rie(e){let{getDatabases:t}=(ge(),ee(xe));return t()[e]!==void 0}a(rie,"doesSchemaExist");function nie(e,t){let{getDatabases:r}=(ge(),ee(xe));return r()[e]?.[t]!==void 0}a(nie,"doesTableExist");function sie(e){try{return JSON.stringify(e)}catch{return e}}a(sie,"stringifyObj");function iie(e){let t=$E.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(iie,"ms_to_time");function oie(e,t){let r=bi.basename(e,bi.extname(e));return bi.join(bi.dirname(e),r+t)}a(oie,"changeExtension");function cA(){if(process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Sse(process.argv);if(e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(cA,"getEnvCliRootPath");var oA;function aie(){if(oA)return oA;let e=cA();cA()&&px.pathExistsSync(bi.join(e,at.HDB_CONFIG_FILE))&&(oA=!0)}a(aie,"noBootFile");function cie(e,t){let r;return e.protocol==="http:"?r=gse:r=Tse,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(cie,"httpRequest");function uie(e){if(!e.schema&&!e.database){e.schema=at.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(uie,"transformReq");function lie(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(lie,"convertToMS")});var uA=M(),Ix=J(),Ll=V(),_ie=Rs(),die=vr(),fie=kg(),{start:Eie}=(dR(),ee(iE)),{closeConnection:hie}=St(),wx=require("moment"),Cx=Hf(),{cloneDeep:mie}=require("lodash"),pie=process.env[uA.PROCESS_NAME_ENV_PROP],Mo=pie.substring(4);a(async function(){let t={id:Mo,request:void 0},r=0;try{Ll.notify("Starting job:",Mo),Eie(),_ie.setSchemaDataToGlobal(),await die.setUsersToGlobal();let n=await Cx.getJobById(Mo);if(Ix.isEmptyOrZeroLength(n))throw new Error(`Unable to find a record in hdb_job for job: ${Mo}`);let{request:s}=n[0];if(Ix.isEmptyOrZeroLength(s))throw new Error("Did not find job request in hdb_job table, unable to proceed");s=mie(s);let i=fie.getOperationFunction(s);Ll.trace("Running operation:",s.operation,"for job",Mo);let o=await i.job_operation_function(s);Ll.trace("Result from job:",Mo,o),t.status=uA.JOB_STATUS_ENUM.COMPLETE,t.message=o,t.end_datetime=wx().valueOf(),Ll.notify("Successfully completed job:",Mo)}catch(n){r=1,Ll.error(n),t.status=uA.JOB_STATUS_ENUM.ERROR,t.message=n.message?n.message:n,t.end_datetime=wx().valueOf()}finally{await Cx.updateJob(t),await hie(),setTimeout(()=>{process.exit(r)},3e3).unref()}},"job")();
26
+ `},compressible:!1,q:.8});Bt.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()}});vv={type:"application/json",serializeStream:Tc,serialize:Xu,deserialize:z7,q:.8};Bt.set("*/*",vv);Bt.set("",vv);a(z7,"tryJSONParse");a(Ig,"registerContentHandlers");J7=require("fastify-plugin"),j7=J7(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Df(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(Df,"findBestSerializer");Dv=Og.default.get(bg.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Lf,"serialize");a(mi,"serializeMessage");a(X7,"streamToBuffer");a(po,"getDeserializer");a(Lv,"deserializerUnknownType");a(Z7,"transformIterable")});function Dg(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?Dg(d.conditions,d.operator,r,n,s,i,o,c):Ca(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 b=h.operator==="or",R=l(h.conditions,!b,E);return b?(L,H)=>R.some(P=>P(L,H)):(L,H)=>R.every(P=>P(L,H))}let S=(h.attribute||h[0])===r.primaryKey,T=Mg(h,r,i,c,S,E);return f&&p<d.length-1&&E&&(E=cee(r.primaryStore,h.estimated_count,E)),T}).filter(Boolean)}a(l,"mapConditionsToFilters")}function Ca(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 b=o[0],R=Hs(n.attributes,b);if(R.relationship){if(o.length<2)throw new $r.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let L=R.definition?.tableClass||R.elements?.definition?.tableClass,H=new Map,P=Ca({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,L,s,H);if(R.relationship.to){i[o[0]]=H;let k=!!Hs(L.attributes,R.relationship.to)?.elements;P=see(P,R,L.primaryStore,k,H)}if(R.relationship.from){let k=a(B=>Ca({attribute:R.relationship.from,value:B},t,r,n,s,H),"searchEntry");R.elements?(i[o[0]]=H,P=iee(P,R,L.primaryStore,H,k)):P=P.flatMap(k)}return P}else if(o.length===1)o=o[0];else throw new $r.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,f;c instanceof Date&&(c=c.getTime());let E;switch(Lg[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]=as.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 $r.ClientError(`Unknown query comparator "${u}"`)}if(r){let b=_;_=l,l=b,b=!f,f=!d,d=b}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===!1&&!p)throw new $r.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&E)throw new $r.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(p?.isIndexing)throw new $r.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!p.indexNulls)throw new $r.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(S=Mg(e),!S)throw new $r.ClientError(`Unknown search operator ${e.comparator}`)}let T={start:_,end:l,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let b=p.getRange(T).map(S?function({key:R,value:L}){return this.isSync?L&&S(L)?R:Ti.SKIP:new Promise((H,P)=>setImmediate(()=>{try{H(L&&S(L)?R:Ti.SKIP)}catch(k){P(k)}}))}:R=>R.value==null?Ti.SKIP:R);return b.hasEntries=!0,b}else return p?p.getRange(T).map(S?function({key:b,value:R}){return this.isSync?S({[o]:b})?R:Ti.SKIP:new Promise((L,H)=>setImmediate(()=>{try{L(S({[o]:b})?R:Ti.SKIP)}catch(P){H(P)}}))}:({value:b})=>b):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:b,value:R}){return this.isSync?R&&S(R)?b:Ti.SKIP:new Promise((L,H)=>setImmediate(()=>{try{L(R&&S(R)?b:Ti.SKIP)}catch(P){H(P)}}))})}function Hs(e,t){if(Array.isArray(t))if(t.length>1){let r=Hs(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?Hs(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 see(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,_=a((l,d)=>{let f=l;Array.isArray(l)&&(f=Bn(l),o=!0);let E=s.get(f);E?E.push(d):s.set(f,E=[d]),l!==f&&(E.key=l)},"add_entry");for(let l of e){let d=l.value??r.get(l.key??l),f=d?.[u];if(f!=null&&!s.filters?.some(E=>!E(d)))if(n)for(let E=0;E<f.length;E++)_(f[E],l);else _(f,l)}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 iee(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 _=Bn(u.value);if(!c.has(_))return c.add(_),u}if(!i){let _=new Map;n.fromRecord=l=>l[t.relationship.from]?.filter?.(d=>_.has(Bn(d)));for(let l of e){if(n.filters){let d=r.get(l);if(n.filters.some(f=>!f(d)))continue}_.set(Bn(l),l)}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 Mg(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=Hs(t.attributes,l),f=d.definition?.tableClass||d.elements.definition?.tableClass,E=n?.[l],h=Mg({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((b,R)=>{let L,H;if(p){if(p.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let k of h.idFilter.idSet)e={attribute:p.from,value:k};S=_(p.from,h.idFilter,!0,!0)}else S=_(p.from,h.idFilter,!1,!0);let P=S(b);return S.idFilter&&(T.idFilter=S.idFilter),P}H=p(b,r,R),L=H?.value}else L=b[l];return L?Array.isArray(L)?L.some(h):h(L,H):!1},"recordFilter");return T}}switch(u instanceof Date&&(u=u.getTime()),Lg[o]||o){case wg.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,as.compareKeys)(l,u[0])>=0&&(0,as.compareKeys)(l,u[1])<=0,!0);case"gt":return _(c,l=>(0,as.compareKeys)(l,u)>0);case"ge":return _(c,l=>(0,as.compareKeys)(l,u)>=0);case"lt":return _(c,l=>(0,as.compareKeys)(l,u)<0);case"le":return _(c,l=>(0,as.compareKeys)(l,u)<=0);case"ne":return _(c,l=>(0,as.compareKeys)(l,u)!==0);case"sort":return()=>!0;default:throw new $r.ClientError(`Unknown query comparator "${o}"`)}function _(l,d,f,E){let h;f=f&&!s&&t?.indices[l]&&i>3,f&&(e.estimated_count==null&&Uf(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(f=!1));let p=0,S=3;function T(b){let R=b[l],L;if(typeof R!="object"||!R||E?L=d(R):Array.isArray(R)?L=R.some(d):R instanceof Date&&(L=d(R.getTime())),f&&(S++,!L&&!T.idFilter&&++p/S*(i-S)>h)){let H=Ca(e,r.transaction.getReadTxn(),!1,t).map(Bn),P=new Set(H);T.idFilter=k=>P.has(Bn(k)),T.idFilter.idSet=P}return L}return a(T,"recordFilter"),s&&(T.idFilter=d),T}a(_,"attributeComparator")}function Uf(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/Bs(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=Lg[n]||n,n===wg.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=Hs(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=Uf(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),u=e.indices[i.relationship.from];r.estimated_count=c+(u?c*Bs(e.indices[i.relationship.from])/(Bs(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=Bs(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=ree*Bs(e.primaryStore)+1:n==="between"?r.estimated_count=tee*Bs(e.primaryStore)+1:n==="sort"?r.estimated_count=Bs(e.primaryStore)+1:r.estimated_count=eee*Bs(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function Pf(e){if(e)if(gi=e,Ia.lastIndex=0,oee.test(e))try{let t=el(new wa,"");if(Ar!==gi.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 ${Ar} in '${gi}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function el(e,t){let r=Ia,n,s,i,o,c,u=decodeURIComponent,_;for(;n=r.exec(gi);){Ar=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=Hv}else{if(u=decodeURIComponent,i="equals",!l)throw new SyntaxError("attribute must be specified before equality comparator");s=tl(l)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=nee[d],u=Cg[i]?Hv:decodeURIComponent,!l)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=tl(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"&&xv(h,l),Mf(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(tl(l)),s=void 0;break;case"(":Ia.lastIndex=Ar;let E=el(l?[]:new wa,")");switch(l){case"":Mf(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=Gv(E);break;default:throw new SyntaxError(`unknown query function call ${l}`)}gi[Ar]===","?r.lastIndex=++Ar: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");Ia.lastIndex=Ar,f=el([],"}"),f.name=l,e.push(f),gi[Ar]===","?r.lastIndex=++Ar:o=!0;break;case"[":Ia.lastIndex=Ar,l?(f=el(new wa,"]"),f.name=l):f=el(e.conditions?new wa:[],"]"),e.conditions?(Mf(e,_),e.conditions.push(f),s=null):e.push(f),gi[Ar]===","?r.lastIndex=++Ar: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"&&xv(h,l),Mf(e,_),e.conditions.push(h)}else if(l)throw new SyntaxError("no attribute or comparison specified")}else(l||e.length>0&&c)&&e.push(tl(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?aee:Ia,r.lastIndex=Ar),Ar===gi.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Mf(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 tl(e){return e.indexOf(".")>-1?e.split(".").map(tl):decodeURIComponent(e)}function Hv(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 $r.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function xv(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new $r.ClientError("wildcard can only be used at the end of a string")}function Gv(e){let t=Fv(e[0]);return e.length>1&&(t.next=Gv(e.slice(1))),t}function Fv(e){if(Array.isArray(e)){let t=Fv(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 Bn(e){return Array.isArray(e)?e.join("\0"):e}function Bs(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function cee(e,t,r){return t*r/Bs(e)}var $r,wg,as,Ti,eee,tee,ree,nee,Cg,Lg,oee,Ia,aee,Ar,gi,wa,vf=Re(()=>{$r=x(ne()),wg=x(_t()),as=require("ordered-binary"),Ti=require("lmdb"),eee=.3,tee=.1,ree=.05,nee={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},Cg={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(Dg,"executeConditions");a(Ca,"searchByIndex");a(Hs,"findAttribute");a(see,"joinTo");a(iee,"joinFrom");Lg={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(Mg,"filterByType");a(Uf,"estimateCondition");oee=/[()[\]|!<>.]|(=\w*=)/,Ia=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,aee=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(Pf,"parseQuery");a(el,"parseBlock");a(Mf,"assignOperator");a(tl,"decodeProperty");a(Hv,"typedDecoding");a(xv,"wildcardDecoding");a(Gv,"toSortObject");a(Fv,"toSortEntry");wa=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(Bn,"flattenKey");a(Bs,"estimatedEntryCount");a(cee,"intersectionEstimate")});function Yv(e){let t={openapi:uee,info:{title:"HarperDB HTTP REST interface",version:(0,$v.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:L,elements:H,relationship:P,definition:k}of o){if(P)R==="array"?_[L]={type:"array",items:{$ref:Ri+H.type}}:_[L]={$ref:Ri+R};else{let B=k??H?.definition;if(B){if(!t.components.schemas[B.type]){let J={};B.properties.forEach(z=>{J[z.name]=new Bg(Ug[z.type],z.type)}),t.components.schemas[B.type]=new Vv(J)}R==="array"?_[L]={type:"array",items:{$ref:Ri+B.type}}:_[L]={$ref:Ri+B.type}}else R==="array"?H.type==="Any"||H.type=="ID"?_[L]={type:"array",items:{format:H.type}}:_[L]={type:"array",items:new Bg(Ug[H.type],H.type)}:R==="Any"||R=="ID"?_[L]={format:R}:_[L]=new Bg(Ug[R],R)}l.push(new Hg(L,"query",_[L]))}let d=Object.keys(_),f=new Hg(c,"path",{format:"ID"});f.required=!0,f.description="primary key of record";let E=new Hg("property","path",{enum:d});E.required=!0,t.components.schemas[i]=new Vv(_);let h=u.post!==Resource.prototype.post||u.update,p=typeof u.put=="function",S=typeof u.get=="function",T=typeof u.delete=="function",b="/"+s+"/";h&&(t.paths[b]={},t.paths[b].post=new lee(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[b]||(t.paths[b]={}),t.paths[b].get=new Pg(l,r,{200:new vg({$ref:Ri+i})},"search for records by the specified property name and value pairs")),T&&(t.paths[b]||(t.paths[b]={}),t.paths[b].delete=new kv(l,r,"delete all the records that match the provided query",{204:new qv})),b="/"+s+"/{"+c+"}",S&&(t.paths[b]={},t.paths[b].get=new Pg([f],r,{200:new vg({$ref:Ri+i})},"retrieve a record by its primary key")),p&&(t.paths[b]||(t.paths[b]={}),t.paths[b].put=new _ee([f],r,i,"create or update the record with the URL path that maps to the record's primary key")),T&&(t.paths[b]||(t.paths[b]={}),t.paths[b].delete=new kv([f],r,"delete a record with the given primary key",{204:new qv})),S&&E.schema.enum.length>0&&(b="/"+s+"/{"+c+"}.{property}",t.paths[b]={},t.paths[b].get=new Pg([f,E],r,{200:new vg({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function lee(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Ri+e}}}},this.security=t,this.responses={200:{description:xg,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function Pg(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function vg(e){this.description=xg,this.content={"application/json":{schema:e}}}function qv(){this.description="successfully processed request, no content returned to client"}function _ee(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Ri+r}}}},this.responses={200:{description:xg}}}function kv(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function Vv(e){this.type="object",this.properties=e}function Bg(e,t){this.type=e,this.format=t}function Hg(e,t,r){this.name=e,this.in=t,this.schema=r}var $v,uee,Ug,Ri,xg,Kv=Re(()=>{$v=x(Md()),uee="3.0.3",Ug={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Ri="#/components/schemas/",xg="successful operation";a(Yv,"generateJsonApi");a(lee,"Post");a(Pg,"Get");a(vg,"Response200");a(qv,"Response204");a(_ee,"Put");a(kv,"Delete");a(Vv,"ResourceSchema");a(Bg,"Type");a(Hg,"Parameter")});var Hf={};$e(Hf,{start:()=>Eee});async function fee(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Pf(e);let s=new hi;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==Wv){let h=Bf.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 ze(e,()=>{if(n==="POST"||n==="PUT"||n==="PATCH"||n==="QUERY")try{e.data=po(r["content-type"],!0)(e.body)}catch(h){throw new Da.ClientError(h,400)}if(e.authorize=!0,i===Wv&&n==="GET"){if(e?.user?.role?.permission?.super_user)return Yv(Bf);throw new Da.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 Da.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Da.ServerError(`Method ${n} is not recognized`,501)}}),l=200,d;if(_==null)l=n==="GET"||n==="HEAD"?404:204,Gg.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){dee[0]=d;let h=String.fromCharCode(34,(Vt[0]&63)+62,(Vt[0]>>6)+(Vt[1]<<2&63)+62,(Vt[1]>>4)+(Vt[2]<<4&63)+62,(Vt[2]>>2)+62,(Vt[3]&63)+62,(Vt[3]>>6)+(Vt[4]<<2&63)+62,(Vt[4]>>4)+(Vt[5]<<4&63)+62,(Vt[5]>>2)+62,(Vt[6]&63)+62,(Vt[6]>>6)+(Vt[7]<<2&63)+62,34),p=r["if-none-match"];p&&h==p?(_?.onDone&&_.onDone(),l=304,_=void 0):s.setIfNone("ETag",h),Gg.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=Lf(_,e,f),n==="HEAD"&&(f.body=void 0)),f}catch(i){i.statusCode?i.statusCode===500?So.warn(i):So.info(i):So.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=Lf(i.contentType?i:i.toString(),e,o),o}}function Eee(e){Gg=e,!Qv&&(Qv=!0,Bf=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return fee(t,r)}),e.server.ws(async(t,r,n)=>{rl++;let s=new On;zv||(zv=!0,su(l=>{rl>0&&l.push({metric:"ws-connections",connections:rl,byThread:!0})}));let i;t.on("error",l=>{i=!0,So.warn(l)});let o;t.on("message",a(function(d){o||(o=po(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{rl--,sn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let u=r.url.slice(1),_=Bf.getMatch(u);if(sn(!!_,"connection","ws","connect"),!_)t.send(mi(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,Gr(h=>({count:h.count,total:rl}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await ze(r,()=>d.connect(l,s,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=mi(E.value,r);t.send(h),Gr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var So,Da,Vt,dee,Gg,Wv,Qv,Bf,zv,rl,Jv=Re(()=>{ga();ys();So=x(K()),Da=x(ne());vf();pc();Xi();xu();Kv();Vt=new Uint8Array(8),dee=new Float64Array(Vt.buffer,0,1),Gg={},Wv="openapi";a(fee,"http");rl=0;a(Eee,"start")});var Fg=g((WEe,jv)=>{var{recordAction:xf,recordActionBinary:hee}=(ys(),se(iu)),mee=require("fastify-plugin"),pee=200;jv.exports=mee(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),xf(o,"duration",_,d,l),hee(s.raw.statusCode<400,"success",_,d,l);let f=pee;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{xf(performance.now()-c,"transfer",_,d,l),xf(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,xf(f,"bytes-sent",_,d,l));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var Kg=g((JEe,t0)=>{var kf=require("clone"),Vf=Xe(),See=Q(),Ff=U(),QEe=K(),qg=require("fs"),Vg=require("joi"),{string:qf}=Vg.types(),{hdb_errors:Tee,handleHDBError:Gf}=ne(),{HDB_ERROR_MSGS:zEe,HTTP_STATUS_CODES:kg}=Tee,{common_validators:La}=Qn(),Xv=" is required",gee=["insert","update","upsert"],$g={database:{presence:!1,format:La.schema_format,length:La.schema_length},schema:{presence:!1,format:La.schema_format,length:La.schema_length},table:{presence:!0,format:La.schema_format,length:La.schema_length},action:{inclusion:{within:gee,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Ree={schema:qf.required(),table:qf.required(),action:qf.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Aee,AWS_SECRET:Oee,AWS_BUCKET:bee,AWS_FILE_KEY:yee,REGION:Nee}=Ff.S3_BUCKET_AUTH_KEYS,Iee={s3:{presence:!0},[`s3.${Aee}`]:{presence:!0,type:"String"},[`s3.${Oee}`]:{presence:!0,type:"String"},[`s3.${bee}`]:{presence:!0,type:"String"},[`s3.${yee}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Nee}`]:{presence:!0,type:"String"}},Zv=kf($g);Zv.data.presence={message:Xv};var e0=kf($g);e0.file_path.presence={message:Xv};var wee=Object.assign(kf($g),Iee),Yg=kf(Ree);Yg.csv_url=qf.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Yg.passthrough_headers=Vg.object();function Cee(e){let t=Vf.validateObject(e,Zv);return $f(e,t)}a(Cee,"dataObject");function Dee(e){let t=Vf.validateBySchema(e,Vg.object(Yg));return $f(e,t)}a(Dee,"urlObject");function Lee(e){let t=Vf.validateObject(e,e0);return $f(e,t)}a(Lee,"fileObject");function Mee(e){let t=Vf.validateObject(e,wee);return $f(e,t)}a(Mee,"s3FileObject");function $f(e,t){if(!t){let r=See.checkGlobalSchemaTable(e.schema,e.table);if(r)return Gf(new Error,r,kg.BAD_REQUEST);if(e.operation===Ff.OPERATIONS_ENUM.CSV_FILE_LOAD)try{qg.accessSync(e.file_path,qg.constants.R_OK|qg.constants.F_OK)}catch(n){return n.code===Ff.NODE_ERROR_CODES.ENOENT?Gf(n,`No such file or directory ${n.path}`,kg.BAD_REQUEST):n.code===Ff.NODE_ERROR_CODES.EACCES?Gf(n,`Permission denied ${n.path}`,kg.BAD_REQUEST):Gf(n)}}return t}a($f,"postValidateChecks");t0.exports={dataObject:Cee,urlObject:Dee,fileObject:Lee,s3FileObject:Mee}});var Wg=g((XEe,r0)=>{"use strict";var nl=K(),Yf=U();async function Uee(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")?(nl.info(i.message),i):i.http_resp_msg?(nl.error(`Error calling operation: ${e.name}`),nl.error(i.http_resp_msg),i):(nl.error(`Error calling operation: ${e.name}`),nl.error(i),i)}}a(Uee,"callOperationFunctionAsAwait");r0.exports={callOperationFunctionAsAwait:Uee}});var s0=g((ehe,n0)=>{"use strict";var Qg=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}},zg=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};n0.exports={BulkLoadFileObject:Qg,BulkLoadDataObject:zg}});var o0=g((rhe,i0)=>{"use strict";var Jg=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};i0.exports=Jg});var rR=g((che,O0)=>{"use strict";var Kf=nn(),Qf=Kg(),Pee=require("needle"),Hn=U(),she=rt(),Ma=Q(),{handleHDBError:st,hdb_errors:h0}=ne(),{HTTP_STATUS_CODES:$t,HDB_ERROR_MSGS:It,CHECK_LOGS_WRAPPER:go}=h0,Ua=K(),jg=require("papaparse");Ma.promisifyPapaParse();var xn=require("fs-extra"),vee=require("path"),{chain:a0}=require("stream-chain"),c0=require("stream-json/streamers/StreamArray"),u0=require("stream-json/utils/Batch"),l0=require("stream-chain/utils/comp"),{finished:_0}=require("stream"),Bee=re(),m0=Wg(),Hee=Tg(),{BulkLoadFileObject:Zg,BulkLoadDataObject:xee}=s0(),eR=ug(),{verifyBulkLoadAttributePerms:p0}=yf(),ihe=o0(),ohe=Et(),ahe=Ts(),{databases:Gee}=(Ae(),se(Fe)),{coerceType:Fee}=(zf(),se(nR)),d0="No records parsed from csv file.",To=`${Bee.get("HDB_ROOT")}/tmp`,{schema_regex:qee}=Qn(),f0=1024*1024*2,E0=5e3,kee={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};O0.exports={csvDataLoad:Vee,csvURLLoad:$ee,csvFileLoad:Yee,importFromS3:Kee};async function Vee(e,t){let r=Qf.dataObject(e);if(r)throw st(r,r.message,$t.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=g0(e.schema,e.table),i=jg.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Xg.bind(null,s),dynamicTyping:!1}),o=new eR;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&p0(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 st(new Error,c,$t.BAD_REQUEST,void 0,void 0,!0);let u=new xee(e.action,e.schema,e.table,i.data);return n=await m0.callOperationFunctionAsAwait(R0,u,null),n.message===d0?d0:A0(n.records,n.number_written)}catch(s){throw Ro(s)}}a(Vee,"csvDataLoad");async function $ee(e){let t=Qf.urlObject(e);if(t)throw st(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${To}/${r}`;try{await Wee(e,r)}catch(s){throw Ua.error(It.DOWNLOAD_FILE_ERR(r)+" - "+s),st(s,go(It.DOWNLOAD_FILE_ERR(r)))}try{let s=new Zg(this.job_operation_function.name,e.action,e.schema,e.table,n,Hn.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await tR(s);return await Wf(n),i}catch(s){throw await Wf(n),Ro(s)}}a($ee,"csvURLLoad");async function Yee(e){let t=Qf.fileObject(e);if(t)throw st(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r=new Zg(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Hn.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await tR(r)}catch(n){throw Ro(n)}}a(Yee,"csvFileLoad");async function Kee(e){let t=Qf.s3FileObject(e);if(t)throw st(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=vee.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${To}/${s}`;let i=new Zg(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await Qee(s,e);let o=await tR(i);return await Wf(r),o}catch(n){throw await Wf(r),Ro(n)}}a(Kee,"importFromS3");async function Wee(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Pee("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 st(n,s,n.statusCode,Hn.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Jee(r,e.csv_url),await zee(t,r.raw)}a(Wee,"downloadCSVFile");async function Qee(e,t){try{let r=`${To}/${e}`;await xn.mkdirp(To),await xn.writeFile(`${To}/${e}`,"",{flag:"a+"});let n=await xn.createWriteStream(r),s=await Hee.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(){Ua.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Ua.error(It.S3_DOWNLOAD_ERR+" - "+r),st(r,go(It.S3_DOWNLOAD_ERR))}}a(Qee,"downloadFileFromS3");async function zee(e,t){try{await xn.mkdirp(To),await xn.writeFile(`${To}/${e}`,t)}catch(r){throw Ua.error(It.WRITE_TEMP_FILE_ERR),st(r,go(It.DEFAULT_BULK_LOAD_ERR))}}a(zee,"writeFileToTempFolder");async function Wf(e){if(e)try{await xn.access(e),await xn.unlink(e)}catch{Ua.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Wf,"deleteTempFile");function Jee(e,t){if(e.statusCode!==h0.HTTP_STATUS_CODES.OK)throw st(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,$t.BAD_REQUEST);if(!kee[e.headers["content-type"]])throw st(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,$t.BAD_REQUEST);if(!e.raw)throw st(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,$t.BAD_REQUEST)}a(Jee,"validateURLResponse");async function tR(e){try{let t;switch(e.file_type){case Hn.VALID_S3_FILE_TYPES.CSV:t=await jee(e);break;case Hn.VALID_S3_FILE_TYPES.JSON:t=await Xee(e);break;default:throw st(new Error,It.DEFAULT_BULK_LOAD_ERR,$t.BAD_REQUEST,Hn.LOG_LEVELS.ERROR,It.INVALID_FILE_EXT_ERR(e))}return A0(t.records,t.number_written)}catch(t){throw Ro(t)}}a(tR,"fileLoad");async function S0(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 Kf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&p0(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let u=st(c);r(u)}}a(S0,"validateChunk");async function T0(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Ma.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Ma.isEmpty(c)&&!Ma.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 m0.callOperationFunctionAsAwait(R0,c,null);t.records+=u.records,t.number_written+=u.number_written,s&&s.resume()}catch(c){let u=st(c,go(It.INSERT_CSV_ERR),$t.INTERNAL_SERVER_ERROR,Hn.LOG_LEVELS.ERROR,It.INSERT_CSV_ERR+" - "+c);r(u)}}a(T0,"insertChunk");async function jee(e){let t={records:0,number_written:0},r=g0(e.schema,e.table);try{let n=new eR,s=xn.createReadStream(e.file_path,{highWaterMark:f0});s.setEncoding("utf8"),await jg.parsePromise(s,S0.bind(null,e,n),Xg.bind(null,r));let i=n.getPermsResponse();if(i)throw st(new Error,i,$t.BAD_REQUEST);return s=xn.createReadStream(e.file_path,{highWaterMark:f0}),s.setEncoding("utf8"),await jg.parsePromise(s,T0.bind(null,e,t),Xg.bind(null,r)),s.destroy(),t}catch(n){throw st(n,go(It.PAPA_PARSE_ERR),$t.INTERNAL_SERVER_ERROR,Hn.LOG_LEVELS.ERROR,It.PAPA_PARSE_ERR+n)}}a(jee,"callPapaParse");function g0(e,t){let r=Gee[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>Fee(i,s));return n}a(g0,"createTransformMap");function Xg(e,t,r){let n=e.get(r);return n?n(t):Ma.autoCast(t)}a(Xg,"typeFunction");async function Xee(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new eR,s=a0([xn.createReadStream(e.file_path,{encoding:"utf-8"}),c0.withParser(),c=>c.value,new u0({batchSize:E0}),l0(async c=>{await S0(e,n,r,c)})]);await new Promise((c,u)=>{_0(s,_=>{_?u(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw st(new Error,i,$t.BAD_REQUEST);let o=a0([xn.createReadStream(e.file_path,{encoding:"utf-8"}),c0.withParser(),c=>c.value,new u0({batchSize:E0}),l0(async c=>{await T0(e,t,r,c)})]);return await new Promise((c,u)=>{_0(o,_=>{_?u(_):c()}),o.resume()}),t}catch(n){throw st(n,go(It.INSERT_JSON_ERR),$t.INTERNAL_SERVER_ERROR,Hn.LOG_LEVELS.ERROR,It.INSERT_JSON_ERR+n)}}a(Xee,"insertJson");async function R0(e){let t={};try{e.data&&e.data.length>0&&Zee(e.data[0])?t=await ete(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Ua.info(t.message))}catch(r){throw Ro(r)}return t}a(R0,"callBulkFileLoad");function Zee(e){let t=Object.keys(e);for(let r of t)if(!qee.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Zee,"validateColumnNames");async function ete(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=Kf.insert;break;case"update":i=Kf.update;break;case"upsert":i=Kf.upsert;break;default:throw st(new Error,It.INVALID_ACTION_PARAM_ERR(n),$t.BAD_REQUEST,Hn.LOG_LEVELS.ERROR,It.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=Ma.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Ro(o)}}a(ete,"bulkFileLoad");function A0(e,t){return`successfully loaded ${t} of ${e} records`}a(A0,"buildResponseMsg");function Ro(e){return st(e,go(It.DEFAULT_BULK_LOAD_ERR),$t.INTERNAL_SERVER_ERROR,Hn.LOG_LEVELS.ERROR,It.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ro,"buildTopLevelErrMsg")});var y0=g((lhe,b0)=>{"use strict";var sR=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};b0.exports=sR});var w0=g((dhe,I0)=>{"use strict";var tte=U(),N0=require("moment"),rte=require("uuid").v4,iR=class{static{a(this,"JobObject")}constructor(){this.id=rte(),this.type=void 0,this.start_datetime=N0().valueOf(),this.created_datetime=N0().valueOf(),this.end_datetime=void 0,this.status=tte.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};I0.exports=iR});var jf=g((Ehe,P0)=>{"use strict";var nte=require("uuid").v4,L0=nn(),M0=Ur(),ste=Xn(),ite=Zo(),ote=y0(),it=U(),ate=w0(),cte=FS(),dn=K(),ute=Mc(),Pa=Q(),{promisify:lte}=require("util"),Ao=require("moment"),_te=If(),Jf=Kg(),C0=vm(),{deleteTransactionLogsBeforeValidator:dte}=sg(),{handleHDBError:fte,hdb_errors:Ete}=ne(),{HTTP_STATUS_CODES:hte}=Ete,D0=M0.searchByValue,mte=M0.searchByHash,pte=L0.insert,Ste=lte(_te.evaluateSQL),Tte=L0.update;P0.exports={addJob:Ate,updateJob:bte,handleGetJob:gte,handleGetJobsByStartDate:Rte,getJobById:U0};async function gte(e){try{let t=await U0(e.id);return Pa.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 dn.error("There was an error getting job",t),new Error(r)}}a(gte,"handleGetJob");async function Rte(e){try{let t=await Ote(e);if(dn.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=Ao(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Ao(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 dn.error(r),new Error(r)}}a(Rte,"handleGetJobsByStartDate");async function Ate(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Pa.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return dn.info(l),t.error=l,t}if(!it.JOB_TYPE_ENUM[e.operation])return dn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case it.OPERATIONS_ENUM.CSV_FILE_LOAD:n=Jf.fileObject(e);break;case it.OPERATIONS_ENUM.CSV_URL_LOAD:n=Jf.urlObject(e);break;case it.OPERATIONS_ENUM.CSV_DATA_LOAD:n=Jf.dataObject(e);break;case it.OPERATIONS_ENUM.IMPORT_FROM_S3:n=Jf.s3FileObject(e);break;case it.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case it.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=C0(e,"date");break;case it.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=C0(e,"timestamp");break;case it.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=dte(e);break;default:break}if(n)throw fte(n,n.message,hte.BAD_REQUEST,void 0,void 0,!0);let s=new ate;s.type=e.operation===it.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?it.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new ste(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await D0(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return dn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=nte();try{o=await D0(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return dn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return dn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let u=new ute(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await pte(u)}catch(l){return dn.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,dn.trace(l)}return t}a(Ate,"addJob");async function Ote(e){let t=Ao(e.from_date,Ao.ISO_8601),r=Ao(e.to_date,Ao.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 ote(n,e.hdb_user);try{return await Ste(s)}catch(i){throw dn.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(Ote,"getJobsInDateRange");async function U0(e){if(Pa.isEmptyOrZeroLength(e))return Pa.errorizeMessage("Invalid job ID specified.");let t=new ite(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await mte(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return dn.error(n),Pa.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(U0,"getJobById");async function bte(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Pa.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===it.JOB_STATUS_ENUM.COMPLETE||e.status===it.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Ao().valueOf());let t=new cte(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Tte(t),r}a(bte,"updateJob")});var F0=g((mhe,G0)=>{"use strict";var v0=Q(),Or=U(),yte=require("moment"),Xf=rR(),Zf=K(),B0=jf(),H0=wf(),x0=Yi(),Nte=et(),Ite=Rf(),oR=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function wte(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(v0.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(v0.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Or.JOB_TYPE_ENUM.csv_file_load:await xs(e,Xf.csvFileLoad);break;case Or.JOB_TYPE_ENUM.csv_url_load:await xs(e,Xf.csvURLLoad);break;case Or.JOB_TYPE_ENUM.csv_data_load:await xs(e,Xf.csvDataLoad);break;case Or.JOB_TYPE_ENUM.import_from_s3:await xs(e,Xf.importFromS3);break;case Or.JOB_TYPE_ENUM.empty_trash:break;case Or.JOB_TYPE_ENUM.export_local:await xs(e,H0.export_local);break;case Or.JOB_TYPE_ENUM.export_to_s3:await xs(e,H0.export_to_s3);break;case Or.JOB_TYPE_ENUM.delete_files_before:case Or.JOB_TYPE_ENUM.delete_records_before:await xs(e,x0.deleteFilesBefore);break;case Or.JOB_TYPE_ENUM.delete_audit_logs_before:await xs(e,x0.deleteAuditLogsBefore);break;case Or.JOB_TYPE_ENUM.delete_transaction_logs_before:await xs(e,Ite.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(wte,"parseMessage");async function xs(e,t){try{e.job.status=Or.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=yte().valueOf(),await B0.updateJob(e.job),await Cte(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):Zf.error(`There was an error running ${t.name} job with id ${e.job.id}`),Zf.error(n),e.job.message=n,e.job.status=Or.JOB_STATUS_ENUM.ERROR;try{await B0.updateJob(e.job)}catch(s){throw Zf.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(xs,"runJob");async function Cte(e){Zf.trace("launching job thread:",e),Nte.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Or.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Cte,"launchJobThread");G0.exports={parseMessage:wte,RunnerMessage:oR}});var k0=g((She,q0)=>{"use strict";var aR=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};q0.exports=aR});var ER=g((ghe,fR)=>{"use strict";var sE=Ur(),lR=If(),eE=rR(),Gs=gd(),tE=Fi(),il=Yi(),Dte=yS(),sl=vr(),rE=PS(),Yt=ng(),nE=K(),Lte=HS(),Mte=xd(),V0=mT(),Ute=Fd(),Pte=ST(),vte=TT(),Bte=AT(),Hte=bT(),cR=IT(),$0=wf(),xte=yf(),_R=jf(),G=U(),{hdb_errors:al,handleHDBError:ol}=ne(),{HTTP_STATUS_CODES:Y0}=al,uR=MT(),K0=of(),tB=require("util"),va=nn(),Gte=gs(),Fte=da(),W0=F0(),Q0=Su(),z0=(lf(),se(Gu)),J0=Cr(),j0=Rf(),X0=hf(),{setServerUtilities:qte}=(zf(),se(nR)),{CONTEXT:kte}=(bn(),se(Op)),{_assignPackageExport:Vte}=require("../../index"),{transformReq:$te}=Q(),{server:Yte}=(ir(),se(Li)),Xt=nE.loggerWithTag("operation"),Kte=Wg(),Z0=sE.searchByHash,Wte=sE.searchByValue,Qte=tB.promisify(sE.search),zte=tB.promisify(lR.evaluateSQL),Jte={[G.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[G.OPERATIONS_ENUM.CREATE_TABLE]:!0,[G.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[G.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[G.OPERATIONS_ENUM.DROP_TABLE]:!0,[G.OPERATIONS_ENUM.DROP_SCHEMA]:!0},$=k0();async function rB(e,t){try{if(e.body.operation!=="read_log"&&(nE.log_level===G.LOG_LEVELS.INFO||nE.log_level===G.LOG_LEVELS.DEBUG||nE.log_level===G.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;Xt.info(o)}}catch(n){Xt.error(n)}let r=await Kte.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Jte[e.body.operation]&&Gte.setSchemaDataToGlobal(n=>{n&&Xt.error(n)}),r}a(rB,"processLocalTransaction");var eB=Xte();fR.exports={chooseOperation:nB,getOperationFunction:sB,operation:dR,processLocalTransaction:rB};qte(fR.exports);Yte.operation=dR;function nB(e){let t;try{t=sB(e)}catch(s){throw Xt.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=lR.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=lR.checkASTPermissions(e,i);if(o)throw Xt.error(`${Y0.FORBIDDEN} from operation ${e.operation}`),Xt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),ol(new Error,o,al.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==G.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==G.OPERATIONS_ENUM.LOGIN&&e.operation!==G.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=xte.verifyPerms(i,s);if(o)throw Xt.error(`${Y0.FORBIDDEN} from operation ${e.operation}`),Xt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),ol(new Error,o,al.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw ol(s,"There was an error when trying to choose an operation path")}return r}a(nB,"chooseOperation");function sB(e){if(Xt.trace(`getOperationFunction with operation: ${e.operation}`),eB.has(e.operation))return eB.get(e.operation);throw ol(new Error,al.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),al.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(sB,"getOperationFunction");Vte("operation",dR);function dR(e,t){e.hdb_user=this[kte]?.user,e.bypass_auth=!t;let r=nB(e);return rB({body:e},r)}a(dR,"operation");async function jte(e){Xt.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[G.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case G.OPERATIONS_ENUM.INSERT:o=await va.insert(i);break;case G.OPERATIONS_ENUM.UPDATE:o=await va.update(i);break;case G.OPERATIONS_ENUM.UPSERT:o=await va.upsert(i);break;case G.OPERATIONS_ENUM.DELETE:o=await il.deleteRecord(i);break;default:Xt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Xt.info("Invalid operation in transaction"),Xt.error(o)}}a(jte,"catchup");async function cs(e){$te(e);let t,r;try{r=await _R.addJob(e),t=r.createdJob,Xt.info("addJob result",r);let n=new W0.RunnerMessage(t,e);return await W0.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 Xt.error(s),ol(n,s)}}a(cs,"executeJob");function Xte(){let e=new Map;return e.set(G.OPERATIONS_ENUM.INSERT,new $(va.insert)),e.set(G.OPERATIONS_ENUM.UPDATE,new $(va.update)),e.set(G.OPERATIONS_ENUM.UPSERT,new $(va.upsert)),e.set(G.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new $(sE.searchByConditions)),e.set(G.OPERATIONS_ENUM.SEARCH_BY_HASH,new $(Z0)),e.set(G.OPERATIONS_ENUM.SEARCH_BY_ID,new $(Z0)),e.set(G.OPERATIONS_ENUM.SEARCH_BY_VALUE,new $(Wte)),e.set(G.OPERATIONS_ENUM.SEARCH,new $(Qte)),e.set(G.OPERATIONS_ENUM.SQL,new $(zte)),e.set(G.OPERATIONS_ENUM.CSV_DATA_LOAD,new $(cs,eE.csvDataLoad)),e.set(G.OPERATIONS_ENUM.CSV_FILE_LOAD,new $(cs,eE.csvFileLoad)),e.set(G.OPERATIONS_ENUM.CSV_URL_LOAD,new $(cs,eE.csvURLLoad)),e.set(G.OPERATIONS_ENUM.IMPORT_FROM_S3,new $(cs,eE.importFromS3)),e.set(G.OPERATIONS_ENUM.CREATE_SCHEMA,new $(Gs.createSchema)),e.set(G.OPERATIONS_ENUM.CREATE_DATABASE,new $(Gs.createSchema)),e.set(G.OPERATIONS_ENUM.CREATE_TABLE,new $(Gs.createTable)),e.set(G.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new $(Gs.createAttribute)),e.set(G.OPERATIONS_ENUM.DROP_SCHEMA,new $(Gs.dropSchema)),e.set(G.OPERATIONS_ENUM.DROP_DATABASE,new $(Gs.dropSchema)),e.set(G.OPERATIONS_ENUM.DROP_TABLE,new $(Gs.dropTable)),e.set(G.OPERATIONS_ENUM.DROP_ATTRIBUTE,new $(Gs.dropAttribute)),e.set(G.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new $(tE.describeSchema)),e.set(G.OPERATIONS_ENUM.DESCRIBE_DATABASE,new $(tE.describeSchema)),e.set(G.OPERATIONS_ENUM.DESCRIBE_TABLE,new $(tE.describeTable)),e.set(G.OPERATIONS_ENUM.DESCRIBE_ALL,new $(tE.describeAll)),e.set(G.OPERATIONS_ENUM.DELETE,new $(il.deleteRecord)),e.set(G.OPERATIONS_ENUM.ADD_USER,new $(sl.addUser)),e.set(G.OPERATIONS_ENUM.ALTER_USER,new $(sl.alterUser)),e.set(G.OPERATIONS_ENUM.DROP_USER,new $(sl.dropUser)),e.set(G.OPERATIONS_ENUM.LIST_USERS,new $(sl.listUsersExternal)),e.set(G.OPERATIONS_ENUM.LIST_ROLES,new $(rE.listRoles)),e.set(G.OPERATIONS_ENUM.ADD_ROLE,new $(rE.addRole)),e.set(G.OPERATIONS_ENUM.ALTER_ROLE,new $(rE.alterRole)),e.set(G.OPERATIONS_ENUM.DROP_ROLE,new $(rE.dropRole)),e.set(G.OPERATIONS_ENUM.USER_INFO,new $(sl.userInfo)),e.set(G.OPERATIONS_ENUM.READ_LOG,new $(Lte)),e.set(G.OPERATIONS_ENUM.ADD_NODE,new $(Mte)),e.set(G.OPERATIONS_ENUM.UPDATE_NODE,new $(V0)),e.set(G.OPERATIONS_ENUM.SET_NODE_REPLICATION,new $(V0)),e.set(G.OPERATIONS_ENUM.REMOVE_NODE,new $(Ute)),e.set(G.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new $(Pte)),e.set(G.OPERATIONS_ENUM.PURGE_STREAM,new $(vte)),e.set(G.OPERATIONS_ENUM.SET_CONFIGURATION,new $(J0.setConfiguration)),e.set(G.OPERATIONS_ENUM.CLUSTER_STATUS,new $(Bte.clusterStatus)),e.set(G.OPERATIONS_ENUM.CLUSTER_NETWORK,new $(Hte)),e.set(G.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new $(cR.setRoutes)),e.set(G.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new $(cR.getRoutes)),e.set(G.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new $(cR.deleteRoutes)),e.set(G.OPERATIONS_ENUM.EXPORT_TO_S3,new $(cs,$0.export_to_s3)),e.set(G.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new $(cs,il.deleteFilesBefore)),e.set(G.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new $(cs,il.deleteFilesBefore)),e.set(G.OPERATIONS_ENUM.EXPORT_LOCAL,new $(cs,$0.export_local)),e.set(G.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new $(_R.handleGetJobsByStartDate)),e.set(G.OPERATIONS_ENUM.GET_JOB,new $(_R.handleGetJob)),e.set(G.OPERATIONS_ENUM.GET_FINGERPRINT,new $(uR.getFingerprint)),e.set(G.OPERATIONS_ENUM.SET_LICENSE,new $(uR.setLicense)),e.set(G.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new $(uR.getRegistrationInfo)),e.set(G.OPERATIONS_ENUM.RESTART,new $(K0.restart)),e.set(G.OPERATIONS_ENUM.RESTART_SERVICE,new $(K0.restartService)),e.set(G.OPERATIONS_ENUM.CATCHUP,new $(jte)),e.set(G.OPERATIONS_ENUM.SYSTEM_INFORMATION,new $(Fte.systemInformation)),e.set(G.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new $(cs,il.deleteAuditLogsBefore)),e.set(G.OPERATIONS_ENUM.READ_AUDIT_LOG,new $(Dte)),e.set(G.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new $(Q0.createTokens)),e.set(G.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new $(Q0.refreshOperationToken)),e.set(G.OPERATIONS_ENUM.LOGIN,new $(z0.login)),e.set(G.OPERATIONS_ENUM.LOGOUT,new $(z0.logout)),e.set(G.OPERATIONS_ENUM.GET_CONFIGURATION,new $(J0.getConfiguration)),e.set(G.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new $(Yt.customFunctionsStatus)),e.set(G.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new $(Yt.getCustomFunctions)),e.set(G.OPERATIONS_ENUM.GET_COMPONENT_FILE,new $(Yt.getComponentFile)),e.set(G.OPERATIONS_ENUM.GET_COMPONENTS,new $(Yt.getComponents)),e.set(G.OPERATIONS_ENUM.SET_COMPONENT_FILE,new $(Yt.setComponentFile)),e.set(G.OPERATIONS_ENUM.DROP_COMPONENT,new $(Yt.dropComponent)),e.set(G.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new $(Yt.getCustomFunction)),e.set(G.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new $(Yt.setCustomFunction)),e.set(G.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new $(Yt.dropCustomFunction)),e.set(G.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new $(Yt.addComponent)),e.set(G.OPERATIONS_ENUM.ADD_COMPONENT,new $(Yt.addComponent)),e.set(G.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new $(Yt.dropCustomFunctionProject)),e.set(G.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new $(Yt.packageComponent)),e.set(G.OPERATIONS_ENUM.PACKAGE_COMPONENT,new $(Yt.packageComponent)),e.set(G.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new $(Yt.deployComponent)),e.set(G.OPERATIONS_ENUM.DEPLOY_COMPONENT,new $(Yt.deployComponent)),e.set(G.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new $(j0.readTransactionLog)),e.set(G.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new $(cs,j0.deleteTransactionLogsBefore)),e.set(G.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new $(X0.installModules)),e.set(G.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new $(X0.auditModules)),e.set(G.OPERATIONS_ENUM.GET_BACKUP,new $(Gs.getBackup)),e}a(Xte,"initializeOperationFunctionMap")});var oE=g((Ahe,aB)=>{"use strict";var hR=U(),Zte=Q(),cl=K(),{handleHDBError:mR,hdb_errors:iE}=ne(),{isMainThread:ere}=require("worker_threads"),{Readable:tre}=require("stream"),iB=require("os"),rre=require("util"),nre=QS(),sre=rre.promisify(nre.authorize),oB=ER(),{createGzip:ire,constants:ore}=require("zlib");function are(e){let t=`Found an uncaught exception with message: ${e.message}. ${iB.EOL}Stack: ${e.stack} ${iB.EOL}Terminating ${ere?"HDB":"thread"}.`;console.error(t),cl.fatal(t),process.exit(1)}a(are,"handleServerUncaughtException");function cre(e,t,r){if(cl[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:iE.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(cre,"serverErrorHandler");function ure(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=mR(new Error,"Invalid JSON.",iE.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(Zte.isEmpty(e.body.operation)){let n=mR(new Error,"Request body must include an 'operation' property.",iE.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(ure,"reqBodyValidationHandler");function lre(e,t,r){let n;e.body.operation!==hR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==hR.OPERATIONS_ENUM.LOGIN&&e.body.operation!==hR.OPERATIONS_ENUM.LOGOUT?sre(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{cl.warn(s),cl.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(mR(s,i,iE.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(lre,"authHandler");async function _re(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=oB.chooseOperation(e.body);let s=await oB.processLocalTransaction(e,n);if(s instanceof tre&&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(ire({level:ore.Z_BEST_SPEED})))}return s}catch(s){throw cl.error(s),s}}a(_re,"handlePostRequest");aB.exports={authHandler:lre,handlePostRequest:_re,handleServerUncaughtException:are,serverErrorHandler:cre,reqBodyValidationHandler:ure}});var _B=g((bhe,lB)=>{"use strict";var dre=require("fastify-plugin"),{handlePostRequest:cB,authHandler:fre,reqBodyValidationHandler:Ere}=oE();async function hre(e){e.decorate("hdbCore",{preValidation:[Ere,fre],request:t=>uB(cB(t,response)),requestWithoutAuthentication:(t,r)=>uB(cB(t,r,!0))})}a(hre,"hdbCore");async function uB(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(uB,"convertAsyncIterators");lB.exports=dre(hre)});var EB=g((Ihe,fB)=>{"use strict";var Nhe=require("fs"),pR=re();pR.initSync();var{CONFIG_PARAMS:dB}=U(),mre=1024*1024*1024;function pre(e){let t=pR.get(dB.HTTP_TIMEOUT),r=pR.get(dB.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:mre,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(pre,"getServerOptions");fB.exports=pre});var pB=g((Che,mB)=>{"use strict";var SR=re();SR.initSync();var{CONFIG_PARAMS:hB}=U();function Sre(){let e=SR.get(hB.HTTP_CORSACCESSLIST),t=SR.get(hB.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(Sre,"getCORSOptions");mB.exports=Sre});var gB=g((Lhe,TB)=>{"use strict";var SB=re();SB.initSync();var Tre=U();function gre(){return SB.get(Tre.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(gre,"getHeaderTimeoutConfig");TB.exports=gre});var gR={};$e(gR,{customFunctionsServer:()=>Ore,ready:()=>vB,start:()=>Are});function Are(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Fs||(Fs=PB(t),Ze.http((await Fs).server));let o=await Fs,c=(0,TR.dirname)(s),u=(0,TR.dirname)(n);if(u.startsWith("/")&&(u=u.slice(1)),!RB.has(c)){RB.add(c);try{o.register(yre(c,u))}catch(_){if(_.message==="Root plugin has already booted")ke.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:vB}}async function Ore(){try{ke.info("In Custom Functions Fastify server"+process.cwd()),ke.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),ke.debug(`Custom Functions server process ${process.pid} starting up.`),await bre();let e=IB.get(wB.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Fs=await PB(e)}catch(r){throw ke.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw ke.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){ke.error(`Custom Functions ${process.pid} Error: ${e}`),ke.error(e),process.exit(1)}}async function bre(){try{ke.info("Custom Functions starting configuration."),await CB.setUsersToGlobal(),ke.info("Custom Functions completed configuration.")}catch(e){ke.error(e)}}function yre(e,t){return async function(r){try{ke.info("Custom Functions starting buildRoutes"),ke.trace("Loading fastify routes folder "+e),(0,AB.existsSync)(e)&&r.register(NB.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:ke.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?ke.error(s.message):s&&ke.error(s),o()})}catch(n){ke.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function PB(e){ke.info("Custom Functions starting buildServer.");let t=(0,DB.default)(e),r=(0,OB.default)(t);r.server.headersTimeout=(0,MB.default)(),r.setErrorHandler(UB.serverErrorHandler);let n=(0,LB.default)();return n&&r.register(bB.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(yB.default),await r.register(Rre),await r.after(),Ig(r),ke.info("Custom Functions completed buildServer."),r}function vB(){if(Fs)return Fs.then?Fs.then(e=>e.ready()):Fs.ready()}var TR,AB,OB,bB,yB,NB,IB,wB,ke,Rre,CB,DB,LB,MB,UB,Fs,RB,BB=Re(()=>{TR=require("path"),AB=require("fs"),OB=x(require("fastify")),bB=x(require("@fastify/cors")),yB=x(Fg()),NB=x(require("@fastify/autoload")),IB=x(re()),wB=x(U()),ke=x(K()),Rre=x(_B()),CB=x(vr()),DB=x(EB()),LB=x(pB()),MB=x(gB()),UB=x(oE());ga();ir();RB=new Set;a(Are,"start");a(Ore,"customFunctionsServer");a(bre,"setUp");a(yre,"buildRouteFolder");a(PB,"buildServer");a(vB,"ready")});var RR={};$e(RR,{start:()=>Nre});function Nre(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,qB.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){xB||(xB=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=HB.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,GB.default)(s,(0,FB.realpathSync)(o))}}return i(s)},{runFirst:!0})),HB.set(r,n)}}}var GB,FB,qB,HB,xB,kB=Re(()=>{GB=x(require("send")),FB=require("fs"),qB=x(require("serve-static")),HB=new Map;a(Nre,"start")});function Cre(e,t=1,r){if(AR++,(0,Oo.startWorker)("server/threads/threadServer.js",{name:uE.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function u(_){_.type===uE.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",u),o(n))}a(u,"onMessage"),n.on("message",u),n.on("error",c)});wre.push(s),await s,Ba.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=cE.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=Ba.indexOf(n);o>-1&&Ba.splice(o,1)}if(a(i,"removeWorker"),Ha){let o=Ha;Ha=[];for(let c of o)KB[c.localPort](null,c)}}}),r){let n=setInterval(()=>{OR?OR=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Oo.shutdownWorkers)(),AR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function WB(e=0,t){if(typeof e=="string")try{(0,lE.existsSync)(e)&&(0,lE.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Dre:r=Lre(t):r=yR;let n=(0,xa.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=KB[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),OR=!0,r(o,(c,u)=>{if(!c){if(VB){let l=o._socket||new xa.Socket({handle:o,writable:!0,readable:!0});VB.deliverSocket(l,e,u),l.resume()}else AR>0?(Ha.length===0&&setTimeout(()=>{Ha.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,Ha.push(o)):(console.log("start up a dynamic thread to handle request"),Cre(0));Gr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new xa.Socket({handle:o,writable:!0,readable:!0});vre(l,c,e)}Gr(!0,"socket-routed")})};let s=eu();bR.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 yR(e,t){let r,n=0;for(let s of Ba){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=aE)return aE=i,t(r);n=i}aE=0,t(r)}function Dre(e,t){let r={};e.getpeername(r);let n=r.address,s=Ga.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);yR(e,o=>{Ga.set(n,{worker:o,lastUsed:i}),t(o)})}function Lre(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new xa.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let u=o.toString("latin1").match(t)?.[1],_=Ga.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,s(_.worker);yR(n,d=>{Ga.set(u,{worker:d,lastUsed:l}),s(d,o)})})}a(r,"findByHeaderAffinity")}function Ure(){aE=0;for(let e of Ba)e.expectedIdle=e.recentELU.idle+Mre,e.requests=1;Ba.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function vre(e,t,r){let n=Pre++;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(),cE.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")),cE.delete(n)),s.event=="destroy"&&(e.destroy(),cE.delete(n))})}var Oo,xa,uE,bR,lE,YB,Ire,Ba,Ha,KB,VB,AR,wre,OR,aE,$B,Ga,Mre,cE,Pre,QB=Re(()=>{Oo=x(et()),xa=require("net"),uE=x(U()),bR=x(K()),lE=require("fs");ys();YB=require("worker_threads"),Ire=x(Ki()),Ba=[],Ha=[],KB=[],AR=0,wre=[];YB.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(Cre,"startHTTPWorker");a(WB,"startSocketServer");aE=0;a(yR,"findMostIdleWorker");$B=36e5,Ga=new Map;a(Dre,"findByRemoteAddressAffinity");a(Lre,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ga)r.lastUsed+$B<e&&Ga.delete(t)},$B).unref();Mre=1e3;a(Ure,"updateWorkerIdleness");(0,Oo.setMonitorListener)(Ure);cE=new Map,Pre=1;a(vre,"proxySocket")});var CR={};$e(CR,{Request:()=>NR,createReuseportFd:()=>_E});var zB,NR,IR,wR,_E,dE=Re(()=>{zB=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 wR(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 IR(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},IR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},wR=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,zB.platform)()!="win32"&&(_E=require("node-unix-socket").createReuseportFd)});var ZB=g((Khe,XB)=>{"use strict";var Bre=require("cluster"),bo=re();bo.initSync();var jB=U(),qhe=require("util"),qs=K(),khe=require("fs"),Hre=require("fastify"),Vhe=eu(),xre=require("@fastify/cors"),Gre=require("@fastify/compress"),Fre=require("@fastify/static"),qre=Fg(),kre=require("path"),{PACKAGE_ROOT:Vre}=U(),$re=gs(),Yre=Q(),Kre=vr(),Wre=Ki(),{server:Qre}=(ir(),se(Li)),{node_request_key:$he}=(dE(),se(CR)),{authHandler:zre,handlePostRequest:Jre,serverErrorHandler:jre,reqBodyValidationHandler:Xre}=oE(),Yhe=require("net"),{registerContentHandlers:Zre}=(ga(),se(Bv)),ene=6e4,tne=1024*1024*1024,rne="TRUE",{CONFIG_PARAMS:ul}=jB,Fa;XB.exports={hdbServer:JB,start:JB};async function JB(e){try{qs.info("In Fastify server"+process.cwd()),qs.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),qs.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Bre.isMaster,await nne();let t=e.securePort>0;Fa=sne(t),await Fa.ready(),e||(e={}),e.isOperationsServer=!0;try{Qre.http(Fa.server,e),Fa.server.closeIdleConnections||await Fa.listen({port:0,host:"::"})}catch(r){throw Fa.close(),qs.error(r),qs.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),qs.fatal(t),process.exit(1)}}a(JB,"operationsServer");async function nne(){qs.trace("Configuring HarperDB process."),$re.setSchemaDataToGlobal(),await Kre.setUsersToGlobal(),await Wre.getLicense()}a(nne,"setUp");function sne(e){qs.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=ine(e),r=Hre(t);r.server.headersTimeout=ane(),r.setErrorHandler(jre);let n=one();n&&r.register(xre,n),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(qre),r.register(Gre),r.register(Fre,{root:kre.join(Vre,"studio/build-local")}),Zre(r);let s=bo.get(jB.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Yre.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Xre,zre],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Jre(i,o)}),r.get("/health",()=>"HarperDB is running."),qs.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(sne,"buildServer");function ine(e){let t=bo.get(ul.OPERATIONSAPI_NETWORK_TIMEOUT),r=bo.get(ul.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:tne,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(ine,"getServerOptions");function one(){let e=bo.get(ul.OPERATIONSAPI_NETWORK_CORS),t=bo.get(ul.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===rne)&&(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(one,"getCORSOpts");function ane(){return bo.get(ul.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??ene}a(ane,"getHeaderTimeoutConfig")});var mE={};$e(mE,{disableNATS:()=>une,publishToStream:()=>hE,setNATSReplicator:()=>DR,setPublishToStream:()=>lne,setSubscription:()=>PR,start:()=>cne});function cne(){ll.default.get(_l.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&dne()}function une(e=!0){sH=e}function lne(e,t){hE=e,PR=t}function dne(){if(sH||process.env._DISABLE_NATS)return;let e=Dn(),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];DR(s,r,i)}}BR((r,n)=>{DR(r.tableName,r.databaseName,r),n&&oH(r)}),!eH&&(eH=!0)}function DR(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 Gt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Ue],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Ue]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Ue],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Ue],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Ue]})}static defineSchema(i){oH(i)}static subscribe(){let i=new On;return PR(t,e,i),i}static subscribeOnThisThread(i){return i<(ll.default.get(_l.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??_ne)}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 fE(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=iH;return i}a(n,"getNATSTransaction")}function oH(e){let t=ll.default.get(_l.default.CONFIG_PARAMS.CLUSTERING_NODENAME);hE(`${MR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,UR.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 tH,MR,UR,rH,nH,ll,_l,EE,sH,hE,PR,_ne,iH,eH,fE,LR,vR=Re(()=>{Ae();bn();tH=x(Et()),MR=x(rt()),UR=x(Ts());pc();rH=x(fS()),nH=x(Dr()),ll=x(re()),_l=x(U()),EE=x(K());a(cne,"start");a(une,"disableNATS");hE=tH.publishToStream,PR=rH.setSubscription;a(lne,"setPublishToStream");_ne=2;a(dne,"assignReplicationSource");a(DR,"setNATSReplicator");a(oH,"publishSchema");fE=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=ll.default.get(_l.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||(EE.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(hE(`${MR.SUBJECT_PREFIXES.TXN}.${s}.${u.table}`,(0,UR.createNatsTableStreamName)(s,u.table),void 0,u)?.catch(l=>{throw EE.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(n)}},LR=class extends fE{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,nH.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};iH=new LR});var RH=g(yo=>{"use strict";var{isMainThread:dH,parentPort:fl,threadId:pE}=require("worker_threads"),{Socket:fne,createServer:Ene}=require("net"),{createServer:hne,IncomingMessage:mne}=require("http"),{createServer:pne}=require("https"),{readFileSync:qa,unlinkSync:aH,existsSync:Sne}=require("fs"),Zt=K(),De=re(),Tt=U(),{server:RE}=(ir(),se(Li)),{WebSocketServer:Tne}=require("ws"),{createServer:gne}=require("tls"),{getTicketKeys:Rne,restartNumber:Ane,getWorkerIndex:TE}=et(),{Headers:fH,appendHeader:One}=(xu(),se(oP)),{recordAction:dl,recordActionBinary:bne}=(ys(),se(iu)),{Request:EH,createReuseportFd:cH}=(dE(),se(CR)),{checkMemoryLimit:yne}=Ki(),hH=require("tls"),uH=hH.createSecureContext;hH.createSecureContext=function(e){if(!e.cert||!e.key)return uH(e);let t={...e};delete t.key,delete t.cert;let r=uH(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var mH=De.get(Tt.CONFIG_PARAMS.THREADS_DEBUG);if(mH){let e;if(dH)e=De.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Zt.info("Could not close debugger",t)}});else{let t=De.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&TE()>=0&&(e=t+TE())}if(e){let t=De.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=De.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Zt.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){Ane<=1&&Zt.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:Zhe,CONFIG_PARAMS:Nne}=Tt;De.initSync();var Ine=De.get(Nne.HTTP_SESSIONAFFINITY),us={};yo.registerServer=qR;yo.httpServer=kR;yo.deliverSocket=FR;yo.startServers=pH;yo.when_components_loaded=null;RE.http=kR;RE.request=Lne;RE.socket=Mne;RE.ws=Une;var HR={},SE={},wne,Ai={},gE={},Cne=[],xR=[];function pH(){return yo.when_components_loaded=VR().loadRootComponents(!0).then(()=>{fl?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)FR(n,r,s);else if(t.requestId)Dne(t);else if(t.type===Tt.ITC_EVENT_TYPES.SHUTDOWN){Zt.trace("received shutdown request",pE);for(let i in us){let o=us[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?Zt.info(`Closing ${E.length} idle connections`):f&&Zt.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(De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&TE()==0)try{aH(De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,pE),o.cantCleanupProperly||Zt.warn("Had to forcefully exit the thread",pE),process.exit(0)},5e3).unref()})}if(mH||process.env.DEV_MODE)try{require("inspector").close()}catch(i){Zt.info("Could not close debugger",i)}}}).ref();let e=[];if(cH&&!Ine)for(let t in us){let r=us[t];if(isNaN(t)&&TE()==0){Sne(t)&&aH(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),Zt.info("Domain socket listening on "+t)}).on("error",i)}));continue}let n;try{n=cH(+t,"::")}catch(s){console.error(`Unable to bind to port ${t}`,s);continue}e.push(new Promise((s,i)=>{r.listen({fd:n},()=>{s(),Zt.trace("Listening on port "+t,pE)}).on("error",i)}))}Promise.all(e).then(()=>{fl?.postMessage({type:Tt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(pH,"startServers");dH||pH();function FR(e,t,r){let n=e?.read?e:new fne({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=us[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=us[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Zt.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(FR,"deliverSocket");var lH=new Map;function Dne(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=lH.get(s),r){case"connection":i=FR(void 0,t),lH.set(s,i),i.write=(c,u,_)=>(fl.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(fl.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),fl.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(Dne,"proxyRequest");function qR(e,t,r=!0){!+t&&t!==De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(De.get(Tt.CONFIG_PARAMS.HTTP_PORT),10));let n=us[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",_H),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else us[t]=e;e.on("unhandled",_H)}a(qR,"registerServer");function SH(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=[],De.get(Tt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:De.get(Tt.CONFIG_PARAMS.HTTP_PORT),secure:De.get(Tt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),De.get(Tt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:De.get(Tt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(SH,"getPorts");function kR(e,t){for(let{port:r,secure:n}of SH(t))TH(r,n,t?.isOperationsServer),typeof e=="function"?xR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,qR(e,r,!1)),gE[r]=GR(xR,r),wne=GR(Cne,r)}a(kR,"httpServer");function TH(e,t,r){if(!Ai[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:De.get(n+"_keepAliveTimeout"),headersTimeout:De.get(n+"_headersTimeout"),requestTimeout:De.get(n+"_timeout")},i=De.get(n+"_mtls"),o=De.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let u=De.get(n+"tls_privateKey"),_=De.get(n+"tls_certificate"),l=De.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:qa(u),ciphers:De.get("tls_ciphers"),cert:qa(_),ca:l&&qa(l),rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:Rne()})}let c=yne();Ai[e]=(t?pne:hne)(s,async(u,_)=>{try{let d=performance.now(),f=new EH(u,_);r&&(f.isOperationsServer=!0);let E=await gE[e](f);if(!E){if(f._nodeResponse.statusCode)return;E=gH(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,Ai[e].emit("unhandled",u,_)}let h=E.status||200,p=performance.now(),S=p-d,T=E.body,b;if(!E.handlesHeaders){let H=E.headers||new fH;T?T.length>=0&&(typeof T=="string"?H.set("Content-Length",Buffer.byteLength(T)):H.set("Content-Length",T.length),b=!0):(H.set("Content-Length","0"),b=!0);let P=`hdb;dur=${S.toFixed(2)}`;E.wasCacheMiss&&(P+=", miss"),One(H,"Server-Timing",P,!0),_.writeHead(h,H&&(H[Symbol.iterator]?Array.from(H):H)),b&&_.end(T)}let R=f.handlerPath,L=f.method;if(dl(S,"duration",R,L,E.wasCacheMiss==null?void 0:E.wasCacheMiss?"cache-miss":"cache-hit"),bne(h<400,"success",R,L),!b)if(T?.pipe){T.pipe(_),T.destroy&&_.on("close",()=>{T.destroy()});let H=0;T.on("data",P=>{H+=P.length}),T.on("end",()=>{dl(performance.now()-p,"transfer",R,L),dl(H,"bytes-sent",R,L)})}else T?.then?T.then(H=>{_.end(H)},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?Zt.warn(d):Zt.info(d):Zt.error(d)}a(l,"onError")}),i&&(Ai[e].mtlsConfig=i),t&&(Ai[e].on("secureConnection",u=>{u._parent.startTime&&dl(performance.now()-u._parent.startTime,"tls-handshake",e),dl(u.isSessionReused(),"tls-reused",e)}),Ai[e].isSecure=!0),qR(Ai[e],e)}return Ai[e]}a(TH,"getHTTPServer");function GR(e,t){let r=gH;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(GR,"makeCallbackChain");function gH(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new fH}}a(gH,"unhandled");function Lne(e,t){kR(e,{requestOnly:!0,...t})}a(Lne,"onRequest");function Mne(e,t){let r;if(t.securePort){let n=De.get("tls_privateKey"),s=De.get("tls_certificate"),i=t.mtls?.certificateAuthority||De.get("tls_certificateAuthority");r=gne({ciphers:De.get("tls_ciphers"),key:qa(n),cert:qa(s),ca:i&&qa(i),rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls},e),us[t.securePort]=r}return t.port&&(r=Ene(e),us[t.port]=r),r}a(Mne,"onSocket");Object.defineProperty(mne.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 Une(e,t){let r;for(let{port:n,secure:s}of SH(t)){SE[n]||(SE[n]=new Tne({server:r=TH(n,s)}),SE[n].on("connection",async(c,u)=>{try{let _=new EH(u);_.isWebSocket=!0;let l=gE[n](_),d=u.headers["sec-websocket-protocol"]||"",f=HR[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(_){Zt.warn("Error handling WebSocket connection",_)}}),SE[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=HR[n];o||(o=HR[n]=[]),o.push({listener:e,protocol:i}),gE[n]=GR(xR,n)}return r}a(Une,"onWebSocket");function _H(e,t){t.writeHead(404),t.end(`Not found
30
+ `)}a(_H,"defaultNotFound")});async function yH({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await $R.get(e,{returnNonexistent:!0});s=new WR(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await $R.get(e);i&&i.delete()}s=new OE(e,t)}return n&&(n.id=e,n.user={username:t?.username},El.put(n)),s}function YR(){return AE++,AE>65500&&(AE=1),AE}function KR(e,t,r=e){let{topic:n,retain:s}=e;e.data=t,e.async=!0,e.authorize=!0;let i=Ei.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 ze(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var AH,Oi,OH,bH,$R,El,AE,OE,WR,NH=Re(()=>{Ae();Hu();AH=x(Dr()),Oi=x(K());Xi();OH=x(et()),bH=x(RH());ir();$R=at({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"}]}}]}),El=at({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,OH.getWorkerIndex)()===0&&(async()=>{await bH.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of El.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await Ze.getUser(r.user.username)),ze(r,()=>{try{KR(r,t)}catch{(0,Oi.warn)("Failed to publish will",t)}El.delete(e.id,r)})}})();a(yH,"getSession");AE=1;a(YR,"getNextMessageId");OE=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,Oi.trace)("Resuming subscription from",s,"from",o);let E=Ei.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 b=T.split("/"),R;for(let P=0;P<b.length;P++)if(b[P].indexOf("+")>-1)if(b[P]==="+")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 L=!0;b[b.length-1]==="#"&&(b.length--,L=!1),R&&(n=a(P=>{let k=P.id;if(!Array.isArray(k)||L&&k.length!==b.length)return!1;for(let B=0;B<b.length;B++)if(b[B]!=="+"&&b[B]!==k[B])return!1;return!0},"filter"));let H=b.indexOf("+");f.url="/"+(H>-1?b.slice(0,H):b).concat("").join("/")}}let h=E.path,p=E.Resource,S=await ze(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 b of T)try{let R;if(b.type&&b.type!=="put"&&b.type!=="delete"&&b.type!=="message"&&b.type!=="patch"||n&&!n(b))continue;r?(b.topic=s,R=this.needsAcknowledge(b)):(b.acknowledge?.(),R=YR());let L=b.id;Array.isArray(L)&&(L=Sa(L)),L==null&&(L=""),this.listener(h+"/"+L,b.value,R,t)}catch(R){(0,Oi.warn)(R)}})(),T});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=YR();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,KR(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};ze(r,async()=>{if(!t){let n=await El.get(this.sessionId,r);n?.doesExist()&&await KR(n,n.data,r)}await El.delete(this.sessionId,r)}).catch(n=>{(0,Oi.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(KR,"publish");WR=class extends OE{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=YR(),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,Oi.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,AH.getNextMonotonicTime)()),(0,Oi.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),$R.put(this.sessionRecord)),t.qos}}});var JR={};$e(JR,{bypassAuth:()=>Pne,start:()=>vne});function Pne(){DH=!0}function vne({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"){Yr.debug("Received WSS connection for MQTT from",_._socket.remoteAddress);let{onMessage:f,onClose:E}=wH(_,(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=>{Yr.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let l;if(Yr.debug("Received connection for MQTT from",_.remoteAddress),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),(0,hl.get)(Kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&QR.notify({username:l.username,status:Kr.AUTH_AUDIT_STATUS.SUCCESS,type:Kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})):Yr.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(E){Yr.error(E)}else if(u.required)return Yr.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!l&&DH&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,CH.getSuperUser)(),Yr.debug("Auto-authorizing local connection",l?.username));let{onMessage:d,onClose:f}=wH(_,E=>_.write(E),null,l,o);_.on("data",d),_.on("close",f),_.on("error",E=>{Yr.info("Socket error",E)})},{port:t,securePort:s,mtls:u})),c}function wH(e,t,r,n,s){IH||(IH=!0,su(d=>{bE>0&&d.push({metric:"mqtt-connections",connections:bE,byThread:!0})}));let i;bE++;let o,c={protocolVersion:4},u=(0,yE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){bE--,i||(i=!0,o?.disconnect(),s.sessions.delete(o),sn(!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 Ze.getUser(d.username,d.password.toString(),r),(0,hl.get)(Kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&QR.notify({username:n.username,status:Kr.AUTH_AUDIT_STATUS.SUCCESS,type:Kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,hl.get)(Kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&QR.error({username:n.username,status:Kr.AUTH_AUDIT_STATUS.FAILURE,type:Kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return sn(!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=po(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?R(d.will.payload):void 0,delete d.will.payload}o=yH({user:n,...d}),o=await o,s.sessions.add(o)}catch(R){return Yr.error(R),sn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:R.code||5,returnCode:R.code||128})}sn(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((R,L,H,P)=>{try{let k=R.indexOf("/",1),B=k>0?R.slice(0,k):R;f({cmd:"publish",topic:R,payload:E(L),messageId:H||Math.floor(Math.random()*1e8),qos:P.qos},B)}catch(k){Yr.error(k),o?.disconnect(),s.sessions.delete(o)}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let R of d.subscriptions){let L;try{L=(await o.addSubscription(R,R.qos>=1)).qos||0}catch(H){Yr.error(H),L=c.protocolVersion<5?128:H.statusCode===403?135:H.statusCode===404?143:128}h.push(L)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let R=[];for(let L of d.unsubscriptions)R.push(o.removeSubscription(L)?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=po(r?.headers.get?.("content-type"))),T=d.payload?.length>0?S(d.payload):void 0,b;try{b=await o.publish(d,T)}catch(R){Yr.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:b===!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),sn(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){Yr.error(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,yE.generate)(h,c);t(S),Gr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return mi(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var yE,CH,hl,Kr,zR,QR,Yr,DH,IH,bE,LH=Re(()=>{yE=require("mqtt-packet");NH();CH=x(vr());ga();ys();ir();hl=x(re()),Kr=x(U()),zR=x(K()),QR=(0,zR.loggerWithTag)("auth-event"),Yr=(0,zR.loggerWithTag)("mqtt"),DH=(0,hl.get)(Kr.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Pne,"bypassAuth");a(vne,"start");bE=0;a(wH,"onSocket")});var Sf={};$e(Sf,{component_errors:()=>Va,loadComponent:()=>NE,loadComponentDirectories:()=>FH,setErrorReporter:()=>Gne});function FH(e,t){t&&(XR=t),e&&(ZR=e);let r=[];if((0,Gn.existsSync)(jR)){let s=(0,Gn.readdirSync)(jR,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,gt.join)(jR,o);r.push(NE(c,XR,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(NE(n,XR,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{GH=!0})}function Gne(e){pl=e}async function NE(e,t,r,n,s,i){if(!UH.has(e)){UH.set(e,!0),s&&(ZR=s);try{let o;n&&(Va=new Map);let c=(0,gt.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,Gn.existsSync)(c)?o=n?(0,xH.getConfigObj)():(0,PH.parseDocument)((0,Gn.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=eA;let u=[],_=n;for(let l in o){let d=o[l];if(Va.set(n?l:(0,gt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let b=e,R;for(;!(0,Gn.existsSync)(R=(0,gt.join)(b,"node_modules",l));)if(b=(0,gt.dirname)(b),b.length<(0,HH.getHdbBasePath)().length){R=null;break}if(R)f=await NE(R,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=xne[l];if(!f)continue;u.push(f);let h=a(b=>(b.origin=r,at(b)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,T=!p?.https&&p?.port;if(ka.isMainThread&&(f=await f.startOnMainThread?.({server:Ze,ensureTable:h,port:T,securePort:S,resources:t,...d})||f,n&&p))for(let b of[T,S])try{if(+b&&!MH.includes(b)){let R=tA.get(rA.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);R&&ml.default.warn("Session affinity is not recommended and may cause memory leaks"),(R||!_E)&&(MH.push(b),WB(b,R))}}catch(R){console.error("Error listening on socket",b,R,l)}if(t.isWorker&&(f=await f.start?.({server:Ze,ensureTable:h,port:T,securePort:S,resources:t,...d})||f),ZR.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,BH.handleHDBError)("Can not reference parent directories");let b=(0,gt.join)(e,d.files).replace(/\\/g,"/"),R=b.indexOf("/*");if(R>-1&&d.files!==eA[l]?.files&&!(0,Gn.existsSync)(b.slice(0,R)))throw new Error(`The path '${b.slice(0,R)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let L=(0,gt.basename)(e),H=d.path||"/";H=H.startsWith("/")?H:H.startsWith("./")?"/"+L+H.slice(2):H==="."?"/"+L:"/"+L+"/"+H;let P,k,B;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",k=(0,gt.join)(e,z)}else(B=b.indexOf("/*"))>-1&&(k=b.slice(0,B+1),P=(0,gt.relative)(e,k));let J=!1;if(ka.isMainThread&&f.setupDirectory&&(J=await f.setupDirectory?.(H,k,t)),t.isWorker&&f.handleDirectory&&(J=await f.handleDirectory?.(H,k,t)),J)continue;for(let z of await(0,vH.default)(b,{onlyFiles:!1,objectMode:!0})){let{path:j,dirent:Te}=z;_=!0;let ce=(0,gt.relative)(e,j).replace(/\\/g,"/");if(P)if(ce.startsWith(P))ce=ce.slice(P.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${ce}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let de=H+(H.endsWith("/")?"":"/")+ce;try{if(Te.isFile()){let Le=await Hne(j);ka.isMainThread&&await f.setupFile?.(Le,de,j,t),t.isWorker&&await f.handleFile?.(Le,de,j,t)}else ka.isMainThread&&await f.setupDirectory?.(de,j,t),t.isWorker&&await f.handleDirectory?.(de,j,t)}catch(Le){Le.message=`Could not load ${Te.isFile()?"file":"directory"} '${j}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${Le.message}`,pl?.(Le),((0,$a.getWorkerIndex)()===0?console:ml.default).error(Le),t.set(d.path||"/",new Sl(Le)),Va.set(n?l:(0,gt.basename)(e),Le.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,gt.basename)(e)}' due to: ${h.message}`,pl?.(h),((0,$a.getWorkerIndex)()===0?console:ml.default).error(h),t.set(d.path||"/",new Sl(h),null,!0),Va.set(n?l:(0,gt.basename)(e),h.message)}}if(ka.isMainThread&&!GH&&i&&(0,$a.watchDir)(e,async()=>FH()),o.extensionModule)return await r_((0,gt.join)(e,o.extensionModule));if(!_&&t.isWorker){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;pl?.(new Error(l)),((0,$a.getWorkerIndex)()===0?console:ml.default).error(l),Va.set((0,gt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,pl?.(o),t.set("",new Sl(o))}}}var Gn,gt,ka,PH,tA,rA,vH,$a,ml,BH,HH,Bne,xH,Hne,jR,ZR,GH,XR,Va,xne,eA,MH,UH,pl,Sl,Tf=Re(()=>{Gn=require("fs"),gt=require("path"),ka=require("worker_threads"),PH=require("yaml"),tA=x(re()),rA=x(U());Eb();Sb();Tb();Jv();BB();kB();vH=x(require("fast-glob")),$a=x(et()),ml=x(K());vh();ir();BH=x(ne());bn();Ae();QB();HH=x(re()),Bne=x(ZB());lf();vR();LH();xH=x(Cr());dE();({readFile:Hne}=Gn.promises),jR=tA.get(rA.CONFIG_PARAMS.COMPONENTSROOT),ZR=new Map,Va=new Map;a(FH,"loadComponentDirectories");xne={REST:Hf,rest:Hf,graphqlSchema:Ph,jsResource:Hh,fastifyRoutes:gR,login:Gh,static:RR,operationsApi:Bne,customFunctions:{},http:{},clustering:mE,authentication:Gu,mqtt:JR},eA={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(eA,"static",{value:{files:"web/**"}});MH=[],UH=new Map;a(Gne,"setErrorReporter");a(NE,"loadComponent");Sl=class extends Gt{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 VR=g((yme,kH)=>{var{isMainThread:qH}=require("worker_threads"),{getTables:Fne}=(Ae(),se(Fe)),{loadComponentDirectories:qne,loadComponent:kne}=(Tf(),se(Sf)),{resetResources:Vne}=(Hu(),se(iP)),$ne=eg(),Yne=Cr(),{dirname:Kne}=require("path"),{getConnection:Wne}=Et(),Qne=re(),zne=U(),nA=new Map;async function Jne(e=!1){!qH&&Qne.get(zne.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Wne();try{qH&&await $ne()}catch(n){console.error(n)}let t=Vne();Fne(),t.isWorker=e,await kne(Kne(Yne.getConfigFilePath()),t,"hdb",!0,nA),await qne(nA,t);let r=[];for(let[n]of nA)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(Jne,"loadRootComponents");kH.exports.loadRootComponents=Jne});var et=g((Ime,yi)=>{"use strict";var{Worker:jne,MessageChannel:Xne,parentPort:ls,isMainThread:cA,threadId:Zne,workerData:ks}=require("worker_threads"),{PACKAGE_ROOT:ese}=U(),{join:KH,isAbsolute:tse,extname:rse}=require("path"),{server:WH}=(ir(),se(Li)),{watch:nse,readdir:sse}=require("fs/promises"),{totalmem:VH}=require("os"),Tl=U(),QH=re(),Vs=K(),{randomBytes:ise}=require("crypto"),{_assignPackageExport:ose}=require("../../index"),ase=U(),$H=1024*1024,bi=[],fn=[],cse=50,uA=1e4,use="restart",zH="request_thread_info",JH="resource_report",jH="thread_info",XH="added-port",lse="ack",sA;ose("threads",fn);yi.exports={startWorker:iA,restartWorkers:_A,shutdownWorkers:hse,workers:bi,setMonitorListener:Ose,onMessageFromWorkers:mse,onMessageByType:ix,broadcast:Sse,broadcastWithAcknowledgement:gse,setChildListenerByType:Ese,getWorkerIndex:ZH,getWorkerCount:ex,getTicketKeys:rx,setMainIsWorker:dse,setTerminateTimeout:_se,restartNumber:ks?.restartNumber||1};fn.onMessageByType=ix;fn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=fn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var lA;function _se(e){uA=e}a(_se,"setTerminateTimeout");function ZH(){return ks?ks.workerIndex:lA?0:void 0}a(ZH,"getWorkerIndex");function ex(){return ks?ks.workerCount:lA?1:void 0}a(ex,"getWorkerCount");function dse(e){lA=e}a(dse,"setMainIsWorker");var tx=1,IE;function rx(){return IE||(IE=cA?ise(48):ks.ticketKeys,IE)}a(rx,"getTicketKeys");Object.defineProperty(WH,"workerIndex",{get(){return ZH()}});Object.defineProperty(WH,"workerCount",{get(){return ex()}});var nx={[zH](e,t){Rse(t)},[JH](e,t){Ase(t,e)}};function iA(e,t={}){let r=process.constrainedMemory?.()||VH();r=Math.min(r,VH(),2e4*$H);let n=QH.get(Tl.CONFIG_PARAMS.THREADS_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 fn){let _=new Xne;_.existingPort=u,i.push(_),o.push(_.port2)}rse(e)||(e+=".js");let c=new jne(tse(e)?e:KH(ese,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:tx=t.threadCount,name:t.name,restartNumber:yi.exports.restartNumber,ticketKeys:rx()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:XH,port:u,threadId:c.threadId},[u]);return CE(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>iA(e,t),c.on("error",u=>{console.error("Worker error:",u),Vs.error("Worker error:",u)}),c.on("exit",u=>{bi.splice(bi.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<cse?(t.unexpectedRestarts=c.unexpectedRestarts+1,iA(e,t)):Vs.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{nx[u.type]?.(u,c)}),bi.push(c),yse(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(iA,"startWorker");var fse=[Tl.THREAD_TYPES.HTTP];async function _A(e=null,t=Math.max(tx>3,1),r=!0){if(cA){if(r){let{loadRootComponents:o}=VR();await o()}yi.exports.restartNumber++,t<1&&(t=t*bi.length);let n=[],s=[];for(let o of bi.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Vs.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:yi.exports.restartNumber,type:Tl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=fse.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),uA*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===ase.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}=of();r&&(e==="http"||!e)&&QH.get(Tl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else ls.postMessage({type:use,workerType:e})}a(_A,"restartWorkers");function Ese(e,t){nx[e]=t}a(Ese,"setChildListenerByType");function hse(e){return _A(e,1/0,!1)}a(hse,"shutdownWorkers");var sx=[];function mse(e){sx.push(e)}a(mse,"onMessageFromWorkers");var oA=new Map;function ix(e,t){let r=oA.get(e);r||oA.set(e,r=[]),r.push(t)}a(ix,"onMessageByType");var pse=10;async function Sse(e){let t=0;for(let r of fn)try{r.postMessage(e),t++>pse&&(t=0,await new Promise(setImmediate))}catch(n){Vs.error("Unable to send message to worker",n)}}a(Sse,"broadcast");var wE=new Map,Tse=1;function gse(e){return new Promise(t=>{let r=0;for(let n of fn)try{let s=Tse++,i=a(()=>{wE.delete(s),--r===0&&t(),n!==ls&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,wE.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of wE)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Vs.error("Unable to send message to worker",s)}r===0&&t()})}a(gse,"broadcastWithAcknowledgement");function Rse(e){e.postMessage({type:jH,workers:ox()})}a(Rse,"sendThreadInfo");function ox(){let e=Date.now();return bi.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(ox,"getChildWorkerInfo");function Ase(e,t){e.resources=t,e.resources.updated=Date.now()}a(Ase,"recordResourceReport");var aA;function Ose(e){aA=e}a(Ose,"setMonitorListener");var bse=1e3,YH=!1;function yse(){YH||(YH=!0,setInterval(()=>{for(let e of bi){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}aA&&aA()},bse).unref())}a(yse,"startMonitoring");var Nse=1e3;if(ls){CE(ls);for(let e=0,t=ks.addPorts.length;e<t;e++){let r=ks.addPorts[e];r.threadId=ks.addThreadIds[e],CE(r)}setInterval(()=>{let e=process.memoryUsage();ls.postMessage({type:JH,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Nse).unref(),sA=a(()=>new Promise((e,t)=>{ls.on("message",r),ls.postMessage({type:zH});function r(n){n.type===jH&&(ls.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else sA=ox;yi.exports.getThreadInfo=sA;function CE(e,t){fn.push(e),e.on("message",r=>{if(r.type===XH)r.port.threadId=r.threadId,CE(r.port);else if(r.type===lse){let n=wE.get(r.id);n&&n()}else{for(let s of sx)s(r,e);let n=oA.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){Vs.error(i)}}}).on("close",()=>{fn.splice(fn.indexOf(e),1)}).on("exit",()=>{fn.splice(fn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(CE,"addPort");if(cA){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await sse(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(KH(n,i.name));try{for await(let{filename:i}of nse(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await _A(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");yi.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else ls.on("message",async e=>{let{type:t}=e;t===Tl.ITC_EVENT_TYPES.SHUTDOWN&&(yi.exports.restartNumber=e.restartNumber,ls.unref(),setTimeout(()=>{Vs.warn("Thread did not voluntarily terminate",Zne),process.exit(0)},uA).unref())})});var cC={};$e(cC,{AUDIT_STORE_OPTIONS:()=>mx,createAuditEntry:()=>a_,openAuditStore:()=>UE,readAuditEntry:()=>Lt,setAuditRetention:()=>wse,transactionKeyEncoder:()=>hx});function UE(e){let t=e.auditStore=e.openDB(dx.AUDIT_STORE_NAME,mx);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()-dA})){if((_[0]&15)===hA){let l=Lt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=Ise){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,dA/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,ME.getWorkerIndex)()===(0,ME.getWorkerCount)()-1&&s(DE),t}function wse(e,t=DE){dA=e,DE=t}function a_(e,t,r,n,s,i,o){let c=px[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let u=1;n&&(n>1?Ya.setFloat64(0,n):En.set(tm),u=9),f(0),f(t),d(r),Ya.setFloat64(u,e),u+=8,s?d(s):En[u++]=0,En[n?8:0]=c;let l=En.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,Ka.writeKey)(E,En,u);let p=u-h-1;p>127?p>16383?(pA.error("Key or username was too large for audit entry",E),u=h+1,En[h]=0):(En.copyWithin(h+2,h+1,u),Ya.setUint16(h,p|32768),u++):En[h]=p}function f(E){E<128?En[u++]=E:E<16384?(Ya.setUint16(u,E|32768),u+=2):E<1056964608?(Ya.setUint32(u,E|3221225472),u+=4):(En[u]=255,Ya.setUint32(u+1,E),u+=5)}}function Lt(e){try{let t=e.dataView||(e.dataView=new mA(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:px[n&7],tableId:i,get recordId(){return _x(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?_x(e,l,d):void 0},getValue(f,E,h){if(n&fA||n&EA&&!E)return f.decoder.decode(e.subarray(t.position));if(n&EA&&h)return SA(f.getEntry(this.recordId),h,f)}}}catch(t){return pA.error("Reading audit entry error",t,e),{}}}function _x(e,t,r){let n=e.subarray(t,r);return(0,Ka.readKey)(n,0,r-t)}var Ka,LE,dx,fx,ME,Ex,pA,En,Ya,hx,mx,dA,Ise,DE,fA,EA,ax,hA,cx,ux,lx,px,mA,Bi=Re(()=>{Ka=require("ordered-binary"),LE=x(re()),dx=x(_t()),fx=x(U()),ME=x(et()),Ex=x(Q());bc();pA=x(K());PE();(0,LE.initSync)();En=Buffer.alloc(1024),Ya=new DataView(En.buffer,En.byteOffset,1024),hx={writeKey(e,t,r){return e===Oc?(t.set(Oc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Ka.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,Ka.readKey)(e,t,r)}},mx={encoding:"binary",keyEncoder:hx},dA=(0,Ex.convertToMS)((0,LE.get)(fx.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Ise=1e3,DE=1e4;a(UE,"openAuditStore");a(wse,"setAuditRetention");fA=16,EA=32,ax=1,hA=2,cx=3,ux=4,lx=5,px={put:ax|fA,[ax]:"put",delete:hA,[hA]:"delete",message:cx|fA,[cx]:"message",invalidate:ux,[ux]:"invalidate",patch:lx|EA,[lx]:"patch"};a(a_,"createAuditEntry");a(Lt,"readAuditEntry");mA=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(_x,"readKeySafely")});var TA={};$e(TA,{add:()=>vE,applyReverse:()=>Sx,getRecordAtTime:()=>SA,rebuildUpdateBefore:()=>BE});function vE(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function BE(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,vE(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function Sx(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=Cse[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=Tx}}function SA(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":Sx(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let u in s)s[u]===Tx&&(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 Cse,Tx,PE=Re(()=>{Bi();a(vE,"add");vE.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};Cse={add:vE};a(BE,"rebuildUpdateBefore");a(Sx,"applyReverse");Tx={};a(SA,"getRecordAtTime")});function Wr(e){return e[wt]||(e[wt]=Object.create(null))}function qE(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[Oe])},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 hn.ClientError(`${c} must be a string, attempt to assign ${l}`);Wr(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 hn.ClientError(`${c} must be a string, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new hn.ClientError(`${c} must be a number, attempt to assign ${l}`);Wr(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 hn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Wr(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 hn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Wr(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 hn.ClientError(`${c} must be a number, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new hn.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Wr(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 hn.ClientError(`${c} must be a Date, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new hn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Wr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new hn.ClientError(`${c} must be an object, attempt to assign ${l}`);Wr(this)[c]=l},"set")}_={get(){let l=this[wt];if(l&&c in l){let f=l[c];if(f?.__op__){let E=this[_e]?.[c];return f.update(E)}return f}let d=this[_e]?.[c];if(d&&typeof d=="object"){let f=Rx(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[_e]?.[o]}),i("set",function(o,c){let u=n[o];if(u)return u.set.call(this,c);if(t.sealed)throw new hn.ClientError("Can not add a property to a sealed table schema");Wr(this)[o]=c}),i("deleteProperty",function(o){Wr(this)[o]=void 0}),i("toJSON",function(){let o=this[wt],c;for(let _ in o){c||(c=Object.assign({},this[_e]));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[_e])),Object.assign(c,this)),c||this[_e]}),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 Rx(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?.[_e])throw new Error("Can not track an already tracked object, check for circular references");this[_e]=s}},qE(r,t)),new r(e)):new HE(e);case Array:let n=new GE(e.length);n[_e]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=Rx(o,t?.elements)),n[s]=o}return n;default:return e}}function Z_(e){let t=e[wt],r;for(let s in t){r||(r=Object.assign({},e[_e]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=Z_(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[_e])),Object.assign(r,e)),r||e[_e]}function Io(e,t=e[wt]){let r;if(gx.call(e,_e)&&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=Io(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[_e]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=TA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Io(s);r[n]=s}return r?Object.freeze(r):gx.call(e,_e)?e[_e]:e}function xE(e){let t=e[_e];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[No]||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?.[_e]===s){if(xE(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[_e]===i){if(xE(s))return!0}else return!0}else return!0}}return!1}var hn,wt,HE,gx,No,GE,FE,ed=Re(()=>{bn();hn=x(ne());PE();wt=Symbol("own-data");a(Wr,"getChanges");a(qE,"assignTrackedAccessors");a(Rx,"trackObject");HE=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[_e])throw new Error("Can not track an already tracked object, check for circular references");this[_e]=t}};qE(HE,{});a(Z_,"collapseData");gx=Object.prototype.hasOwnProperty;a(Io,"deepFreeze");a(xE,"hasChanges");No=Symbol.for("has-array-changes"),GE=class extends Array{static{a(this,"TrackedArray")}[No];constructor(t){super(t)}splice(...t){return this[No]=!0,super.splice(...t)}push(...t){return this[No]=!0,super.push(...t)}pop(){return this[No]=!0,super.pop()}unshift(...t){return this[No]=!0,super.unshift(...t)}shift(){return this[No]=!0,super.shift()}};GE.prototype.constructor=Array;FE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var Op={};$e(Op,{CONTEXT:()=>Oe,ID_PROPERTY:()=>Ue,IS_COLLECTION:()=>mn,RECORD_PROPERTY:()=>_e,Resource:()=>Gt,snake_case:()=>Lse,transformForSelect:()=>VE});function Lse(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Ax(e,t){if(gl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(gl=!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){gl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function Qr(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[Oe]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(l=s,c=l[this.primaryKey]??null,o=i[Oe]||i):l=i:(l=s,c=l[Ue]??l[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[Oe]||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 ze(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 kE(o.user);return typeof l?.then=="function"?l.then(S=>e(E,u,o,S)):e(E,u,o,l)});if(!h)throw new kE(o.user)}return typeof l?.then=="function"?l.then(h=>e(E,u,o,h)):e(E,u,o,l)}a(f,"authorizeActionOnResource")}}function zr(e,t){let r=new yx.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 gA(e,t,r){let n=e[_e];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 VE(e,t){let r=t?.propertyResolvers,n=t[Oe],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):gA(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(gA(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(gA(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]=VE(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var Ox,bx,yx,Oe,Ue,mn,_e,Dse,Gt,kE,gl,RA,bn=Re(()=>{Ox=require("crypto");pc();bx=require("../../index"),yx=x(ne());ed();Xi();vf();Oe=Symbol.for("context"),Ue=Symbol.for("primary-key"),mn=Symbol("is-collection"),_e=Symbol("stored-record"),Dse={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Gt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Ue]=t;let n=r?.[Oe];this[Oe]=n!==void 0?n:r||null}static get=Qr(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 _=VE(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Qr(function(t,r,n,s){if(Array.isArray(s)&&t[mn]){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):zr(t,"put")},{hasContent:!0,type:"update"});static patch=Qr(function(t,r,n,s){return t.patch?t.patch(s,r):zr(t,"patch")},{hasContent:!0,type:"update"});static delete=Qr(function(t,r,n,s){return t.delete?t.delete(r):zr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,Ox.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),ze(n,()=>{let i=new this(s,n),o=i.update?i.update(r):zr(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=Qr(function(t,r,n,s){return t.invalidate?t.invalidate(r):zr(t,"delete")},{hasContent:!1,type:"update"});static post=Qr(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=Qr(function(t,r,n,s){return t.connect?t.connect(s,r):zr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Qr(function(t,r,n,s){return t.subscribe?t.subscribe(r):zr(t,"subscribe")},{type:"read"});static publish=Qr(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.publish?t.publish(s,r):zr(t,"publish")},{hasContent:!0,type:"create"});static search=Qr(function(t,r,n,s){let i=t.search?t.search(r):zr(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=VE(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Qr(function(t,r,n,s){return t.search?t.search(s,r):zr(t,"search")},{hasContent:!0,type:"read"});static copy=Qr(function(t,r,n,s){return t.copy?t.copy(s,r):zr(t,"copy")},{type:"create"});static move=Qr(function(t,r,n,s){return t.move?t.move(s,r):zr(t,"move")},{type:"delete"});post(t){if(this[mn])return this.constructor.create(this[Ue],t,this[Oe]);zr(this,"post")}static isCollection(t){return t?.[mn]}static coerceId(t){return t}static parseQuery(t){return Pf(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&&Dse[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:Ax(t,this),isCollection:gl}}let i=Ax(t,this);return gl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Oe],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(_=>_[Ue]===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[Ue],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[mn]=!0),s}subscribe(t){return new On}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new On}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[Ue]}getContext(){return this[Oe]}};Gt.prototype[Oe]=null;(0,bx._assignPackageExport)("Resource",Gt);a(Lse,"snake_case");kE=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(Ax,"pathToId");RA=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Qr,"transactional");a(zr,"missingMethod");a(gA,"selectFromObject");a(VE,"transformForSelect")});function Ix(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;Wa||((0,$E.onMessageByType)(Nx,l=>{wx(l.path)}),Wa=Object.create(null));let o=Wa[s]||(Wa[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=Sa(t);let u=new OA(r);u.startTime=n;let _=c.get(t);return _?_.push(u):(c.set(t,_=[u]),_.tables=c,_.key=t),u.subscriptions=_,u}function wx(e,t){if(!Wa)return;let r=Wa[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=Sa(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,AA.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,AA.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 Cx(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,$E.broadcast)({type:Nx,path:s}),wx(s,!0)})}}var AA,$E,Nx,Wa,zme,OA,Dx=Re(()=>{AA=x(K()),$E=x(et());pc();Hu();Bi();Nx="transaction",zme=Buffer.alloc(4096);a(Ix,"addSubscription");OA=class extends On{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(wx,"notifyFromTransactionData");a(Cx,"listenToCommits")});var nR={};$e(nR,{coerceType:()=>YE,makeTable:()=>QE,setServerUtilities:()=>Fse,updateResource:()=>KE});function QE(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l,sealed:d}=e,{expirationMS:f,evictionMS:E,audit:h,trackDeletes:p}=e,{attributes:S}=e;S||(S=[]),Cx(i,u);let T=sm(i,n,u),b=0,R,L,H={},P=Promise.resolve(),k,B,J;for(let Y of S)(Y.assignCreatedTime||Y.name==="__createdtime__")&&(k=Y),(Y.assignUpdatedTime||Y.name==="__updatedtime__")&&(B=Y),Y.expiresAt&&(J=Y),Y.isPrimaryKey&&(H=Y);let z,j=[],Te=[],ce=1,de=2,Le={},Be={},Ct=864e5,Ul,Pl,$s,vA=!1,sh,aG=i.getRange({start:!1,end:!1}).constructor,cG=10,uG=6;h&&xA();class We extends Gt{static name=s;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=k;static updatedTimeProperty=B;static propertyResolvers;static sources=[];static get expirationMS(){return f}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,O){O&&(this.sourceOptions=O,(O.expiration||O.eviction||O.scanInterval)&&this.setTTLExpiration(O)),O?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),L=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let I=a(D=>{let N=this.sources.slice(0,-1);if(N=N.filter(M=>M[D]&&(!M[D].reliesOnPrototype||M.prototype[D])),N.length>0)if(N.length===1){let M=N[0];return(F,C,v)=>{if(F?.source!==M)return M[D](C,v,F)}}else return(M,F,C)=>{let v=[];for(let q of N){if(M?.source===q)break;v.push(q[D](F,C,M))}return Promise.all(v)}},"getApplyToIntermediateSource"),y=this.sources[this.sources.length-1],A=a(D=>{if(y[D]&&(!y[D].reliesOnPrototype||y.prototype[D]))return(N,M,F)=>{if(!N?.source)return y[D](M,F,N)}},"getApplyToCanonicalSource");return Le={put:A("put"),patch:A("patch"),delete:A("delete"),publish:A("publish")},Be={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish"),invalidate:I("invalidate")},(async()=>{let D=!1,N=a(async(M,F)=>{let C=M.value,v=M.table?tt[c][M.table]:We;if(c===qn.SYSTEM_SCHEMA_NAME&&(M.table===qn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===qn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),M.id===void 0&&(M.id=C[v.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=m;let q=await v.getResource(M.id,F,Qa);switch(M.type){case"put":return q._writeUpdate(C,!0,Qa);case"patch":return q._writeUpdate(C,!1,Qa);case"delete":return q._writeDelete(Qa);case"publish":return q._writePublish(C,Qa);case"invalidate":return q.invalidate(Qa);default:Je.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=m.subscribe;M&&p==null&&(p=!0);let F=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Co.getWorkerIndex)()):(0,Co.getWorkerIndex)()===0,C=M&&F&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let v;for await(let q of C)try{if(!(q.type==="transaction"?q.writes[0]:q)){Je.error("Bad subscription event",q);continue}if(q.source=m,v)if(q.beginTxn)v.resolve();else{N(q,v);continue}if(q.type==="end_txn")continue;let be=ze(q,()=>{if(q.type==="transaction"){let ee=[];for(let Pe of q.writes)try{ee.push(N(Pe,q))}catch(ae){throw ae.message+=" writing "+JSON.stringify(Pe)+" of event "+JSON.stringify(q),ae}return Promise.all(ee)}else if(q.type==="define_schema"){let ee=this.attributes.slice(0),Pe;for(let ae of q.attributes)ee.find(Ge=>Ge.name===ae.name)||(ee.push(ae),Pe=!0);Pe&&(at({table:s,database:c,attributes:ee,origin:"cluster"}),Il.signalSchemaChange(new wl.SchemaEventMsg(process.pid,qn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return q.beginTxn?(v=q,N(q,q),new Promise(ee=>{v.resolve=ee})):N(q,q)});D&&(await be,Il.signalUserChange(new wl.UserEventMsg(process.pid))),q.onCommit&&(be?.then?be.then(q.onCommit):q.onCommit())}catch(oe){Je.error("error in subscription handler",oe)}}}catch(M){Je.error(M)}})(),this}static getResource(m,O,I){let y=super.getResource(m,O,I);if(m!=null){Xa(m);try{if(y.hasOwnProperty(_e))return y;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let A=!I?.async||i.cache?.get(m),D=Tn(O),N=D.getReadTxn();if(N?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return ih(m,O,{transaction:N},A,M=>{if(M?KE(y,M):y[_e]=null,O.onlyIfCached&&O.noCacheStore){if(!y.doesExist())throw new pn.ServerError("Entry is not cached",504)}else if(I?.ensureLoaded){let F=oh(m,M,O,y);if(F)return D?.disregardReadTxn(),y[bA]=!0,NA(F,C=>(KE(y,C),y))}return y})}catch(A){throw A.message.includes("Unable to serialize object")&&(A.message+=": "+JSON.stringify(m)),A}}return y}ensureLoaded(){let m=oh(this[Ue],this[Jr],this[Oe]);if(m)return this[bA]=!0,NA(m,O=>{this[Jr]=O,this[_e]=O.value,this[yl]=O.version})}static setTTLExpiration(m){if(typeof m=="number")f=m*1e3,E||(E=0);else if(m&&typeof m=="object")f=m.expiration*1e3,E=(m.eviction||0)*1e3,Ct=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(f<0)throw new Error("Expiration can not be negative");Ct=Ct||(f+E)/4,ch()}static enableAuditing(m=!0){h=m,m&&xA(),We.audit=m}static coerceId(m){return m===""?null:YE(m,H)}static async dropTable(){if(delete tt[c][s],c===o){for(let m of S)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));Il.signalSchemaChange(new wl.SchemaEventMsg(process.pid,qn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[mn])return this.search(m);if(this[Ue]===null){if(m?.conditions)return this.search(m);let O=We.getRecordCount();return{recordCount:O.recordCount,estimatedRecordRange:O.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[Oe]?.returnNonexistent)return this}allowRead(m,O){let I=Bl(m);if(I?.read){if(I.isSuperUser)return!0;let y=I.attribute_permissions,A=O?.select;if(y?.length>0||vA&&A){if(O||(O={}),A){let D=y?.length>0&&yA(y,"read");O.select=A.map(N=>{let M=N.name||N;if(!D||D[M]){let F=$s[M]?.definition?.tableClass;if(F){if(N.name||(N={name:N}),!F.prototype.allowRead.call(null,m,N))return!1;if(!N.select)return N.name}return N}}).filter(Boolean)}else O.select=y.filter(D=>D.read&&!$s[D.attribute_name]).map(D=>D.attribute_name);return O}else return!0}}allowUpdate(m,O){let I=Bl(m);if(I?.update){let y=I.attribute_permissions;if(y?.length>0){let A=yA(y,"update");for(let D in O)if(!A[D])return!1;for(let D of y){let N=D.attribute_name;!D.update&&!(N in O)&&(O[N]=this.getProperty(N))}}return!0}}allowCreate(m,O){if(this[mn]){let I=Bl(m);if(I?.insert){let y=I.attribute_permissions;if(y?.length>0){let A=yA(y,"insert");for(let D in O)if(!A[D])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return Bl(m)?.delete}update(m,O){if(!Tn(this[Oe]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let y;return typeof m=="object"&&m&&(O?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[_e]={},this[wt]=m):(y=this[wt],y&&(m=Object.assign(y,m)),this[wt]=y=m)),this._writeUpdate(this[wt],O),this}addTo(m,O){if(typeof O=="number")this[Rl]===Mx?this.set(m,(+this.getProperty(m)||0)+O):(this[Rl]||this.update(),this.set(m,new FE(O)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,O){if(typeof O=="number")return this.addTo(m,-O);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let O=this[Oe],I=this[Ue];Xa(I),Tn(this[Oe]).addWrite({key:I,store:i,invalidated:!0,entry:this[Jr],nodeName:this[Oe]?.nodeName,before:Le.invalidate?.bind(this,O,I),beforeIntermediate:Be.invalidate?.bind(this,O,I),commit:(A,D)=>{if(D?.version>A)return;let N=null;for(let M in r)N||(N={}),N[M]=this.getProperty(M);T(I,N,this[Jr],A,Al,h,this[Oe],0,"invalidate")}})}static evict(m,O,I){let y=this.Source,A;if(!((L||h)&&(!O||(A=i.getEntry(m),!A||!O)||A.version!==I))){if(L){if(i.hasLock(m,A.version))return;let D;for(let N in r)D||(D={}),D[N]=O[N];if(D)return T(m,D,A,I,Ol,null,null,0,null,!0)}return i.ifVersion(m,I,()=>{vl(m,O,null)}),h?T(m,null,A,I,Ol,null,null,0,null,!0):i.remove(m,I)}}lock(){throw new Error("Not yet implemented")}static operation(m,O){return m.table||=s,m.schema||=c,xx.operation(m,O)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,O,I){let y=this[Oe],A=Tn(y),D=this[Ue];Xa(D);let N=this[Jr];this[Rl]=O?Mx:Hse;let M={key:D,store:i,entry:N,nodeName:y?.nodeName,validate:F=>{m||(m=this[wt]),O||m&&xE(m)?y?.source||(A.checkOverloaded(),this.validate(m,!O),B&&(m[B.name]=B.type==="Date"?new Date(F):B.type==="String"?new Date(F).toISOString():F),O&&(t&&m[t]!==D&&(m[t]=D),k&&(N?.value?m[k.name]=N?.value[k.name]:m[k.name]=k.type==="Date"?new Date(F):k.type==="String"?new Date(F).toISOString():F),m=Io(m))):A.removeWrite(M)},before:O?Le.put?()=>Le.put(y,D,m):null:Le.patch?()=>Le.patch(y,D,m):Le.put?()=>Le.put(y,D,Io(this)):null,beforeIntermediate:O?Be.put?()=>Be.put(y,D,m):null:Be.patch?()=>Be.patch(y,D,m):Be.put?()=>Be.put(y,D,Io(this)):null,commit:(F,C,v)=>{if(v){if(y&&C?.version>(y.lastModified||0)&&(y.lastModified=C.version),this[Jr]=C,C?.value?.[_e])throw new Error("Can not assign a record to a record, check for circular references");O||(this[_e]=C?.value??null)}this[wt]=m,this[yl]=F;let q=C?.value,oe=m;if(this[Rl]=0,C?.version>=F)if(h){let ae=C.localTime,Ge=C.version;for(;oe&&(ae>F||Ge>=F&&ae>0);){let te=u.get(ae),X=Lt(te);if(Ge=X.version,Ge>F){if(X.type==="patch"){let ge=X.getValue(i);oe=BE(oe,ge)}else if(X.type==="put"||X.type==="delete")return}else if(Ge===F)return;ae=X.previousLocalTime}}else{if(O)return;oe=BE(oe,q)}let be;if(O?be=oe:(this[_e]=q,be=O?oe:Io(this,oe)),this[_e]=be,be?.[_e])throw new Error("Can not assign a record to a record, check for circular references");let ee;O||(ee=m),vl(D,q,be);let Pe=O?"put":"patch";T(D,be,C,F,0,h,y,y.expiresAt||(f?f+Date.now():0),Pe,!1,ee)}};A.addWrite(M)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[mn]){for await(let O of this.search(m))(await We.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[_e]?this._writeDelete(m):!1}_writeDelete(m){let O=Tn(this[Oe]),I=this[Ue];Xa(I);let y=this[Oe];return O.addWrite({key:I,store:i,resource:this,nodeName:y?.nodeName,before:Le.delete?.bind(this,y,I),beforeIntermediate:Be.delete?.bind(this,y,I),commit:(A,D,N)=>{let M=D?.value;N&&(y&&D?.version>(y.lastModified||0)&&(y.lastModified=D.version),KE(this,D)),!(D?.version>A)&&(vl(this[Ue],M),Je.trace("Write delete entry",I,A),h||p?(T(I,null,this[Jr],A,0,h,this[Oe],0,"delete"),h||ch()):i.remove(this[Ue]))}}),!0}search(m){let O=this[Oe],I=Tn(O);if(!m)throw new Error("No query provided");let y=m.conditions;y?y.length===void 0&&(y=y[Symbol.iterator]?Array.from(y):[y]):y=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Ue]&&(y=[{attribute:null,comparator:"prefix",value:this[Ue]}].concat(y));let A,D={};function N(X,ge){let He;switch(ge){case"and":case void 0:if(X.length<1)throw new Error('An "and" operator requires at least one condition');He=!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 "+ge)}let kn=He&&{},Ys;for(let Ve of X){if(Ve.conditions){Ve.conditions=N(Ve.conditions,Ve.operator);continue}let Ht=Ve[0]??Ve.attribute,en=Ht==null?H:Hs(S,Ht);if(en){if(He){let Vn=Bn(Ht),xt=kn[Vn];xt?(xt.push(Ve),Ys=!0):kn[Vn]=[Ve]}(en.type||Cg[Ve.comparator])&&(Ve[1]===void 0?Ve.value=F(Ve.value,en):Ve[1]=F(Ve[1],en))}else if(Ht!=null)throw(0,pn.handleHDBError)(new Error,`${Ht} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return X;if(Ys)for(let Ve in kn){let Ht=kn[Ve],en=Ht.length;if(en>1)for(let Vn=0;Vn<en;Vn++){let xt=Ht[Vn];if(xt.comparator==="ge"||xt.comparator==="greater_than_equal")for(let Ks=0;Ks<en;Ks++){let Uo=Ht[Ks];(Uo.comparator==="le"||Uo.comparator==="less_than_equal")&&(xt.comparator="between",xt.value=[xt.value,Uo.value],X.splice(X.indexOf(Uo),1))}if(xt.comparator==="equals"||!xt.comparator){for(let Ks=0;Ks<en;Ks++)if(Ks!==Vn){let Uo=Ht[Ks];X.splice(X.indexOf(Uo),1)}break}}}return X}a(N,"prepareConditions");function M(X,ge){if(m.enforceExecutionOrder)return X;for(let He of X)He.conditions&&(He.conditions=M(He.conditions,He.operator));return X.length>1&&ge!=="or"?(0,Hx.sortBy)(X,Uf(We)):X}a(M,"orderConditions");function F(X,ge){return Array.isArray(X)?X.map(He=>YE(He,ge)):YE(X,ge)}a(F,"coerceTypedValues");let C=m.operator;(y.length>0||C)&&(y=N(y,C));let v=typeof m.sort=="object"&&m.sort,q;if(v&&C!=="or"){let X=v.attribute;if(A=y.find(ge=>Bn(ge.attribute)===Bn(X)),!A){if(!Hs(S,X))throw(0,pn.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not a defined attribute`,404);A={attribute:X,comparator:"sort"},y.push(A)}A.descending=!!v.descending}y=M(y,C),v&&(y[0]===A?v.next&&(q={dbOrderedAttribute:v.attribute,attribute:v.next.attribute,descending:v.next.descending,next:v.next.next}):(A&&y.splice(y.indexOf(A),1),q=v));let oe=m.select;if(y.length===0&&(y=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:y,operator:C,postOrdering:q,selectApplied:!!oe};let be=I.useReadTxn(),ee=Dg(y,C,We,be,m,O,(X,ge)=>BA(X,oe,O,be,ge),D),Pe=m.ensureLoaded!==!1;q||(ee=te(ee));let ae=We.transformEntryForSelect(oe,O,be,D,Pe,!0),Ge=We.transformToOrderedSelect(ee,oe,q,be,O,ae);function te(X){return m.offset||m.limit!==void 0?X.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):X}return a(te,"applyOffset"),q&&(Ge=te(Ge)),Ge.onDone=()=>{Ge.onDone=null,I.doneReadTxn()},Ge.selectApplied=!0,Ge.getColumns=()=>{if(oe){let X=[];for(let ge of oe)ge==="*"?X.push(...S.map(He=>He.name)):X.push(ge.name||ge);return X}return S.map(X=>X.name)},Ge}static transformToOrderedSelect(m,O,I,y,A,D){let N=new aG;if(I){m=BA(m,O,y,A,null);let M;N.iterate=function(){let C,v=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),q,oe=I.dbOrderedAttribute,be,ee,Pe=!0;function ae(te){let X=te.next&&ae(te.next),ge=te.descending;return(He,kn)=>{let Ys=ah(He,te.attribute,y),Ve=ah(kn,te.attribute,y),Ht=ge?(0,Do.compareKeys)(Ve,Ys):(0,Do.compareKeys)(Ys,Ve);return Ht===0?X?.(He,kn)||0:Ht}}a(ae,"createComparator");let Ge=ae(I);return{async next(){let te;if(C)if(te=C.next(),te.done){if(q)return N.onDone&&N.onDone(),te}else return{value:await D.call(this,te.value)};M=[],be&&M.push(be);do if(te=await v.next(),te.done){if(q=!0,M.length)break;return N.onDone&&N.onDone(),te}else{let X=te.value;if(X?.then&&(X=await X),oe){let ge=ah(X,oe,y);if(Pe)Pe=!1,ee=ge;else if(ge!==ee){ee=ge,be=X;break}}M.push(X)}while(!0);return I.isGrouped,M.sort(Ge),C=M[Symbol.iterator](),te=C.next(),te.done?(N.onDone&&N.onDone(),te):{value:await D.call(this,te.value)}},return(){N.onDone&&N.onDone(),v.return()},throw(){N.onDone&&N.onDone(),v.throw()}}};let F=a(C=>{if(typeof O=="object"&&Array.isArray(C.attribute))for(let v=0;v<O.length;v++){let q=O[v],oe;if(q.name===C.attribute[0]){for(oe=q.sort||(q.sort={});oe.next;)oe=oe.next;oe.attribute=C.attribute.slice(1),oe.descending=C.descending}else q===C.attribute[0]&&(O[v]=oe={name:q,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&F(C.next)},"applySortingOnSelect");F(I)}else N.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),N=N.map(D);return N}static transformEntryForSelect(m,O,I,y,A,D){if(m&&(m===t||m?.length===1&&m[0]===t)){let C=a(v=>v?.key??v,"transform");return m===t?C:m.asArray?v=>[C(v)]:v=>({[t]:C(v)})}let N;A&&L&&!m?.every(C=>{let v;return typeof C=="object"?v=C.name:v=C,r[v]||v===t})&&(N=!0);let M,F=a(function(C){let v;if(C!=null){if(sh=C,v=C.value||C.deref?.(),!v&&(C.key===void 0||C.deref)){if(C=ih(C.key??C,O,{transaction:I,lazy:m?.length<4},this.isSync,q=>q),C?.then)return C.then(F.bind(this));v=C?.value}if(N&&(C.metadataFlags&(Al|Ol)||C.expiresAt&&C.expiresAt<Date.now())){let q=oh(C.key??C,C,O);if(q?.then)return q.then(F)}}if(v==null)return D?wo.SKIP:v;if(m&&!(m[0]==="*"&&m.length===1)){let q,oe=a((ee,Pe)=>{let ae;typeof ee=="object"?ae=ee.name:ae=ee;let Ge=$s?.[ae],te;if(Ge){let X=y?.[ae];if(X)if(X.hasMappings){let He=Ge.from?v[Ge.from]:Bn(C.key);te=X.get(He),te||(te=[])}else te=X.fromRecord?.(v);else te=Ge(v,O,C);let ge=a(He=>{if(He&&typeof He=="object"){let kn=Ge.definition?.tableClass||We;M||(M={});let Ys=M[ae]||(M[ae]=kn.transformEntryForSelect(ae===ee?null:ee.select||(Array.isArray(ee)?ee:null),O,I,X,A));if(Array.isArray(He)){let Ve=[],Ht=kn.transformToOrderedSelect(He,ee.select,typeof ee.sort=="object"&&ee.sort,O,I,Ys)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),en=a(xt=>{for(;!xt.done;){if(xt?.then)return xt.then(en);Ve.push(xt.value),xt=Ht.next()}Pe(Ve,ae)},"nextValue"),Vn=en(Ht.next());Vn&&(q||(q=[]),q.push(Vn));return}else if(He=Ys.call(this,He),He?.then){q||(q=[]),q.push(He.then(Ve=>Pe(Ve,ae)));return}}Pe(He,ae)},"handleResolvedValue");te?.then?(q||(q=[]),q.push(te.then(ge))):ge(te);return}else te=v[ae],te&&typeof te=="object"&&ae!==ee&&(te=We.transformEntryForSelect(ee.select||ee,O,I,null)({value:te}));Pe(te,ae)},"selectAttribute"),be;if(typeof m=="string")oe(m,ee=>{be=ee});else if(Array.isArray(m))if(m.asArray)be=[],m.forEach((ee,Pe)=>{ee==="*"?m[Pe]=v:oe(ee,ae=>be[Pe]=ae)});else{be={};let ee=m.forceNulls;for(let Pe of m)if(Pe==="*")for(let ae in v)be[ae]=v[ae];else oe(Pe,(ae,Ge)=>{ae===void 0&&ee&&(ae=null),be[Ge]=ae})}else throw new pn.ClientError("Invalid select"+m);return q?Promise.all(q).then(()=>be):be}return v},"transform");return F}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");h||at({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),m||(m={});let O=!m.rawEvents,I=Ix(We,this[Ue]??null,function(N,M,F,C){try{let v=M.getValue?.(i,O);if(!v&&M.type==="patch"&&O){let q=i.getEntry(N);q?.version===M.version?v=q.value:v=M.getValue?.(i,!0,F),M.type="put"}this.send({id:N,timestamp:F,value:v,version:M.version,type:M.type,beginTxn:C})}catch(v){Je.error(v)}},m.startTime||0,this[mn]);this[mn]&&(I.includeDescendants=!0,m.onlyChildren&&(I.onlyChildren=!0)),m.crossThreads===!1&&(I.crossThreads=!1),m.supportsTransactions&&(I.supportsTransactions=!0);let y=this[Ue],A=m.previousCount;A>1e3&&(A=1e3);let D=m.startTime;if(this[mn]){if(D){if(A)throw new pn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:N,value:M}of u.getRange({start:D,exclusiveStart:!0})){let F=Lt(M);if(F.tableId!==n)continue;let C=F.recordId;if(y==null||vx(y,C)){let v=F.getValue(i,O,N);I.send({id:C,timestamp:N,value:v,version:F.version,type:F.type})}I.startTime=N}}else if(A){let N=[];for(let{key:M,value:F}of u.getRange({start:"z",end:!1,reverse:!0}))try{let C=Lt(F);if(C.tableId!==n)continue;let v=C.recordId;if(y==null||vx(y,v)){let q=C.getValue(i,O,M);if(N.push({id:v,timestamp:M,value:q,version:C.version,type:C.type}),--A<=0)break}}catch(C){Je.error("Error getting history entry",M,C)}for(let M=N.length;M>0;)I.send(N[--M]);N[0]&&(I.startTime=N[0].timestamp)}else if(!m.omitCurrent)for(let{key:N,value:M,version:F,localTime:C}of i.getRange({start:y??!1,end:y==null?void 0:[y,Do.MAXIMUM_KEY],versions:!0}))M&&I.send({id:N,timestamp:C,value:M,version:F,type:"put"})}else{A&&!D&&(D=0);let N=this[Jr]?.localTime;if(N===nm&&(i.cache?.delete(y),this[Jr]=i.getEntry(y),Je.trace("re-retrieved record",N,this[Jr]?.localTime),N=this[Jr]?.localTime),Je.trace("Subscription from",D,"from",y,N),D<N){let M=[],F=N;do{let C=u.get(F);if(C){m.omitCurrent=!0;let v=Lt(C),q=v.getValue(i,O,F);O&&(v.type="put"),M.push({id:y,value:q,timestamp:F,...v}),F=v.previousLocalTime}else break;A&&A--}while(F>D&&A!==0);for(let C=M.length;C>0;)I.send(M[--C]);I.startTime=N}!m.omitCurrent&&this.doesExist()&&I.send({id:y,timestamp:N,value:this,version:this[yl],type:"put"})}return m.listener&&I.on("data",m.listener),I}doesExist(){return!!(this[_e]||this[Rl])}publish(m,O){this._writePublish(m,O)}_writePublish(m,O){let I=Tn(this[Oe]),y=this[Ue]||null;Xa(y);let A=this[Oe];I.addWrite({key:y,store:i,entry:this[Jr],nodeName:A?.nodeName,validate:()=>{A?.source||(I.checkOverloaded(),this.validate(m))},before:Le.publish?.bind(this,A,y,m),beforeIntermediate:Be.publish?.bind(this,A,y,m),commit:(D,N,M)=>{N===void 0&&p&&!h&&ch(),T(y,N?.value??null,N,N?.version||D,0,!0,A,N?.expiresAt,"message",!1,m)}})}validate(m,O){let I,y=a((A,D,N)=>{if(D.type&&A!=null)if(O&&A.__op__&&(A=A.value),D.properties){typeof A!="object"&&(I||(I=[])).push(`Value ${Fn(A)} in property ${N} must be an object${D.type?" ("+D.type+")":""}`);let M=D.properties;for(let F=0,C=M.length;F<C;F++){let v=M[F],q=y(A[v.name],v,N+"."+v.name);q&&(A[v.name]=q)}if(D.sealed&&A!=null&&typeof A=="object")for(let F in A)M.find(C=>C.name===F)||(I||(I=[])).push(`Property ${F} is not allowed within object in property ${N}`)}else switch(D.type){case"Int":(typeof A!="number"||A>>0!==A)&&(I||(I=[])).push(`Value ${Fn(A)} in property ${N} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof A!="number"||!(Math.floor(A)===A&&Math.abs(A)<=9007199254740992))&&(I||(I=[])).push(`Value ${Fn(A)} in property ${N} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof A!="number"&&(I||(I=[])).push(`Value ${Fn(A)} in property ${N} must be a number`);break;case"ID":typeof A=="string"||A?.length>0&&A.every?.(M=>typeof M=="string")||(I||(I=[])).push(`Value ${Fn(A)} in property ${N} must be a string, or an array of strings`);break;case"String":typeof A!="string"&&(I||(I=[])).push(`Value ${Fn(A)} in property ${N} must be a string`);break;case"Boolean":typeof A!="boolean"&&(I||(I=[])).push(`Value ${Fn(A)} in property ${N} must be a boolean`);break;case"Date":if(!(A instanceof Date)){if(typeof A=="string"||typeof A=="number")return new Date(A);(I||(I=[])).push(`Value ${Fn(A)} in property ${N} must be a Date`)}break;case"BigInt":if(typeof A!="bigint"){if(typeof A=="string"||typeof A=="number")return BigInt(A);(I||(I=[])).push(`Value ${Fn(A)} in property ${N} must be a bigint`)}break;case"Bytes":A instanceof Uint8Array||(I||(I=[])).push(`Value ${Fn(A)} in property ${N} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(A)){if(D.elements)for(let M=0,F=A.length;M<F;M++){let C=A[M],v=y(C,D.elements,N+"[*]");v&&(A[M]=v)}}else(I||(I=[])).push(`Value ${Fn(A)} in property ${N} must be a Buffer or Uint8Array`);break}D.nullable===!1&&A==null&&(I||(I=[])).push(`Property ${N} is required (and not does not allow null values)`)},"validateValue");for(let A=0,D=S.length;A<D;A++){let N=S[A];if(!N.relationship&&(!O||N.name in m)){let M=y(m[N.name],N,N.name);M&&(m[N.name]=M)}}if(d)for(let A in m)S.find(D=>D.name===A)||(I||(I=[])).push(`Property ${A} is not allowed`);if(I)throw new pn.ClientError(I.join(". "))}getUpdatedTime(){return this[yl]}wasLoadedFromSource(){return L?!!this[bA]:void 0}static async addAttributes(m){let O=S.slice(0);for(let I of m){if(!I.name)throw new pn.ClientError("Attribute name is required");if(I.name.match(/[`/]/))throw new pn.ClientError("Attribute names cannot include backticks or forward slashes");O.push(I)}return at({table:s,database:c,schemaDefined:_,attributes:O}),We.indexingOperation}static async removeAttributes(m){let O=S.filter(I=>!m.includes(I.name));return at({table:s,database:c,schemaDefined:_,attributes:O}),We.indexingOperation}static getRecordCount(m){let O=i.getStats().entryCount,I=5e3,y=1e3,A;O>I&&!m?.exactCount&&(A=y);let D=0;for(let{value:N}of i.getRange({start:!0,lazy:!0,limit:A}))N!=null&&D++;if(A){let N=D;D=0;for(let{value:Pe}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:A}))Pe!=null&&D++;let M=A*2,F=(D+N)/M,C=Math.pow((D-N+1)/A/2,2)+F*(1-F)/M,v=Math.max(Math.sqrt(C)*O,1),q=Math.round(F*O),oe=Math.max(q-1.96*v,0),be=Math.min(q+1.96*v,O),ee=Math.pow(10,Math.round(Math.log10(v)));return ee>q&&(ee=ee/10),D=Math.round(q/ee)*ee,{recordCount:D,estimatedRange:[Math.round(oe),Math.round(be)]}}return{recordCount:D}}static updatedAttributes(){$s=this.propertyResolvers={$id:(m,O,I)=>({value:I.key}),$updatedtime:(m,O,I)=>I.version,$record:(m,O,I)=>I?{value:m}:m};for(let m of this.attributes){m.resolve=null;let O=m.relationship;if(O)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),vA=!0,O.to)m.elements?.definition?($s[m.name]=m.resolve=(I,y,A)=>{let D=I[O.from?O.from:t],N=m.elements.definition.tableClass;return A?Ca({attribute:O.to,value:D},Tn(y).getReadTxn(),!1,N,!1).asArray:N.search([{attribute:O.to,value:D}],y).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,O.from&&(m.resolve.from=O.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(O.from){let I=m.definition||m.elements?.definition;I?($s[m.name]=m.resolve=(y,A,D)=>{let N=y[O.from];if(N!==void 0){if(m.elements){let M,F=N.map(C=>{let v=D?I.tableClass.primaryStore.getEntry(C,{transaction:Tn(A).getReadTxn()}):I.tableClass.get(C,A);return v?.then&&(M=!0),v});return O.filterMissing?M?Promise.all(F).then(C=>C.filter(Bx)):F.filter(Bx):M?Promise.all(F):F}return D?I.tableClass.primaryStore.getEntry(N,{transaction:Tn(A).getReadTxn()}):I.tableClass.get(N,A)}},m.set=(y,A)=>{if(Array.isArray(A)){let D=A.map(N=>N[Ue]||N[I.tableClass.primaryKey]);y[O.from]=D}else{let D=A[Ue]||A[I.tableClass.primaryKey];y[O.from]=D}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=O.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`)}qE(this,this)}static async deleteHistory(m=0){let O;for(let{key:I,value:y}of u.getRange({start:0,end:m}))await bl(),Lt(y).tableId===n&&(O=u.remove(I));await O}static async*getHistory(m=0,O=1/0){for(let{key:I,value:y}of u.getRange({start:m,end:O})){await bl();let A=Lt(y);A.tableId===n&&(yield{id:A.recordId,localTime:I,version:A.version,type:A.type,value:A.getValue(i,!0,I),user:A.user})}}static async getHistoryOfRecord(m){let O=[];if(m==null)throw new Error("An id is required");let I=i.getEntry(m);if(!I)return O;let y=I.localTime;if(!y)throw new Error("The entry does not have a local audit time");let A=0;do{await bl();let D=u.get(y);if(D){let N=Lt(D);O.push({id:N.recordId,localTime:y,version:N.version,type:N.type,value:N.getValue(i,!0,y),user:N.user}),y=N.previousLocalTime}else break}while(A<1e3&&y);return O.reverse()}static cleanup(){z?.remove()}}We.updatedAttributes();let lG=We.prototype;return lG[Bse]=!0,f&&We.setTTLExpiration(f/1e3),J&&_G(),We;function vl(Y,m,O){let I;for(let y in r){let A=r[y],D=A.isIndexing,N=O?.[y],M=m?.[y];if(N===M&&!D)continue;I=!0;let F=A.indexNulls,C=(0,Nl.getIndexedValues)(M,F);if(C){Lx&&A.prefetch(C.map(v=>({key:v,value:Y})),Px);for(let v=0,q=C.length;v<q;v++)A.remove(C[v],Y)}if(C=(0,Nl.getIndexedValues)(N,F),C){Lx&&A.prefetch(C.map(v=>({key:v,value:Y})),Px);for(let v=0,q=C.length;v<q;v++)A.put(C[v],Y)}}return I}a(vl,"updateIndices");function Xa(Y){switch(typeof Y){case"number":return!0;case"string":if(Y.length<659)return!0;if(Y.length>Ux)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,Do.writeKey)(Y,xse,0)>Ux)throw new Error("Primary key size is too large: "+Y.length);return!0}a(Xa,"checkValidId");function ih(Y,m,O,I,y){let A=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),O.transaction?.isDone)return y(null,Y);let D=i.getEntry(Y,O);return D&&m&&(D?.version>(m.lastModified||0)&&(m.lastModified=D.version),D?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=D.localTime)),y(D,Y)},"whenPrefetched");return I?A():ce>0?(ce--,A()):new Promise((D,N)=>{ce===0?(ce--,i.prefetch([Y],()=>{M(),F()})):(j.push(Y),Te.push(F),j.length>uG&&(ce--,M()));function M(){if(j.length>0){let C=Te;i.prefetch(j,()=>{ce===-1?M():ce++;for(let v of C)v()}),j=[],Te=[],de>2&&de--}else ce=de,de<cG&&de++}a(M,"prefetch");function F(){try{D(A())}catch(C){N(C)}}a(F,"load")})}a(ih,"loadLocalRecord");function Bl(Y){if(!Y?.role)return;let m=Y.role.permission;if(m.super_user)return Gse;let O=m[c],I,y=O?.tables;if(y)return y[s];if(c==="data"&&(I=m[s])&&!I.tables)return I}a(Bl,"getTablePermissions");function oh(Y,m,O,I){if(L){let y;if(O.noCache?y=!0:(m?(!m.value||m.metadataFlags&(Al|Ol)||m.expiresAt&&m.expiresAt<Date.now())&&(y=!0):y=!0,sn(!y,"cache-hit",s)),y){let A=HA(Y,m,O).then(D=>(D?.value?.[_e]&&Je.error("Can not assign a record with a record property"),O&&(D?.version>(O.lastModified||0)&&(O.lastModified=D.version),O.lastRefreshed=Date.now()),D));if(O?.onlyIfCached||m?.value&&I?.allowStaleWhileRevalidate?.(m,Y)){if(A.catch(D=>Je.warn(D)),O?.onlyIfCached&&!I.doesExist())throw new pn.ServerError("Entry is not cached",504);return}else return A}}}a(oh,"ensureLoadedFromSource");function Tn(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 O=m.next;if(!O)return m=m.next=new ji,m.lmdbDb=i,m;m=O}while(!0)}else return new j_}a(Tn,"txnForContext");function ah(Y,m,O){if(!Y)return;sh=Y;let I=Y.value||Y.deref?.()||(sh=i.getEntry(Y.key))?.value;if(typeof m=="object"){let A=$s,D=I;for(let N=0,M=m.length;N<M;N++){let F=m[N],C=A?.[F];D=C&&D?C(D,O,!0)?.value:D?.[F],A=C?.definition?.tableClass?.propertyResolvers}return D}let y=$s[m];return y?y(I,O):I[m]}a(ah,"getAttributeValue");function BA(Y,m,O,I,y){let A=y?.length,D={transaction:I,lazy:A>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},N;function M(F,C){let v=F?.value;if(!v)return wo.SKIP;for(let q=0;q<A;q++)if(!N?.includes(q)&&!y[q](v,F))return wo.SKIP;return C!==void 0&&(F.key=C),F}if(a(M,"processEntry"),A>0||!Y.hasEntries){let F=Y.map(C=>{if(N=null,typeof C=="object"&&C.key!==void 0)return A>0?M(C):C;if(C==null)return wo.SKIP;for(let v=0;v<A;v++){let oe=y[v].idFilter;if(oe){if(!oe(C))return wo.SKIP;N||(N=[]),N.push(v)}}return ih(C,O,D,!1,M)});return Array.isArray(Y)&&(F=F.filter(C=>C!==wo.SKIP)),F.hasEntries=!0,F}return Y}a(BA,"transformToEntries");async function HA(Y,m,O){let I=m?.metadataFlags,y=m?.version,A,D;if(!i.attemptLock(Y,y,()=>{clearTimeout(D);let C=i.getEntry(Y);!C||!C.value||C.metadataFlags&(Al|Ol)?A(HA(Y,i.getEntry(Y),O)):A(C)}))return new Promise(C=>{A=C,D=setTimeout(()=>{i.unlock(Y,y)},vse)});let N=m?.value,M={requestContext:O,replacingRecord:N,replacingVersion:y,source:null,resourceCache:O?.resourceCache},F=O?.responseHeaders;return new Promise((C,v)=>{let q;NA(ze(M,async oe=>{let be=performance.now(),ee,Pe,ae;try{for(let ge of We.sources)if(ge.get&&(!ge.get.reliesOnPrototype||ge.prototype.get)&&(M.source=ge,ee=await ge.get(Y,M),ee))break;ae=I&Al;let te=M.lastModified||ae&&y;Pe=ae||te>y||!N,te||(te=(0,Nl.getNextMonotonicTime)());let X=performance.now()-be;if(Gr(X,"cache-resolution",s),F&&jT(F,"Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`,!0),oe.timestamp=te,f&&!M.expiresAt&&(M.expiresAt=Date.now()+f),ee){if(typeof ee!="object")throw new Error("Only objects can be cached and stored in tables");typeof ee.toJSON=="function"&&(ee=ee.toJSON()),t&&ee[t]!==Y&&(ee[t]=Y)}q=!0,C({version:te,value:ee})}catch(te){te.message+=` while resolving record ${Y} for ${s}`,N&&((te.code==="ECONNRESET"||te.code==="ECONNREFUSED"||te.code==="EAI_AGAIN")&&!O?.mustRevalidate||O?.staleIfError&&(te.statusCode===500||te.statusCode===502||te.statusCode===503||te.statusCode===504))?(C({version:y,value:N}),Je.trace(te.message,"(returned stale record)")):v(te),M.transaction.abort();return}if(O?.noCacheStore){M.transaction.abort();return}Tn(M).addWrite({key:Y,store:i,entry:m,nodeName:"source",commit:(te,X)=>{if(X?.version!==y)return;let ge=vl(Y,N,ee);ee?(Be.put?.(M,Y,ee),T(Y,ee,X,te,0,h&&Pe||null,M,M.expiresAt,"put",!!ae)):(Be.delete?.(M,Y),h||p?T(Y,null,X,te,0,h&&Pe||null,M,0,"delete",!!ae):i.remove(Y,y))}})}),()=>{i.unlock(Y,y)},oe=>{i.unlock(Y,y),q&&Je.error("Error committing cache update",oe)})})}a(HA,"getFromSource");function ch(){if(Ct!==Ul&&(Ul=Ct,(0,Co.getWorkerIndex)()===(0,Co.getWorkerCount)()-1)){if(Pl&&clearTimeout(Pl),!Ct)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())/Ct)*Ct+Y.getTime(),O=a(I=>{Je.trace(`Scheduled next cleanup scan at ${new Date(I)}ms`),Pl=setTimeout(()=>P=P.then(async()=>{if(O(Math.max(I+Ct,Date.now())),i.rootStore.status!=="open"){clearTimeout(Pl);return}let y=50,A=new Array(y),D=0;Je.trace(`Starting cleanup scan for ${s}`);try{let N=0;for(let{key:M,value:F,version:C,expiresAt:v}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let q;F===null&&!h&&C+Pse<Date.now()?q=i.remove(M,C):v&&v+E<Date.now()&&(q=We.evict(M,F,C),N++),q&&(await A[D],A[D]=q.catch(oe=>{Je.error("Cleanup error",oe)}),++D>=y&&(D=0)),await bl()}Je.trace(`Finished cleanup scan for ${s}, evicted ${N} entries`)}catch(N){Je.trace(`Error in cleanup scan for ${s}:`,N)}}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");O(m)}}a(ch,"scheduleCleanup");function xA(){z=u?.addDeleteRemovalCallback(n,Y=>{let m=i.getEntry(Y);m?.value===null&&i.remove(Y,m.version)})}a(xA,"addDeleteRemoval");function _G(){(0,Co.getWorkerIndex)()===0&&setInterval(async()=>{try{let Y=J.name,m=r[Y];if(!m)throw new Error(`expiresAt attribute ${J} must be indexed`);for(let{key:O,value:I}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let y=i.getEntry(I);y?.value?y.value[Y]<Date.now()&&We.evict(I,y.value,y.version):i.ifVersion(I,y?.version,()=>m.remove(O,I)),await bl()}}catch(Y){Je.error("Error in evicting old records",Y)}},Use).unref()}a(_G,"runRecordExpirationEviction")}function yA(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 Px(){}function Fse(e){xx=e}function YE(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"&&!qse.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,WE.autoCast)(e):e}function vx(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 NA(e,t,r){return e?.then?e.then(t,r):t(e)}function KE(e,t){e[Jr]=t,e[_e]=t?.value??null,e[yl]=t?.version}function Bx(e){return e!=null}function Fn(e){try{return JSON.stringify(e)}catch{return e}}var qn,wo,Nl,Hx,Cl,pn,Il,wl,Je,Do,Co,WE,Mse,xx,Use,Pse,Lx,vse,yl,Bse,Jr,Rl,Mx,Hse,bA,Qa,Al,Ol,xse,Ux,Gse,fpe,qse,bl,zf=Re(()=>{qn=x(U()),wo=require("lmdb"),Nl=x(Dr()),Hx=require("lodash");bn();Yp();Cl=x(re());Dx();pn=x(ne()),Il=x(Rs()),wl=x(wn());Ae();vf();Je=x(K());ed();Xi();Do=require("ordered-binary"),Co=x(et());Bi();WE=x(Q());bc();ys();PE();xu();Mse=new Uint8Array(9);Mse[8]=192;Use=6e4,Pse=864e5;Cl.initSync();Lx=Cl.get(qn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),vse=1e4,yl=Symbol.for("version"),Bse=Symbol.for("incremental-update"),Jr=Symbol("entry"),Rl=Symbol("is-saving"),Mx=1,Hse=2,bA=Symbol("loaded-from-source"),Qa={isNotification:!0,ensureLoaded:!1},Al=1,Ol=8,xse=Buffer.allocUnsafeSlow(8192),Ux=1978,Gse={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},fpe=(0,WE.convertToMS)(Cl.get(qn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(QE,"makeTable");a(yA,"attributesAsObject");a(Px,"noop");a(Fse,"setServerUtilities");qse=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(YE,"coerceType");a(vx,"isDescendantId");bl=a(()=>new Promise(setImmediate),"rest");a(NA,"when");a(KE,"updateResource");a(Bx,"exists");a(Fn,"stringify")});var Fe={};$e(Fe,{database:()=>Jc,databases:()=>tt,dropDatabase:()=>Jp,dropTableMeta:()=>Wse,getDatabases:()=>Dn,getTables:()=>kse,onUpdatedTable:()=>BR,readMetaDb:()=>Dl,resetDatabases:()=>Vse,table:()=>at,tables:()=>Lr});function kse(){return ZE||Dn(),Lr||{}}function Dn(){if(ZE)return tt;ZE=!0,ja=new Map;let e=(0,er.getHdbBasePath)()&&(0,je.join)((0,er.getHdbBasePath)(),Xr.DATABASES_DIR_NAME),t=(0,er.get)(Xr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,er.get)(Xr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,jr.existsSync)(e)?e:(0,je.join)((0,er.getHdbBasePath)(),Xr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,jr.existsSync)(e))for(let r of(0,jr.readdirSync)(e,{withFileTypes:!0})){let n=(0,je.basename)(r.name,".mdb");r.isFile()&&(0,je.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Dl((0,je.join)(e,r.name),null,n)}if((0,jr.existsSync)((0,Ja.getBaseSchemaPath)())){for(let r of(0,jr.readdirSync)((0,Ja.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,je.join)((0,Ja.getBaseSchemaPath)(),r.name),s=(0,je.join)((0,Ja.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,jr.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,je.extname)(i.name).toLowerCase()===".mdb"){let o=(0,je.join)(s,i.name);Dl((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,jr.existsSync)(s))for(let o of(0,jr.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,je.extname)(o.name).toLowerCase()===".mdb"&&Dl((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,jr.existsSync)(u)&&Dl(u,o,r,null,!0)}}for(let r in tt){let n=ja.get(r);if(n){let s=tt[r];r.includes("delete")&&Sn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Sn.trace(`delete table class ${i}`),delete s[i])}else if(delete tt[r],r==="data"){for(let s in Lr)delete Lr[s];delete Lr[eh]}}return ja=null,tt}}function Vse(){ZE=!1;for(let[,e]of Ni)e.needsDeletion=!0;Dn();for(let[e,t]of Ni)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Ni.delete(e));return tt}function Dl(e,t,r=CA,n,s){let i=new IA.default(e,!1);try{let o=Ni.get(e);o?o.needsDeletion=!1:(o=(0,JE.open)(i),Ni.set(e,o));let c=new Lo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(zE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,jr.existsSync)(n)&&(i.path=n,_=(0,JE.open)(i),_.isLegacy=!0):_=UE(o));let l=kx(r),d=l[eh],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 j of p)if(j.is_hash_attribute||j.isPrimaryKey){S=j;break}if(!S){Sn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let T=l[E],b={},R=[],L,H,P=typeof S.audit=="boolean"?S.audit:(0,er.get)(Xr.CONFIG_PARAMS.LOGGING_AUDITLOG),k=S.trackDeletes,B=S.expiration,J=S.eviction,z=S.sealed;if(T)b=T.indices,R=T.attributes,T.schemaVersion++;else{L=S.tableId,L?L>=(u.get(za)||0)&&u.putSync(za,L+1):(S.tableId=L=u.get(za),L||(L=1),u.putSync(za,L+1),u.putSync(S.key,S));let j=new Lo.default(!S.is_hash_attribute,S.is_hash_attribute);H=c_(o.openDB(S.key,j)),H.rootStore=o,H.tableId=L}for(let j of p){j.attribute=j.name;try{if(!j.is_hash_attribute&&(j.indexed||j.attribute&&!j.name)){if(!b[j.name]){let ce=new Lo.default(!j.is_hash_attribute,j.is_hash_attribute);b[j.name]=o.openDB(j.key,ce),b[j.name].indexNulls=j.indexNulls}let Te=R.find(ce=>ce.name===j.name);Te?R.splice(R.indexOf(Te),1,j):R.push(j)}}catch(Te){Sn.error("Error trying to update attribute",j,R,b,Te)}}if(!T){T=Vx(l,E,QE({primaryStore:H,auditStore:_,audit:P,sealed:z,expirationMS:B&&B*1e3,evictionMS:J&&J*1e3,trackDeletes:k,tableName:E,tableId:L,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:b,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),T.schemaVersion=1;for(let j of DA)j(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function kx(e){let t=tt[e];if(t||(e==="data"?t=tt[e]=Lr:e==="system"?Object.defineProperty(tt,"system",{value:t=Object.create(null),configurable:!0}):t=tt[e]=Object.create(null)),ja&&!ja.has(e)){let r=new Set;t[eh]=r,ja.set(e,r)}return t}function Vx(e,t,r){return e[t]=r,r}function Jc({database:e,table:t}){e||(e=CA),Dn();let r=kx(e),n=(0,je.join)((0,er.getHdbBasePath)(),Xr.DATABASES_DIR_NAME),s=(0,er.get)(Xr.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,er.get)(Xr.CONFIG_PARAMS.STORAGE_PATH)||((0,jr.existsSync)(n)?n:(0,je.join)((0,er.getHdbBasePath)(),Xr.LEGACY_DATABASES_DIR_NAME));let o=(0,je.join)(n,(i?t:e)+".mdb"),c=Ni.get(o);if(!c){let u=new IA.default(o,!1);c=(0,JE.open)(u),Ni.set(o,c)}return c}async function Jp(e){if(!tt[e])throw new Error("Schema does not exist");let t=tt[e];for(let r in t){let s=t[r].primaryStore.rootStore;Ni.delete(s.path),s.status==="open"&&(await s.close(),await Gx.remove(s.path))}if(e==="data"){for(let r in Lr)delete Lr[r];delete Lr[eh]}delete tt[e]}function at({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:u,schemaDefined:_,origin:l}){t||(t=CA);let d=Jc({database:t,table:e}),f=tt[t],E=f?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,p,S,T;_==null&&(_=!0);let b=new Lo.default(!1);for(let B of i)B.attribute?(B.name=B.attribute,B.indexed=!0):B.attribute=B.name,B.expiresAt&&(B.indexed=!0);let R,L;if(E){if(h=E.primaryKey,E.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);E.attributes.splice(0,E.attributes.length,...i)}else{let B=d.auditStore;B||(B=UE(d)),p=i.find(Te=>Te.isPrimaryKey)||{},h=p.name,p.is_hash_attribute=!0,p.schemaDefined=_,u&&(p.trackDeletes=!0),o=p.audit=typeof o=="boolean"?o:(0,er.get)(Xr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(p.expiration=r),n&&(p.eviction=n),typeof c=="boolean"&&(p.sealed=c),l&&(p.origins?p.origins.includes(l)||p.origins.push(l):p.origins=[l]),Sn.trace(`${e} table loading, opening primary store`);let J=new Lo.default(!1,!0),z=e+"/",j=c_(d.openDB(z,J));j.rootStore=d,T=d.dbisDb=d.openDB(zE.INTERNAL_DBIS_NAME,b),j.tableId=T.get(za),j.tableId||(j.tableId=1),T.putSync(za,j.tableId+1),p.tableId=j.tableId,E=Vx(f,e,QE({primaryStore:j,auditStore:B,audit:o,sealed:c,trackDeletes:u,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:j.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:T})),E.schemaVersion=1,R=!0,k(),T.put(z,p)}S=E.indices,T=T||(d.dbisDb=d.openDB(zE.INTERNAL_DBIS_NAME,b)),E.dbisDB=T;let H=[];for(let{key:B,value:J}of T.getRange({start:!0})){let[z,j]=B.toString().split("/");if(j===""&&(j=J.name),j){if(z!==e)continue}else j=z;if(!i.find(ce=>ce.name===j)?.indexed&&J.indexed&&!J.isPrimaryKey){k(),R=!0,T.remove(B);let ce=E.indices[z];ce&&H.push(ce)}}let P=[];try{for(let B of i||[]){if(B.relationship)continue;let J=e+"/"+(B.name||"");Object.defineProperty(B,"key",{value:J,configurable:!0});let z=T.get(J);if(B.isPrimaryKey){if(z=z||T.get(J=e+"/")||{},o!==E.audit||c!==c||(+r||void 0)!==(+z.expiration||void 0)||(+n||void 0)!==(+z.eviction||void 0)){let Te=Object.assign({},z);typeof o=="boolean"&&(o&&E.enableAuditing(o),Te.audit=o),r&&(Te.expiration=+r),n&&(Te.eviction=+n),c!==void 0&&(Te.sealed=c),R=!0,k(),T.put(J,Te)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let j=!z||z.type!==B.type||z.indexed!==B.indexed||z.nullable!==B.nullable||JSON.stringify(z.attributes)!==JSON.stringify(B.attributes)||JSON.stringify(z.elements)!==JSON.stringify(B.elements);if(B.indexed){let Te=new Lo.default(!0,!1),ce=d.openDB(J,Te);(j||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Ll.workerData?.restartNumber)&&(R=!0,k(),z=T.get(J),(j||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Ll.workerData?.restartNumber)&&(R=!0,B.lastIndexedKey=z?.lastIndexedKey||!1,B.indexingPID=process.pid,ce.isIndexing=!0,Object.defineProperty(B,"dbi",{value:ce}),B.indexNulls===void 0&&(B.indexNulls=!0),P.push(B)),T.put(J,B)),z?.indexNulls&&B.indexNulls===void 0&&(B.indexNulls=!0),ce.indexNulls=B.indexNulls,S[B.name]=ce}else j&&(R=!0,k(),T.put(J,B))}}finally{L&&L()}if(R&&(E.schemaVersion++,E.updatedAttributes()),Sn.trace(`${e} table loading, running index`),P.length>0||H.length>0?E.indexingOperation=Kse(E,P,H):R&&jE.signalSchemaChange(new XE.SchemaEventMsg(process.pid,"schema-change",E.databaseName,E.tableName)),E.origin=l,R)for(let B of DA)B(E,l!=="cluster");return(r||n||s)&&E.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),Sn.trace(`${e} table loaded`),E;function k(){L||d.transactionSync(()=>({then(B){L=B}}))}a(k,"startTxn")}async function Kse(e,t,r){try{let n=e.schemaVersion;await jE.signalSchemaChange(new XE.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,Fx.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--,Sn.error(f)}),Ll.workerData&&Ll.workerData.restartNumber!==qx.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>$se?await s:u>Yse&&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 jE.signalSchemaChange(new XE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){Sn.error("Error in indexing",n)}}function Wse({table:e,database:t}){let r=Jc({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 BR(e){DA.push(e)}var er,zE,JE,je,jr,Ja,Lo,IA,Xr,Gx,wA,Fx,jE,XE,Ll,Sn,qx,CA,eh,Lr,tt,za,DA,ZE,Ni,ja,$se,Yse,Ae=Re(()=>{er=x(re()),zE=x(_t()),JE=require("lmdb"),je=require("path"),jr=require("fs"),Ja=x(Qe());zf();Lo=x(u_()),IA=x(__()),Xr=x(U()),Gx=x(require("fs-extra")),wA=require("../../index"),Fx=x(Dr()),jE=x(Rs()),XE=x(wn()),Ll=require("worker_threads"),Sn=x(K()),qx=x(et());Bi();bc();CA="data",eh=Symbol("defined-tables");(0,er.initSync)();Lr=Object.create(null),tt=Object.create(null);(0,wA._assignPackageExport)("databases",tt);(0,wA._assignPackageExport)("tables",Lr);za=Symbol.for("next-table-id"),DA=[],Ni=new Map;a(kse,"getTables");a(Dn,"getDatabases");a(Vse,"resetDatabases");a(Dl,"readMetaDb");a(kx,"ensureDB");a(Vx,"setTable");a(Jc,"database");a(Jp,"dropDatabase");a(at,"table");$se=1e3,Yse=10;a(Kse,"runIndexing");a(Wse,"dropTableMeta");a(BR,"onUpdatedTable")});var Q=g((Ape,nG)=>{"use strict";var Ii=require("path"),Qx=require("fs-extra"),br=K(),$x=require("fs-extra"),th=require("os"),Qse=require("net"),zse=require("recursive-iterator"),ot=U(),Jse=pO(),Yx=require("papaparse"),rh=require("moment"),{inspect:jse}=require("util"),Kx=require("is-number"),Rpe=require("lodash"),Xse=require("minimist"),Zse=require("https"),eie=require("http"),{hdb_errors:nh}=ne(),tie=/^((\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)))$/,zx=require("util").promisify(setTimeout),rie=100,nie=5,sie="",iie=4,Wx={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};nG.exports={isEmpty:Zr,isEmptyOrZeroLength:_s,arrayHasEmptyValues:cie,arrayHasEmptyOrZeroLengthValues:uie,buildFolderPath:lie,isBoolean:Jx,errorizeMessage:oie,stripFileExtension:die,autoCast:fie,autoCastJSON:jx,autoCastJSONDeep:MA,removeDir:Eie,compareVersions:hie,isCompatibleDataVersion:mie,escapeRawValue:pie,unescapeValue:Sie,stringifyProps:Tie,timeoutPromise:Rie,isClusterOperation:Oie,getClusterUser:yie,checkGlobalSchemaTable:bie,getHomeDir:Zx,getPropsFilePath:gie,promisifyPapaParse:Nie,removeBOM:eG,createEventPromise:Iie,checkProcessRunning:wie,checkSchemaTableExist:Cie,checkSchemaExists:tG,checkTableExists:rG,getStartOfTomorrowInSeconds:Die,getLimitKey:Lie,isObject:_ie,isNotEmptyAndHasValue:aie,autoCasterIsNumberCheck:Xx,backtickASTSchemaItems:Mie,isPortTaken:Aie,createForkArgs:Uie,autoCastBoolean:Pie,async_set_timeout:zx,getTableHashAttribute:vie,doesSchemaExist:Bie,doesTableExist:Hie,stringifyObj:xie,ms_to_time:Gie,changeExtension:Fie,getEnvCliRootPath:UA,noBootFile:qie,httpRequest:kie,transformReq:Vie,convertToMS:$ie,PACKAGE_ROOT:ot.PACKAGE_ROOT};function oie(e){return e instanceof Error?e:new Error(e)}a(oie,"errorizeMessage");function Zr(e){return e==null}a(Zr,"isEmpty");function aie(e){return!Zr(e)&&(e||e===0||e===""||Jx(e))}a(aie,"isNotEmptyAndHasValue");function _s(e){return Zr(e)||e.length===0||e.size===0}a(_s,"isEmptyOrZeroLength");function cie(e){if(Zr(e))return!0;for(let t=0;t<e.length;t++)if(Zr(e[t]))return!0;return!1}a(cie,"arrayHasEmptyValues");function uie(e){if(_s(e))return!0;for(let t=0;t<e.length;t++)if(_s(e[t]))return!0;return!1}a(uie,"arrayHasEmptyOrZeroLengthValues");function lie(...e){try{return e.join(Ii.sep)}catch{console.error(e)}}a(lie,"buildFolderPath");function Jx(e){return Zr(e)?!1:e===!0||e===!1}a(Jx,"isBoolean");function _ie(e){return Zr(e)?!1:typeof e=="object"}a(_ie,"isObject");function die(e){return _s(e)?sie:e.slice(0,-iie)}a(die,"stripFileExtension");function fie(e){return Zr(e)||e===""||typeof e!="string"?e:Wx[e]!==void 0?Wx[e]:Xx(e)===!0?Number(e):tie.test(e)?new Date(e):e}a(fie,"autoCast");function jx(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(jx,"autoCastJSON");function MA(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=MA(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=MA(r);n!==r&&(e[t]=n)}return e}else return jx(e)}a(MA,"autoCastJSONDeep");function Xx(e){if(e.startsWith("0.")&&Kx(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Kx(e))}a(Xx,"autoCasterIsNumberCheck");async function Eie(e){if(_s(e))throw new Error(`Directory path: ${e} does not exist`);try{await $x.emptyDir(e),await $x.remove(e)}catch(t){throw br.error(`Error removing files in ${e} -- ${t}`),t}}a(Eie,"removeDir");function hie(e,t){if(_s(e)){br.info("Invalid current version sent as parameter.");return}if(_s(t)){br.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(hie,"compareVersions");function mie(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(mie,"isCompatibleDataVersion");function pie(e){if(Zr(e))return e;let t=String(e);return t==="."?ot.UNICODE_PERIOD:t===".."?ot.UNICODE_PERIOD+ot.UNICODE_PERIOD:t.replace(ot.FORWARD_SLASH_REGEX,ot.UNICODE_FORWARD_SLASH)}a(pie,"escapeRawValue");function Sie(e){if(Zr(e))return e;let t=String(e);return t===ot.UNICODE_PERIOD?".":t===ot.UNICODE_PERIOD+ot.UNICODE_PERIOD?"..":String(e).replace(ot.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Sie,"unescapeValue");function Tie(e,t){if(Zr(e))return br.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+th.EOL}!_s(n)&&n[0]===";"?r+=" "+n+s+th.EOL:_s(n)||(r+=n+"="+s+th.EOL)}catch{br.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(Tie,"stringifyProps");function Zx(){let e;try{e=th.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Zx,"getHomeDir");function gie(){let e=Ii.join(Zx(),ot.HDB_HOME_DIR_NAME,ot.BOOT_PROPS_FILE_NAME);return Qx.existsSync(e)||(e=Ii.join(__dirname,"../","hdb_boot_properties.file")),e}a(gie,"getPropsFilePath");function Rie(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(Rie,"timeoutPromise");async function Aie(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=Qse.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(Aie,"isPortTaken");function Oie(e){try{return ot.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){br.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Oie,"isClusterOperation");function bie(e,t){let r=(Ae(),se(Fe)).getDatabases();if(!r[e])return nh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return nh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(bie,"checkGlobalSchemaTable");function yie(e,t){if(Zr(t)){br.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Zr(e)||_s(e)){br.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){br.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){br.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(yie,"getClusterUser");function Nie(){Yx.parsePromise=function(e,t,r){return new Promise(function(n,s){Yx.parse(e,{header:!0,transformHeader:eG,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Nie,"promisifyPapaParse");function eG(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(eG,"removeBOM");function Iie(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;br.info(`Got cluster status event response: ${jse(s)}`);try{i.cancel()}catch{br.error("Error trying to cancel timeout.")}n(s)})})}a(Iie,"createEventPromise");async function wie(e){let t=!0,r=0;do await zx(rie*r++),(await Jse.findPs(e)).length>0&&(t=!1);while(t&&r<nie);if(t)throw new Error(`process ${e} was not started`)}a(wie,"checkProcessRunning");function Cie(e,t){let r=tG(e);if(r)return r;let n=rG(e,t);if(n)return n}a(Cie,"checkSchemaTableExist");function tG(e){let{getDatabases:t}=(Ae(),se(Fe));if(!t()[e])return nh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(tG,"checkSchemaExists");function rG(e,t){let{getDatabases:r}=(Ae(),se(Fe));if(!r()[e][t])return nh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(rG,"checkTableExists");function Die(){let e=rh().utc().add(1,ot.MOMENT_DAYS_TAG).startOf(ot.MOMENT_DAYS_TAG).unix(),t=rh().utc().unix();return e-t}a(Die,"getStartOfTomorrowInSeconds");function Lie(){return rh().utc().format("DD-MM-YYYY")}a(Lie,"getLimitKey");function Mie(e){try{let t=new zse(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){br.error("Got an error back ticking items."),br.error(t)}}a(Mie,"backtickASTSchemaItems");function Uie(e){return[e]}a(Uie,"createForkArgs");function Pie(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Pie,"autoCastBoolean");function vie(e,t){let{getDatabases:r}=(Ae(),se(Fe)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(vie,"getTableHashAttribute");function Bie(e){let{getDatabases:t}=(Ae(),se(Fe));return t()[e]!==void 0}a(Bie,"doesSchemaExist");function Hie(e,t){let{getDatabases:r}=(Ae(),se(Fe));return r()[e]?.[t]!==void 0}a(Hie,"doesTableExist");function xie(e){try{return JSON.stringify(e)}catch{return e}}a(xie,"stringifyObj");function Gie(e){let t=rh.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(Gie,"ms_to_time");function Fie(e,t){let r=Ii.basename(e,Ii.extname(e));return Ii.join(Ii.dirname(e),r+t)}a(Fie,"changeExtension");function UA(){if(process.env[ot.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[ot.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Xse(process.argv);if(e[ot.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[ot.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(UA,"getEnvCliRootPath");var LA;function qie(){if(LA)return LA;let e=UA();UA()&&Qx.pathExistsSync(Ii.join(e,ot.HDB_CONFIG_FILE))&&(LA=!0)}a(qie,"noBootFile");function kie(e,t){let r;return e.protocol==="http:"?r=eie:r=Zse,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(kie,"httpRequest");function Vie(e){if(!e.schema&&!e.database){e.schema=ot.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Vie,"transformReq");function $ie(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($ie,"convertToMS")});var PA=U(),sG=Q(),Ml=K(),Yie=gs(),Kie=vr(),Wie=ER(),{start:Qie}=(vR(),se(mE)),{closeConnection:zie}=Et(),iG=require("moment"),oG=jf(),{cloneDeep:Jie}=require("lodash"),jie=process.env[PA.PROCESS_NAME_ENV_PROP],Mo=jie.substring(4);a(async function(){let t={id:Mo,request:void 0},r=0;try{Ml.notify("Starting job:",Mo),Qie(),Yie.setSchemaDataToGlobal(),await Kie.setUsersToGlobal();let n=await oG.getJobById(Mo);if(sG.isEmptyOrZeroLength(n))throw new Error(`Unable to find a record in hdb_job for job: ${Mo}`);let{request:s}=n[0];if(sG.isEmptyOrZeroLength(s))throw new Error("Did not find job request in hdb_job table, unable to proceed");s=Jie(s);let i=Wie.getOperationFunction(s);Ml.trace("Running operation:",s.operation,"for job",Mo);let o=await i.job_operation_function(s);Ml.trace("Result from job:",Mo,o),t.status=PA.JOB_STATUS_ENUM.COMPLETE,t.message=o,t.end_datetime=iG().valueOf(),Ml.notify("Successfully completed job:",Mo)}catch(n){r=1,Ml.error(n),t.status=PA.JOB_STATUS_ENUM.ERROR,t.message=n.message?n.message:n,t.end_datetime=iG().valueOf()}finally{await oG.updateJob(t),await zie(),setTimeout(()=>{process.exit(r)},3e3).unref()}},"job")();