harperdb 4.2.2 → 4.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/lite.js CHANGED
@@ -1,18 +1,18 @@
1
- var CH=Object.create;var Na=Object.defineProperty;var LH=Object.getOwnPropertyDescriptor;var DH=Object.getOwnPropertyNames;var UH=Object.getPrototypeOf,MH=Object.prototype.hasOwnProperty;var a=(e,t)=>Na(e,"name",{value:t,configurable:!0});var Te=(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)Na(e,r,{get:t[r],enumerable:!0})},bR=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of DH(t))!MH.call(e,n)&&n!==r&&Na(e,n,{get:()=>t[n],enumerable:!(s=LH(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?CH(UH(e)):{},bR(t||!e||!e.__esModule?Na(r,"default",{value:e,enumerable:!0}):r,e)),Z=e=>bR(Na({},"__esModule",{value:!0}),e);var y=T((ene,FR)=>{"use strict";var Mr=require("path"),PH=require("fs"),{relative:jse,join:Zse}=Mr,{existsSync:vH}=PH;function BH(){let e=__dirname;for(;!vH(Mr.join(e,"package.json"));){let t=Mr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(BH,"getHDBPackageRoot");var Mn=BH(),yR="js",el=yR,HH="harperdb-config.yaml",qH="defaultConfig.yaml",FH="hdb",IR=`harperdb.${el}`,wR=`customFunctionsServer.${el}`,GH=`restartHdb.${el}`,EE="HarperDB",Zu="Custom Functions",tl="Clustering Hub",rl="Clustering Leaf",xH="Clustering Ingest Service",kH="Clustering Reply Service",VH="foreground.pid",$H="hdb.pid",YH="data",KH={HDB:EE,CLUSTERING_HUB:tl,CLUSTERING_LEAF:rl,CLUSTERING_INGEST_SERVICE:xH,CLUSTERING_REPLY_SERVICE:kH,CUSTOM_FUNCTIONS:Zu,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"},WH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},QH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},zH={harperdb:EE,"clustering hub":tl,"clustering leaf":rl,"custom functions":Zu,custom_functions:Zu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},JH={CLUSTERING_HUB_PROC_DESCRIPTOR:tl,CLUSTERING_LEAF_PROC_DESCRIPTOR:rl},fE={HDB:Mr.join(Mn,"server/harperdb"),CUSTOM_FUNCTIONS:Mr.join(Mn,"server/customFunctions"),CLUSTERING_HUB:Mr.join(Mn,"server/nats"),CLUSTERING_LEAF:Mr.join(Mn,"server/nats")},XH={HDB:Mr.join(fE.HDB,IR),CUSTOM_FUNCTIONS:Mr.join(fE.CUSTOM_FUNCTIONS,wR)},jH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Mr.join(Mn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Mr.join(Mn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Mr.join(Mn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},ZH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},CR="support@harperdb.io",eq="customer-success@harperdb.io",LR=1,tq=4141,DR="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",rq="https://www.harperdb.io/product",sq=`For support, please submit a request at ${DR} or contact ${CR}`,UR=`For license support, please contact ${eq}`,nq="None of the specified records were found.",iq="hash attribute not found",oq=`Your current license only supports ${LR} role. ${UR}`,aq="Your current license only supports 3 connections to a node.",cq="127.0.0.1",uq=1,lq=/^\.$/,_q=/^\.\.$/,dq="U+002E",fq=/\//g,Eq="U+002F",hq=/U\+002F/g,mq=/^U\+002E$/,pq=/^U\+002EU\+002E$/,Sq="d",Tq=999999,gq="*",Rq="--max-old-space-size=",Aq="system",Oq="__hdb_hash",Nq=".harperdb",bq=".hdb",yq="keys",Iq="hdb_boot_properties.file",wq=".updateConfig.json",Cq="SIGTSTP",Lq=24,Dq=6e4,Uq=448,Mq="blob",Pq="trash",vq="database",Bq="schema",Hq="transactions",qq=".count",Fq="id",Gq="PROCESS_NAME",MR={SETTINGS_PATH_KEY:"settings_path"},PR=require("lodash"),xq={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",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},kq={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},Vq={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},$q={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"},Yq={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"},dr="hdb_internal:",Kq={CREATE_SCHEMA:dr+"create_schema",CREATE_TABLE:dr+"create_table",CREATE_ATTRIBUTE:dr+"create_attribute",ADD_USER:dr+"add_user",ALTER_USER:dr+"alter_user",DROP_USER:dr+"drop_user",HDB_NODES:dr+"hdb_nodes",HDB_USERS:dr+"hdb_users",HDB_WORKERS:dr+"hdb_workers",CATCHUP:dr+"catchup",SCHEMA_CATCHUP:dr+"schema_catchup",WORKER_ROOM:dr+"cluster_workers"},Wq={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"},Qq="060493.ks",zq=".license",Jq={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},J={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",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"},Xq={CSV:".csv",JSON:".json"},jq={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Zq={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},ba={};ba[J.INSERT]=J.INSERT;ba[J.UPDATE]=J.UPDATE;ba[J.UPSERT]=J.UPSERT;ba[J.DELETE]=J.DELETE;var ye=Object.create(null);ye[J.DESCRIBE_ALL]=J.DESCRIBE_ALL;ye[J.DESCRIBE_TABLE]=J.DESCRIBE_TABLE;ye[J.DESCRIBE_SCHEMA]=J.DESCRIBE_SCHEMA;ye[J.READ_LOG]=J.READ_LOG;ye[J.ADD_NODE]=J.ADD_NODE;ye[J.LIST_USERS]=J.LIST_USERS;ye[J.LIST_ROLES]=J.LIST_ROLES;ye[J.USER_INFO]=J.USER_INFO;ye[J.SQL]=J.SQL;ye[J.GET_JOB]=J.GET_JOB;ye[J.SEARCH_JOBS_BY_START_DATE]=J.SEARCH_JOBS_BY_START_DATE;ye[J.DELETE_FILES_BEFORE]=J.DELETE_FILES_BEFORE;ye[J.EXPORT_LOCAL]=J.EXPORT_LOCAL;ye[J.EXPORT_TO_S3]=J.EXPORT_TO_S3;ye[J.CLUSTER_STATUS]=J.CLUSTER_STATUS;ye[J.REMOVE_NODE]=J.REMOVE_NODE;ye[J.RESTART]=J.RESTART;ye[J.CUSTOM_FUNCTIONS_STATUS]=J.CUSTOM_FUNCTIONS_STATUS;ye[J.GET_CUSTOM_FUNCTIONS]=J.GET_CUSTOM_FUNCTIONS;ye[J.GET_CUSTOM_FUNCTION]=J.GET_CUSTOM_FUNCTION;ye[J.SET_CUSTOM_FUNCTION]=J.SET_CUSTOM_FUNCTION;ye[J.DROP_CUSTOM_FUNCTION]=J.DROP_CUSTOM_FUNCTION;ye[J.ADD_CUSTOM_FUNCTION_PROJECT]=J.ADD_CUSTOM_FUNCTION_PROJECT;ye[J.DROP_CUSTOM_FUNCTION_PROJECT]=J.DROP_CUSTOM_FUNCTION_PROJECT;ye[J.PACKAGE_CUSTOM_FUNCTION_PROJECT]=J.PACKAGE_CUSTOM_FUNCTION_PROJECT;ye[J.DEPLOY_CUSTOM_FUNCTION_PROJECT]=J.DEPLOY_CUSTOM_FUNCTION_PROJECT;var eF={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},tF={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},vR={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"},rF=PR.invert(vR),sF={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"},N={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",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_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",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_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority"},BR={settings_path:MR.SETTINGS_PATH_KEY,hdb_root_key:N.ROOTPATH,hdb_root:N.ROOTPATH,rootpath:N.ROOTPATH,server_port_key:N.OPERATIONSAPI_NETWORK_PORT,server_port:N.OPERATIONSAPI_NETWORK_PORT,cert_key:N.TLS_CERTIFICATE,certificate:N.TLS_CERTIFICATE,private_key_key:N.TLS_PRIVATEKEY,private_key:N.TLS_PRIVATEKEY,http_secure_enabled_key:N.OPERATIONSAPI_NETWORK_HTTPS,https_on:N.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:N.OPERATIONSAPI_NETWORK_CORS,cors_on:N.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:N.LOGGING_LEVEL,log_level:N.LOGGING_LEVEL,log_path_key:N.LOGGING_ROOT,log_path:N.LOGGING_ROOT,clustering_node_name_key:N.CLUSTERING_NODENAME,node_name:N.CLUSTERING_NODENAME,clustering_enabled_key:N.CLUSTERING_ENABLED,clustering:N.CLUSTERING_ENABLED,max_http_threads:N.THREADS,max_hdb_processes:N.THREADS,server_timeout_key:N.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:N.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:N.LOGGING_AUDITLOG,disable_transaction_log:N.LOGGING_AUDITLOG,operation_token_timeout_key:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:N.HTTP_PORT,custom_functions_port:N.HTTP_PORT,custom_functions_directory_key:N.COMPONENTSROOT,custom_functions_directory:N.COMPONENTSROOT,max_custom_function_processes:N.THREADS,log_to_file:N.LOGGING_FILE,log_to_stdstreams:N.LOGGING_STDSTREAMS,local_studio_on:N.LOCALSTUDIO_ENABLED,clustering_port:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:N.CLUSTERING_USER,clustering_enabled:N.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:N.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:N.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:N.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:N.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:N.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:N.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:N.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:N.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:N.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:N.CLUSTERING_NODENAME,clustering_tls_certificate:N.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:N.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:N.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:N.CLUSTERING_TLS_INSECURE,clustering_tls_verify:N.CLUSTERING_TLS_VERIFY,clustering_loglevel:N.CLUSTERING_LOGLEVEL,clustering_republishmessages:N.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:N.CLUSTERING_DATABASELEVEL,customfunctions_network_port:N.HTTP_PORT,customfunctions_tls_certificate:N.TLS_CERTIFICATE,customfunctions_network_cors:N.HTTP_CORS,customfunctions_network_corsaccesslist:N.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:N.HTTP_HEADERSTIMEOUT,customfunctions_network_https:N.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:N.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:N.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:N.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:N.HTTP_TIMEOUT,http_threads:N.THREADS,threads:N.THREADS,http_session_affinity:N.HTTP_SESSIONAFFINITY,http_compressionthreshold:N.HTTP_COMPRESSIONTHRESHOLD,http_cors:N.HTTP_CORS,http_corsaccesslist:N.HTTP_CORSACCESSLIST,http_headerstimeout:N.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:N.HTTP_KEEPALIVETIMEOUT,http_timeout:N.HTTP_TIMEOUT,http_port:N.HTTP_PORT,http_secureport:N.HTTP_SECUREPORT,customfunctions_processes:N.THREADS,customfunctions_root:N.COMPONENTSROOT,localstudio_enabled:N.LOCALSTUDIO_ENABLED,logging_file:N.LOGGING_FILE,logging_level:N.LOGGING_LEVEL,logging_root:N.LOGGING_ROOT,logging_rotation_enabled:N.LOGGING_ROTATION_ENABLED,logging_rotation_compress:N.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:N.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:N.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:N.LOGGING_ROTATION_PATH,logging_stdstreams:N.LOGGING_STDSTREAMS,logging_auditlog:N.LOGGING_AUDITLOG,logging_auditretention:N.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:N.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:N.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:N.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:N.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:N.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_secureport:N.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:N.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:N.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:N.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:N.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:N.ROOTPATH,databases:N.DATABASES,storage_path:N.STORAGE_PATH,ignorescripts:N.IGNORE_SCRIPTS,mqtt_network_port:N.MQTT_NETWORK_PORT,mqtt_websocket:N.MQTT_WEBSOCKET,mqtt_network_secureport:N.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:N.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:N.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:N.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:N.AUTHENTICATION_CACHETTL,authentication_enablesessions:N.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:N.COMPONENTSROOT,tls_certificate:N.TLS_CERTIFICATE,tls_privatekey:N.TLS_PRIVATEKEY,tls_certificateauthority:N.TLS_CERTIFICATEAUTHORITY};for(let e in N){let t=N[e];BR[t.toLowerCase()]=t}var nF={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},iF={csv_file_load:"csv_file_load",csv_data_load:J.CSV_DATA_LOAD,csv_url_load:J.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},oF={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"},aF={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},cF={VERSION_DEFAULT:"2.2.0"},uF={DEVELOPMENT:8192,DEFAULT:512},lF={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"},_F={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"},dF={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},HR={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},fF=Symbol("metadata"),EF="__clustering__",hF=Object.values(HR),mF=15984864e5,qR={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},pF=PR.invert(qR),SF={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"},TF=111,gF=`\r
2
- `,RF={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},AF=["*","%"],OF="unauthorized_access",NF="func_val",bF={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},yF={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},IF={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"},wF={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},CF={HTTP:"http"},LF={STOPPED:"stopped",ONLINE:"online"},DF="3.x.x",UF={SUCCESS:"success",FAILURE:"failure"},MF={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};FR.exports={LOCAL_HARPERDB_OPERATIONS:ye,HDB_SUPPORT_ADDRESS:CR,HDB_SUPPORT_URL:DR,HDB_PRICING_URL:rq,SUPPORT_HELP_MSG:sq,LICENSE_HELP_MSG:UR,HDB_PROC_NAME:IR,HDB_PROC_DESCRIPTOR:EE,CLUSTERING_LEAF_PROC_DESCRIPTOR:rl,CLUSTERING_HUB_PROC_DESCRIPTOR:tl,SYSTEM_SCHEMA_NAME:Aq,HASH_FOLDER_NAME:Oq,HDB_HOME_DIR_NAME:Nq,UPDATE_FILE_NAME:wq,LICENSE_KEY_DIR_NAME:yq,BOOT_PROPS_FILE_NAME:Iq,JOB_TYPE_ENUM:iF,JOB_STATUS_ENUM:Jq,SYSTEM_TABLE_NAMES:$q,SYSTEM_TABLE_HASH_ATTRIBUTES:Yq,OPERATIONS_ENUM:J,VALID_S3_FILE_TYPES:Xq,S3_BUCKET_AUTH_KEYS:jq,VALID_SQL_OPS_ENUM:Zq,GEO_CONVERSION_ENUM:tF,HDB_SETTINGS_NAMES:vR,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:rF,SERVICE_ACTIONS_ENUM:eF,CLUSTER_MESSAGE_TYPE_ENUM:oF,CLUSTER_CONNECTION_DIRECTION_ENUM:aF,CLUSTER_EVENTS_DEFS_ENUM:lF,PERIOD_REGEX:lq,DOUBLE_PERIOD_REGEX:_q,UNICODE_PERIOD:dq,FORWARD_SLASH_REGEX:fq,UNICODE_FORWARD_SLASH:Eq,ESCAPED_FORWARD_SLASH_REGEX:hq,ESCAPED_PERIOD_REGEX:mq,ESCAPED_DOUBLE_PERIOD_REGEX:pq,REG_KEY_FILE_NAME:Qq,RESTART_TIMEOUT_MS:Dq,HDB_FILE_PERMISSIONS:Uq,DATABASES_DIR_NAME:vq,LEGACY_DATABASES_DIR_NAME:Bq,TRANSACTIONS_DIR_NAME:Hq,LIMIT_COUNT_NAME:qq,ID_ATTRIBUTE_STRING:Fq,INSERT_MODULE_ENUM:kq,UPGRADE_JSON_FIELD_NAMES_ENUM:Vq,RESTART_CODE:Cq,RESTART_CODE_NUM:Lq,CLUSTER_OPERATIONS:ba,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:Wq,HDB_INTERNAL_SC_CHANNEL_PREFIX:dr,INTERNAL_SC_CHANNELS:Kq,CLUSTERING_MESSAGE_TYPES:SF,HDB_FILE_SUFFIX:bq,BLOB_FOLDER_NAME:Mq,HDB_TRASH_DIR:Pq,ORIGINATOR_SET_VALUE:TF,LICENSE_VALUES:cF,RAM_ALLOCATION_ENUM:uF,TIME_STAMP_NAMES_ENUM:HR,TIME_STAMP_NAMES:hF,PERMS_UPDATE_RELEASE_TIMESTAMP:mF,SEARCH_NOT_FOUND_MESSAGE:nq,SEARCH_ATTRIBUTE_NOT_FOUND:iq,LICENSE_ROLE_DENIED_RESPONSE:oq,LICENSE_MAX_CONNS_REACHED:aq,BASIC_LICENSE_MAX_NON_CU_ROLES:LR,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:tq,VALUE_SEARCH_COMPARATORS:qR,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:pF,LICENSE_FILE_NAME:zq,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:_F,NEW_LINE:gF,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:uq,MOMENT_DAYS_TAG:Sq,API_TURNOVER_SEC:Tq,LOOPBACK:cq,CODE_EXTENSION:el,WILDCARD_SEARCH_VALUE:gq,NODE_ERROR_CODES:dF,JAVASCRIPT_EXTENSION:yR,PERMS_CRUD_ENUM:RF,UNAUTHORIZED_PERMISSION_NAME:OF,SEARCH_WILDCARDS:AF,FUNC_VAL:NF,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:bF,JWT_ENUM:yF,CLUSTERING_FLAG:EF,ITC_EVENT_TYPES:IF,CUSTOM_FUNCTION_PROC_NAME:wR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Zu,SERVICES:wF,THREAD_TYPES:CF,MEM_SETTING_KEY:Rq,HDB_RESTART_SCRIPT:GH,PROCESS_DESCRIPTORS:KH,SERVICE_SERVERS:XH,SERVICE_SERVERS_CWD:fE,PROCESS_DESCRIPTORS_VALIDATE:zH,LAUNCH_SERVICE_SCRIPTS:jH,LOG_LEVELS:QH,PROCESS_NAME_ENV_PROP:Gq,LOG_NAMES:WH,PM2_PROCESS_STATUSES:LF,CONFIG_PARAM_MAP:BR,CONFIG_PARAMS:N,HDB_CONFIG_FILE:HH,HDB_DEFAULT_CONFIG_FILE:qH,ROLE_TYPES_ENUM:ZH,BOOT_PROP_PARAMS:MR,INSTALL_PROMPTS:xq,HDB_ROOT_DIR_NAME:FH,CLUSTERING_PROCESSES:JH,FOREGROUND_PID_FILE:VH,PACKAGE_ROOT:Mn,PRE_4_0_0_VERSION:DF,DATABASES_PARAM_CONFIG:nF,METADATA_PROPERTY:fF,AUTH_AUDIT_STATUS:UF,AUTH_AUDIT_TYPES:MF,HDB_PID_FILE:$H,DEFAULT_DATABASE_NAME:YH,LEGACY_CONFIG_PARAMS:sF};hE()});var hE=T((sne,xR)=>{var PF=require("fast-glob"),{statSync:mE,existsSync:pE,readFileSync:vF,writeFileSync:BF}=require("fs"),{spawnSync:HF,spawn:qF,execFileSync:rne}=require("child_process"),{isMainThread:FF}=require("worker_threads"),{join:Pn,relative:GR}=require("path"),{PACKAGE_ROOT:ts}=y(),{tmpdir:GF,platform:xF}=require("os");require("source-map-support").install();var kF=["resources","server","dataLayer","components"],ya="ts-build",SE,VF=__filename.endsWith("tsBuild.js");if(VF){if(FF){let r;try{mE(Pn(ts,ya)),r=!0}catch{}if(r)for(let s of PF.sync(kF.map(n=>n+"/**/*.ts"),{cwd:ts})){let n=0,i=0;try{n=mE(Pn(ts,s)).mtimeMs-5e3,i=mE(Pn(ts,ya,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),SE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),SE=!0;if(SE){let s=Pn(ts,"node_modules/.bin/tsc");xF()==="win32"&&(s+=".cmd");let n=HF(s,{cwd:ts});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=Pn(GF(),"harperdb-tsc.pid"),o;if(pE(i))try{process.kill(+vF(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=qF(s,["--watch"],{cwd:ts,detached:!0,stdio:"ignore"});BF(i,c.pid.toString()),c.unref()}}}}let e=xR.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(ts)&&!s[0].includes("node_modules")){let i=GR(ts,s[0]),o;i.startsWith(ya)?o=Pn(ts,GR(ya,i)):o=Pn(ts,ya,i);let c=Pn(o,r),u=c+".js";if(pE(u))return u;if(c.includes(".")&&pE(c))return c}return t(r,s,n)}}});var di={};ve(di,{server:()=>ct});var kR,ct,fr=Te(()=>{kR=require("../index"),ct={};(0,kR._assignPackageExport)("server",ct)});var TE=T((nne,YR)=>{"use strict";var VR=require("minimist");YR.exports=$F;function $F(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=$R(process.env),s=$R(VR(process.argv))):(r=process.env,s=VR(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a($F,"assignCMDENVVariables");function $R(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a($R,"objKeysToLowerCase")});var G=T((one,yE)=>{"use strict";var fi=require("fs-extra"),{workerData:YF,threadId:KF}=require("worker_threads"),Zs=require("path"),QR=require("yaml"),zR=require("properties-reader"),ut=y(),KR=TE(),WF=require("os"),{PACKAGE_ROOT:RE}=y(),{_assignPackageExport:QF}=require("../index"),wa={};for(let e in console)wa[e]||(wa[e]=console[e]);var Kt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},JR={STDOUT:"stdOut",STDERR:"stdErr"},zF=Zs.join(RE,"logs"),JF=Zs.join(RE,"config/yaml/",ut.HDB_DEFAULT_CONFIG_FILE),XF=1e4,js,ys,Yt,sl,nl,Ca,so,Ia;Ia===void 0&&XR();yE.exports={notify:eA,fatal:tA,error:La,warn:bE,info:il,debug:NE,trace:OE,setLogLevel:nG,log_level:Yt,loggerWithTag:jF,suppressLogging:ZF,initLogSettings:XR,setupConsoleLogging:jR,logCustomLevel:rG,closeLogFile:AE,getLogFilePath:()=>Ca,OUTPUTS:JR,AuthAuditLog:aG};QF("logger",yE.exports);function XR(e=!1){try{if(Ia===void 0||e){AE();let t=sG(),r=KR(["ROOTPATH"]);try{Ia=zR(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!fi.pathExistsSync(Zs.join(r.ROOTPATH,ut.HDB_CONFIG_FILE)))throw s}({level:Yt,config_log_path:nl,to_file:js,to_stream:ys}=iG(r.ROOTPATH?Zs.join(r.ROOTPATH,ut.HDB_CONFIG_FILE):Ia.get("settings_path"))),sl=ut.LOG_NAMES.HDB,Ca=Zs.join(nl,sl)}}catch(t){if(Ia=void 0,t.code===ut.NODE_ERROR_CODES.ENOENT){let r=KR(Object.keys(ut.CONFIG_PARAM_MAP),!0);for(let o in r){let c=ut.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===ut.CONFIG_PARAMS.LOGGING_LEVEL){Yt=u;continue}if(c===ut.CONFIG_PARAMS.LOGGING_STDSTREAMS){ys=u;continue}c===ut.CONFIG_PARAMS.LOGGING_FILE&&(js=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=oG();js=js===void 0?n:js,js=WR(js),ys=ys===void 0?i:ys,ys=WR(ys),Yt=Yt===void 0?s:Yt,nl=zF,sl=ut.LOG_NAMES.INSTALL,Ca=Zs.join(nl,sl);return}throw La("Error initializing log settings"),La(t),t}process.env.DEV_MODE&&(ys=!0),jR()}a(XR,"initLogSettings");var gE=!0;function jR(){ro("error",La),ro("warn",bE),ro("log",il),ro("info",il),ro("debug",NE),ro("trace",OE)}a(jR,"setupConsoleLogging");function ro(e,t){console[e]=function(...r){if(gE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return wa[e](...r)}}a(ro,"logConsole");function jF(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(eA),fatal:r(tA),error:r(La),warn:r(bE),info:r(il),debug:r(NE),trace:r(OE)};function r(s){return function(...n){return s(t,...n)}}}a(jF,"loggerWithTag");function ZF(e){try{gE=!1,e()}finally{gE=!0}}a(ZF,"suppressLogging");var eG=YF?.name?.replace(/ /g,"-")||"main";function en(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-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||eG+"/"+KF);c<n;c++){let _=t[c];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
3
- `}a(en,"createLogRecord");function Da(e){js&&ZR(e),ys&&process.stdout.write(e)}a(Da,"logStdOut");function ol(e){js&&ZR(e),ys&&process.stderr.write(e)}a(ol,"logStdErr");function ZR(e){tG(),so?fi.appendFileSync(so,e):wa.log(e)}a(ZR,"logToFile");function AE(){try{fi.closeSync(so)}catch{}so=null}a(AE,"closeLogFile");function tG(){if(!so){try{if(!Ca)debugger;so=fi.openSync(Ca,"a")}catch(e){wa.error(e)}setTimeout(()=>{AE()},XF).unref()}}a(tG,"openLogFile");function il(...e){Kt[Yt]<=Kt.info&&Da(en("info",e))}a(il,"info");function OE(...e){Kt[Yt]<=Kt.trace&&Da(en("trace",e))}a(OE,"trace");function La(...e){Kt[Yt]<=Kt.error&&ol(en("error",e))}a(La,"error");function NE(...e){Kt[Yt]<=Kt.debug&&Da(en("debug",e))}a(NE,"debug");function eA(...e){Kt[Yt]<=Kt.notify&&Da(en("notify",e))}a(eA,"notify");function tA(...e){Kt[Yt]<=Kt.fatal&&ol(en("fatal",e))}a(tA,"fatal");function bE(...e){Kt[Yt]<=Kt.warn&&ol(en("warn",e))}a(bE,"warn");function rG(e,t,...r){t===JR.STDERR?ol(en(e,r)):Da(en(e,r))}a(rG,"logCustomLevel");function sG(){let e;try{e=WF.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Zs.join(e,ut.HDB_HOME_DIR_NAME,ut.BOOT_PROPS_FILE_NAME);return fi.existsSync(t)||(t=Zs.join(RE,"utility/hdb_boot_properties.file")),t}a(sG,"getPropsFilePath");function nG(e){Yt=e}a(nG,"setLogLevel");function WR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(WR,"autoCastBoolean");function iG(e){try{if(e.includes("config/settings.js")){let o=zR(e);return{level:o.get(ut.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Zs.dirname(o.get(ut.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(ut.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(ut.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=QR.parseDocument(fi.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===ut.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(iG,"getLogConfig");function oG(){try{let e=QR.parseDocument(fi.readFileSync(JF,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(oG,"getDefaultConfig");function aG(e,t,r,s,n,i){this.username=e,this.status=t,this.type=r,this.originating_ip=s,this.request_method=n,this.path=i}a(aG,"AuthAuditLog")});var sA=T((cne,rA)=>{"use strict";var cG=require("util"),uG=require("path"),lG=require("child_process"),_G=cG.promisify(lG.execFile),dG=1e3*1e3*10;rA.exports={findPs:fG};async function fG(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await _G("ps",["wwxo",`pid,${r}`],{maxBuffer:dG});for(let n of s.trim().split(`
4
- `).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.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,s])=>({pid:Number.parseInt(r,10),name:uG.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(fG,"findPs")});var ze=T((lne,iA)=>{"use strict";var EG="__dbis__",hG="__txns__",mG="__environment_name__",pG="__dbi_defintion__",SG={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"},TG=["__createdtime__","__updatedtime__"],gG="\uFFFF",nA={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},RG=Object.values(nA);iA.exports={AUDIT_STORE_NAME:hG,INTERNAL_DBIS_NAME:EG,DBI_DEFINITION_NAME:pG,SEARCH_TYPES:SG,TIMESTAMP_NAMES:TG,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:mG,TRANSACTIONS_DBI_NAMES_ENUM:nA,TRANSACTIONS_DBIS:RG,OVERFLOW_MARKER:gG}});var Er=T((_ne,EA)=>{"use strict";var oA=y(),aA=ze(),cA={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},uA=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),lA={500:uA("There was an error processing your request."),400:"Invalid request"},AG=lA[cA.INTERNAL_SERVER_ERROR],OG={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.`},NG={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},bG={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"},yG={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 ${aA.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${aA.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"},IG={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${oA.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 ${oA.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"},_A={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"},wG={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."},CG={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`},LG={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"},DG={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},UG={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`},dA={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.`},fA={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}`},MG={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."},PG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},vG={..._A,...bG,...OG,...wG,...CG,...LG,...DG,...UG,...IG,...dA,...fA,...MG,...PG,...NG};EA.exports={CHECK_LOGS_WRAPPER:uA,HDB_ERROR_MSGS:vG,DEFAULT_ERROR_MSGS:lA,DEFAULT_ERROR_RESP:AG,HTTP_STATUS_CODES:cA,LMDB_ERRORS_ENUM:yG,AUTHENTICATION_ERROR_MSGS:_A,VALIDATION_ERROR_MSGS:dA,ITC_ERRORS:fA}});var j=T((fne,pA)=>{"use strict";var no=Er(),BG=G(),HG=y(),al=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,hA),this.statusCode=s||no.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(no.DEFAULT_ERROR_MSGS[s]?no.DEFAULT_ERROR_MSGS[s]:no.DEFAULT_ERROR_MSGS[no.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&BG[n](i)}},IE=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}},wE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function hA(e,t,r,s=HG.LOG_LEVELS.ERROR,n=null,i=!1){if(mA(e))return e;let o=new al(e,t,r,s,n);return i&&delete o.stack,o}a(hA,"handleHDBError");function mA(e){return e.__proto__.constructor.name===al.name}a(mA,"isHDBError");pA.exports={isHDBError:mA,handleHDBError:hA,ClientError:IE,ServerError:wE,hdb_errors:no}});var Be=T((hne,NA)=>{"use strict";var Ba=y(),qG=$(),Wt=X(),Ha=require("path"),FG=require("minimist"),SA=require("fs-extra"),TA=require("lodash");Wt.initSync();var{CONFIG_PARAMS:vn,DATABASES_PARAM_CONFIG:Ua,SYSTEM_SCHEMA_NAME:cl}=Ba,Ma,Pa,va;function gA(){if(Ma!==void 0)return Ma;if(Wt.getHdbBasePath()!==void 0)return Ma=Wt.get(vn.STORAGE_PATH)||Ha.join(Wt.getHdbBasePath(),Ba.DATABASES_DIR_NAME),Ma}a(gA,"getBaseSchemaPath");function RA(){if(Pa!==void 0)return Pa;if(Wt.getHdbBasePath()!==void 0)return Pa=OA(cl),Pa}a(RA,"getSystemSchemaPath");function AA(){if(va!==void 0)return va;if(Wt.getHdbBasePath()!==void 0)return va=Wt.get(Ba.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Ha.join(Wt.getHdbBasePath(),Ba.TRANSACTIONS_DIR_NAME),va}a(AA,"getTransactionAuditStoreBasePath");function GG(e,t){let r=Wt.get(vn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Ha.join(AA(),e.toString())}a(GG,"getTransactionAuditStorePath");function OA(e,t){e=e.toString(),t=t&&t.toString();let r=Wt.get(Ba.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Ha.join(gA(),e)}a(OA,"getSchemaPath");function xG(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,FG(process.argv));let s=r[vn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!qG.isObject(s))throw o;i=s}for(let o of i){let c=o[cl];if(!c)continue;let u=Wt.get(vn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[Ua.PATH];if(_)return TA.set(u,[cl,Ua.TABLES,t,Ua.PATH],_),Wt.setProperty(vn.DATABASES,u),_;let l=c?.[Ua.PATH];if(l)return TA.set(u,[cl,Ua.PATH],l),Wt.setProperty(vn.DATABASES,u),l}}let n=r[vn.STORAGE_PATH.toUpperCase()];if(n){if(!SA.pathExistsSync(n))throw new Error(n+" does not exist");let i=Ha.join(n,e);return SA.mkdirsSync(i),Wt.setProperty(vn.STORAGE_PATH,n),i}return RA()}a(xG,"initSystemSchemaPaths");function kG(){Ma=void 0,Pa=void 0,va=void 0}a(kG,"resetPaths");NA.exports={getBaseSchemaPath:gA,getSystemSchemaPath:RA,getTransactionAuditStorePath:GG,getTransactionAuditStoreBasePath:AA,getSchemaPath:OA,initSystemSchemaPaths:xG,resetPaths:kG}});var hr=T((Tne,CA)=>{"use strict";var VG=Er().LMDB_ERRORS_ENUM,pne=require("lmdb"),$G=ze(),Sne=require("buffer").Buffer,{OVERFLOW_MARKER:bA,MAX_SEARCH_KEY_LENGTH:ul}=$G,yA=["number","string","symbol","boolean","bigint"];function YG(e){if(e=e?.primaryStore||e,!e)throw new Error(VG.ENV_REQUIRED)}a(YG,"validateEnv");function KG(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(KG,"stringifyData");function WG(e){return e instanceof Date?e.valueOf():e}a(WG,"convertKeyValueToWrite");function QG(e){if(e==null)return;if(yA.includes(typeof e))return e.length>ul?[e.slice(0,ul)+bA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(yA.includes(typeof n))n.length>ul?t.push(n.slice(0,ul)+bA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(QG,"getIndexedValues");var ll=0,IA=0;function wA(){IA=Date.now()-performance.now()}a(wA,"adjustStartTime");wA();var zG=6e4;setInterval(wA,zG).unref();function JG(){let e=performance.now()+IA;return e>ll?(ll=e,e):(ll+=488e-6,ll)}a(JG,"getNextMonotonicTime");CA.exports={validateEnv:YG,stringifyData:KG,convertKeyValueToWrite:WG,getNextMonotonicTime:JG,getIndexedValues:QG}});var LA,rs,CE,qa=Te(()=>{LA=require("events"),rs=class extends LA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new CE;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)}},CE=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}}}});function Pr(e){return e[Ht]||(e[Ht]=Object.create(null))}function El(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u;switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new ss.ClientError(`${c} must be a string, attempt to assign ${l}`);Pr(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 ss.ClientError(`${c} must be a string, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Float":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new ss.ClientError(`${c} must be a number, attempt to assign ${l}`);Pr(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 ss.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Pr(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 ss.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new ss.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Pr(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 ss.ClientError(`${c} must be a Date, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new ss.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Pr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new ss.ClientError(`${c} must be an object, attempt to assign ${l}`);Pr(this)[c]=l},"set")}let _=s[c]={get(){let l=this[Ht];if(l&&c in l)return l[c];let d=this[ge]?.[c];if(d&&typeof d=="object"){let f=DA(d,o);if(f)return l||(l=this[Ht]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0};_.get.isAttribute=!0,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[Ht];return u?.[o]!==void 0?u[o]:this[ge]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new ss.ClientError("Can not add a property to a sealed table schema");Pr(this)[o]=c}),i("deleteProperty",function(o){Pr(this)[o]=void 0}),i("toJSON",function(){let o=this[Ht],c;for(let _ in o)c||(c=Object.assign({},this[ge])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[ge])),Object.assign(c,this)),c||this[ge]}),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 DA(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[ge]=n}},El(r,t)),new r(e)):new _l(e);case Array:let s=new fl(e.length);s[ge]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=DA(o,t?.elements)),s[n]=o}return s}}function hl(e){let t=e[Ht],r;for(let n in t){r||(r=Object.assign({},e[ge]));let i=t[n];i&&typeof i=="object"&&(i=hl(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ge])),Object.assign(r,e)),r||e[ge]}function Fa(e){let t;if(e[ge]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=Fa(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Ht];for(let s in r){t||(t=Object.assign({},e[ge]));let n=r[s];n&&typeof n=="object"&&(n=Fa(n)),t[s]=n}return t?Object.freeze(t):e[ge]||(e.buffer?e:Object.freeze(e))}function dl(e){let t=e[ge];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Ei]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[ge]===n){if(dl(i))return!0}else return!0}}else{let r=e[Ht];if(r&&!t)return!0;for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[ge]===i){if(dl(n))return!0}else return!0}else return!0}}return!1}var ss,Ht,_l,Ei,fl,ml=Te(()=>{ns();ss=D(j()),Ht=Symbol("own-data");a(Pr,"getChanges");a(El,"assignTrackedAccessors");a(DA,"trackObject");_l=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ge]=t}};El(_l,{});a(hl,"collapseData");a(Fa,"deepFreeze");a(dl,"hasChanges");Ei=Symbol.for("has-array-changes"),fl=class extends Array{static{a(this,"TrackedArray")}[Ei];constructor(t){super(t)}splice(...t){return this[Ei]=!0,super.splice(...t)}push(...t){return this[Ei]=!0,super.push(...t)}pop(){return this[Ei]=!0,super.pop()}unshift(...t){return this[Ei]=!0,super.unshift(...t)}shift(){return this[Ei]=!0,super.shift()}};fl.prototype.constructor=Array});function ex(){ZG=setInterval(function(){for(let e of LE)if(e.stale){let t=e[me]?.url;UA.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},jG).unref()}var DE,UA,XG,LE,hi,pl,jG,ZG,UE=Te(()=>{DE=D(hr()),UA=D(G());ns();XG=100,LE=new Set,hi=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;validated=0;timestamp=0;open=!0;getReadTxn(){return this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn?this.readTxn:(this.readTxn=this.lmdbDb.useReadTransaction(),LE.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(LE.delete(this),this.readTxn.done(),this.readTxn=null)}addWrite(t){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,DE.getNextMonotonicTime)());let s=t.retries||0;if(this.resetReadSnapshot(),this.validated<this.writes.length){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()=>{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 R=S();E?E.push?E.push(R):E=[E,R]:E=R}}E&&await(E.push?Promise.all(E):E)}return this.commit(t)})()}t?.close&&(this.open=!1);let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<XG>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return n.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=s+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(){this.resetReadSnapshot(),this.writes=[]}},pl=class extends hi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,DE.getNextMonotonicTime)())}getReadTxn(){}},jG=3e4;a(ex,"startMonitoringTxns");ex()});function Ge(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new hi;e.timestamp&&(s.timestamp=e.timestamp),s[me]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit({close:!0});return u.then?u.then(()=>(r?.resetTransaction&&(e.transaction=null),c)):(r?.resetTransaction&&(e.transaction=null),c)}function o(c){throw s.abort(),r?.resetTransaction&&(e.transaction=null),c}}var MA,mi=Te(()=>{MA=require("../index");ns();UE();a(Ge,"transaction");(0,MA._assignPackageExport)("transaction",Ge);Ge.commit=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ge.abort=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function PE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;if(l==null)throw new io.ClientError("Invalid value provided for query, must be non-null value");l instanceof Date&&(l=l.getTime());let d=e.comparator,f;switch(BA[d]||d){case"lt":o=!0,c=l;break;case"le":o=!0,c=l,u=!0;break;case"gt":o=l,_=!0;break;case"ge":o=l;break;case"prefix":o=l,c=l.slice(0),c[c.length-1]=ws.MAXIMUM_KEY;break;case"starts_with":o=l.toString(),c=l+String.fromCharCode(65535);break;case"between":o=l[0],o instanceof Date&&(o=o.getTime()),c=l[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case ht.SEARCH_TYPES.EQUALS:case void 0:o=l,c=l,u=!0;break;case"ne":case"contains":case"ends_with":f=!0;break;default:throw new io.ClientError(`Unknown query comparator "${d}"`)}if(r){let S=o;o=c,c=S,S=!_,_=!u,u=S}let E=i===s.primaryKey||i==null,h=E?s.primaryStore:s.indices[i];if(!h||h.isIndexing||f){if(!n)throw new io.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=vE(e);if(!S)throw new io.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:R,value:b})=>new Promise((O,Y)=>setImmediate(()=>{try{O(b&&S(b)?R:vA.SKIP)}catch(Q){Y(Q)}})))}let p={start:o,end:c,inclusiveEnd:u,exclusiveStart:_,values:!E,transaction:t,reverse:r};return E?h.getRange(p):h.getRange(p).map(({value:S})=>S)}function vE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),BA[t]||t){case ht.SEARCH_TYPES.EQUALS:case void 0:return Is(r,n=>n===s);case ht.SEARCH_TYPES.CONTAINS:return Is(r,n=>n?.toString().includes(s));case ht.SEARCH_TYPES.ENDS_WITH:case ht.SEARCH_TYPES._ENDS_WITH:return Is(r,n=>n?.toString().endsWith(s));case ht.SEARCH_TYPES.STARTS_WITH:case ht.SEARCH_TYPES._STARTS_WITH:return Is(r,n=>typeof n=="string"&&n.startsWith(s));case ht.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),Is(r,n=>(0,ws.compareKeys)(n,s[0])>=0&&(0,ws.compareKeys)(n,s[1])<=0);case"gt":case ht.SEARCH_TYPES.GREATER_THAN:case ht.SEARCH_TYPES._GREATER_THAN:return Is(r,n=>(0,ws.compareKeys)(n,s)>0);case"ge":case ht.SEARCH_TYPES.GREATER_THAN_EQUAL:case ht.SEARCH_TYPES._GREATER_THAN_EQUAL:return Is(r,n=>(0,ws.compareKeys)(n,s)>=0);case ht.SEARCH_TYPES.LESS_THAN:case"lt":case ht.SEARCH_TYPES._LESS_THAN:return Is(r,n=>(0,ws.compareKeys)(n,s)<0);case"le":case ht.SEARCH_TYPES.LESS_THAN_EQUAL:case ht.SEARCH_TYPES._LESS_THAN_EQUAL:return Is(r,n=>(0,ws.compareKeys)(n,s)<=0);case"ne":return Is(r,n=>(0,ws.compareKeys)(n,s)!==0);default:throw new io.ClientError(`Unknown query comparator "${t}"`)}}function Is(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function Sl(e){if(!e)return;let t=new ME,r,s,n,i,o,c=PA;for(;r=c.exec(e);){i=c.lastIndex;let[,u,_]=r;switch(_){case")":case")&":switch(o){case"limit":if(u.indexOf(",")>-1){let[l,d]=u.split(",");t.offset=+l,t.limit=d-t.offset}else t.limit=+u;break;case"select":if(u[0]==="["){if(u[u.length-1]!=="]")throw new Error("Unmatched brackets");t.select=u.slice(1,-1).split(","),t.select.asArray=!0}else u.indexOf(",")>-1?t.select=(u.endsWith(",")?u.slice(0,-1):u).split(","):t.select=u;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=u.split(",").map(l=>{switch(l[0]){case"-":return{attribute:l.slice(1),descending:!0};case"+":return{attribute:l.slice(1),descending:!1};default:return{attribute:l,descending:!1}}});break;default:throw new Error(`Unknown query function call ${o}`)}s=void 0;break;case"(":o=u;break;case"=":s?u.length<=2&&(n=u):(n="equals",s=decodeURIComponent(u));break;case"!=":case"<":case"<=":case">":case">=":n=tx[_],s=decodeURIComponent(u);break;case"=*":n="ends_with",s=decodeURIComponent(u);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(u)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${_} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(u)}),s=void 0;break;default:throw new Error(`Unknown operator ${_} in query ${e}`)}c=s?rx:PA,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var io,ht,ws,vA,tx,BA,PA,rx,ME,Tl=Te(()=>{io=D(j()),ht=D(ze()),ws=require("ordered-binary"),vA=require("lmdb"),tx={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(PE,"idsForCondition");BA={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(vE,"filterByType");a(Is,"attributeComparator");PA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,rx=/([^&|*=]+)([&|*=]*)/g;a(Sl,"parseQuery");ME=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 s=this.conditions[r];if(s.attribute===t)return s.value}}}});var qE={};ve(qE,{CONTEXT:()=>me,ID_PROPERTY:()=>Ie,IS_COLLECTION:()=>is,RECORD_PROPERTY:()=>ge,Resource:()=>Ot,SAVE_UPDATES_PROPERTY:()=>kA,snake_case:()=>nx});function nx(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function HA(e,t){if(e=e.slice(1),e.indexOf("/")===-1)return e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e));let r=e.split("/"),s=new HE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function vr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_;if(r?o?(_=i,o=o[me]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(_=n,c=_[this.primaryKey]??null,o=i[me]||i):_=i:(_=n,c=_[Ie]??_[this.primaryKey]??null):i?o=i[me]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let f of n){if(typeof f=="object"&&f)break;c.push(f)}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)))}else{if(typeof(c=n.url)=="string"){let f=c.indexOf("?");if(f>-1){let h=this.parseQuery(c.slice(f+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,f)}let E=this.parsePath(c,o,u);E?.query?(u=E.query,c=E.id):c=E}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let l;if(u?.ensureLoaded!=null||u?.async?(l=Object.assign({},t),u?.ensureLoaded!=null&&(l.ensureLoaded=u.ensureLoaded),u.async&&(l.async=u.async)):l=t,o.transaction){let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)}else return Ge(o,()=>{let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)},l);function d(f){if(t.type==="read"&&(f[kA]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?f.allowRead(o.user,u,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,_,o):f.allowUpdate(o.user,_,o):t.type==="create"?f.allowCreate(o.user,_,o):f.allowDelete(o.user,u,o);if(E?.then)return E.then(h=>{if(!h)throw new gl(o.user);return typeof _?.then=="function"?_.then(p=>e(f,u,o,p)):e(f,u,o,_)});if(!E)throw new gl(o.user)}return typeof _?.then=="function"?_.then(E=>e(f,u,o,E)):e(f,u,o,_)}a(d,"authorizeActionOnResource")}}function Br(e,t){let r=new xA.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function BE(e){let t=e[ge];if(t){let r=e[Ht];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function qA(e){if(typeof e=="string")return t=>BE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=BE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=BE(r);for(let i of e){let o=n(i);o===void 0&&t&&(o=null),s[i]=o}return s}}else throw new Error("Invalid select argument type "+typeof e)}var FA,GA,xA,me,Ie,is,kA,ge,sx,Ot,gl,HE,ns=Te(()=>{FA=require("crypto");qa();GA=require("../index"),xA=D(j());ml();mi();Tl();me=Symbol.for("context"),Ie=Symbol.for("primary-key"),is=Symbol("is-collection"),kA=Symbol("save-updates"),ge=Symbol("stored-record"),sx={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Ot=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Ie]=t;let s=r?.[me];this[me]=s!==void 0?s:r||null}static get=vr(function(t,r,s,n){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){let _=qA(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=vr(function(t,r,s,n){if(Array.isArray(n)&&t[is]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):Br(t,"put")},{hasContent:!0,type:"update"});static delete=vr(function(t,r,s,n){return t.delete?t.delete(r):Br(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,FA.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),Ge(s,()=>{let i=new this(n,s),o=i.put?i.put(r):Br(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=vr(function(t,r,s,n){return t.invalidate?t.invalidate(r):Br(t,"delete")},{hasContent:!1,type:"update"});static post=vr(function(t,r,s,n){return t[Ie]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=vr(function(t,r,s,n){return t.connect?t.connect(n,r):Br(t,"connect")},{hasContent:!0,type:"read"});static subscribe=vr(function(t,r,s,n){return t.subscribe?t.subscribe(r):Br(t,"subscribe")},{type:"read"});static publish=vr(function(t,r,s,n){return t[Ie]!=null&&t.update?.(),t.publish?t.publish(n,r):Br(t,"publish")},{hasContent:!0,type:"create"});static search=vr(function(t,r,s,n){let i=t.search?t.search(r):Br(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=qA(o);return i.map(c)}return i},{type:"read"});static query=vr(function(t,r,s,n){return t.search?t.search(n,r):Br(t,"search")},{hasContent:!0,type:"read"});static copy=vr(function(t,r,s,n){return t.copy?t.copy(n,r):Br(t,"copy")},{type:"create"});static move=vr(function(t,r,s,n){return t.move?t.move(n,r):Br(t,"move")},{type:"delete"});post(t){if(this[is])return this.constructor.create(this[Ie],t,this[me]);Br(this,"post")}static isCollection(t){return t?.[is]}static coerceId(t){return t}static parseQuery(t){return Sl(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&sx[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:HA(t,this)}}return HA(t,this)}static getResource(t,r,s){let n,i=r[me],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;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(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[Ie]===t&&_.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Ie],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else n=new c(t,i);return o&&(n[is]=!0),n}subscribe(t){return new rs}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new rs}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[Ie]}getContext(){return this[me]}};Ot.prototype[me]=null;(0,GA._assignPackageExport)("Resource",Ot);a(nx,"snake_case");gl=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(HA,"pathToId");HE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(vr,"transactional");a(Br,"missingMethod");a(BE,"selectFromObject");a(qA,"transformForSelect")});var VA={};ve(VA,{Resources:()=>Rl,keyArrayToString:()=>oo,resetResources:()=>ix,resources:()=>Bn});function ix(){return Bn=new Rl}function oo(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Rl,Bn,Ga=Te(()=>{mi();Rl=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)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 s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Ge(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(ix,"resetResources");a(oo,"keyArrayToString")});var zA={};ve(zA,{HAS_EXPIRATION:()=>YE,LAST_TIMESTAMP_PLACEHOLDER:()=>ka,LOCAL_TIMESTAMP:()=>ox,METADATA:()=>xa,NO_TIMESTAMP:()=>FE,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>$E,RecordEncoder:()=>VE,TIMESTAMP_ASSIGN_LAST:()=>cx,TIMESTAMP_ASSIGN_NEW:()=>KA,TIMESTAMP_ASSIGN_PREVIOUS:()=>WA,TIMESTAMP_PLACEHOLDER:()=>Al,TIMESTAMP_RECORD_PREVIOUS:()=>GE,getUpdateRecord:()=>KE,handleLocalTimeForGets:()=>yl});function QA(){return co[0]=co[0]^64,ax.getFloat64(0)}function yl(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[xa];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[xa]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.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[xa];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})},e.env.metadataRetriever||(e.env.metadataRetriever=!0,e.on("aftercommit",({next:i,last:o})=>{do{let c=i.meta,u=c&&c.store;if(u&&!(i.flag&67108864)){let _=u.cache;if(c.key){let l=ux.call(_,c.key);if(l&&l.timestampBytes){let d=l.timestampOffset;l.timestampBytes[d]===2&&(l.timestampBytes.copy(co,0,d),l.timestampBytes=null,l.localTime=QA())}}}}while(i!=o&&(i=i.next))}));let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,pi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<pi.length;u++){let _=pi[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&pi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function KE(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?ao=i?.localTime?GE|WA:FE:ao=u?i?.localTime?GE|16384:KA|16384:FE,l>0&&(c|=YE),Nl=c,kE=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:ao>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(s,n,h);if(e.cache&&S.result!==!1){let R=e.cache.get(s);R&&(c>=0?R.metadataFlags=c:R.metadataFlags>=0&&(R.metadataFlags=void 0),(l||!R.expiresAt)&&(R.expiresAt=l),h.instructedWrite&&(R.localTime||(R.localTime=1),R.timestampBytes=xE,R.timestampOffset=xE.start||0))}if(u){let R=_?.user?.username;if(E&&(Ol=e.encoder.encode(E)),f&&i?.localTime){let b=i?.localTime,O=r.get(b);if(O){let Y=mr(O).previousLocalTime;return r.put(b,bl(o,t,s,Y,R,d,Ol),{ifVersion:p}),S}}r.put(ka,bl(o,t,s,i?.localTime?1:0,R,d,Ol),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var $A,YA,Al,ka,$E,ox,xa,co,ax,FE,KA,cx,WA,GE,YE,xE,Ol,ao,Nl,kE,VE,ux,pi,Va=Te(()=>{$A=require("msgpackr");uo();YA=D(G()),Al=new Uint8Array([1,1,1,1,4,64,0,0]),ka=new Uint8Array([1,1,1,1,1,0,0,0]),$E=new Uint8Array([1,1,1,1,3,64,0,0]),ox=Symbol("local-timestamp"),xa=Symbol("metadata"),co=new Uint8Array(8),ax=new DataView(co.buffer,0,8),FE=0,KA=0,cx=1,WA=3,GE=4,YE=16,ao=0,Nl=-1,kE=0,VE=class extends $A.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(ao||Nl>=0){let i=0,o=ao;o&&(i+=8,ao=0);let c=Nl,u=kE;c>=0&&(i+=2,Nl=-1,u&&(i+=8,kE=0));let _=xE=r.call(this,s,n|2048|i);Ol=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(Al[4]=o,Al[5]=o>>8,_.set(Al,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,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(co,0,c),c+=8;else for(let d=0;d<8;d++)co[d]=t[c++];u=QA(),i=t[c]}let _;i<32&&(o=i,c+=2,o&YE&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[xa]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(QA,"getTimestamp");ux=Map.prototype.get;a(yl,"handleLocalTimeForGets");pi=[];setInterval(()=>{for(let e=0;e<pi.length;e++){let t=pi[e].deref();!t||t.isDone||t.isCommitted?pi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&YA.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(KE,"getUpdateRecord")});var aO={};ve(aO,{AUDIT_STORE_OPTIONS:()=>iO,createAuditEntry:()=>bl,openAuditStore:()=>wl,readAuditEntry:()=>mr,setAuditRetention:()=>lx,transactionKeyEncoder:()=>nO});function wl(e){let t=e.auditStore=e.openDB(eO.AUDIT_STORE_NAME,iO);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,rO.getWorkerIndex)()===0&&e.on("aftercommit",()=>{$a||($a=setTimeout(()=>{if($a=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-WE})){if((n[0]&15)===zE){let i=mr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},WE/10).unref())}),t}function lx(e){clearTimeout($a),$a=null,WE=e}function bl(e,t,r,s,n,i,o){let c=oO[i],u=1;s&&(s>1?lo.setFloat64(0,s):Hr.set($E),u=9),f(0),f(t),d(r),lo.setFloat64(u,e),u+=8,n?d(n):Hr[u++]=0,Hr[s?8:0]=c;let l=Hr.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,_o.writeKey)(E,Hr,u);let p=u-h-1;p>127?p>16383?(XE.error("Key or username was too large for audit entry",E),u=h+1,Hr[h]=0):(Hr.copyWithin(h+2,h+1,u),lo.setUint16(h,p|32768),u++):Hr[h]=p}function f(E){E<128?Hr[u++]=E:E<16384?(lo.setUint16(u,E|32768),u+=2):E<1056964608?(lo.setUint32(u,E|3221225472),u+=4):(Hr[u]=255,lo.setUint32(u+1,E),u+=5)}}function mr(e){try{let t=e.dataView||(e.dataView=new JE(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=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:oO[s&7],tableId:i,get recordId(){return ZA(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?ZA(e,l,d):void 0},getValue(f){return s&QE?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return XE.error("Reading audit entry error",e),{}}}function ZA(e,t,r){let s=e.subarray(t,r);return(0,_o.readKey)(s,0,r-t)}var _o,Il,eO,tO,rO,sO,XE,Hr,lo,nO,iO,WE,$a,QE,JA,zE,XA,jA,oO,JE,uo=Te(()=>{_o=require("ordered-binary"),Il=D(X()),eO=D(ze()),tO=D(y()),rO=D(Je()),sO=D($());Va();XE=D(G());(0,Il.initSync)();Hr=Buffer.alloc(1024),lo=new DataView(Hr.buffer,Hr.byteOffset,1024),nO={writeKey(e,t,r){return e===ka?(t.set(ka,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,_o.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,_o.readKey)(e,t,r)}},iO={encoding:"binary",keyEncoder:nO},WE=(0,sO.convertToMS)((0,Il.get)(tO.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,$a=null;a(wl,"openAuditStore");a(lx,"setAuditRetention");QE=16,JA=1,zE=2,XA=3,jA=4,oO={put:JA|QE,[JA]:"put",delete:zE,[zE]:"delete",message:XA|QE,[XA]:"message",invalidate:jA,[jA]:"invalidate"};a(bl,"createAuditEntry");a(mr,"readAuditEntry");JE=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(ZA,"readKeySafely")});function uO(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;fo||((0,Ka.onMessageByType)(cO,d=>{lO(d.path)}),(0,Ka.onMessageByType)(_x,d=>{(0,Ya.trace)("confirming to proceed with txn",d.txnId)}),fo=Object.create(null));let c=fo[i]||(fo[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=oo(t);let _=new ZE(r);_.startTime=s,n&&(_.includeDescendants=n);let l=u.get(t);return l?l.push(_):(u.set(t,l=[_]),l.tables=u,l.key=t),_.subscriptions=l,_}function lO(e,t){if(!fo)return;let r=fo[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:jE,exclusiveStart:!0})){jE=n;let o=mr(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=oo(o.recordId),d;do{let f=c.get(l);if(f){for(let h of f)if(!(d&&!h.includeDescendants)){if(h.startTime>=n){(0,Ya.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,p)}catch(p){console.error(p),(0,Ya.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E+1):l=null,d=!0}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},jE,!0)}function _O(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,Ka.broadcast)({type:cO,path:n}),lO(n,!0)})}}var Ya,Ka,cO,_x,fo,Xne,ZE,jE,dO=Te(()=>{Ya=D(G()),Ka=D(Je());qa();Ga();uo();cO="transaction",_x="transaction-await",Xne=Buffer.alloc(4096);a(uO,"addSubscription");ZE=class extends rs{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 s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}},jE=Date.now();a(lO,"notifyFromTransactionData");a(_O,"listenToCommits")});var EO=T((eie,fO)=>{"use strict";var eh=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};fO.exports=eh});var mO=T((rie,hO)=>{"use strict";var th=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};hO.exports=th});var Cl=T((nie,pO)=>{"use strict";var sh=X(),nh=y(),{RecordEncoder:dx}=(Va(),Z(zA));sh.initSync();var fx=sh.get(nh.CONFIG_PARAMS.STORAGE_COMPRESSION),Ex=sh.get(nh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,hx=nh.UPDATES_PROPERTY,rh=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=fx&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=Ex&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:dx},this.alwaysLazyProperty=s=>s===hx)}};pO.exports=rh});var Dl=T((oie,TO)=>{"use strict";var Eo=X(),Wa=y();Eo.initSync();var mx=Eo.get(Wa.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Eo.get(Wa.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Eo.get(Wa.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",SO=Eo.get(Wa.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),px=Eo.get(Wa.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Ll=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=mx,this.noFSAccess=!0,SO!==void 0&&(this.overlappingSync=SO),this.noReadAhead=px}};TO.exports=Ll;Ll.MAX_DBS=1e4});var Ue=T((cie,CO)=>{"use strict";var oh=require("lmdb"),os=require("fs-extra"),pr=require("path"),Ul=hr(),AO=G(),Qt=Er().LMDB_ERRORS_ENUM,Ml=mO(),ah=Cl(),OO=Dl(),Hn=ze(),gO=y(),{table:Sx,resetDatabases:Tx}=(fe(),Z(Ce)),RO=X(),as=Hn.INTERNAL_DBIS_NAME,NO=Hn.DBI_DEFINITION_NAME,gx="data.mdb",Rx="lock.mdb",Qa=".mdb",Ax="-lock",ih=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=qr(t,r),this.key_type=this.dbi[Hn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Hn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new oh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Pl(e,t){if(e===void 0)throw new Error(Qt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Qt.ENV_NAME_REQUIRED)}a(Pl,"pathEnvNameValidation");async function ch(e,t,r=!0){try{await os.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Qt.INVALID_BASE_PATH):s}try{let s=pr.join(e,t+Qa);return await os.access(s,os.constants.R_OK|os.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await os.access(pr.join(e,t,gx),os.constants.R_OK|os.constants.F_OK),pr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Qt.INVALID_ENVIRONMENT)}else throw new Error(Qt.INVALID_ENVIRONMENT);throw s}}a(ch,"validateEnvironmentPath");function vl(e,t){if(Ul.validateEnv(e),t===void 0)throw new Error(Qt.DBI_NAME_REQUIRED)}a(vl,"validateEnvDBIName");async function Ox(e,t,r=!1,s=!1){Pl(e,t);let n=pr.basename(e);t=t.toString();let i=RO.get(gO.CONFIG_PARAMS.DATABASES);i||RO.setProperty(gO.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await ch(e,t,s),bO(e,t,r)}catch(o){if(o.message===Qt.INVALID_ENVIRONMENT){let c=pr.join(e,t);await os.mkdirp(s?c:e);let u=new OO(s?c:c+Qa,!1),_=oh.open(u);_.dbis=Object.create(null);let l=new ah(!1);_.openDB(as,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=uh(e,t,r);return _[Hn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(Ox,"createEnvironment");async function Nx(e,t,r,s=!0){Pl(e,t),t=t.toString();let n=pr.join(e,t);return Sx({table:t,database:pr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(Nx,"copyEnvironment");async function bO(e,t,r=!1){Pl(e,t),t=t.toString();let s=uh(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await ch(e,t),i=pr.join(e,t+Qa),o=n!=i,c=new OO(n,o),u=oh.open(c);u.dbis=Object.create(null);let _=IO(u);for(let l=0;l<_.length;l++)qr(u,_[l]);return u[Hn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(bO,"openEnvironment");async function bx(e,t,r=!1){Pl(e,t),t=t.toString();let s=pr.join(e,t+Qa),n=await ch(e,t);if(global.lmdb_map!==void 0){let i=uh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await yO(o),delete global.lmdb_map[i]}}await os.remove(n),await os.remove(n===s?n+Ax:pr.join(pr.dirname(n),Rx))}a(bx,"deleteEnvironment");async function yO(e){Ul.validateEnv(e);let t=e[Hn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(yO,"closeEnvironment");function uh(e,t,r=!1){let n=`${pr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(uh,"getCachedEnvironmentName");function yx(e){Ul.validateEnv(e);let t=Object.create(null),r=qr(e,as);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==as)try{t[s]=Object.assign(new Ml,n)}catch{AO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(yx,"listDBIDefinitions");function IO(e){Ul.validateEnv(e);let t=[],r=qr(e,as);for(let{key:s}of r.getRange({start:!1}))s!==as&&t.push(s);return t}a(IO,"listDBIs");function Ix(e,t){let s=qr(e,as).getEntry(t),n=new Ml;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{AO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(Ix,"getDBIDefinition");function wO(e,t,r,s=!r){if(vl(e,t),t=t.toString(),t===as)throw new Error(Qt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return qr(e,t)}catch(n){if(n.message===Qt.DBI_DOES_NOT_EXIST){let i=new ah(r,s===!0),o=e.openDB(t,i),c=new Ml(r===!0,s);return o[NO]=c,qr(e,as).putSync(t,c),e.dbis[t]=o,o}throw n}}a(wO,"createDBI");function qr(e,t){if(vl(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==as?r=Ix(e,t):r=new Ml,r===void 0)throw new Error(Qt.DBI_DOES_NOT_EXIST);let s;try{let n=new ah(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(Qt.DBI_DOES_NOT_EXIST):n}return s[NO]=r,e.dbis[t]=s,s}a(qr,"openDBI");function wx(e,t){vl(e,t),t=t.toString();let r=qr(e,t),s=r.getStats();return r[Hn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(wx,"statDBI");async function Cx(e,t){try{let r=pr.join(e,t+Qa);return(await os.stat(r)).size}catch{throw new Error(Qt.INVALID_ENVIRONMENT)}}a(Cx,"environmentDataSize");function Lx(e,t){if(vl(e,t),t=t.toString(),t===as)throw new Error(Qt.CANNOT_DROP_INTERNAL_DBIS_NAME);qr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],qr(e,as).removeSync(t)}a(Lx,"dropDBI");function Dx(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{qr(e,i)}catch(o){if(o.message===Qt.DBI_DOES_NOT_EXIST)wO(e,i,i!==t,i===t),s=!0;else throw o}}s&&Tx()}a(Dx,"initializeDBIs");CO.exports={openDBI:qr,openEnvironment:bO,createEnvironment:Ox,listDBIs:IO,listDBIDefinitions:yx,createDBI:wO,dropDBI:Lx,statDBI:wx,deleteEnvironment:bx,initializeDBIs:Dx,TransactionCursor:ih,environmentDataSize:Cx,copyEnvironment:Nx,closeEnvironment:yO}});var UO=T((lie,DO)=>{"use strict";var lh=Ue(),Ux=G(),LO=Er().LMDB_ERRORS_ENUM;DO.exports=Mx;async function Mx(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 lh.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==LO.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await lh.closeEnvironment(global.lmdb_map[s]),await lh.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==LO.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){Ux.error(t)}}a(Mx,"cleanLMDBMap")});var Si=T((die,Px)=>{Px.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 YO=T((Eie,$O)=>{"use strict";var _h=require("recursive-iterator"),vx=require("alasql"),dh=require("clone"),MO=$(),{handleHDBError:PO,hdb_errors:Bx}=j(),{HDB_ERROR_MSGS:vO,HTTP_STATUS_CODES:BO}=Bx,{getDatabases:Hx}=(fe(),Z(Ce)),qx=["DISTINCT_ARRAY"],HO=Symbol("validateTables"),fh=Symbol("validateTable"),fie=Symbol("getAllColumns"),qO=Symbol("validateAllColumns"),Bl=Symbol("findColumn"),FO=Symbol("validateOrderBy"),za=Symbol("validateSegment"),Eh=Symbol("validateColumn"),GO=Symbol("setColumnsForTable"),xO=Symbol("checkColumnsForAsterisk"),kO=Symbol("validateGroupBy"),VO=Symbol("hasColumns"),hh=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[HO](),this[xO](),this[qO]()}[HO](){if(this[VO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[fh](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[fh](t.table)})}}[VO](){let t=!1,r=new _h(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[fh](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Hx();if(!r[t.databaseid])throw PO(new Error,vO.SCHEMA_NOT_FOUND(t.databaseid),BO.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw PO(new Error,vO.TABLE_NOT_FOUND(t.databaseid,t.tableid),BO.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=dh(n);i.table=dh(t),this.attributes.push(i)})}[Bl](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)}[xO](){let t=new _h(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[GO](r.tableid)}[GO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new vx.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[qO](){this[za](this.statement.columns,!1),this[za](this.statement.joins,!1),this[za](this.statement.where,!1),this[kO](this.statement.group,!1),this[za](this.statement.order,!0)}[za](t,r){if(!t)return;let s=new _h(t),n=[];for(let{node:i,path:o}of s)!MO.isEmpty(i)&&!MO.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[FO](i):n.push(this[Eh](i)));return n}[kO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&qx.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=dh(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Bl](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[Bl](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.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`}[FO](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[Eh](t)}[Eh](t){let r=this[Bl](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};$O.exports=hh});var WO=T((mie,KO)=>{"use strict";var mh=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};KO.exports=mh});var zO=T((Sie,QO)=>{"use strict";var ph=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};QO.exports=ph});var XO=T((gie,JO)=>{"use strict";var Sh=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};JO.exports=Sh});var ZO=T((Aie,jO)=>{"use strict";var Th=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};jO.exports=Th});var ho=T((Iie,rN)=>{"use strict";var Fx=Ue(),Gx=zO(),xx=XO(),kx=ZO(),Cs=hr(),Ja=Er().LMDB_ERRORS_ENUM,Vx=ze(),tn=y(),$x=$(),Yx=require("uuid"),Nie=require("lmdb"),{handleHDBError:Kx,hdb_errors:Wx}=j(),{OVERFLOW_MARKER:bie,MAX_SEARCH_KEY_LENGTH:yie}=Vx,eN=X();eN.initSync();var Hl=eN.get(tn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),gh=tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ti=tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Qx(e,t,r,s,n=Cs.getNextMonotonicTime()){Nh(e,t,r,s),Rh(e,t,r);let i=new Gx,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];tN(_,!0,n);let l=zx(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Ah(o,c,s,i,n)}a(Qx,"insertRecords");function zx(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][tn.FUNC_VAL],s[o]=c)}let u=Cs.getIndexedValues(c),_=e.dbis[o];if(u){Hl&&_.prefetch(u.map(l=>({key:l,value:n})),ql);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}Hl&&e.dbis[t].prefetch([n],ql),e.dbis[t].put(n,s,s[Ti])})}a(zx,"insertRecord");function Jx(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Jx,"removeSkippedRecords");function tN(e,t,r){let s=r>0;(s||!Number.isInteger(e[Ti]))&&(e[Ti]=r||(r=Cs.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[gh]))&&(e[gh]=r||Cs.getNextMonotonicTime()):delete e[gh]}a(tN,"setTimestamps");function Rh(e,t,r){r.indexOf(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Fx.initializeDBIs(e,t,r)}a(Rh,"initializeTransaction");async function Xx(e,t,r,s,n=Cs.getNextMonotonicTime()){Nh(e,t,r,s),Rh(e,t,r);let i=new xx,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Oh(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return Ah(c,u,s,i,n,o)}a(Xx,"updateRecords");async function jx(e,t,r,s,n=Cs.getNextMonotonicTime()){try{Nh(e,t,r,s)}catch(u){throw Kx(u,u.message,Wx.HTTP_STATUS_CODES.BAD_REQUEST)}Rh(e,t,r);let i=new kx,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;$x.isEmpty(_[t])?(l=Yx.v4(),_[t]=l):l=_[t];let d=Oh(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return Ah(o,c,s,i,n)}a(jx,"upsertRecords");async function Ah(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Cs.getNextMonotonicTime(),Jx(r,i),s}a(Ah,"finalizeWrite");function Oh(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(tN(r,!l,o),Number.isInteger(r[Ti])&&_[Ti]>r[Ti])return!1;l&&n.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 R=_[h];if(typeof p=="function"){let O=p([[_]]);Array.isArray(O)&&(p=O[0][tn.FUNC_VAL],r[h]=p)}if(p===R)continue;let b=Cs.getIndexedValues(R);if(b){Hl&&S.prefetch(b.map(O=>({key:O,value:s})),ql);for(let O=0,Y=b.length;O<Y;O++)S.remove(b[O],s)}if(b=Cs.getIndexedValues(p),b){Hl&&S.prefetch(b.map(O=>({key:O,value:s})),ql);for(let O=0,Y=b.length;O<Y;O++)S.put(b[O],s)}}let E=Object.assign({},_,r);c.put(s,E,E[Ti])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:Oh(e,t,r,s,n,i,o))}a(Oh,"updateUpsertRecord");function Zx(e,t,r){if(Cs.validateEnv(e),t===void 0)throw new Error(Ja.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ja.WRITE_ATTRIBUTES_REQUIRED):new Error(Ja.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Zx,"validateBasic");function Nh(e,t,r,s){if(Zx(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Ja.RECORDS_REQUIRED):new Error(Ja.RECORDS_MUST_BE_ARRAY)}a(Nh,"validateWrite");function ql(){}a(ql,"noop");rN.exports={insertRecords:Qx,updateRecords:Xx,upsertRecords:jx}});var Ls=T((Cie,iN)=>{"use strict";var nN=$(),sN=y(),mo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,rn=require("joi"),qn={schema_format:{pattern:mo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},ek=rn.alternatives(rn.string().min(1).max(qn.schema_length.maximum).pattern(mo).messages({"string.pattern.base":"{:#label} "+qn.schema_format.message}),rn.number()).required(),tk=rn.alternatives(rn.string().min(1).max(qn.schema_length.maximum).pattern(mo).messages({"string.pattern.base":"{:#label} "+qn.schema_format.message}),rn.number()),rk=rn.alternatives(rn.string().min(1).max(qn.schema_length.maximum).pattern(mo).messages({"string.pattern.base":"{:#label} "+qn.schema_format.message}),rn.number()).required();function sk(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>qn.schema_length.maximum?`'${e}' maximum of 250 characters`:mo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(sk,"checkValidTable");function nk(e,t){return nN.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(nk,"validateSchemaExists");function ik(e,t){let r=t.state.ancestors[0].schema;return nN.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(ik,"validateTableExists");function ok(e,t){return e.toLowerCase()===sN.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${sN.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(ok,"validateSchemaName");iN.exports={common_validators:qn,schema_regex:mo,hdb_schema_table:ek,validateSchemaExists:nk,validateTableExists:ik,validateSchemaName:ok,checkValidTable:sk,hdb_database:tk,hdb_table:rk}});var xe=T((Die,oN)=>{"use strict";var zt=require("validate.js");zt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||zt.validators.type.checks[t](e)?null:` must be a '${t}' value`};zt.validators.type.checks={Object:function(e){return zt.isObject(e)&&!zt.isArray(e)},Array:zt.isArray,Integer:zt.isInteger,Number:zt.isNumber,String:zt.isString,Date:zt.isDate,Boolean:function(e){return typeof e=="boolean"}};zt.validators.hasValidFileExt=function(e,t){return zt.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};oN.exports={validateObject:ak,validateObjectAsync:ck,validateBySchema:uk};function ak(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=zt(e,t,{format:"flat"});return r?new Error(r):null}a(ak,"validateObject");async function ck(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await zt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(ck,"validateObjectAsync");function uk(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(uk,"validateBySchema")});var Fl=T((Mie,aN)=>{var{common_validators:Ds}=Ls(),ja=xe(),Xa="is required",et={database:{presence:!1,format:Ds.schema_format,length:Ds.schema_length},schema:{presence:!1,format:Ds.schema_format,length:Ds.schema_length},table:{presence:!0,format:Ds.schema_format,length:Ds.schema_length},attribute:{presence:!0,format:Ds.schema_format,length:Ds.schema_length},hash_attribute:{presence:!0,format:Ds.schema_format,length:Ds.schema_length}};function Za(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(Za,"makeAttributesStrings");function lk(e){return e=Za(e),et.table.presence=!1,et.attribute.presence=!1,et.hash_attribute.presence=!1,ja.validateObject(e,et)}a(lk,"schema_object");function _k(e){return e=Za(e),et.table.presence={message:Xa},et.attribute.presence=!1,et.hash_attribute.presence=!1,ja.validateObject(e,et)}a(_k,"table_object");function dk(e){return e=Za(e),et.table.presence={message:Xa},et.attribute.presence=!1,ja.validateObject(e,et)}a(dk,"create_table_object");function fk(e){return e=Za(e),et.table.presence={message:Xa},et.attribute.presence={message:Xa},et.hash_attribute.presence=!1,ja.validateObject(e,et)}a(fk,"attribute_object");function Ek(e){return e=Za(e),et.table.presence={message:Xa},et.attribute.presence=!1,et.hash_attribute.presence=!1,ja.validateObject(e,et)}a(Ek,"describe_table");function hk(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(hk,"validateTableResidence");aN.exports={schema_object:lk,create_table_object:dk,table_object:_k,attribute_object:fk,describe_table:Ek,validateTableResidence:hk}});var uN=T((vie,cN)=>{"use strict";var mk=require("uuid"),bh=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||mk.v4(),this.schema_table=`${this.schema}.${this.table}`}};cN.exports=bh});var Gl=T((Hie,lN)=>{"use strict";var pk=uN(),yh=class extends pk{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};lN.exports=yh});var dN=T((Fie,_N)=>{"use strict";_N.exports=Tk;var Sk="inserted";function Tk(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Sk?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Tk,"returnObject")});var xl=T((xie,pN)=>{"use strict";var gk=y(),Ih=Ue(),Rk=ho(),{getSystemSchemaPath:Ak,getSchemaPath:Ok}=Be(),Nk=Si(),bk=Fl(),yk=Gl(),Ik=dN(),{handleHDBError:fN,hdb_errors:hN}=j(),EN=$(),{HTTP_STATUS_CODES:wk}=hN,wh=Nk.hdb_attribute,mN=[];for(let e=0;e<wh.attributes.length;e++)mN.push(wh.attributes[e].attribute);var Ck="inserted";pN.exports=Lk;async function Lk(e){let t=bk.attribute_object(e);if(t)throw fN(new Error,t.message,hN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&EN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw fN(new Error,r,wk.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=EN.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new yk(e.schema,e.table,e.attribute,e.id);try{let i=await Ih.openEnvironment(Ok(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}`);Ih.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Ih.openEnvironment(Ak(),gk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Rk.insertRecords(o,wh.hash_attribute,mN,[n]);return Ik(Ck,c,{records:[n]},u)}catch(i){throw i}}a(Lk,"lmdbCreateAttribute")});var Lh=T((Vie,TN)=>{var{hdb_table:Dk,hdb_database:SN}=Ls(),Uk=xe(),Ch=require("joi"),Mk={undefined:"undefined",null:"null"},Pk=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||Mk[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),vk=Ch.object({database:SN,schema:SN,table:Dk,records:Ch.array().items(Ch.object().custom(Pk)).required()});TN.exports=function(e){return Uk.validateBySchema(e,vk)}});var ec=T((Kie,RN)=>{"use strict";var sn=$(),gN=G(),Yie=Lh(),{getDatabases:Bk}=(fe(),Z(Ce)),{ClientError:gi}=j();RN.exports=Hk;function Hk(e){if(sn.isEmpty(e))throw new gi("invalid update parameters defined.");if(sn.isEmptyOrZeroLength(e.schema))throw new gi("invalid schema specified.");if(sn.isEmptyOrZeroLength(e.table))throw new gi("invalid table specified.");if(!Array.isArray(e.records))throw new gi("records must be an array");let t=Bk()[e.schema]?.[e.table];if(sn.isEmpty(t))throw new gi(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&sn.isEmptyOrZeroLength(o[r]))throw gN.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(!sn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw gN.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`);!sn.isEmpty(o[r])&&o[r]!==""&&s.has(sn.autoCast(o[r]))&&(o.skip=!0),s.add(sn.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(Hk,"insertUpdateValidate")});var tc=T((Qie,AN)=>{"use strict";var qk=y().OPERATIONS_ENUM,Dh=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=qk.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};AN.exports=Dh});var ic=T((Xie,ON)=>{"use strict";var Jie=tc(),kl=y(),Mh=$(),Uh=G(),Fk=require("uuid"),{handleHDBError:rc,hdb_errors:Gk}=j(),{HDB_ERROR_MSGS:sc,HTTP_STATUS_CODES:nc}=Gk;ON.exports=xk;function xk(e,t,r){for(let n=0;n<t.length;n++)kk(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Vk(i,r,e.operation)}}a(xk,"processRows");function kk(e){if(Buffer.byteLength(String(e))>kl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw rc(new Error,sc.ATTR_NAME_LENGTH_ERR(e),nc.BAD_REQUEST,void 0,void 0,!0);if(Mh.isEmptyOrZeroLength(e)||Mh.isEmpty(e.trim()))throw rc(new Error,sc.ATTR_NAME_NULLISH_ERR,nc.BAD_REQUEST,void 0,void 0,!0)}a(kk,"validateAttribute");function Vk(e,t,r){if(!e.hasOwnProperty(t)||Mh.isEmptyOrZeroLength(e[t])){if(r===kl.OPERATIONS_ENUM.INSERT||r===kl.OPERATIONS_ENUM.UPSERT){e[t]=Fk.v4();return}throw Uh.error("Update transaction aborted due to record with no hash value:",e),rc(new Error,sc.RECORD_MISSING_HASH_ERR,nc.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>kl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Uh.error(e),rc(new Error,sc.HASH_VAL_LENGTH_ERR,nc.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Uh.error(e),rc(new Error,sc.INVALID_FORWARD_SLASH_IN_HASH_ERR,nc.BAD_REQUEST,void 0,void 0,!0)}a(Vk,"validateHash")});var Vl=T((Zie,bN)=>{"use strict";var NN=$(),$k=y(),Yk=G(),Kk=xl(),Wk=Gl(),Qk=nn(),{SchemaEventMsg:zk}=cs(),Jk="already exists in";bN.exports=Xk;async function Xk(e,t,r){if(NN.isEmptyOrZeroLength(r))return r;let s=[];NN.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await jk(e,t.schema,t.name,i)})),n}a(Xk,"lmdbCheckForNewAttributes");async function jk(e,t,r,s){let n=new Wk(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await Zk(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(Jk))Yk.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(jk,"createNewAttribute");async function Zk(e){let t;return t=await Kk(e),Qk.signalSchemaChange(new zk(process.pid,$k.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(Zk,"createAttribute")});var po=T((toe,yN)=>{"use strict";var Ph=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};yN.exports=Ph});var wN=T((soe,IN)=>{"use strict";var eV=po(),tV=y().OPERATIONS_ENUM,vh=class extends eV{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(tV.INSERT,r,s,n,i),this.records=t}};IN.exports=vh});var LN=T((ioe,CN)=>{"use strict";var rV=po(),sV=y().OPERATIONS_ENUM,Bh=class extends rV{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(sV.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};CN.exports=Bh});var UN=T((aoe,DN)=>{"use strict";var nV=po(),iV=y().OPERATIONS_ENUM,Hh=class extends nV{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(iV.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};DN.exports=Hh});var PN=T((uoe,MN)=>{"use strict";var oV=po(),aV=y().OPERATIONS_ENUM,qh=class extends oV{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(aV.DELETE,s,n,t,i),this.original_records=r}};MN.exports=qh});var oc=T((doe,qN)=>{"use strict";var _oe=require("path"),vN=Ue(),cV=wN(),uV=LN(),lV=UN(),_V=PN(),So=ze(),BN=$(),{CONFIG_PARAMS:dV}=y(),HN=X();HN.initSync();var $l=y().OPERATIONS_ENUM,{getTransactionAuditStorePath:fV}=Be();qN.exports=EV;async function EV(e,t){if(HN.get(dV.LOGGING_AUDITLOG)===!1)return;let r=fV(e.schema,e.table),s=await vN.openEnvironment(r,e.table,!0),n=hV(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){vN.initializeDBIs(s,So.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,So.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[So.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[So.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),BN.isEmpty(n.user_name)||s.dbis[So.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[So.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(EV,"writeTransaction");function hV(e,t){let r=BN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===$l.INSERT)return new cV(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===$l.UPDATE)return new uV(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===$l.UPSERT)return new lV(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===$l.DELETE)return new _V(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(hV,"createTransactionObject")});var Fh=T((hoe,FN)=>{"use strict";var mV=ec(),Eoe=tc(),ac=y(),pV=ic(),SV=ho().insertRecords,TV=Ue(),gV=G(),RV=Vl(),{getSchemaPath:AV}=Be(),OV=oc();FN.exports=NV;async function NV(e){try{let{schema_table:t,attributes:r}=mV(e);pV(e,r,t.hash_attribute),e.schema!==ac.SYSTEM_SCHEMA_NAME&&(r.includes(ac.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(ac.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(ac.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(ac.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await RV(e.hdb_auth_header,t,r),n=AV(e.schema,e.table),i=await TV.openEnvironment(n,e.table),o=await SV(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await OV(e,o)}catch(c){gV.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:s,txn_time:o.txn_time}}catch(t){throw t}}a(NV,"lmdbCreateRecords")});var kN=T((poe,xN)=>{"use strict";var GN=y(),bV=Fh(),yV=tc(),IV=require("fs-extra"),{getSchemaPath:wV}=Be();xN.exports=CV;async function CV(e){let t=[{name:e.schema,createddate:Date.now()}],r=new yV(GN.SYSTEM_SCHEMA_NAME,GN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await bV(r),await IV.mkdirp(wV(e.schema))}a(CV,"lmdbCreateSchema")});var $N=T((Toe,VN)=>{"use strict";var Gh=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};VN.exports=Gh});var QN=T((Noe,WN)=>{"use strict";var YN=Ue(),xh=hr(),kh=Er().LMDB_ERRORS_ENUM,LV=ze(),KN=G(),Roe=$(),DV=require("lmdb"),UV=$N(),MV=y(),{OVERFLOW_MARKER:Aoe,MAX_SEARCH_KEY_LENGTH:Ooe}=LV,PV=MV.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function vV(e,t,r,s){if(xh.validateEnv(e),t===void 0)throw new Error(kh.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(kh.IDS_REQUIRED):new Error(kh.IDS_MUST_BE_ITERABLE);try{let n=YN.listDBIs(e);YN.initializeDBIs(e,t,n);let i=new UV,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||s&&h[PV]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,DV.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let R=n[S];if(!h.hasOwnProperty(R)||R===t)continue;let b=e.dbis[R],O=h[R];if(O!=null)try{let Y=xh.getIndexedValues(O);if(Y)for(let Q=0,F=Y.length;Q<F;Q++)b.remove(Y[Q],o)}catch{KN.warn(`cannot delete from attribute: ${R}, ${O}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){KN.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=xh.getNextMonotonicTime(),i}catch(n){throw n}}a(vV,"deleteRecords");WN.exports={deleteRecords:vV}});var cc=T((yoe,JN)=>{"use strict";var To=$(),BV=QN(),HV=Ue(),{getSchemaPath:qV}=Be(),FV=oc(),GV=G();JN.exports=xV;async function xV(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(To.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(To.isEmptyOrZeroLength(e.hash_values)&&!To.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];To.isEmpty(u)||e.hash_values.push(u)}}if(To.isEmptyOrZeroLength(e.hash_values))return zN([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(To.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=qV(e.schema,e.table),i=await HV.openEnvironment(n,e.table),o=await BV.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await FV(e,o)}catch(c){GV.error(`unable to write transaction due to ${c.message}`)}return zN(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(xV,"lmdbDeleteRecords");function zN(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(zN,"createDeleteResponse")});var $h=T((Coe,XN)=>{"use strict";var kV=y(),woe=hr();function Vh(e,t){let r=Object.create(null);if(t.length===1&&kV.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Vh,"parseRow");function VV(e,t,r,s){let n=Vh(r,e);s.push(n)}a(VV,"searchAll");function $V(e,t,r,s){let n=Vh(r,e);s[t]=n}a($V,"searchAllToMap");function YV(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(YV,"iterateDBI");function Ri(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(Ri,"pushResults");function KV(e,t,r,s,n,i){t.toString().endsWith(e)&&Ri(t,r,s,n,i)}a(KV,"endsWith");function WV(e,t,r,s,n,i){t.toString().includes(e)&&Ri(t,r,s,n,i)}a(WV,"contains");function QV(e,t,r,s,n,i){t>e&&Ri(t,r,s,n,i)}a(QV,"greaterThanCompare");function zV(e,t,r,s,n,i){t>=e&&Ri(t,r,s,n,i)}a(zV,"greaterThanEqualCompare");function JV(e,t,r,s,n,i){t<e&&Ri(t,r,s,n,i)}a(JV,"lessThanCompare");function XV(e,t,r,s,n,i){t<=e&&Ri(t,r,s,n,i)}a(XV,"lessThanEqualCompare");XN.exports={parseRow:Vh,searchAll:VV,searchAllToMap:$V,iterateDBI:YV,endsWith:KV,contains:WV,greaterThanCompare:QV,greaterThanEqualCompare:zV,lessThanCompare:JV,lessThanEqualCompare:XV,pushResults:Ri}});var go=T((Poe,nb)=>{"use strict";var Fn=Ue(),Doe=G(),Sr=hr(),Yl=ze(),Xe=Er().LMDB_ERRORS_ENUM,Uoe=$(),jV=y(),Kl=$h(),{parseRow:ZV}=Kl,Moe=require("lmdb"),{OVERFLOW_MARKER:jN,MAX_SEARCH_KEY_LENGTH:e$}=Yl;function ZN(e,t,r,s=!1,n=void 0,i=void 0){return Ai(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(ZN,"iterateFullIndex");function uc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Ai(e,t,r,(l,d,f,E)=>{let b={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(b.values=!1,d.getRange(b).map(O=>({value:O}))):d.getRange(b)})}a(uc,"iterateRangeBetween");function Ai(e,t,r,s){let n=e.database||e,i=Fn.openDBI(n,r);i[Yl.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Fn.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Ai,"setupTransaction");function eb(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(jN)){if(!n)if(r)n=Fn.openDBI(e,r);else{let u=Fn.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=Fn.openDBI(e,u[_]),!n[Yl.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(eb,"getOverflowCheck");function t$(e,t,r,s=!1,n=void 0,i=void 0){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);return Ai(e,t,t,(o,c,u)=>(Wl(r),r=lc(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>ZV(_.value,r))))}a(t$,"searchAll");function r$(e,t,r,s=!1,n=void 0,i=void 0){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);Wl(r),r=lc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of ZN(e,t,t,s,n,i))o.set(c,Kl.parseRow(u,r));return o}a(r$,"searchAllToMap");function s$(e,t,r=!1,s=void 0,n=void 0){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=ZN(e,void 0,t,r,s,n),c=o.transaction,u=eb(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(s$,"iterateDBI");function n$(e,t){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);return Fn.statDBI(e,t).entryCount}a(n$,"countAll");function i$(e,t,r,s,n=!1,i=void 0,o=void 0){return Gn(e,r,s),Ai(e,t,r,(c,u,_,l)=>(s=Sr.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(i$,"equals");function o$(e,t,r){return Gn(e,t,r),Fn.openDBI(e,t).getValuesCount(r)}a(o$,"count");function a$(e,t,r,s,n=!1,i=void 0,o=void 0){return Gn(e,r,s),Ai(e,null,r,(c,u)=>{s=Sr.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(a$,"startsWith");function c$(e,t,r,s,n=!1,i=void 0,o=void 0){return tb(e,t,r,s,n,i,o,!0)}a(c$,"endsWith");function tb(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Gn(e,r,s),Ai(e,null,r,(u,_,l,d)=>{let f=eb(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith(jN)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(s):S.includes(s))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?_[Yl.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(tb,"contains");function u$(e,t,r,s,n=!1,i=void 0,o=void 0){Gn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),uc(e,t,r,s,u,n,i,o,!0,!1)}a(u$,"greaterThan");function l$(e,t,r,s,n=!1,i=void 0,o=void 0){Gn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),uc(e,t,r,s,u,n,i,o,!1,!1)}a(l$,"greaterThanEqual");function _$(e,t,r,s,n=!1,i=void 0,o=void 0){Gn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),uc(e,t,r,u,s,n,i,o,!1,!0)}a(_$,"lessThan");function d$(e,t,r,s,n=!1,i=void 0,o=void 0){Gn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),uc(e,t,r,u,s,n,i,o,!1,!1)}a(d$,"lessThanEqual");function f$(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Sr.validateEnv(e),r===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Xe.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Xe.END_VALUE_REQUIRED);if(s=Sr.convertKeyValueToWrite(s),n=Sr.convertKeyValueToWrite(n),s>n)throw new Error(Xe.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return uc(e,t,r,s,n,i,o,c)}a(f$,"between");function E$(e,t,r,s){Sr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(Wl(r),r=lc(n,r),s===void 0)throw new Error(Xe.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Kl.parseRow(c,r)),o}a(E$,"searchByHash");function h$(e,t,r){Sr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Xe.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(h$,"checkHashExists");function m$(e,t,r,s,n=[]){return sb(e,t,r,s,n),rb(e,t,r,s,n).map(i=>i[1])}a(m$,"batchSearchByHash");function p$(e,t,r,s,n=[]){sb(e,t,r,s,n);let i=new Map;for(let[o,c]of rb(e,t,r,s,n))i.set(o,c);return i}a(p$,"batchSearchByHashToMap");function rb(e,t,r,s,n=[]){return Ai(e,t,t,(i,o,c)=>{r=lc(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,Kl.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(rb,"batchHashSearch");function sb(e,t,r,s,n){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(Wl(r),s==null)throw new Error(Xe.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Xe.IDS_MUST_BE_ITERABLE)}a(sb,"initializeBatchSearchByHash");function Wl(e){if(!Array.isArray(e))throw e===void 0?new Error(Xe.FETCH_ATTRIBUTES_REQUIRED):new Error(Xe.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Wl,"validateFetchAttributes");function Gn(e,t,r){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Xe.SEARCH_VALUE_REQUIRED);if(r?.length>e$)throw new Error(Xe.SEARCH_VALUE_TOO_LARGE)}a(Gn,"validateComparisonFunctions");function lc(e,t){return t.length===1&&jV.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Fn.listDBIs(e)),t}a(lc,"setGetWholeRowAttributes");nb.exports={searchAll:t$,searchAllToMap:r$,count:o$,countAll:n$,equals:i$,startsWith:a$,endsWith:c$,contains:tb,searchByHash:E$,setGetWholeRowAttributes:lc,batchSearchByHash:m$,batchSearchByHashToMap:p$,checkHashExists:h$,iterateDBI:s$,greaterThan:u$,greaterThanEqual:l$,lessThan:_$,lessThanEqual:d$,between:f$}});var Ro=T((Boe,ub)=>{var ib=require("lodash"),ob=xe(),He=require("joi"),S$=$(),{hdb_schema_table:Ql,checkValidTable:ab,hdb_table:cb,hdb_database:zl}=Ls(),{handleHDBError:T$,hdb_errors:g$}=j(),{getDatabases:R$}=(fe(),Z(Ce)),{HTTP_STATUS_CODES:A$}=g$,O$=He.object({database:zl,schema:zl,table:cb,search_attribute:Ql,search_value:He.any().required(),get_attributes:He.array().min(1).items(Ql).optional(),desc:He.bool(),limit:He.number().integer().min(1),offset:He.number().integer().min(0)}),N$=He.object({database:zl,schema:zl,table:cb,operator:He.string().valid("and","or").default("and").lowercase(),offset:He.number().integer().min(0),limit:He.number().integer().min(1),get_attributes:He.array().min(1).items(Ql).optional(),conditions:He.array().min(1).items(He.object({search_attribute:Ql,search_type:He.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").optional(),search_value:He.when("search_type",{switch:[{is:"equals",then:He.any()},{is:"between",then:He.array().items(He.alternatives([He.string(),He.number()])).length(2)}],otherwise:He.alternatives(He.string(),He.number())}).required()})).required()});ub.exports=function(e,t){let r=null;switch(t){case"value":r=ob.validateBySchema(e,O$);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(ab("database",e.schema)),i(ab("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"),n&&(r=new Error(n.trim()));break;case"conditions":r=ob.validateBySchema(e,N$);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=S$.checkGlobalSchemaTable(e.schema,e.table);if(n)return T$(new Error,n,A$.NOT_FOUND);let o=R$()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let _=0,l=e.conditions.length;_<l;_++){let d=e.conditions[_];c.push(d.search_attribute)}let u=ib.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!ib.some(o,l=>l===_||l.attribute===_||l.attribute===_.attribute));if(u&&u.length>0){let _=u.join(", ");return _=_.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${_}'`)}}return r}});var Yh=T((qoe,lb)=>{"use strict";var b$=Ue(),y$=Ro(),{getSchemaPath:I$}=Be();lb.exports=w$;function w$(e){let t=y$(e,"hashes");if(t)throw t;let r=I$(e.schema,e.table);return b$.openEnvironment(r,e.table)}a(w$,"initialize")});var Kh=T((Goe,_b)=>{"use strict";var C$=go(),L$=Yh();_b.exports=D$;async function D$(e){let t=await L$(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return C$.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(D$,"lmdbGetDataByHash")});var Ao=T((koe,db)=>{"use strict";var Wh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};db.exports=Wh});var Eb=T((Yoe,fb)=>{"use strict";var $oe=Ao(),U$=go(),M$=Yh();fb.exports=P$;async function P$(e){let t=await M$(e),r=global.hdb_schema[e.schema][e.table];return U$.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(P$,"lmdbSearchByHash")});var Us=T((Woe,hb)=>{"use strict";var Qh=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};hb.exports=Qh});var Jl=T((zoe,Rb)=>{"use strict";var qt=go(),v$=Ue(),B$=$(),ae=ze(),Oi=y(),H$=Si(),mb=Er().LMDB_ERRORS_ENUM,{getSchemaPath:q$}=Be(),on=Oi.SEARCH_WILDCARDS;async function F$(e,t,r){let s;e.schema===Oi.SYSTEM_SCHEMA_NAME?s=H$[e.table]:s=global.hdb_schema[e.schema][e.table];let n=gb(e,s.hash_attribute,r,t);return Sb(e,n,s.hash_attribute,r)}a(F$,"prepSearch");async function Sb(e,t,r,s){let n=q$(e.schema,e.table),i=await v$.openEnvironment(n,e.table),o=Tb(i,e,t,r),c=o.transaction||i;if([ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ae.SEARCH_TYPES.SEARCH_ALL,ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(G$(e,r)===!1){let l=e.search_attribute;if(l===r)return s?pb(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?pb(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?qt.batchSearchByHashToMap(c,r,e.get_attributes,_):qt.batchSearchByHash(c,r,e.get_attributes,_)}a(Sb,"executeSearch");function Tb(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<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 ae.SEARCH_TYPES.EQUALS:n=qt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.CONTAINS:n=qt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.ENDS_WITH:case ae.SEARCH_TYPES._ENDS_WITH:n=qt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.STARTS_WITH:case ae.SEARCH_TYPES._STARTS_WITH:n=qt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return qt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return qt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.SEARCH_ALL:return qt.searchAll(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return qt.searchAllToMap(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.BETWEEN:n=qt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ae.SEARCH_TYPES.GREATER_THAN:case ae.SEARCH_TYPES._GREATER_THAN:n=qt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.GREATER_THAN_EQUAL:case ae.SEARCH_TYPES._GREATER_THAN_EQUAL:n=qt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.LESS_THAN:case ae.SEARCH_TYPES._LESS_THAN:n=qt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.LESS_THAN_EQUAL:case ae.SEARCH_TYPES._LESS_THAN_EQUAL:n=qt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(Tb,"searchByType");function pb(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(pb,"createMapFromIterable");function G$(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 s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(G$,"checkToFetchMore");function gb(e,t,r,s){if(B$.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),on.indexOf(n)>-1)return r===!0?ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ae.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(on[0])<0&&n.indexOf(on[1])<0)return c===!0?r===!0?ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ae.SEARCH_TYPES.EQUALS;if(on.indexOf(i)>=0&&on.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ae.SEARCH_TYPES.CONTAINS;if(on.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ae.SEARCH_TYPES.ENDS_WITH;if(on.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ae.SEARCH_TYPES.STARTS_WITH;if(n.includes(on[0])||n.includes(on[1]))return ae.SEARCH_TYPES.EQUALS;throw new Error(mb.UNKNOWN_SEARCH_TYPE)}else switch(s){case Oi.VALUE_SEARCH_COMPARATORS.BETWEEN:return ae.SEARCH_TYPES.BETWEEN;case Oi.VALUE_SEARCH_COMPARATORS.GREATER:return ae.SEARCH_TYPES.GREATER_THAN;case Oi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ae.SEARCH_TYPES.GREATER_THAN_EQUAL;case Oi.VALUE_SEARCH_COMPARATORS.LESS:return ae.SEARCH_TYPES.LESS_THAN;case Oi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ae.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(mb.UNKNOWN_SEARCH_TYPE)}}a(gb,"createSearchTypeFromSearchObject");Rb.exports={executeSearch:Sb,createSearchTypeFromSearchObject:gb,prepSearch:F$,searchByType:Tb}});var Ob=T((joe,Ab)=>{"use strict";var Xoe=Us(),x$=Ro(),k$=$(),V$=y(),$$=Jl();Ab.exports=Y$;function Y$(e,t){if(!k$.isEmpty(t)&&V$.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=x$(e,"value");if(s)throw s;let n=!0;return $$.prepSearch(e,t,n)}a(Y$,"lmdbGetDataByValue")});var _c=T((tae,Nb)=>{"use strict";var eae=Us(),K$=Ro(),W$=$(),Q$=y(),z$=Jl();Nb.exports=J$;async function J$(e,t){if(!W$.isEmpty(t)&&Q$.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=K$(e,"value");if(s)throw s;return z$.prepSearch(e,t,!1)}a(J$,"lmdbSearchByValue")});var yb=T((nae,bb)=>{"use strict";var sae=ze(),zh=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},Jh=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Xh=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};bb.exports={SearchByConditionsObject:zh,SearchCondition:Jh,SortAttribute:Xh}});var Db=T((cae,Lb)=>{"use strict";var oae=yb().SearchByConditionsObject,X$=Us(),j$=Ro(),jh=go(),Xl=ze(),{Resource:aae}=(ns(),Z(qE)),Cb=Jl(),Z$=$h(),eY=require("lodash"),{getSchemaPath:tY}=Be(),Ib=Ue(),{handleHDBError:rY,hdb_errors:sY}=j(),{HTTP_STATUS_CODES:nY}=sY,iY=1e8;Lb.exports=oY;async function oY(e){let t=j$(e,"conditions");if(t)throw rY(t,t.message,nY.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=tY(e.schema,e.table),s=await Ib.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Ib.openDBI(s,_.search_attribute);let i=eY.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===Xl.SEARCH_TYPES.EQUALS?_.estimated_count=jh.count(s,_.search_attribute,_.search_value):l===Xl.SEARCH_TYPES.CONTAINS||l===Xl.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=iY}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await wb(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(Cb.filterByType),d=l.length,f=jh.setGetWholeRowAttributes(s,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=>Z$.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await wb(o,e,f,n.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=jh.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(oY,"lmdbSearchByConditions");async function wb(e,t,r,s){let n=new X$(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Xl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Cb.searchByType(e,n,i,s).map(o=>o.value)}a(wb,"executeConditionSearch")});var dc=T((lae,Ub)=>{"use strict";var aY=y().OPERATIONS_ENUM,Zh=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=aY.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Ub.exports=Zh});var em=T((dae,Gb)=>{"use strict";var Bb=Us(),Hb=dc(),qb=_c(),Fb=cc(),Jt=y(),Mb=$(),Pb=Ue(),{getTransactionAuditStorePath:cY,getSchemaPath:uY}=Be(),vb=G();Gb.exports=lY;async function lY(e){try{if(Mb.isEmpty(global.hdb_schema[e.schema])||Mb.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await _Y(e),await dY(e);let t=uY(e.schema,e.table);try{await Pb.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")vb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=cY(e.schema,e.table);await Pb.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")vb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(lY,"lmdbDropTable");async function _Y(e){let t=new Bb(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await qb(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new Hb(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Fb(n)}a(_Y,"deleteAttributesFromSystem");async function dY(e){let t=new Bb(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await qb(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&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new Hb(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Fb(n)}catch(i){throw i}}a(dY,"dropTableFromSystem")});var kb=T((Eae,xb)=>{"use strict";var fY=require("fs-extra"),EY=Us(),hY=Ao(),mY=dc(),pY=em(),SY=cc(),TY=Kh(),gY=_c(),an=y(),{getSchemaPath:RY}=Be(),{handleHDBError:AY,hdb_errors:OY}=j(),{HDB_ERROR_MSGS:NY,HTTP_STATUS_CODES:bY}=OY;xb.exports=yY;async function yY(e){let t;try{t=await IY(e.schema);let r=new EY(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,an.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[an.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await gY(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await pY(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new mY(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await SY(n);let i=RY(t);await fY.remove(i)}catch(r){throw r}}a(yY,"lmdbDropSchema");async function IY(e){let t=new hY(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[an.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await TY(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw AY(new Error,NY.SCHEMA_NOT_FOUND(e),bY.NOT_FOUND,void 0,void 0,!0);return s}a(IY,"validateDropSchema")});var rm=T((mae,Vb)=>{"use strict";var tm=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Vb.exports=tm});var Yb=T((Tae,$b)=>{"use strict";var wY=require("fs-extra"),jl=Ue(),{getTransactionAuditStorePath:CY}=Be(),sm=ze(),Sae=rm();$b.exports=LY;async function LY(e){let t;try{let r=CY(e.schema,e.table);await wY.mkdirp(r),t=await jl.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{jl.createDBI(t,sm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),jl.createDBI(t,sm.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),jl.createDBI(t,sm.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(LY,"createTransactionsAuditEnvironment")});var zb=T((Rae,Qb)=>{"use strict";var nm=y(),Kb=Ue(),DY=ho(),{getSystemSchemaPath:UY,getSchemaPath:MY}=Be(),PY=Si(),vY=xl(),im=Gl(),BY=G(),HY=Yb(),am=PY.hdb_table,Wb=[];for(let e=0;e<am.attributes.length;e++)Wb.push(am.attributes[e].attribute);Qb.exports=qY;async function qY(e,t){let r=MY(t.schema,t.table),s=new im(t.schema,t.table,nm.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new im(t.schema,t.table,nm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new im(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Kb.createEnvironment(r,t.table),e!==void 0){let o=await Kb.openEnvironment(UY(),nm.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await DY.insertRecords(o,am.hash_attribute,Wb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await om(s),await om(n),await om(i)}await HY(t)}catch(o){throw o}}a(qY,"lmdbCreateTable");async function om(e){try{await vY(e)}catch(t){BY.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(om,"createAttribute")});var Xb=T((Oae,Jb)=>{"use strict";var FY=ec(),GY=ic(),xY=Vl(),fc=y(),kY=ho().updateRecords,VY=Ue(),{getSchemaPath:$Y}=Be(),YY=oc(),KY=G();Jb.exports=WY;async function WY(e){try{let{schema_table:t,attributes:r}=FY(e);GY(e,r,t.hash_attribute),e.schema!==fc.SYSTEM_SCHEMA_NAME&&(r.includes(fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await xY(e.hdb_auth_header,t,r),n=$Y(e.schema,e.table),i=await VY.openEnvironment(n,e.table),o=await kY(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await YY(e,o)}catch(c){KY.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:s,txn_time:o.txn_time}}catch(t){throw t}}a(WY,"lmdbUpdateRecords")});var Zb=T((bae,jb)=>{"use strict";var QY=y().OPERATIONS_ENUM,cm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=QY.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};jb.exports=cm});var ty=T((wae,ey)=>{"use strict";var Iae=Zb(),zY=ec(),JY=ic(),XY=Vl(),Ec=y(),jY=ho().upsertRecords,ZY=Ue(),{getSchemaPath:e1}=Be(),t1=oc(),r1=G(),{handleHDBError:s1,hdb_errors:n1}=j();ey.exports=i1;async function i1(e){let t;try{t=zY(e)}catch(u){throw s1(u,u.message,n1.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;JY(e,s,r.hash_attribute),e.schema!==Ec.SYSTEM_SCHEMA_NAME&&(s.includes(Ec.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ec.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ec.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ec.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await XY(e.hdb_auth_header,r,s),i=e1(e.schema,e.table),o=await ZY.openEnvironment(i,e.table),c=await jY(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await t1(e,c)}catch(u){r1.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(i1,"lmdbUpsertRecords")});var sy=T((Lae,ry)=>{"use strict";var um=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};ry.exports=um});var iy=T((Uae,ny)=>{"use strict";var lm=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};ny.exports=lm});var cy=T((vae,ay)=>{"use strict";var _m=Ue(),{getTransactionAuditStorePath:o1}=Be(),Pae=sy(),hc=ze(),a1=$(),oy=iy(),c1=require("util").promisify,u1=c1(setTimeout),l1=1e4,_1=100;ay.exports=d1;async function d1(e){let t=o1(e.schema,e.table),r=await _m.openEnvironment(t,e.table,!0),s=_m.listDBIs(r);_m.initializeDBIs(r,hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new oy;do n=await f1(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await u1(_1);while(n.transactions_deleted>0);return i}a(d1,"deleteAuditLogsBefore");async function f1(e,t){let r=new oy;try{let s=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[hc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];a1.isEmpty(c)||(n=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>l1)break}return await n,r}catch(s){throw s}}a(f1,"deleteTransactions")});var ly=T((Hae,uy)=>{"use strict";var dm=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};uy.exports=dm});var dy=T((Gae,_y)=>{"use strict";var E1=Us(),h1=dc(),Fae=ly(),Ms=y(),m1=$(),fm=Ue(),p1=Si(),S1=_c(),T1=cc(),{getSchemaPath:g1}=Be();_y.exports=R1;async function R1(e,t=!0){let r;e.schema===Ms.SYSTEM_SCHEMA_NAME?r=p1[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await O1(e),n=g1(e.schema,e.table),i=await fm.openEnvironment(n,e.table);return t===!0&&await A1(e,i,r.hash_attribute),fm.dropDBI(i,e.attribute),s}a(R1,"lmdbDropAttribute");async function A1(e,t,r){let s=fm.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(A1,"removeAttributeFromAllObjects");async function O1(e){let t=new E1(Ms.SYSTEM_SCHEMA_NAME,Ms.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Ms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await S1(t)).filter(o=>o[Ms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(m1.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Ms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new h1(Ms.SYSTEM_SCHEMA_NAME,Ms.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return T1(i)}a(O1,"dropAttributeFromSystem")});var Sy=T((Vae,py)=>{"use strict";var Em=Ue(),Oo=ze(),kae=hr(),hm=y(),fy=$(),{getTransactionAuditStorePath:N1}=Be(),b1=go(),Zl=po(),y1=G();py.exports=I1;async function I1(e){let t=N1(e.schema,e.table),r=await Em.openEnvironment(t,e.table,!0),s=Em.listDBIs(r);Em.initializeDBIs(r,Oo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case hm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Ey(r,e.search_values);case hm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,C1(r,e.search_values,n);case hm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return w1(r,e.search_values);default:return Ey(r)}}a(I1,"readAuditLog");function Ey(e,t=[0,Date.now()]){fy.isEmpty(t[0])&&(t[0]=0),fy.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Oo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new Zl,n))}a(Ey,"searchTransactionsByTimestamp");function w1(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[Oo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,my(e,i))}return Object.fromEntries(r)}a(w1,"searchTransactionsByUsername");function C1(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=b1.equals(e,Oo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Oo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=my(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);hy(u,"records",r,l,o),hy(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(C1,"searchTransactionsByHashValues");function hy(e,t,r,s,n){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(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new Zl(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Zl(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(hy,"loopRecords");function my(e,t){let r=[];try{let s=e.dbis[Oo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new Zl,i);r.push(o)}}catch(i){y1.warn(i)}return r}catch(s){throw s}}a(my,"batchSearchTransactions")});var gy=T((Wae,Ty)=>{"use strict";var{getSchemaPath:Yae}=Be(),Kae=Ue(),{database:L1}=(fe(),Z(Ce));Ty.exports={writeTransaction:D1};async function D1(e,t,r){return L1({database:e,table:t}).transaction(r)}a(D1,"writeTransaction")});var Ny=T((zae,Oy)=>{"use strict";var{getSchemaPath:Ry}=Be(),Ay=Ue();Oy.exports={flush:U1,resetReadTxn:M1};async function U1(e,t){return(await Ay.openEnvironment(Ry(e,t),t.toString())).flushed}a(U1,"flush");async function M1(e,t){try{(await Ay.openEnvironment(Ry(e,t),t.toString())).resetReadTxn()}catch{}}a(M1,"resetReadTxn")});var wy=T((Xae,Iy)=>{"use strict";var{Readable:P1}=require("stream"),{getDatabases:v1}=(fe(),Z(Ce)),{readSync:B1,openSync:H1,createReadStream:by}=require("fs"),{open:q1}=require("lmdb"),yy=Cl(),F1=Dl(),{AUDIT_STORE_OPTIONS:G1}=(uo(),Z(aO)),{INTERNAL_DBIS_NAME:x1,AUDIT_STORE_NAME:k1}=ze();Iy.exports=$1;var mm=32768,V1=100;async function $1(e){let t=e.database||e.schema||"data",r=v1()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=q1({noSync:!0,maxDbs:F1.MAX_DBS}),f,E=d.openDB(x1,new yy(!1)),h=l.useReadTransaction(),p=0,S=a(async function(b,O){O.encoding="binary",O.encoder=void 0;let Y=d.openDB(b,O),Q=l.openDB(b,O);for(let{key:F,version:w,value:K}of Q.getRange({transaction:h,versions:Q.useVersions}))f=Y.put(F,K,w),p++%V1===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:b,value:O}of l.getRange({transaction:h,start:!1}))if(n.some(Y=>b.startsWith?.(Y+"/"))){E.put(b,O);let[,Y]=b.split("/"),Q=!Y,F=new yy(!Q,Q);await S(b,F)}e.include_audit&&await S(k1,Object.assign({},G1)),await f;let R=by(d.path);return R.headers=u(),R.on("close",()=>{h.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=H1(o.path);return o.transaction(()=>{let _=Buffer.alloc(mm);B1(c,_,0,mm),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=by(null,{fd:c,start:mm}),f=new P1.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",s),_}}a($1,"getBackup")});var Dy=T((Zae,Ly)=>{"use strict";var Y1=G(),{handleHDBError:K1}=j(),W1=WO(),Q1=xl(),z1=Fh(),J1=kN(),X1=cc(),j1=Kh(),Z1=Eb(),eK=Ob(),tK=_c(),rK=Db(),sK=kb(),nK=zb(),iK=Xb(),oK=ty(),aK=cy(),cK=em(),uK=dy(),lK=Sy(),_K=gy(),Cy=Ny(),dK=wy(),pm=class extends W1{static{a(this,"LMDBBridge")}async searchByConditions(t){return rK(t)}async getDataByHash(t){return await j1(t)}async searchByHash(t){return await Z1(t)}async getDataByValue(t,r){return await eK(t,r)}async searchByValue(t){return await tK(t)}async createSchema(t){return await J1(t)}async dropSchema(t){return await sK(t)}async createTable(t,r){return await nK(t,r)}async dropTable(t){return await cK(t)}async createAttribute(t){return await Q1(t)}async createRecords(t){return await z1(t)}async updateRecords(t){return await iK(t)}async upsertRecords(t){try{return await oK(t)}catch(r){throw K1(r,null,null,Y1.ERR,r)}}async deleteRecords(t){return await X1(t)}async dropAttribute(t){return await uK(t)}async deleteAuditLogsBefore(t){return await aK(t)}async readAuditLog(t){return await lK(t)}writeTransaction(t,r,s){return _K.writeTransaction(t,r,s)}flush(t,r){return Cy.flush(t,r)}resetReadTxn(t,r){return Cy.resetReadTxn(t,r)}getBackup(t){return dK(t)}};Ly.exports=pm});var Gy={};ve(Gy,{ResourceBridge:()=>gm});function Rm({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 My(e,t){let r=Ps(e),s=Rm(e,r);if(!r)throw new us.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;Ge(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:n,select:s},i);return l=l&&hl(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 Ps(e){let t=e.database||e.schema||EK,r=ls()[t];if(!r)throw(0,us.handleHDBError)(new Error,fK.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Py(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*vy(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var By,e_,us,Hy,qy,_s,Sm,Tm,Fy,fK,EK,hK,mK,Uy,gm,xy=Te(()=>{"use strict";By=D(Dy()),e_=D(Ro()),us=D(j());fe();Hy=D(ec()),qy=D(ic()),_s=D(y()),Sm=D(nn()),Tm=D(cs()),Fy=D($());mi();ml();({HDB_ERROR_MSGS:fK}=us.hdb_errors),EK="data",hK=1e4,mK=10,gm=class extends By.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Uy=this}async searchByConditions(t){let r=(0,e_.default)(t,"conditions");if(r)throw(0,us.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=Ps(t);if(!s)throw new us.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Rm(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new us.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}tt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await Ps(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Ps(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],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}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Ps(t).dropTable()}createSchema(t){return mc({database:t.schema,table:null}),Sm.signalSchemaChange(new Tm.SchemaEventMsg(process.pid,_s.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Am(t.schema),Sm.signalSchemaChange(new Tm.SchemaEventMsg(process.pid,_s.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,Uy.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,Hy.default)(t);(0,qy.default)(t,s,r.primaryKey);let n,i=ls()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Ge(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.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=hl(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:n,skipped_hashes:_}})}async deleteRecords(t){let r=ls()[t.schema][t.table],s={user:t.hdb_user};return Ge(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return Py(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=ls()[t.schema][t.table];if(!r.createdTimeProperty)throw new us.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:_s.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!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,Fy.async_set_timeout)(mK),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%hK===0&&await _();return u.length>0&&await _(),n?Py(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,e_.default)(t,"hashes");if(r)throw r;return My(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of My(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&_s.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,e_.default)(t,"value");if(s)throw s;let n=Ps(t);if(!n)throw new us.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===_s.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Rm(t,n)})}async getDataByValue(t,r){let s=new Map,n=Ps(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){Ps({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Ps(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Ps(t),s={};switch(t.search_type){case _s.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[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 s;case _s.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of vy(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return vy(r,t.search_values?.[0],t.search_values?.[1])}}};a(Rm,"getSelect");a(My,"getRecords");a(Ps,"getTable");a(Py,"createDeleteResponse");a(vy,"groupRecordsInHistory")});var ds=T((ice,ky)=>{"use strict";var{ResourceBridge:pK}=(xy(),Z(Gy)),SK=X();SK.initSync();var t_;function TK(){return t_||(t_=new pK,t_)}a(TK,"getBridge");ky.exports=TK()});var Ky=T((ace,Yy)=>{"use strict";var Vy=require("lodash"),pc=require("mathjs"),gK=require("jsonata"),$y=$();Yy.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Vy.uniqWith(e,Vy.isEqual):e,searchJSON:RK,mad:Sc.bind(null,pc.mad),mean:Sc.bind(null,pc.mean),mode:Sc.bind(null,pc.mode),prod:Sc.bind(null,pc.prod),median:Sc.bind(null,pc.median)};function Sc(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Sc,"aggregateFunction");function RK(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($y.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),$y.isEmpty(this.__ala__.res[r])){let s=gK(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(RK,"searchJSON")});var Qy=T((uce,Wy)=>{"use strict";var rt=require("moment"),Om="YYYY-MM-DDTHH:mm:ss.SSSZZ";rt.suppressDeprecationWarnings=!0;Wy.exports={current_date:()=>rt().utc().format("YYYY-MM-DD"),current_time:()=>rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return rt(e).utc().format("YYYY");case"month":return rt(e).utc().format("MM");case"day":return rt(e).utc().format("DD");case"hour":return rt(e).utc().format("HH");case"minute":return rt(e).utc().format("mm");case"second":return rt(e).utc().format("ss");case"millisecond":return rt(e).utc().format("SSS");default:break}},date:e=>rt(e).utc().format(Om),date_format:(e,t)=>rt(e).utc().format(t),date_add:(e,t,r)=>rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=rt(e).utc(),n=rt(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>rt().utc().valueOf(),get_server_time:()=>rt().format(Om),offset_utc:(e,t)=>rt(e).utc().utcOffset(t).format(Om)}});var jy=T((lce,Xy)=>{"use strict";var AK=require("@turf/area"),OK=require("@turf/length"),NK=require("@turf/circle"),bK=require("@turf/difference"),yK=require("@turf/distance"),IK=require("@turf/boolean-contains"),wK=require("@turf/boolean-equal"),CK=require("@turf/boolean-disjoint"),LK=require("@turf/helpers"),zy=y(),_e=$();Xy.exports={geoArea:DK,geoLength:UK,geoCircle:MK,geoDifference:PK,geoDistance:Jy,geoNear:vK,geoContains:BK,geoEqual:HK,geoCrosses:qK,geoConvert:FK};var Nm="geo1 is required",bm="geo2 is required";function DK(e){if(_e.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),AK.default(e)}a(DK,"geoArea");function UK(e,t){if(_e.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),OK.default(e,{units:t||"kilometers"})}a(UK,"geoLength");function MK(e,t,r){if(_e.isEmpty(e))throw new Error("point is required");if(_e.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),NK.default(e,t,{units:r||"kilometers"})}a(MK,"geoCircle");function PK(e,t){if(_e.isEmpty(e))throw new Error("poly1 is required");if(_e.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),bK(e,t)}a(PK,"geoDifference");function Jy(e,t,r){if(_e.isEmpty(e))throw new Error("point1 is required");if(_e.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),yK.default(e,t,{units:r||"kilometers"})}a(Jy,"geoDistance");function vK(e,t,r,s){if(_e.isEmpty(e))throw new Error("point1 is required");if(_e.isEmpty(t))throw new Error("point2 is required");if(_e.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return Jy(e,t,s)<=r}a(vK,"geoNear");function BK(e,t){if(_e.isEmpty(e))throw new Error(Nm);if(_e.isEmpty(e))throw new Error(bm);return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),IK.default(e,t)}a(BK,"geoContains");function HK(e,t){if(_e.isEmpty(e))throw new Error(Nm);if(_e.isEmpty(e))throw new Error(bm);return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),wK.default(e,t)}a(HK,"geoEqual");function qK(e,t){if(_e.isEmpty(e))throw new Error(Nm);if(_e.isEmpty(e))throw new Error(bm);return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),!CK.default(e,t)}a(qK,"geoCrosses");function FK(e,t,r){if(_e.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(_e.isEmpty(t))throw new Error("geo_type is required");if(_e.isEmpty(zy.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(zy.GEO_CONVERSION_ENUM).join(",")}`);return LK[t](e,r)}a(FK,"geoConvert")});var r_=T((dce,Zy)=>{var Ni=Ky(),Tr=Qy(),vs=jy();Zy.exports=e=>{e.aggr.mad=e.aggr.MAD=Ni.mad,e.aggr.mean=e.aggr.MEAN=Ni.mean,e.aggr.mode=e.aggr.MODE=Ni.mode,e.aggr.prod=e.aggr.PROD=Ni.prod,e.aggr.median=e.aggr.MEDIAN=Ni.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ni.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ni.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Tr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Tr.current_time,e.fn.extract=e.fn.EXTRACT=Tr.extract,e.fn.date=e.fn.DATE=Tr.date,e.fn.date_format=e.fn.DATE_FORMAT=Tr.date_format,e.fn.date_add=e.fn.DATE_ADD=Tr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Tr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Tr.date_diff,e.fn.now=e.fn.NOW=Tr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Tr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Tr.get_server_time,e.fn.getdate=e.fn.GETDATE=Tr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Tr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=vs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=vs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=vs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=vs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=vs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=vs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=vs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=vs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=vs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=vs.geoNear}});var sI=T((fce,rI)=>{"use strict";var Tc=require("lodash"),Nt=require("alasql");Nt.options.cache=!1;var GK=r_(),eI=require("clone"),s_=require("recursive-iterator"),re=G(),ie=$(),No=ds(),xK=y(),{hdb_errors:kK}=j(),{getDatabases:tI}=(fe(),Z(Ce)),VK="IS NULL",Es="There was a problem performing this search. Please check the logs and try again.";GK(Nt);var ym=class{static{a(this,"SQLSearch")}constructor(t,r){if(ie.isEmpty(t))throw re.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(),ie.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ie.isEmptyOrZeroLength(s))return re.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw re.error("Error thrown from checkEmptySQL in SQLSearch class method search."),re.error(s),new Error(Es)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw re.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),re.error(s),new Error(Es)}if(Object.keys(this.data).length===0)return re.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw re.error("Error thrown from processJoins in SQLSearch class method search."),re.error(s),new Error(Es)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw re.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),re.error(s),new Error(Es)}try{return t=await this._finalSQL(),t}catch(s){throw re.error("Error thrown from finalSQL in SQLSearch class method search."),re.error(s),new Error(Es)}}_getColumns(){let t=new s_(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(eI(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Tc.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=tI()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ie.isEmpty(this.statement.where)){re.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new s_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ie.isEmpty(r)&&r.right)if(ie.isNotEmptyAndHasValue(r.right.value)){let s=ie.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new Nt.yy.LogicValue({value:s}):r.right instanceof Nt.yy.StringValue&&!ie.isEmpty(s)&&ie.autoCasterIsNumberCheck(s.toString())&&(r.right=new Nt.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ie.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Nt.yy.LogicValue({value:i}):s instanceof Nt.yy.StringValue&&ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Nt.yy.NumValue({value:i}))});if(t){re.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new s_(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!ie.isEmpty(xK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ie.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ie.isEmptyOrZeroLength(r.left.columnid)||ie.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(ie.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"=":!ie.isEmpty(r.right.value)||!ie.isEmpty(r.left.value)?s.add(ie.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)s.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,...s])}}}_setAliasesForColumns(){if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&ie.isEmptyOrZeroLength(this.statement.from)&&ie.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Tc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(ie.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ie.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&!ie.isEmptyOrZeroLength(this.columns.columns))return t;if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&ie.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Nt.promise(r)}catch(r){throw re.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),re.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(eI(s))})}_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,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(ie.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(VK)>-1&&this.tables.forEach(n=>{let i={columnid:tI()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Tc.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!ie.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!ie.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await No.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw re.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(Es)}else try{c.search_attribute=n.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 No.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(E)))}))}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(Es)}else if(!ie.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!ie.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 No.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,ie.autoCast(p)));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(p)))}}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),re.error(l),new Error(Es)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await No.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ie.autoCast(d)));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(d)))}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),re.error(l),new Error(Es)}}}_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 Nt.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(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.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 s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new Nt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Nt.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 n=t.is_func?new Nt.yy.FuncValue:new Nt.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.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={};n.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:"",_="";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&&(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,n);f=await Nt.promise(h,t),t=null}catch(E){throw re.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),re.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=Tc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,R=p.length;S<R;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 s=[],n=new s_(this.columns);for(let{node:i}of n)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)&&s.push(o)}}s=Tc.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw re.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),re.error(i),new Error(Es)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await No.getDataByHash(c),_=n.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=n.columns[h],S=E[p]===void 0?null:E[p];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw re.error("Error thrown from getDataByHash function in SQLSearch class method getData."),re.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(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.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 n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();re.trace(`Final SQL: ${n}`),s=await Nt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),re.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw re.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),re.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return re.error(kK.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),re.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${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=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await No.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw re.error("There was an error when processing this SQL operation. Check your logs"),re.error(o),new Error(Es)}}return Object.values(Object.values(this.data)[0].__merged_data)}};rI.exports=ym});var Fr=T((hce,nI)=>{"use strict";var $K=YO();nI.exports={searchByConditions:KK,searchByHash:WK,searchByValue:QK,search:zK};var Im=ds(),{transformReq:wm}=$(),YK=sI();async function KK(e){return wm(e),Im.searchByConditions(e)}a(KK,"searchByConditions");async function WK(e){wm(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Im.searchByHash(e))r&&t.push(r);return t}a(WK,"searchByHash");async function QK(e){wm(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Im.searchByValue(e))t.push(r);return t}a(QK,"searchByValue");function zK(e,t){try{let r=new $K(e);r.validate(),new YK(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(zK,"search")});var cn=T((pce,cI)=>{"use strict";var gc=require("crypto"),JK=X(),{CONFIG_PARAMS:XK}=y(),oI="aes-256-cbc",jK=32,ZK=16,Cm=64,aI=32,eW=Cm+aI,iI=new Map;cI.exports={encrypt:tW,decrypt:rW,createNatsTableStreamName:sW};function tW(e){let t=gc.randomBytes(jK),r=gc.randomBytes(ZK),s=gc.createCipheriv(oI,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(tW,"encrypt");function rW(e){let t=e.substr(0,Cm),r=e.substr(Cm,aI),s=e.substr(eW,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=gc.createDecipheriv(oI,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(rW,"decrypt");function sW(e,t){let r=JK.get(XK.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=iI.get(r);return s||(s=gc.createHash("md5").update(r).digest("hex"),iI.set(r,s)),s}a(sW,"createNatsTableStreamName")});var bi=T((gce,lI)=>{"use strict";var Tce=Fr(),n_=G(),uI=Fl(),nW=cn(),i_=$(),{handleHDBError:o_,hdb_errors:iW}=j(),{HDB_ERROR_MSGS:a_,HTTP_STATUS_CODES:Lm}=iW,oW=X();oW.initSync();var{getDatabases:Dm}=(fe(),Z(Ce));lI.exports={describeAll:aW,describeTable:c_,describeSchema:cW};async function aW(e){try{let t=i_.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Dm(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)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){n_.error(E)}}let _={};for(let l in c)t||s?(_[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||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return n_.error("Got an error in describeAll"),n_.error(t),o_(new Error,a_.DESCRIBE_ALL_ERR)}}a(aW,"describeAll");async function c_(e,t){i_.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=uI.describe_table(e);if(i)throw i;let c=Dm()[r];if(!c)throw o_(new Error,a_.SCHEMA_NOT_FOUND(e.schema),Lm.NOT_FOUND);let u=c[s];if(!u)throw o_(new Error,a_.TABLE_NOT_FOUND(e.schema,e.table),Lm.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(n){let f={};n.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=nW.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){n_.warn(`unable to stat table dbi due to ${f}`)}return d}a(c_,"descTable");async function cW(e){i_.transformReq(e);let t=uI.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 s=e.schema.toString(),i=Dm()[s];if(!i)throw o_(new Error,a_.SCHEMA_NOT_FOUND(e.schema),Lm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),i_.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(cW,"describeSchema")});var xn=T((Nce,hI)=>{var uW=Si(),{callbackify:dI,promisify:lW}=require("util"),{getDatabases:fI}=(fe(),Z(Ce));hI.exports={setSchemaDataToGlobal:_I,getTableSchema:_W,getSystemSchema:dW,setSchemaDataToGlobalAsync:lW(_I)};var EI=bi(),Ace=dI(EI.describeAll),Oce=dI(EI.describeTable);function _I(e){global.hdb_schema=fI(),e&&e()}a(_I,"setSchemaDataToGlobal");function _W(e,t,r){let s=fI()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(_W,"getTableSchema");function dW(){return uW}a(dW,"getSystemSchema")});var Gr=T((yce,TI)=>{"use strict";var l_=Lh(),bt=$(),fW=require("util"),__=ds(),EW=xn(),mI=G(),{handleHDBError:yi,hdb_errors:hW}=j(),{HTTP_STATUS_CODES:Ii}=hW,mW=fW.promisify(EW.getTableSchema),pW="updated",pI="inserted",SI="upserted";TI.exports={insert:TW,update:gW,upsert:RW,validation:SW,flush:AW};async function SW(e){if(bt.isEmpty(e))throw new Error("invalid update parameters defined.");if(bt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(bt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await mW(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 s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&bt.isEmptyOrZeroLength(c[s]))throw mI.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!bt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw mI.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!bt.isEmpty(c[s])&&c[s]!==""&&n.has(bt.autoCast(c[s]))&&(c.skip=!0),n.add(bt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(SW,"validation");async function TW(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=l_(e);if(t)throw yi(new Error,t.message,Ii.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw yi(new Error,r,Ii.BAD_REQUEST);let s=await __.createRecords(e);return u_(pI,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(TW,"insertData");async function gW(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=l_(e);if(t)throw yi(new Error,t.message,Ii.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw yi(new Error,r,Ii.BAD_REQUEST);let s=await __.updateRecords(e);return bt.isEmpty(s.existing_rows)?u_(pW,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):u_(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(gW,"updateData");async function RW(e){if(e.operation!=="upsert")throw yi(new Error,"invalid operation, must be upsert",Ii.INTERNAL_SERVER_ERROR);let t=l_(e);if(t)throw yi(new Error,t.message,Ii.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw yi(new Error,r,Ii.BAD_REQUEST);let s=await __.upsertRecords(e);return u_(SI,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(RW,"upsertData");function u_(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===pI?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===SI?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(u_,"returnObject");function AW(e){return bt.transformReq(e),__.flush(e.schema,e.table)}a(AW,"flush")});var Mm=T((wce,AI)=>{var OW=xe(),Um=require("joi"),{hdb_table:NW,hdb_database:gI}=Ls(),RI={schema:gI,database:gI,table:NW},bW={date:Um.date().iso().required()},yW={timestamp:Um.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};AI.exports=function(e,t){let r=t==="timestamp"?{...RI,...yW}:{...RI,...bW},s=Um.object(r);return OW.validateBySchema(e,s)}});var bI=T((Cce,NI)=>{var IW=xe(),Pm=require("joi"),{hdb_table:wW,hdb_database:OI}=Ls(),CW=Pm.object({schema:OI,database:OI,table:wW,hash_values:Pm.array().required(),ids:Pm.array()});NI.exports=function(e){return IW.validateBySchema(e,CW)}});var II=T((Lce,yI)=>{"use strict";var vm=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},Bm=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},Hm=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};yI.exports={InsertObject:vm,NoSQLSeachObject:Bm,DeleteResponseObject:Hm}});var Li=T((Uce,UI)=>{"use strict";var CI=Mm(),LW=bI(),wi=$(),wI=require("moment"),LI=G(),{promisify:DW,callbackify:UW}=require("util"),Ci=y(),MW=xn(),qm=DW(MW.getTableSchema),Fm=ds(),{DeleteResponseObject:PW}=II(),{handleHDBError:kn,hdb_errors:vW}=j(),{HDB_ERROR_MSGS:d_,HTTP_STATUS_CODES:Vn}=vW,BW="records successfully deleted",HW=UW(DI);UI.exports={delete:HW,deleteRecord:DI,deleteFilesBefore:qW,deleteAuditLogsBefore:FW};async function qW(e){let t=CI(e,"date");if(t)throw kn(t,t.message,Vn.BAD_REQUEST,void 0,void 0,!0);if(wi.transformReq(e),!wI(e.date,wI.ISO_8601).isValid())throw kn(new Error,d_.INVALID_DATE,Vn.BAD_REQUEST,Ci.LOG_LEVELS.ERROR,d_.INVALID_DATE,!0);let s=wi.checkSchemaTableExist(e.schema,e.table);if(s)throw kn(new Error,s,Vn.NOT_FOUND,Ci.LOG_LEVELS.ERROR,s,!0);let n=await Fm.deleteRecordsBefore(e);if(await qm(e.schema,e.table),LI.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(qW,"deleteFilesBefore");async function FW(e){let t=CI(e,"timestamp");if(t)throw kn(t,t.message,Vn.BAD_REQUEST,void 0,void 0,!0);if(wi.transformReq(e),isNaN(e.timestamp))throw kn(new Error,d_.INVALID_VALUE("Timestamp"),Vn.BAD_REQUEST,Ci.LOG_LEVELS.ERROR,d_.INVALID_VALUE("Timestamp"),!0);let r=wi.checkSchemaTableExist(e.schema,e.table);if(r)throw kn(new Error,r,Vn.NOT_FOUND,Ci.LOG_LEVELS.ERROR,r,!0);let s=await Fm.deleteAuditLogsBefore(e);return await qm(e.schema,e.table),LI.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(FW,"deleteAuditLogsBefore");async function DI(e){e.ids&&(e.hash_values=e.ids);let t=LW(e);if(t)throw kn(t,t.message,Vn.BAD_REQUEST,void 0,void 0,!0);wi.transformReq(e);let r=wi.checkSchemaTableExist(e.schema,e.table);if(r)throw kn(new Error,r,Vn.NOT_FOUND,Ci.LOG_LEVELS.ERROR,r,!0);try{await qm(e.schema,e.table);let s=await Fm.deleteRecords(e);return wi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${BW}`),s}catch(s){if(s.message===Ci.SEARCH_NOT_FOUND_MESSAGE){let n=new PW;return n.message=Ci.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(DI,"deleteRecord")});var f_=T((Pce,vI)=>{var GW=require("crypto"),MI=9;function xW(e){let t=VW(MI),r=PI(e+t);return t+r}a(xW,"createHash");function kW(e,t){let r=e.substr(0,MI),s=r+PI(t+r);return e===s}a(kW,"validateHash");function VW(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(VW,"generateSalt");function PI(e){return GW.createHash("md5").update(e).digest("hex")}a(PI,"md5");vI.exports={hash:xW,validate:kW}});var HI=T((Bce,BI)=>{var Gm=xe(),Ft={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 $W(e){return Ft.password.presence=!0,Ft.username.presence=!0,Ft.role.presence=!0,Ft.active.presence=!0,Gm.validateObject(e,Ft)}a($W,"addUserValidation");function YW(e){return Ft.password.presence=!1,Ft.username.presence=!0,Ft.role.presence=!1,Ft.active.presence=!1,Gm.validateObject(e,Ft)}a(YW,"alterUserValidation");function KW(e){return Ft.password.presence=!1,Ft.username.presence=!0,Ft.role.presence=!1,Ft.active.presence=!1,Gm.validateObject(e,Ft)}a(KW,"dropUserValidation");BI.exports={addUserValidation:$W,alterUserValidation:YW,dropUserValidation:KW}});var ke=T((Fce,FI)=>{"use strict";var{platform:qce}=require("os"),WW="nats-server.zip",xm="nats-server",QW=process.platform==="win32"?`${xm}.exe`:xm,km="HDB",zW=/^[^\s.,*>]+$/,qI="__request__",JW=a(e=>`${e}.${qI}`,"REQUEST_SUBJECT"),XW={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},jW={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},ZW={HUB:"hub.pid",LEAF:"leaf.pid"},eQ={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},tQ={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:km,deliver_subject:"__HDB__.WORKQUEUE"},rQ={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:km,deliver_subject:"HDB.SCHEMAQUEUE"},sQ={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:km,deliver_subject:"HDB.USERQUEUE"},nQ={SUCCESS:"success",ERROR:"error"},iQ={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},oQ={TXN:"txn",MSGID:"msgid"},bo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},aQ={[bo.ERR]:1,[bo.WRN]:2,[bo.INF]:3,[bo.DBG]:4,[bo.TRC]:5},cQ={debug:"-D",trace:"-DVV"};FI.exports={NATS_SERVER_ZIP:WW,NATS_SERVER_NAME:xm,NATS_BINARY_NAME:QW,PID_FILES:ZW,NATS_CONFIG_FILES:jW,SERVER_SUFFIX:eQ,WORK_QUEUE_CONSUMER_NAMES:tQ,SCHEMA_QUEUE_CONSUMER_NAMES:rQ,USER_QUEUE_CONSUMER_NAMES:sQ,NATS_TERM_CONSTRAINTS_RX:zW,REQUEST_SUFFIX:qI,UPDATE_REMOTE_RESPONSE_STATUSES:nQ,CLUSTER_STATUS_STATUSES:iQ,REQUEST_SUBJECT:JW,SUBJECT_PREFIXES:oQ,MSG_HEADERS:XW,LOG_LEVELS:bo,LOG_LEVEL_FLAGS:cQ,LOG_LEVEL_HIERARCHY:aQ}});var xI=T((xce,GI)=>{"use strict";var uQ={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,String.fromCharCode(13,10)),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,String.fromCharCode(13,10))},lQ="certificate.pem",_Q="privateKey.pem",dQ="ca.pem";GI.exports={CERTIFICATE_VALUES:uQ,CERTIFICATE_PEM_NAME:lQ,PRIVATEKEY_PEM_NAME:_Q,CA_PEM_NAME:dQ}});var $m=T((Vce,KI)=>{"use strict";var YI=require("fs-extra"),ue=require("joi"),fQ=require("os"),{boolean:we,string:Bs,number:yt,array:Vm}=ue.types(),{totalmem:kI}=require("os"),yo=require("path"),EQ=G(),h_=$(),kce=xI(),VI=y(),hQ=xe(),$I="log",mQ="components",pQ="Invalid logging.rotation.maxSize unit. Available units are G, M or K",SQ="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",TQ="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",gQ="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",RQ="rootPath config parameter is undefined",AQ="clustering.enabled config parameter is undefined",Di=yt.min(0).required(),m_=Vm.items({host:Bs.required(),port:Di}).empty(null),un;KI.exports={configValidator:OQ,routesValidator:CQ,route_constraints:m_};function OQ(e){if(un=e.rootPath,h_.isEmpty(un))throw RQ;let t=we.required(),r=yt.min(0).max(1e3).empty(null).default(wQ),s=Bs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(E_),n=Bs.optional().empty(null),i=Bs.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ue.string().empty(null).default(E_),c=ue.custom(bQ).empty(null).default(E_),u=e.clustering?.enabled;if(h_.isEmpty(u))throw AQ;let _;return u===!0?_=ue.object({enabled:t,hubServer:ue.object({cluster:ue.object({name:ue.required().empty(null),network:ue.object({port:Di,routes:m_}).required()}).required(),leafNodes:ue.object({network:ue.object({port:Di}).required()}).required(),network:ue.object({port:Di}).required()}).required(),leafServer:ue.object({network:ue.object({port:Di,routes:m_}).required(),streams:ue.object({maxAge:yt.min(120).allow(null).optional(),maxBytes:yt.min(1).allow(null).optional(),maxMsgs:yt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ue.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:we.optional(),databaseLevel:we.optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:we.required(),verify:we.optional()}),user:Bs.optional().empty(null)}).required():_=ue.object({enabled:t,tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:we.required()})}).required(),ue.object({authentication:ue.object({authorizeLocal:we,cacheTTL:yt.required(),enableSessions:we}),analytics:ue.object({aggregatePeriod:yt}),componentsRoot:s.optional(),clustering:_,localStudio:ue.object({enabled:t}).required(),logging:ue.object({auditAuthEvents:ue.object({logFailed:we,logSuccessful:we}),file:we.required(),level:ue.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ue.object({enabled:we.optional(),compress:we.optional(),interval:Bs.custom(IQ).optional().empty(null),maxSize:Bs.custom(yQ).optional().empty(null),path:Bs.optional().empty(null).default(E_)}).required(),root:s,stdStreams:we.required(),auditLog:we.required()}).required(),operationsApi:ue.object({network:ue.object({cors:we.optional(),corsAccessList:Vm.optional(),headersTimeout:yt.min(1).optional(),keepAliveTimeout:yt.min(1).optional(),port:yt.optional().empty(null),securePort:yt.optional().empty(null),timeout:yt.min(1).optional()}).optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:Bs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ue.object({network:ue.object({port:Di,securePort:Di}).required(),webSocket:we.optional(),requireAuthentication:we.optional()}),http:ue.object({compressionThreshold:yt.optional(),cors:we.optional(),corsAccessList:Vm.optional(),headersTimeout:yt.min(1).optional(),port:yt.min(0).optional().empty(null),securePort:yt.min(0).optional().empty(null)}).required(),threads:r.optional(),storage:ue.object({writeAsync:we.required(),overlappingSync:we.optional(),caching:we.optional(),compression:we.optional(),noReadAhead:we.optional(),path:c,prefetchWrites:we.optional()}).required(),ignoreScripts:we.optional(),tls:ue.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(OQ,"configValidator");function NQ(e){return YI.existsSync(e)?null:`Specified path ${e} does not exist.`}a(NQ,"doesPathExist");function bQ(e,t){ue.assert(e,Bs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=NQ(e);if(r)return t.message(r)}a(bQ,"validatePath");function yQ(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(pQ);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(TQ):e}a(yQ,"validateRotationMaxSize");function IQ(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(SQ);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(gQ):e}a(IQ,"validateRotationInterval");function wQ(e,t){let r=t.state.path.join("."),s=fQ.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||kI();return i=Math.round(Math.min(i,kI())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),EQ.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(wQ,"setDefaultThreads");function E_(e,t){if(!h_.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(h_.isEmpty(un))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return yo.join(un,mQ);case"logging.root":return yo.join(un,$I);case"clustering.leafServer.streams.path":return yo.join(un,"clustering","leaf");case"storage.path":let s=yo.join(un,VI.LEGACY_DATABASES_DIR_NAME);return YI.existsSync(s)?s:yo.join(un,VI.DATABASES_DIR_NAME);case"logging.rotation.path":return yo.join(un,$I);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(E_,"setDefaultRoot");function CQ(e){let t=ue.object({routes:m_});return hQ.validateBySchema({routes:e},t)}a(CQ,"routesValidator")});var Rr=T((Kce,tw)=>{"use strict";var gr=y(),mt=$(),lt=G(),{configValidator:LQ,routesValidator:WI}=$m(),Xt=require("fs-extra"),DQ=require("yaml"),hs=require("path"),UQ=require("is-number"),zI=require("properties-reader"),MQ=require("lodash"),{handleHDBError:PQ}=j(),{HTTP_STATUS_CODES:vQ,HDB_ERROR_MSGS:p_}=Er(),Yce=require("minimist"),{server:BQ}=(fr(),Z(di)),{DATABASES_PARAM_CONFIG:Rc,CONFIG_PARAMS:ln,CONFIG_PARAM_MAP:ms}=gr,HQ="Unable to get config value because config is uninitialized",qQ="Config successfully initialized",FQ="Error backing up config file",GQ="Empty parameter sent to getConfigValue",JI=hs.join(gr.PACKAGE_ROOT,"config","yaml",gr.HDB_DEFAULT_CONFIG_FILE),xQ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",QI={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"},S_,It,T_;tw.exports={createConfigFile:kQ,getDefaultConfig:VQ,getConfigValue:jI,initConfig:Km,flattenConfig:Io,updateConfigValue:ZI,updateConfigObject:YQ,getConfiguration:QQ,setConfiguration:zQ,readConfigFile:Qm,getClusteringRoutes:JQ,initOldConfig:ew,getConfigFromFile:XQ,getConfigFilePath:Ui,addConfig:jQ,deleteConfigFromFile:ZQ,getConfigObj:ez};function kQ(e){let t=$n(JI);S_=Io(t.toJSON());let r;for(let o in e){let c=ms[o.toLowerCase()];if(c===ln.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=Ym(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){lt.error(l)}}}r&&XI(t,r),Wm(t);let s=t.toJSON();It=Io(s);let n=t.getIn(["rootPath"]),i=hs.join(n,gr.HDB_CONFIG_FILE);Xt.createFileSync(i),Xt.writeFileSync(i,String(t)),lt.trace(`Config file written to ${i}`)}a(kQ,"createConfigFile");function XI(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!mt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Rc.TABLES))for(let i in s[n][Rc.TABLES])for(let o in s[n][Rc.TABLES][i]){let c=s[n][Rc.TABLES][i][o],u=[ln.DATABASES,n,Rc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[ln.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){lt.error("Error parsing schemas CLI/env config arguments",s)}}a(XI,"setSchemasConfig");function VQ(e){if(S_===void 0){let r=$n(JI);S_=Io(r.toJSON())}let t=ms[e.toLowerCase()];if(t!==void 0)return S_[t.toLowerCase()]}a(VQ,"getDefaultConfig");function jI(e){if(e==null){lt.error(GQ);return}if(It===void 0){lt.trace(HQ);return}let t=ms[e.toLowerCase()];if(t!==void 0)return It[t.toLowerCase()]}a(jI,"getConfigValue");function Ui(e=mt.getPropsFilePath()){let t=mt.getEnvCliRootPath();return t?hs.join(t,gr.HDB_CONFIG_FILE):zI(e).get(gr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Ui,"getConfigFilePath");function Km(e=!1){if(It===void 0||e){let t;if(!mt.noBootFile()){t=mt.getPropsFilePath();try{Xt.accessSync(t,Xt.constants.F_OK|Xt.constants.R_OK)}catch(i){throw lt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Ui(t),s;if(r.includes("config/settings.js"))try{ew(r);return}catch(i){if(i.code!==gr.NODE_ERROR_CODES.ENOENT)throw i}try{s=$n(r)}catch(i){if(i.code===gr.NODE_ERROR_CODES.ENOENT){lt.trace(`HarperDB config file not found at ${r}.
5
- This can occur during early stages of install where the config file has not yet been created`);return}else throw lt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}$Q(s,r),Wm(s);let n=s.toJSON();if(BQ.config=n,It=Io(n),It.logging_rotation_rotate)for(let i in QI)It[i]&&lt.error(`Config ${QI[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);lt.trace(qQ)}}a(Km,"initConfig");function $Q(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],hs.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],hs.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],hs.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(lt.trace("Updating config file with missing config params"),Xt.writeFileSync(t,String(e)))}a($Q,"checkForUpdatedConfig");function Wm(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=LQ(t);if(r.error)throw p_.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)}a(Wm,"validateConfig");function YQ(e,t){It===void 0&&(It={});let r=ms[e.toLowerCase()];if(r===void 0){lt.trace(`Unable to update config object because config param '${e}' does not exist`);return}It[r.toLowerCase()]=t}a(YQ,"updateConfigObject");function ZI(e,t,r=void 0,s=!1,n=!1,i=!1){It===void 0&&Km();let o=jI(ms.hdb_root),c=hs.join(o,gr.HDB_CONFIG_FILE),u=$n(c),_;if(r===void 0&&e.toLowerCase()===ln.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=ms[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Ym(f,t);u.setIn([...E],h)}else for(let f in r){let E=ms[f.toLowerCase()];if(E===ln.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=gr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=Ym(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(R){lt.error(R)}}}_&&XI(u,_),Wm(u);let l=u.getIn(["rootPath"]),d=hs.join(l,gr.HDB_CONFIG_FILE);s===!0&&KQ(c,l),Xt.writeFileSync(d,String(u)),n&&(It=Io(u.toJSON())),lt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(ZI,"updateConfigValue");function KQ(e,t){try{let r=hs.join(t,"backup",`${gr.HDB_CONFIG_FILE}.bak`);Xt.copySync(e,r),lt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){lt.error(FQ),lt.error(r)}}a(KQ,"backupConfigFile");var WQ=["databases"];function Io(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)),T_=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i))if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!WQ.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!ln[u.toUpperCase()]&&ms[u]&&(n[ms[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(Io,"flattenConfig");function Ym(e,t){if(e===ln.CLUSTERING_NODENAME||e===ln.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(UQ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||mt.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 mt.autoCast(t)}a(Ym,"castConfigValue");function QQ(){let e=mt.getPropsFilePath(),t=Ui(e);return $n(t).toJSON()}a(QQ,"getConfiguration");async function zQ(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return ZI(void 0,void 0,n,!0),xQ}catch(i){throw typeof i=="string"||i instanceof String?PQ(i,i,vQ.BAD_REQUEST,void 0,void 0,!0):i}}a(zQ,"setConfiguration");function Qm(){let e=mt.getPropsFilePath();try{Xt.accessSync(e,Xt.constants.F_OK|Xt.constants.R_OK)}catch(s){if(!mt.noBootFile())throw lt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Ui(e);return $n(t).toJSON()}a(Qm,"readConfigFile");function $n(e){return DQ.parseDocument(Xt.readFileSync(e,"utf8"),{simpleKeys:!0})}a($n,"parseYamlDoc");function JQ(){let e=Qm(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=mt.isEmptyOrZeroLength(t)?[]:t;let r=WI(t);if(r)throw p_.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=mt.isEmptyOrZeroLength(s)?[]:s;let n=WI(s);if(n)throw p_.CONFIG_VALIDATION(n.message);if(!mt.isEmptyOrZeroLength(s)&&!mt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!mt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw p_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(JQ,"getClusteringRoutes");function ew(e){let t=zI(e);It={};for(let r in ms){let s=t.get(r.toUpperCase());if(mt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=ms[r].toLowerCase();n===ln.LOGGING_ROOT?It[n]=hs.dirname(s):It[n]=s}return It}a(ew,"initOldConfig");function XQ(e){let t=Qm();return MQ.get(t,e.replaceAll("_","."))}a(XQ,"getConfigFromFile");async function jQ(e,t){let r=$n(Ui());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Xt.writeFile(Ui(),String(r))}a(jQ,"addConfig");function ZQ(e){let t=Ui(mt.getPropsFilePath()),r=$n(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=hs.join(s,gr.HDB_CONFIG_FILE);Xt.writeFileSync(n,String(r))}a(ZQ,"deleteConfigFromFile");function ez(){return T_||(Km(),T_)}a(ez,"getConfigObj")});var sw=T((Qce,rw)=>{"use strict";var g_=y(),R_=class{static{a(this,"BaseLicense")}constructor(t=0,r=g_.RAM_ALLOCATION_ENUM.DEFAULT,s=g_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},zm=class extends R_{static{a(this,"ExtendedLicense")}constructor(t=0,r=g_.RAM_ALLOCATION_ENUM.DEFAULT,s=g_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};rw.exports={BaseLicense:R_,ExtendedLicense:zm}});var Ac=T((Jce,uw)=>{"use strict";var Co=require("fs-extra"),nw=f_(),iw=require("crypto"),tz=require("moment"),rz=require("uuid").v4,Gt=G(),Xm=require("path"),sz=$(),Yn=y(),nz=sw().ExtendedLicense,wo="invalid license key format",iz="061183",oz="mofi25",az="aes-256-cbc",cz=16,uz=32,ow=X();ow.initSync();var Jm;uw.exports={validateLicense:aw,generateFingerPrint:_z,licenseSearch:cw,getLicense:Ez};function jm(){return Xm.join(ow.getHdbBasePath(),Yn.LICENSE_KEY_DIR_NAME,Yn.LICENSE_FILE_NAME)}a(jm,"getLicenseDirPath");function lz(){let e=jm();return Xm.join(e,Yn.LICENSE_FILE_NAME)}a(lz,"getLicenseFilePath");function Zm(){let e=jm();return Xm.join(e,Yn.REG_KEY_FILE_NAME)}a(Zm,"getFingerPrintFilePath");async function _z(){let e=Zm();try{return await Co.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await dz();throw Gt.error(`Error writing fingerprint file to ${e}`),Gt.error(t),new Error("There was an error generating the fingerprint")}}a(_z,"generateFingerPrint");async function dz(){let e=rz(),t=nw.hash(e),r=Zm();try{await Co.mkdirp(jm()),await Co.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Gt.error(`Error writing fingerprint file to ${r}`),Gt.error(s),new Error("There was an error generating the fingerprint")}return t}a(dz,"writeFingerprint");function aw(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Yn.RAM_ALLOCATION_ENUM.DEFAULT,version:Yn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Gt.error("empty license key passed to validate."),r;let s=Zm(),n=!1;try{n=Co.statSync(s)}catch(i){Gt.error(i)}if(n){let i;try{i=Co.readFileSync(s,"utf8")}catch{Gt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(oz),c=o[1];c=Buffer.concat([Buffer.from(c)],cz);let u=Buffer.concat([Buffer.from(i)],uz),_=iw.createDecipheriv(az,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=fz(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(wo),Gt.error(wo),new Error(wo)}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(wo),Gt.error(wo),new Error(wo)}else r.exp_date=l;r.exp_date<tz().valueOf()&&(r.valid_date=!1),nw.validate(o[1],`${iz}${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||Gt.error("Invalid licence"),r}a(aw,"validateLicense");function fz(e,t){try{let r=iw.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Gt.warn("Check old license failed")}}a(fz,"checkOldLicense");function cw(){let e=new nz,t=[];try{t=Co.readFileSync(lz(),"utf-8").split(Yn.NEW_LINE)}catch(r){r.code==="ENOENT"?Gt.info("no license file found"):Gt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(sz.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=aw(n.license_key,n.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(n){Gt.error("There was an error parsing the license string."),Gt.error(n),e.ram_allocation=Yn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Jm=e,e}a(cw,"licenseSearch");async function Ez(){return Jm||await cw(),Jm}a(Ez,"getLicense")});var xr=T((tue,bw)=>{"use strict";var fw="username is required",Ew="nothing to update, must supply active, role or password to update",hw="password cannot be an empty string",mw="If role is specified, it cannot be empty.",pw="active must be true or false";bw.exports={addUser:Oz,alterUser:Nz,dropUser:yz,getSuperUser:Lz,userInfo:Iz,listUsers:O_,listUsersExternal:wz,setUsersToGlobal:Do,findAndValidateUser:Ow,getClusterUser:Dz,USERNAME_REQUIRED:fw,ALTERUSER_NOTHING_TO_UPDATE:Ew,EMPTY_PASSWORD:hw,EMPTY_ROLE:mw,ACTIVE_BOOLEAN:pw};var Sw=Gr(),hz=Li(),rp=f_(),Tw=HI(),gw=Fr(),sp=nn(),Ar=$(),Rw=require("validate.js"),de=G(),{promisify:mz}=require("util"),np=cn(),lw=y(),_w=ke(),pz=Rr(),jce=X(),Zce=Ac(),Sz=Si(),{table:eue}=(fe(),Z(Ce)),{handleHDBError:Hs,hdb_errors:Tz}=j(),{HTTP_STATUS_CODES:qs,AUTHENTICATION_ERROR_MSGS:ep,HDB_ERROR_MSGS:Lo}=Tz,{UserEventMsg:ip}=cs(),tp=require("lodash"),{server:op}=(fr(),Z(di)),gz=G();op.getUser=Ow;var Aw={username:!0,active:!0,role:!0,password:!0},dw=new Map,A_=gw.searchByValue,Rz=gw.searchByHash,Az=mz(hz.delete);async function Oz(e){let t=Rw.cleanAttributes(e,Aw),r=Tw.addUserValidation(t);if(r)throw Hs(new Error,r.message,qs.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await A_(s),n=n&&Array.from(n)}catch(u){throw de.error("There was an error searching for a role in add user"),de.error(u),u}if(!n||n.length<1)throw Hs(new Error,Lo.ROLE_NAME_NOT_FOUND(t.role),qs.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Hs(new Error,Lo.DUP_ROLES_FOUND(t.role),qs.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=np.encrypt(t.password)),t.password=rp.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Sw.insert(i)}catch(u){throw de.error("There was an error searching for a user."),de.error(u),u}de.debug(o);try{await Do()}catch(u){throw de.error("Got an error setting users to global"),de.error(u),u}if(o.skipped_hashes.length===1)throw Hs(new Error,Lo.USER_ALREADY_EXISTS(t.username),qs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],sp.signalUserChange(new ip(process.pid)),`${c.username} successfully added`}a(Oz,"addUser");async function Nz(e){let t=Rw.cleanAttributes(e,Aw);if(Ar.isEmptyOrZeroLength(t.username))throw new Error(fw);if(Ar.isEmptyOrZeroLength(t.password)&&Ar.isEmptyOrZeroLength(t.role)&&Ar.isEmptyOrZeroLength(t.active))throw new Error(Ew);if(!Ar.isEmpty(t.password)&&Ar.isEmptyOrZeroLength(t.password.trim()))throw new Error(hw);if(!Ar.isEmpty(t.active)&&!Ar.isBoolean(t.active))throw new Error(pw);let r=bz(t.username);if(!Ar.isEmpty(t.password)&&!Ar.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=np.encrypt(t.password)),t.password=rp.hash(t.password)),t.role==="")throw new Error(mw);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 A_(i)||[])}catch(c){throw de.error("Got an error searching for a role."),de.error(c),c}if(!o||o.length===0){let c=Lo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw de.error(c),Hs(new Error,c,qs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Lo.ALTER_USER_DUP_ROLES(t.role);throw de.error(c),Hs(new Error,c,qs.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await Sw.update(s)}catch(i){throw de.error("Error during update."),de.error(i),i}try{await Do()}catch(i){throw de.error("Got an error setting users to global"),de.error(i),i}return sp.signalUserChange(new ip(process.pid)),n}a(Nz,"alterUser");function bz(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(bz,"isClusterUser");async function yz(e){try{let t=Tw.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Ar.isEmpty(global.hdb_users.get(e.username)))throw Hs(new Error,Lo.USER_NOT_EXIST(e.username),qs.NOT_FOUND,void 0,void 0,!0);let s;try{s=await Az(r)}catch(n){throw de.error("Got an error deleting a user."),de.error(n),n}de.debug(s);try{await Do()}catch(n){throw de.error("Got an error setting users to global."),de.error(n),n}return sp.signalUserChange(new ip(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(yz,"dropUser");async function Iz(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=tp.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await Rz(r)}catch(n){throw de.error("Got an error searching for a role."),de.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw de.error(r),r}return t}a(Iz,"userInfo");async function wz(){let e;try{e=await O_()}catch(t){throw de.error("Got an error listing users."),de.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(wz,"listUsersExternal");async function O_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await A_(e)}catch(o){throw de.error("Got an error searching for roles."),de.error(o),o}let r={};for(let o of t)r[o.id]=tp.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await A_(s)}catch(o){throw de.error("Got an error searching for users."),de.error(o),o}let i=new Map;for(let o of n)o=tp.cloneDeep(o),o.role=r[o.role],Cz(o.role),i.set(o.username,o);return i}catch(e){throw de.error("got an error listing users"),de.error(e),Ar.errorizeMessage(e)}return null}a(O_,"listUsers");function Cz(e){try{if(!e){de.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(Sz)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){de.error("Got an error trying to set system permissions."),de.error(t)}}a(Cz,"appendSystemTablesToRole");async function Do(){try{let e=await O_();global.hdb_users=e}catch(e){throw de.error(e),e}}a(Do,"setUsersToGlobal");async function Ow(e,t,r=!0){global.hdb_users||await Do();let s=global.hdb_users.get(e);if(!s)throw Hs(new Error,ep.GENERIC_AUTH_FAIL,qs.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Hs(new Error,ep.USER_INACTIVE,qs.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(dw.get(t)===s.password)return n;if(rp.validate(s.password,t))dw.set(t,s.password);else throw Hs(new Error,ep.GENERIC_AUTH_FAIL,qs.UNAUTHORIZED,void 0,void 0,!0)}return n}a(Ow,"findAndValidateUser");async function Lz(){global.hdb_users||await Do();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(Lz,"getSuperUser");async function Dz(){let e=await O_(),t=pz.getConfigFromFile(lw.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Ar.isEmpty(r)&&r?.role?.role===lw.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=np.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+_w.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+_w.SERVER_SUFFIX.ADMIN,r}a(Dz,"getClusterUser");var Nw=[];op.invalidateUser=function(e){for(let t of Nw)try{t(e)}catch(r){gz.error("Error invalidating user",r)}};op.onInvalidatedUser=function(e){Nw.push(e)}});var Nc=T((iue,Cw)=>{"use strict";var Mi=G(),Or=y(),Uz=UO(),sue=xn(),nue=bi(),Mz=xr(),{validateEvent:yw}=cs(),Oc=ds(),Pz=require("process"),{resetDatabases:vz}=(fe(),Z(Ce)),Bz={[Or.ITC_EVENT_TYPES.SCHEMA]:Hz,[Or.ITC_EVENT_TYPES.USER]:ww};async function Hz(e){let t=yw(e);if(t){Mi.error(t);return}Mi.trace("ITC schemaHandler received schema event:",e),await Uz(e.message),await qz(e.message)}a(Hz,"schemaHandler");async function qz(e){try{Oc.resetReadTxn(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Oc.resetReadTxn(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Oc.resetReadTxn(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=vz();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Mi.error(t)}}a(qz,"syncSchemaMetadata");var Iw=[];async function ww(e){try{try{Oc.resetReadTxn(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Oc.resetReadTxn(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Mi.warn(r)}let t=yw(e);if(t){Mi.error(t);return}Mi.trace(`ITC userHandler ${Or.HDB_ITC_CLIENT_PREFIX}${Pz.pid} received user event:`,e),await Mz.setUsersToGlobal();for(let r of Iw)r()}catch(t){Mi.error(t)}}a(ww,"userHandler");ww.addListener=function(e){Iw.push(e)};Cw.exports=Bz});var cs=T((_ue,Dw)=>{"use strict";var aue=G(),ap=$(),Fz=y(),{ITC_ERRORS:bc}=Er(),{parentPort:cue,threadId:Gz,isMainThread:xz,workerData:uue}=require("worker_threads"),{onMessageFromWorkers:kz,broadcast:lue,broadcastWithAcknowledgement:Vz}=Je();Dw.exports={sendItcEvent:$z,validateEvent:Lw,SchemaEventMsg:Yz,UserEventMsg:Kz};var N_;kz(async(e,t)=>{N_=N_||Nc(),Lw(e),N_[e.type]&&await N_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function $z(e){return!xz&&e.message&&(e.message.originator=Gz),Vz(e)}a($z,"sendItcEvent");function Lw(e){if(typeof e!="object")return bc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||ap.isEmpty(e.type))return bc.MISSING_TYPE;if(!e.hasOwnProperty("message")||ap.isEmpty(e.message))return bc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||ap.isEmpty(e.message.originator))return bc.MISSING_ORIGIN;if(Fz.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return bc.INVALID_EVENT(e.type)}a(Lw,"validateEvent");function Yz(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(Yz,"SchemaEventMsg");function Kz(e){this.originator=e}a(Kz,"UserEventMsg")});var nn=T((Eue,vw)=>{"use strict";var Uw=y(),fue=$(),b_=G(),Mw=EO(),Uo,{sendItcEvent:Pw}=cs();function Wz(e){try{b_.trace("signalSchemaChange called with message:",e),Uo=Uo||Nc();let t=new Mw(Uw.ITC_EVENT_TYPES.SCHEMA,e);return Uo.schema(t),Pw(t)}catch(t){b_.error(t)}}a(Wz,"signalSchemaChange");function Qz(e){try{b_.trace("signalUserChange called with message:",e),Uo=Uo||Nc();let t=new Mw(Uw.ITC_EVENT_TYPES.USER,e);return Uo.user(t),Pw(t)}catch(t){b_.error(t)}}a(Qz,"signalUserChange");vw.exports={signalSchemaChange:Wz,signalUserChange:Qz}});var Cc={};ve(Cc,{addAnalyticsListener:()=>wc,recordAction:()=>Nr,recordActionBinary:()=>kr,setAnalyticsEnabled:()=>zz});function zz(e){Yw=e}function Nr(e,t,r,s,n){if(!Yw)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=w_.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:s,type:n},w_.set(i,o)}y_||Jz()}function kr(e,t,r,s,n){Nr(!!e,t,r,s,n)}function wc(e){Qw.push(e)}function Jz(){y_=performance.now(),setTimeout(async()=>{let e=performance.now()-y_;y_=0;let t=[],r={time:Date.now(),period:e,threadId:Pi.threadId,metrics:t};for(let[n,i]of w_){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 zw){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 Jw()}let s=process.memoryUsage();t.push({metric:"memory",threadId:Pi.threadId,byThread:!0,...s});for(let n of Qw)n(t);w_=new Map,Pi.parentPort?Pi.parentPort.postMessage({type:Ww,report:r}):Zw({report:r})},Kw).unref()}async function Xz(e,t=6e4){let r=lp(),s=Xw(),n;for(let h of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){n=h.value.time;break}if(Date.now()-t<n)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:n||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:R}=p;for(let b of S||[]){let{path:O,method:Y,type:Q,metric:F,count:w,total:K,distribution:B,threads:x,...te}=b;w||(w=1);let be=F+(O?"-"+O:"");Y!==void 0&&(be+="-"+Y),Q!==void 0&&(be+="-"+Q);let se=o.get(be);if(se){if(se.threads){let Pe=se.threads[R];if(Pe)se=Pe;else{se.threads[R]=Object.assign({},te);continue}}se.count||(se.count=1);let vt=se.count;for(let Pe in te){let At=te[Pe];typeof At=="number"&&(se[Pe]=(se[Pe]*vt+At*w)/(vt+w))}se.count+=w,K>=0&&(se.total+=K,se.ratio=se.total/se.count)}else se=Object.assign({period:t},b),delete se.distribution,o.set(be,se),se.byThread&&(se.threads=[],se.threads[R]=Object.assign({},te),u.push(se));if(B){B=B.map(Pe=>typeof Pe=="number"?{value:Pe,count:1}:Pe);let vt=c.get(be);vt?vt.push(...B):c.set(be,B)}}await Jw()}for(let h of u){let{path:p,method:S,type:R,metric:b,count:O,total:Y,distribution:Q,threads:F,...w}=h;F=F.filter(K=>K);for(let K in w){if(typeof h[K]!="number")continue;let B=0;for(let x of F){let te=x[K];typeof te=="number"&&(B+=te)}h[K]=B}h.count=F.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((Pe,At)=>Pe.value>At.value?1:-1);let R=S.count-1,b=[],O=0,Y=0,Q;for(let Pe of zw){let At=R*Pe;for(;O<At;)Q=p[Y++],O+=Q.count,Y===1&&O--;let es=p[Y>1?Y-2:0];Q||(Q=p[0]),b.push(Q.value-(Q.value-es.value)*(O-At)/Q.count)}let[F,w,K,B,x,te,be,se,vt]=b;Object.assign(S,{p1:F,p10:w,p25:K,median:B,p75:x,p90:te,p95:be,p99:se,p999:vt})}let l;for(let[h,p]of o)p.id=(0,I_.getNextMonotonicTime)(),p.time=_,s.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||s.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,I_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-Bw,active:E-Hw,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(S=>{S||s.primaryStore.put(h,p)})}Bw=f,Hw=E}async function qw(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function lp(){return Fw||(Fw=tt({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Xw(){return Gw||(Gw=tt({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function e2(){jw=!0;let e=(0,Ic.get)(up.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Xz(Kw,e),await qw(lp(),jz),await qw(Xw(),Zz)},Math.min(e/2,2147483647)).unref()}function Zw(e,t){let r=e.report;r.threadId=t?.threadId||Pi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(xw+=s.mean*s.count);r.totalBytesProcessed=xw,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(kw.get(t))}),kw.set(t,t.performance.eventLoopUtilization())),r.id=(0,I_.getNextMonotonicTime)(),lp().primaryStore.put(r.id,r),jw||e2(),t2&&(eC=s2(r))}async function s2(e){if(await eC,!Kn){let r=(0,yc.dirname)((0,$w.getLogFilePath)());try{Kn=await(0,cp.open)((0,yc.join)(r,"analytics.log"),"r+")}catch{Kn=await(0,cp.open)((0,yc.join)(r,"analytics.log"),"w+")}}let t=(await Kn.stat()).size;if(t>r2){let r=Buffer.alloc(t);await Kn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Kn.write(r,{position:0}),await Kn.truncate(r.length),t=r.length}await Kn.write(JSON.stringify(e)+`
6
- `,t)}var Pi,Vw,$w,yc,cp,I_,Ic,up,w_,Yw,y_,Kw,Ww,Qw,zw,Bw,Hw,Jw,jz,Zz,Fw,Gw,jw,xw,kw,t2,eC,Kn,r2,_n=Te(()=>{Pi=require("worker_threads"),Vw=D(Je());fe();$w=D(G()),yc=require("path"),cp=require("fs/promises"),I_=D(hr()),Ic=D(X()),up=D(y());fr();(0,Ic.initSync)();w_=new Map,Yw=(0,Ic.get)(up.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(zz,"setAnalyticsEnabled");a(Nr,"recordAction");ct.recordAnalytics=Nr;a(kr,"recordActionBinary");y_=0,Kw=1e3,Ww="analytics-report",Qw=[];a(wc,"addAnalyticsListener");zw=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Jz,"sendAnalytics");a(Xz,"aggregation");Bw=0,Hw=0,Jw=a(()=>new Promise(setImmediate),"rest");a(qw,"cleanup");jz=36e5,Zz=31536e6;a(lp,"getRawAnalyticsTable");a(Xw,"getAnalyticsTable");(0,Vw.setChildListenerByType)(Ww,Zw);a(e2,"startScheduledTasks");xw=0,kw=new Map,t2=!1;a(Zw,"recordAnalytics");r2=1e6;a(s2,"logAnalytics")});var hp={};ve(hp,{coerceType:()=>M_,makeTable:()=>B_,setServerUtilities:()=>d2,updateResource:()=>Mc});function B_(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,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=[]),_O(i,u);let S=KE(i,s,u),R=0,b,O,Y,Q={},F=Promise.resolve(),w,K,B;for(let W of p)(W.assignCreatedTime||W.name==="__createdtime__")&&(w=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(K=W),W.expiresAt&&(B=W),W.isPrimaryKey&&(Q=W);let x,te=[],be=[],se=1,vt=2,Pe={},At={},es=864e5,RR,Ju,NH=10,bH=6;E&&NR();class at extends Ot{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=w;static updatedTimeProperty=K;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,A){A&&(this.sourceOptions=A,(A.expiration||A.eviction||A.scanInterval)&&this.setTTLExpiration(A)),A?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),O=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let C=a(I=>{let U=this.sources.slice(0,-1);if(U=U.filter(M=>M[I]&&(!M[I].reliesOnPrototype||M.prototype[I])),U.length>0)if(U.length===1){let M=U[0];return(V,z,oe)=>{if(V?.source!==M)return M[I](z,oe,V)}}else return(M,V,z)=>{let oe=[];for(let k of U){if(M?.source===k)break;oe.push(k[I](V,z,M))}return Promise.all(oe)}},"getApplyToIntermediateSource"),g=this.sources[this.sources.length-1],L=a(I=>{if(g[I]&&(!g[I].reliesOnPrototype||g.prototype[I]))return(U,M,V)=>{if(!U?.source)return g[I](M,V,U)}},"getApplyToCanonicalSource");return Pe={put:L("put"),delete:L("delete"),publish:L("publish")},At={put:C("put"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")},(async()=>{let I=!1,U=a(async(M,V)=>{let z=M.value,oe=M.table?$e[c][M.table]:at;if(c===ps.SYSTEM_SCHEMA_NAME&&(M.table===ps.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===ps.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(I=!0),M.id===void 0&&(M.id=z[oe.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=m;let k=await oe.getResource(M.id,V,Lc);switch(M.type){case"put":return k._writeUpdate(z,Lc);case"delete":return k._writeDelete(Lc);case"publish":return k._writePublish(z,Lc);case"invalidate":return k.invalidate(Lc);default:Ve.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=m.subscribe;M&&h==null&&(h=!0);let V=m.subscribeOnThisThread?m.subscribeOnThisThread((0,vi.getWorkerIndex)()):(0,vi.getWorkerIndex)()===0,z=M&&V&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(z){let oe;for await(let k of z)try{if(!(k.type==="transaction"?k.writes[0]:k)){Ve.error("Bad subscription event",k);continue}if(k.source=m,oe)if(k.beginTxn)oe.resolve();else{U(k,oe);continue}if(k.type==="end_txn")continue;let Ne=Ge(k,()=>{if(k.type==="transaction"){let ne=[];for(let Bt of k.writes)try{ne.push(U(Bt,k))}catch($t){throw $t.message+=" writing "+JSON.stringify(Bt)+" of event "+JSON.stringify(k),$t}return Promise.all(ne)}else if(k.type==="define_schema"){let ne=this.attributes.slice(0),Bt;for(let $t of k.attributes)ne.find(_i=>_i.name===$t.name)||(ne.push($t),Bt=!0);Bt&&(tt({table:n,database:c,attributes:ne,origin:"cluster"}),vc.signalSchemaChange(new Bc.SchemaEventMsg(process.pid,ps.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return k.beginTxn?(oe=k,U(k,k),new Promise(ne=>{oe.resolve=ne})):U(k,k)});I&&(await Ne,vc.signalUserChange(new Bc.UserEventMsg(process.pid))),k.onCommit&&(Ne?.then?Ne.then(k.onCommit):k.onCommit())}catch(Ee){Ve.error("error in subscription handler",Ee)}}}catch(M){Ve.error(M)}})(),this}static getResource(m,A,C){let g=super.getResource(m,A,C);if(m!=null){Oa(m);try{if(g.hasOwnProperty(ge))return g;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let L=!C?.async||i.cache?.get(m),I=Un(A),U=I.getReadTxn();if(U?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return AR(m,A,{transaction:U},L,M=>{if(M?Mc(g,M):g[ge]=null,A.onlyIfCached&&A.noCacheStore){if(!g.doesExist())throw new Gs.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let V=_E(m,M,A,g);if(V)return I?.disregardReadTxn(),g[dp]=!0,Ep(V,z=>(Mc(g,z),g))}return g})}catch(L){throw L.message.includes("Unable to serialize object")&&(L.message+=": "+JSON.stringify(m)),L}}return g}ensureLoaded(){let m=_E(this[Ie],this[Fs],this[me]);if(m)return this[dp]=!0,Ep(m,A=>{this[Fs]=A,this[ge]=A.value,this[U_]=A.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,es=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");es=es||(d+f)/4,dE()}static enableAuditing(m=!0){E=m,m&&NR(),at.audit=m}static coerceId(m){return m===""?null:M_(m,Q)}static async dropTable(){if(delete $e[c][n],c===o){for(let m of p)l.remove(at.tableName+"/"+m.name),r[m.name]?.drop();l.remove(at.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));vc.signalSchemaChange(new Bc.SchemaEventMsg(process.pid,ps.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(m,A){if(m&&typeof m=="object"&&!Array.isArray(m)&&m.url===""){let C=this.getRecordCount();return{recordCount:C.recordCount,estimatedRecordRange:C.estimatedRange,records:"./",name:n,database:c,attributes:p}}return super.get(m,A)}get(m){if(typeof m=="string")return this.getProperty(m);if(this[is])return this.search(m);if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[me]?.returnNonexistent)return this}allowRead(m,A){let C=ju(m);if(C?.read){let g=C.attribute_permissions;if(g){A||(A={});let L=A.select;if(L){let I=fp(g,"read");A.select=L.filter(U=>I[U])}else A.select=g.filter(I=>I.read).map(I=>I.attribute_name);return A}else return!0}}allowUpdate(m,A){let C=ju(m);if(C?.update){let g=C.attribute_permissions;if(g){let L=fp(g,"update");for(let I in A)if(!L[I])return!1;for(let I of g){let U=I.attribute_name;!I.update&&!(U in A)&&(A[U]=this.getProperty(U))}}return!0}}allowCreate(m,A){if(this[is]){let C=ju(m);if(C?.insert){let g=C.attribute_permissions;if(g){let L=fp(g,"insert");for(let I in A)if(!L[I])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return ju(m)?.delete}update(m,A){if(!Un(this[me]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let g;if(typeof m=="object"&&m)if(A){Object.isFrozen(m)&&(m=Object.assign({},m));for(let L in this[ge])m[L]===void 0&&(m[L]=void 0);this[Ht]=m}else g=this[Ht],g&&(m=Object.assign(g,m)),this[Ht]=g=m;return this._writeUpdate(this),this}invalidate(m){let A=this[me],C=this[Ie];Oa(C),Un(this[me]).addWrite({key:C,store:i,invalidated:!0,entry:this[Fs],nodeName:this[me]?.nodeName,before:Pe.invalidate?.bind(this,A,C),beforeIntermediate:At.invalidate?.bind(this,A,C),commit:(L,I)=>{if(I?.version>L)return;let U=null;for(let M in r)U||(U={}),U[M]=this.getProperty(M);S(C,U,this[Fs],L,C_,E,this[me],0,"invalidate")}})}static evict(m,A,C){let g=this.Source,L;if(!((O||E)&&(!A||(L=i.getEntry(m),!L||!A)||L.version!==C))){if(O){if(i.hasLock(m,L.version))return;let I;for(let U in r)I||(I={}),I[U]=A[U];if(I){S(m,I,L,C,L_,null,null,0,null,!0);return}}if(i.ifVersion(C,()=>{Xu(m,A,null)}),E)S(m,null,L,C,L_,null,null,0,null,!0);else return i.remove(m,C)}}lock(){throw new Error("Not yet implemented")}static operation(m,A){return m.table||=n,m.schema||=c,aC.operation(m,A)}async put(m){this.update(m,!0)}_writeUpdate(m,A){let C=this[me],g=Un(C),L=this[Ie];Oa(L);let I=this[Fs];this[_p]=!0;let U={key:L,store:i,entry:I,nodeName:C?.nodeName,validate:M=>{if(!m[rC]||dl(m)){if(this.validate(m),C?.source?m=Fa(m):(t&&m[t]!==L&&(m[t]=L),K&&(m[K.name]=K.type==="Date"?new Date(M):K.type==="String"?new Date(M).toISOString():M),w&&(I?.value?m[w.name]=I?.value[w.name]:m[w.name]=w.type==="Date"?new Date(M):w.type==="String"?new Date(M).toISOString():M),m=Fa(m)),m[ge])throw new Error("Can not assign a record with a record property");this[ge]=m}else g.removeWrite(U)},before:Pe.put&&(()=>Pe.put(C,L,m)),beforeIntermediate:At.put&&(()=>At.put(C,L,m)),commit:(M,V,z)=>{z&&(C&&V?.version>(C.lastModified||0)&&(C.lastModified=V.version),Mc(this,V));let oe=V?.value;this[_p]=!1,Ve.trace("Checking timestamp for put",L,V?.version>M,V?.version,M),!(V?.version>M)&&(Xu(L,oe,m),S(L,m,V,M,0,E,C,C.expiresAt||(d?d+Date.now():0)))}};g.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[is]){for await(let A of this.search(m))(await at.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[ge]?this._writeDelete(m):!1}_writeDelete(m){let A=Un(this[me]),C=this[Ie];Oa(C);let g=this[me];return A.addWrite({key:C,store:i,resource:this,nodeName:g?.nodeName,before:Pe.delete?.bind(this,g,C),beforeIntermediate:At.delete?.bind(this,g,C),commit:(L,I,U)=>{let M=I?.value;U&&(g&&I?.version>(g.lastModified||0)&&(g.lastModified=I.version),Mc(this,I)),!(I?.version>L)&&(Xu(this[Ie],M),Ve.trace("Write delete entry",C,L),E||h?(S(C,null,this[Fs],L,0,E,this[me],0,"delete"),E||dE()):i.remove(this[Ie]))}}),!0}search(m){let A=Un(this[me]);if(!m)throw new Error("No query provided");let C=m.reverse===!0,g=m.conditions;g?g.length===void 0&&(g=Array.from(g)):g=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Ie]&&(g=[{attribute:null,comparator:"prefix",value:this[Ie]}].concat(g));for(let k of g){let Ee=k[0]??k.attribute,Ne=Ee==null?Q:p.find(ne=>ne.name==Ee);if(Ne)Ne.type&&(k[1]===void 0?k.value=L(k.value,Ne):k[1]=L(k[1],Ne));else if(Ee!=null)throw(0,Gs.handleHDBError)(new Error,`${Ee} is not a defined attribute`,404)}function L(k,Ee){return Array.isArray(k)?k.map(Ne=>M_(Ne,Ee)):M_(k,Ee)}a(L,"coerceTypedValues"),g.length>1&&(g=(0,oC.sortBy)(g,k=>{if(k.estimated_count===void 0){let Ee=k.comparator||k.search_type;if(Ee===Uc.SEARCH_TYPES.EQUALS){let Ne=k[0]??k.attribute;if(Ne==null||Ne===t)k.estimated_count=1;else{let ne=r[Ne];k.estimated_count=ne?ne.getValuesCount(k[1]??k.value):1/0}}else Ee===Uc.SEARCH_TYPES.CONTAINS||Ee===Uc.SEARCH_TYPES.ENDS_WITH||Ee==="ne"?k.estimated_count=1/0:Ee===Uc.SEARCH_TYPES.STARTS_WITH||Ee==="prefix"?k.estimated_count=o2:k.estimated_count=i2}return k.estimated_count}));let I=A.getReadTxn();I.use();let U=m.select,M=g[0],V;if(!M)V=i.getRange(C?{end:!1,reverse:!0,transaction:I,lazy:U?.length<4}:{start:!1,transaction:I,lazy:U?.length<4}).map(({value:k})=>k?new Promise(Ee=>setImmediate(()=>Ee(k))):D_.SKIP);else{let k=PE(M,I,C,at,m.allowFullScan);if(!m.operator||m.operator.toLowerCase()==="and"){let Ee=g.slice(1).map(vE);V=oe(k,Ee)}else{for(let Ne=1;Ne<g.length;Ne++){let ne=g[Ne],Bt=PE(ne,I,C,at,m.allowFullScan);k=k.concat(Bt)}let Ee=new Set;k=k.filter(Ne=>Ee.has(Ne)?!1:(Ee.add(Ne),!0)),V=oe(k)}}(m.offset||m.limit!==void 0)&&(V=V.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0)),V.onDone=()=>{V.onDone=null,I.done()};let z=this[me];function oe(k,Ee){let Ne=Ee?.length,ne={transaction:I,lazy:Ne>0||U?.length<4,alwaysPrefetch:!0},Bt=m.ensureLoaded!==!1;function $t(_i,qe){if(Bt&&qe!==void 0){let _r=!z.onlyIfCached&&_E(qe,_i,z,this);if(_r)return _r.then(wH=>$t(wH))}let bs=_i?.value;if(!bs)return D_.SKIP;for(let _r=0;_r<Ne;_r++)if(!Ee[_r](bs))return D_.SKIP;return bs}return a($t,"processEntry"),k.map(_i=>AR(_i,z,ne,!1,$t))}return a(oe,"idsToRecords"),V}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||tt({table:n,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let A=uO(at,this[Ie]??null,function(I,U,M,V){try{let z=U.getValue?.(i);this.send({id:I,timestamp:M,value:z,version:U.version,type:U.type,beginTxn:V})}catch(z){Ve.error(z)}},m.startTime,this[is]);m.crossThreads===!1&&(A.crossThreads=!1),m.supportsTransactions&&(A.supportsTransactions=!0);let C=this[Ie],g=m.previousCount;g>1e3&&(g=1e3);let L=m.startTime;if(this[is]){if(L){if(g)throw new Gs.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:I,value:U}of u.getRange({start:L,exclusiveStart:!0})){let M=mr(U,i);if(M.tableId!==s)continue;let V=M.recordId;(C==null||iC(C,V))&&A.send({id:V,timestamp:I,...M}),A.startTime=I}}else if(g){let I=[];for(let{key:U,value:M}of u.getRange({start:"z",end:!1,reverse:!0}))try{let V=mr(M);if(V.tableId!==s)continue;let z=V.recordId;if(C==null||iC(C,z)){let oe=V.getValue(i);if(I.push({id:z,timestamp:U,value:oe,version:V.version,type:V.type}),--g<=0)break}}catch(V){Ve.error("Error getting history entry",U,V)}for(let U=I.length;U>0;)A.send(I[--U]);I[0]&&(A.startTime=I[0].timestamp)}else if(!m.omitCurrent)for(let{key:I,value:U,version:M,localTime:V}of i.getRange({start:C??!1,end:C==null?void 0:[C,P_.MAXIMUM_KEY],versions:!0}))U&&A.send({id:I,version:M,timestamp:V,value:U})}else{g&&!L&&(L=0);let I=this[Fs]?.localTime;if(Ve.trace("Subscription from",L,"from",C),L<I){let U=[],M=I;do{let V=u.get(M);if(V){m.omitCurrent=!0;let z=mr(V),oe=z.getValue(i);U.push({id:C,value:oe,timestamp:M,...z}),M=z.previousLocalTime}else break;g&&g--}while(M>L&&g!==0);for(let V=U.length;V>0;)A.send(U[--V]);A.startTime=I}!m.omitCurrent&&this.doesExist()&&A.send({id:C,version:this[U_],timestamp:this[Fs]?.localTime,value:this})}return m.listener&&A.on("data",m.listener),A}doesExist(){return!!(this[ge]||this[_p])}async publish(m,A){this._writePublish(m,A)}_writePublish(m,A){let C=Un(this[me]),g=this[Ie]||null;Oa(g);let L=this[me];C.addWrite({key:g,store:i,entry:this[Fs],nodeName:L?.nodeName,validate:()=>{this.validate(m)},before:Pe.publish?.bind(this,L,g,m),beforeIntermediate:At.publish?.bind(this,L,g,m),commit:(I,U,M)=>{U===void 0&&h&&!E&&dE(),S(g,U?.value??null,U,U?.version||I,0,!0,L,U?.expiresAt,"message",!1,m)}})}validate(m){let A,C=a((g,L,I)=>{if(L.type&&g!=null)if(L.properties){typeof g!="object"&&(A||(A=[])).push(`Property ${I} must be an object${L.type?" ("+L.type+")":""}`);let U=L.properties;for(let M=0,V=U.length;M<V;M++){let z=U[M],oe=C(g[z.name],z,I+"."+z.name);oe&&(g[z.name]=oe)}}else switch(L.type){case"Int":(typeof g!="number"||g>>0!==g)&&(A||(A=[])).push(`Property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof g!="number"||!(Math.floor(g)===g&&Math.abs(g)<=9007199254740992))&&(A||(A=[])).push(`Property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof g!="number"&&(A||(A=[])).push(`Property ${I} must be a number`);break;case"ID":typeof g=="string"||g?.length>0&&g.every?.(U=>typeof U=="string")||(A||(A=[])).push(`Property ${I} must be a string, or an array of strings`);break;case"String":typeof g!="string"&&(A||(A=[])).push(`Property ${I} must be a string`);break;case"Boolean":typeof g!="boolean"&&(A||(A=[])).push(`Property ${I} must be a boolean`);break;case"Date":if(!(g instanceof Date)){if(typeof g=="string"||typeof g=="number")return new Date(g);(A||(A=[])).push(`Property ${I} must be a Date`)}break;case"Bytes":g instanceof Uint8Array||(A||(A=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(g)){if(L.elements)for(let U=0,M=g.length;U<M;U++){let V=g[U],z=C(V,L.elements,I+"[*]");z&&(g[U]=z)}}else(A||(A=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break}L.nullable===!1&&g==null&&(A||(A=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let g=0,L=p.length;g<L;g++){let I=p[g],U=C(m[I.name],I,I.name);U&&(m[I.name]=U)}if(A)throw new Gs.ClientError(A.join(". "))}getUpdatedTime(){return this[U_]}wasLoadedFromSource(){return O?!!this[dp]:void 0}static async addAttributes(m){let A=p.slice(0);for(let C of m){if(!C.name)throw new Gs.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new Gs.ClientError("Attribute names cannot include backticks or forward slashes");A.push(C)}return tt({table:n,database:c,schemaDefined:_,attributes:A}),at.indexingOperation}static async removeAttributes(m){let A=p.filter(C=>!m.includes(C.name));return tt({table:n,database:c,schemaDefined:_,attributes:A}),at.indexingOperation}static getRecordCount(m){let A=i.getStats().entryCount,C=5e3,g=1e3,L;A>C&&!m?.exactCount&&(L=g);let I=0;for(let{value:U}of i.getRange({start:!0,lazy:!0,limit:L}))U!=null&&I++;if(L){let U=I;I=0;for(let{value:Bt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:L}))Bt!=null&&I++;let M=L*2,V=(I+U)/M,z=Math.pow((I-U+1)/L/2,2)+V*(1-V)/M,oe=Math.max(Math.sqrt(z)*A,1),k=Math.round(V*A),Ee=Math.max(k-1.96*oe,0),Ne=Math.min(k+1.96*oe,A),ne=Math.pow(10,Math.round(Math.log10(oe)));return ne>k&&(ne=ne/10),I=Math.round(k/ne)*ne,{recordCount:I,estimatedRange:[Math.round(Ee),Math.round(Ne)]}}return{recordCount:I}}static updatedAttributes(){El(this,this)}static async deleteHistory(m=0){let A;for(let{key:C,value:g}of u.getRange({start:0,end:m}))await Dc(),mr(g).tableId===s&&(A=u.remove(C));await A}static async*getHistory(m=0,A=1/0){for(let{key:C,value:g}of u.getRange({start:m,end:A})){await Dc();let L=mr(g);L.tableId===s&&(yield{id:L.recordId,localTime:C,version:L.version,type:L.type,value:L.getValue(i),user:L.user})}}static async getHistoryOfRecord(m){let A=[],C=i.getEntry(m);if(!C)return A;let g=C.localTime,L=0;do{await Dc();let I=u.get(g);if(I){let U=mr(I);A.push({id:U.recordId,localTime:g,version:U.version,type:U.type,value:U.getValue(i),user:U.user}),g=U.previousLocalTime}else break}while(L<1e3&&g);return A.reverse()}static cleanup(){x?.remove()}}at.updatedAttributes();let yH=at.prototype;return yH[rC]=!0,d&&at.setTTLExpiration(d/1e3),B&&IH(),at;function Xu(W,m,A){let C;for(let g in r){let L=r[g],I=L.isIndexing,U=A?.[g],M=m?.[g];if(U===M&&!I)continue;C=!0;let V=(0,Pc.getIndexedValues)(M);if(V){tC&&L.prefetch(V.map(z=>({key:z,value:W})),nC);for(let z=0,oe=V.length;z<oe;z++)L.remove(V[z],W)}if(V=(0,Pc.getIndexedValues)(U),V){tC&&L.prefetch(V.map(z=>({key:z,value:W})),nC);for(let z=0,oe=V.length;z<oe;z++)L.put(V[z],W)}}return C}a(Xu,"updateIndices");function Oa(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>sC)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,P_.writeKey)(W,l2,0)>sC)throw new Error("Primary key size is too large: "+W.length);return!0}a(Oa,"checkValidId");function AR(W,m,A,C,g){let L=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),A.transaction?.isDone)return g(null,W);let I=i.getEntry(W,A);return I&&m&&(I?.version>(m.lastModified||0)&&(m.lastModified=I.version),I?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=I.localTime)),g(I,W)},"whenPrefetched");return C?L():se>0?(se--,L()):new Promise((I,U)=>{se===0?(se--,i.prefetch([W],()=>{M(),V()})):(te.push(W),be.push(V),te.length>bH&&(se--,M()));function M(){if(te.length>0){let z=be;i.prefetch(te,()=>{se===-1?M():se++;for(let oe of z)oe()}),te=[],be=[],vt>2&&vt--}else se=vt,vt<NH&&vt++}a(M,"prefetch");function V(){try{I(L())}catch(z){U(z)}}a(V,"load")})}a(AR,"loadLocalRecord");function ju(W){if(!W)return;let m=W.role.permission;if(m.super_user)return _2;let A=m[c],C,g=A?.tables;if(g)return g[n];if(c==="data"&&(C=m[n])&&!C.tables)return C}a(ju,"getTablePermissions");function _E(W,m,A,C){if(O){let g;if(A.noCache?g=!0:(m?(!m.value||m.metadataFlags&(C_|L_)||m.expiresAt&&m.expiresAt<Date.now())&&(g=!0):g=!0,kr(!g,"cache-hit",n)),g){let L=OR(W,m,A).then(I=>(I?.value?.[ge]&&Ve.error("Can not assign a record with a record property"),A&&(I?.version>(A.lastModified||0)&&(A.lastModified=I.version),A.lastRefreshed=Date.now()),I));if(A?.onlyIfCached||m?.value&&C?.allowStaleWhileRevalidate?.(m,W)){if(L.catch(I=>Ve.warn(I)),A?.onlyIfCached&&!C.doesExist())throw new Gs.ServerError("Entry is not cached",504);return}else return L}}}a(_E,"ensureLoadedFromSource");function Un(W){let m=W?.transaction;if(m){if(!m.open)throw new Error("Can not use a transaction that is not open");if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let A=m.next;if(!A)return m=m.next=new hi,m.lmdbDb=i,m;m=A}while(!0)}else return new pl}a(Un,"txnForContext");async function OR(W,m,A){let C=m?.metadataFlags,g=m?.version,L,I;if(!i.attemptLock(W,g,()=>{clearTimeout(I);let z=i.getEntry(W);!z||!z.value||z.metadataFlags&(C_|L_)?L(OR(W,i.getEntry(W),A)):L(z)}))return new Promise(z=>{L=z,I=setTimeout(()=>{i.unlock(W,g)},u2)});let U=m?.value,M={requestContext:A,replacingRecord:U,replacingVersion:g,source:null,resourceCache:A?.resourceCache},V=A?.responseHeaders;return new Promise((z,oe)=>{let k;Ep(Ge(M,async Ee=>{let Ne=performance.now(),ne,Bt,$t;try{for(let _r of at.sources)if(_r.get&&(!_r.get.reliesOnPrototype||_r.prototype.get)&&(M.source=_r,ne=await _r.get(W,M),ne))break;$t=C&C_;let qe=M.lastModified||$t&&g;Bt=$t||qe>g||!U,qe||(qe=(0,Pc.getNextMonotonicTime)());let bs=performance.now()-Ne;if(Nr(bs,"cache-resolution",n),V&&V.append("Server-Timing",`cache-resolve;dur=${bs.toFixed(2)}`),Ee.timestamp=qe,d&&!M.expiresAt&&(M.expiresAt=Date.now()+d),ne){if(typeof ne!="object")throw new Error("Only objects can be cached and stored in tables");typeof ne.toJSON=="function"&&(ne=ne.toJSON()),t&&ne[t]!==W&&(ne[t]=W)}k=!0,z({version:qe,value:ne})}catch(qe){qe.message+=` while resolving record ${W} for ${n}`,U&&((qe.code==="ECONNRESET"||qe.code==="ECONNREFUSED"||qe.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(qe.statusCode===500||qe.statusCode===502||qe.statusCode===503||qe.statusCode===504))?(z({version:g,value:U}),Ve.trace(qe.message,"(returned stale record)")):oe(qe),M.transaction.abort();return}if(A?.noCacheStore){M.transaction.abort();return}Un(M).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:(qe,bs)=>{if(bs?.version!==g)return;let _r=Xu(W,U,ne);ne?(At.put?.(M,W,ne),S(W,ne,bs,qe,0,E&&Bt||null,M,M.expiresAt,"put",!!$t)):(At.delete?.(M,W),E||h?S(W,null,bs,qe,0,E&&Bt||null,M,0,"delete",!!$t):i.remove(W,g))}})}),()=>{i.unlock(W,g)},Ee=>{i.unlock(W,g),k&&Ve.error("Error committing cache update",Ee)})})}a(OR,"getFromSource");function dE(){if(es!==RR&&(RR=es,(0,vi.getWorkerIndex)()===(0,vi.getWorkerCount)()-1)){if(Ju&&clearTimeout(Ju),!es)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let m=Math.ceil((Date.now()-W.getTime())/es)*es+W.getTime(),A=a(C=>{Ve.trace(`Scheduled next cleanup scan at ${new Date(C)}ms`),Ju=setTimeout(()=>F=F.then(async()=>{if(A(Math.max(C+es,Date.now())),i.rootStore.status!=="open"){clearTimeout(Ju);return}Ve.trace(`Starting cleanup scan for ${n}`);try{let g=0;for(let{key:L,value:I,version:U,expiresAt:M}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0}))I===null&&!E&&U+c2<Date.now()?i.remove(L,U):M&&M+f<Date.now()&&(at.evict(L,I,U),g++),await Dc();Ve.trace(`Finished cleanup scan for ${n}, evicted ${g} entries`)}catch(g){Ve.trace(`Error in cleanup scan for ${n}:`,g)}}),Math.min(C-Date.now(),2147483647)).unref()},"startNextTimer");A(m)}}a(dE,"scheduleCleanup");function NR(){x=u?.addDeleteRemovalCallback(s,W=>{let m=i.getEntry(W);m?.value===null&&i.remove(W,m.version)})}a(NR,"addDeleteRemoval");function IH(){(0,vi.getWorkerIndex)()===0&&setInterval(async()=>{try{let W=B.name,m=r[W];if(!m)throw new Error(`expiresAt attribute ${B} must be indexed`);for(let{value:A}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let C=i.getEntry(A);C?.value?.[W]<Date.now()&&at.evict(A,C.value,C.version),await Dc()}}catch(W){Ve.error("Error in evicting old records",W)}},a2).unref()}a(IH,"runRecordExpirationEviction")}function fp(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function nC(){}function d2(e){aC=e}function M_(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!f2.test(e)&&(e+="Z"),new Date(e)):r?e:(0,v_.autoCast)(e)}function iC(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 s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function Ep(e,t,r){return e?.then?e.then(t,r):t(e)}function Mc(e,t){e[Fs]=t,e[ge]=t?.value??null,e[U_]=t?.version}var ps,D_,Pc,oC,Uc,Hc,Gs,vc,Bc,Ve,P_,vi,v_,n2,aC,i2,o2,a2,c2,tC,u2,U_,rC,Fs,_p,dp,Lc,C_,L_,l2,sC,_2,Fue,f2,Dc,H_=Te(()=>{ps=D(y()),D_=require("lmdb"),Pc=D(hr()),oC=require("lodash");ns();UE();Uc=D(ze()),Hc=D(X());dO();Gs=D(j()),vc=D(nn()),Bc=D(cs());fe();Tl();Ve=D(G());ml();mi();P_=require("ordered-binary"),vi=D(Je());uo();v_=D($());Va();_n();n2=new Uint8Array(9);n2[8]=192;i2=1e8,o2=1e7,a2=6e4,c2=864e5;Hc.initSync();tC=Hc.get(ps.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),u2=1e4,U_=Symbol.for("version"),rC=Symbol.for("incremental-update"),Fs=Symbol("entry"),_p=Symbol("is-saving"),dp=Symbol("loaded-from-source"),Lc={isNotification:!0,ensureLoaded:!1},C_=1,L_=8,l2=Buffer.allocUnsafeSlow(8192),sC=1978,_2={read:!0,insert:!0,update:!0,delete:!0},Fue=(0,v_.convertToMS)(Hc.get(ps.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(B_,"makeTable");a(fp,"attributesAsObject");a(nC,"noop");a(d2,"setServerUtilities");f2=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(M_,"coerceType");a(iC,"isDescendantId");Dc=a(()=>new Promise(setImmediate),"rest");a(Ep,"when");a(Mc,"updateResource")});var Ce={};ve(Ce,{database:()=>mc,databases:()=>$e,dropDatabase:()=>Am,dropTableMeta:()=>T2,getDatabases:()=>ls,getTables:()=>E2,onUpdatedTable:()=>gp,readMetaDb:()=>qc,resetDatabases:()=>h2,table:()=>tt,tables:()=>yr});function E2(){return k_||ls(),yr||{}}function ls(){if(k_)return $e;k_=!0,vo=new Map;let e=(0,xt.getHdbBasePath)()&&(0,Fe.join)((0,xt.getHdbBasePath)(),Ir.DATABASES_DIR_NAME),t=(0,xt.get)(Ir.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,xt.get)(Ir.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,br.existsSync)(e)?e:(0,Fe.join)((0,xt.getHdbBasePath)(),Ir.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,br.existsSync)(e))for(let r of(0,br.readdirSync)(e,{withFileTypes:!0})){let s=(0,Fe.basename)(r.name,".mdb");r.isFile()&&(0,Fe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&qc((0,Fe.join)(e,r.name),null,s)}if((0,br.existsSync)((0,Po.getBaseSchemaPath)())){for(let r of(0,br.readdirSync)((0,Po.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Fe.join)((0,Po.getBaseSchemaPath)(),r.name),n=(0,Fe.join)((0,Po.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,br.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Fe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Fe.join)(n,i.name);qc((0,Fe.join)(s,i.name),(0,Fe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,br.existsSync)(n))for(let o of(0,br.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Fe.extname)(o.name).toLowerCase()===".mdb"&&qc((0,Fe.join)(n,o.name),(0,Fe.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Fe.join)(c.path,(0,Fe.basename)(o+".mdb"));(0,br.existsSync)(u)&&qc(u,o,r,null,!0)}}for(let r in $e){let s=vo.get(r);if(s){let n=$e[r];r.includes("delete")&&Vr.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Vr.trace(`delete table class ${i}`),delete n[i])}else if(delete $e[r],r==="data"){for(let n in yr)delete yr[n];delete yr[V_]}}return vo=null,$e}}function h2(){k_=!1;for(let[,e]of Wn)e.needsDeletion=!0;ls();for(let[e,t]of Wn)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Wn.delete(e));return $e}function qc(e,t,r=Sp,s,n){let i=new mp.default(e,!1);try{let o=Wn.get(e);o?o.needsDeletion=!1:(o=(0,F_.open)(i),Wn.set(e,o));let c=new Bi.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(q_.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,br.existsSync)(s)&&(i.path=s,_=(0,F_.open)(i),_.isLegacy=!0):_=wl(o));let l=_C(r),d=l[V_],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 R=f.get(p);R||f.set(p,R={attributes:[]}),(S==null||h.is_hash_attribute)&&(R.primary=h),S!=null&&R.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 x of p)if(x.is_hash_attribute||x.isPrimaryKey){S=x;break}if(!S){Vr.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let R=l[E],b={},O=[],Y,Q,F=typeof S.audit=="boolean"?S.audit:(0,xt.get)(Ir.CONFIG_PARAMS.LOGGING_AUDITLOG),w=S.trackDeletes,K=S.expiration,B=S.eviction;if(R)b=R.indices,O=R.attributes,R.schemaVersion++;else{Y=S.tableId,Y?Y>=(u.get(Mo)||0)&&u.putSync(Mo,Y+1):(S.tableId=Y=u.get(Mo),Y||(Y=1),u.putSync(Mo,Y+1),u.putSync(S.key,S));let x=new Bi.default(!S.is_hash_attribute,S.is_hash_attribute);Q=yl(o.openDB(S.key,x)),Q.rootStore=o,Q.tableId=Y}for(let x of p){x.attribute=x.name;try{if(!x.is_hash_attribute&&(x.indexed||x.attribute&&!x.name)){if(!b[x.name]){let be=new Bi.default(!x.is_hash_attribute,x.is_hash_attribute);b[x.name]=o.openDB(x.key,be)}let te=O.find(be=>be.name===x.name);te?O.splice(O.indexOf(te),1,x):O.push(x)}}catch(te){Vr.error("Error trying to update attribute",x,O,b,te)}}if(!R){R=dC(l,E,B_({primaryStore:Q,auditStore:_,audit:F,expirationMS:K&&K*1e3,evictionMS:B&&B*1e3,trackDeletes:w,tableName:E,tableId:Y,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:b,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),R.schemaVersion=1;for(let x of Tp)x(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function _C(e){let t=$e[e];if(t||(e==="data"?t=$e[e]=yr:e==="system"?Object.defineProperty($e,"system",{value:t=Object.create(null),configurable:!0}):t=$e[e]=Object.create(null)),vo&&!vo.has(e)){let r=new Set;t[V_]=r,vo.set(e,r)}return t}function dC(e,t,r){return e[t]=r,r}function mc({database:e,table:t}){e||(e=Sp),ls();let r=_C(e),s=(0,Fe.join)((0,xt.getHdbBasePath)(),Ir.DATABASES_DIR_NAME),n=(0,xt.get)(Ir.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,xt.get)(Ir.CONFIG_PARAMS.STORAGE_PATH)||((0,br.existsSync)(s)?s:(0,Fe.join)((0,xt.getHdbBasePath)(),Ir.LEGACY_DATABASES_DIR_NAME));let o=(0,Fe.join)(s,(i?t:e)+".mdb"),c=Wn.get(o);if(!c){let u=new mp.default(o,!1);c=(0,F_.open)(u),Wn.set(o,c)}return c}async function Am(e){if(!$e[e])throw new Error("Schema does not exist");let t=$e[e];for(let r in t){let n=t[r].primaryStore.rootStore;Wn.delete(n.path),n.status==="open"&&(await n.close(),await cC.remove(n.path))}if(e==="data"){for(let r in yr)delete yr[r];delete yr[V_]}delete $e[e]}function tt({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=Sp);let l=mc({database:t,table:e}),d=$e[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 R=new Bi.default(!1);for(let w of i)w.attribute?(w.name=w.attribute,w.indexed=!0):w.attribute=w.name,w.expiresAt&&(w.indexed=!0);let b,O;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 w=l.auditStore;w||(w=wl(l)),h=i.find(te=>te.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,xt.get)(Ir.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Vr.trace(`${e} table loading, opening primary store`);let K=new Bi.default(!1,!0),B=e+"/",x=yl(l.openDB(B,K));x.rootStore=l,S=l.dbisDb=l.openDB(q_.INTERNAL_DBIS_NAME,R),x.tableId=S.get(Mo),x.tableId||(x.tableId=1),S.putSync(Mo,x.tableId+1),h.tableId=x.tableId,f=dC(d,e,B_({primaryStore:x,auditStore:w,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:E,tableName:e,tableId:x.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,b=!0,F(),S.put(B,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(q_.INTERNAL_DBIS_NAME,R)),f.dbisDB=S;let Y=[];for(let{key:w,value:K}of S.getRange({start:!0})){let[B,x]=w.toString().split("/");if(x===""&&(x=K.name),x){if(B!==e)continue}else x=B;if(!i.find(be=>be.name===x)?.indexed&&K.indexed&&!K.isPrimaryKey){F(),b=!0,S.remove(w);let be=f.indices[B];be&&Y.push(be)}}let Q=[];try{for(let w of i||[]){let K=e+"/"+(w.name||"");Object.defineProperty(w,"key",{value:K,configurable:!0});let B=S.get(K);if(w.isPrimaryKey){if(B=B||S.get(K=e+"/")||{},o!==f.audit||(+r||void 0)!==(+B.expiration||void 0)||(+s||void 0)!==(+B.eviction||void 0)){let te=Object.assign({},B);typeof o=="boolean"&&(o&&f.enableAuditing(o),te.audit=o),r&&(te.expiration=+r),s&&(te.eviction=+s),b=!0,F(),S.put(K,te)}continue}B?.attribute&&!B.name&&(B.indexed=!0);let x=!B||B.type!==w.type||B.indexed!==w.indexed||JSON.stringify(B.attributes)!==JSON.stringify(w.attributes)||JSON.stringify(B.elements)!==JSON.stringify(w.elements);if(w.indexed){let te=new Bi.default(!0,!1),be=l.openDB(K,te);(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<Fc.workerData?.restartNumber)&&(b=!0,F(),B=S.get(K),(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<Fc.workerData?.restartNumber)&&(b=!0,w.lastIndexedKey=B?.lastIndexedKey||!1,w.indexingPID=process.pid,be.isIndexing=!0,Object.defineProperty(w,"dbi",{value:be}),Q.push(w)),S.put(K,w)),p[w.name]=be}else x&&(b=!0,F(),S.put(K,w))}}finally{O&&O()}if(b&&(f.schemaVersion++,f.updatedAttributes()),Vr.trace(`${e} table loading, running index`),Q.length>0||Y.length>0?f.indexingOperation=S2(f,Q,Y):b&&G_.signalSchemaChange(new x_.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,b)for(let w of Tp)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),Vr.trace(`${e} table loaded`),f;function F(){O||l.transactionSync(()=>({then(w){O=w}}))}a(F,"startTxn")}async function S2(e,t,r){try{let s=e.schemaVersion;await G_.signalSchemaChange(new x_.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=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++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,uC.getIndexedValues)(l[h]);if(p)for(let S=0,R=p.length;S<R;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,Vr.error(f)}),Fc.workerData&&Fc.workerData.restartNumber!==lC.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>m2?await n:u>p2&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await G_.signalSchemaChange(new x_.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Vr.error("Error in indexing",s)}}function T2({table:e,database:t}){let r=mc({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function gp(e){Tp.push(e)}var xt,q_,F_,Fe,br,Po,Bi,mp,Ir,cC,pp,uC,G_,x_,Fc,Vr,lC,Sp,V_,yr,$e,Mo,Tp,k_,Wn,vo,m2,p2,fe=Te(()=>{xt=D(X()),q_=D(ze()),F_=require("lmdb"),Fe=require("path"),br=require("fs"),Po=D(Be());H_();Bi=D(Cl()),mp=D(Dl()),Ir=D(y()),cC=D(require("fs-extra")),pp=require("../index"),uC=D(hr()),G_=D(nn()),x_=D(cs()),Fc=require("worker_threads"),Vr=D(G()),lC=D(Je());uo();Va();Sp="data",V_=Symbol("defined-tables");(0,xt.initSync)();yr=Object.create(null),$e=Object.create(null);(0,pp._assignPackageExport)("databases",$e);(0,pp._assignPackageExport)("tables",yr);Mo=Symbol.for("next-table-id"),Tp=[],Wn=new Map;a(E2,"getTables");a(ls,"getDatabases");a(h2,"resetDatabases");a(qc,"readMetaDb");a(_C,"ensureDB");a(dC,"setTable");a(mc,"database");a(Am,"dropDatabase");a(tt,"table");m2=1e3,p2=10;a(S2,"runIndexing");a(T2,"dropTableMeta");a(gp,"onUpdatedTable")});var $=T((Que,yC)=>{"use strict";var Qn=require("path"),pC=require("fs-extra"),jt=G(),fC=require("fs-extra"),$_=require("os"),g2=require("net"),R2=require("recursive-iterator"),Ye=y(),A2=sA(),EC=require("papaparse"),Y_=require("moment"),{inspect:O2}=require("util"),hC=require("is-number"),Wue=require("lodash"),N2=require("minimist"),b2=require("https"),y2=require("http"),{hdb_errors:K_}=j(),I2=/^((\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)))$/,SC=require("util").promisify(setTimeout),w2=100,C2=5,L2="",D2=4,mC={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};yC.exports={isEmpty:wr,isEmptyOrZeroLength:xs,arrayHasEmptyValues:P2,arrayHasEmptyOrZeroLengthValues:v2,buildFolderPath:B2,isBoolean:TC,errorizeMessage:U2,stripFileExtension:q2,autoCast:F2,autoCastJSON:gC,autoCastJSONDeep:Ap,removeDir:G2,compareVersions:x2,isCompatibleDataVersion:k2,escapeRawValue:V2,unescapeValue:$2,stringifyProps:Y2,timeoutPromise:W2,isClusterOperation:z2,getClusterUser:X2,checkGlobalSchemaTable:J2,getHomeDir:AC,getPropsFilePath:K2,promisifyPapaParse:j2,removeBOM:OC,createEventPromise:Z2,checkProcessRunning:eJ,checkSchemaTableExist:tJ,checkSchemaExists:NC,checkTableExists:bC,getStartOfTomorrowInSeconds:rJ,getLimitKey:sJ,isObject:H2,isNotEmptyAndHasValue:M2,autoCasterIsNumberCheck:RC,backtickASTSchemaItems:nJ,isPortTaken:Q2,createForkArgs:iJ,autoCastBoolean:oJ,async_set_timeout:SC,getTableHashAttribute:aJ,doesSchemaExist:cJ,doesTableExist:uJ,stringifyObj:lJ,ms_to_time:_J,changeExtension:dJ,getEnvCliRootPath:Op,noBootFile:fJ,httpRequest:EJ,transformReq:hJ,convertToMS:mJ,PACKAGE_ROOT:Ye.PACKAGE_ROOT};function U2(e){return e instanceof Error?e:new Error(e)}a(U2,"errorizeMessage");function wr(e){return e==null}a(wr,"isEmpty");function M2(e){return!wr(e)&&(e||e===0||e===""||TC(e))}a(M2,"isNotEmptyAndHasValue");function xs(e){return wr(e)||e.length===0||e.size===0}a(xs,"isEmptyOrZeroLength");function P2(e){if(wr(e))return!0;for(let t=0;t<e.length;t++)if(wr(e[t]))return!0;return!1}a(P2,"arrayHasEmptyValues");function v2(e){if(xs(e))return!0;for(let t=0;t<e.length;t++)if(xs(e[t]))return!0;return!1}a(v2,"arrayHasEmptyOrZeroLengthValues");function B2(...e){try{return e.join(Qn.sep)}catch{console.error(e)}}a(B2,"buildFolderPath");function TC(e){return wr(e)?!1:e===!0||e===!1}a(TC,"isBoolean");function H2(e){return wr(e)?!1:typeof e=="object"}a(H2,"isObject");function q2(e){return xs(e)?L2:e.slice(0,-D2)}a(q2,"stripFileExtension");function F2(e){return wr(e)||e===""||typeof e!="string"?e:mC[e]!==void 0?mC[e]:RC(e)===!0?Number(e):I2.test(e)?new Date(e):e}a(F2,"autoCast");function gC(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(gC,"autoCastJSON");function Ap(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=Ap(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=Ap(r);s!==r&&(e[t]=s)}return e}else return gC(e)}a(Ap,"autoCastJSONDeep");function RC(e){if(e.startsWith("0.")&&hC(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&hC(e))}a(RC,"autoCasterIsNumberCheck");async function G2(e){if(xs(e))throw new Error(`Directory path: ${e} does not exist`);try{await fC.emptyDir(e),await fC.remove(e)}catch(t){throw jt.error(`Error removing files in ${e} -- ${t}`),t}}a(G2,"removeDir");function x2(e,t){if(xs(e)){jt.info("Invalid current version sent as parameter.");return}if(xs(t)){jt.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").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(x2,"compareVersions");function k2(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(k2,"isCompatibleDataVersion");function V2(e){if(wr(e))return e;let t=String(e);return t==="."?Ye.UNICODE_PERIOD:t===".."?Ye.UNICODE_PERIOD+Ye.UNICODE_PERIOD:t.replace(Ye.FORWARD_SLASH_REGEX,Ye.UNICODE_FORWARD_SLASH)}a(V2,"escapeRawValue");function $2(e){if(wr(e))return e;let t=String(e);return t===Ye.UNICODE_PERIOD?".":t===Ye.UNICODE_PERIOD+Ye.UNICODE_PERIOD?"..":String(e).replace(Ye.ESCAPED_FORWARD_SLASH_REGEX,"/")}a($2,"unescapeValue");function Y2(e,t){if(wr(e))return jt.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+$_.EOL}!xs(s)&&s[0]===";"?r+=" "+s+n+$_.EOL:xs(s)||(r+=s+"="+n+$_.EOL)}catch{jt.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Y2,"stringifyProps");function AC(){let e;try{e=$_.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(AC,"getHomeDir");function K2(){let e=Qn.join(AC(),Ye.HDB_HOME_DIR_NAME,Ye.BOOT_PROPS_FILE_NAME);return pC.existsSync(e)||(e=Qn.join(__dirname,"../","hdb_boot_properties.file")),e}a(K2,"getPropsFilePath");function W2(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(W2,"timeoutPromise");async function Q2(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=g2.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Q2,"isPortTaken");function z2(e){try{return Ye.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){jt.error(`Error checking operation against cluster ops ${t}`)}return!1}a(z2,"isClusterOperation");function J2(e,t){let r=(fe(),Z(Ce)).getDatabases();if(!r[e])return K_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return K_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(J2,"checkGlobalSchemaTable");function X2(e,t){if(wr(t)){jt.warn("No CLUSTERING_USER defined, clustering disabled");return}if(wr(e)||xs(e)){jt.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){jt.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){jt.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(X2,"getClusterUser");function j2(){EC.parsePromise=function(e,t,r){return new Promise(function(s,n){EC.parse(e,{header:!0,transformHeader:OC,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(j2,"promisifyPapaParse");function OC(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(OC,"removeBOM");function Z2(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;jt.info(`Got cluster status event response: ${O2(n)}`);try{i.cancel()}catch{jt.error("Error trying to cancel timeout.")}s(n)})})}a(Z2,"createEventPromise");async function eJ(e){let t=!0,r=0;do await SC(w2*r++),(await A2.findPs(e)).length>0&&(t=!1);while(t&&r<C2);if(t)throw new Error(`process ${e} was not started`)}a(eJ,"checkProcessRunning");function tJ(e,t){let r=NC(e);if(r)return r;let s=bC(e,t);if(s)return s}a(tJ,"checkSchemaTableExist");function NC(e){let{getDatabases:t}=(fe(),Z(Ce));if(!t()[e])return K_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(NC,"checkSchemaExists");function bC(e,t){let{getDatabases:r}=(fe(),Z(Ce));if(!r()[e][t])return K_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(bC,"checkTableExists");function rJ(){let e=Y_().utc().add(1,Ye.MOMENT_DAYS_TAG).startOf(Ye.MOMENT_DAYS_TAG).unix(),t=Y_().utc().unix();return e-t}a(rJ,"getStartOfTomorrowInSeconds");function sJ(){return Y_().utc().format("DD-MM-YYYY")}a(sJ,"getLimitKey");function nJ(e){try{let t=new R2(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){jt.error("Got an error back ticking items."),jt.error(t)}}a(nJ,"backtickASTSchemaItems");function iJ(e){return[e]}a(iJ,"createForkArgs");function oJ(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(oJ,"autoCastBoolean");function aJ(e,t){let{getDatabases:r}=(fe(),Z(Ce)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(aJ,"getTableHashAttribute");function cJ(e){let{getDatabases:t}=(fe(),Z(Ce));return t()[e]!==void 0}a(cJ,"doesSchemaExist");function uJ(e,t){let{getDatabases:r}=(fe(),Z(Ce));return r()[e]?.[t]!==void 0}a(uJ,"doesTableExist");function lJ(e){try{return JSON.stringify(e)}catch{return e}}a(lJ,"stringifyObj");function _J(e){let t=Y_.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(_J,"ms_to_time");function dJ(e,t){let r=Qn.basename(e,Qn.extname(e));return Qn.join(Qn.dirname(e),r+t)}a(dJ,"changeExtension");function Op(){if(process.env[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=N2(process.argv);if(e[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(Op,"getEnvCliRootPath");var Rp;function fJ(){if(Rp)return Rp;let e=Op();Op()&&pC.pathExistsSync(Qn.join(e,Ye.HDB_CONFIG_FILE))&&(Rp=!0)}a(fJ,"noBootFile");function EJ(e,t){let r;return e.protocol==="http:"?r=y2:r=b2,new Promise((s,n)=>{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",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(EJ,"httpRequest");function hJ(e){if(!e.schema&&!e.database){e.schema=Ye.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(hJ,"transformReq");function mJ(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(mJ,"convertToMS")});var X=T((Jue,CC)=>{"use strict";var Np=require("fs-extra"),Ss=require("path"),IC=require("os"),pJ=require("properties-reader"),Gc=G(),Hi=$(),ee=y(),W_=Rr(),SJ="Error initializing environment manager",Q_="BOOT_PROPS_FILE_PATH",wC=!1,TJ={[ee.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},dn={};CC.exports={BOOT_PROPS_FILE_PATH:Q_,getHdbBasePath:gJ,setHdbBasePath:RJ,get:AJ,initSync:NJ,setProperty:he,initTestEnvironment:bJ};function gJ(){return dn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(gJ,"getHdbBasePath");function RJ(e){dn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(RJ,"setHdbBasePath");function AJ(e){let t=W_.getConfigValue(e);return t===void 0?dn[e]:t}a(AJ,"get");function he(e,t){TJ[e]&&(dn[e]=t),W_.updateConfigObject(e,t)}a(he,"setProperty");function OJ(){let e;try{e=Hi.getPropsFilePath(),Np.accessSync(e,Np.constants.F_OK|Np.constants.R_OK),wC=!0;let t=pJ(e);return dn[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),dn[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),dn[Q_]=e,!0}catch{return Gc.trace(`Environment manager found no properties file at ${e}`),!1}}a(OJ,"doesPropFileExist");function NJ(e=!1){try{(wC||OJ()||Hi.noBootFile())&&(W_.initConfig(e),dn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=W_.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Gc.error(SJ),Gc.error(t),console.error(t),process.exit(1)}}a(NJ,"initSync");function bJ(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Ss.join(__dirname,"../../","unitTests");dn[Q_]=Ss.join(u,"hdb_boot_properties.file"),he(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ss.join(u,"settings.test")),he(ee.HDB_SETTINGS_NAMES.INSTALL_USER,IC.userInfo()?IC.userInfo().username:void 0),he(ee.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Ss.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.HDB_SETTINGS_NAMES.CERT_KEY,Ss.join(u,"envDir","utility","keys","certificate.pem")),he(ee.CONFIG_PARAMS.TLS_PRIVATEKEY,Ss.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.CONFIG_PARAMS.TLS_CERTIFICATE,Ss.join(u,"envDir","utility","keys","certificate.pem")),he(ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),he(ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ss.join(u,"envDir","log")),he(ee.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),he(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ss.join(u,"envDir")),he(ee.CONFIG_PARAMS.STORAGE_PATH,Ss.join(u,"envDir")),he(ee.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Hi.isEmpty(n)?!0:n),he(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Hi.isEmpty(n)?!0:n),he(ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),he(ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Hi.isEmpty(i)?!1:i),he(ee.CONFIG_PARAMS.HTTP_CORS,Hi.isEmpty(i)?!1:i),he(ee.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),he(ee.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ss.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),he(ee.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Hi.isEmpty(c)?!1:c),o&&(he("CORS_ACCESSLIST",o),he(ee.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(he(ee.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),he(ee.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(he(ee.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),he(ee.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(he(ee.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),he(ee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Q_}. Please check your boot props and settings files`;Gc.fatal(r),Gc.error(t)}}a(bJ,"initTestEnvironment")});var yp={};ve(yp,{loadGQLSchema:()=>wJ,start:()=>bp,startOnMainThread:()=>IJ});function bp({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let Q=function(F){if(F.kind==="NonNullType"){let B=Q(F.type);return B.nullable=!1,B}if(F.kind==="ListType")return{type:"array",elements:Q(F.type)};let K={type:F.name?.value};return Object.defineProperty(K,"location",{value:F.loc.startToken}),K};a(Q,"getProperty");let R=S.name.value,b=[],O={table:null,database:null,properties:b};f.set(R,O);for(let F of S.directives){if(F.name.value==="table"){for(let w of F.arguments)O[w.name.value]=w.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=R),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,E.push(O)}if(F.name.value==="sealed"&&(O.sealed=!0),F.name.value==="export"){O.export=!0;for(let w of F.arguments)w.name.value==="name"&&(O.export={name:w.value.value})}}let Y=!1;for(let F of S.fields){let w=Q(F.type);w.name=F.name.value,b.push(w);for(let K of F.directives)if(K.name.value==="primaryKey")Y?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,Y=!0);else if(K.name.value==="indexed")w.indexed=!0;else if(K.name.value==="createdTime")w.assignCreatedTime=!0;else if(K.name.value==="updatedTime")w.assignUpdatedTime=!0;else if(K.name.value==="expiresAt")w.expiresAt=!0;else if(K.name.value==="allow"){let B=w.authorizedRoles=[];for(let x of K.arguments)x.name.value==="role"&&B.push(x.value.value)}}O.typeName=R,R==="Query"&&(h=O)}function p(S){let R=f.get(S.type);R?S.properties=R.properties:S.type==="array"?p(S.elements):yJ.includes(S.type)||(0,LC.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}a(p,"connectPropertyType");for(let S of f.values())for(let R of S.properties)p(R);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,z_.dirname)(s),S.tableClass):i.set((0,z_.dirname)(s)+"/"+(S.export.name||S.typeName),S.tableClass));if(h)for(let S of h.properties){let R=f.get(S.type);if(!R)throw new Error(`${S.type} was not found as a Query export`);i.set((0,z_.dirname)(s)+"/"+S.name,R.tableClass)}}}var z_,LC,yJ,IJ,wJ,DC=Te(()=>{z_=require("path");fe();LC=D(Je()),yJ=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(bp,"start");IJ=bp,wJ=bp({ensureTable:tt}).handleFile});async function J_(e){return CJ?(xc||(xc=LJ(UJ)),(await(await xc).import(e)).namespace):import(e)}async function LJ(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),xc=new Compartment({console,Math,Date,fetch:DJ,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,MC.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:Ot,tables:yr,databases:$e})}};let s=await(0,UC.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),xc}function DJ(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 UJ(){return{Resource:Ot,tables:yr}}var UC,MC,CJ,xc,Ip=Te(()=>{ns();fe();UC=require("fs/promises"),MC=require("path"),CJ=!1;a(J_,"secureImport");a(LJ,"getCompartment");a(DJ,"secureOnlyFetch");a(UJ,"getGlobalVars")});var Cp={};ve(Cp,{handleFile:()=>MJ});async function MJ(e,t,r,s){let n=new Map,i=(0,PC.pathToFileURL)(r).toString(),o=await J_(i);u(o.default)&&s.set((0,wp.dirname)(t),o.default),c(o,(0,wp.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.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"),n}var PC,wp,vC=Te(()=>{PC=require("url");Ip();wp=require("path");a(MJ,"handleFile")});var Dp={};ve(Dp,{start:()=>PJ});function PJ({resources:e}){e.set("login",Lp),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Lp,BC=Te(()=>{ns();a(PJ,"start");Lp=class extends Ot{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var Mp=T((cle,FC)=>{"use strict";var{Readable:vJ}=require("stream"),BJ=1e4;FC.exports={streamAsJSON(e){return new Up({value:e})}};var Up=class extends vJ{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],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(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 n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),HC)}catch(n){yield HC(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);qC(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>BJ?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 qC(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))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 s of this.activeIterators)t?s.throw(t):s.return();r()}};function HC(e){return console.error(e),JSON.stringify(e.toString())}a(HC,"handleError");function qC(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(qC,"when")});var X_=T((lle,GC)=>{"use strict";var HJ=ds();GC.exports={writeTransaction:qJ};function qJ(e,t,r){return HJ.writeTransaction(e,t,r)}a(qJ,"writeTransaction")});var $C=T((fle,VC)=>{"use strict";var FJ=Fr(),GJ=xn(),xC=G(),xJ=Gr(),dle=X_(),kJ=require("clone"),vp=require("alasql"),VJ=r_(),kC=require("util"),$J=kC.promisify(GJ.getTableSchema),YJ=kC.promisify(FJ.search),KJ=y(),Pp=$();VJ(vp);VC.exports={update:QJ};var WJ="There was a problem performing this update. Please check the logs and try again.";async function QJ({statement:e,hdb_user:t}){let r=await $J(e.table.databaseid,e.table.tableid),s=zJ(e.columns);Pp.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=kJ(n),c=Pp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=vp.parse(u).statements[0],l=await YJ(_),d=JJ(s,l);return XJ(o,d,t)}a(QJ,"update");function zJ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=vp.compile(`SELECT ${r.expression.toString()} AS [${KJ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw xC.error(t),new Error(WJ)}}a(zJ,"createUpdateRecord");function JJ(e,t){return Pp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(JJ,"buildUpdateRecords");async function XJ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await xJ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){xC.error(`Error delete new_attributes from update response: ${i}`)}return n}a(XJ,"updateRecords")});var KC=T((ple,YC)=>{var jJ=require("alasql"),ZJ=Fr(),e4=G(),t4=ds(),Hp=require("util"),Bp=$(),r4=y(),s4=xn(),hle=X_(),mle=Gr(),n4="record",i4="successfully deleted",o4=Hp.callbackify(l4),a4=Hp.promisify(ZJ.search),c4=Hp.promisify(s4.getTableSchema);YC.exports={convertDelete:o4};function u4(e){return`${e.deleted_hashes.length} ${n4}${e.deleted_hashes.length===1?"":"s"} ${i4}`}a(u4,"generateReturnMessage");async function l4({statement:e,hdb_user:t}){let r=await c4(e.table.databaseid,e.table.tableid);Bp.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=Bp.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=jJ.parse(o).statements[0],u={operation:r4.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await a4(c);let _=await t4.deleteRecords(u);return Bp.isEmptyOrZeroLength(_.message)&&(_.message=u4(_)),delete _.txn_time,_}catch(_){throw e4.error(_),_.hdb_code?_.message:_}}a(l4,"convertDelete")});var XC=T((Tle,JC)=>{"use strict";var _4=bi(),{hdb_errors:WC}=j(),{getDatabases:QC}=(fe(),Z(Ce));JC.exports={checkSchemaExists:zC,checkSchemaTableExists:d4,schema_describe:_4};async function zC(e){if(!QC()[e])return WC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(zC,"checkSchemaExists");async function d4(e,t){let r=await zC(e);if(r)return r;if(!QC()[e][t])return WC.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(d4,"checkSchemaTableExists")});var kc=T((Rle,f4)=>{f4.exports={name:"harperdb",version:"4.2.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: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: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:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","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.425.0","@aws-sdk/lib-storage":"3.418.0","@endo/static-module-record":"^0.8.1","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.4.0","@fastify/static":"~6.11.0","@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:"1.7.4","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.23.2","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.8.0","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.0-beta.2",lodash:"4.17.21",mathjs:"11.11.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",msgpackr:"1.9.9",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.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.6",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",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"^8.14.1",yaml:"2.3.2"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"0.27.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.2.2","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 _t=T((yle,mL)=>{"use strict";var wt=X();wt.initSync();var E4=require("fs-extra"),h4=require("semver"),Yc=require("path"),{monotonicFactory:m4}=require("ulidx"),ZC=m4(),p4=require("util"),eL=require("child_process"),S4=p4.promisify(eL.exec),T4=eL.spawn,Re=ke(),Oe=y(),xp=$(),$r=G(),j_=cn(),g4=X_(),Vc=Rr(),{onMessageByType:R4}=Je(),{isMainThread:A4}=require("worker_threads"),{Encoder:O4,decode:kp}=require("msgpackr"),tL=new O4,{isEmpty:qi}=xp,rL=xr(),N4=48*36e11,b4=5e9;A4&&R4(Oe.ITC_EVENT_TYPES.RESTART,()=>{Ts=void 0,qo=void 0});var{connect:y4,StorageType:sL,RetentionPolicy:nL,AckPolicy:Z_,DeliverPolicy:ed,DiscardPolicy:I4,NatsConnection:Ale,JetStreamManager:Ole,JetStreamClient:Nle,StringCodec:ble,JSONCodec:w4,createInbox:Vp,headers:C4,ErrorCode:jC}=require("nats"),{PACKAGE_ROOT:L4}=y(),D4=kc(),{recordAction:U4}=(_n(),Z(Cc)),iL=w4(),M4="clustering",P4=D4.engines[Re.NATS_SERVER_NAME],v4=Yc.join(L4,"dependencies"),Gp=Yc.join(v4,`${process.platform}-${process.arch}`,Re.NATS_BINARY_NAME),qp,Fp,$c,Bo,Ho;mL.exports={runCommand:oL,checkNATSServerInstalled:B4,createConnection:$p,getConnection:td,getJetStreamManager:Kc,getJetStream:aL,getNATSReferences:Zt,getServerList:q4,createLocalStream:Yp,listStreams:cL,deleteLocalStream:F4,getServerConfig:Wc,listRemoteStreams:G4,viewStream:x4,viewStreamIterator:k4,publishToStream:V4,createWorkQueueStream:$4,addSourceToWorkStream:lL,request:K4,removeSourceFromWorkStream:dL,reloadNATS:Kp,reloadNATSHub:W4,reloadNATSLeaf:Q4,extractServerName:_L,requestErrorHandler:z4,updateWorkStream:J4,createLocalTableStream:EL,createTableStreams:X4,purgeTableStream:hL,purgeSchemaTableStreams:j4,getStreamInfo:Z4,updateLocalStreams:t3,closeConnection:H4,getJsmServerName:Qc,addNatsMsgHeader:uL,updateIngestStreamConsumer:Y4};async function oL(e,t=void 0){let{stdout:r,stderr:s}=await S4(e,{cwd:t});if(s)throw new Error(s.replace(`
1
+ var LH=Object.create;var Na=Object.defineProperty;var DH=Object.getOwnPropertyDescriptor;var UH=Object.getOwnPropertyNames;var MH=Object.getPrototypeOf,PH=Object.prototype.hasOwnProperty;var a=(e,t)=>Na(e,"name",{value:t,configurable:!0});var Te=(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)Na(e,r,{get:t[r],enumerable:!0})},bR=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of UH(t))!PH.call(e,n)&&n!==r&&Na(e,n,{get:()=>t[n],enumerable:!(s=DH(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?LH(MH(e)):{},bR(t||!e||!e.__esModule?Na(r,"default",{value:e,enumerable:!0}):r,e)),Z=e=>bR(Na({},"__esModule",{value:!0}),e);var y=T((ene,FR)=>{"use strict";var Pr=require("path"),vH=require("fs"),{relative:jse,join:Zse}=Pr,{existsSync:BH}=vH;function HH(){let e=__dirname;for(;!BH(Pr.join(e,"package.json"));){let t=Pr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(HH,"getHDBPackageRoot");var Mn=HH(),yR="js",el=yR,qH="harperdb-config.yaml",FH="defaultConfig.yaml",GH="hdb",IR=`harperdb.${el}`,wR=`customFunctionsServer.${el}`,xH=`restartHdb.${el}`,EE="HarperDB",Zu="Custom Functions",tl="Clustering Hub",rl="Clustering Leaf",kH="Clustering Ingest Service",VH="Clustering Reply Service",$H="foreground.pid",YH="hdb.pid",KH="data",WH={HDB:EE,CLUSTERING_HUB:tl,CLUSTERING_LEAF:rl,CLUSTERING_INGEST_SERVICE:kH,CLUSTERING_REPLY_SERVICE:VH,CUSTOM_FUNCTIONS:Zu,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"},QH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},zH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},JH={harperdb:EE,"clustering hub":tl,"clustering leaf":rl,"custom functions":Zu,custom_functions:Zu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},XH={CLUSTERING_HUB_PROC_DESCRIPTOR:tl,CLUSTERING_LEAF_PROC_DESCRIPTOR:rl},fE={HDB:Pr.join(Mn,"server/harperdb"),CUSTOM_FUNCTIONS:Pr.join(Mn,"server/customFunctions"),CLUSTERING_HUB:Pr.join(Mn,"server/nats"),CLUSTERING_LEAF:Pr.join(Mn,"server/nats")},jH={HDB:Pr.join(fE.HDB,IR),CUSTOM_FUNCTIONS:Pr.join(fE.CUSTOM_FUNCTIONS,wR)},ZH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Pr.join(Mn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Pr.join(Mn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Pr.join(Mn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},eq={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},CR="support@harperdb.io",tq="customer-success@harperdb.io",LR=1,rq=4141,DR="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",sq="https://www.harperdb.io/product",nq=`For support, please submit a request at ${DR} or contact ${CR}`,UR=`For license support, please contact ${tq}`,iq="None of the specified records were found.",oq="hash attribute not found",aq=`Your current license only supports ${LR} role. ${UR}`,cq="Your current license only supports 3 connections to a node.",uq="127.0.0.1",lq=1,_q=/^\.$/,dq=/^\.\.$/,fq="U+002E",Eq=/\//g,hq="U+002F",mq=/U\+002F/g,pq=/^U\+002E$/,Sq=/^U\+002EU\+002E$/,Tq="d",gq=999999,Rq="*",Aq="--max-old-space-size=",Oq="system",Nq="__hdb_hash",bq=".harperdb",yq=".hdb",Iq="keys",wq="hdb_boot_properties.file",Cq=".updateConfig.json",Lq="SIGTSTP",Dq=24,Uq=6e4,Mq=448,Pq="blob",vq="trash",Bq="database",Hq="schema",qq="transactions",Fq=".count",Gq="id",xq="PROCESS_NAME",MR={SETTINGS_PATH_KEY:"settings_path"},PR=require("lodash"),kq={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",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},Vq={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},$q={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Yq={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"},Kq={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"},dr="hdb_internal:",Wq={CREATE_SCHEMA:dr+"create_schema",CREATE_TABLE:dr+"create_table",CREATE_ATTRIBUTE:dr+"create_attribute",ADD_USER:dr+"add_user",ALTER_USER:dr+"alter_user",DROP_USER:dr+"drop_user",HDB_NODES:dr+"hdb_nodes",HDB_USERS:dr+"hdb_users",HDB_WORKERS:dr+"hdb_workers",CATCHUP:dr+"catchup",SCHEMA_CATCHUP:dr+"schema_catchup",WORKER_ROOM:dr+"cluster_workers"},Qq={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"},zq="060493.ks",Jq=".license",Xq={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},J={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",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"},jq={CSV:".csv",JSON:".json"},Zq={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},eF={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},ba={};ba[J.INSERT]=J.INSERT;ba[J.UPDATE]=J.UPDATE;ba[J.UPSERT]=J.UPSERT;ba[J.DELETE]=J.DELETE;var ye=Object.create(null);ye[J.DESCRIBE_ALL]=J.DESCRIBE_ALL;ye[J.DESCRIBE_TABLE]=J.DESCRIBE_TABLE;ye[J.DESCRIBE_SCHEMA]=J.DESCRIBE_SCHEMA;ye[J.READ_LOG]=J.READ_LOG;ye[J.ADD_NODE]=J.ADD_NODE;ye[J.LIST_USERS]=J.LIST_USERS;ye[J.LIST_ROLES]=J.LIST_ROLES;ye[J.USER_INFO]=J.USER_INFO;ye[J.SQL]=J.SQL;ye[J.GET_JOB]=J.GET_JOB;ye[J.SEARCH_JOBS_BY_START_DATE]=J.SEARCH_JOBS_BY_START_DATE;ye[J.DELETE_FILES_BEFORE]=J.DELETE_FILES_BEFORE;ye[J.EXPORT_LOCAL]=J.EXPORT_LOCAL;ye[J.EXPORT_TO_S3]=J.EXPORT_TO_S3;ye[J.CLUSTER_STATUS]=J.CLUSTER_STATUS;ye[J.REMOVE_NODE]=J.REMOVE_NODE;ye[J.RESTART]=J.RESTART;ye[J.CUSTOM_FUNCTIONS_STATUS]=J.CUSTOM_FUNCTIONS_STATUS;ye[J.GET_CUSTOM_FUNCTIONS]=J.GET_CUSTOM_FUNCTIONS;ye[J.GET_CUSTOM_FUNCTION]=J.GET_CUSTOM_FUNCTION;ye[J.SET_CUSTOM_FUNCTION]=J.SET_CUSTOM_FUNCTION;ye[J.DROP_CUSTOM_FUNCTION]=J.DROP_CUSTOM_FUNCTION;ye[J.ADD_CUSTOM_FUNCTION_PROJECT]=J.ADD_CUSTOM_FUNCTION_PROJECT;ye[J.DROP_CUSTOM_FUNCTION_PROJECT]=J.DROP_CUSTOM_FUNCTION_PROJECT;ye[J.PACKAGE_CUSTOM_FUNCTION_PROJECT]=J.PACKAGE_CUSTOM_FUNCTION_PROJECT;ye[J.DEPLOY_CUSTOM_FUNCTION_PROJECT]=J.DEPLOY_CUSTOM_FUNCTION_PROJECT;var tF={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},rF={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},vR={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=PR.invert(vR),nF={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"},N={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",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_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",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_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority"},BR={settings_path:MR.SETTINGS_PATH_KEY,hdb_root_key:N.ROOTPATH,hdb_root:N.ROOTPATH,rootpath:N.ROOTPATH,server_port_key:N.OPERATIONSAPI_NETWORK_PORT,server_port:N.OPERATIONSAPI_NETWORK_PORT,cert_key:N.TLS_CERTIFICATE,certificate:N.TLS_CERTIFICATE,private_key_key:N.TLS_PRIVATEKEY,private_key:N.TLS_PRIVATEKEY,http_secure_enabled_key:N.OPERATIONSAPI_NETWORK_HTTPS,https_on:N.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:N.OPERATIONSAPI_NETWORK_CORS,cors_on:N.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:N.LOGGING_LEVEL,log_level:N.LOGGING_LEVEL,log_path_key:N.LOGGING_ROOT,log_path:N.LOGGING_ROOT,clustering_node_name_key:N.CLUSTERING_NODENAME,node_name:N.CLUSTERING_NODENAME,clustering_enabled_key:N.CLUSTERING_ENABLED,clustering:N.CLUSTERING_ENABLED,max_http_threads:N.THREADS,max_hdb_processes:N.THREADS,server_timeout_key:N.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:N.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:N.LOGGING_AUDITLOG,disable_transaction_log:N.LOGGING_AUDITLOG,operation_token_timeout_key:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:N.HTTP_PORT,custom_functions_port:N.HTTP_PORT,custom_functions_directory_key:N.COMPONENTSROOT,custom_functions_directory:N.COMPONENTSROOT,max_custom_function_processes:N.THREADS,log_to_file:N.LOGGING_FILE,log_to_stdstreams:N.LOGGING_STDSTREAMS,local_studio_on:N.LOCALSTUDIO_ENABLED,clustering_port:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:N.CLUSTERING_USER,clustering_enabled:N.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:N.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:N.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:N.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:N.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:N.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:N.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:N.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:N.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:N.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:N.CLUSTERING_NODENAME,clustering_tls_certificate:N.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:N.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:N.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:N.CLUSTERING_TLS_INSECURE,clustering_tls_verify:N.CLUSTERING_TLS_VERIFY,clustering_loglevel:N.CLUSTERING_LOGLEVEL,clustering_republishmessages:N.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:N.CLUSTERING_DATABASELEVEL,customfunctions_network_port:N.HTTP_PORT,customfunctions_tls_certificate:N.TLS_CERTIFICATE,customfunctions_network_cors:N.HTTP_CORS,customfunctions_network_corsaccesslist:N.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:N.HTTP_HEADERSTIMEOUT,customfunctions_network_https:N.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:N.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:N.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:N.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:N.HTTP_TIMEOUT,http_threads:N.THREADS,threads:N.THREADS,http_session_affinity:N.HTTP_SESSIONAFFINITY,http_compressionthreshold:N.HTTP_COMPRESSIONTHRESHOLD,http_cors:N.HTTP_CORS,http_corsaccesslist:N.HTTP_CORSACCESSLIST,http_headerstimeout:N.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:N.HTTP_KEEPALIVETIMEOUT,http_timeout:N.HTTP_TIMEOUT,http_port:N.HTTP_PORT,http_secureport:N.HTTP_SECUREPORT,customfunctions_processes:N.THREADS,customfunctions_root:N.COMPONENTSROOT,localstudio_enabled:N.LOCALSTUDIO_ENABLED,logging_file:N.LOGGING_FILE,logging_level:N.LOGGING_LEVEL,logging_root:N.LOGGING_ROOT,logging_rotation_enabled:N.LOGGING_ROTATION_ENABLED,logging_rotation_compress:N.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:N.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:N.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:N.LOGGING_ROTATION_PATH,logging_stdstreams:N.LOGGING_STDSTREAMS,logging_auditlog:N.LOGGING_AUDITLOG,logging_auditretention:N.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:N.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:N.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:N.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:N.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:N.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_secureport:N.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:N.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:N.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:N.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:N.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:N.ROOTPATH,databases:N.DATABASES,storage_path:N.STORAGE_PATH,ignorescripts:N.IGNORE_SCRIPTS,mqtt_network_port:N.MQTT_NETWORK_PORT,mqtt_websocket:N.MQTT_WEBSOCKET,mqtt_network_secureport:N.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:N.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:N.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:N.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:N.AUTHENTICATION_CACHETTL,authentication_enablesessions:N.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:N.COMPONENTSROOT,tls_certificate:N.TLS_CERTIFICATE,tls_privatekey:N.TLS_PRIVATEKEY,tls_certificateauthority:N.TLS_CERTIFICATEAUTHORITY};for(let e in N){let t=N[e];BR[t.toLowerCase()]=t}var iF={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},oF={csv_file_load:"csv_file_load",csv_data_load:J.CSV_DATA_LOAD,csv_url_load:J.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},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"},cF={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},uF={VERSION_DEFAULT:"2.2.0"},lF={DEVELOPMENT:8192,DEFAULT:512},_F={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"},dF={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"},fF={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},HR={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},EF=Symbol("metadata"),hF="__clustering__",mF=Object.values(HR),pF=15984864e5,qR={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},SF=PR.invert(qR),TF={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"},gF=111,RF=`\r
2
+ `,AF={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},OF=["*","%"],NF="unauthorized_access",bF="func_val",yF={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},IF={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},wF={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"},CF={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},LF={HTTP:"http"},DF={STOPPED:"stopped",ONLINE:"online"},UF="3.x.x",MF={SUCCESS:"success",FAILURE:"failure"},PF={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};FR.exports={LOCAL_HARPERDB_OPERATIONS:ye,HDB_SUPPORT_ADDRESS:CR,HDB_SUPPORT_URL:DR,HDB_PRICING_URL:sq,SUPPORT_HELP_MSG:nq,LICENSE_HELP_MSG:UR,HDB_PROC_NAME:IR,HDB_PROC_DESCRIPTOR:EE,CLUSTERING_LEAF_PROC_DESCRIPTOR:rl,CLUSTERING_HUB_PROC_DESCRIPTOR:tl,SYSTEM_SCHEMA_NAME:Oq,HASH_FOLDER_NAME:Nq,HDB_HOME_DIR_NAME:bq,UPDATE_FILE_NAME:Cq,LICENSE_KEY_DIR_NAME:Iq,BOOT_PROPS_FILE_NAME:wq,JOB_TYPE_ENUM:oF,JOB_STATUS_ENUM:Xq,SYSTEM_TABLE_NAMES:Yq,SYSTEM_TABLE_HASH_ATTRIBUTES:Kq,OPERATIONS_ENUM:J,VALID_S3_FILE_TYPES:jq,S3_BUCKET_AUTH_KEYS:Zq,VALID_SQL_OPS_ENUM:eF,GEO_CONVERSION_ENUM:rF,HDB_SETTINGS_NAMES:vR,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:sF,SERVICE_ACTIONS_ENUM:tF,CLUSTER_MESSAGE_TYPE_ENUM:aF,CLUSTER_CONNECTION_DIRECTION_ENUM:cF,CLUSTER_EVENTS_DEFS_ENUM:_F,PERIOD_REGEX:_q,DOUBLE_PERIOD_REGEX:dq,UNICODE_PERIOD:fq,FORWARD_SLASH_REGEX:Eq,UNICODE_FORWARD_SLASH:hq,ESCAPED_FORWARD_SLASH_REGEX:mq,ESCAPED_PERIOD_REGEX:pq,ESCAPED_DOUBLE_PERIOD_REGEX:Sq,REG_KEY_FILE_NAME:zq,RESTART_TIMEOUT_MS:Uq,HDB_FILE_PERMISSIONS:Mq,DATABASES_DIR_NAME:Bq,LEGACY_DATABASES_DIR_NAME:Hq,TRANSACTIONS_DIR_NAME:qq,LIMIT_COUNT_NAME:Fq,ID_ATTRIBUTE_STRING:Gq,INSERT_MODULE_ENUM:Vq,UPGRADE_JSON_FIELD_NAMES_ENUM:$q,RESTART_CODE:Lq,RESTART_CODE_NUM:Dq,CLUSTER_OPERATIONS:ba,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:Qq,HDB_INTERNAL_SC_CHANNEL_PREFIX:dr,INTERNAL_SC_CHANNELS:Wq,CLUSTERING_MESSAGE_TYPES:TF,HDB_FILE_SUFFIX:yq,BLOB_FOLDER_NAME:Pq,HDB_TRASH_DIR:vq,ORIGINATOR_SET_VALUE:gF,LICENSE_VALUES:uF,RAM_ALLOCATION_ENUM:lF,TIME_STAMP_NAMES_ENUM:HR,TIME_STAMP_NAMES:mF,PERMS_UPDATE_RELEASE_TIMESTAMP:pF,SEARCH_NOT_FOUND_MESSAGE:iq,SEARCH_ATTRIBUTE_NOT_FOUND:oq,LICENSE_ROLE_DENIED_RESPONSE:aq,LICENSE_MAX_CONNS_REACHED:cq,BASIC_LICENSE_MAX_NON_CU_ROLES:LR,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:rq,VALUE_SEARCH_COMPARATORS:qR,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:SF,LICENSE_FILE_NAME:Jq,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:dF,NEW_LINE:RF,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:lq,MOMENT_DAYS_TAG:Tq,API_TURNOVER_SEC:gq,LOOPBACK:uq,CODE_EXTENSION:el,WILDCARD_SEARCH_VALUE:Rq,NODE_ERROR_CODES:fF,JAVASCRIPT_EXTENSION:yR,PERMS_CRUD_ENUM:AF,UNAUTHORIZED_PERMISSION_NAME:NF,SEARCH_WILDCARDS:OF,FUNC_VAL:bF,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:yF,JWT_ENUM:IF,CLUSTERING_FLAG:hF,ITC_EVENT_TYPES:wF,CUSTOM_FUNCTION_PROC_NAME:wR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Zu,SERVICES:CF,THREAD_TYPES:LF,MEM_SETTING_KEY:Aq,HDB_RESTART_SCRIPT:xH,PROCESS_DESCRIPTORS:WH,SERVICE_SERVERS:jH,SERVICE_SERVERS_CWD:fE,PROCESS_DESCRIPTORS_VALIDATE:JH,LAUNCH_SERVICE_SCRIPTS:ZH,LOG_LEVELS:zH,PROCESS_NAME_ENV_PROP:xq,LOG_NAMES:QH,PM2_PROCESS_STATUSES:DF,CONFIG_PARAM_MAP:BR,CONFIG_PARAMS:N,HDB_CONFIG_FILE:qH,HDB_DEFAULT_CONFIG_FILE:FH,ROLE_TYPES_ENUM:eq,BOOT_PROP_PARAMS:MR,INSTALL_PROMPTS:kq,HDB_ROOT_DIR_NAME:GH,CLUSTERING_PROCESSES:XH,FOREGROUND_PID_FILE:$H,PACKAGE_ROOT:Mn,PRE_4_0_0_VERSION:UF,DATABASES_PARAM_CONFIG:iF,METADATA_PROPERTY:EF,AUTH_AUDIT_STATUS:MF,AUTH_AUDIT_TYPES:PF,HDB_PID_FILE:YH,DEFAULT_DATABASE_NAME:KH,LEGACY_CONFIG_PARAMS:nF};hE()});var hE=T((sne,xR)=>{var vF=require("fast-glob"),{statSync:mE,existsSync:pE,readFileSync:BF,writeFileSync:HF}=require("fs"),{spawnSync:qF,spawn:FF,execFileSync:rne}=require("child_process"),{isMainThread:GF}=require("worker_threads"),{join:Pn,relative:GR}=require("path"),{PACKAGE_ROOT:rs}=y(),{tmpdir:xF,platform:kF}=require("os");require("source-map-support").install();var VF=["resources","server","dataLayer","components"],ya="ts-build",SE,$F=__filename.endsWith("tsBuild.js");if($F){if(GF){let r;try{mE(Pn(rs,ya)),r=!0}catch{}if(r)for(let s of vF.sync(VF.map(n=>n+"/**/*.ts"),{cwd:rs})){let n=0,i=0;try{n=mE(Pn(rs,s)).mtimeMs-5e3,i=mE(Pn(rs,ya,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),SE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),SE=!0;if(SE){let s=Pn(rs,"node_modules/.bin/tsc");kF()==="win32"&&(s+=".cmd");let n=qF(s,{cwd:rs});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=Pn(xF(),"harperdb-tsc.pid"),o;if(pE(i))try{process.kill(+BF(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=FF(s,["--watch"],{cwd:rs,detached:!0,stdio:"ignore"});HF(i,c.pid.toString()),c.unref()}}}}let e=xR.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(rs)&&!s[0].includes("node_modules")){let i=GR(rs,s[0]),o;i.startsWith(ya)?o=Pn(rs,GR(ya,i)):o=Pn(rs,ya,i);let c=Pn(o,r),u=c+".js";if(pE(u))return u;if(c.includes(".")&&pE(c))return c}return t(r,s,n)}}});var di={};ve(di,{server:()=>ct});var kR,ct,fr=Te(()=>{kR=require("../index"),ct={};(0,kR._assignPackageExport)("server",ct)});var TE=T((nne,YR)=>{"use strict";var VR=require("minimist");YR.exports=YF;function YF(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=$R(process.env),s=$R(VR(process.argv))):(r=process.env,s=VR(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(YF,"assignCMDENVVariables");function $R(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a($R,"objKeysToLowerCase")});var G=T((one,yE)=>{"use strict";var fi=require("fs-extra"),{workerData:KF,threadId:WF}=require("worker_threads"),en=require("path"),QR=require("yaml"),zR=require("properties-reader"),ut=y(),KR=TE(),QF=require("os"),{PACKAGE_ROOT:RE}=y(),{_assignPackageExport:zF}=require("../index"),wa={};for(let e in console)wa[e]||(wa[e]=console[e]);var Kt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},JR={STDOUT:"stdOut",STDERR:"stdErr"},JF=en.join(RE,"logs"),XF=en.join(RE,"config/yaml/",ut.HDB_DEFAULT_CONFIG_FILE),jF=1e4,Zs,Is,Yt,sl,nl,Ca,so,Ia;Ia===void 0&&XR();yE.exports={notify:eA,fatal:tA,error:La,warn:bE,info:il,debug:NE,trace:OE,setLogLevel:iG,log_level:Yt,loggerWithTag:ZF,suppressLogging:eG,initLogSettings:XR,setupConsoleLogging:jR,logCustomLevel:sG,closeLogFile:AE,getLogFilePath:()=>Ca,OUTPUTS:JR,AuthAuditLog:cG};zF("logger",yE.exports);function XR(e=!1){try{if(Ia===void 0||e){AE();let t=nG(),r=KR(["ROOTPATH"]);try{Ia=zR(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!fi.pathExistsSync(en.join(r.ROOTPATH,ut.HDB_CONFIG_FILE)))throw s}({level:Yt,config_log_path:nl,to_file:Zs,to_stream:Is}=oG(r.ROOTPATH?en.join(r.ROOTPATH,ut.HDB_CONFIG_FILE):Ia.get("settings_path"))),sl=ut.LOG_NAMES.HDB,Ca=en.join(nl,sl)}}catch(t){if(Ia=void 0,t.code===ut.NODE_ERROR_CODES.ENOENT){let r=KR(Object.keys(ut.CONFIG_PARAM_MAP),!0);for(let o in r){let c=ut.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===ut.CONFIG_PARAMS.LOGGING_LEVEL){Yt=u;continue}if(c===ut.CONFIG_PARAMS.LOGGING_STDSTREAMS){Is=u;continue}c===ut.CONFIG_PARAMS.LOGGING_FILE&&(Zs=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=aG();Zs=Zs===void 0?n:Zs,Zs=WR(Zs),Is=Is===void 0?i:Is,Is=WR(Is),Yt=Yt===void 0?s:Yt,nl=JF,sl=ut.LOG_NAMES.INSTALL,Ca=en.join(nl,sl);return}throw La("Error initializing log settings"),La(t),t}process.env.DEV_MODE&&(Is=!0),jR()}a(XR,"initLogSettings");var gE=!0;function jR(){ro("error",La),ro("warn",bE),ro("log",il),ro("info",il),ro("debug",NE),ro("trace",OE)}a(jR,"setupConsoleLogging");function ro(e,t){console[e]=function(...r){if(gE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return wa[e](...r)}}a(ro,"logConsole");function ZF(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(eA),fatal:r(tA),error:r(La),warn:r(bE),info:r(il),debug:r(NE),trace:r(OE)};function r(s){return function(...n){return s(t,...n)}}}a(ZF,"loggerWithTag");function eG(e){try{gE=!1,e()}finally{gE=!0}}a(eG,"suppressLogging");var tG=KF?.name?.replace(/ /g,"-")||"main";function tn(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-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||tG+"/"+WF);c<n;c++){let _=t[c];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
3
+ `}a(tn,"createLogRecord");function Da(e){Zs&&ZR(e),Is&&process.stdout.write(e)}a(Da,"logStdOut");function ol(e){Zs&&ZR(e),Is&&process.stderr.write(e)}a(ol,"logStdErr");function ZR(e){rG(),so?fi.appendFileSync(so,e):wa.log(e)}a(ZR,"logToFile");function AE(){try{fi.closeSync(so)}catch{}so=null}a(AE,"closeLogFile");function rG(){if(!so){try{if(!Ca)debugger;so=fi.openSync(Ca,"a")}catch(e){wa.error(e)}setTimeout(()=>{AE()},jF).unref()}}a(rG,"openLogFile");function il(...e){Kt[Yt]<=Kt.info&&Da(tn("info",e))}a(il,"info");function OE(...e){Kt[Yt]<=Kt.trace&&Da(tn("trace",e))}a(OE,"trace");function La(...e){Kt[Yt]<=Kt.error&&ol(tn("error",e))}a(La,"error");function NE(...e){Kt[Yt]<=Kt.debug&&Da(tn("debug",e))}a(NE,"debug");function eA(...e){Kt[Yt]<=Kt.notify&&Da(tn("notify",e))}a(eA,"notify");function tA(...e){Kt[Yt]<=Kt.fatal&&ol(tn("fatal",e))}a(tA,"fatal");function bE(...e){Kt[Yt]<=Kt.warn&&ol(tn("warn",e))}a(bE,"warn");function sG(e,t,...r){t===JR.STDERR?ol(tn(e,r)):Da(tn(e,r))}a(sG,"logCustomLevel");function nG(){let e;try{e=QF.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=en.join(e,ut.HDB_HOME_DIR_NAME,ut.BOOT_PROPS_FILE_NAME);return fi.existsSync(t)||(t=en.join(RE,"utility/hdb_boot_properties.file")),t}a(nG,"getPropsFilePath");function iG(e){Yt=e}a(iG,"setLogLevel");function WR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(WR,"autoCastBoolean");function oG(e){try{if(e.includes("config/settings.js")){let o=zR(e);return{level:o.get(ut.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:en.dirname(o.get(ut.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(ut.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(ut.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=QR.parseDocument(fi.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===ut.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(oG,"getLogConfig");function aG(){try{let e=QR.parseDocument(fi.readFileSync(XF,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(aG,"getDefaultConfig");function cG(e,t,r,s,n,i){this.username=e,this.status=t,this.type=r,this.originating_ip=s,this.request_method=n,this.path=i}a(cG,"AuthAuditLog")});var sA=T((cne,rA)=>{"use strict";var uG=require("util"),lG=require("path"),_G=require("child_process"),dG=uG.promisify(_G.execFile),fG=1e3*1e3*10;rA.exports={findPs:EG};async function EG(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await dG("ps",["wwxo",`pid,${r}`],{maxBuffer:fG});for(let n of s.trim().split(`
4
+ `).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.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,s])=>({pid:Number.parseInt(r,10),name:lG.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(EG,"findPs")});var ze=T((lne,iA)=>{"use strict";var hG="__dbis__",mG="__txns__",pG="__environment_name__",SG="__dbi_defintion__",TG={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"},gG=["__createdtime__","__updatedtime__"],RG="\uFFFF",nA={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},AG=Object.values(nA);iA.exports={AUDIT_STORE_NAME:mG,INTERNAL_DBIS_NAME:hG,DBI_DEFINITION_NAME:SG,SEARCH_TYPES:TG,TIMESTAMP_NAMES:gG,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:pG,TRANSACTIONS_DBI_NAMES_ENUM:nA,TRANSACTIONS_DBIS:AG,OVERFLOW_MARKER:RG}});var Er=T((_ne,EA)=>{"use strict";var oA=y(),aA=ze(),cA={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},uA=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),lA={500:uA("There was an error processing your request."),400:"Invalid request"},OG=lA[cA.INTERNAL_SERVER_ERROR],NG={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.`},bG={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},yG={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"},IG={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 ${aA.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${aA.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"},wG={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${oA.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 ${oA.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"},_A={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"},CG={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."},LG={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`},DG={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"},UG={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},MG={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`},dA={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.`},fA={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}`},PG={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."},vG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},BG={..._A,...yG,...NG,...CG,...LG,...DG,...UG,...MG,...wG,...dA,...fA,...PG,...vG,...bG};EA.exports={CHECK_LOGS_WRAPPER:uA,HDB_ERROR_MSGS:BG,DEFAULT_ERROR_MSGS:lA,DEFAULT_ERROR_RESP:OG,HTTP_STATUS_CODES:cA,LMDB_ERRORS_ENUM:IG,AUTHENTICATION_ERROR_MSGS:_A,VALIDATION_ERROR_MSGS:dA,ITC_ERRORS:fA}});var j=T((fne,pA)=>{"use strict";var no=Er(),HG=G(),qG=y(),al=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,hA),this.statusCode=s||no.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(no.DEFAULT_ERROR_MSGS[s]?no.DEFAULT_ERROR_MSGS[s]:no.DEFAULT_ERROR_MSGS[no.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&HG[n](i)}},IE=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}},wE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function hA(e,t,r,s=qG.LOG_LEVELS.ERROR,n=null,i=!1){if(mA(e))return e;let o=new al(e,t,r,s,n);return i&&delete o.stack,o}a(hA,"handleHDBError");function mA(e){return e.__proto__.constructor.name===al.name}a(mA,"isHDBError");pA.exports={isHDBError:mA,handleHDBError:hA,ClientError:IE,ServerError:wE,hdb_errors:no}});var Be=T((hne,NA)=>{"use strict";var Ba=y(),FG=$(),Wt=X(),Ha=require("path"),GG=require("minimist"),SA=require("fs-extra"),TA=require("lodash");Wt.initSync();var{CONFIG_PARAMS:vn,DATABASES_PARAM_CONFIG:Ua,SYSTEM_SCHEMA_NAME:cl}=Ba,Ma,Pa,va;function gA(){if(Ma!==void 0)return Ma;if(Wt.getHdbBasePath()!==void 0)return Ma=Wt.get(vn.STORAGE_PATH)||Ha.join(Wt.getHdbBasePath(),Ba.DATABASES_DIR_NAME),Ma}a(gA,"getBaseSchemaPath");function RA(){if(Pa!==void 0)return Pa;if(Wt.getHdbBasePath()!==void 0)return Pa=OA(cl),Pa}a(RA,"getSystemSchemaPath");function AA(){if(va!==void 0)return va;if(Wt.getHdbBasePath()!==void 0)return va=Wt.get(Ba.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Ha.join(Wt.getHdbBasePath(),Ba.TRANSACTIONS_DIR_NAME),va}a(AA,"getTransactionAuditStoreBasePath");function xG(e,t){let r=Wt.get(vn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Ha.join(AA(),e.toString())}a(xG,"getTransactionAuditStorePath");function OA(e,t){e=e.toString(),t=t&&t.toString();let r=Wt.get(Ba.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Ha.join(gA(),e)}a(OA,"getSchemaPath");function kG(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,GG(process.argv));let s=r[vn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!FG.isObject(s))throw o;i=s}for(let o of i){let c=o[cl];if(!c)continue;let u=Wt.get(vn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[Ua.PATH];if(_)return TA.set(u,[cl,Ua.TABLES,t,Ua.PATH],_),Wt.setProperty(vn.DATABASES,u),_;let l=c?.[Ua.PATH];if(l)return TA.set(u,[cl,Ua.PATH],l),Wt.setProperty(vn.DATABASES,u),l}}let n=r[vn.STORAGE_PATH.toUpperCase()];if(n){if(!SA.pathExistsSync(n))throw new Error(n+" does not exist");let i=Ha.join(n,e);return SA.mkdirsSync(i),Wt.setProperty(vn.STORAGE_PATH,n),i}return RA()}a(kG,"initSystemSchemaPaths");function VG(){Ma=void 0,Pa=void 0,va=void 0}a(VG,"resetPaths");NA.exports={getBaseSchemaPath:gA,getSystemSchemaPath:RA,getTransactionAuditStorePath:xG,getTransactionAuditStoreBasePath:AA,getSchemaPath:OA,initSystemSchemaPaths:kG,resetPaths:VG}});var hr=T((Tne,CA)=>{"use strict";var $G=Er().LMDB_ERRORS_ENUM,pne=require("lmdb"),YG=ze(),Sne=require("buffer").Buffer,{OVERFLOW_MARKER:bA,MAX_SEARCH_KEY_LENGTH:ul}=YG,yA=["number","string","symbol","boolean","bigint"];function KG(e){if(e=e?.primaryStore||e,!e)throw new Error($G.ENV_REQUIRED)}a(KG,"validateEnv");function WG(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(WG,"stringifyData");function QG(e){return e instanceof Date?e.valueOf():e}a(QG,"convertKeyValueToWrite");function zG(e){if(e==null)return;if(yA.includes(typeof e))return e.length>ul?[e.slice(0,ul)+bA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(yA.includes(typeof n))n.length>ul?t.push(n.slice(0,ul)+bA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(zG,"getIndexedValues");var ll=0,IA=0;function wA(){IA=Date.now()-performance.now()}a(wA,"adjustStartTime");wA();var JG=6e4;setInterval(wA,JG).unref();function XG(){let e=performance.now()+IA;return e>ll?(ll=e,e):(ll+=488e-6,ll)}a(XG,"getNextMonotonicTime");CA.exports={validateEnv:KG,stringifyData:WG,convertKeyValueToWrite:QG,getNextMonotonicTime:XG,getIndexedValues:zG}});var LA,ss,CE,qa=Te(()=>{LA=require("events"),ss=class extends LA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new CE;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)}},CE=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}}}});function vr(e){return e[Ht]||(e[Ht]=Object.create(null))}function El(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u;switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a string, attempt to assign ${l}`);vr(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 ns.ClientError(`${c} must be a string, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Float":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a number, attempt to assign ${l}`);vr(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 ns.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);vr(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 ns.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a boolean, attempt to assign ${l}`);vr(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 ns.ClientError(`${c} must be a Date, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){vr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be an object, attempt to assign ${l}`);vr(this)[c]=l},"set")}let _=s[c]={get(){let l=this[Ht];if(l&&c in l)return l[c];let d=this[ge]?.[c];if(d&&typeof d=="object"){let f=DA(d,o);if(f)return l||(l=this[Ht]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0};_.get.isAttribute=!0,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[Ht];return u?.[o]!==void 0?u[o]:this[ge]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new ns.ClientError("Can not add a property to a sealed table schema");vr(this)[o]=c}),i("deleteProperty",function(o){vr(this)[o]=void 0}),i("toJSON",function(){let o=this[Ht],c;for(let _ in o)c||(c=Object.assign({},this[ge])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[ge])),Object.assign(c,this)),c||this[ge]}),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 DA(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[ge]=n}},El(r,t)),new r(e)):new _l(e);case Array:let s=new fl(e.length);s[ge]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=DA(o,t?.elements)),s[n]=o}return s}}function hl(e){let t=e[Ht],r;for(let n in t){r||(r=Object.assign({},e[ge]));let i=t[n];i&&typeof i=="object"&&(i=hl(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ge])),Object.assign(r,e)),r||e[ge]}function Fa(e){let t;if(e[ge]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=Fa(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Ht];for(let s in r){t||(t=Object.assign({},e[ge]));let n=r[s];n&&typeof n=="object"&&(n=Fa(n)),t[s]=n}return t?Object.freeze(t):e[ge]||(e.buffer?e:Object.freeze(e))}function dl(e){let t=e[ge];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Ei]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[ge]===n){if(dl(i))return!0}else return!0}}else{let r=e[Ht];if(r&&!t)return!0;for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[ge]===i){if(dl(n))return!0}else return!0}else return!0}}return!1}var ns,Ht,_l,Ei,fl,ml=Te(()=>{is();ns=D(j()),Ht=Symbol("own-data");a(vr,"getChanges");a(El,"assignTrackedAccessors");a(DA,"trackObject");_l=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ge]=t}};El(_l,{});a(hl,"collapseData");a(Fa,"deepFreeze");a(dl,"hasChanges");Ei=Symbol.for("has-array-changes"),fl=class extends Array{static{a(this,"TrackedArray")}[Ei];constructor(t){super(t)}splice(...t){return this[Ei]=!0,super.splice(...t)}push(...t){return this[Ei]=!0,super.push(...t)}pop(){return this[Ei]=!0,super.pop()}unshift(...t){return this[Ei]=!0,super.unshift(...t)}shift(){return this[Ei]=!0,super.shift()}};fl.prototype.constructor=Array});function tx(){ex=setInterval(function(){for(let e of LE)if(e.stale){let t=e[me]?.url;UA.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},ZG).unref()}var DE,UA,jG,LE,hi,pl,ZG,ex,UE=Te(()=>{DE=D(hr()),UA=D(G());is();jG=100,LE=new Set,hi=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;validated=0;timestamp=0;open=!0;getReadTxn(){return this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn?this.readTxn:(this.readTxn=this.lmdbDb.useReadTransaction(),LE.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(LE.delete(this),this.readTxn.done(),this.readTxn=null)}addWrite(t){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,DE.getNextMonotonicTime)());let s=t.retries||0;if(this.resetReadSnapshot(),this.validated<this.writes.length){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()=>{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 R=S();E?E.push?E.push(R):E=[E,R]:E=R}}E&&await(E.push?Promise.all(E):E)}return this.commit(t)})()}t?.close&&(this.open=!1);let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<jG>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return n.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=s+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(){this.resetReadSnapshot(),this.writes=[]}},pl=class extends hi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,DE.getNextMonotonicTime)())}getReadTxn(){}},ZG=3e4;a(tx,"startMonitoringTxns");tx()});function Ge(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new hi;e.timestamp&&(s.timestamp=e.timestamp),s[me]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit({close:!0});return u.then?u.then(()=>(r?.resetTransaction&&(e.transaction=null),c)):(r?.resetTransaction&&(e.transaction=null),c)}function o(c){throw s.abort(),r?.resetTransaction&&(e.transaction=null),c}}var MA,mi=Te(()=>{MA=require("../index");is();UE();a(Ge,"transaction");(0,MA._assignPackageExport)("transaction",Ge);Ge.commit=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ge.abort=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function PE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;if(l==null)throw new io.ClientError("Invalid value provided for query, must be non-null value");l instanceof Date&&(l=l.getTime());let d=e.comparator,f;switch(BA[d]||d){case"lt":o=!0,c=l;break;case"le":o=!0,c=l,u=!0;break;case"gt":o=l,_=!0;break;case"ge":o=l;break;case"prefix":o=l,c=l.slice(0),c[c.length-1]=Cs.MAXIMUM_KEY;break;case"starts_with":o=l.toString(),c=l+String.fromCharCode(65535);break;case"between":o=l[0],o instanceof Date&&(o=o.getTime()),c=l[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case mt.SEARCH_TYPES.EQUALS:case void 0:o=l,c=l,u=!0;break;case"ne":case"contains":case"ends_with":f=!0;break;default:throw new io.ClientError(`Unknown query comparator "${d}"`)}if(r){let S=o;o=c,c=S,S=!_,_=!u,u=S}let E=i===s.primaryKey||i==null,h=E?s.primaryStore:s.indices[i];if(!h||h.isIndexing||f){if(!n)throw new io.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=vE(e);if(!S)throw new io.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:R,value:b})=>new Promise((O,Y)=>setImmediate(()=>{try{O(b&&S(b)?R:vA.SKIP)}catch(Q){Y(Q)}})))}let p={start:o,end:c,inclusiveEnd:u,exclusiveStart:_,values:!E,transaction:t,reverse:r};return E?h.getRange(p):h.getRange(p).map(({value:S})=>S)}function vE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),BA[t]||t){case mt.SEARCH_TYPES.EQUALS:case void 0:return ws(r,n=>n===s);case mt.SEARCH_TYPES.CONTAINS:return ws(r,n=>n?.toString().includes(s));case mt.SEARCH_TYPES.ENDS_WITH:case mt.SEARCH_TYPES._ENDS_WITH:return ws(r,n=>n?.toString().endsWith(s));case mt.SEARCH_TYPES.STARTS_WITH:case mt.SEARCH_TYPES._STARTS_WITH:return ws(r,n=>typeof n=="string"&&n.startsWith(s));case mt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),ws(r,n=>(0,Cs.compareKeys)(n,s[0])>=0&&(0,Cs.compareKeys)(n,s[1])<=0);case"gt":case mt.SEARCH_TYPES.GREATER_THAN:case mt.SEARCH_TYPES._GREATER_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)>0);case"ge":case mt.SEARCH_TYPES.GREATER_THAN_EQUAL:case mt.SEARCH_TYPES._GREATER_THAN_EQUAL:return ws(r,n=>(0,Cs.compareKeys)(n,s)>=0);case mt.SEARCH_TYPES.LESS_THAN:case"lt":case mt.SEARCH_TYPES._LESS_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)<0);case"le":case mt.SEARCH_TYPES.LESS_THAN_EQUAL:case mt.SEARCH_TYPES._LESS_THAN_EQUAL:return ws(r,n=>(0,Cs.compareKeys)(n,s)<=0);case"ne":return ws(r,n=>(0,Cs.compareKeys)(n,s)!==0);default:throw new io.ClientError(`Unknown query comparator "${t}"`)}}function ws(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function Sl(e){if(!e)return;let t=new ME,r,s,n,i,o,c=PA;for(;r=c.exec(e);){i=c.lastIndex;let[,u,_]=r;switch(_){case")":case")&":switch(o){case"limit":if(u.indexOf(",")>-1){let[l,d]=u.split(",");t.offset=+l,t.limit=d-t.offset}else t.limit=+u;break;case"select":if(u[0]==="["){if(u[u.length-1]!=="]")throw new Error("Unmatched brackets");t.select=u.slice(1,-1).split(","),t.select.asArray=!0}else u.indexOf(",")>-1?t.select=(u.endsWith(",")?u.slice(0,-1):u).split(","):t.select=u;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=u.split(",").map(l=>{switch(l[0]){case"-":return{attribute:l.slice(1),descending:!0};case"+":return{attribute:l.slice(1),descending:!1};default:return{attribute:l,descending:!1}}});break;default:throw new Error(`Unknown query function call ${o}`)}s=void 0;break;case"(":o=u;break;case"=":s?u.length<=2&&(n=u):(n="equals",s=decodeURIComponent(u));break;case"!=":case"<":case"<=":case">":case">=":n=rx[_],s=decodeURIComponent(u);break;case"=*":n="ends_with",s=decodeURIComponent(u);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(u)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${_} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(u)}),s=void 0;break;default:throw new Error(`Unknown operator ${_} in query ${e}`)}c=s?sx:PA,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var io,mt,Cs,vA,rx,BA,PA,sx,ME,Tl=Te(()=>{io=D(j()),mt=D(ze()),Cs=require("ordered-binary"),vA=require("lmdb"),rx={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(PE,"idsForCondition");BA={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(vE,"filterByType");a(ws,"attributeComparator");PA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,sx=/([^&|*=]+)([&|*=]*)/g;a(Sl,"parseQuery");ME=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 s=this.conditions[r];if(s.attribute===t)return s.value}}}});var qE={};ve(qE,{CONTEXT:()=>me,ID_PROPERTY:()=>Ie,IS_COLLECTION:()=>os,RECORD_PROPERTY:()=>ge,Resource:()=>Nt,SAVE_UPDATES_PROPERTY:()=>kA,snake_case:()=>ix});function ix(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function HA(e,t){if(e=e.slice(1),e.indexOf("/")===-1)return e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e));let r=e.split("/"),s=new HE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Br(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_;if(r?o?(_=i,o=o[me]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(_=n,c=_[this.primaryKey]??null,o=i[me]||i):_=i:(_=n,c=_[Ie]??_[this.primaryKey]??null):i?o=i[me]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let f of n){if(typeof f=="object"&&f)break;c.push(f)}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)))}else{if(typeof(c=n.url)=="string"){let f=c.indexOf("?");if(f>-1){let h=this.parseQuery(c.slice(f+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,f)}let E=this.parsePath(c,o,u);E?.query?(u=E.query,c=E.id):c=E}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let l;if(u?.ensureLoaded!=null||u?.async?(l=Object.assign({},t),u?.ensureLoaded!=null&&(l.ensureLoaded=u.ensureLoaded),u.async&&(l.async=u.async)):l=t,o.transaction){let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)}else return Ge(o,()=>{let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)},l);function d(f){if(t.type==="read"&&(f[kA]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?f.allowRead(o.user,u,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,_,o):f.allowUpdate(o.user,_,o):t.type==="create"?f.allowCreate(o.user,_,o):f.allowDelete(o.user,u,o);if(E?.then)return E.then(h=>{if(!h)throw new gl(o.user);return typeof _?.then=="function"?_.then(p=>e(f,u,o,p)):e(f,u,o,_)});if(!E)throw new gl(o.user)}return typeof _?.then=="function"?_.then(E=>e(f,u,o,E)):e(f,u,o,_)}a(d,"authorizeActionOnResource")}}function Hr(e,t){let r=new xA.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function BE(e){let t=e[ge];if(t){let r=e[Ht];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function qA(e){if(typeof e=="string")return t=>BE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=BE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=BE(r);for(let i of e){let o=n(i);o===void 0&&t&&(o=null),s[i]=o}return s}}else throw new Error("Invalid select argument type "+typeof e)}var FA,GA,xA,me,Ie,os,kA,ge,nx,Nt,gl,HE,is=Te(()=>{FA=require("crypto");qa();GA=require("../index"),xA=D(j());ml();mi();Tl();me=Symbol.for("context"),Ie=Symbol.for("primary-key"),os=Symbol("is-collection"),kA=Symbol("save-updates"),ge=Symbol("stored-record"),nx={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Nt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Ie]=t;let s=r?.[me];this[me]=s!==void 0?s:r||null}static get=Br(function(t,r,s,n){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){let _=qA(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=Br(function(t,r,s,n){if(Array.isArray(n)&&t[os]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):Hr(t,"put")},{hasContent:!0,type:"update"});static delete=Br(function(t,r,s,n){return t.delete?t.delete(r):Hr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,FA.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),Ge(s,()=>{let i=new this(n,s),o=i.put?i.put(r):Hr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Br(function(t,r,s,n){return t.invalidate?t.invalidate(r):Hr(t,"delete")},{hasContent:!1,type:"update"});static post=Br(function(t,r,s,n){return t[Ie]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Br(function(t,r,s,n){return t.connect?t.connect(n,r):Hr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Br(function(t,r,s,n){return t.subscribe?t.subscribe(r):Hr(t,"subscribe")},{type:"read"});static publish=Br(function(t,r,s,n){return t[Ie]!=null&&t.update?.(),t.publish?t.publish(n,r):Hr(t,"publish")},{hasContent:!0,type:"create"});static search=Br(function(t,r,s,n){let i=t.search?t.search(r):Hr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=qA(o);return i.map(c)}return i},{type:"read"});static query=Br(function(t,r,s,n){return t.search?t.search(n,r):Hr(t,"search")},{hasContent:!0,type:"read"});static copy=Br(function(t,r,s,n){return t.copy?t.copy(n,r):Hr(t,"copy")},{type:"create"});static move=Br(function(t,r,s,n){return t.move?t.move(n,r):Hr(t,"move")},{type:"delete"});post(t){if(this[os])return this.constructor.create(this[Ie],t,this[me]);Hr(this,"post")}static isCollection(t){return t?.[os]}static coerceId(t){return t}static parseQuery(t){return Sl(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&nx[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:HA(t,this)}}return HA(t,this)}static getResource(t,r,s){let n,i=r[me],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;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(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[Ie]===t&&_.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Ie],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else n=new c(t,i);return o&&(n[os]=!0),n}subscribe(t){return new ss}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new ss}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[Ie]}getContext(){return this[me]}};Nt.prototype[me]=null;(0,GA._assignPackageExport)("Resource",Nt);a(ix,"snake_case");gl=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(HA,"pathToId");HE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Br,"transactional");a(Hr,"missingMethod");a(BE,"selectFromObject");a(qA,"transformForSelect")});var VA={};ve(VA,{Resources:()=>Rl,keyArrayToString:()=>oo,resetResources:()=>ox,resources:()=>Bn});function ox(){return Bn=new Rl}function oo(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Rl,Bn,Ga=Te(()=>{mi();Rl=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)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 s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Ge(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(ox,"resetResources");a(oo,"keyArrayToString")});var zA={};ve(zA,{HAS_EXPIRATION:()=>YE,LAST_TIMESTAMP_PLACEHOLDER:()=>ka,LOCAL_TIMESTAMP:()=>ax,METADATA:()=>xa,NO_TIMESTAMP:()=>FE,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>$E,RecordEncoder:()=>VE,TIMESTAMP_ASSIGN_LAST:()=>ux,TIMESTAMP_ASSIGN_NEW:()=>KA,TIMESTAMP_ASSIGN_PREVIOUS:()=>WA,TIMESTAMP_PLACEHOLDER:()=>Al,TIMESTAMP_RECORD_PREVIOUS:()=>GE,getUpdateRecord:()=>KE,handleLocalTimeForGets:()=>yl});function QA(){return co[0]=co[0]^64,cx.getFloat64(0)}function yl(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[xa];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[xa]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.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[xa];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})},e.env.metadataRetriever||(e.env.metadataRetriever=!0,e.on("aftercommit",({next:i,last:o})=>{do{let c=i.meta,u=c&&c.store;if(u&&!(i.flag&67108864)){let _=u.cache;if(c.key){let l=lx.call(_,c.key);if(l&&l.timestampBytes){let d=l.timestampOffset;l.timestampBytes[d]===2&&(l.timestampBytes.copy(co,0,d),l.timestampBytes=null,l.localTime=QA())}}}}while(i!=o&&(i=i.next))}));let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,pi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<pi.length;u++){let _=pi[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&pi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function KE(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?ao=i?.localTime?GE|WA:FE:ao=u?i?.localTime?GE|16384:KA|16384:FE,l>0&&(c|=YE),Nl=c,kE=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:ao>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(s,n,h);if(e.cache&&S.result!==!1){let R=e.cache.get(s);R&&(c>=0?R.metadataFlags=c:R.metadataFlags>=0&&(R.metadataFlags=void 0),(l||!R.expiresAt)&&(R.expiresAt=l),h.instructedWrite&&(R.localTime||(R.localTime=1),R.timestampBytes=xE,R.timestampOffset=xE.start||0))}if(u){let R=_?.user?.username;if(E&&(Ol=e.encoder.encode(E)),f&&i?.localTime){let b=i?.localTime,O=r.get(b);if(O){let Y=mr(O).previousLocalTime;return r.put(b,bl(o,t,s,Y,R,d,Ol),{ifVersion:p}),S}}r.put(ka,bl(o,t,s,i?.localTime?1:0,R,d,Ol),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var $A,YA,Al,ka,$E,ax,xa,co,cx,FE,KA,ux,WA,GE,YE,xE,Ol,ao,Nl,kE,VE,lx,pi,Va=Te(()=>{$A=require("msgpackr");uo();YA=D(G()),Al=new Uint8Array([1,1,1,1,4,64,0,0]),ka=new Uint8Array([1,1,1,1,1,0,0,0]),$E=new Uint8Array([1,1,1,1,3,64,0,0]),ax=Symbol("local-timestamp"),xa=Symbol("metadata"),co=new Uint8Array(8),cx=new DataView(co.buffer,0,8),FE=0,KA=0,ux=1,WA=3,GE=4,YE=16,ao=0,Nl=-1,kE=0,VE=class extends $A.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(ao||Nl>=0){let i=0,o=ao;o&&(i+=8,ao=0);let c=Nl,u=kE;c>=0&&(i+=2,Nl=-1,u&&(i+=8,kE=0));let _=xE=r.call(this,s,n|2048|i);Ol=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(Al[4]=o,Al[5]=o>>8,_.set(Al,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,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(co,0,c),c+=8;else for(let d=0;d<8;d++)co[d]=t[c++];u=QA(),i=t[c]}let _;i<32&&(o=i,c+=2,o&YE&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[xa]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(QA,"getTimestamp");lx=Map.prototype.get;a(yl,"handleLocalTimeForGets");pi=[];setInterval(()=>{for(let e=0;e<pi.length;e++){let t=pi[e].deref();!t||t.isDone||t.isCommitted?pi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&YA.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(KE,"getUpdateRecord")});var aO={};ve(aO,{AUDIT_STORE_OPTIONS:()=>iO,createAuditEntry:()=>bl,openAuditStore:()=>wl,readAuditEntry:()=>mr,setAuditRetention:()=>_x,transactionKeyEncoder:()=>nO});function wl(e){let t=e.auditStore=e.openDB(eO.AUDIT_STORE_NAME,iO);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,rO.getWorkerIndex)()===0&&e.on("aftercommit",()=>{$a||($a=setTimeout(()=>{if($a=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-WE})){if((n[0]&15)===zE){let i=mr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},WE/10).unref())}),t}function _x(e){clearTimeout($a),$a=null,WE=e}function bl(e,t,r,s,n,i,o){let c=oO[i],u=1;s&&(s>1?lo.setFloat64(0,s):qr.set($E),u=9),f(0),f(t),d(r),lo.setFloat64(u,e),u+=8,n?d(n):qr[u++]=0,qr[s?8:0]=c;let l=qr.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,_o.writeKey)(E,qr,u);let p=u-h-1;p>127?p>16383?(XE.error("Key or username was too large for audit entry",E),u=h+1,qr[h]=0):(qr.copyWithin(h+2,h+1,u),lo.setUint16(h,p|32768),u++):qr[h]=p}function f(E){E<128?qr[u++]=E:E<16384?(lo.setUint16(u,E|32768),u+=2):E<1056964608?(lo.setUint32(u,E|3221225472),u+=4):(qr[u]=255,lo.setUint32(u+1,E),u+=5)}}function mr(e){try{let t=e.dataView||(e.dataView=new JE(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=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:oO[s&7],tableId:i,get recordId(){return ZA(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?ZA(e,l,d):void 0},getValue(f){return s&QE?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return XE.error("Reading audit entry error",e),{}}}function ZA(e,t,r){let s=e.subarray(t,r);return(0,_o.readKey)(s,0,r-t)}var _o,Il,eO,tO,rO,sO,XE,qr,lo,nO,iO,WE,$a,QE,JA,zE,XA,jA,oO,JE,uo=Te(()=>{_o=require("ordered-binary"),Il=D(X()),eO=D(ze()),tO=D(y()),rO=D(Je()),sO=D($());Va();XE=D(G());(0,Il.initSync)();qr=Buffer.alloc(1024),lo=new DataView(qr.buffer,qr.byteOffset,1024),nO={writeKey(e,t,r){return e===ka?(t.set(ka,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,_o.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,_o.readKey)(e,t,r)}},iO={encoding:"binary",keyEncoder:nO},WE=(0,sO.convertToMS)((0,Il.get)(tO.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,$a=null;a(wl,"openAuditStore");a(_x,"setAuditRetention");QE=16,JA=1,zE=2,XA=3,jA=4,oO={put:JA|QE,[JA]:"put",delete:zE,[zE]:"delete",message:XA|QE,[XA]:"message",invalidate:jA,[jA]:"invalidate"};a(bl,"createAuditEntry");a(mr,"readAuditEntry");JE=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(ZA,"readKeySafely")});function uO(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;fo||((0,Ka.onMessageByType)(cO,d=>{lO(d.path)}),(0,Ka.onMessageByType)(dx,d=>{(0,Ya.trace)("confirming to proceed with txn",d.txnId)}),fo=Object.create(null));let c=fo[i]||(fo[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=oo(t);let _=new ZE(r);_.startTime=s,n&&(_.includeDescendants=n);let l=u.get(t);return l?l.push(_):(u.set(t,l=[_]),l.tables=u,l.key=t),_.subscriptions=l,_}function lO(e,t){if(!fo)return;let r=fo[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:jE,exclusiveStart:!0})){jE=n;let o=mr(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=oo(o.recordId),d;do{let f=c.get(l);if(f){for(let h of f)if(!(d&&!h.includeDescendants)){if(h.startTime>=n){(0,Ya.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,p)}catch(p){console.error(p),(0,Ya.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E+1):l=null,d=!0}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},jE,!0)}function _O(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,Ka.broadcast)({type:cO,path:n}),lO(n,!0)})}}var Ya,Ka,cO,dx,fo,Xne,ZE,jE,dO=Te(()=>{Ya=D(G()),Ka=D(Je());qa();Ga();uo();cO="transaction",dx="transaction-await",Xne=Buffer.alloc(4096);a(uO,"addSubscription");ZE=class extends ss{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 s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}},jE=Date.now();a(lO,"notifyFromTransactionData");a(_O,"listenToCommits")});var EO=T((eie,fO)=>{"use strict";var eh=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};fO.exports=eh});var mO=T((rie,hO)=>{"use strict";var th=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};hO.exports=th});var Cl=T((nie,pO)=>{"use strict";var sh=X(),nh=y(),{RecordEncoder:fx}=(Va(),Z(zA));sh.initSync();var Ex=sh.get(nh.CONFIG_PARAMS.STORAGE_COMPRESSION),hx=sh.get(nh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,mx=nh.UPDATES_PROPERTY,rh=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=Ex&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=hx&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:fx},this.alwaysLazyProperty=s=>s===mx)}};pO.exports=rh});var Dl=T((oie,TO)=>{"use strict";var Eo=X(),Wa=y();Eo.initSync();var px=Eo.get(Wa.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Eo.get(Wa.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Eo.get(Wa.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",SO=Eo.get(Wa.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),Sx=Eo.get(Wa.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Ll=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=px,this.noFSAccess=!0,SO!==void 0&&(this.overlappingSync=SO),this.noReadAhead=Sx}};TO.exports=Ll;Ll.MAX_DBS=1e4});var Ue=T((cie,CO)=>{"use strict";var oh=require("lmdb"),as=require("fs-extra"),pr=require("path"),Ul=hr(),AO=G(),Qt=Er().LMDB_ERRORS_ENUM,Ml=mO(),ah=Cl(),OO=Dl(),Hn=ze(),gO=y(),{table:Tx,resetDatabases:gx}=(fe(),Z(Ce)),RO=X(),cs=Hn.INTERNAL_DBIS_NAME,NO=Hn.DBI_DEFINITION_NAME,Rx="data.mdb",Ax="lock.mdb",Qa=".mdb",Ox="-lock",ih=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Fr(t,r),this.key_type=this.dbi[Hn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Hn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new oh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Pl(e,t){if(e===void 0)throw new Error(Qt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Qt.ENV_NAME_REQUIRED)}a(Pl,"pathEnvNameValidation");async function ch(e,t,r=!0){try{await as.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Qt.INVALID_BASE_PATH):s}try{let s=pr.join(e,t+Qa);return await as.access(s,as.constants.R_OK|as.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await as.access(pr.join(e,t,Rx),as.constants.R_OK|as.constants.F_OK),pr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Qt.INVALID_ENVIRONMENT)}else throw new Error(Qt.INVALID_ENVIRONMENT);throw s}}a(ch,"validateEnvironmentPath");function vl(e,t){if(Ul.validateEnv(e),t===void 0)throw new Error(Qt.DBI_NAME_REQUIRED)}a(vl,"validateEnvDBIName");async function Nx(e,t,r=!1,s=!1){Pl(e,t);let n=pr.basename(e);t=t.toString();let i=RO.get(gO.CONFIG_PARAMS.DATABASES);i||RO.setProperty(gO.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await ch(e,t,s),bO(e,t,r)}catch(o){if(o.message===Qt.INVALID_ENVIRONMENT){let c=pr.join(e,t);await as.mkdirp(s?c:e);let u=new OO(s?c:c+Qa,!1),_=oh.open(u);_.dbis=Object.create(null);let l=new ah(!1);_.openDB(cs,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=uh(e,t,r);return _[Hn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(Nx,"createEnvironment");async function bx(e,t,r,s=!0){Pl(e,t),t=t.toString();let n=pr.join(e,t);return Tx({table:t,database:pr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(bx,"copyEnvironment");async function bO(e,t,r=!1){Pl(e,t),t=t.toString();let s=uh(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await ch(e,t),i=pr.join(e,t+Qa),o=n!=i,c=new OO(n,o),u=oh.open(c);u.dbis=Object.create(null);let _=IO(u);for(let l=0;l<_.length;l++)Fr(u,_[l]);return u[Hn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(bO,"openEnvironment");async function yx(e,t,r=!1){Pl(e,t),t=t.toString();let s=pr.join(e,t+Qa),n=await ch(e,t);if(global.lmdb_map!==void 0){let i=uh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await yO(o),delete global.lmdb_map[i]}}await as.remove(n),await as.remove(n===s?n+Ox:pr.join(pr.dirname(n),Ax))}a(yx,"deleteEnvironment");async function yO(e){Ul.validateEnv(e);let t=e[Hn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(yO,"closeEnvironment");function uh(e,t,r=!1){let n=`${pr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(uh,"getCachedEnvironmentName");function Ix(e){Ul.validateEnv(e);let t=Object.create(null),r=Fr(e,cs);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==cs)try{t[s]=Object.assign(new Ml,n)}catch{AO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(Ix,"listDBIDefinitions");function IO(e){Ul.validateEnv(e);let t=[],r=Fr(e,cs);for(let{key:s}of r.getRange({start:!1}))s!==cs&&t.push(s);return t}a(IO,"listDBIs");function wx(e,t){let s=Fr(e,cs).getEntry(t),n=new Ml;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{AO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(wx,"getDBIDefinition");function wO(e,t,r,s=!r){if(vl(e,t),t=t.toString(),t===cs)throw new Error(Qt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Fr(e,t)}catch(n){if(n.message===Qt.DBI_DOES_NOT_EXIST){let i=new ah(r,s===!0),o=e.openDB(t,i),c=new Ml(r===!0,s);return o[NO]=c,Fr(e,cs).putSync(t,c),e.dbis[t]=o,o}throw n}}a(wO,"createDBI");function Fr(e,t){if(vl(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==cs?r=wx(e,t):r=new Ml,r===void 0)throw new Error(Qt.DBI_DOES_NOT_EXIST);let s;try{let n=new ah(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(Qt.DBI_DOES_NOT_EXIST):n}return s[NO]=r,e.dbis[t]=s,s}a(Fr,"openDBI");function Cx(e,t){vl(e,t),t=t.toString();let r=Fr(e,t),s=r.getStats();return r[Hn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(Cx,"statDBI");async function Lx(e,t){try{let r=pr.join(e,t+Qa);return(await as.stat(r)).size}catch{throw new Error(Qt.INVALID_ENVIRONMENT)}}a(Lx,"environmentDataSize");function Dx(e,t){if(vl(e,t),t=t.toString(),t===cs)throw new Error(Qt.CANNOT_DROP_INTERNAL_DBIS_NAME);Fr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Fr(e,cs).removeSync(t)}a(Dx,"dropDBI");function Ux(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Fr(e,i)}catch(o){if(o.message===Qt.DBI_DOES_NOT_EXIST)wO(e,i,i!==t,i===t),s=!0;else throw o}}s&&gx()}a(Ux,"initializeDBIs");CO.exports={openDBI:Fr,openEnvironment:bO,createEnvironment:Nx,listDBIs:IO,listDBIDefinitions:Ix,createDBI:wO,dropDBI:Dx,statDBI:Cx,deleteEnvironment:yx,initializeDBIs:Ux,TransactionCursor:ih,environmentDataSize:Lx,copyEnvironment:bx,closeEnvironment:yO}});var UO=T((lie,DO)=>{"use strict";var lh=Ue(),Mx=G(),LO=Er().LMDB_ERRORS_ENUM;DO.exports=Px;async function Px(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 lh.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==LO.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await lh.closeEnvironment(global.lmdb_map[s]),await lh.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==LO.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){Mx.error(t)}}a(Px,"cleanLMDBMap")});var Si=T((die,vx)=>{vx.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 YO=T((Eie,$O)=>{"use strict";var _h=require("recursive-iterator"),Bx=require("alasql"),dh=require("clone"),MO=$(),{handleHDBError:PO,hdb_errors:Hx}=j(),{HDB_ERROR_MSGS:vO,HTTP_STATUS_CODES:BO}=Hx,{getDatabases:qx}=(fe(),Z(Ce)),Fx=["DISTINCT_ARRAY"],HO=Symbol("validateTables"),fh=Symbol("validateTable"),fie=Symbol("getAllColumns"),qO=Symbol("validateAllColumns"),Bl=Symbol("findColumn"),FO=Symbol("validateOrderBy"),za=Symbol("validateSegment"),Eh=Symbol("validateColumn"),GO=Symbol("setColumnsForTable"),xO=Symbol("checkColumnsForAsterisk"),kO=Symbol("validateGroupBy"),VO=Symbol("hasColumns"),hh=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[HO](),this[xO](),this[qO]()}[HO](){if(this[VO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[fh](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[fh](t.table)})}}[VO](){let t=!1,r=new _h(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[fh](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=qx();if(!r[t.databaseid])throw PO(new Error,vO.SCHEMA_NOT_FOUND(t.databaseid),BO.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw PO(new Error,vO.TABLE_NOT_FOUND(t.databaseid,t.tableid),BO.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=dh(n);i.table=dh(t),this.attributes.push(i)})}[Bl](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)}[xO](){let t=new _h(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[GO](r.tableid)}[GO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new Bx.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[qO](){this[za](this.statement.columns,!1),this[za](this.statement.joins,!1),this[za](this.statement.where,!1),this[kO](this.statement.group,!1),this[za](this.statement.order,!0)}[za](t,r){if(!t)return;let s=new _h(t),n=[];for(let{node:i,path:o}of s)!MO.isEmpty(i)&&!MO.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[FO](i):n.push(this[Eh](i)));return n}[kO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&Fx.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=dh(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Bl](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[Bl](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.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`}[FO](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[Eh](t)}[Eh](t){let r=this[Bl](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};$O.exports=hh});var WO=T((mie,KO)=>{"use strict";var mh=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};KO.exports=mh});var zO=T((Sie,QO)=>{"use strict";var ph=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};QO.exports=ph});var XO=T((gie,JO)=>{"use strict";var Sh=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};JO.exports=Sh});var ZO=T((Aie,jO)=>{"use strict";var Th=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};jO.exports=Th});var ho=T((Iie,rN)=>{"use strict";var Gx=Ue(),xx=zO(),kx=XO(),Vx=ZO(),Ls=hr(),Ja=Er().LMDB_ERRORS_ENUM,$x=ze(),rn=y(),Yx=$(),Kx=require("uuid"),Nie=require("lmdb"),{handleHDBError:Wx,hdb_errors:Qx}=j(),{OVERFLOW_MARKER:bie,MAX_SEARCH_KEY_LENGTH:yie}=$x,eN=X();eN.initSync();var Hl=eN.get(rn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),gh=rn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ti=rn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function zx(e,t,r,s,n=Ls.getNextMonotonicTime()){Nh(e,t,r,s),Rh(e,t,r);let i=new xx,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];tN(_,!0,n);let l=Jx(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Ah(o,c,s,i,n)}a(zx,"insertRecords");function Jx(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][rn.FUNC_VAL],s[o]=c)}let u=Ls.getIndexedValues(c),_=e.dbis[o];if(u){Hl&&_.prefetch(u.map(l=>({key:l,value:n})),ql);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}Hl&&e.dbis[t].prefetch([n],ql),e.dbis[t].put(n,s,s[Ti])})}a(Jx,"insertRecord");function Xx(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Xx,"removeSkippedRecords");function tN(e,t,r){let s=r>0;(s||!Number.isInteger(e[Ti]))&&(e[Ti]=r||(r=Ls.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[gh]))&&(e[gh]=r||Ls.getNextMonotonicTime()):delete e[gh]}a(tN,"setTimestamps");function Rh(e,t,r){r.indexOf(rn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(rn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(rn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(rn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Gx.initializeDBIs(e,t,r)}a(Rh,"initializeTransaction");async function jx(e,t,r,s,n=Ls.getNextMonotonicTime()){Nh(e,t,r,s),Rh(e,t,r);let i=new kx,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Oh(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return Ah(c,u,s,i,n,o)}a(jx,"updateRecords");async function Zx(e,t,r,s,n=Ls.getNextMonotonicTime()){try{Nh(e,t,r,s)}catch(u){throw Wx(u,u.message,Qx.HTTP_STATUS_CODES.BAD_REQUEST)}Rh(e,t,r);let i=new Vx,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;Yx.isEmpty(_[t])?(l=Kx.v4(),_[t]=l):l=_[t];let d=Oh(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return Ah(o,c,s,i,n)}a(Zx,"upsertRecords");async function Ah(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Ls.getNextMonotonicTime(),Xx(r,i),s}a(Ah,"finalizeWrite");function Oh(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(tN(r,!l,o),Number.isInteger(r[Ti])&&_[Ti]>r[Ti])return!1;l&&n.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 R=_[h];if(typeof p=="function"){let O=p([[_]]);Array.isArray(O)&&(p=O[0][rn.FUNC_VAL],r[h]=p)}if(p===R)continue;let b=Ls.getIndexedValues(R);if(b){Hl&&S.prefetch(b.map(O=>({key:O,value:s})),ql);for(let O=0,Y=b.length;O<Y;O++)S.remove(b[O],s)}if(b=Ls.getIndexedValues(p),b){Hl&&S.prefetch(b.map(O=>({key:O,value:s})),ql);for(let O=0,Y=b.length;O<Y;O++)S.put(b[O],s)}}let E=Object.assign({},_,r);c.put(s,E,E[Ti])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:Oh(e,t,r,s,n,i,o))}a(Oh,"updateUpsertRecord");function ek(e,t,r){if(Ls.validateEnv(e),t===void 0)throw new Error(Ja.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ja.WRITE_ATTRIBUTES_REQUIRED):new Error(Ja.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(ek,"validateBasic");function Nh(e,t,r,s){if(ek(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Ja.RECORDS_REQUIRED):new Error(Ja.RECORDS_MUST_BE_ARRAY)}a(Nh,"validateWrite");function ql(){}a(ql,"noop");rN.exports={insertRecords:zx,updateRecords:jx,upsertRecords:Zx}});var Ds=T((Cie,iN)=>{"use strict";var nN=$(),sN=y(),mo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,sn=require("joi"),qn={schema_format:{pattern:mo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},tk=sn.alternatives(sn.string().min(1).max(qn.schema_length.maximum).pattern(mo).messages({"string.pattern.base":"{:#label} "+qn.schema_format.message}),sn.number()).required(),rk=sn.alternatives(sn.string().min(1).max(qn.schema_length.maximum).pattern(mo).messages({"string.pattern.base":"{:#label} "+qn.schema_format.message}),sn.number()),sk=sn.alternatives(sn.string().min(1).max(qn.schema_length.maximum).pattern(mo).messages({"string.pattern.base":"{:#label} "+qn.schema_format.message}),sn.number()).required();function nk(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>qn.schema_length.maximum?`'${e}' maximum of 250 characters`:mo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(nk,"checkValidTable");function ik(e,t){return nN.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(ik,"validateSchemaExists");function ok(e,t){let r=t.state.ancestors[0].schema;return nN.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(ok,"validateTableExists");function ak(e,t){return e.toLowerCase()===sN.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${sN.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(ak,"validateSchemaName");iN.exports={common_validators:qn,schema_regex:mo,hdb_schema_table:tk,validateSchemaExists:ik,validateTableExists:ok,validateSchemaName:ak,checkValidTable:nk,hdb_database:rk,hdb_table:sk}});var xe=T((Die,oN)=>{"use strict";var zt=require("validate.js");zt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||zt.validators.type.checks[t](e)?null:` must be a '${t}' value`};zt.validators.type.checks={Object:function(e){return zt.isObject(e)&&!zt.isArray(e)},Array:zt.isArray,Integer:zt.isInteger,Number:zt.isNumber,String:zt.isString,Date:zt.isDate,Boolean:function(e){return typeof e=="boolean"}};zt.validators.hasValidFileExt=function(e,t){return zt.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};oN.exports={validateObject:ck,validateObjectAsync:uk,validateBySchema:lk};function ck(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=zt(e,t,{format:"flat"});return r?new Error(r):null}a(ck,"validateObject");async function uk(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await zt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(uk,"validateObjectAsync");function lk(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(lk,"validateBySchema")});var Fl=T((Mie,aN)=>{var{common_validators:Us}=Ds(),ja=xe(),Xa="is required",et={database:{presence:!1,format:Us.schema_format,length:Us.schema_length},schema:{presence:!1,format:Us.schema_format,length:Us.schema_length},table:{presence:!0,format:Us.schema_format,length:Us.schema_length},attribute:{presence:!0,format:Us.schema_format,length:Us.schema_length},hash_attribute:{presence:!0,format:Us.schema_format,length:Us.schema_length}};function Za(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(Za,"makeAttributesStrings");function _k(e){return e=Za(e),et.table.presence=!1,et.attribute.presence=!1,et.hash_attribute.presence=!1,ja.validateObject(e,et)}a(_k,"schema_object");function dk(e){return e=Za(e),et.table.presence={message:Xa},et.attribute.presence=!1,et.hash_attribute.presence=!1,ja.validateObject(e,et)}a(dk,"table_object");function fk(e){return e=Za(e),et.table.presence={message:Xa},et.attribute.presence=!1,ja.validateObject(e,et)}a(fk,"create_table_object");function Ek(e){return e=Za(e),et.table.presence={message:Xa},et.attribute.presence={message:Xa},et.hash_attribute.presence=!1,ja.validateObject(e,et)}a(Ek,"attribute_object");function hk(e){return e=Za(e),et.table.presence={message:Xa},et.attribute.presence=!1,et.hash_attribute.presence=!1,ja.validateObject(e,et)}a(hk,"describe_table");function mk(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(mk,"validateTableResidence");aN.exports={schema_object:_k,create_table_object:fk,table_object:dk,attribute_object:Ek,describe_table:hk,validateTableResidence:mk}});var uN=T((vie,cN)=>{"use strict";var pk=require("uuid"),bh=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||pk.v4(),this.schema_table=`${this.schema}.${this.table}`}};cN.exports=bh});var Gl=T((Hie,lN)=>{"use strict";var Sk=uN(),yh=class extends Sk{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};lN.exports=yh});var dN=T((Fie,_N)=>{"use strict";_N.exports=gk;var Tk="inserted";function gk(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Tk?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(gk,"returnObject")});var xl=T((xie,pN)=>{"use strict";var Rk=y(),Ih=Ue(),Ak=ho(),{getSystemSchemaPath:Ok,getSchemaPath:Nk}=Be(),bk=Si(),yk=Fl(),Ik=Gl(),wk=dN(),{handleHDBError:fN,hdb_errors:hN}=j(),EN=$(),{HTTP_STATUS_CODES:Ck}=hN,wh=bk.hdb_attribute,mN=[];for(let e=0;e<wh.attributes.length;e++)mN.push(wh.attributes[e].attribute);var Lk="inserted";pN.exports=Dk;async function Dk(e){let t=yk.attribute_object(e);if(t)throw fN(new Error,t.message,hN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&EN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw fN(new Error,r,Ck.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=EN.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new Ik(e.schema,e.table,e.attribute,e.id);try{let i=await Ih.openEnvironment(Nk(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}`);Ih.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Ih.openEnvironment(Ok(),Rk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Ak.insertRecords(o,wh.hash_attribute,mN,[n]);return wk(Lk,c,{records:[n]},u)}catch(i){throw i}}a(Dk,"lmdbCreateAttribute")});var Lh=T((Vie,TN)=>{var{hdb_table:Uk,hdb_database:SN}=Ds(),Mk=xe(),Ch=require("joi"),Pk={undefined:"undefined",null:"null"},vk=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||Pk[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),Bk=Ch.object({database:SN,schema:SN,table:Uk,records:Ch.array().items(Ch.object().custom(vk)).required()});TN.exports=function(e){return Mk.validateBySchema(e,Bk)}});var ec=T((Kie,RN)=>{"use strict";var nn=$(),gN=G(),Yie=Lh(),{getDatabases:Hk}=(fe(),Z(Ce)),{ClientError:gi}=j();RN.exports=qk;function qk(e){if(nn.isEmpty(e))throw new gi("invalid update parameters defined.");if(nn.isEmptyOrZeroLength(e.schema))throw new gi("invalid schema specified.");if(nn.isEmptyOrZeroLength(e.table))throw new gi("invalid table specified.");if(!Array.isArray(e.records))throw new gi("records must be an array");let t=Hk()[e.schema]?.[e.table];if(nn.isEmpty(t))throw new gi(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&nn.isEmptyOrZeroLength(o[r]))throw gN.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(!nn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw gN.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`);!nn.isEmpty(o[r])&&o[r]!==""&&s.has(nn.autoCast(o[r]))&&(o.skip=!0),s.add(nn.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(qk,"insertUpdateValidate")});var tc=T((Qie,AN)=>{"use strict";var Fk=y().OPERATIONS_ENUM,Dh=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=Fk.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};AN.exports=Dh});var ic=T((Xie,ON)=>{"use strict";var Jie=tc(),kl=y(),Mh=$(),Uh=G(),Gk=require("uuid"),{handleHDBError:rc,hdb_errors:xk}=j(),{HDB_ERROR_MSGS:sc,HTTP_STATUS_CODES:nc}=xk;ON.exports=kk;function kk(e,t,r){for(let n=0;n<t.length;n++)Vk(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];$k(i,r,e.operation)}}a(kk,"processRows");function Vk(e){if(Buffer.byteLength(String(e))>kl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw rc(new Error,sc.ATTR_NAME_LENGTH_ERR(e),nc.BAD_REQUEST,void 0,void 0,!0);if(Mh.isEmptyOrZeroLength(e)||Mh.isEmpty(e.trim()))throw rc(new Error,sc.ATTR_NAME_NULLISH_ERR,nc.BAD_REQUEST,void 0,void 0,!0)}a(Vk,"validateAttribute");function $k(e,t,r){if(!e.hasOwnProperty(t)||Mh.isEmptyOrZeroLength(e[t])){if(r===kl.OPERATIONS_ENUM.INSERT||r===kl.OPERATIONS_ENUM.UPSERT){e[t]=Gk.v4();return}throw Uh.error("Update transaction aborted due to record with no hash value:",e),rc(new Error,sc.RECORD_MISSING_HASH_ERR,nc.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>kl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Uh.error(e),rc(new Error,sc.HASH_VAL_LENGTH_ERR,nc.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Uh.error(e),rc(new Error,sc.INVALID_FORWARD_SLASH_IN_HASH_ERR,nc.BAD_REQUEST,void 0,void 0,!0)}a($k,"validateHash")});var Vl=T((Zie,bN)=>{"use strict";var NN=$(),Yk=y(),Kk=G(),Wk=xl(),Qk=Gl(),zk=on(),{SchemaEventMsg:Jk}=us(),Xk="already exists in";bN.exports=jk;async function jk(e,t,r){if(NN.isEmptyOrZeroLength(r))return r;let s=[];NN.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await Zk(e,t.schema,t.name,i)})),n}a(jk,"lmdbCheckForNewAttributes");async function Zk(e,t,r,s){let n=new Qk(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await eV(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(Xk))Kk.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(Zk,"createNewAttribute");async function eV(e){let t;return t=await Wk(e),zk.signalSchemaChange(new Jk(process.pid,Yk.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(eV,"createAttribute")});var po=T((toe,yN)=>{"use strict";var Ph=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};yN.exports=Ph});var wN=T((soe,IN)=>{"use strict";var tV=po(),rV=y().OPERATIONS_ENUM,vh=class extends tV{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(rV.INSERT,r,s,n,i),this.records=t}};IN.exports=vh});var LN=T((ioe,CN)=>{"use strict";var sV=po(),nV=y().OPERATIONS_ENUM,Bh=class extends sV{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(nV.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};CN.exports=Bh});var UN=T((aoe,DN)=>{"use strict";var iV=po(),oV=y().OPERATIONS_ENUM,Hh=class extends iV{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(oV.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};DN.exports=Hh});var PN=T((uoe,MN)=>{"use strict";var aV=po(),cV=y().OPERATIONS_ENUM,qh=class extends aV{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(cV.DELETE,s,n,t,i),this.original_records=r}};MN.exports=qh});var oc=T((doe,qN)=>{"use strict";var _oe=require("path"),vN=Ue(),uV=wN(),lV=LN(),_V=UN(),dV=PN(),So=ze(),BN=$(),{CONFIG_PARAMS:fV}=y(),HN=X();HN.initSync();var $l=y().OPERATIONS_ENUM,{getTransactionAuditStorePath:EV}=Be();qN.exports=hV;async function hV(e,t){if(HN.get(fV.LOGGING_AUDITLOG)===!1)return;let r=EV(e.schema,e.table),s=await vN.openEnvironment(r,e.table,!0),n=mV(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){vN.initializeDBIs(s,So.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,So.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[So.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[So.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),BN.isEmpty(n.user_name)||s.dbis[So.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[So.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(hV,"writeTransaction");function mV(e,t){let r=BN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===$l.INSERT)return new uV(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===$l.UPDATE)return new lV(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===$l.UPSERT)return new _V(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===$l.DELETE)return new dV(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(mV,"createTransactionObject")});var Fh=T((hoe,FN)=>{"use strict";var pV=ec(),Eoe=tc(),ac=y(),SV=ic(),TV=ho().insertRecords,gV=Ue(),RV=G(),AV=Vl(),{getSchemaPath:OV}=Be(),NV=oc();FN.exports=bV;async function bV(e){try{let{schema_table:t,attributes:r}=pV(e);SV(e,r,t.hash_attribute),e.schema!==ac.SYSTEM_SCHEMA_NAME&&(r.includes(ac.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(ac.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(ac.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(ac.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await AV(e.hdb_auth_header,t,r),n=OV(e.schema,e.table),i=await gV.openEnvironment(n,e.table),o=await TV(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await NV(e,o)}catch(c){RV.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:s,txn_time:o.txn_time}}catch(t){throw t}}a(bV,"lmdbCreateRecords")});var kN=T((poe,xN)=>{"use strict";var GN=y(),yV=Fh(),IV=tc(),wV=require("fs-extra"),{getSchemaPath:CV}=Be();xN.exports=LV;async function LV(e){let t=[{name:e.schema,createddate:Date.now()}],r=new IV(GN.SYSTEM_SCHEMA_NAME,GN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await yV(r),await wV.mkdirp(CV(e.schema))}a(LV,"lmdbCreateSchema")});var $N=T((Toe,VN)=>{"use strict";var Gh=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};VN.exports=Gh});var QN=T((Noe,WN)=>{"use strict";var YN=Ue(),xh=hr(),kh=Er().LMDB_ERRORS_ENUM,DV=ze(),KN=G(),Roe=$(),UV=require("lmdb"),MV=$N(),PV=y(),{OVERFLOW_MARKER:Aoe,MAX_SEARCH_KEY_LENGTH:Ooe}=DV,vV=PV.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function BV(e,t,r,s){if(xh.validateEnv(e),t===void 0)throw new Error(kh.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(kh.IDS_REQUIRED):new Error(kh.IDS_MUST_BE_ITERABLE);try{let n=YN.listDBIs(e);YN.initializeDBIs(e,t,n);let i=new MV,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||s&&h[vV]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,UV.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let R=n[S];if(!h.hasOwnProperty(R)||R===t)continue;let b=e.dbis[R],O=h[R];if(O!=null)try{let Y=xh.getIndexedValues(O);if(Y)for(let Q=0,F=Y.length;Q<F;Q++)b.remove(Y[Q],o)}catch{KN.warn(`cannot delete from attribute: ${R}, ${O}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){KN.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=xh.getNextMonotonicTime(),i}catch(n){throw n}}a(BV,"deleteRecords");WN.exports={deleteRecords:BV}});var cc=T((yoe,JN)=>{"use strict";var To=$(),HV=QN(),qV=Ue(),{getSchemaPath:FV}=Be(),GV=oc(),xV=G();JN.exports=kV;async function kV(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(To.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(To.isEmptyOrZeroLength(e.hash_values)&&!To.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];To.isEmpty(u)||e.hash_values.push(u)}}if(To.isEmptyOrZeroLength(e.hash_values))return zN([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(To.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=FV(e.schema,e.table),i=await qV.openEnvironment(n,e.table),o=await HV.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await GV(e,o)}catch(c){xV.error(`unable to write transaction due to ${c.message}`)}return zN(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(kV,"lmdbDeleteRecords");function zN(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(zN,"createDeleteResponse")});var $h=T((Coe,XN)=>{"use strict";var VV=y(),woe=hr();function Vh(e,t){let r=Object.create(null);if(t.length===1&&VV.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Vh,"parseRow");function $V(e,t,r,s){let n=Vh(r,e);s.push(n)}a($V,"searchAll");function YV(e,t,r,s){let n=Vh(r,e);s[t]=n}a(YV,"searchAllToMap");function KV(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(KV,"iterateDBI");function Ri(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(Ri,"pushResults");function WV(e,t,r,s,n,i){t.toString().endsWith(e)&&Ri(t,r,s,n,i)}a(WV,"endsWith");function QV(e,t,r,s,n,i){t.toString().includes(e)&&Ri(t,r,s,n,i)}a(QV,"contains");function zV(e,t,r,s,n,i){t>e&&Ri(t,r,s,n,i)}a(zV,"greaterThanCompare");function JV(e,t,r,s,n,i){t>=e&&Ri(t,r,s,n,i)}a(JV,"greaterThanEqualCompare");function XV(e,t,r,s,n,i){t<e&&Ri(t,r,s,n,i)}a(XV,"lessThanCompare");function jV(e,t,r,s,n,i){t<=e&&Ri(t,r,s,n,i)}a(jV,"lessThanEqualCompare");XN.exports={parseRow:Vh,searchAll:$V,searchAllToMap:YV,iterateDBI:KV,endsWith:WV,contains:QV,greaterThanCompare:zV,greaterThanEqualCompare:JV,lessThanCompare:XV,lessThanEqualCompare:jV,pushResults:Ri}});var go=T((Poe,nb)=>{"use strict";var Fn=Ue(),Doe=G(),Sr=hr(),Yl=ze(),Xe=Er().LMDB_ERRORS_ENUM,Uoe=$(),ZV=y(),Kl=$h(),{parseRow:e$}=Kl,Moe=require("lmdb"),{OVERFLOW_MARKER:jN,MAX_SEARCH_KEY_LENGTH:t$}=Yl;function ZN(e,t,r,s=!1,n=void 0,i=void 0){return Ai(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(ZN,"iterateFullIndex");function uc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Ai(e,t,r,(l,d,f,E)=>{let b={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(b.values=!1,d.getRange(b).map(O=>({value:O}))):d.getRange(b)})}a(uc,"iterateRangeBetween");function Ai(e,t,r,s){let n=e.database||e,i=Fn.openDBI(n,r);i[Yl.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Fn.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Ai,"setupTransaction");function eb(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(jN)){if(!n)if(r)n=Fn.openDBI(e,r);else{let u=Fn.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=Fn.openDBI(e,u[_]),!n[Yl.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(eb,"getOverflowCheck");function r$(e,t,r,s=!1,n=void 0,i=void 0){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);return Ai(e,t,t,(o,c,u)=>(Wl(r),r=lc(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>e$(_.value,r))))}a(r$,"searchAll");function s$(e,t,r,s=!1,n=void 0,i=void 0){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);Wl(r),r=lc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of ZN(e,t,t,s,n,i))o.set(c,Kl.parseRow(u,r));return o}a(s$,"searchAllToMap");function n$(e,t,r=!1,s=void 0,n=void 0){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=ZN(e,void 0,t,r,s,n),c=o.transaction,u=eb(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(n$,"iterateDBI");function i$(e,t){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);return Fn.statDBI(e,t).entryCount}a(i$,"countAll");function o$(e,t,r,s,n=!1,i=void 0,o=void 0){return Gn(e,r,s),Ai(e,t,r,(c,u,_,l)=>(s=Sr.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(o$,"equals");function a$(e,t,r){return Gn(e,t,r),Fn.openDBI(e,t).getValuesCount(r)}a(a$,"count");function c$(e,t,r,s,n=!1,i=void 0,o=void 0){return Gn(e,r,s),Ai(e,null,r,(c,u)=>{s=Sr.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(c$,"startsWith");function u$(e,t,r,s,n=!1,i=void 0,o=void 0){return tb(e,t,r,s,n,i,o,!0)}a(u$,"endsWith");function tb(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Gn(e,r,s),Ai(e,null,r,(u,_,l,d)=>{let f=eb(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith(jN)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(s):S.includes(s))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?_[Yl.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(tb,"contains");function l$(e,t,r,s,n=!1,i=void 0,o=void 0){Gn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),uc(e,t,r,s,u,n,i,o,!0,!1)}a(l$,"greaterThan");function _$(e,t,r,s,n=!1,i=void 0,o=void 0){Gn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),uc(e,t,r,s,u,n,i,o,!1,!1)}a(_$,"greaterThanEqual");function d$(e,t,r,s,n=!1,i=void 0,o=void 0){Gn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),uc(e,t,r,u,s,n,i,o,!1,!0)}a(d$,"lessThan");function f$(e,t,r,s,n=!1,i=void 0,o=void 0){Gn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),uc(e,t,r,u,s,n,i,o,!1,!1)}a(f$,"lessThanEqual");function E$(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Sr.validateEnv(e),r===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Xe.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Xe.END_VALUE_REQUIRED);if(s=Sr.convertKeyValueToWrite(s),n=Sr.convertKeyValueToWrite(n),s>n)throw new Error(Xe.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return uc(e,t,r,s,n,i,o,c)}a(E$,"between");function h$(e,t,r,s){Sr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(Wl(r),r=lc(n,r),s===void 0)throw new Error(Xe.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Kl.parseRow(c,r)),o}a(h$,"searchByHash");function m$(e,t,r){Sr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Xe.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(m$,"checkHashExists");function p$(e,t,r,s,n=[]){return sb(e,t,r,s,n),rb(e,t,r,s,n).map(i=>i[1])}a(p$,"batchSearchByHash");function S$(e,t,r,s,n=[]){sb(e,t,r,s,n);let i=new Map;for(let[o,c]of rb(e,t,r,s,n))i.set(o,c);return i}a(S$,"batchSearchByHashToMap");function rb(e,t,r,s,n=[]){return Ai(e,t,t,(i,o,c)=>{r=lc(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,Kl.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(rb,"batchHashSearch");function sb(e,t,r,s,n){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(Wl(r),s==null)throw new Error(Xe.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Xe.IDS_MUST_BE_ITERABLE)}a(sb,"initializeBatchSearchByHash");function Wl(e){if(!Array.isArray(e))throw e===void 0?new Error(Xe.FETCH_ATTRIBUTES_REQUIRED):new Error(Xe.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Wl,"validateFetchAttributes");function Gn(e,t,r){if(Sr.validateEnv(e),t===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Xe.SEARCH_VALUE_REQUIRED);if(r?.length>t$)throw new Error(Xe.SEARCH_VALUE_TOO_LARGE)}a(Gn,"validateComparisonFunctions");function lc(e,t){return t.length===1&&ZV.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Fn.listDBIs(e)),t}a(lc,"setGetWholeRowAttributes");nb.exports={searchAll:r$,searchAllToMap:s$,count:a$,countAll:i$,equals:o$,startsWith:c$,endsWith:u$,contains:tb,searchByHash:h$,setGetWholeRowAttributes:lc,batchSearchByHash:p$,batchSearchByHashToMap:S$,checkHashExists:m$,iterateDBI:n$,greaterThan:l$,greaterThanEqual:_$,lessThan:d$,lessThanEqual:f$,between:E$}});var Ro=T((Boe,ub)=>{var ib=require("lodash"),ob=xe(),He=require("joi"),T$=$(),{hdb_schema_table:Ql,checkValidTable:ab,hdb_table:cb,hdb_database:zl}=Ds(),{handleHDBError:g$,hdb_errors:R$}=j(),{getDatabases:A$}=(fe(),Z(Ce)),{HTTP_STATUS_CODES:O$}=R$,N$=He.object({database:zl,schema:zl,table:cb,search_attribute:Ql,search_value:He.any().required(),get_attributes:He.array().min(1).items(Ql).optional(),desc:He.bool(),limit:He.number().integer().min(1),offset:He.number().integer().min(0)}),b$=He.object({database:zl,schema:zl,table:cb,operator:He.string().valid("and","or").default("and").lowercase(),offset:He.number().integer().min(0),limit:He.number().integer().min(1),get_attributes:He.array().min(1).items(Ql).optional(),conditions:He.array().min(1).items(He.object({search_attribute:Ql,search_type:He.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").optional(),search_value:He.when("search_type",{switch:[{is:"equals",then:He.any()},{is:"between",then:He.array().items(He.alternatives([He.string(),He.number()])).length(2)}],otherwise:He.alternatives(He.string(),He.number())}).required()})).required()});ub.exports=function(e,t){let r=null;switch(t){case"value":r=ob.validateBySchema(e,N$);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(ab("database",e.schema)),i(ab("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"),n&&(r=new Error(n.trim()));break;case"conditions":r=ob.validateBySchema(e,b$);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=T$.checkGlobalSchemaTable(e.schema,e.table);if(n)return g$(new Error,n,O$.NOT_FOUND);let o=A$()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let _=0,l=e.conditions.length;_<l;_++){let d=e.conditions[_];c.push(d.search_attribute)}let u=ib.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!ib.some(o,l=>l===_||l.attribute===_||l.attribute===_.attribute));if(u&&u.length>0){let _=u.join(", ");return _=_.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${_}'`)}}return r}});var Yh=T((qoe,lb)=>{"use strict";var y$=Ue(),I$=Ro(),{getSchemaPath:w$}=Be();lb.exports=C$;function C$(e){let t=I$(e,"hashes");if(t)throw t;let r=w$(e.schema,e.table);return y$.openEnvironment(r,e.table)}a(C$,"initialize")});var Kh=T((Goe,_b)=>{"use strict";var L$=go(),D$=Yh();_b.exports=U$;async function U$(e){let t=await D$(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return L$.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(U$,"lmdbGetDataByHash")});var Ao=T((koe,db)=>{"use strict";var Wh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};db.exports=Wh});var Eb=T((Yoe,fb)=>{"use strict";var $oe=Ao(),M$=go(),P$=Yh();fb.exports=v$;async function v$(e){let t=await P$(e),r=global.hdb_schema[e.schema][e.table];return M$.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(v$,"lmdbSearchByHash")});var Ms=T((Woe,hb)=>{"use strict";var Qh=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};hb.exports=Qh});var Jl=T((zoe,Rb)=>{"use strict";var qt=go(),B$=Ue(),H$=$(),ae=ze(),Oi=y(),q$=Si(),mb=Er().LMDB_ERRORS_ENUM,{getSchemaPath:F$}=Be(),an=Oi.SEARCH_WILDCARDS;async function G$(e,t,r){let s;e.schema===Oi.SYSTEM_SCHEMA_NAME?s=q$[e.table]:s=global.hdb_schema[e.schema][e.table];let n=gb(e,s.hash_attribute,r,t);return Sb(e,n,s.hash_attribute,r)}a(G$,"prepSearch");async function Sb(e,t,r,s){let n=F$(e.schema,e.table),i=await B$.openEnvironment(n,e.table),o=Tb(i,e,t,r),c=o.transaction||i;if([ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ae.SEARCH_TYPES.SEARCH_ALL,ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(x$(e,r)===!1){let l=e.search_attribute;if(l===r)return s?pb(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?pb(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?qt.batchSearchByHashToMap(c,r,e.get_attributes,_):qt.batchSearchByHash(c,r,e.get_attributes,_)}a(Sb,"executeSearch");function Tb(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<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 ae.SEARCH_TYPES.EQUALS:n=qt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.CONTAINS:n=qt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.ENDS_WITH:case ae.SEARCH_TYPES._ENDS_WITH:n=qt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.STARTS_WITH:case ae.SEARCH_TYPES._STARTS_WITH:n=qt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return qt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return qt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.SEARCH_ALL:return qt.searchAll(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return qt.searchAllToMap(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.BETWEEN:n=qt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ae.SEARCH_TYPES.GREATER_THAN:case ae.SEARCH_TYPES._GREATER_THAN:n=qt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.GREATER_THAN_EQUAL:case ae.SEARCH_TYPES._GREATER_THAN_EQUAL:n=qt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.LESS_THAN:case ae.SEARCH_TYPES._LESS_THAN:n=qt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.LESS_THAN_EQUAL:case ae.SEARCH_TYPES._LESS_THAN_EQUAL:n=qt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(Tb,"searchByType");function pb(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(pb,"createMapFromIterable");function x$(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 s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(x$,"checkToFetchMore");function gb(e,t,r,s){if(H$.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),an.indexOf(n)>-1)return r===!0?ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ae.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(an[0])<0&&n.indexOf(an[1])<0)return c===!0?r===!0?ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ae.SEARCH_TYPES.EQUALS;if(an.indexOf(i)>=0&&an.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ae.SEARCH_TYPES.CONTAINS;if(an.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ae.SEARCH_TYPES.ENDS_WITH;if(an.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ae.SEARCH_TYPES.STARTS_WITH;if(n.includes(an[0])||n.includes(an[1]))return ae.SEARCH_TYPES.EQUALS;throw new Error(mb.UNKNOWN_SEARCH_TYPE)}else switch(s){case Oi.VALUE_SEARCH_COMPARATORS.BETWEEN:return ae.SEARCH_TYPES.BETWEEN;case Oi.VALUE_SEARCH_COMPARATORS.GREATER:return ae.SEARCH_TYPES.GREATER_THAN;case Oi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ae.SEARCH_TYPES.GREATER_THAN_EQUAL;case Oi.VALUE_SEARCH_COMPARATORS.LESS:return ae.SEARCH_TYPES.LESS_THAN;case Oi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ae.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(mb.UNKNOWN_SEARCH_TYPE)}}a(gb,"createSearchTypeFromSearchObject");Rb.exports={executeSearch:Sb,createSearchTypeFromSearchObject:gb,prepSearch:G$,searchByType:Tb}});var Ob=T((joe,Ab)=>{"use strict";var Xoe=Ms(),k$=Ro(),V$=$(),$$=y(),Y$=Jl();Ab.exports=K$;function K$(e,t){if(!V$.isEmpty(t)&&$$.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=k$(e,"value");if(s)throw s;let n=!0;return Y$.prepSearch(e,t,n)}a(K$,"lmdbGetDataByValue")});var _c=T((tae,Nb)=>{"use strict";var eae=Ms(),W$=Ro(),Q$=$(),z$=y(),J$=Jl();Nb.exports=X$;async function X$(e,t){if(!Q$.isEmpty(t)&&z$.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=W$(e,"value");if(s)throw s;return J$.prepSearch(e,t,!1)}a(X$,"lmdbSearchByValue")});var yb=T((nae,bb)=>{"use strict";var sae=ze(),zh=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},Jh=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Xh=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};bb.exports={SearchByConditionsObject:zh,SearchCondition:Jh,SortAttribute:Xh}});var Db=T((cae,Lb)=>{"use strict";var oae=yb().SearchByConditionsObject,j$=Ms(),Z$=Ro(),jh=go(),Xl=ze(),{Resource:aae}=(is(),Z(qE)),Cb=Jl(),eY=$h(),tY=require("lodash"),{getSchemaPath:rY}=Be(),Ib=Ue(),{handleHDBError:sY,hdb_errors:nY}=j(),{HTTP_STATUS_CODES:iY}=nY,oY=1e8;Lb.exports=aY;async function aY(e){let t=Z$(e,"conditions");if(t)throw sY(t,t.message,iY.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=rY(e.schema,e.table),s=await Ib.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Ib.openDBI(s,_.search_attribute);let i=tY.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===Xl.SEARCH_TYPES.EQUALS?_.estimated_count=jh.count(s,_.search_attribute,_.search_value):l===Xl.SEARCH_TYPES.CONTAINS||l===Xl.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=oY}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await wb(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(Cb.filterByType),d=l.length,f=jh.setGetWholeRowAttributes(s,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=>eY.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await wb(o,e,f,n.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=jh.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(aY,"lmdbSearchByConditions");async function wb(e,t,r,s){let n=new j$(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Xl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Cb.searchByType(e,n,i,s).map(o=>o.value)}a(wb,"executeConditionSearch")});var dc=T((lae,Ub)=>{"use strict";var cY=y().OPERATIONS_ENUM,Zh=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=cY.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Ub.exports=Zh});var em=T((dae,Gb)=>{"use strict";var Bb=Ms(),Hb=dc(),qb=_c(),Fb=cc(),Jt=y(),Mb=$(),Pb=Ue(),{getTransactionAuditStorePath:uY,getSchemaPath:lY}=Be(),vb=G();Gb.exports=_Y;async function _Y(e){try{if(Mb.isEmpty(global.hdb_schema[e.schema])||Mb.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await dY(e),await fY(e);let t=lY(e.schema,e.table);try{await Pb.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")vb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=uY(e.schema,e.table);await Pb.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")vb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(_Y,"lmdbDropTable");async function dY(e){let t=new Bb(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await qb(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new Hb(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Fb(n)}a(dY,"deleteAttributesFromSystem");async function fY(e){let t=new Bb(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await qb(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&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new Hb(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Fb(n)}catch(i){throw i}}a(fY,"dropTableFromSystem")});var kb=T((Eae,xb)=>{"use strict";var EY=require("fs-extra"),hY=Ms(),mY=Ao(),pY=dc(),SY=em(),TY=cc(),gY=Kh(),RY=_c(),cn=y(),{getSchemaPath:AY}=Be(),{handleHDBError:OY,hdb_errors:NY}=j(),{HDB_ERROR_MSGS:bY,HTTP_STATUS_CODES:yY}=NY;xb.exports=IY;async function IY(e){let t;try{t=await wY(e.schema);let r=new hY(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await RY(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await SY(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new pY(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await TY(n);let i=AY(t);await EY.remove(i)}catch(r){throw r}}a(IY,"lmdbDropSchema");async function wY(e){let t=new mY(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await gY(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw OY(new Error,bY.SCHEMA_NOT_FOUND(e),yY.NOT_FOUND,void 0,void 0,!0);return s}a(wY,"validateDropSchema")});var rm=T((mae,Vb)=>{"use strict";var tm=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Vb.exports=tm});var Yb=T((Tae,$b)=>{"use strict";var CY=require("fs-extra"),jl=Ue(),{getTransactionAuditStorePath:LY}=Be(),sm=ze(),Sae=rm();$b.exports=DY;async function DY(e){let t;try{let r=LY(e.schema,e.table);await CY.mkdirp(r),t=await jl.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{jl.createDBI(t,sm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),jl.createDBI(t,sm.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),jl.createDBI(t,sm.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(DY,"createTransactionsAuditEnvironment")});var zb=T((Rae,Qb)=>{"use strict";var nm=y(),Kb=Ue(),UY=ho(),{getSystemSchemaPath:MY,getSchemaPath:PY}=Be(),vY=Si(),BY=xl(),im=Gl(),HY=G(),qY=Yb(),am=vY.hdb_table,Wb=[];for(let e=0;e<am.attributes.length;e++)Wb.push(am.attributes[e].attribute);Qb.exports=FY;async function FY(e,t){let r=PY(t.schema,t.table),s=new im(t.schema,t.table,nm.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new im(t.schema,t.table,nm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new im(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Kb.createEnvironment(r,t.table),e!==void 0){let o=await Kb.openEnvironment(MY(),nm.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await UY.insertRecords(o,am.hash_attribute,Wb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await om(s),await om(n),await om(i)}await qY(t)}catch(o){throw o}}a(FY,"lmdbCreateTable");async function om(e){try{await BY(e)}catch(t){HY.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(om,"createAttribute")});var Xb=T((Oae,Jb)=>{"use strict";var GY=ec(),xY=ic(),kY=Vl(),fc=y(),VY=ho().updateRecords,$Y=Ue(),{getSchemaPath:YY}=Be(),KY=oc(),WY=G();Jb.exports=QY;async function QY(e){try{let{schema_table:t,attributes:r}=GY(e);xY(e,r,t.hash_attribute),e.schema!==fc.SYSTEM_SCHEMA_NAME&&(r.includes(fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await kY(e.hdb_auth_header,t,r),n=YY(e.schema,e.table),i=await $Y.openEnvironment(n,e.table),o=await VY(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await KY(e,o)}catch(c){WY.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:s,txn_time:o.txn_time}}catch(t){throw t}}a(QY,"lmdbUpdateRecords")});var Zb=T((bae,jb)=>{"use strict";var zY=y().OPERATIONS_ENUM,cm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=zY.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};jb.exports=cm});var ty=T((wae,ey)=>{"use strict";var Iae=Zb(),JY=ec(),XY=ic(),jY=Vl(),Ec=y(),ZY=ho().upsertRecords,e1=Ue(),{getSchemaPath:t1}=Be(),r1=oc(),s1=G(),{handleHDBError:n1,hdb_errors:i1}=j();ey.exports=o1;async function o1(e){let t;try{t=JY(e)}catch(u){throw n1(u,u.message,i1.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;XY(e,s,r.hash_attribute),e.schema!==Ec.SYSTEM_SCHEMA_NAME&&(s.includes(Ec.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ec.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ec.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ec.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await jY(e.hdb_auth_header,r,s),i=t1(e.schema,e.table),o=await e1.openEnvironment(i,e.table),c=await ZY(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await r1(e,c)}catch(u){s1.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(o1,"lmdbUpsertRecords")});var sy=T((Lae,ry)=>{"use strict";var um=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};ry.exports=um});var iy=T((Uae,ny)=>{"use strict";var lm=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};ny.exports=lm});var cy=T((vae,ay)=>{"use strict";var _m=Ue(),{getTransactionAuditStorePath:a1}=Be(),Pae=sy(),hc=ze(),c1=$(),oy=iy(),u1=require("util").promisify,l1=u1(setTimeout),_1=1e4,d1=100;ay.exports=f1;async function f1(e){let t=a1(e.schema,e.table),r=await _m.openEnvironment(t,e.table,!0),s=_m.listDBIs(r);_m.initializeDBIs(r,hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new oy;do n=await E1(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await l1(d1);while(n.transactions_deleted>0);return i}a(f1,"deleteAuditLogsBefore");async function E1(e,t){let r=new oy;try{let s=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[hc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];c1.isEmpty(c)||(n=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>_1)break}return await n,r}catch(s){throw s}}a(E1,"deleteTransactions")});var ly=T((Hae,uy)=>{"use strict";var dm=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};uy.exports=dm});var dy=T((Gae,_y)=>{"use strict";var h1=Ms(),m1=dc(),Fae=ly(),Ps=y(),p1=$(),fm=Ue(),S1=Si(),T1=_c(),g1=cc(),{getSchemaPath:R1}=Be();_y.exports=A1;async function A1(e,t=!0){let r;e.schema===Ps.SYSTEM_SCHEMA_NAME?r=S1[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await N1(e),n=R1(e.schema,e.table),i=await fm.openEnvironment(n,e.table);return t===!0&&await O1(e,i,r.hash_attribute),fm.dropDBI(i,e.attribute),s}a(A1,"lmdbDropAttribute");async function O1(e,t,r){let s=fm.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(O1,"removeAttributeFromAllObjects");async function N1(e){let t=new h1(Ps.SYSTEM_SCHEMA_NAME,Ps.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ps.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ps.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Ps.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await T1(t)).filter(o=>o[Ps.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(p1.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Ps.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new m1(Ps.SYSTEM_SCHEMA_NAME,Ps.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return g1(i)}a(N1,"dropAttributeFromSystem")});var Sy=T((Vae,py)=>{"use strict";var Em=Ue(),Oo=ze(),kae=hr(),hm=y(),fy=$(),{getTransactionAuditStorePath:b1}=Be(),y1=go(),Zl=po(),I1=G();py.exports=w1;async function w1(e){let t=b1(e.schema,e.table),r=await Em.openEnvironment(t,e.table,!0),s=Em.listDBIs(r);Em.initializeDBIs(r,Oo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case hm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Ey(r,e.search_values);case hm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,L1(r,e.search_values,n);case hm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return C1(r,e.search_values);default:return Ey(r)}}a(w1,"readAuditLog");function Ey(e,t=[0,Date.now()]){fy.isEmpty(t[0])&&(t[0]=0),fy.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Oo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new Zl,n))}a(Ey,"searchTransactionsByTimestamp");function C1(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[Oo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,my(e,i))}return Object.fromEntries(r)}a(C1,"searchTransactionsByUsername");function L1(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=y1.equals(e,Oo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Oo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=my(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);hy(u,"records",r,l,o),hy(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(L1,"searchTransactionsByHashValues");function hy(e,t,r,s,n){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(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new Zl(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Zl(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(hy,"loopRecords");function my(e,t){let r=[];try{let s=e.dbis[Oo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new Zl,i);r.push(o)}}catch(i){I1.warn(i)}return r}catch(s){throw s}}a(my,"batchSearchTransactions")});var gy=T((Wae,Ty)=>{"use strict";var{getSchemaPath:Yae}=Be(),Kae=Ue(),{database:D1}=(fe(),Z(Ce));Ty.exports={writeTransaction:U1};async function U1(e,t,r){return D1({database:e,table:t}).transaction(r)}a(U1,"writeTransaction")});var Ny=T((zae,Oy)=>{"use strict";var{getSchemaPath:Ry}=Be(),Ay=Ue();Oy.exports={flush:M1,resetReadTxn:P1};async function M1(e,t){return(await Ay.openEnvironment(Ry(e,t),t.toString())).flushed}a(M1,"flush");async function P1(e,t){try{(await Ay.openEnvironment(Ry(e,t),t.toString())).resetReadTxn()}catch{}}a(P1,"resetReadTxn")});var wy=T((Xae,Iy)=>{"use strict";var{Readable:v1}=require("stream"),{getDatabases:B1}=(fe(),Z(Ce)),{readSync:H1,openSync:q1,createReadStream:by}=require("fs"),{open:F1}=require("lmdb"),yy=Cl(),G1=Dl(),{AUDIT_STORE_OPTIONS:x1}=(uo(),Z(aO)),{INTERNAL_DBIS_NAME:k1,AUDIT_STORE_NAME:V1}=ze();Iy.exports=Y1;var mm=32768,$1=100;async function Y1(e){let t=e.database||e.schema||"data",r=B1()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=F1({noSync:!0,maxDbs:G1.MAX_DBS}),f,E=d.openDB(k1,new yy(!1)),h=l.useReadTransaction(),p=0,S=a(async function(b,O){O.encoding="binary",O.encoder=void 0;let Y=d.openDB(b,O),Q=l.openDB(b,O);for(let{key:F,version:w,value:K}of Q.getRange({transaction:h,versions:Q.useVersions}))f=Y.put(F,K,w),p++%$1===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:b,value:O}of l.getRange({transaction:h,start:!1}))if(n.some(Y=>b.startsWith?.(Y+"/"))){E.put(b,O);let[,Y]=b.split("/"),Q=!Y,F=new yy(!Q,Q);await S(b,F)}e.include_audit&&await S(V1,Object.assign({},x1)),await f;let R=by(d.path);return R.headers=u(),R.on("close",()=>{h.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=q1(o.path);return o.transaction(()=>{let _=Buffer.alloc(mm);H1(c,_,0,mm),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=by(null,{fd:c,start:mm}),f=new v1.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",s),_}}a(Y1,"getBackup")});var Dy=T((Zae,Ly)=>{"use strict";var K1=G(),{handleHDBError:W1}=j(),Q1=WO(),z1=xl(),J1=Fh(),X1=kN(),j1=cc(),Z1=Kh(),eK=Eb(),tK=Ob(),rK=_c(),sK=Db(),nK=kb(),iK=zb(),oK=Xb(),aK=ty(),cK=cy(),uK=em(),lK=dy(),_K=Sy(),dK=gy(),Cy=Ny(),fK=wy(),pm=class extends Q1{static{a(this,"LMDBBridge")}async searchByConditions(t){return sK(t)}async getDataByHash(t){return await Z1(t)}async searchByHash(t){return await eK(t)}async getDataByValue(t,r){return await tK(t,r)}async searchByValue(t){return await rK(t)}async createSchema(t){return await X1(t)}async dropSchema(t){return await nK(t)}async createTable(t,r){return await iK(t,r)}async dropTable(t){return await uK(t)}async createAttribute(t){return await z1(t)}async createRecords(t){return await J1(t)}async updateRecords(t){return await oK(t)}async upsertRecords(t){try{return await aK(t)}catch(r){throw W1(r,null,null,K1.ERR,r)}}async deleteRecords(t){return await j1(t)}async dropAttribute(t){return await lK(t)}async deleteAuditLogsBefore(t){return await cK(t)}async readAuditLog(t){return await _K(t)}writeTransaction(t,r,s){return dK.writeTransaction(t,r,s)}flush(t,r){return Cy.flush(t,r)}resetReadTxn(t,r){return Cy.resetReadTxn(t,r)}getBackup(t){return fK(t)}};Ly.exports=pm});var Gy={};ve(Gy,{ResourceBridge:()=>gm});function Rm({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 My(e,t){let r=vs(e),s=Rm(e,r);if(!r)throw new ls.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;Ge(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:n,select:s},i);return l=l&&hl(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 vs(e){let t=e.database||e.schema||hK,r=_s()[t];if(!r)throw(0,ls.handleHDBError)(new Error,EK.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Py(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*vy(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var By,e_,ls,Hy,qy,ds,Sm,Tm,Fy,EK,hK,mK,pK,Uy,gm,xy=Te(()=>{"use strict";By=D(Dy()),e_=D(Ro()),ls=D(j());fe();Hy=D(ec()),qy=D(ic()),ds=D(y()),Sm=D(on()),Tm=D(us()),Fy=D($());mi();ml();({HDB_ERROR_MSGS:EK}=ls.hdb_errors),hK="data",mK=1e4,pK=10,gm=class extends By.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Uy=this}async searchByConditions(t){let r=(0,e_.default)(t,"conditions");if(r)throw(0,ls.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=vs(t);if(!s)throw new ls.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Rm(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new ls.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}tt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await vs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=vs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],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}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){vs(t).dropTable()}createSchema(t){return mc({database:t.schema,table:null}),Sm.signalSchemaChange(new Tm.SchemaEventMsg(process.pid,ds.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Am(t.schema),Sm.signalSchemaChange(new Tm.SchemaEventMsg(process.pid,ds.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,Uy.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,Hy.default)(t);(0,qy.default)(t,s,r.primaryKey);let n,i=_s()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Ge(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.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=hl(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:n,skipped_hashes:_}})}async deleteRecords(t){let r=_s()[t.schema][t.table],s={user:t.hdb_user};return Ge(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return Py(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=_s()[t.schema][t.table];if(!r.createdTimeProperty)throw new ls.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:ds.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!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,Fy.async_set_timeout)(pK),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%mK===0&&await _();return u.length>0&&await _(),n?Py(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,e_.default)(t,"hashes");if(r)throw r;return My(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of My(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&ds.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,e_.default)(t,"value");if(s)throw s;let n=vs(t);if(!n)throw new ls.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===ds.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Rm(t,n)})}async getDataByValue(t,r){let s=new Map,n=vs(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){vs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return vs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=vs(t),s={};switch(t.search_type){case ds.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[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 s;case ds.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of vy(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return vy(r,t.search_values?.[0],t.search_values?.[1])}}};a(Rm,"getSelect");a(My,"getRecords");a(vs,"getTable");a(Py,"createDeleteResponse");a(vy,"groupRecordsInHistory")});var Es=T((ice,ky)=>{"use strict";var{ResourceBridge:SK}=(xy(),Z(Gy)),TK=X();TK.initSync();var t_;function gK(){return t_||(t_=new SK,t_)}a(gK,"getBridge");ky.exports=gK()});var Ky=T((ace,Yy)=>{"use strict";var Vy=require("lodash"),pc=require("mathjs"),RK=require("jsonata"),$y=$();Yy.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Vy.uniqWith(e,Vy.isEqual):e,searchJSON:AK,mad:Sc.bind(null,pc.mad),mean:Sc.bind(null,pc.mean),mode:Sc.bind(null,pc.mode),prod:Sc.bind(null,pc.prod),median:Sc.bind(null,pc.median)};function Sc(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Sc,"aggregateFunction");function AK(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($y.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),$y.isEmpty(this.__ala__.res[r])){let s=RK(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(AK,"searchJSON")});var Qy=T((uce,Wy)=>{"use strict";var rt=require("moment"),Om="YYYY-MM-DDTHH:mm:ss.SSSZZ";rt.suppressDeprecationWarnings=!0;Wy.exports={current_date:()=>rt().utc().format("YYYY-MM-DD"),current_time:()=>rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return rt(e).utc().format("YYYY");case"month":return rt(e).utc().format("MM");case"day":return rt(e).utc().format("DD");case"hour":return rt(e).utc().format("HH");case"minute":return rt(e).utc().format("mm");case"second":return rt(e).utc().format("ss");case"millisecond":return rt(e).utc().format("SSS");default:break}},date:e=>rt(e).utc().format(Om),date_format:(e,t)=>rt(e).utc().format(t),date_add:(e,t,r)=>rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=rt(e).utc(),n=rt(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>rt().utc().valueOf(),get_server_time:()=>rt().format(Om),offset_utc:(e,t)=>rt(e).utc().utcOffset(t).format(Om)}});var jy=T((lce,Xy)=>{"use strict";var OK=require("@turf/area"),NK=require("@turf/length"),bK=require("@turf/circle"),yK=require("@turf/difference"),IK=require("@turf/distance"),wK=require("@turf/boolean-contains"),CK=require("@turf/boolean-equal"),LK=require("@turf/boolean-disjoint"),DK=require("@turf/helpers"),zy=y(),_e=$();Xy.exports={geoArea:UK,geoLength:MK,geoCircle:PK,geoDifference:vK,geoDistance:Jy,geoNear:BK,geoContains:HK,geoEqual:qK,geoCrosses:FK,geoConvert:GK};var Nm="geo1 is required",bm="geo2 is required";function UK(e){if(_e.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),OK.default(e)}a(UK,"geoArea");function MK(e,t){if(_e.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),NK.default(e,{units:t||"kilometers"})}a(MK,"geoLength");function PK(e,t,r){if(_e.isEmpty(e))throw new Error("point is required");if(_e.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),bK.default(e,t,{units:r||"kilometers"})}a(PK,"geoCircle");function vK(e,t){if(_e.isEmpty(e))throw new Error("poly1 is required");if(_e.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),yK(e,t)}a(vK,"geoDifference");function Jy(e,t,r){if(_e.isEmpty(e))throw new Error("point1 is required");if(_e.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),IK.default(e,t,{units:r||"kilometers"})}a(Jy,"geoDistance");function BK(e,t,r,s){if(_e.isEmpty(e))throw new Error("point1 is required");if(_e.isEmpty(t))throw new Error("point2 is required");if(_e.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return Jy(e,t,s)<=r}a(BK,"geoNear");function HK(e,t){if(_e.isEmpty(e))throw new Error(Nm);if(_e.isEmpty(e))throw new Error(bm);return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),wK.default(e,t)}a(HK,"geoContains");function qK(e,t){if(_e.isEmpty(e))throw new Error(Nm);if(_e.isEmpty(e))throw new Error(bm);return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),CK.default(e,t)}a(qK,"geoEqual");function FK(e,t){if(_e.isEmpty(e))throw new Error(Nm);if(_e.isEmpty(e))throw new Error(bm);return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),!LK.default(e,t)}a(FK,"geoCrosses");function GK(e,t,r){if(_e.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(_e.isEmpty(t))throw new Error("geo_type is required");if(_e.isEmpty(zy.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(zy.GEO_CONVERSION_ENUM).join(",")}`);return DK[t](e,r)}a(GK,"geoConvert")});var r_=T((dce,Zy)=>{var Ni=Ky(),Tr=Qy(),Bs=jy();Zy.exports=e=>{e.aggr.mad=e.aggr.MAD=Ni.mad,e.aggr.mean=e.aggr.MEAN=Ni.mean,e.aggr.mode=e.aggr.MODE=Ni.mode,e.aggr.prod=e.aggr.PROD=Ni.prod,e.aggr.median=e.aggr.MEDIAN=Ni.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ni.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ni.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Tr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Tr.current_time,e.fn.extract=e.fn.EXTRACT=Tr.extract,e.fn.date=e.fn.DATE=Tr.date,e.fn.date_format=e.fn.DATE_FORMAT=Tr.date_format,e.fn.date_add=e.fn.DATE_ADD=Tr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Tr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Tr.date_diff,e.fn.now=e.fn.NOW=Tr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Tr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Tr.get_server_time,e.fn.getdate=e.fn.GETDATE=Tr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Tr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Bs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Bs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Bs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Bs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Bs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Bs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Bs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Bs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Bs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Bs.geoNear}});var sI=T((fce,rI)=>{"use strict";var Tc=require("lodash"),bt=require("alasql");bt.options.cache=!1;var xK=r_(),eI=require("clone"),s_=require("recursive-iterator"),re=G(),ie=$(),No=Es(),kK=y(),{hdb_errors:VK}=j(),{getDatabases:tI}=(fe(),Z(Ce)),$K="IS NULL",hs="There was a problem performing this search. Please check the logs and try again.";xK(bt);var ym=class{static{a(this,"SQLSearch")}constructor(t,r){if(ie.isEmpty(t))throw re.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(),ie.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ie.isEmptyOrZeroLength(s))return re.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw re.error("Error thrown from checkEmptySQL in SQLSearch class method search."),re.error(s),new Error(hs)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw re.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),re.error(s),new Error(hs)}if(Object.keys(this.data).length===0)return re.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw re.error("Error thrown from processJoins in SQLSearch class method search."),re.error(s),new Error(hs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw re.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),re.error(s),new Error(hs)}try{return t=await this._finalSQL(),t}catch(s){throw re.error("Error thrown from finalSQL in SQLSearch class method search."),re.error(s),new Error(hs)}}_getColumns(){let t=new s_(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(eI(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Tc.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=tI()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ie.isEmpty(this.statement.where)){re.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new s_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ie.isEmpty(r)&&r.right)if(ie.isNotEmptyAndHasValue(r.right.value)){let s=ie.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new bt.yy.LogicValue({value:s}):r.right instanceof bt.yy.StringValue&&!ie.isEmpty(s)&&ie.autoCasterIsNumberCheck(s.toString())&&(r.right=new bt.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ie.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new bt.yy.LogicValue({value:i}):s instanceof bt.yy.StringValue&&ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new bt.yy.NumValue({value:i}))});if(t){re.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new s_(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!ie.isEmpty(kK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ie.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ie.isEmptyOrZeroLength(r.left.columnid)||ie.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(ie.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"=":!ie.isEmpty(r.right.value)||!ie.isEmpty(r.left.value)?s.add(ie.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)s.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,...s])}}}_setAliasesForColumns(){if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&ie.isEmptyOrZeroLength(this.statement.from)&&ie.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Tc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(ie.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ie.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&!ie.isEmptyOrZeroLength(this.columns.columns))return t;if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&ie.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await bt.promise(r)}catch(r){throw re.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),re.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(eI(s))})}_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,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(ie.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($K)>-1&&this.tables.forEach(n=>{let i={columnid:tI()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Tc.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!ie.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!ie.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await No.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw re.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(hs)}else try{c.search_attribute=n.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 No.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(E)))}))}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(hs)}else if(!ie.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!ie.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 No.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,ie.autoCast(p)));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(p)))}}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),re.error(l),new Error(hs)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await No.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ie.autoCast(d)));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(d)))}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),re.error(l),new Error(hs)}}}_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 bt.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(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.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 s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new bt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new bt.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 n=t.is_func?new bt.yy.FuncValue:new bt.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.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={};n.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:"",_="";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&&(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,n);f=await bt.promise(h,t),t=null}catch(E){throw re.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),re.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=Tc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,R=p.length;S<R;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 s=[],n=new s_(this.columns);for(let{node:i}of n)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)&&s.push(o)}}s=Tc.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw re.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),re.error(i),new Error(hs)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await No.getDataByHash(c),_=n.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=n.columns[h],S=E[p]===void 0?null:E[p];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw re.error("Error thrown from getDataByHash function in SQLSearch class method getData."),re.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(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.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 n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();re.trace(`Final SQL: ${n}`),s=await bt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),re.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw re.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),re.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return re.error(VK.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),re.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${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=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await No.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw re.error("There was an error when processing this SQL operation. Check your logs"),re.error(o),new Error(hs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};rI.exports=ym});var Gr=T((hce,nI)=>{"use strict";var YK=YO();nI.exports={searchByConditions:WK,searchByHash:QK,searchByValue:zK,search:JK};var Im=Es(),{transformReq:wm}=$(),KK=sI();async function WK(e){return wm(e),Im.searchByConditions(e)}a(WK,"searchByConditions");async function QK(e){wm(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Im.searchByHash(e))r&&t.push(r);return t}a(QK,"searchByHash");async function zK(e){wm(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Im.searchByValue(e))t.push(r);return t}a(zK,"searchByValue");function JK(e,t){try{let r=new YK(e);r.validate(),new KK(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(JK,"search")});var un=T((pce,cI)=>{"use strict";var gc=require("crypto"),XK=X(),{CONFIG_PARAMS:jK}=y(),oI="aes-256-cbc",ZK=32,eW=16,Cm=64,aI=32,tW=Cm+aI,iI=new Map;cI.exports={encrypt:rW,decrypt:sW,createNatsTableStreamName:nW};function rW(e){let t=gc.randomBytes(ZK),r=gc.randomBytes(eW),s=gc.createCipheriv(oI,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(rW,"encrypt");function sW(e){let t=e.substr(0,Cm),r=e.substr(Cm,aI),s=e.substr(tW,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=gc.createDecipheriv(oI,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(sW,"decrypt");function nW(e,t){let r=XK.get(jK.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=iI.get(r);return s||(s=gc.createHash("md5").update(r).digest("hex"),iI.set(r,s)),s}a(nW,"createNatsTableStreamName")});var bi=T((gce,lI)=>{"use strict";var Tce=Gr(),n_=G(),uI=Fl(),iW=un(),i_=$(),{handleHDBError:o_,hdb_errors:oW}=j(),{HDB_ERROR_MSGS:a_,HTTP_STATUS_CODES:Lm}=oW,aW=X();aW.initSync();var{getDatabases:Dm}=(fe(),Z(Ce));lI.exports={describeAll:cW,describeTable:c_,describeSchema:uW};async function cW(e){try{let t=i_.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Dm(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)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){n_.error(E)}}let _={};for(let l in c)t||s?(_[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||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return n_.error("Got an error in describeAll"),n_.error(t),o_(new Error,a_.DESCRIBE_ALL_ERR)}}a(cW,"describeAll");async function c_(e,t){i_.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=uI.describe_table(e);if(i)throw i;let c=Dm()[r];if(!c)throw o_(new Error,a_.SCHEMA_NOT_FOUND(e.schema),Lm.NOT_FOUND);let u=c[s];if(!u)throw o_(new Error,a_.TABLE_NOT_FOUND(e.schema,e.table),Lm.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(n){let f={};n.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=iW.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){n_.warn(`unable to stat table dbi due to ${f}`)}return d}a(c_,"descTable");async function uW(e){i_.transformReq(e);let t=uI.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 s=e.schema.toString(),i=Dm()[s];if(!i)throw o_(new Error,a_.SCHEMA_NOT_FOUND(e.schema),Lm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),i_.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(uW,"describeSchema")});var xn=T((Nce,hI)=>{var lW=Si(),{callbackify:dI,promisify:_W}=require("util"),{getDatabases:fI}=(fe(),Z(Ce));hI.exports={setSchemaDataToGlobal:_I,getTableSchema:dW,getSystemSchema:fW,setSchemaDataToGlobalAsync:_W(_I)};var EI=bi(),Ace=dI(EI.describeAll),Oce=dI(EI.describeTable);function _I(e){global.hdb_schema=fI(),e&&e()}a(_I,"setSchemaDataToGlobal");function dW(e,t,r){let s=fI()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(dW,"getTableSchema");function fW(){return lW}a(fW,"getSystemSchema")});var xr=T((yce,TI)=>{"use strict";var l_=Lh(),yt=$(),EW=require("util"),__=Es(),hW=xn(),mI=G(),{handleHDBError:yi,hdb_errors:mW}=j(),{HTTP_STATUS_CODES:Ii}=mW,pW=EW.promisify(hW.getTableSchema),SW="updated",pI="inserted",SI="upserted";TI.exports={insert:gW,update:RW,upsert:AW,validation:TW,flush:OW};async function TW(e){if(yt.isEmpty(e))throw new Error("invalid update parameters defined.");if(yt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(yt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await pW(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 s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&yt.isEmptyOrZeroLength(c[s]))throw mI.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(!yt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw mI.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!yt.isEmpty(c[s])&&c[s]!==""&&n.has(yt.autoCast(c[s]))&&(c.skip=!0),n.add(yt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(TW,"validation");async function gW(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=l_(e);if(t)throw yi(new Error,t.message,Ii.BAD_REQUEST);yt.transformReq(e);let r=yt.checkSchemaTableExist(e.schema,e.table);if(r)throw yi(new Error,r,Ii.BAD_REQUEST);let s=await __.createRecords(e);return u_(pI,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(gW,"insertData");async function RW(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=l_(e);if(t)throw yi(new Error,t.message,Ii.BAD_REQUEST);yt.transformReq(e);let r=yt.checkSchemaTableExist(e.schema,e.table);if(r)throw yi(new Error,r,Ii.BAD_REQUEST);let s=await __.updateRecords(e);return yt.isEmpty(s.existing_rows)?u_(SW,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):u_(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(RW,"updateData");async function AW(e){if(e.operation!=="upsert")throw yi(new Error,"invalid operation, must be upsert",Ii.INTERNAL_SERVER_ERROR);let t=l_(e);if(t)throw yi(new Error,t.message,Ii.BAD_REQUEST);yt.transformReq(e);let r=yt.checkSchemaTableExist(e.schema,e.table);if(r)throw yi(new Error,r,Ii.BAD_REQUEST);let s=await __.upsertRecords(e);return u_(SI,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(AW,"upsertData");function u_(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===pI?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===SI?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(u_,"returnObject");function OW(e){return yt.transformReq(e),__.flush(e.schema,e.table)}a(OW,"flush")});var Mm=T((wce,AI)=>{var NW=xe(),Um=require("joi"),{hdb_table:bW,hdb_database:gI}=Ds(),RI={schema:gI,database:gI,table:bW},yW={date:Um.date().iso().required()},IW={timestamp:Um.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};AI.exports=function(e,t){let r=t==="timestamp"?{...RI,...IW}:{...RI,...yW},s=Um.object(r);return NW.validateBySchema(e,s)}});var bI=T((Cce,NI)=>{var wW=xe(),Pm=require("joi"),{hdb_table:CW,hdb_database:OI}=Ds(),LW=Pm.object({schema:OI,database:OI,table:CW,hash_values:Pm.array().required(),ids:Pm.array()});NI.exports=function(e){return wW.validateBySchema(e,LW)}});var II=T((Lce,yI)=>{"use strict";var vm=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},Bm=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},Hm=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};yI.exports={InsertObject:vm,NoSQLSeachObject:Bm,DeleteResponseObject:Hm}});var Li=T((Uce,UI)=>{"use strict";var CI=Mm(),DW=bI(),wi=$(),wI=require("moment"),LI=G(),{promisify:UW,callbackify:MW}=require("util"),Ci=y(),PW=xn(),qm=UW(PW.getTableSchema),Fm=Es(),{DeleteResponseObject:vW}=II(),{handleHDBError:kn,hdb_errors:BW}=j(),{HDB_ERROR_MSGS:d_,HTTP_STATUS_CODES:Vn}=BW,HW="records successfully deleted",qW=MW(DI);UI.exports={delete:qW,deleteRecord:DI,deleteFilesBefore:FW,deleteAuditLogsBefore:GW};async function FW(e){let t=CI(e,"date");if(t)throw kn(t,t.message,Vn.BAD_REQUEST,void 0,void 0,!0);if(wi.transformReq(e),!wI(e.date,wI.ISO_8601).isValid())throw kn(new Error,d_.INVALID_DATE,Vn.BAD_REQUEST,Ci.LOG_LEVELS.ERROR,d_.INVALID_DATE,!0);let s=wi.checkSchemaTableExist(e.schema,e.table);if(s)throw kn(new Error,s,Vn.NOT_FOUND,Ci.LOG_LEVELS.ERROR,s,!0);let n=await Fm.deleteRecordsBefore(e);if(await qm(e.schema,e.table),LI.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(FW,"deleteFilesBefore");async function GW(e){let t=CI(e,"timestamp");if(t)throw kn(t,t.message,Vn.BAD_REQUEST,void 0,void 0,!0);if(wi.transformReq(e),isNaN(e.timestamp))throw kn(new Error,d_.INVALID_VALUE("Timestamp"),Vn.BAD_REQUEST,Ci.LOG_LEVELS.ERROR,d_.INVALID_VALUE("Timestamp"),!0);let r=wi.checkSchemaTableExist(e.schema,e.table);if(r)throw kn(new Error,r,Vn.NOT_FOUND,Ci.LOG_LEVELS.ERROR,r,!0);let s=await Fm.deleteAuditLogsBefore(e);return await qm(e.schema,e.table),LI.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(GW,"deleteAuditLogsBefore");async function DI(e){e.ids&&(e.hash_values=e.ids);let t=DW(e);if(t)throw kn(t,t.message,Vn.BAD_REQUEST,void 0,void 0,!0);wi.transformReq(e);let r=wi.checkSchemaTableExist(e.schema,e.table);if(r)throw kn(new Error,r,Vn.NOT_FOUND,Ci.LOG_LEVELS.ERROR,r,!0);try{await qm(e.schema,e.table);let s=await Fm.deleteRecords(e);return wi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${HW}`),s}catch(s){if(s.message===Ci.SEARCH_NOT_FOUND_MESSAGE){let n=new vW;return n.message=Ci.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(DI,"deleteRecord")});var f_=T((Pce,vI)=>{var xW=require("crypto"),MI=9;function kW(e){let t=$W(MI),r=PI(e+t);return t+r}a(kW,"createHash");function VW(e,t){let r=e.substr(0,MI),s=r+PI(t+r);return e===s}a(VW,"validateHash");function $W(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a($W,"generateSalt");function PI(e){return xW.createHash("md5").update(e).digest("hex")}a(PI,"md5");vI.exports={hash:kW,validate:VW}});var HI=T((Bce,BI)=>{var Gm=xe(),Ft={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 YW(e){return Ft.password.presence=!0,Ft.username.presence=!0,Ft.role.presence=!0,Ft.active.presence=!0,Gm.validateObject(e,Ft)}a(YW,"addUserValidation");function KW(e){return Ft.password.presence=!1,Ft.username.presence=!0,Ft.role.presence=!1,Ft.active.presence=!1,Gm.validateObject(e,Ft)}a(KW,"alterUserValidation");function WW(e){return Ft.password.presence=!1,Ft.username.presence=!0,Ft.role.presence=!1,Ft.active.presence=!1,Gm.validateObject(e,Ft)}a(WW,"dropUserValidation");BI.exports={addUserValidation:YW,alterUserValidation:KW,dropUserValidation:WW}});var ke=T((Fce,FI)=>{"use strict";var{platform:qce}=require("os"),QW="nats-server.zip",xm="nats-server",zW=process.platform==="win32"?`${xm}.exe`:xm,km="HDB",JW=/^[^\s.,*>]+$/,qI="__request__",XW=a(e=>`${e}.${qI}`,"REQUEST_SUBJECT"),jW={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},ZW={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},eQ={HUB:"hub.pid",LEAF:"leaf.pid"},tQ={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},rQ={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:km,deliver_subject:"__HDB__.WORKQUEUE"},sQ={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:km,deliver_subject:"HDB.SCHEMAQUEUE"},nQ={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:km,deliver_subject:"HDB.USERQUEUE"},iQ={SUCCESS:"success",ERROR:"error"},oQ={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},aQ={TXN:"txn",MSGID:"msgid"},bo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},cQ={[bo.ERR]:1,[bo.WRN]:2,[bo.INF]:3,[bo.DBG]:4,[bo.TRC]:5},uQ={debug:"-D",trace:"-DVV"};FI.exports={NATS_SERVER_ZIP:QW,NATS_SERVER_NAME:xm,NATS_BINARY_NAME:zW,PID_FILES:eQ,NATS_CONFIG_FILES:ZW,SERVER_SUFFIX:tQ,WORK_QUEUE_CONSUMER_NAMES:rQ,SCHEMA_QUEUE_CONSUMER_NAMES:sQ,USER_QUEUE_CONSUMER_NAMES:nQ,NATS_TERM_CONSTRAINTS_RX:JW,REQUEST_SUFFIX:qI,UPDATE_REMOTE_RESPONSE_STATUSES:iQ,CLUSTER_STATUS_STATUSES:oQ,REQUEST_SUBJECT:XW,SUBJECT_PREFIXES:aQ,MSG_HEADERS:jW,LOG_LEVELS:bo,LOG_LEVEL_FLAGS:uQ,LOG_LEVEL_HIERARCHY:cQ}});var xI=T((xce,GI)=>{"use strict";var lQ={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,String.fromCharCode(13,10)),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,String.fromCharCode(13,10))},_Q="certificate.pem",dQ="privateKey.pem",fQ="ca.pem";GI.exports={CERTIFICATE_VALUES:lQ,CERTIFICATE_PEM_NAME:_Q,PRIVATEKEY_PEM_NAME:dQ,CA_PEM_NAME:fQ}});var $m=T((Vce,KI)=>{"use strict";var YI=require("fs-extra"),ue=require("joi"),EQ=require("os"),{boolean:we,string:Hs,number:It,array:Vm}=ue.types(),{totalmem:kI}=require("os"),yo=require("path"),hQ=G(),h_=$(),kce=xI(),VI=y(),mQ=xe(),$I="log",pQ="components",SQ="Invalid logging.rotation.maxSize unit. Available units are G, M or K",TQ="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",gQ="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",RQ="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",AQ="rootPath config parameter is undefined",OQ="clustering.enabled config parameter is undefined",Di=It.min(0).required(),m_=Vm.items({host:Hs.required(),port:Di}).empty(null),ln;KI.exports={configValidator:NQ,routesValidator:LQ,route_constraints:m_};function NQ(e){if(ln=e.rootPath,h_.isEmpty(ln))throw AQ;let t=we.required(),r=It.min(0).max(1e3).empty(null).default(CQ),s=Hs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(E_),n=Hs.optional().empty(null),i=Hs.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ue.string().empty(null).default(E_),c=ue.custom(yQ).empty(null).default(E_),u=e.clustering?.enabled;if(h_.isEmpty(u))throw OQ;let _;return u===!0?_=ue.object({enabled:t,hubServer:ue.object({cluster:ue.object({name:ue.required().empty(null),network:ue.object({port:Di,routes:m_}).required()}).required(),leafNodes:ue.object({network:ue.object({port:Di}).required()}).required(),network:ue.object({port:Di}).required()}).required(),leafServer:ue.object({network:ue.object({port:Di,routes:m_}).required(),streams:ue.object({maxAge:It.min(120).allow(null).optional(),maxBytes:It.min(1).allow(null).optional(),maxMsgs:It.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ue.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:we.optional(),databaseLevel:we.optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:we.required(),verify:we.optional()}),user:Hs.optional().empty(null)}).required():_=ue.object({enabled:t,tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:we.required()})}).required(),ue.object({authentication:ue.object({authorizeLocal:we,cacheTTL:It.required(),enableSessions:we}),analytics:ue.object({aggregatePeriod:It}),componentsRoot:s.optional(),clustering:_,localStudio:ue.object({enabled:t}).required(),logging:ue.object({auditAuthEvents:ue.object({logFailed:we,logSuccessful:we}),file:we.required(),level:ue.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ue.object({enabled:we.optional(),compress:we.optional(),interval:Hs.custom(wQ).optional().empty(null),maxSize:Hs.custom(IQ).optional().empty(null),path:Hs.optional().empty(null).default(E_)}).required(),root:s,stdStreams:we.required(),auditLog:we.required()}).required(),operationsApi:ue.object({network:ue.object({cors:we.optional(),corsAccessList:Vm.optional(),headersTimeout:It.min(1).optional(),keepAliveTimeout:It.min(1).optional(),port:It.optional().empty(null),securePort:It.optional().empty(null),timeout:It.min(1).optional()}).optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:Hs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ue.object({network:ue.object({port:Di,securePort:Di}).required(),webSocket:we.optional(),requireAuthentication:we.optional()}),http:ue.object({compressionThreshold:It.optional(),cors:we.optional(),corsAccessList:Vm.optional(),headersTimeout:It.min(1).optional(),port:It.min(0).optional().empty(null),securePort:It.min(0).optional().empty(null)}).required(),threads:r.optional(),storage:ue.object({writeAsync:we.required(),overlappingSync:we.optional(),caching:we.optional(),compression:we.optional(),noReadAhead:we.optional(),path:c,prefetchWrites:we.optional()}).required(),ignoreScripts:we.optional(),tls:ue.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(NQ,"configValidator");function bQ(e){return YI.existsSync(e)?null:`Specified path ${e} does not exist.`}a(bQ,"doesPathExist");function yQ(e,t){ue.assert(e,Hs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=bQ(e);if(r)return t.message(r)}a(yQ,"validatePath");function IQ(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(SQ);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(gQ):e}a(IQ,"validateRotationMaxSize");function wQ(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(TQ);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(RQ):e}a(wQ,"validateRotationInterval");function CQ(e,t){let r=t.state.path.join("."),s=EQ.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||kI();return i=Math.round(Math.min(i,kI())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),hQ.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(CQ,"setDefaultThreads");function E_(e,t){if(!h_.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(h_.isEmpty(ln))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return yo.join(ln,pQ);case"logging.root":return yo.join(ln,$I);case"clustering.leafServer.streams.path":return yo.join(ln,"clustering","leaf");case"storage.path":let s=yo.join(ln,VI.LEGACY_DATABASES_DIR_NAME);return YI.existsSync(s)?s:yo.join(ln,VI.DATABASES_DIR_NAME);case"logging.rotation.path":return yo.join(ln,$I);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(E_,"setDefaultRoot");function LQ(e){let t=ue.object({routes:m_});return mQ.validateBySchema({routes:e},t)}a(LQ,"routesValidator")});var Ar=T((Kce,tw)=>{"use strict";var Rr=y(),pt=$(),lt=G(),{configValidator:DQ,routesValidator:WI}=$m(),Xt=require("fs-extra"),UQ=require("yaml"),ms=require("path"),MQ=require("is-number"),zI=require("properties-reader"),PQ=require("lodash"),{handleHDBError:vQ}=j(),{HTTP_STATUS_CODES:BQ,HDB_ERROR_MSGS:p_}=Er(),Yce=require("minimist"),{server:HQ}=(fr(),Z(di)),{DATABASES_PARAM_CONFIG:Rc,CONFIG_PARAMS:gr,CONFIG_PARAM_MAP:ps}=Rr,qQ="Unable to get config value because config is uninitialized",FQ="Config successfully initialized",GQ="Error backing up config file",xQ="Empty parameter sent to getConfigValue",JI=ms.join(Rr.PACKAGE_ROOT,"config","yaml",Rr.HDB_DEFAULT_CONFIG_FILE),kQ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",QI={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"},S_,_t,T_;tw.exports={createConfigFile:VQ,getDefaultConfig:$Q,getConfigValue:jI,initConfig:Km,flattenConfig:Io,updateConfigValue:ZI,updateConfigObject:KQ,getConfiguration:zQ,setConfiguration:JQ,readConfigFile:Qm,getClusteringRoutes:XQ,initOldConfig:ew,getConfigFromFile:jQ,getConfigFilePath:Ui,addConfig:ZQ,deleteConfigFromFile:ez,getConfigObj:tz};function VQ(e){let t=$n(JI);S_=Io(t.toJSON());let r;for(let o in e){let c=ps[o.toLowerCase()];if(c===gr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=Ym(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){lt.error(l)}}}r&&XI(t,r),Wm(t);let s=t.toJSON();_t=Io(s);let n=t.getIn(["rootPath"]),i=ms.join(n,Rr.HDB_CONFIG_FILE);Xt.createFileSync(i),Xt.writeFileSync(i,String(t)),lt.trace(`Config file written to ${i}`)}a(VQ,"createConfigFile");function XI(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!pt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Rc.TABLES))for(let i in s[n][Rc.TABLES])for(let o in s[n][Rc.TABLES][i]){let c=s[n][Rc.TABLES][i][o],u=[gr.DATABASES,n,Rc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[gr.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){lt.error("Error parsing schemas CLI/env config arguments",s)}}a(XI,"setSchemasConfig");function $Q(e){if(S_===void 0){let r=$n(JI);S_=Io(r.toJSON())}let t=ps[e.toLowerCase()];if(t!==void 0)return S_[t.toLowerCase()]}a($Q,"getDefaultConfig");function jI(e){if(e==null){lt.error(xQ);return}if(_t===void 0){lt.trace(qQ);return}let t=ps[e.toLowerCase()];if(t!==void 0)return _t[t.toLowerCase()]}a(jI,"getConfigValue");function Ui(e=pt.getPropsFilePath()){let t=pt.getEnvCliRootPath();return t?ms.join(t,Rr.HDB_CONFIG_FILE):zI(e).get(Rr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Ui,"getConfigFilePath");function Km(e=!1){if(_t===void 0||e){let t;if(!pt.noBootFile()){t=pt.getPropsFilePath();try{Xt.accessSync(t,Xt.constants.F_OK|Xt.constants.R_OK)}catch(i){throw lt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Ui(t),s;if(r.includes("config/settings.js"))try{ew(r);return}catch(i){if(i.code!==Rr.NODE_ERROR_CODES.ENOENT)throw i}try{s=$n(r)}catch(i){if(i.code===Rr.NODE_ERROR_CODES.ENOENT){lt.trace(`HarperDB config file not found at ${r}.
5
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw lt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}YQ(s,r),Wm(s);let n=s.toJSON();if(HQ.config=n,_t=Io(n),_t.logging_rotation_rotate)for(let i in QI)_t[i]&&lt.error(`Config ${QI[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);lt.trace(FQ)}}a(Km,"initConfig");function YQ(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ms.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ms.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ms.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(lt.trace("Updating config file with missing config params"),Xt.writeFileSync(t,String(e)))}a(YQ,"checkForUpdatedConfig");function Wm(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=DQ(t);if(r.error)throw p_.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)}a(Wm,"validateConfig");function KQ(e,t){_t===void 0&&(_t={});let r=ps[e.toLowerCase()];if(r===void 0){lt.trace(`Unable to update config object because config param '${e}' does not exist`);return}_t[r.toLowerCase()]=t}a(KQ,"updateConfigObject");function ZI(e,t,r=void 0,s=!1,n=!1,i=!1){_t===void 0&&Km();let o=jI(ps.hdb_root),c=ms.join(o,Rr.HDB_CONFIG_FILE),u=$n(c),_;if(r===void 0&&e.toLowerCase()===gr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=ps[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Ym(f,t);u.setIn([...E],h)}else for(let f in r){let E=ps[f.toLowerCase()];if(E===gr.HTTP_SECUREPORT&&r[f]===_t[gr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===gr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===_t[gr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===gr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Rr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=Ym(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(R){lt.error(R)}}}_&&XI(u,_),Wm(u);let l=u.getIn(["rootPath"]),d=ms.join(l,Rr.HDB_CONFIG_FILE);s===!0&&WQ(c,l),Xt.writeFileSync(d,String(u)),n&&(_t=Io(u.toJSON())),lt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(ZI,"updateConfigValue");function WQ(e,t){try{let r=ms.join(t,"backup",`${Rr.HDB_CONFIG_FILE}.bak`);Xt.copySync(e,r),lt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){lt.error(GQ),lt.error(r)}}a(WQ,"backupConfigFile");var QQ=["databases"];function Io(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)),T_=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i))if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!QQ.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!gr[u.toUpperCase()]&&ps[u]&&(n[ps[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(Io,"flattenConfig");function Ym(e,t){if(e===gr.CLUSTERING_NODENAME||e===gr.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(MQ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||pt.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 pt.autoCast(t)}a(Ym,"castConfigValue");function zQ(){let e=pt.getPropsFilePath(),t=Ui(e);return $n(t).toJSON()}a(zQ,"getConfiguration");async function JQ(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return ZI(void 0,void 0,n,!0),kQ}catch(i){throw typeof i=="string"||i instanceof String?vQ(i,i,BQ.BAD_REQUEST,void 0,void 0,!0):i}}a(JQ,"setConfiguration");function Qm(){let e=pt.getPropsFilePath();try{Xt.accessSync(e,Xt.constants.F_OK|Xt.constants.R_OK)}catch(s){if(!pt.noBootFile())throw lt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Ui(e);return $n(t).toJSON()}a(Qm,"readConfigFile");function $n(e){return UQ.parseDocument(Xt.readFileSync(e,"utf8"),{simpleKeys:!0})}a($n,"parseYamlDoc");function XQ(){let e=Qm(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=pt.isEmptyOrZeroLength(t)?[]:t;let r=WI(t);if(r)throw p_.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=pt.isEmptyOrZeroLength(s)?[]:s;let n=WI(s);if(n)throw p_.CONFIG_VALIDATION(n.message);if(!pt.isEmptyOrZeroLength(s)&&!pt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!pt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw p_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(XQ,"getClusteringRoutes");function ew(e){let t=zI(e);_t={};for(let r in ps){let s=t.get(r.toUpperCase());if(pt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=ps[r].toLowerCase();n===gr.LOGGING_ROOT?_t[n]=ms.dirname(s):_t[n]=s}return _t}a(ew,"initOldConfig");function jQ(e){let t=Qm();return PQ.get(t,e.replaceAll("_","."))}a(jQ,"getConfigFromFile");async function ZQ(e,t){let r=$n(Ui());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Xt.writeFile(Ui(),String(r))}a(ZQ,"addConfig");function ez(e){let t=Ui(pt.getPropsFilePath()),r=$n(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=ms.join(s,Rr.HDB_CONFIG_FILE);Xt.writeFileSync(n,String(r))}a(ez,"deleteConfigFromFile");function tz(){return T_||(Km(),T_)}a(tz,"getConfigObj")});var sw=T((Qce,rw)=>{"use strict";var g_=y(),R_=class{static{a(this,"BaseLicense")}constructor(t=0,r=g_.RAM_ALLOCATION_ENUM.DEFAULT,s=g_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},zm=class extends R_{static{a(this,"ExtendedLicense")}constructor(t=0,r=g_.RAM_ALLOCATION_ENUM.DEFAULT,s=g_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};rw.exports={BaseLicense:R_,ExtendedLicense:zm}});var Ac=T((Jce,uw)=>{"use strict";var Co=require("fs-extra"),nw=f_(),iw=require("crypto"),rz=require("moment"),sz=require("uuid").v4,Gt=G(),Xm=require("path"),nz=$(),Yn=y(),iz=sw().ExtendedLicense,wo="invalid license key format",oz="061183",az="mofi25",cz="aes-256-cbc",uz=16,lz=32,ow=X();ow.initSync();var Jm;uw.exports={validateLicense:aw,generateFingerPrint:dz,licenseSearch:cw,getLicense:hz};function jm(){return Xm.join(ow.getHdbBasePath(),Yn.LICENSE_KEY_DIR_NAME,Yn.LICENSE_FILE_NAME)}a(jm,"getLicenseDirPath");function _z(){let e=jm();return Xm.join(e,Yn.LICENSE_FILE_NAME)}a(_z,"getLicenseFilePath");function Zm(){let e=jm();return Xm.join(e,Yn.REG_KEY_FILE_NAME)}a(Zm,"getFingerPrintFilePath");async function dz(){let e=Zm();try{return await Co.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await fz();throw Gt.error(`Error writing fingerprint file to ${e}`),Gt.error(t),new Error("There was an error generating the fingerprint")}}a(dz,"generateFingerPrint");async function fz(){let e=sz(),t=nw.hash(e),r=Zm();try{await Co.mkdirp(jm()),await Co.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Gt.error(`Error writing fingerprint file to ${r}`),Gt.error(s),new Error("There was an error generating the fingerprint")}return t}a(fz,"writeFingerprint");function aw(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Yn.RAM_ALLOCATION_ENUM.DEFAULT,version:Yn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Gt.error("empty license key passed to validate."),r;let s=Zm(),n=!1;try{n=Co.statSync(s)}catch(i){Gt.error(i)}if(n){let i;try{i=Co.readFileSync(s,"utf8")}catch{Gt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(az),c=o[1];c=Buffer.concat([Buffer.from(c)],uz);let u=Buffer.concat([Buffer.from(i)],lz),_=iw.createDecipheriv(cz,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=Ez(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(wo),Gt.error(wo),new Error(wo)}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(wo),Gt.error(wo),new Error(wo)}else r.exp_date=l;r.exp_date<rz().valueOf()&&(r.valid_date=!1),nw.validate(o[1],`${oz}${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||Gt.error("Invalid licence"),r}a(aw,"validateLicense");function Ez(e,t){try{let r=iw.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Gt.warn("Check old license failed")}}a(Ez,"checkOldLicense");function cw(){let e=new iz,t=[];try{t=Co.readFileSync(_z(),"utf-8").split(Yn.NEW_LINE)}catch(r){r.code==="ENOENT"?Gt.info("no license file found"):Gt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(nz.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=aw(n.license_key,n.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(n){Gt.error("There was an error parsing the license string."),Gt.error(n),e.ram_allocation=Yn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Jm=e,e}a(cw,"licenseSearch");async function hz(){return Jm||await cw(),Jm}a(hz,"getLicense")});var kr=T((tue,bw)=>{"use strict";var fw="username is required",Ew="nothing to update, must supply active, role or password to update",hw="password cannot be an empty string",mw="If role is specified, it cannot be empty.",pw="active must be true or false";bw.exports={addUser:Nz,alterUser:bz,dropUser:Iz,getSuperUser:Dz,userInfo:wz,listUsers:O_,listUsersExternal:Cz,setUsersToGlobal:Do,findAndValidateUser:Ow,getClusterUser:Uz,USERNAME_REQUIRED:fw,ALTERUSER_NOTHING_TO_UPDATE:Ew,EMPTY_PASSWORD:hw,EMPTY_ROLE:mw,ACTIVE_BOOLEAN:pw};var Sw=xr(),mz=Li(),rp=f_(),Tw=HI(),gw=Gr(),sp=on(),Or=$(),Rw=require("validate.js"),de=G(),{promisify:pz}=require("util"),np=un(),lw=y(),_w=ke(),Sz=Ar(),jce=X(),Zce=Ac(),Tz=Si(),{table:eue}=(fe(),Z(Ce)),{handleHDBError:qs,hdb_errors:gz}=j(),{HTTP_STATUS_CODES:Fs,AUTHENTICATION_ERROR_MSGS:ep,HDB_ERROR_MSGS:Lo}=gz,{UserEventMsg:ip}=us(),tp=require("lodash"),{server:op}=(fr(),Z(di)),Rz=G();op.getUser=Ow;var Aw={username:!0,active:!0,role:!0,password:!0},dw=new Map,A_=gw.searchByValue,Az=gw.searchByHash,Oz=pz(mz.delete);async function Nz(e){let t=Rw.cleanAttributes(e,Aw),r=Tw.addUserValidation(t);if(r)throw qs(new Error,r.message,Fs.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await A_(s),n=n&&Array.from(n)}catch(u){throw de.error("There was an error searching for a role in add user"),de.error(u),u}if(!n||n.length<1)throw qs(new Error,Lo.ROLE_NAME_NOT_FOUND(t.role),Fs.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw qs(new Error,Lo.DUP_ROLES_FOUND(t.role),Fs.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=np.encrypt(t.password)),t.password=rp.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Sw.insert(i)}catch(u){throw de.error("There was an error searching for a user."),de.error(u),u}de.debug(o);try{await Do()}catch(u){throw de.error("Got an error setting users to global"),de.error(u),u}if(o.skipped_hashes.length===1)throw qs(new Error,Lo.USER_ALREADY_EXISTS(t.username),Fs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],sp.signalUserChange(new ip(process.pid)),`${c.username} successfully added`}a(Nz,"addUser");async function bz(e){let t=Rw.cleanAttributes(e,Aw);if(Or.isEmptyOrZeroLength(t.username))throw new Error(fw);if(Or.isEmptyOrZeroLength(t.password)&&Or.isEmptyOrZeroLength(t.role)&&Or.isEmptyOrZeroLength(t.active))throw new Error(Ew);if(!Or.isEmpty(t.password)&&Or.isEmptyOrZeroLength(t.password.trim()))throw new Error(hw);if(!Or.isEmpty(t.active)&&!Or.isBoolean(t.active))throw new Error(pw);let r=yz(t.username);if(!Or.isEmpty(t.password)&&!Or.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=np.encrypt(t.password)),t.password=rp.hash(t.password)),t.role==="")throw new Error(mw);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 A_(i)||[])}catch(c){throw de.error("Got an error searching for a role."),de.error(c),c}if(!o||o.length===0){let c=Lo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw de.error(c),qs(new Error,c,Fs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Lo.ALTER_USER_DUP_ROLES(t.role);throw de.error(c),qs(new Error,c,Fs.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await Sw.update(s)}catch(i){throw de.error("Error during update."),de.error(i),i}try{await Do()}catch(i){throw de.error("Got an error setting users to global"),de.error(i),i}return sp.signalUserChange(new ip(process.pid)),n}a(bz,"alterUser");function yz(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(yz,"isClusterUser");async function Iz(e){try{let t=Tw.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Or.isEmpty(global.hdb_users.get(e.username)))throw qs(new Error,Lo.USER_NOT_EXIST(e.username),Fs.NOT_FOUND,void 0,void 0,!0);let s;try{s=await Oz(r)}catch(n){throw de.error("Got an error deleting a user."),de.error(n),n}de.debug(s);try{await Do()}catch(n){throw de.error("Got an error setting users to global."),de.error(n),n}return sp.signalUserChange(new ip(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(Iz,"dropUser");async function wz(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=tp.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await Az(r)}catch(n){throw de.error("Got an error searching for a role."),de.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw de.error(r),r}return t}a(wz,"userInfo");async function Cz(){let e;try{e=await O_()}catch(t){throw de.error("Got an error listing users."),de.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(Cz,"listUsersExternal");async function O_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await A_(e)}catch(o){throw de.error("Got an error searching for roles."),de.error(o),o}let r={};for(let o of t)r[o.id]=tp.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await A_(s)}catch(o){throw de.error("Got an error searching for users."),de.error(o),o}let i=new Map;for(let o of n)o=tp.cloneDeep(o),o.role=r[o.role],Lz(o.role),i.set(o.username,o);return i}catch(e){throw de.error("got an error listing users"),de.error(e),Or.errorizeMessage(e)}return null}a(O_,"listUsers");function Lz(e){try{if(!e){de.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(Tz)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){de.error("Got an error trying to set system permissions."),de.error(t)}}a(Lz,"appendSystemTablesToRole");async function Do(){try{let e=await O_();global.hdb_users=e}catch(e){throw de.error(e),e}}a(Do,"setUsersToGlobal");async function Ow(e,t,r=!0){global.hdb_users||await Do();let s=global.hdb_users.get(e);if(!s)throw qs(new Error,ep.GENERIC_AUTH_FAIL,Fs.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw qs(new Error,ep.USER_INACTIVE,Fs.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(dw.get(t)===s.password)return n;if(rp.validate(s.password,t))dw.set(t,s.password);else throw qs(new Error,ep.GENERIC_AUTH_FAIL,Fs.UNAUTHORIZED,void 0,void 0,!0)}return n}a(Ow,"findAndValidateUser");async function Dz(){global.hdb_users||await Do();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(Dz,"getSuperUser");async function Uz(){let e=await O_(),t=Sz.getConfigFromFile(lw.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Or.isEmpty(r)&&r?.role?.role===lw.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=np.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+_w.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+_w.SERVER_SUFFIX.ADMIN,r}a(Uz,"getClusterUser");var Nw=[];op.invalidateUser=function(e){for(let t of Nw)try{t(e)}catch(r){Rz.error("Error invalidating user",r)}};op.onInvalidatedUser=function(e){Nw.push(e)}});var Nc=T((iue,Cw)=>{"use strict";var Mi=G(),Nr=y(),Mz=UO(),sue=xn(),nue=bi(),Pz=kr(),{validateEvent:yw}=us(),Oc=Es(),vz=require("process"),{resetDatabases:Bz}=(fe(),Z(Ce)),Hz={[Nr.ITC_EVENT_TYPES.SCHEMA]:qz,[Nr.ITC_EVENT_TYPES.USER]:ww};async function qz(e){let t=yw(e);if(t){Mi.error(t);return}Mi.trace("ITC schemaHandler received schema event:",e),await Mz(e.message),await Fz(e.message)}a(qz,"schemaHandler");async function Fz(e){try{Oc.resetReadTxn(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Oc.resetReadTxn(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Oc.resetReadTxn(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=Bz();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Mi.error(t)}}a(Fz,"syncSchemaMetadata");var Iw=[];async function ww(e){try{try{Oc.resetReadTxn(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Oc.resetReadTxn(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Mi.warn(r)}let t=yw(e);if(t){Mi.error(t);return}Mi.trace(`ITC userHandler ${Nr.HDB_ITC_CLIENT_PREFIX}${vz.pid} received user event:`,e),await Pz.setUsersToGlobal();for(let r of Iw)r()}catch(t){Mi.error(t)}}a(ww,"userHandler");ww.addListener=function(e){Iw.push(e)};Cw.exports=Hz});var us=T((_ue,Dw)=>{"use strict";var aue=G(),ap=$(),Gz=y(),{ITC_ERRORS:bc}=Er(),{parentPort:cue,threadId:xz,isMainThread:kz,workerData:uue}=require("worker_threads"),{onMessageFromWorkers:Vz,broadcast:lue,broadcastWithAcknowledgement:$z}=Je();Dw.exports={sendItcEvent:Yz,validateEvent:Lw,SchemaEventMsg:Kz,UserEventMsg:Wz};var N_;Vz(async(e,t)=>{N_=N_||Nc(),Lw(e),N_[e.type]&&await N_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Yz(e){return!kz&&e.message&&(e.message.originator=xz),$z(e)}a(Yz,"sendItcEvent");function Lw(e){if(typeof e!="object")return bc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||ap.isEmpty(e.type))return bc.MISSING_TYPE;if(!e.hasOwnProperty("message")||ap.isEmpty(e.message))return bc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||ap.isEmpty(e.message.originator))return bc.MISSING_ORIGIN;if(Gz.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return bc.INVALID_EVENT(e.type)}a(Lw,"validateEvent");function Kz(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(Kz,"SchemaEventMsg");function Wz(e){this.originator=e}a(Wz,"UserEventMsg")});var on=T((Eue,vw)=>{"use strict";var Uw=y(),fue=$(),b_=G(),Mw=EO(),Uo,{sendItcEvent:Pw}=us();function Qz(e){try{b_.trace("signalSchemaChange called with message:",e),Uo=Uo||Nc();let t=new Mw(Uw.ITC_EVENT_TYPES.SCHEMA,e);return Uo.schema(t),Pw(t)}catch(t){b_.error(t)}}a(Qz,"signalSchemaChange");function zz(e){try{b_.trace("signalUserChange called with message:",e),Uo=Uo||Nc();let t=new Mw(Uw.ITC_EVENT_TYPES.USER,e);return Uo.user(t),Pw(t)}catch(t){b_.error(t)}}a(zz,"signalUserChange");vw.exports={signalSchemaChange:Qz,signalUserChange:zz}});var Cc={};ve(Cc,{addAnalyticsListener:()=>wc,recordAction:()=>br,recordActionBinary:()=>Vr,setAnalyticsEnabled:()=>Jz});function Jz(e){Yw=e}function br(e,t,r,s,n){if(!Yw)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=w_.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:s,type:n},w_.set(i,o)}y_||Xz()}function Vr(e,t,r,s,n){br(!!e,t,r,s,n)}function wc(e){Qw.push(e)}function Xz(){y_=performance.now(),setTimeout(async()=>{let e=performance.now()-y_;y_=0;let t=[],r={time:Date.now(),period:e,threadId:Pi.threadId,metrics:t};for(let[n,i]of w_){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 zw){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 Jw()}let s=process.memoryUsage();t.push({metric:"memory",threadId:Pi.threadId,byThread:!0,...s});for(let n of Qw)n(t);w_=new Map,Pi.parentPort?Pi.parentPort.postMessage({type:Ww,report:r}):Zw({report:r})},Kw).unref()}async function jz(e,t=6e4){let r=lp(),s=Xw(),n;for(let h of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){n=h.value.time;break}if(Date.now()-t<n)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:n||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:R}=p;for(let b of S||[]){let{path:O,method:Y,type:Q,metric:F,count:w,total:K,distribution:B,threads:x,...te}=b;w||(w=1);let be=F+(O?"-"+O:"");Y!==void 0&&(be+="-"+Y),Q!==void 0&&(be+="-"+Q);let se=o.get(be);if(se){if(se.threads){let Pe=se.threads[R];if(Pe)se=Pe;else{se.threads[R]=Object.assign({},te);continue}}se.count||(se.count=1);let vt=se.count;for(let Pe in te){let Ot=te[Pe];typeof Ot=="number"&&(se[Pe]=(se[Pe]*vt+Ot*w)/(vt+w))}se.count+=w,K>=0&&(se.total+=K,se.ratio=se.total/se.count)}else se=Object.assign({period:t},b),delete se.distribution,o.set(be,se),se.byThread&&(se.threads=[],se.threads[R]=Object.assign({},te),u.push(se));if(B){B=B.map(Pe=>typeof Pe=="number"?{value:Pe,count:1}:Pe);let vt=c.get(be);vt?vt.push(...B):c.set(be,B)}}await Jw()}for(let h of u){let{path:p,method:S,type:R,metric:b,count:O,total:Y,distribution:Q,threads:F,...w}=h;F=F.filter(K=>K);for(let K in w){if(typeof h[K]!="number")continue;let B=0;for(let x of F){let te=x[K];typeof te=="number"&&(B+=te)}h[K]=B}h.count=F.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((Pe,Ot)=>Pe.value>Ot.value?1:-1);let R=S.count-1,b=[],O=0,Y=0,Q;for(let Pe of zw){let Ot=R*Pe;for(;O<Ot;)Q=p[Y++],O+=Q.count,Y===1&&O--;let ts=p[Y>1?Y-2:0];Q||(Q=p[0]),b.push(Q.value-(Q.value-ts.value)*(O-Ot)/Q.count)}let[F,w,K,B,x,te,be,se,vt]=b;Object.assign(S,{p1:F,p10:w,p25:K,median:B,p75:x,p90:te,p95:be,p99:se,p999:vt})}let l;for(let[h,p]of o)p.id=(0,I_.getNextMonotonicTime)(),p.time=_,s.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||s.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,I_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-Bw,active:E-Hw,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(S=>{S||s.primaryStore.put(h,p)})}Bw=f,Hw=E}async function qw(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function lp(){return Fw||(Fw=tt({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Xw(){return Gw||(Gw=tt({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function t2(){jw=!0;let e=(0,Ic.get)(up.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await jz(Kw,e),await qw(lp(),Zz),await qw(Xw(),e2)},Math.min(e/2,2147483647)).unref()}function Zw(e,t){let r=e.report;r.threadId=t?.threadId||Pi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(xw+=s.mean*s.count);r.totalBytesProcessed=xw,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(kw.get(t))}),kw.set(t,t.performance.eventLoopUtilization())),r.id=(0,I_.getNextMonotonicTime)(),lp().primaryStore.put(r.id,r),jw||t2(),r2&&(eC=n2(r))}async function n2(e){if(await eC,!Kn){let r=(0,yc.dirname)((0,$w.getLogFilePath)());try{Kn=await(0,cp.open)((0,yc.join)(r,"analytics.log"),"r+")}catch{Kn=await(0,cp.open)((0,yc.join)(r,"analytics.log"),"w+")}}let t=(await Kn.stat()).size;if(t>s2){let r=Buffer.alloc(t);await Kn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Kn.write(r,{position:0}),await Kn.truncate(r.length),t=r.length}await Kn.write(JSON.stringify(e)+`
6
+ `,t)}var Pi,Vw,$w,yc,cp,I_,Ic,up,w_,Yw,y_,Kw,Ww,Qw,zw,Bw,Hw,Jw,Zz,e2,Fw,Gw,jw,xw,kw,r2,eC,Kn,s2,_n=Te(()=>{Pi=require("worker_threads"),Vw=D(Je());fe();$w=D(G()),yc=require("path"),cp=require("fs/promises"),I_=D(hr()),Ic=D(X()),up=D(y());fr();(0,Ic.initSync)();w_=new Map,Yw=(0,Ic.get)(up.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(Jz,"setAnalyticsEnabled");a(br,"recordAction");ct.recordAnalytics=br;a(Vr,"recordActionBinary");y_=0,Kw=1e3,Ww="analytics-report",Qw=[];a(wc,"addAnalyticsListener");zw=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Xz,"sendAnalytics");a(jz,"aggregation");Bw=0,Hw=0,Jw=a(()=>new Promise(setImmediate),"rest");a(qw,"cleanup");Zz=36e5,e2=31536e6;a(lp,"getRawAnalyticsTable");a(Xw,"getAnalyticsTable");(0,Vw.setChildListenerByType)(Ww,Zw);a(t2,"startScheduledTasks");xw=0,kw=new Map,r2=!1;a(Zw,"recordAnalytics");s2=1e6;a(n2,"logAnalytics")});var hp={};ve(hp,{coerceType:()=>M_,makeTable:()=>B_,setServerUtilities:()=>f2,updateResource:()=>Mc});function B_(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,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=[]),_O(i,u);let S=KE(i,s,u),R=0,b,O,Y,Q={},F=Promise.resolve(),w,K,B;for(let W of p)(W.assignCreatedTime||W.name==="__createdtime__")&&(w=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(K=W),W.expiresAt&&(B=W),W.isPrimaryKey&&(Q=W);let x,te=[],be=[],se=1,vt=2,Pe={},Ot={},ts=864e5,RR,Ju,bH=10,yH=6;E&&NR();class at extends Nt{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=w;static updatedTimeProperty=K;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,A){A&&(this.sourceOptions=A,(A.expiration||A.eviction||A.scanInterval)&&this.setTTLExpiration(A)),A?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),O=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let C=a(I=>{let U=this.sources.slice(0,-1);if(U=U.filter(M=>M[I]&&(!M[I].reliesOnPrototype||M.prototype[I])),U.length>0)if(U.length===1){let M=U[0];return(V,z,oe)=>{if(V?.source!==M)return M[I](z,oe,V)}}else return(M,V,z)=>{let oe=[];for(let k of U){if(M?.source===k)break;oe.push(k[I](V,z,M))}return Promise.all(oe)}},"getApplyToIntermediateSource"),g=this.sources[this.sources.length-1],L=a(I=>{if(g[I]&&(!g[I].reliesOnPrototype||g.prototype[I]))return(U,M,V)=>{if(!U?.source)return g[I](M,V,U)}},"getApplyToCanonicalSource");return Pe={put:L("put"),delete:L("delete"),publish:L("publish")},Ot={put:C("put"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")},(async()=>{let I=!1,U=a(async(M,V)=>{let z=M.value,oe=M.table?$e[c][M.table]:at;if(c===Ss.SYSTEM_SCHEMA_NAME&&(M.table===Ss.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===Ss.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(I=!0),M.id===void 0&&(M.id=z[oe.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=m;let k=await oe.getResource(M.id,V,Lc);switch(M.type){case"put":return k._writeUpdate(z,Lc);case"delete":return k._writeDelete(Lc);case"publish":return k._writePublish(z,Lc);case"invalidate":return k.invalidate(Lc);default:Ve.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=m.subscribe;M&&h==null&&(h=!0);let V=m.subscribeOnThisThread?m.subscribeOnThisThread((0,vi.getWorkerIndex)()):(0,vi.getWorkerIndex)()===0,z=M&&V&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(z){let oe;for await(let k of z)try{if(!(k.type==="transaction"?k.writes[0]:k)){Ve.error("Bad subscription event",k);continue}if(k.source=m,oe)if(k.beginTxn)oe.resolve();else{U(k,oe);continue}if(k.type==="end_txn")continue;let Ne=Ge(k,()=>{if(k.type==="transaction"){let ne=[];for(let Bt of k.writes)try{ne.push(U(Bt,k))}catch($t){throw $t.message+=" writing "+JSON.stringify(Bt)+" of event "+JSON.stringify(k),$t}return Promise.all(ne)}else if(k.type==="define_schema"){let ne=this.attributes.slice(0),Bt;for(let $t of k.attributes)ne.find(_i=>_i.name===$t.name)||(ne.push($t),Bt=!0);Bt&&(tt({table:n,database:c,attributes:ne,origin:"cluster"}),vc.signalSchemaChange(new Bc.SchemaEventMsg(process.pid,Ss.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return k.beginTxn?(oe=k,U(k,k),new Promise(ne=>{oe.resolve=ne})):U(k,k)});I&&(await Ne,vc.signalUserChange(new Bc.UserEventMsg(process.pid))),k.onCommit&&(Ne?.then?Ne.then(k.onCommit):k.onCommit())}catch(Ee){Ve.error("error in subscription handler",Ee)}}}catch(M){Ve.error(M)}})(),this}static getResource(m,A,C){let g=super.getResource(m,A,C);if(m!=null){Oa(m);try{if(g.hasOwnProperty(ge))return g;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let L=!C?.async||i.cache?.get(m),I=Un(A),U=I.getReadTxn();if(U?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return AR(m,A,{transaction:U},L,M=>{if(M?Mc(g,M):g[ge]=null,A.onlyIfCached&&A.noCacheStore){if(!g.doesExist())throw new xs.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let V=_E(m,M,A,g);if(V)return I?.disregardReadTxn(),g[dp]=!0,Ep(V,z=>(Mc(g,z),g))}return g})}catch(L){throw L.message.includes("Unable to serialize object")&&(L.message+=": "+JSON.stringify(m)),L}}return g}ensureLoaded(){let m=_E(this[Ie],this[Gs],this[me]);if(m)return this[dp]=!0,Ep(m,A=>{this[Gs]=A,this[ge]=A.value,this[U_]=A.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,ts=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");ts=ts||(d+f)/4,dE()}static enableAuditing(m=!0){E=m,m&&NR(),at.audit=m}static coerceId(m){return m===""?null:M_(m,Q)}static async dropTable(){if(delete $e[c][n],c===o){for(let m of p)l.remove(at.tableName+"/"+m.name),r[m.name]?.drop();l.remove(at.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));vc.signalSchemaChange(new Bc.SchemaEventMsg(process.pid,Ss.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(m,A){if(m&&typeof m=="object"&&!Array.isArray(m)&&m.url===""){let C=this.getRecordCount();return{recordCount:C.recordCount,estimatedRecordRange:C.estimatedRange,records:"./",name:n,database:c,attributes:p}}return super.get(m,A)}get(m){if(typeof m=="string")return this.getProperty(m);if(this[os])return this.search(m);if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[me]?.returnNonexistent)return this}allowRead(m,A){let C=ju(m);if(C?.read){let g=C.attribute_permissions;if(g){A||(A={});let L=A.select;if(L){let I=fp(g,"read");A.select=L.filter(U=>I[U])}else A.select=g.filter(I=>I.read).map(I=>I.attribute_name);return A}else return!0}}allowUpdate(m,A){let C=ju(m);if(C?.update){let g=C.attribute_permissions;if(g){let L=fp(g,"update");for(let I in A)if(!L[I])return!1;for(let I of g){let U=I.attribute_name;!I.update&&!(U in A)&&(A[U]=this.getProperty(U))}}return!0}}allowCreate(m,A){if(this[os]){let C=ju(m);if(C?.insert){let g=C.attribute_permissions;if(g){let L=fp(g,"insert");for(let I in A)if(!L[I])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return ju(m)?.delete}update(m,A){if(!Un(this[me]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let g;if(typeof m=="object"&&m)if(A){Object.isFrozen(m)&&(m=Object.assign({},m));for(let L in this[ge])m[L]===void 0&&(m[L]=void 0);this[Ht]=m}else g=this[Ht],g&&(m=Object.assign(g,m)),this[Ht]=g=m;return this._writeUpdate(this),this}invalidate(m){let A=this[me],C=this[Ie];Oa(C),Un(this[me]).addWrite({key:C,store:i,invalidated:!0,entry:this[Gs],nodeName:this[me]?.nodeName,before:Pe.invalidate?.bind(this,A,C),beforeIntermediate:Ot.invalidate?.bind(this,A,C),commit:(L,I)=>{if(I?.version>L)return;let U=null;for(let M in r)U||(U={}),U[M]=this.getProperty(M);S(C,U,this[Gs],L,C_,E,this[me],0,"invalidate")}})}static evict(m,A,C){let g=this.Source,L;if(!((O||E)&&(!A||(L=i.getEntry(m),!L||!A)||L.version!==C))){if(O){if(i.hasLock(m,L.version))return;let I;for(let U in r)I||(I={}),I[U]=A[U];if(I){S(m,I,L,C,L_,null,null,0,null,!0);return}}if(i.ifVersion(C,()=>{Xu(m,A,null)}),E)S(m,null,L,C,L_,null,null,0,null,!0);else return i.remove(m,C)}}lock(){throw new Error("Not yet implemented")}static operation(m,A){return m.table||=n,m.schema||=c,aC.operation(m,A)}async put(m){this.update(m,!0)}_writeUpdate(m,A){let C=this[me],g=Un(C),L=this[Ie];Oa(L);let I=this[Gs];this[_p]=!0;let U={key:L,store:i,entry:I,nodeName:C?.nodeName,validate:M=>{if(!m[rC]||dl(m)){if(this.validate(m),C?.source?m=Fa(m):(t&&m[t]!==L&&(m[t]=L),K&&(m[K.name]=K.type==="Date"?new Date(M):K.type==="String"?new Date(M).toISOString():M),w&&(I?.value?m[w.name]=I?.value[w.name]:m[w.name]=w.type==="Date"?new Date(M):w.type==="String"?new Date(M).toISOString():M),m=Fa(m)),m[ge])throw new Error("Can not assign a record with a record property");this[ge]=m}else g.removeWrite(U)},before:Pe.put&&(()=>Pe.put(C,L,m)),beforeIntermediate:Ot.put&&(()=>Ot.put(C,L,m)),commit:(M,V,z)=>{z&&(C&&V?.version>(C.lastModified||0)&&(C.lastModified=V.version),Mc(this,V));let oe=V?.value;this[_p]=!1,Ve.trace("Checking timestamp for put",L,V?.version>M,V?.version,M),!(V?.version>M)&&(Xu(L,oe,m),S(L,m,V,M,0,E,C,C.expiresAt||(d?d+Date.now():0)))}};g.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[os]){for await(let A of this.search(m))(await at.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[ge]?this._writeDelete(m):!1}_writeDelete(m){let A=Un(this[me]),C=this[Ie];Oa(C);let g=this[me];return A.addWrite({key:C,store:i,resource:this,nodeName:g?.nodeName,before:Pe.delete?.bind(this,g,C),beforeIntermediate:Ot.delete?.bind(this,g,C),commit:(L,I,U)=>{let M=I?.value;U&&(g&&I?.version>(g.lastModified||0)&&(g.lastModified=I.version),Mc(this,I)),!(I?.version>L)&&(Xu(this[Ie],M),Ve.trace("Write delete entry",C,L),E||h?(S(C,null,this[Gs],L,0,E,this[me],0,"delete"),E||dE()):i.remove(this[Ie]))}}),!0}search(m){let A=Un(this[me]);if(!m)throw new Error("No query provided");let C=m.reverse===!0,g=m.conditions;g?g.length===void 0&&(g=Array.from(g)):g=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Ie]&&(g=[{attribute:null,comparator:"prefix",value:this[Ie]}].concat(g));for(let k of g){let Ee=k[0]??k.attribute,Ne=Ee==null?Q:p.find(ne=>ne.name==Ee);if(Ne)Ne.type&&(k[1]===void 0?k.value=L(k.value,Ne):k[1]=L(k[1],Ne));else if(Ee!=null)throw(0,xs.handleHDBError)(new Error,`${Ee} is not a defined attribute`,404)}function L(k,Ee){return Array.isArray(k)?k.map(Ne=>M_(Ne,Ee)):M_(k,Ee)}a(L,"coerceTypedValues"),g.length>1&&(g=(0,oC.sortBy)(g,k=>{if(k.estimated_count===void 0){let Ee=k.comparator||k.search_type;if(Ee===Uc.SEARCH_TYPES.EQUALS){let Ne=k[0]??k.attribute;if(Ne==null||Ne===t)k.estimated_count=1;else{let ne=r[Ne];k.estimated_count=ne?ne.getValuesCount(k[1]??k.value):1/0}}else Ee===Uc.SEARCH_TYPES.CONTAINS||Ee===Uc.SEARCH_TYPES.ENDS_WITH||Ee==="ne"?k.estimated_count=1/0:Ee===Uc.SEARCH_TYPES.STARTS_WITH||Ee==="prefix"?k.estimated_count=a2:k.estimated_count=o2}return k.estimated_count}));let I=A.getReadTxn();I.use();let U=m.select,M=g[0],V;if(!M)V=i.getRange(C?{end:!1,reverse:!0,transaction:I,lazy:U?.length<4}:{start:!1,transaction:I,lazy:U?.length<4}).map(({value:k})=>k?new Promise(Ee=>setImmediate(()=>Ee(k))):D_.SKIP);else{let k=PE(M,I,C,at,m.allowFullScan);if(!m.operator||m.operator.toLowerCase()==="and"){let Ee=g.slice(1).map(vE);V=oe(k,Ee)}else{for(let Ne=1;Ne<g.length;Ne++){let ne=g[Ne],Bt=PE(ne,I,C,at,m.allowFullScan);k=k.concat(Bt)}let Ee=new Set;k=k.filter(Ne=>Ee.has(Ne)?!1:(Ee.add(Ne),!0)),V=oe(k)}}(m.offset||m.limit!==void 0)&&(V=V.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0)),V.onDone=()=>{V.onDone=null,I.done()};let z=this[me];function oe(k,Ee){let Ne=Ee?.length,ne={transaction:I,lazy:Ne>0||U?.length<4,alwaysPrefetch:!0},Bt=m.ensureLoaded!==!1;function $t(_i,qe){if(Bt&&qe!==void 0){let _r=!z.onlyIfCached&&_E(qe,_i,z,this);if(_r)return _r.then(CH=>$t(CH))}let ys=_i?.value;if(!ys)return D_.SKIP;for(let _r=0;_r<Ne;_r++)if(!Ee[_r](ys))return D_.SKIP;return ys}return a($t,"processEntry"),k.map(_i=>AR(_i,z,ne,!1,$t))}return a(oe,"idsToRecords"),V}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||tt({table:n,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let A=uO(at,this[Ie]??null,function(I,U,M,V){try{let z=U.getValue?.(i);this.send({id:I,timestamp:M,value:z,version:U.version,type:U.type,beginTxn:V})}catch(z){Ve.error(z)}},m.startTime,this[os]);m.crossThreads===!1&&(A.crossThreads=!1),m.supportsTransactions&&(A.supportsTransactions=!0);let C=this[Ie],g=m.previousCount;g>1e3&&(g=1e3);let L=m.startTime;if(this[os]){if(L){if(g)throw new xs.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:I,value:U}of u.getRange({start:L,exclusiveStart:!0})){let M=mr(U,i);if(M.tableId!==s)continue;let V=M.recordId;(C==null||iC(C,V))&&A.send({id:V,timestamp:I,...M}),A.startTime=I}}else if(g){let I=[];for(let{key:U,value:M}of u.getRange({start:"z",end:!1,reverse:!0}))try{let V=mr(M);if(V.tableId!==s)continue;let z=V.recordId;if(C==null||iC(C,z)){let oe=V.getValue(i);if(I.push({id:z,timestamp:U,value:oe,version:V.version,type:V.type}),--g<=0)break}}catch(V){Ve.error("Error getting history entry",U,V)}for(let U=I.length;U>0;)A.send(I[--U]);I[0]&&(A.startTime=I[0].timestamp)}else if(!m.omitCurrent)for(let{key:I,value:U,version:M,localTime:V}of i.getRange({start:C??!1,end:C==null?void 0:[C,P_.MAXIMUM_KEY],versions:!0}))U&&A.send({id:I,version:M,timestamp:V,value:U})}else{g&&!L&&(L=0);let I=this[Gs]?.localTime;if(Ve.trace("Subscription from",L,"from",C),L<I){let U=[],M=I;do{let V=u.get(M);if(V){m.omitCurrent=!0;let z=mr(V),oe=z.getValue(i);U.push({id:C,value:oe,timestamp:M,...z}),M=z.previousLocalTime}else break;g&&g--}while(M>L&&g!==0);for(let V=U.length;V>0;)A.send(U[--V]);A.startTime=I}!m.omitCurrent&&this.doesExist()&&A.send({id:C,version:this[U_],timestamp:this[Gs]?.localTime,value:this})}return m.listener&&A.on("data",m.listener),A}doesExist(){return!!(this[ge]||this[_p])}async publish(m,A){this._writePublish(m,A)}_writePublish(m,A){let C=Un(this[me]),g=this[Ie]||null;Oa(g);let L=this[me];C.addWrite({key:g,store:i,entry:this[Gs],nodeName:L?.nodeName,validate:()=>{this.validate(m)},before:Pe.publish?.bind(this,L,g,m),beforeIntermediate:Ot.publish?.bind(this,L,g,m),commit:(I,U,M)=>{U===void 0&&h&&!E&&dE(),S(g,U?.value??null,U,U?.version||I,0,!0,L,U?.expiresAt,"message",!1,m)}})}validate(m){let A,C=a((g,L,I)=>{if(L.type&&g!=null)if(L.properties){typeof g!="object"&&(A||(A=[])).push(`Property ${I} must be an object${L.type?" ("+L.type+")":""}`);let U=L.properties;for(let M=0,V=U.length;M<V;M++){let z=U[M],oe=C(g[z.name],z,I+"."+z.name);oe&&(g[z.name]=oe)}}else switch(L.type){case"Int":(typeof g!="number"||g>>0!==g)&&(A||(A=[])).push(`Property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof g!="number"||!(Math.floor(g)===g&&Math.abs(g)<=9007199254740992))&&(A||(A=[])).push(`Property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof g!="number"&&(A||(A=[])).push(`Property ${I} must be a number`);break;case"ID":typeof g=="string"||g?.length>0&&g.every?.(U=>typeof U=="string")||(A||(A=[])).push(`Property ${I} must be a string, or an array of strings`);break;case"String":typeof g!="string"&&(A||(A=[])).push(`Property ${I} must be a string`);break;case"Boolean":typeof g!="boolean"&&(A||(A=[])).push(`Property ${I} must be a boolean`);break;case"Date":if(!(g instanceof Date)){if(typeof g=="string"||typeof g=="number")return new Date(g);(A||(A=[])).push(`Property ${I} must be a Date`)}break;case"Bytes":g instanceof Uint8Array||(A||(A=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(g)){if(L.elements)for(let U=0,M=g.length;U<M;U++){let V=g[U],z=C(V,L.elements,I+"[*]");z&&(g[U]=z)}}else(A||(A=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break}L.nullable===!1&&g==null&&(A||(A=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let g=0,L=p.length;g<L;g++){let I=p[g],U=C(m[I.name],I,I.name);U&&(m[I.name]=U)}if(A)throw new xs.ClientError(A.join(". "))}getUpdatedTime(){return this[U_]}wasLoadedFromSource(){return O?!!this[dp]:void 0}static async addAttributes(m){let A=p.slice(0);for(let C of m){if(!C.name)throw new xs.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new xs.ClientError("Attribute names cannot include backticks or forward slashes");A.push(C)}return tt({table:n,database:c,schemaDefined:_,attributes:A}),at.indexingOperation}static async removeAttributes(m){let A=p.filter(C=>!m.includes(C.name));return tt({table:n,database:c,schemaDefined:_,attributes:A}),at.indexingOperation}static getRecordCount(m){let A=i.getStats().entryCount,C=5e3,g=1e3,L;A>C&&!m?.exactCount&&(L=g);let I=0;for(let{value:U}of i.getRange({start:!0,lazy:!0,limit:L}))U!=null&&I++;if(L){let U=I;I=0;for(let{value:Bt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:L}))Bt!=null&&I++;let M=L*2,V=(I+U)/M,z=Math.pow((I-U+1)/L/2,2)+V*(1-V)/M,oe=Math.max(Math.sqrt(z)*A,1),k=Math.round(V*A),Ee=Math.max(k-1.96*oe,0),Ne=Math.min(k+1.96*oe,A),ne=Math.pow(10,Math.round(Math.log10(oe)));return ne>k&&(ne=ne/10),I=Math.round(k/ne)*ne,{recordCount:I,estimatedRange:[Math.round(Ee),Math.round(Ne)]}}return{recordCount:I}}static updatedAttributes(){El(this,this)}static async deleteHistory(m=0){let A;for(let{key:C,value:g}of u.getRange({start:0,end:m}))await Dc(),mr(g).tableId===s&&(A=u.remove(C));await A}static async*getHistory(m=0,A=1/0){for(let{key:C,value:g}of u.getRange({start:m,end:A})){await Dc();let L=mr(g);L.tableId===s&&(yield{id:L.recordId,localTime:C,version:L.version,type:L.type,value:L.getValue(i),user:L.user})}}static async getHistoryOfRecord(m){let A=[],C=i.getEntry(m);if(!C)return A;let g=C.localTime,L=0;do{await Dc();let I=u.get(g);if(I){let U=mr(I);A.push({id:U.recordId,localTime:g,version:U.version,type:U.type,value:U.getValue(i),user:U.user}),g=U.previousLocalTime}else break}while(L<1e3&&g);return A.reverse()}static cleanup(){x?.remove()}}at.updatedAttributes();let IH=at.prototype;return IH[rC]=!0,d&&at.setTTLExpiration(d/1e3),B&&wH(),at;function Xu(W,m,A){let C;for(let g in r){let L=r[g],I=L.isIndexing,U=A?.[g],M=m?.[g];if(U===M&&!I)continue;C=!0;let V=(0,Pc.getIndexedValues)(M);if(V){tC&&L.prefetch(V.map(z=>({key:z,value:W})),nC);for(let z=0,oe=V.length;z<oe;z++)L.remove(V[z],W)}if(V=(0,Pc.getIndexedValues)(U),V){tC&&L.prefetch(V.map(z=>({key:z,value:W})),nC);for(let z=0,oe=V.length;z<oe;z++)L.put(V[z],W)}}return C}a(Xu,"updateIndices");function Oa(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>sC)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,P_.writeKey)(W,_2,0)>sC)throw new Error("Primary key size is too large: "+W.length);return!0}a(Oa,"checkValidId");function AR(W,m,A,C,g){let L=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),A.transaction?.isDone)return g(null,W);let I=i.getEntry(W,A);return I&&m&&(I?.version>(m.lastModified||0)&&(m.lastModified=I.version),I?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=I.localTime)),g(I,W)},"whenPrefetched");return C?L():se>0?(se--,L()):new Promise((I,U)=>{se===0?(se--,i.prefetch([W],()=>{M(),V()})):(te.push(W),be.push(V),te.length>yH&&(se--,M()));function M(){if(te.length>0){let z=be;i.prefetch(te,()=>{se===-1?M():se++;for(let oe of z)oe()}),te=[],be=[],vt>2&&vt--}else se=vt,vt<bH&&vt++}a(M,"prefetch");function V(){try{I(L())}catch(z){U(z)}}a(V,"load")})}a(AR,"loadLocalRecord");function ju(W){if(!W)return;let m=W.role.permission;if(m.super_user)return d2;let A=m[c],C,g=A?.tables;if(g)return g[n];if(c==="data"&&(C=m[n])&&!C.tables)return C}a(ju,"getTablePermissions");function _E(W,m,A,C){if(O){let g;if(A.noCache?g=!0:(m?(!m.value||m.metadataFlags&(C_|L_)||m.expiresAt&&m.expiresAt<Date.now())&&(g=!0):g=!0,Vr(!g,"cache-hit",n)),g){let L=OR(W,m,A).then(I=>(I?.value?.[ge]&&Ve.error("Can not assign a record with a record property"),A&&(I?.version>(A.lastModified||0)&&(A.lastModified=I.version),A.lastRefreshed=Date.now()),I));if(A?.onlyIfCached||m?.value&&C?.allowStaleWhileRevalidate?.(m,W)){if(L.catch(I=>Ve.warn(I)),A?.onlyIfCached&&!C.doesExist())throw new xs.ServerError("Entry is not cached",504);return}else return L}}}a(_E,"ensureLoadedFromSource");function Un(W){let m=W?.transaction;if(m){if(!m.open)throw new Error("Can not use a transaction that is not open");if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let A=m.next;if(!A)return m=m.next=new hi,m.lmdbDb=i,m;m=A}while(!0)}else return new pl}a(Un,"txnForContext");async function OR(W,m,A){let C=m?.metadataFlags,g=m?.version,L,I;if(!i.attemptLock(W,g,()=>{clearTimeout(I);let z=i.getEntry(W);!z||!z.value||z.metadataFlags&(C_|L_)?L(OR(W,i.getEntry(W),A)):L(z)}))return new Promise(z=>{L=z,I=setTimeout(()=>{i.unlock(W,g)},l2)});let U=m?.value,M={requestContext:A,replacingRecord:U,replacingVersion:g,source:null,resourceCache:A?.resourceCache},V=A?.responseHeaders;return new Promise((z,oe)=>{let k;Ep(Ge(M,async Ee=>{let Ne=performance.now(),ne,Bt,$t;try{for(let _r of at.sources)if(_r.get&&(!_r.get.reliesOnPrototype||_r.prototype.get)&&(M.source=_r,ne=await _r.get(W,M),ne))break;$t=C&C_;let qe=M.lastModified||$t&&g;Bt=$t||qe>g||!U,qe||(qe=(0,Pc.getNextMonotonicTime)());let ys=performance.now()-Ne;if(br(ys,"cache-resolution",n),V&&V.append("Server-Timing",`cache-resolve;dur=${ys.toFixed(2)}`),Ee.timestamp=qe,d&&!M.expiresAt&&(M.expiresAt=Date.now()+d),ne){if(typeof ne!="object")throw new Error("Only objects can be cached and stored in tables");typeof ne.toJSON=="function"&&(ne=ne.toJSON()),t&&ne[t]!==W&&(ne[t]=W)}k=!0,z({version:qe,value:ne})}catch(qe){qe.message+=` while resolving record ${W} for ${n}`,U&&((qe.code==="ECONNRESET"||qe.code==="ECONNREFUSED"||qe.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(qe.statusCode===500||qe.statusCode===502||qe.statusCode===503||qe.statusCode===504))?(z({version:g,value:U}),Ve.trace(qe.message,"(returned stale record)")):oe(qe),M.transaction.abort();return}if(A?.noCacheStore){M.transaction.abort();return}Un(M).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:(qe,ys)=>{if(ys?.version!==g)return;let _r=Xu(W,U,ne);ne?(Ot.put?.(M,W,ne),S(W,ne,ys,qe,0,E&&Bt||null,M,M.expiresAt,"put",!!$t)):(Ot.delete?.(M,W),E||h?S(W,null,ys,qe,0,E&&Bt||null,M,0,"delete",!!$t):i.remove(W,g))}})}),()=>{i.unlock(W,g)},Ee=>{i.unlock(W,g),k&&Ve.error("Error committing cache update",Ee)})})}a(OR,"getFromSource");function dE(){if(ts!==RR&&(RR=ts,(0,vi.getWorkerIndex)()===(0,vi.getWorkerCount)()-1)){if(Ju&&clearTimeout(Ju),!ts)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let m=Math.ceil((Date.now()-W.getTime())/ts)*ts+W.getTime(),A=a(C=>{Ve.trace(`Scheduled next cleanup scan at ${new Date(C)}ms`),Ju=setTimeout(()=>F=F.then(async()=>{if(A(Math.max(C+ts,Date.now())),i.rootStore.status!=="open"){clearTimeout(Ju);return}Ve.trace(`Starting cleanup scan for ${n}`);try{let g=0;for(let{key:L,value:I,version:U,expiresAt:M}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0}))I===null&&!E&&U+u2<Date.now()?i.remove(L,U):M&&M+f<Date.now()&&(at.evict(L,I,U),g++),await Dc();Ve.trace(`Finished cleanup scan for ${n}, evicted ${g} entries`)}catch(g){Ve.trace(`Error in cleanup scan for ${n}:`,g)}}),Math.min(C-Date.now(),2147483647)).unref()},"startNextTimer");A(m)}}a(dE,"scheduleCleanup");function NR(){x=u?.addDeleteRemovalCallback(s,W=>{let m=i.getEntry(W);m?.value===null&&i.remove(W,m.version)})}a(NR,"addDeleteRemoval");function wH(){(0,vi.getWorkerIndex)()===0&&setInterval(async()=>{try{let W=B.name,m=r[W];if(!m)throw new Error(`expiresAt attribute ${B} must be indexed`);for(let{value:A}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let C=i.getEntry(A);C?.value?.[W]<Date.now()&&at.evict(A,C.value,C.version),await Dc()}}catch(W){Ve.error("Error in evicting old records",W)}},c2).unref()}a(wH,"runRecordExpirationEviction")}function fp(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function nC(){}function f2(e){aC=e}function M_(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!E2.test(e)&&(e+="Z"),new Date(e)):r?e:(0,v_.autoCast)(e)}function iC(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 s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function Ep(e,t,r){return e?.then?e.then(t,r):t(e)}function Mc(e,t){e[Gs]=t,e[ge]=t?.value??null,e[U_]=t?.version}var Ss,D_,Pc,oC,Uc,Hc,xs,vc,Bc,Ve,P_,vi,v_,i2,aC,o2,a2,c2,u2,tC,l2,U_,rC,Gs,_p,dp,Lc,C_,L_,_2,sC,d2,Fue,E2,Dc,H_=Te(()=>{Ss=D(y()),D_=require("lmdb"),Pc=D(hr()),oC=require("lodash");is();UE();Uc=D(ze()),Hc=D(X());dO();xs=D(j()),vc=D(on()),Bc=D(us());fe();Tl();Ve=D(G());ml();mi();P_=require("ordered-binary"),vi=D(Je());uo();v_=D($());Va();_n();i2=new Uint8Array(9);i2[8]=192;o2=1e8,a2=1e7,c2=6e4,u2=864e5;Hc.initSync();tC=Hc.get(Ss.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),l2=1e4,U_=Symbol.for("version"),rC=Symbol.for("incremental-update"),Gs=Symbol("entry"),_p=Symbol("is-saving"),dp=Symbol("loaded-from-source"),Lc={isNotification:!0,ensureLoaded:!1},C_=1,L_=8,_2=Buffer.allocUnsafeSlow(8192),sC=1978,d2={read:!0,insert:!0,update:!0,delete:!0},Fue=(0,v_.convertToMS)(Hc.get(Ss.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(B_,"makeTable");a(fp,"attributesAsObject");a(nC,"noop");a(f2,"setServerUtilities");E2=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(M_,"coerceType");a(iC,"isDescendantId");Dc=a(()=>new Promise(setImmediate),"rest");a(Ep,"when");a(Mc,"updateResource")});var Ce={};ve(Ce,{database:()=>mc,databases:()=>$e,dropDatabase:()=>Am,dropTableMeta:()=>g2,getDatabases:()=>_s,getTables:()=>h2,onUpdatedTable:()=>gp,readMetaDb:()=>qc,resetDatabases:()=>m2,table:()=>tt,tables:()=>Ir});function h2(){return k_||_s(),Ir||{}}function _s(){if(k_)return $e;k_=!0,vo=new Map;let e=(0,xt.getHdbBasePath)()&&(0,Fe.join)((0,xt.getHdbBasePath)(),wr.DATABASES_DIR_NAME),t=(0,xt.get)(wr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,xt.get)(wr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,yr.existsSync)(e)?e:(0,Fe.join)((0,xt.getHdbBasePath)(),wr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,yr.existsSync)(e))for(let r of(0,yr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Fe.basename)(r.name,".mdb");r.isFile()&&(0,Fe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&qc((0,Fe.join)(e,r.name),null,s)}if((0,yr.existsSync)((0,Po.getBaseSchemaPath)())){for(let r of(0,yr.readdirSync)((0,Po.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Fe.join)((0,Po.getBaseSchemaPath)(),r.name),n=(0,Fe.join)((0,Po.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,yr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Fe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Fe.join)(n,i.name);qc((0,Fe.join)(s,i.name),(0,Fe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,yr.existsSync)(n))for(let o of(0,yr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Fe.extname)(o.name).toLowerCase()===".mdb"&&qc((0,Fe.join)(n,o.name),(0,Fe.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Fe.join)(c.path,(0,Fe.basename)(o+".mdb"));(0,yr.existsSync)(u)&&qc(u,o,r,null,!0)}}for(let r in $e){let s=vo.get(r);if(s){let n=$e[r];r.includes("delete")&&$r.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||($r.trace(`delete table class ${i}`),delete n[i])}else if(delete $e[r],r==="data"){for(let n in Ir)delete Ir[n];delete Ir[V_]}}return vo=null,$e}}function m2(){k_=!1;for(let[,e]of Wn)e.needsDeletion=!0;_s();for(let[e,t]of Wn)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Wn.delete(e));return $e}function qc(e,t,r=Sp,s,n){let i=new mp.default(e,!1);try{let o=Wn.get(e);o?o.needsDeletion=!1:(o=(0,F_.open)(i),Wn.set(e,o));let c=new Bi.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(q_.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,yr.existsSync)(s)&&(i.path=s,_=(0,F_.open)(i),_.isLegacy=!0):_=wl(o));let l=_C(r),d=l[V_],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 R=f.get(p);R||f.set(p,R={attributes:[]}),(S==null||h.is_hash_attribute)&&(R.primary=h),S!=null&&R.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 x of p)if(x.is_hash_attribute||x.isPrimaryKey){S=x;break}if(!S){$r.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let R=l[E],b={},O=[],Y,Q,F=typeof S.audit=="boolean"?S.audit:(0,xt.get)(wr.CONFIG_PARAMS.LOGGING_AUDITLOG),w=S.trackDeletes,K=S.expiration,B=S.eviction;if(R)b=R.indices,O=R.attributes,R.schemaVersion++;else{Y=S.tableId,Y?Y>=(u.get(Mo)||0)&&u.putSync(Mo,Y+1):(S.tableId=Y=u.get(Mo),Y||(Y=1),u.putSync(Mo,Y+1),u.putSync(S.key,S));let x=new Bi.default(!S.is_hash_attribute,S.is_hash_attribute);Q=yl(o.openDB(S.key,x)),Q.rootStore=o,Q.tableId=Y}for(let x of p){x.attribute=x.name;try{if(!x.is_hash_attribute&&(x.indexed||x.attribute&&!x.name)){if(!b[x.name]){let be=new Bi.default(!x.is_hash_attribute,x.is_hash_attribute);b[x.name]=o.openDB(x.key,be)}let te=O.find(be=>be.name===x.name);te?O.splice(O.indexOf(te),1,x):O.push(x)}}catch(te){$r.error("Error trying to update attribute",x,O,b,te)}}if(!R){R=dC(l,E,B_({primaryStore:Q,auditStore:_,audit:F,expirationMS:K&&K*1e3,evictionMS:B&&B*1e3,trackDeletes:w,tableName:E,tableId:Y,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:b,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),R.schemaVersion=1;for(let x of Tp)x(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function _C(e){let t=$e[e];if(t||(e==="data"?t=$e[e]=Ir:e==="system"?Object.defineProperty($e,"system",{value:t=Object.create(null),configurable:!0}):t=$e[e]=Object.create(null)),vo&&!vo.has(e)){let r=new Set;t[V_]=r,vo.set(e,r)}return t}function dC(e,t,r){return e[t]=r,r}function mc({database:e,table:t}){e||(e=Sp),_s();let r=_C(e),s=(0,Fe.join)((0,xt.getHdbBasePath)(),wr.DATABASES_DIR_NAME),n=(0,xt.get)(wr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,xt.get)(wr.CONFIG_PARAMS.STORAGE_PATH)||((0,yr.existsSync)(s)?s:(0,Fe.join)((0,xt.getHdbBasePath)(),wr.LEGACY_DATABASES_DIR_NAME));let o=(0,Fe.join)(s,(i?t:e)+".mdb"),c=Wn.get(o);if(!c){let u=new mp.default(o,!1);c=(0,F_.open)(u),Wn.set(o,c)}return c}async function Am(e){if(!$e[e])throw new Error("Schema does not exist");let t=$e[e];for(let r in t){let n=t[r].primaryStore.rootStore;Wn.delete(n.path),n.status==="open"&&(await n.close(),await cC.remove(n.path))}if(e==="data"){for(let r in Ir)delete Ir[r];delete Ir[V_]}delete $e[e]}function tt({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=Sp);let l=mc({database:t,table:e}),d=$e[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 R=new Bi.default(!1);for(let w of i)w.attribute?(w.name=w.attribute,w.indexed=!0):w.attribute=w.name,w.expiresAt&&(w.indexed=!0);let b,O;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 w=l.auditStore;w||(w=wl(l)),h=i.find(te=>te.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,xt.get)(wr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),$r.trace(`${e} table loading, opening primary store`);let K=new Bi.default(!1,!0),B=e+"/",x=yl(l.openDB(B,K));x.rootStore=l,S=l.dbisDb=l.openDB(q_.INTERNAL_DBIS_NAME,R),x.tableId=S.get(Mo),x.tableId||(x.tableId=1),S.putSync(Mo,x.tableId+1),h.tableId=x.tableId,f=dC(d,e,B_({primaryStore:x,auditStore:w,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:E,tableName:e,tableId:x.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,b=!0,F(),S.put(B,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(q_.INTERNAL_DBIS_NAME,R)),f.dbisDB=S;let Y=[];for(let{key:w,value:K}of S.getRange({start:!0})){let[B,x]=w.toString().split("/");if(x===""&&(x=K.name),x){if(B!==e)continue}else x=B;if(!i.find(be=>be.name===x)?.indexed&&K.indexed&&!K.isPrimaryKey){F(),b=!0,S.remove(w);let be=f.indices[B];be&&Y.push(be)}}let Q=[];try{for(let w of i||[]){let K=e+"/"+(w.name||"");Object.defineProperty(w,"key",{value:K,configurable:!0});let B=S.get(K);if(w.isPrimaryKey){if(B=B||S.get(K=e+"/")||{},o!==f.audit||(+r||void 0)!==(+B.expiration||void 0)||(+s||void 0)!==(+B.eviction||void 0)){let te=Object.assign({},B);typeof o=="boolean"&&(o&&f.enableAuditing(o),te.audit=o),r&&(te.expiration=+r),s&&(te.eviction=+s),b=!0,F(),S.put(K,te)}continue}B?.attribute&&!B.name&&(B.indexed=!0);let x=!B||B.type!==w.type||B.indexed!==w.indexed||JSON.stringify(B.attributes)!==JSON.stringify(w.attributes)||JSON.stringify(B.elements)!==JSON.stringify(w.elements);if(w.indexed){let te=new Bi.default(!0,!1),be=l.openDB(K,te);(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<Fc.workerData?.restartNumber)&&(b=!0,F(),B=S.get(K),(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<Fc.workerData?.restartNumber)&&(b=!0,w.lastIndexedKey=B?.lastIndexedKey||!1,w.indexingPID=process.pid,be.isIndexing=!0,Object.defineProperty(w,"dbi",{value:be}),Q.push(w)),S.put(K,w)),p[w.name]=be}else x&&(b=!0,F(),S.put(K,w))}}finally{O&&O()}if(b&&(f.schemaVersion++,f.updatedAttributes()),$r.trace(`${e} table loading, running index`),Q.length>0||Y.length>0?f.indexingOperation=T2(f,Q,Y):b&&G_.signalSchemaChange(new x_.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,b)for(let w of Tp)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),$r.trace(`${e} table loaded`),f;function F(){O||l.transactionSync(()=>({then(w){O=w}}))}a(F,"startTxn")}async function T2(e,t,r){try{let s=e.schemaVersion;await G_.signalSchemaChange(new x_.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=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++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,uC.getIndexedValues)(l[h]);if(p)for(let S=0,R=p.length;S<R;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,$r.error(f)}),Fc.workerData&&Fc.workerData.restartNumber!==lC.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>p2?await n:u>S2&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await G_.signalSchemaChange(new x_.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){$r.error("Error in indexing",s)}}function g2({table:e,database:t}){let r=mc({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function gp(e){Tp.push(e)}var xt,q_,F_,Fe,yr,Po,Bi,mp,wr,cC,pp,uC,G_,x_,Fc,$r,lC,Sp,V_,Ir,$e,Mo,Tp,k_,Wn,vo,p2,S2,fe=Te(()=>{xt=D(X()),q_=D(ze()),F_=require("lmdb"),Fe=require("path"),yr=require("fs"),Po=D(Be());H_();Bi=D(Cl()),mp=D(Dl()),wr=D(y()),cC=D(require("fs-extra")),pp=require("../index"),uC=D(hr()),G_=D(on()),x_=D(us()),Fc=require("worker_threads"),$r=D(G()),lC=D(Je());uo();Va();Sp="data",V_=Symbol("defined-tables");(0,xt.initSync)();Ir=Object.create(null),$e=Object.create(null);(0,pp._assignPackageExport)("databases",$e);(0,pp._assignPackageExport)("tables",Ir);Mo=Symbol.for("next-table-id"),Tp=[],Wn=new Map;a(h2,"getTables");a(_s,"getDatabases");a(m2,"resetDatabases");a(qc,"readMetaDb");a(_C,"ensureDB");a(dC,"setTable");a(mc,"database");a(Am,"dropDatabase");a(tt,"table");p2=1e3,S2=10;a(T2,"runIndexing");a(g2,"dropTableMeta");a(gp,"onUpdatedTable")});var $=T((Que,yC)=>{"use strict";var Qn=require("path"),pC=require("fs-extra"),jt=G(),fC=require("fs-extra"),$_=require("os"),R2=require("net"),A2=require("recursive-iterator"),Ye=y(),O2=sA(),EC=require("papaparse"),Y_=require("moment"),{inspect:N2}=require("util"),hC=require("is-number"),Wue=require("lodash"),b2=require("minimist"),y2=require("https"),I2=require("http"),{hdb_errors:K_}=j(),w2=/^((\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)))$/,SC=require("util").promisify(setTimeout),C2=100,L2=5,D2="",U2=4,mC={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};yC.exports={isEmpty:Cr,isEmptyOrZeroLength:ks,arrayHasEmptyValues:v2,arrayHasEmptyOrZeroLengthValues:B2,buildFolderPath:H2,isBoolean:TC,errorizeMessage:M2,stripFileExtension:F2,autoCast:G2,autoCastJSON:gC,autoCastJSONDeep:Ap,removeDir:x2,compareVersions:k2,isCompatibleDataVersion:V2,escapeRawValue:$2,unescapeValue:Y2,stringifyProps:K2,timeoutPromise:Q2,isClusterOperation:J2,getClusterUser:j2,checkGlobalSchemaTable:X2,getHomeDir:AC,getPropsFilePath:W2,promisifyPapaParse:Z2,removeBOM:OC,createEventPromise:eJ,checkProcessRunning:tJ,checkSchemaTableExist:rJ,checkSchemaExists:NC,checkTableExists:bC,getStartOfTomorrowInSeconds:sJ,getLimitKey:nJ,isObject:q2,isNotEmptyAndHasValue:P2,autoCasterIsNumberCheck:RC,backtickASTSchemaItems:iJ,isPortTaken:z2,createForkArgs:oJ,autoCastBoolean:aJ,async_set_timeout:SC,getTableHashAttribute:cJ,doesSchemaExist:uJ,doesTableExist:lJ,stringifyObj:_J,ms_to_time:dJ,changeExtension:fJ,getEnvCliRootPath:Op,noBootFile:EJ,httpRequest:hJ,transformReq:mJ,convertToMS:pJ,PACKAGE_ROOT:Ye.PACKAGE_ROOT};function M2(e){return e instanceof Error?e:new Error(e)}a(M2,"errorizeMessage");function Cr(e){return e==null}a(Cr,"isEmpty");function P2(e){return!Cr(e)&&(e||e===0||e===""||TC(e))}a(P2,"isNotEmptyAndHasValue");function ks(e){return Cr(e)||e.length===0||e.size===0}a(ks,"isEmptyOrZeroLength");function v2(e){if(Cr(e))return!0;for(let t=0;t<e.length;t++)if(Cr(e[t]))return!0;return!1}a(v2,"arrayHasEmptyValues");function B2(e){if(ks(e))return!0;for(let t=0;t<e.length;t++)if(ks(e[t]))return!0;return!1}a(B2,"arrayHasEmptyOrZeroLengthValues");function H2(...e){try{return e.join(Qn.sep)}catch{console.error(e)}}a(H2,"buildFolderPath");function TC(e){return Cr(e)?!1:e===!0||e===!1}a(TC,"isBoolean");function q2(e){return Cr(e)?!1:typeof e=="object"}a(q2,"isObject");function F2(e){return ks(e)?D2:e.slice(0,-U2)}a(F2,"stripFileExtension");function G2(e){return Cr(e)||e===""||typeof e!="string"?e:mC[e]!==void 0?mC[e]:RC(e)===!0?Number(e):w2.test(e)?new Date(e):e}a(G2,"autoCast");function gC(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(gC,"autoCastJSON");function Ap(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=Ap(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=Ap(r);s!==r&&(e[t]=s)}return e}else return gC(e)}a(Ap,"autoCastJSONDeep");function RC(e){if(e.startsWith("0.")&&hC(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&hC(e))}a(RC,"autoCasterIsNumberCheck");async function x2(e){if(ks(e))throw new Error(`Directory path: ${e} does not exist`);try{await fC.emptyDir(e),await fC.remove(e)}catch(t){throw jt.error(`Error removing files in ${e} -- ${t}`),t}}a(x2,"removeDir");function k2(e,t){if(ks(e)){jt.info("Invalid current version sent as parameter.");return}if(ks(t)){jt.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").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(k2,"compareVersions");function V2(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(V2,"isCompatibleDataVersion");function $2(e){if(Cr(e))return e;let t=String(e);return t==="."?Ye.UNICODE_PERIOD:t===".."?Ye.UNICODE_PERIOD+Ye.UNICODE_PERIOD:t.replace(Ye.FORWARD_SLASH_REGEX,Ye.UNICODE_FORWARD_SLASH)}a($2,"escapeRawValue");function Y2(e){if(Cr(e))return e;let t=String(e);return t===Ye.UNICODE_PERIOD?".":t===Ye.UNICODE_PERIOD+Ye.UNICODE_PERIOD?"..":String(e).replace(Ye.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Y2,"unescapeValue");function K2(e,t){if(Cr(e))return jt.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+$_.EOL}!ks(s)&&s[0]===";"?r+=" "+s+n+$_.EOL:ks(s)||(r+=s+"="+n+$_.EOL)}catch{jt.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(K2,"stringifyProps");function AC(){let e;try{e=$_.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(AC,"getHomeDir");function W2(){let e=Qn.join(AC(),Ye.HDB_HOME_DIR_NAME,Ye.BOOT_PROPS_FILE_NAME);return pC.existsSync(e)||(e=Qn.join(__dirname,"../","hdb_boot_properties.file")),e}a(W2,"getPropsFilePath");function Q2(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Q2,"timeoutPromise");async function z2(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=R2.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(z2,"isPortTaken");function J2(e){try{return Ye.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){jt.error(`Error checking operation against cluster ops ${t}`)}return!1}a(J2,"isClusterOperation");function X2(e,t){let r=(fe(),Z(Ce)).getDatabases();if(!r[e])return K_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return K_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(X2,"checkGlobalSchemaTable");function j2(e,t){if(Cr(t)){jt.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Cr(e)||ks(e)){jt.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){jt.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){jt.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(j2,"getClusterUser");function Z2(){EC.parsePromise=function(e,t,r){return new Promise(function(s,n){EC.parse(e,{header:!0,transformHeader:OC,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Z2,"promisifyPapaParse");function OC(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(OC,"removeBOM");function eJ(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;jt.info(`Got cluster status event response: ${N2(n)}`);try{i.cancel()}catch{jt.error("Error trying to cancel timeout.")}s(n)})})}a(eJ,"createEventPromise");async function tJ(e){let t=!0,r=0;do await SC(C2*r++),(await O2.findPs(e)).length>0&&(t=!1);while(t&&r<L2);if(t)throw new Error(`process ${e} was not started`)}a(tJ,"checkProcessRunning");function rJ(e,t){let r=NC(e);if(r)return r;let s=bC(e,t);if(s)return s}a(rJ,"checkSchemaTableExist");function NC(e){let{getDatabases:t}=(fe(),Z(Ce));if(!t()[e])return K_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(NC,"checkSchemaExists");function bC(e,t){let{getDatabases:r}=(fe(),Z(Ce));if(!r()[e][t])return K_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(bC,"checkTableExists");function sJ(){let e=Y_().utc().add(1,Ye.MOMENT_DAYS_TAG).startOf(Ye.MOMENT_DAYS_TAG).unix(),t=Y_().utc().unix();return e-t}a(sJ,"getStartOfTomorrowInSeconds");function nJ(){return Y_().utc().format("DD-MM-YYYY")}a(nJ,"getLimitKey");function iJ(e){try{let t=new A2(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){jt.error("Got an error back ticking items."),jt.error(t)}}a(iJ,"backtickASTSchemaItems");function oJ(e){return[e]}a(oJ,"createForkArgs");function aJ(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(aJ,"autoCastBoolean");function cJ(e,t){let{getDatabases:r}=(fe(),Z(Ce)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(cJ,"getTableHashAttribute");function uJ(e){let{getDatabases:t}=(fe(),Z(Ce));return t()[e]!==void 0}a(uJ,"doesSchemaExist");function lJ(e,t){let{getDatabases:r}=(fe(),Z(Ce));return r()[e]?.[t]!==void 0}a(lJ,"doesTableExist");function _J(e){try{return JSON.stringify(e)}catch{return e}}a(_J,"stringifyObj");function dJ(e){let t=Y_.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(dJ,"ms_to_time");function fJ(e,t){let r=Qn.basename(e,Qn.extname(e));return Qn.join(Qn.dirname(e),r+t)}a(fJ,"changeExtension");function Op(){if(process.env[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=b2(process.argv);if(e[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(Op,"getEnvCliRootPath");var Rp;function EJ(){if(Rp)return Rp;let e=Op();Op()&&pC.pathExistsSync(Qn.join(e,Ye.HDB_CONFIG_FILE))&&(Rp=!0)}a(EJ,"noBootFile");function hJ(e,t){let r;return e.protocol==="http:"?r=I2:r=y2,new Promise((s,n)=>{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",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(hJ,"httpRequest");function mJ(e){if(!e.schema&&!e.database){e.schema=Ye.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(mJ,"transformReq");function pJ(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(pJ,"convertToMS")});var X=T((Jue,CC)=>{"use strict";var Np=require("fs-extra"),Ts=require("path"),IC=require("os"),SJ=require("properties-reader"),Gc=G(),Hi=$(),ee=y(),W_=Ar(),TJ="Error initializing environment manager",Q_="BOOT_PROPS_FILE_PATH",wC=!1,gJ={[ee.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},dn={};CC.exports={BOOT_PROPS_FILE_PATH:Q_,getHdbBasePath:RJ,setHdbBasePath:AJ,get:OJ,initSync:bJ,setProperty:he,initTestEnvironment:yJ};function RJ(){return dn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(RJ,"getHdbBasePath");function AJ(e){dn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(AJ,"setHdbBasePath");function OJ(e){let t=W_.getConfigValue(e);return t===void 0?dn[e]:t}a(OJ,"get");function he(e,t){gJ[e]&&(dn[e]=t),W_.updateConfigObject(e,t)}a(he,"setProperty");function NJ(){let e;try{e=Hi.getPropsFilePath(),Np.accessSync(e,Np.constants.F_OK|Np.constants.R_OK),wC=!0;let t=SJ(e);return dn[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),dn[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),dn[Q_]=e,!0}catch{return Gc.trace(`Environment manager found no properties file at ${e}`),!1}}a(NJ,"doesPropFileExist");function bJ(e=!1){try{(wC||NJ()||Hi.noBootFile())&&(W_.initConfig(e),dn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=W_.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Gc.error(TJ),Gc.error(t),console.error(t),process.exit(1)}}a(bJ,"initSync");function yJ(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Ts.join(__dirname,"../../","unitTests");dn[Q_]=Ts.join(u,"hdb_boot_properties.file"),he(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ts.join(u,"settings.test")),he(ee.HDB_SETTINGS_NAMES.INSTALL_USER,IC.userInfo()?IC.userInfo().username:void 0),he(ee.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Ts.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.HDB_SETTINGS_NAMES.CERT_KEY,Ts.join(u,"envDir","utility","keys","certificate.pem")),he(ee.CONFIG_PARAMS.TLS_PRIVATEKEY,Ts.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.CONFIG_PARAMS.TLS_CERTIFICATE,Ts.join(u,"envDir","utility","keys","certificate.pem")),he(ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),he(ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ts.join(u,"envDir","log")),he(ee.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),he(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ts.join(u,"envDir")),he(ee.CONFIG_PARAMS.STORAGE_PATH,Ts.join(u,"envDir")),he(ee.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Hi.isEmpty(n)?!0:n),he(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Hi.isEmpty(n)?!0:n),he(ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),he(ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Hi.isEmpty(i)?!1:i),he(ee.CONFIG_PARAMS.HTTP_CORS,Hi.isEmpty(i)?!1:i),he(ee.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),he(ee.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ts.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),he(ee.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Hi.isEmpty(c)?!1:c),o&&(he("CORS_ACCESSLIST",o),he(ee.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(he(ee.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),he(ee.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(he(ee.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),he(ee.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(he(ee.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),he(ee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Q_}. Please check your boot props and settings files`;Gc.fatal(r),Gc.error(t)}}a(yJ,"initTestEnvironment")});var yp={};ve(yp,{loadGQLSchema:()=>CJ,start:()=>bp,startOnMainThread:()=>wJ});function bp({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let Q=function(F){if(F.kind==="NonNullType"){let B=Q(F.type);return B.nullable=!1,B}if(F.kind==="ListType")return{type:"array",elements:Q(F.type)};let K={type:F.name?.value};return Object.defineProperty(K,"location",{value:F.loc.startToken}),K};a(Q,"getProperty");let R=S.name.value,b=[],O={table:null,database:null,properties:b};f.set(R,O);for(let F of S.directives){if(F.name.value==="table"){for(let w of F.arguments)O[w.name.value]=w.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=R),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,E.push(O)}if(F.name.value==="sealed"&&(O.sealed=!0),F.name.value==="export"){O.export=!0;for(let w of F.arguments)w.name.value==="name"&&(O.export={name:w.value.value})}}let Y=!1;for(let F of S.fields){let w=Q(F.type);w.name=F.name.value,b.push(w);for(let K of F.directives)if(K.name.value==="primaryKey")Y?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,Y=!0);else if(K.name.value==="indexed")w.indexed=!0;else if(K.name.value==="createdTime")w.assignCreatedTime=!0;else if(K.name.value==="updatedTime")w.assignUpdatedTime=!0;else if(K.name.value==="expiresAt")w.expiresAt=!0;else if(K.name.value==="allow"){let B=w.authorizedRoles=[];for(let x of K.arguments)x.name.value==="role"&&B.push(x.value.value)}}O.typeName=R,R==="Query"&&(h=O)}function p(S){let R=f.get(S.type);R?S.properties=R.properties:S.type==="array"?p(S.elements):IJ.includes(S.type)||(0,LC.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}a(p,"connectPropertyType");for(let S of f.values())for(let R of S.properties)p(R);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,z_.dirname)(s),S.tableClass):i.set((0,z_.dirname)(s)+"/"+(S.export.name||S.typeName),S.tableClass));if(h)for(let S of h.properties){let R=f.get(S.type);if(!R)throw new Error(`${S.type} was not found as a Query export`);i.set((0,z_.dirname)(s)+"/"+S.name,R.tableClass)}}}var z_,LC,IJ,wJ,CJ,DC=Te(()=>{z_=require("path");fe();LC=D(Je()),IJ=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(bp,"start");wJ=bp,CJ=bp({ensureTable:tt}).handleFile});async function J_(e){return LJ?(xc||(xc=DJ(MJ)),(await(await xc).import(e)).namespace):import(e)}async function DJ(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),xc=new Compartment({console,Math,Date,fetch:UJ,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,MC.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:Nt,tables:Ir,databases:$e})}};let s=await(0,UC.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),xc}function UJ(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 MJ(){return{Resource:Nt,tables:Ir}}var UC,MC,LJ,xc,Ip=Te(()=>{is();fe();UC=require("fs/promises"),MC=require("path"),LJ=!1;a(J_,"secureImport");a(DJ,"getCompartment");a(UJ,"secureOnlyFetch");a(MJ,"getGlobalVars")});var Cp={};ve(Cp,{handleFile:()=>PJ});async function PJ(e,t,r,s){let n=new Map,i=(0,PC.pathToFileURL)(r).toString(),o=await J_(i);u(o.default)&&s.set((0,wp.dirname)(t),o.default),c(o,(0,wp.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.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"),n}var PC,wp,vC=Te(()=>{PC=require("url");Ip();wp=require("path");a(PJ,"handleFile")});var Dp={};ve(Dp,{start:()=>vJ});function vJ({resources:e}){e.set("login",Lp),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Lp,BC=Te(()=>{is();a(vJ,"start");Lp=class extends Nt{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var Mp=T((cle,FC)=>{"use strict";var{Readable:BJ}=require("stream"),HJ=1e4;FC.exports={streamAsJSON(e){return new Up({value:e})}};var Up=class extends BJ{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],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(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 n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),HC)}catch(n){yield HC(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);qC(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>HJ?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 qC(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))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 s of this.activeIterators)t?s.throw(t):s.return();r()}};function HC(e){return console.error(e),JSON.stringify(e.toString())}a(HC,"handleError");function qC(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(qC,"when")});var X_=T((lle,GC)=>{"use strict";var qJ=Es();GC.exports={writeTransaction:FJ};function FJ(e,t,r){return qJ.writeTransaction(e,t,r)}a(FJ,"writeTransaction")});var $C=T((fle,VC)=>{"use strict";var GJ=Gr(),xJ=xn(),xC=G(),kJ=xr(),dle=X_(),VJ=require("clone"),vp=require("alasql"),$J=r_(),kC=require("util"),YJ=kC.promisify(xJ.getTableSchema),KJ=kC.promisify(GJ.search),WJ=y(),Pp=$();$J(vp);VC.exports={update:zJ};var QJ="There was a problem performing this update. Please check the logs and try again.";async function zJ({statement:e,hdb_user:t}){let r=await YJ(e.table.databaseid,e.table.tableid),s=JJ(e.columns);Pp.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=VJ(n),c=Pp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=vp.parse(u).statements[0],l=await KJ(_),d=XJ(s,l);return jJ(o,d,t)}a(zJ,"update");function JJ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=vp.compile(`SELECT ${r.expression.toString()} AS [${WJ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw xC.error(t),new Error(QJ)}}a(JJ,"createUpdateRecord");function XJ(e,t){return Pp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(XJ,"buildUpdateRecords");async function jJ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await kJ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){xC.error(`Error delete new_attributes from update response: ${i}`)}return n}a(jJ,"updateRecords")});var KC=T((ple,YC)=>{var ZJ=require("alasql"),e4=Gr(),t4=G(),r4=Es(),Hp=require("util"),Bp=$(),s4=y(),n4=xn(),hle=X_(),mle=xr(),i4="record",o4="successfully deleted",a4=Hp.callbackify(_4),c4=Hp.promisify(e4.search),u4=Hp.promisify(n4.getTableSchema);YC.exports={convertDelete:a4};function l4(e){return`${e.deleted_hashes.length} ${i4}${e.deleted_hashes.length===1?"":"s"} ${o4}`}a(l4,"generateReturnMessage");async function _4({statement:e,hdb_user:t}){let r=await u4(e.table.databaseid,e.table.tableid);Bp.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=Bp.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=ZJ.parse(o).statements[0],u={operation:s4.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await c4(c);let _=await r4.deleteRecords(u);return Bp.isEmptyOrZeroLength(_.message)&&(_.message=l4(_)),delete _.txn_time,_}catch(_){throw t4.error(_),_.hdb_code?_.message:_}}a(_4,"convertDelete")});var XC=T((Tle,JC)=>{"use strict";var d4=bi(),{hdb_errors:WC}=j(),{getDatabases:QC}=(fe(),Z(Ce));JC.exports={checkSchemaExists:zC,checkSchemaTableExists:f4,schema_describe:d4};async function zC(e){if(!QC()[e])return WC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(zC,"checkSchemaExists");async function f4(e,t){let r=await zC(e);if(r)return r;if(!QC()[e][t])return WC.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(f4,"checkSchemaTableExists")});var kc=T((Rle,E4)=>{E4.exports={name:"harperdb",version:"4.2.3",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: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: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:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","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.441.0","@aws-sdk/lib-storage":"3.441.0","@endo/static-module-record":"^0.8.1","@fastify/autoload":"~5.7.2","@fastify/compress":"~6.4.0","@fastify/cors":"~8.4.1","@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:"1.7.4","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.24.3","fastify-plugin":"~4.5.1","fs-extra":"11.1.1",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.0",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.9.9",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.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.6",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",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"^8.14.2",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:"0.27.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.2.2","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 dt=T((yle,mL)=>{"use strict";var wt=X();wt.initSync();var h4=require("fs-extra"),m4=require("semver"),Yc=require("path"),{monotonicFactory:p4}=require("ulidx"),ZC=p4(),S4=require("util"),eL=require("child_process"),T4=S4.promisify(eL.exec),g4=eL.spawn,Re=ke(),Oe=y(),xp=$(),Yr=G(),j_=un(),R4=X_(),Vc=Ar(),{onMessageByType:A4}=Je(),{isMainThread:O4}=require("worker_threads"),{Encoder:N4,decode:kp}=require("msgpackr"),tL=new N4,{isEmpty:qi}=xp,rL=kr(),b4=48*36e11,y4=5e9;O4&&A4(Oe.ITC_EVENT_TYPES.RESTART,()=>{gs=void 0,qo=void 0});var{connect:I4,StorageType:sL,RetentionPolicy:nL,AckPolicy:Z_,DeliverPolicy:ed,DiscardPolicy:w4,NatsConnection:Ale,JetStreamManager:Ole,JetStreamClient:Nle,StringCodec:ble,JSONCodec:C4,createInbox:Vp,headers:L4,ErrorCode:jC}=require("nats"),{PACKAGE_ROOT:D4}=y(),U4=kc(),{recordAction:M4}=(_n(),Z(Cc)),iL=C4(),P4="clustering",v4=U4.engines[Re.NATS_SERVER_NAME],B4=Yc.join(D4,"dependencies"),Gp=Yc.join(B4,`${process.platform}-${process.arch}`,Re.NATS_BINARY_NAME),qp,Fp,$c,Bo,Ho;mL.exports={runCommand:oL,checkNATSServerInstalled:H4,createConnection:$p,getConnection:td,getJetStreamManager:Kc,getJetStream:aL,getNATSReferences:Zt,getServerList:F4,createLocalStream:Yp,listStreams:cL,deleteLocalStream:G4,getServerConfig:Wc,listRemoteStreams:x4,viewStream:k4,viewStreamIterator:V4,publishToStream:$4,createWorkQueueStream:Y4,addSourceToWorkStream:lL,request:W4,removeSourceFromWorkStream:dL,reloadNATS:Kp,reloadNATSHub:Q4,reloadNATSLeaf:z4,extractServerName:_L,requestErrorHandler:J4,updateWorkStream:X4,createLocalTableStream:EL,createTableStreams:j4,purgeTableStream:hL,purgeSchemaTableStreams:Z4,getStreamInfo:e3,updateLocalStreams:r3,closeConnection:q4,getJsmServerName:Qc,addNatsMsgHeader:uL,updateIngestStreamConsumer:K4};async function oL(e,t=void 0){let{stdout:r,stderr:s}=await T4(e,{cwd:t});if(s)throw new Error(s.replace(`
7
7
  `,""));return r.replace(`
8
- `,"")}a(oL,"runCommand");async function B4(){try{await E4.access(Gp)}catch{return!1}let e=await oL(`${Gp} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return h4.eq(t,P4)}a(B4,"checkNATSServerInstalled");async function $p(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await rL.getClusterUser();if(qi(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}$r.trace("create nats connection called");let i=await y4({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:wt.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:wt.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:wt.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),$r.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a($p,"createConnection");async function H4(){Ts&&(await Ts.drain(),Ts=void 0,Bo=void 0,Ho=void 0,qo=void 0)}a(H4,"closeConnection");var Ts,qo;async function td(){return qo||(qo=$p(wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Ts=await qo),Ts||qo}a(td,"getConnection");async function Kc(){if(Bo)return Bo;qi(Ts)&&await td();let{domain:e}=Wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(qi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Bo=await Ts.jetstreamManager({domain:e,timeout:6e4}),Bo}a(Kc,"getJetStreamManager");async function aL(){if(Ho)return Ho;qi(Ts)&&await td();let{domain:e}=Wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(qi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ho=Ts.jetstream({domain:e,timeout:6e4}),Ho}a(aL,"getJetStream");async function Zt(){let e=Ts||await td(),t=Bo||await Kc(),r=Ho||await aL();return{connection:e,jsm:t,js:r}}a(Zt,"getNATSReferences");async function q4(e){let t=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await rL.getClusterUser(),n=await $p(t,r,s),i=Vp(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=iL.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await xp.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(q4,"getServerList");async function Yp(e,t){let{jsm:r}=await Zt(),s=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:sL.File,retention:nL.Limits,subjects:t,discard:I4.Old,max_msgs:n,max_bytes:i,max_age:s})}a(Yp,"createLocalStream");async function cL(){let{jsm:e}=await Zt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(cL,"listStreams");async function F4(e){let{jsm:t}=await Zt();await t.streams.delete(e)}a(F4,"deleteLocalStream");async function G4(e){let{connection:t}=await Zt(),r=[],s=Vp(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(iL.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(G4,"listRemoteStreams");async function x4(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Zt(),i=ZC(),o={durable_name:i,ack_policy:Z_.Explicit};t&&(o.deliver_policy=ed.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.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=kp(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Re.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(x4,"viewStream");async function*k4(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Zt(),i=ZC(),o={durable_name:i,ack_policy:Z_.Explicit};t&&(o.deliver_policy=ed.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.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=kp(_.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(Re.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(k4,"viewStreamIterator");async function V4(e,t,r,s){$r.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=uL(s,r);let{js:n}=await Zt(),i=await Qc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:tL.encode(s);try{$r.trace(`publishToStream publishing to subject: ${o}`),U4(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return fL(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){$r.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await Yp(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(V4,"publishToStream");function uL(e,t){t===void 0&&(t=C4());let r=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Re.MSG_HEADERS.ORIGIN)&&r&&t.append(Re.MSG_HEADERS.ORIGIN,r),t}a(uL,"addNatsMsgHeader");function Wc(e){e=e.toLowerCase();let t=Yc.join(wt.get(Oe.CONFIG_PARAMS.ROOTPATH),M4);if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return qi(Fp)&&(Fp={port:Vc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Vc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Re.SERVER_SUFFIX.HUB,config_file:Re.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Yc.join(t,Re.PID_FILES.HUB),hdb_nats_path:t}),Fp;if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return qi(qp)&&(qp={port:Vc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Vc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Re.SERVER_SUFFIX.LEAF,config_file:Re.NATS_CONFIG_FILES.LEAF_SERVER,domain:Vc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Re.SERVER_SUFFIX.LEAF,pid_file_path:Yc.join(t,Re.PID_FILES.LEAF),hdb_nats_path:t}),qp;$r.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Wc,"getServerConfig");async function $4(e){let{jsm:t}=await Zt(),r=await Qc();try{await t.streams.add({name:e.stream_name,storage:sL.File,retention:nL.Limits,max_age:N4,max_bytes:b4,subjects:[`${Re.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:Z_.Explicit,durable_name:e.durable_name,deliver_policy:ed.All,max_ack_pending:1e4});else throw s}}a($4,"createWorkQueueStream");async function Y4(){let{jsm:e}=await Zt();(await e.consumers.info(Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,Re.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&($r.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,Re.WORK_QUEUE_CONSUMER_NAMES.durable_name),$r.info("Adding pull consumer to ingest stream"),await e.consumers.add(Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:Z_.Explicit,durable_name:Re.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:ed.All,max_ack_pending:1e4}))}a(Y4,"updateIngestStreamConsumer");async function lL(e,t,r){let{jsm:s}=await Zt(),n=await s.streams.info(t),i=_L(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=j_.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let p=0,S=n.config.sources.length;p<S;p++)if(d=n.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 s.streams.purge(t,{filter:p}),n.config.sources.splice(f,1),await s.streams.update(t,n.config)}let h={name:_,opt_start_time:o,filter_subject:`${Re.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(lL,"addSourceToWorkStream");function _L(e){return e.split(".")[1]}a(_L,"extractServerName");async function dL(e,t,r){let{jsm:s}=await Zt(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=j_.createNatsTableStreamName(n,i),u=await s.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 s.streams.update(t,u.config)}a(dL,"removeSourceFromWorkStream");async function K4(e,t,r=6e4,s=Vp()){if(!xp.isObject(t))throw new Error("data param must be an object");let n=tL.encode(t),{connection:i}=await Zt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return kp(c.data)}a(K4,"request");function Kp(e){return new Promise(async(t,r)=>{let s=T4(Gp,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(Kp,"reloadNATS");async function W4(){let{pid_file_path:e}=Wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Kp(e)}a(W4,"reloadNATSHub");async function Q4(){let{pid_file_path:e}=Wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Kp(e)}a(Q4,"reloadNATSLeaf");function z4(e,t,r){let s;switch(e.code){case jC.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case jC.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(z4,"requestErrorHandler");async function J4(e,t){let r=t+Re.SERVER_SUFFIX.LEAF;await fL(async()=>{e.subscribe===!0?await lL(r,Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await dL(r,Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(J4,"updateWorkStream");function fL(e){return g4.writeTransaction(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(fL,"exclusiveLock");async function EL(e,t){let r=j_.createNatsTableStreamName(e,t),s=await Qc(),n=e3(e,t,s);await Yp(r,[n])}a(EL,"createLocalTableStream");async function X4(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await EL(s,n)}}a(X4,"createTableStreams");async function hL(e,t){if(wt.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=j_.createNatsTableStreamName(e,t),{jsm:s}=await Zt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")$r.warn(r);else throw r}}a(hL,"purgeTableStream");async function j4(e,t){if(wt.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await hL(e,t[r])}a(j4,"purgeSchemaTableStreams");async function Z4(e){return(await Kc()).streams.info(e)}a(Z4,"getStreamInfo");function e3(e,t,r){return`${Re.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(e3,"createSubjectName");async function Qc(){if($c)return $c;if($c=(await Kc())?.nc?.info?.server_name,$c===void 0)throw new Error("Unable to get jetstream manager server name");return $c}a(Qc,"getJsmServerName");async function t3(){let e=await Kc(),t=await Qc(),r=await cL();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=r3(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===Re.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Re.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;$r.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===Re.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Re.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;$r.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");$r.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(t3,"updateLocalStreams");function r3(e){let{config:t}=e,r=!1;if(t.name===Re.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===Re.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(r3,"updateStreamLimits")});var id=T((Cle,gL)=>{"use strict";var Fo=Fl(),Go=XC(),s3=G(),n3=require("uuid").v4,wle=require("clone"),sd=nn(),xo=y(),i3=require("util"),zn=ds(),{handleHDBError:er,hdb_errors:o3}=j(),{HDB_ERROR_MSGS:rd,HTTP_STATUS_CODES:tr}=o3,{SchemaEventMsg:nd}=cs(),pL=_t(),{getDatabases:a3}=(fe(),Z(Ce)),{transformReq:ko}=$();gL.exports={createSchema:c3,createSchemaStructure:SL,createTable:u3,createTableStructure:TL,createAttribute:E3,dropSchema:l3,dropTable:_3,dropAttribute:d3,getBackup:h3};async function c3(e){let t=await SL(e);return sd.signalSchemaChange(new nd(process.pid,e.operation,e.schema)),t}a(c3,"createSchema");async function SL(e){let t=Fo.schema_object(e);if(t)throw er(t,t.message,tr.BAD_REQUEST,void 0,void 0,!0);if(ko(e),!await Go.checkSchemaExists(e.schema))throw er(new Error,rd.SCHEMA_EXISTS_ERR(e.schema),tr.BAD_REQUEST,xo.LOG_LEVELS.ERROR,rd.SCHEMA_EXISTS_ERR(e.schema),!0);return await zn.createSchema(e),`database '${e.schema}' successfully created`}a(SL,"createSchemaStructure");async function u3(e){return ko(e),e.hash_attribute=e.primary_key??e.hash_attribute,await TL(e)}a(u3,"createTable");async function TL(e){let t=Fo.create_table_object(e);if(t)throw er(t,t.message,tr.BAD_REQUEST,void 0,void 0,!0);if(Fo.validateTableResidence(e.residence),!await Go.checkSchemaTableExists(e.schema,e.table))throw er(new Error,rd.TABLE_EXISTS_ERR(e.schema,e.table),tr.BAD_REQUEST,xo.LOG_LEVELS.ERROR,rd.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:n3(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await zn.createTable(s,e);else throw er(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",tr.BAD_REQUEST);else await zn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(TL,"createTableStructure");async function l3(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Fo.schema_object(e),s=t??r;if(s)throw er(s,s.message,tr.BAD_REQUEST,void 0,void 0,!0);ko(e);let n=await Go.checkSchemaExists(e.schema);if(n)throw er(new Error,n,tr.NOT_FOUND,xo.LOG_LEVELS.ERROR,n,!0);let i=await Go.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await zn.dropSchema(e),sd.signalSchemaChange(new nd(process.pid,e.operation,e.schema)),await pL.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(l3,"dropSchema");async function _3(e){let t=Fo.table_object(e);if(t)throw er(t,t.message,tr.BAD_REQUEST,void 0,void 0,!0);ko(e);let r=await Go.checkSchemaTableExists(e.schema,e.table);if(r)throw er(new Error,r,tr.NOT_FOUND,xo.LOG_LEVELS.ERROR,r,!0);return await zn.dropTable(e),await pL.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(_3,"dropTable");async function d3(e){let t=Fo.attribute_object(e);if(t)throw er(t,t.message,tr.BAD_REQUEST,void 0,void 0,!0);ko(e);let r=await Go.checkSchemaTableExists(e.schema,e.table);if(r)throw er(new Error,r,tr.NOT_FOUND,xo.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw er(new Error,"You cannot drop a hash attribute",tr.BAD_REQUEST,void 0,void 0,!0);if(xo.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw er(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,tr.BAD_REQUEST,void 0,void 0,!0);try{return await zn.dropAttribute(e),f3(e),sd.signalSchemaChange(new nd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw s3.error(`Got an error deleting attribute ${i3.inspect(e)}.`),s}}a(d3,"dropAttribute");function f3(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(f3,"dropAttributeFromGlobal");async function E3(e){ko(e);let t=a3()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw er(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,tr.BAD_REQUEST,void 0,void 0,!0);return await zn.createAttribute(e),sd.signalSchemaChange(new nd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(E3,"createAttribute");function h3(e){return zn.getBackup(e)}a(h3,"getBackup")});var AL=T((Dle,RL)=>{"use strict";var{OPERATIONS_ENUM:m3}=y(),Wp=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=m3.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};RL.exports=Wp});var Qp=T((Ple,IL)=>{"use strict";var p3=ds(),Mle=AL(),od=$(),ad=y(),S3=X(),{handleHDBError:OL,hdb_errors:T3}=j(),{HDB_ERROR_MSGS:NL,HTTP_STATUS_CODES:bL}=T3,g3=Object.values(ad.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),yL="To use this operation audit log must be enabled in harperdb-config.yaml";IL.exports=R3;async function R3(e){if(od.isEmpty(e.schema))throw new Error(NL.SCHEMA_REQUIRED_ERR);if(od.isEmpty(e.table))throw new Error(NL.TABLE_REQUIRED_ERR);if(!S3.get(ad.CONFIG_PARAMS.LOGGING_AUDITLOG))throw OL(new Error,yL,bL.BAD_REQUEST,ad.LOG_LEVELS.ERROR,yL,!0);let t=od.checkSchemaTableExist(e.schema,e.table);if(t)throw OL(new Error,t,bL.NOT_FOUND,ad.LOG_LEVELS.ERROR,t,!0);if(!od.isEmpty(e.search_type)&&g3.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await p3.readAuditLog(e)}a(R3,"readAuditLog")});var CL=T((Ble,wL)=>{"use strict";var{OPERATIONS_ENUM:A3}=y(),zp=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=A3.GET_BACKUP,this.schema=t,this.table=r}};wL.exports=zp});var UL=T((Gle,DL)=>{"use strict";var O3=ds(),qle=CL(),Jp=$(),N3=y(),Fle=X(),{handleHDBError:b3,hdb_errors:y3}=j(),{HDB_ERROR_MSGS:LL,HTTP_STATUS_CODES:I3}=y3;DL.exports=w3;async function w3(e){if(Jp.isEmpty(e.schema))throw new Error(LL.SCHEMA_REQUIRED_ERR);if(Jp.isEmpty(e.table))throw new Error(LL.TABLE_REQUIRED_ERR);let t=Jp.checkSchemaTableExist(e.schema,e.table);if(t)throw b3(new Error,t,I3.NOT_FOUND,N3.LOG_LEVELS.ERROR,t,!0);return await O3.getBackup(read_audit_log_object)}a(w3,"getBackup")});var qL=T((kle,HL)=>{var Jn=require("validate.js"),PL=xe(),Vo=y(),{handleHDBError:C3,hdb_errors:L3}=j(),{HDB_ERROR_MSGS:je,HTTP_STATUS_CODES:D3}=L3,Xp=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),U3={STRUCTURE_USER:"structure_user"},ML=Object.values(Vo.ROLE_TYPES_ENUM),M3="attribute_permissions",P3="attribute_name",{PERMS_CRUD_ENUM:$o}=Vo,v3=[M3,...Object.values($o)],vL=[$o.READ,$o.INSERT,$o.UPDATE],B3=[P3,...vL];function H3(e){let t=Xp();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,BL(e,t)}a(H3,"addRoleValidation");function q3(e){let t=Xp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,BL(e,t)}a(q3,"alterRoleValidation");function F3(e){let t=Xp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,PL.validateObject(e,t)}a(F3,"dropRoleValidation");var G3=["operation","role","id","permission","hdb_user","hdb_auth_header"];function BL(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)G3.includes(s[o])||n.push(s[o]);n.length>0&&st(je.INVALID_ROLE_JSON_KEYS(n),r);let i=PL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{st(o,r)}),e.permission){let o=x3(e);o&&st(o,r),ML.forEach(c=>{e.permission[c]&&!Jn.isBoolean(e.permission[c])&&st(je.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(ML.indexOf(o)<0){if(o===U3.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]||st(je.SCHEMA_NOT_FOUND(d),r)}continue}st(je.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){st(je.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]){st(je.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{v3.includes(l)||st(je.INVALID_PERM_KEY(l),r,o,u)}),Object.values($o).forEach(l=>{Jn.isDefined(_[l])?Jn.isBoolean(_[l])||st(je.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):st(je.TABLE_PERM_MISSING(l),r,o,u)}),Jn.isDefined(_.attribute_permissions)){if(!Jn.isArray(_.attribute_permissions)){st(je.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{st(je.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!==$o.DELETE&&st(je.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!Jn.isDefined(E.attribute_name)){st(je.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){st(je.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}vL.forEach(p=>{Jn.isDefined(E[p])?Jn.isBoolean(E[p])||st(je.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):st(je.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}`;st(je.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return k3(r)}a(BL,"customValidate");HL.exports={addRoleValidation:H3,alterRoleValidation:q3,dropRoleValidation:F3};function x3(e){let{operation:t,permission:r}=e;if(t===Vo.OPERATIONS_ENUM.ADD_ROLE||t===Vo.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return je.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Vo.ROLE_TYPES_ENUM.SUPER_USER:Vo.ROLE_TYPES_ENUM.CLUSTER_USER;return je.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(x3,"validateNoSUPerms");function k3(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:je.ROLE_PERMS_ERROR,...e};return C3(new Error,s,D3.BAD_REQUEST)}else return null}a(k3,"generateRolePermResponse");function st(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(st,"addPermError")});var sS=T(($le,kL)=>{"use strict";var FL=Gr(),GL=Fr(),V3=Li(),Zp=qL(),eS=nn(),$3=require("uuid").v4,Y3=require("util"),cd=y(),K3=$(),tS=GL.searchByValue,W3=GL.searchByHash,Q3=Y3.promisify(V3.delete),z3=Us(),J3=Ao(),{hdb_errors:X3,handleHDBError:Yo}=j(),{HDB_ERROR_MSGS:xL,HTTP_STATUS_CODES:ud}=X3,{UserEventMsg:rS}=cs();kL.exports={addRole:j3,alterRole:Z3,dropRole:eX,listRoles:tX};function jp(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(jp,"scrubRoleDetails");async function j3(e){let t=Zp.addRoleValidation(e);if(t)throw t;e=jp(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await tS(r)||[])}catch(i){throw Yo(i)}if(s&&s.length>0)throw Yo(new Error,xL.ROLE_ALREADY_EXISTS(e.role),ud.CONFLICT,void 0,void 0,!0);e.id||(e.id=$3());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await FL.insert(n),eS.signalUserChange(new rS(process.pid)),e=jp(e),e}a(j3,"addRole");async function Z3(e){let t=Zp.alterRoleValidation(e);if(t)throw t;e=jp(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await FL.update(r)}catch(n){throw Yo(n)}if(s&&s?.message==="updated 0 of 1 records")throw Yo(new Error,"Invalid role id",ud.BAD_REQUEST,void 0,void 0,!0);return await eS.signalUserChange(new rS(process.pid)),e}a(Z3,"alterRole");async function eX(e){let t=Zp.dropRoleValidation(e);if(t)throw Yo(new Error,t,ud.BAD_REQUEST,void 0,void 0,!0);let r=new J3(cd.SYSTEM_SCHEMA_NAME,cd.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await W3(r));if(s.length===0)throw Yo(new Error,xL.ROLE_NOT_FOUND,ud.NOT_FOUND,void 0,void 0,!0);let n=new z3(cd.SYSTEM_SCHEMA_NAME,cd.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await tS(n)),o=!1;if(K3.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Q3(c),eS.signalUserChange(new rS(process.pid)),`${s[0].role} successfully deleted`}a(eX,"dropRole");async function tX(){return tS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(tX,"listRoles")});var KL=T((Kle,YL)=>{"use strict";var rX=X(),Xn=require("joi"),sX=xe(),VL=require("moment"),nX=require("fs-extra"),nS=require("path"),iX=require("lodash"),zc=y(),{LOG_LEVELS:Fi}=y(),oX="YYYY-MM-DD hh:mm:ss",aX=nS.resolve(__dirname,"../logs");YL.exports=function(e){return sX.validateBySchema(e,cX)};var cX=Xn.object({from:Xn.custom($L),until:Xn.custom($L),level:Xn.valid(Fi.NOTIFY,Fi.FATAL,Fi.ERROR,Fi.WARN,Fi.INFO,Fi.DEBUG,Fi.TRACE),order:Xn.valid("asc","desc"),limit:Xn.number().min(1),start:Xn.number().min(0),log_name:Xn.custom(uX)});function $L(e,t){if(VL(e,VL.ISO_8601).format(oX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a($L,"validateDatetime");function uX(e,t){if(iX.invert(zc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=rX.get(zc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?zc.LOG_NAMES.HDB:e,i=n===zc.LOG_NAMES.INSTALL?nS.join(aX,zc.LOG_NAMES.INSTALL):nS.join(s,n);return nX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(uX,"validateReadLogPath")});var oS=T((Qle,QL)=>{"use strict";var ld=y(),lX=G(),_X=X(),dX=KL(),iS=require("path"),WL=require("fs-extra"),{once:fX}=require("events"),{handleHDBError:EX,hdb_errors:hX}=j(),{PACKAGE_ROOT:mX}=y(),pX=iS.join(mX,"logs"),SX=1e3,TX=200;QL.exports=gX;async function gX(e){let t=dX(e);if(t)throw EX(t,t.message,hX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=_X.get(ld.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?ld.LOG_NAMES.HDB:e.log_name,n=s===ld.LOG_NAMES.INSTALL?iS.join(pX,ld.LOG_NAMES.INSTALL):iS.join(r,s),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?SX:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max(WL.statSync(n).size-(h+5)*TX,0));let S=WL.createReadStream(n,{start:p});S.on("error",F=>{lX.error(F)});let R=0,b=[],O="",Y;S.on("data",F=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=O+F;let K=0,B;for(;(B=w.exec(F))&&!S.destroyed;){Y&&(Y.message=F.slice(K,B.index),Q(Y));let[x,te,be]=B,se=be.split("] ["),vt=se[0],Pe=se[1];se.splice(0,2),Y={timestamp:te,thread:vt,level:Pe,tags:se,message:""},K=B.index+x.length}O=F.slice(K)}),S.on("end",F=>{S.destroyed||Y&&(Y.message=O.trim(),Q(Y))}),S.resume();function Q(F){let w,K,B;switch(!0){case(i&&c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),F.level===o&&w>=K&&w<=B&&R<E?R++:F.level===o&&w>=K&&w<=B&&(jn(F,f,b),R++,R===h&&S.destroy());break;case(i&&c):w=new Date(F.timestamp),K=new Date(u),F.level===o&&w>=K&&R<E?R++:F.level===o&&w>=K&&(jn(F,f,b),R++,R===h&&S.destroy());break;case(i&&_):w=new Date(F.timestamp),B=new Date(l),F.level===o&&w<=B&&R<E?R++:F.level===o&&w<=B&&(jn(F,f,b),R++,R===h&&S.destroy());break;case(c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),w>=K&&w<=B&&R<E?R++:w>=K&&w<=B&&(jn(F,f,b),R++,R===h&&S.destroy());break;case i:F.level===o&&R<E?R++:F.level===o&&(jn(F,f,b),R++,R===h&&S.destroy());break;case c:w=new Date(F.timestamp),K=new Date(u),w>=K&&R<E?R++:w>=K&&R>=E&&(jn(F,f,b),R++,R===h&&S.destroy());break;case _:w=new Date(F.timestamp),B=new Date(l),w<=B&&R<E?R++:w<=B&&R>=E&&(jn(F,f,b),R++,R===h&&S.destroy());break;default:R<E?R++:(jn(F,f,b),R++,R===h&&S.destroy())}}return a(Q,"onLogMessage"),await fX(S,"close"),b}a(gX,"readLog");function jn(e,t,r){t==="desc"?RX(e,r):t==="asc"?AX(e,r):r.push(e)}a(jn,"pushLineToResult");function RX(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(RX,"insertDescending");function AX(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(AX,"insertAscending")});var dd=T((Zle,jL)=>{"use strict";var aS=require("joi"),{string:_d,boolean:zL,date:OX}=aS.types(),NX=xe(),{validateSchemaExists:Jle,validateTableExists:Xle,validateSchemaName:jle}=Ls(),bX=y(),yX=ke(),JL=X();JL.initSync();var IX=_d.invalid(JL.get(bX.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(yX.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),XL={operation:_d.valid("add_node","update_node"),node_name:IX,subscriptions:aS.array().items({table:_d.optional(),schema:_d.required(),subscribe:zL.required(),publish:zL.required().custom(CX),start_time:OX.iso()}).min(1).required()};function wX(e){return NX.validateBySchema(e,aS.object(XL))}a(wX,"addUpdateNodeValidator");function CX(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(CX,"checkForFalsy");jL.exports={addUpdateNodeValidator:wX,validation_schema:XL}});var eD=T((t_e,ZL)=>{var LX=xe(),DX={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};ZL.exports=function(e){return LX.validateObject(e,DX)}});var uS=T((r_e,tD)=>{"use strict";var UX=y().OPERATIONS_ENUM,cS=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=UX.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};tD.exports=cS});var sD=T((n_e,rD)=>{"use strict";var MX={OPERATION:"operation",REFRESH:"refresh"},lS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},_S=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};rD.exports={JWTTokens:lS,TOKEN_TYPE_ENUM:MX,JWTRSAKeys:_S}});var jc=T((o_e,aD)=>{"use strict";var Xc=require("jsonwebtoken"),dS=require("fs-extra"),fS=$(),Yr=y(),{handleHDBError:rr,hdb_errors:PX}=j(),{HTTP_STATUS_CODES:sr,AUTHENTICATION_ERROR_MSGS:nr}=PX,Jc=G(),nD=f_(),mS=xr(),vX=Gr().update,BX=uS(),HX=nn(),{UserEventMsg:qX}=cs(),Zn=X();Zn.initSync();var ES=require("path"),{JWTTokens:FX,JWTRSAKeys:GX,TOKEN_TYPE_ENUM:fd}=sD(),xX=Zn.get(Yr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Zn.get(Yr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",kX=Zn.get(Yr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Zn.get(Yr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Ed="RS256",hS;aD.exports={createTokens:VX,validateOperationToken:YX,refreshOperationToken:$X,validateRefreshToken:oD};async function VX(e){if(fS.isEmpty(e)||typeof e!="object")throw rr(new Error,nr.INVALID_AUTH_OBJECT,sr.BAD_REQUEST,void 0,void 0,!0);if(fS.isEmpty(e.username))throw rr(new Error,nr.USERNAME_REQUIRED,sr.BAD_REQUEST,void 0,void 0,!0);if(fS.isEmpty(e.password))throw rr(new Error,nr.PASSWORD_REQUIRED,sr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await mS.findAndValidateUser(e.username,e.password),!t)throw rr(new Error,nr.INVALID_CREDENTIALS,sr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Jc.error(f),rr(new Error,nr.INVALID_CREDENTIALS,sr.UNAUTHORIZED,void 0,void 0,!0)}let r=await hd(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await iD(i,r.private_key,r.passphrase),c=await Xc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:kX,algorithm:Ed,subject:fd.REFRESH}),u=nD.hash(c),_=new BX(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await vX(_)}catch(f){Jc.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw rr(new Error,nr.REFRESH_TOKEN_SAVE_FAILED,sr.INTERNAL_SERVER_ERROR);return HX.signalUserChange(new qX(process.pid)),new FX(o,c)}a(VX,"createTokens");async function iD(e,t,r){return await Xc.sign(e,{key:t,passphrase:r},{expiresIn:xX,algorithm:Ed,subject:fd.OPERATION})}a(iD,"signOperationToken");async function hd(){if(hS===void 0)try{let e=ES.join(Zn.getHdbBasePath(),Yr.LICENSE_KEY_DIR_NAME,Yr.JWT_ENUM.JWT_PASSPHRASE_NAME),t=ES.join(Zn.getHdbBasePath(),Yr.LICENSE_KEY_DIR_NAME,Yr.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=ES.join(Zn.getHdbBasePath(),Yr.LICENSE_KEY_DIR_NAME,Yr.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await dS.readFile(e)).toString(),n=(await dS.readFile(t)).toString(),i=(await dS.readFile(r)).toString();hS=new GX(i,n,s)}catch(e){throw Jc.error(e),rr(new Error,nr.NO_ENCRYPTION_KEYS,sr.INTERNAL_SERVER_ERROR)}return hS}a(hd,"getJWTRSAKeys");async function $X(e){if(!e)throw rr(new Error,nr.INVALID_BODY,sr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw rr(new Error,nr.REFRESH_TOKEN_REQUIRED,sr.BAD_REQUEST,void 0,void 0,!0);await oD(e.refresh_token);let t=await hd(),r=await Xc.decode(e.refresh_token);return{operation_token:await iD({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a($X,"refreshOperationToken");async function YX(e){try{let t=await hd(),r=await Xc.verify(e,t.public_key,{algorithms:Ed,subject:fd.OPERATION});return await mS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Jc.warn(t),t.name&&t.name==="TokenExpiredError"?rr(new Error,nr.TOKEN_EXPIRED,sr.FORBIDDEN):rr(new Error,nr.INVALID_TOKEN,sr.UNAUTHORIZED)}}a(YX,"validateOperationToken");async function oD(e){let t;try{let r=await hd(),s=await Xc.verify(e,r.public_key,{algorithms:Ed,subject:fd.REFRESH});t=await mS.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Jc.warn(r),r.name&&r.name==="TokenExpiredError"?rr(new Error,nr.TOKEN_EXPIRED,sr.FORBIDDEN):rr(new Error,nr.INVALID_TOKEN,sr.UNAUTHORIZED)}if(!nD.validate(t.refresh_token,e))throw rr(new Error,nr.INVALID_TOKEN,sr.UNAUTHORIZED);return t}a(oD,"validateRefreshToken")});var pS=T((u_e,lD)=>{"use strict";var KX=eD(),Ko=require("passport"),WX=require("passport-local").Strategy,QX=require("passport-http").BasicStrategy,zX=require("util"),JX=xr(),uD=zX.callbackify(JX.findAndValidateUser),c_e=Er(),XX=y(),cD=jc();Ko.use(new WX(function(e,t,r){uD(e,t,r)}));Ko.use(new QX(function(e,t,r){uD(e,t,r)}));Ko.serializeUser(function(e,t){t(null,e)});Ko.deserializeUser(function(e,t){t(null,e)});function jX(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":Ko.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===XX.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?cD.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):cD.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Ko.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(jX,"authorize");function ZX(e,t){let r=KX(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);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]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(ZX,"checkPermissions");lD.exports={authorize:jX,checkPermissions:ZX}});var Wo=T((__e,_D)=>{"use strict";var SS=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},TS=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};_D.exports={Node:SS,NodeSubscription:TS}});var fD=T((f_e,dD)=>{"use strict";var ej=y().OPERATIONS_ENUM,gS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=ej.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};dD.exports=gS});var Zc=T((h_e,ED)=>{"use strict";var RS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},AS=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};ED.exports={RemotePayloadObject:RS,RemotePayloadSubscription:AS}});var mD=T((p_e,hD)=>{"use strict";var OS=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};hD.exports=OS});var TD=T((A_e,SD)=>{"use strict";var tj=mD(),T_e=ze(),pD=Ue(),rj=G(),{getSchemaPath:g_e,getTransactionAuditStorePath:R_e}=Be(),{getDatabases:sj}=(fe(),Z(Ce));SD.exports=nj;async function nj(e){let t=new tj;try{let r=sj()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await pD.environmentDataSize(schema_path,e.name),o=await pD.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){rj.warn(`unable to stat table dbi due to ${r}`)}return t}a(nj,"lmdbGetTableSize")});var RD=T((N_e,gD)=>{"use strict";var NS=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};gD.exports=NS});var Qo=T((w_e,bD)=>{"use strict";var ij=require("fs-extra"),oj=require("path"),kt=require("systeminformation"),ei=G(),aj=_t(),bS=ke(),pd=y(),cj=TD(),ND=bi(),{getThreadInfo:AD}=Je(),vS=X();vS.initSync();var uj=RD(),{openEnvironment:y_e}=Ue(),{getSchemaPath:I_e}=Be(),{database:lj}=(fe(),Z(Ce)),md;bD.exports={getHDBProcessInfo:CS,getNetworkInfo:DS,getDiskInfo:LS,getMemoryInfo:wS,getCPUInfo:IS,getTimeInfo:yS,getSystemInformation:US,systemInformation:_j,getTableSize:MS,getMetrics:PS};function yS(){return kt.time()}a(yS,"getTimeInfo");async function IS(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await kt.cpu();l.cpu_speed=await kt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:R,...b}=await kt.currentLoad();return b.cpus=[],R.forEach(O=>{let{raw_load:Y,raw_load_idle:Q,raw_load_irq:F,raw_load_nice:w,raw_load_system:K,raw_load_user:B,...x}=O;b.cpus.push(x)}),l.current_load=b,l}catch(e){return ei.error(`error in getCPUInfo: ${e}`),{}}}a(IS,"getCPUInfo");async function wS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await kt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return ei.error(`error in getMemoryInfo: ${e}`),{}}}a(wS,"getMemoryInfo");async function CS(){let e={core:[],clustering:[]};try{let t=await kt.processes(),r;try{r=Number.parseInt(await ij.readFile(oj.join(vS.get(pd.CONFIG_PARAMS.ROOTPATH),pd.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===pd.NODE_ERROR_CODES.ENOENT)ei.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return ei.error(`error in getHDBProcessInfo: ${t}`),e}}a(CS,"getHDBProcessInfo");async function LS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await kt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await kt.fsStats();return e.read_write=_,e.size=await kt.fsSize(),e}catch(t){return ei.error(`error in getDiskInfo: ${t}`),e}}a(LS,"getDiskInfo");async function DS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await kt.networkInterfaceDefault(),e.latency=await kt.inetChecksite("google.com"),(await kt.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await kt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return ei.error(`error in getNetworkInfo: ${t}`),e}}a(DS,"getNetworkInfo");async function US(){if(md!==void 0)return md;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await kt.osInfo();e=c;let u=await kt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,md=e,md}catch(t){return ei.error(`error in getSystemInformation: ${t}`),e}}a(US,"getSystemInformation");async function MS(){let e=[],t=await ND.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await cj(s));return e}a(MS,"getTableSize");async function PS(){let e=await ND.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=lj({database:r,table:n}),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}}),s[n]=o}catch(i){ei.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(PS,"getMetrics");async function OD(){if(vS.get(pd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await aj.getNATSReferences(),r=await t.streams.info(bS.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(bS.WORK_QUEUE_CONSUMER_NAMES.stream_name,bS.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.config?.sources&&(n.ingest.stream.sources=r.config.sources),n}}a(OD,"getNatsStreamInfo");async function _j(e){let t=new uj;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await US(),t.time=yS(),t.cpu=await IS(),t.memory=await wS(),t.disk=await LS(),t.network=await DS(),t.harperdb_processes=await CS(),t.table_size=await MS(),t.metrics=await PS(),t.threads=await AD(),t.replication=await OD(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await US();break;case"time":t.time=yS();break;case"cpu":t.cpu=await IS();break;case"memory":t.memory=await wS();break;case"disk":t.disk=await LS();break;case"network":t.network=await DS();break;case"harperdb_processes":t.harperdb_processes=await CS();break;case"table_size":t.table_size=await MS();break;case"database_metrics":case"metrics":t.metrics=await PS();break;case"threads":t.threads=await AD();break;case"replication":t.replication=await OD();break;default:break}return t}a(_j,"systemInformation")});var BS=T((L_e,yD)=>{"use strict";yD.exports={version:dj,printVersion:fj};var Sd=kc();function dj(){if(Sd)return Sd.version}a(dj,"version");function fj(){Sd&&console.log(`HarperDB Version ${Sd.version}`)}a(fj,"printVersion")});var fn=T((P_e,LD)=>{"use strict";var Ej=Gr(),HS=$(),hj=require("util"),Gi=y(),ID=X();ID.initSync();var mj=pS(),wD=Fr(),{Node:U_e,NodeSubscription:M_e}=Wo(),pj=Ao(),Sj=fD(),{RemotePayloadObject:Tj,RemotePayloadSubscription:gj}=Zc(),{handleHDBError:Rj,hdb_errors:Aj}=j(),{HTTP_STATUS_CODES:Oj,HDB_ERROR_MSGS:Nj}=Aj,bj=Us(),yj=Qo(),Ij=BS(),{getDatabases:wj}=(fe(),Z(Ce)),Cj=hj.promisify(mj.authorize),Lj=wD.searchByHash,Dj=wD.searchByValue;LD.exports={authHeaderToUser:Uj,isEmpty:Mj,getNodeRecord:Pj,upsertNodeRecord:vj,buildNodePayloads:Bj,checkClusteringEnabled:Hj,getAllNodeRecords:qj,getSystemInfo:Fj,reverseSubscription:CD};async function Uj(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Cj(t,null),e}a(Uj,"authHeaderToUser");function Mj(e){return e==null}a(Mj,"isEmpty");async function Pj(e){let t=new pj(Gi.SYSTEM_SCHEMA_NAME,Gi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Lj(t)}a(Pj,"getNodeRecord");async function vj(e){let t=new Sj(Gi.SYSTEM_SCHEMA_NAME,Gi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Ej.upsert(t)}a(vj,"upsertNodeRecord");function CD(e){if(HS.isEmpty(e.subscribe)||HS.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(CD,"reverseSubscription");function Bj(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=HS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=CD(c),E=wj()[u]?.[_],h=new gj(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new Tj(r,t,n,s)}a(Bj,"buildNodePayloads");function Hj(){if(!ID.get(Gi.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Rj(new Error,Nj.CLUSTERING_NOT_ENABLED,Oj.BAD_REQUEST,void 0,void 0,!0)}a(Hj,"checkClusteringEnabled");async function qj(){let e=new bj(Gi.SYSTEM_SCHEMA_NAME,Gi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Dj(e))}a(qj,"getAllNodeRecords");async function Fj(){let e=await yj.getSystemInformation();return{hdb_version:Ij.version(),node_version:e.node_version,platform:e.platform}}a(Fj,"getSystemInfo")});var qS=T((B_e,qD)=>{"use strict";var Td=_t(),DD=$(),UD=ke(),MD=y(),gd=G(),PD=id(),Gj=rm(),{RemotePayloadObject:xj}=Zc(),{handleHDBError:vD,hdb_errors:kj}=j(),{HTTP_STATUS_CODES:BD}=kj,{NodeSubscription:HD}=Wo();qD.exports=Vj;async function Vj(e,t){let r;try{r=await Td.request(`${t}.${UD.REQUEST_SUFFIX}`,new xj(MD.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),gd.trace("Response from remote describe all request:",r)}catch(o){gd.error(`addNode received error from describe all request to remote node: ${o}`);let c=Td.requestErrorHandler(o,"add_node",t);throw vD(new Error,c,BD.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===UD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw vD(new Error,o,BD.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===MD.SYSTEM_SCHEMA_NAME){await Td.createLocalTableStream(c,u);let h=new HD(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=DD.doesSchemaExist(c),l=s[c]!==void 0,d=u?DD.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(gd.trace(`addNode creating schema: ${c}`),await PD.createSchema({operation:"create_schema",schema:c})),!d&&f){gd.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new Gj(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await PD.createTable(h)}await Td.createLocalTableStream(c,u);let E=new HD(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(Vj,"reviewSubscriptions")});var Od=T((q_e,xD)=>{"use strict";var{handleHDBError:Rd,hdb_errors:$j}=j(),{HTTP_STATUS_CODES:Ad}=$j,{addUpdateNodeValidator:Yj}=dd(),eu=G(),GD=y(),FD=ke(),Kj=$(),FS=_t(),tu=fn(),Wj=X(),Qj=qS(),{Node:zj,NodeSubscription:Jj}=Wo(),{broadcast:Xj}=Je(),jj="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Zj="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",eZ=Wj.get(GD.CONFIG_PARAMS.CLUSTERING_NODENAME);xD.exports=tZ;async function tZ(e,t=!1){eu.trace("addNode called with:",e),tu.checkClusteringEnabled();let r=Yj(e);if(r)throw Rd(r,r.message,Ad.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await tu.getNodeRecord(s);if(!Kj.isEmptyOrZeroLength(d))throw Rd(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Ad.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await Qj(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=jj,o;let c=tu.buildNodePayloads(n,eZ,GD.OPERATIONS_ENUM.ADD_NODE,await tu.getSystemInfo());eu.trace("addNode sending remote payload:",c);let u;try{u=await FS.request(`${s}.${FD.REQUEST_SUFFIX}`,c)}catch(d){eu.error(`addNode received error from request: ${d}`);let f=FS.requestErrorHandler(d,"add_node",s);throw Rd(new Error,f,Ad.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===FD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw Rd(new Error,d,Ad.INTERNAL_SERVER_ERROR,"error",d)}eu.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];eu.trace("Add node updating work stream for node:",s,"subscriptions:",E),await FS.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new Jj(E.schema,E.table,E.publish,E.subscribe))}let l=new zj(s,_,u.system_info);return await tu.upsertNodeRecord(l),Xj({type:"nats_update"}),i.length>0?o.message=Zj:o.message=`Successfully added '${s}' to manifest`,o}a(tZ,"addNode")});var xS=T((G_e,$D)=>{"use strict";var{handleHDBError:Nd,hdb_errors:rZ}=j(),{HTTP_STATUS_CODES:bd}=rZ,{addUpdateNodeValidator:sZ}=dd(),ru=G(),VD=y(),kD=ke(),nZ=$(),GS=_t(),su=fn(),iZ=X(),{cloneDeep:oZ}=require("lodash"),aZ=qS(),{NodeSubscription:cZ}=Wo(),{broadcast:uZ}=Je(),lZ="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",_Z="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",dZ=iZ.get(VD.CONFIG_PARAMS.CLUSTERING_NODENAME);$D.exports=fZ;async function fZ(e){ru.trace("updateNode called with:",e),su.checkClusteringEnabled();let t=sZ(e);if(t)throw Nd(t,t.message,bd.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=oZ(await su.getNodeRecord(r));if(nZ.isEmptyOrZeroLength(s))throw Nd(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,bd.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await aZ(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=lZ,o;let c=su.buildNodePayloads(n,dZ,VD.OPERATIONS_ENUM.UPDATE_NODE,await su.getSystemInfo());ru.trace("updateNode sending remote payload:",c);let u;try{u=await GS.request(`${r}.${kD.REQUEST_SUFFIX}`,c)}catch(_){ru.error(`updateNode received error from request: ${_}`);let l=GS.requestErrorHandler(_,"update_node",r);throw Nd(new Error,l,bd.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===kD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw Nd(new Error,_,bd.INTERNAL_SERVER_ERROR,"error",_)}ru.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];ru.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await GS.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await EZ(s[0],n,u.system_info),i.length>0?o.message=_Z:o.message=`Successfully updated '${r}'`,o}a(fZ,"updateNode");async function EZ(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new cZ(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await su.upsertNodeRecord(s),uZ({type:"nats_update"})}a(EZ,"updateNodeTable")});var zD=T((k_e,QD)=>{"use strict";var WD=require("joi"),{string:YD}=WD.types(),hZ=xe(),KD=y(),mZ=X(),pZ=ke();QD.exports=SZ;function SZ(e){let t=YD.invalid(mZ.get(KD.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(pZ.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=WD.object({operation:YD.valid(KD.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return hZ.validateBySchema(e,r)}a(SZ,"removeNodeValidator")});var Id=T(($_e,tU)=>{"use strict";var{handleHDBError:JD,hdb_errors:TZ}=j(),{HTTP_STATUS_CODES:XD}=TZ,gZ=zD(),nu=G(),jD=fn(),RZ=$(),yd=y(),ZD=ke(),eU=_t(),AZ=X(),{RemotePayloadObject:OZ}=Zc(),{NodeSubscription:NZ}=Wo(),bZ=dc(),yZ=Li(),{broadcast:IZ}=Je(),wZ=AZ.get(yd.CONFIG_PARAMS.CLUSTERING_NODENAME);tU.exports=CZ;async function CZ(e){nu.trace("removeNode called with:",e),jD.checkClusteringEnabled();let t=gZ(e);if(t)throw JD(t,t.message,XD.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await jD.getNodeRecord(r);if(RZ.isEmptyOrZeroLength(s))throw JD(new Error,`Node '${r}' was not found.`,XD.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new OZ(yd.OPERATIONS_ENUM.REMOVE_NODE,wZ,[]),i,o=!1;try{i=await eU.request(`${r}.${ZD.REQUEST_SUFFIX}`,n),nu.trace("Remove node reply from remote node:",r,i)}catch(u){nu.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];nu.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new NZ(l.schema,l.table,!1,!1);await eU.updateWorkStream(d,r)}let c=new bZ(yd.SYSTEM_SCHEMA_NAME,yd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await yZ.deleteRecord(c),IZ({type:"nats_update"}),i?.status===ZD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(nu.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(CZ,"removeNode")});var nU=T((K_e,sU)=>{"use strict";var rU=require("joi"),{string:LZ,array:DZ}=rU.types(),UZ=xe(),MZ=dd();sU.exports=PZ;function PZ(e){let t=rU.object({operation:LZ.valid("configure_cluster").required(),connections:DZ.items(MZ.validation_schema).required()});return UZ.validateBySchema(e,t)}a(PZ,"configureClusterValidator")});var kS=T((Q_e,uU)=>{"use strict";var vZ=y(),wd=G(),BZ=$(),HZ=Id(),qZ=Od(),iU=fn(),FZ=nU(),{handleHDBError:oU,hdb_errors:GZ}=j(),{HTTP_STATUS_CODES:aU}=GZ,xZ="Configure cluster complete.",kZ="Failed to configure the cluster. Check the logs for more details.",VZ="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";uU.exports=$Z;async function $Z(e){wd.trace("configure cluster called with:",e),iU.checkClusteringEnabled();let t=FZ(e);if(t)throw oU(t,t.message,aU.BAD_REQUEST,void 0,void 0,!0);let r=await iU.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(cU(HZ,{operation:vZ.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);wd.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(cU(qZ,E,E.node_name))}let c=await Promise.allSettled(i);wd.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(wd.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:xZ,connections:_};if(l)return{message:VZ,failed_nodes:u,connections:_};throw oU(new Error,kZ,aU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a($Z,"configureCluster");async function cU(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(cU,"functionWrapper")});var _U=T((J_e,lU)=>{"use strict";var Cd=require("joi"),YZ=xe(),{validateSchemaExists:KZ,validateTableExists:WZ,validateSchemaName:QZ}=Ls(),zZ=Cd.object({operation:Cd.string().valid("purge_stream"),schema:Cd.string().custom(KZ).custom(QZ).required(),table:Cd.string().custom(WZ).required()});function JZ(e){return YZ.validateBySchema(e,zZ)}a(JZ,"purgeStreamValidator");lU.exports=JZ});var VS=T((j_e,dU)=>{"use strict";var{handleHDBError:XZ,hdb_errors:jZ}=j(),{HTTP_STATUS_CODES:ZZ}=jZ,e5=_U(),t5=_t(),r5=fn();dU.exports=s5;async function s5(e){let t=e5(e);if(t)throw XZ(t,t.message,ZZ.BAD_REQUEST,void 0,void 0,!0);r5.checkClusteringEnabled();let{schema:r,table:s}=e;return await t5.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(s5,"purgeStream")});var KS=T((ede,SU)=>{"use strict";var YS=fn(),n5=_t(),hU=X(),Ld=y(),xi=ke(),i5=$(),$S=G(),{RemotePayloadObject:o5}=Zc(),{ErrorCode:fU}=require("nats"),EU=hU.get(Ld.CONFIG_PARAMS.CLUSTERING_ENABLED),mU=hU.get(Ld.CONFIG_PARAMS.CLUSTERING_NODENAME);SU.exports={clusterStatus:a5,buildNodeStatus:pU};async function a5(){let e={node_name:mU,is_enabled:EU,connections:[]};if(!EU)return e;let t=await YS.getAllNodeRecords();if(i5.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(pU(t[s],e.connections));return await Promise.allSettled(r),e}a(a5,"clusterStatus");async function pU(e,t){let r=e.name,s=new o5(Ld.OPERATIONS_ENUM.CLUSTER_STATUS,mU,void 0,await YS.getSystemInfo()),n,i,o=xi.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await n5.request(xi.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===xi.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=xi.CLUSTER_STATUS_STATUSES.CLOSED,$S.error(`Error getting node status from ${r} `,n))}catch(u){$S.warn(`Error getting node status from ${r}`,u),u.code===fU.NoResponders?o=xi.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===fU.Timeout?o=xi.CLUSTER_STATUS_STATUSES.TIMEOUT:o=xi.CLUSTER_STATUS_STATUSES.CLOSED}let c=new c5(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Ld.PRE_4_0_0_VERSION&&await YS.upsertNodeRecord(u)}catch(u){$S.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(pU,"buildNodeStatus");function c5(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(c5,"NodeStatusObject")});var QS=T((rde,TU)=>{"use strict";var{handleHDBError:u5,hdb_errors:l5}=j(),{HTTP_STATUS_CODES:_5}=l5,d5=_t(),f5=fn(),WS=$(),Dd=require("joi"),E5=xe(),h5=2e3,m5=Dd.object({timeout:Dd.number().min(1),connected_nodes:Dd.boolean(),routes:Dd.boolean()});TU.exports=p5;async function p5(e){f5.checkClusteringEnabled();let t=E5.validateBySchema(e,m5);if(t)throw u5(t,t.message,_5.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||WS.autoCastBoolean(s),o=n===void 0||WS.autoCastBoolean(n),c={nodes:[]},u=await d5.getServerList(r??h5),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:WS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(p5,"clusterNetwork")});var OU=T((nde,AU)=>{"use strict";var zS=require("joi"),gU=xe(),{route_constraints:RU}=$m();AU.exports={setRoutesValidator:S5,deleteRoutesValidator:T5};function S5(e){let t=zS.object({server:zS.valid("hub","leaf").required(),routes:RU.required()});return gU.validateBySchema(e,t)}a(S5,"setRoutesValidator");function T5(e){let t=zS.object({routes:RU.required()});return gU.validateBySchema(e,t)}a(T5,"deleteRoutesValidator")});var XS=T((ode,IU)=>{"use strict";var ki=Rr(),JS=$(),Ud=y(),NU=OU(),{handleHDBError:bU,hdb_errors:g5}=j(),{HTTP_STATUS_CODES:yU}=g5,R5="cluster routes successfully set",A5="cluster routes successfully deleted";IU.exports={setRoutes:O5,getRoutes:N5,deleteRoutes:b5};function O5(e){let t=NU.setRoutesValidator(e);if(t)throw bU(t,t.message,yU.BAD_REQUEST,void 0,void 0,!0);let r=ki.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=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=JS.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?ki.updateConfigValue(Ud.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):ki.updateConfigValue(Ud.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:R5,set:o,skipped:i}}a(O5,"setRoutes");function N5(){let e=ki.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(N5,"getRoutes");function b5(e){let t=NU.deleteRoutesValidator(e);if(t)throw bU(t,t.message,yU.BAD_REQUEST,void 0,void 0,!0);let r=ki.getClusteringRoutes(),s=r.hub_routes,n=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=s.length;E<h;E++){let p=s[E];if(d.host===p.host&&d.port===p.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=n.length;h<p;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=JS.isEmptyOrZeroLength(s)?null:s,ki.updateConfigValue(Ud.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=JS.isEmptyOrZeroLength(n)?null:n,ki.updateConfigValue(Ud.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:A5,deleted:i,skipped:o}}a(b5,"deleteRoutes")});var CU=T((cde,wU)=>{"use strict";var iu=require("alasql"),Vi=require("recursive-iterator"),gs=G(),y5=$(),ou=y(),jS=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,w5(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(n=>ou.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!ou.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.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=I5(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 iu.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function I5(e){return e.filter(t=>t[ou.PERMS_CRUD_ENUM.READ])}a(I5,"filterReadRestrictedAttrs");function w5(e,t,r,s,n){C5(e,t,r,s,n)}a(w5,"interpretAST");function au(e,t,r,s,n){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),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(au,"addSchemaTableToMap");function C5(e,t,r,s,n){if(!e){gs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof iu.yy.Insert?M5(e,t,r):e instanceof iu.yy.Select?L5(e,t,r,s,n):e instanceof iu.yy.Update?D5(e,t,r):e instanceof iu.yy.Delete?U5(e,t,r):gs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(C5,"getRecordAttributesAST");function L5(e,t,r,s,n){if(!e){gs.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(y5.isEmptyOrZeroLength(i)){gs.error("No schema specified");return}e.from.forEach(c=>{au(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),au(c.table,t,r,s,n)});let o=new Vi(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{gs.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 Vi(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{gs.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 Vi(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{gs.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 Vi(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{gs.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(L5,"getSelectAttributes");function D5(e,t,r){if(!e){gs.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Vi(e.columns),n=e.table.databaseid;au(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&ZS(e.table.tableid,n,i.columnid,t,r)}a(D5,"getUpdateAttributes");function U5(e,t,r){if(!e){gs.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Vi(e.where),n=e.table.databaseid;au(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&ZS(e.table.tableid,n,i.columnid,t,r)}a(U5,"getDeleteAttributes");function M5(e,t,r){if(!e){gs.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Vi(e.columns),n=e.into.databaseid;au(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&ZS(e.into.tableid,n,i.columnid,t,r)}a(M5,"getInsertAttributes");function ZS(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(ZS,"pushAttribute");wU.exports=jS});var rT=T((lde,MU)=>{var Md=Ac(),LU=require("chalk"),Cr=G(),DU=require("prompt"),{promisify:P5}=require("util"),eT=y(),v5=require("fs-extra"),B5=require("path"),H5=$(),q5=BS(),UU=X();UU.initSync();var F5=require("moment"),G5=P5(DU.get),x5=B5.join(UU.getHdbBasePath(),eT.LICENSE_KEY_DIR_NAME,eT.LICENSE_FILE_NAME,eT.LICENSE_FILE_NAME);MU.exports={getFingerprint:V5,setLicense:k5,parseLicense:tT,register:$5,getRegistrationInfo:K5};async function k5(e){if(e&&e.key&&e.company){try{Cr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await tT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Cr.error(r),Cr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(k5,"setLicense");async function V5(){let e={};try{e=await Md.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Cr.error(r),Cr.error(t),new Error(r)}return e}a(V5,"getFingerprint");async function tT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Cr.info("Validating license input...");let r=Md.validateLicense(e,t);if(Cr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Cr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Cr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Cr.info("writing license to disk"),await v5.writeFile(x5,JSON.stringify({license_key:e,company:t}))}catch(s){throw Cr.error("Failed to write License"),s}return"Registration successful."}a(tT,"parseLicense");async function $5(){let e=await Y5();return tT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a($5,"register");async function Y5(){let e=await Md.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:LU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:LU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{DU.start()}catch(s){Cr.error(s)}let r;try{r=await G5(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(Y5,"promptForRegistration");async function K5(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Md.getLicense()}catch(r){throw Cr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(H5.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=q5.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=F5.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(K5,"getRegistrationInfo")});var vU=T((dde,PU)=>{"use strict";var W5=ke(),sT=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+W5.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};PU.exports=sT});var qU=T((Ede,HU)=>{"use strict";var BU=ke(),nT=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+BU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+BU.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"}};HU.exports=nT});var GU=T((mde,FU)=>{"use strict";var iT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};FU.exports=iT});var kU=T((Sde,xU)=>{"use strict";var Q5=ke(),oT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Q5.SERVER_SUFFIX.ADMIN,this.password=r}};xU.exports=oT});var uT=T((gde,YU)=>{"use strict";var zo=require("path"),Bd=require("fs-extra"),z5=vU(),J5=qU(),X5=GU(),j5=kU(),aT=xr(),Xo=$(),ir=Rr(),vd=y(),cu=ke(),{CONFIG_PARAMS:Ze}=vd,uu=G(),lu=X(),VU=cn(),cT=_t(),Jo="clustering",Z5=1e4,$U=5;YU.exports={generateNatsConfig:t8,removeNatsConfig:r8,getHubConfigPath:e8};function e8(){let e=lu.get(Ze.ROOTPATH);return zo.join(e,Jo,cu.NATS_CONFIG_FILES.HUB_SERVER)}a(e8,"getHubConfigPath");async function t8(e=!1,t=void 0){lu.initSync();let r=lu.get(Ze.ROOTPATH),s=zo.join(r,Jo,cu.PID_FILES.HUB),n=zo.join(r,Jo,cu.PID_FILES.LEAF),i=ir.getConfigFromFile(Ze.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=zo.join(r,Jo,cu.NATS_CONFIG_FILES.HUB_SERVER),c=zo.join(r,Jo,cu.NATS_CONFIG_FILES.LEAF_SERVER),u=ir.getConfigFromFile(Ze.CLUSTERING_TLS_CERTIFICATE),_=ir.getConfigFromFile(Ze.CLUSTERING_TLS_PRIVATEKEY),l=ir.getConfigFromFile(Ze.CLUSTERING_TLS_CERT_AUTH),d=ir.getConfigFromFile(Ze.CLUSTERING_TLS_INSECURE),f=ir.getConfigFromFile(Ze.CLUSTERING_TLS_VERIFY),E=ir.getConfigFromFile(Ze.CLUSTERING_NODENAME),h=ir.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await cT.checkNATSServerInstalled()||Hd("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await aT.listUsers(),S=ir.getConfigFromFile(Ze.CLUSTERING_USER),R=await aT.getClusterUser();(Xo.isEmpty(R)||R.active!==!0)&&Hd(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Pd(Ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Pd(Ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Pd(Ze.CLUSTERING_HUBSERVER_NETWORK_PORT),await Pd(Ze.CLUSTERING_LEAFSERVER_NETWORK_PORT));let b=[],O=[];for(let[x,te]of p.entries())te.role.role===vd.ROLE_TYPES_ENUM.CLUSTER_USER&&te.active&&(b.push(new j5(te.username,VU.decrypt(te.hash))),O.push(new X5(te.username,VU.decrypt(te.hash))));let Y=[],{hub_routes:Q}=ir.getClusteringRoutes();if(!Xo.isEmptyOrZeroLength(Q))for(let x of Q)Y.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${x.host}:${x.port}`);let F=new z5(ir.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,ir.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_CLUSTER_NAME),ir.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Y,b,O);l==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=Xo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===vd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Bd.writeJson(o,F),uu.trace(`Hub server config written to ${o}`));let w=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new J5(ir.getConfigFromFile(Ze.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[w],[K],b,O,u,_,l,d);l==null&&delete B.tls.ca_file,(t===void 0||t===vd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Bd.writeJson(c,B),uu.trace(`Leaf server config written to ${c}`))}a(t8,"generateNatsConfig");async function Pd(e){let t=lu.get(e);return Xo.isEmpty(t)&&Hd(`port undefined for '${e}'`),await Xo.isPortTaken(t)&&Hd(`'${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(Pd,"isPortAvailable");function Hd(e){let t=`Error generating clustering config: ${e}`;uu.error(t),console.error(t),process.exit(1)}a(Hd,"generateNatsConfigError");async function r8(e){let{port:t,config_file:r}=cT.getServerConfig(e),{username:s,decrypt_hash:n}=await aT.getClusterUser(),i=0,o=2e3;for(;i<$U;){try{let _=await cT.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){uu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=$U)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 Xo.async_set_timeout(o*(i*2))}let c="0".repeat(Z5),u=zo.join(lu.get(Ze.ROOTPATH),Jo,r);await Bd.writeFile(u,c),await Bd.remove(u),uu.notify(e,"started.")}a(r8,"removeNatsConfig")});var XU=T((Ade,JU)=>{"use strict";var Lr=X(),s8=Ac(),ce=y(),_u=ke(),En=require("path"),{PACKAGE_ROOT:Fd}=y(),KU=X(),qd=$(),jo="/dev/null",n8=En.join(Fd,"launchServiceScripts"),WU=En.join(Fd,"utility/scripts"),i8=En.join(WU,ce.HDB_RESTART_SCRIPT),QU=En.resolve(Fd,"dependencies",`${process.platform}-${process.arch}`,_u.NATS_BINARY_NAME);function zU(){let t=s8.licenseSearch().ram_allocation||ce.RAM_ALLOCATION_ENUM.DEFAULT,r=ce.MEM_SETTING_KEY+t,s={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return qd.noBootFile()&&(s[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=qd.getEnvCliRootPath()),{name:ce.PROCESS_DESCRIPTORS.HDB,script:ce.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:Fd}}a(zU,"generateMainServerConfig");var o8=9930;function a8(){Lr.initSync(!0);let e=Lr.get(ce.CONFIG_PARAMS.ROOTPATH),t=En.join(e,"clustering",_u.NATS_CONFIG_FILES.HUB_SERVER),r=En.join(Lr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=KU.get(ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=_u.LOG_LEVEL_FLAGS[Lr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==o8?"-"+s:""),script:QU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Lr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=jo,i.error_file=jo),i}a(a8,"generateNatsHubServerConfig");var c8=9940;function u8(){Lr.initSync(!0);let e=Lr.get(ce.CONFIG_PARAMS.ROOTPATH),t=En.join(e,"clustering",_u.NATS_CONFIG_FILES.LEAF_SERVER),r=En.join(Lr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=KU.get(ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=_u.LOG_LEVEL_FLAGS[Lr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==c8?"-"+s:""),script:QU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Lr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=jo,i.error_file=jo),i}a(u8,"generateNatsLeafServerConfig");function l8(){Lr.initSync();let e=En.join(Lr.get(ce.CONFIG_PARAMS.LOGGING_ROOT),ce.LOG_NAMES.HDB),t={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ce.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:n8,autorestart:!1};return Lr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=jo,t.error_file=jo),t}a(l8,"generateClusteringUpgradeV4ServiceConfig");function _8(){let e={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.RESTART_HDB};return qd.noBootFile()&&(e[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=qd.getEnvCliRootPath()),{...{name:ce.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:WU},script:i8}}a(_8,"generateRestart");function d8(){return{apps:[zU()]}}a(d8,"generateAllServiceConfigs");JU.exports={generateAllServiceConfigs:d8,generateMainServerConfig:zU,generateRestart:_8,generateNatsHubServerConfig:a8,generateNatsLeafServerConfig:u8,generateClusteringUpgradeV4ServiceConfig:l8}});var _M=T((bde,lM)=>{"use strict";var Ae=y(),f8=$(),hn=uT(),du=_t(),ks=ke(),ti=XU(),Gd=X(),ri=G(),E8=fn(),{startWorker:jU,onMessageFromWorkers:h8}=Je(),m8=Qo(),Nde=require("util"),p8=require("child_process"),S8=require("fs"),{execFile:T8}=p8,pe;lM.exports={enterPM2Mode:g8,start:si,stop:lT,reload:eM,restart:tM,list:_T,describe:sM,connect:mn,kill:b8,startAllServices:y8,startService:dT,getUniqueServicesList:nM,restartAllServices:I8,isServiceRegistered:iM,reloadStopStart:oM,restartHdb:rM,deleteProcess:O8,startClusteringProcesses:cM,startClusteringThreads:uM,isHdbRestartRunning:N8,isClusteringRunning:C8,stopClustering:w8,reloadClustering:L8};var fu=!1;h8(e=>{e.type==="restart"&&Gd.initSync(!0)});function g8(){fu=!0}a(g8,"enterPM2Mode");function mn(){return pe||(pe=require("pm2")),new Promise((e,t)=>{pe.connect((r,s)=>{ri.setupConsoleLogging(),r&&t(r),e(s)})})}a(mn,"connect");var or,R8=10,ZU;function si(e,t=!1){if(fu)return A8(e);let r=T8(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=or.indexOf(r);o>-1&&or.splice(o,1),!ZU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<R8&&(S8.existsSync(hn.getHubConfigPath())?si(e):(await hn.generateNatsConfig(!0),si(e),await new Promise(c=>setTimeout(c,3e3)),await hn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await hn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=Gd.get(Ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&ks.LOG_LEVEL_HIERARCHY[o]>=ks.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===ks.LOG_LEVELS.ERR||l===ks.LOG_LEVELS.WRN?ri.OUTPUTS.STDERR:ri.OUTPUTS.STDOUT;ri.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=ks.LOG_LEVELS[f]}if(ks.LOG_LEVEL_HIERARCHY[o]>=ks.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===ks.LOG_LEVELS.ERR||l===ks.LOG_LEVELS.WRN?ri.OUTPUTS.STDERR:ri.OUTPUTS.STDOUT;ri.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),or=[],!or&&!t){let i=a(()=>{ZU=!0,or&&(or.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)}or.push(r)}a(si,"start");function A8(e){return new Promise(async(t,r)=>{try{await mn()}catch(s){r(s)}pe.start(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(A8,"startWithPM2");function lT(e){if(!fu){for(let t of or||[])t.name===e&&(or.splice(or.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await mn()}catch(s){r(s)}pe.stop(e,async(s,n)=>{s&&(pe.disconnect(),r(s)),pe.delete(e,(i,o)=>{i&&(pe.disconnect(),r(s)),pe.disconnect(),t(o)})})})}a(lT,"stop");function eM(e){return new Promise(async(t,r)=>{try{await mn()}catch(s){r(s)}pe.reload(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(eM,"reload");function tM(e){if(!fu)for(let t of or||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await mn()}catch(s){r(s)}pe.restart(e,(s,n)=>{pe.disconnect(),t(n)})})}a(tM,"restart");function O8(e){return new Promise(async(t,r)=>{try{await mn()}catch(s){r(s)}pe.delete(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(O8,"deleteProcess");async function rM(){await si(ti.generateRestart())}a(rM,"restartHdb");async function N8(){let e=await _T();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(N8,"isHdbRestartRunning");function _T(){return new Promise(async(e,t)=>{try{await mn()}catch(r){t(r)}pe.list((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(_T,"list");function sM(e){return new Promise(async(t,r)=>{try{await mn()}catch(s){r(s)}pe.describe(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(sM,"describe");function b8(){if(!fu){for(let e of or||[])e.kill();or=[];return}return new Promise(async(e,t)=>{try{await mn()}catch(r){t(r)}pe.killDaemon((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(b8,"kill");async function y8(){try{await cM(),await uM(),await si(ti.generateAllServiceConfigs())}catch(e){throw pe?.disconnect(),e}}a(y8,"startAllServices");async function dT(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ae.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=ti.generateMainServerConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=ti.generateNatsIngestServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=ti.generateNatsReplyServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=ti.generateNatsHubServerConfig(),await si(r,t),await hn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=ti.generateNatsLeafServerConfig(),await si(r,t),await hn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=ti.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await si(r)}catch(r){throw pe?.disconnect(),r}}a(dT,"startService");async function nM(){try{let e=await _T(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw pe?.disconnect(),e}}a(nM,"getUniqueServicesList");async function I8(e=[]){try{let t=!1,r=await nM();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ae.PROCESS_DESCRIPTORS.HDB?t=!0:await tM(o))}t&&await oM(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw pe?.disconnect(),t}}a(I8,"restartAllServices");async function iM(e){if(or?.find(r=>r.name===e))return!0;let t=await m8.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(iM,"isServiceRegistered");async function oM(e){let t=e===Ae.PROCESS_DESCRIPTORS.HDB?Gd.get(Ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):Gd.get(Ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await sM(e),s=f8.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await lT(e),await dT(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await rM():await eM(e)}a(oM,"reloadStopStart");var aM;async function cM(e=!1){for(let t in Ae.CLUSTERING_PROCESSES){let r=Ae.CLUSTERING_PROCESSES[t];await dT(r,e)}}a(cM,"startClusteringProcesses");async function uM(){aM=jU(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await du.createWorkQueueStream(ks.WORK_QUEUE_CONSUMER_NAMES),await du.updateIngestStreamConsumer(),await du.updateLocalStreams();let e=await E8.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ae.PRE_4_0_0_VERSION){ri.info("Starting clustering upgrade 4.0.0 process"),jU(Ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(uM,"startClusteringThreads");async function w8(){for(let e in Ae.CLUSTERING_PROCESSES)if(e!==Ae.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ae.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await aM.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await lT(t)}}a(w8,"stopClustering");async function C8(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await iM(t)===!1)return!1}return!0}a(C8,"isClusteringRunning");async function L8(){await hn.generateNatsConfig(!0),await du.reloadNATSHub(),await du.reloadNATSLeaf(),await hn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await hn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(L8,"reloadClustering")});var $d=T((Ide,SM)=>{"use strict";var D8=require("minimist"),{isMainThread:hT,parentPort:EM}=require("worker_threads"),Ke=y(),{PROCESS_DESCRIPTORS_VALIDATE:Eu}=Ke,Vs=G(),mT=$(),xd=uT(),Zo=_t(),fT=ke(),hM=Rr(),$s=_M(),dM=Qo(),U8=TE(),{restartWorkers:kd,onMessageByType:M8}=Je(),{handleHDBError:P8,hdb_errors:v8}=j(),{HTTP_STATUS_CODES:B8}=v8,Vd=X();Vd.initSync();var hu=`Restarting HarperDB. This may take up to ${Ke.RESTART_TIMEOUT_MS/1e3} seconds.`,H8="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",fM="Clustering is not enabled so cannot be restarted",q8="Invalid service",ea,Kr;SM.exports={restart:mM,restartService:pT};hT&&M8(Ke.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?pT({service:e.workerType}):mM({operation:"restart"})});async function mM(e){Kr=Object.keys(e).length===0,ea=await $s.isServiceRegistered(Ke.HDB_PROC_DESCRIPTOR);let t=D8(process.argv);if(t.service){await pT(t);return}if(Kr&&!ea){console.error(H8);return}if(Kr&&console.log(hu),ea){$s.enterPM2Mode(),Vs.notify(hu);let r=U8(Object.keys(Ke.CONFIG_PARAM_MAP),!0);return mT.isEmptyOrZeroLength(Object.keys(r))||hM.updateConfigValue(void 0,void 0,r,!0,!0),G8(),hu}return hT?(Vs.notify(hu),setTimeout(()=>{kd()},50)):EM.postMessage({type:Ke.ITC_EVENT_TYPES.RESTART}),hu}a(mM,"restart");async function pT(e){let{service:t}=e;if(Ke.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw P8(new Error,q8,B8.BAD_REQUEST,void 0,void 0,!0);if(ea=await $s.isServiceRegistered(Ke.HDB_PROC_DESCRIPTOR),!hT)return EM.postMessage({type:Ke.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Eu.clustering:if(!Vd.get(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=fM;break}Kr&&console.log("Restarting clustering"),Vs.notify("Restarting clustering"),await pM();break;case Eu.clustering_config:case Eu["clustering config"]:if(!Vd.get(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=fM;break}Kr&&console.log("Restarting clustering_config"),Vs.notify("Restarting clustering_config"),await $s.reloadClustering();break;case"custom_functions":case"custom functions":case Eu.harperdb:case Eu.http_workers:if(Kr&&!ea){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}Kr&&console.log("Restarting http_workers"),Vs.notify("Restarting http_workers"),Kr?await $s.restart(Ke.HDB_PROC_DESCRIPTOR):setTimeout(()=>{kd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Vs.error(r),Kr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(pT,"restartService");async function F8(){await Zo.publishToStream(`${fT.SUBJECT_PREFIXES.TXN}.${fT.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,fT.WORK_QUEUE_CONSUMER_NAMES.stream_name,Zo.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(F8,"postDummyNatsMsg");async function G8(){await pM(),await $s.restart(Ke.HDB_PROC_DESCRIPTOR),await mT.async_set_timeout(2e3),Vd.get(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await ET(),Kr&&(await Zo.closeConnection(),process.exit(0))}a(G8,"restartPM2Mode");async function pM(){if(!hM.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await dM.getHDBProcessInfo()).clustering.length===0)Vs.trace("Clustering not running, restart will start clustering services"),await xd.generateNatsConfig(!0),await $s.startClusteringProcesses(),await $s.startClusteringThreads(),await ET(),Kr&&await Zo.closeConnection();else{await F8(),await xd.generateNatsConfig(!0),ea?(Vs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await $s.restart(Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await $s.restart(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await dM.getHDBProcessInfo()).clustering.forEach(n=>{Vs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await mT.async_set_timeout(3e3),await ET(),await Zo.updateLocalStreams(),Kr&&await Zo.closeConnection(),Vs.trace("Restart clustering restarting ingest and reply service threads");let t=kd(Ke.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=kd(Ke.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(pM,"restartClustering");async function ET(){await xd.removeNatsConfig(Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await xd.removeNatsConfig(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(ET,"removeNatsConfig")});var CM=T((Lde,wM)=>{"use strict";var Cde=require("lodash"),ar=y(),{handleHDBError:TM,hdb_errors:x8}=j(),{HDB_ERROR_MSGS:k8,HTTP_STATUS_CODES:V8}=x8,ST=G();wM.exports={getRolePermissions:Y8};var $i=Object.create(null),$8=a(e=>({key:e,perms:{}}),"perms_template_obj"),OM=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),NM=a((e=!1,t=!1,r=!1,s=!1)=>({[ar.PERMS_CRUD_ENUM.READ]:e,[ar.PERMS_CRUD_ENUM.INSERT]:t,[ar.PERMS_CRUD_ENUM.UPDATE]:r,[ar.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),TT=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...NM(t,r,s,n)}),"table_perms_template"),gM=a((e,t=NM())=>({attribute_name:e,describe:IM(t),[mu]:t[mu],[gT]:t[gT],[RT]:t[RT]}),"attr_perms_template"),RM=a((e,t=!1)=>({attribute_name:e,describe:t,[mu]:t}),"timestamp_attr_perms_template"),{READ:mu,INSERT:gT,UPDATE:RT}=ar.PERMS_CRUD_ENUM,bM=Object.values(ar.PERMS_CRUD_ENUM),yM=[mu,gT,RT];function Y8(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[ar.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if($i[t]&&$i[t].key===s)return $i[t].perms;let n=K8(e,r);return $i[t]?$i[t].key=s:$i[t]=$8(s),$i[t].perms=n,n}catch(r){if(!e[ar.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[ar.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<ar.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw ST.error(s),ST.debug(r),TM(new Error,k8.OUTDATED_PERMS_TRANSLATION_ERROR,V8.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
9
- ${r.stack}`;throw ST.error(s),TM(new Error)}}}a(Y8,"getRolePermissions");function K8(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[ar.SYSTEM_SCHEMA_NAME]=s[ar.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=W8(t[i]);return}r[i]=OM(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=Q8(c,u);r[i].describe||bM.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=TT()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=TT()})}),r}a(K8,"translateRolePermissions");function W8(e){let t=OM(!0);return Object.keys(e).forEach(r=>{t.tables[r]=TT(!0,!0,!0,!0,!0)}),t}a(W8,"createStructureUserPermissions");function Q8(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return ar.TIME_STAMP_NAMES.includes(d)&&(f=RM(d,l[mu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=gM(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=IM(l),n.attribute_permissions.push(l),c||z8(l,u)}else if(_!==o){let l;ar.TIME_STAMP_NAMES.includes(_)?l=RM(_):l=gM(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=AM(n),n}else return e.describe=AM(e),e}a(Q8,"getTableAttrPerms");function AM(e){return bM.filter(t=>e[t]).length>0}a(AM,"getSchemaTableDescribePerm");function IM(e){return yM.filter(t=>e[t]).length>0}a(IM,"getAttributeDescribePerm");function z8(e,t){yM.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(z8,"checkForHashPerms")});var LM={};ve(LM,{Headers:()=>ni});var ni,Yd=Te(()=>{ni=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 s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];s?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var pu={};ve(pu,{authentication:()=>qM,bypassAuth:()=>r6,login:()=>n6,logout:()=>i6,start:()=>s6});function r6(){HM=!0}async function qM(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?Z8?j8:[]:X8?J8:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new ni([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Kd&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Kd&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Kd){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let p=n.indexOf(";",h),S=n.indexOf("=",h);u=n.slice(S+1,p===-1?n.length:p),_=await UM.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new Qd.AuthAuditLog(E,h,Ct.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===Ct.AUTH_AUDIT_STATUS.SUCCESS?DM.notify(S):DM.error(S)},"authAuditLog"),d;if(s){if(d=Yi.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await ct.getUser(p,S):null;break;case"Bearer":try{d=await(0,Wd.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,Wd.validateRefreshToken)(h),c({status:-1})}catch{throw R}}break}}catch(R){return t6&&(Yi.get(h)||(Yi.set(h,h),l(p,Ct.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:ii({error:R.message},e)})}Yi.set(s,d),e6&&l(d.username,Ct.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await ct.getUser(_.user,null,!1):HM&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,PM.getSuperUser)());Kd&&(e.session.update=function(E){if(!u){u=(0,vM.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.id=u,UM.put(E)},e.login=async function(E,h){e.user=await ct.getUser(E,h),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")&&Bn.loginPath?(f.status=302,f.headers.set("Location",Bn.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 ni);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function s6({server:e,port:t}){e.request(qM,{port:t||"all"}),MM||(MM=!0,setInterval(()=>{Yi=new Map},Wr.get(Ct.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),BM.user.addListener(()=>{Yi=new Map}))}async function n6(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 i6(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var PM,Wd,vM,Wr,Ct,Qd,BM,DM,J8,X8,j8,Z8,UM,Kd,HM,e6,t6,Yi,MM,zd=Te(()=>{PM=D(xr());fr();Ga();Wd=D(jc());fe();vM=require("uuid"),Wr=D(X()),Ct=D(y()),Qd=D(G()),BM=D(Nc());Yd();ta();DM=(0,Qd.loggerWithTag)("auth-event");Wr.initSync();J8=Wr.get(Ct.CONFIG_PARAMS.HTTP_CORSACCESSLIST),X8=Wr.get(Ct.CONFIG_PARAMS.HTTP_CORS),j8=Wr.get(Ct.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Z8=Wr.get(Ct.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),UM=tt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Kd=Wr.get(Ct.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,HM=Wr.get(Ct.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,e6=Wr.get(Ct.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,t6=Wr.get(Ct.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Yi=new Map;ct.onInvalidatedUser(()=>{Yi=new Map});a(r6,"bypassAuth");a(qM,"authentication");a(s6,"start");a(n6,"login");a(i6,"logout")});var YM=T((Fde,$M)=>{"use strict";var Se=require("joi"),FM=require("fs-extra"),GM=require("path"),Sn=xe(),xM=X(),kM=y(),VM=G(),{hdb_errors:o6}=j(),{HDB_ERROR_MSGS:Vt}=o6,pn=/^[a-zA-Z0-9-_]+$/;$M.exports={getDropCustomFunctionValidator:c6,setCustomFunctionValidator:u6,addComponentValidator:f6,dropCustomFunctionProjectValidator:E6,packageComponentValidator:h6,deployComponentValidator:m6,setComponentFileValidator:l6,getComponentFileValidator:d6,dropComponentFileValidator:_6};function Jd(e,t,r){try{let s=xM.get(kM.CONFIG_PARAMS.COMPONENTSROOT),n=GM.join(s,t);return FM.existsSync(n)?e?t:r.message(Vt.PROJECT_EXISTS):e?r.message(Vt.NO_PROJECT):t}catch(s){return VM.error(s),r.message(Vt.VALIDATION_ERR)}}a(Jd,"checkProjectExists");function Su(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Su,"checkFilePath");function a6(e,t,r,s){try{let n=xM.get(kM.CONFIG_PARAMS.COMPONENTSROOT),i=GM.join(n,e,t,r+".js");return FM.existsSync(i)?r:s.message(Vt.NO_FILE)}catch(n){return VM.error(n),s.message(Vt.VALIDATION_ERR)}}a(a6,"checkFileExists");function c6(e){let t=Se.object({project:Se.string().pattern(pn).custom(Jd.bind(null,!0)).required().messages({"string.pattern.base":Vt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().pattern(pn).custom(a6.bind(null,e.project,e.type)).custom(Su).required().messages({"string.pattern.base":Vt.BAD_FILE_NAME})});return Sn.validateBySchema(e,t)}a(c6,"getDropCustomFunctionValidator");function u6(e){let t=Se.object({project:Se.string().pattern(pn).custom(Jd.bind(null,!0)).required().messages({"string.pattern.base":Vt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().custom(Su).required(),function_content:Se.string().required()});return Sn.validateBySchema(e,t)}a(u6,"setCustomFunctionValidator");function l6(e){let t=Se.object({project:Se.string().pattern(pn).required().messages({"string.pattern.base":Vt.BAD_PROJECT_NAME}),file:Se.string().custom(Su).required(),payload:Se.string().allow("").optional(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Sn.validateBySchema(e,t)}a(l6,"setComponentFileValidator");function _6(e){let t=Se.object({project:Se.string().pattern(pn).required().messages({"string.pattern.base":Vt.BAD_PROJECT_NAME}),file:Se.string().custom(Su).optional()});return Sn.validateBySchema(e,t)}a(_6,"dropComponentFileValidator");function d6(e){let t=Se.object({project:Se.string().required(),file:Se.string().custom(Su).required(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Sn.validateBySchema(e,t)}a(d6,"getComponentFileValidator");function f6(e){let t=Se.object({project:Se.string().pattern(pn).custom(Jd.bind(null,!1)).required().messages({"string.pattern.base":Vt.BAD_PROJECT_NAME})});return Sn.validateBySchema(e,t)}a(f6,"addComponentValidator");function E6(e){let t=Se.object({project:Se.string().pattern(pn).custom(Jd.bind(null,!0)).required().messages({"string.pattern.base":Vt.BAD_PROJECT_NAME})});return Sn.validateBySchema(e,t)}a(E6,"dropCustomFunctionProjectValidator");function h6(e){let t=Se.object({project:Se.string().pattern(pn).required().messages({"string.pattern.base":Vt.BAD_PROJECT_NAME}),skip_node_modules:Se.boolean()});return Sn.validateBySchema(e,t)}a(h6,"packageComponentValidator");function m6(e){let t=Se.object({project:Se.string().pattern(pn).required().messages({"string.pattern.base":Vt.BAD_PROJECT_NAME}),payload:Se.string().optional().messages({"string.pattern.base":Vt.BAD_PACKAGE}),package:Se.string().optional()});return Sn.validateBySchema(e,t)}a(m6,"deployComponentValidator")});var ef=T((xde,jM)=>{"use strict";var Xd=require("joi"),jd=require("path"),KM=require("fs-extra"),{exec:p6}=require("child_process"),S6=require("util"),WM=S6.promisify(p6),Tu=y(),{handleHDBError:ra,hdb_errors:T6}=j(),{HTTP_STATUS_CODES:sa}=T6,gu=X(),g6=xe(),na=G();gu.initSync();var AT=gu.get(Tu.CONFIG_PARAMS.COMPONENTSROOT),QM="npm install --omit=dev --json",R6=`${QM} --dry-run`;jM.exports={installModules:b6,auditModules:y6,installAllRootModules:A6,uninstallRootModule:O6,linkHarperdb:N6};async function A6(e=!1){await Zd(),await Ru(e?"npm install --ignore-scripts":"npm install",gu.get(Tu.CONFIG_PARAMS.ROOTPATH))}a(A6,"installAllRootModules");async function O6(e){await Ru(`npm uninstall ${e}`,gu.get(Tu.CONFIG_PARAMS.ROOTPATH))}a(O6,"uninstallRootModule");async function N6(){await Zd(),await Ru(`npm link ${Tu.PACKAGE_ROOT}`,gu.get(Tu.CONFIG_PARAMS.ROOTPATH))}a(N6,"linkHarperdb");async function Ru(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await WM(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
8
+ `,"")}a(oL,"runCommand");async function H4(){try{await h4.access(Gp)}catch{return!1}let e=await oL(`${Gp} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return m4.eq(t,v4)}a(H4,"checkNATSServerInstalled");async function $p(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await rL.getClusterUser();if(qi(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Yr.trace("create nats connection called");let i=await I4({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:wt.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:wt.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:wt.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Yr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a($p,"createConnection");async function q4(){gs&&(await gs.drain(),gs=void 0,Bo=void 0,Ho=void 0,qo=void 0)}a(q4,"closeConnection");var gs,qo;async function td(){return qo||(qo=$p(wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),gs=await qo),gs||qo}a(td,"getConnection");async function Kc(){if(Bo)return Bo;qi(gs)&&await td();let{domain:e}=Wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(qi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Bo=await gs.jetstreamManager({domain:e,timeout:6e4}),Bo}a(Kc,"getJetStreamManager");async function aL(){if(Ho)return Ho;qi(gs)&&await td();let{domain:e}=Wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(qi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ho=gs.jetstream({domain:e,timeout:6e4}),Ho}a(aL,"getJetStream");async function Zt(){let e=gs||await td(),t=Bo||await Kc(),r=Ho||await aL();return{connection:e,jsm:t,js:r}}a(Zt,"getNATSReferences");async function F4(e){let t=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await rL.getClusterUser(),n=await $p(t,r,s),i=Vp(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=iL.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await xp.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(F4,"getServerList");async function Yp(e,t){let{jsm:r}=await Zt(),s=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:sL.File,retention:nL.Limits,subjects:t,discard:w4.Old,max_msgs:n,max_bytes:i,max_age:s})}a(Yp,"createLocalStream");async function cL(){let{jsm:e}=await Zt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(cL,"listStreams");async function G4(e){let{jsm:t}=await Zt();await t.streams.delete(e)}a(G4,"deleteLocalStream");async function x4(e){let{connection:t}=await Zt(),r=[],s=Vp(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(iL.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(x4,"listRemoteStreams");async function k4(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Zt(),i=ZC(),o={durable_name:i,ack_policy:Z_.Explicit};t&&(o.deliver_policy=ed.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.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=kp(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Re.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(k4,"viewStream");async function*V4(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Zt(),i=ZC(),o={durable_name:i,ack_policy:Z_.Explicit};t&&(o.deliver_policy=ed.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.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=kp(_.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(Re.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(V4,"viewStreamIterator");async function $4(e,t,r,s){Yr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=uL(s,r);let{js:n}=await Zt(),i=await Qc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:tL.encode(s);try{Yr.trace(`publishToStream publishing to subject: ${o}`),M4(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return fL(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Yr.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await Yp(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a($4,"publishToStream");function uL(e,t){t===void 0&&(t=L4());let r=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Re.MSG_HEADERS.ORIGIN)&&r&&t.append(Re.MSG_HEADERS.ORIGIN,r),t}a(uL,"addNatsMsgHeader");function Wc(e){e=e.toLowerCase();let t=Yc.join(wt.get(Oe.CONFIG_PARAMS.ROOTPATH),P4);if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return qi(Fp)&&(Fp={port:Vc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Vc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Re.SERVER_SUFFIX.HUB,config_file:Re.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Yc.join(t,Re.PID_FILES.HUB),hdb_nats_path:t}),Fp;if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return qi(qp)&&(qp={port:Vc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Vc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Re.SERVER_SUFFIX.LEAF,config_file:Re.NATS_CONFIG_FILES.LEAF_SERVER,domain:Vc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Re.SERVER_SUFFIX.LEAF,pid_file_path:Yc.join(t,Re.PID_FILES.LEAF),hdb_nats_path:t}),qp;Yr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Wc,"getServerConfig");async function Y4(e){let{jsm:t}=await Zt(),r=await Qc();try{await t.streams.add({name:e.stream_name,storage:sL.File,retention:nL.Limits,max_age:b4,max_bytes:y4,subjects:[`${Re.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:Z_.Explicit,durable_name:e.durable_name,deliver_policy:ed.All,max_ack_pending:1e4});else throw s}}a(Y4,"createWorkQueueStream");async function K4(){let{jsm:e}=await Zt();(await e.consumers.info(Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,Re.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Yr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,Re.WORK_QUEUE_CONSUMER_NAMES.durable_name),Yr.info("Adding pull consumer to ingest stream"),await e.consumers.add(Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:Z_.Explicit,durable_name:Re.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:ed.All,max_ack_pending:1e4}))}a(K4,"updateIngestStreamConsumer");async function lL(e,t,r){let{jsm:s}=await Zt(),n=await s.streams.info(t),i=_L(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=j_.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let p=0,S=n.config.sources.length;p<S;p++)if(d=n.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 s.streams.purge(t,{filter:p}),n.config.sources.splice(f,1),await s.streams.update(t,n.config)}let h={name:_,opt_start_time:o,filter_subject:`${Re.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(lL,"addSourceToWorkStream");function _L(e){return e.split(".")[1]}a(_L,"extractServerName");async function dL(e,t,r){let{jsm:s}=await Zt(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=j_.createNatsTableStreamName(n,i),u=await s.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 s.streams.update(t,u.config)}a(dL,"removeSourceFromWorkStream");async function W4(e,t,r=6e4,s=Vp()){if(!xp.isObject(t))throw new Error("data param must be an object");let n=tL.encode(t),{connection:i}=await Zt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return kp(c.data)}a(W4,"request");function Kp(e){return new Promise(async(t,r)=>{let s=g4(Gp,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(Kp,"reloadNATS");async function Q4(){let{pid_file_path:e}=Wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Kp(e)}a(Q4,"reloadNATSHub");async function z4(){let{pid_file_path:e}=Wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Kp(e)}a(z4,"reloadNATSLeaf");function J4(e,t,r){let s;switch(e.code){case jC.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case jC.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(J4,"requestErrorHandler");async function X4(e,t){let r=t+Re.SERVER_SUFFIX.LEAF;await fL(async()=>{e.subscribe===!0?await lL(r,Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await dL(r,Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(X4,"updateWorkStream");function fL(e){return R4.writeTransaction(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(fL,"exclusiveLock");async function EL(e,t){let r=j_.createNatsTableStreamName(e,t),s=await Qc(),n=t3(e,t,s);await Yp(r,[n])}a(EL,"createLocalTableStream");async function j4(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await EL(s,n)}}a(j4,"createTableStreams");async function hL(e,t){if(wt.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=j_.createNatsTableStreamName(e,t),{jsm:s}=await Zt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Yr.warn(r);else throw r}}a(hL,"purgeTableStream");async function Z4(e,t){if(wt.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await hL(e,t[r])}a(Z4,"purgeSchemaTableStreams");async function e3(e){return(await Kc()).streams.info(e)}a(e3,"getStreamInfo");function t3(e,t,r){return`${Re.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(t3,"createSubjectName");async function Qc(){if($c)return $c;if($c=(await Kc())?.nc?.info?.server_name,$c===void 0)throw new Error("Unable to get jetstream manager server name");return $c}a(Qc,"getJsmServerName");async function r3(){let e=await Kc(),t=await Qc(),r=await cL();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=s3(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===Re.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Re.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Yr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===Re.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Re.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Yr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Yr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(r3,"updateLocalStreams");function s3(e){let{config:t}=e,r=!1;if(t.name===Re.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===Re.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(s3,"updateStreamLimits")});var id=T((Cle,gL)=>{"use strict";var Fo=Fl(),Go=XC(),n3=G(),i3=require("uuid").v4,wle=require("clone"),sd=on(),xo=y(),o3=require("util"),zn=Es(),{handleHDBError:er,hdb_errors:a3}=j(),{HDB_ERROR_MSGS:rd,HTTP_STATUS_CODES:tr}=a3,{SchemaEventMsg:nd}=us(),pL=dt(),{getDatabases:c3}=(fe(),Z(Ce)),{transformReq:ko}=$();gL.exports={createSchema:u3,createSchemaStructure:SL,createTable:l3,createTableStructure:TL,createAttribute:h3,dropSchema:_3,dropTable:d3,dropAttribute:f3,getBackup:m3};async function u3(e){let t=await SL(e);return sd.signalSchemaChange(new nd(process.pid,e.operation,e.schema)),t}a(u3,"createSchema");async function SL(e){let t=Fo.schema_object(e);if(t)throw er(t,t.message,tr.BAD_REQUEST,void 0,void 0,!0);if(ko(e),!await Go.checkSchemaExists(e.schema))throw er(new Error,rd.SCHEMA_EXISTS_ERR(e.schema),tr.BAD_REQUEST,xo.LOG_LEVELS.ERROR,rd.SCHEMA_EXISTS_ERR(e.schema),!0);return await zn.createSchema(e),`database '${e.schema}' successfully created`}a(SL,"createSchemaStructure");async function l3(e){return ko(e),e.hash_attribute=e.primary_key??e.hash_attribute,await TL(e)}a(l3,"createTable");async function TL(e){let t=Fo.create_table_object(e);if(t)throw er(t,t.message,tr.BAD_REQUEST,void 0,void 0,!0);if(Fo.validateTableResidence(e.residence),!await Go.checkSchemaTableExists(e.schema,e.table))throw er(new Error,rd.TABLE_EXISTS_ERR(e.schema,e.table),tr.BAD_REQUEST,xo.LOG_LEVELS.ERROR,rd.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:i3(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await zn.createTable(s,e);else throw er(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",tr.BAD_REQUEST);else await zn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(TL,"createTableStructure");async function _3(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Fo.schema_object(e),s=t??r;if(s)throw er(s,s.message,tr.BAD_REQUEST,void 0,void 0,!0);ko(e);let n=await Go.checkSchemaExists(e.schema);if(n)throw er(new Error,n,tr.NOT_FOUND,xo.LOG_LEVELS.ERROR,n,!0);let i=await Go.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await zn.dropSchema(e),sd.signalSchemaChange(new nd(process.pid,e.operation,e.schema)),await pL.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(_3,"dropSchema");async function d3(e){let t=Fo.table_object(e);if(t)throw er(t,t.message,tr.BAD_REQUEST,void 0,void 0,!0);ko(e);let r=await Go.checkSchemaTableExists(e.schema,e.table);if(r)throw er(new Error,r,tr.NOT_FOUND,xo.LOG_LEVELS.ERROR,r,!0);return await zn.dropTable(e),await pL.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(d3,"dropTable");async function f3(e){let t=Fo.attribute_object(e);if(t)throw er(t,t.message,tr.BAD_REQUEST,void 0,void 0,!0);ko(e);let r=await Go.checkSchemaTableExists(e.schema,e.table);if(r)throw er(new Error,r,tr.NOT_FOUND,xo.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw er(new Error,"You cannot drop a hash attribute",tr.BAD_REQUEST,void 0,void 0,!0);if(xo.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw er(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,tr.BAD_REQUEST,void 0,void 0,!0);try{return await zn.dropAttribute(e),E3(e),sd.signalSchemaChange(new nd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw n3.error(`Got an error deleting attribute ${o3.inspect(e)}.`),s}}a(f3,"dropAttribute");function E3(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(E3,"dropAttributeFromGlobal");async function h3(e){ko(e);let t=c3()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw er(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,tr.BAD_REQUEST,void 0,void 0,!0);return await zn.createAttribute(e),sd.signalSchemaChange(new nd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(h3,"createAttribute");function m3(e){return zn.getBackup(e)}a(m3,"getBackup")});var AL=T((Dle,RL)=>{"use strict";var{OPERATIONS_ENUM:p3}=y(),Wp=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=p3.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};RL.exports=Wp});var Qp=T((Ple,IL)=>{"use strict";var S3=Es(),Mle=AL(),od=$(),ad=y(),T3=X(),{handleHDBError:OL,hdb_errors:g3}=j(),{HDB_ERROR_MSGS:NL,HTTP_STATUS_CODES:bL}=g3,R3=Object.values(ad.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),yL="To use this operation audit log must be enabled in harperdb-config.yaml";IL.exports=A3;async function A3(e){if(od.isEmpty(e.schema))throw new Error(NL.SCHEMA_REQUIRED_ERR);if(od.isEmpty(e.table))throw new Error(NL.TABLE_REQUIRED_ERR);if(!T3.get(ad.CONFIG_PARAMS.LOGGING_AUDITLOG))throw OL(new Error,yL,bL.BAD_REQUEST,ad.LOG_LEVELS.ERROR,yL,!0);let t=od.checkSchemaTableExist(e.schema,e.table);if(t)throw OL(new Error,t,bL.NOT_FOUND,ad.LOG_LEVELS.ERROR,t,!0);if(!od.isEmpty(e.search_type)&&R3.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await S3.readAuditLog(e)}a(A3,"readAuditLog")});var CL=T((Ble,wL)=>{"use strict";var{OPERATIONS_ENUM:O3}=y(),zp=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=O3.GET_BACKUP,this.schema=t,this.table=r}};wL.exports=zp});var UL=T((Gle,DL)=>{"use strict";var N3=Es(),qle=CL(),Jp=$(),b3=y(),Fle=X(),{handleHDBError:y3,hdb_errors:I3}=j(),{HDB_ERROR_MSGS:LL,HTTP_STATUS_CODES:w3}=I3;DL.exports=C3;async function C3(e){if(Jp.isEmpty(e.schema))throw new Error(LL.SCHEMA_REQUIRED_ERR);if(Jp.isEmpty(e.table))throw new Error(LL.TABLE_REQUIRED_ERR);let t=Jp.checkSchemaTableExist(e.schema,e.table);if(t)throw y3(new Error,t,w3.NOT_FOUND,b3.LOG_LEVELS.ERROR,t,!0);return await N3.getBackup(read_audit_log_object)}a(C3,"getBackup")});var qL=T((kle,HL)=>{var Jn=require("validate.js"),PL=xe(),Vo=y(),{handleHDBError:L3,hdb_errors:D3}=j(),{HDB_ERROR_MSGS:je,HTTP_STATUS_CODES:U3}=D3,Xp=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),M3={STRUCTURE_USER:"structure_user"},ML=Object.values(Vo.ROLE_TYPES_ENUM),P3="attribute_permissions",v3="attribute_name",{PERMS_CRUD_ENUM:$o}=Vo,B3=[P3,...Object.values($o)],vL=[$o.READ,$o.INSERT,$o.UPDATE],H3=[v3,...vL];function q3(e){let t=Xp();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,BL(e,t)}a(q3,"addRoleValidation");function F3(e){let t=Xp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,BL(e,t)}a(F3,"alterRoleValidation");function G3(e){let t=Xp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,PL.validateObject(e,t)}a(G3,"dropRoleValidation");var x3=["operation","role","id","permission","hdb_user","hdb_auth_header"];function BL(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)x3.includes(s[o])||n.push(s[o]);n.length>0&&st(je.INVALID_ROLE_JSON_KEYS(n),r);let i=PL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{st(o,r)}),e.permission){let o=k3(e);o&&st(o,r),ML.forEach(c=>{e.permission[c]&&!Jn.isBoolean(e.permission[c])&&st(je.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(ML.indexOf(o)<0){if(o===M3.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||st(je.SCHEMA_NOT_FOUND(d),r)}continue}st(je.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){st(je.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]){st(je.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{B3.includes(l)||st(je.INVALID_PERM_KEY(l),r,o,u)}),Object.values($o).forEach(l=>{Jn.isDefined(_[l])?Jn.isBoolean(_[l])||st(je.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):st(je.TABLE_PERM_MISSING(l),r,o,u)}),Jn.isDefined(_.attribute_permissions)){if(!Jn.isArray(_.attribute_permissions)){st(je.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{st(je.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=>{!H3.includes(p)&&p!==$o.DELETE&&st(je.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!Jn.isDefined(E.attribute_name)){st(je.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){st(je.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}vL.forEach(p=>{Jn.isDefined(E[p])?Jn.isBoolean(E[p])||st(je.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):st(je.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}`;st(je.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return V3(r)}a(BL,"customValidate");HL.exports={addRoleValidation:q3,alterRoleValidation:F3,dropRoleValidation:G3};function k3(e){let{operation:t,permission:r}=e;if(t===Vo.OPERATIONS_ENUM.ADD_ROLE||t===Vo.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return je.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Vo.ROLE_TYPES_ENUM.SUPER_USER:Vo.ROLE_TYPES_ENUM.CLUSTER_USER;return je.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(k3,"validateNoSUPerms");function V3(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:je.ROLE_PERMS_ERROR,...e};return L3(new Error,s,U3.BAD_REQUEST)}else return null}a(V3,"generateRolePermResponse");function st(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(st,"addPermError")});var sS=T(($le,kL)=>{"use strict";var FL=xr(),GL=Gr(),$3=Li(),Zp=qL(),eS=on(),Y3=require("uuid").v4,K3=require("util"),cd=y(),W3=$(),tS=GL.searchByValue,Q3=GL.searchByHash,z3=K3.promisify($3.delete),J3=Ms(),X3=Ao(),{hdb_errors:j3,handleHDBError:Yo}=j(),{HDB_ERROR_MSGS:xL,HTTP_STATUS_CODES:ud}=j3,{UserEventMsg:rS}=us();kL.exports={addRole:Z3,alterRole:eX,dropRole:tX,listRoles:rX};function jp(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(jp,"scrubRoleDetails");async function Z3(e){let t=Zp.addRoleValidation(e);if(t)throw t;e=jp(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await tS(r)||[])}catch(i){throw Yo(i)}if(s&&s.length>0)throw Yo(new Error,xL.ROLE_ALREADY_EXISTS(e.role),ud.CONFLICT,void 0,void 0,!0);e.id||(e.id=Y3());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await FL.insert(n),eS.signalUserChange(new rS(process.pid)),e=jp(e),e}a(Z3,"addRole");async function eX(e){let t=Zp.alterRoleValidation(e);if(t)throw t;e=jp(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await FL.update(r)}catch(n){throw Yo(n)}if(s&&s?.message==="updated 0 of 1 records")throw Yo(new Error,"Invalid role id",ud.BAD_REQUEST,void 0,void 0,!0);return await eS.signalUserChange(new rS(process.pid)),e}a(eX,"alterRole");async function tX(e){let t=Zp.dropRoleValidation(e);if(t)throw Yo(new Error,t,ud.BAD_REQUEST,void 0,void 0,!0);let r=new X3(cd.SYSTEM_SCHEMA_NAME,cd.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await Q3(r));if(s.length===0)throw Yo(new Error,xL.ROLE_NOT_FOUND,ud.NOT_FOUND,void 0,void 0,!0);let n=new J3(cd.SYSTEM_SCHEMA_NAME,cd.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await tS(n)),o=!1;if(W3.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await z3(c),eS.signalUserChange(new rS(process.pid)),`${s[0].role} successfully deleted`}a(tX,"dropRole");async function rX(){return tS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(rX,"listRoles")});var KL=T((Kle,YL)=>{"use strict";var sX=X(),Xn=require("joi"),nX=xe(),VL=require("moment"),iX=require("fs-extra"),nS=require("path"),oX=require("lodash"),zc=y(),{LOG_LEVELS:Fi}=y(),aX="YYYY-MM-DD hh:mm:ss",cX=nS.resolve(__dirname,"../logs");YL.exports=function(e){return nX.validateBySchema(e,uX)};var uX=Xn.object({from:Xn.custom($L),until:Xn.custom($L),level:Xn.valid(Fi.NOTIFY,Fi.FATAL,Fi.ERROR,Fi.WARN,Fi.INFO,Fi.DEBUG,Fi.TRACE),order:Xn.valid("asc","desc"),limit:Xn.number().min(1),start:Xn.number().min(0),log_name:Xn.custom(lX)});function $L(e,t){if(VL(e,VL.ISO_8601).format(aX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a($L,"validateDatetime");function lX(e,t){if(oX.invert(zc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=sX.get(zc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?zc.LOG_NAMES.HDB:e,i=n===zc.LOG_NAMES.INSTALL?nS.join(cX,zc.LOG_NAMES.INSTALL):nS.join(s,n);return iX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(lX,"validateReadLogPath")});var oS=T((Qle,QL)=>{"use strict";var ld=y(),_X=G(),dX=X(),fX=KL(),iS=require("path"),WL=require("fs-extra"),{once:EX}=require("events"),{handleHDBError:hX,hdb_errors:mX}=j(),{PACKAGE_ROOT:pX}=y(),SX=iS.join(pX,"logs"),TX=1e3,gX=200;QL.exports=RX;async function RX(e){let t=fX(e);if(t)throw hX(t,t.message,mX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=dX.get(ld.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?ld.LOG_NAMES.HDB:e.log_name,n=s===ld.LOG_NAMES.INSTALL?iS.join(SX,ld.LOG_NAMES.INSTALL):iS.join(r,s),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?TX: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(WL.statSync(n).size-(h+5)*gX,0));let S=WL.createReadStream(n,{start:p});S.on("error",F=>{_X.error(F)});let R=0,b=[],O="",Y;S.on("data",F=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=O+F;let K=0,B;for(;(B=w.exec(F))&&!S.destroyed;){Y&&(Y.message=F.slice(K,B.index),Q(Y));let[x,te,be]=B,se=be.split("] ["),vt=se[0],Pe=se[1];se.splice(0,2),Y={timestamp:te,thread:vt,level:Pe,tags:se,message:""},K=B.index+x.length}O=F.slice(K)}),S.on("end",F=>{S.destroyed||Y&&(Y.message=O.trim(),Q(Y))}),S.resume();function Q(F){let w,K,B;switch(!0){case(i&&c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),F.level===o&&w>=K&&w<=B&&R<E?R++:F.level===o&&w>=K&&w<=B&&(jn(F,f,b),R++,R===h&&S.destroy());break;case(i&&c):w=new Date(F.timestamp),K=new Date(u),F.level===o&&w>=K&&R<E?R++:F.level===o&&w>=K&&(jn(F,f,b),R++,R===h&&S.destroy());break;case(i&&_):w=new Date(F.timestamp),B=new Date(l),F.level===o&&w<=B&&R<E?R++:F.level===o&&w<=B&&(jn(F,f,b),R++,R===h&&S.destroy());break;case(c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),w>=K&&w<=B&&R<E?R++:w>=K&&w<=B&&(jn(F,f,b),R++,R===h&&S.destroy());break;case i:F.level===o&&R<E?R++:F.level===o&&(jn(F,f,b),R++,R===h&&S.destroy());break;case c:w=new Date(F.timestamp),K=new Date(u),w>=K&&R<E?R++:w>=K&&R>=E&&(jn(F,f,b),R++,R===h&&S.destroy());break;case _:w=new Date(F.timestamp),B=new Date(l),w<=B&&R<E?R++:w<=B&&R>=E&&(jn(F,f,b),R++,R===h&&S.destroy());break;default:R<E?R++:(jn(F,f,b),R++,R===h&&S.destroy())}}return a(Q,"onLogMessage"),await EX(S,"close"),b}a(RX,"readLog");function jn(e,t,r){t==="desc"?AX(e,r):t==="asc"?OX(e,r):r.push(e)}a(jn,"pushLineToResult");function AX(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(AX,"insertDescending");function OX(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(OX,"insertAscending")});var dd=T((Zle,jL)=>{"use strict";var aS=require("joi"),{string:_d,boolean:zL,date:NX}=aS.types(),bX=xe(),{validateSchemaExists:Jle,validateTableExists:Xle,validateSchemaName:jle}=Ds(),yX=y(),IX=ke(),JL=X();JL.initSync();var wX=_d.invalid(JL.get(yX.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(IX.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(),XL={operation:_d.valid("add_node","update_node"),node_name:wX,subscriptions:aS.array().items({table:_d.optional(),schema:_d.required(),subscribe:zL.required(),publish:zL.required().custom(LX),start_time:NX.iso()}).min(1).required()};function CX(e){return bX.validateBySchema(e,aS.object(XL))}a(CX,"addUpdateNodeValidator");function LX(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(LX,"checkForFalsy");jL.exports={addUpdateNodeValidator:CX,validation_schema:XL}});var eD=T((t_e,ZL)=>{var DX=xe(),UX={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};ZL.exports=function(e){return DX.validateObject(e,UX)}});var uS=T((r_e,tD)=>{"use strict";var MX=y().OPERATIONS_ENUM,cS=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=MX.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};tD.exports=cS});var sD=T((n_e,rD)=>{"use strict";var PX={OPERATION:"operation",REFRESH:"refresh"},lS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},_S=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};rD.exports={JWTTokens:lS,TOKEN_TYPE_ENUM:PX,JWTRSAKeys:_S}});var jc=T((o_e,aD)=>{"use strict";var Xc=require("jsonwebtoken"),dS=require("fs-extra"),fS=$(),Kr=y(),{handleHDBError:rr,hdb_errors:vX}=j(),{HTTP_STATUS_CODES:sr,AUTHENTICATION_ERROR_MSGS:nr}=vX,Jc=G(),nD=f_(),mS=kr(),BX=xr().update,HX=uS(),qX=on(),{UserEventMsg:FX}=us(),Zn=X();Zn.initSync();var ES=require("path"),{JWTTokens:GX,JWTRSAKeys:xX,TOKEN_TYPE_ENUM:fd}=sD(),kX=Zn.get(Kr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Zn.get(Kr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",VX=Zn.get(Kr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Zn.get(Kr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Ed="RS256",hS;aD.exports={createTokens:$X,validateOperationToken:KX,refreshOperationToken:YX,validateRefreshToken:oD};async function $X(e){if(fS.isEmpty(e)||typeof e!="object")throw rr(new Error,nr.INVALID_AUTH_OBJECT,sr.BAD_REQUEST,void 0,void 0,!0);if(fS.isEmpty(e.username))throw rr(new Error,nr.USERNAME_REQUIRED,sr.BAD_REQUEST,void 0,void 0,!0);if(fS.isEmpty(e.password))throw rr(new Error,nr.PASSWORD_REQUIRED,sr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await mS.findAndValidateUser(e.username,e.password),!t)throw rr(new Error,nr.INVALID_CREDENTIALS,sr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Jc.error(f),rr(new Error,nr.INVALID_CREDENTIALS,sr.UNAUTHORIZED,void 0,void 0,!0)}let r=await hd(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await iD(i,r.private_key,r.passphrase),c=await Xc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:VX,algorithm:Ed,subject:fd.REFRESH}),u=nD.hash(c),_=new HX(Kr.SYSTEM_SCHEMA_NAME,Kr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await BX(_)}catch(f){Jc.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw rr(new Error,nr.REFRESH_TOKEN_SAVE_FAILED,sr.INTERNAL_SERVER_ERROR);return qX.signalUserChange(new FX(process.pid)),new GX(o,c)}a($X,"createTokens");async function iD(e,t,r){return await Xc.sign(e,{key:t,passphrase:r},{expiresIn:kX,algorithm:Ed,subject:fd.OPERATION})}a(iD,"signOperationToken");async function hd(){if(hS===void 0)try{let e=ES.join(Zn.getHdbBasePath(),Kr.LICENSE_KEY_DIR_NAME,Kr.JWT_ENUM.JWT_PASSPHRASE_NAME),t=ES.join(Zn.getHdbBasePath(),Kr.LICENSE_KEY_DIR_NAME,Kr.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=ES.join(Zn.getHdbBasePath(),Kr.LICENSE_KEY_DIR_NAME,Kr.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await dS.readFile(e)).toString(),n=(await dS.readFile(t)).toString(),i=(await dS.readFile(r)).toString();hS=new xX(i,n,s)}catch(e){throw Jc.error(e),rr(new Error,nr.NO_ENCRYPTION_KEYS,sr.INTERNAL_SERVER_ERROR)}return hS}a(hd,"getJWTRSAKeys");async function YX(e){if(!e)throw rr(new Error,nr.INVALID_BODY,sr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw rr(new Error,nr.REFRESH_TOKEN_REQUIRED,sr.BAD_REQUEST,void 0,void 0,!0);await oD(e.refresh_token);let t=await hd(),r=await Xc.decode(e.refresh_token);return{operation_token:await iD({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(YX,"refreshOperationToken");async function KX(e){try{let t=await hd(),r=await Xc.verify(e,t.public_key,{algorithms:Ed,subject:fd.OPERATION});return await mS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Jc.warn(t),t.name&&t.name==="TokenExpiredError"?rr(new Error,nr.TOKEN_EXPIRED,sr.FORBIDDEN):rr(new Error,nr.INVALID_TOKEN,sr.UNAUTHORIZED)}}a(KX,"validateOperationToken");async function oD(e){let t;try{let r=await hd(),s=await Xc.verify(e,r.public_key,{algorithms:Ed,subject:fd.REFRESH});t=await mS.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Jc.warn(r),r.name&&r.name==="TokenExpiredError"?rr(new Error,nr.TOKEN_EXPIRED,sr.FORBIDDEN):rr(new Error,nr.INVALID_TOKEN,sr.UNAUTHORIZED)}if(!nD.validate(t.refresh_token,e))throw rr(new Error,nr.INVALID_TOKEN,sr.UNAUTHORIZED);return t}a(oD,"validateRefreshToken")});var pS=T((u_e,lD)=>{"use strict";var WX=eD(),Ko=require("passport"),QX=require("passport-local").Strategy,zX=require("passport-http").BasicStrategy,JX=require("util"),XX=kr(),uD=JX.callbackify(XX.findAndValidateUser),c_e=Er(),jX=y(),cD=jc();Ko.use(new QX(function(e,t,r){uD(e,t,r)}));Ko.use(new zX(function(e,t,r){uD(e,t,r)}));Ko.serializeUser(function(e,t){t(null,e)});Ko.deserializeUser(function(e,t){t(null,e)});function ZX(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":Ko.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===jX.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?cD.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):cD.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Ko.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(ZX,"authorize");function ej(e,t){let r=WX(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);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]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(ej,"checkPermissions");lD.exports={authorize:ZX,checkPermissions:ej}});var Wo=T((__e,_D)=>{"use strict";var SS=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},TS=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};_D.exports={Node:SS,NodeSubscription:TS}});var fD=T((f_e,dD)=>{"use strict";var tj=y().OPERATIONS_ENUM,gS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=tj.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};dD.exports=gS});var Zc=T((h_e,ED)=>{"use strict";var RS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},AS=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};ED.exports={RemotePayloadObject:RS,RemotePayloadSubscription:AS}});var mD=T((p_e,hD)=>{"use strict";var OS=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};hD.exports=OS});var TD=T((A_e,SD)=>{"use strict";var rj=mD(),T_e=ze(),pD=Ue(),sj=G(),{getSchemaPath:g_e,getTransactionAuditStorePath:R_e}=Be(),{getDatabases:nj}=(fe(),Z(Ce));SD.exports=ij;async function ij(e){let t=new rj;try{let r=nj()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await pD.environmentDataSize(schema_path,e.name),o=await pD.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){sj.warn(`unable to stat table dbi due to ${r}`)}return t}a(ij,"lmdbGetTableSize")});var RD=T((N_e,gD)=>{"use strict";var NS=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};gD.exports=NS});var Qo=T((w_e,bD)=>{"use strict";var oj=require("fs-extra"),aj=require("path"),kt=require("systeminformation"),ei=G(),cj=dt(),bS=ke(),pd=y(),uj=TD(),ND=bi(),{getThreadInfo:AD}=Je(),vS=X();vS.initSync();var lj=RD(),{openEnvironment:y_e}=Ue(),{getSchemaPath:I_e}=Be(),{database:_j}=(fe(),Z(Ce)),md;bD.exports={getHDBProcessInfo:CS,getNetworkInfo:DS,getDiskInfo:LS,getMemoryInfo:wS,getCPUInfo:IS,getTimeInfo:yS,getSystemInformation:US,systemInformation:dj,getTableSize:MS,getMetrics:PS};function yS(){return kt.time()}a(yS,"getTimeInfo");async function IS(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await kt.cpu();l.cpu_speed=await kt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:R,...b}=await kt.currentLoad();return b.cpus=[],R.forEach(O=>{let{raw_load:Y,raw_load_idle:Q,raw_load_irq:F,raw_load_nice:w,raw_load_system:K,raw_load_user:B,...x}=O;b.cpus.push(x)}),l.current_load=b,l}catch(e){return ei.error(`error in getCPUInfo: ${e}`),{}}}a(IS,"getCPUInfo");async function wS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await kt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return ei.error(`error in getMemoryInfo: ${e}`),{}}}a(wS,"getMemoryInfo");async function CS(){let e={core:[],clustering:[]};try{let t=await kt.processes(),r;try{r=Number.parseInt(await oj.readFile(aj.join(vS.get(pd.CONFIG_PARAMS.ROOTPATH),pd.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===pd.NODE_ERROR_CODES.ENOENT)ei.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return ei.error(`error in getHDBProcessInfo: ${t}`),e}}a(CS,"getHDBProcessInfo");async function LS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await kt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await kt.fsStats();return e.read_write=_,e.size=await kt.fsSize(),e}catch(t){return ei.error(`error in getDiskInfo: ${t}`),e}}a(LS,"getDiskInfo");async function DS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await kt.networkInterfaceDefault(),e.latency=await kt.inetChecksite("google.com"),(await kt.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await kt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return ei.error(`error in getNetworkInfo: ${t}`),e}}a(DS,"getNetworkInfo");async function US(){if(md!==void 0)return md;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await kt.osInfo();e=c;let u=await kt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,md=e,md}catch(t){return ei.error(`error in getSystemInformation: ${t}`),e}}a(US,"getSystemInformation");async function MS(){let e=[],t=await ND.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await uj(s));return e}a(MS,"getTableSize");async function PS(){let e=await ND.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=_j({database:r,table:n}),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}}),s[n]=o}catch(i){ei.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(PS,"getMetrics");async function OD(){if(vS.get(pd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await cj.getNATSReferences(),r=await t.streams.info(bS.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(bS.WORK_QUEUE_CONSUMER_NAMES.stream_name,bS.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.config?.sources&&(n.ingest.stream.sources=r.config.sources),n}}a(OD,"getNatsStreamInfo");async function dj(e){let t=new lj;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await US(),t.time=yS(),t.cpu=await IS(),t.memory=await wS(),t.disk=await LS(),t.network=await DS(),t.harperdb_processes=await CS(),t.table_size=await MS(),t.metrics=await PS(),t.threads=await AD(),t.replication=await OD(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await US();break;case"time":t.time=yS();break;case"cpu":t.cpu=await IS();break;case"memory":t.memory=await wS();break;case"disk":t.disk=await LS();break;case"network":t.network=await DS();break;case"harperdb_processes":t.harperdb_processes=await CS();break;case"table_size":t.table_size=await MS();break;case"database_metrics":case"metrics":t.metrics=await PS();break;case"threads":t.threads=await AD();break;case"replication":t.replication=await OD();break;default:break}return t}a(dj,"systemInformation")});var BS=T((L_e,yD)=>{"use strict";yD.exports={version:fj,printVersion:Ej};var Sd=kc();function fj(){if(Sd)return Sd.version}a(fj,"version");function Ej(){Sd&&console.log(`HarperDB Version ${Sd.version}`)}a(Ej,"printVersion")});var fn=T((P_e,LD)=>{"use strict";var hj=xr(),HS=$(),mj=require("util"),Gi=y(),ID=X();ID.initSync();var pj=pS(),wD=Gr(),{Node:U_e,NodeSubscription:M_e}=Wo(),Sj=Ao(),Tj=fD(),{RemotePayloadObject:gj,RemotePayloadSubscription:Rj}=Zc(),{handleHDBError:Aj,hdb_errors:Oj}=j(),{HTTP_STATUS_CODES:Nj,HDB_ERROR_MSGS:bj}=Oj,yj=Ms(),Ij=Qo(),wj=BS(),{getDatabases:Cj}=(fe(),Z(Ce)),Lj=mj.promisify(pj.authorize),Dj=wD.searchByHash,Uj=wD.searchByValue;LD.exports={authHeaderToUser:Mj,isEmpty:Pj,getNodeRecord:vj,upsertNodeRecord:Bj,buildNodePayloads:Hj,checkClusteringEnabled:qj,getAllNodeRecords:Fj,getSystemInfo:Gj,reverseSubscription:CD};async function Mj(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Lj(t,null),e}a(Mj,"authHeaderToUser");function Pj(e){return e==null}a(Pj,"isEmpty");async function vj(e){let t=new Sj(Gi.SYSTEM_SCHEMA_NAME,Gi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Dj(t)}a(vj,"getNodeRecord");async function Bj(e){let t=new Tj(Gi.SYSTEM_SCHEMA_NAME,Gi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return hj.upsert(t)}a(Bj,"upsertNodeRecord");function CD(e){if(HS.isEmpty(e.subscribe)||HS.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(CD,"reverseSubscription");function Hj(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=HS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=CD(c),E=Cj()[u]?.[_],h=new Rj(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new gj(r,t,n,s)}a(Hj,"buildNodePayloads");function qj(){if(!ID.get(Gi.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Aj(new Error,bj.CLUSTERING_NOT_ENABLED,Nj.BAD_REQUEST,void 0,void 0,!0)}a(qj,"checkClusteringEnabled");async function Fj(){let e=new yj(Gi.SYSTEM_SCHEMA_NAME,Gi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Uj(e))}a(Fj,"getAllNodeRecords");async function Gj(){let e=await Ij.getSystemInformation();return{hdb_version:wj.version(),node_version:e.node_version,platform:e.platform}}a(Gj,"getSystemInfo")});var qS=T((B_e,qD)=>{"use strict";var Td=dt(),DD=$(),UD=ke(),MD=y(),gd=G(),PD=id(),xj=rm(),{RemotePayloadObject:kj}=Zc(),{handleHDBError:vD,hdb_errors:Vj}=j(),{HTTP_STATUS_CODES:BD}=Vj,{NodeSubscription:HD}=Wo();qD.exports=$j;async function $j(e,t){let r;try{r=await Td.request(`${t}.${UD.REQUEST_SUFFIX}`,new kj(MD.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),gd.trace("Response from remote describe all request:",r)}catch(o){gd.error(`addNode received error from describe all request to remote node: ${o}`);let c=Td.requestErrorHandler(o,"add_node",t);throw vD(new Error,c,BD.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===UD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw vD(new Error,o,BD.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===MD.SYSTEM_SCHEMA_NAME){await Td.createLocalTableStream(c,u);let h=new HD(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=DD.doesSchemaExist(c),l=s[c]!==void 0,d=u?DD.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(gd.trace(`addNode creating schema: ${c}`),await PD.createSchema({operation:"create_schema",schema:c})),!d&&f){gd.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new xj(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await PD.createTable(h)}await Td.createLocalTableStream(c,u);let E=new HD(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a($j,"reviewSubscriptions")});var Od=T((q_e,xD)=>{"use strict";var{handleHDBError:Rd,hdb_errors:Yj}=j(),{HTTP_STATUS_CODES:Ad}=Yj,{addUpdateNodeValidator:Kj}=dd(),eu=G(),GD=y(),FD=ke(),Wj=$(),FS=dt(),tu=fn(),Qj=X(),zj=qS(),{Node:Jj,NodeSubscription:Xj}=Wo(),{broadcast:jj}=Je(),Zj="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",eZ="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",tZ=Qj.get(GD.CONFIG_PARAMS.CLUSTERING_NODENAME);xD.exports=rZ;async function rZ(e,t=!1){eu.trace("addNode called with:",e),tu.checkClusteringEnabled();let r=Kj(e);if(r)throw Rd(r,r.message,Ad.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await tu.getNodeRecord(s);if(!Wj.isEmptyOrZeroLength(d))throw Rd(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Ad.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await zj(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=Zj,o;let c=tu.buildNodePayloads(n,tZ,GD.OPERATIONS_ENUM.ADD_NODE,await tu.getSystemInfo());eu.trace("addNode sending remote payload:",c);let u;try{u=await FS.request(`${s}.${FD.REQUEST_SUFFIX}`,c)}catch(d){eu.error(`addNode received error from request: ${d}`);let f=FS.requestErrorHandler(d,"add_node",s);throw Rd(new Error,f,Ad.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===FD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw Rd(new Error,d,Ad.INTERNAL_SERVER_ERROR,"error",d)}eu.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];eu.trace("Add node updating work stream for node:",s,"subscriptions:",E),await FS.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new Xj(E.schema,E.table,E.publish,E.subscribe))}let l=new Jj(s,_,u.system_info);return await tu.upsertNodeRecord(l),jj({type:"nats_update"}),i.length>0?o.message=eZ:o.message=`Successfully added '${s}' to manifest`,o}a(rZ,"addNode")});var xS=T((G_e,$D)=>{"use strict";var{handleHDBError:Nd,hdb_errors:sZ}=j(),{HTTP_STATUS_CODES:bd}=sZ,{addUpdateNodeValidator:nZ}=dd(),ru=G(),VD=y(),kD=ke(),iZ=$(),GS=dt(),su=fn(),oZ=X(),{cloneDeep:aZ}=require("lodash"),cZ=qS(),{NodeSubscription:uZ}=Wo(),{broadcast:lZ}=Je(),_Z="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",dZ="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",fZ=oZ.get(VD.CONFIG_PARAMS.CLUSTERING_NODENAME);$D.exports=EZ;async function EZ(e){ru.trace("updateNode called with:",e),su.checkClusteringEnabled();let t=nZ(e);if(t)throw Nd(t,t.message,bd.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=aZ(await su.getNodeRecord(r));if(iZ.isEmptyOrZeroLength(s))throw Nd(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,bd.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await cZ(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=_Z,o;let c=su.buildNodePayloads(n,fZ,VD.OPERATIONS_ENUM.UPDATE_NODE,await su.getSystemInfo());ru.trace("updateNode sending remote payload:",c);let u;try{u=await GS.request(`${r}.${kD.REQUEST_SUFFIX}`,c)}catch(_){ru.error(`updateNode received error from request: ${_}`);let l=GS.requestErrorHandler(_,"update_node",r);throw Nd(new Error,l,bd.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===kD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw Nd(new Error,_,bd.INTERNAL_SERVER_ERROR,"error",_)}ru.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];ru.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await GS.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await hZ(s[0],n,u.system_info),i.length>0?o.message=dZ:o.message=`Successfully updated '${r}'`,o}a(EZ,"updateNode");async function hZ(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new uZ(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await su.upsertNodeRecord(s),lZ({type:"nats_update"})}a(hZ,"updateNodeTable")});var zD=T((k_e,QD)=>{"use strict";var WD=require("joi"),{string:YD}=WD.types(),mZ=xe(),KD=y(),pZ=X(),SZ=ke();QD.exports=TZ;function TZ(e){let t=YD.invalid(pZ.get(KD.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(SZ.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=WD.object({operation:YD.valid(KD.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return mZ.validateBySchema(e,r)}a(TZ,"removeNodeValidator")});var Id=T(($_e,tU)=>{"use strict";var{handleHDBError:JD,hdb_errors:gZ}=j(),{HTTP_STATUS_CODES:XD}=gZ,RZ=zD(),nu=G(),jD=fn(),AZ=$(),yd=y(),ZD=ke(),eU=dt(),OZ=X(),{RemotePayloadObject:NZ}=Zc(),{NodeSubscription:bZ}=Wo(),yZ=dc(),IZ=Li(),{broadcast:wZ}=Je(),CZ=OZ.get(yd.CONFIG_PARAMS.CLUSTERING_NODENAME);tU.exports=LZ;async function LZ(e){nu.trace("removeNode called with:",e),jD.checkClusteringEnabled();let t=RZ(e);if(t)throw JD(t,t.message,XD.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await jD.getNodeRecord(r);if(AZ.isEmptyOrZeroLength(s))throw JD(new Error,`Node '${r}' was not found.`,XD.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new NZ(yd.OPERATIONS_ENUM.REMOVE_NODE,CZ,[]),i,o=!1;try{i=await eU.request(`${r}.${ZD.REQUEST_SUFFIX}`,n),nu.trace("Remove node reply from remote node:",r,i)}catch(u){nu.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];nu.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new bZ(l.schema,l.table,!1,!1);await eU.updateWorkStream(d,r)}let c=new yZ(yd.SYSTEM_SCHEMA_NAME,yd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await IZ.deleteRecord(c),wZ({type:"nats_update"}),i?.status===ZD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(nu.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(LZ,"removeNode")});var nU=T((K_e,sU)=>{"use strict";var rU=require("joi"),{string:DZ,array:UZ}=rU.types(),MZ=xe(),PZ=dd();sU.exports=vZ;function vZ(e){let t=rU.object({operation:DZ.valid("configure_cluster").required(),connections:UZ.items(PZ.validation_schema).required()});return MZ.validateBySchema(e,t)}a(vZ,"configureClusterValidator")});var kS=T((Q_e,uU)=>{"use strict";var BZ=y(),wd=G(),HZ=$(),qZ=Id(),FZ=Od(),iU=fn(),GZ=nU(),{handleHDBError:oU,hdb_errors:xZ}=j(),{HTTP_STATUS_CODES:aU}=xZ,kZ="Configure cluster complete.",VZ="Failed to configure the cluster. Check the logs for more details.",$Z="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";uU.exports=YZ;async function YZ(e){wd.trace("configure cluster called with:",e),iU.checkClusteringEnabled();let t=GZ(e);if(t)throw oU(t,t.message,aU.BAD_REQUEST,void 0,void 0,!0);let r=await iU.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(cU(qZ,{operation:BZ.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);wd.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(cU(FZ,E,E.node_name))}let c=await Promise.allSettled(i);wd.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(wd.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(HZ.isEmptyOrZeroLength(u))return{message:kZ,connections:_};if(l)return{message:$Z,failed_nodes:u,connections:_};throw oU(new Error,VZ,aU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(YZ,"configureCluster");async function cU(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(cU,"functionWrapper")});var _U=T((J_e,lU)=>{"use strict";var Cd=require("joi"),KZ=xe(),{validateSchemaExists:WZ,validateTableExists:QZ,validateSchemaName:zZ}=Ds(),JZ=Cd.object({operation:Cd.string().valid("purge_stream"),schema:Cd.string().custom(WZ).custom(zZ).required(),table:Cd.string().custom(QZ).required()});function XZ(e){return KZ.validateBySchema(e,JZ)}a(XZ,"purgeStreamValidator");lU.exports=XZ});var VS=T((j_e,dU)=>{"use strict";var{handleHDBError:jZ,hdb_errors:ZZ}=j(),{HTTP_STATUS_CODES:e5}=ZZ,t5=_U(),r5=dt(),s5=fn();dU.exports=n5;async function n5(e){let t=t5(e);if(t)throw jZ(t,t.message,e5.BAD_REQUEST,void 0,void 0,!0);s5.checkClusteringEnabled();let{schema:r,table:s}=e;return await r5.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(n5,"purgeStream")});var KS=T((ede,SU)=>{"use strict";var YS=fn(),i5=dt(),hU=X(),Ld=y(),xi=ke(),o5=$(),$S=G(),{RemotePayloadObject:a5}=Zc(),{ErrorCode:fU}=require("nats"),EU=hU.get(Ld.CONFIG_PARAMS.CLUSTERING_ENABLED),mU=hU.get(Ld.CONFIG_PARAMS.CLUSTERING_NODENAME);SU.exports={clusterStatus:c5,buildNodeStatus:pU};async function c5(){let e={node_name:mU,is_enabled:EU,connections:[]};if(!EU)return e;let t=await YS.getAllNodeRecords();if(o5.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(pU(t[s],e.connections));return await Promise.allSettled(r),e}a(c5,"clusterStatus");async function pU(e,t){let r=e.name,s=new a5(Ld.OPERATIONS_ENUM.CLUSTER_STATUS,mU,void 0,await YS.getSystemInfo()),n,i,o=xi.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await i5.request(xi.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===xi.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=xi.CLUSTER_STATUS_STATUSES.CLOSED,$S.error(`Error getting node status from ${r} `,n))}catch(u){$S.warn(`Error getting node status from ${r}`,u),u.code===fU.NoResponders?o=xi.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===fU.Timeout?o=xi.CLUSTER_STATUS_STATUSES.TIMEOUT:o=xi.CLUSTER_STATUS_STATUSES.CLOSED}let c=new u5(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Ld.PRE_4_0_0_VERSION&&await YS.upsertNodeRecord(u)}catch(u){$S.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(pU,"buildNodeStatus");function u5(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(u5,"NodeStatusObject")});var QS=T((rde,TU)=>{"use strict";var{handleHDBError:l5,hdb_errors:_5}=j(),{HTTP_STATUS_CODES:d5}=_5,f5=dt(),E5=fn(),WS=$(),Dd=require("joi"),h5=xe(),m5=2e3,p5=Dd.object({timeout:Dd.number().min(1),connected_nodes:Dd.boolean(),routes:Dd.boolean()});TU.exports=S5;async function S5(e){E5.checkClusteringEnabled();let t=h5.validateBySchema(e,p5);if(t)throw l5(t,t.message,d5.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||WS.autoCastBoolean(s),o=n===void 0||WS.autoCastBoolean(n),c={nodes:[]},u=await f5.getServerList(r??m5),_={};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:WS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(S5,"clusterNetwork")});var OU=T((nde,AU)=>{"use strict";var zS=require("joi"),gU=xe(),{route_constraints:RU}=$m();AU.exports={setRoutesValidator:T5,deleteRoutesValidator:g5};function T5(e){let t=zS.object({server:zS.valid("hub","leaf").required(),routes:RU.required()});return gU.validateBySchema(e,t)}a(T5,"setRoutesValidator");function g5(e){let t=zS.object({routes:RU.required()});return gU.validateBySchema(e,t)}a(g5,"deleteRoutesValidator")});var XS=T((ode,IU)=>{"use strict";var ki=Ar(),JS=$(),Ud=y(),NU=OU(),{handleHDBError:bU,hdb_errors:R5}=j(),{HTTP_STATUS_CODES:yU}=R5,A5="cluster routes successfully set",O5="cluster routes successfully deleted";IU.exports={setRoutes:N5,getRoutes:b5,deleteRoutes:y5};function N5(e){let t=NU.setRoutesValidator(e);if(t)throw bU(t,t.message,yU.BAD_REQUEST,void 0,void 0,!0);let r=ki.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=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=JS.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?ki.updateConfigValue(Ud.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):ki.updateConfigValue(Ud.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:A5,set:o,skipped:i}}a(N5,"setRoutes");function b5(){let e=ki.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(b5,"getRoutes");function y5(e){let t=NU.deleteRoutesValidator(e);if(t)throw bU(t,t.message,yU.BAD_REQUEST,void 0,void 0,!0);let r=ki.getClusteringRoutes(),s=r.hub_routes,n=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=s.length;E<h;E++){let p=s[E];if(d.host===p.host&&d.port===p.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=n.length;h<p;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=JS.isEmptyOrZeroLength(s)?null:s,ki.updateConfigValue(Ud.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=JS.isEmptyOrZeroLength(n)?null:n,ki.updateConfigValue(Ud.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:O5,deleted:i,skipped:o}}a(y5,"deleteRoutes")});var CU=T((cde,wU)=>{"use strict";var iu=require("alasql"),Vi=require("recursive-iterator"),Rs=G(),I5=$(),ou=y(),jS=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,C5(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(n=>ou.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!ou.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.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=w5(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!ou.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new iu.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function w5(e){return e.filter(t=>t[ou.PERMS_CRUD_ENUM.READ])}a(w5,"filterReadRestrictedAttrs");function C5(e,t,r,s,n){L5(e,t,r,s,n)}a(C5,"interpretAST");function au(e,t,r,s,n){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),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(au,"addSchemaTableToMap");function L5(e,t,r,s,n){if(!e){Rs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof iu.yy.Insert?P5(e,t,r):e instanceof iu.yy.Select?D5(e,t,r,s,n):e instanceof iu.yy.Update?U5(e,t,r):e instanceof iu.yy.Delete?M5(e,t,r):Rs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(L5,"getRecordAttributesAST");function D5(e,t,r,s,n){if(!e){Rs.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(I5.isEmptyOrZeroLength(i)){Rs.error("No schema specified");return}e.from.forEach(c=>{au(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),au(c.table,t,r,s,n)});let o=new Vi(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Rs.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 Vi(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{Rs.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 Vi(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Rs.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 Vi(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Rs.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(D5,"getSelectAttributes");function U5(e,t,r){if(!e){Rs.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Vi(e.columns),n=e.table.databaseid;au(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&ZS(e.table.tableid,n,i.columnid,t,r)}a(U5,"getUpdateAttributes");function M5(e,t,r){if(!e){Rs.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Vi(e.where),n=e.table.databaseid;au(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&ZS(e.table.tableid,n,i.columnid,t,r)}a(M5,"getDeleteAttributes");function P5(e,t,r){if(!e){Rs.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Vi(e.columns),n=e.into.databaseid;au(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&ZS(e.into.tableid,n,i.columnid,t,r)}a(P5,"getInsertAttributes");function ZS(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(ZS,"pushAttribute");wU.exports=jS});var rT=T((lde,MU)=>{var Md=Ac(),LU=require("chalk"),Lr=G(),DU=require("prompt"),{promisify:v5}=require("util"),eT=y(),B5=require("fs-extra"),H5=require("path"),q5=$(),F5=BS(),UU=X();UU.initSync();var G5=require("moment"),x5=v5(DU.get),k5=H5.join(UU.getHdbBasePath(),eT.LICENSE_KEY_DIR_NAME,eT.LICENSE_FILE_NAME,eT.LICENSE_FILE_NAME);MU.exports={getFingerprint:$5,setLicense:V5,parseLicense:tT,register:Y5,getRegistrationInfo:W5};async function V5(e){if(e&&e.key&&e.company){try{Lr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await tT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Lr.error(r),Lr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(V5,"setLicense");async function $5(){let e={};try{e=await Md.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Lr.error(r),Lr.error(t),new Error(r)}return e}a($5,"getFingerprint");async function tT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Lr.info("Validating license input...");let r=Md.validateLicense(e,t);if(Lr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Lr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Lr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Lr.info("writing license to disk"),await B5.writeFile(k5,JSON.stringify({license_key:e,company:t}))}catch(s){throw Lr.error("Failed to write License"),s}return"Registration successful."}a(tT,"parseLicense");async function Y5(){let e=await K5();return tT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Y5,"register");async function K5(){let e=await Md.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:LU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:LU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{DU.start()}catch(s){Lr.error(s)}let r;try{r=await x5(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(K5,"promptForRegistration");async function W5(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Md.getLicense()}catch(r){throw Lr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(q5.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=F5.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=G5.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(W5,"getRegistrationInfo")});var vU=T((dde,PU)=>{"use strict";var Q5=ke(),sT=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+Q5.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};PU.exports=sT});var qU=T((Ede,HU)=>{"use strict";var BU=ke(),nT=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+BU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+BU.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"}};HU.exports=nT});var GU=T((mde,FU)=>{"use strict";var iT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};FU.exports=iT});var kU=T((Sde,xU)=>{"use strict";var z5=ke(),oT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+z5.SERVER_SUFFIX.ADMIN,this.password=r}};xU.exports=oT});var uT=T((gde,YU)=>{"use strict";var zo=require("path"),Bd=require("fs-extra"),J5=vU(),X5=qU(),j5=GU(),Z5=kU(),aT=kr(),Xo=$(),ir=Ar(),vd=y(),cu=ke(),{CONFIG_PARAMS:Ze}=vd,uu=G(),lu=X(),VU=un(),cT=dt(),Jo="clustering",e8=1e4,$U=5;YU.exports={generateNatsConfig:r8,removeNatsConfig:s8,getHubConfigPath:t8};function t8(){let e=lu.get(Ze.ROOTPATH);return zo.join(e,Jo,cu.NATS_CONFIG_FILES.HUB_SERVER)}a(t8,"getHubConfigPath");async function r8(e=!1,t=void 0){lu.initSync();let r=lu.get(Ze.ROOTPATH),s=zo.join(r,Jo,cu.PID_FILES.HUB),n=zo.join(r,Jo,cu.PID_FILES.LEAF),i=ir.getConfigFromFile(Ze.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=zo.join(r,Jo,cu.NATS_CONFIG_FILES.HUB_SERVER),c=zo.join(r,Jo,cu.NATS_CONFIG_FILES.LEAF_SERVER),u=ir.getConfigFromFile(Ze.CLUSTERING_TLS_CERTIFICATE),_=ir.getConfigFromFile(Ze.CLUSTERING_TLS_PRIVATEKEY),l=ir.getConfigFromFile(Ze.CLUSTERING_TLS_CERT_AUTH),d=ir.getConfigFromFile(Ze.CLUSTERING_TLS_INSECURE),f=ir.getConfigFromFile(Ze.CLUSTERING_TLS_VERIFY),E=ir.getConfigFromFile(Ze.CLUSTERING_NODENAME),h=ir.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await cT.checkNATSServerInstalled()||Hd("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await aT.listUsers(),S=ir.getConfigFromFile(Ze.CLUSTERING_USER),R=await aT.getClusterUser();(Xo.isEmpty(R)||R.active!==!0)&&Hd(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Pd(Ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Pd(Ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Pd(Ze.CLUSTERING_HUBSERVER_NETWORK_PORT),await Pd(Ze.CLUSTERING_LEAFSERVER_NETWORK_PORT));let b=[],O=[];for(let[x,te]of p.entries())te.role.role===vd.ROLE_TYPES_ENUM.CLUSTER_USER&&te.active&&(b.push(new Z5(te.username,VU.decrypt(te.hash))),O.push(new j5(te.username,VU.decrypt(te.hash))));let Y=[],{hub_routes:Q}=ir.getClusteringRoutes();if(!Xo.isEmptyOrZeroLength(Q))for(let x of Q)Y.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${x.host}:${x.port}`);let F=new J5(ir.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,ir.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_CLUSTER_NAME),ir.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Y,b,O);l==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=Xo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===vd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Bd.writeJson(o,F),uu.trace(`Hub server config written to ${o}`));let w=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new X5(ir.getConfigFromFile(Ze.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[w],[K],b,O,u,_,l,d);l==null&&delete B.tls.ca_file,(t===void 0||t===vd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Bd.writeJson(c,B),uu.trace(`Leaf server config written to ${c}`))}a(r8,"generateNatsConfig");async function Pd(e){let t=lu.get(e);return Xo.isEmpty(t)&&Hd(`port undefined for '${e}'`),await Xo.isPortTaken(t)&&Hd(`'${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(Pd,"isPortAvailable");function Hd(e){let t=`Error generating clustering config: ${e}`;uu.error(t),console.error(t),process.exit(1)}a(Hd,"generateNatsConfigError");async function s8(e){let{port:t,config_file:r}=cT.getServerConfig(e),{username:s,decrypt_hash:n}=await aT.getClusterUser(),i=0,o=2e3;for(;i<$U;){try{let _=await cT.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){uu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=$U)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 Xo.async_set_timeout(o*(i*2))}let c="0".repeat(e8),u=zo.join(lu.get(Ze.ROOTPATH),Jo,r);await Bd.writeFile(u,c),await Bd.remove(u),uu.notify(e,"started.")}a(s8,"removeNatsConfig")});var XU=T((Ade,JU)=>{"use strict";var Dr=X(),n8=Ac(),ce=y(),_u=ke(),En=require("path"),{PACKAGE_ROOT:Fd}=y(),KU=X(),qd=$(),jo="/dev/null",i8=En.join(Fd,"launchServiceScripts"),WU=En.join(Fd,"utility/scripts"),o8=En.join(WU,ce.HDB_RESTART_SCRIPT),QU=En.resolve(Fd,"dependencies",`${process.platform}-${process.arch}`,_u.NATS_BINARY_NAME);function zU(){let t=n8.licenseSearch().ram_allocation||ce.RAM_ALLOCATION_ENUM.DEFAULT,r=ce.MEM_SETTING_KEY+t,s={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return qd.noBootFile()&&(s[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=qd.getEnvCliRootPath()),{name:ce.PROCESS_DESCRIPTORS.HDB,script:ce.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:Fd}}a(zU,"generateMainServerConfig");var a8=9930;function c8(){Dr.initSync(!0);let e=Dr.get(ce.CONFIG_PARAMS.ROOTPATH),t=En.join(e,"clustering",_u.NATS_CONFIG_FILES.HUB_SERVER),r=En.join(Dr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=KU.get(ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=_u.LOG_LEVEL_FLAGS[Dr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==a8?"-"+s:""),script:QU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Dr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=jo,i.error_file=jo),i}a(c8,"generateNatsHubServerConfig");var u8=9940;function l8(){Dr.initSync(!0);let e=Dr.get(ce.CONFIG_PARAMS.ROOTPATH),t=En.join(e,"clustering",_u.NATS_CONFIG_FILES.LEAF_SERVER),r=En.join(Dr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=KU.get(ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=_u.LOG_LEVEL_FLAGS[Dr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==u8?"-"+s:""),script:QU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Dr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=jo,i.error_file=jo),i}a(l8,"generateNatsLeafServerConfig");function _8(){Dr.initSync();let e=En.join(Dr.get(ce.CONFIG_PARAMS.LOGGING_ROOT),ce.LOG_NAMES.HDB),t={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ce.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:i8,autorestart:!1};return Dr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=jo,t.error_file=jo),t}a(_8,"generateClusteringUpgradeV4ServiceConfig");function d8(){let e={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.RESTART_HDB};return qd.noBootFile()&&(e[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=qd.getEnvCliRootPath()),{...{name:ce.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:WU},script:o8}}a(d8,"generateRestart");function f8(){return{apps:[zU()]}}a(f8,"generateAllServiceConfigs");JU.exports={generateAllServiceConfigs:f8,generateMainServerConfig:zU,generateRestart:d8,generateNatsHubServerConfig:c8,generateNatsLeafServerConfig:l8,generateClusteringUpgradeV4ServiceConfig:_8}});var _M=T((bde,lM)=>{"use strict";var Ae=y(),E8=$(),hn=uT(),du=dt(),Vs=ke(),ti=XU(),Gd=X(),ri=G(),h8=fn(),{startWorker:jU,onMessageFromWorkers:m8}=Je(),p8=Qo(),Nde=require("util"),S8=require("child_process"),T8=require("fs"),{execFile:g8}=S8,pe;lM.exports={enterPM2Mode:R8,start:si,stop:lT,reload:eM,restart:tM,list:_T,describe:sM,connect:mn,kill:y8,startAllServices:I8,startService:dT,getUniqueServicesList:nM,restartAllServices:w8,isServiceRegistered:iM,reloadStopStart:oM,restartHdb:rM,deleteProcess:N8,startClusteringProcesses:cM,startClusteringThreads:uM,isHdbRestartRunning:b8,isClusteringRunning:L8,stopClustering:C8,reloadClustering:D8};var fu=!1;m8(e=>{e.type==="restart"&&Gd.initSync(!0)});function R8(){fu=!0}a(R8,"enterPM2Mode");function mn(){return pe||(pe=require("pm2")),new Promise((e,t)=>{pe.connect((r,s)=>{ri.setupConsoleLogging(),r&&t(r),e(s)})})}a(mn,"connect");var or,A8=10,ZU;function si(e,t=!1){if(fu)return O8(e);let r=g8(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=or.indexOf(r);o>-1&&or.splice(o,1),!ZU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<A8&&(T8.existsSync(hn.getHubConfigPath())?si(e):(await hn.generateNatsConfig(!0),si(e),await new Promise(c=>setTimeout(c,3e3)),await hn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await hn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=Gd.get(Ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Vs.LOG_LEVEL_HIERARCHY[o]>=Vs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Vs.LOG_LEVELS.ERR||l===Vs.LOG_LEVELS.WRN?ri.OUTPUTS.STDERR:ri.OUTPUTS.STDOUT;ri.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=Vs.LOG_LEVELS[f]}if(Vs.LOG_LEVEL_HIERARCHY[o]>=Vs.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Vs.LOG_LEVELS.ERR||l===Vs.LOG_LEVELS.WRN?ri.OUTPUTS.STDERR:ri.OUTPUTS.STDOUT;ri.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),or=[],!or&&!t){let i=a(()=>{ZU=!0,or&&(or.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)}or.push(r)}a(si,"start");function O8(e){return new Promise(async(t,r)=>{try{await mn()}catch(s){r(s)}pe.start(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(O8,"startWithPM2");function lT(e){if(!fu){for(let t of or||[])t.name===e&&(or.splice(or.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await mn()}catch(s){r(s)}pe.stop(e,async(s,n)=>{s&&(pe.disconnect(),r(s)),pe.delete(e,(i,o)=>{i&&(pe.disconnect(),r(s)),pe.disconnect(),t(o)})})})}a(lT,"stop");function eM(e){return new Promise(async(t,r)=>{try{await mn()}catch(s){r(s)}pe.reload(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(eM,"reload");function tM(e){if(!fu)for(let t of or||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await mn()}catch(s){r(s)}pe.restart(e,(s,n)=>{pe.disconnect(),t(n)})})}a(tM,"restart");function N8(e){return new Promise(async(t,r)=>{try{await mn()}catch(s){r(s)}pe.delete(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(N8,"deleteProcess");async function rM(){await si(ti.generateRestart())}a(rM,"restartHdb");async function b8(){let e=await _T();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(b8,"isHdbRestartRunning");function _T(){return new Promise(async(e,t)=>{try{await mn()}catch(r){t(r)}pe.list((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(_T,"list");function sM(e){return new Promise(async(t,r)=>{try{await mn()}catch(s){r(s)}pe.describe(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(sM,"describe");function y8(){if(!fu){for(let e of or||[])e.kill();or=[];return}return new Promise(async(e,t)=>{try{await mn()}catch(r){t(r)}pe.killDaemon((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(y8,"kill");async function I8(){try{await cM(),await uM(),await si(ti.generateAllServiceConfigs())}catch(e){throw pe?.disconnect(),e}}a(I8,"startAllServices");async function dT(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ae.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=ti.generateMainServerConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=ti.generateNatsIngestServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=ti.generateNatsReplyServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=ti.generateNatsHubServerConfig(),await si(r,t),await hn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=ti.generateNatsLeafServerConfig(),await si(r,t),await hn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=ti.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await si(r)}catch(r){throw pe?.disconnect(),r}}a(dT,"startService");async function nM(){try{let e=await _T(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw pe?.disconnect(),e}}a(nM,"getUniqueServicesList");async function w8(e=[]){try{let t=!1,r=await nM();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ae.PROCESS_DESCRIPTORS.HDB?t=!0:await tM(o))}t&&await oM(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw pe?.disconnect(),t}}a(w8,"restartAllServices");async function iM(e){if(or?.find(r=>r.name===e))return!0;let t=await p8.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(iM,"isServiceRegistered");async function oM(e){let t=e===Ae.PROCESS_DESCRIPTORS.HDB?Gd.get(Ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):Gd.get(Ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await sM(e),s=E8.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await lT(e),await dT(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await rM():await eM(e)}a(oM,"reloadStopStart");var aM;async function cM(e=!1){for(let t in Ae.CLUSTERING_PROCESSES){let r=Ae.CLUSTERING_PROCESSES[t];await dT(r,e)}}a(cM,"startClusteringProcesses");async function uM(){aM=jU(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await du.createWorkQueueStream(Vs.WORK_QUEUE_CONSUMER_NAMES),await du.updateIngestStreamConsumer(),await du.updateLocalStreams();let e=await h8.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ae.PRE_4_0_0_VERSION){ri.info("Starting clustering upgrade 4.0.0 process"),jU(Ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(uM,"startClusteringThreads");async function C8(){for(let e in Ae.CLUSTERING_PROCESSES)if(e!==Ae.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ae.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await aM.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await lT(t)}}a(C8,"stopClustering");async function L8(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await iM(t)===!1)return!1}return!0}a(L8,"isClusteringRunning");async function D8(){await hn.generateNatsConfig(!0),await du.reloadNATSHub(),await du.reloadNATSLeaf(),await hn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await hn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(D8,"reloadClustering")});var $d=T((Ide,SM)=>{"use strict";var U8=require("minimist"),{isMainThread:hT,parentPort:EM}=require("worker_threads"),Ke=y(),{PROCESS_DESCRIPTORS_VALIDATE:Eu}=Ke,$s=G(),mT=$(),xd=uT(),Zo=dt(),fT=ke(),hM=Ar(),Ys=_M(),dM=Qo(),M8=TE(),{restartWorkers:kd,onMessageByType:P8}=Je(),{handleHDBError:v8,hdb_errors:B8}=j(),{HTTP_STATUS_CODES:H8}=B8,Vd=X();Vd.initSync();var hu=`Restarting HarperDB. This may take up to ${Ke.RESTART_TIMEOUT_MS/1e3} seconds.`,q8="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",fM="Clustering is not enabled so cannot be restarted",F8="Invalid service",ea,Wr;SM.exports={restart:mM,restartService:pT};hT&&P8(Ke.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?pT({service:e.workerType}):mM({operation:"restart"})});async function mM(e){Wr=Object.keys(e).length===0,ea=await Ys.isServiceRegistered(Ke.HDB_PROC_DESCRIPTOR);let t=U8(process.argv);if(t.service){await pT(t);return}if(Wr&&!ea){console.error(q8);return}if(Wr&&console.log(hu),ea){Ys.enterPM2Mode(),$s.notify(hu);let r=M8(Object.keys(Ke.CONFIG_PARAM_MAP),!0);return mT.isEmptyOrZeroLength(Object.keys(r))||hM.updateConfigValue(void 0,void 0,r,!0,!0),x8(),hu}return hT?($s.notify(hu),setTimeout(()=>{kd()},50)):EM.postMessage({type:Ke.ITC_EVENT_TYPES.RESTART}),hu}a(mM,"restart");async function pT(e){let{service:t}=e;if(Ke.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw v8(new Error,F8,H8.BAD_REQUEST,void 0,void 0,!0);if(ea=await Ys.isServiceRegistered(Ke.HDB_PROC_DESCRIPTOR),!hT)return EM.postMessage({type:Ke.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Eu.clustering:if(!Vd.get(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=fM;break}Wr&&console.log("Restarting clustering"),$s.notify("Restarting clustering"),await pM();break;case Eu.clustering_config:case Eu["clustering config"]:if(!Vd.get(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=fM;break}Wr&&console.log("Restarting clustering_config"),$s.notify("Restarting clustering_config"),await Ys.reloadClustering();break;case"custom_functions":case"custom functions":case Eu.harperdb:case Eu.http_workers:if(Wr&&!ea){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}Wr&&console.log("Restarting http_workers"),$s.notify("Restarting http_workers"),Wr?await Ys.restart(Ke.HDB_PROC_DESCRIPTOR):setTimeout(()=>{kd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?($s.error(r),Wr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(pT,"restartService");async function G8(){await Zo.publishToStream(`${fT.SUBJECT_PREFIXES.TXN}.${fT.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,fT.WORK_QUEUE_CONSUMER_NAMES.stream_name,Zo.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(G8,"postDummyNatsMsg");async function x8(){await pM(),await Ys.restart(Ke.HDB_PROC_DESCRIPTOR),await mT.async_set_timeout(2e3),Vd.get(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await ET(),Wr&&(await Zo.closeConnection(),process.exit(0))}a(x8,"restartPM2Mode");async function pM(){if(!hM.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await dM.getHDBProcessInfo()).clustering.length===0)$s.trace("Clustering not running, restart will start clustering services"),await xd.generateNatsConfig(!0),await Ys.startClusteringProcesses(),await Ys.startClusteringThreads(),await ET(),Wr&&await Zo.closeConnection();else{await G8(),await xd.generateNatsConfig(!0),ea?($s.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Ys.restart(Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ys.restart(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await dM.getHDBProcessInfo()).clustering.forEach(n=>{$s.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await mT.async_set_timeout(3e3),await ET(),await Zo.updateLocalStreams(),Wr&&await Zo.closeConnection(),$s.trace("Restart clustering restarting ingest and reply service threads");let t=kd(Ke.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=kd(Ke.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(pM,"restartClustering");async function ET(){await xd.removeNatsConfig(Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await xd.removeNatsConfig(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(ET,"removeNatsConfig")});var CM=T((Lde,wM)=>{"use strict";var Cde=require("lodash"),ar=y(),{handleHDBError:TM,hdb_errors:k8}=j(),{HDB_ERROR_MSGS:V8,HTTP_STATUS_CODES:$8}=k8,ST=G();wM.exports={getRolePermissions:K8};var $i=Object.create(null),Y8=a(e=>({key:e,perms:{}}),"perms_template_obj"),OM=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),NM=a((e=!1,t=!1,r=!1,s=!1)=>({[ar.PERMS_CRUD_ENUM.READ]:e,[ar.PERMS_CRUD_ENUM.INSERT]:t,[ar.PERMS_CRUD_ENUM.UPDATE]:r,[ar.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),TT=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...NM(t,r,s,n)}),"table_perms_template"),gM=a((e,t=NM())=>({attribute_name:e,describe:IM(t),[mu]:t[mu],[gT]:t[gT],[RT]:t[RT]}),"attr_perms_template"),RM=a((e,t=!1)=>({attribute_name:e,describe:t,[mu]:t}),"timestamp_attr_perms_template"),{READ:mu,INSERT:gT,UPDATE:RT}=ar.PERMS_CRUD_ENUM,bM=Object.values(ar.PERMS_CRUD_ENUM),yM=[mu,gT,RT];function K8(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[ar.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if($i[t]&&$i[t].key===s)return $i[t].perms;let n=W8(e,r);return $i[t]?$i[t].key=s:$i[t]=Y8(s),$i[t].perms=n,n}catch(r){if(!e[ar.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[ar.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<ar.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw ST.error(s),ST.debug(r),TM(new Error,V8.OUTDATED_PERMS_TRANSLATION_ERROR,$8.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
9
+ ${r.stack}`;throw ST.error(s),TM(new Error)}}}a(K8,"getRolePermissions");function W8(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[ar.SYSTEM_SCHEMA_NAME]=s[ar.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=Q8(t[i]);return}r[i]=OM(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=z8(c,u);r[i].describe||bM.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=TT()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=TT()})}),r}a(W8,"translateRolePermissions");function Q8(e){let t=OM(!0);return Object.keys(e).forEach(r=>{t.tables[r]=TT(!0,!0,!0,!0,!0)}),t}a(Q8,"createStructureUserPermissions");function z8(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return ar.TIME_STAMP_NAMES.includes(d)&&(f=RM(d,l[mu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=gM(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=IM(l),n.attribute_permissions.push(l),c||J8(l,u)}else if(_!==o){let l;ar.TIME_STAMP_NAMES.includes(_)?l=RM(_):l=gM(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=AM(n),n}else return e.describe=AM(e),e}a(z8,"getTableAttrPerms");function AM(e){return bM.filter(t=>e[t]).length>0}a(AM,"getSchemaTableDescribePerm");function IM(e){return yM.filter(t=>e[t]).length>0}a(IM,"getAttributeDescribePerm");function J8(e,t){yM.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(J8,"checkForHashPerms")});var LM={};ve(LM,{Headers:()=>ni});var ni,Yd=Te(()=>{ni=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 s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];s?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var pu={};ve(pu,{authentication:()=>qM,bypassAuth:()=>s6,login:()=>i6,logout:()=>o6,start:()=>n6});function s6(){HM=!0}async function qM(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?e6?Z8:[]:j8?X8:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new ni([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Kd&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Kd&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Kd){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let p=n.indexOf(";",h),S=n.indexOf("=",h);u=n.slice(S+1,p===-1?n.length:p),_=await UM.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new Qd.AuthAuditLog(E,h,Ct.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===Ct.AUTH_AUDIT_STATUS.SUCCESS?DM.notify(S):DM.error(S)},"authAuditLog"),d;if(s){if(d=Yi.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await ct.getUser(p,S):null;break;case"Bearer":try{d=await(0,Wd.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,Wd.validateRefreshToken)(h),c({status:-1})}catch{throw R}}break}}catch(R){return r6&&(Yi.get(h)||(Yi.set(h,h),l(p,Ct.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:ii({error:R.message},e)})}Yi.set(s,d),t6&&l(d.username,Ct.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await ct.getUser(_.user,null,!1):HM&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,PM.getSuperUser)());Kd&&(e.session.update=function(E){if(!u){u=(0,vM.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.id=u,UM.put(E)},e.login=async function(E,h){e.user=await ct.getUser(E,h),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")&&Bn.loginPath?(f.status=302,f.headers.set("Location",Bn.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 ni);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function n6({server:e,port:t}){e.request(qM,{port:t||"all"}),MM||(MM=!0,setInterval(()=>{Yi=new Map},Qr.get(Ct.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),BM.user.addListener(()=>{Yi=new Map}))}async function i6(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 o6(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var PM,Wd,vM,Qr,Ct,Qd,BM,DM,X8,j8,Z8,e6,UM,Kd,HM,t6,r6,Yi,MM,zd=Te(()=>{PM=D(kr());fr();Ga();Wd=D(jc());fe();vM=require("uuid"),Qr=D(X()),Ct=D(y()),Qd=D(G()),BM=D(Nc());Yd();ta();DM=(0,Qd.loggerWithTag)("auth-event");Qr.initSync();X8=Qr.get(Ct.CONFIG_PARAMS.HTTP_CORSACCESSLIST),j8=Qr.get(Ct.CONFIG_PARAMS.HTTP_CORS),Z8=Qr.get(Ct.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),e6=Qr.get(Ct.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),UM=tt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Kd=Qr.get(Ct.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,HM=Qr.get(Ct.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,t6=Qr.get(Ct.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,r6=Qr.get(Ct.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Yi=new Map;ct.onInvalidatedUser(()=>{Yi=new Map});a(s6,"bypassAuth");a(qM,"authentication");a(n6,"start");a(i6,"login");a(o6,"logout")});var YM=T((Fde,$M)=>{"use strict";var Se=require("joi"),FM=require("fs-extra"),GM=require("path"),Sn=xe(),xM=X(),kM=y(),VM=G(),{hdb_errors:a6}=j(),{HDB_ERROR_MSGS:Vt}=a6,pn=/^[a-zA-Z0-9-_]+$/;$M.exports={getDropCustomFunctionValidator:u6,setCustomFunctionValidator:l6,addComponentValidator:E6,dropCustomFunctionProjectValidator:h6,packageComponentValidator:m6,deployComponentValidator:p6,setComponentFileValidator:_6,getComponentFileValidator:f6,dropComponentFileValidator:d6};function Jd(e,t,r){try{let s=xM.get(kM.CONFIG_PARAMS.COMPONENTSROOT),n=GM.join(s,t);return FM.existsSync(n)?e?t:r.message(Vt.PROJECT_EXISTS):e?r.message(Vt.NO_PROJECT):t}catch(s){return VM.error(s),r.message(Vt.VALIDATION_ERR)}}a(Jd,"checkProjectExists");function Su(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Su,"checkFilePath");function c6(e,t,r,s){try{let n=xM.get(kM.CONFIG_PARAMS.COMPONENTSROOT),i=GM.join(n,e,t,r+".js");return FM.existsSync(i)?r:s.message(Vt.NO_FILE)}catch(n){return VM.error(n),s.message(Vt.VALIDATION_ERR)}}a(c6,"checkFileExists");function u6(e){let t=Se.object({project:Se.string().pattern(pn).custom(Jd.bind(null,!0)).required().messages({"string.pattern.base":Vt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().pattern(pn).custom(c6.bind(null,e.project,e.type)).custom(Su).required().messages({"string.pattern.base":Vt.BAD_FILE_NAME})});return Sn.validateBySchema(e,t)}a(u6,"getDropCustomFunctionValidator");function l6(e){let t=Se.object({project:Se.string().pattern(pn).custom(Jd.bind(null,!0)).required().messages({"string.pattern.base":Vt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().custom(Su).required(),function_content:Se.string().required()});return Sn.validateBySchema(e,t)}a(l6,"setCustomFunctionValidator");function _6(e){let t=Se.object({project:Se.string().pattern(pn).required().messages({"string.pattern.base":Vt.BAD_PROJECT_NAME}),file:Se.string().custom(Su).required(),payload:Se.string().allow("").optional(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Sn.validateBySchema(e,t)}a(_6,"setComponentFileValidator");function d6(e){let t=Se.object({project:Se.string().pattern(pn).required().messages({"string.pattern.base":Vt.BAD_PROJECT_NAME}),file:Se.string().custom(Su).optional()});return Sn.validateBySchema(e,t)}a(d6,"dropComponentFileValidator");function f6(e){let t=Se.object({project:Se.string().required(),file:Se.string().custom(Su).required(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Sn.validateBySchema(e,t)}a(f6,"getComponentFileValidator");function E6(e){let t=Se.object({project:Se.string().pattern(pn).custom(Jd.bind(null,!1)).required().messages({"string.pattern.base":Vt.BAD_PROJECT_NAME})});return Sn.validateBySchema(e,t)}a(E6,"addComponentValidator");function h6(e){let t=Se.object({project:Se.string().pattern(pn).custom(Jd.bind(null,!0)).required().messages({"string.pattern.base":Vt.BAD_PROJECT_NAME})});return Sn.validateBySchema(e,t)}a(h6,"dropCustomFunctionProjectValidator");function m6(e){let t=Se.object({project:Se.string().pattern(pn).required().messages({"string.pattern.base":Vt.BAD_PROJECT_NAME}),skip_node_modules:Se.boolean()});return Sn.validateBySchema(e,t)}a(m6,"packageComponentValidator");function p6(e){let t=Se.object({project:Se.string().pattern(pn).required().messages({"string.pattern.base":Vt.BAD_PROJECT_NAME}),payload:Se.string().optional().messages({"string.pattern.base":Vt.BAD_PACKAGE}),package:Se.string().optional()});return Sn.validateBySchema(e,t)}a(p6,"deployComponentValidator")});var ef=T((xde,jM)=>{"use strict";var Xd=require("joi"),jd=require("path"),KM=require("fs-extra"),{exec:S6}=require("child_process"),T6=require("util"),WM=T6.promisify(S6),Tu=y(),{handleHDBError:ra,hdb_errors:g6}=j(),{HTTP_STATUS_CODES:sa}=g6,gu=X(),R6=xe(),na=G();gu.initSync();var AT=gu.get(Tu.CONFIG_PARAMS.COMPONENTSROOT),QM="npm install --omit=dev --json",A6=`${QM} --dry-run`;jM.exports={installModules:y6,auditModules:I6,installAllRootModules:O6,uninstallRootModule:N6,linkHarperdb:b6};async function O6(e=!1){await Zd(),await Ru(e?"npm install --ignore-scripts":"npm install",gu.get(Tu.CONFIG_PARAMS.ROOTPATH))}a(O6,"installAllRootModules");async function N6(e){await Ru(`npm uninstall ${e}`,gu.get(Tu.CONFIG_PARAMS.ROOTPATH))}a(N6,"uninstallRootModule");async function b6(){await Zd(),await Ru(`npm link ${Tu.PACKAGE_ROOT}`,gu.get(Tu.CONFIG_PARAMS.ROOTPATH))}a(b6,"linkHarperdb");async function Ru(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await WM(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
10
10
  `,""))}return s&&!s.includes("Debugger listening")&&na.error("Error running NPM command:",e,s),na.trace(r,s),r.replace(`
11
- `,"")}a(Ru,"runCommand");async function b6(e){na.info(`starting installModules for request: ${e}`);let t=XM(e);if(t)throw ra(t,t.message,sa.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?R6:QM;await Zd(),await JM(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 _=jd.join(AT,u),l,d=null;try{let{stdout:f,stderr:E}=await WM(n,{cwd:_});l=f?f.replace(`
11
+ `,"")}a(Ru,"runCommand");async function y6(e){na.info(`starting installModules for request: ${e}`);let t=XM(e);if(t)throw ra(t,t.message,sa.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?A6:QM;await Zd(),await JM(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 _=jd.join(AT,u),l,d=null;try{let{stdout:f,stderr:E}=await WM(n,{cwd:_});l=f?f.replace(`
12
12
  `,""):null,d=E?E.replace(`
13
- `,""):null}catch(f){f.stderr?i[u].npm_error=zM(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 na.info(`finished installModules with response ${i}`),i}a(b6,"installModules");function zM(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
14
- `);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(zM,"parseNPMStdErr");async function y6(e){na.info(`starting auditModules for request: ${e}`);let t=XM(e);if(t)throw ra(t,t.message,sa.BAD_REQUEST);let{projects:r}=e;await Zd(),await JM(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=jd.join(AT,o);s[o]={npm_output:null,npm_error:null};try{let u=await Ru("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=zM(u.stderr)}}return na.info(`finished auditModules with response ${s}`),s}a(y6,"auditModules");async function Zd(){try{return await Ru("npm -v"),!0}catch{throw ra(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",sa.BAD_REQUEST,void 0,void 0,!0)}}a(Zd,"checkNPMInstalled");async function JM(e){if(!Array.isArray(e)||e.length===0)throw ra(new Error,"projects argument must be an array with at least 1 element",sa.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=jd.join(AT,i.toString());if(!await KM.pathExists(o)){t.push(i);continue}let u=jd.join(o,"package.json");await KM.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.`,sa.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.`,sa.BAD_REQUEST,void 0,void 0,!0)}a(JM,"checkProjectPaths");function XM(e){let t=Xd.object({projects:Xd.array().min(1).items(Xd.string()).required(),dry_run:Xd.boolean().default(!1)});return g6.validateBySchema(e,t)}a(XM,"modulesValidator")});var NT=T((Vde,sP)=>{"use strict";var ia=require("fs-extra"),OT=require("path"),tf=G(),ZM=$(),rf=y(),rP=X(),I6=Rr();sP.exports=w6;async function w6(){let e=C6(),t=rP.get(rf.CONFIG_PARAMS.ROOTPATH),r=OT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+rf.PACKAGE_ROOT}},n=OT.join(t,"node_modules");await ia.ensureDir(n);let i,o=!0,c=!1;try{i=await ia.readJson(r)}catch(u){if(ZM.isEmptyOrZeroLength(e))return;if(u.code!==rf.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!ZM.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await eP(_);s.dependencies[u]=l+_}if(!o){tf.notify("Installing components"),await tP(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await eP(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(tf.notify("Removing component",u),c=!0);c&&(tf.notify("Updating components."),await tP(r,s,i))}a(w6,"installComponents");function C6(){let e=I6.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(C6,"getComponentsConfig");async function eP(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":OT.extname(e)||await ia.pathExists(e)?"file:":"github:"}a(eP,"getPkgPrefix");async function tP(e,t,r){tf.trace("npm installing components package.json",t),await ia.writeFile(e,JSON.stringify(t,null," "));try{await ef().installAllRootModules(rP.get(rf.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await ia.writeFile(e,JSON.stringify(r,null," ")):await ia.unlink(e),s}}a(tP,"installPackages")});var IT=T((Kde,aP)=>{"use strict";var Le=require("fs-extra"),bT=require("fast-glob"),le=require("path"),iP=require("tar-fs"),Yde=require("uuid").v4,yT=require("normalize-path"),Ys=YM(),pt=G(),Me=y(),nt=X(),Au=Rr(),L6=$(),{PACKAGE_ROOT:D6}=y(),{handleHDBError:St,hdb_errors:U6}=j(),{basename:M6}=require("path"),P6=NT(),oP=X(),v6=y(),{Readable:B6}=require("stream"),{isMainThread:H6}=require("worker_threads"),{HDB_ERROR_MSGS:Ki,HTTP_STATUS_CODES:Tt}=U6,q6=le.join(D6,"application-template"),nP=le.join(nt.get(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function F6(){pt.trace("getting custom api status");let e={};try{e={port:nt.get(Me.CONFIG_PARAMS.HTTP_PORT),directory:nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw St(new Error,Ki.FUNCTION_STATUS,Tt.INTERNAL_SERVER_ERROR,pt.ERR,t)}return e}a(F6,"customFunctionsStatus");function G6(){pt.trace("getting custom api endpoints");let e={},t=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT);try{bT.sync(yT(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:bT.sync(yT(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:bT.sync(yT(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw St(new Error,Ki.GET_FUNCTIONS,Tt.INTERNAL_SERVER_ERROR,pt.ERR,r)}return e}a(G6,"getCustomFunctions");function x6(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Ys.getDropCustomFunctionValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.trace("getting custom api endpoint file content");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=le.join(r,s,n,i+".js");try{return Le.readFileSync(o,{encoding:"utf8"})}catch(c){throw St(new Error,Ki.GET_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,c)}}a(x6,"getCustomFunction");function k6(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Ys.setCustomFunctionValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.trace("setting custom function file content");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return Le.outputFileSync(le.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw St(new Error,Ki.SET_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,c)}}a(k6,"setCustomFunction");function V6(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Ys.getDropCustomFunctionValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.trace("dropping custom function file");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return Le.unlinkSync(le.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw St(new Error,Ki.DROP_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,o)}}a(V6,"dropCustomFunction");function $6(e){e.project&&(e.project=le.parse(e.project).name);let t=Ys.addComponentValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.trace("adding component");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=le.join(r,s);return Le.mkdirSync(n,{recursive:!0}),Le.copySync(q6,n),`Successfully added project: ${s}`}catch(n){throw St(new Error,Ki.ADD_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,n)}}a($6,"addComponent");function Y6(e){e.project&&(e.project=le.parse(e.project).name);let t=Ys.dropCustomFunctionProjectValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.trace("dropping custom function project");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=nt.get(Me.CONFIG_PARAMS.APPS);if(!L6.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return Au.updateConfigValue(Me.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=le.join(r,s);return Le.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw St(new Error,Ki.DROP_FUNCTION_PROJECT,Tt.INTERNAL_SERVER_ERROR,pt.ERR,i)}}a(Y6,"dropCustomFunctionProject");async function K6(e){e.project&&(e.project=le.parse(e.project).name);let t=Ys.packageComponentValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;pt.trace("packaging component",s);let n;try{n=await Le.realpath(le.join(r,s))}catch(u){if(u.code!==Me.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Le.realpath(le.join(nt.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===Me.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await Le.ensureDir(nP);let i=le.join(nP,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(le.join(n,"node_modules"))}),iP.pack(n,o).pipe(Le.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Le.readFileSync(i,{encoding:"base64"});return await Le.remove(i),{project:s,payload:c}}a(K6,"packageComponent");async function W6(e){e.project&&(e.project=le.parse(e.project).name);let t=Ys.deployComponentValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(pt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=le.join(r,s),i="file:"+o,await Le.ensureDir(o);let f=B6.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(iP.extract(o,{finish:h})).on("error",p)});let E=await Le.readdir(o);E.length===1&&E[0]==="package"&&(await Le.copy(le.join(o,"package"),o),await Le.remove(le.join(o,"package")))}if(await Au.addConfig(s,{package:i}),!n){await P6();let f=oP.get(v6.CONFIG_PARAMS.ROOTPATH);o=le.join(f,"node_modules",s)}if(H6)return;let c=new Map;c.isWorker=!0;let u=(nf(),Z(sf)),_;u.setErrorReporter(f=>_=f);let l=M6(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return pt.info("Installed component"),`Successfully deployed: ${s}`}a(W6,"deployComponent");async function Q6(){let e=Au.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)=>{let u=await Le.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=le.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Le.stat(d),E={name:le.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c},"walk_dir"),s=await r(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{name:nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT).split(le.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(le.join(nt.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(nf(),Z(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 s}a(Q6,"getComponents");async function z6(e){let t=Ys.getComponentFileValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let s=Au.getConfigObj()[e.project]||e.project==="harperdb"?le.join(oP.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules"):nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Le.stat(le.join(s,e.project,e.file));return{message:await Le.readFile(le.join(s,e.project,e.file),n),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Me.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${le.join(e.project,e.file)}'`):i}}a(z6,"getComponentFile");async function J6(e){let t=Ys.setComponentFileValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=le.join(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Le.ensureFile(s),await Le.outputFile(s,e.payload,r)):await Le.ensureDir(s),"Successfully set component: "+e.file}a(J6,"setComponentFile");async function X6(e){let t=Ys.dropComponentFileValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let r=e.file?le.join(e.project,e.file):e.project,s=le.join(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),r);return await Le.pathExists(s)&&await Le.remove(s),Au.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(X6,"dropComponent");aP.exports={customFunctionsStatus:F6,getCustomFunctions:G6,getCustomFunction:x6,setCustomFunction:k6,dropCustomFunction:V6,addComponent:$6,dropCustomFunctionProject:Y6,packageComponent:K6,deployComponent:W6,getComponents:Q6,getComponentFile:z6,setComponentFile:J6,dropComponent:X6}});var wT=T((Qde,uP)=>{"use strict";var Ks=require("joi"),cP=xe();uP.exports={readTransactionLogValidator:j6,deleteTransactionLogsBeforeValidator:Z6};function j6(e){let t=Ks.object({schema:Ks.string().required(),table:Ks.string().required(),from:Ks.date().timestamp(),to:Ks.date().timestamp(),limit:Ks.number().min(1)});return cP.validateBySchema(e,t)}a(j6,"readTransactionLogValidator");function Z6(e){let t=Ks.object({schema:Ks.string().required(),table:Ks.string().required(),timestamp:Ks.date().timestamp().required()});return cP.validateBySchema(e,t)}a(Z6,"deleteTransactionLogsBeforeValidator")});var af=T((Jde,EP)=>{"use strict";var CT=y(),of=_t(),lP=$(),_P=X(),dP=cn(),{handleHDBError:oa,hdb_errors:e9}=j(),{HTTP_STATUS_CODES:aa}=e9,{readTransactionLogValidator:t9,deleteTransactionLogsBeforeValidator:r9}=wT(),fP="This operation relies on clustering and cannot run with it disable.",s9="Logs successfully deleted from transaction log.",n9="All logs successfully deleted from transaction log.";EP.exports={readTransactionLog:i9,deleteTransactionLogsBefore:o9};async function*i9(e){let t=t9(e);if(t)throw oa(t,t.message,aa.BAD_REQUEST,void 0,void 0,!0);if(!_P.get(CT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw oa(new Error,fP,aa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=lP.checkSchemaTableExist(r,s);if(n)throw oa(new Error,n,aa.NOT_FOUND,void 0,void 0,!0);let i=dP.createNatsTableStreamName(r,s),o=await of.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===CT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(i9,"readTransactionLog");async function o9(e){let t=r9(e);if(t)throw oa(t,t.message,aa.BAD_REQUEST,void 0,void 0,!0);if(!_P.get(CT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw oa(new Error,fP,aa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=lP.checkSchemaTableExist(r,s);if(i)throw oa(new Error,i,aa.NOT_FOUND,void 0,void 0,!0);let o=dP.createNatsTableStreamName(r,s),{jsm:c}=await of.getNATSReferences(),u=await of.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=s9,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=n9):d=(await of.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(o9,"deleteTransactionLogsBefore")});var mP=T((jde,hP)=>{"use strict";var LT=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};hP.exports=LT});var SP=T((efe,pP)=>{"use strict";var DT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};pP.exports=DT});var MT=T((rfe,gP)=>{"use strict";var TP=mP(),a9=SP(),{HDB_ERROR_MSGS:c9}=Er(),UT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=c9.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,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new TP(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new a9(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new TP(r,s,[],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}};gP.exports=UT});var _f=T((nfe,BP)=>{"use strict";var PT=Gr(),cf=Fr(),zr=id(),bu=bi(),vT=Li(),u9=Qp(),l9=UL(),yu=xr(),uf=sS(),dt=G(),_9=oS(),d9=Od(),f9=xS(),E9=Id(),h9=kS(),m9=VS(),p9=KS(),S9=QS(),BT=XS(),Tn=$(),T9=CU(),HT=rT(),OP=$d(),Qr=y(),NP=CM(),g9=Qo(),bP=jc(),yP=(zd(),Z(pu)),IP=Rr(),Dr=IT(),R9=require("alasql"),wP=af(),CP=ef(),LP=MT(),{handleHDBError:cr,hdb_errors:DP}=j(),{HDB_ERROR_MSGS:Lt,HTTP_STATUS_CODES:Ou}=DP,v=new Map,UP="delete",oi="insert",gn="read",Wi="update",Nu="describe",RP=bu.describeSchema.name,AP=bu.describeTable.name,MP={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},A9="catchup",O9="handleGetJob",N9="handleGetJobsByStartDate",lf={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},b9=[zr.createTable.name,zr.createAttribute.name,zr.dropTable.name,zr.dropAttribute.name],PP={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},q=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};v.set(PT.insert.name,new q(!1,[oi]));v.set(PT.update.name,new q(!1,[Wi]));v.set(PT.upsert.name,new q(!1,[oi,Wi]));v.set(cf.searchByConditions.name,new q(!1,[gn]));v.set(cf.searchByHash.name,new q(!1,[gn]));v.set(cf.searchByValue.name,new q(!1,[gn]));v.set(cf.search.name,new q(!1,[gn]));v.set(zr.createSchema.name,new q(!0,[]));v.set(zr.createTable.name,new q(!0,[]));v.set(zr.createAttribute.name,new q(!1,[oi]));v.set(zr.dropSchema.name,new q(!0,[]));v.set(zr.dropTable.name,new q(!0,[]));v.set(zr.dropAttribute.name,new q(!0,[]));v.set(bu.describeSchema.name,new q(!1,[gn]));v.set(bu.describeTable.name,new q(!1,[gn]));v.set(vT.deleteRecord.name,new q(!1,[UP]));v.set(yu.addUser.name,new q(!0,[]));v.set(yu.alterUser.name,new q(!0,[]));v.set(yu.dropUser.name,new q(!0,[]));v.set(yu.listUsersExternal.name,new q(!0,[]));v.set(uf.listRoles.name,new q(!0,[]));v.set(uf.addRole.name,new q(!0,[]));v.set(uf.alterRole.name,new q(!0,[]));v.set(uf.dropRole.name,new q(!0,[]));v.set(_9.name,new q(!0,[]));v.set(d9.name,new q(!0,[]));v.set(f9.name,new q(!0,[]));v.set(E9.name,new q(!0,[]));v.set(h9.name,new q(!0,[]));v.set(m9.name,new q(!0,[]));v.set(BT.setRoutes.name,new q(!0,[]));v.set(BT.getRoutes.name,new q(!0,[]));v.set(BT.deleteRoutes.name,new q(!0,[]));v.set(IP.setConfiguration.name,new q(!0,[]));v.set(p9.clusterStatus.name,new q(!0,[]));v.set(S9.name,new q(!0,[]));v.set(HT.getFingerprint.name,new q(!0,[]));v.set(HT.setLicense.name,new q(!0,[]));v.set(vT.deleteFilesBefore.name,new q(!0,[]));v.set(vT.deleteAuditLogsBefore.name,new q(!0,[]));v.set(OP.restart.name,new q(!0,[]));v.set(OP.restartService.name,new q(!0,[]));v.set(u9.name,new q(!0,[]));v.set(l9.name,new q(!0,[gn]));v.set(g9.systemInformation.name,new q(!0,[]));v.set(IP.getConfiguration.name,new q(!0,[]));v.set(wP.readTransactionLog.name,new q(!0,[]));v.set(wP.deleteTransactionLogsBefore.name,new q(!0,[]));v.set(CP.installModules.name,new q(!0,[]));v.set(CP.auditModules.name,new q(!0,[]));v.set(bP.createTokens.name,new q(!1,[]));v.set(bP.refreshOperationToken.name,new q(!1,[]));v.set(yP.login.name,new q(!1,[]));v.set(yP.logout.name,new q(!1,[]));v.set(Dr.customFunctionsStatus.name,new q(!0,[]));v.set(Dr.getCustomFunctions.name,new q(!0,[]));v.set(Dr.getComponents.name,new q(!0,[]));v.set(Dr.getComponentFile.name,new q(!0,[]));v.set(Dr.setComponentFile.name,new q(!0,[]));v.set(Dr.dropComponent.name,new q(!0,[]));v.set(Dr.getCustomFunction.name,new q(!0,[]));v.set(Dr.setCustomFunction.name,new q(!0,[]));v.set(Dr.dropCustomFunction.name,new q(!0,[]));v.set(Dr.addComponent.name,new q(!0,[]));v.set(Dr.dropCustomFunctionProject.name,new q(!0,[]));v.set(Dr.packageComponent.name,new q(!0,[]));v.set(Dr.deployComponent.name,new q(!0,[]));v.set(HT.getRegistrationInfo.name,new q(!1,[]));v.set(yu.userInfo.name,new q(!1,[]));v.set(bu.describeAll.name,new q(!1,[]));v.set(O9,new q(!1,[]));v.set(N9,new q(!0,[]));v.set(A9,new q(!0,[]));v.set(lf.CSV_DATA_LOAD,new q(!1,[oi,Wi]));v.set(lf.CSV_URL_LOAD,new q(!1,[oi,Wi]));v.set(lf.CSV_FILE_LOAD,new q(!1,[oi,Wi]));v.set(lf.IMPORT_FROM_S3,new q(!1,[oi,Wi]));v.set(PP.EXPORT_TO_S3,new q(!0,[]));v.set(PP.EXPORT_LOCAL,new q(!0,[]));v.set(Qr.VALID_SQL_OPS_ENUM.DELETE,new q(!1,[UP]));v.set(Qr.VALID_SQL_OPS_ENUM.SELECT,new q(!1,[gn]));v.set(Qr.VALID_SQL_OPS_ENUM.INSERT,new q(!1,[oi]));v.set(Qr.VALID_SQL_OPS_ENUM.UPDATE,new q(!1,[Wi]));BP.exports={verifyPerms:I9,verifyPermsAst:y9,verifyBulkLoadAttributePerms:C9};function y9(e,t,r){if(Tn.isEmptyOrZeroLength(e))throw dt.info("verify_perms_ast has an empty user parameter"),cr(new Error);if(Tn.isEmptyOrZeroLength(t))throw dt.info("verify_perms_ast has an empty user parameter"),cr(new Error);if(Tn.isEmptyOrZeroLength(r))throw dt.info("verify_perms_ast has a null operation parameter"),cr(new Error);try{let s=new LP,n=new T9(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw dt.info("No schemas defined in verifyPermsAst(), will not continue."),cr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&MP[r])throw cr(new Error,Lt.DROP_SYSTEM,Ou.FORBIDDEN);if(c&&!u)return null;let _=NP.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof R9.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=vP(t,r,o,s);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),p=FT(t.role.permission,f,d[E]);qT(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw cr(s)}}a(y9,"verifyPermsAst");function I9(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw dt.info("null required parameter in verifyPerms"),cr(new Error,Lt.DEFAULT_INVALID_REQUEST,Ou.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new LP;if(Tn.isEmptyOrZeroLength(e.hdb_user.role)||Tn.isEmptyOrZeroLength(e.hdb_user.role.permission))return dt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Lt.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(Qr.SYSTEM_SCHEMA_NAME)||n===Qr.SYSTEM_SCHEMA_NAME;if(l&&MP[r])throw cr(new Error,Lt.DROP_SYSTEM,Ou.FORBIDDEN);if(u&&!l||_===!0&&(r===zr.createSchema.name||r===zr.dropSchema.name))return null;if(b9.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=NP.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===RP||r===AP){if(n===Qr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Lt.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===RP&&(!d[n]||!d[n][Nu]))return c.handleInvalidItem(Lt.SCHEMA_NOT_FOUND(n));if(r===AP&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Nu]))return c.handleInvalidItem(Lt.TABLE_NOT_FOUND(n,i))}}let f=vP(e.hdb_user,r,o,c,s);if(f)return f;if(v.get(r)&&v.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&Qr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[Qr.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(b=>b[Qr.PERMS_CRUD_ENUM.READ]).forEach(b=>{p.push(b.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(R=>R.attribute),e.get_attributes=p)}let E=w9(e),h=FT(e.hdb_user.role.permission,n,i);return qT(E,h,r,i,n,c,s),c.getPermsResponse()}a(I9,"verifyPerms");function vP(e,t,r,s,n){if(Tn.arrayHasEmptyValues([e,t,r]))throw dt.info("hasPermissions has an invalid parameter"),cr(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 dt.info(`operation ${t} not found.`),cr(new Error,Lt.OP_NOT_FOUND(t),Ou.BAD_REQUEST);if(v.get(t)&&v.get(t).requires_su)return dt.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Lt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Nu]===!1){s.addInvalidItem(Lt.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Lt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[Nu]===!1)s.addInvalidItem(Lt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=v.get(t).perms;!Tn.isEmpty(n)&&E.includes(n)&&(E=[n]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(dt.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=Lt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw dt.error(E),dt.error(f),cr(DP.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(vP,"hasPermissions");function qT(e,t,r,s,n,i,o){if(!e||!t)throw dt.info("no attributes specified in checkAttributePerms."),cr(new Error);let c=v.get(r).perms;if(!c||c==="")throw dt.info(`no permissions found for ${r} in checkAttributePerms().`),cr(new Error);if(Tn.isEmptyOrZeroLength(t))return dt.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[Nu]===!1){i.addInvalidItem(Lt.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(Qr.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==gn)throw cr(new Error,Lt.SYSTEM_TIMESTAMP_PERMS_ERR,Ou.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Lt.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(qT,"checkAttributePerms");function w9(e){let t=new Set;try{if(e.action)return t;if(e.operation===Qr.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 s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){dt.info(r)}return t}a(w9,"getRecordAttributes");function FT(e,t,r){let s=new Map;if(Tn.isEmpty(e))return dt.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{dt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(FT,"getAttributePermissions");function C9(e,t,r,s,n,i,o){let c=new Set(i),u=FT(e,s,n);qT(c,u,t,n,s,o,r)}a(C9,"verifyBulkLoadAttributePerms")});var ff=T((ofe,xP)=>{"use strict";xP.exports={evaluateSQL:k9,processAST:GP,convertSQLToAST:FP,checkASTPermissions:qP};var L9=Gr(),HP=require("util"),D9=HP.callbackify(L9.insert),U9=Fr().search,M9=$C().update,P9=HP.callbackify(M9),v9=KC().convertDelete,ai=require("alasql"),B9=_f(),df=G(),H9=r_(),q9=$(),Iu=y(),{hdb_errors:F9,handleHDBError:GT}=j(),{HTTP_STATUS_CODES:xT}=F9;H9(ai);var G9=403,x9="There was a problem performing this insert. Please check the logs and try again.",kT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function k9(e,t){let r=e.parsed_sql_object;if(!r){r=FP(e.sql);let s,n=r.ast.statements[0];if(n instanceof ai.yy.Insert?s=n.into.databaseid:n instanceof ai.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof ai.yy.Update||n instanceof ai.yy.Delete?s=n.table.databaseid:df.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof ai.yy.Select)&&q9.isEmptyOrZeroLength(s))return t("No schema specified",null)}GP(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(k9,"evaluateSQL");function qP(e,t){let r;try{r=B9.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(qP,"checkASTPermissions");function FP(e){let t=new kT;if(!e)throw GT(new Error,"The 'sql' parameter is missing from the request body",xT.BAD_REQUEST);try{let r=e.trim(),s=ai.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
15
- `);throw s[1]?GT(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,xT.BAD_REQUEST):GT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",xT.BAD_REQUEST)}return t}a(FP,"convertSQLToAST");function GP(e,t,r){try{let s=V9;if(!e.bypass_auth&&!t.permissions_checked){let i=qP(e,t);if(i&&i.length>0)return r(G9,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Iu.VALID_SQL_OPS_ENUM.SELECT:s=U9,n=t.ast.statements[0];break;case Iu.VALID_SQL_OPS_ENUM.INSERT:s=$9;break;case Iu.VALID_SQL_OPS_ENUM.UPDATE:s=P9;break;case Iu.VALID_SQL_OPS_ENUM.DELETE:s=v9;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(GP,"processAST");function V9(e,t){df.info(e),t("unknown sql statement")}a(V9,"nullFunction");function $9({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=Y9(i,e.values)}catch(o){return r(o)}D9(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){df.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a($9,"convertInsert");function Y9(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 s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=ai.compile(`SELECT ${n.toString()} AS [${Iu.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw df.error(r),new Error(x9)}}a(Y9,"createDataObjects")});var VT=T((cfe,VP)=>{"use strict";var{S3:K9,GetObjectCommand:W9}=require("@aws-sdk/client-s3");VP.exports={getFileStreamFromS3:Q9,getS3AuthObj:kP};async function Q9(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await kP(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new W9(r))).Body}a(Q9,"getFileStreamFromS3");function kP(e,t,r){return new K9({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(kP,"getS3AuthObj")});var Ef=T((lfe,ZP)=>{"use strict";var KP=Fr(),z9=ff(),J9=VT(),{AsyncParser:X9,Transform:j9}=require("json2csv"),Cu=require("stream"),Ur=$(),$T=require("fs-extra"),Z9=require("path"),Jr=G(),{promisify:WP}=require("util"),wu=$(),{handleHDBError:it,hdb_errors:e7}=j(),{HDB_ERROR_MSGS:ur,HTTP_STATUS_CODES:ot}=e7,{streamAsJSON:t7}=Mp(),{Upload:r7}=require("@aws-sdk/lib-storage"),$P=["search_by_value","search_by_hash","sql"],YP=["json","csv"],QP="json",zP="csv",s7="Successfully exported JSON locally.",n7="Successfully exported CSV locally.",i7=1e3,o7=KP.searchByHash,a7=KP.searchByValue,c7=WP(z9.evaluateSQL),u7=WP(Cu.finished);ZP.exports={export_to_s3:f7,export_local:l7,toCsvStream:JP};async function l7(e){Jr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=XP(e);if(!Ur.isEmpty(t))throw Jr.error(t),it(new Error,t,ot.BAD_REQUEST,void 0,void 0,!0);if(Ur.isEmpty(e.path))throw Jr.error(ur.MISSING_VALUE("path")),it(new Error,ur.MISSING_VALUE("path"),ot.BAD_REQUEST,void 0,void 0,!0);let r=(Ur.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Z9.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Ur.buildFolderPath(e.path,r);await _7(e.path);let n=await jP(e);return await d7(s,e.format,n)}a(l7,"export_local");async function _7(e){if(Jr.trace("in confirmPath"),Ur.isEmptyOrZeroLength(e))throw it(new Error,`Invalid path: ${e}`,ot.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await $T.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,Jr.error(s),it(new Error,s,ot.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 Jr.error(r),it(new Error,r,ot.BAD_REQUEST,void 0,void 0,!0)}return!0}a(_7,"confirmPath");async function d7(e,t,r){if(Jr.trace("in saveToLocal"),wu.isEmptyOrZeroLength(e))throw it(new Error,ur.INVALID_VALUE("file_path"),ot.BAD_REQUEST,void 0,void 0,!0);if(wu.isEmptyOrZeroLength(t))throw it(new Error,ur.INVALID_VALUE("Source format"),ot.BAD_REQUEST,void 0,void 0,!0);if(wu.isEmpty(r))throw it(new Error,ur.NOT_FOUND("Data"),ot.BAD_REQUEST,void 0,void 0,!0);if(t===QP){let s=$T.createWriteStream(e);return t7(r).pipe(s),await u7(s),{message:s7,path:e}}else if(t===zP){let s=$T.createWriteStream(e),n=Cu.Readable.from(r),i={},o={objectMode:!0};return await new X9(i,o).fromInput(n).toOutput(s).promise(!1),{message:n7,path:e}}throw it(new Error,ur.INVALID_VALUE("format"),ot.BAD_REQUEST)}a(d7,"saveToLocal");async function f7(e){if(!e.s3||Object.keys(e.s3).length===0)throw it(new Error,ur.MISSING_VALUE("S3 object"),ot.BAD_REQUEST);if(Ur.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw it(new Error,ur.MISSING_VALUE("aws_access_key_id"),ot.BAD_REQUEST);if(Ur.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw it(new Error,ur.MISSING_VALUE("aws_secret_access_key"),ot.BAD_REQUEST);if(Ur.isEmptyOrZeroLength(e.s3.bucket))throw it(new Error,ur.MISSING_VALUE("bucket"),ot.BAD_REQUEST);if(Ur.isEmptyOrZeroLength(e.s3.key))throw it(new Error,ur.MISSING_VALUE("key"),ot.BAD_REQUEST);if(Ur.isEmptyOrZeroLength(e.s3.region))throw it(new Error,ur.MISSING_VALUE("region"),ot.BAD_REQUEST);let t=XP(e);if(!Ur.isEmpty(t))throw it(new Error,t,ot.BAD_REQUEST);Jr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await jP(e)}catch(u){throw Jr.error(u),u}let s,n=await J9.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Cu.PassThrough;if(e.format===zP){i=e.s3.key+".csv";let u=JP(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===QP){i=e.s3.key+".json";let u=new Cu.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%i7===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw it(new Error,ur.INVALID_VALUE("format"),ot.BAD_REQUEST);return new r7({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(f7,"export_to_s3");function JP(e){let t=Cu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new j9(r,s);return t.pipe(n)}a(JP,"toCsvStream");function XP(e){if(Jr.trace("in exportCoreValidation"),Ur.isEmpty(e.format))return"format missing";if(YP.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${YP.join(", ")}`;let t=e.search_operation.operation;if(Ur.isEmpty(t))return"search_operation.operation missing";if($P.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${$P.join(", ")}`}a(XP,"exportCoreValidation");async function jP(e){Jr.trace("in getRecords");let t,r;if(wu.isEmpty(e.search_operation)||wu.isEmptyOrZeroLength(e.search_operation.operation))throw it(new Error,ur.INVALID_VALUE("Search operation"),ot.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=a7;break;case"search_by_hash":t=o7;break;case"sql":t=c7;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Jr.error(r),it(new Error,r,ot.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(jP,"getRecords")});var av={};ve(av,{contentTypes:()=>KT,findBestSerializer:()=>pf,getDeserializer:()=>ca,registerContentHandlers:()=>WT,serialize:()=>Sf,serializeMessage:()=>ii});function E7(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function WT(e){e.register(m7,{serializers:[{regex:/^application\/json$/,serializer:hf.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new Qi.EncoderStream(Lu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?mf.Readable.from((0,Ws.encodeIter)(t,Lu)):(0,Ws.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,YT.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Ws.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Qi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function pf(e){let r=(e.headers.asObject||e.headers).accept,s,n=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=Dt.get(_);if(E){let h=(E.q||1)*d;h>n&&(s=E,i=E.type||_,n=h,o=f)}}if(!s){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Dt.keys()).join(", "))}};s=Dt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function Sf(e,t,r){let s=tv&&t.headers.asObject?.["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=pf(t);if(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 s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Rn.createBrotliCompress)({params:{[Rn.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Rn.constants.BROTLI_MODE_TEXT:Rn.constants.BROTLI_MODE_GENERIC,[Rn.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>tv?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Rn.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function ii(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return JSON.stringify(e);let r=t.serialize;if(r)return r(e);let s=pf(t);return r=t.serialize=s.serializer.serialize,r(e)}function p7(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function ca(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Dt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Dt.get(e)?.deserialize||rv(e,s);return o=>p7(o).then(i)}return e&&Dt.get(e)?.deserialize||rv(e,s)}function rv(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return JSON.parse(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function S7(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var hf,YT,Ws,Qi,Rn,mf,sv,nv,iv,Lu,Dt,KT,ev,ov,h7,m7,tv,ta=Te(()=>{hf=D(Mp()),YT=D(Ef()),Ws=require("msgpackr"),Qi=require("cbor-x"),Rn=require("zlib"),mf=require("stream");fr();sv=require("../index"),nv=D(X()),iv=D(y()),Lu={useRecords:!1,useToJSON:!0},Dt=new Map,KT=Dt;ct.contentTypes=KT;(0,sv._assignPackageExport)("contentTypes",KT);Dt.set("application/json",{serializeStream:hf.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});ev=new Qi.Encoder(Lu);Dt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Qi.EncoderStream(Lu).end(e)},serialize:ev.encode,deserialize:ev.decode,q:1});Dt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?mf.Readable.from((0,Ws.encodeIter)(e,Lu)):(0,Ws.pack)(e)},serialize:Ws.pack,deserialize:Ws.unpack,q:.9});Dt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,YT.toCsvStream)(e)},q:.1});Dt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Dt.set("text/event-stream",{serializeStream:function(e){return mf.Readable.from(S7(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+`
13
+ `,""):null}catch(f){f.stderr?i[u].npm_error=zM(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 na.info(`finished installModules with response ${i}`),i}a(y6,"installModules");function zM(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
14
+ `);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(zM,"parseNPMStdErr");async function I6(e){na.info(`starting auditModules for request: ${e}`);let t=XM(e);if(t)throw ra(t,t.message,sa.BAD_REQUEST);let{projects:r}=e;await Zd(),await JM(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=jd.join(AT,o);s[o]={npm_output:null,npm_error:null};try{let u=await Ru("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=zM(u.stderr)}}return na.info(`finished auditModules with response ${s}`),s}a(I6,"auditModules");async function Zd(){try{return await Ru("npm -v"),!0}catch{throw ra(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",sa.BAD_REQUEST,void 0,void 0,!0)}}a(Zd,"checkNPMInstalled");async function JM(e){if(!Array.isArray(e)||e.length===0)throw ra(new Error,"projects argument must be an array with at least 1 element",sa.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=jd.join(AT,i.toString());if(!await KM.pathExists(o)){t.push(i);continue}let u=jd.join(o,"package.json");await KM.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.`,sa.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.`,sa.BAD_REQUEST,void 0,void 0,!0)}a(JM,"checkProjectPaths");function XM(e){let t=Xd.object({projects:Xd.array().min(1).items(Xd.string()).required(),dry_run:Xd.boolean().default(!1)});return R6.validateBySchema(e,t)}a(XM,"modulesValidator")});var NT=T((Vde,sP)=>{"use strict";var ia=require("fs-extra"),OT=require("path"),tf=G(),ZM=$(),rf=y(),rP=X(),w6=Ar();sP.exports=C6;async function C6(){let e=L6(),t=rP.get(rf.CONFIG_PARAMS.ROOTPATH),r=OT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+rf.PACKAGE_ROOT}},n=OT.join(t,"node_modules");await ia.ensureDir(n);let i,o=!0,c=!1;try{i=await ia.readJson(r)}catch(u){if(ZM.isEmptyOrZeroLength(e))return;if(u.code!==rf.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!ZM.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await eP(_);s.dependencies[u]=l+_}if(!o){tf.notify("Installing components"),await tP(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await eP(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(tf.notify("Removing component",u),c=!0);c&&(tf.notify("Updating components."),await tP(r,s,i))}a(C6,"installComponents");function L6(){let e=w6.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(L6,"getComponentsConfig");async function eP(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":OT.extname(e)||await ia.pathExists(e)?"file:":"github:"}a(eP,"getPkgPrefix");async function tP(e,t,r){tf.trace("npm installing components package.json",t),await ia.writeFile(e,JSON.stringify(t,null," "));try{await ef().installAllRootModules(rP.get(rf.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await ia.writeFile(e,JSON.stringify(r,null," ")):await ia.unlink(e),s}}a(tP,"installPackages")});var IT=T((Kde,aP)=>{"use strict";var Le=require("fs-extra"),bT=require("fast-glob"),le=require("path"),iP=require("tar-fs"),Yde=require("uuid").v4,yT=require("normalize-path"),Ks=YM(),St=G(),Me=y(),nt=X(),Au=Ar(),D6=$(),{PACKAGE_ROOT:U6}=y(),{handleHDBError:Tt,hdb_errors:M6}=j(),{basename:P6}=require("path"),v6=NT(),oP=X(),B6=y(),{Readable:H6}=require("stream"),{isMainThread:q6}=require("worker_threads"),{HDB_ERROR_MSGS:Ki,HTTP_STATUS_CODES:gt}=M6,F6=le.join(U6,"application-template"),nP=le.join(nt.get(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function G6(){St.trace("getting custom api status");let e={};try{e={port:nt.get(Me.CONFIG_PARAMS.HTTP_PORT),directory:nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Tt(new Error,Ki.FUNCTION_STATUS,gt.INTERNAL_SERVER_ERROR,St.ERR,t)}return e}a(G6,"customFunctionsStatus");function x6(){St.trace("getting custom api endpoints");let e={},t=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT);try{bT.sync(yT(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:bT.sync(yT(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:bT.sync(yT(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Tt(new Error,Ki.GET_FUNCTIONS,gt.INTERNAL_SERVER_ERROR,St.ERR,r)}return e}a(x6,"getCustomFunctions");function k6(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Ks.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,gt.BAD_REQUEST);St.trace("getting custom api endpoint file content");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=le.join(r,s,n,i+".js");try{return Le.readFileSync(o,{encoding:"utf8"})}catch(c){throw Tt(new Error,Ki.GET_FUNCTION,gt.INTERNAL_SERVER_ERROR,St.ERR,c)}}a(k6,"getCustomFunction");function V6(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Ks.setCustomFunctionValidator(e);if(t)throw Tt(t,t.message,gt.BAD_REQUEST);St.trace("setting custom function file content");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return Le.outputFileSync(le.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Tt(new Error,Ki.SET_FUNCTION,gt.INTERNAL_SERVER_ERROR,St.ERR,c)}}a(V6,"setCustomFunction");function $6(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Ks.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,gt.BAD_REQUEST);St.trace("dropping custom function file");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return Le.unlinkSync(le.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Tt(new Error,Ki.DROP_FUNCTION,gt.INTERNAL_SERVER_ERROR,St.ERR,o)}}a($6,"dropCustomFunction");function Y6(e){e.project&&(e.project=le.parse(e.project).name);let t=Ks.addComponentValidator(e);if(t)throw Tt(t,t.message,gt.BAD_REQUEST);St.trace("adding component");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=le.join(r,s);return Le.mkdirSync(n,{recursive:!0}),Le.copySync(F6,n),`Successfully added project: ${s}`}catch(n){throw Tt(new Error,Ki.ADD_FUNCTION,gt.INTERNAL_SERVER_ERROR,St.ERR,n)}}a(Y6,"addComponent");function K6(e){e.project&&(e.project=le.parse(e.project).name);let t=Ks.dropCustomFunctionProjectValidator(e);if(t)throw Tt(t,t.message,gt.BAD_REQUEST);St.trace("dropping custom function project");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=nt.get(Me.CONFIG_PARAMS.APPS);if(!D6.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return Au.updateConfigValue(Me.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=le.join(r,s);return Le.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw Tt(new Error,Ki.DROP_FUNCTION_PROJECT,gt.INTERNAL_SERVER_ERROR,St.ERR,i)}}a(K6,"dropCustomFunctionProject");async function W6(e){e.project&&(e.project=le.parse(e.project).name);let t=Ks.packageComponentValidator(e);if(t)throw Tt(t,t.message,gt.BAD_REQUEST);let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;St.trace("packaging component",s);let n;try{n=await Le.realpath(le.join(r,s))}catch(u){if(u.code!==Me.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Le.realpath(le.join(nt.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===Me.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await Le.ensureDir(nP);let i=le.join(nP,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(le.join(n,"node_modules"))}),iP.pack(n,o).pipe(Le.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Le.readFileSync(i,{encoding:"base64"});return await Le.remove(i),{project:s,payload:c}}a(W6,"packageComponent");async function Q6(e){e.project&&(e.project=le.parse(e.project).name);let t=Ks.deployComponentValidator(e);if(t)throw Tt(t,t.message,gt.BAD_REQUEST);let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(St.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=le.join(r,s),i="file:"+o,await Le.ensureDir(o);let f=H6.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(iP.extract(o,{finish:h})).on("error",p)});let E=await Le.readdir(o);E.length===1&&E[0]==="package"&&(await Le.copy(le.join(o,"package"),o),await Le.remove(le.join(o,"package")))}if(await Au.addConfig(s,{package:i}),!n){await v6();let f=oP.get(B6.CONFIG_PARAMS.ROOTPATH);o=le.join(f,"node_modules",s)}if(q6)return;let c=new Map;c.isWorker=!0;let u=(nf(),Z(sf)),_;u.setErrorReporter(f=>_=f);let l=P6(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return St.info("Installed component"),`Successfully deployed: ${s}`}a(Q6,"deployComponent");async function z6(){let e=Au.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)=>{let u=await Le.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=le.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Le.stat(d),E={name:le.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c},"walk_dir"),s=await r(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{name:nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT).split(le.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(le.join(nt.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(nf(),Z(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 s}a(z6,"getComponents");async function J6(e){let t=Ks.getComponentFileValidator(e);if(t)throw Tt(t,t.message,gt.BAD_REQUEST);let s=Au.getConfigObj()[e.project]||e.project==="harperdb"?le.join(oP.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules"):nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Le.stat(le.join(s,e.project,e.file));return{message:await Le.readFile(le.join(s,e.project,e.file),n),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Me.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${le.join(e.project,e.file)}'`):i}}a(J6,"getComponentFile");async function X6(e){let t=Ks.setComponentFileValidator(e);if(t)throw Tt(t,t.message,gt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=le.join(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Le.ensureFile(s),await Le.outputFile(s,e.payload,r)):await Le.ensureDir(s),"Successfully set component: "+e.file}a(X6,"setComponentFile");async function j6(e){let t=Ks.dropComponentFileValidator(e);if(t)throw Tt(t,t.message,gt.BAD_REQUEST);let r=e.file?le.join(e.project,e.file):e.project,s=le.join(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),r);return await Le.pathExists(s)&&await Le.remove(s),Au.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(j6,"dropComponent");aP.exports={customFunctionsStatus:G6,getCustomFunctions:x6,getCustomFunction:k6,setCustomFunction:V6,dropCustomFunction:$6,addComponent:Y6,dropCustomFunctionProject:K6,packageComponent:W6,deployComponent:Q6,getComponents:z6,getComponentFile:J6,setComponentFile:X6,dropComponent:j6}});var wT=T((Qde,uP)=>{"use strict";var Ws=require("joi"),cP=xe();uP.exports={readTransactionLogValidator:Z6,deleteTransactionLogsBeforeValidator:e9};function Z6(e){let t=Ws.object({schema:Ws.string().required(),table:Ws.string().required(),from:Ws.date().timestamp(),to:Ws.date().timestamp(),limit:Ws.number().min(1)});return cP.validateBySchema(e,t)}a(Z6,"readTransactionLogValidator");function e9(e){let t=Ws.object({schema:Ws.string().required(),table:Ws.string().required(),timestamp:Ws.date().timestamp().required()});return cP.validateBySchema(e,t)}a(e9,"deleteTransactionLogsBeforeValidator")});var af=T((Jde,EP)=>{"use strict";var CT=y(),of=dt(),lP=$(),_P=X(),dP=un(),{handleHDBError:oa,hdb_errors:t9}=j(),{HTTP_STATUS_CODES:aa}=t9,{readTransactionLogValidator:r9,deleteTransactionLogsBeforeValidator:s9}=wT(),fP="This operation relies on clustering and cannot run with it disable.",n9="Logs successfully deleted from transaction log.",i9="All logs successfully deleted from transaction log.";EP.exports={readTransactionLog:o9,deleteTransactionLogsBefore:a9};async function*o9(e){let t=r9(e);if(t)throw oa(t,t.message,aa.BAD_REQUEST,void 0,void 0,!0);if(!_P.get(CT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw oa(new Error,fP,aa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=lP.checkSchemaTableExist(r,s);if(n)throw oa(new Error,n,aa.NOT_FOUND,void 0,void 0,!0);let i=dP.createNatsTableStreamName(r,s),o=await of.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===CT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(o9,"readTransactionLog");async function a9(e){let t=s9(e);if(t)throw oa(t,t.message,aa.BAD_REQUEST,void 0,void 0,!0);if(!_P.get(CT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw oa(new Error,fP,aa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=lP.checkSchemaTableExist(r,s);if(i)throw oa(new Error,i,aa.NOT_FOUND,void 0,void 0,!0);let o=dP.createNatsTableStreamName(r,s),{jsm:c}=await of.getNATSReferences(),u=await of.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=n9,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=i9):d=(await of.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(a9,"deleteTransactionLogsBefore")});var mP=T((jde,hP)=>{"use strict";var LT=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};hP.exports=LT});var SP=T((efe,pP)=>{"use strict";var DT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};pP.exports=DT});var MT=T((rfe,gP)=>{"use strict";var TP=mP(),c9=SP(),{HDB_ERROR_MSGS:u9}=Er(),UT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=u9.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,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new TP(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new c9(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new TP(r,s,[],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}};gP.exports=UT});var _f=T((nfe,BP)=>{"use strict";var PT=xr(),cf=Gr(),Jr=id(),bu=bi(),vT=Li(),l9=Qp(),_9=UL(),yu=kr(),uf=sS(),ft=G(),d9=oS(),f9=Od(),E9=xS(),h9=Id(),m9=kS(),p9=VS(),S9=KS(),T9=QS(),BT=XS(),Tn=$(),g9=CU(),HT=rT(),OP=$d(),zr=y(),NP=CM(),R9=Qo(),bP=jc(),yP=(zd(),Z(pu)),IP=Ar(),Ur=IT(),A9=require("alasql"),wP=af(),CP=ef(),LP=MT(),{handleHDBError:cr,hdb_errors:DP}=j(),{HDB_ERROR_MSGS:Lt,HTTP_STATUS_CODES:Ou}=DP,v=new Map,UP="delete",oi="insert",gn="read",Wi="update",Nu="describe",RP=bu.describeSchema.name,AP=bu.describeTable.name,MP={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},O9="catchup",N9="handleGetJob",b9="handleGetJobsByStartDate",lf={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},y9=[Jr.createTable.name,Jr.createAttribute.name,Jr.dropTable.name,Jr.dropAttribute.name],PP={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},q=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};v.set(PT.insert.name,new q(!1,[oi]));v.set(PT.update.name,new q(!1,[Wi]));v.set(PT.upsert.name,new q(!1,[oi,Wi]));v.set(cf.searchByConditions.name,new q(!1,[gn]));v.set(cf.searchByHash.name,new q(!1,[gn]));v.set(cf.searchByValue.name,new q(!1,[gn]));v.set(cf.search.name,new q(!1,[gn]));v.set(Jr.createSchema.name,new q(!0,[]));v.set(Jr.createTable.name,new q(!0,[]));v.set(Jr.createAttribute.name,new q(!1,[oi]));v.set(Jr.dropSchema.name,new q(!0,[]));v.set(Jr.dropTable.name,new q(!0,[]));v.set(Jr.dropAttribute.name,new q(!0,[]));v.set(bu.describeSchema.name,new q(!1,[gn]));v.set(bu.describeTable.name,new q(!1,[gn]));v.set(vT.deleteRecord.name,new q(!1,[UP]));v.set(yu.addUser.name,new q(!0,[]));v.set(yu.alterUser.name,new q(!0,[]));v.set(yu.dropUser.name,new q(!0,[]));v.set(yu.listUsersExternal.name,new q(!0,[]));v.set(uf.listRoles.name,new q(!0,[]));v.set(uf.addRole.name,new q(!0,[]));v.set(uf.alterRole.name,new q(!0,[]));v.set(uf.dropRole.name,new q(!0,[]));v.set(d9.name,new q(!0,[]));v.set(f9.name,new q(!0,[]));v.set(E9.name,new q(!0,[]));v.set(h9.name,new q(!0,[]));v.set(m9.name,new q(!0,[]));v.set(p9.name,new q(!0,[]));v.set(BT.setRoutes.name,new q(!0,[]));v.set(BT.getRoutes.name,new q(!0,[]));v.set(BT.deleteRoutes.name,new q(!0,[]));v.set(IP.setConfiguration.name,new q(!0,[]));v.set(S9.clusterStatus.name,new q(!0,[]));v.set(T9.name,new q(!0,[]));v.set(HT.getFingerprint.name,new q(!0,[]));v.set(HT.setLicense.name,new q(!0,[]));v.set(vT.deleteFilesBefore.name,new q(!0,[]));v.set(vT.deleteAuditLogsBefore.name,new q(!0,[]));v.set(OP.restart.name,new q(!0,[]));v.set(OP.restartService.name,new q(!0,[]));v.set(l9.name,new q(!0,[]));v.set(_9.name,new q(!0,[gn]));v.set(R9.systemInformation.name,new q(!0,[]));v.set(IP.getConfiguration.name,new q(!0,[]));v.set(wP.readTransactionLog.name,new q(!0,[]));v.set(wP.deleteTransactionLogsBefore.name,new q(!0,[]));v.set(CP.installModules.name,new q(!0,[]));v.set(CP.auditModules.name,new q(!0,[]));v.set(bP.createTokens.name,new q(!1,[]));v.set(bP.refreshOperationToken.name,new q(!1,[]));v.set(yP.login.name,new q(!1,[]));v.set(yP.logout.name,new q(!1,[]));v.set(Ur.customFunctionsStatus.name,new q(!0,[]));v.set(Ur.getCustomFunctions.name,new q(!0,[]));v.set(Ur.getComponents.name,new q(!0,[]));v.set(Ur.getComponentFile.name,new q(!0,[]));v.set(Ur.setComponentFile.name,new q(!0,[]));v.set(Ur.dropComponent.name,new q(!0,[]));v.set(Ur.getCustomFunction.name,new q(!0,[]));v.set(Ur.setCustomFunction.name,new q(!0,[]));v.set(Ur.dropCustomFunction.name,new q(!0,[]));v.set(Ur.addComponent.name,new q(!0,[]));v.set(Ur.dropCustomFunctionProject.name,new q(!0,[]));v.set(Ur.packageComponent.name,new q(!0,[]));v.set(Ur.deployComponent.name,new q(!0,[]));v.set(HT.getRegistrationInfo.name,new q(!1,[]));v.set(yu.userInfo.name,new q(!1,[]));v.set(bu.describeAll.name,new q(!1,[]));v.set(N9,new q(!1,[]));v.set(b9,new q(!0,[]));v.set(O9,new q(!0,[]));v.set(lf.CSV_DATA_LOAD,new q(!1,[oi,Wi]));v.set(lf.CSV_URL_LOAD,new q(!1,[oi,Wi]));v.set(lf.CSV_FILE_LOAD,new q(!1,[oi,Wi]));v.set(lf.IMPORT_FROM_S3,new q(!1,[oi,Wi]));v.set(PP.EXPORT_TO_S3,new q(!0,[]));v.set(PP.EXPORT_LOCAL,new q(!0,[]));v.set(zr.VALID_SQL_OPS_ENUM.DELETE,new q(!1,[UP]));v.set(zr.VALID_SQL_OPS_ENUM.SELECT,new q(!1,[gn]));v.set(zr.VALID_SQL_OPS_ENUM.INSERT,new q(!1,[oi]));v.set(zr.VALID_SQL_OPS_ENUM.UPDATE,new q(!1,[Wi]));BP.exports={verifyPerms:w9,verifyPermsAst:I9,verifyBulkLoadAttributePerms:L9};function I9(e,t,r){if(Tn.isEmptyOrZeroLength(e))throw ft.info("verify_perms_ast has an empty user parameter"),cr(new Error);if(Tn.isEmptyOrZeroLength(t))throw ft.info("verify_perms_ast has an empty user parameter"),cr(new Error);if(Tn.isEmptyOrZeroLength(r))throw ft.info("verify_perms_ast has a null operation parameter"),cr(new Error);try{let s=new LP,n=new g9(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw ft.info("No schemas defined in verifyPermsAst(), will not continue."),cr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&MP[r])throw cr(new Error,Lt.DROP_SYSTEM,Ou.FORBIDDEN);if(c&&!u)return null;let _=NP.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof A9.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=vP(t,r,o,s);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),p=FT(t.role.permission,f,d[E]);qT(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw cr(s)}}a(I9,"verifyPermsAst");function w9(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw ft.info("null required parameter in verifyPerms"),cr(new Error,Lt.DEFAULT_INVALID_REQUEST,Ou.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new LP;if(Tn.isEmptyOrZeroLength(e.hdb_user.role)||Tn.isEmptyOrZeroLength(e.hdb_user.role.permission))return ft.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Lt.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(zr.SYSTEM_SCHEMA_NAME)||n===zr.SYSTEM_SCHEMA_NAME;if(l&&MP[r])throw cr(new Error,Lt.DROP_SYSTEM,Ou.FORBIDDEN);if(u&&!l||_===!0&&(r===Jr.createSchema.name||r===Jr.dropSchema.name))return null;if(y9.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=NP.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===RP||r===AP){if(n===zr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Lt.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===RP&&(!d[n]||!d[n][Nu]))return c.handleInvalidItem(Lt.SCHEMA_NOT_FOUND(n));if(r===AP&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Nu]))return c.handleInvalidItem(Lt.TABLE_NOT_FOUND(n,i))}}let f=vP(e.hdb_user,r,o,c,s);if(f)return f;if(v.get(r)&&v.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&zr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[zr.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(b=>b[zr.PERMS_CRUD_ENUM.READ]).forEach(b=>{p.push(b.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(R=>R.attribute),e.get_attributes=p)}let E=C9(e),h=FT(e.hdb_user.role.permission,n,i);return qT(E,h,r,i,n,c,s),c.getPermsResponse()}a(w9,"verifyPerms");function vP(e,t,r,s,n){if(Tn.arrayHasEmptyValues([e,t,r]))throw ft.info("hasPermissions has an invalid parameter"),cr(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 ft.info(`operation ${t} not found.`),cr(new Error,Lt.OP_NOT_FOUND(t),Ou.BAD_REQUEST);if(v.get(t)&&v.get(t).requires_su)return ft.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Lt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Nu]===!1){s.addInvalidItem(Lt.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Lt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[Nu]===!1)s.addInvalidItem(Lt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=v.get(t).perms;!Tn.isEmpty(n)&&E.includes(n)&&(E=[n]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(ft.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=Lt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw ft.error(E),ft.error(f),cr(DP.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(vP,"hasPermissions");function qT(e,t,r,s,n,i,o){if(!e||!t)throw ft.info("no attributes specified in checkAttributePerms."),cr(new Error);let c=v.get(r).perms;if(!c||c==="")throw ft.info(`no permissions found for ${r} in checkAttributePerms().`),cr(new Error);if(Tn.isEmptyOrZeroLength(t))return ft.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[Nu]===!1){i.addInvalidItem(Lt.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(zr.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==gn)throw cr(new Error,Lt.SYSTEM_TIMESTAMP_PERMS_ERR,Ou.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Lt.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(qT,"checkAttributePerms");function C9(e){let t=new Set;try{if(e.action)return t;if(e.operation===zr.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 s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){ft.info(r)}return t}a(C9,"getRecordAttributes");function FT(e,t,r){let s=new Map;if(Tn.isEmpty(e))return ft.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{ft.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(FT,"getAttributePermissions");function L9(e,t,r,s,n,i,o){let c=new Set(i),u=FT(e,s,n);qT(c,u,t,n,s,o,r)}a(L9,"verifyBulkLoadAttributePerms")});var ff=T((ofe,xP)=>{"use strict";xP.exports={evaluateSQL:V9,processAST:GP,convertSQLToAST:FP,checkASTPermissions:qP};var D9=xr(),HP=require("util"),U9=HP.callbackify(D9.insert),M9=Gr().search,P9=$C().update,v9=HP.callbackify(P9),B9=KC().convertDelete,ai=require("alasql"),H9=_f(),df=G(),q9=r_(),F9=$(),Iu=y(),{hdb_errors:G9,handleHDBError:GT}=j(),{HTTP_STATUS_CODES:xT}=G9;q9(ai);var x9=403,k9="There was a problem performing this insert. Please check the logs and try again.",kT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function V9(e,t){let r=e.parsed_sql_object;if(!r){r=FP(e.sql);let s,n=r.ast.statements[0];if(n instanceof ai.yy.Insert?s=n.into.databaseid:n instanceof ai.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof ai.yy.Update||n instanceof ai.yy.Delete?s=n.table.databaseid:df.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof ai.yy.Select)&&F9.isEmptyOrZeroLength(s))return t("No schema specified",null)}GP(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(V9,"evaluateSQL");function qP(e,t){let r;try{r=H9.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(qP,"checkASTPermissions");function FP(e){let t=new kT;if(!e)throw GT(new Error,"The 'sql' parameter is missing from the request body",xT.BAD_REQUEST);try{let r=e.trim(),s=ai.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
15
+ `);throw s[1]?GT(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,xT.BAD_REQUEST):GT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",xT.BAD_REQUEST)}return t}a(FP,"convertSQLToAST");function GP(e,t,r){try{let s=$9;if(!e.bypass_auth&&!t.permissions_checked){let i=qP(e,t);if(i&&i.length>0)return r(x9,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Iu.VALID_SQL_OPS_ENUM.SELECT:s=M9,n=t.ast.statements[0];break;case Iu.VALID_SQL_OPS_ENUM.INSERT:s=Y9;break;case Iu.VALID_SQL_OPS_ENUM.UPDATE:s=v9;break;case Iu.VALID_SQL_OPS_ENUM.DELETE:s=B9;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(GP,"processAST");function $9(e,t){df.info(e),t("unknown sql statement")}a($9,"nullFunction");function Y9({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=K9(i,e.values)}catch(o){return r(o)}U9(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){df.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(Y9,"convertInsert");function K9(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 s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=ai.compile(`SELECT ${n.toString()} AS [${Iu.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw df.error(r),new Error(k9)}}a(K9,"createDataObjects")});var VT=T((cfe,VP)=>{"use strict";var{S3:W9,GetObjectCommand:Q9}=require("@aws-sdk/client-s3");VP.exports={getFileStreamFromS3:z9,getS3AuthObj:kP};async function z9(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await kP(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Q9(r))).Body}a(z9,"getFileStreamFromS3");function kP(e,t,r){return new W9({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(kP,"getS3AuthObj")});var Ef=T((lfe,ZP)=>{"use strict";var KP=Gr(),J9=ff(),X9=VT(),{AsyncParser:j9,Transform:Z9}=require("json2csv"),Cu=require("stream"),Mr=$(),$T=require("fs-extra"),e7=require("path"),Xr=G(),{promisify:WP}=require("util"),wu=$(),{handleHDBError:it,hdb_errors:t7}=j(),{HDB_ERROR_MSGS:ur,HTTP_STATUS_CODES:ot}=t7,{streamAsJSON:r7}=Mp(),{Upload:s7}=require("@aws-sdk/lib-storage"),$P=["search_by_value","search_by_hash","sql"],YP=["json","csv"],QP="json",zP="csv",n7="Successfully exported JSON locally.",i7="Successfully exported CSV locally.",o7=1e3,a7=KP.searchByHash,c7=KP.searchByValue,u7=WP(J9.evaluateSQL),l7=WP(Cu.finished);ZP.exports={export_to_s3:E7,export_local:_7,toCsvStream:JP};async function _7(e){Xr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=XP(e);if(!Mr.isEmpty(t))throw Xr.error(t),it(new Error,t,ot.BAD_REQUEST,void 0,void 0,!0);if(Mr.isEmpty(e.path))throw Xr.error(ur.MISSING_VALUE("path")),it(new Error,ur.MISSING_VALUE("path"),ot.BAD_REQUEST,void 0,void 0,!0);let r=(Mr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(e7.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Mr.buildFolderPath(e.path,r);await d7(e.path);let n=await jP(e);return await f7(s,e.format,n)}a(_7,"export_local");async function d7(e){if(Xr.trace("in confirmPath"),Mr.isEmptyOrZeroLength(e))throw it(new Error,`Invalid path: ${e}`,ot.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await $T.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,Xr.error(s),it(new Error,s,ot.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 Xr.error(r),it(new Error,r,ot.BAD_REQUEST,void 0,void 0,!0)}return!0}a(d7,"confirmPath");async function f7(e,t,r){if(Xr.trace("in saveToLocal"),wu.isEmptyOrZeroLength(e))throw it(new Error,ur.INVALID_VALUE("file_path"),ot.BAD_REQUEST,void 0,void 0,!0);if(wu.isEmptyOrZeroLength(t))throw it(new Error,ur.INVALID_VALUE("Source format"),ot.BAD_REQUEST,void 0,void 0,!0);if(wu.isEmpty(r))throw it(new Error,ur.NOT_FOUND("Data"),ot.BAD_REQUEST,void 0,void 0,!0);if(t===QP){let s=$T.createWriteStream(e);return r7(r).pipe(s),await l7(s),{message:n7,path:e}}else if(t===zP){let s=$T.createWriteStream(e),n=Cu.Readable.from(r),i={},o={objectMode:!0};return await new j9(i,o).fromInput(n).toOutput(s).promise(!1),{message:i7,path:e}}throw it(new Error,ur.INVALID_VALUE("format"),ot.BAD_REQUEST)}a(f7,"saveToLocal");async function E7(e){if(!e.s3||Object.keys(e.s3).length===0)throw it(new Error,ur.MISSING_VALUE("S3 object"),ot.BAD_REQUEST);if(Mr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw it(new Error,ur.MISSING_VALUE("aws_access_key_id"),ot.BAD_REQUEST);if(Mr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw it(new Error,ur.MISSING_VALUE("aws_secret_access_key"),ot.BAD_REQUEST);if(Mr.isEmptyOrZeroLength(e.s3.bucket))throw it(new Error,ur.MISSING_VALUE("bucket"),ot.BAD_REQUEST);if(Mr.isEmptyOrZeroLength(e.s3.key))throw it(new Error,ur.MISSING_VALUE("key"),ot.BAD_REQUEST);if(Mr.isEmptyOrZeroLength(e.s3.region))throw it(new Error,ur.MISSING_VALUE("region"),ot.BAD_REQUEST);let t=XP(e);if(!Mr.isEmpty(t))throw it(new Error,t,ot.BAD_REQUEST);Xr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await jP(e)}catch(u){throw Xr.error(u),u}let s,n=await X9.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Cu.PassThrough;if(e.format===zP){i=e.s3.key+".csv";let u=JP(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===QP){i=e.s3.key+".json";let u=new Cu.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%o7===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw it(new Error,ur.INVALID_VALUE("format"),ot.BAD_REQUEST);return new s7({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(E7,"export_to_s3");function JP(e){let t=Cu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new Z9(r,s);return t.pipe(n)}a(JP,"toCsvStream");function XP(e){if(Xr.trace("in exportCoreValidation"),Mr.isEmpty(e.format))return"format missing";if(YP.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${YP.join(", ")}`;let t=e.search_operation.operation;if(Mr.isEmpty(t))return"search_operation.operation missing";if($P.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${$P.join(", ")}`}a(XP,"exportCoreValidation");async function jP(e){Xr.trace("in getRecords");let t,r;if(wu.isEmpty(e.search_operation)||wu.isEmptyOrZeroLength(e.search_operation.operation))throw it(new Error,ur.INVALID_VALUE("Search operation"),ot.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=c7;break;case"search_by_hash":t=a7;break;case"sql":t=u7;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Xr.error(r),it(new Error,r,ot.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(jP,"getRecords")});var av={};ve(av,{contentTypes:()=>KT,findBestSerializer:()=>pf,getDeserializer:()=>ca,registerContentHandlers:()=>WT,serialize:()=>Sf,serializeMessage:()=>ii});function h7(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function WT(e){e.register(p7,{serializers:[{regex:/^application\/json$/,serializer:hf.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new Qi.EncoderStream(Lu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?mf.Readable.from((0,Qs.encodeIter)(t,Lu)):(0,Qs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,YT.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Qs.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Qi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function pf(e){let r=(e.headers.asObject||e.headers).accept,s,n=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=Dt.get(_);if(E){let h=(E.q||1)*d;h>n&&(s=E,i=E.type||_,n=h,o=f)}}if(!s){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Dt.keys()).join(", "))}};s=Dt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function Sf(e,t,r){let s=tv&&t.headers.asObject?.["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=pf(t);if(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 s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Rn.createBrotliCompress)({params:{[Rn.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Rn.constants.BROTLI_MODE_TEXT:Rn.constants.BROTLI_MODE_GENERIC,[Rn.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>tv?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Rn.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function ii(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return JSON.stringify(e);let r=t.serialize;if(r)return r(e);let s=pf(t);return r=t.serialize=s.serializer.serialize,r(e)}function S7(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function ca(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Dt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Dt.get(e)?.deserialize||rv(e,s);return o=>S7(o).then(i)}return e&&Dt.get(e)?.deserialize||rv(e,s)}function rv(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return JSON.parse(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function T7(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var hf,YT,Qs,Qi,Rn,mf,sv,nv,iv,Lu,Dt,KT,ev,ov,m7,p7,tv,ta=Te(()=>{hf=D(Mp()),YT=D(Ef()),Qs=require("msgpackr"),Qi=require("cbor-x"),Rn=require("zlib"),mf=require("stream");fr();sv=require("../index"),nv=D(X()),iv=D(y()),Lu={useRecords:!1,useToJSON:!0},Dt=new Map,KT=Dt;ct.contentTypes=KT;(0,sv._assignPackageExport)("contentTypes",KT);Dt.set("application/json",{serializeStream:hf.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});ev=new Qi.Encoder(Lu);Dt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Qi.EncoderStream(Lu).end(e)},serialize:ev.encode,deserialize:ev.decode,q:1});Dt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?mf.Readable.from((0,Qs.encodeIter)(e,Lu)):(0,Qs.pack)(e)},serialize:Qs.pack,deserialize:Qs.unpack,q:.9});Dt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,YT.toCsvStream)(e)},q:.1});Dt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Dt.set("text/event-stream",{serializeStream:function(e){return mf.Readable.from(T7(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+`
16
16
  `),e.data){let r=e.data;typeof r=="object"&&(r=JSON.stringify(r)),t+="data: "+r+`
17
17
  `}return e.id&&(t+="id: "+e.id+`
18
18
  `),e.retry&&(t+="retry: "+e.retry+`
@@ -21,13 +21,13 @@ var CH=Object.create;var Na=Object.defineProperty;var LH=Object.getOwnPropertyDe
21
21
 
22
22
  `:`data: ${e}
23
23
 
24
- `},q:.8});Dt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});ov={type:"application/json",serializeStream:hf.streamAsJSON,serialize:JSON.stringify,deserialize:E7,q:.8};Dt.set("*/*",ov);Dt.set("",ov);a(E7,"tryJSONParse");a(WT,"registerContentHandlers");h7=require("fastify-plugin"),m7=h7(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=pf(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(pf,"findBestSerializer");tv=nv.default.get(iv.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Sf,"serialize");a(ii,"serializeMessage");a(p7,"streamToBuffer");a(ca,"getDeserializer");a(rv,"deserializerUnknownType");a(S7,"transformIterable")});var Tf={};ve(Tf,{start:()=>R7});async function g7(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Sl(e);let n=new ni;try{e.responseHeaders=n;let i=e.url.slice(1),o=zT.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 Ge(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=ca(r["content-type"],!0)(e.body)}catch(p){throw new Uu.ClientError(p,400)}switch(e.authorize=!0,s){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":n.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 Uu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Uu.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,QT.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){T7[0]=f;let p=String.fromCharCode(34,(Ut[0]&63)+62,(Ut[0]>>6)+(Ut[1]<<2&63)+62,(Ut[1]>>4)+(Ut[2]<<4&63)+62,(Ut[2]>>2)+62,(Ut[3]&63)+62,(Ut[3]>>6)+(Ut[4]<<2&63)+62,(Ut[4]>>4)+(Ut[5]<<4&63)+62,(Ut[5]>>2)+62,(Ut[6]&63)+62,(Ut[6]>>6)+(Ut[7]<<2&63)+62,34),S=r["if-none-match"];S&&p==S?(l?.onDone&&l.onDone(),d=304,l=void 0):n.setIfNone("ETag",p),QT.lastModified&&n.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&n.setIfNone("Location",e.newLocation);let E={status:d,headers:n,body:void 0},h=l?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&n.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=Sf(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?zi.warn(i):zi.info(i):zi.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),n.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=Sf(i.contentType?i:i.toString(),e,o),o}}function R7(e){QT=e,!cv&&(cv=!0,zT=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return g7(t,r)}),e.server.ws(async(t,r,s)=>{Du++;let n=new rs;uv||(uv=!0,wc(l=>{Du>0&&l.push({metric:"ws-connections",connections:Du,byThread:!0})}));let i;t.on("error",l=>{i=!0,zi.warn(l)});let o;t.on("message",a(function(d){o||(o=ca(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{Du--,kr(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=zT.getMatch(u);if(kr(!!_,"connection","ws","connect"),!_)t.send(ii(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,Nr(h=>({count:h.count,total:Du}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await Ge(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=ii(E.value,r);t.send(h),Nr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var zi,Uu,Ut,T7,QT,cv,zT,uv,Du,lv=Te(()=>{ta();_n();zi=D(G()),Uu=D(j());Tl();qa();mi();Yd();Ut=new Uint8Array(8),T7=new Float64Array(Ut.buffer,0,1),QT={};a(g7,"http");Du=0;a(R7,"start")});var JT=T((Rfe,_v)=>{var{recordAction:gf,recordActionBinary:A7}=(_n(),Z(Cc)),O7=require("fastify-plugin"),N7=200;_v.exports=O7(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.context.config,_,l,d;u.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),gf(o,"duration",_,d,l),A7(n.raw.statusCode<400,"success",_,d,l);let f=N7;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{gf(performance.now()-c,"transfer",_,d,l),gf(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,gf(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var eg=T((Afe,mv)=>{var bf=require("clone"),yf=xe(),b7=$(),Of=y(),y7=G(),Rf=require("fs"),XT=require("joi"),{string:Nf}=XT.types(),{hdb_errors:I7,handleHDBError:Mu}=j(),{HDB_ERROR_MSGS:w7,HTTP_STATUS_CODES:Af}=I7,{common_validators:ua}=Ls(),dv=1e9,fv=" is required",C7=["insert","update","upsert"],jT={database:{presence:!1,format:ua.schema_format,length:ua.schema_length},schema:{presence:!1,format:ua.schema_format,length:ua.schema_length},table:{presence:!0,format:ua.schema_format,length:ua.schema_length},action:{inclusion:{within:C7,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},L7={schema:Nf.required(),table:Nf.required(),action:Nf.valid("insert","update","upsert")},{AWS_ACCESS_KEY:D7,AWS_SECRET:U7,AWS_BUCKET:M7,AWS_FILE_KEY:P7,REGION:v7}=Of.S3_BUCKET_AUTH_KEYS,B7={s3:{presence:!0},[`s3.${D7}`]:{presence:!0,type:"String"},[`s3.${U7}`]:{presence:!0,type:"String"},[`s3.${M7}`]:{presence:!0,type:"String"},[`s3.${P7}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${v7}`]:{presence:!0,type:"String"}},Ev=bf(jT);Ev.data.presence={message:fv};var hv=bf(jT);hv.file_path.presence={message:fv};var H7=Object.assign(bf(jT),B7),ZT=bf(L7);ZT.csv_url=Nf.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();ZT.passthrough_headers=XT.object();function q7(e){let t=yf.validateObject(e,Ev);return If(e,t)}a(q7,"dataObject");function F7(e){let t=yf.validateBySchema(e,XT.object(ZT));return If(e,t)}a(F7,"urlObject");function G7(e){let t=yf.validateObject(e,hv);return If(e,t)}a(G7,"fileObject");function x7(e){let t=yf.validateObject(e,H7);return If(e,t)}a(x7,"s3FileObject");function If(e,t){if(!t){let r=b7.checkGlobalSchemaTable(e.schema,e.table);if(r)return Mu(new Error,r,Af.BAD_REQUEST);if(e.operation===Of.OPERATIONS_ENUM.CSV_FILE_LOAD){try{Rf.accessSync(e.file_path,Rf.constants.R_OK|Rf.constants.F_OK)}catch(s){return s.code===Of.NODE_ERROR_CODES.ENOENT?Mu(s,`No such file or directory ${s.path}`,Af.BAD_REQUEST):s.code===Of.NODE_ERROR_CODES.EACCES?Mu(s,`Permission denied ${s.path}`,Af.BAD_REQUEST):Mu(s)}try{let s=Rf.statSync(e.file_path).size;if(s>dv)return Mu(new Error,w7.MAX_FILE_SIZE_ERR(s,dv),Af.BAD_REQUEST)}catch(s){y7.error(s),console.error(s)}}}return t}a(If,"postValidateChecks");mv.exports={dataObject:q7,urlObject:F7,fileObject:G7,s3FileObject:x7}});var tg=T((Nfe,pv)=>{"use strict";var Pu=G(),wf=y();async function k7(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===wf.OPERATIONS_ENUM.INSERT||t.operation===wf.OPERATIONS_ENUM.UPDATE||t.operation===wf.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===wf.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Pu.info(i.message),i):i.http_resp_msg?(Pu.error(`Error calling operation: ${e.name}`),Pu.error(i.http_resp_msg),i):(Pu.error(`Error calling operation: ${e.name}`),Pu.error(i),i)}}a(k7,"callOperationFunctionAsAwait");pv.exports={callOperationFunctionAsAwait:k7}});var Tv=T((yfe,Sv)=>{"use strict";var rg=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},sg=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};Sv.exports={BulkLoadFileObject:rg,BulkLoadDataObject:sg}});var Rv=T((wfe,gv)=>{"use strict";var ng=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};gv.exports=ng});var lg=T((Pfe,qv)=>{"use strict";var Cf=Gr(),Df=eg(),V7=require("needle"),Rs=y(),Lfe=ke(),la=$(),{handleHDBError:We,hdb_errors:Lv}=j(),{HTTP_STATUS_CODES:Mt,HDB_ERROR_MSGS:ft,CHECK_LOGS_WRAPPER:Xi}=Lv,_a=G(),ig=require("papaparse");la.promisifyPapaParse();var As=require("fs-extra"),$7=require("path"),{chain:Av}=require("stream-chain"),Ov=require("stream-json/streamers/StreamArray"),Nv=require("stream-json/utils/Batch"),bv=require("stream-chain/utils/comp"),{finished:yv}=require("stream"),Y7=X(),Dv=tg(),K7=VT(),{BulkLoadFileObject:ag,BulkLoadDataObject:W7}=Tv(),cg=MT(),{verifyBulkLoadAttributePerms:Uv}=_f(),Dfe=Rv(),Ufe=_t(),Mfe=cn(),{databases:Q7}=(fe(),Z(Ce)),{coerceType:z7}=(H_(),Z(hp)),Iv="No records parsed from csv file.",Ji=`${Y7.get("HDB_ROOT")}/tmp`,{schema_regex:J7}=Ls(),wv=1024*1024*2,Cv=5e3,X7={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};qv.exports={csvDataLoad:j7,csvURLLoad:Z7,csvFileLoad:eee,importFromS3:tee};async function j7(e,t){let r=Df.dataObject(e);if(r)throw We(r,r.message,Mt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=vv(e.schema,e.table),i=ig.parse(e.data,{header:!0,skipEmptyLines:!0,transform:og.bind(null,n),dynamicTyping:!1}),o=new cg;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&Uv(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 We(new Error,c,Mt.BAD_REQUEST,void 0,void 0,!0);let u=new W7(e.action,e.schema,e.table,i.data);return s=await Dv.callOperationFunctionAsAwait(Bv,u,null),s.message===Iv?Iv:Hv(s.records,s.number_written)}catch(n){throw ji(n)}}a(j7,"csvDataLoad");async function Z7(e){let t=Df.urlObject(e);if(t)throw We(t,t.message,Mt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Ji}/${r}`;try{await ree(e,r)}catch(n){throw _a.error(ft.DOWNLOAD_FILE_ERR(r)+" - "+n),We(n,Xi(ft.DOWNLOAD_FILE_ERR(r)))}try{let n=new ag(this.job_operation_function.name,e.action,e.schema,e.table,s,Rs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await ug(n);return await Lf(s),i}catch(n){throw await Lf(s),ji(n)}}a(Z7,"csvURLLoad");async function eee(e){let t=Df.fileObject(e);if(t)throw We(t,t.message,Mt.BAD_REQUEST,void 0,void 0,!0);let r=new ag(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Rs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await ug(r)}catch(s){throw ji(s)}}a(eee,"csvFileLoad");async function tee(e){let t=Df.s3FileObject(e);if(t)throw We(t,t.message,Mt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=$7.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Ji}/${n}`;let i=new ag(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await see(n,e);let o=await ug(i);return await Lf(r),o}catch(s){throw await Lf(r),ji(s)}}a(tee,"importFromS3");async function ree(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await V7("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw We(s,n,s.statusCode,Rs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}iee(r,e.csv_url),await nee(t,r.raw)}a(ree,"downloadCSVFile");async function see(e,t){try{let r=`${Ji}/${e}`;await As.mkdirp(Ji),await As.writeFile(`${Ji}/${e}`,"",{flag:"a+"});let s=await As.createWriteStream(r),n=await K7.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){_a.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw _a.error(ft.S3_DOWNLOAD_ERR+" - "+r),We(r,Xi(ft.S3_DOWNLOAD_ERR))}}a(see,"downloadFileFromS3");async function nee(e,t){try{await As.mkdirp(Ji),await As.writeFile(`${Ji}/${e}`,t)}catch(r){throw _a.error(ft.WRITE_TEMP_FILE_ERR),We(r,Xi(ft.DEFAULT_BULK_LOAD_ERR))}}a(nee,"writeFileToTempFolder");async function Lf(e){if(e)try{await As.access(e),await As.unlink(e)}catch{_a.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Lf,"deleteTempFile");function iee(e,t){if(e.statusCode!==Lv.HTTP_STATUS_CODES.OK)throw We(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Mt.BAD_REQUEST);if(!X7[e.headers["content-type"]])throw We(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Mt.BAD_REQUEST);if(!e.raw)throw We(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Mt.BAD_REQUEST)}a(iee,"validateURLResponse");async function ug(e){try{let t;switch(e.file_type){case Rs.VALID_S3_FILE_TYPES.CSV:t=await oee(e);break;case Rs.VALID_S3_FILE_TYPES.JSON:t=await aee(e);break;default:throw We(new Error,ft.DEFAULT_BULK_LOAD_ERR,Mt.BAD_REQUEST,Rs.LOG_LEVELS.ERROR,ft.INVALID_FILE_EXT_ERR(e))}return Hv(t.records,t.number_written)}catch(t){throw ji(t)}}a(ug,"fileLoad");async function Mv(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await Cf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&Uv(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=We(c);r(u)}}a(Mv,"validateChunk");async function Pv(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;la.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!la.isEmpty(c)&&!la.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,n&&n.resume()}catch(c){let u=We(c,Xi(ft.INSERT_CSV_ERR),Mt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,ft.INSERT_CSV_ERR+" - "+c);r(u)}}a(Pv,"insertChunk");async function oee(e){let t={records:0,number_written:0},r=vv(e.schema,e.table);try{let s=new cg,n=As.createReadStream(e.file_path,{highWaterMark:wv});n.setEncoding("utf8"),await ig.parsePromise(n,Mv.bind(null,e,s),og.bind(null,r));let i=s.getPermsResponse();if(i)throw We(new Error,i,Mt.BAD_REQUEST);return n=As.createReadStream(e.file_path,{highWaterMark:wv}),n.setEncoding("utf8"),await ig.parsePromise(n,Pv.bind(null,e,t),og.bind(null,r)),n.destroy(),t}catch(s){throw We(s,Xi(ft.PAPA_PARSE_ERR),Mt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,ft.PAPA_PARSE_ERR+s)}}a(oee,"callPapaParse");function vv(e,t){let r=Q7[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>z7(i,n));return s}a(vv,"createTransformMap");function og(e,t,r){let s=e.get(r);return s?s(t):la.autoCast(t)}a(og,"typeFunction");async function aee(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new cg,n=Av([As.createReadStream(e.file_path,{encoding:"utf-8"}),Ov.withParser(),c=>c.value,new Nv({batchSize:Cv}),bv(async c=>{await Mv(e,s,r,c)})]);await new Promise((c,u)=>{yv(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw We(new Error,i,Mt.BAD_REQUEST);let o=Av([As.createReadStream(e.file_path,{encoding:"utf-8"}),Ov.withParser(),c=>c.value,new Nv({batchSize:Cv}),bv(async c=>{await Pv(e,t,r,c)})]);return await new Promise((c,u)=>{yv(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw We(s,Xi(ft.INSERT_JSON_ERR),Mt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,ft.INSERT_JSON_ERR+s)}}a(aee,"insertJson");async function Bv(e){let t={};try{e.data&&e.data.length>0&&cee(e.data[0])?t=await uee(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",_a.info(t.message))}catch(r){throw ji(r)}return t}a(Bv,"callBulkFileLoad");function cee(e){let t=Object.keys(e);for(let r of t)if(!J7.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(cee,"validateColumnNames");async function uee(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=Cf.insert;break;case"update":i=Cf.update;break;case"upsert":i=Cf.upsert;break;default:throw We(new Error,ft.INVALID_ACTION_PARAM_ERR(s),Mt.BAD_REQUEST,Rs.LOG_LEVELS.ERROR,ft.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){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=la.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw ji(o)}}a(uee,"bulkFileLoad");function Hv(e,t){return`successfully loaded ${t} of ${e} records`}a(Hv,"buildResponseMsg");function ji(e){return We(e,Xi(ft.DEFAULT_BULK_LOAD_ERR),Mt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,ft.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(ji,"buildTopLevelErrMsg")});var Gv=T((Bfe,Fv)=>{"use strict";var _g=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};Fv.exports=_g});var Vv=T((qfe,kv)=>{"use strict";var lee=y(),xv=require("moment"),_ee=require("uuid").v4,dg=class{static{a(this,"JobObject")}constructor(){this.id=_ee(),this.type=void 0,this.start_datetime=xv().valueOf(),this.created_datetime=xv().valueOf(),this.end_datetime=void 0,this.status=lee.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};kv.exports=dg});var fg=T((Gfe,zv)=>{"use strict";var dee=require("uuid").v4,Kv=Gr(),Wv=Fr(),fee=Us(),Eee=Ao(),hee=Gv(),Qe=y(),mee=Vv(),pee=uS(),Xr=G(),See=tc(),da=$(),{promisify:Tee}=require("util"),Zi=require("moment"),gee=ff(),Uf=eg(),$v=Mm(),{deleteTransactionLogsBeforeValidator:Ree}=wT(),{handleHDBError:Aee,hdb_errors:Oee}=j(),{HTTP_STATUS_CODES:Nee}=Oee,Yv=Wv.searchByValue,bee=Wv.searchByHash,yee=Kv.insert,Iee=Tee(gee.evaluateSQL),wee=Kv.update;zv.exports={addJob:Dee,updateJob:Mee,handleGetJob:Cee,handleGetJobsByStartDate:Lee,getJobById:Qv};async function Cee(e){try{let t=await Qv(e.id);return da.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 Xr.error("There was an error getting job",t),new Error(r)}}a(Cee,"handleGetJob");async function Lee(e){try{let t=await Uee(e);if(Xr.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=Zi(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Zi(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 Xr.error(r),new Error(r)}}a(Lee,"handleGetJobsByStartDate");async function Dee(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||da.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return Xr.info(l),t.error=l,t}if(!Qe.JOB_TYPE_ENUM[e.operation])return Xr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Qe.OPERATIONS_ENUM.CSV_FILE_LOAD:s=Uf.fileObject(e);break;case Qe.OPERATIONS_ENUM.CSV_URL_LOAD:s=Uf.urlObject(e);break;case Qe.OPERATIONS_ENUM.CSV_DATA_LOAD:s=Uf.dataObject(e);break;case Qe.OPERATIONS_ENUM.IMPORT_FROM_S3:s=Uf.s3FileObject(e);break;case Qe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Qe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=$v(e,"date");break;case Qe.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=$v(e,"timestamp");break;case Qe.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=Ree(e);break;default:break}if(s)throw Aee(s,s.message,Nee.BAD_REQUEST,void 0,void 0,!0);let n=new mee;n.type=e.operation===Qe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Qe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new fee(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.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 Xr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=dee();try{o=await Yv(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return Xr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Xr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new See(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await yee(u)}catch(l){return Xr.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 ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,Xr.trace(l)}return t}a(Dee,"addJob");async function Uee(e){let t=Zi(e.from_date,Zi.ISO_8601),r=Zi(e.to_date,Zi.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 s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new hee(s,e.hdb_user);try{return await Iee(n)}catch(i){throw Xr.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(Uee,"getJobsInDateRange");async function Qv(e){if(da.isEmptyOrZeroLength(e))return da.errorizeMessage("Invalid job ID specified.");let t=new Eee(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await bee(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Xr.error(s),da.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Qv,"getJobById");async function Mee(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(da.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Qe.JOB_STATUS_ENUM.COMPLETE||e.status===Qe.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Zi().valueOf());let t=new pee(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await wee(t),r}a(Mee,"updateJob")});var t0=T((kfe,e0)=>{"use strict";var Jv=$(),lr=y(),Pee=require("moment"),Mf=lg(),Pf=G(),Xv=fg(),jv=Ef(),Zv=Li(),vee=Je(),Bee=af(),Eg=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Hee(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 lr.JOB_TYPE_ENUM.csv_file_load:await An(e,Mf.csvFileLoad);break;case lr.JOB_TYPE_ENUM.csv_url_load:await An(e,Mf.csvURLLoad);break;case lr.JOB_TYPE_ENUM.csv_data_load:await An(e,Mf.csvDataLoad);break;case lr.JOB_TYPE_ENUM.import_from_s3:await An(e,Mf.importFromS3);break;case lr.JOB_TYPE_ENUM.empty_trash:break;case lr.JOB_TYPE_ENUM.export_local:await An(e,jv.export_local);break;case lr.JOB_TYPE_ENUM.export_to_s3:await An(e,jv.export_to_s3);break;case lr.JOB_TYPE_ENUM.delete_files_before:case lr.JOB_TYPE_ENUM.delete_records_before:await An(e,Zv.deleteFilesBefore);break;case lr.JOB_TYPE_ENUM.delete_audit_logs_before:await An(e,Zv.deleteAuditLogsBefore);break;case lr.JOB_TYPE_ENUM.delete_transaction_logs_before:await An(e,Bee.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(Hee,"parseMessage");async function An(e,t){try{e.job.status=lr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Pee().valueOf(),await Xv.updateJob(e.job),await qee(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):Pf.error(`There was an error running ${t.name} job with id ${e.job.id}`),Pf.error(s),e.job.message=s,e.job.status=lr.JOB_STATUS_ENUM.ERROR;try{await Xv.updateJob(e.job)}catch(n){throw Pf.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(An,"runJob");async function qee(e){Pf.trace("launching job thread:",e),vee.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[lr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(qee,"launchJobThread");e0.exports={parseMessage:Hee,RunnerMessage:Eg}});var s0=T(($fe,r0)=>{"use strict";var hg=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};r0.exports=hg});var T0=T((Kfe,Rg)=>{"use strict";var qf=Fr(),Sg=ff(),vf=lg(),On=id(),Bf=bi(),Bu=Li(),Fee=Qp(),vu=xr(),Hf=sS(),Pt=IT(),Et=G(),Gee=oS(),xee=Od(),kee=xS(),Vee=Id(),$ee=kS(),Yee=VS(),Kee=KS(),Wee=QS(),mg=XS(),n0=Ef(),Qee=_f(),Tg=fg(),P=y(),{hdb_errors:qu,handleHDBError:Hu}=j(),{HTTP_STATUS_CODES:i0}=qu,pg=rT(),o0=$d(),h0=require("util"),fa=Gr(),zee=xn(),Jee=Qo(),a0=t0(),c0=jc(),u0=(zd(),Z(pu)),l0=Rr(),_0=af(),d0=ef(),{setServerUtilities:Xee}=(H_(),Z(hp)),{CONTEXT:jee}=(ns(),Z(qE)),{_assignPackageExport:Zee}=require("../index"),{transformReq:ete}=$(),{server:tte}=(fr(),Z(di)),rte=tg(),f0=qf.searchByHash,ste=qf.searchByValue,nte=h0.promisify(qf.search),ite=h0.promisify(Sg.evaluateSQL),ote={[P.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.CREATE_TABLE]:!0,[P.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[P.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.DROP_TABLE]:!0,[P.OPERATIONS_ENUM.DROP_SCHEMA]:!0},H=s0();async function m0(e,t){try{if(e.body.operation!=="read_log"&&(Et.log_level===P.LOG_LEVELS.INFO||Et.log_level===P.LOG_LEVELS.DEBUG||Et.log_level===P.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;Et.info(o)}}catch(s){Et.error(s)}let r=await rte.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return ote[e.body.operation]&&zee.setSchemaDataToGlobal(s=>{s&&Et.error(s)}),r}a(m0,"processLocalTransaction");var E0=cte();Rg.exports={chooseOperation:p0,getOperationFunction:S0,operation:gg,processLocalTransaction:m0};Xee(Rg.exports);tte.operation=gg;function p0(e){let t;try{t=S0(e)}catch(n){throw Et.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=Sg.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Sg.checkASTPermissions(e,i);if(o)throw Et.error(`${i0.FORBIDDEN} from operation ${e.operation}`),Et.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Hu(new Error,o,qu.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==P.OPERATIONS_ENUM.LOGIN&&e.operation!==P.OPERATIONS_ENUM.LOGOUT){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=Qee.verifyPerms(i,n);if(o)throw Et.error(`${i0.FORBIDDEN} from operation ${e.operation}`),Et.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Hu(new Error,o,qu.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw Hu(n,"There was an error when trying to choose an operation path")}return r}a(p0,"chooseOperation");function S0(e){if(Et.trace(`getOperationFunction with operation: ${e.operation}`),E0.has(e.operation))return E0.get(e.operation);throw Hu(new Error,qu.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),qu.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(S0,"getOperationFunction");Zee("operation",gg);function gg(e,t){e.hdb_user=this[jee]?.user,e.bypass_auth=!t;let r=p0(e);return m0({body:e},r)}a(gg,"operation");async function ate(e){Et.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[P.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case P.OPERATIONS_ENUM.INSERT:o=await fa.insert(i);break;case P.OPERATIONS_ENUM.UPDATE:o=await fa.update(i);break;case P.OPERATIONS_ENUM.UPSERT:o=await fa.upsert(i);break;case P.OPERATIONS_ENUM.DELETE:o=await Bu.deleteRecord(i);break;default:Et.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Et.info("Invalid operation in transaction"),Et.error(o)}}a(ate,"catchup");async function Qs(e){ete(e);let t,r;try{r=await Tg.addJob(e),t=r.createdJob,Et.info("addJob result",r);let s=new a0.RunnerMessage(t,e);return await a0.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw Et.error(n),Hu(s,n)}}a(Qs,"executeJob");function cte(){let e=new Map;return e.set(P.OPERATIONS_ENUM.INSERT,new H(fa.insert)),e.set(P.OPERATIONS_ENUM.UPDATE,new H(fa.update)),e.set(P.OPERATIONS_ENUM.UPSERT,new H(fa.upsert)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new H(qf.searchByConditions)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_HASH,new H(f0)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_ID,new H(f0)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_VALUE,new H(ste)),e.set(P.OPERATIONS_ENUM.SEARCH,new H(nte)),e.set(P.OPERATIONS_ENUM.SQL,new H(ite)),e.set(P.OPERATIONS_ENUM.CSV_DATA_LOAD,new H(Qs,vf.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new H(Qs,vf.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new H(Qs,vf.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new H(Qs,vf.importFromS3)),e.set(P.OPERATIONS_ENUM.CREATE_SCHEMA,new H(On.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_DATABASE,new H(On.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_TABLE,new H(On.createTable)),e.set(P.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new H(On.createAttribute)),e.set(P.OPERATIONS_ENUM.DROP_SCHEMA,new H(On.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_DATABASE,new H(On.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_TABLE,new H(On.dropTable)),e.set(P.OPERATIONS_ENUM.DROP_ATTRIBUTE,new H(On.dropAttribute)),e.set(P.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new H(Bf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_DATABASE,new H(Bf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_TABLE,new H(Bf.describeTable)),e.set(P.OPERATIONS_ENUM.DESCRIBE_ALL,new H(Bf.describeAll)),e.set(P.OPERATIONS_ENUM.DELETE,new H(Bu.deleteRecord)),e.set(P.OPERATIONS_ENUM.ADD_USER,new H(vu.addUser)),e.set(P.OPERATIONS_ENUM.ALTER_USER,new H(vu.alterUser)),e.set(P.OPERATIONS_ENUM.DROP_USER,new H(vu.dropUser)),e.set(P.OPERATIONS_ENUM.LIST_USERS,new H(vu.listUsersExternal)),e.set(P.OPERATIONS_ENUM.LIST_ROLES,new H(Hf.listRoles)),e.set(P.OPERATIONS_ENUM.ADD_ROLE,new H(Hf.addRole)),e.set(P.OPERATIONS_ENUM.ALTER_ROLE,new H(Hf.alterRole)),e.set(P.OPERATIONS_ENUM.DROP_ROLE,new H(Hf.dropRole)),e.set(P.OPERATIONS_ENUM.USER_INFO,new H(vu.userInfo)),e.set(P.OPERATIONS_ENUM.READ_LOG,new H(Gee)),e.set(P.OPERATIONS_ENUM.ADD_NODE,new H(xee)),e.set(P.OPERATIONS_ENUM.UPDATE_NODE,new H(kee)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new H(Vee)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new H($ee)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new H(Yee)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new H(l0.setConfiguration)),e.set(P.OPERATIONS_ENUM.CLUSTER_STATUS,new H(Kee.clusterStatus)),e.set(P.OPERATIONS_ENUM.CLUSTER_NETWORK,new H(Wee)),e.set(P.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new H(mg.setRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new H(mg.getRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new H(mg.deleteRoutes)),e.set(P.OPERATIONS_ENUM.EXPORT_TO_S3,new H(Qs,n0.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new H(Qs,Bu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new H(Qs,Bu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new H(Qs,n0.export_local)),e.set(P.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new H(Tg.handleGetJobsByStartDate)),e.set(P.OPERATIONS_ENUM.GET_JOB,new H(Tg.handleGetJob)),e.set(P.OPERATIONS_ENUM.GET_FINGERPRINT,new H(pg.getFingerprint)),e.set(P.OPERATIONS_ENUM.SET_LICENSE,new H(pg.setLicense)),e.set(P.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new H(pg.getRegistrationInfo)),e.set(P.OPERATIONS_ENUM.RESTART,new H(o0.restart)),e.set(P.OPERATIONS_ENUM.RESTART_SERVICE,new H(o0.restartService)),e.set(P.OPERATIONS_ENUM.CATCHUP,new H(ate)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new H(Jee.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new H(Qs,Bu.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new H(Fee)),e.set(P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new H(c0.createTokens)),e.set(P.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new H(c0.refreshOperationToken)),e.set(P.OPERATIONS_ENUM.LOGIN,new H(u0.login)),e.set(P.OPERATIONS_ENUM.LOGOUT,new H(u0.logout)),e.set(P.OPERATIONS_ENUM.GET_CONFIGURATION,new H(l0.getConfiguration)),e.set(P.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new H(Pt.customFunctionsStatus)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new H(Pt.getCustomFunctions)),e.set(P.OPERATIONS_ENUM.GET_COMPONENT_FILE,new H(Pt.getComponentFile)),e.set(P.OPERATIONS_ENUM.GET_COMPONENTS,new H(Pt.getComponents)),e.set(P.OPERATIONS_ENUM.SET_COMPONENT_FILE,new H(Pt.setComponentFile)),e.set(P.OPERATIONS_ENUM.DROP_COMPONENT,new H(Pt.dropComponent)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new H(Pt.getCustomFunction)),e.set(P.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new H(Pt.setCustomFunction)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new H(Pt.dropCustomFunction)),e.set(P.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new H(Pt.addComponent)),e.set(P.OPERATIONS_ENUM.ADD_COMPONENT,new H(Pt.addComponent)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new H(Pt.dropCustomFunctionProject)),e.set(P.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new H(Pt.packageComponent)),e.set(P.OPERATIONS_ENUM.PACKAGE_COMPONENT,new H(Pt.packageComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new H(Pt.deployComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_COMPONENT,new H(Pt.deployComponent)),e.set(P.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new H(_0.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new H(Qs,_0.deleteTransactionLogsBefore)),e.set(P.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new H(d0.installModules)),e.set(P.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new H(d0.auditModules)),e.set(P.OPERATIONS_ENUM.GET_BACKUP,new H(On.getBackup)),e}a(cte,"initializeOperationFunctionMap")});var Gf=T((Qfe,A0)=>{"use strict";var Ag=y(),ute=$(),Fu=G(),{handleHDBError:Og,hdb_errors:Ff}=j(),{isMainThread:lte}=require("worker_threads"),{Readable:_te}=require("stream"),g0=require("os"),dte=require("util"),fte=pS(),Ete=dte.promisify(fte.authorize),R0=T0(),{createGzip:hte,constants:mte}=require("zlib");function pte(e){let t=`Found an uncaught exception with message: ${e.message}. ${g0.EOL}Stack: ${e.stack} ${g0.EOL}Terminating ${lte?"HDB":"thread"}.`;console.error(t),Fu.fatal(t),process.exit(1)}a(pte,"handleServerUncaughtException");function Ste(e,t,r){if(Fu[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 s=e.statusCode?e.statusCode:Ff.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(Ste,"serverErrorHandler");function Tte(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=Og(new Error,"Invalid JSON.",Ff.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(ute.isEmpty(e.body.operation)){let s=Og(new Error,"Request body must include an 'operation' property.",Ff.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(Tte,"reqBodyValidationHandler");function gte(e,t,r){let s;e.body.operation!==Ag.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Ag.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Ag.OPERATIONS_ENUM.LOGOUT?Ete(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{Fu.warn(n),Fu.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(Og(n,i,Ff.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(gte,"authHandler");async function Rte(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=R0.chooseOperation(e.body);let n=await R0.processLocalTransaction(e,s);if(n instanceof _te&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(hte({level:mte.Z_BEST_SPEED})))}return n}catch(n){throw Fu.error(n),n}}a(Rte,"handlePostRequest");A0.exports={authHandler:gte,handlePostRequest:Rte,handleServerUncaughtException:pte,serverErrorHandler:Ste,reqBodyValidationHandler:Tte}});var y0=T((Jfe,b0)=>{"use strict";var Ate=require("fastify-plugin"),{handlePostRequest:O0,authHandler:Ote,reqBodyValidationHandler:Nte}=Gf();async function bte(e){e.decorate("hdbCore",{preValidation:[Nte,Ote],request:t=>N0(O0(t,response)),requestWithoutAuthentication:(t,r)=>N0(O0(t,r,!0))})}a(bte,"hdbCore");async function N0(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(N0,"convertAsyncIterators");b0.exports=Ate(bte)});var w0=T((jfe,I0)=>{"use strict";var Ng=require("fs"),Ea=X();Ea.initSync();var{CONFIG_PARAMS:Gu}=y(),yte=1024*1024*1024;function Ite(e){let t=Ea.get(Gu.HTTP_TIMEOUT),r=Ea.get(Gu.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:yte,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Ea.get(Gu.TLS_PRIVATEKEY),i=Ea.get(Gu.TLS_CERTIFICATE),o=Ea.get(Gu.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:Ng.readFileSync(`${n}`),cert:Ng.readFileSync(i)+(o?`
24
+ `},q:.8});Dt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});ov={type:"application/json",serializeStream:hf.streamAsJSON,serialize:JSON.stringify,deserialize:h7,q:.8};Dt.set("*/*",ov);Dt.set("",ov);a(h7,"tryJSONParse");a(WT,"registerContentHandlers");m7=require("fastify-plugin"),p7=m7(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=pf(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(pf,"findBestSerializer");tv=nv.default.get(iv.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Sf,"serialize");a(ii,"serializeMessage");a(S7,"streamToBuffer");a(ca,"getDeserializer");a(rv,"deserializerUnknownType");a(T7,"transformIterable")});var Tf={};ve(Tf,{start:()=>A7});async function R7(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Sl(e);let n=new ni;try{e.responseHeaders=n;let i=e.url.slice(1),o=zT.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 Ge(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=ca(r["content-type"],!0)(e.body)}catch(p){throw new Uu.ClientError(p,400)}switch(e.authorize=!0,s){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":n.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 Uu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Uu.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,QT.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){g7[0]=f;let p=String.fromCharCode(34,(Ut[0]&63)+62,(Ut[0]>>6)+(Ut[1]<<2&63)+62,(Ut[1]>>4)+(Ut[2]<<4&63)+62,(Ut[2]>>2)+62,(Ut[3]&63)+62,(Ut[3]>>6)+(Ut[4]<<2&63)+62,(Ut[4]>>4)+(Ut[5]<<4&63)+62,(Ut[5]>>2)+62,(Ut[6]&63)+62,(Ut[6]>>6)+(Ut[7]<<2&63)+62,34),S=r["if-none-match"];S&&p==S?(l?.onDone&&l.onDone(),d=304,l=void 0):n.setIfNone("ETag",p),QT.lastModified&&n.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&n.setIfNone("Location",e.newLocation);let E={status:d,headers:n,body:void 0},h=l?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&n.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=Sf(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?zi.warn(i):zi.info(i):zi.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),n.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=Sf(i.contentType?i:i.toString(),e,o),o}}function A7(e){QT=e,!cv&&(cv=!0,zT=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return R7(t,r)}),e.server.ws(async(t,r,s)=>{Du++;let n=new ss;uv||(uv=!0,wc(l=>{Du>0&&l.push({metric:"ws-connections",connections:Du,byThread:!0})}));let i;t.on("error",l=>{i=!0,zi.warn(l)});let o;t.on("message",a(function(d){o||(o=ca(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{Du--,Vr(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=zT.getMatch(u);if(Vr(!!_,"connection","ws","connect"),!_)t.send(ii(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,br(h=>({count:h.count,total:Du}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await Ge(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=ii(E.value,r);t.send(h),br(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var zi,Uu,Ut,g7,QT,cv,zT,uv,Du,lv=Te(()=>{ta();_n();zi=D(G()),Uu=D(j());Tl();qa();mi();Yd();Ut=new Uint8Array(8),g7=new Float64Array(Ut.buffer,0,1),QT={};a(R7,"http");Du=0;a(A7,"start")});var JT=T((Rfe,_v)=>{var{recordAction:gf,recordActionBinary:O7}=(_n(),Z(Cc)),N7=require("fastify-plugin"),b7=200;_v.exports=N7(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.context.config,_,l,d;u.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),gf(o,"duration",_,d,l),O7(n.raw.statusCode<400,"success",_,d,l);let f=b7;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{gf(performance.now()-c,"transfer",_,d,l),gf(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,gf(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var eg=T((Afe,mv)=>{var bf=require("clone"),yf=xe(),y7=$(),Of=y(),I7=G(),Rf=require("fs"),XT=require("joi"),{string:Nf}=XT.types(),{hdb_errors:w7,handleHDBError:Mu}=j(),{HDB_ERROR_MSGS:C7,HTTP_STATUS_CODES:Af}=w7,{common_validators:ua}=Ds(),dv=1e9,fv=" is required",L7=["insert","update","upsert"],jT={database:{presence:!1,format:ua.schema_format,length:ua.schema_length},schema:{presence:!1,format:ua.schema_format,length:ua.schema_length},table:{presence:!0,format:ua.schema_format,length:ua.schema_length},action:{inclusion:{within:L7,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},D7={schema:Nf.required(),table:Nf.required(),action:Nf.valid("insert","update","upsert")},{AWS_ACCESS_KEY:U7,AWS_SECRET:M7,AWS_BUCKET:P7,AWS_FILE_KEY:v7,REGION:B7}=Of.S3_BUCKET_AUTH_KEYS,H7={s3:{presence:!0},[`s3.${U7}`]:{presence:!0,type:"String"},[`s3.${M7}`]:{presence:!0,type:"String"},[`s3.${P7}`]:{presence:!0,type:"String"},[`s3.${v7}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${B7}`]:{presence:!0,type:"String"}},Ev=bf(jT);Ev.data.presence={message:fv};var hv=bf(jT);hv.file_path.presence={message:fv};var q7=Object.assign(bf(jT),H7),ZT=bf(D7);ZT.csv_url=Nf.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();ZT.passthrough_headers=XT.object();function F7(e){let t=yf.validateObject(e,Ev);return If(e,t)}a(F7,"dataObject");function G7(e){let t=yf.validateBySchema(e,XT.object(ZT));return If(e,t)}a(G7,"urlObject");function x7(e){let t=yf.validateObject(e,hv);return If(e,t)}a(x7,"fileObject");function k7(e){let t=yf.validateObject(e,q7);return If(e,t)}a(k7,"s3FileObject");function If(e,t){if(!t){let r=y7.checkGlobalSchemaTable(e.schema,e.table);if(r)return Mu(new Error,r,Af.BAD_REQUEST);if(e.operation===Of.OPERATIONS_ENUM.CSV_FILE_LOAD){try{Rf.accessSync(e.file_path,Rf.constants.R_OK|Rf.constants.F_OK)}catch(s){return s.code===Of.NODE_ERROR_CODES.ENOENT?Mu(s,`No such file or directory ${s.path}`,Af.BAD_REQUEST):s.code===Of.NODE_ERROR_CODES.EACCES?Mu(s,`Permission denied ${s.path}`,Af.BAD_REQUEST):Mu(s)}try{let s=Rf.statSync(e.file_path).size;if(s>dv)return Mu(new Error,C7.MAX_FILE_SIZE_ERR(s,dv),Af.BAD_REQUEST)}catch(s){I7.error(s),console.error(s)}}}return t}a(If,"postValidateChecks");mv.exports={dataObject:F7,urlObject:G7,fileObject:x7,s3FileObject:k7}});var tg=T((Nfe,pv)=>{"use strict";var Pu=G(),wf=y();async function V7(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===wf.OPERATIONS_ENUM.INSERT||t.operation===wf.OPERATIONS_ENUM.UPDATE||t.operation===wf.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===wf.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Pu.info(i.message),i):i.http_resp_msg?(Pu.error(`Error calling operation: ${e.name}`),Pu.error(i.http_resp_msg),i):(Pu.error(`Error calling operation: ${e.name}`),Pu.error(i),i)}}a(V7,"callOperationFunctionAsAwait");pv.exports={callOperationFunctionAsAwait:V7}});var Tv=T((yfe,Sv)=>{"use strict";var rg=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},sg=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};Sv.exports={BulkLoadFileObject:rg,BulkLoadDataObject:sg}});var Rv=T((wfe,gv)=>{"use strict";var ng=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};gv.exports=ng});var lg=T((Pfe,qv)=>{"use strict";var Cf=xr(),Df=eg(),$7=require("needle"),As=y(),Lfe=ke(),la=$(),{handleHDBError:We,hdb_errors:Lv}=j(),{HTTP_STATUS_CODES:Mt,HDB_ERROR_MSGS:Et,CHECK_LOGS_WRAPPER:Xi}=Lv,_a=G(),ig=require("papaparse");la.promisifyPapaParse();var Os=require("fs-extra"),Y7=require("path"),{chain:Av}=require("stream-chain"),Ov=require("stream-json/streamers/StreamArray"),Nv=require("stream-json/utils/Batch"),bv=require("stream-chain/utils/comp"),{finished:yv}=require("stream"),K7=X(),Dv=tg(),W7=VT(),{BulkLoadFileObject:ag,BulkLoadDataObject:Q7}=Tv(),cg=MT(),{verifyBulkLoadAttributePerms:Uv}=_f(),Dfe=Rv(),Ufe=dt(),Mfe=un(),{databases:z7}=(fe(),Z(Ce)),{coerceType:J7}=(H_(),Z(hp)),Iv="No records parsed from csv file.",Ji=`${K7.get("HDB_ROOT")}/tmp`,{schema_regex:X7}=Ds(),wv=1024*1024*2,Cv=5e3,j7={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};qv.exports={csvDataLoad:Z7,csvURLLoad:eee,csvFileLoad:tee,importFromS3:ree};async function Z7(e,t){let r=Df.dataObject(e);if(r)throw We(r,r.message,Mt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=vv(e.schema,e.table),i=ig.parse(e.data,{header:!0,skipEmptyLines:!0,transform:og.bind(null,n),dynamicTyping:!1}),o=new cg;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&Uv(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 We(new Error,c,Mt.BAD_REQUEST,void 0,void 0,!0);let u=new Q7(e.action,e.schema,e.table,i.data);return s=await Dv.callOperationFunctionAsAwait(Bv,u,null),s.message===Iv?Iv:Hv(s.records,s.number_written)}catch(n){throw ji(n)}}a(Z7,"csvDataLoad");async function eee(e){let t=Df.urlObject(e);if(t)throw We(t,t.message,Mt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Ji}/${r}`;try{await see(e,r)}catch(n){throw _a.error(Et.DOWNLOAD_FILE_ERR(r)+" - "+n),We(n,Xi(Et.DOWNLOAD_FILE_ERR(r)))}try{let n=new ag(this.job_operation_function.name,e.action,e.schema,e.table,s,As.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await ug(n);return await Lf(s),i}catch(n){throw await Lf(s),ji(n)}}a(eee,"csvURLLoad");async function tee(e){let t=Df.fileObject(e);if(t)throw We(t,t.message,Mt.BAD_REQUEST,void 0,void 0,!0);let r=new ag(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,As.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await ug(r)}catch(s){throw ji(s)}}a(tee,"csvFileLoad");async function ree(e){let t=Df.s3FileObject(e);if(t)throw We(t,t.message,Mt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=Y7.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Ji}/${n}`;let i=new ag(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await nee(n,e);let o=await ug(i);return await Lf(r),o}catch(s){throw await Lf(r),ji(s)}}a(ree,"importFromS3");async function see(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await $7("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw We(s,n,s.statusCode,As.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}oee(r,e.csv_url),await iee(t,r.raw)}a(see,"downloadCSVFile");async function nee(e,t){try{let r=`${Ji}/${e}`;await Os.mkdirp(Ji),await Os.writeFile(`${Ji}/${e}`,"",{flag:"a+"});let s=await Os.createWriteStream(r),n=await W7.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){_a.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw _a.error(Et.S3_DOWNLOAD_ERR+" - "+r),We(r,Xi(Et.S3_DOWNLOAD_ERR))}}a(nee,"downloadFileFromS3");async function iee(e,t){try{await Os.mkdirp(Ji),await Os.writeFile(`${Ji}/${e}`,t)}catch(r){throw _a.error(Et.WRITE_TEMP_FILE_ERR),We(r,Xi(Et.DEFAULT_BULK_LOAD_ERR))}}a(iee,"writeFileToTempFolder");async function Lf(e){if(e)try{await Os.access(e),await Os.unlink(e)}catch{_a.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Lf,"deleteTempFile");function oee(e,t){if(e.statusCode!==Lv.HTTP_STATUS_CODES.OK)throw We(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Mt.BAD_REQUEST);if(!j7[e.headers["content-type"]])throw We(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Mt.BAD_REQUEST);if(!e.raw)throw We(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Mt.BAD_REQUEST)}a(oee,"validateURLResponse");async function ug(e){try{let t;switch(e.file_type){case As.VALID_S3_FILE_TYPES.CSV:t=await aee(e);break;case As.VALID_S3_FILE_TYPES.JSON:t=await cee(e);break;default:throw We(new Error,Et.DEFAULT_BULK_LOAD_ERR,Mt.BAD_REQUEST,As.LOG_LEVELS.ERROR,Et.INVALID_FILE_EXT_ERR(e))}return Hv(t.records,t.number_written)}catch(t){throw ji(t)}}a(ug,"fileLoad");async function Mv(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await Cf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&Uv(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=We(c);r(u)}}a(Mv,"validateChunk");async function Pv(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;la.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!la.isEmpty(c)&&!la.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,n&&n.resume()}catch(c){let u=We(c,Xi(Et.INSERT_CSV_ERR),Mt.INTERNAL_SERVER_ERROR,As.LOG_LEVELS.ERROR,Et.INSERT_CSV_ERR+" - "+c);r(u)}}a(Pv,"insertChunk");async function aee(e){let t={records:0,number_written:0},r=vv(e.schema,e.table);try{let s=new cg,n=Os.createReadStream(e.file_path,{highWaterMark:wv});n.setEncoding("utf8"),await ig.parsePromise(n,Mv.bind(null,e,s),og.bind(null,r));let i=s.getPermsResponse();if(i)throw We(new Error,i,Mt.BAD_REQUEST);return n=Os.createReadStream(e.file_path,{highWaterMark:wv}),n.setEncoding("utf8"),await ig.parsePromise(n,Pv.bind(null,e,t),og.bind(null,r)),n.destroy(),t}catch(s){throw We(s,Xi(Et.PAPA_PARSE_ERR),Mt.INTERNAL_SERVER_ERROR,As.LOG_LEVELS.ERROR,Et.PAPA_PARSE_ERR+s)}}a(aee,"callPapaParse");function vv(e,t){let r=z7[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>J7(i,n));return s}a(vv,"createTransformMap");function og(e,t,r){let s=e.get(r);return s?s(t):la.autoCast(t)}a(og,"typeFunction");async function cee(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new cg,n=Av([Os.createReadStream(e.file_path,{encoding:"utf-8"}),Ov.withParser(),c=>c.value,new Nv({batchSize:Cv}),bv(async c=>{await Mv(e,s,r,c)})]);await new Promise((c,u)=>{yv(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw We(new Error,i,Mt.BAD_REQUEST);let o=Av([Os.createReadStream(e.file_path,{encoding:"utf-8"}),Ov.withParser(),c=>c.value,new Nv({batchSize:Cv}),bv(async c=>{await Pv(e,t,r,c)})]);return await new Promise((c,u)=>{yv(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw We(s,Xi(Et.INSERT_JSON_ERR),Mt.INTERNAL_SERVER_ERROR,As.LOG_LEVELS.ERROR,Et.INSERT_JSON_ERR+s)}}a(cee,"insertJson");async function Bv(e){let t={};try{e.data&&e.data.length>0&&uee(e.data[0])?t=await lee(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",_a.info(t.message))}catch(r){throw ji(r)}return t}a(Bv,"callBulkFileLoad");function uee(e){let t=Object.keys(e);for(let r of t)if(!X7.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(uee,"validateColumnNames");async function lee(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=Cf.insert;break;case"update":i=Cf.update;break;case"upsert":i=Cf.upsert;break;default:throw We(new Error,Et.INVALID_ACTION_PARAM_ERR(s),Mt.BAD_REQUEST,As.LOG_LEVELS.ERROR,Et.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){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=la.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw ji(o)}}a(lee,"bulkFileLoad");function Hv(e,t){return`successfully loaded ${t} of ${e} records`}a(Hv,"buildResponseMsg");function ji(e){return We(e,Xi(Et.DEFAULT_BULK_LOAD_ERR),Mt.INTERNAL_SERVER_ERROR,As.LOG_LEVELS.ERROR,Et.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(ji,"buildTopLevelErrMsg")});var Gv=T((Bfe,Fv)=>{"use strict";var _g=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};Fv.exports=_g});var Vv=T((qfe,kv)=>{"use strict";var _ee=y(),xv=require("moment"),dee=require("uuid").v4,dg=class{static{a(this,"JobObject")}constructor(){this.id=dee(),this.type=void 0,this.start_datetime=xv().valueOf(),this.created_datetime=xv().valueOf(),this.end_datetime=void 0,this.status=_ee.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};kv.exports=dg});var fg=T((Gfe,zv)=>{"use strict";var fee=require("uuid").v4,Kv=xr(),Wv=Gr(),Eee=Ms(),hee=Ao(),mee=Gv(),Qe=y(),pee=Vv(),See=uS(),jr=G(),Tee=tc(),da=$(),{promisify:gee}=require("util"),Zi=require("moment"),Ree=ff(),Uf=eg(),$v=Mm(),{deleteTransactionLogsBeforeValidator:Aee}=wT(),{handleHDBError:Oee,hdb_errors:Nee}=j(),{HTTP_STATUS_CODES:bee}=Nee,Yv=Wv.searchByValue,yee=Wv.searchByHash,Iee=Kv.insert,wee=gee(Ree.evaluateSQL),Cee=Kv.update;zv.exports={addJob:Uee,updateJob:Pee,handleGetJob:Lee,handleGetJobsByStartDate:Dee,getJobById:Qv};async function Lee(e){try{let t=await Qv(e.id);return da.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 jr.error("There was an error getting job",t),new Error(r)}}a(Lee,"handleGetJob");async function Dee(e){try{let t=await Mee(e);if(jr.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=Zi(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Zi(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 jr.error(r),new Error(r)}}a(Dee,"handleGetJobsByStartDate");async function Uee(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||da.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return jr.info(l),t.error=l,t}if(!Qe.JOB_TYPE_ENUM[e.operation])return jr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Qe.OPERATIONS_ENUM.CSV_FILE_LOAD:s=Uf.fileObject(e);break;case Qe.OPERATIONS_ENUM.CSV_URL_LOAD:s=Uf.urlObject(e);break;case Qe.OPERATIONS_ENUM.CSV_DATA_LOAD:s=Uf.dataObject(e);break;case Qe.OPERATIONS_ENUM.IMPORT_FROM_S3:s=Uf.s3FileObject(e);break;case Qe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Qe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=$v(e,"date");break;case Qe.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=$v(e,"timestamp");break;case Qe.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=Aee(e);break;default:break}if(s)throw Oee(s,s.message,bee.BAD_REQUEST,void 0,void 0,!0);let n=new pee;n.type=e.operation===Qe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Qe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new Eee(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.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 jr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=fee();try{o=await Yv(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return jr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return jr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new Tee(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await Iee(u)}catch(l){return jr.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 ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,jr.trace(l)}return t}a(Uee,"addJob");async function Mee(e){let t=Zi(e.from_date,Zi.ISO_8601),r=Zi(e.to_date,Zi.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 s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new mee(s,e.hdb_user);try{return await wee(n)}catch(i){throw jr.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(Mee,"getJobsInDateRange");async function Qv(e){if(da.isEmptyOrZeroLength(e))return da.errorizeMessage("Invalid job ID specified.");let t=new hee(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await yee(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return jr.error(s),da.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Qv,"getJobById");async function Pee(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(da.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Qe.JOB_STATUS_ENUM.COMPLETE||e.status===Qe.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Zi().valueOf());let t=new See(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Cee(t),r}a(Pee,"updateJob")});var t0=T((kfe,e0)=>{"use strict";var Jv=$(),lr=y(),vee=require("moment"),Mf=lg(),Pf=G(),Xv=fg(),jv=Ef(),Zv=Li(),Bee=Je(),Hee=af(),Eg=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function qee(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 lr.JOB_TYPE_ENUM.csv_file_load:await An(e,Mf.csvFileLoad);break;case lr.JOB_TYPE_ENUM.csv_url_load:await An(e,Mf.csvURLLoad);break;case lr.JOB_TYPE_ENUM.csv_data_load:await An(e,Mf.csvDataLoad);break;case lr.JOB_TYPE_ENUM.import_from_s3:await An(e,Mf.importFromS3);break;case lr.JOB_TYPE_ENUM.empty_trash:break;case lr.JOB_TYPE_ENUM.export_local:await An(e,jv.export_local);break;case lr.JOB_TYPE_ENUM.export_to_s3:await An(e,jv.export_to_s3);break;case lr.JOB_TYPE_ENUM.delete_files_before:case lr.JOB_TYPE_ENUM.delete_records_before:await An(e,Zv.deleteFilesBefore);break;case lr.JOB_TYPE_ENUM.delete_audit_logs_before:await An(e,Zv.deleteAuditLogsBefore);break;case lr.JOB_TYPE_ENUM.delete_transaction_logs_before:await An(e,Hee.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(qee,"parseMessage");async function An(e,t){try{e.job.status=lr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=vee().valueOf(),await Xv.updateJob(e.job),await Fee(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):Pf.error(`There was an error running ${t.name} job with id ${e.job.id}`),Pf.error(s),e.job.message=s,e.job.status=lr.JOB_STATUS_ENUM.ERROR;try{await Xv.updateJob(e.job)}catch(n){throw Pf.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(An,"runJob");async function Fee(e){Pf.trace("launching job thread:",e),Bee.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[lr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Fee,"launchJobThread");e0.exports={parseMessage:qee,RunnerMessage:Eg}});var s0=T(($fe,r0)=>{"use strict";var hg=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};r0.exports=hg});var T0=T((Kfe,Rg)=>{"use strict";var qf=Gr(),Sg=ff(),vf=lg(),On=id(),Bf=bi(),Bu=Li(),Gee=Qp(),vu=kr(),Hf=sS(),Pt=IT(),ht=G(),xee=oS(),kee=Od(),Vee=xS(),$ee=Id(),Yee=kS(),Kee=VS(),Wee=KS(),Qee=QS(),mg=XS(),n0=Ef(),zee=_f(),Tg=fg(),P=y(),{hdb_errors:qu,handleHDBError:Hu}=j(),{HTTP_STATUS_CODES:i0}=qu,pg=rT(),o0=$d(),h0=require("util"),fa=xr(),Jee=xn(),Xee=Qo(),a0=t0(),c0=jc(),u0=(zd(),Z(pu)),l0=Ar(),_0=af(),d0=ef(),{setServerUtilities:jee}=(H_(),Z(hp)),{CONTEXT:Zee}=(is(),Z(qE)),{_assignPackageExport:ete}=require("../index"),{transformReq:tte}=$(),{server:rte}=(fr(),Z(di)),ste=tg(),f0=qf.searchByHash,nte=qf.searchByValue,ite=h0.promisify(qf.search),ote=h0.promisify(Sg.evaluateSQL),ate={[P.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.CREATE_TABLE]:!0,[P.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[P.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.DROP_TABLE]:!0,[P.OPERATIONS_ENUM.DROP_SCHEMA]:!0},H=s0();async function m0(e,t){try{if(e.body.operation!=="read_log"&&(ht.log_level===P.LOG_LEVELS.INFO||ht.log_level===P.LOG_LEVELS.DEBUG||ht.log_level===P.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;ht.info(o)}}catch(s){ht.error(s)}let r=await ste.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return ate[e.body.operation]&&Jee.setSchemaDataToGlobal(s=>{s&&ht.error(s)}),r}a(m0,"processLocalTransaction");var E0=ute();Rg.exports={chooseOperation:p0,getOperationFunction:S0,operation:gg,processLocalTransaction:m0};jee(Rg.exports);rte.operation=gg;function p0(e){let t;try{t=S0(e)}catch(n){throw ht.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=Sg.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Sg.checkASTPermissions(e,i);if(o)throw ht.error(`${i0.FORBIDDEN} from operation ${e.operation}`),ht.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Hu(new Error,o,qu.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==P.OPERATIONS_ENUM.LOGIN&&e.operation!==P.OPERATIONS_ENUM.LOGOUT){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=zee.verifyPerms(i,n);if(o)throw ht.error(`${i0.FORBIDDEN} from operation ${e.operation}`),ht.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Hu(new Error,o,qu.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw Hu(n,"There was an error when trying to choose an operation path")}return r}a(p0,"chooseOperation");function S0(e){if(ht.trace(`getOperationFunction with operation: ${e.operation}`),E0.has(e.operation))return E0.get(e.operation);throw Hu(new Error,qu.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),qu.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(S0,"getOperationFunction");ete("operation",gg);function gg(e,t){e.hdb_user=this[Zee]?.user,e.bypass_auth=!t;let r=p0(e);return m0({body:e},r)}a(gg,"operation");async function cte(e){ht.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[P.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case P.OPERATIONS_ENUM.INSERT:o=await fa.insert(i);break;case P.OPERATIONS_ENUM.UPDATE:o=await fa.update(i);break;case P.OPERATIONS_ENUM.UPSERT:o=await fa.upsert(i);break;case P.OPERATIONS_ENUM.DELETE:o=await Bu.deleteRecord(i);break;default:ht.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){ht.info("Invalid operation in transaction"),ht.error(o)}}a(cte,"catchup");async function zs(e){tte(e);let t,r;try{r=await Tg.addJob(e),t=r.createdJob,ht.info("addJob result",r);let s=new a0.RunnerMessage(t,e);return await a0.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw ht.error(n),Hu(s,n)}}a(zs,"executeJob");function ute(){let e=new Map;return e.set(P.OPERATIONS_ENUM.INSERT,new H(fa.insert)),e.set(P.OPERATIONS_ENUM.UPDATE,new H(fa.update)),e.set(P.OPERATIONS_ENUM.UPSERT,new H(fa.upsert)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new H(qf.searchByConditions)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_HASH,new H(f0)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_ID,new H(f0)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_VALUE,new H(nte)),e.set(P.OPERATIONS_ENUM.SEARCH,new H(ite)),e.set(P.OPERATIONS_ENUM.SQL,new H(ote)),e.set(P.OPERATIONS_ENUM.CSV_DATA_LOAD,new H(zs,vf.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new H(zs,vf.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new H(zs,vf.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new H(zs,vf.importFromS3)),e.set(P.OPERATIONS_ENUM.CREATE_SCHEMA,new H(On.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_DATABASE,new H(On.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_TABLE,new H(On.createTable)),e.set(P.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new H(On.createAttribute)),e.set(P.OPERATIONS_ENUM.DROP_SCHEMA,new H(On.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_DATABASE,new H(On.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_TABLE,new H(On.dropTable)),e.set(P.OPERATIONS_ENUM.DROP_ATTRIBUTE,new H(On.dropAttribute)),e.set(P.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new H(Bf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_DATABASE,new H(Bf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_TABLE,new H(Bf.describeTable)),e.set(P.OPERATIONS_ENUM.DESCRIBE_ALL,new H(Bf.describeAll)),e.set(P.OPERATIONS_ENUM.DELETE,new H(Bu.deleteRecord)),e.set(P.OPERATIONS_ENUM.ADD_USER,new H(vu.addUser)),e.set(P.OPERATIONS_ENUM.ALTER_USER,new H(vu.alterUser)),e.set(P.OPERATIONS_ENUM.DROP_USER,new H(vu.dropUser)),e.set(P.OPERATIONS_ENUM.LIST_USERS,new H(vu.listUsersExternal)),e.set(P.OPERATIONS_ENUM.LIST_ROLES,new H(Hf.listRoles)),e.set(P.OPERATIONS_ENUM.ADD_ROLE,new H(Hf.addRole)),e.set(P.OPERATIONS_ENUM.ALTER_ROLE,new H(Hf.alterRole)),e.set(P.OPERATIONS_ENUM.DROP_ROLE,new H(Hf.dropRole)),e.set(P.OPERATIONS_ENUM.USER_INFO,new H(vu.userInfo)),e.set(P.OPERATIONS_ENUM.READ_LOG,new H(xee)),e.set(P.OPERATIONS_ENUM.ADD_NODE,new H(kee)),e.set(P.OPERATIONS_ENUM.UPDATE_NODE,new H(Vee)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new H($ee)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new H(Yee)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new H(Kee)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new H(l0.setConfiguration)),e.set(P.OPERATIONS_ENUM.CLUSTER_STATUS,new H(Wee.clusterStatus)),e.set(P.OPERATIONS_ENUM.CLUSTER_NETWORK,new H(Qee)),e.set(P.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new H(mg.setRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new H(mg.getRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new H(mg.deleteRoutes)),e.set(P.OPERATIONS_ENUM.EXPORT_TO_S3,new H(zs,n0.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new H(zs,Bu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new H(zs,Bu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new H(zs,n0.export_local)),e.set(P.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new H(Tg.handleGetJobsByStartDate)),e.set(P.OPERATIONS_ENUM.GET_JOB,new H(Tg.handleGetJob)),e.set(P.OPERATIONS_ENUM.GET_FINGERPRINT,new H(pg.getFingerprint)),e.set(P.OPERATIONS_ENUM.SET_LICENSE,new H(pg.setLicense)),e.set(P.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new H(pg.getRegistrationInfo)),e.set(P.OPERATIONS_ENUM.RESTART,new H(o0.restart)),e.set(P.OPERATIONS_ENUM.RESTART_SERVICE,new H(o0.restartService)),e.set(P.OPERATIONS_ENUM.CATCHUP,new H(cte)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new H(Xee.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new H(zs,Bu.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new H(Gee)),e.set(P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new H(c0.createTokens)),e.set(P.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new H(c0.refreshOperationToken)),e.set(P.OPERATIONS_ENUM.LOGIN,new H(u0.login)),e.set(P.OPERATIONS_ENUM.LOGOUT,new H(u0.logout)),e.set(P.OPERATIONS_ENUM.GET_CONFIGURATION,new H(l0.getConfiguration)),e.set(P.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new H(Pt.customFunctionsStatus)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new H(Pt.getCustomFunctions)),e.set(P.OPERATIONS_ENUM.GET_COMPONENT_FILE,new H(Pt.getComponentFile)),e.set(P.OPERATIONS_ENUM.GET_COMPONENTS,new H(Pt.getComponents)),e.set(P.OPERATIONS_ENUM.SET_COMPONENT_FILE,new H(Pt.setComponentFile)),e.set(P.OPERATIONS_ENUM.DROP_COMPONENT,new H(Pt.dropComponent)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new H(Pt.getCustomFunction)),e.set(P.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new H(Pt.setCustomFunction)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new H(Pt.dropCustomFunction)),e.set(P.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new H(Pt.addComponent)),e.set(P.OPERATIONS_ENUM.ADD_COMPONENT,new H(Pt.addComponent)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new H(Pt.dropCustomFunctionProject)),e.set(P.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new H(Pt.packageComponent)),e.set(P.OPERATIONS_ENUM.PACKAGE_COMPONENT,new H(Pt.packageComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new H(Pt.deployComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_COMPONENT,new H(Pt.deployComponent)),e.set(P.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new H(_0.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new H(zs,_0.deleteTransactionLogsBefore)),e.set(P.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new H(d0.installModules)),e.set(P.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new H(d0.auditModules)),e.set(P.OPERATIONS_ENUM.GET_BACKUP,new H(On.getBackup)),e}a(ute,"initializeOperationFunctionMap")});var Gf=T((Qfe,A0)=>{"use strict";var Ag=y(),lte=$(),Fu=G(),{handleHDBError:Og,hdb_errors:Ff}=j(),{isMainThread:_te}=require("worker_threads"),{Readable:dte}=require("stream"),g0=require("os"),fte=require("util"),Ete=pS(),hte=fte.promisify(Ete.authorize),R0=T0(),{createGzip:mte,constants:pte}=require("zlib");function Ste(e){let t=`Found an uncaught exception with message: ${e.message}. ${g0.EOL}Stack: ${e.stack} ${g0.EOL}Terminating ${_te?"HDB":"thread"}.`;console.error(t),Fu.fatal(t),process.exit(1)}a(Ste,"handleServerUncaughtException");function Tte(e,t,r){if(Fu[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 s=e.statusCode?e.statusCode:Ff.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(Tte,"serverErrorHandler");function gte(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=Og(new Error,"Invalid JSON.",Ff.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(lte.isEmpty(e.body.operation)){let s=Og(new Error,"Request body must include an 'operation' property.",Ff.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(gte,"reqBodyValidationHandler");function Rte(e,t,r){let s;e.body.operation!==Ag.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Ag.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Ag.OPERATIONS_ENUM.LOGOUT?hte(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{Fu.warn(n),Fu.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(Og(n,i,Ff.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(Rte,"authHandler");async function Ate(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=R0.chooseOperation(e.body);let n=await R0.processLocalTransaction(e,s);if(n instanceof dte&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(mte({level:pte.Z_BEST_SPEED})))}return n}catch(n){throw Fu.error(n),n}}a(Ate,"handlePostRequest");A0.exports={authHandler:Rte,handlePostRequest:Ate,handleServerUncaughtException:Ste,serverErrorHandler:Tte,reqBodyValidationHandler:gte}});var y0=T((Jfe,b0)=>{"use strict";var Ote=require("fastify-plugin"),{handlePostRequest:O0,authHandler:Nte,reqBodyValidationHandler:bte}=Gf();async function yte(e){e.decorate("hdbCore",{preValidation:[bte,Nte],request:t=>N0(O0(t,response)),requestWithoutAuthentication:(t,r)=>N0(O0(t,r,!0))})}a(yte,"hdbCore");async function N0(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(N0,"convertAsyncIterators");b0.exports=Ote(yte)});var w0=T((jfe,I0)=>{"use strict";var Ng=require("fs"),Ea=X();Ea.initSync();var{CONFIG_PARAMS:Gu}=y(),Ite=1024*1024*1024;function wte(e){let t=Ea.get(Gu.HTTP_TIMEOUT),r=Ea.get(Gu.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:Ite,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Ea.get(Gu.TLS_PRIVATEKEY),i=Ea.get(Gu.TLS_CERTIFICATE),o=Ea.get(Gu.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:Ng.readFileSync(`${n}`),cert:Ng.readFileSync(i)+(o?`
25
25
 
26
- `+Ng.readFileSync(o):"")},s.http2=!0}return s}a(Ite,"getServerOptions");I0.exports=Ite});var D0=T((eEe,L0)=>{"use strict";var bg=X();bg.initSync();var{CONFIG_PARAMS:C0}=y();function wte(){let e=bg.get(C0.HTTP_CORSACCESSLIST),t=bg.get(C0.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=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(wte,"getCORSOptions");L0.exports=wte});var P0=T((rEe,M0)=>{"use strict";var U0=X();U0.initSync();var Cte=y();function Lte(){return U0.get(Cte.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Lte,"getHeaderTimeoutConfig");M0.exports=Lte});var wg={};ve(wg,{customFunctionsServer:()=>Mte,handleFile:()=>Ute,ready:()=>Bte});async function Ute(e,t,r,s){if(!Nn){let c=yg.get(Ig.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);Nn=W0(c),ct.http((await Nn).server)}let n=await Nn,i=(0,B0.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!v0.has(i)){v0.add(i);try{n.register(vte(i,o))}catch(c){if(c.message==="Root plugin has already booted")De.warn(`Could not load root fastify route for ${r}, this may require a restart to install properly`);else throw c}}}async function Mte(){try{De.info("In Custom Functions Fastify server"+process.cwd()),De.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),De.debug(`Custom Functions server process ${process.pid} starting up.`),await Pte();let e=yg.get(Ig.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=Nn=await W0(t)}catch(s){throw De.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw De.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){De.error(`Custom Functions ${process.pid} Error: ${e}`),De.error(e),process.exit(1)}}async function Pte(){try{De.info("Custom Functions starting configuration."),await k0.setUsersToGlobal(),De.info("Custom Functions completed configuration.")}catch(e){De.error(e)}}function vte(e,t){return async function(r){try{De.info("Custom Functions starting buildRoutes"),De.trace("Loading fastify routes folder "+e),(0,H0.existsSync)(e)&&r.register(x0.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:De.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?De.error(n.message):n&&De.error(n),o()})}catch(s){De.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function W0(e){De.info("Custom Functions starting buildServer.");let t=(0,V0.default)(e),r=(0,q0.default)(t);r.server.headersTimeout=(0,Y0.default)(),r.setErrorHandler(K0.serverErrorHandler);let s=(0,$0.default)();return s&&r.register(F0.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(G0.default),await r.register(Dte),await r.after(),WT(r),De.info("Custom Functions completed buildServer."),r}function Bte(){if(Nn)return Nn.then?Nn.then(e=>e.ready()):Nn.ready()}var B0,H0,q0,F0,G0,x0,yg,Ig,De,Dte,k0,V0,$0,Y0,K0,Nn,v0,Q0=Te(()=>{B0=require("path"),H0=require("fs"),q0=D(require("fastify")),F0=D(require("@fastify/cors")),G0=D(JT()),x0=D(require("@fastify/autoload")),yg=D(X()),Ig=D(y()),De=D(G()),Dte=D(y0()),k0=D(xr()),V0=D(w0()),$0=D(D0()),Y0=D(P0()),K0=D(Gf());ta();fr();v0=new Set;a(Ute,"handleFile");a(Mte,"customFunctionsServer");a(Pte,"setUp");a(vte,"buildRouteFolder");a(W0,"buildServer");a(Bte,"ready")});var Cg={};ve(Cg,{start:()=>Hte});function Hte(e){return{handleFile(t,r,s){J0||(J0=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=z0.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,X0.default)(n,(0,j0.realpathSync)(o))}}return i(n)},{runFirst:!0})),z0.set(r,s)}}}var X0,j0,z0,J0,Z0=Te(()=>{X0=D(require("send")),j0=require("fs"),z0=new Map;a(Hte,"start")});var sB=T((_Ee,rB)=>{"use strict";var qte=require("cluster"),Os=X();Os.initSync();var tB=y(),cEe=require("util"),bn=G(),Lg=require("fs"),Fte=require("fastify"),uEe=kc(),Gte=require("@fastify/cors"),xte=require("@fastify/compress"),kte=require("@fastify/static"),Vte=JT(),$te=require("path"),{PACKAGE_ROOT:Yte}=y(),Kte=xn(),Wte=$(),Qte=xr(),zte=Ac(),{server:Jte}=(fr(),Z(di)),{authHandler:Xte,handlePostRequest:jte,serverErrorHandler:Zte,reqBodyValidationHandler:ere}=Gf(),lEe=require("net"),{registerContentHandlers:tre}=(ta(),Z(av)),rre=6e4,sre=1024*1024*1024,nre="TRUE",{CONFIG_PARAMS:yn}=tB,eo;rB.exports={hdbServer:eB,start:eB};async function eB(e){try{bn.info("In Fastify server"+process.cwd()),bn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),bn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=qte.isMaster,await ire();let t=Os.get(yn.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;eo=ore(t),await eo.ready(),e||(e={}),e.isOperationsServer=!0,eo.server.cantCleanupProperly=!0;try{Jte.http(eo.server,e),eo.server.closeIdleConnections||await eo.listen({port:0,host:"::"})}catch(r){throw eo.close(),bn.error(r),bn.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),bn.fatal(t),process.exit(1)}}a(eB,"operationsServer");async function ire(){bn.trace("Configuring HarperDB process."),Kte.setSchemaDataToGlobal(),await Qte.setUsersToGlobal(),await zte.getLicense()}a(ire,"setUp");function ore(e){bn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=are(e),r=Fte(t);r.server.headersTimeout=ure(),r.setErrorHandler(Zte);let s=cre();s&&r.register(Gte,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Vte),r.register(xte),r.register(kte,{root:$te.join(Yte,"studio")}),tre(r);let n=Os.get(tB.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Wte.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[ere,Xte],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),jte(i,o)}),r.get("/health",()=>"HarperDB is running."),bn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(ore,"buildServer");function are(e){let t=Os.get(yn.OPERATIONSAPI_NETWORK_TIMEOUT),r=Os.get(yn.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:sre,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Os.get(yn.OPERATIONSAPI_TLS_PRIVATEKEY),i=Os.get(yn.OPERATIONSAPI_TLS_CERTIFICATE),o=Os.get(yn.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:Lg.readFileSync(n),cert:Lg.readFileSync(i)+(o?`
26
+ `+Ng.readFileSync(o):"")},s.http2=!0}return s}a(wte,"getServerOptions");I0.exports=wte});var D0=T((eEe,L0)=>{"use strict";var bg=X();bg.initSync();var{CONFIG_PARAMS:C0}=y();function Cte(){let e=bg.get(C0.HTTP_CORSACCESSLIST),t=bg.get(C0.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=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(Cte,"getCORSOptions");L0.exports=Cte});var P0=T((rEe,M0)=>{"use strict";var U0=X();U0.initSync();var Lte=y();function Dte(){return U0.get(Lte.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Dte,"getHeaderTimeoutConfig");M0.exports=Dte});var wg={};ve(wg,{customFunctionsServer:()=>Pte,handleFile:()=>Mte,ready:()=>Hte});async function Mte(e,t,r,s){if(!Nn){let c=yg.get(Ig.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);Nn=W0(c),ct.http((await Nn).server)}let n=await Nn,i=(0,B0.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!v0.has(i)){v0.add(i);try{n.register(Bte(i,o))}catch(c){if(c.message==="Root plugin has already booted")De.warn(`Could not load root fastify route for ${r}, this may require a restart to install properly`);else throw c}}}async function Pte(){try{De.info("In Custom Functions Fastify server"+process.cwd()),De.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),De.debug(`Custom Functions server process ${process.pid} starting up.`),await vte();let e=yg.get(Ig.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=Nn=await W0(t)}catch(s){throw De.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw De.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){De.error(`Custom Functions ${process.pid} Error: ${e}`),De.error(e),process.exit(1)}}async function vte(){try{De.info("Custom Functions starting configuration."),await k0.setUsersToGlobal(),De.info("Custom Functions completed configuration.")}catch(e){De.error(e)}}function Bte(e,t){return async function(r){try{De.info("Custom Functions starting buildRoutes"),De.trace("Loading fastify routes folder "+e),(0,H0.existsSync)(e)&&r.register(x0.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:De.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?De.error(n.message):n&&De.error(n),o()})}catch(s){De.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function W0(e){De.info("Custom Functions starting buildServer.");let t=(0,V0.default)(e),r=(0,q0.default)(t);r.server.headersTimeout=(0,Y0.default)(),r.setErrorHandler(K0.serverErrorHandler);let s=(0,$0.default)();return s&&r.register(F0.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(G0.default),await r.register(Ute),await r.after(),WT(r),De.info("Custom Functions completed buildServer."),r}function Hte(){if(Nn)return Nn.then?Nn.then(e=>e.ready()):Nn.ready()}var B0,H0,q0,F0,G0,x0,yg,Ig,De,Ute,k0,V0,$0,Y0,K0,Nn,v0,Q0=Te(()=>{B0=require("path"),H0=require("fs"),q0=D(require("fastify")),F0=D(require("@fastify/cors")),G0=D(JT()),x0=D(require("@fastify/autoload")),yg=D(X()),Ig=D(y()),De=D(G()),Ute=D(y0()),k0=D(kr()),V0=D(w0()),$0=D(D0()),Y0=D(P0()),K0=D(Gf());ta();fr();v0=new Set;a(Mte,"handleFile");a(Pte,"customFunctionsServer");a(vte,"setUp");a(Bte,"buildRouteFolder");a(W0,"buildServer");a(Hte,"ready")});var Cg={};ve(Cg,{start:()=>qte});function qte(e){return{handleFile(t,r,s){J0||(J0=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=z0.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,X0.default)(n,(0,j0.realpathSync)(o))}}return i(n)},{runFirst:!0})),z0.set(r,s)}}}var X0,j0,z0,J0,Z0=Te(()=>{X0=D(require("send")),j0=require("fs"),z0=new Map;a(qte,"start")});var sB=T((_Ee,rB)=>{"use strict";var Fte=require("cluster"),Ns=X();Ns.initSync();var tB=y(),cEe=require("util"),bn=G(),Lg=require("fs"),Gte=require("fastify"),uEe=kc(),xte=require("@fastify/cors"),kte=require("@fastify/compress"),Vte=require("@fastify/static"),$te=JT(),Yte=require("path"),{PACKAGE_ROOT:Kte}=y(),Wte=xn(),Qte=$(),zte=kr(),Jte=Ac(),{server:Xte}=(fr(),Z(di)),{authHandler:jte,handlePostRequest:Zte,serverErrorHandler:ere,reqBodyValidationHandler:tre}=Gf(),lEe=require("net"),{registerContentHandlers:rre}=(ta(),Z(av)),sre=6e4,nre=1024*1024*1024,ire="TRUE",{CONFIG_PARAMS:yn}=tB,eo;rB.exports={hdbServer:eB,start:eB};async function eB(e){try{bn.info("In Fastify server"+process.cwd()),bn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),bn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Fte.isMaster,await ore();let t=Ns.get(yn.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;eo=are(t),await eo.ready(),e||(e={}),e.isOperationsServer=!0,eo.server.cantCleanupProperly=!0;try{Xte.http(eo.server,e),eo.server.closeIdleConnections||await eo.listen({port:0,host:"::"})}catch(r){throw eo.close(),bn.error(r),bn.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),bn.fatal(t),process.exit(1)}}a(eB,"operationsServer");async function ore(){bn.trace("Configuring HarperDB process."),Wte.setSchemaDataToGlobal(),await zte.setUsersToGlobal(),await Jte.getLicense()}a(ore,"setUp");function are(e){bn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=cre(e),r=Gte(t);r.server.headersTimeout=lre(),r.setErrorHandler(ere);let s=ure();s&&r.register(xte,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register($te),r.register(kte),r.register(Vte,{root:Yte.join(Kte,"studio")}),rre(r);let n=Ns.get(tB.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Qte.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[tre,jte],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Zte(i,o)}),r.get("/health",()=>"HarperDB is running."),bn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(are,"buildServer");function cre(e){let t=Ns.get(yn.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ns.get(yn.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:nre,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Ns.get(yn.OPERATIONSAPI_TLS_PRIVATEKEY),i=Ns.get(yn.OPERATIONSAPI_TLS_CERTIFICATE),o=Ns.get(yn.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:Lg.readFileSync(n),cert:Lg.readFileSync(i)+(o?`
27
27
 
28
- `+Lg.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(are,"getServerOptions");function cre(){let e=Os.get(yn.OPERATIONSAPI_NETWORK_CORS),t=Os.get(yn.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===nre)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(cre,"getCORSOpts");function ure(){return Os.get(yn.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??rre}a(ure,"getHeaderTimeoutConfig")});var hB=T((mEe,EB)=>{"use strict";var{decode:lre}=require("msgpackr"),{isMainThread:fEe,parentPort:_re,threadId:EEe}=require("worker_threads"),oB=_t(),In=ke(),dre=y(),xu=G(),nB=X(),aB=y();Je();var fre=cn(),{recordAction:Ere,recordActionBinary:hre}=(_n(),Z(Cc)),{publishToStream:mre}=oB,hEe={durable:In.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:In.WORK_QUEUE_CONSUMER_NAMES.deliver_group},pre,Sre,Tre,cB,uB;EB.exports={initialize:lB,workQueueListener:fB,setSubscription:gre,setIgnoreOrigin:Are,getDatabaseSubscriptions:Rre};async function lB(){uB=!0,xu.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await oB.getNATSReferences();pre=e,Sre=e.info.server_name,Tre=t,cB=r}a(lB,"initialize");var kf=new Map;function gre(e,t,r){let s=kf.get(e);s||kf.set(e,s=new Map),s.set(t,r),uB||lB().then(fB)}a(gre,"setSubscription");function Rre(){return kf}a(Rre,"getDatabaseSubscriptions");var _B;function Are(e){_B=e}a(Are,"setIgnoreOrigin");var dB=100,iB=new Array(dB),xf=0;async function fB(){let t=await(await cB.consumers.get(In.WORK_QUEUE_CONSUMER_NAMES.stream_name,In.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();_re?.on("message",async r=>{let{type:s}=r;s===aB.ITC_EVENT_TYPES.SHUTDOWN&&t.close()});for await(let r of t)await iB[xf],iB[xf]=Ore(r).catch(s=>{xu.error(s)}),++xf>=dB&&(xf=0)}a(fB,"workQueueListener");async function Ore(e){let t=lre(e.data);Ere(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=nB.get(dre.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(In.MSG_HEADERS.TRANSACTED_NODES)&&r.values(In.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(In.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!_B),hre(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(In.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;xu.trace("processing message:",o,c,_,(l?"records: "+l.map(O=>O?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),xu.trace(`messageProcessor nats msg id: ${e.headers.get(In.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:R}=f||{},b=kf.get(c)?.get(_);if(!b)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,b.send(t);else if(l.length===1&&!u)b.send({type:Dg(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:R});else{let O=l.map((Y,Q)=>({type:Dg(o),value:Y,expiresAt:E,id:d?.[Q],table:_}));for(;u;)O.push({type:Dg(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;b.send({type:"transaction",writes:O,table:_,timestamp:p,onCommit:h,user:S,nodeName:R})}nB.get(aB.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&mre(e.subject.split(".").slice(0,-1).join("."),fre.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){xu.error(o)}e.ack()}a(Ore,"messageProcessor");function Dg(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(Dg,"convertOperation")});var Hg={};ve(Hg,{disableNATS:()=>bre,publishToStream:()=>Wf,setNATSReplicator:()=>Ug,setPublishToStream:()=>yre,setSubscription:()=>Bg,start:()=>Nre});function Nre(){$f.default.get(Yf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&wre()}function bre(e=!0){gB=e}function yre(e,t){Wf=e,Bg=t}function wre(){if(gB||process.env._DISABLE_NATS)return;let e=ls(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];Ug(n,r,i)}}gp((r,s)=>{Ug(r.tableName,r.databaseName,r),s&&AB(r)}),!mB&&(mB=!0)}function Ug(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(n=>n?.isNATSReplicator))return;r.sourcedFrom(class extends Ot{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Ie],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Ie]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Ie],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Ie]})}static defineSchema(i){AB(i)}static subscribe(){let i=new rs;return Bg(t,e,i),i}static subscribeOnThisThread(i){return i<Ire}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new Vf(n.transaction,n);let o=n.transaction;for(;o.next;)o=o.next;o.next=n.transaction.nats,i.user=n.user,i.context=n}else i=RB;return i}a(s,"getNATSTransaction")}function AB(e){let t=$f.default.get(Yf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Wf(`${Pg.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,vg.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 pB,Pg,vg,SB,TB,$f,Yf,Kf,gB,Wf,Bg,Ire,RB,mB,Vf,Mg,OB=Te(()=>{fe();ns();pB=D(_t()),Pg=D(ke()),vg=D(cn());qa();SB=D(hB()),TB=D(hr()),$f=D(X()),Yf=D(y()),Kf=D(G());a(Nre,"start");a(bre,"disableNATS");Wf=pB.publishToStream,Bg=SB.setSubscription;a(yre,"setPublishToStream");Ire=2;a(wre,"assignReplicationSource");a(Ug,"setNATSReplicator");a(AB,"publishSchema");Vf=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 s=this.writes_by_db.get(t);s||this.writes_by_db.set(t,s=[]),s.push(r)}commit({timestamp:t}){let r=$f.default.get(Yf.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,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||(Kf.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:n,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&&s.push(Wf(`${Pg.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,vg.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw Kf.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},Mg=class extends Vf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,TB.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};RB=new Mg});async function bB({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await qg.getResource(e,{});n=new Gg(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await qg.get(e);i&&i.delete()}n=new zf(e,t)}return n}function Fg(){return Qf++,Qf>65500&&(Qf=1),Qf}var NB,ha,qg,Qf,zf,Gg,yB=Te(()=>{fe();Ga();NB=D(hr()),ha=D(G());mi();qg=tt({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"}]}}]});a(bB,"getSession");Qf=1;a(Fg,"getNextMessageId");zf=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");let l=!1,d;if((_.endsWith("+")||_.endsWith("#"))&&(l=!0,_.endsWith("+")&&(d=!0),_=_.slice(0,_.length-1)),_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(_.indexOf("#")>-1||_.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let f=this.subscriptions.find(b=>b.topic===n);f&&(f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1));let E={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:i,isCollection:l,shallowWildcard:d,url:""};o&&(0,ha.trace)("Resuming subscription from",n,"from",o);let h=Bn.getMatch(_);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);E.url=h.relativeURL;let p=h.path,S=h.Resource,R=await Ge(E,async()=>{let b=await S.subscribe(E);if(!b)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!b[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let O of b)try{let Y;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"||s&&!s(O))continue;r?(O.topic=n,Y=this.needsAcknowledge(O)):(O.acknowledge?.(),Y=Fg());let Q=O.id;Array.isArray(Q)&&(Q=oo(Q)),Q==null&&(Q=""),this.listener(p+"/"+Q,O.value,Y,t)}catch(Y){(0,ha.warn)(Y)}})(),b});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=Fg();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(s=>s.topic===t);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user,t.async=!0,t.authorize=!0;let i=Bn.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return Ge(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},Gg=class extends zf{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{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,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=Fg(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,ha.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,NB.getNextMonotonicTime)()),(0,ha.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),qg.put(this.sessionRecord)),t.qos}}});var kg={};ve(kg,{start:()=>Lre});async function Lre({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:_,onClose:l}=CB(o,(d,f)=>{if(o.send(d),f&&o._socket.writableNeedDrain)return new Promise(E=>this._socket.once("drain",E))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",_),o.on("close",l),o.on("error",d=>{(0,jr.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;Cre&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,LB.getSuperUser)());let{onMessage:u,onClose:_}=CB(o,l=>o.write(l),null,c,i);o.on("data",u),o.on("close",_),o.on("error",l=>{(0,jr.info)("Socket error",l)})},{port:t,securePort:s})}function CB(e,t,r,s,n){wB||(wB=!0,wc(d=>{Jf>0&&d.push({metric:"mqtt-connections",connections:Jf,byThread:!0})}));let i;Jf++;let o,c={protocolVersion:4},u=(0,Xf.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){Jf--,i||(i=!0,o?.disconnect(),kr(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await ct.getUser(d.username,d.password.toString()),(0,xg.get)(wn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&IB.notify({username:s.username,status:wn.AUTH_AUDIT_STATUS.SUCCESS,type:wn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,xg.get)(wn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&IB.error({username:s.username,status:wn.AUTH_AUDIT_STATUS.FAILURE,type:wn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return kr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{n.authorizeClient?.(d,s),o=bB({user:s,...d}),o=await o}catch(O){return(0,jr.error)(O),kr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:O.code||5,returnCode:O.code||128})}kr(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((O,Y,Q,F)=>{try{let w=O.indexOf("/",1),K=w>0?O.slice(0,w):O;f({cmd:"publish",topic:O,payload:E(Y),messageId:Q||Math.floor(Math.random()*1e8),qos:F.qos},K)}catch(w){(0,jr.error)(w),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let O of d.subscriptions){let Y;try{Y=(await o.addSubscription(O,O.qos>=1)).qos||0}catch(Q){(0,jr.error)(Q),Y=128}h.push(Y)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":for(let O of d.unsubscriptions)o.removeSubscription(O);f({cmd:"unsuback",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=ca(r?.headers.get?.("content-type"))),R=d.payload?.length>0?S(d.payload):void 0,b;try{b=await o.publish(d,R)}catch(O){(0,jr.warn)(O),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(),kr(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,jr.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,Xf.generate)(h,c);t(S),Nr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return ii(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var Xf,LB,xg,wn,jr,IB,Cre,wB,Jf,DB=Te(()=>{Xf=require("mqtt-packet");yB();LB=D(xr());ta();_n();fr();xg=D(X()),wn=D(y()),jr=D(G()),IB=(0,jr.loggerWithTag)("auth-event"),Cre=!0;a(Lre,"start");Jf=0;a(CB,"onSocket")});var MB={};ve(MB,{Request:()=>Vg,createReuseportFd:()=>jf});var UB,Vg,$g,Yg,jf,Kg=Te(()=>{UB=require("os"),Vg=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let s=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=s,this.headers=new Yg(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 $g(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},$g=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},Yg=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,s]of this)t(s,r,this)}};(0,UB.platform)()!="win32"&&(jf=require("node-unix-socket").createReuseportFd)});var sf={};ve(sf,{component_errors:()=>ma,loadComponent:()=>Zf,loadComponentDirectories:()=>kB,setErrorReporter:()=>Pre});function kB(e,t){t&&(Qg=t),e&&(zg=e);let r=[];if((0,Ns.existsSync)(Wg)){let n=(0,Ns.readdirSync)(Wg,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,gt.join)(Wg,o);r.push(Zf(c,Qg,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Zf(s,Qg,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{xB=!0})}function Pre(e){$u=e}async function Zf(e,t,r,s,n,i){if(!vB.has(e)){vB.set(e,!0),n&&(zg=n);try{let o;s&&(ma=new Map);let c=(0,gt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Ns.existsSync)(c)?o=s?(0,GB.getConfigObj)():(0,BB.parseDocument)((0,Ns.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=Jg;let u=[],_=s;for(let l in o){let d=o[l];if(ma.set(s?l:(0,gt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let b=e,O;for(;!(0,Ns.existsSync)(O=(0,gt.join)(b,"node_modules",l));)if(b=(0,gt.dirname)(b),b.length<(0,FB.getHdbBasePath)().length){O=null;break}if(O)f=await Zf(O,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Mre[l];if(!f)continue;u.push(f);let h=a(b=>(b.origin=r,tt(b)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,R=!p?.https&&p?.port;if(ku.isMainThread&&(f=await f.startOnMainThread?.({server:ct,ensureTable:h,port:R,securePort:S,resources:t,...d})||f,s&&p))for(let b of[R,S])try{if(+b&&!PB.includes(b)){let O=Xg.get(jg.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);O&&Vu.default.warn("Session affinity is not recommended and may cause memory leaks"),(O||!jf)&&(PB.push(b),Zg(b,O))}}catch(O){console.error("Error listening on socket",b,O,l)}if(t.isWorker&&(f=await f.start?.({server:ct,ensureTable:h,port:R,securePort:S,resources:t,...d})||f),zg.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,qB.handleHDBError)("Can not reference parent directories");let b=(0,gt.join)(e,d.files).replace(/\\/g,"/"),O=b.indexOf("/*");if(O>-1&&d.files!==Jg[l]?.files&&!(0,Ns.existsSync)(b.slice(0,O)))throw new Error(`The path '${b.slice(0,O)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);for(let Y of await(0,HB.default)(b,{onlyFiles:!1,objectMode:!0})){let{path:Q,dirent:F}=Y;_=!0;let w=(0,gt.relative)(e,Q).replace(/\\/g,"/");if(d.root){let x=d.root;if(x.startsWith("/")&&(x=x.slice(1)),x.endsWith("/")&&(x=x.slice(0,-1)),x+="/",w.startsWith(x))w=w.slice(x.length);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${w}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`)}let K=(0,gt.basename)(e),B=d.path||"/";B=B.startsWith("/")?B:B.startsWith("./")?"/"+K+B.slice(2):B==="."?"/"+K:"/"+K+"/"+B,B+=(B.endsWith("/")?"":"/")+w;try{if(F.isFile()){let x=await Ure(Q);ku.isMainThread&&await f.setupFile?.(x,B,Q,t),t.isWorker&&await f.handleFile?.(x,B,Q,t)}else ku.isMainThread&&await f.setupDirectory?.(B,Q,t),t.isWorker&&await f.handleDirectory?.(B,Q,t)}catch(x){x.message=`Could not load ${F.isFile()?"file":"directory"} '${Q}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${x.message}`,$u?.(x),((0,pa.getWorkerIndex)()===0?console:Vu.default).error(x),t.set(d.path||"/",new Yu(x)),ma.set(s?l:(0,gt.basename)(e),x.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,gt.basename)(e)}' due to: ${h.message}`,$u?.(h),((0,pa.getWorkerIndex)()===0?console:Vu.default).error(h),t.set(d.path||"/",new Yu(h),null,!0),ma.set(s?l:(0,gt.basename)(e),h.message)}}if(ku.isMainThread&&!xB&&i&&(0,pa.watchDir)(e,async()=>kB()),o.extensionModule)return await J_((0,gt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;$u?.(new Error(l)),((0,pa.getWorkerIndex)()===0?console:Vu.default).error(l),ma.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}`,$u?.(o),t.set("",new Yu(o))}}}var Ns,gt,ku,BB,Xg,jg,HB,pa,Vu,qB,FB,Dre,GB,Ure,Wg,zg,xB,Qg,ma,Mre,Jg,PB,vB,$u,Yu,nf=Te(()=>{Ns=require("fs"),gt=require("path"),ku=require("worker_threads"),BB=require("yaml"),Xg=D(X()),jg=D(y());DC();vC();BC();lv();Q0();Z0();HB=D(require("fast-glob")),pa=D(Je()),Vu=D(G());Ip();fr();qB=D(j());ns();fe();eR();FB=D(X()),Dre=D(sB());zd();OB();DB();GB=D(Rr());Kg();({readFile:Ure}=Ns.promises),Wg=Xg.get(jg.CONFIG_PARAMS.COMPONENTSROOT),zg=new Map,ma=new Map;a(kB,"loadComponentDirectories");Mre={REST:Tf,rest:Tf,graphqlSchema:yp,jsResource:Cp,fastifyRoutes:wg,login:Dp,static:Cg,operationsApi:Dre,customFunctions:{},http:{},clustering:Hg,authentication:pu,mqtt:kg},Jg={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(Jg,"static",{value:{files:"web/**"}});PB=[],vB=new Map;a(Pre,"setErrorReporter");a(Zf,"loadComponent");Yu=class extends Ot{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 eE=T((KEe,$B)=>{var{isMainThread:VB}=require("worker_threads"),{getTables:vre}=(fe(),Z(Ce)),{loadComponentDirectories:Bre,loadComponent:Hre}=(nf(),Z(sf)),{resetResources:qre}=(Ga(),Z(VA)),Fre=NT(),Gre=Rr(),{dirname:xre}=require("path"),{getConnection:kre}=_t(),Vre=X(),$re=y(),tR=new Map;async function Yre(e=!1){!VB&&Vre.get($re.CONFIG_PARAMS.CLUSTERING_ENABLED)&&kre();try{VB&&await Fre()}catch(s){console.error(s)}let t=qre();vre(),t.isWorker=e,await Hre(xre(Gre.getConfigFilePath()),t,"hdb",!0,tR),await Bre(tR,t);let r=[];for(let[s]of tR)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Yre,"loadRootComponents");$B.exports.loadRootComponents=Yre});var Je=T((QEe,ui)=>{"use strict";var{Worker:Kre,MessageChannel:Wre,parentPort:zs,isMainThread:oR,threadId:Qre,workerData:Cn}=require("worker_threads"),{PACKAGE_ROOT:zre}=y(),{join:WB,isAbsolute:Jre,extname:Xre}=require("path"),{server:QB}=(fr(),Z(di)),{watch:jre,readdir:Zre}=require("fs/promises"),{totalmem:YB}=require("os"),sE=y(),ese=X(),Ln=G(),{randomBytes:tse}=require("crypto"),{_assignPackageExport:rse}=require("../index"),sse=y(),nse=1024*1024,ci=[],Zr=[],ise=50,aR=1e4,ose="restart",zB="request_thread_info",JB="resource_report",XB="thread_info",jB="added-port",ase="ack",rR;rse("threads",Zr);ui.exports={startWorker:sR,restartWorkers:uR,shutdownWorkers:dse,workers:ci,setMonitorListener:gse,onMessageFromWorkers:fse,onMessageByType:nH,broadcast:hse,broadcastWithAcknowledgement:pse,setChildListenerByType:_se,getWorkerIndex:ZB,getWorkerCount:eH,getTicketKeys:tH,setMainIsWorker:use,setTerminateTimeout:cse,restartNumber:Cn?.restartNumber||1};Zr.onMessageByType=nH;Zr.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Zr.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var cR;function cse(e){aR=e}a(cse,"setTerminateTimeout");function ZB(){return Cn?Cn.workerIndex:cR?0:void 0}a(ZB,"getWorkerIndex");function eH(){return Cn?Cn.workerCount:cR?1:void 0}a(eH,"getWorkerCount");function use(e){cR=e}a(use,"setMainIsWorker");var tE;function tH(){return tE||(tE=oR?tse(48):Cn.ticketKeys,tE)}a(tH,"getTicketKeys");Object.defineProperty(QB,"workerIndex",{get(){return ZB()}});Object.defineProperty(QB,"workerCount",{get(){return eH()}});var rH={[zB](e,t){Sse(t)},[JB](e,t){Tse(t,e)}};function sR(e,t={}){let r=process.constrainedMemory?.()||YB();r=Math.min(r,YB());let s=Math.max(Math.floor(r/nse/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[],o=[];for(let u of Zr){let _=new Wre;_.existingPort=u,i.push(_),o.push(_.port2)}Xre(e)||(e+=".js");let c=new Kre(Jre(e)?e:WB(zre,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},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:ui.exports.restartNumber,ticketKeys:tH()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:jB,port:u,threadId:c.threadId},[u]);return nE(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>sR(e,t),c.on("error",u=>{console.error("Worker error:",u),Ln.error("Worker error:",u)}),c.on("exit",u=>{ci.splice(ci.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<ise?(t.unexpectedRestarts=c.unexpectedRestarts+1,sR(e,t)):Ln.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{rH[u.type]?.(u,c)}),ci.push(c),Ase(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(sR,"startWorker");var lse=[sE.THREAD_TYPES.HTTP];async function uR(e=null,t=2,r=!0){if(oR){if(r){let{loadRootComponents:o}=eE();await o()}ui.exports.restartNumber++,t<1&&(t=t*ci.length);let s=[],n=[];for(let o of ci.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Ln.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:ui.exports.restartNumber,type:sE.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=lse.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),aR*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===sse.ITC_EVENT_TYPES.CHILD_STARTED&&(Ln.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");Ln.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=$d();r&&(e==="http"||!e)&&ese.get(sE.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else zs.postMessage({type:ose,workerType:e})}a(uR,"restartWorkers");function _se(e,t){rH[e]=t}a(_se,"setChildListenerByType");function dse(e){return uR(e,1/0,!1)}a(dse,"shutdownWorkers");var sH=[];function fse(e){sH.push(e)}a(fse,"onMessageFromWorkers");var nR=new Map;function nH(e,t){let r=nR.get(e);r||nR.set(e,r=[]),r.push(t)}a(nH,"onMessageByType");var Ese=10;async function hse(e){let t=0;for(let r of Zr)try{r.postMessage(e),t++>Ese&&(t=0,await new Promise(setImmediate))}catch(s){Ln.error("Unable to send message to worker",s)}}a(hse,"broadcast");var rE=new Map,mse=1;function pse(e){return new Promise(t=>{let r=0;for(let s of Zr)try{let n=mse++,i=a(()=>{rE.delete(n),--r===0&&t(),s!==zs&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,rE.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of rE)o.port===s&&o()})),s.postMessage(e),r++}catch(n){Ln.error("Unable to send message to worker",n)}r===0&&t()})}a(pse,"broadcastWithAcknowledgement");function Sse(e){e.postMessage({type:XB,workers:iH()})}a(Sse,"sendThreadInfo");function iH(){let e=Date.now();return ci.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(iH,"getChildWorkerInfo");function Tse(e,t){e.resources=t,e.resources.updated=Date.now()}a(Tse,"recordResourceReport");var iR;function gse(e){iR=e}a(gse,"setMonitorListener");var Rse=1e3,KB=!1;function Ase(){KB||(KB=!0,setInterval(()=>{for(let e of ci){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}iR&&iR()},Rse).unref())}a(Ase,"startMonitoring");var Ose=1e3;if(zs){nE(zs);for(let e=0,t=Cn.addPorts.length;e<t;e++){let r=Cn.addPorts[e];r.threadId=Cn.addThreadIds[e],nE(r)}setInterval(()=>{let e=process.memoryUsage();zs.postMessage({type:JB,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Ose).unref(),rR=a(()=>new Promise((e,t)=>{zs.on("message",r),zs.postMessage({type:zB});function r(s){s.type===XB&&(zs.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else rR=iH;ui.exports.getThreadInfo=rR;function nE(e,t){Zr.push(e),e.on("message",r=>{if(r.type===jB)r.port.threadId=r.threadId,nE(r.port);else if(r.type===ase){let s=rE.get(r.id);s&&s()}else{for(let n of sH)n(r,e);let s=nR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){Ln.error(i)}}}).on("close",()=>{Zr.splice(Zr.indexOf(e),1)}).on("exit",()=>{Zr.splice(Zr.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(nE,"addPort");if(oR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Zre(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(WB(s,i.name));try{for await(let{filename:i}of jre(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await uR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");ui.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else zs.on("message",async e=>{let{type:t}=e;t===sE.ITC_EVENT_TYPES.SHUTDOWN&&(ui.exports.restartNumber=e.restartNumber,zs.unref(),setTimeout(()=>{Ln.warn("Thread did not voluntarily terminate",Qre),process.exit(0)},aR).unref())})});var hH=T(zu=>{"use strict";var{isMainThread:Nse,parentPort:Qu,threadId:Ku}=require("worker_threads"),{Socket:bse,createServer:yse}=require("net"),{createServer:Ise,IncomingMessage:wse}=require("http"),{createServer:Cse}=require("https"),{readFileSync:Sa}=require("fs"),Js=G(),Rt=X(),Dn=y(),{server:oE}=(fr(),Z(di)),{WebSocketServer:Lse}=require("ws"),{createServer:Dse}=require("tls"),{getTicketKeys:Use,restartNumber:Mse}=Je(),{Headers:uH}=(Yd(),Z(LM)),{recordAction:Wu,recordActionBinary:Pse}=(_n(),Z(Cc)),{Request:lH,node_request_key:JEe,createReuseportFd:oH}=(Kg(),Z(MB));if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){Mse<=1&&Js.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:XEe,CONFIG_PARAMS:vse}=Dn;Rt.initSync();var Bse=Rt.get(vse.HTTP_SESSIONAFFINITY),Xs={};zu.registerServer=hR;zu.httpServer=mR;zu.deliverSocket=ER;zu.startServers=_H;oE.http=mR;oE.request=Gse;oE.socket=xse;oE.ws=kse;var lR=[],_R=[],Hse,to={},iE={},qse=[],dR=[];function _H(){return eE().loadRootComponents(!0).then(()=>{Qu?.on("message",t=>{let{port:r,fd:s,data:n}=t;if(s)ER(s,r,n);else if(t.requestId)Fse(t);else if(t.type===Dn.ITC_EVENT_TYPES.SHUTDOWN){Js.trace("received shutdown request",Ku);for(let i in Xs){let o=Xs[i],c;o.closeIdleConnections&&(setInterval(()=>{o.closeIdleConnections()},25).unref(),setTimeout(()=>{o.closeAllConnections(),Js.info("Closed all http connections",i,Ku)},4e3).unref()),o.close?.(()=>{clearInterval(c),setTimeout(()=>{console.log("forced close server",i,Ku),o.cantCleanupProperly||Js.warn("Had to forcefully exit the thread",Ku),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(oH&&!Bse)for(let t in Xs){let r=Xs[t],s;try{s=oH(+t,"::")}catch(n){console.error(`Unable to bind to port ${t}`,n);continue}e.push(new Promise((n,i)=>{r.listen({fd:s},()=>{n(),Js.trace("Listening on port "+t,Ku)}).on("error",i)}))}Promise.all(e).then(()=>{Qu?.postMessage({type:Dn.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(_H,"startServers");Nse||_H();function ER(e,t,r){let s=e?.read?e:new bse({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=Xs[t];if(n.isSecure&&(s.startTime=performance.now()),n)typeof n=="function"?n(s):n.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Xs[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(Js.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(ER,"deliverSocket");var aH=new Map;function Fse(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=aH.get(n),r){case"connection":i=ER(void 0,t),aH.set(n,i),i.write=(c,u,_)=>(Qu.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(Qu.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Qu.postMessage({requestId:n,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(s,"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(Fse,"proxyRequest");function hR(e,t){+t||(t=parseInt(Rt.get(Dn.CONFIG_PARAMS.HTTP_PORT),10));let r=Xs[t];if(r){let s=r.lastServer||r;s.off("unhandled",cH),s.on("unhandled",(n,i)=>{e.cantCleanupProperly&&(r.cantCleanupProperly=!0),e.emit("request",n,i)}),r.lastServer=e}else Xs[t]=e;e.on("unhandled",cH)}a(hR,"registerServer");function dH(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=[],Rt.get(Dn.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Rt.get(Dn.CONFIG_PARAMS.HTTP_PORT),secure:Rt.get(Dn.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Rt.get(Dn.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Rt.get(Dn.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),t}a(dH,"getPorts");function mR(e,t){for(let{port:r,secure:s}of dH(t))fH(r,s,t?.isOperationsServer),typeof e=="function"?dR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):hR(e,r),iE[r]=fR(dR,r),Hse=fR(qse,r)}a(mR,"httpServer");function fH(e,t,r){if(!to[e]){let s=r?"operationsApi_network":"http",n={keepAliveTimeout:Rt.get(s+"_keepAliveTimeout"),headersTimeout:Rt.get(s+"_headersTimeout"),requestTimeout:Rt.get(s+"_timeout")};if(t){s=r?"operationsApi_":"";let i=Rt.get(s+"tls_privateKey"),o=Rt.get(s+"tls_certificate"),c=Rt.get(s+"tls_certificateAuthority");Object.assign(n,{key:Sa(i),cert:Sa(o)+(c?`
28
+ `+Lg.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(cre,"getServerOptions");function ure(){let e=Ns.get(yn.OPERATIONSAPI_NETWORK_CORS),t=Ns.get(yn.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===ire)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(ure,"getCORSOpts");function lre(){return Ns.get(yn.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??sre}a(lre,"getHeaderTimeoutConfig")});var hB=T((mEe,EB)=>{"use strict";var{decode:_re}=require("msgpackr"),{isMainThread:fEe,parentPort:dre,threadId:EEe}=require("worker_threads"),oB=dt(),In=ke(),fre=y(),xu=G(),nB=X(),aB=y();Je();var Ere=un(),{recordAction:hre,recordActionBinary:mre}=(_n(),Z(Cc)),{publishToStream:pre}=oB,hEe={durable:In.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:In.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Sre,Tre,gre,cB,uB;EB.exports={initialize:lB,workQueueListener:fB,setSubscription:Rre,setIgnoreOrigin:Ore,getDatabaseSubscriptions:Are};async function lB(){uB=!0,xu.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await oB.getNATSReferences();Sre=e,Tre=e.info.server_name,gre=t,cB=r}a(lB,"initialize");var kf=new Map;function Rre(e,t,r){let s=kf.get(e);s||kf.set(e,s=new Map),s.set(t,r),uB||lB().then(fB)}a(Rre,"setSubscription");function Are(){return kf}a(Are,"getDatabaseSubscriptions");var _B;function Ore(e){_B=e}a(Ore,"setIgnoreOrigin");var dB=100,iB=new Array(dB),xf=0;async function fB(){let t=await(await cB.consumers.get(In.WORK_QUEUE_CONSUMER_NAMES.stream_name,In.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();dre?.on("message",async r=>{let{type:s}=r;s===aB.ITC_EVENT_TYPES.SHUTDOWN&&t.close()});for await(let r of t)await iB[xf],iB[xf]=Nre(r).catch(s=>{xu.error(s)}),++xf>=dB&&(xf=0)}a(fB,"workQueueListener");async function Nre(e){let t=_re(e.data);hre(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=nB.get(fre.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(In.MSG_HEADERS.TRANSACTED_NODES)&&r.values(In.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(In.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!_B),mre(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(In.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;xu.trace("processing message:",o,c,_,(l?"records: "+l.map(O=>O?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),xu.trace(`messageProcessor nats msg id: ${e.headers.get(In.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:R}=f||{},b=kf.get(c)?.get(_);if(!b)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,b.send(t);else if(l.length===1&&!u)b.send({type:Dg(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:R});else{let O=l.map((Y,Q)=>({type:Dg(o),value:Y,expiresAt:E,id:d?.[Q],table:_}));for(;u;)O.push({type:Dg(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;b.send({type:"transaction",writes:O,table:_,timestamp:p,onCommit:h,user:S,nodeName:R})}nB.get(aB.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&pre(e.subject.split(".").slice(0,-1).join("."),Ere.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){xu.error(o)}e.ack()}a(Nre,"messageProcessor");function Dg(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(Dg,"convertOperation")});var Hg={};ve(Hg,{disableNATS:()=>yre,publishToStream:()=>Wf,setNATSReplicator:()=>Ug,setPublishToStream:()=>Ire,setSubscription:()=>Bg,start:()=>bre});function bre(){$f.default.get(Yf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Cre()}function yre(e=!0){gB=e}function Ire(e,t){Wf=e,Bg=t}function Cre(){if(gB||process.env._DISABLE_NATS)return;let e=_s(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];Ug(n,r,i)}}gp((r,s)=>{Ug(r.tableName,r.databaseName,r),s&&AB(r)}),!mB&&(mB=!0)}function Ug(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(n=>n?.isNATSReplicator))return;r.sourcedFrom(class extends Nt{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Ie],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Ie]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Ie],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Ie]})}static defineSchema(i){AB(i)}static subscribe(){let i=new ss;return Bg(t,e,i),i}static subscribeOnThisThread(i){return i<wre}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new Vf(n.transaction,n);let o=n.transaction;for(;o.next;)o=o.next;o.next=n.transaction.nats,i.user=n.user,i.context=n}else i=RB;return i}a(s,"getNATSTransaction")}function AB(e){let t=$f.default.get(Yf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Wf(`${Pg.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,vg.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 pB,Pg,vg,SB,TB,$f,Yf,Kf,gB,Wf,Bg,wre,RB,mB,Vf,Mg,OB=Te(()=>{fe();is();pB=D(dt()),Pg=D(ke()),vg=D(un());qa();SB=D(hB()),TB=D(hr()),$f=D(X()),Yf=D(y()),Kf=D(G());a(bre,"start");a(yre,"disableNATS");Wf=pB.publishToStream,Bg=SB.setSubscription;a(Ire,"setPublishToStream");wre=2;a(Cre,"assignReplicationSource");a(Ug,"setNATSReplicator");a(AB,"publishSchema");Vf=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 s=this.writes_by_db.get(t);s||this.writes_by_db.set(t,s=[]),s.push(r)}commit({timestamp:t}){let r=$f.default.get(Yf.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,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||(Kf.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:n,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&&s.push(Wf(`${Pg.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,vg.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw Kf.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},Mg=class extends Vf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,TB.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};RB=new Mg});async function bB({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await qg.getResource(e,{});n=new Gg(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await qg.get(e);i&&i.delete()}n=new zf(e,t)}return n}function Fg(){return Qf++,Qf>65500&&(Qf=1),Qf}var NB,ha,qg,Qf,zf,Gg,yB=Te(()=>{fe();Ga();NB=D(hr()),ha=D(G());mi();qg=tt({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"}]}}]});a(bB,"getSession");Qf=1;a(Fg,"getNextMessageId");zf=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");let l=!1,d;if((_.endsWith("+")||_.endsWith("#"))&&(l=!0,_.endsWith("+")&&(d=!0),_=_.slice(0,_.length-1)),_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(_.indexOf("#")>-1||_.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let f=this.subscriptions.find(b=>b.topic===n);f&&(f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1));let E={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:i,isCollection:l,shallowWildcard:d,url:""};o&&(0,ha.trace)("Resuming subscription from",n,"from",o);let h=Bn.getMatch(_);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);E.url=h.relativeURL;let p=h.path,S=h.Resource,R=await Ge(E,async()=>{let b=await S.subscribe(E);if(!b)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!b[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let O of b)try{let Y;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"||s&&!s(O))continue;r?(O.topic=n,Y=this.needsAcknowledge(O)):(O.acknowledge?.(),Y=Fg());let Q=O.id;Array.isArray(Q)&&(Q=oo(Q)),Q==null&&(Q=""),this.listener(p+"/"+Q,O.value,Y,t)}catch(Y){(0,ha.warn)(Y)}})(),b});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=Fg();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(s=>s.topic===t);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user,t.async=!0,t.authorize=!0;let i=Bn.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return Ge(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},Gg=class extends zf{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{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,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=Fg(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,ha.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,NB.getNextMonotonicTime)()),(0,ha.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),qg.put(this.sessionRecord)),t.qos}}});var kg={};ve(kg,{start:()=>Dre});async function Dre({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:_,onClose:l}=CB(o,(d,f)=>{if(o.send(d),f&&o._socket.writableNeedDrain)return new Promise(E=>this._socket.once("drain",E))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",_),o.on("close",l),o.on("error",d=>{(0,Zr.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;Lre&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,LB.getSuperUser)());let{onMessage:u,onClose:_}=CB(o,l=>o.write(l),null,c,i);o.on("data",u),o.on("close",_),o.on("error",l=>{(0,Zr.info)("Socket error",l)})},{port:t,securePort:s})}function CB(e,t,r,s,n){wB||(wB=!0,wc(d=>{Jf>0&&d.push({metric:"mqtt-connections",connections:Jf,byThread:!0})}));let i;Jf++;let o,c={protocolVersion:4},u=(0,Xf.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){Jf--,i||(i=!0,o?.disconnect(),Vr(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await ct.getUser(d.username,d.password.toString()),(0,xg.get)(wn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&IB.notify({username:s.username,status:wn.AUTH_AUDIT_STATUS.SUCCESS,type:wn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,xg.get)(wn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&IB.error({username:s.username,status:wn.AUTH_AUDIT_STATUS.FAILURE,type:wn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return Vr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{n.authorizeClient?.(d,s),o=bB({user:s,...d}),o=await o}catch(O){return(0,Zr.error)(O),Vr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:O.code||5,returnCode:O.code||128})}Vr(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((O,Y,Q,F)=>{try{let w=O.indexOf("/",1),K=w>0?O.slice(0,w):O;f({cmd:"publish",topic:O,payload:E(Y),messageId:Q||Math.floor(Math.random()*1e8),qos:F.qos},K)}catch(w){(0,Zr.error)(w),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let O of d.subscriptions){let Y;try{Y=(await o.addSubscription(O,O.qos>=1)).qos||0}catch(Q){(0,Zr.error)(Q),Y=128}h.push(Y)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":for(let O of d.unsubscriptions)o.removeSubscription(O);f({cmd:"unsuback",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=ca(r?.headers.get?.("content-type"))),R=d.payload?.length>0?S(d.payload):void 0,b;try{b=await o.publish(d,R)}catch(O){(0,Zr.warn)(O),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(),Vr(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Zr.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,Xf.generate)(h,c);t(S),br(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return ii(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var Xf,LB,xg,wn,Zr,IB,Lre,wB,Jf,DB=Te(()=>{Xf=require("mqtt-packet");yB();LB=D(kr());ta();_n();fr();xg=D(X()),wn=D(y()),Zr=D(G()),IB=(0,Zr.loggerWithTag)("auth-event"),Lre=!0;a(Dre,"start");Jf=0;a(CB,"onSocket")});var MB={};ve(MB,{Request:()=>Vg,createReuseportFd:()=>jf});var UB,Vg,$g,Yg,jf,Kg=Te(()=>{UB=require("os"),Vg=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let s=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=s,this.headers=new Yg(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 $g(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},$g=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},Yg=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,s]of this)t(s,r,this)}};(0,UB.platform)()!="win32"&&(jf=require("node-unix-socket").createReuseportFd)});var sf={};ve(sf,{component_errors:()=>ma,loadComponent:()=>Zf,loadComponentDirectories:()=>kB,setErrorReporter:()=>vre});function kB(e,t){t&&(Qg=t),e&&(zg=e);let r=[];if((0,bs.existsSync)(Wg)){let n=(0,bs.readdirSync)(Wg,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Rt.join)(Wg,o);r.push(Zf(c,Qg,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Zf(s,Qg,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{xB=!0})}function vre(e){$u=e}async function Zf(e,t,r,s,n,i){if(!vB.has(e)){vB.set(e,!0),n&&(zg=n);try{let o;s&&(ma=new Map);let c=(0,Rt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,bs.existsSync)(c)?o=s?(0,GB.getConfigObj)():(0,BB.parseDocument)((0,bs.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=Jg;let u=[],_=s;for(let l in o){let d=o[l];if(ma.set(s?l:(0,Rt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let b=e,O;for(;!(0,bs.existsSync)(O=(0,Rt.join)(b,"node_modules",l));)if(b=(0,Rt.dirname)(b),b.length<(0,FB.getHdbBasePath)().length){O=null;break}if(O)f=await Zf(O,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Pre[l];if(!f)continue;u.push(f);let h=a(b=>(b.origin=r,tt(b)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,R=!p?.https&&p?.port;if(ku.isMainThread&&(f=await f.startOnMainThread?.({server:ct,ensureTable:h,port:R,securePort:S,resources:t,...d})||f,s&&p))for(let b of[R,S])try{if(+b&&!PB.includes(b)){let O=Xg.get(jg.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);O&&Vu.default.warn("Session affinity is not recommended and may cause memory leaks"),(O||!jf)&&(PB.push(b),Zg(b,O))}}catch(O){console.error("Error listening on socket",b,O,l)}if(t.isWorker&&(f=await f.start?.({server:ct,ensureTable:h,port:R,securePort:S,resources:t,...d})||f),zg.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,qB.handleHDBError)("Can not reference parent directories");let b=(0,Rt.join)(e,d.files).replace(/\\/g,"/"),O=b.indexOf("/*");if(O>-1&&d.files!==Jg[l]?.files&&!(0,bs.existsSync)(b.slice(0,O)))throw new Error(`The path '${b.slice(0,O)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);for(let Y of await(0,HB.default)(b,{onlyFiles:!1,objectMode:!0})){let{path:Q,dirent:F}=Y;_=!0;let w=(0,Rt.relative)(e,Q).replace(/\\/g,"/");if(d.root){let x=d.root;if(x.startsWith("/")&&(x=x.slice(1)),x.endsWith("/")&&(x=x.slice(0,-1)),x+="/",w.startsWith(x))w=w.slice(x.length);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${w}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`)}let K=(0,Rt.basename)(e),B=d.path||"/";B=B.startsWith("/")?B:B.startsWith("./")?"/"+K+B.slice(2):B==="."?"/"+K:"/"+K+"/"+B,B+=(B.endsWith("/")?"":"/")+w;try{if(F.isFile()){let x=await Mre(Q);ku.isMainThread&&await f.setupFile?.(x,B,Q,t),t.isWorker&&await f.handleFile?.(x,B,Q,t)}else ku.isMainThread&&await f.setupDirectory?.(B,Q,t),t.isWorker&&await f.handleDirectory?.(B,Q,t)}catch(x){x.message=`Could not load ${F.isFile()?"file":"directory"} '${Q}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${x.message}`,$u?.(x),((0,pa.getWorkerIndex)()===0?console:Vu.default).error(x),t.set(d.path||"/",new Yu(x)),ma.set(s?l:(0,Rt.basename)(e),x.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,Rt.basename)(e)}' due to: ${h.message}`,$u?.(h),((0,pa.getWorkerIndex)()===0?console:Vu.default).error(h),t.set(d.path||"/",new Yu(h),null,!0),ma.set(s?l:(0,Rt.basename)(e),h.message)}}if(ku.isMainThread&&!xB&&i&&(0,pa.watchDir)(e,async()=>kB()),o.extensionModule)return await J_((0,Rt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;$u?.(new Error(l)),((0,pa.getWorkerIndex)()===0?console:Vu.default).error(l),ma.set((0,Rt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,$u?.(o),t.set("",new Yu(o))}}}var bs,Rt,ku,BB,Xg,jg,HB,pa,Vu,qB,FB,Ure,GB,Mre,Wg,zg,xB,Qg,ma,Pre,Jg,PB,vB,$u,Yu,nf=Te(()=>{bs=require("fs"),Rt=require("path"),ku=require("worker_threads"),BB=require("yaml"),Xg=D(X()),jg=D(y());DC();vC();BC();lv();Q0();Z0();HB=D(require("fast-glob")),pa=D(Je()),Vu=D(G());Ip();fr();qB=D(j());is();fe();eR();FB=D(X()),Ure=D(sB());zd();OB();DB();GB=D(Ar());Kg();({readFile:Mre}=bs.promises),Wg=Xg.get(jg.CONFIG_PARAMS.COMPONENTSROOT),zg=new Map,ma=new Map;a(kB,"loadComponentDirectories");Pre={REST:Tf,rest:Tf,graphqlSchema:yp,jsResource:Cp,fastifyRoutes:wg,login:Dp,static:Cg,operationsApi:Ure,customFunctions:{},http:{},clustering:Hg,authentication:pu,mqtt:kg},Jg={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(Jg,"static",{value:{files:"web/**"}});PB=[],vB=new Map;a(vre,"setErrorReporter");a(Zf,"loadComponent");Yu=class extends Nt{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 eE=T((KEe,$B)=>{var{isMainThread:VB}=require("worker_threads"),{getTables:Bre}=(fe(),Z(Ce)),{loadComponentDirectories:Hre,loadComponent:qre}=(nf(),Z(sf)),{resetResources:Fre}=(Ga(),Z(VA)),Gre=NT(),xre=Ar(),{dirname:kre}=require("path"),{getConnection:Vre}=dt(),$re=X(),Yre=y(),tR=new Map;async function Kre(e=!1){!VB&&$re.get(Yre.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Vre();try{VB&&await Gre()}catch(s){console.error(s)}let t=Fre();Bre(),t.isWorker=e,await qre(kre(xre.getConfigFilePath()),t,"hdb",!0,tR),await Hre(tR,t);let r=[];for(let[s]of tR)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Kre,"loadRootComponents");$B.exports.loadRootComponents=Kre});var Je=T((QEe,ui)=>{"use strict";var{Worker:Wre,MessageChannel:Qre,parentPort:Js,isMainThread:oR,threadId:zre,workerData:Cn}=require("worker_threads"),{PACKAGE_ROOT:Jre}=y(),{join:QB,isAbsolute:Xre,extname:jre}=require("path"),{server:zB}=(fr(),Z(di)),{watch:Zre,readdir:ese}=require("fs/promises"),{totalmem:YB}=require("os"),sE=y(),tse=X(),Ln=G(),{randomBytes:rse}=require("crypto"),{_assignPackageExport:sse}=require("../index"),nse=y(),KB=1024*1024,ci=[],es=[],ise=50,aR=1e4,ose="restart",JB="request_thread_info",XB="resource_report",jB="thread_info",ZB="added-port",ase="ack",rR;sse("threads",es);ui.exports={startWorker:sR,restartWorkers:uR,shutdownWorkers:dse,workers:ci,setMonitorListener:gse,onMessageFromWorkers:fse,onMessageByType:iH,broadcast:hse,broadcastWithAcknowledgement:pse,setChildListenerByType:_se,getWorkerIndex:eH,getWorkerCount:tH,getTicketKeys:rH,setMainIsWorker:use,setTerminateTimeout:cse,restartNumber:Cn?.restartNumber||1};es.onMessageByType=iH;es.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=es.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var cR;function cse(e){aR=e}a(cse,"setTerminateTimeout");function eH(){return Cn?Cn.workerIndex:cR?0:void 0}a(eH,"getWorkerIndex");function tH(){return Cn?Cn.workerCount:cR?1:void 0}a(tH,"getWorkerCount");function use(e){cR=e}a(use,"setMainIsWorker");var tE;function rH(){return tE||(tE=oR?rse(48):Cn.ticketKeys,tE)}a(rH,"getTicketKeys");Object.defineProperty(zB,"workerIndex",{get(){return eH()}});Object.defineProperty(zB,"workerCount",{get(){return tH()}});var sH={[JB](e,t){Sse(t)},[XB](e,t){Tse(t,e)}};function sR(e,t={}){let r=process.constrainedMemory?.()||YB();r=Math.min(r,YB(),2e4*KB);let s=Math.max(Math.floor(r/KB/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of es){let _=new Qre;_.existingPort=u,i.push(_),o.push(_.port2)}jre(e)||(e+=".js");let c=new Wre(Xre(e)?e:QB(Jre,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},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:ui.exports.restartNumber,ticketKeys:rH()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:ZB,port:u,threadId:c.threadId},[u]);return nE(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>sR(e,t),c.on("error",u=>{console.error("Worker error:",u),Ln.error("Worker error:",u)}),c.on("exit",u=>{ci.splice(ci.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<ise?(t.unexpectedRestarts=c.unexpectedRestarts+1,sR(e,t)):Ln.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{sH[u.type]?.(u,c)}),ci.push(c),Ase(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(sR,"startWorker");var lse=[sE.THREAD_TYPES.HTTP];async function uR(e=null,t=2,r=!0){if(oR){if(r){let{loadRootComponents:o}=eE();await o()}ui.exports.restartNumber++,t<1&&(t=t*ci.length);let s=[],n=[];for(let o of ci.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Ln.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:ui.exports.restartNumber,type:sE.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=lse.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),aR*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===nse.ITC_EVENT_TYPES.CHILD_STARTED&&(Ln.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");Ln.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=$d();r&&(e==="http"||!e)&&tse.get(sE.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Js.postMessage({type:ose,workerType:e})}a(uR,"restartWorkers");function _se(e,t){sH[e]=t}a(_se,"setChildListenerByType");function dse(e){return uR(e,1/0,!1)}a(dse,"shutdownWorkers");var nH=[];function fse(e){nH.push(e)}a(fse,"onMessageFromWorkers");var nR=new Map;function iH(e,t){let r=nR.get(e);r||nR.set(e,r=[]),r.push(t)}a(iH,"onMessageByType");var Ese=10;async function hse(e){let t=0;for(let r of es)try{r.postMessage(e),t++>Ese&&(t=0,await new Promise(setImmediate))}catch(s){Ln.error("Unable to send message to worker",s)}}a(hse,"broadcast");var rE=new Map,mse=1;function pse(e){return new Promise(t=>{let r=0;for(let s of es)try{let n=mse++,i=a(()=>{rE.delete(n),--r===0&&t(),s!==Js&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,rE.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of rE)o.port===s&&o()})),s.postMessage(e),r++}catch(n){Ln.error("Unable to send message to worker",n)}r===0&&t()})}a(pse,"broadcastWithAcknowledgement");function Sse(e){e.postMessage({type:jB,workers:oH()})}a(Sse,"sendThreadInfo");function oH(){let e=Date.now();return ci.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(oH,"getChildWorkerInfo");function Tse(e,t){e.resources=t,e.resources.updated=Date.now()}a(Tse,"recordResourceReport");var iR;function gse(e){iR=e}a(gse,"setMonitorListener");var Rse=1e3,WB=!1;function Ase(){WB||(WB=!0,setInterval(()=>{for(let e of ci){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}iR&&iR()},Rse).unref())}a(Ase,"startMonitoring");var Ose=1e3;if(Js){nE(Js);for(let e=0,t=Cn.addPorts.length;e<t;e++){let r=Cn.addPorts[e];r.threadId=Cn.addThreadIds[e],nE(r)}setInterval(()=>{let e=process.memoryUsage();Js.postMessage({type:XB,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Ose).unref(),rR=a(()=>new Promise((e,t)=>{Js.on("message",r),Js.postMessage({type:JB});function r(s){s.type===jB&&(Js.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else rR=oH;ui.exports.getThreadInfo=rR;function nE(e,t){es.push(e),e.on("message",r=>{if(r.type===ZB)r.port.threadId=r.threadId,nE(r.port);else if(r.type===ase){let s=rE.get(r.id);s&&s()}else{for(let n of nH)n(r,e);let s=nR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){Ln.error(i)}}}).on("close",()=>{es.splice(es.indexOf(e),1)}).on("exit",()=>{es.splice(es.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(nE,"addPort");if(oR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await ese(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(QB(s,i.name));try{for await(let{filename:i}of Zre(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await uR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");ui.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Js.on("message",async e=>{let{type:t}=e;t===sE.ITC_EVENT_TYPES.SHUTDOWN&&(ui.exports.restartNumber=e.restartNumber,Js.unref(),setTimeout(()=>{Ln.warn("Thread did not voluntarily terminate",zre),process.exit(0)},aR).unref())})});var mH=T(zu=>{"use strict";var{isMainThread:Nse,parentPort:Qu,threadId:Ku}=require("worker_threads"),{Socket:bse,createServer:yse}=require("net"),{createServer:Ise,IncomingMessage:wse}=require("http"),{createServer:Cse}=require("https"),{readFileSync:Sa}=require("fs"),Xs=G(),At=X(),Dn=y(),{server:oE}=(fr(),Z(di)),{WebSocketServer:Lse}=require("ws"),{createServer:Dse}=require("tls"),{getTicketKeys:Use,restartNumber:Mse}=Je(),{Headers:lH}=(Yd(),Z(LM)),{recordAction:Wu,recordActionBinary:Pse}=(_n(),Z(Cc)),{Request:_H,node_request_key:JEe,createReuseportFd:aH}=(Kg(),Z(MB));if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){Mse<=1&&Xs.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:XEe,CONFIG_PARAMS:vse}=Dn;At.initSync();var Bse=At.get(vse.HTTP_SESSIONAFFINITY),js={};zu.registerServer=hR;zu.httpServer=mR;zu.deliverSocket=ER;zu.startServers=dH;oE.http=mR;oE.request=Gse;oE.socket=xse;oE.ws=kse;var lR=[],_R=[],Hse,to={},iE={},qse=[],dR=[];function dH(){return eE().loadRootComponents(!0).then(()=>{Qu?.on("message",t=>{let{port:r,fd:s,data:n}=t;if(s)ER(s,r,n);else if(t.requestId)Fse(t);else if(t.type===Dn.ITC_EVENT_TYPES.SHUTDOWN){Xs.trace("received shutdown request",Ku);for(let i in js){let o=js[i],c;o.closeIdleConnections&&(setInterval(()=>{o.closeIdleConnections()},25).unref(),setTimeout(()=>{o.closeAllConnections(),Xs.info("Closed all http connections",i,Ku)},4e3).unref()),o.close?.(()=>{clearInterval(c),setTimeout(()=>{console.log("forced close server",i,Ku),o.cantCleanupProperly||Xs.warn("Had to forcefully exit the thread",Ku),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(aH&&!Bse)for(let t in js){let r=js[t],s;try{s=aH(+t,"::")}catch(n){console.error(`Unable to bind to port ${t}`,n);continue}e.push(new Promise((n,i)=>{r.listen({fd:s},()=>{n(),Xs.trace("Listening on port "+t,Ku)}).on("error",i)}))}Promise.all(e).then(()=>{Qu?.postMessage({type:Dn.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(dH,"startServers");Nse||dH();function ER(e,t,r){let s=e?.read?e:new bse({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=js[t];if(n.isSecure&&(s.startTime=performance.now()),n)typeof n=="function"?n(s):n.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=js[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(Xs.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(ER,"deliverSocket");var cH=new Map;function Fse(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=cH.get(n),r){case"connection":i=ER(void 0,t),cH.set(n,i),i.write=(c,u,_)=>(Qu.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(Qu.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Qu.postMessage({requestId:n,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(s,"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(Fse,"proxyRequest");function hR(e,t){+t||(t=parseInt(At.get(Dn.CONFIG_PARAMS.HTTP_PORT),10));let r=js[t];if(r){let s=r.lastServer||r;s.off("unhandled",uH),s.on("unhandled",(n,i)=>{e.cantCleanupProperly&&(r.cantCleanupProperly=!0),e.emit("request",n,i)}),r.lastServer=e}else js[t]=e;e.on("unhandled",uH)}a(hR,"registerServer");function fH(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=[],At.get(Dn.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:At.get(Dn.CONFIG_PARAMS.HTTP_PORT),secure:At.get(Dn.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),At.get(Dn.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:At.get(Dn.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),t}a(fH,"getPorts");function mR(e,t){for(let{port:r,secure:s}of fH(t))EH(r,s,t?.isOperationsServer),typeof e=="function"?dR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):hR(e,r),iE[r]=fR(dR,r),Hse=fR(qse,r)}a(mR,"httpServer");function EH(e,t,r){if(!to[e]){let s=r?"operationsApi_network":"http",n={keepAliveTimeout:At.get(s+"_keepAliveTimeout"),headersTimeout:At.get(s+"_headersTimeout"),requestTimeout:At.get(s+"_timeout")};if(t){s=r?"operationsApi_":"";let i=At.get(s+"tls_privateKey"),o=At.get(s+"tls_certificate"),c=At.get(s+"tls_certificateAuthority");Object.assign(n,{key:Sa(i),cert:Sa(o)+(c?`
29
29
 
30
- `+Sa(c):""),ticketKeys:Use()})}to[e]=(t?Cse:Ise)(n,async(i,o)=>{try{let u=performance.now(),_=new lH(i,o);r&&(_.isOperationsServer=!0);let l=await iE[e](_);if(!l){if(_._nodeResponse.statusCode)return;l=EH(_)}if(l.headers?.set?.("Server","HarperDB"),l.status===-1){for(let b of l.headers||[])o.setHeader(b[0],b[1]);return i.baseRequest=_,o.baseResponse=l,to[e].emit("unhandled",i,o)}let d=l.status||200,f=performance.now(),E=f-u,h=l.body,p;if(!l.handlesHeaders){let b=l.headers||new uH;if(h?h.length>=0&&(typeof h=="string"?b.set("Content-Length",Buffer.byteLength(h)):b.set("Content-Length",h.length),p=!0):(b.set("Content-Length","0"),p=!0),b.append){let O=`hdb;dur=${E.toFixed(2)}`;l.wasCacheMiss&&(O+=", miss"),b.append("Server-Timing",O,!0)}o.writeHead(d,b&&(b[Symbol.iterator]?Array.from(b):b)),p&&o.end(h)}let S=_.handlerPath,R=_.method;if(Wu(E,"duration",S,R,l.wasCacheMiss==null?void 0:l.wasCacheMiss?"cache-miss":"cache-hit"),Pse(d<400,"success",S,R),!p)if(h?.pipe){h.pipe(o),h.destroy&&o.on("close",()=>{h.destroy()});let b=0;h.on("data",O=>{b+=O.length}),h.on("end",()=>{Wu(performance.now()-f,"transfer",S,R),Wu(b,"bytes-sent",S,R)})}else h?.then?h.then(b=>{o.end(b)},c):o.end(h)}catch(u){c(u)}function c(u){let _=u.headers;o.writeHead(u.statusCode||500,_&&(_[Symbol.iterator]?Array.from(_):_)),o.end(u.toString()),u.statusCode?u.statusCode===500?Js.warn(u):Js.info(u):Js.error(u)}a(c,"onError")}),t&&(to[e].on("secureConnection",i=>{i._parent.startTime&&Wu(performance.now()-i._parent.startTime,"tls-handshake",e),Wu(i.isSessionReused(),"tls-reused",e)}),to[e].isSecure=!0),hR(to[e],e)}return to[e]}a(fH,"getHTTPServer");function fR(e,t){let r=EH;for(let s=e.length;s>0;){let{listener:n,port:i}=e[--s];if(i===t||i==="all"){let o=r;r=a(c=>n(c,o),"next_callback")}}return r}a(fR,"makeCallbackChain");function EH(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new uH}}a(EH,"unhandled");function Gse(e,t){mR(e,{requestOnly:!0,...t})}a(Gse,"onRequest");function xse(e,t){if(t.securePort){let r=Rt.get("tls_privateKey"),s=Rt.get("tls_certificate"),n=Rt.get("tls_certificateAuthority"),i=Dse({key:Sa(r),cert:Sa(s)+(n?`
30
+ `+Sa(c):""),ticketKeys:Use()})}to[e]=(t?Cse:Ise)(n,async(i,o)=>{try{let u=performance.now(),_=new _H(i,o);r&&(_.isOperationsServer=!0);let l=await iE[e](_);if(!l){if(_._nodeResponse.statusCode)return;l=hH(_)}if(l.headers?.set?.("Server","HarperDB"),l.status===-1){for(let b of l.headers||[])o.setHeader(b[0],b[1]);return i.baseRequest=_,o.baseResponse=l,to[e].emit("unhandled",i,o)}let d=l.status||200,f=performance.now(),E=f-u,h=l.body,p;if(!l.handlesHeaders){let b=l.headers||new lH;if(h?h.length>=0&&(typeof h=="string"?b.set("Content-Length",Buffer.byteLength(h)):b.set("Content-Length",h.length),p=!0):(b.set("Content-Length","0"),p=!0),b.append){let O=`hdb;dur=${E.toFixed(2)}`;l.wasCacheMiss&&(O+=", miss"),b.append("Server-Timing",O,!0)}o.writeHead(d,b&&(b[Symbol.iterator]?Array.from(b):b)),p&&o.end(h)}let S=_.handlerPath,R=_.method;if(Wu(E,"duration",S,R,l.wasCacheMiss==null?void 0:l.wasCacheMiss?"cache-miss":"cache-hit"),Pse(d<400,"success",S,R),!p)if(h?.pipe){h.pipe(o),h.destroy&&o.on("close",()=>{h.destroy()});let b=0;h.on("data",O=>{b+=O.length}),h.on("end",()=>{Wu(performance.now()-f,"transfer",S,R),Wu(b,"bytes-sent",S,R)})}else h?.then?h.then(b=>{o.end(b)},c):o.end(h)}catch(u){c(u)}function c(u){let _=u.headers;o.writeHead(u.statusCode||500,_&&(_[Symbol.iterator]?Array.from(_):_)),o.end(u.toString()),u.statusCode?u.statusCode===500?Xs.warn(u):Xs.info(u):Xs.error(u)}a(c,"onError")}),t&&(to[e].on("secureConnection",i=>{i._parent.startTime&&Wu(performance.now()-i._parent.startTime,"tls-handshake",e),Wu(i.isSessionReused(),"tls-reused",e)}),to[e].isSecure=!0),hR(to[e],e)}return to[e]}a(EH,"getHTTPServer");function fR(e,t){let r=hH;for(let s=e.length;s>0;){let{listener:n,port:i}=e[--s];if(i===t||i==="all"){let o=r;r=a(c=>n(c,o),"next_callback")}}return r}a(fR,"makeCallbackChain");function hH(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new lH}}a(hH,"unhandled");function Gse(e,t){mR(e,{requestOnly:!0,...t})}a(Gse,"onRequest");function xse(e,t){if(t.securePort){let r=At.get("tls_privateKey"),s=At.get("tls_certificate"),n=At.get("tls_certificateAuthority"),i=Dse({key:Sa(r),cert:Sa(s)+(n?`
31
31
 
32
- `+Sa(n):"")},e);Xs[t.securePort]=i}if(t.port){let r=yse(e);Xs[t.port]=r}}a(xse,"onSocket");Object.defineProperty(wse.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 kse(e,t){for(let{port:r,secure:s}of dH(t)){_R[r]||(_R[r]=new Lse({server:fH(r,s)}),_R[r].on("connection",async(i,o)=>{try{let c=new lH(o);c.isWebSocket=!0;let u=iE[r](c),_=o.headers["sec-websocket-protocol"]||"";for(let l=0;l<lR.length;l++){let d=lR[l];if(d.protocol){if(d.protocol===_){d.listener(i,c,u);break}}else d.listener(i,c,u)}}catch(c){Js.warn("Error handling WebSocket connection",c)}}));let n=t?.subProtocol||"";lR.push({listener:e,protocol:n}),iE[r]=fR(dR,r)}}a(kse,"onWebSocket");function cH(e,t){t.writeHead(404),t.end(`Not found
33
- `)}a(cH,"defaultNotFound")});var AH={};ve(AH,{startHTTPThreads:()=>$se,startSocketServer:()=>Zg,updateWorkerIdleness:()=>RH});async function $se(e=2,t){if(t)SR(0,1,!0);else{let{loadRootComponents:r}=eE();if(e===0)return(0,li.setMainIsWorker)(!0),await hH().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)SR(r,e);return Promise.all(gH)}function SR(e,t=1,r){if(pR++,(0,li.startWorker)("server/threads/threadServer.js",{name:uE.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===uE.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});gH.push(n),await n,Ta.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=cE.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Ta.indexOf(s);o>-1&&Ta.splice(o,1)}if(a(i,"removeWorker"),ga){let o=ga;ga=[];for(let c of o)TH[c.localPort](null,c)}}}),r){let s=setInterval(()=>{TR?TR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,li.shutdownWorkers)(),pR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function Zg(e=0,t){if(typeof e=="string")try{(0,lE.existsSync)(e)&&(0,lE.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Yse:r=Kse(t):r=gR;let s=(0,Ra.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=TH[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),TR=!0,r(o,(c,u)=>{if(!c){if(mH){let l=o._socket||new Ra.Socket({handle:o,writable:!0,readable:!0});mH.deliverSocket(l,e,u),l.resume()}else pR>0?(ga.length===0&&setTimeout(()=>{ga.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,ga.push(o)):(console.log("start up a dynamic thread to handle request"),SR(0));Nr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new Ra.Socket({handle:o,writable:!0,readable:!0});zse(l,c,e)}Nr(!0,"socket-routed")})};let n=kc();SH.info(`HarperDB ${n.version} Server running on port ${e}`)}return s.on("error",n=>{console.error("Error in socket server",n)}),process.env._UNREF_SERVER&&s.unref(),s}function gR(e,t){let r,s=0;for(let n of Ta){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=aE)return aE=i,t(r);s=i}aE=0,t(r)}function Yse(e,t){let r={};e.getpeername(r);let s=r.address,n=Aa.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);gR(e,o=>{Aa.set(s,{worker:o,lastUsed:i}),t(o)})}function Kse(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new Ra.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=Aa.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);gR(s,d=>{Aa.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function RH(){aE=0;for(let e of Ta)e.expectedIdle=e.recentELU.idle+Wse,e.requests=1;Ta.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function zse(e,t,r){let s=Qse++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),cE.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),cE.delete(s)),n.event=="destroy"&&(e.destroy(),cE.delete(s))})}var li,Ra,uE,SH,lE,Vse,Ta,ga,TH,mH,pR,gH,TR,aE,pH,Aa,Wse,cE,Qse,eR=Te(()=>{li=D(Je()),Ra=require("net"),uE=D(y()),SH=D(G()),lE=require("fs");_n();({isMainThread:Vse}=require("worker_threads")),Ta=[],ga=[],TH=[],pR=0,gH=[];Vse&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a($se,"startHTTPThreads");a(SR,"startHTTPWorker");a(Zg,"startSocketServer");aE=0;a(gR,"findMostIdleWorker");pH=36e5,Aa=new Map;a(Yse,"findByRemoteAddressAffinity");a(Kse,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Aa)r.lastUsed+pH<e&&Aa.delete(t)},pH).unref();Wse=1e3;a(RH,"updateWorkerIdleness");(0,li.setMonitorListener)(RH);cE=new Map,Qse=1;a(zse,"proxySocket")});hE();var{startHTTPThreads:Jse,startSocketServer:OH}=(eR(),Z(AH));Jse(0,!0);OH(9925);OH(9926);
32
+ `+Sa(n):"")},e);js[t.securePort]=i}if(t.port){let r=yse(e);js[t.port]=r}}a(xse,"onSocket");Object.defineProperty(wse.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 kse(e,t){for(let{port:r,secure:s}of fH(t)){_R[r]||(_R[r]=new Lse({server:EH(r,s)}),_R[r].on("connection",async(i,o)=>{try{let c=new _H(o);c.isWebSocket=!0;let u=iE[r](c),_=o.headers["sec-websocket-protocol"]||"";for(let l=0;l<lR.length;l++){let d=lR[l];if(d.protocol){if(d.protocol===_){d.listener(i,c,u);break}}else d.listener(i,c,u)}}catch(c){Xs.warn("Error handling WebSocket connection",c)}}));let n=t?.subProtocol||"";lR.push({listener:e,protocol:n}),iE[r]=fR(dR,r)}}a(kse,"onWebSocket");function uH(e,t){t.writeHead(404),t.end(`Not found
33
+ `)}a(uH,"defaultNotFound")});var OH={};ve(OH,{startHTTPThreads:()=>$se,startSocketServer:()=>Zg,updateWorkerIdleness:()=>AH});async function $se(e=2,t){if(t)SR(0,1,!0);else{let{loadRootComponents:r}=eE();if(e===0)return(0,li.setMainIsWorker)(!0),await mH().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)SR(r,e);return Promise.all(RH)}function SR(e,t=1,r){if(pR++,(0,li.startWorker)("server/threads/threadServer.js",{name:uE.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===uE.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});RH.push(n),await n,Ta.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=cE.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Ta.indexOf(s);o>-1&&Ta.splice(o,1)}if(a(i,"removeWorker"),ga){let o=ga;ga=[];for(let c of o)gH[c.localPort](null,c)}}}),r){let s=setInterval(()=>{TR?TR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,li.shutdownWorkers)(),pR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function Zg(e=0,t){if(typeof e=="string")try{(0,lE.existsSync)(e)&&(0,lE.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Yse:r=Kse(t):r=gR;let s=(0,Ra.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=gH[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),TR=!0,r(o,(c,u)=>{if(!c){if(pH){let l=o._socket||new Ra.Socket({handle:o,writable:!0,readable:!0});pH.deliverSocket(l,e,u),l.resume()}else pR>0?(ga.length===0&&setTimeout(()=>{ga.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,ga.push(o)):(console.log("start up a dynamic thread to handle request"),SR(0));br(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new Ra.Socket({handle:o,writable:!0,readable:!0});zse(l,c,e)}br(!0,"socket-routed")})};let n=kc();TH.info(`HarperDB ${n.version} Server running on port ${e}`)}return s.on("error",n=>{console.error("Error in socket server",n)}),process.env._UNREF_SERVER&&s.unref(),s}function gR(e,t){let r,s=0;for(let n of Ta){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=aE)return aE=i,t(r);s=i}aE=0,t(r)}function Yse(e,t){let r={};e.getpeername(r);let s=r.address,n=Aa.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);gR(e,o=>{Aa.set(s,{worker:o,lastUsed:i}),t(o)})}function Kse(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new Ra.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=Aa.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);gR(s,d=>{Aa.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function AH(){aE=0;for(let e of Ta)e.expectedIdle=e.recentELU.idle+Wse,e.requests=1;Ta.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function zse(e,t,r){let s=Qse++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),cE.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),cE.delete(s)),n.event=="destroy"&&(e.destroy(),cE.delete(s))})}var li,Ra,uE,TH,lE,Vse,Ta,ga,gH,pH,pR,RH,TR,aE,SH,Aa,Wse,cE,Qse,eR=Te(()=>{li=D(Je()),Ra=require("net"),uE=D(y()),TH=D(G()),lE=require("fs");_n();({isMainThread:Vse}=require("worker_threads")),Ta=[],ga=[],gH=[],pR=0,RH=[];Vse&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a($se,"startHTTPThreads");a(SR,"startHTTPWorker");a(Zg,"startSocketServer");aE=0;a(gR,"findMostIdleWorker");SH=36e5,Aa=new Map;a(Yse,"findByRemoteAddressAffinity");a(Kse,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Aa)r.lastUsed+SH<e&&Aa.delete(t)},SH).unref();Wse=1e3;a(AH,"updateWorkerIdleness");(0,li.setMonitorListener)(AH);cE=new Map,Qse=1;a(zse,"proxySocket")});hE();var{startHTTPThreads:Jse,startSocketServer:NH}=(eR(),Z(OH));Jse(0,!0);NH(9925);NH(9926);